Compare commits
34 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
fc714e02e6 | ||
|
|
85b6d9decc | ||
|
|
9a78bf3066 | ||
|
|
1c53f05e4f | ||
|
|
1e4883c577 | ||
|
|
ca08ce57b6 | ||
|
|
7f3b3d06af | ||
|
|
3d427997ea | ||
|
|
65237ed106 | ||
|
|
cb12956309 | ||
|
|
cc2e9f97c4 | ||
|
|
81ddf5366c | ||
|
|
8219ffc416 | ||
|
|
85d62e6519 | ||
|
|
341aa92ecb | ||
|
|
dcb8ded987 | ||
|
|
569390ea72 | ||
|
|
4590226bca | ||
|
|
d8ef54392b | ||
|
|
41087b14c6 | ||
|
|
5ac40f5b11 | ||
|
|
fda6077b20 | ||
|
|
c51f9869b2 | ||
|
|
938832505b | ||
|
|
b107fb5809 | ||
|
|
30b60a0d31 | ||
|
|
e463635cc0 | ||
|
|
aa0aad4300 | ||
|
|
bebca634de | ||
|
|
92a6e1130c | ||
|
|
883354b263 | ||
|
|
6862f89d1a | ||
|
|
888b674f05 | ||
|
|
e5a0e5aa9b |
@@ -1,7 +0,0 @@
|
||||
# Date: Fri, 3 May 2024 19:40:36 -0700
|
||||
# Reformatted using Ruff
|
||||
089c8dd50cbf22e75721ecd2c0e0acfd3deca7f3
|
||||
|
||||
# Date: Fri, 13 Sep 2024 00:28:00 -0700
|
||||
# ci(ruff)!: update ruff linter config, refactor to comply
|
||||
b6e216760557c5507b12f210e1e48c531f49ffa3
|
||||
1
.github/FUNDING.yml
vendored
@@ -1 +0,0 @@
|
||||
patreon: cyanvoxel
|
||||
4
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
@@ -8,7 +8,7 @@ body:
|
||||
value: |
|
||||
*Please add an appropriate title for this issue.*
|
||||
|
||||
Before reporting, read the [documentation](https://github.com/TagStudioDev/TagStudio/blob/main/docs/index.md) and search existing [issues](https://github.com/TagStudioDev/TagStudio/issues).
|
||||
Before reporting, read the [documentation](https://github.com/TagStudioDev/TagStudio/blob/main/doc/index.md) and search existing [issues](https://github.com/TagStudioDev/TagStudio/issues).
|
||||
Validate that you are using an up-to-date version[^1], your issue might already be fixed!
|
||||
Questions, guidance, and usage goes in [discussions](https://github.com/TagStudioDev/TagStudio/discussions). Invalid issues will be closed.
|
||||
|
||||
@@ -20,7 +20,7 @@ body:
|
||||
options:
|
||||
- label: I am using an up-to-date version.
|
||||
required: true
|
||||
- label: I have read the [documentation](https://github.com/TagStudioDev/TagStudio/blob/main/docs/index.md).
|
||||
- label: I have read the [documentation](https://github.com/TagStudioDev/TagStudio/blob/main/doc/index.md).
|
||||
required: true
|
||||
- label: I have searched existing [issues](https://github.com/TagStudioDev/TagStudio/issues).
|
||||
required: true
|
||||
|
||||
4
.github/ISSUE_TEMPLATE/feature_request.yml
vendored
@@ -8,7 +8,7 @@ body:
|
||||
value: |
|
||||
*Please add an appropriate title for this feature request.*
|
||||
|
||||
Before suggesting, read the [documentation](https://github.com/TagStudioDev/TagStudio/blob/main/docs/index.md) and search existing [issues](https://github.com/TagStudioDev/TagStudio/issues).
|
||||
Before suggesting, read the [documentation](https://github.com/TagStudioDev/TagStudio/blob/main/doc/index.md) and search existing [issues](https://github.com/TagStudioDev/TagStudio/issues).
|
||||
Validate that you are using an up-to-date version[^1], your feature might already be implemented!
|
||||
Questions, guidance, and usage goes in [discussions](https://github.com/TagStudioDev/TagStudio/discussions). Invalid issues will be closed.
|
||||
|
||||
@@ -20,7 +20,7 @@ body:
|
||||
options:
|
||||
- label: I am using an up-to-date version.
|
||||
required: true
|
||||
- label: I have read the [documentation](https://github.com/TagStudioDev/TagStudio/blob/main/docs/index.md).
|
||||
- label: I have read the [documentation](https://github.com/TagStudioDev/TagStudio/blob/main/doc/index.md).
|
||||
required: true
|
||||
- label: I have searched existing [issues](https://github.com/TagStudioDev/TagStudio/issues).
|
||||
required: true
|
||||
|
||||
30
.github/PULL_REQUEST_TEMPLATE.md
vendored
@@ -1,30 +0,0 @@
|
||||
### Summary
|
||||
|
||||
<!--
|
||||
^^^ Summarize the changes done and why they were done above.
|
||||
|
||||
By submitting this pull request, you certify that you have read the
|
||||
[CONTRIBUTING.md](https://github.com/TagStudioDev/TagStudio/blob/main/CONTRIBUTING.md).
|
||||
|
||||
IMPORTANT FOR FEATURES: Please verify that a feature request or some other form
|
||||
of communication with maintainers was already conducted in terms of approving.
|
||||
|
||||
Thank you for your eagerness to contribute!
|
||||
-->
|
||||
|
||||
### Tasks Completed
|
||||
|
||||
<!-- No requirements, just context for reviewers. -->
|
||||
|
||||
- Platforms Tested:
|
||||
- [ ] Windows x86
|
||||
- [ ] Windows ARM
|
||||
- [ ] macOS x86
|
||||
- [ ] macOS ARM
|
||||
- [ ] Linux x86
|
||||
- [ ] Linux ARM
|
||||
<!-- If an unspecified platform was tested, please add it here -->
|
||||
- Tested For:
|
||||
- [ ] Basic functionality
|
||||
- [ ] PyInstaller executable <!-- Not necessarily required, but appreciated! -->
|
||||
<!-- If other important criteria was tested for, please add it here -->
|
||||
51
.github/workflows/apprun.yaml
vendored
Normal file
@@ -0,0 +1,51 @@
|
||||
name: PySide App Test
|
||||
|
||||
on: [ push, pull_request ]
|
||||
|
||||
jobs:
|
||||
test:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v5
|
||||
with:
|
||||
python-version: '3.12'
|
||||
cache: 'pip'
|
||||
|
||||
- name: Install system dependencies
|
||||
run: |
|
||||
# dont run update, it is slow
|
||||
# sudo apt-get update
|
||||
sudo apt-get install -y --no-install-recommends \
|
||||
libxkbcommon-x11-0 \
|
||||
x11-utils \
|
||||
libyaml-dev \
|
||||
libegl1-mesa \
|
||||
libxcb-icccm4 \
|
||||
libxcb-image0 \
|
||||
libxcb-keysyms1 \
|
||||
libxcb-randr0 \
|
||||
libxcb-render-util0 \
|
||||
libxcb-xinerama0 \
|
||||
libopengl0 \
|
||||
libxcb-cursor0 \
|
||||
libpulse0
|
||||
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
pip install -Ur requirements.txt
|
||||
|
||||
- name: Run TagStudio app and check exit code
|
||||
run: |
|
||||
xvfb-run --server-args="-screen 0, 1920x1200x24 -ac +extension GLX +render -noreset" python tagstudio/tag_studio.py --ci -o /tmp/
|
||||
exit_code=$?
|
||||
if [ $exit_code -eq 0 ]; then
|
||||
echo "TagStudio ran successfully"
|
||||
else
|
||||
echo "TagStudio failed with exit code $exit_code"
|
||||
exit 1
|
||||
fi
|
||||
5
.github/workflows/mypy.yaml
vendored
@@ -23,9 +23,8 @@ jobs:
|
||||
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
python -m pip install --upgrade uv
|
||||
uv pip install --system -r requirements.txt
|
||||
uv pip install --system mypy==1.11.2
|
||||
pip install -r requirements.txt
|
||||
pip install mypy==1.10.0
|
||||
mkdir tagstudio/.mypy_cache
|
||||
|
||||
- uses: tsuyoshicho/action-mypy@v4
|
||||
|
||||
38
.github/workflows/publish_docs.yaml
vendored
@@ -1,38 +0,0 @@
|
||||
name: Publish Docs
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
paths:
|
||||
- 'docs/**'
|
||||
- 'mkdocs.yml'
|
||||
- 'CHANGELOG.md'
|
||||
- '.github/workflows/publish_docs.yaml'
|
||||
|
||||
permissions:
|
||||
contents: write
|
||||
|
||||
concurrency:
|
||||
group: publish-docs
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
deploy:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/setup-python@v5
|
||||
with:
|
||||
python-version: 3.x
|
||||
- run: echo "cache_id=$(date --utc '+%V')" >> $GITHUB_ENV
|
||||
- uses: actions/cache@v4
|
||||
with:
|
||||
key: mkdocs-material-${{ env.cache_id }}
|
||||
path: .cache
|
||||
restore-keys: |
|
||||
mkdocs-material-
|
||||
- run: pip install mkdocs-material mkdocs-material[imaging]
|
||||
- run: mkdocs gh-deploy --force
|
||||
|
||||
|
||||
67
.github/workflows/pytest.yaml
vendored
@@ -1,75 +1,22 @@
|
||||
name: pytest
|
||||
|
||||
on: [ push, pull_request ]
|
||||
on: [push, pull_request]
|
||||
|
||||
jobs:
|
||||
pytest:
|
||||
name: Run tests
|
||||
runs-on: ubuntu-24.04
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: Checkout repo
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Setup Python
|
||||
uses: actions/setup-python@v5
|
||||
with:
|
||||
python-version: '3.12'
|
||||
cache: 'pip'
|
||||
|
||||
- name: Install system dependencies
|
||||
run: |
|
||||
# dont run update, it is slow
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y --no-install-recommends \
|
||||
libxkbcommon-x11-0 \
|
||||
x11-utils \
|
||||
libyaml-dev \
|
||||
libgl1 \
|
||||
libegl1 \
|
||||
libxcb-icccm4 \
|
||||
libxcb-image0 \
|
||||
libxcb-keysyms1 \
|
||||
libxcb-randr0 \
|
||||
libxcb-render-util0 \
|
||||
libxcb-xinerama0 \
|
||||
libopengl0 \
|
||||
libxcb-cursor0 \
|
||||
libpulse0
|
||||
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
python -m pip install --upgrade uv
|
||||
uv pip install --system -r requirements.txt
|
||||
uv pip install --system -r requirements-dev.txt
|
||||
python -m pip install --upgrade pip
|
||||
pip install -r requirements.txt
|
||||
pip install -r requirements-dev.txt
|
||||
|
||||
- name: Run pytest
|
||||
- name: Run tests
|
||||
run: |
|
||||
xvfb-run pytest --cov-report xml --cov=tagstudio
|
||||
|
||||
- name: Store coverage
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: 'coverage'
|
||||
path: 'coverage.xml'
|
||||
|
||||
coverage:
|
||||
name: Check Code Coverage
|
||||
runs-on: ubuntu-latest
|
||||
needs: pytest
|
||||
|
||||
steps:
|
||||
- name: Load coverage
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
name: 'coverage'
|
||||
|
||||
- name: Check Code Coverage
|
||||
uses: yedpodtrzitko/coverage@main
|
||||
with:
|
||||
thresholdAll: 0.4
|
||||
thresholdNew: 0.4
|
||||
thresholdModified: 0.4
|
||||
coverageFile: coverage.xml
|
||||
token: ${{ secrets.GITHUB_TOKEN }}
|
||||
sourceDir: tagstudio/src
|
||||
pytest tagstudio/tests/
|
||||
|
||||
4
.github/workflows/release.yml
vendored
@@ -35,9 +35,9 @@ jobs:
|
||||
macos:
|
||||
strategy:
|
||||
matrix:
|
||||
os-version: ['13', '14']
|
||||
os-version: ['12', '14']
|
||||
include:
|
||||
- os-version: '13'
|
||||
- os-version: '12'
|
||||
arch: x86_64
|
||||
- os-version: '14'
|
||||
arch: aarch64
|
||||
|
||||
13
.github/workflows/ruff.yaml
vendored
@@ -1,20 +1,11 @@
|
||||
name: Ruff
|
||||
on: [ push, pull_request ]
|
||||
jobs:
|
||||
ruff-format:
|
||||
ruff:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: chartboost/ruff-action@v1
|
||||
with:
|
||||
version: 0.6.4
|
||||
version: 0.4.2
|
||||
args: 'format --check'
|
||||
|
||||
ruff-check:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: chartboost/ruff-action@v1
|
||||
with:
|
||||
version: 0.6.4
|
||||
args: 'check'
|
||||
|
||||
30
.gitignore
vendored
@@ -55,6 +55,7 @@ coverage.xml
|
||||
.hypothesis/
|
||||
.pytest_cache/
|
||||
cover/
|
||||
tagstudio/tests/fixtures/library/*
|
||||
|
||||
# Translations
|
||||
*.mo
|
||||
@@ -88,7 +89,9 @@ profile_default/
|
||||
ipython_config.py
|
||||
|
||||
# pyenv
|
||||
.python-version
|
||||
# For a library or package, you might want to ignore these files since the code is
|
||||
# intended to run in multiple environments; otherwise, check them in:
|
||||
# .python-version
|
||||
|
||||
# pipenv
|
||||
# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
|
||||
@@ -138,9 +141,6 @@ venv.bak/
|
||||
# Rope project settings
|
||||
.ropeproject
|
||||
|
||||
# macoS
|
||||
*.DS_Store
|
||||
|
||||
# mkdocs documentation
|
||||
/site
|
||||
|
||||
@@ -163,7 +163,7 @@ cython_debug/
|
||||
# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
|
||||
# and can be added to the global gitignore or merged into this file. For a more nuclear
|
||||
# option (not recommended) you can uncomment the following to ignore the entire idea folder.
|
||||
.idea/
|
||||
#.idea/
|
||||
|
||||
### Python Patch ###
|
||||
# Poetry local configuration file - https://python-poetry.org/docs/configuration/#local-configuration
|
||||
@@ -175,10 +175,6 @@ poetry.toml
|
||||
# LSP config files
|
||||
pyrightconfig.json
|
||||
|
||||
# Syncthing
|
||||
.stfolder/
|
||||
.stignore
|
||||
|
||||
### Qt ###
|
||||
# C++ objects and libs
|
||||
*.slo
|
||||
@@ -236,11 +232,11 @@ compile_commands.json
|
||||
|
||||
### VisualStudioCode ###
|
||||
.vscode/*
|
||||
# !.vscode/settings.json
|
||||
# !.vscode/tasks.json
|
||||
# !.vscode/launch.json
|
||||
# !.vscode/extensions.json
|
||||
# !.vscode/*.code-snippets
|
||||
!.vscode/settings.json
|
||||
!.vscode/tasks.json
|
||||
!.vscode/launch.json
|
||||
!.vscode/extensions.json
|
||||
!.vscode/*.code-snippets
|
||||
|
||||
# Local History for Visual Studio Code
|
||||
.history/
|
||||
@@ -252,15 +248,11 @@ compile_commands.json
|
||||
# Ignore all local history of files
|
||||
.history
|
||||
.ionide
|
||||
# End of https://www.toptal.com/developers/gitignore/api/visualstudiocode,python,qt
|
||||
|
||||
# TagStudio
|
||||
.TagStudio
|
||||
!*/tests/**/.TagStudio
|
||||
tagstudio/tests/fixtures/library/*
|
||||
tagstudio/tests/fixtures/json_library/.TagStudio/*.sqlite
|
||||
TagStudio.ini
|
||||
*.sqlite-journal
|
||||
# End of https://www.toptal.com/developers/gitignore/api/visualstudiocode,python,qt
|
||||
|
||||
.envrc
|
||||
.direnv
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
repos:
|
||||
- repo: https://github.com/astral-sh/ruff-pre-commit
|
||||
# Ruff version.
|
||||
rev: v0.6.4
|
||||
rev: v0.4.2
|
||||
hooks:
|
||||
- id: ruff-format
|
||||
- id: ruff
|
||||
|
||||
17
.vscode/launch.json
vendored
Normal file
@@ -0,0 +1,17 @@
|
||||
{
|
||||
// Use IntelliSense to learn about possible attributes.
|
||||
// Hover to view descriptions of existing attributes.
|
||||
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
|
||||
"version": "0.2.0",
|
||||
"configurations": [
|
||||
{
|
||||
"name": "TagStudio",
|
||||
"type": "python",
|
||||
"request": "launch",
|
||||
"program": "${workspaceRoot}/tagstudio/tag_studio.py",
|
||||
"console": "integratedTerminal",
|
||||
"justMyCode": true,
|
||||
"args": []
|
||||
}
|
||||
]
|
||||
}
|
||||
204
CONTRIBUTING.md
@@ -1,38 +1,33 @@
|
||||
# Contributing to TagStudio
|
||||
|
||||
_Last Updated: January 30th, 2025_
|
||||
_Last Updated: June 10th, 2024_
|
||||
|
||||
Thank you so much for showing interest in contributing to TagStudio! Here are a set of instructions and guidelines for contributing code or documentation to the project. This document will change over time, so make sure that your contributions still line up with the requirements here before submitting a pull request.
|
||||
|
||||
## Getting Started
|
||||
|
||||
- Check the [Feature Roadmap](/docs/updates/roadmap.md) page to see what priority features there are, the [FAQ](/README.md/#faq), as well as the open [Issues](https://github.com/TagStudioDev/TagStudio/issues) and [Pull Requests](https://github.com/TagStudioDev/TagStudio/pulls).
|
||||
- If you'd like to add a feature that isn't on the feature roadmap or doesn't have an open issue, **PLEASE create a feature request** issue for it discussing your intentions so any feedback or important information can be given by the team first.
|
||||
- We don't want you wasting time developing a feature or making a change that can't/won't be added for any reason ranging from pre-existing refactors to design philosophy differences.
|
||||
- **Please don't** create pull requests that consist of large refactors, _especially_ without discussing them with us first. These end up doing more harm than good for the project by continuously delaying progress and disrupting everyone else's work.
|
||||
- If you wish to discuss TagStudio further, feel free to join the [Discord Server](https://discord.com/invite/hRNnVKhF2G)
|
||||
- Check the [Planned Features](https://github.com/TagStudioDev/TagStudio/blob/main/doc/updates/planned_features.md) page, [FAQ](/README.md/#faq), as well as the open [Issues](https://github.com/TagStudioDev/TagStudio/issues) and [Pull Requests](https://github.com/TagStudioDev/TagStudio/pulls).
|
||||
- If you'd like to add a feature that isn't on the roadmap or doesn't have an open issue, **PLEASE create a feature request** issue for it discussing your intentions so any feedback or important information can be given by the team first.
|
||||
- We don't want you wasting time developing a feature or making a change that can't/won't be added for any reason ranging from pre-existing refactors to design philosophy differences.
|
||||
|
||||
### Contribution Checklist
|
||||
|
||||
- I've read the [Feature Roadmap](/docs/updates/roadmap.md) page
|
||||
- I've read the [FAQ](/README.md/#faq), including the "[Features I Likely Won't Add/Pull](/README.md/#features-i-likely-wont-addpull)" section
|
||||
- I've checked the open [Issues](https://github.com/TagStudioDev/TagStudio/issues) and [Pull Requests](https://github.com/TagStudioDev/TagStudio/pulls)
|
||||
- **I've created a new issue for my feature/fix _before_ starting work on it**, or have at least notified others in the relevant existing issue(s) of my intention to work on it
|
||||
- I've set up my development environment including Ruff, Mypy, and PyTest
|
||||
- I've read the [Code Guidelines](#code-guidelines) and/or [Documentation Guidelines](#documentation-guidelines)
|
||||
- **_I mean it, I've found or created an issue for my feature/fix!_**
|
||||
|
||||
> [!NOTE]
|
||||
> If the fix is small and self-explanatory (i.e. a typo), then it doesn't require an issue to be opened first. Issue tracking is supposed to make our lives easier, not harder. Please use your best judgement to minimize the amount of work involved for everyone involved.
|
||||
- I've read the [Planned Features](https://github.com/TagStudioDev/TagStudio/blob/main/doc/updates/planned_features.md) page
|
||||
- I've read the [FAQ](/README.md/#faq), including the "[Features I Likely Won't Add/Pull](/README.md/#features-i-likely-wont-addpull)" section
|
||||
- I've checked the open [Issues](https://github.com/TagStudioDev/TagStudio/issues) and [Pull Requests](https://github.com/TagStudioDev/TagStudio/pulls)
|
||||
- **I've created a new issue for my feature _before_ starting work on it**, or have at least notified others in the relevant existing issue(s) of my intention to work on it
|
||||
- I've set up my development environment including Ruff and Mypy
|
||||
- I've read the [Code Guidelines](#code-guidelines) and/or [Documentation Guidelines](#documentation-guidelines)
|
||||
- **_I mean it, I've found or created a new issue for my feature!_**
|
||||
|
||||
## Creating a Development Environment
|
||||
|
||||
### Prerequisites
|
||||
|
||||
- [Python](https://www.python.org/downloads/) 3.12
|
||||
- [Ruff](https://github.com/astral-sh/ruff) (Included in `requirements-dev.txt`)
|
||||
- [Mypy](https://github.com/python/mypy) (Included in `requirements-dev.txt`)
|
||||
- [PyTest](https://docs.pytest.org) (Included in `requirements-dev.txt`)
|
||||
- [Python](https://www.python.org/downloads/) 3.12
|
||||
- [Ruff](https://github.com/astral-sh/ruff) (Included in `requirements-dev.txt`)
|
||||
- [Mypy](https://github.com/python/mypy) (Included in `requirements-dev.txt`)
|
||||
- [PyTest](https://docs.pytest.org) (Included in `requirements-dev.txt`)
|
||||
|
||||
### Creating a Python Virtual Environment
|
||||
|
||||
@@ -44,57 +39,39 @@ If you wish to launch the source version of TagStudio outside of your IDE:
|
||||
> [!TIP]
|
||||
> On Linux and macOS, you can launch the `tagstudio.sh` script to skip the following process, minus the `requirements-dev.txt` installation step. _Using the script is fine if you just want to launch the program from source._
|
||||
|
||||
1. Make sure you're using the correct Python version:
|
||||
- If the output matches `Python 3.12.x` (where the x is any number) then you're using the correct Python version and can skip to step 2. Otherwise, you can install the correct Python version from the [Python](https://www.python.org/downloads/) website, or you can use a tool like [pyenv](https://github.com/pyenv/pyenv/) to install the correct version without changes to your system:
|
||||
1. Follow pyenv's [install instructions](https://github.com/pyenv/pyenv/?tab=readme-ov-file#installation) for your system.
|
||||
2. Install the appropriate Python version with pyenv by running `pyenv install 3.12` (This will **not** mess with your existing Python installation).
|
||||
3. Navigate to the repository root folder in your terminal and run `pyenv local 3.12`.
|
||||
- You could alternatively use `pyenv shell 3.12` or `pyenv global 3.12` instead to set the Python version for the current terminal session or the entire system respectively, however using `local` is recommended.
|
||||
|
||||
2. In the root repository directory, create a python virtual environment:
|
||||
1. In the root repository directory, create a python virtual environment:
|
||||
`python3 -m venv .venv`
|
||||
3. Activate your environment:
|
||||
2. Activate your environment:
|
||||
|
||||
- Windows w/Powershell: `.venv\Scripts\Activate.ps1`
|
||||
- Windows w/Command Prompt: `.venv\Scripts\activate.bat`
|
||||
- Linux/macOS: `source .venv/bin/activate`
|
||||
Depending on your system, the regular activation script *might* not work on alternative shells. In this case, refer to the table below for supported shells:
|
||||
|Shell |Script |
|
||||
|-------:|:------------------------|
|
||||
|Bash/ZSH|`.venv/bin/activate` |
|
||||
|Fish |`.venv/bin/activate.fish`|
|
||||
|CSH/TCSH|`.venv/bin/activate.csh` |
|
||||
|PWSH |`.venv/bin/activate.ps1` |
|
||||
|
||||
- Windows w/Powershell: `.venv\Scripts\Activate.ps1`
|
||||
- Windows w/Command Prompt: `.venv\Scripts\activate.bat`
|
||||
- Linux/macOS: `source .venv/bin/activate`
|
||||
|
||||
4. Install the required packages:
|
||||
3. Install the required packages:
|
||||
|
||||
- `pip install -r requirements.txt`
|
||||
- If developing (includes Ruff and Mypy): `pip install -r requirements-dev.txt`
|
||||
- `pip install -r requirements.txt`
|
||||
- If developing (includes Ruff and Mypy): `pip install -r requirements-dev.txt`
|
||||
|
||||
_Learn more about setting up a virtual environment [here](https://docs.python.org/3/tutorial/venv.html)._
|
||||
|
||||
### Manually Launching (Outside of an IDE)
|
||||
|
||||
If you encounter errors about the Python version, or seemingly vague script errors, [pyenv](https://github.com/pyenv/pyenv/) may solve your issue. See step 1 of [Creating a Python Virtual Environment](#creating-a-python-virtual-environment).
|
||||
- **Windows** (start_win.bat)
|
||||
|
||||
- **Windows** (start_win.bat)
|
||||
- To launch TagStudio, launch the `start_win.bat` file. You can modify this .bat file or create a shortcut and add one or more additional arguments if desired.
|
||||
|
||||
- To launch TagStudio, launch the `start_win.bat` file. You can modify this .bat file or create a shortcut and add one or more additional arguments if desired.
|
||||
- **Linux/macOS** (TagStudio.sh)
|
||||
|
||||
- **Linux/macOS** (TagStudio.sh)
|
||||
- Run the "TagStudio.sh" script and the program should launch! (Make sure that the script is marked as executable if on Linux). Note that launching from the script from outside of a terminal will not launch a terminal window with any debug or crash information. If you wish to see this information, just launch the shell script directly from your terminal with `./TagStudio.sh`.
|
||||
|
||||
- Run the "TagStudio.sh" script and the program should launch! (Make sure that the script is marked as executable if on Linux). Note that launching from the script from outside of a terminal will not launch a terminal window with any debug or crash information. If you wish to see this information, just launch the shell script directly from your terminal with `./TagStudio.sh`.
|
||||
- **NixOS** (Nix Flake)
|
||||
> [!WARNING]
|
||||
> Support for NixOS is still a work in progress.
|
||||
- Use the provided [Flake](https://nixos.wiki/wiki/Flakes) to create and enter a working environment by running `nix develop`. Then, run the program via `python3 tagstudio/tag_studio.py` from the root directory.
|
||||
|
||||
- **NixOS** (Nix Flake)
|
||||
- Use the provided [Flake](https://nixos.wiki/wiki/Flakes) to create and enter a working environment by running `nix develop`. Then, run the program via `python3 tagstudio/tag_studio.py` from the root directory.
|
||||
- **Any** (No Scripts)
|
||||
|
||||
> [!WARNING]
|
||||
> Support for NixOS is still a work in progress.
|
||||
|
||||
- **Any** (No Scripts)
|
||||
|
||||
- Alternatively, with the virtual environment loaded, run the python file at `tagstudio\tag_studio.py` from your terminal. If you're in the project's root directory, simply run `python3 tagstudio/tag_studio.py`.
|
||||
- Alternatively, with the virtual environment loaded, run the python file at `tagstudio\tag_studio.py` from your terminal. If you're in the project's root directory, simply run `python3 tagstudio/tag_studio.py`.
|
||||
|
||||
## Workflow Checks
|
||||
|
||||
@@ -109,13 +86,8 @@ A Python linter and code formatter. Ruff uses the `pyproject.toml` as its config
|
||||
|
||||
#### Running Locally
|
||||
|
||||
Inside the root repository directory:
|
||||
|
||||
- Lint code with `ruff check`
|
||||
- Some linting suggestions can be automatically formatted with `ruff check --fix`
|
||||
- Format code with `ruff format`
|
||||
|
||||
Ruff should automatically discover the configuration options inside the [pyproject.toml](https://github.com/TagStudioDev/TagStudio/blob/main/pyproject.toml) file. For more information, see the [ruff configuration discovery docs](https://docs.astral.sh/ruff/configuration/#config-file-discovery).
|
||||
- Lint code with by moving into the `/tagstudio` directory with `cd tagstudio` and running `ruff --config ../pyproject.toml`.
|
||||
- Format code with `ruff format` inside the repository directory
|
||||
|
||||
Ruff is also available as a VS Code [extension](https://marketplace.visualstudio.com/items?itemName=charliermarsh.ruff), PyCharm [plugin](https://plugins.jetbrains.com/plugin/20574-ruff), and [more](https://docs.astral.sh/ruff/integrations/).
|
||||
|
||||
@@ -125,82 +97,74 @@ Mypy is a static type checker for Python. It sure has a lot to say sometimes, bu
|
||||
|
||||
#### Running Locally
|
||||
|
||||
- **First time only:** Move into the `/tagstudio` directory with `cd tagstudio` and run the following:
|
||||
- `mkdir -p .mypy_cache`
|
||||
- `mypy --install-types --non-interactive`
|
||||
- Check code by moving into the `/tagstudio` directory with `cd tagstudio` _(if you aren't already inside)_ and running `mypy --config-file ../pyproject.toml .`. _(Don't forget the `.` at the end!)_
|
||||
- **First time only:** Move into the `/tagstudio` directory with `cd tagstudio` and run the following:
|
||||
- `mkdir -p .mypy_cache`
|
||||
- `mypy --install-types --non-interactive`
|
||||
- Check code by moving into the `/tagstudio` directory with `cd tagstudio` _(if you aren't already inside)_ and running `mypy --config-file ../pyproject.toml .`. _(Don't forget the `.` at the end!)_
|
||||
|
||||
> [!CAUTION]
|
||||
> There's a known issue between PySide v6.6.3 and Mypy where Mypy will detect issues with the `.pyi` files inside of PySide and prematurely stop checking files. This issue is not present in PySide v6.6.2, which _should_ be compatible with everything else if you wish to try using that version in the meantime.
|
||||
|
||||
Mypy is also available as a VS Code [extension](https://marketplace.visualstudio.com/items?itemName=matangover.mypy), PyCharm [plugin](https://plugins.jetbrains.com/plugin/11086-mypy), and [more](https://plugins.jetbrains.com/plugin/11086-mypy).
|
||||
|
||||
### PyTest
|
||||
|
||||
- Run all tests by moving into the `/tagstudio` directory with `cd tagstudio` and running `pytest tests/`.
|
||||
- Run all tests by moving into the `/tagstudio` directory with `cd tagstudio` and running `pytest tests/`.
|
||||
|
||||
## Code Style
|
||||
## Code Guidelines
|
||||
|
||||
### Style
|
||||
|
||||
Most of the style guidelines can be checked, fixed, and enforced via Ruff. Older code may not be adhering to all of these guidelines, in which case _"do as I say, not as I do"..._
|
||||
|
||||
- Do your best to write clear, concise, and modular code.
|
||||
- Keep a maximum column with of no more than **100** characters.
|
||||
- Code comments should be used to help describe sections of code that can't speak for themselves.
|
||||
- Use [Google style](https://google.github.io/styleguide/pyguide.html#s3.8-comments-and-docstrings) docstrings for any classes and functions you add.
|
||||
- If you're modifying an existing function that does _not_ have docstrings, you don't _have_ to add docstrings to it... but it would be pretty cool if you did ;)
|
||||
- Imports should be ordered alphabetically.
|
||||
- Lists of values should be ordered using their [natural sort order](https://en.wikipedia.org/wiki/Natural_sort_order).
|
||||
- Some files have their methods ordered alphabetically as well (i.e. [`thumb_renderer`](https://github.com/TagStudioDev/TagStudio/blob/main/tagstudio/src/qt/widgets/thumb_renderer.py)). If you're working in a file and notice this, please try and keep to the pattern.
|
||||
- When writing text for window titles or form titles, use "[Title Case](https://apastyle.apa.org/style-grammar-guidelines/capitalization/title-case)" capitalization. Your IDE may have a command to format this for you automatically, although some may incorrectly capitalize short prepositions. In a pinch you can use a website such as [capitalizemytitle.com](https://capitalizemytitle.com/) to check.
|
||||
- If it wasn't mentioned above, then stick to [**PEP-8**](https://peps.python.org/pep-0008/)!
|
||||
- Do your best to write clear, concise, and modular code.
|
||||
- Try to keep a maximum column with of no more than **100** characters.
|
||||
- Code comments should be used to help describe sections of code that don't speak for themselves.
|
||||
- Use [Google style](https://google.github.io/styleguide/pyguide.html#s3.8-comments-and-docstrings) docstrings for any classes and functions you add.
|
||||
- If you're modifying an existing function that does _not_ have docstrings, you don't _have_ to add docstrings to it... but it would be pretty cool if you did ;)
|
||||
- Imports should be ordered alphabetically (in newly created python files).
|
||||
- When writing text for window titles, form titles, or dropdown options, use "[Title Case](https://apastyle.apa.org/style-grammar-guidelines/capitalization/title-case)" capitalization. Your IDE may have a command to format this for you automatically, although some may incorrectly capitalize short prepositions. In a pinch you can use a website such as [capitalizemytitle.com](https://capitalizemytitle.com/) to check.
|
||||
- If it wasn't mentioned above, then stick to [**PEP-8**](https://peps.python.org/pep-0008/)!
|
||||
> [!WARNING]
|
||||
> Column width limits, docstring formatting, and import sorting aren't currently checked in the Ruff workflow but likely will be in the near future.
|
||||
|
||||
### Modules & Implementations
|
||||
### Implementations
|
||||
|
||||
- **Do not** modify legacy library code in the `src/core/library/json/` directory
|
||||
- Avoid direct calls to `os`
|
||||
- Use `Pathlib` library instead of `os.path`
|
||||
- Use `platform.system()` instead of `os.name` and `sys.platform`
|
||||
- Don't prepend local imports with `tagstudio`, stick to `src`
|
||||
- Use the `logger` system instead of `print` statements
|
||||
- Avoid nested f-strings
|
||||
- Use HTML-like tags inside Qt widgets over stylesheets where possible
|
||||
- Avoid direct calls to `os`
|
||||
- Use `Pathlib` library instead of `os.path`
|
||||
- Use `sys.platform` instead of `os.name`
|
||||
- Don't prepend local imports with `tagstudio`, stick to `src`
|
||||
- Use `logging` instead of `print` statements
|
||||
- Avoid nested `f-string`s
|
||||
|
||||
### Commit and Pull Request Style
|
||||
#### Runtime
|
||||
|
||||
- Use [Conventional Commits](https://www.conventionalcommits.org/en/v1.0.0) as a guideline for commit messages. This allows us to easily generate changelogs for releases.
|
||||
- See some [examples](https://www.conventionalcommits.org/en/v1.0.0/#examples) of what this looks like in practice.
|
||||
- Use clear and concise commit messages. If your commit does too much, either consider breaking it up into smaller commits or providing extra detail in the commit description.
|
||||
- Pull requests should have an adequate title and description which clearly outline your intentions and changes/additions. Feel free to provide screenshots, GIFs, or videos, especially for UI changes.
|
||||
- Pull requests should ideally be limited to **a single** feature or fix.
|
||||
- Code must function on supported versions of Windows, macOS, and Linux:
|
||||
- Windows: 10, 11
|
||||
- macOS: 12.0+
|
||||
- Linux: TBD
|
||||
- Avoid use of unnecessary logging statements in final submitted code.
|
||||
- Code should not cause unreasonable slowdowns to the program outside of a progress-indicated task.
|
||||
|
||||
> [!IMPORTANT]
|
||||
> Please do not force push if your PR is open for review!
|
||||
>
|
||||
> Force pushing makes it impossible to discern which changes have already been reviewed and which haven't. This means a reviewer will then have to rereview all the already reviewed code, which is a lot of unnecessary work for reviewers.
|
||||
#### Git/GitHub Specifics
|
||||
|
||||
> [!TIP]
|
||||
> If you're unsure where to stop the scope of your PR, ask yourself: _"If I broke this up, could any parts of it still be used by the project in the meantime?"_
|
||||
|
||||
### Runtime Requirements
|
||||
|
||||
- Final code must function on supported versions of Windows, macOS, and Linux:
|
||||
- Windows: 10, 11
|
||||
- macOS: 12.0+
|
||||
- Linux: _Varies_
|
||||
- Final code must **_NOT:_**
|
||||
- Contain superfluous or unnecessary logging statements
|
||||
- Cause unreasonable slowdowns to the program outside of a progress-indicated task
|
||||
- Cause undesirable visual glitches or artifacts on screen
|
||||
- Use clear and concise commit messages. If your commit does too much, either consider breaking it up into smaller commits or providing extra detail in the commit description.
|
||||
- Use imperative-style present-tense commit messages. Examples:
|
||||
- "Add feature foo"
|
||||
- "Change method bar"
|
||||
- "Fix function foobar"
|
||||
- Pull Requests should have an adequate title and description which clearly outline your intentions and changes/additions. Feel free to provide screenshots, GIFs, or videos, especially for UI changes.
|
||||
|
||||
## Documentation Guidelines
|
||||
|
||||
Documentation contributions include anything inside of the `docs/` folder, as well as the `README.md` and `CONTRIBUTING.md` files. Documentation inside the `docs/` folder is built and hosted on our static documentation site, [docs.tagstud.io](https://docs.tagstud.io/).
|
||||
Documentation contributions include anything inside of the `doc/` folder, as well as the `README.md` and `CONTRIBUTING.md` files.
|
||||
|
||||
- Use "[snake_case](https://developer.mozilla.org/en-US/docs/Glossary/Snake_case)" for file and folder names
|
||||
- Follow the folder structure pattern
|
||||
- Don't add images or other media with excessively large file sizes
|
||||
- Provide alt text for all embedded media
|
||||
- Use "[Title Case](https://apastyle.apa.org/style-grammar-guidelines/capitalization/title-case)" for title capitalization
|
||||
- Use "[snake_case](https://developer.mozilla.org/en-US/docs/Glossary/Snake_case)" for file and folder names
|
||||
- Follow the folder structure pattern
|
||||
- Don't add images or other media with excessively large file sizes
|
||||
- Provide alt text for all embedded media
|
||||
- Use "[Title Case](https://apastyle.apa.org/style-grammar-guidelines/capitalization/title-case)" for title capitalization
|
||||
|
||||
## Translation Guidelines
|
||||
|
||||
Translations are performed on the TagStudio [Weblate project](https://hosted.weblate.org/projects/tagstudio/).
|
||||
|
||||
_Translation guidelines coming soon._
|
||||
_TBA_
|
||||
|
||||
260
README.md
@@ -1,124 +1,80 @@
|
||||
# TagStudio: A User-Focused Document Management System
|
||||
|
||||
[](https://hosted.weblate.org/projects/tagstudio/strings/)
|
||||
[](https://github.com/TagStudioDev/TagStudio/actions/workflows/pytest.yaml)
|
||||
[](https://github.com/TagStudioDev/TagStudio/actions/workflows/mypy.yaml)
|
||||
[](https://github.com/TagStudioDev/TagStudio/actions/workflows/ruff.yaml)
|
||||
[](https://github.com/TagStudioDev/TagStudio/releases)
|
||||
# TagStudio (Alpha): A User-Focused Document Management System
|
||||
|
||||
<p align="center">
|
||||
<img width="60%" src="docs/assets/github_header.png">
|
||||
<img width="60%" src="github_header.png">
|
||||
</p>
|
||||
|
||||
TagStudio is a photo & file organization application with an underlying tag-based system that focuses on giving freedom and flexibility to the user. No proprietary programs or formats, no sea of sidecar files, and no complete upheaval of your filesystem structure. **Read the documentation and more at [docs.tagstud.io](https://docs.tagstud.io)!**
|
||||
> [!CAUTION]
|
||||
> This is still a **_very_** rough personal project of mine in its infancy. I’m open-sourcing it now in order to accept contributors sooner and to better facilitate the direction of the project from an earlier stage.
|
||||
> There **_are_** bugs, and there will **_very likely_** be breaking changes!
|
||||
|
||||
> [!NOTE]
|
||||
> Thank you for being patient as we've migrated our database backend from JSON to SQL! The previous warnings about the main branch being experimental and unsupported have now been removed, and any pre-existing library save files created with official TagStudio releases are able to be opened and migrated with the new v9.5+ releases!
|
||||
TagStudio is a photo & file organization application with an underlying system that focuses on giving freedom and flexibility to the user. No proprietary programs or formats, no sea of sidecar files, and no complete upheaval of your filesystem structure.
|
||||
|
||||
> [!IMPORTANT]
|
||||
> This project is still in an early state. There are many missing optimizations and QoL features, as well as the presence of general quirks and occasional jankiness. Making frequent backups of your library save data is **always** important, regardless of what state the program is in.
|
||||
>
|
||||
> With this in mind, TagStudio will _NOT:_
|
||||
>
|
||||
> - Touch, move, or mess with your files in any way _(unless explicitly using the "Delete File(s)" feature, which is locked behind a confirmation dialog)_.
|
||||
> - Ask you to recreate your tags or libraries after new releases. It's our highest priority to ensure that your data safely and smoothly transfers over to newer versions.
|
||||
> - Cause you to suddenly be able to recall your 10 trillion downloaded images that you probably haven't even seen firsthand before. You're in control here, and even tools out there that use machine learning still needed to be verified by human eyes before being deemed accurate.
|
||||
<figure align="center">
|
||||
<img width="80%" src="screenshot.jpg" alt="TagStudio Screenshot" align="center">
|
||||
|
||||
<p align="center">
|
||||
<img width="80%" src="docs/assets/screenshot.png" alt="TagStudio Screenshot">
|
||||
</p>
|
||||
<p align="center">
|
||||
<i>TagStudio Alpha v9.5.0 running on macOS Sequoia.</i>
|
||||
</p>
|
||||
<figcaption><i>TagStudio Alpha v9.1.0 running on Windows 10.</i></figcaption>
|
||||
</figure>
|
||||
|
||||
## Contents
|
||||
|
||||
- [Goals](#goals)
|
||||
- [Priorities](#priorities)
|
||||
- [Current Features](#current-features)
|
||||
- [Contributing](#contributing)
|
||||
- [Installation](#installation)
|
||||
- [Usage](#usage)
|
||||
- [FAQ](#faq)
|
||||
- [Goals](#goals)
|
||||
- [Priorities](#priorities)
|
||||
- [Current Features](#current-features)
|
||||
- [Contributing](#contributing)
|
||||
- [Installation](#installation)
|
||||
- [Usage](#usage)
|
||||
- [FAQ](#faq)
|
||||
|
||||
## Goals
|
||||
|
||||
- To achieve a portable, private, extensible, open-format, and feature-rich system of organizing and rediscovering files.
|
||||
- To provide powerful methods for organization, notably the concept of tag inheritance, or “taggable tags” _(and in the near future, the combination of composition-based tags)._
|
||||
- To create an implementation of such a system that is resilient against a user’s actions outside the program (modifying, moving, or renaming files) while also not burdening the user with mandatory sidecar files or requiring them to change their existing file structures and workflows.
|
||||
- To support a wide range of users spanning across different platforms, multi-user setups, and those with large (several terabyte) libraries.
|
||||
- To make the dang thing look nice, too. It’s 2025, not 1995.
|
||||
- To achieve a portable, privacy-oriented, open, extensible, and feature-rich system of organizing and rediscovering files.
|
||||
- To provide powerful methods for organization, notably the concept of tag composition, or “taggable tags”.
|
||||
- To create an implementation of such a system that is resilient against a user’s actions outside the program (modifying, moving, or renaming files) while also not burdening the user with mandatory sidecar files or otherwise requiring them to change their existing file structures and workflows.
|
||||
- To support a wide range of users spanning across different platforms, multi-user setups, and those with large (several terabyte) libraries.
|
||||
- To make the darn thing look like nice, too. It’s 2024, not 1994.
|
||||
|
||||
## Priorities
|
||||
|
||||
1. **The concept.** Even if TagStudio as an application fails, I’d hope that the idea lives on in a superior project. The [goals](#goals) outlined above don’t reference TagStudio once - _TagStudio_ is what references the _goals._
|
||||
1. **The concept.** Even if TagStudio as a project or application fails, I’d hope that the idea lives on in a superior project. The [goals](#goals) outlined above don’t reference TagStudio once - _TagStudio_ is what references the _goals._
|
||||
2. **The system.** Frontends and implementations can vary, as they should. The core underlying metadata management system is what should be interoperable between different frontends, programs, and operating systems. A standard implementation for this should settle as development continues. This opens up the doors for improved and varied clients, integration with third-party applications, and more.
|
||||
3. **The application.** If nothing else, TagStudio the application serves as the first (and so far only) implementation for this system of metadata management. This has the responsibility of doing the idea justice and showing just what’s possible when it comes to user file management.
|
||||
4. (The name.) I think it’s fine for an app or client, but it doesn’t really make sense for a system or standard. I suppose this will evolve with time...
|
||||
4. (The name.) I think it’s fine for an app or client, but it doesn’t really make sense for a system or standard. I suppose this will evolve with time.
|
||||
|
||||
## Current Features
|
||||
|
||||
- Create libraries/vaults centered around a system directory. Libraries contain a series of entries: the representations of your files combined with metadata fields. Each entry represents a file in your library’s directory, and is linked to its location.
|
||||
- Add metadata to your library entries, including:
|
||||
- Name, Author, Artist (Single-Line Text Fields)
|
||||
- Description, Notes (Multiline Text Fields)
|
||||
- Tags, Meta Tags, Content Tags (Tag Boxes)
|
||||
- Create rich tags composed of a name, a list of aliases, and a list of “subtags” - being tags in which these tags inherit values from.
|
||||
- Search for entries based on tags, ~~metadata~~ (TBA), or filenames/filetypes (using `filename: <query>`)
|
||||
- Special search conditions for entries that are: `untagged`/`no tags` and `empty`/`no fields`.
|
||||
|
||||
> [!NOTE]
|
||||
> For more information on the project itself, please see the [FAQ](#faq) section as well as the [documentation](/doc/index.md).
|
||||
|
||||
## Contributing
|
||||
|
||||
If you're interested in contributing to TagStudio, please take a look at the [contribution guidelines](/CONTRIBUTING.md) for how to get started!
|
||||
|
||||
Translation hosting generously provided by [Weblate](https://weblate.org/en/). Check out our [project page](https://hosted.weblate.org/projects/tagstudio/) to help translate TagStudio!
|
||||
|
||||
## Current Features
|
||||
|
||||
### Libraries
|
||||
|
||||
- Create libraries/vaults centered around a system directory. Libraries contain a series of entries: the representations of your files combined with metadata fields. Each entry represents a file in your library’s directory, and is linked to its location.
|
||||
- Address moved, deleted, or otherwise "unlinked" files by using the "Fix Unlinked Entries" option in the Tools menu.
|
||||
|
||||
### Tagging + Custom Metadata
|
||||
|
||||
- Add custom powerful tags to your library entries
|
||||
- Add metadata to your library entries, including:
|
||||
- Name, Author, Artist (Single-Line Text Fields)
|
||||
- Description, Notes (Multiline Text Fields)
|
||||
- Create rich tags composed of a name, color, a list of aliases, and a list of “parent tags” - these being tags in which these tags inherit values from.
|
||||
- Copy and paste tags and fields across file entries
|
||||
- Automatically organize tags into groups based on parent tags marked as "categories"
|
||||
- Generate tags from your existing folder structure with the "Folders to Tags" macro (NOTE: these tags do NOT sync with folders after they are created)
|
||||
|
||||
### Search
|
||||
|
||||
- Search for file entries based on tags, file path (`path:`), file types (`filetype:`), and even media types! (`mediatype:`). Path searches currently use [glob](<https://en.wikipedia.org/wiki/Glob_(programming)>) syntax, so you may need to wrap your filename or filepath in asterisks while searching. This will not be strictly necessary in future versions of the program.
|
||||
- Use and combine boolean operators (`AND`, `OR`, `NOT`) along with parentheses groups, quotation escaping, and underscore substitution to create detailed search queries
|
||||
- Use special search conditions (`special:untagged` and `special:empty`) to find file entries without tags or fields, respectively
|
||||
|
||||
### File Entries
|
||||
|
||||
- Nearly all file types are supported in TagStudio libraries - just not all have dedicated thumbnail support.
|
||||
- Preview most image file types, animated GIFs, videos, plain text documents, audio files, Blender projects, and more!
|
||||
- Open files or file locations by right-clicking on thumbnails and previews and selecting the respective context menu options. You can also click on the preview panel image to open the file, and click the file path label to open its location.
|
||||
- Delete files from both your library and drive by right-clicking the thumbnail(s) and selecting the "Move to Trash"/"Move to Recycle Bin" option.
|
||||
|
||||
> [!NOTE]
|
||||
> For more information on the project itself, please see the [FAQ](#faq) section as well as the [documentation](https://docs.tagstud.io/)!
|
||||
|
||||
## Installation
|
||||
|
||||
To download TagStudio, visit the [Releases](https://github.com/TagStudioDev/TagStudio/releases) section of the GitHub repository and download the latest release for your system under the "Assets" section. TagStudio is available for **Windows**, **macOS** _(Apple Silicon & Intel)_, and **Linux**. Windows and Linux builds are also available in portable versions if you want a more self-contained executable to move around.
|
||||
|
||||
**We do not currently publish TagStudio to any package managers. Any TagStudio distributions outside of the GitHub releases page are _unofficial_ and not maintained by us.** Installation support will not be given to users installing from unofficial sources. Use these versions at your own risk.
|
||||
For video thumbnails and playback, you'll also need [FFmpeg](https://ffmpeg.org/download.html) installed on your system.
|
||||
|
||||
> [!IMPORTANT]
|
||||
> On macOS, you may be met with a message saying _""TagStudio" can't be opened because Apple cannot check it for malicious software."_ If you encounter this, then you'll need to go to the "Settings" app, navigate to "Privacy & Security", and scroll down to a section that says _""TagStudio" was blocked from use because it is not from an identified developer."_ Click the "Open Anyway" button to allow TagStudio to run. You should only have to do this once after downloading the application.
|
||||
|
||||
> [!IMPORTANT]
|
||||
> On Linux with non-Qt based Desktop Environments you may be unable to open TagStudio. You need to make sure that "xcb-cursor0" or "libxcb-cursor0" packages are installed. For more info check [Missing linux dependencies](https://github.com/TagStudioDev/TagStudio/discussions/182#discussioncomment-9452896)
|
||||
#### Optional Arguments
|
||||
|
||||
### Third-Party Dependencies
|
||||
|
||||
- For video thumbnails and playback, you'll also need [FFmpeg](https://ffmpeg.org/download.html) installed on your system. If you encounter any issues with this, please reference our [FFmpeg Help](/docs/help/ffmpeg.md) guide.
|
||||
|
||||
### Optional Arguments
|
||||
|
||||
Arguments available to pass to the program, either via the command line or a shortcut.
|
||||
Optional arguments to pass to the program.
|
||||
|
||||
> `--open <path>` / `-o <path>`
|
||||
> Path to a TagStudio Library folder to open on start.
|
||||
>
|
||||
|
||||
> `--config-file <path>` / `-c <path>`
|
||||
> Path to the TagStudio config file to load.
|
||||
|
||||
@@ -130,19 +86,14 @@ With TagStudio opened, start by creating a new library or opening an existing on
|
||||
|
||||
### Refreshing the Library
|
||||
|
||||
Libraries under 10,000 files automatically scan for new or modified files when opened. In order to refresh the library manually, select "Refresh Directories" under the File menu.
|
||||
In order to scan for new files or file changes, you’ll need to manually go to File -> Refresh Directories.
|
||||
|
||||
### Adding Tags to File Entries
|
||||
> [!NOTE]
|
||||
> In the future, library refreshing will also be automatically done in the background, or additionally on app startup.
|
||||
|
||||
Access the "Add Tag" search box by either clicking on the "Add Tag" button at the bottom of the right sidebar, accessing the "Add Tags to Selected" option from the File menu, or by pressing <kbd>Ctrl</kbd>+<kbd>Shift</kbd>+<kbd>T</kbd>.
|
||||
### Adding Metadata to Entries
|
||||
|
||||
From here you can search for existing tags or create a new one if the one you're looking for doesn't exist. Click the “+” button next to any tags you want to to the currently selected file entries. To quickly add the top result, press the <kbd>Enter</kbd>/<kbd>Return</kbd> key to add the the topmost tag and reset the tag search. Press <kbd>Enter</kbd>/<kbd>Return</kbd> once more to close the dialog box. By using this method, you can quickly add various tags in quick succession just by using the keyboard!
|
||||
|
||||
To remove a tag from a file entry, hover over the tag in the preview panel and click on the "-" icon that appears.
|
||||
|
||||
### Adding Metadata to File Entries
|
||||
|
||||
To add a metadata field to a file entry, start by clicking the “Add Field” button at the bottom of the preview panel. From the dropdown menu, select the type of metadata field you’d like to add to the entry
|
||||
To add a metadata field to a file entry, start by clicking the “Add Field” button under the file preview in the right-hand preview panel. From the dropdown menu, select the type of metadata field you’d like to add to the entry.
|
||||
|
||||
### Editing Metadata Fields
|
||||
|
||||
@@ -150,48 +101,42 @@ To add a metadata field to a file entry, start by clicking the “Add Field” b
|
||||
|
||||
Hover over the field and click the pencil icon. From there, add or edit text in the dialog box popup.
|
||||
|
||||
#### Tag Box
|
||||
|
||||
Click the “+” button at the end of the Tags list, and search for tags to add inside the new dialog popup. Click the “+” button next to whichever tags you want to add. Alternatively, after you search for a tag, press the Enter/Return key to add the add the first item in the list. Press Enter/Return once more to close the dialog box
|
||||
|
||||
> [!WARNING]
|
||||
> Keyboard control and navigation is currently _very_ buggy, but will be improved in future versions.
|
||||
|
||||
### Creating Tags
|
||||
|
||||
Create a new tag by accessing the "New Tag" option from the Edit menu or by pressing <kbd>Ctrl</kbd>+<kbd>T</kbd>. In the tag creation panel, enter a tag name, optional shorthand name, optional tag aliases, optional parent tags, and an optional color.
|
||||
To create a new tag, click on Edit -> New Tag from the menu bar. From there, enter a tag name, shorthand name, any tag aliases separated by newlines, any subtags, and an optional color.
|
||||
|
||||
- The tag **name** is the base name of the tag. **_This does NOT have to be unique!_**
|
||||
- The tag **shorthand** is a special type of alias that displays in situations where screen space is more valuable, notably with name disambiguation.
|
||||
- **Aliases** are alternate names for a tag. These let you search for terms other than the exact tag name in order to find the tag again.
|
||||
- **Parent Tags** are tags in which this this tag can substitute for in searches. In other words, tags under this section are parents of this tag.
|
||||
- Parent tags with the disambiguation check next to them will be used to help disambiguate tag names that may not be unique.
|
||||
- For example: If you had a tag for "Freddy Fazbear", you might add "Five Nights at Freddy's" as one of the parent tags. If the disambiguation box is checked next to "Five Nights at Freddy's" parent tag, then the tag "Freddy Fazbear" will display as "Freddy Fazbear (Five Nights at Freddy's)". Furthermore, if the "Five Nights at Freddy's" tag has a shorthand like "FNAF", then the "Freddy Fazbear" tag will display as "Freddy Fazbear (FNAF)".
|
||||
- The **color** option lets you select an optional color palette to use for your tag.
|
||||
- The **"Is Category"** property lets you treat this tag as a category under which itself and any child tags inheriting from it will be sorted by inside the preview panel.
|
||||
|
||||
#### Tag Manager
|
||||
|
||||
You can manage your library of tags from opening the "Tag Manager" panel from Edit -> "Tag Manager". From here you can create, search for, edit, and permanently delete any tags you've created in your library.
|
||||
- The tag **shorthand** is a type of alias that displays in situations when screen space is more valuable (ex. as a subtag for other tags).
|
||||
- **Aliases** are alternate names for a tag. These let you search for terms other than the exact tag name in order to find the tag again.
|
||||
- **Subtags** are tags in which this tag is a child tag of. In other words, tags under this section are parents of this tag. For example, if you had a tag for a character from a show, you would make the show a subtag of this character. This would display as “Character (Show)” in most areas of the app. The first tag in this list is used as the tag shown in parentheses for specification.
|
||||
- The **color** dropdown lets you select an optional color for this tag to display as.
|
||||
|
||||
### Editing Tags
|
||||
|
||||
To edit a tag, click on it inside the preview panel or right-click the tag and select “Edit Tag” from the context menu.
|
||||
To edit a tag, right-click the tag in the tag field of the preview pane and select “Edit Tag”
|
||||
|
||||
### Relinking Moved Files
|
||||
### Relinking Renamed/Moved Files
|
||||
|
||||
Inevitably some of the files inside your library will be renamed, moved, or deleted. If a file has been renamed or moved, TagStudio will display the thumbnail as a red broken chain link. To relink moved files or delete these entries, select the "Manage Unlinked Entries" option under the Tools menu. Click the "Refresh" button to scan your library for unlinked entries. Once complete, you can attempt to “Search & Relink” any unlinked file entries to their respective files, or “Delete Unlinked Entries” in the event the original files have been deleted and you no longer wish to keep their entries inside your library.
|
||||
Inevitably, some of the files inside your library will be renamed, moved, or deleted. If a file has been renamed or moved, TagStudio will display the thumbnail as a red tag with a cross through it _(this icon is also used for items with broken thumbnails)._ To relink moved files or delete these entries, go to Tools -> Manage Unlinked Entries. Click the “Refresh” button to scan your library for unlinked entries. Once complete, you can attempt to “Search & Relink” any unlinked entries to their respective files, or “Delete Unlinked Entries” in the event the original files have been deleted and you no longer wish to keep their metadata entries inside your library.
|
||||
|
||||
> [!WARNING]
|
||||
> There is currently no method to relink entries to files that have been renamed - only moved or deleted. This is a high priority for future releases.
|
||||
> There is currently no method to relink entries to files that have been renamed - only moved or deleted. This is a top priority for future releases.
|
||||
|
||||
> [!WARNING]
|
||||
> If multiple matches for a moved file are found (matches are currently defined as files with a matching filename as the original), TagStudio will currently ignore the match groups. Adding a GUI for manual selection, as well as smarter automated relinking, are high priorities for future versions.
|
||||
> If multiple matches for a moved file are found (matches are currently defined as files with a matching filename as the original), TagStudio will currently ignore the match groups. Adding a GUI for manual selection, as well as smarter automated relinking, are top priorities for future versions.
|
||||
|
||||
### Saving the Library
|
||||
|
||||
As of version 9.5, libraries are saved automatically as you go. To save a backup of your library, select File -> Save Library Backup from the menu bar.
|
||||
Libraries are saved upon exiting the program. To manually save, select File -> Save Library from the menu bar. To save a backup of your library, select File -> Save Library Backup from the menu bar.
|
||||
|
||||
### Half-Implemented Features
|
||||
|
||||
These features were present in pre-public versions of TagStudio (9.0 and below) and have yet to be fully implemented.
|
||||
|
||||
#### Fix Duplicate Files
|
||||
|
||||
Load in a .dupeguru file generated by [dupeGuru](https://github.com/arsenetar/dupeguru/) and mirror metadata across entries marked as duplicates. After mirroring, return to dupeGuru to manage deletion of the duplicate files. After deletion, use the “Fix Unlinked Entries” feature in TagStudio to delete the duplicate set of entries for the now-deleted files
|
||||
@@ -199,6 +144,13 @@ Load in a .dupeguru file generated by [dupeGuru](https://github.com/arsenetar/du
|
||||
> [!CAUTION]
|
||||
> While this feature is functional, it’s a pretty roundabout process and can be streamlined in the future.
|
||||
|
||||
#### Image Collage
|
||||
|
||||
Create an image collage of your photos and videos.
|
||||
|
||||
> [!CAUTION]
|
||||
> Collage sizes and options are hardcoded, and there's no GUI indicating the process of the collage creation.
|
||||
|
||||
#### Macros
|
||||
|
||||
Apply tags and other metadata automatically depending on certain criteria. Set specific macros to run when the files are added to the library. Part of this includes applying tags automatically based on parent folders.
|
||||
@@ -221,20 +173,74 @@ See instructions in the "[Creating Development Environment](/CONTRIBUTING.md/#cr
|
||||
|
||||
### What State Is the Project Currently In?
|
||||
|
||||
As of writing (Alpha v9.5.0) the project is very usable, however there's some plenty of quirks and missing QoL features. Several additional features and changes are still planned (see: [Feature Roadmap](https://docs.tagstud.io/updates/roadmap/)) that add even more power and flexibility to the tagging and field systems while making it easier to tag in bulk and perform automated operations. Bugfixes and polish are constantly trickling in along with the larger feature releases.
|
||||
As of writing (Alpha v9.3.0) the project is in a useable state, however it lacks proper testing and quality of life features.
|
||||
|
||||
### What Features Are You Planning on Adding?
|
||||
|
||||
See the [Feature Roadmap](https://docs.tagstud.io/updates/roadmap/) page for the core features being planned and implemented for TagStudio. For a more up to date look on what's currently being added for upcoming releases, see our GitHub [milestones](https://github.com/TagStudioDev/TagStudio/milestones) for versioned releases.
|
||||
> [!IMPORTANT]
|
||||
> See the [Planned Features](/doc/updates/planned_features.md) documentation for the latest feature lists. The lists here are currently being migrated over there with individual pages for larger features.
|
||||
|
||||
### Features That Will NOT Be Added
|
||||
Of the several features I have planned for the project, these are broken up into “priority” features and “future” features. Priority features were originally intended for the first public release, however are currently absent from the Alpha v9.x.x builds.
|
||||
|
||||
- Native Cloud Integration
|
||||
- There are plenty of services already (native or third-party) that allow you to mount your cloud drives as virtual drives on your system. Hosting a TagStudio library on one of these mounts should function similarly to what native integration would look like.
|
||||
- Supporting native cloud integrations such as these would be an unnecessary "reinventing the wheel" burden for us that is outside the scope of this project.
|
||||
- Native ChatGPT/Non-Local LLM Integration
|
||||
- This could mean different things depending on your intentions. Whether it's trying to use an LLM to replace the native search, or to trying to use a model for image recognition, I'm not interested in hooking people's TagStudio libraries into non-local LLMs such as ChatGPT and/or turn the program into a "chatbot" interface (see: [Goals/Privacy](#goals)). I wouldn't, however, mind using **locally** hosted models to provide the _optional_ ability for additional searching and tagging methods (especially when it comes to facial recognition) - but this would likely take the form of plugins external to the core program anyway.
|
||||
#### Priority Features
|
||||
|
||||
### Why Is this Already Version 9?
|
||||
- Improved search
|
||||
- Sortable Search
|
||||
- Boolean Search
|
||||
- Coexisting Text + Tag Search
|
||||
- Searchable File Metadata
|
||||
- Comprehensive Tag management tab
|
||||
- Easier ways to apply tags in bulk
|
||||
- Tag Search Panel
|
||||
- Recent Tags Panel
|
||||
- Top Tags Panel
|
||||
- Pinned Tags Panel
|
||||
- Better (stable, performant) library grid view
|
||||
- Improved entry relinking
|
||||
- Cached thumbnails
|
||||
- Tag-like Groups
|
||||
- Resizable thumbnail grid
|
||||
- User-defined metadata fields
|
||||
- Multiple directory support
|
||||
- SQLite (or similar) save files
|
||||
- Reading of EXIF and XMP fields
|
||||
- Improved UI/UX
|
||||
- Better internal API for accessing Entries, Tags, Fields, etc. from the library.
|
||||
- Proper testing workflow
|
||||
- Continued code cleanup and modularization
|
||||
- Exportable/importable library data including "Tag Packs"
|
||||
|
||||
Over the first few years of private development the project went through several major iterations and rewrites. These major version bumps came quickly, and by the time TagStudio was opened-sourced the version number had already reached v9.0. Instead of resetting to "v0.0" or "v1.0" for this public release I decided to keep my v9.x numbering scheme and reserve v10.0 for when all the core features on the [Feature Roadmap](https://docs.tagstud.io/updates/roadmap/) are implemented. I’ve also labeled this version as an "Alpha" and will drop this once either all of the core features are implemented or the project feels stable and feature-rich enough to be considered "Beta" and beyond.
|
||||
#### Future Features
|
||||
|
||||
- Support for multiple simultaneous users/clients
|
||||
- Draggable files outside the program
|
||||
- Comprehensive filetype whitelist
|
||||
- A finished “macro system” for automatic tagging based on predetermined criteria.
|
||||
- Different library views
|
||||
- Date and time fields
|
||||
- Entry linking/referencing
|
||||
- Audio waveform previews
|
||||
- 3D object previews
|
||||
- Additional previews for miscellaneous file types
|
||||
- Optional global tags and settings, spanning across libraries
|
||||
- Importing & exporting libraries to/from other programs
|
||||
- Port to a more performant language and modern frontend (Rust?, Tauri?, etc.)
|
||||
- Plugin system
|
||||
- Local OCR search
|
||||
- Support for local machine learning-based tag suggestions for images
|
||||
- Mobile version _(FAR future)_
|
||||
|
||||
#### Features I Likely Won’t Add/Pull
|
||||
|
||||
- Native Cloud Integration
|
||||
- There are plenty of services already (native or third-party) that allow you to mount your cloud drives as virtual drives on your system. Pointing TagStudio to one of these mounts should function similarly to what native integration would look like.
|
||||
- Native ChatGPT/Non-Local LLM Integration
|
||||
- This could mean different things depending on what you're intending. Whether it's trying to use an LLM to replace the native search, or to trying to use a model for image recognition, I'm not interested in hooking people's TagStudio libraries into non-local LLMs such as ChatGPT and/or turn the program into a "chatbot" interface (see: [Goals/Privacy](#goals)). I wouldn't, however, mind using **locally** hosted models to provide the _optional_ ability for additional searching and tagging methods (especially when it comes to facial recognition).
|
||||
|
||||
### Why Is the Version Already v9?
|
||||
|
||||
I’ve been developing this project over several years in private, and have gone through several major iterations and rewrites in that time. This “major version” is just a number at the end of the day, and if I wanted to I couldn’t released this as “Version 0” or “Version 1.0”, but I’ve decided to stick to my original version numbers to avoid needing to go in and change existing documentation and code comments. Version 10 is intended to include all of the “Priority Features” I’ve outlined in the [previous](#what-features-are-you-planning-on-adding) section. I’ve also labeled this version as an Alpha, and will likely reset the numbers when a feature-complete beta is reached.
|
||||
|
||||
### Wait, Is There a CLI Version?
|
||||
|
||||
As of right now, **no**. However, I _did_ have a CLI version in the recent past before dedicating my efforts to the Qt GUI version. I’ve left in the currently-inoperable CLI code just in case anyone was curious about it. Also yes, it’s just a bunch of glorified print statements (_the outlook for some form of curses on Windows didn’t look great at the time, and I just needed a driver for the newly refactored code...)._
|
||||
|
||||
BIN
doc/assets/db_schema.png
Normal file
|
After Width: | Height: | Size: 138 KiB |
|
Before Width: | Height: | Size: 56 KiB After Width: | Height: | Size: 56 KiB |
|
Before Width: | Height: | Size: 26 KiB After Width: | Height: | Size: 26 KiB |
24
doc/index.md
Normal file
@@ -0,0 +1,24 @@
|
||||
# Welcome to the TagStudio Documentation!
|
||||
|
||||
> [!WARNING]
|
||||
> This documentation is still a work in progress, and is intended to aide with deconstructing and understanding of the core mechanics of TagStudio and how it operates.
|
||||
|
||||
<div align="center">
|
||||
<img src="../github_header.png" alt="TagStudio Alpha" height="100">
|
||||
<img src="https://i0.wp.com/www.bapl.org/wp-content/uploads/2019/02/old-under-construction-gif.gif" alt="Under Construction" height="100">
|
||||
</div>
|
||||
|
||||
## Table of Contents
|
||||
|
||||
- [Library](/doc/library/library.md)
|
||||
- [Entries](/doc/library/entry.md)
|
||||
- [Fields](/doc/library/field.md)
|
||||
- [Tags](/doc/library/tag.md)
|
||||
- [Tools & Macros](/doc/utilities/macro.md)
|
||||
- [Planned Features](/doc/updates/planned_features.md)
|
||||
|
||||
---
|
||||
|
||||
### [Database Migration](/doc/updates/db_migration.md)
|
||||
|
||||
The "Database Migration", "DB Migration", or "SQLite Migration" is an upcoming update to TagStudio which will replace the current JSON [library](/doc/library/library.md) with a SQL-based one, and will additionally include some fundamental changes to how some features such as [tags](/doc/library/tag.md) will work.
|
||||
25
doc/library/entry.md
Normal file
@@ -0,0 +1,25 @@
|
||||
# Entry
|
||||
|
||||
Entries are the units that fill a [library](/doc/library/library.md). Each one corresponds to a file, holding a reference to it along with the metadata associated with it.
|
||||
|
||||
### Entry Object Structure
|
||||
|
||||
1. `id`:
|
||||
- Int, Unique, **Required**
|
||||
- The ID for the Entry.
|
||||
- Used for internal processing
|
||||
2. `filename`:
|
||||
- String, **Required**
|
||||
- The filename with extension of the referenced media file.
|
||||
3. `path`:
|
||||
- String, **Required**, OS Agnostic
|
||||
- The folder path in which the media file is located in.
|
||||
4. [`fields`](/doc/library/field.md):
|
||||
- List of dicts, Optional
|
||||
- A list of Field ID/Value dicts.
|
||||
|
||||
NOTE: _Entries currently have several unused optional fields intended for later features._
|
||||
|
||||
## Retrieving Entries based on [Tag](/doc/library/tag.md) Cluster
|
||||
|
||||
By default when querying Entries, each Entry's `tags` list (stored in the form of Tag `id`s) is compared against the Tag `id`s in a given Tag cluster (list of Tag `id`s) or appended clusters in the case of multi-term queries. The type of comparison depends on the type of query and whether or not it is an inclusive or exclusive query, or a combination of both. This default searching behavior is done in _O(n)_ time, but can be sped up in the future by building indexes on certain search terms. These indexes can be stored on disk and loaded back into memory in future sessions. These indexes will also need to be updated as new Tags and Entries are added or edited.
|
||||
@@ -1,8 +1,3 @@
|
||||
---
|
||||
tags:
|
||||
- Upcoming Feature
|
||||
---
|
||||
|
||||
# Entry Groups
|
||||
# Entry Groups (Upcoming Feature)
|
||||
|
||||
Entries can be grouped via tags marked as “groups” which when applied to different entries will signal TagStudio to treat those entries as a single group inside of searches and browsing.
|
||||
34
doc/library/field.md
Normal file
@@ -0,0 +1,34 @@
|
||||
# Field
|
||||
|
||||
Fields are the building blocks of metadata stored in [entries](/doc/library/entry.md). Fields have several base types for representing different kinds of information, including:
|
||||
|
||||
#### `text_line`
|
||||
|
||||
- A string of text, displayed as a single line.
|
||||
- e.g: Title, Author, Artist, URL, etc.
|
||||
|
||||
#### `text_box`
|
||||
|
||||
- A long string of text displayed as a box of text.
|
||||
- e.g: Description, Notes, etc.
|
||||
|
||||
#### `tag_box`
|
||||
|
||||
- A box of [tags](/doc/library/tag.md) defined and added by the user.
|
||||
- Multiple tag boxes can be used to separate classifications of tags.
|
||||
- e.g: Content Tags, Meta Tags, etc.
|
||||
|
||||
#### `datetime` [WIP]
|
||||
|
||||
- A date and time value.
|
||||
- e.g: Date Created, Date Modified, Date Taken, etc.
|
||||
|
||||
#### `checkbox` [WIP]
|
||||
|
||||
- A simple two-state checkbox.
|
||||
- Can be associated with a tag for quick organization.
|
||||
- e.g: Archive, Favorite, etc.
|
||||
|
||||
#### `collation` [obsolete]
|
||||
|
||||
- Previously used for associating files to be used in a [collation](/doc/utilities/macro.md#create-collage), will be removed in favor of a more flexible feature in future updates.
|
||||
11
doc/library/library.md
Normal file
@@ -0,0 +1,11 @@
|
||||
# Library
|
||||
|
||||
The library is how TagStudio represents your chosen directory, with every file inside of it being displayed as an [entry](/doc/library/entry.md). You can have as many or few libraries as you wish, since each libraries' data is stored within a "`.TagStudio`" folder at its root.
|
||||
Note that this means [tags](/doc/library/tag.md) you create only exist _per-library_.
|
||||
|
||||
### Library Contents
|
||||
|
||||
- [Entries](/doc/library/entry.md)
|
||||
- [Fields](/doc/library/field.md)
|
||||
- [Tags](/doc/library/tag.md)
|
||||
- [Macros](/doc/utilities/macro.md)
|
||||
85
doc/library/tag.md
Normal file
@@ -0,0 +1,85 @@
|
||||
# Tag
|
||||
|
||||
Tags are user-defined attributes made up of one or more keywords, aliases, and relationships to other tags. A person, place, thing, concept, you name it! Tags allow for a more sophisticated way to organize and search [entries](/doc/library/entry.md) thanks to their aliases, parent tags, and more.
|
||||
Tags can be as simple or complex as wanted, so that any user can tune TagStudio to fit their needs.
|
||||
|
||||
Among the things that make tags so useful, aliases give the ability to contain alternate names and spellings, making searches intuitive and expansive. Furthermore, parent-tags/subtags offer relational organization capabilities for the structuring and connection of the [library's](/doc/library/library.md) contents.
|
||||
|
||||
## Tag Object Structure
|
||||
|
||||
#### `id`
|
||||
|
||||
ID for the tag.
|
||||
|
||||
- Int, Unique, Required
|
||||
- Used for internal processing
|
||||
|
||||
#### `name`
|
||||
|
||||
The normal name of the tag, with no shortening or specification.
|
||||
|
||||
- String, Required
|
||||
- Doesn't have to be unique
|
||||
- Used for display, searching, and storing
|
||||
|
||||
#### `shorthand`
|
||||
|
||||
The shorthand name for the tag. Works like an alias but is used for specific display purposes.
|
||||
|
||||
- String, Optional
|
||||
- Doesn't have to be unique
|
||||
- Used for display and searching
|
||||
|
||||
#### `aliases`
|
||||
|
||||
Alternate names for the tag.
|
||||
|
||||
- List of Strings, Optional
|
||||
- Recommended to be unique to this tag
|
||||
- Used for searching
|
||||
|
||||
#### `subtags`
|
||||
|
||||
Other Tags that make up properties of this tag. Also called "parent tags".
|
||||
|
||||
- List of Strings, Optional
|
||||
- Used for display (first parent tag only) and searching.
|
||||
|
||||
#### `color`
|
||||
|
||||
A color name string for customizing the tag's display color
|
||||
|
||||
- String, Optional
|
||||
- Used for display
|
||||
|
||||
## Tag Search Examples:
|
||||
|
||||
Using for example, a library of files including some tagged with the following tags:
|
||||
|
||||
| Tag | `name` | `shorthand` | `aliases` | `parent tags` |
|
||||
| ------------------- | ------------------- | ----------- | ---------------------- | -------------------------------------------- |
|
||||
| _League of Legends_ | "League of Legends" | "LoL" | ["League"] | ["Game", "Fantasy"] |
|
||||
| _Arcane_ | "Arcane" | "" | [] | ["League of Legends", "Cartoon"] |
|
||||
| _Jinx (LoL)_ | "Jinx Piltover" | "Jinx" | ["Jinxy", "Jinxy Poo"] | ["League of Legends", "Arcane", "Character"] |
|
||||
| _Zander (Arcane)_ | "Zander Zanderson" | "Zander" | [] | ["Arcane", "Character"] |
|
||||
| _Mr. Legend (LoL)_ | "Mr. Legend" | "" | [] | ["League of Legends", "Character"] |
|
||||
|
||||
**The query "Arcane" will display results tagged with:**
|
||||
|
||||
| Tag | Cause of Inclusion | Tag Tree Lineage |
|
||||
| --------------- | -------------------------------- | -------------------------- |
|
||||
| Arcane | Direct match of tag name | "Arcane" |
|
||||
| Jinx (LoL) | Search term is set as parent tag | "Jinx (LoL) > Arcane" |
|
||||
| Zander (Arcane) | Search term is set as parent tag | "Zander (Arcane) > Arcane" |
|
||||
|
||||
**The query "League of Legends" will display results tagged with:**
|
||||
|
||||
| Tag | Cause of Inclusion | Tag Tree Lineage |
|
||||
| ----------------- | ------------------------------------------------------ | ---------------------------------------------- |
|
||||
| League of Legends | Direct match of tag name | "League of Legends" |
|
||||
| Arcane | Search term is set as parent tag | "Arcane > League of Legends" |
|
||||
| Jinx (LoL) | Search term is set as parent tag | "Jinx (LoL) > League of Legends" |
|
||||
| Mr. Legend (LoL) | Search term is set as parent tag | "Mr. Legend (LoL) > League of Legends" |
|
||||
| Zander (Arcane) | Search term is a parent tag of a tag set as parent tag | "Zander (Arcane) > Arcane > League of Legends" |
|
||||
|
||||
Note: The query "LoL" will display the same results as the above example since "LoL" is the shorthand for "League of Legends".
|
||||
3
doc/library/tag_categories.md
Normal file
@@ -0,0 +1,3 @@
|
||||
# Tag Categories (Upcoming Feature)
|
||||
|
||||
Replaces [Tag Fields](/doc/library/field.md#tag_box). Tags are able to be marked as a “category” which then displays as tag fields currently do, with any tags inheriting from that category being displayed underneath.
|
||||
16
doc/library/tag_overrides.md
Normal file
@@ -0,0 +1,16 @@
|
||||
# Tag Overrides (Upcoming Feature)
|
||||
|
||||
Tag overrides are the ability to add or remove [parent tags](/doc/library/tag.md#subtags) from a [tag](/doc/library/tag.md) on a per- [entry](/doc/library/entry.md) basis. Relies on the [Database Migration](/doc/updates/db_migration.md) update being complete.
|
||||
|
||||
## Examples
|
||||
|
||||
<figure>
|
||||
<img src="../assets/tag_override_ex-1.png" alt="Example 1" height="300">
|
||||
<figcaption>Ex. 1 - Comparing standard tag composition vs additive and subtractive inheritance overrides.</figcaption>
|
||||
</figure>
|
||||
|
||||
<figure>
|
||||
<img src="../assets/tag_override_ex-2.png" alt="Example 2" height="300">
|
||||
|
||||
<figcaption>Ex. 2 - Parent tag swap using tag overrides.</figcaption>
|
||||
</figure>
|
||||
43
doc/updates/db_migration.md
Normal file
@@ -0,0 +1,43 @@
|
||||
# Database Migration
|
||||
|
||||
The database migration is an upcoming refactor to TagStudio's library data storage system. The database will be migrated from a JSON-based one to a SQLite-based one. Part of this migration will include a reworked schema, which will allow for several new features and changes to how [tags](/doc/library/tag.md) and [fields](/doc/library/field.md) operate.
|
||||
|
||||
## Schema
|
||||
|
||||
<img src="../assets/db_schema.png" alt="Database Schema" width="500">
|
||||
|
||||
### `alias` Table
|
||||
|
||||
_Description TBA_
|
||||
|
||||
### `entry` Table
|
||||
|
||||
_Description TBA_
|
||||
|
||||
### `entry_attribute` Table
|
||||
|
||||
_Description TBA_
|
||||
|
||||
### `entry_page` Table
|
||||
|
||||
_Description TBA_
|
||||
|
||||
### `location` Table
|
||||
|
||||
_Description TBA_
|
||||
|
||||
### `tag` Table
|
||||
|
||||
_Description TBA_
|
||||
|
||||
### `tag_relation` Table
|
||||
|
||||
_Description TBA_
|
||||
|
||||
## Resulting New Features and Changes
|
||||
|
||||
- Multiple Directory Support
|
||||
- [Tag Categories](/doc/library/tag_categories.md) (Replaces [Tag Fields](/doc/library/field.md#tag_box))
|
||||
- [Tag Overrides](/doc/library/tag_overrides.md)
|
||||
- User-Defined [Fields](/doc/library/field.md)
|
||||
- Tag Icons
|
||||
59
doc/updates/planned_features.md
Normal file
@@ -0,0 +1,59 @@
|
||||
# Planned Features
|
||||
|
||||
The following lists outline the planned major and minor features for TagStudio, in no particular order.
|
||||
|
||||
# Major Features
|
||||
|
||||
- [SQL Database Migration](/doc/updates/db_migration.md)
|
||||
- Multiple Directory Support
|
||||
- [Tags Categories](/doc/library/tag_categories.md)
|
||||
- [Entry Groups](/doc/library/entry_groups.md)
|
||||
- [Tag Overrides](/doc/library/tag_overrides.md)
|
||||
- Tagging Panel
|
||||
- Top Tags
|
||||
- Recent Tags
|
||||
- Tag Search
|
||||
- Pinned Tags
|
||||
- Configurable Default Fields (May be part of [Macros](/doc/utilities/macro.md))
|
||||
- Deep File Extension Control
|
||||
- Settings Menu
|
||||
- Custom User Colors
|
||||
- Search Engine Rework
|
||||
- Boolean Search
|
||||
- Tag Objects In Search
|
||||
- Search For Fields
|
||||
- Sortable Search Results
|
||||
- Automatic Entry Relinking
|
||||
- Detect Renames
|
||||
- Detect Moves
|
||||
- Thumbnail Caching
|
||||
- User-Defined Fields
|
||||
- Exportable Library/Tag Data
|
||||
- Exportable Human-Readable Library
|
||||
- Exportable/Importable Human-Readable “Tag Packs”
|
||||
- Exportable/Importable Color Palettes
|
||||
- Configurable Thumbnail Labels
|
||||
- Toggle Extension Label
|
||||
- Toggle File Size Label
|
||||
- Configurable Thumbnail Tag Badges
|
||||
- Customize tags that appear instead of just “Archive” and “Favorite”
|
||||
- OCR Search
|
||||
|
||||
## Minor Features
|
||||
|
||||
- Deleting Tags
|
||||
- Merging Tags
|
||||
- Tag Icons
|
||||
- Tag/Field Copy + Paste
|
||||
- Collage UI
|
||||
- Resizable Thumbnail Grid
|
||||
- Draggable Files Outside The Program
|
||||
- File Property Caching
|
||||
- 3D Previews
|
||||
- Audio Waveform Previews
|
||||
- Toggle Between Waveform And Album Artwork
|
||||
- PDF Previews
|
||||
- SVG Previews
|
||||
- Full Video Player
|
||||
- Duration Properties For Video + Audio Files
|
||||
- Optional Starter Tag Packs
|
||||
43
doc/utilities/macro.md
Normal file
@@ -0,0 +1,43 @@
|
||||
# Tools & Macros
|
||||
|
||||
Tools and macros are features that serve to create a more fluid [library](/doc/library/library.md)-managing process, or provide some extra functionality. Please note that some are still in active development and will be fleshed out in future updates.
|
||||
|
||||
## Tools
|
||||
|
||||
### Fix Unlinked Entries
|
||||
|
||||
This tool displays the number of unlinked [entries](/doc/library/entry.md), and some options for their resolution.
|
||||
|
||||
1. Refresh
|
||||
- Scans through the library and updates the unlinked entry count.
|
||||
2. Search & Relink
|
||||
- Attempts to automatically find and reassign missing files.
|
||||
3. Delete Unlinked Entries
|
||||
- Displays a confirmation prompt containing the list of all missing files to be deleted before committing to or cancelling the operation.
|
||||
|
||||
### Fix Duplicate Files
|
||||
|
||||
This tool allows for management of duplicate files in the library using a [DupeGuru](https://dupeguru.voltaicideas.net/) file.
|
||||
|
||||
1. Load DupeGuru File
|
||||
- load the "results" file created from a DupeGuru scan
|
||||
2. Mirror Entries
|
||||
- Duplicate entries will have their contents mirrored across all instances. This allows for duplicate files to then be deleted with DupeGuru as desired, without losing the [field](/doc/library/field.md) data that has been assigned to either. (Once deleted, the "Fix Unlinked Entries" tool can be used to clean up the duplicates)
|
||||
|
||||
### Create Collage
|
||||
|
||||
This tool is a preview of an upcoming feature. When selected, TagStudio will generate a collage of all the contents in a Library, which can be found in the Library folder ("/your-folder/.TagStudio/collages/"). Note that this feature is still in early development, and doesn't yet offer any customization options.
|
||||
|
||||
## Macros
|
||||
|
||||
### Auto-fill [WIP]
|
||||
|
||||
Tool is in development and will be documented in future update.
|
||||
|
||||
### Sort fields
|
||||
|
||||
Tool is in development, will allow for user-defined sorting of [fields](/doc/library/field.md).
|
||||
|
||||
### Folders to Tags
|
||||
|
||||
Creates tags from the existing folder structure in the library, which are previewed in a hierarchy view for the user to confirm. A tag will be created for each folder and applied to all entries, with each subfolder being linked to the parent folder as a [parent tag](/doc/library/tag.md#subtags). Tags will initially be named after the folders, but can be fully edited and customized afterwards.
|
||||
@@ -1 +0,0 @@
|
||||
docs.tagstud.io
|
||||
|
Before Width: | Height: | Size: 98 KiB |
|
Before Width: | Height: | Size: 85 KiB |
|
Before Width: | Height: | Size: 76 KiB |
|
Before Width: | Height: | Size: 76 KiB |
|
Before Width: | Height: | Size: 75 KiB |
|
Before Width: | Height: | Size: 7.3 KiB |
|
Before Width: | Height: | Size: 54 KiB |
|
Before Width: | Height: | Size: 158 KiB |
|
Before Width: | Height: | Size: 361 KiB |
|
Before Width: | Height: | Size: 677 KiB |
|
Before Width: | Height: | Size: 1.2 MiB |
|
Before Width: | Height: | Size: 23 KiB |
|
Before Width: | Height: | Size: 212 KiB |
|
Before Width: | Height: | Size: 105 KiB |
|
Before Width: | Height: | Size: 26 KiB |
@@ -1,54 +0,0 @@
|
||||
# FFmpeg
|
||||
|
||||
FFmpeg is required for thumbnail previews and playback features on audio and video files. FFmpeg is a free Open Source project dedicated to the handling of multimedia (video, audio, etc) files. For more information, see their official website at [ffmpeg.org](https://www.ffmpeg.org/).
|
||||
|
||||
## Installation on Windows
|
||||
|
||||
### Prebuilt Binaries
|
||||
|
||||
Pre-built binaries from trusted sources are available on the [FFmpeg website](https://www.ffmpeg.org/download.html). Under "More downloading options" click on the Windows section, then under "Windows EXE Files" select a source to download a build from. Follow any further download instructions from whichever build website you choose.
|
||||
|
||||

|
||||
|
||||
<!-- prettier-ignore -->
|
||||
!!! warning
|
||||
Do NOT download the source code by mistake!
|
||||
|
||||
To Install:
|
||||
|
||||
1. Download 7z or zip file and extract it (right click > Extract All)
|
||||
2. Move extracted contents to a unique folder (i.e; `c:\ffmpeg` or `c:\Program Files\ffmpeg`)
|
||||
3. Add FFmpeg to your system PATH
|
||||
|
||||
1. In Windows, search for or go to "Edit the system environment variables" under the Control Panel
|
||||
2. Under "User Variables", select "Path" then edit
|
||||
3. Click new and add `<Your folder>\bin` (e.g; `c:\ffmpeg\bin` or `c:\Program Files\ffmpeg\bin`)
|
||||
4. Click "Okay"
|
||||
|
||||
### Package Managers
|
||||
|
||||
FFmpeg is also available from:
|
||||
|
||||
1. WinGet (`winget install ffmpeg`)
|
||||
2. Scoop (`scoop install main/ffmpeg`)
|
||||
3. Chocolatey (`choco install ffmpeg-full`)
|
||||
|
||||
## Installation on Mac
|
||||
|
||||
### Homebrew
|
||||
|
||||
FFmpeg is available under the macOS section of the [FFmpeg website](https://www.ffmpeg.org/download.html) or can be installed via [Homebrew](https://brew.sh/) using `brew install ffmpeg`.
|
||||
|
||||
## Installation on Linux
|
||||
|
||||
### Package Managers
|
||||
|
||||
FFmpeg may be installed by default on some Linux distributions, but if not, it is available via your distro's package manager of choice:
|
||||
|
||||
1. Debian/Ubuntu (`sudo apt install ffmpeg`)
|
||||
2. Fedora (`sudo dnf install ffmpeg-free`)
|
||||
3. Arch (`sudo pacman -S ffmpeg`)
|
||||
|
||||
# Help
|
||||
|
||||
For additional help, please join the [Discord](https://discord.gg/hRNnVKhF2G) or create an Issue on the [GitHub repository](https://github.com/TagStudioDev/TagStudio)
|
||||
@@ -1,52 +0,0 @@
|
||||
---
|
||||
title: Home
|
||||
---
|
||||
|
||||
# Welcome to the TagStudio Documentation!
|
||||
|
||||

|
||||
|
||||
TagStudio is a photo & file organization application with an underlying tag-based system that focuses on giving freedom and flexibility to the user. No proprietary programs or formats, no sea of sidecar files, and no complete upheaval of your filesystem structure.
|
||||
|
||||
<figure width="60%" markdown="span">
|
||||
|
||||

|
||||
|
||||
<figcaption>TagStudio Alpha v9.5.0 running on macOS Sequoia.</figcaption>
|
||||
|
||||
</figure>
|
||||
|
||||
## Feature Roadmap
|
||||
|
||||
The [Feature Roadmap](updates/roadmap.md) lists all of the planned core features for TagStudio to be considered "feature complete" along with estimated release milestones. The development and testing of these features takes priority over all other requested or submitted features unless they are later added to this roadmap. This helps ensure that TagStudio eventually sees a full release and becomes more usable by more people more quickly.
|
||||
|
||||
## Current Features
|
||||
|
||||
### Libraries
|
||||
|
||||
- Create [libraries](./library/index.md) centered around a system directory. Libraries contain a series of entries: the representations of your files combined with metadata fields. Each entry represents a file in your library’s directory, and is linked to its location.
|
||||
- Address moved, deleted, or otherwise "unlinked" files by using the "Fix Unlinked Entries" option in the Tools menu.
|
||||
|
||||
### Tagging + Metadata Fields
|
||||
|
||||
- Add custom powerful [tags](./library/tag.md) to your library entries
|
||||
- Add [metadata fields](./library/field.md) to your library entries, including:
|
||||
- Name, Author, Artist (Single-Line Text Fields)
|
||||
- Description, Notes (Multiline Text Fields)
|
||||
- Create rich tags composed of a name, color, a list of aliases, and a list of “parent tags” - these being tags in which these tags inherit values from.
|
||||
- Copy and paste tags and fields across file entries
|
||||
- Automatically organize tags into groups based on parent tags marked as "categories"
|
||||
- Generate tags from your existing folder structure with the "Folders to Tags" macro (NOTE: these tags do NOT sync with folders after they are created)
|
||||
|
||||
### Search
|
||||
|
||||
- [Search](./library/library_search.md) for file entries based on tags, file path (`path:`), file types (`filetype:`), and even media types! (`mediatype:`)
|
||||
- Use and combine boolean operators (`AND`, `OR`, `NOT`) along with parentheses groups, quotation escaping, and underscore substitution to create detailed search queries
|
||||
- Use special search conditions (`special:untagged`) to find file entries without tags or fields, respectively
|
||||
|
||||
### File Entries
|
||||
|
||||
- Nearly all [file](./library/entry.md) types are supported in TagStudio libraries - just not all have dedicated thumbnail support.
|
||||
- Preview most image file types, animated GIFs, videos, plain text documents, audio files, Blender projects, and more!
|
||||
- Open files or file locations by right-clicking on thumbnails and previews and selecting the respective context menu options. You can also click on the preview panel image to open the file, and click the file path label to open its location.
|
||||
- Delete files from both your library and drive by right-clicking the thumbnail(s) and selecting the "Move to Trash"/"Move to Recycle Bin" option.
|
||||
@@ -1,27 +0,0 @@
|
||||
# Installation
|
||||
|
||||
To download TagStudio, visit the [Releases](https://github.com/TagStudioDev/TagStudio/releases) section of the GitHub repository and download the latest release for your system under the "Assets" section. TagStudio is available for **Windows**, **macOS** _(Apple Silicon & Intel)_, and **Linux**. Windows and Linux builds are also available in portable versions if you want a more self-contained executable to move around.
|
||||
|
||||
**We do not currently publish TagStudio to any package managers. Any TagStudio distributions outside of the GitHub releases page are _unofficial_ and not maintained by us.** Installation support will not be given to users installing from unofficial sources. Use these versions at your own risk.
|
||||
|
||||
<!-- prettier-ignore -->
|
||||
!!! info "For macOS Users"
|
||||
On macOS, you may be met with a message saying _""TagStudio" can't be opened because Apple cannot check it for malicious software."_ If you encounter this, then you'll need to go to the "Settings" app, navigate to "Privacy & Security", and scroll down to a section that says _""TagStudio" was blocked from use because it is not from an identified developer."_ Click the "Open Anyway" button to allow TagStudio to run. You should only have to do this once after downloading the application.
|
||||
|
||||
<!-- prettier-ignore -->
|
||||
!!! info "For Linux Users"
|
||||
On Linux with non-Qt based Desktop Environments you may be unable to open TagStudio. You need to make sure that "xcb-cursor0" or "libxcb-cursor0" packages are installed. For more info check [Missing linux dependencies](https://github.com/TagStudioDev/TagStudio/discussions/182#discussioncomment-9452896)
|
||||
|
||||
## Third-Party Dependencies
|
||||
|
||||
- For video thumbnails and playback, you'll also need [FFmpeg](https://ffmpeg.org/download.html) installed on your system. If you encounter any issues with this, please reference our [FFmpeg Help](./help/ffmpeg.md) guide.
|
||||
|
||||
## Optional Arguments
|
||||
|
||||
Optional arguments to pass to the program:
|
||||
|
||||
`--open <path>` / `-o <path>`
|
||||
: Path to a TagStudio Library folder to open on start.
|
||||
|
||||
`--config-file <path>` / `-c <path>`
|
||||
: Path to the TagStudio config file to load.
|
||||
@@ -1,50 +0,0 @@
|
||||
# File Entries
|
||||
|
||||
File entries are the individual representations of your files inside a TagStudio [library](index.md). Each one corresponds one-to-one to a file on disk, and tracks all of the additional [tags](tag.md) and metadata that you attach to it inside TagStudio.
|
||||
|
||||
## Storage
|
||||
|
||||
File entry data is storied within the `ts_library.sqlite` file inside each library's `.TagStudio` folder. No modifications are made to your actual files on disk, and nothing like sidecar files are generated for your files.
|
||||
|
||||
## Appearance
|
||||
|
||||
File entries appear as file previews both inside the thumbnail grid. The preview panel shows a more detailed preview of the file, along with extra file stats and all attached TagStudio tags and fields.
|
||||
|
||||
## Unlinked File Entries
|
||||
|
||||
If the file that an entry is referencing has been moved, renamed, or deleted on disk, then TagStudio will display a red chain-link icon for the thumbnail image. Certain uncached stats such as the file size and image dimensions will also be unavailable to see in the preview panel when a file becomes unlinked.
|
||||
|
||||
To fix file entries that have become unlinked, select the "Fix Unlinked Entries" option from the Tools menu. From there, refresh the unlinked entry count and choose whether to search and relink you files, and/or delete the file entires from your library. This will NOT delete or modify any files on disk.
|
||||
|
||||
## Internal Structure
|
||||
|
||||
- `id` (`INTEGER`/`int`, `UNIQUE`, `NOT NULL`, `PRIMARY KEY`)
|
||||
- The ID for the file entry.
|
||||
- Used for guaranteed unique references.
|
||||
- `folder` (`INTEGER`/`int`, `NOT NULL`, `FOREIGN KEY`)
|
||||
- _Not currently used, may be removed._
|
||||
- `path` (`VARCHAR`/`Path`, `UNIQUE`, `NOT NULL`)
|
||||
- The filename and filepath relative to the root of the library folder.
|
||||
- (E.g. for library "Folder", path = "any_subfolders/filename.txt")
|
||||
- `suffix` (`VARCHAR`/`str`, `NOT NULL`)
|
||||
- The filename suffix with no leading dot.
|
||||
- Used for quicker file extension checks.
|
||||
- `date_created` (`DATETIME`/`Datetime`)
|
||||
- _Not currently used, will be implemented in an upcoming update._
|
||||
- The creation date of the file (not the entry).
|
||||
- Generates from `st_birthtime` on Windows and Mac, and `st_ctime` on Linux.
|
||||
- `date_modified` (`DATETIME`/`Datetime`)
|
||||
- _Not currently used, will be implemented in an upcoming update._
|
||||
- The latest modification date of the file (not the entry).
|
||||
- Generates from `st_mtime`.
|
||||
- `date_added` (`DATETIME`/`Datetime`)
|
||||
- The date the file entry was added to the TagStudio library.
|
||||
|
||||
### Table Relationships
|
||||
|
||||
- `tag_entries`
|
||||
- A relationship between `entry_id` to `tag_id`s from the `tags` table.
|
||||
- `text_fields`
|
||||
- (TODO: determine the relationship for `entry_id`)
|
||||
- `datetime_fields`
|
||||
- (TODO: determine the relationship for `entry_id`)
|
||||
@@ -1,23 +0,0 @@
|
||||
# Fields
|
||||
|
||||
Fields are additional types of metadata that you can attach to [file entries](entry.md). Like [tags](tag.md), fields are not stored inside files themselves nor in sidecar files, but rather inside the respective TagStudio [library](index.md) save file.
|
||||
|
||||
## Field Types
|
||||
|
||||
### Text Line
|
||||
|
||||
A string of text, displayed as a single line.
|
||||
|
||||
- e.g: Title, Author, Artist, URL, etc.
|
||||
|
||||
### Text Box
|
||||
|
||||
A long string of text displayed as a box of text.
|
||||
|
||||
- e.g: Description, Notes, etc.
|
||||
|
||||
### Datetime [WIP]
|
||||
|
||||
A date and time value.
|
||||
|
||||
- e.g: Date Published, Date Taken, etc.
|
||||
@@ -1,5 +0,0 @@
|
||||
# Library
|
||||
|
||||
The library is how TagStudio represents your chosen directory, with every file inside being represented by a [file entry](entry.md). You can have as many or few libraries as you wish, since each libraries' data is stored within a `.TagStudio` folder at its root. From there the library save file itself is stored as `ts_library.sqlite`, with TagStudio versions 9.4 and below using a the legacy `ts_library.json` format.
|
||||
|
||||
Note that this means [tags](tag.md) you create only exist _per-library_.
|
||||
@@ -1,121 +0,0 @@
|
||||
# Library Search
|
||||
|
||||
TagStudio provides various methods to search your library, ranging from TagStudio data such as tags to inherent file data such as paths or media types.
|
||||
|
||||
## Boolean Operators
|
||||
|
||||
TagStudio allows you to use common [boolean search](https://en.wikipedia.org/wiki/Full-text_search#Boolean_queries) operators when searching your library, along with [grouping](#grouping-and-nesting), [nesting](#grouping-and-nesting), and [character escaping](#escaping-characters). Note that you may need to use grouping in order to get the desired results you're looking for.
|
||||
|
||||
### AND
|
||||
|
||||
The `AND` operator will only return results that match **both** sides of the operator. `AND` is used implicitly when no boolean operators are given. To use the `AND` operator explicitly, simply type "and" (case insensitive) in-between items of your search.
|
||||
|
||||
<!-- prettier-ignore -->
|
||||
!!! example
|
||||
Searching for "Tag1 Tag2" will be treated the same as "Tag1 `AND` Tag2" and will only return results that contain both Tag1 and Tag2.
|
||||
|
||||
### OR
|
||||
|
||||
The `OR` operator will return results that match **either** the left or right side of the operator. To use the `OR` operator simply type "or" (case insensitive) in-between items of your search.
|
||||
|
||||
<!-- prettier-ignore -->
|
||||
!!! example
|
||||
Searching for "Tag1 `OR` Tag2" will return results that contain either "Tag1", "Tag2", or both.
|
||||
|
||||
### NOT
|
||||
|
||||
The `NOT` operator will returns results where the condition on the right is **false.** To use the `NOT` operator simply type "not" (case insensitive) in-between items of your search. You can also begin your search with `NOT` to only view results that do not contain the next term that follows.
|
||||
|
||||
<!-- prettier-ignore -->
|
||||
!!! example
|
||||
Searching for "Tag1 `NOT` Tag2" will only return results that contain "Tag1" while also not containing "Tag2".
|
||||
|
||||
### Grouping and Nesting
|
||||
|
||||
Searches can be grouped and nested by using parentheses to surround parts of your search query.
|
||||
|
||||
<!-- prettier-ignore -->
|
||||
!!! example
|
||||
Searching for "(Tag1 `OR` Tag2) `AND` Tag3" will return results any results that contain Tag3, plus one or the other (or both) of Tag1 and Tag2.
|
||||
|
||||
### Escaping Characters
|
||||
|
||||
Sometimes search queries have ambiguous characters and need to be "escaped". This is most common with tag names which contain spaces, or overlap with existing search keywords such as "[path:](#filename-and-path) of exile". To escape most search terms, surround the section of your search in plain quotes. Alternatively, spaces in tag names can be replaced by underscores.
|
||||
|
||||
#### Valid Escaped Tag Searches
|
||||
|
||||
- "Tag Name With Spaces"
|
||||
- Tag_Name_With_Spaces
|
||||
|
||||
#### Invalid Escaped Tag Searches
|
||||
|
||||
- Tag Name With Spaces
|
||||
- Reason: Ambiguity between a tag named "Tag Name With Spaces" and four individual tags called "Tag", "Name", "With", "Spaces".
|
||||
|
||||
## Tags
|
||||
|
||||
[Tag](#tags) search is the default mode of file entry search in TagStudio. No keyword prefix is required, however using `tag:` will also work. The tag search attempts to match tag [names](tag.md#name), [shorthands](tag.md#shorthand), [aliases](tag.md#aliases), as well as allows for tags to [substitute](tag.md#intuition-via-substitution) in for any of their [parent tags](tag.md#parent-tags).
|
||||
|
||||
You may also see the `tag_id:` prefix keyword show up with using the right-click "Search for Tag" option on tags. This is meant for internal use, and eventually will not be displayed or accessible to the user.
|
||||
|
||||
## Fields
|
||||
|
||||
_[Field](field.md) search is currently not in the program, however is coming in a future version._
|
||||
|
||||
## File Entry Search
|
||||
|
||||
### Filename and Path
|
||||
|
||||
Filename and path search is available via the `path:` keyword and comes in a few different styles. By default, any string that follows the `path:` keyword will be searched as a substring inside a file's complete filepath. This means that given a file `folder/my_file.txt`, searching for `path: my_file` or `path: folder` will both return results for that file.
|
||||
|
||||
#### Case Sensitivity
|
||||
|
||||
TagStudio uses a "[smartcase](https://neovim.io/doc/user/options.html#'smartcase')"-like system for case sensitivity. This means that a search term typed in `lowercase` will be treated as **case-insensitive**, while a term typed in any `MixedCase` will be treated as **case-sensitive**. This makes it quicker to type searches when case sensitivity isn't required, while also providing a simple option to leverage case sensitivity when desired. Note that this means there's technically no way to currently search for a lowercase term while respecting case sensitivity.
|
||||
|
||||
#### Glob Syntax
|
||||
|
||||
Optionally, you may use [glob](<https://en.wikipedia.org/wiki/Glob_(programming)>) syntax to search filepaths.
|
||||
|
||||
#### Examples
|
||||
|
||||
Given a file "Artwork/Piece.jpg", the following searches will return results for it:
|
||||
|
||||
- `path: artwork/piece.jpg`
|
||||
- `path: Artwork/Piece.jpg`
|
||||
- `path: piece.jpg`
|
||||
- `path: Piece.jpg`
|
||||
- `path: artwork`
|
||||
- `path: rtwor`
|
||||
- `path: ece.jpg`
|
||||
- `path: iec`
|
||||
- `path: artwork/*`
|
||||
- `path: Artwork/*`
|
||||
- `path: *piece.jpg*`
|
||||
- `path: *Piece.jpg*`
|
||||
- `path: *artwork*`
|
||||
- `path: *Artwork*`
|
||||
- `path: *rtwor*`
|
||||
- `path: *ece.jpg*`
|
||||
- `path: *iec*`
|
||||
- `path: *.jpg`
|
||||
|
||||
While the following searches will **NOT:**
|
||||
|
||||
- `path: ARTWORK/Piece.jpg` _(Reason: Mismatched case)_
|
||||
- `path: *aRtWoRk/Piece*` _(Reason: Mismatched case)_
|
||||
- `path: PieCe.jpg` _(Reason: Mismatched case)_
|
||||
- `path: *PieCe.jpg*` _(Reason: Mismatched case)_
|
||||
|
||||
## Special Searches
|
||||
|
||||
Some predefined searches use the `special:` keyword prefix and give quick results for certain special search queries.
|
||||
|
||||
### Untagged
|
||||
|
||||
To see all your file entries which don't contain any tags, use the `special: untagged` search.
|
||||
|
||||
### Empty
|
||||
|
||||
**_NOTE:_** _Currently unavailable in v9.5.0_
|
||||
|
||||
To see all your file entries which don't contain any tags _and_ any fields, use the `special: empty` search.
|
||||
@@ -1,131 +0,0 @@
|
||||
# Tags
|
||||
|
||||
Tags are discrete objects that represent some attribute. This could be a person, place, object, concept, and more. Unlike most tagging systems, TagStudio tags are not solely represented by a line of text or a hashtag. Tags in TagStudio consist of several properties and relationships that give extra customization, searching power, and ease of tagging that cannot be achieved by string-based tags alone. TagStudio tags are designed to be as simple or as complex as you'd like, giving options to users of all skill levels and use cases.
|
||||
|
||||
## Naming Tags
|
||||
|
||||
TagStudio tags do not share the same naming limitations of many other tagging solutions. The key standouts of tag names in TagStudio are:
|
||||
|
||||
- Tag names do **NOT** have to be unique
|
||||
- Tag names are **NOT** limited to specific characters
|
||||
- Tags can have **aliases**, a.k.a. alternate names to go by
|
||||
|
||||
### Name
|
||||
|
||||
This is the base name of a tag. It does not have to be unique, and can use any characters you wish. If your tag can go by multiple names, for example if it's the name of a person or something that's commonly shortened or abbreviated, then it's recommended that you put the full tag name here.
|
||||
|
||||
### Shorthand
|
||||
|
||||
This is a special type of alias that's used for shortening the tag name under special circumstances, mostly when screen space is limited. Tag shorthands can be searched for just like tag names and tag aliases.
|
||||
|
||||
### Aliases
|
||||
|
||||
Aliases are alternate names that the tag can go by. This may include individual first names for people, alternate spellings, shortened names, and more. If there's a common abbreviation or shortened name for your tag, it's recommended to use the [shorthand](#shorthand) field for this instead.
|
||||
|
||||
When searching for a tag, aliases (including the shorthand) can also be used to find the tag. This not only includes searching for tags themselves, but for tagged [file entries](entry.md) as well!
|
||||
|
||||
### Automatic Disambiguation
|
||||
|
||||
Just as in real life, sometimes there are different attributes that share the same name with one another. The process of adding specificity to something in order to not confuse it with something similar is known as [disambiguation](https://en.wikipedia.org/wiki/Word-sense_disambiguation). In TagStudio we give the option to automatically disambiguate tag names based on a specially marked [Parent Tag](#parent-tags). Parent tags are explained in further detail below, but for the purposes of tag names they can lend themselves to clarifying the name of a tag without the user needing to manually change the name or add complicated aliases.
|
||||
|
||||
Given a tag named "Freddy", we may confuse it with other "Freddy" tags in our library. There are lots of Freddys in the world, after all. If we're talking about Freddy from "Five Nights at Freddy's", then we may already (and likely should) have a separate "Five Nights at Freddy's" tag added as a parent tag. When the disambiguation box next to a parent tag is selected (see image below) then our tag name will automatically display its name with that parent tag's name (or shorthand if available) in parentheses.
|
||||
|
||||

|
||||
|
||||
So if the "Five Night's at Freddy's" tag is added as a parent tag on the "Freddy" tag, and the disambiguation box next to it is checked, then our tag name will automatically be displayed as "Freddy (Five Nights at Freddy's)". Better yet, if the "Five Night's at Freddy's" tag has a shorthand such as "FNAF", then our "Freddy" tag will be displayed as "Freddy (FNAF)". This process preserves our base tag name ("Freddy") and provides an option to get a clean and consistent method to display disambiguating parent categories, rather than having to type this information in manually for each applicable tag.
|
||||
|
||||
## Tag Relationships
|
||||
|
||||
One of the core properties of tags in TagStudio is their ability to form relationships with other tags, just as attributes have relationships with each other in real life. A rectangle is a square, but a square isn't a rectangle. A certain plumber with a red hat and blue overalls might be part of a well-known media franchise, developed by an equally well-known company. But how do representing these relationships help with tagging images and files? With tag relationships, we can leverage the following principles:
|
||||
|
||||
1. [Simplicity via Deduplication](#simplicity-via-deduplication)
|
||||
2. [Intuition via Substitution](#intuition-via-substitution)
|
||||
3. [Rediscovery via Linking](#rediscovery-via-linking)
|
||||
|
||||
### Parent Tags
|
||||
|
||||
#### Simplicity via Deduplication
|
||||
|
||||
In a system where tags have no relationships, you're required to add as many tags as you possibly can to describe every last element of an image or file. If you want to tag an image of Shrek, you need to add a tag for `Shrek` himself, a `Character` tag since he's a character, a `Movie` and perhaps `Dreamworks` tag since he's a character from a movie, or perhaps a `Book` tag if we're talking about the original character, and then of course tags for every other attribute of Shrek shown or implied. By allowing tags to have inheritance relationships, we can have a single `Shrek` tag inherit from `Character` (Shrek IS a character) as well as from a separate `Shrek (Movie Franchise)` tag that itself inherits from `Movie Franchise` and `Dreamworks`. Now by simply adding the `Shrek` tag to an image, we've effectively also added the `Character`, `Shrek (Move Franchise)`, `Movie Franchise`, and `Dreamworks` attributes all in one go. On the image entry itself we only see `Shrek`, but the rest of the attributes are implied.
|
||||
|
||||

|
||||
|
||||
#### Intuition via Substitution
|
||||
|
||||
Now when searching for for images that have `Dreamworks` and `Character`, any images or files originally just tagged with `Shrek` will appear as you would expect. A little bit of tag setup goes a long way not only saving so much time during tagging, but also to ensure an intuitive way to search your files!
|
||||
|
||||
#### Rediscovery via Linking
|
||||
|
||||
Lastly, when searching your files with broader categories such as `Character` or `Dreamworks` you may rediscover images and files that you had simply tagged with tags such as `Barbatus` or `Tulio`, since you didn't need to manually tag those files with `Character` or `Dreamworks`, but had forgotten that they are both in fact Dreamworks characters. While you focus on tagging your files with seemingly surface level attributes, your TagStudio library is building rich connections between tags and files that may not be fully apparent until being discovered through various search queries. While you were simply tagging images with `Shrek` and `Tulio`, you may have unlocked an easy way to search for "2D Dreamworks Characters" without having to explicitly tag for that!
|
||||
|
||||
### Component Tags
|
||||
|
||||
**_[Coming in version 9.6](../updates/roadmap.md#v96)_**
|
||||
|
||||
Component tags will be built from a composition-based, or "HAS" type relationship between tags. This takes care of instances where an attribute may "have" another attribute, but doesn't inherit from it. Shrek may be an `Orge`, he may be a `Character`, but he is NOT a `Leather Vest` - even if he's commonly seen _with_ it. Component tags, along with the upcoming [Tag Override](tag_overrides.md) feature, are built to handle these cases in a way that still simplifies the tagging process without adding too much undue complexity for the user.
|
||||
|
||||
## Tag Appearance
|
||||
|
||||
### Color
|
||||
|
||||
Tags use a default uncolored appearance by default, however can take on a number of built-in and user-created colors and color palettes! Tag color palettes can be based on a single color value (see: TagStudio Standard, TagStudio Shades, TagStudio Pastels) or use an optional secondary color use for the text and optionally the tag border (e.g. TagStudio Neon).
|
||||
|
||||

|
||||
|
||||
#### User-Created Colors
|
||||
|
||||
Custom palettes and colors can be created via the [Tag Color Manager](./tag_color.md). These colors will display alongside the built-in colors inside the tag selection window and are separated by their namespace names. Colors which use the secondary color for the tag border will be outlined in that color, otherwise they will only display the secondary color on the bottom of the swatch to indicate at a glance that the text colors are different.
|
||||
|
||||

|
||||
|
||||
### Icon
|
||||
|
||||
**_[Coming in version 9.6](../updates/roadmap.md#v96)_**
|
||||
|
||||
## Tag Properties
|
||||
|
||||
Properties are special attributes of tags that change their behavior in some way.
|
||||
|
||||
#### Is Category
|
||||
|
||||
When the "Is Category" property is checked, this tag now acts as a category separator inside the preview panel. If this tag or any tags inheriting from this tag (i.e. tags that have this tag as a "[Parent Tag](#parent-tags)"), then these tags will appear under a separated group that's named after this tag. Tags inheriting from multiple "category tags" will still show up under any applicable category. _Read more under: [Tag Categories](../library/tag_categories.md)._
|
||||
|
||||

|
||||
|
||||
#### Is Hidden
|
||||
|
||||
**_[Coming in version 9.6](../updates/roadmap.md#v96)_**
|
||||
|
||||
When the "Is Hidden" property is checked, any file entries tagged with this tag will not show up in searches by default. This property comes by default with the built-in "Archived" tag.
|
||||
|
||||
## Tag Search Examples
|
||||
|
||||
The following are examples of how a set of given tags will respond to various search queries.
|
||||
|
||||
| Tag | Name | Shorthand | Aliases | Parent Tags |
|
||||
| ------------------- | ------------------- | --------- | ---------------------- | -------------------------------------------- |
|
||||
| _League of Legends_ | "League of Legends" | "LoL" | ["League"] | ["Game", "Fantasy"] |
|
||||
| _Arcane_ | "Arcane" | "" | [] | ["League of Legends", "Cartoon"] |
|
||||
| _Jinx (LoL)_ | "Jinx Piltover" | "Jinx" | ["Jinxy", "Jinxy Poo"] | ["League of Legends", "Arcane", "Character"] |
|
||||
| _Zander (Arcane)_ | "Zander Zanderson" | "Zander" | [] | ["Arcane", "Character"] |
|
||||
| _Mr. Legend (LoL)_ | "Mr. Legend" | "" | [] | ["League of Legends", "Character"] |
|
||||
|
||||
**The query "Arcane" will display results tagged with:**
|
||||
|
||||
| Tag | Cause of Inclusion | Tag Tree Lineage |
|
||||
| --------------- | -------------------------------- | -------------------------- |
|
||||
| Arcane | Direct match of tag name | "Arcane" |
|
||||
| Jinx (LoL) | Search term is set as parent tag | "Jinx (LoL) > Arcane" |
|
||||
| Zander (Arcane) | Search term is set as parent tag | "Zander (Arcane) > Arcane" |
|
||||
|
||||
**The query "League of Legends" will display results tagged with:**
|
||||
|
||||
| Tag | Cause of Inclusion | Tag Tree Lineage |
|
||||
| ----------------- | ------------------------------------------------------ | ---------------------------------------------- |
|
||||
| League of Legends | Direct match of tag name | "League of Legends" |
|
||||
| Arcane | Search term is set as parent tag | "Arcane > League of Legends" |
|
||||
| Jinx (LoL) | Search term is set as parent tag | "Jinx (LoL) > League of Legends" |
|
||||
| Mr. Legend (LoL) | Search term is set as parent tag | "Mr. Legend (LoL) > League of Legends" |
|
||||
| Zander (Arcane) | Search term is a parent tag of a tag set as parent tag | "Zander (Arcane) > Arcane > League of Legends" |
|
||||
|
||||
Note: The query "LoL" will display the same results as the above example since "LoL" is the shorthand for "League of Legends".
|
||||
@@ -1,17 +0,0 @@
|
||||
---
|
||||
tags:
|
||||
---
|
||||
|
||||
# Tag Categories
|
||||
|
||||
The "Is Category" property of tags determines if a tag should be treated as a category itself when being organized inside the preview panel. Tags marked as categories will show themselves and all tags inheriting from it (including recursively) underneath a field-like section with the tag's name. This means that duplicates of tags can appear on entries if the tag inherits from multiple parent categories, however this is by design and reflects the nature multiple inheritance. Any tags not inheriting from a category tag will simply show under a default "Tag" section.
|
||||
|
||||

|
||||
|
||||
### Built-In Tags and Categories
|
||||
|
||||
The built-in tags "Favorite" and "Archived" inherit from the built-in "Meta Tags" category which is marked as a category by default. This behavior of default tags can be fully customized by disabling the category option and/or by adding/removing the tags' Parent Tags.
|
||||
|
||||
### Migrating from v9.4 Libraries
|
||||
|
||||
Due to the nature of how tags and Tag Felids operated prior to v9.5, the organization style of Tag Categories vs Tag Fields is not 1:1. Instead of tags being organized into fields on a per-entry basis, tags themselves determine their organizational layout via the "Is Property" flag. Any tags _(not currently inheriting from either the "Favorite" or "Archived" tags)_ will be shown under the default "Tags" header upon migrating to the v9.5+ library format. Similar organization to Tag Fields can be achieved by using the built-in "Meta Tags" tag or any other marked with "Is Category" and then setting those tags as parents for other tags to inherit from.
|
||||
@@ -1,71 +0,0 @@
|
||||
# Tag Colors
|
||||
|
||||
TagStudio features a variety of built-in tag colors, alongside the ability for users to create their own custom tag color palettes.
|
||||
|
||||
## Tag Color Manager
|
||||
|
||||
The Tag Color Manager is where you can create and manage your custom tag colors and associated namespaces. To open the Tag Color Manager, go to "File -> Manage Tag Colors" option in the menu bar.
|
||||
|
||||

|
||||
|
||||
## Creating a Namespace
|
||||
|
||||
TagStudio uses namespaces to group colors into palettes. Namespaces are a way for you to use the same color name across multiple palettes without having to worry about [name collision](https://en.wikipedia.org/wiki/Name_collision) with other palettes. This is especially useful when sharing your color palettes with others!\*
|
||||
|
||||
_\* Color pack sharing coming in a future update_
|
||||
|
||||
To create your first namespace, either click the "New Namespace" button or the large button prompt underneath the built-in colors.
|
||||
|
||||

|
||||
|
||||
### Name
|
||||
|
||||
The display name of the namespace, used for presentation.
|
||||
|
||||
### ID Slug
|
||||
|
||||
An internal ID for the namespace which is automatically derived from the namespace name.
|
||||
|
||||
Namespaces beginning with "tagstudio" are reserved by TagStudio and will automatically have their text changed.
|
||||
|
||||
<!-- prettier-ignore -->
|
||||
!!! note
|
||||
It's currently not possible to manually edit the Namespace ID Slug. This will be possible once sharable color packs are added.
|
||||
|
||||
## Creating a Color
|
||||
|
||||
Once you've created your first namespace, click the "+" button inside the namespace section to create a color. To edit a color that you've previously created, either click on the color name or right click and select "Edit Color" from the context menu.
|
||||
|
||||

|
||||
|
||||
### Name
|
||||
|
||||
The display name for the color, used for presentation. You may occasionally see the color name followed by the [namespace name](#name) in parentheses to disambiguate it from other colors with the same name.
|
||||
|
||||
### ID Slug
|
||||
|
||||
Similar to [Namespace ID Slugs](#id-slug), the ID Slug is used as an internal ID and is automatically derived from the tag color name.
|
||||
|
||||
<!-- prettier-ignore -->
|
||||
!!! note
|
||||
It's currently not possible to manually edit the Color ID Slug. This will be possible once sharable color packs are added.
|
||||
|
||||
### Primary Color
|
||||
|
||||
The primary color is used as the main tag color and by default is used as the background color with the text and border colors being derived from this color.
|
||||
|
||||
### Secondary Color
|
||||
|
||||
By default, the secondary color is only used as an optional override for the tag text color. This color can be cleared by clicking the adjacent "Reset" button.
|
||||
|
||||

|
||||
|
||||
The secondary color can also be used as the tag border color by checking the "Use Secondary Color for Border" box.
|
||||
|
||||

|
||||
|
||||
## Using Colors
|
||||
|
||||
When editing a tag, click the tag color button to bring up the tag color selection panel. From here you can choose any built-in TagStudio color as well as any of your custom colors.
|
||||
|
||||

|
||||
@@ -1,20 +0,0 @@
|
||||
---
|
||||
tags:
|
||||
- Upcoming Feature
|
||||
---
|
||||
|
||||
# Tag Overrides
|
||||
|
||||
Tag overrides are the ability to add or remove [parent tags](tag.md#parent-tags) from a [tag](tag.md) on a per- [entry](entry.md) basis.
|
||||
|
||||
## Examples
|
||||
|
||||
<figure markdown="span">
|
||||
{ height="300" }
|
||||
<figcaption>Ex. 1 - Comparing standard tag composition vs additive and subtractive inheritance overrides.</figcaption>
|
||||
</figure>
|
||||
|
||||
<figure markdown="span">
|
||||
{ height="300" }
|
||||
<figcaption>Ex. 2 - Parent tag swap using tag overrides.</figcaption>
|
||||
</figure>
|
||||
@@ -1,4 +0,0 @@
|
||||
---
|
||||
title: Changelog
|
||||
---
|
||||
--8<-- "CHANGELOG.md"
|
||||
@@ -1,217 +0,0 @@
|
||||
# Feature Roadmap
|
||||
|
||||
This checklist details the current and remaining features required at a minimum for TagStudio to be considered “Feature Complete”. This list is _not_ a definitive list for additional feature requests and PRs as they come in, but rather an outline of my personal core feature set intended for TagStudio.
|
||||
|
||||
## Priorities
|
||||
|
||||
Features are broken up into the following priority levels, with nested priorities referencing their relative priority for the overall feature (i.e. A [LOW] priority feature can have a [HIGH] priority element but it otherwise still a [LOW] priority item overall):
|
||||
|
||||
- [HIGH] - Core feature
|
||||
- [MEDIUM] - Important but not necessary
|
||||
- [LOW] - Just nice to have
|
||||
|
||||
## Version Milestones
|
||||
|
||||
These version milestones are rough estimations for when the previous core features will be added. For a more definitive idea for when features are coming, please reference the current GitHub [milestones](https://github.com/TagStudioDev/TagStudio/milestones).
|
||||
|
||||
<!-- prettier-ignore -->
|
||||
!!! note
|
||||
This list was created after the release of version 9.4
|
||||
|
||||
### v9.5
|
||||
|
||||
#### Core
|
||||
|
||||
- [x] SQL backend [HIGH]
|
||||
|
||||
#### Tags
|
||||
|
||||
- [x] Deleting Tags [HIGH]
|
||||
- [ ] User-defined tag colors [HIGH]
|
||||
- [x] ID based, not string or hex [HIGH]
|
||||
- [x] Color name [HIGH]
|
||||
- [x] Color value (hex) [HIGH]
|
||||
- [x] Existing colors are now a set of base colors [HIGH]
|
||||
- [x] [Tag Categories](../library/tag_categories.md) [HIGH]
|
||||
- [x] Property available for tags that allow the tag and any inheriting from it to be displayed separately in the preview panel under a title [HIGH]
|
||||
|
||||
#### Search
|
||||
|
||||
- [x] Boolean operators [HIGH]
|
||||
- [x] Filename search [HIGH]
|
||||
- [x] Filetype search [HIGH]
|
||||
- [x] Search by extension (e.g. ".jpg", ".png") [HIGH]
|
||||
- [x] Optional consolidation of extension synonyms (i.e. ".jpg" can equal ".jpeg") [LOW]
|
||||
- [x] Search by media type (e.g. "image", "video", "document") [MEDIUM]
|
||||
- [x] Sort by date added [HIGH]
|
||||
|
||||
#### UI
|
||||
|
||||
- [ ] Translations _(Any applicable)_ [MEDIUM]
|
||||
|
||||
#### Performance
|
||||
|
||||
- [x] Thumbnail caching [HIGH]
|
||||
|
||||
### v9.6
|
||||
|
||||
#### Core
|
||||
|
||||
- [ ] Cached file property table (media duration, word count, dimensions, etc.) [MEDIUM]
|
||||
|
||||
#### Library
|
||||
|
||||
- [ ] Multiple Root Directories per Library [HIGH]
|
||||
- [ ] `.ts_ignore` (`.gitignore`-style glob ignoring) [HIGH]
|
||||
- [ ] Sharable Color Packs [MEDIUM]
|
||||
- [ ] Human-readable (TOML) files containing tag data [HIGH]
|
||||
- [ ] Importable [HIGH]
|
||||
- [ ] Exportable [HIGH]
|
||||
|
||||
#### Tags
|
||||
|
||||
- [ ] Merging Tags [HIGH]
|
||||
- [ ] [Component/HAS](../library/tag.md#component-tags) subtags [HIGH]
|
||||
- [ ] Tag Icons [HIGH]
|
||||
- [ ] Small Icons [HIGH]
|
||||
- [ ] Large Icons for Profiles [MEDIUM]
|
||||
- [ ] Built-in Icon Packs (i.e. Boxicons) [HIGH]
|
||||
- [ ] User Defined Icons [HIGH]
|
||||
- [ ] Multiple Languages for Tag Strings [MEDIUM]
|
||||
- [ ] Title is tag name [HIGH]
|
||||
- [ ] Title has tag color [MEDIUM]
|
||||
- [ ] Tag marked as category does not display as a tag itself [HIGH]
|
||||
- [ ] [Tag Overrides](../library/tag_overrides.md) [MEDIUM]
|
||||
- [ ] Per-file overrides of subtags [HIGH]
|
||||
|
||||
#### Fields
|
||||
|
||||
- [ ] Datetime fields [HIGH]
|
||||
- [ ] Custom field names [HIGH]
|
||||
|
||||
#### Search
|
||||
|
||||
- [ ] Field content search [HIGH]
|
||||
- [ ] Sort by date created [HIGH]
|
||||
- [ ] Sort by date modified [HIGH]
|
||||
- [ ] Sort by filename [HIGH]
|
||||
- [ ] HAS operator for composition tags [HIGH]
|
||||
- [ ] Search bar rework
|
||||
- [ ] Improved tag autocomplete [HIGH]
|
||||
- [ ] Tags appear as widgets in search bar [HIGH]
|
||||
|
||||
#### UI
|
||||
|
||||
- [ ] File duration on video thumbnails [HIGH]
|
||||
- [ ] 3D Model Previews [MEDIUM]
|
||||
- [ ] STL Previews [HIGH]
|
||||
- [ ] Word count/line count on text thumbnails [LOW]
|
||||
- [ ] Settings Menu [HIGH]
|
||||
- [ ] Application Settings [HIGH]
|
||||
- [ ] Stored in system user folder/designated folder [HIGH]
|
||||
- [ ] Library Settings [HIGH]
|
||||
- [ ] Stored in `.TagStudio` folder [HIGH]
|
||||
- [ ] Tagging Panel [HIGH]
|
||||
|
||||
Togglebale persistent main window panel or popout. Replaces the current tag manager.
|
||||
|
||||
- [ ] Top Tags [HIGH]
|
||||
- [ ] Recent Tags [HIGH]
|
||||
- [ ] Tag Search [HIGH]
|
||||
- [ ] Pinned Tags [HIGH]
|
||||
|
||||
- [ ] New tabbed tag building UI to support the new tag features [HIGH]
|
||||
|
||||
### v9.7
|
||||
|
||||
#### Library
|
||||
|
||||
- [ ] [Entry groups](../library/entry_groups.md) [HIGH]
|
||||
- [ ] Groups for files/entries where the same entry can be in multiple groups [HIGH]
|
||||
- [ ] Ability to number entries within group [HIGH]
|
||||
- [ ] Ability to set sorting method for group [HIGH]
|
||||
- [ ] Ability to set custom thumbnail for group [HIGH]
|
||||
- [ ] Group is treated as entry with tags and metadata [HIGH]
|
||||
- [ ] Nested groups [MEDIUM]
|
||||
|
||||
#### Search
|
||||
|
||||
- [ ] Sort by relevance [HIGH]
|
||||
- [ ] Sort by date taken (photos) [MEDIUM]
|
||||
- [ ] Sort by file size [HIGH]
|
||||
- [ ] Sort by file dimension (images/video) [LOW]
|
||||
|
||||
#### [Macros](../utilities/macro.md)
|
||||
|
||||
- [ ] Sharable Macros [MEDIUM]
|
||||
- [ ] Standard notation format (TOML) contacting macro instructions [HIGH]
|
||||
- [ ] Exportable [HIGH]
|
||||
- [ ] Importable [HIGH]
|
||||
- [ ] Triggers [HIGH]
|
||||
- [ ] On new file [HIGH]
|
||||
- [ ] On library refresh [HIGH]
|
||||
- [ ] [...]
|
||||
- [ ] Actions [HIGH]
|
||||
- [ ] Add tag(s) [HIGH]
|
||||
- [ ] Add field(s) [HIGH]
|
||||
- [ ] Set field content [HIGH]
|
||||
- [ ] [...]
|
||||
|
||||
#### UI
|
||||
|
||||
- [ ] Custom thumbnail overrides [MEDIUM]
|
||||
- [ ] Toggle File Extension Label [MEDIUM]
|
||||
- [ ] Toggle Duration Label [MEDIUM]
|
||||
- [ ] Custom Tag Badges [LOW]
|
||||
- [ ] Unified Media Player [HIGH]
|
||||
- [ ] Auto-hiding player controls
|
||||
- [x] Play/Pause [HIGH]
|
||||
- [x] Loop [HIGH]
|
||||
- [x] Toggle Autoplay [MEDIUM]
|
||||
- [ ] Volume Control [HIGH]
|
||||
- [x] Toggle Mute [HIGH]
|
||||
- [ ] Timeline scrubber [HIGH]
|
||||
- [ ] Fullscreen [MEDIUM]
|
||||
- [ ] Library list view [HIGH]
|
||||
- [ ] Configurable page size [HIGH]
|
||||
|
||||
### v9.8
|
||||
|
||||
#### Library
|
||||
|
||||
- [ ] Automatic Entry Relinking [HIGH]
|
||||
- [ ] Detect Renames [HIGH]
|
||||
- [ ] Detect Moves [HIGH]
|
||||
- [ ] Detect Deletions [HIGH]
|
||||
|
||||
#### Search
|
||||
|
||||
- [ ] OCR search [LOW]
|
||||
- [ ] Fuzzy Search [LOW]
|
||||
|
||||
### v9.9
|
||||
|
||||
#### Library
|
||||
|
||||
- [ ] Exportable Library Data [HIGH]
|
||||
- [ ] Standard notation format (i.e. JSON) contacting all library data [HIGH]
|
||||
|
||||
#### Tags
|
||||
|
||||
- [ ] Tag Packs [MEDIUM]
|
||||
- [ ] Human-readable (TOML) files containing tag data [HIGH]
|
||||
- [ ] Multiple Languages for Tag Strings [MEDIUM]
|
||||
- [ ] Importable [HIGH]
|
||||
- [ ] Exportable [HIGH]
|
||||
- [ ] Conflict resolution [HIGH]
|
||||
|
||||
### v10.0
|
||||
|
||||
- [ ] All remaining [HIGH] and optional [MEDIUM] features
|
||||
|
||||
### Post v10.0
|
||||
|
||||
#### Core
|
||||
|
||||
- [ ] Core Library/API
|
||||
- [ ] Plugin Support
|
||||
@@ -1,46 +0,0 @@
|
||||
# Save Format Changes
|
||||
|
||||
This page outlines the various changes made the TagStudio save file format over time, sometimes referred to as the "database" or "database file".
|
||||
|
||||
## JSON
|
||||
|
||||
| First Used | Last Used | Format | Location |
|
||||
| ---------- | ----------------------------------------------------------------------- | ------ | --------------------------------------------- |
|
||||
| v1.0.0 | [v9.4.2](https://github.com/TagStudioDev/TagStudio/releases/tag/v9.4.2) | JSON | `<Library Folder>`/.TagStudio/ts_library.json |
|
||||
|
||||
The legacy database format for public TagStudio releases [v9.1](https://github.com/TagStudioDev/TagStudio/tree/Alpha-v9.1) through [v9.4.2](https://github.com/TagStudioDev/TagStudio/releases/tag/v9.4.2). Variations of this format had been used privately since v1.0.0.
|
||||
|
||||
Replaced by the new SQLite format introduced in TagStudio [v9.5.0 Pre-Release 1](https://github.com/TagStudioDev/TagStudio/releases/tag/v9.5.0-pr1).
|
||||
|
||||
## DB_VERSION 6
|
||||
|
||||
| First Used | Last Used | Format | Location |
|
||||
| ------------------------------------------------------------------------------- | ------------------------------------------------------------------------------- | ------ | ----------------------------------------------- |
|
||||
| [v9.5.0-PR1](https://github.com/TagStudioDev/TagStudio/releases/tag/v9.5.0-pr1) | [v9.5.0-PR1](https://github.com/TagStudioDev/TagStudio/releases/tag/v9.5.0-pr1) | SQLite | `<Library Folder>`/.TagStudio/ts_library.sqlite |
|
||||
|
||||
The first public version of the SQLite save file format.
|
||||
|
||||
Migration from the legacy JSON format is provided via a walkthrough when opening a legacy library in TagStudio [v9.5.0 Pre-Release 1](https://github.com/TagStudioDev/TagStudio/releases/tag/v9.5.0-pr1) or later.
|
||||
|
||||
## DB_VERSION 7
|
||||
|
||||
| First Used | Last Used | Format | Location |
|
||||
| ------------------------------------------------------------------------------- | ------------------------------------------------------------------------------- | ------ | ----------------------------------------------- |
|
||||
| [v9.5.0-PR2](https://github.com/TagStudioDev/TagStudio/releases/tag/v9.5.0-pr2) | [v9.5.0-PR3](https://github.com/TagStudioDev/TagStudio/releases/tag/v9.5.0-pr3) | SQLite | `<Library Folder>`/.TagStudio/ts_library.sqlite |
|
||||
|
||||
### Changes
|
||||
|
||||
- Repairs "Description" fields to use a TEXT_LINE key instead of a TEXT_BOX key.
|
||||
- Repairs tags that may have a disambiguation_id pointing towards a deleted tag.
|
||||
|
||||
## DB_VERSION 8
|
||||
|
||||
| First Used | Last Used | Format | Location |
|
||||
| ------------------------------------------------------------------------------- | --------- | ------ | ----------------------------------------------- |
|
||||
| [v9.5.0-PR4](https://github.com/TagStudioDev/TagStudio/releases/tag/v9.5.0-pr4) | _Current_ | SQLite | `<Library Folder>`/.TagStudio/ts_library.sqlite |
|
||||
|
||||
### Changes
|
||||
|
||||
- Adds the `color_border` column to `tag_colors` table. Used for instructing the [secondary color](../library/tag_color.md#secondary-color) to apply to a tag's border as a new optional behavior.
|
||||
- Adds three new default colors: "Burgundy (TagStudio Shades)", "Dark Teal (TagStudio Shades)", and "Dark Lavender (TagStudio Shades)".
|
||||
- Updates Neon colors to use the the new `color_border` property.
|
||||
@@ -1,64 +0,0 @@
|
||||
# Usage
|
||||
|
||||
## Creating/Opening a Library
|
||||
|
||||
With TagStudio opened, start by creating a new library or opening an existing one using File -> Open/Create Library from the menu bar. TagStudio will automatically create a new library from the chosen directory if one does not already exist. Upon creating a new library, TagStudio will automatically scan your folders for files and add those to your library (no files are moved during this process!).
|
||||
|
||||
## Refreshing the Library
|
||||
|
||||
Libraries under 10,000 files automatically scan for new or modified files when opened. In order to refresh the library manually, select "Refresh Directories" under the File menu.
|
||||
|
||||
## Adding Tags to File Entries
|
||||
|
||||
Access the "Add Tag" search box by either clicking on the "Add Tag" button at the bottom of the right sidebar, accessing the "Add Tags to Selected" option from the File menu, or by pressing <kbd>Ctrl</kbd>+<kbd>Shift</kbd>+<kbd>T</kbd>.
|
||||
|
||||
From here you can search for existing tags or create a new one if the one you're looking for doesn't exist. Click the “+” button next to any tags you want to to the currently selected file entries. To quickly add the top result, press the <kbd>Enter</kbd>/<kbd>Return</kbd> key to add the the topmost tag and reset the tag search. Press <kbd>Enter</kbd>/<kbd>Return</kbd> once more to close the dialog box. By using this method, you can quickly add various tags in quick succession just by using the keyboard!
|
||||
|
||||
To remove a tag from a file entry, hover over the tag in the preview panel and click on the "-" icon that appears.
|
||||
|
||||
## Adding Metadata to File Entries
|
||||
|
||||
To add a metadata field to a file entry, start by clicking the “Add Field” button at the bottom of the preview panel. From the dropdown menu, select the type of metadata field you’d like to add to the entry
|
||||
|
||||
## Editing Metadata Fields
|
||||
|
||||
### Text Line / Text Box
|
||||
|
||||
Hover over the field and click the pencil icon. From there, add or edit text in the dialog box popup.
|
||||
|
||||
## Creating Tags
|
||||
|
||||
Create a new tag by accessing the "New Tag" option from the Edit menu or by pressing <kbd>Ctrl</kbd>+<kbd>T</kbd>. In the tag creation panel, enter a tag name, optional shorthand name, optional tag aliases, optional parent tags, and an optional color.
|
||||
|
||||
- The tag **name** is the base name of the tag. **_This does NOT have to be unique!_**
|
||||
- The tag **shorthand** is a special type of alias that displays in situations where screen space is more valuable, notably with name disambiguation.
|
||||
- **Aliases** are alternate names for a tag. These let you search for terms other than the exact tag name in order to find the tag again.
|
||||
- **Parent Tags** are tags in which this this tag can substitute for in searches. In other words, tags under this section are parents of this tag.
|
||||
- Parent tags with the disambiguation check next to them will be used to help disambiguate tag names that may not be unique.
|
||||
- For example: If you had a tag for "Freddy Fazbear", you might add "Five Nights at Freddy's" as one of the parent tags. If the disambiguation box is checked next to "Five Nights at Freddy's" parent tag, then the tag "Freddy Fazbear" will display as "Freddy Fazbear (Five Nights at Freddy's)". Furthermore, if the "Five Nights at Freddy's" tag has a shorthand like "FNAF", then the "Freddy Fazbear" tag will display as "Freddy Fazbear (FNAF)".
|
||||
- The **color** option lets you select an optional color palette to use for your tag.
|
||||
- The **"Is Category"** property lets you treat this tag as a category under which itself and any child tags inheriting from it will be sorted by inside the preview panel.
|
||||
|
||||
### Tag Manager
|
||||
|
||||
You can manage your library of tags from opening the "Tag Manager" panel from Edit -> "Manage Tags". From here you can create, search for, edit, and permanently delete any tags you've created in your library.
|
||||
|
||||
## Editing Tags
|
||||
|
||||
To edit a tag, click on it inside the preview panel or right-click the tag and select “Edit Tag” from the context menu.
|
||||
|
||||
## Relinking Moved Files
|
||||
|
||||
Inevitably some of the files inside your library will be renamed, moved, or deleted. If a file has been renamed or moved, TagStudio will display the thumbnail as a red broken chain link. To relink moved files or delete these entries, select the "Manage Unlinked Entries" option under the Tools menu. Click the "Refresh" button to scan your library for unlinked entries. Once complete, you can attempt to “Search & Relink” any unlinked file entries to their respective files, or “Delete Unlinked Entries” in the event the original files have been deleted and you no longer wish to keep their entries inside your library.
|
||||
|
||||
<!-- prettier-ignore -->
|
||||
!!! warning
|
||||
There is currently no method to relink entries to files that have been renamed - only moved or deleted. This is a high priority for future releases.
|
||||
|
||||
<!-- prettier-ignore -->
|
||||
!!! warning
|
||||
If multiple matches for a moved file are found (matches are currently defined as files with a matching filename as the original), TagStudio will currently ignore the match groups. Adding a GUI for manual selection, as well as smarter automated relinking, are high priorities for future versions.
|
||||
|
||||
### Saving the Library
|
||||
|
||||
As of version 9.5, libraries are saved automatically as you go. To save a backup of your library, select File -> Save Library Backup from the menu bar.
|
||||
@@ -1,46 +0,0 @@
|
||||
# Tools & Macros
|
||||
|
||||
Tools and macros are features that serve to create a more fluid [library](../library/index.md)-managing process, or provide some extra functionality. Please note that some are still in active development and will be fleshed out in future updates.
|
||||
|
||||
## Tools
|
||||
|
||||
### Fix Unlinked Entries
|
||||
|
||||
This tool displays the number of unlinked [entries](../library/entry.md), and some options for their resolution.
|
||||
|
||||
Refresh
|
||||
: Scans through the library and updates the unlinked entry count.
|
||||
|
||||
Search & Relink
|
||||
: Attempts to automatically find and reassign missing files.
|
||||
|
||||
Delete Unlinked Entries
|
||||
: Displays a confirmation prompt containing the list of all missing files to be deleted before committing to or cancelling the operation.
|
||||
|
||||
### Fix Duplicate Files
|
||||
|
||||
This tool allows for management of duplicate files in the library using a [DupeGuru](https://dupeguru.voltaicideas.net/) file.
|
||||
|
||||
Load DupeGuru File
|
||||
: load the "results" file created from a DupeGuru scan
|
||||
|
||||
Mirror Entries
|
||||
: Duplicate entries will have their contents mirrored across all instances. This allows for duplicate files to then be deleted with DupeGuru as desired, without losing the [field](../library/field.md) data that has been assigned to either. (Once deleted, the "Fix Unlinked Entries" tool can be used to clean up the duplicates)
|
||||
|
||||
### Create Collage
|
||||
|
||||
This tool is a preview of an upcoming feature. When selected, TagStudio will generate a collage of all the contents in a Library, which can be found in the Library folder ("/your-folder/.TagStudio/collages/"). Note that this feature is still in early development, and doesn't yet offer any customization options.
|
||||
|
||||
## Macros
|
||||
|
||||
### Auto-fill [WIP]
|
||||
|
||||
Tool is in development and will be documented in future update.
|
||||
|
||||
### Sort fields
|
||||
|
||||
Tool is in development, will allow for user-defined sorting of [fields](../library/field.md).
|
||||
|
||||
### Folders to Tags
|
||||
|
||||
Creates tags from the existing folder structure in the library, which are previewed in a hierarchy view for the user to confirm. A tag will be created for each folder and applied to all entries, with each subfolder being linked to the parent folder as a [parent tag](../library/tag.md#parent-tags). Tags will initially be named after the folders, but can be fully edited and customized afterwards.
|
||||
@@ -101,7 +101,6 @@
|
||||
mypy
|
||||
ruff
|
||||
xorg.libxcb
|
||||
xorg.libX11
|
||||
zstd
|
||||
])
|
||||
++ (with qt6Pkgs; [
|
||||
@@ -163,7 +162,6 @@
|
||||
stdenv.cc.cc.lib
|
||||
wayland
|
||||
xorg.libxcb
|
||||
xorg.libX11
|
||||
xorg.libXrandr
|
||||
zlib
|
||||
zstd
|
||||
|
||||
BIN
github_header.png
Normal file
|
After Width: | Height: | Size: 859 KiB |
138
mkdocs.yml
@@ -1,138 +0,0 @@
|
||||
# yaml-language-server: $schema=https://squidfunk.github.io/mkdocs-material/schema.json
|
||||
|
||||
# MkDocs: https://www.mkdocs.org/
|
||||
# Material for MkDocs: https://squidfunk.github.io/mkdocs-material/
|
||||
|
||||
# To install:
|
||||
# pip install mkdocs-material
|
||||
|
||||
# To run the preview server:
|
||||
# mkdocs serve
|
||||
|
||||
site_name: TagStudio
|
||||
site_description: "A User-Focused Photo & File Management System"
|
||||
site_url: https://docs.tagstud.io/
|
||||
repo_url: https://github.com/TagStudioDev/TagStudio
|
||||
edit_uri: blob/main/docs/
|
||||
repo_name: TagStudioDev/TagStudio
|
||||
|
||||
extra:
|
||||
social:
|
||||
- icon: fontawesome/brands/github
|
||||
link: https://github.com/TagStudioDev
|
||||
- icon: fontawesome/brands/discord
|
||||
link: https://discord.gg/hRNnVKhF2G
|
||||
tags:
|
||||
Upcoming Feature: upcoming
|
||||
|
||||
# by default the navigation is an alphanumerically sorted,
|
||||
# nested list of all the Markdown files found within the /docs directory
|
||||
# where index files are always first
|
||||
# uncomment the following to configure the navigation manually:
|
||||
|
||||
# nav:
|
||||
# - Home:
|
||||
# - index.md
|
||||
# - install.md
|
||||
# - usage.md
|
||||
# - Library:
|
||||
# - library/index.md
|
||||
# - library/entry.md
|
||||
# - library/entry_groups.md
|
||||
# - library/field.md
|
||||
# - library/tag.md
|
||||
# - library/tag_categories.md
|
||||
# - library/tag_overrides.md
|
||||
# - Utilities:
|
||||
# - utilities/macro.md
|
||||
# - Updates:
|
||||
# - updates/changelog.md
|
||||
# - updates/roadmap.md
|
||||
# - updates/db_migration.md
|
||||
|
||||
theme:
|
||||
name: material
|
||||
palette:
|
||||
# Palette toggle for automatic mode
|
||||
- media: "(prefers-color-scheme)"
|
||||
toggle:
|
||||
icon: material/brightness-auto
|
||||
name: Switch to light mode
|
||||
# Palette toggle for light mode
|
||||
- media: "(prefers-color-scheme: light)"
|
||||
scheme: default
|
||||
primary: deep purple
|
||||
accent: deep purple
|
||||
toggle:
|
||||
icon: material/brightness-7
|
||||
name: Switch to dark mode
|
||||
# Palette toggle for dark mode
|
||||
- media: "(prefers-color-scheme: dark)"
|
||||
scheme: slate
|
||||
primary: deep purple
|
||||
accent: deep purple
|
||||
toggle:
|
||||
icon: material/brightness-4
|
||||
name: SSwitch to system preference
|
||||
logo: assets/icon.png
|
||||
favicon: assets/icon.ico
|
||||
font: false # use system fonts
|
||||
language: en
|
||||
features:
|
||||
- navigation.instant
|
||||
- navigation.indexes
|
||||
- navigation.tracking
|
||||
- navigation.expand
|
||||
- navigation.sections
|
||||
#- navigation.tabs
|
||||
#- content.tabs.link
|
||||
#- navigation.top
|
||||
- search.suggest
|
||||
- content.code.annotate
|
||||
- content.action.edit
|
||||
icon:
|
||||
repo: fontawesome/brands/github
|
||||
tag:
|
||||
upcoming: material/flask-outline
|
||||
|
||||
markdown_extensions:
|
||||
|
||||
# Python Markdown
|
||||
- abbr
|
||||
- admonition
|
||||
- attr_list
|
||||
- def_list
|
||||
- footnotes
|
||||
- md_in_html
|
||||
- toc:
|
||||
permalink: true
|
||||
|
||||
# Python Markdown Extensions
|
||||
- pymdownx.arithmatex:
|
||||
generic: true
|
||||
- pymdownx.betterem:
|
||||
smart_enable: all
|
||||
- pymdownx.caret
|
||||
- pymdownx.details
|
||||
- pymdownx.highlight
|
||||
- pymdownx.inlinehilite
|
||||
- pymdownx.keys
|
||||
- pymdownx.mark
|
||||
- pymdownx.smartsymbols
|
||||
- pymdownx.superfences:
|
||||
custom_fences:
|
||||
- name: mermaid
|
||||
class: mermaid
|
||||
format: !!python/name:pymdownx.superfences.fence_code_format
|
||||
- pymdownx.tabbed:
|
||||
alternate_style: true
|
||||
- pymdownx.tasklist:
|
||||
custom_checkbox: true
|
||||
- pymdownx.tilde
|
||||
- pymdownx.snippets
|
||||
|
||||
plugins:
|
||||
- search
|
||||
- tags
|
||||
- social: # social embed cards
|
||||
enabled: !ENV [CI, false] # enabled only when running in CI (eg GitHub Actions)
|
||||
@@ -1,60 +1,9 @@
|
||||
[project]
|
||||
name = "TagStudio"
|
||||
description = "A User-Focused Photo & File Management System."
|
||||
version = "9.5.1"
|
||||
license = "GPL-3.0-only"
|
||||
readme = "README.md"
|
||||
|
||||
[tool.ruff]
|
||||
exclude = ["main_window.py", "home_ui.py", "resources.py", "resources_rc.py"]
|
||||
line-length = 100
|
||||
|
||||
[tool.ruff.lint.per-file-ignores]
|
||||
"tagstudio/tests/**" = ["D", "E402"]
|
||||
"tagstudio/src/qt/helpers/vendored/**" = ["B", "E", "N", "UP", "SIM115"]
|
||||
|
||||
[tool.ruff.lint.pydocstyle]
|
||||
convention = "google"
|
||||
|
||||
[tool.ruff.lint]
|
||||
select = ["B", "D", "E", "F", "FBT003", "I", "N", "SIM", "T20", "UP"]
|
||||
ignore = ["D100", "D101", "D102", "D103", "D104", "D105", "D106", "D107"]
|
||||
|
||||
[tool.pyright]
|
||||
ignore = [".venv/**"]
|
||||
include = ["tagstudio/**"]
|
||||
reportAny = false
|
||||
reportImplicitStringConcatenation = false
|
||||
# reportOptionalMemberAccess = false
|
||||
reportUnannotatedClassAttribute = false
|
||||
reportUnknownArgumentType = false
|
||||
reportUnknownMemberType = false
|
||||
reportUnusedCallResult = false
|
||||
exclude = ["main_window.py", "home_ui.py", "resources.py", "resources_rc.py", "**/vendored/"]
|
||||
|
||||
[tool.mypy]
|
||||
strict_optional = false
|
||||
disable_error_code = ["func-returns-value", "import-untyped"]
|
||||
disable_error_code = ["union-attr", "annotation-unchecked", "import-untyped"]
|
||||
explicit_package_bases = true
|
||||
warn_unused_ignores = true
|
||||
check_untyped_defs = true
|
||||
mypy_path = ["tagstudio"]
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "tests.*"
|
||||
ignore_errors = true
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "src.qt.main_window"
|
||||
ignore_errors = true
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "src.qt.ui.home_ui"
|
||||
ignore_errors = true
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = "src.core.ts_core"
|
||||
ignore_errors = true
|
||||
|
||||
[tool.pytest.ini_options]
|
||||
#addopts = "-m 'not qt'"
|
||||
qt_api = "pyside6"
|
||||
exclude = ['tests', 'src/qt/helpers/vendored']
|
||||
|
||||
@@ -1,8 +1,6 @@
|
||||
ruff==0.8.1
|
||||
ruff==0.4.2
|
||||
pre-commit==3.7.0
|
||||
pytest==8.2.0
|
||||
Pyinstaller==6.6.0
|
||||
mypy==1.11.2
|
||||
syrupy==4.7.1
|
||||
pytest-qt==4.4.0
|
||||
pytest-cov==5.0.0
|
||||
mypy==1.10.0
|
||||
syrupy==4.6.1
|
||||
|
||||
@@ -1,20 +1,18 @@
|
||||
chardet==5.2.0
|
||||
ffmpeg-python==0.2.0
|
||||
humanfriendly==10.0
|
||||
mutagen==1.47.0
|
||||
numpy==2.1.0
|
||||
opencv_python==4.10.0.84
|
||||
pillow-heif==0.16.0
|
||||
pillow-jxl-plugin==1.3.0
|
||||
opencv_python>=4.8.0.74,<=4.9.0.80
|
||||
Pillow==10.3.0
|
||||
pydub==0.25.1
|
||||
PySide6_Addons==6.8.0.1
|
||||
PySide6_Essentials==6.8.0.1
|
||||
PySide6==6.8.0.1
|
||||
rawpy==0.22.0
|
||||
Send2Trash==1.8.3
|
||||
SQLAlchemy==2.0.34
|
||||
structlog==24.4.0
|
||||
PySide6==6.7.1
|
||||
PySide6_Addons==6.7.1
|
||||
PySide6_Essentials==6.7.1
|
||||
typing_extensions>=3.10.0.0,<=4.11.0
|
||||
ujson>=5.8.0,<=5.9.0
|
||||
vtf2img==0.1.0
|
||||
numpy==1.26.4
|
||||
rawpy==0.21.0
|
||||
pillow-heif==0.16.0
|
||||
chardet==5.2.0
|
||||
pydub==0.25.1
|
||||
mutagen==1.47.0
|
||||
numpy==1.26.4
|
||||
ffmpeg-python==0.2.0
|
||||
Send2Trash==1.8.3
|
||||
vtf2img==0.1.0
|
||||
|
||||
BIN
screenshot.jpg
Normal file
|
After Width: | Height: | Size: 531 KiB |
@@ -77,8 +77,8 @@ app = BUNDLE(
|
||||
exe if coll is None else coll,
|
||||
name='TagStudio.app',
|
||||
icon=icon,
|
||||
bundle_identifier='com.cyanvoxel.tagstudio',
|
||||
version='9.5.1',
|
||||
bundle_identifier='com.github.tagstudiodev',
|
||||
version='0.0.0',
|
||||
info_plist={
|
||||
'NSAppleScriptEnabled': False,
|
||||
'NSPrincipalClass': 'NSApplication',
|
||||
|
||||
BIN
tagstudio/resources/qt/images/splash.png
Normal file
|
After Width: | Height: | Size: 397 KiB |
|
Before Width: | Height: | Size: 173 KiB |
|
Before Width: | Height: | Size: 388 KiB |
@@ -1,20 +0,0 @@
|
||||
{
|
||||
"app.pre_release": "Beta verze",
|
||||
"drop_import.description": "Tyto soubory v knihovně již existují",
|
||||
"drop_import.progress.label.initial": "Importuji nové soubory...",
|
||||
"edit.tag_manager": "Spravovat tagy",
|
||||
"entries.unlinked.relink.manual": "Znovu propojit ručně",
|
||||
"entries.unlinked.relink.title": "Propojuji záznamy",
|
||||
"entries.unlinked.scanning": "Skenuji knihovnu pro nepropojené záznamy...",
|
||||
"entries.unlinked.title": "Opravit nepropojené záznamy",
|
||||
"field.copy": "Zkopírovat políčko",
|
||||
"field.edit": "Upravit políčko",
|
||||
"field.paste": "Vložit políčko",
|
||||
"file.date_added": "Datum přidání",
|
||||
"file.date_created": "Datum vytvoření",
|
||||
"file.date_modified": "Datum změny",
|
||||
"file.dimensions": "Rozměry",
|
||||
"file.duplicates.description": "TagStudio podporuje import výsledku z DupeGuru pro správu duplikátních souborů.",
|
||||
"file.duplicates.dupeguru.file_extension": "DupeGuru soubory (*.dupeguru)",
|
||||
"file.duplicates.fix": "Opravit duplikátní soubory"
|
||||
}
|
||||
@@ -1,13 +0,0 @@
|
||||
{
|
||||
"app.pre_release": "Forududgivelse",
|
||||
"color.title.no_color": "Ingen Farve",
|
||||
"drop_import.description": "De følgende filer har allerede eksisterende stier i biblioteket",
|
||||
"drop_import.duplicates_choice.plural": "Følgende {count} filer passer allerede til stier der eksistere i biblioteket.",
|
||||
"drop_import.duplicates_choice.singular": "Den følgende fil matcher en allerede eksisterende sti i biblioteket.",
|
||||
"drop_import.progress.label.initial": "Importere nye filer...",
|
||||
"drop_import.progress.label.plural": "Importere nye filer...\n{count} Filer importeret.{suffix}",
|
||||
"drop_import.progress.label.singular": "Importere nye filer...\n1 fil importeret.{suffix}",
|
||||
"drop_import.progress.window_title": "Importer Filer",
|
||||
"drop_import.title": "Konflikterende Fil(er)",
|
||||
"edit.tag_manager": "Håndtere Tags"
|
||||
}
|
||||
@@ -1,290 +0,0 @@
|
||||
{
|
||||
"about.content": "<p>TagStudio ist eine Anwendung zum organisieren von Fotos & Dateien mit einem zugrunde liegendem Tag-basierten System, welches sich darauf konzentriert, dem Nutzer Freiraum und Flexibilität zu bieten. Keine proprietären Programme oder Formate, kein Meer an Hilfsdateien und keine komplette Umwälzung deiner Dateisystemstruktur.</p>Lizenz: GPLv3<br>Konfigurations-Pfad: {config_path}<br>FFmpeg: {ffmpeg}<br>FFprobe: {ffprobe}<p><a href=\"https://github.com/TagStudioDev/TagStudio\">GitHub</a> | <a href=\"https://docs.tagstud.io\">Dokumentation</a> | <a href=\"https://discord.com/invite/hRNnVKhF2G\">Discord</a></p>",
|
||||
"about.title": "Über",
|
||||
"app.git": "Git Commit",
|
||||
"app.pre_release": "Pre-Release",
|
||||
"app.title": "{base_title} - Bibliothek '{library_dir}'",
|
||||
"color.color_border": "Benutze Sekundärfarbe für die Umrandung",
|
||||
"color.confirm_delete": "Soll die Farbe \"{color_name}\" wirklich gelöscht werden?",
|
||||
"color.delete": "Tag löschen",
|
||||
"color.import_pack": "Farb-Paket importieren",
|
||||
"color.name": "Name",
|
||||
"color.namespace.delete.prompt": "Soll dieser Farb-Namensraum wirklich gelöscht werden? Diese aktion wird neben dem Namensraum ALLE darin enthaltenen Farben löschen!",
|
||||
"color.namespace.delete.title": "Farb-Namensraum löschen",
|
||||
"color.new": "Neue Farbe",
|
||||
"color.placeholder": "Farbe",
|
||||
"color.primary": "Primärfarbe",
|
||||
"color.primary_required": "Primärfarbe (erforderlich)",
|
||||
"color.secondary": "Sekundärfarbe",
|
||||
"color.title.no_color": "Keine Farbe",
|
||||
"color_manager.title": "Tag-Farben verwalten",
|
||||
"drop_import.description": "Die folgenden Dateien passen zu Dateipfaden, welche bereits in der Bibliothek existieren",
|
||||
"drop_import.duplicates_choice.plural": "Die folgenden {count} Dateien passen zu Dateipfaden, welche bereits in der Bibliothek existieren.",
|
||||
"drop_import.duplicates_choice.singular": "Die folgende Datei passt zu einem Dateipfad, welcher bereits in der Bibliothek existiert.",
|
||||
"drop_import.progress.label.initial": "Neue Dateien werden importiert...",
|
||||
"drop_import.progress.label.plural": "Neue Dateien werden importiert...\n{count} Dateien importiert.{suffix}",
|
||||
"drop_import.progress.label.singular": "Neue Dateien werden importiert...\n1 Datei importiert.{suffix}",
|
||||
"drop_import.progress.window_title": "Dateien Importieren",
|
||||
"drop_import.title": "Dateikollision(en)",
|
||||
"edit.color_manager": "Tag-Farben verwalten",
|
||||
"edit.copy_fields": "Felder kopieren",
|
||||
"edit.paste_fields": "Felder einfügen",
|
||||
"edit.tag_manager": "Tags Verwalten",
|
||||
"entries.duplicate.merge": "Doppelte Einträge zusammenführen",
|
||||
"entries.duplicate.merge.label": "Führe doppelte Einträge zusammen…",
|
||||
"entries.duplicate.refresh": "Doppelte Einträge aktualisieren",
|
||||
"entries.duplicates.description": "Doppelte Einträge sind definiert als mehrere Einträge, die auf dieselbe Datei auf der Festplatte verweisen. Durch das Zusammenführen dieser Einträge werden die Tags und Metadaten aller Duplikate zu einem einzigen konsolidierten Eintrag zusammengefasst. Diese sind nicht zu verwechseln mit „doppelten Dateien“, die Duplikate Ihrer Dateien selbst außerhalb von TagStudio sind.",
|
||||
"entries.mirror": "Spiegeln",
|
||||
"entries.mirror.confirmation": "Sind Sie sich sicher, dass Sie die folgenden {count} Einträge spiegeln wollen?",
|
||||
"entries.mirror.label": "Spiegele {idx}/{total} Einträge...",
|
||||
"entries.mirror.title": "Einträge werden gespiegelt",
|
||||
"entries.mirror.window_title": "Einträge spiegeln",
|
||||
"entries.running.dialog.new_entries": "Füge {total} neue Dateieinträge hinzu...",
|
||||
"entries.running.dialog.title": "Füge neue Dateieinträge hinzu",
|
||||
"entries.tags": "Tags",
|
||||
"entries.unlinked.delete": "Unverknüpfte Einträge löschen",
|
||||
"entries.unlinked.delete.confirm": "Sind Sie sicher, dass Sie die folgenden {count} Einträge löschen wollen?",
|
||||
"entries.unlinked.delete.deleting": "Einträge werden gelöscht",
|
||||
"entries.unlinked.delete.deleting_count": "Lösche {idx}/{count} unverknüpfte Einträge",
|
||||
"entries.unlinked.delete_alt": "Unverknüpfte Einträge &löschen",
|
||||
"entries.unlinked.description": "Jeder Bibliothekseintrag ist mit einer Datei in einem Ihrer Verzeichnisse verknüpft. Wenn eine Datei, die mit einem Eintrag verknüpft ist, außerhalb von TagStudio verschoben oder gelöscht wird, gilt sie als nicht verknüpft.<br><br>Nicht verknüpfte Einträge können durch das Durchsuchen Ihrer Verzeichnisse automatisch neu verknüpft, vom Benutzer manuell neu verknüpft oder auf Wunsch gelöscht werden.",
|
||||
"entries.unlinked.missing_count.none": "Unverknüpfte Einträge: -",
|
||||
"entries.unlinked.missing_count.some": "Unverknüpfte Einträge: {count}",
|
||||
"entries.unlinked.refresh_all": "Alle aktualisie&ren",
|
||||
"entries.unlinked.relink.attempting": "Versuche {idx}/{missing_count} Einträge wieder zu verknüpfen, {fixed_count} bereits erfolgreich wieder verknüpft",
|
||||
"entries.unlinked.relink.manual": "&Manuell Neuverknüpfen",
|
||||
"entries.unlinked.relink.title": "Einträge werden neuverknüpft",
|
||||
"entries.unlinked.scanning": "Bibliothek wird nach nicht verknüpften Einträgen durchsucht...",
|
||||
"entries.unlinked.search_and_relink": "&Suchen && Neuverbinden",
|
||||
"entries.unlinked.title": "Unverknüpfte Einträge reparieren",
|
||||
"field.copy": "Feld kopieren",
|
||||
"field.edit": "Feld bearbeiten",
|
||||
"field.paste": "Feld einfügen",
|
||||
"file.date_added": "Hinzufügungsdatum",
|
||||
"file.date_created": "Erstellungsdatum",
|
||||
"file.date_modified": "Datum geändert",
|
||||
"file.dimensions": "Abmessungen",
|
||||
"file.duplicates.description": "TagStudio unterstützt das Importieren von DupeGuru-Ergebnissen um Dateiduplikate zu verwalten.",
|
||||
"file.duplicates.dupeguru.advice": "Nach dem Kopiervorgang kann DupeGuru benutzt werden und ungewollte Dateien zu löschen. Anschließend kann TagStudios \"Unverknüpfte Einträge reparieren\" Funktion im \"Werkzeuge\" Menü benutzt werden um die nicht verknüpften Einträge zu löschen.",
|
||||
"file.duplicates.dupeguru.file_extension": "DupeGuru-Dateien (*.dupeguru)",
|
||||
"file.duplicates.dupeguru.load_file": "DupeGuru-Datei auswäh&len",
|
||||
"file.duplicates.dupeguru.no_file": "Keine DupeGuru-Datei ausgewählt",
|
||||
"file.duplicates.dupeguru.open_file": "DupeGuru Ergebnisdatei öffnen",
|
||||
"file.duplicates.fix": "Duplizierte Dateien korrigieren",
|
||||
"file.duplicates.matches": "Übereinstimmungen mit duplizierten Dateien: {count}",
|
||||
"file.duplicates.matches_uninitialized": "Übereinstimmungen mit doppelten Dateien: N/A",
|
||||
"file.duplicates.mirror.description": "Kopiert die Eintragsdaten in jeder Duplikatsmenge, wobei alle Daten kombiniert werden ohne Felder zu entfernen oder zu duplizieren. Diese Operation wird keine Dateien oder Daten löschen.",
|
||||
"file.duplicates.mirror_entries": "Einträge kopieren",
|
||||
"file.duration": "Länge",
|
||||
"file.not_found": "Datei nicht gefunden",
|
||||
"file.open_file": "Datei öffnen",
|
||||
"file.open_file_with": "Datei öffnen mit",
|
||||
"file.open_location.generic": "Datei im Explorer öffnen",
|
||||
"file.open_location.mac": "In Finder anzeigen",
|
||||
"file.open_location.windows": "Im Explorer anzeigen",
|
||||
"folders_to_tags.close_all": "Alle schließen",
|
||||
"folders_to_tags.converting": "Wandele Ordner zu Tags um",
|
||||
"folders_to_tags.description": "Erstellt Tags basierend auf der Verzeichnisstruktur und wendet sie auf die Einträge an.\nDer folgende Verzeichnisbaum zeigt welche Tags erstellt werden würden und auf welche Einträge sie angewendet werden würden.",
|
||||
"folders_to_tags.open_all": "Alle öffnen",
|
||||
"folders_to_tags.title": "Aus Verzeichnissen Tags erstellen",
|
||||
"generic.add": "Hinzufügen",
|
||||
"generic.apply": "Anwenden",
|
||||
"generic.apply_alt": "&Anwenden",
|
||||
"generic.cancel": "Abbrechen",
|
||||
"generic.cancel_alt": "Abbre&chen",
|
||||
"generic.close": "Schließen",
|
||||
"generic.continue": "Fortfahren",
|
||||
"generic.copy": "Kopieren",
|
||||
"generic.cut": "Ausschneiden",
|
||||
"generic.delete": "Löschen",
|
||||
"generic.delete_alt": "Löschen",
|
||||
"generic.done": "Fertig",
|
||||
"generic.done_alt": "Fertig",
|
||||
"generic.edit": "Bearbeiten",
|
||||
"generic.edit_alt": "B&earbeiten",
|
||||
"generic.filename": "Dateiname",
|
||||
"generic.navigation.back": "Zurück",
|
||||
"generic.navigation.next": "Weiter",
|
||||
"generic.none": "Kein(e)",
|
||||
"generic.overwrite": "Überschreibem",
|
||||
"generic.overwrite_alt": "Überschreiben",
|
||||
"generic.paste": "Einfügen",
|
||||
"generic.recent_libraries": "Aktuelle Bibliotheken",
|
||||
"generic.rename": "Umbenennen",
|
||||
"generic.rename_alt": "Umbenennen",
|
||||
"generic.reset": "Zurücksetzen",
|
||||
"generic.save": "Speichern",
|
||||
"generic.skip": "Überspringen",
|
||||
"generic.skip_alt": "Über&springen",
|
||||
"help.visit_github": "GitHub Repository besuchen",
|
||||
"home.search": "Suchen",
|
||||
"home.search_entries": "Nach Einträgen suchen",
|
||||
"home.search_library": "Bibliothek durchsuchen",
|
||||
"home.search_tags": "Tags suchen",
|
||||
"home.thumbnail_size": "Größe des Vorschaubildes",
|
||||
"home.thumbnail_size.extra_large": "Extra Große Vorschau",
|
||||
"home.thumbnail_size.large": "Große Vorschau",
|
||||
"home.thumbnail_size.medium": "Mittelgroße Vorschau",
|
||||
"home.thumbnail_size.mini": "Mini Vorschau",
|
||||
"home.thumbnail_size.small": "Kleine Vorschau",
|
||||
"ignore_list.add_extension": "D&ateiendung hinzufügen",
|
||||
"ignore_list.mode.exclude": "Ausschliessen",
|
||||
"ignore_list.mode.include": "Einschließen",
|
||||
"ignore_list.mode.label": "Listen Modus:",
|
||||
"ignore_list.title": "Dateierweiterungen",
|
||||
"json_migration.checking_for_parity": "Parität wird überprüft...",
|
||||
"json_migration.creating_database_tables": "SQL Datenbank Tabellen werden erstellt...",
|
||||
"json_migration.description": "<br>Starte den Migrationsprozess der Bibliothek und sehe die Ergebnisse in der Vorschau an. Die migrierte Bibliothek wird <i>nicht</i> verwendet, bis Sie auf \"Migration abschließen\" klicken.<br><br>Bibliotheksdaten sollten entweder übereinstimmende Werte oder das Label \"Matched\" besitzen. Werte zu denen keine Übereinstimmungen gefunden werden, werden in Rot dargestellt und erhalten das Symbol \"<b>(!)</b>\".<br><center<i>Der Migrationsprozess kann bei größeren Bibliotheken einige Minuten in Anspruch nehmen.</i></center>",
|
||||
"json_migration.discrepancies_found": "Bibliotheksdiskrepanzen wurden gefunden",
|
||||
"json_migration.discrepancies_found.description": "Es wurden Diskrepanzen zwischen der ursprünglichen und migrierten Bibliothek festgestellt. Bitte überprüfe die Diskrepanzen und entscheide, ob die Migration fortgesetzt oder abgebrochen werden soll.",
|
||||
"json_migration.finish_migration": "Migration abschließen",
|
||||
"json_migration.heading.aliases": "Aliase:",
|
||||
"json_migration.heading.colors": "Farben:",
|
||||
"json_migration.heading.differ": "Diskrepanz",
|
||||
"json_migration.heading.entires": "Einträge:",
|
||||
"json_migration.heading.extension_list_type": "Erweiterungslistentyp:",
|
||||
"json_migration.heading.fields": "Felder:",
|
||||
"json_migration.heading.file_extension_list": "Liste der Dateiendungen:",
|
||||
"json_migration.heading.match": "Übereinstimmend",
|
||||
"json_migration.heading.names": "Namen:",
|
||||
"json_migration.heading.parent_tags": "Übergeordnete Tags:",
|
||||
"json_migration.heading.paths": "Pfade:",
|
||||
"json_migration.heading.shorthands": "Kurzformen:",
|
||||
"json_migration.heading.tags": "Tags:",
|
||||
"json_migration.info.description": "Bibliotheksdaten, welche mit TagStudio-Versionen <b>9.4 und niedriger</b> erstellt wurden, müssen in das neue Format <b>v9.5+</b> migriert werden.<br><h2>Was du wissen solltest:</h2><ul><li>Deine bestehenden Bibliotheksdaten werden<b><i>NICHT</i></b> gelöscht.</li><li>Deine persönlichen Dateien werden <b><i>NICHT</i></b> gelöscht, verschoben oder verändert.</li><li>Das neue Format v9.5+ kann nicht von früheren TagStudio-Versionen geöffnet werden.</li></ul>",
|
||||
"json_migration.migrating_files_entries": "Migriere {entries:,d} Dateieinträge...",
|
||||
"json_migration.migration_complete": "Migration abgeschlossen!",
|
||||
"json_migration.migration_complete_with_discrepancies": "Migration abgeschlossen, Diskrepanzen gefunden",
|
||||
"json_migration.start_and_preview": "Starten und Vorschau betrachten",
|
||||
"json_migration.title": "Speichere Formatmigration: \"{path}\"",
|
||||
"json_migration.title.new_lib": "<h2>v9.5+ Bibliothek</h2>",
|
||||
"json_migration.title.old_lib": "<h2>v9.4 Bibliothek</h2>",
|
||||
"landing.open_create_library": "Bibliothek öffnen/erstellen {shortcut}",
|
||||
"library.field.add": "Feld hinzufügen",
|
||||
"library.field.confirm_remove": "Wollen Sie dieses \"{name}\" Feld wirklich entfernen?",
|
||||
"library.field.mixed_data": "Gemischte Daten",
|
||||
"library.field.remove": "Feld entfernen",
|
||||
"library.missing": "Dateiort fehlt",
|
||||
"library.name": "Bibliothek",
|
||||
"library.refresh.scanning.plural": "Durchsuche Verzeichnisse nach neuen Dateien...\n{searched_count} Dateien durchsucht, {found_count} neue Dateien gefunden",
|
||||
"library.refresh.scanning.singular": "Durchsuche Verzeichnisse nach neuen Dateien...\n{searched_count} Datei durchsucht, {found_count} neue Datei gefunden",
|
||||
"library.refresh.scanning_preparing": "Überprüfe Verzeichnisse auf neue Dateien...\nBereite vor...",
|
||||
"library.refresh.title": "Verzeichnisse werden aktualisiert",
|
||||
"library.scan_library.title": "Bibliothek wird scannen",
|
||||
"library_object.name": "Name",
|
||||
"library_object.name_required": "Name (erforderlich)",
|
||||
"library_object.slug": "ID Schlüssel",
|
||||
"library_object.slug_required": "ID Schlüssel (erforderlich)",
|
||||
"macros.running.dialog.new_entries": "Führe konfigurierte Makros für {count}/{total} neue Dateieinträge aus...",
|
||||
"macros.running.dialog.title": "Ausführen von Makros bei neuen Einträgen",
|
||||
"media_player.autoplay": "Autoplay",
|
||||
"menu.delete_selected_files_ambiguous": "Datei(en) nach {trash_term} verschieben",
|
||||
"menu.delete_selected_files_plural": "Dateien nach {trash_term} verschieben",
|
||||
"menu.delete_selected_files_singular": "Datei nach {trash_term} verschieben",
|
||||
"menu.edit": "Bearbeiten",
|
||||
"menu.edit.ignore_list": "Dateien und Verzeichnisse ignorieren",
|
||||
"menu.edit.manage_file_extensions": "Dateiendungen verwalten",
|
||||
"menu.edit.manage_tags": "Tags Verwalten",
|
||||
"menu.edit.new_tag": "Neuer &Tag",
|
||||
"menu.file": "Datei",
|
||||
"menu.file.clear_recent_libraries": "Zuletzt verwendete löschen",
|
||||
"menu.file.close_library": "Bibliothek s&chließen",
|
||||
"menu.file.new_library": "Neue Bibliothek",
|
||||
"menu.file.open_create_library": "Bibli&othek öffnen/erstellen",
|
||||
"menu.file.open_library": "Bibliothek öffnen",
|
||||
"menu.file.open_recent_library": "Zuletzt verwendete öffnen",
|
||||
"menu.file.refresh_directories": "Ve&rzeichnisse aktualisieren",
|
||||
"menu.file.save_backup": "Bibliotheksbackup speichern",
|
||||
"menu.file.save_library": "Bibliothek speichern",
|
||||
"menu.help": "&Hilfe",
|
||||
"menu.help.about": "Über",
|
||||
"menu.macros": "&Makros",
|
||||
"menu.macros.folders_to_tags": "Verzeichnisse zu Tags",
|
||||
"menu.select": "Auswählen",
|
||||
"menu.settings": "Optionen...",
|
||||
"menu.tools": "Werkzeuge",
|
||||
"menu.tools.fix_duplicate_files": "Duplizierte &Dateien reparieren",
|
||||
"menu.tools.fix_unlinked_entries": "&Unverknüpfte Einträge reparieren",
|
||||
"menu.view": "Ansicht",
|
||||
"menu.window": "Fenster",
|
||||
"namespace.create.description": "Namespaces werden von Tagstudio verwendet, um Gruppen von Objekten (bspw. Tags oder Farben) so darzustellen, dass sie einfach exportiert und geteilt werden können. Namespaces, die mit \"tagstudio\" beginnen sind für interne Vorgänge von Tagstudio reserviert.",
|
||||
"namespace.create.description_color": "Tagfarben nutzen Namespaces als Farbpalettengruppen. Alle benutzerdefinierten Farben müssen erst einer Namespacegruppe zugeordnet werden.",
|
||||
"namespace.create.title": "Namensraum erstellen",
|
||||
"namespace.new.button": "Neuer Namensraum",
|
||||
"namespace.new.prompt": "Erstelle einen neuen Namensraum um eigene Farben hinzuzufügen!",
|
||||
"preview.multiple_selection": "<b>{count}</b> Elemente ausgewählt",
|
||||
"preview.no_selection": "Keine Elemente ausgewählt",
|
||||
"select.add_tag_to_selected": "Tag zu Ausgewähltem hinzufügen",
|
||||
"select.all": "Alle auswählen",
|
||||
"select.clear": "Auswahl leeren",
|
||||
"settings.clear_thumb_cache.title": "Vorschaubild-Zwischenspeicher leeren",
|
||||
"settings.language": "Sprache",
|
||||
"settings.open_library_on_start": "Bibliothek zum Start öffnen",
|
||||
"settings.restart_required": "Bitte TagStudio neustarten, um Änderungen anzuwenden.",
|
||||
"settings.show_filenames_in_grid": "Dateinamen in Raster darstellen",
|
||||
"settings.show_recent_libraries": "Zuletzt verwendete Bibliotheken anzeigen",
|
||||
"settings.title": "Einstellungen",
|
||||
"sorting.direction.ascending": "Aufsteigend",
|
||||
"sorting.direction.descending": "Absteigend",
|
||||
"splash.opening_library": "Öffne Bibliothek \"{library_path}\"...",
|
||||
"status.deleted_file_plural": "{count} Dateien gelöscht!",
|
||||
"status.deleted_file_singular": "1 Datei gelöscht!",
|
||||
"status.deleted_none": "Keine Dateien gelöscht.",
|
||||
"status.deleted_partial_warning": "Es wurden nur {count} Datei(en) gelöscht! Bitte Überprüfen, ob eine der Dateien derzeit fehlt oder in verwendet wird.",
|
||||
"status.deleting_file": "Lösche Datei [{i}/{count}]: \"{path}\"...",
|
||||
"status.library_backup_in_progress": "Bibliotheksbackup wird gespeichert...",
|
||||
"status.library_backup_success": "Bibliotheks-Backup gespeichert unter: \"{path}\" ({time_span})",
|
||||
"status.library_closed": "Bibliothek geschlossen ({time_span})",
|
||||
"status.library_closing": "Bibliothek wird geschlossen...",
|
||||
"status.library_save_success": "Bibliothek gespeichert und geschlossen!",
|
||||
"status.library_search_query": "Durchsuche die Bibliothek...",
|
||||
"status.library_version_expected": "Erwartet:",
|
||||
"status.library_version_found": "Gefunden:",
|
||||
"status.library_version_mismatch": "BIbliotheksversion stimmt nicht überein!",
|
||||
"status.results": "Ergebnisse",
|
||||
"status.results.invalid_syntax": "Ungültige Such-Syntax:",
|
||||
"status.results_found": "{count} Ergebnisse gefunden ({time_span})",
|
||||
"tag.add": "Tag hinzufügen",
|
||||
"tag.add.plural": "Tags hinzufügen",
|
||||
"tag.add_to_search": "Zur Suche hinzufügen",
|
||||
"tag.aliases": "Aliase",
|
||||
"tag.all_tags": "Alle Tags",
|
||||
"tag.choose_color": "Tag-Farbe auswählen",
|
||||
"tag.color": "Farbe",
|
||||
"tag.confirm_delete": "Sind Sie sich sicher, dass Sie den Tag \"{tag_name}\" löschen wollen?",
|
||||
"tag.create": "Tag erstellen",
|
||||
"tag.create_add": "Erstellen && Hinzufügen \"{query}\"",
|
||||
"tag.disambiguation.tooltip": "Diesen Tag zur Unterscheidung verwenden",
|
||||
"tag.edit": "Tag bearbeiten",
|
||||
"tag.is_category": "Ist Kategorie",
|
||||
"tag.name": "Name",
|
||||
"tag.new": "Neuer Tag",
|
||||
"tag.parent_tags": "Übergeordnete Tags",
|
||||
"tag.parent_tags.add": "Übergeordnete Tags hinzufügen",
|
||||
"tag.parent_tags.description": "Dieser Tag kann bei der Suche als Ersatz für jeden dieser übergeordneten Tags verwendet werden.",
|
||||
"tag.remove": "Tag entfernen",
|
||||
"tag.search_for_tag": "Nach Tag suchen",
|
||||
"tag.shorthand": "Kürzel",
|
||||
"tag.tag_name_required": "Tag Name (Pflichtfeld)",
|
||||
"tag.view_limit": "Anzeige-Limit:",
|
||||
"tag_manager.title": "Bibliothek Tags",
|
||||
"trash.context.ambiguous": "Datei(en) nach {trash_term} verschieben",
|
||||
"trash.context.plural": "Dateien nach {trash_term} verschieben",
|
||||
"trash.context.singular": "Datei nach {trash_term} verschieben",
|
||||
"trash.dialog.disambiguation_warning.plural": "Dies wird sie aus TagStudio <i>UND</i> vom Dateisystem entfernen!",
|
||||
"trash.dialog.disambiguation_warning.singular": "Dies wird sie aus TagStudio <i>UND</i> vom Dateisystem entfernen!",
|
||||
"trash.dialog.move.confirmation.plural": "Bist du sicher, dass du diese {count} Dateien in den {trash_term} verschieben möchtest?",
|
||||
"trash.dialog.move.confirmation.singular": "Bist du sicher, dass du diese Datei in den {trash_term} verschieben möchtest?",
|
||||
"trash.dialog.title.plural": "Dateien löschen",
|
||||
"trash.dialog.title.singular": "Datei löschen",
|
||||
"trash.name.generic": "Mülleimer",
|
||||
"trash.name.windows": "Papierkorb",
|
||||
"view.size.0": "Mini",
|
||||
"view.size.1": "Klein",
|
||||
"view.size.2": "Mittel",
|
||||
"view.size.3": "Groß",
|
||||
"view.size.4": "Extra Groß",
|
||||
"window.message.error_opening_library": "Fehler beim Öffnen der Bibliothek.",
|
||||
"window.title.error": "Fehler",
|
||||
"window.title.open_create_library": "Bibliothek öffnen/erstellen"
|
||||
}
|
||||
@@ -1,291 +0,0 @@
|
||||
{
|
||||
"app.git": "Git Commit",
|
||||
"app.pre_release": "Pre-Release",
|
||||
"app.title": "{base_title} - Library '{library_dir}'",
|
||||
"color_manager.title": "Manage Tag Colors",
|
||||
"color.color_border": "Use Secondary Color for Border",
|
||||
"color.confirm_delete": "Are you sure you want to delete the color \"{color_name}\"?",
|
||||
"color.delete": "Delete Tag",
|
||||
"color.import_pack": "Import Color Pack",
|
||||
"color.name": "Name",
|
||||
"color.namespace.delete.prompt": "Are you sure you want to delete this color namespace? This will delete ALL colors in the namespace along with it!",
|
||||
"color.namespace.delete.title": "Delete Color Namespace",
|
||||
"color.new": "New Color",
|
||||
"color.placeholder": "Color",
|
||||
"color.primary_required": "Primary Color (Required)",
|
||||
"color.primary": "Primary Color",
|
||||
"color.secondary": "Secondary Color",
|
||||
"color.title.no_color": "No Color",
|
||||
"drop_import.description": "The following files match file paths that already exist in the library",
|
||||
"drop_import.duplicates_choice.plural": "The following {count} files match file paths that already exist in the library.",
|
||||
"drop_import.duplicates_choice.singular": "The following file matches a file path that already exists in the library.",
|
||||
"drop_import.progress.label.initial": "Importing New Files...",
|
||||
"drop_import.progress.label.plural": "Importing New Files...\n{count} Files Imported.{suffix}",
|
||||
"drop_import.progress.label.singular": "Importing New Files...\n1 File imported.{suffix}",
|
||||
"drop_import.progress.window_title": "Import Files",
|
||||
"drop_import.title": "Conflicting File(s)",
|
||||
"edit.color_manager": "Manage Tag Colors",
|
||||
"edit.tag_manager": "Manage Tags",
|
||||
"entries.duplicate.merge.label": "Merging Duplicate Entries...",
|
||||
"entries.duplicate.merge": "Merge Duplicate Entries",
|
||||
"entries.duplicate.refresh": "Refresh Duplicate Entries",
|
||||
"entries.duplicates.description": "Duplicate entries are defined as multiple entries which point to the same file on disk. Merging these will combine the tags and metadata from all duplicates into a single consolidated entry. These are not to be confused with \"duplicate files\", which are duplicates of your files themselves outside of TagStudio.",
|
||||
"entries.mirror.confirmation": "Are you sure you want to mirror the following {count} Entries?",
|
||||
"entries.mirror.label": "Mirroring {idx}/{total} Entries...",
|
||||
"entries.mirror.title": "Mirroring Entries",
|
||||
"entries.mirror.window_title": "Mirror Entries",
|
||||
"entries.mirror": "&Mirror",
|
||||
"entries.running.dialog.new_entries": "Adding {total} New File Entries...",
|
||||
"entries.running.dialog.title": "Adding New File Entries",
|
||||
"entries.tags": "Tags",
|
||||
"entries.unlinked.delete_alt": "De&lete Unlinked Entries",
|
||||
"entries.unlinked.delete.confirm": "Are you sure you want to delete the following {count} entries?",
|
||||
"entries.unlinked.delete.deleting_count": "Deleting {idx}/{count} Unlinked Entries",
|
||||
"entries.unlinked.delete.deleting": "Deleting Entries",
|
||||
"entries.unlinked.delete": "Delete Unlinked Entries",
|
||||
"entries.unlinked.description": "Each library entry is linked to a file in one of your directories. If a file linked to an entry is moved or deleted outside of TagStudio, it is then considered unlinked.<br><br>Unlinked entries may be automatically relinked via searching your directories or deleted if desired.",
|
||||
"entries.unlinked.missing_count.none": "Unlinked Entries: N/A",
|
||||
"entries.unlinked.missing_count.some": "Unlinked Entries: {count}",
|
||||
"entries.unlinked.refresh_all": "&Refresh All",
|
||||
"entries.unlinked.relink.attempting": "Attempting to Relink {idx}/{missing_count} Entries, {fixed_count} Successfully Relinked",
|
||||
"entries.unlinked.relink.manual": "&Manual Relink",
|
||||
"entries.unlinked.relink.title": "Relinking Entries",
|
||||
"entries.unlinked.scanning": "Scanning Library for Unlinked Entries...",
|
||||
"entries.unlinked.search_and_relink": "&Search && Relink",
|
||||
"entries.unlinked.title": "Fix Unlinked Entries",
|
||||
"field.copy": "Copy Field",
|
||||
"field.edit": "Edit Field",
|
||||
"field.paste": "Paste Field",
|
||||
"file.date_added": "Date Added",
|
||||
"file.date_created": "Date Created",
|
||||
"file.date_modified": "Date Modified",
|
||||
"file.dimensions": "Dimensions",
|
||||
"file.duplicates.description": "TagStudio supports importing DupeGuru results to manage duplicate files.",
|
||||
"file.duplicates.dupeguru.advice": "After mirroring, you're free to use DupeGuru to delete the unwanted files. Afterwards, use TagStudio's \"Fix Unlinked Entries\" feature in the Tools menu in order to delete the unlinked Entries.",
|
||||
"file.duplicates.dupeguru.file_extension": "DupeGuru Files (*.dupeguru)",
|
||||
"file.duplicates.dupeguru.load_file": "&Load DupeGuru File",
|
||||
"file.duplicates.dupeguru.no_file": "No DupeGuru File Selected",
|
||||
"file.duplicates.dupeguru.open_file": "Open DupeGuru Results File",
|
||||
"file.duplicates.fix": "Fix Duplicate Files",
|
||||
"file.duplicates.matches_uninitialized": "Duplicate File Matches: N/A",
|
||||
"file.duplicates.matches": "Duplicate File Matches: {count}",
|
||||
"file.duplicates.mirror_entries": "&Mirror Entries",
|
||||
"file.duplicates.mirror.description": "Mirror the Entry data across each duplicate match set, combining all data while not removing or duplicating fields. This operation will not delete any files or data.",
|
||||
"file.duration": "Length",
|
||||
"file.not_found": "File Not Found",
|
||||
"file.open_file_with": "Open file with",
|
||||
"file.open_file": "Open file",
|
||||
"file.open_location.generic": "Show file in file explorer",
|
||||
"file.open_location.mac": "Reveal in Finder",
|
||||
"file.open_location.windows": "Show in File Explorer",
|
||||
"folders_to_tags.close_all": "Close All",
|
||||
"folders_to_tags.converting": "Converting folders to Tags",
|
||||
"folders_to_tags.description": "Creates tags based on your folder structure and applies them to your entries.\n The structure below shows all the tags that will be created and what entries they will be applied to.",
|
||||
"folders_to_tags.open_all": "Open All",
|
||||
"folders_to_tags.title": "Create Tags From Folders",
|
||||
"about.title": "About TagStudio",
|
||||
"about.content": "<p>TagStudio is a photo & file organization application with an underlying tag-based system that focuses on giving freedom and flexibility to the user. No proprietary programs or formats, no sea of sidecar files, and no complete upheaval of your filesystem structure.</p>License: GPLv3<br>Config path: {config_path}<br>FFmpeg: {ffmpeg}<br>FFprobe: {ffprobe}<p><a href=\"https://github.com/TagStudioDev/TagStudio\">GitHub</a> | <a href=\"https://docs.tagstud.io\">Documentation</a> | <a href=\"https://discord.com/invite/hRNnVKhF2G\">Discord</a></p>",
|
||||
"generic.add": "Add",
|
||||
"generic.apply_alt": "&Apply",
|
||||
"generic.apply": "Apply",
|
||||
"generic.cancel_alt": "&Cancel",
|
||||
"generic.cancel": "Cancel",
|
||||
"generic.close": "Close",
|
||||
"generic.continue": "Continue",
|
||||
"generic.copy": "Copy",
|
||||
"generic.cut": "Cut",
|
||||
"generic.delete_alt": "&Delete",
|
||||
"generic.delete": "Delete",
|
||||
"generic.done_alt": "&Done",
|
||||
"generic.done": "Done",
|
||||
"generic.edit_alt": "&Edit",
|
||||
"generic.edit": "Edit",
|
||||
"generic.filename": "Filename",
|
||||
"generic.navigation.back": "Back",
|
||||
"generic.navigation.next": "Next",
|
||||
"generic.none": "None",
|
||||
"generic.overwrite_alt": "&Overwrite",
|
||||
"generic.overwrite": "Overwrite",
|
||||
"generic.paste": "Paste",
|
||||
"generic.recent_libraries": "Recent Libraries",
|
||||
"generic.rename_alt": "&Rename",
|
||||
"generic.rename": "Rename",
|
||||
"generic.reset": "Reset",
|
||||
"generic.save": "Save",
|
||||
"generic.skip_alt": "&Skip",
|
||||
"generic.skip": "Skip",
|
||||
"help.visit_github": "Visit GitHub Repository",
|
||||
"home.search_entries": "Search Entries",
|
||||
"home.search_library": "Search Library",
|
||||
"home.search_tags": "Search Tags",
|
||||
"home.search": "Search",
|
||||
"home.thumbnail_size.extra_large": "Extra Large Thumbnails",
|
||||
"home.thumbnail_size.large": "Large Thumbnails",
|
||||
"home.thumbnail_size.medium": "Medium Thumbnails",
|
||||
"home.thumbnail_size.mini": "Mini Thumbnails",
|
||||
"home.thumbnail_size.small": "Small Thumbnails",
|
||||
"home.thumbnail_size": "Thumbnail Size",
|
||||
"ignore_list.add_extension": "&Add Extension",
|
||||
"ignore_list.mode.exclude": "Exclude",
|
||||
"ignore_list.mode.include": "Include",
|
||||
"ignore_list.mode.label": "List Mode:",
|
||||
"ignore_list.title": "File Extensions",
|
||||
"json_migration.checking_for_parity": "Checking for Parity...",
|
||||
"json_migration.creating_database_tables": "Creating SQL Database Tables...",
|
||||
"json_migration.description": "<br>Start and preview the results of the library migration process. The converted library will <i>not</i> be used unless you click \"Finish Migration\". <br><br>Library data should either have matching values or feature a \"Matched\" label. Values that do not match will be displayed in red and feature a \"<b>(!)</b>\" symbol next to them.<br><center><i>This process may take up to several minutes for larger libraries.</i></center>",
|
||||
"json_migration.discrepancies_found.description": "Discrepancies were found between the original and converted library formats. Please review and choose to whether continue with the migration or to cancel.",
|
||||
"json_migration.discrepancies_found": "Library Discrepancies Found",
|
||||
"json_migration.finish_migration": "Finish Migration",
|
||||
"json_migration.heading.aliases": "Aliases:",
|
||||
"json_migration.heading.colors": "Colors:",
|
||||
"json_migration.heading.differ": "Discrepancy",
|
||||
"json_migration.heading.entires": "Entries:",
|
||||
"json_migration.heading.extension_list_type": "Extension List Type:",
|
||||
"json_migration.heading.fields": "Fields:",
|
||||
"json_migration.heading.file_extension_list": "File Extension List:",
|
||||
"json_migration.heading.match": "Matched",
|
||||
"json_migration.heading.names": "Names:",
|
||||
"json_migration.heading.parent_tags": "Parent Tags:",
|
||||
"json_migration.heading.paths": "Paths:",
|
||||
"json_migration.heading.shorthands": "Shorthands:",
|
||||
"json_migration.heading.tags": "Tags:",
|
||||
"json_migration.info.description": "Library save files created with TagStudio versions <b>9.4 and below</b> will need to be migrated to the new <b>v9.5+</b> format.<br><h2>What you need to know:</h2><ul><li>Your existing library save file will <b><i>NOT</i></b> be deleted</li><li>Your personal files will <b><i>NOT</i></b> be deleted, moved, or modified</li><li>The new v9.5+ save format can not be opened in earlier versions of TagStudio</li></ul><h3>What's changed:</h3><ul><li>\"Tag Fields\" have been replaced by \"Tag Categories\". Instead of adding tags to fields first, tags now get added directly to file entries. They're then automatically organized into categories based on parent tags marked with the new \"Is Category\" property in the tag editing menu. Any tag can be marked as a category, and child tags will sort themselves underneath parent tags marked as categories. The \"Favorite\" and \"Archived\" tags now inherit from a new \"Meta Tags\" tag which is marked as a category by default.</li><li>Tag colors have been tweaked and expanded upon. Some colors have been renamed or consolidated, however all tag colors will still convert to exact or close matches in v9.5.</li></ul><ul>",
|
||||
"json_migration.migrating_files_entries": "Migrating {entries:,d} File Entries...",
|
||||
"json_migration.migration_complete_with_discrepancies": "Migration Complete, Discrepancies Found",
|
||||
"json_migration.migration_complete": "Migration Complete!",
|
||||
"json_migration.start_and_preview": "Start and Preview",
|
||||
"json_migration.title.new_lib": "<h2>v9.5+ Library</h2>",
|
||||
"json_migration.title.old_lib": "<h2>v9.4 Library</h2>",
|
||||
"json_migration.title": "Save Format Migration: \"{path}\"",
|
||||
"landing.open_create_library": "Open/Create Library {shortcut}",
|
||||
"library_object.name_required": "Name (Required)",
|
||||
"library_object.name": "Name",
|
||||
"library_object.slug_required": "ID Slug (Required)",
|
||||
"library_object.slug": "ID Slug",
|
||||
"library.field.add": "Add Field",
|
||||
"library.field.confirm_remove": "Are you sure you want to remove this \"{name}\" field?",
|
||||
"library.field.mixed_data": "Mixed Data",
|
||||
"library.field.remove": "Remove Field",
|
||||
"library.missing": "Library Location is Missing",
|
||||
"library.name": "Library",
|
||||
"library.refresh.scanning_preparing": "Scanning Directories for New Files...\nPreparing...",
|
||||
"library.refresh.scanning.plural": "Scanning Directories for New Files...\n{searched_count} Files Searched, {found_count} New Files Found",
|
||||
"library.refresh.scanning.singular": "Scanning Directories for New Files...\n{searched_count} File Searched, {found_count} New Files Found",
|
||||
"library.refresh.title": "Refreshing Directories",
|
||||
"library.scan_library.title": "Scanning Library",
|
||||
"macros.running.dialog.new_entries": "Running Configured Macros on {count}/{total} New File Entries...",
|
||||
"macros.running.dialog.title": "Running Macros on New Entries",
|
||||
"media_player.autoplay": "Autoplay",
|
||||
"menu.delete_selected_files_ambiguous": "Move File(s) to {trash_term}",
|
||||
"menu.delete_selected_files_plural": "Move Files to {trash_term}",
|
||||
"menu.delete_selected_files_singular": "Move File to {trash_term}",
|
||||
"menu.edit.ignore_list": "Ignore Files and Folders",
|
||||
"menu.edit.manage_file_extensions": "Manage File Extensions",
|
||||
"menu.edit.manage_tags": "Manage Tags",
|
||||
"menu.edit.new_tag": "New &Tag",
|
||||
"menu.edit": "Edit",
|
||||
"menu.file.clear_recent_libraries": "Clear Recent",
|
||||
"menu.file.close_library": "&Close Library",
|
||||
"menu.file.new_library": "New Library",
|
||||
"menu.file.open_create_library": "&Open/Create Library",
|
||||
"menu.file.open_library": "Open Library",
|
||||
"menu.file.open_recent_library": "Open Recent",
|
||||
"menu.file.refresh_directories": "&Refresh Directories",
|
||||
"menu.file.save_backup": "&Save Library Backup",
|
||||
"menu.file.save_library": "Save Library",
|
||||
"menu.file": "&File",
|
||||
"menu.help.about": "About",
|
||||
"menu.help": "&Help",
|
||||
"menu.macros.folders_to_tags": "Folders to Tags",
|
||||
"menu.macros": "&Macros",
|
||||
"menu.select": "Select",
|
||||
"menu.settings": "Settings...",
|
||||
"menu.tools.fix_duplicate_files": "Fix Duplicate &Files",
|
||||
"menu.tools.fix_unlinked_entries": "Fix &Unlinked Entries",
|
||||
"menu.tools": "&Tools",
|
||||
"menu.view": "&View",
|
||||
"menu.window": "Window",
|
||||
"namespace.create.description_color": "Tag colors use namespaces as color palette groups. All custom colors must be under a namespace group first.",
|
||||
"namespace.create.description": "Namespaces are used by TagStudio to separate groups of items such as tags and colors in a way that makes them easy to export and share. Namespaces starting with \"tagstudio\" are reserved by TagStudio for internal use.",
|
||||
"namespace.create.title": "Create Namespace",
|
||||
"namespace.new.button": "New Namespace",
|
||||
"namespace.new.prompt": "Create a New Namespace to Start Adding Custom Colors!",
|
||||
"preview.multiple_selection": "<b>{count}</b> Items Selected",
|
||||
"preview.no_selection": "No Items Selected",
|
||||
"select.add_tag_to_selected": "Add Tag to Selected",
|
||||
"select.all": "Select All",
|
||||
"select.clear": "Clear Selection",
|
||||
"edit.copy_fields": "Copy Fields",
|
||||
"edit.paste_fields": "Paste Fields",
|
||||
"settings.clear_thumb_cache.title": "Clear Thumbnail Cache",
|
||||
"settings.language": "Language",
|
||||
"settings.open_library_on_start": "Open Library on Start",
|
||||
"settings.restart_required": "Please restart TagStudio for changes to take effect.",
|
||||
"settings.show_filenames_in_grid": "Show Filenames in Grid",
|
||||
"settings.show_recent_libraries": "Show Recent Libraries",
|
||||
"settings.title": "Settings",
|
||||
"sorting.direction.ascending": "Ascending",
|
||||
"sorting.direction.descending": "Descending",
|
||||
"splash.opening_library": "Opening Library \"{library_path}\"...",
|
||||
"status.deleted_file_plural": "Deleted {count} files!",
|
||||
"status.deleted_file_singular": "Deleted 1 file!",
|
||||
"status.deleted_none": "No files deleted.",
|
||||
"status.deleted_partial_warning": "Only deleted {count} file(s)! Check if any of the files are currently missing or in use.",
|
||||
"status.deleting_file": "Deleting file [{i}/{count}]: \"{path}\"...",
|
||||
"status.library_backup_in_progress": "Saving Library Backup...",
|
||||
"status.library_backup_success": "Library Backup Saved at: \"{path}\" ({time_span})",
|
||||
"status.library_closed": "Library Closed ({time_span})",
|
||||
"status.library_closing": "Closing Library...",
|
||||
"status.library_save_success": "Library Saved and Closed!",
|
||||
"status.library_search_query": "Searching Library...",
|
||||
"status.library_version_expected": "Expected:",
|
||||
"status.library_version_found": "Found:",
|
||||
"status.library_version_mismatch": "Library Version Mismatch!",
|
||||
"status.results_found": "{count} Results Found ({time_span})",
|
||||
"status.results.invalid_syntax": "Invalid Search Syntax:",
|
||||
"status.results": "Results",
|
||||
"tag_manager.title": "Library Tags",
|
||||
"tag.add_to_search": "Add to Search",
|
||||
"tag.add.plural": "Add Tags",
|
||||
"tag.add": "Add Tag",
|
||||
"tag.aliases": "Aliases",
|
||||
"tag.all_tags": "All Tags",
|
||||
"tag.choose_color": "Choose Tag Color",
|
||||
"tag.color": "Color",
|
||||
"tag.confirm_delete": "Are you sure you want to delete the tag \"{tag_name}\"?",
|
||||
"tag.create_add": "Create && Add \"{query}\"",
|
||||
"tag.create": "Create Tag",
|
||||
"tag.disambiguation.tooltip": "Use this tag for disambiguation",
|
||||
"tag.edit": "Edit Tag",
|
||||
"tag.is_category": "Is Category",
|
||||
"tag.name": "Name",
|
||||
"tag.new": "New Tag",
|
||||
"tag.parent_tags.add": "Add Parent Tag(s)",
|
||||
"tag.parent_tags.description": "This tag can be treated as a substitute for any of these Parent Tags in searches.",
|
||||
"tag.parent_tags": "Parent Tags",
|
||||
"tag.remove": "Remove Tag",
|
||||
"tag.search_for_tag": "Search for Tag",
|
||||
"tag.shorthand": "Shorthand",
|
||||
"tag.tag_name_required": "Tag Name (Required)",
|
||||
"tag.view_limit": "View Limit:",
|
||||
"trash.context.ambiguous": "Move file(s) to {trash_term}",
|
||||
"trash.context.plural": "Move files to {trash_term}",
|
||||
"trash.context.singular": "Move file to {trash_term}",
|
||||
"trash.dialog.disambiguation_warning.plural": "This will remove them from TagStudio <i>AND</i> your file system!",
|
||||
"trash.dialog.disambiguation_warning.singular": "This will remove it from TagStudio <i>AND</i> your file system!",
|
||||
"trash.dialog.move.confirmation.plural": "Are you sure you want to move these {count} files to the {trash_term}?",
|
||||
"trash.dialog.move.confirmation.singular": "Are you sure you want to move this file to the {trash_term}?",
|
||||
"trash.dialog.permanent_delete_warning": "<b>WARNING!</b> If this file can't be moved to the {trash_term}, <b>it will be <b>permanently deleted!</b>",
|
||||
"trash.dialog.title.plural": "Delete Files",
|
||||
"trash.dialog.title.singular": "Delete File",
|
||||
"trash.name.generic": "Trash",
|
||||
"trash.name.windows": "Recycle Bin",
|
||||
"view.size.0": "Mini",
|
||||
"view.size.1": "Small",
|
||||
"view.size.2": "Medium",
|
||||
"view.size.3": "Large",
|
||||
"view.size.4": "Extra Large",
|
||||
"window.message.error_opening_library": "Error opening library.",
|
||||
"window.title.error": "Error",
|
||||
"window.title.open_create_library": "Open/Create Library"
|
||||
}
|
||||
@@ -1,291 +0,0 @@
|
||||
{
|
||||
"about.content": "<p>TagStudio es una aplicación de fotografías y archivos con un sistema de etiquetas subyacentes que se centra en dar libertad y flexibilidad al usuario. Sin programas ni formatos propios, ni un mar de archivos y sin trastornar completamente tu sistema de estructurar los archivos.</p>. Licencia: GPLv3<br>Archivo de configuración: {config_path}<br>FFmpeg: {ffmpeg}<br>FFprobe: {ffprobe}<p><a href=\"https://github.com/TagStudioDev/TagStudio\">GitHub</a> | <a href=\"https://docs.tagstud.io\">Documentación</a> | <a href=\"https://discord.com/invite/hRNnVKhF2G\">Discord</a></p>",
|
||||
"about.title": "Acerca de",
|
||||
"app.git": "Git Commit",
|
||||
"app.pre_release": "Previas al lanzamiento",
|
||||
"app.title": "{base_title} - Biblioteca '{library_dir}'",
|
||||
"color.color_border": "Usar color secundario para la cenefa",
|
||||
"color.confirm_delete": "¿Estás seguro de que quieres eliminar el color \"{color_name}\"?",
|
||||
"color.delete": "Eliminar la etiqueta",
|
||||
"color.import_pack": "Importar paquete de colores",
|
||||
"color.name": "Nombre",
|
||||
"color.namespace.delete.prompt": "¿Estás seguro de que quieres eliminar el espacio de nombres de este color? ¡Esto eliminará todos los colores en el espacio de nombres junto con él!",
|
||||
"color.namespace.delete.title": "Eliminar el espacio de nombres de color",
|
||||
"color.new": "Nuevo color",
|
||||
"color.placeholder": "Color",
|
||||
"color.primary": "Color primario",
|
||||
"color.primary_required": "Color primario (Obligatorio)",
|
||||
"color.secondary": "Color secundario",
|
||||
"color.title.no_color": "Sin color",
|
||||
"color_manager.title": "Administrar los colores de las etiquetas",
|
||||
"drop_import.description": "Los siguientes archivos igualan con las rutas de archivos que ya existen en la biblioteca",
|
||||
"drop_import.duplicates_choice.plural": "Los siguientes {count} archivos igualan con las rutas de archivos que ya existen en la biblioteca.",
|
||||
"drop_import.duplicates_choice.singular": "El siguiente archivo iguala con la ruta de archivo que ya existe en la biblioteca.",
|
||||
"drop_import.progress.label.initial": "Importando archivos nuevos...",
|
||||
"drop_import.progress.label.plural": "Importando archivos nuevos...\n{count} Archivos importado.{suffix}",
|
||||
"drop_import.progress.label.singular": "Importando archivos nuevos...\n1 Archivo importado.{suffix}",
|
||||
"drop_import.progress.window_title": "Importar archivos",
|
||||
"drop_import.title": "Conflictos de archivos",
|
||||
"edit.color_manager": "Administrar los colores de las etiquetas",
|
||||
"edit.copy_fields": "Copiar campos",
|
||||
"edit.paste_fields": "Pegar campos",
|
||||
"edit.tag_manager": "Administrar etiquetas",
|
||||
"entries.duplicate.merge": "Fusionar entradas duplicadas",
|
||||
"entries.duplicate.merge.label": "Fusionando entradas duplicadas...",
|
||||
"entries.duplicate.refresh": "Recargar entradas duplicadas",
|
||||
"entries.duplicates.description": "Las entradas duplicadas se definen como múltiples entradas que apuntan al mismo archivo en el disco. Al fusionarlas, se combinarán las etiquetas y los metadatos de todos los duplicados en una única entrada consolidada. No deben confundirse con los \"archivos duplicados\", que son duplicados de sus archivos fuera de TagStudio.",
|
||||
"entries.mirror": "&Reflejar",
|
||||
"entries.mirror.confirmation": "¿Estás seguro de que quieres reflejar las siguientes {count} entradas?",
|
||||
"entries.mirror.label": "Reflejando {idx}/{total} Entradas...",
|
||||
"entries.mirror.title": "Reflejando entradas",
|
||||
"entries.mirror.window_title": "Reflejar entradas",
|
||||
"entries.running.dialog.new_entries": "Añadiendo {total} nuevas entradas de archivos...",
|
||||
"entries.running.dialog.title": "Añadiendo las nuevas entradas de archivos",
|
||||
"entries.tags": "Etiquetas",
|
||||
"entries.unlinked.delete": "Eliminar entradas no vinculadas",
|
||||
"entries.unlinked.delete.confirm": "¿Está seguro de que desea eliminar las siguientes {count} entradas?",
|
||||
"entries.unlinked.delete.deleting": "Eliminando entradas",
|
||||
"entries.unlinked.delete.deleting_count": "Eliminando {idx}/{count} entradas no vinculadas",
|
||||
"entries.unlinked.delete_alt": "Eliminar entradas no vinculadas",
|
||||
"entries.unlinked.description": "Cada entrada de la biblioteca está vinculada a un archivo en uno de tus directorios. Si un archivo vinculado a una entrada se mueve o se elimina fuera de TagStudio, se considerará desvinculado. <br><br>Las entradas no vinculadas se pueden volver a vincular automáticamente mediante una búsqueda en tus directorios, el usuario puede eliminarlas si así lo desea.",
|
||||
"entries.unlinked.missing_count.none": "Entradas no vinculadas: N/A",
|
||||
"entries.unlinked.missing_count.some": "Entradas no vinculadas: {count}",
|
||||
"entries.unlinked.refresh_all": "&Recargar todo",
|
||||
"entries.unlinked.relink.attempting": "Intentando volver a vincular {idx}/{missing_count} Entradas, {fixed_count} Reenlazado correctamente",
|
||||
"entries.unlinked.relink.manual": "&Reenlace manual",
|
||||
"entries.unlinked.relink.title": "Volver a vincular las entradas",
|
||||
"entries.unlinked.scanning": "Buscando entradas no enlazadas en la biblioteca...",
|
||||
"entries.unlinked.search_and_relink": "&Buscar && volver a vincular",
|
||||
"entries.unlinked.title": "Corregir entradas no vinculadas",
|
||||
"field.copy": "Copiar campo",
|
||||
"field.edit": "Editar campo",
|
||||
"field.paste": "Pegar campo",
|
||||
"file.date_added": "Fecha de adición",
|
||||
"file.date_created": "Fecha de creación",
|
||||
"file.date_modified": "Fecha de modificación",
|
||||
"file.dimensions": "Dimensiones",
|
||||
"file.duplicates.description": "TagStudio es compatible con Importación de resultados de DupeGuru para administrar archivos duplicados.",
|
||||
"file.duplicates.dupeguru.advice": "Después de la duplicación, puede utilizar DupeGuru para eliminar los archivos no deseados. Luego, utilice la función \"Reparar entradas no vinculadas\" de TagStudio en el menú Herramientas para eliminar las entradas no vinculadas.",
|
||||
"file.duplicates.dupeguru.file_extension": "Archivos de DupeGuru (*.dupeguru)",
|
||||
"file.duplicates.dupeguru.load_file": "&Cargar archivo DupeGuru",
|
||||
"file.duplicates.dupeguru.no_file": "No se ha seleccionado ningún archivo DupeGuru",
|
||||
"file.duplicates.dupeguru.open_file": "Abrir el archivo de resultados de DupeGuru",
|
||||
"file.duplicates.fix": "Reparar archivos duplicados",
|
||||
"file.duplicates.matches": "Coincidencias de archivos duplicados: {count}",
|
||||
"file.duplicates.matches_uninitialized": "Coincidencias de archivos duplicados: N/D",
|
||||
"file.duplicates.mirror.description": "Reflejar los datos de entrada en cada conjunto de coincidencias duplicadas, combinando todos los datos sin eliminar ni duplicar campos. Esta operación no eliminará ningún archivos ni dato.",
|
||||
"file.duplicates.mirror_entries": "&Reflejar entradas",
|
||||
"file.duration": "Longitud",
|
||||
"file.not_found": "Archivo no encontrado",
|
||||
"file.open_file": "Abrir archivo",
|
||||
"file.open_file_with": "Abrir el archivo con",
|
||||
"file.open_location.generic": "Abrir archivo en el Explorador",
|
||||
"file.open_location.mac": "Abrir en el Finder",
|
||||
"file.open_location.windows": "Abrir en el Explorador",
|
||||
"folders_to_tags.close_all": "Cerrar todo",
|
||||
"folders_to_tags.converting": "Convertir carpetas en etiquetas",
|
||||
"folders_to_tags.description": "Crea etiquetas basadas en su estructura de carpetas y las aplica a sus entradas.\nLa siguiente estructura muestra todas las etiquetas que se crearán y a qué entradas se aplicarán.",
|
||||
"folders_to_tags.open_all": "Abrir todo",
|
||||
"folders_to_tags.title": "Crear etiquetas a partir de carpetas",
|
||||
"generic.add": "Añadir",
|
||||
"generic.apply": "Aplicar",
|
||||
"generic.apply_alt": "&Aplicar",
|
||||
"generic.cancel": "Cancelar",
|
||||
"generic.cancel_alt": "&Cancelar",
|
||||
"generic.close": "Cerrar",
|
||||
"generic.continue": "Continuar",
|
||||
"generic.copy": "Copiar",
|
||||
"generic.cut": "Cortar",
|
||||
"generic.delete": "Eliminar",
|
||||
"generic.delete_alt": "&Eliminar",
|
||||
"generic.done": "Terminado",
|
||||
"generic.done_alt": "&Terminado",
|
||||
"generic.edit": "Editar",
|
||||
"generic.edit_alt": "&Editar",
|
||||
"generic.filename": "Nombre de archivo",
|
||||
"generic.navigation.back": "Volver",
|
||||
"generic.navigation.next": "Continuar",
|
||||
"generic.none": "Ninguno",
|
||||
"generic.overwrite": "Sobrescribir",
|
||||
"generic.overwrite_alt": "&Sobrescribir",
|
||||
"generic.paste": "Pegar",
|
||||
"generic.recent_libraries": "Bibliotecas recientes",
|
||||
"generic.rename": "Renombrar",
|
||||
"generic.rename_alt": "&Renombrar",
|
||||
"generic.reset": "Reiniciar",
|
||||
"generic.save": "Guardar",
|
||||
"generic.skip": "Saltear",
|
||||
"generic.skip_alt": "&Saltear",
|
||||
"help.visit_github": "Visitar el repositorio en GitHub",
|
||||
"home.search": "Buscar",
|
||||
"home.search_entries": "Buscar entradas",
|
||||
"home.search_library": "Buscar el biblioteca",
|
||||
"home.search_tags": "Buscar etiquetas",
|
||||
"home.thumbnail_size": "Tamaño de la vista previa",
|
||||
"home.thumbnail_size.extra_large": "Imágenes extra grandes",
|
||||
"home.thumbnail_size.large": "Imágenes grandes",
|
||||
"home.thumbnail_size.medium": "Imágenes medianas",
|
||||
"home.thumbnail_size.mini": "Imágenes en miniatura",
|
||||
"home.thumbnail_size.small": "Imágenes pequeñas",
|
||||
"ignore_list.add_extension": "&Añadir extensión",
|
||||
"ignore_list.mode.exclude": "Excluir",
|
||||
"ignore_list.mode.include": "Incluir",
|
||||
"ignore_list.mode.label": "Modo de lista:",
|
||||
"ignore_list.title": "Extensiones del archivo",
|
||||
"json_migration.checking_for_parity": "Revisando paridad...",
|
||||
"json_migration.creating_database_tables": "Creando tablas en la base de datos de SQL...",
|
||||
"json_migration.description": "<br>Inicia y previsualiza el resultado del proceso de migración de la biblioteca. La biblioteca transformada <i>no</i> se utilizará hasta que pulses \"Finalizar migración\". <br><br>Los datos de la biblioteca deberían tener valores que concuerdan o disponen de una etiqueta \"Emparejado\". Los valores que no coinciden se mostrarán en rojo y mostrará el símbolo \"<b>(!)</b>\" a su lado.<br><center><i>Este proceso puede tardas hasta varios minutos en bibliotecas de gran tamaño.</i></center>",
|
||||
"json_migration.discrepancies_found": "Se han encontrado discrepancias en la biblioteca",
|
||||
"json_migration.discrepancies_found.description": "Se han encontrado discrepancias entre el formato original y el convertido. Por favor, revisa y elige si quieres continuar con la migración o la quieres cancelar.",
|
||||
"json_migration.finish_migration": "Finalizar migración",
|
||||
"json_migration.heading.aliases": "Alias:",
|
||||
"json_migration.heading.colors": "Colores:",
|
||||
"json_migration.heading.differ": "Discrepancia",
|
||||
"json_migration.heading.entires": "Entradas:",
|
||||
"json_migration.heading.extension_list_type": "Tipo de extensión de la lista:",
|
||||
"json_migration.heading.fields": "Campos:",
|
||||
"json_migration.heading.file_extension_list": "Lista de extensiones de archivos:",
|
||||
"json_migration.heading.match": "Igualado",
|
||||
"json_migration.heading.names": "Nombres:",
|
||||
"json_migration.heading.parent_tags": "Etiquetas principales:",
|
||||
"json_migration.heading.paths": "Rutas:",
|
||||
"json_migration.heading.shorthands": "Abreviaturas:",
|
||||
"json_migration.heading.tags": "Etiquetas:",
|
||||
"json_migration.info.description": "Los archivos de guardado de la biblioteca con una versión de TagStudio <b>9.4 e inferior</b> se tendrán que migrar al nuevo formato de la versión <b>v9.5+</b>.<br><h2>Lo que necesitas saber:</h2><ul><li>Tu archivo de guardado de la biblioteca <b><i>NO</i></b> se eliminará</li><li>Tus archivos personales <b><i>NO</i></b> se eliminarán, moverán, o modificarán</li><li>El archivo con el formato de la nueva v9.5+ no se puede abrir en versiones anteriores de TagStudio</li></ul><h3>Qué ha cambiado:</h3><ul><li>\"Etiquetas Campo\" se han substituido por \"Etiquetas Categoría\". En vez de añadir campos primero, las etiquetas se añadirán directamente a las entradas de los archivos. Después de organizarán automáticamente en categorías basándose en las etiquetas padre marcadas con la nueva propiedad \"Es Categoría\" en el menú de edición de etiquetas. Cualquier etiqueta se puede marcar como categoría, y las etiquetas hija se ordenarán a sí mismas bajo las etiquetas padre marcadas como categoría. Las etiquetas \"Favorito\" y \"Archivado\" ahora heredan de una \"Metaetiqueta\", que están marcadas por defecto como una categoría.</li><li>Los colores de las etiquetas se han modificado y ampliado. Algunos colores se han renombrado o consolidado, aun así, todas las etiquetas de colores se transformarán al mismo color o similar en la versión v9.5.</li></ul><ul>",
|
||||
"json_migration.migrating_files_entries": "Migrando {entries:,d} entradas de archivos...",
|
||||
"json_migration.migration_complete": "¡La migración es terminado!",
|
||||
"json_migration.migration_complete_with_discrepancies": "La migración es terminado, discrepancias descubierto",
|
||||
"json_migration.start_and_preview": "Comenzar y preestrenar",
|
||||
"json_migration.title": "Guardar el formato de la migración: \"{path}\"",
|
||||
"json_migration.title.new_lib": "<h2>v9.5+ biblioteca</h2>",
|
||||
"json_migration.title.old_lib": "<h2>v9.4 biblioteca</h2>",
|
||||
"landing.open_create_library": "Abrir/Crear biblioteca {shortcut}",
|
||||
"library.field.add": "Añadir campo",
|
||||
"library.field.confirm_remove": "¿Está seguro de que desea eliminar el campo \"{name}\"?",
|
||||
"library.field.mixed_data": "Datos variados",
|
||||
"library.field.remove": "Eliminar campo",
|
||||
"library.missing": "Falta la ubicación",
|
||||
"library.name": "Biblioteca",
|
||||
"library.refresh.scanning.plural": "Escaneando directorios en busca de nuevos archivos...\n{searched_count} archivos buscados, {found_count} nuevos archivos encontrados",
|
||||
"library.refresh.scanning.singular": "Escaneando directorios en busca de nuevos archivos...\n{searched_count} Archivos buscados, {found_count} Nuevos archivos encontrados",
|
||||
"library.refresh.scanning_preparing": "Buscar archivos nuevos en los directorios...\nPreparando...",
|
||||
"library.refresh.title": "Refrescar directorios",
|
||||
"library.scan_library.title": "Escaneando la biblioteca",
|
||||
"library_object.name": "Nombre",
|
||||
"library_object.name_required": "Nombre (Obligatorio)",
|
||||
"library_object.slug": "Slug ID",
|
||||
"library_object.slug_required": "Slug ID (Obligatorio)",
|
||||
"macros.running.dialog.new_entries": "Ejecución de macros configurados en {count}/{total} entradas nuevas...",
|
||||
"macros.running.dialog.title": "Ejecución de macros en entradas nuevas",
|
||||
"media_player.autoplay": "Reproducción automática",
|
||||
"menu.delete_selected_files_ambiguous": "Mover archivo(s) a la {trash_term}",
|
||||
"menu.delete_selected_files_plural": "Mover archivos a la {trash_term}",
|
||||
"menu.delete_selected_files_singular": "Mover archivo a la {trash_term}",
|
||||
"menu.edit": "Editar",
|
||||
"menu.edit.ignore_list": "Ignorar archivos y carpetas",
|
||||
"menu.edit.manage_file_extensions": "Gestionar extensión de archivos",
|
||||
"menu.edit.manage_tags": "Gestionar etiquetas",
|
||||
"menu.edit.new_tag": "Nueva &Etiqueta",
|
||||
"menu.file": "&Archivo",
|
||||
"menu.file.clear_recent_libraries": "Borrar recientes",
|
||||
"menu.file.close_library": "&Cerrar biblioteca",
|
||||
"menu.file.new_library": "Nueva biblioteca",
|
||||
"menu.file.open_create_library": "&Abrir/Crear biblioteca",
|
||||
"menu.file.open_library": "Abrir biblioteca",
|
||||
"menu.file.open_recent_library": "Abrir reciente",
|
||||
"menu.file.refresh_directories": "&Actualizar directorios",
|
||||
"menu.file.save_backup": "&Guardar copia de seguridad de la biblioteca",
|
||||
"menu.file.save_library": "Guardar biblioteca",
|
||||
"menu.help": "&Ayuda",
|
||||
"menu.help.about": "Acerca de",
|
||||
"menu.macros": "&Macros",
|
||||
"menu.macros.folders_to_tags": "Carpetas a Etiquetas",
|
||||
"menu.select": "Seleccionar",
|
||||
"menu.settings": "Ajustes...",
|
||||
"menu.tools": "&Herramientas",
|
||||
"menu.tools.fix_duplicate_files": "Reparar &archivos duplicados",
|
||||
"menu.tools.fix_unlinked_entries": "Reparar entradas &desvinculadas",
|
||||
"menu.view": "&Ver",
|
||||
"menu.window": "Ventana",
|
||||
"namespace.create.description": "Los espacios de nombre se utilizan en TagStudio para separar grupos de elementos, como pueden ser etiquetas y colores, de manera que facilita exportarlos y compartirlos. Los espacios de nombre que empiezan por \"tagstudio\" se reservan para uso interno de TagStudio",
|
||||
"namespace.create.description_color": "Los colores de las etiquetas utilizan espacios de nombre como grupos de paletas de colores. Todos los colores personalizados deben estar primero bajo un espacio de nombre",
|
||||
"namespace.create.title": "Crear espacio de nombre",
|
||||
"namespace.new.button": "Nuevo espacio de nombre",
|
||||
"namespace.new.prompt": "¡Crea un nuevo espacio de nombre para empezar a añadir colores personalizados!",
|
||||
"preview.multiple_selection": "<b>{count}</b> Elementos seleccionados",
|
||||
"preview.no_selection": "No hay elementos seleccionados",
|
||||
"select.add_tag_to_selected": "Añadir etiqueta a la selección",
|
||||
"select.all": "Seleccionar todo",
|
||||
"select.clear": "Borrar selección",
|
||||
"settings.clear_thumb_cache.title": "Borrar cache de las miniaturas",
|
||||
"settings.language": "Idioma",
|
||||
"settings.open_library_on_start": "Abrir biblioteca al iniciar",
|
||||
"settings.restart_required": "Por favor, reinicia TagStudio para que se los cambios surtan efecto.",
|
||||
"settings.show_filenames_in_grid": "Mostrar el nombre de archivo en la cuadrícula",
|
||||
"settings.show_recent_libraries": "Mostrar bibliotecas recientes",
|
||||
"settings.title": "Ajustes",
|
||||
"sorting.direction.ascending": "Ascendiente",
|
||||
"sorting.direction.descending": "Descendiente",
|
||||
"splash.opening_library": "Abriendo biblioteca \"{library_path}\"...",
|
||||
"status.deleted_file_plural": "¡{count} Archivos eliminados!",
|
||||
"status.deleted_file_singular": "¡Eliminado 1 archivo!",
|
||||
"status.deleted_none": "Ningún archivo eliminado.",
|
||||
"status.deleted_partial_warning": "¡Sólo se han eliminado {count} archivo(s)! Comprueba si alguno de los archivos no existe o está en uso.",
|
||||
"status.deleting_file": "Eliminando archivo [{i}/{count}]: \"{path}\"...",
|
||||
"status.library_backup_in_progress": "Guardando copia de seguridad de la biblioteca...",
|
||||
"status.library_backup_success": "Copia de seguridad de la biblioteca guardada en: \"{path}\" ({time_span})",
|
||||
"status.library_closed": "Biblioteca cerrada ({time_span})",
|
||||
"status.library_closing": "Cerrando biblioteca...",
|
||||
"status.library_save_success": "¡Biblioteca guardada y cerrada!",
|
||||
"status.library_search_query": "Buscando biblioteca...",
|
||||
"status.library_version_expected": "Esperado:",
|
||||
"status.library_version_found": "Encontrado:",
|
||||
"status.library_version_mismatch": "¡La versión de la biblioteca no coincide!",
|
||||
"status.results": "Resultados",
|
||||
"status.results.invalid_syntax": "Sintaxis de búsqueda no válida:",
|
||||
"status.results_found": "{count} Resultados encontrados ({time_span})",
|
||||
"tag.add": "Añadir etiqueta",
|
||||
"tag.add.plural": "Añadir etiquetas",
|
||||
"tag.add_to_search": "Añadir a la búsqueda",
|
||||
"tag.aliases": "Alias",
|
||||
"tag.all_tags": "Todas las etiquetas",
|
||||
"tag.choose_color": "Elige el color de la etiqueta",
|
||||
"tag.color": "Color",
|
||||
"tag.confirm_delete": "¿Está seguro de que quiere eliminar la etiqueta \"{tag_name}\"?",
|
||||
"tag.create": "Crear etiqueta",
|
||||
"tag.create_add": "Crear && añadir \"{query}\"",
|
||||
"tag.disambiguation.tooltip": "Utiliza esta etiqueta para desambiguar",
|
||||
"tag.edit": "Editar etiqueta",
|
||||
"tag.is_category": "Es categoría",
|
||||
"tag.name": "Nombre",
|
||||
"tag.new": "Nueva etiqueta",
|
||||
"tag.parent_tags": "Etiquetas principales",
|
||||
"tag.parent_tags.add": "Añadir etiquetas principales",
|
||||
"tag.parent_tags.description": "Esta etiqueta se puede tratar como sustituto de cualquiera de las etiquetas padre en las búsquedas.",
|
||||
"tag.remove": "Eliminar etiqueta",
|
||||
"tag.search_for_tag": "Buscar por etiqueta",
|
||||
"tag.shorthand": "Taquigrafía",
|
||||
"tag.tag_name_required": "Nombre etiqueta (Obligatorio)",
|
||||
"tag.view_limit": "Límite visualización:",
|
||||
"tag_manager.title": "Etiquetas de la biblioteca",
|
||||
"trash.context.ambiguous": "Mover archivo(s) a la {trash_term}",
|
||||
"trash.context.plural": "Mover archivos a la {trash_term}",
|
||||
"trash.context.singular": "Mover archivo a la {trash_term}",
|
||||
"trash.dialog.disambiguation_warning.plural": "¡Se eliminarán de TagStudio <i>Y</i> de tus archivos!",
|
||||
"trash.dialog.disambiguation_warning.singular": "¡Se eliminarán de TagStudio <i>Y</i> de tus archivos!",
|
||||
"trash.dialog.move.confirmation.plural": "¿Está seguro que quiere mover estos {count} archivos a la {trash_term}?",
|
||||
"trash.dialog.move.confirmation.singular": "¿Está seguro que quiere mover este archivo a la {trash_term}?",
|
||||
"trash.dialog.permanent_delete_warning": "<b>ADVERTENCIA!</b> Si este archivo no se puede mover a la {trash_term}, <b>¡Se eliminará para siempre!</b>",
|
||||
"trash.dialog.title.plural": "Eliminar archivos",
|
||||
"trash.dialog.title.singular": "Eliminar archivo",
|
||||
"trash.name.generic": "Basura",
|
||||
"trash.name.windows": "Papelera de reciclaje",
|
||||
"view.size.0": "Mini",
|
||||
"view.size.1": "Pequeño",
|
||||
"view.size.2": "Medio",
|
||||
"view.size.3": "Grande",
|
||||
"view.size.4": "Extra grande",
|
||||
"window.message.error_opening_library": "Error abriendo la biblioteca.",
|
||||
"window.title.error": "Error",
|
||||
"window.title.open_create_library": "Abrir/Crear biblioteca"
|
||||
}
|
||||
@@ -1,138 +0,0 @@
|
||||
{
|
||||
"about.content": "<p>Ang TagStudio ay isang application ng pagsasaayos ng file at larawan na may pinagbabatayan na tag-based na sistema na nakatutok sa pagbibigay ng kalayaan at kakayahang umangkop sa user. Walang mga proprietary na format o program, walang dagat ng mga sidecar file, at walang kaguluhan ng iyong estruktura ng filesystem.</p>Lisensya: GPLv3<br>Path ng config: {config_path}<br>FFMpeg: {ffmpeg}<br>FFProbe: {ffprobe}<p><a href=\"https://github.com/TagStudioDev/TagStudio\">GitHub</a> | <a href=\"https://docs.tagstud.io\">Dokumentasyon</a> | <a href=\"https://discord.gg/invite/hRNnVKhF2G\">Discord</a></p>",
|
||||
"about.title": "Tungkol sa",
|
||||
"app.git": "Git Commit",
|
||||
"app.pre_release": "Pre-Release",
|
||||
"app.title": "{base_title} - Library '{library_dir}'",
|
||||
"color.color_border": "Gumamit ng Pangalawang Kulay para sa Border",
|
||||
"color.confirm_delete": "Sigurado ka ba gusto mong burahin ang kulay na \"{color_name}\"?",
|
||||
"color.delete": "Burahin ang Tag",
|
||||
"color.import_pack": "Mag-import ng Color Pack",
|
||||
"color.name": "Pangalan",
|
||||
"color.namespace.delete.prompt": "Sigurado ka ba gusto mong burahin ang color namespace na ito? Buburahin nito ang LAHAT ng mga kulay sa namespace kasama nito!",
|
||||
"color.namespace.delete.title": "Burahin ang Color Namespace",
|
||||
"color.new": "Bagong Kulay",
|
||||
"color.placeholder": "Kulay",
|
||||
"color.primary": "Pangunahing Kulay",
|
||||
"color.primary_required": "Pangunahing Kulay (Kinakailangan)",
|
||||
"color.secondary": "Pangalawang Kulay",
|
||||
"color.title.no_color": "Walang Kulay",
|
||||
"color_manager.title": "Ipamahala ang Mga Kulay ng Tag",
|
||||
"drop_import.description": "Ang mga sumusunod na file ay tumutugma sa mga file path na umiiral na sa library",
|
||||
"drop_import.duplicates_choice.plural": "Ang sumusunod na {count} mga file ay tumutugma sa mga file path na umiiral sa library.",
|
||||
"drop_import.duplicates_choice.singular": "Ang sumusunod na file ay tumutugma sa file path na umiiral na sa library.",
|
||||
"drop_import.progress.label.initial": "Ini-import Ang Mga Bagong File…",
|
||||
"drop_import.progress.label.plural": "Ini-import Ang Mga Bagong File…\nNa-import ang {count} Mga File.{suffix}",
|
||||
"drop_import.progress.label.singular": "Ini-import Ang Mga Bagong File…\nNa-import ang 1 File.{suffix}",
|
||||
"drop_import.progress.window_title": "I-import ang Mga File",
|
||||
"drop_import.title": "(Mga) Sumasalungat na File",
|
||||
"edit.color_manager": "Ipamahala ang Mga Kulay ng Tag",
|
||||
"edit.tag_manager": "Ipamahala ang Mga Tag",
|
||||
"entries.duplicate.merge": "Isama ang Mga Duplicate na Entry",
|
||||
"entries.duplicate.merge.label": "Sinasama ang mga Duplicate na Entry…",
|
||||
"entries.duplicate.refresh": "I-refresh ang Mga Duplicate na Entry",
|
||||
"entries.duplicates.description": "Ang mga duplicate na entry ay tinukoy bilang maramihang mga entry na tumuturo sa parehong file sa disk. Ang pagsasama-sama ng mga ito ay pagsasama-samahin ang mga tag at metadata mula sa lahat ng mga duplicate sa isang solong pinagsama-samang entry. Ang mga ito ay hindi dapat ipagkamali sa \"mga duplicate na file\", na mga duplicate ng iyong mga file mismo sa labas ng TagStudio.",
|
||||
"entries.mirror": "&Mirror",
|
||||
"entries.mirror.confirmation": "Sigurado ka ba gusto mong i-mirror ang sumusunod na {count} Mga Entry?",
|
||||
"entries.mirror.label": "Mini-mirror ang {idx}/{total} Mga Entry…",
|
||||
"entries.mirror.title": "Mini-mirror ang Mga Entry",
|
||||
"entries.mirror.window_title": "I-mirror ang Mga Entry",
|
||||
"entries.running.dialog.new_entries": "Dinadagdag ang {total} Mga Bagong Entry ng File…",
|
||||
"entries.running.dialog.title": "Dinadagdag ang Mga Bagong Entry ng File",
|
||||
"entries.tags": "Mga Tag",
|
||||
"entries.unlinked.delete": "Burahin ang Mga Hindi Naka-link na Entry",
|
||||
"entries.unlinked.delete.confirm": "Sigurado ka ba gusto mong burahin ang (mga) sumusunod na {count} entry?",
|
||||
"entries.unlinked.delete.deleting": "Binubura ang Mga Entry",
|
||||
"entries.unlinked.delete.deleting_count": "Binubura ang {idx}/{count} (mga) Naka-unlink na Entry",
|
||||
"entries.unlinked.delete_alt": "Burahin ang Mga Naka-unlink na Entry",
|
||||
"entries.unlinked.description": "Ang bawat entry sa library ay naka-link sa isang file sa isa sa iyong mga direktoryo. Kung ang isang file na naka-link sa isang entry ay inilipat o binura sa labas ng TagStudio, ito ay isinasaalang-alang na naka-unlink.<br><br>Ang mga naka-unlink na entry ay maaring i-link muli sa pamamagitan ng paghahanap sa iyong mga direktoryo o buburahin kung ninanais.",
|
||||
"entries.unlinked.missing_count.none": "Mga Naka-unlink na Entry: N/A",
|
||||
"entries.unlinked.missing_count.some": "Mga Naka-unlink na Entry: {count}",
|
||||
"entries.unlinked.refresh_all": "&I-refresh Lahat",
|
||||
"entries.unlinked.relink.attempting": "Sinusubukang i-link muli ang {idx}/{missing_count} Mga Entry, {fixed_count} Matagumpay na na-link muli",
|
||||
"entries.unlinked.relink.manual": "&Manwal na Pag-link Muli",
|
||||
"entries.unlinked.relink.title": "Nili-link muli ang Mga Entry",
|
||||
"entries.unlinked.scanning": "Sina-scan ang Library para sa Mga Naka-unlink na Entry…",
|
||||
"entries.unlinked.search_and_relink": "&Maghanap at Mag-link muli",
|
||||
"entries.unlinked.title": "Ayusin ang Mga Naka-unlink na Entry",
|
||||
"field.copy": "Kopyahin ang Field",
|
||||
"field.edit": "I-edit ang Field",
|
||||
"field.paste": "I-paste ang Field",
|
||||
"file.date_added": "Petsang Dinagdag",
|
||||
"file.date_created": "Petsa na Ginawa",
|
||||
"file.date_modified": "Binago Noong",
|
||||
"file.dimensions": "Laki",
|
||||
"file.duplicates.description": "Sinusuportahan ng TagStudio ang pag-import ng mga DupeGuru na resulta para ipamahala ang mga duplicate na file.",
|
||||
"file.duplicates.dupeguru.advice": "Pagkatapos ng pag-mirror, malaya kang gamitin ang DupeGuru para magbura ng mga hindi gustong file. Pagkatapos, gamitin ang \"Ayusin ang Mga Naka-unlink na Entry\" feature ng TagStudio sa Tools menu para burahin ang mga hindi naka-link na Entry.",
|
||||
"file.duplicates.dupeguru.file_extension": "Mga DupeGuru File (*.dupeguru)",
|
||||
"file.duplicates.dupeguru.load_file": "&Mag-load ng DupeGuru File",
|
||||
"file.duplicates.dupeguru.no_file": "Walang DupeGuru na File na Napili",
|
||||
"file.duplicates.dupeguru.open_file": "Buksan ang DupeGuru Results File",
|
||||
"file.duplicates.fix": "Ayusin ang Mga Duplicate na File",
|
||||
"file.duplicates.matches": "Mga Tumutugmang Duplicate File: {count}",
|
||||
"file.duplicates.matches_uninitialized": "Mga Tumutugmang Duplicate File: N/A",
|
||||
"file.duplicates.mirror.description": "Mirror the Entry data across each duplicate match set, combining all data while not removing or duplicating fields. This operation will not delete any files or data.",
|
||||
"file.duplicates.mirror_entries": "&I-mirror ang mga Entry",
|
||||
"file.duration": "Haba",
|
||||
"file.not_found": "Hindi nahanap ang file:",
|
||||
"file.open_file": "Buksan ang file",
|
||||
"file.open_file_with": "Buksan ang file gamit ang",
|
||||
"file.open_location.generic": "Ipakita ang file sa file explorer",
|
||||
"file.open_location.mac": "Ipakita sa Finder",
|
||||
"file.open_location.windows": "Ipakita sa File Explorer",
|
||||
"folders_to_tags.close_all": "Isara Lahat",
|
||||
"folders_to_tags.converting": "Kino-convert ang mga folder sa Tag",
|
||||
"folders_to_tags.description": "Gumawa ng mga tag base sa iyong estruktura ng folder at ia-apply sa iyong mga entry.\nAng istraktura sa ibaba ay pinapakita ang lahat ng mga tag na gagawin at anong mga entry ang ia-apply sa.",
|
||||
"folders_to_tags.open_all": "Buksan Lahat",
|
||||
"folders_to_tags.title": "Gumawa ng Mga Tag Mula Sa Mga Folder",
|
||||
"generic.add": "Magdagdag",
|
||||
"generic.apply": "I-apply",
|
||||
"generic.apply_alt": "&I-apply",
|
||||
"generic.cancel": "Kanselahin",
|
||||
"generic.cancel_alt": "&Kanselahin",
|
||||
"generic.close": "Isara",
|
||||
"generic.continue": "Magpatuloy",
|
||||
"generic.copy": "Kopyahin",
|
||||
"generic.cut": "I-cut",
|
||||
"generic.delete": "Burahin",
|
||||
"generic.delete_alt": "&Burahin",
|
||||
"generic.done": "Tapos na",
|
||||
"generic.done_alt": "&Tapos na",
|
||||
"generic.edit_alt": "&I-edit",
|
||||
"generic.recent_libraries": "Mga Kamakailang Library",
|
||||
"home.search": "Maghanap",
|
||||
"home.search_entries": "Mga Entry sa Paghahanap",
|
||||
"home.search_tags": "Maghanap ng Mga Tag",
|
||||
"home.thumbnail_size": "Laki ng Thumbnail",
|
||||
"ignore_list.add_extension": "Magdagdag ng Extension",
|
||||
"ignore_list.mode.exclude": "Huwag isama",
|
||||
"ignore_list.mode.include": "Isama",
|
||||
"ignore_list.mode.label": "Mode ng Pag-lista:",
|
||||
"ignore_list.title": "Mga File Extension",
|
||||
"library.field.add": "Magdagdag ng Field",
|
||||
"library.field.remove": "Tanggalin ang Field",
|
||||
"library.name": "Library",
|
||||
"library.refresh.scanning_preparing": "Sina-scan ang Mga Direktoryo para sa Mga Bagong File...\nNaghahanda...",
|
||||
"library.refresh.title": "Nire-refresh ang Mga Direktoryo",
|
||||
"macros.running.dialog.new_entries": "Tinatakbo ang Mga Naka-configure na Macro sa {count}/{total} Mga Bagong Entry",
|
||||
"macros.running.dialog.title": "Tumatakbo ng Mga Macro sa Mga Bagong Entry",
|
||||
"menu.edit": "I-edit",
|
||||
"menu.file": "File",
|
||||
"menu.help": "Tulong",
|
||||
"menu.macros": "Mga macro",
|
||||
"menu.tools": "Mga tool",
|
||||
"menu.window": "Window",
|
||||
"status.library_backup_success": "Na-save ang Library Backup sa: \"{path}\" ({time_span})",
|
||||
"status.library_save_success": "Sinave at Sinara ang Library!",
|
||||
"status.library_search_query": "Hinahanap ang library para sa",
|
||||
"status.results": "Mga Resulta",
|
||||
"tag.add": "Magdagdag ng Tag",
|
||||
"tag.aliases": "Mga Alyas",
|
||||
"tag.color": "Kulay",
|
||||
"tag.name": "Pangalan",
|
||||
"tag.new": "Bagong Tag",
|
||||
"tag.parent_tags": "Mga Parent Tag",
|
||||
"tag.parent_tags.add": "Magdagdag ng Mga Parent Tag",
|
||||
"tag.shorthand": "Shorthand",
|
||||
"tag_manager.title": "Mga Tag ng Library"
|
||||
}
|
||||
@@ -1,291 +0,0 @@
|
||||
{
|
||||
"about.content": "<p>TagStudio est une application d'organisation de photos et de fichiers avec un système de tags qui mets en avant la liberté et flexibilité à l'utilisateur. Pas de programmes ou de formats propriétaires, pas la moindre trace de fichiers secondaires, et pas de bouleversement complet de la structure de votre système de fichiers.</p>License: GPLv3<br>Chemin de configuration: {config_path}<br>FFmpeg: {ffmpeg}<br>FFprobe: {ffprobe}<p><a href=\"https://github.com/TagStudioDev/TagStudio\">GitHub</a> | <a href=\"https://docs.tagstud.io\">Documentation</a> | <a href=\"https://discord.com/invite/hRNnVKhF2G\">Discord</a></p>",
|
||||
"about.title": "À propos",
|
||||
"app.git": "Git Commit",
|
||||
"app.pre_release": "Version Préliminaire",
|
||||
"app.title": "{base_title} - Bibliothèque '{library_dir}'",
|
||||
"color.color_border": "Utiliser la couleur secondaire sur la bordure",
|
||||
"color.confirm_delete": "Voulez vous vraiment supprimer la couleur \"{color_name}\"?",
|
||||
"color.delete": "Supprimer le Tag",
|
||||
"color.import_pack": "Importer un Pack de Couleur",
|
||||
"color.name": "Nom",
|
||||
"color.namespace.delete.prompt": "Voulez-vous vraiment supprimer ce groupe de couleurs? Cela supprimera TOUTES les couleurs du groupe!",
|
||||
"color.namespace.delete.title": "Supprimer le namespace de couleur",
|
||||
"color.new": "Nouvelle couleur",
|
||||
"color.placeholder": "Couleur",
|
||||
"color.primary": "Couleur Primaire",
|
||||
"color.primary_required": "Couleur Primaire (Requis)",
|
||||
"color.secondary": "Couleur Secondaire",
|
||||
"color.title.no_color": "Aucune couleur",
|
||||
"color_manager.title": "Gérer la Couleur des Tags",
|
||||
"drop_import.description": "Les fichiers suivants correspondent à des chemins de fichiers déjà existant dans la bibliothèque",
|
||||
"drop_import.duplicates_choice.plural": "Les chemins d'accès des {count} fichiers suivants existent déjà dans la Bibliothèque.",
|
||||
"drop_import.duplicates_choice.singular": "Le fichier suivant correspond a un chemin d'accès déjà existant dans la bibliothèque.",
|
||||
"drop_import.progress.label.initial": "Importer des Nouveaux Fichiers...",
|
||||
"drop_import.progress.label.plural": "Importation des Nouveaux Fichiers...\n{count} Fichiers Importés.{suffix}",
|
||||
"drop_import.progress.label.singular": "Importation des Nouveaux Fichiers...\n1 Fichier Importé.{suffix}",
|
||||
"drop_import.progress.window_title": "Importer des Fichiers",
|
||||
"drop_import.title": "Fichier(s) en Conflit",
|
||||
"edit.color_manager": "Gérer la Couleur des Tags",
|
||||
"edit.copy_fields": "Copier les Fields",
|
||||
"edit.paste_fields": "Coller les Fields",
|
||||
"edit.tag_manager": "Gérer les Tags",
|
||||
"entries.duplicate.merge": "Fusion des entrées dupliquées",
|
||||
"entries.duplicate.merge.label": "Fusionner les entrées dupliquées...",
|
||||
"entries.duplicate.refresh": "Rafraichir les Entrées en Doublon",
|
||||
"entries.duplicates.description": "Les entrées dupliquées sont définies comme des entrées multiple qui pointent vers le même fichier sur le disque. Les fusionner va combiner les tags et metadatas de tous les duplicatas vers une seule entrée consolidée. Elles ne doivent pas être confondues avec les \"fichiers en doublon\", qui sont des doublons de vos fichiers en dehors de TagStudio.",
|
||||
"entries.mirror": "&Refléter",
|
||||
"entries.mirror.confirmation": "Êtes-vous sûr de vouloir répliquer les {count} Entrées suivantes ?",
|
||||
"entries.mirror.label": "Réplication de {idx}/{total} Entrées...",
|
||||
"entries.mirror.title": "Réplication des Entrées",
|
||||
"entries.mirror.window_title": "Entrée Miroir",
|
||||
"entries.running.dialog.new_entries": "Ajout de {total} Nouvelles entrées de fichier...",
|
||||
"entries.running.dialog.title": "Ajout de Nouvelles entrées de fichier",
|
||||
"entries.tags": "Tags",
|
||||
"entries.unlinked.delete": "Supprimer les Entrées non Liées",
|
||||
"entries.unlinked.delete.confirm": "Êtes-vous sûr de vouloir supprimer les {count} entrées suivantes ?",
|
||||
"entries.unlinked.delete.deleting": "Suppression des Entrées",
|
||||
"entries.unlinked.delete.deleting_count": "Suppression des Entrées non Liées {idx}/{count}",
|
||||
"entries.unlinked.delete_alt": "Supprimer les Entrées non liées",
|
||||
"entries.unlinked.description": "Chaque entrée dans la bibliothèque est liée à un fichier dans l'un de vos dossiers. Si un fichier lié à une entrée est déplacé ou supprimé en dehors de TagStudio, il est alors considéré non lié. <br><br>Les entrées non liées peuvent être automatiquement reliées via la recherche dans vos dossiers, reliées manuellement par l'utilisateur, ou supprimées si désiré.",
|
||||
"entries.unlinked.missing_count.none": "Entrées non Liées : N/A",
|
||||
"entries.unlinked.missing_count.some": "Entrées non Liées : {count}",
|
||||
"entries.unlinked.refresh_all": "&Tout Rafraîchir",
|
||||
"entries.unlinked.relink.attempting": "Tentative de Reliage de {idx}/{missing_count} Entrées, {fixed_count} ont été Reliées avec Succès",
|
||||
"entries.unlinked.relink.manual": "&Reliage Manuel",
|
||||
"entries.unlinked.relink.title": "Reliage des Entrées",
|
||||
"entries.unlinked.scanning": "Balayage de la Bibliothèque pour trouver des Entrées non Liées...",
|
||||
"entries.unlinked.search_and_relink": "&Rechercher && Relier",
|
||||
"entries.unlinked.title": "Réparation des Entrées non Liées",
|
||||
"field.copy": "Copier le Champ",
|
||||
"field.edit": "Modifier le Champ",
|
||||
"field.paste": "Coller le Champ",
|
||||
"file.date_added": "Date Ajoutée",
|
||||
"file.date_created": "Date de Création",
|
||||
"file.date_modified": "Date de Modification",
|
||||
"file.dimensions": "Dimensions",
|
||||
"file.duplicates.description": "TagStudio supporte l'importation de résultats DupeGuru pour gérer les doublons de fichier.",
|
||||
"file.duplicates.dupeguru.advice": "Après réplication, vous êtes libre d'utiliser DupeGuru pour supprimer des fichiers non désirés. Ensuite, utilisez la fonctionnalité \"Réparation des Entrées non Liées\" de TagStudio dans le menu Outils pour supprimer les Entrées non liées.",
|
||||
"file.duplicates.dupeguru.file_extension": "Fichiers DupeGuru (*.dupeguru)",
|
||||
"file.duplicates.dupeguru.load_file": "&Charger un Fichier DupeGuru",
|
||||
"file.duplicates.dupeguru.no_file": "Aucun Fichier DupeGuru Sélectionné",
|
||||
"file.duplicates.dupeguru.open_file": "Ouvrire les Fichiers de Résultats de DupeGuru",
|
||||
"file.duplicates.fix": "Réparer les Fichiers en Double",
|
||||
"file.duplicates.matches": "Dupliquer les Correspondances de Fichier: {count}",
|
||||
"file.duplicates.matches_uninitialized": "Dupliquer les Correspondances de Fichier : N/A",
|
||||
"file.duplicates.mirror.description": "Repliquer les données d'entrée dans chaque jeu de correspondances en double, en combinant toutes les données sans supprimer ni dupliquer de champs. Cette opération ne supprime aucun fichier ni aucune donnée.",
|
||||
"file.duplicates.mirror_entries": "&Répliquer les Entrées",
|
||||
"file.duration": "Durée",
|
||||
"file.not_found": "Fichier non trouvé",
|
||||
"file.open_file": "Ouvrir un Fichier",
|
||||
"file.open_file_with": "Ouvrir le fichier avec",
|
||||
"file.open_location.generic": "Ouvrir le Fichier dans l'Explorateur de Fichier",
|
||||
"file.open_location.mac": "Montrer dans le Finder",
|
||||
"file.open_location.windows": "Montrer dans l'explorateur de Fichiers",
|
||||
"folders_to_tags.close_all": "Tout Fermer",
|
||||
"folders_to_tags.converting": "Conversion des dossiers en Tags",
|
||||
"folders_to_tags.description": "Créé des Tags basés sur votre arborescence de dossier et les applique à vos entrées.\nLa structure ci-dessous affiche tous les labels qui seront créés et à quelles entrées ils seront appliqués.",
|
||||
"folders_to_tags.open_all": "Tout Ouvrir",
|
||||
"folders_to_tags.title": "Créer un Label à partir d'un Dossier",
|
||||
"generic.add": "Ajouter",
|
||||
"generic.apply": "Appliquer",
|
||||
"generic.apply_alt": "&Appliquer",
|
||||
"generic.cancel": "Annuler",
|
||||
"generic.cancel_alt": "&Annuler",
|
||||
"generic.close": "Fermer",
|
||||
"generic.continue": "Continuer",
|
||||
"generic.copy": "Copier",
|
||||
"generic.cut": "Couper",
|
||||
"generic.delete": "Supprimer",
|
||||
"generic.delete_alt": "&Supprimer",
|
||||
"generic.done": "Terminé",
|
||||
"generic.done_alt": "&Terminé",
|
||||
"generic.edit": "Éditer",
|
||||
"generic.edit_alt": "&Modifier",
|
||||
"generic.filename": "Nom de fichier",
|
||||
"generic.navigation.back": "Retour",
|
||||
"generic.navigation.next": "Suivant",
|
||||
"generic.none": "Aucun",
|
||||
"generic.overwrite": "Écraser",
|
||||
"generic.overwrite_alt": "&Écraser",
|
||||
"generic.paste": "Coller",
|
||||
"generic.recent_libraries": "Bibliothèques Récentes",
|
||||
"generic.rename": "Renommer",
|
||||
"generic.rename_alt": "&Renommer",
|
||||
"generic.reset": "Réinitialiser",
|
||||
"generic.save": "Sauvegarder",
|
||||
"generic.skip": "Passer",
|
||||
"generic.skip_alt": "&Passer",
|
||||
"help.visit_github": "Visiter le Dépôt GitHub",
|
||||
"home.search": "Rechercher",
|
||||
"home.search_entries": "Recherche",
|
||||
"home.search_library": "Rechercher dans la Bibliothèque",
|
||||
"home.search_tags": "Recherche de Tags",
|
||||
"home.thumbnail_size": "Taille de la miniature",
|
||||
"home.thumbnail_size.extra_large": "Très Grandes Miniatures",
|
||||
"home.thumbnail_size.large": "Grandes Miniatures",
|
||||
"home.thumbnail_size.medium": "Miniatures Moyennes",
|
||||
"home.thumbnail_size.mini": "Mini Miniatures",
|
||||
"home.thumbnail_size.small": "Petites Miniatures",
|
||||
"ignore_list.add_extension": "&Ajouter une Extension",
|
||||
"ignore_list.mode.exclude": "Exclure",
|
||||
"ignore_list.mode.include": "Inclure",
|
||||
"ignore_list.mode.label": "Mode de la liste:",
|
||||
"ignore_list.title": "Extensions de Fichiers",
|
||||
"json_migration.checking_for_parity": "Vérification de la Parité...",
|
||||
"json_migration.creating_database_tables": "Création des Tables de Base de Données SQL...",
|
||||
"json_migration.description": "<br>Démarrez et prévisualisez les résultats du processus de migration de la bibliothèque. La bibliothèque convertie <i>ne</i> sera utilisée que si vous cliquez sur \"Terminer la migration\". <br><br>Les données de la bibliothèque doivent soit avoir des valeurs correspondantes, soit comporter un label \"Matched\". Les valeurs qui ne correspondent pas seront affichées en rouge et comporteront un symbole \"<b>(!)</b>\" à côté d'elles.<br><center><i>Ce processus peut prendre jusqu'à plusieurs minutes pour les bibliothèques plus volumineuses.</i></center>",
|
||||
"json_migration.discrepancies_found": "Divergence Détectées dans la Bibliothèque",
|
||||
"json_migration.discrepancies_found.description": "Des divergences ont été détectées entre le format d'origine et le format converti de la bibliothèque. Veuillez les examiner et choisir de poursuivre la migration ou de l'annuler.",
|
||||
"json_migration.finish_migration": "Terminer la Migration",
|
||||
"json_migration.heading.aliases": "Alias:",
|
||||
"json_migration.heading.colors": "Couleurs:",
|
||||
"json_migration.heading.differ": "Divergence",
|
||||
"json_migration.heading.entires": "Entrées:",
|
||||
"json_migration.heading.extension_list_type": "Type de liste d'extension:",
|
||||
"json_migration.heading.fields": "Champs:",
|
||||
"json_migration.heading.file_extension_list": "Liste des extensions de fichiers:",
|
||||
"json_migration.heading.match": "Correspondant",
|
||||
"json_migration.heading.names": "Noms:",
|
||||
"json_migration.heading.parent_tags": "Tags Parents:",
|
||||
"json_migration.heading.paths": "Chemins:",
|
||||
"json_migration.heading.shorthands": "Abréviations:",
|
||||
"json_migration.heading.tags": "Tags:",
|
||||
"json_migration.info.description": "Les fichiers de sauvegarde de bibliothèque créés avec les versions <b>9.4 et inférieures</b> de TagStudio devront être migrés vers le nouveau format <b>v9.5+</b>.<br><h2>Ce que vous devez savoir:</h2><ul><li>Votre fichier de sauvegarde de bibliothèque existant ne sera <b><i>PAS</i></b> supprimé</li><li>Vos fichiers personnels ne seront <b><i>PAS</i></b> supprimés, déplacés ou modifié</li><li>Le nouveau format de sauvegarde v9.5+ ne peut pas être ouvert dans les versions antérieures de TagStudio</li></ul><h3>Ce qui a changé:</h3><ul><li>Les \"Tag Fields\" ont été remplacés par \"Tag Categories\". Au lieu d’ajouter d’abord des Tags aux fields, les Tags sont désormais ajoutées directement aux entrées de fichier. Ils sont ensuite automatiquement organisés en catégories basées sur les tags parent marquées avec la nouvelle propriété \"Is Category\" dans le menu d'édition des tags. N'importe quelle tag peut être marquée comme catégorie, et les tags enfants seront triées sous les tags parents marquées comme catégories. Les tags « Favoris » et « Archivés » héritent désormais d'un nouveaux tag \"Meta Tags\" qui est marquée comme catégorie par défaut.</li><li>La couleur des tags à été modifiées et développées. Certaines couleurs ont été renommées ou consolidées, mais toutes les couleurs des tags seront toujours converties en correspondances exactes ou proches dans la version 9.5.</li></ul><ul>",
|
||||
"json_migration.migrating_files_entries": "Migration de {entries:,d} entrées de fichier.",
|
||||
"json_migration.migration_complete": "Migration Terminée!",
|
||||
"json_migration.migration_complete_with_discrepancies": "Migration Terminée, Divergences Trouvées",
|
||||
"json_migration.start_and_preview": "Commencer et Prévisualiser",
|
||||
"json_migration.title": "Migration du format d'enregistrement: \"{path}\"",
|
||||
"json_migration.title.new_lib": "<h2>Bibliothèque v9.5+</h2>",
|
||||
"json_migration.title.old_lib": "<h2>Bibliothèque v9.4</h2>",
|
||||
"landing.open_create_library": "Ouvrir/Créer une Bibliothèque {shortcut}",
|
||||
"library.field.add": "Ajouter un Champ",
|
||||
"library.field.confirm_remove": "Êtes-vous sûr de vouloir supprimer le champ \"{name}\"?",
|
||||
"library.field.mixed_data": "Données Mélangées",
|
||||
"library.field.remove": "Supprimer un Champ",
|
||||
"library.missing": "Emplacement Manquant",
|
||||
"library.name": "Bibliothèque",
|
||||
"library.refresh.scanning.plural": "Analyse du Répertoire pour de Nouveaux Fichiers...\n{searched_count} Fichiers Trouvées, {found_count} Nouveaux Fichiers",
|
||||
"library.refresh.scanning.singular": "Analyse du Répertoire pour de Nouveaux Fichiers...\n{searched_count} Fichier Trouvé, {found_count} Nouveaux Fichiers",
|
||||
"library.refresh.scanning_preparing": "Recherche de Nouveaux Fichiers dans les Dossiers...\nPréparation...",
|
||||
"library.refresh.title": "Rafraîchissement des Dossiers",
|
||||
"library.scan_library.title": "Balayage de la Bibliothèque",
|
||||
"library_object.name": "Nom",
|
||||
"library_object.name_required": "Nom (Requis)",
|
||||
"library_object.slug": "Identifiant unique",
|
||||
"library_object.slug_required": "ID Slug (Requis)",
|
||||
"macros.running.dialog.new_entries": "Exécution des Macros Configurées sur {count}/{total} Nouvelles Entrées de Fichiers...",
|
||||
"macros.running.dialog.title": "Exécution des Macros sur les Nouvelles Entrées",
|
||||
"media_player.autoplay": "Lecture automatique",
|
||||
"menu.delete_selected_files_ambiguous": "Déplacer les Fichier(s) vers {trash_term}",
|
||||
"menu.delete_selected_files_plural": "Déplacer les Fichiers vers {trash_term}",
|
||||
"menu.delete_selected_files_singular": "Déplacer le Fichier vers {trash_term}",
|
||||
"menu.edit": "Édition",
|
||||
"menu.edit.ignore_list": "Ignorer les Fichiers et Dossiers",
|
||||
"menu.edit.manage_file_extensions": "Gérer les extensions de fichier",
|
||||
"menu.edit.manage_tags": "Gérer les Tags",
|
||||
"menu.edit.new_tag": "Nouveaux &Tag",
|
||||
"menu.file": "&Fichier",
|
||||
"menu.file.clear_recent_libraries": "Supprimer l'historique de Bibliothèque récente",
|
||||
"menu.file.close_library": "&Fermer la Bibliothèque",
|
||||
"menu.file.new_library": "Nouvelle Bibliothéque",
|
||||
"menu.file.open_create_library": "&Ouvrir/Créer une Bibliothèque",
|
||||
"menu.file.open_library": "Ouvrir la Bibliothèque",
|
||||
"menu.file.open_recent_library": "Ouvrir la Bibliothèque récente",
|
||||
"menu.file.refresh_directories": "&Rafraichir les Répertoires",
|
||||
"menu.file.save_backup": "&Sauvegarde de la Bibliothèque",
|
||||
"menu.file.save_library": "Enregistrer la Bibliothèque",
|
||||
"menu.help": "&Aide",
|
||||
"menu.help.about": "À propos",
|
||||
"menu.macros": "&Macros",
|
||||
"menu.macros.folders_to_tags": "Répertoires à Tags",
|
||||
"menu.select": "Sélectionner",
|
||||
"menu.settings": "Paramètres...",
|
||||
"menu.tools": "&Outils",
|
||||
"menu.tools.fix_duplicate_files": "Réparer les entrées de fichiers en double",
|
||||
"menu.tools.fix_unlinked_entries": "Réparer les entrées de fichier non liée",
|
||||
"menu.view": "&Vues",
|
||||
"menu.window": "Fenêtre",
|
||||
"namespace.create.description": "Les namespaces sont utilisés par TagStudio pour séparer les groupes d'éléments tels que les Tags et les couleurs de manière à faciliter leur exportation et leur partage. Les namespace avec des noms commençant par « tagstudio » sont réservés par TagStudio pour un usage interne.",
|
||||
"namespace.create.description_color": "Les tags utilise les namespace pour regrouper plusieurs couleurs. Toutes les couleurs personnalisées doivent être ajoutées à un namespace.",
|
||||
"namespace.create.title": "Créer une Namespace",
|
||||
"namespace.new.button": "Nouvelle Namespace",
|
||||
"namespace.new.prompt": "Commencer par créer une nouvelle namespace pour pouvoir créer des couleurs personnalisées!",
|
||||
"preview.multiple_selection": "<b>{count}</b> Éléments Sélectionner",
|
||||
"preview.no_selection": "Pas d'Objet Selectionné",
|
||||
"select.add_tag_to_selected": "Ajouter un Tag à la sélection",
|
||||
"select.all": "Tout Sélectionner",
|
||||
"select.clear": "Effacer la Sélection",
|
||||
"settings.clear_thumb_cache.title": "Effacer le cache des vignettes",
|
||||
"settings.language": "Langage",
|
||||
"settings.open_library_on_start": "Ouvrir la Bibliothèque au Démarrage",
|
||||
"settings.restart_required": "Veuillez redémarré TagStudio pour que les changements prenne effet.",
|
||||
"settings.show_filenames_in_grid": "Afficher les Noms de Fichiers en Grille",
|
||||
"settings.show_recent_libraries": "Afficher les Bibliothèques Récentes",
|
||||
"settings.title": "Paramètres",
|
||||
"sorting.direction.ascending": "Croissant",
|
||||
"sorting.direction.descending": "Décroissant",
|
||||
"splash.opening_library": "Ouverture de la Bibliothèque \"{library_path}\"...",
|
||||
"status.deleted_file_plural": "Suppression de {count} fichiers!",
|
||||
"status.deleted_file_singular": "Suppression de 1 fichier!",
|
||||
"status.deleted_none": "Aucun fichiers supprimer.",
|
||||
"status.deleted_partial_warning": "Seulement {count} fichier(s) on été supprimé! Vérifier si les fichiers restant ne serais pas manquant ou en cours d'utilisation.",
|
||||
"status.deleting_file": "Suppression de fichier(s) [{i}/{count}]: \"{path}\"...",
|
||||
"status.library_backup_in_progress": "Création d'une Sauvegarde de la Bibliothèque...",
|
||||
"status.library_backup_success": "Bibliothèque sauvegardée au chemin: \"{path}\" ({time_span})",
|
||||
"status.library_closed": "Bibliothèque fermée ({time_span})",
|
||||
"status.library_closing": "Fermeture de la Bibliothèque...",
|
||||
"status.library_save_success": "Bibliothèque Sauvegardée et Fermée!",
|
||||
"status.library_search_query": "Rechercher dans la Bibliothèque...",
|
||||
"status.library_version_expected": "Exceptée:",
|
||||
"status.library_version_found": "Trouvée:",
|
||||
"status.library_version_mismatch": "La version de la library ne correspond pas!",
|
||||
"status.results": "Résultats",
|
||||
"status.results.invalid_syntax": "Syntaxe de recherche invalide:",
|
||||
"status.results_found": "{count} Résultats Trouvés({time_span})",
|
||||
"tag.add": "Ajouter un Tag",
|
||||
"tag.add.plural": "Ajouter des Tags",
|
||||
"tag.add_to_search": "Ajouter à la Recherche",
|
||||
"tag.aliases": "Alias",
|
||||
"tag.all_tags": "Tout les Tags",
|
||||
"tag.choose_color": "Choisir une couleur de Tag",
|
||||
"tag.color": "Couleur",
|
||||
"tag.confirm_delete": "Voulez vous vraiment supprimer le tag \"{tag_name}\"?",
|
||||
"tag.create": "Créer un Tag",
|
||||
"tag.create_add": "Créer && Ajouter \"{query}\"",
|
||||
"tag.disambiguation.tooltip": "Utilisez ce Tag pour définir une ambiguïté",
|
||||
"tag.edit": "Modifier un Tag",
|
||||
"tag.is_category": "Est une Catégorie",
|
||||
"tag.name": "Nom",
|
||||
"tag.new": "Nouveau Tag",
|
||||
"tag.parent_tags": "Tags Parent",
|
||||
"tag.parent_tags.add": "Ajouter des Tags Parents",
|
||||
"tag.parent_tags.description": "Ce Tag peut être utilisé en replacement de tous ces Tags Parents dans les recherches.",
|
||||
"tag.remove": "Supprimer un Tag",
|
||||
"tag.search_for_tag": "Recherche de Label",
|
||||
"tag.shorthand": "Abrégé",
|
||||
"tag.tag_name_required": "Nom du Tag (Requis)",
|
||||
"tag.view_limit": "Limite d'affichage:",
|
||||
"tag_manager.title": "Tags de la Bibliothèque",
|
||||
"trash.context.ambiguous": "Déplacer les fichier(s) vers {trash_term}",
|
||||
"trash.context.plural": "Déplacer les fichiers vers {trash_term}",
|
||||
"trash.context.singular": "Déplacer le fichier vers {trash_term}",
|
||||
"trash.dialog.disambiguation_warning.plural": "Cela les retirera de TagStudio <i>ET</i> de votre système de fichier!",
|
||||
"trash.dialog.disambiguation_warning.singular": "Cela le retirera de TagStudio <i>ET</i> de votre système de fichier!",
|
||||
"trash.dialog.move.confirmation.plural": "Voulez vous vraiment déplacer {count} fichiers vers la {trash_term}?",
|
||||
"trash.dialog.move.confirmation.singular": "Voulez vous vraiment déplacer ce fichier vers la {trash_term}?",
|
||||
"trash.dialog.permanent_delete_warning": "<b>ATTENTION!</b> Si le fichier ne peut pas être déplacer vers la {trash_term}, <b>elle sera<b>supprimer de manière permanente!</b>",
|
||||
"trash.dialog.title.plural": "Supprimer les Fichiers",
|
||||
"trash.dialog.title.singular": "Supprimer le Fichier",
|
||||
"trash.name.generic": "Poubelle",
|
||||
"trash.name.windows": "Corbeille",
|
||||
"view.size.0": "Mini",
|
||||
"view.size.1": "Petit",
|
||||
"view.size.2": "Moyen",
|
||||
"view.size.3": "Grand",
|
||||
"view.size.4": "Très Grand",
|
||||
"window.message.error_opening_library": "Une erreur est survenue lors de l'ouverture de la bibliothèque.",
|
||||
"window.title.error": "Erreur",
|
||||
"window.title.open_create_library": "Ouvrir/Créer une Bibliothèque"
|
||||
}
|
||||
@@ -1,291 +0,0 @@
|
||||
{
|
||||
"about.content": "<p>A TagStudio egy fénykép- és fájlkezelő program, mely címkék segítségével nyújt felhasználói szabadságot és rugalmasságot. A TagStudio nem használ jogvédett formátumokat, társfájlokat és nem fordítja a feje tetejére a már létező fájlrendszert.</p>Licenc: GPLv3<br>Konfigurációs fájl: {config_path}<br>FFmpeg: {ffmpeg}<br>FFprobe: {ffprobe}<p><a href=\"https://github.com/TagStudioDev/TagStudio\">GitHub-adattár</a> | <a href=\"https://docs.tagstud.io\">Dokumentáció</a> | <a href=\"https://discord.com/invite/hRNnVKhF2G\">Discord-szerver</a></p>",
|
||||
"about.title": "Névjegy",
|
||||
"app.git": "Git-véglegesítés",
|
||||
"app.pre_release": "Kísérleti verzió",
|
||||
"app.title": "{base_title} – Könyvtár: „{library_dir}”",
|
||||
"color.color_border": "Másodlagos szín használata keretszínként",
|
||||
"color.confirm_delete": "Biztosan törölni akarja a(z) „{color_name}”-színt?",
|
||||
"color.delete": "Címke törlése",
|
||||
"color.import_pack": "Színcsomag importálása",
|
||||
"color.name": "Megnevezés",
|
||||
"color.namespace.delete.prompt": "Biztosan törölni akarja ezt a színnévteret? Ezzel a névtér ÖSSZES színét törölni fogja!",
|
||||
"color.namespace.delete.title": "Színnévtér törlése",
|
||||
"color.new": "Új szín",
|
||||
"color.placeholder": "Szín",
|
||||
"color.primary": "Elsődleges szín",
|
||||
"color.primary_required": "Elsődleges szín (kötelező)",
|
||||
"color.secondary": "Másodlagos szín",
|
||||
"color.title.no_color": "Színtelen",
|
||||
"color_manager.title": "Színek kezelése",
|
||||
"drop_import.description": "Az alábbi fájlok elérési útvonala már foglaltak a könyvtárban",
|
||||
"drop_import.duplicates_choice.plural": "Az alábbi {count} fájl elérési útvonala már szerepel a könyvtárban.",
|
||||
"drop_import.duplicates_choice.singular": "Az alábbi fájl elérési útvonala már szerepel a könyvtárban.",
|
||||
"drop_import.progress.label.initial": "Új fájlok importálása folyamatban…",
|
||||
"drop_import.progress.label.plural": "Új fájlok importálása folyamatban…\n{count} fájl importálva.{suffix}",
|
||||
"drop_import.progress.label.singular": "Új fájlok importálása folyamatban…\n1 fájl importálva.{suffix}",
|
||||
"drop_import.progress.window_title": "Fájlok importálása",
|
||||
"drop_import.title": "Fájlütközés",
|
||||
"edit.color_manager": "Színek kezelése",
|
||||
"edit.copy_fields": "Mezők másolása",
|
||||
"edit.paste_fields": "Mezők beillesztése",
|
||||
"edit.tag_manager": "Címkék kezelése",
|
||||
"entries.duplicate.merge": "Egyező elemek &egyesítése",
|
||||
"entries.duplicate.merge.label": "Egyező elemek egyesítése folyamatban…",
|
||||
"entries.duplicate.refresh": "Egyező elemek &frissítése",
|
||||
"entries.duplicates.description": "Ha több elem ugyanazzal a fájllal van összekapcsolva, akkor egyezőnek számítanak. Ha egyesíti őket, akkor egy olyan elem lesz létrehozva, ami az eredeti elemek összes adatát tartalmazza. Ezeket nem szabad összetéveszteni az „egyező fájlokkal”, amelyek a TagStudión kívüli azonos tartalmú fájlok.",
|
||||
"entries.mirror": "&Tükrözés",
|
||||
"entries.mirror.confirmation": "Biztosan tükrözni akarja az alábbi adatokat {count} különböző elemre?",
|
||||
"entries.mirror.label": "{total}/{idx} elem tükrözése folyamatban…",
|
||||
"entries.mirror.title": "Elemek tükrözése",
|
||||
"entries.mirror.window_title": "Elemek tükrözése",
|
||||
"entries.running.dialog.new_entries": "{total} új elem felvétele folyamatban…",
|
||||
"entries.running.dialog.title": "Új elemek felvétele",
|
||||
"entries.tags": "Címkék",
|
||||
"entries.unlinked.delete": "Kapcsolat nélküli elemek törlése",
|
||||
"entries.unlinked.delete.confirm": "Biztosan törölni akarja az alábbi {count} elemet?",
|
||||
"entries.unlinked.delete.deleting": "Elemek törlése",
|
||||
"entries.unlinked.delete.deleting_count": "{count}/{idx}. kapcsolat nélküli elem törlése folyamatban…",
|
||||
"entries.unlinked.delete_alt": "Kapcsolat &nélküli elemek törlése",
|
||||
"entries.unlinked.description": "A könyvtár minden eleme egy fájllal van összekapcsolva a számítógépen. Ha egy kapcsolt fájl a TagSudión kívül kerül áthelyezésre vagy törésre, akkor ez a kapcsolat megszakad.<br><br>Ezeket a kapcsolat nélküli elemeket a program megpróbálhatja automatikusan megkeresni, de Ön is kézileg újra összekapcsolhatja vagy törölheti őket.",
|
||||
"entries.unlinked.missing_count.none": "Kapcsolat nélküli elemek: 0",
|
||||
"entries.unlinked.missing_count.some": "Kapcsolat nélküli elemek: {count}",
|
||||
"entries.unlinked.refresh_all": "&Az összes frissítése",
|
||||
"entries.unlinked.relink.attempting": "{missing_count}/{idx} elem újra összekapcsolásának megkísérlése; {fixed_count} elem sikeresen újra összekapcsolva",
|
||||
"entries.unlinked.relink.manual": "Új&ra összekapcsolás kézileg",
|
||||
"entries.unlinked.relink.title": "Elemek újra összekapcsolása",
|
||||
"entries.unlinked.scanning": "Kapcsolat nélküli elemek keresése a könyvtárban…",
|
||||
"entries.unlinked.search_and_relink": "&Keresés és újra összekapcsolás",
|
||||
"entries.unlinked.title": "Kapcsolat nélküli elemek javítása",
|
||||
"field.copy": "Mező &másolása",
|
||||
"field.edit": "Mező szerkesztése",
|
||||
"field.paste": "Mező &beillesztése",
|
||||
"file.date_added": "Adatbázisba felvétel dátuma",
|
||||
"file.date_created": "Létrehozás dátuma",
|
||||
"file.date_modified": "Módosítás dátuma",
|
||||
"file.dimensions": "Méret",
|
||||
"file.duplicates.description": "A TagStudio támogatja az egyező fájlok azonosítását importált a DupeGuru segítségével.",
|
||||
"file.duplicates.dupeguru.advice": "A tükrözés befejezése után a DupeGuruval kitörölheti a nem kívánt fájlokat. Ezt követően, a TagStudio „Kapcsolat nélküli elemek javítása” funkciójával eltávolíthatja az árván maradt elemeket.",
|
||||
"file.duplicates.dupeguru.file_extension": "DupeGuru fájlok (*.dupeguru)",
|
||||
"file.duplicates.dupeguru.load_file": "&DupeGuru fájl betöltése",
|
||||
"file.duplicates.dupeguru.no_file": "Nincs kiválasztott DupeGuru fájl.",
|
||||
"file.duplicates.dupeguru.open_file": "DupeGuru fájl megnyitása",
|
||||
"file.duplicates.fix": "Egyező fájlok egyesítése",
|
||||
"file.duplicates.matches": "{count} egyező fájl",
|
||||
"file.duplicates.matches_uninitialized": "Nincsenek egyező fájlok",
|
||||
"file.duplicates.mirror.description": "Az összes adat átmásolása minden összetartozó fájl között, ezzel kiegészítve a hiányzó címkéket eltávolítás és duplikálás nélkül. Ez a folyamat nem fog adatokat vagy fájlokat törölni.",
|
||||
"file.duplicates.mirror_entries": "&Elemek tükrözése",
|
||||
"file.duration": "Hossz",
|
||||
"file.not_found": "Az alábbi fájl nem található:",
|
||||
"file.open_file": "Fájl megnyitása",
|
||||
"file.open_file_with": "Társítás",
|
||||
"file.open_location.generic": "Fájl megnyitása Intézőben",
|
||||
"file.open_location.mac": "Megnyitás Finderben",
|
||||
"file.open_location.windows": "Megnyitás Intézőben",
|
||||
"folders_to_tags.close_all": "Az összes &összecsukása",
|
||||
"folders_to_tags.converting": "Mappák címkékké alakítása",
|
||||
"folders_to_tags.description": "Címkék automatikus létrehozása a létező mappastruktúra alapján.\nAz alábbi mappafán megtekintheti a létrehozandó címkéket, és hogy mely elemekre lesznek alkalmazva.",
|
||||
"folders_to_tags.open_all": "Az összes &kibontása",
|
||||
"folders_to_tags.title": "Címkék létrehozása mappák alapján",
|
||||
"generic.add": "Hozzáadás",
|
||||
"generic.apply": "Alkalmaz",
|
||||
"generic.apply_alt": "&Alkalmaz",
|
||||
"generic.cancel": "Mégse",
|
||||
"generic.cancel_alt": "Mégse",
|
||||
"generic.close": "Bezárás",
|
||||
"generic.continue": "Folytatás",
|
||||
"generic.copy": "Másolás",
|
||||
"generic.cut": "Kivágás",
|
||||
"generic.delete": "Törlés",
|
||||
"generic.delete_alt": "&Törlés",
|
||||
"generic.done": "Kész",
|
||||
"generic.done_alt": "Kész",
|
||||
"generic.edit": "Szerkesztés",
|
||||
"generic.edit_alt": "S&zerkesztés",
|
||||
"generic.filename": "Fájlnév",
|
||||
"generic.navigation.back": "Vissza",
|
||||
"generic.navigation.next": "Tovább",
|
||||
"generic.none": "Nincs",
|
||||
"generic.overwrite": "Felülírás",
|
||||
"generic.overwrite_alt": "&Felülírás",
|
||||
"generic.paste": "Beillesztés",
|
||||
"generic.recent_libraries": "Legutóbbi könyvtárak",
|
||||
"generic.rename": "Átnevezés",
|
||||
"generic.rename_alt": "&Átnevezés",
|
||||
"generic.reset": "Alaphelyzet",
|
||||
"generic.save": "Mentés",
|
||||
"generic.skip": "Kihagyás",
|
||||
"generic.skip_alt": "&Kihagyás",
|
||||
"help.visit_github": "&GitHub-adattár megnyitása",
|
||||
"home.search": "Keresés",
|
||||
"home.search_entries": "Tételek keresése",
|
||||
"home.search_library": "Keresés a könyvtárban",
|
||||
"home.search_tags": "Címkék keresése",
|
||||
"home.thumbnail_size": "Miniatűrök mérete",
|
||||
"home.thumbnail_size.extra_large": "Extra nagy miniatűrök",
|
||||
"home.thumbnail_size.large": "Nagy miniatűrök",
|
||||
"home.thumbnail_size.medium": "Közepes miniatűrök",
|
||||
"home.thumbnail_size.mini": "Pici miniatűrök",
|
||||
"home.thumbnail_size.small": "Kicsi miniatűrök",
|
||||
"ignore_list.add_extension": "&Kiterjesztés hozzáadása",
|
||||
"ignore_list.mode.exclude": "Elrejtés",
|
||||
"ignore_list.mode.include": "Mutatás",
|
||||
"ignore_list.mode.label": "Listázott elemek módja:",
|
||||
"ignore_list.title": "Kiterjesztések",
|
||||
"json_migration.checking_for_parity": "Paritás ellenőrzése folyamatban…",
|
||||
"json_migration.creating_database_tables": "SQL-adatbázis táblázatainak létrehozása folyamatban…",
|
||||
"json_migration.description": "<br>A könyvtárátalakítási folyamat megkezdése és az eredmény előnézete. Az új könyvtár az „Átalakítás befejezése” gomb megnyomásáig <i>nem</i> lesz használatba véve.<br><br>A könyvtár adatai változatlanok maradnak vagy egy „Egységesítve” címkével lesznek felruházva. A nem egyező adatok vörösen lesznek megjelenítve és egy „<b>(!)</b>” szimbólummal lesznek ellátva.<br><center></i>Ez a folyamat nagyobb könyvtárak esetén akár több percig is eltarthat.</i><center>",
|
||||
"json_migration.discrepancies_found": "Eltérő könyvtáradatok",
|
||||
"json_migration.discrepancies_found.description": "Eltéréseket észleltünk az eredeti és az átalakított könyvtár adataiban. Döntse el, hogy szeretné-e folytatni a folyamatot!",
|
||||
"json_migration.finish_migration": "Átalakítás befejezése",
|
||||
"json_migration.heading.aliases": "Áljelek:",
|
||||
"json_migration.heading.colors": "Színek:",
|
||||
"json_migration.heading.differ": "Eltérés",
|
||||
"json_migration.heading.entires": "Elemek:",
|
||||
"json_migration.heading.extension_list_type": "Kiterjesztési lista típusa:",
|
||||
"json_migration.heading.fields": "Mezők:",
|
||||
"json_migration.heading.file_extension_list": "Fájlkiterjesztési lista:",
|
||||
"json_migration.heading.match": "Egységesítve",
|
||||
"json_migration.heading.names": "Nevek:",
|
||||
"json_migration.heading.parent_tags": "Szülőcímkék:",
|
||||
"json_migration.heading.paths": "Elérési utak:",
|
||||
"json_migration.heading.shorthands": "Rövidítések:",
|
||||
"json_migration.heading.tags": "Címkék:",
|
||||
"json_migration.info.description": "A TagStudio <b>9.4 és korábbi</b> verzióival készült könyvtárakat át kell alakítani a program <b>9.5</b> és afölötti verzióval kompatibilis formátummá.<br><h2>Tudnivalók:</h2><ul><li>Az Ön létező könyvtára <b><i>NEM</i></b> lesz törölve.</li><li>Az Ön személyes fájljait <b><i>NEM</i></b> fogjuk törölni, áthelyezni vagy módosítani.</li><li>Az új formátumot a TagStudio korábbi verzióiban nem lehet megnyitni.</li></ul><h3>Változások:</h3><ul><li>A „címkemezők” „címkekategórákra” lettek kicserélve. A címkék mezőkbe való rendezése helyett mostantól közvetlenül a könyvtárelemekhez lesznek hozzárendelve. Ezután automatikusan kategórákba lesznek rendezve a Kategória-tulajdonsággal felruházott szülőcímkék alá. Bármely címke lehet szülőkategória és a gyermekkategóriák alá lesznek rendelve. Létrehoztunk egy új kategóriát Metacímkék néven, ami alatt az alapértelmezett Kedvenc- és Archivált-címkék szerepelnek.</li><li>A címkeszíneket egy kicsit átrendeztük és bővítettük a kínálatot. Vannak bizonyos színek, amelyeket átneveztünk vagy egybeolvasztottunk, de a program 9.5-ös verziójában minden ilyen átalakított szín legalább hasonlóan fog kinézni a korábbiakhoz képest.</li></ul><ul>",
|
||||
"json_migration.migrating_files_entries": "{entries:,d} elem átalakítása folyamatban…",
|
||||
"json_migration.migration_complete": "Az átalakítási folyamat sikeresen befejeződött!",
|
||||
"json_migration.migration_complete_with_discrepancies": "Az átalakítási folyamat befejeződött; eltéréseket találtunk",
|
||||
"json_migration.start_and_preview": "Folyamat indítása és előnézet",
|
||||
"json_migration.title": "Formátumátalakítás: „{path}”",
|
||||
"json_migration.title.new_lib": "<h2>9.5 és afölötti könyvtár</h2>",
|
||||
"json_migration.title.old_lib": "<h2>9.4-es könyvtár</h2>",
|
||||
"landing.open_create_library": "Könyvtár megnyitása/létrehozása {shortcut}",
|
||||
"library.field.add": "Új mező",
|
||||
"library.field.confirm_remove": "Biztosan el akarja távolítani a(z) „{name}”-mezőt?",
|
||||
"library.field.mixed_data": "Kevert adatok",
|
||||
"library.field.remove": "Mező eltávolítása",
|
||||
"library.missing": "Hiányzó hely",
|
||||
"library.name": "Könyvtár",
|
||||
"library.refresh.scanning.plural": "Új fájlok keresése a mappákban…\n{searched_count} fájl megvizsgálva; ebből {found_count} új fájl",
|
||||
"library.refresh.scanning.singular": "Új fájlok keresése a mappákban…\n{searched_count} fájl megvizsgálva; ebből {found_count} új fájl",
|
||||
"library.refresh.scanning_preparing": "Új fájlok keresése a mappákban…\nElőkészítés…",
|
||||
"library.refresh.title": "Mappák frissítése",
|
||||
"library.scan_library.title": "Könyvtár vizsgálata",
|
||||
"library_object.name": "Megnevezés",
|
||||
"library_object.name_required": "Megnevezés (kötelező)",
|
||||
"library_object.slug": "Azonosító-helyőrző",
|
||||
"library_object.slug_required": "Azonosító-helyőrző (kötelező)",
|
||||
"macros.running.dialog.new_entries": "Korábban beállított makrók futtatása {total}/{count} új elemen…",
|
||||
"macros.running.dialog.title": "Makrók futtatása az új elemeken",
|
||||
"media_player.autoplay": "Automatikus lejátszás",
|
||||
"menu.delete_selected_files_ambiguous": "Fájl(ok) {trash_term} helyezése",
|
||||
"menu.delete_selected_files_plural": "Fájlok {trash_term} helyezése",
|
||||
"menu.delete_selected_files_singular": "Fájl {trash_term} helyezése",
|
||||
"menu.edit": "S&zerkesztés",
|
||||
"menu.edit.ignore_list": "Fájlok és mappák figyelmen kívül hagyása",
|
||||
"menu.edit.manage_file_extensions": "&Fájlkiterjesztések kezelése",
|
||||
"menu.edit.manage_tags": "Címkék ke&zelése",
|
||||
"menu.edit.new_tag": "Új &címke",
|
||||
"menu.file": "&Fájl",
|
||||
"menu.file.clear_recent_libraries": "Legutóbbi könyvtárak listájának törlése",
|
||||
"menu.file.close_library": "Könyvtár &bezárása",
|
||||
"menu.file.new_library": "Új könyvtár",
|
||||
"menu.file.open_create_library": "Könyvtár meg&nyitása/létrehozása",
|
||||
"menu.file.open_library": "Könyvtár megnyitása",
|
||||
"menu.file.open_recent_library": "Legutóbbi könyvtárak",
|
||||
"menu.file.refresh_directories": "Mappák &frissítése",
|
||||
"menu.file.save_backup": "Biztonsági m&entés létrehozása",
|
||||
"menu.file.save_library": "Könyvtár &mentése",
|
||||
"menu.help": "&Súgó",
|
||||
"menu.help.about": "Névjegy",
|
||||
"menu.macros": "&Makrók",
|
||||
"menu.macros.folders_to_tags": "Mappák &címkékké alakítása",
|
||||
"menu.select": "Kijelölés",
|
||||
"menu.settings": "Beállítások…",
|
||||
"menu.tools": "&Eszközök",
|
||||
"menu.tools.fix_duplicate_files": "&Egyező fájlok egyesítése",
|
||||
"menu.tools.fix_unlinked_entries": "Kapcsolat &nélküli elemek javítása",
|
||||
"menu.view": "&Nézet",
|
||||
"menu.window": "&Ablak",
|
||||
"namespace.create.description": "A TagStudio névterekkel különíti el az adatcsoportokat, mint a címkék és a színek, így azok könnyen exportálhatóak és megoszthatóak. A „tagstudio”-val kezdődő névterek belső használatra vannak lefoglalva.",
|
||||
"namespace.create.description_color": "Minden szín névterekbe van foglalva, amelyek színpalettaként viselkednek. Minden egyéni színt névtérbe kell foglalni.",
|
||||
"namespace.create.title": "Névtér létrehozása",
|
||||
"namespace.new.button": "Új névtér",
|
||||
"namespace.new.prompt": "Az egyéni színek használatához először hozzon létre egy névteret!",
|
||||
"preview.multiple_selection": "<b>{count}</b> kijelölt elem",
|
||||
"preview.no_selection": "Nincs kijelölt elem",
|
||||
"select.add_tag_to_selected": "Címke hozzáadása a kijelölt elemekhez",
|
||||
"select.all": "&Az összes kijelölése",
|
||||
"select.clear": "&Kijelölés megszüntetése",
|
||||
"settings.clear_thumb_cache.title": "Miniatűr-gyorsítótár ürítése",
|
||||
"settings.language": "Nyelv",
|
||||
"settings.open_library_on_start": "Könyvtár megnyitása a program indulásakor",
|
||||
"settings.restart_required": "A módosítások érvénybeléptetéséhez újra kell indítani a TagStudiót.",
|
||||
"settings.show_filenames_in_grid": "Fájlnevek megjelenítése rácsnézetben",
|
||||
"settings.show_recent_libraries": "&Legutóbbi könyvtárak megjelenítése",
|
||||
"settings.title": "Beállítások",
|
||||
"sorting.direction.ascending": "Növekvő sorrend",
|
||||
"sorting.direction.descending": "Csökkenő sorrend",
|
||||
"splash.opening_library": "Könyvtár megnyitása folyamatban: „{library_path}”…",
|
||||
"status.deleted_file_plural": "{count} fájl törlése befejeződött.",
|
||||
"status.deleted_file_singular": "1 fájl törlése befejeződött.",
|
||||
"status.deleted_none": "Egy fájl sem került törlésre.",
|
||||
"status.deleted_partial_warning": "Csak {count} fájl került törlésre. Lehetséges, hogy a többi fájl hiányzik vagy használatban van.",
|
||||
"status.deleting_file": "{count}/{i}. fájl törlése folyamatban: „{path}”…",
|
||||
"status.library_backup_in_progress": "Könyvtár biztonsági mentése folyamatban…",
|
||||
"status.library_backup_success": "A biztonsági mentés létrehozása megtörtént az alábbi elérési úton: „{path}” ({time_span})",
|
||||
"status.library_closed": "Könyvtár bezárása ({time_span}) sikeresen megtörtént.",
|
||||
"status.library_closing": "Könyvtár bezárása folyamatban…",
|
||||
"status.library_save_success": "A könyvtár mentése és bezárása sikeresen megtörtént.",
|
||||
"status.library_search_query": "Keresés folyamatban…",
|
||||
"status.library_version_expected": "Várt érték:",
|
||||
"status.library_version_found": "Tényleges érték:",
|
||||
"status.library_version_mismatch": "A könyvtár és a program verziója nem egyezik.",
|
||||
"status.results": "találat",
|
||||
"status.results.invalid_syntax": "Szintaktikai hiba:",
|
||||
"status.results_found": "{count} találat ({time_span})",
|
||||
"tag.add": "Címke hozzáadása",
|
||||
"tag.add.plural": "Címkék hozzáadása",
|
||||
"tag.add_to_search": "Keresési kifejezés kiegészítése",
|
||||
"tag.aliases": "Áljelek",
|
||||
"tag.all_tags": "Minden címke",
|
||||
"tag.choose_color": "Címkeszín",
|
||||
"tag.color": "Szín",
|
||||
"tag.confirm_delete": "Biztosan törölni akarja a(z) „{tag_name}” címkét?",
|
||||
"tag.create": "Címke létrehozása",
|
||||
"tag.create_add": "„{query}”-címke létrehozása és alkalmazása",
|
||||
"tag.disambiguation.tooltip": "Címke használata egyértelműsítéshez",
|
||||
"tag.edit": "Címke szerkesztése",
|
||||
"tag.is_category": "Kategória",
|
||||
"tag.name": "Név",
|
||||
"tag.new": "Új címke",
|
||||
"tag.parent_tags": "Szülőcímkék",
|
||||
"tag.parent_tags.add": "Új szülőcímke",
|
||||
"tag.parent_tags.description": "Ez a címke képes helyettesíteni bármely alábbi szülőcímkét kereséskor.",
|
||||
"tag.remove": "Címke eltávolítása",
|
||||
"tag.search_for_tag": "Címke keresése",
|
||||
"tag.shorthand": "Rövidítés",
|
||||
"tag.tag_name_required": "Címkenév (kötelező)",
|
||||
"tag.view_limit": "Megtekintési korlát:",
|
||||
"tag_manager.title": "Könyvtárcímkék",
|
||||
"trash.context.ambiguous": "Fájl(ok) {trash_term} helyezése",
|
||||
"trash.context.plural": "Fájlok {trash_term} helyezése",
|
||||
"trash.context.singular": "Fájl {trash_term} helyezése",
|
||||
"trash.dialog.disambiguation_warning.plural": "Ezzel a fájlok nem csak a TagStudióból, hanem a fájlrendszerből <i>is</i> el lesznek távolítva!",
|
||||
"trash.dialog.disambiguation_warning.singular": "Ezzel a fájl nem csak a TagStudióból, hanem a fájlrendszerből <i>is</i> el lesz távolítva!",
|
||||
"trash.dialog.move.confirmation.plural": "Biztosan a {trash_term} akarod helyezni ezt a(z) {count} elemet?",
|
||||
"trash.dialog.move.confirmation.singular": "Biztosan a {trash_term} akarod helyezni ezt az elemet?",
|
||||
"trash.dialog.permanent_delete_warning": "<b>FIGYELMEZTETÉS:</b> Ha a fájlt nem lehet a {trash_term} helyezni, akkor <b>véglegesen <b>törlésre kerül!</b>",
|
||||
"trash.dialog.title.plural": "Fájlok törlése",
|
||||
"trash.dialog.title.singular": "Fájl törlése",
|
||||
"trash.name.generic": "Kukába",
|
||||
"trash.name.windows": "Lomtárba",
|
||||
"view.size.0": "Apró",
|
||||
"view.size.1": "Kicsi",
|
||||
"view.size.2": "Közepes",
|
||||
"view.size.3": "Nagy",
|
||||
"view.size.4": "Extra nagy",
|
||||
"window.message.error_opening_library": "Hiba történt a könyvtár megnyitása közben.",
|
||||
"window.title.error": "Hiba",
|
||||
"window.title.open_create_library": "Könyvtár megnyitása/létrehozása"
|
||||
}
|
||||
@@ -1,13 +0,0 @@
|
||||
{
|
||||
"generic.add": "Aggiungi",
|
||||
"generic.cancel": "Annulla",
|
||||
"generic.delete": "Elimina",
|
||||
"generic.recent_libraries": "Librerias Recenti",
|
||||
"home.search": "Cerca",
|
||||
"menu.file": "File",
|
||||
"menu.window": "Finestra",
|
||||
"tag.add": "Aggiungi Tag",
|
||||
"tag.color": "Colore",
|
||||
"tag.name": "Nome",
|
||||
"tag.new": "Nuovo Tag"
|
||||
}
|
||||
@@ -1,67 +0,0 @@
|
||||
{
|
||||
"entries.duplicate.merge.label": "Fletter duplikatoppføringer …",
|
||||
"entries.mirror": "Speil",
|
||||
"entries.tags": "Etiketter",
|
||||
"entries.unlinked.delete.confirm": "Slett følgende {count} oppføringer?",
|
||||
"entries.unlinked.delete.deleting": "Sletting av oppføringer",
|
||||
"entries.unlinked.delete.deleting_count": "Sletter {idx}/{count} ulenkede oppføringer",
|
||||
"entries.unlinked.refresh_all": "Gjenoppfrisk alle",
|
||||
"entries.unlinked.scanning": "Skanner bibliotek for ulenkede oppføringer …",
|
||||
"entries.unlinked.title": "Fiks ulenkede oppføringer",
|
||||
"file.date_created": "Dato opprettet",
|
||||
"file.date_modified": "Endringsdato",
|
||||
"file.dimensions": "Dimensjoner",
|
||||
"file.duplicates.dupeguru.file_extension": "DupeGuru-filer (*.dupeguru)",
|
||||
"file.duplicates.dupeguru.load_file": "Last inn DupeGuru-fil",
|
||||
"file.duplicates.dupeguru.no_file": "Ingen DupeGuru-fil valgt",
|
||||
"file.duplicates.dupeguru.open_file": "Åpne DupeGuru-resultatfil",
|
||||
"file.duplicates.fix": "Fiks duplikatfiler",
|
||||
"file.duplicates.mirror_entries": "Speil oppføringer",
|
||||
"file.not_found": "Fant ikke filen:",
|
||||
"file.open_file": "Åpne fil",
|
||||
"file.open_location.generic": "Åpne fil i utforsker",
|
||||
"folders_to_tags.converting": "Konverterer mapper til etiketter",
|
||||
"folders_to_tags.open_all": "Åpne alle",
|
||||
"folders_to_tags.title": "Opprett etiketter fra mapper",
|
||||
"generic.add": "Legg til",
|
||||
"generic.apply": "Bruk",
|
||||
"generic.cancel": "Avbryt",
|
||||
"generic.delete": "Slett",
|
||||
"generic.done": "Ferdig",
|
||||
"generic.edit": "Rediger",
|
||||
"generic.recent_libraries": "Nylige bibliotek",
|
||||
"home.search": "Søk",
|
||||
"home.search_entries": "Søk etter oppføringer",
|
||||
"home.search_tags": "Søk etter etiketter",
|
||||
"home.thumbnail_size": "Miniatyrbildestørrelse",
|
||||
"ignore_list.add_extension": "Legg til utvidelse",
|
||||
"ignore_list.mode.exclude": "Utelat",
|
||||
"ignore_list.mode.include": "Inkluder",
|
||||
"ignore_list.mode.label": "Listemodus:",
|
||||
"ignore_list.title": "Filutvidelse",
|
||||
"library.field.add": "Legg til felt",
|
||||
"library.field.confirm_remove": "Fjern dette «\"{name}\"»-feltet?",
|
||||
"library.field.mixed_data": "Blandet data",
|
||||
"library.field.remove": "Fjern felt",
|
||||
"library.missing": "Posisjon mangler",
|
||||
"library.name": "Bibliotek",
|
||||
"library.scan_library.title": "Skanning av bibliotek",
|
||||
"menu.edit": "Rediger",
|
||||
"menu.file": "Fil",
|
||||
"menu.help": "Hjelp",
|
||||
"menu.macros": "Makroer",
|
||||
"menu.tools": "Verktøy",
|
||||
"menu.window": "Vindu",
|
||||
"preview.no_selection": "Ingen elementer valgt",
|
||||
"status.library_backup_success": "Kopi av bibliotek lagret i: \"{path}\" ({time_span})",
|
||||
"status.library_save_success": "Bibliotek lagret og lukket.",
|
||||
"status.library_search_query": "Søker i biblioteket etter",
|
||||
"status.results": "Resultat",
|
||||
"tag.add": "Legg til etikett",
|
||||
"tag.add_to_search": "Legg til søk",
|
||||
"tag.color": "Farge",
|
||||
"tag.name": "Navn",
|
||||
"tag.new": "Ny etikett",
|
||||
"tag.search_for_tag": "Søk etter etikett",
|
||||
"tag_manager.title": "Biblioteksetiketter"
|
||||
}
|
||||
@@ -1,106 +0,0 @@
|
||||
{
|
||||
"color.title.no_color": "Geen Kleur",
|
||||
"drop_import.progress.label.initial": "Nieuwe bestanden importeren…",
|
||||
"drop_import.progress.label.plural": "Nieuwe bestanden importeren…\n{count} bestanden geïmporteerd.{suffix}",
|
||||
"drop_import.progress.label.singular": "Nieuwe bestanden importeren…\n1 bestand geïmporteerd.{suffix}",
|
||||
"drop_import.progress.window_title": "Importeer bestanden",
|
||||
"edit.copy_fields": "Velden Kopiëren",
|
||||
"edit.paste_fields": "Velden Plakken",
|
||||
"edit.tag_manager": "Beheer Labels",
|
||||
"entries.tags": "Labels",
|
||||
"field.copy": "Veld Kopiëren",
|
||||
"field.edit": "Veld Aanpassen",
|
||||
"field.paste": "Veld Plakken",
|
||||
"file.date_added": "Datum Toegevoegd",
|
||||
"file.date_created": "Datum Aangemaakt",
|
||||
"file.date_modified": "Datum Aangepast",
|
||||
"file.dimensions": "Dimensies",
|
||||
"file.duration": "Speelduur",
|
||||
"file.not_found": "Bestand Niet Gevonden",
|
||||
"file.open_file": "Bestand openen",
|
||||
"file.open_file_with": "Bestand openen met",
|
||||
"folders_to_tags.close_all": "Alles sluiten",
|
||||
"folders_to_tags.open_all": "Alles openen",
|
||||
"generic.add": "Toevoegen",
|
||||
"generic.apply": "Toepassen",
|
||||
"generic.apply_alt": "&Toepassen",
|
||||
"generic.cancel": "Annuleren",
|
||||
"generic.cancel_alt": "&Annuleren",
|
||||
"generic.close": "Sluiten",
|
||||
"generic.continue": "Doorgaan",
|
||||
"generic.copy": "Kopiëren",
|
||||
"generic.cut": "Knippen",
|
||||
"generic.delete": "Verwijderen",
|
||||
"generic.delete_alt": "&Verwijderen",
|
||||
"generic.done": "Klaar",
|
||||
"generic.done_alt": "&klaar",
|
||||
"generic.edit": "Aanpassen",
|
||||
"generic.edit_alt": "&Aanpassen",
|
||||
"generic.filename": "Bestandsnaam",
|
||||
"generic.navigation.back": "Terug",
|
||||
"generic.navigation.next": "Volgende",
|
||||
"generic.none": "Niks",
|
||||
"generic.overwrite": "Overschrijven",
|
||||
"generic.overwrite_alt": "&Overschrijven",
|
||||
"generic.paste": "Plakken",
|
||||
"generic.rename": "Hernoemen",
|
||||
"generic.rename_alt": "&Hernoemen",
|
||||
"generic.save": "Opslaan",
|
||||
"generic.skip": "Overslaan",
|
||||
"generic.skip_alt": "&Overslaan",
|
||||
"home.search": "Zoeken",
|
||||
"home.search_tags": "Labels Zoeken",
|
||||
"home.thumbnail_size": "Miniatuur Grootte",
|
||||
"home.thumbnail_size.extra_large": "Extra Grote Miniaturen",
|
||||
"home.thumbnail_size.large": "Grote Miniaturen",
|
||||
"home.thumbnail_size.medium": "Gemiddelde Minituren",
|
||||
"home.thumbnail_size.mini": "Mini Miniaturen",
|
||||
"home.thumbnail_size.small": "Kleine Miniaturen",
|
||||
"ignore_list.mode.exclude": "Uitsluiten",
|
||||
"json_migration.finish_migration": "Migratie Afronden",
|
||||
"json_migration.heading.aliases": "Aliassen:",
|
||||
"json_migration.heading.colors": "Kleuren:",
|
||||
"json_migration.heading.fields": "Velden:",
|
||||
"json_migration.heading.names": "Namen:",
|
||||
"json_migration.heading.paths": "Paden:",
|
||||
"json_migration.heading.shorthands": "Afkortingen:",
|
||||
"json_migration.heading.tags": "Labels:",
|
||||
"json_migration.migration_complete": "Migratie Afgerond!",
|
||||
"json_migration.title": "Migratie Formaat Opslaan: \"{path}\"",
|
||||
"library.field.add": "Veld Toevoegen",
|
||||
"library.field.mixed_data": "Gemixte Data",
|
||||
"library.field.remove": "Veld Verwijderen",
|
||||
"menu.delete_selected_files_ambiguous": "Bestand(en) verplaatsen naar {trash_term}",
|
||||
"menu.delete_selected_files_plural": "Bestanden verplaatsen naar {trash_term}",
|
||||
"menu.delete_selected_files_singular": "Bestand verplaatsen naar {trash_term}",
|
||||
"menu.edit": "Aanpassen",
|
||||
"menu.edit.ignore_list": "Bestanden en Mappen Negeren",
|
||||
"menu.edit.manage_tags": "Labels Beheren",
|
||||
"menu.edit.new_tag": "Nieuw &Label",
|
||||
"menu.file": "&Bestand",
|
||||
"menu.help": "&Help",
|
||||
"menu.macros.folders_to_tags": "Mappen naar Labels",
|
||||
"menu.select": "Selecteren",
|
||||
"menu.window": "Venster",
|
||||
"select.all": "Alles Selecteren",
|
||||
"sorting.direction.ascending": "Oplopend",
|
||||
"sorting.direction.descending": "Aflopend",
|
||||
"status.deleted_file_plural": "{count} Bestanden Verwijderd!",
|
||||
"status.deleted_file_singular": "1 Bestand Verwijderd!",
|
||||
"status.deleted_none": "Geen bestanden verwijderd.",
|
||||
"status.deleting_file": "Bestand [{i}/{count}] verwijderen: \"{path}\"…",
|
||||
"status.library_version_found": "Gevonden:",
|
||||
"status.results": "Resultaten",
|
||||
"tag.add": "Label toevoegen",
|
||||
"tag.add.plural": "Labels toevoegen",
|
||||
"tag.aliases": "Aliassen",
|
||||
"tag.all_tags": "Alle Labels",
|
||||
"tag.choose_color": "Kies Label Kleur",
|
||||
"tag.color": "Kleur",
|
||||
"tag.edit": "Label Aanpassen",
|
||||
"tag.name": "Naam",
|
||||
"tag.new": "Nieuw Label",
|
||||
"tag.remove": "Verwijder Label",
|
||||
"trash.dialog.title.plural": "Bestanden Verwijderen",
|
||||
"trash.dialog.title.singular": "Bestand Verwijden"
|
||||
}
|
||||
@@ -1,284 +0,0 @@
|
||||
{
|
||||
"about.title": "O programie",
|
||||
"app.git": "Migawka Git",
|
||||
"app.pre_release": "Przedpremiera",
|
||||
"app.title": "{base_title} - Biblioteka '{library_dir}'",
|
||||
"color.color_border": "Użyj koloru pochodnego na ramkę",
|
||||
"color.confirm_delete": "Czy na pewno chcesz usunąć kolor \"{color_name}\"?",
|
||||
"color.delete": "Usuń tag",
|
||||
"color.import_pack": "Importuj paczkę kolorów",
|
||||
"color.name": "Nazwa",
|
||||
"color.namespace.delete.prompt": "Czy na pewno chcesz usunąć tę przestrzeń kolorów? Zostaną usunięte WSZYSTKIE kolory w przestrzeni!",
|
||||
"color.namespace.delete.title": "Usuń przestrzeń kolorów",
|
||||
"color.new": "Nowy kolor",
|
||||
"color.placeholder": "Kolor",
|
||||
"color.primary": "Kolor podstawowy",
|
||||
"color.primary_required": "Kolor podstawowy (wymagany)",
|
||||
"color.secondary": "Kolor pochodny",
|
||||
"color.title.no_color": "Brak koloru",
|
||||
"color_manager.title": "Zarządzaj kolorami tagów",
|
||||
"drop_import.description": "Następujące pliki pasują ścieżkami do już istniejących w bibliotece",
|
||||
"drop_import.duplicates_choice.plural": "Następujące {count} pliki pasują ścieżkami do już istniejących w bibliotece.",
|
||||
"drop_import.duplicates_choice.singular": "Następujący plik pasuje ścieżką do już istniejącego w bibliotece.",
|
||||
"drop_import.progress.label.initial": "Importowanie nowych plików...",
|
||||
"drop_import.progress.label.plural": "Importowanie nowych plików...\nZaimportowano {count} plików.{suffix}",
|
||||
"drop_import.progress.label.singular": "Importowanie nowych plików...\nZaimportowano 1 plik.{suffix}",
|
||||
"drop_import.progress.window_title": "Importuj pliki",
|
||||
"drop_import.title": "Konfliktujące pliki",
|
||||
"edit.color_manager": "Zarządzaj kolorami tagów",
|
||||
"edit.copy_fields": "Skopiuj pola",
|
||||
"edit.paste_fields": "Wklej pola",
|
||||
"edit.tag_manager": "Zarządzaj tagami",
|
||||
"entries.duplicate.merge": "Złącz zduplikowane wpisy",
|
||||
"entries.duplicate.merge.label": "Łączenie zduplikowanych wpisów...",
|
||||
"entries.duplicate.refresh": "Odśwież zduplikowane wpisy",
|
||||
"entries.duplicates.description": "Zduplikowane wpisy są zdefiniowane jako wielokrotne wpisy które wskazują na ten sam plik na dysku. Złączenie ich złączy tagi i metadane ze wszystkich duplikatów w jeden wpis. Nie mylić tego ze \"zduplikowanymi plikami\" które są duplikatami samych plików poza TagStudio.",
|
||||
"entries.mirror": "&Odzwierciedl",
|
||||
"entries.mirror.confirmation": "Jesteś pewien że chcesz odzwierciedlić następujące {count} wpisy?",
|
||||
"entries.mirror.label": "Odzwierciedlanie {idx}/{total} wpisów...",
|
||||
"entries.mirror.title": "Odzwierciedlanie wpisów",
|
||||
"entries.mirror.window_title": "Odzwierciedl wpisy",
|
||||
"entries.running.dialog.new_entries": "Dodawanie {total} nowych wpisów plików...",
|
||||
"entries.running.dialog.title": "Dodawanie nowych wpisów plików",
|
||||
"entries.tags": "Tagi",
|
||||
"entries.unlinked.delete": "Usuń odłączone wpisy",
|
||||
"entries.unlinked.delete.confirm": "Jesteś pewien że chcesz usunąć następujące {count} wpisy?",
|
||||
"entries.unlinked.delete.deleting": "Usuwanie wpisów",
|
||||
"entries.unlinked.delete.deleting_count": "Usuwanie {idx}/{count} odłączonych wpisów",
|
||||
"entries.unlinked.delete_alt": "Usuń odłączone wpisy",
|
||||
"entries.unlinked.description": "Każdy wpis w bibliotece jest połączony z plikiem w jednym z twoich katalogów. Jeśli połączony plik jest przeniesiony poza TagStudio albo usunięty to jest uważany za odłączony.<br><br>Odłączone wpisy mogą być automatycznie połączone ponownie przez szukanie twoich katalogów, ręczne ponowne łączenie przez użytkownika lub usunięte jeśli zajdzie taka potrzeba.",
|
||||
"entries.unlinked.missing_count.none": "Odłączone wpisy: brak",
|
||||
"entries.unlinked.missing_count.some": "Odłączone wpisy: {count}",
|
||||
"entries.unlinked.refresh_all": "&Odśwież wszystko",
|
||||
"entries.unlinked.relink.attempting": "Próbowanie ponownego łączenia {idx}/{missing_count} wpisów, {fixed_count} poprawnie połączono ponownie",
|
||||
"entries.unlinked.relink.manual": "&Ręczne ponowne łączenie",
|
||||
"entries.unlinked.relink.title": "Ponowne łączenie wpisów",
|
||||
"entries.unlinked.scanning": "Skanowanie biblioteki dla odłączonych wpisów...",
|
||||
"entries.unlinked.search_and_relink": "&Wyszukaj && Zalinkuj ponownie",
|
||||
"entries.unlinked.title": "Napraw odłączone wpisy",
|
||||
"field.copy": "Skopiuj pole",
|
||||
"field.edit": "Edytuj pole",
|
||||
"field.paste": "Wklej pole",
|
||||
"file.date_added": "Data dodania",
|
||||
"file.date_created": "Data utworzenia",
|
||||
"file.date_modified": "Data modyfikacji",
|
||||
"file.dimensions": "Wymiary",
|
||||
"file.duplicates.description": "TagStudio umożliwia importowanie wyników DupeGuru do zarządzania zduplikowanych plików.",
|
||||
"file.duplicates.dupeguru.advice": "Po odzwierciedlaniu możesz użyć DupeGuru żeby usunąć niechciane pliki. Później użyj funkcji TagStudio \"Napraw odłączone wpisy\" w menu narzędzi w celu usunięcia odłączonych wpisów.",
|
||||
"file.duplicates.dupeguru.file_extension": "Pliki DupeGuru (*.dupeguru)",
|
||||
"file.duplicates.dupeguru.load_file": "&Wczytaj plik DupeGuru",
|
||||
"file.duplicates.dupeguru.no_file": "Nie wybrano pliku DupeGuru",
|
||||
"file.duplicates.dupeguru.open_file": "Otwórz plik wyników DupeGuru",
|
||||
"file.duplicates.fix": "Napraw zduplikowane pliki",
|
||||
"file.duplicates.matches": "Dopasowania zduplikowanych plików: {count}",
|
||||
"file.duplicates.matches_uninitialized": "Dopasowania zduplikowanych plików: Brak",
|
||||
"file.duplicates.mirror.description": "Odzwierciedla dane wpisu w każdym zduplikowanym zestawie, łącząc wszystkie dane nie usuwając i nie duplikując pól. Ta operacja nie usunie żadnych plików ani danych.",
|
||||
"file.duplicates.mirror_entries": "&Odzwierciedl wpisy",
|
||||
"file.duration": "Czas trwania",
|
||||
"file.not_found": "Nie znaleziono pliku",
|
||||
"file.open_file": "Otwórz plik",
|
||||
"file.open_file_with": "Otwórz plik używając",
|
||||
"file.open_location.generic": "Pokaż plik w przeglądarce plików",
|
||||
"file.open_location.mac": "Pokaż plik w Finderze",
|
||||
"file.open_location.windows": "Pokaż plik w Eksploratorze plików",
|
||||
"folders_to_tags.close_all": "Zamknij wszystko",
|
||||
"folders_to_tags.converting": "Konwertowanie folderów na tagi",
|
||||
"folders_to_tags.description": "Tworzy tagi na podstawie struktury folderów i stosuje je do wpisów.\n Poniższa struktura przedstawia wszystkie utworzone tagi i wpisy, do których zostaną one zastosowane.",
|
||||
"folders_to_tags.open_all": "Otwórz wszystkie",
|
||||
"folders_to_tags.title": "Stwórz tagi z folderów",
|
||||
"generic.add": "Dodaj",
|
||||
"generic.apply": "Zastosuj",
|
||||
"generic.apply_alt": "&Zastosuj",
|
||||
"generic.cancel": "Anuluj",
|
||||
"generic.cancel_alt": "&Anuluj",
|
||||
"generic.close": "Zamknij",
|
||||
"generic.continue": "Kontynuuj",
|
||||
"generic.copy": "Kopiuj",
|
||||
"generic.cut": "Wytnij",
|
||||
"generic.delete": "Usuń",
|
||||
"generic.delete_alt": "&Usuń",
|
||||
"generic.done": "Zrobione",
|
||||
"generic.done_alt": "&Zrób",
|
||||
"generic.edit": "Edytuj",
|
||||
"generic.edit_alt": "&Edytuj",
|
||||
"generic.filename": "Nazwa pliku",
|
||||
"generic.navigation.back": "Wstecz",
|
||||
"generic.navigation.next": "Dalej",
|
||||
"generic.none": "Żaden",
|
||||
"generic.overwrite": "Nadpisz",
|
||||
"generic.overwrite_alt": "&Nadpisz",
|
||||
"generic.paste": "Wklej",
|
||||
"generic.recent_libraries": "Ostatnie biblioteki",
|
||||
"generic.rename": "Zmień nazwę",
|
||||
"generic.rename_alt": "&Zmień nazwę",
|
||||
"generic.reset": "Resetuj",
|
||||
"generic.save": "Zapisz",
|
||||
"generic.skip": "Pomiń",
|
||||
"generic.skip_alt": "&Pomiń",
|
||||
"help.visit_github": "Odwiedź repozytorium GitHub",
|
||||
"home.search": "Szukaj",
|
||||
"home.search_entries": "Przeszukaj wpisy",
|
||||
"home.search_library": "Przeszukaj bibliotekę",
|
||||
"home.search_tags": "Przeszukaj tagi",
|
||||
"home.thumbnail_size": "Rozmiar miniaturek",
|
||||
"home.thumbnail_size.extra_large": "Bardzo duże miniaturki",
|
||||
"home.thumbnail_size.large": "Duże miniaturki",
|
||||
"home.thumbnail_size.medium": "Średnie miniaturki",
|
||||
"home.thumbnail_size.mini": "Mini miniaturki",
|
||||
"home.thumbnail_size.small": "Małe miniaturki",
|
||||
"ignore_list.add_extension": "&Dodaj rozszerzenie",
|
||||
"ignore_list.mode.exclude": "Wyklucz",
|
||||
"ignore_list.mode.include": "Uwzględnij",
|
||||
"ignore_list.mode.label": "Tryb listy:",
|
||||
"ignore_list.title": "Rozszerzenia pliku",
|
||||
"json_migration.checking_for_parity": "Sprawdzanie zgodności...",
|
||||
"json_migration.creating_database_tables": "Tworzenie tabelek bazy danych SQL...",
|
||||
"json_migration.discrepancies_found": "Znaleziono niezgodności biblioteki",
|
||||
"json_migration.discrepancies_found.description": "Znaleziono niezgodności pomiędzy oryginalną a skonwertowaną biblioteką. Proszę sprawdzić i wybrać czy chcesz kontynuować z migracją czy anulować.",
|
||||
"json_migration.finish_migration": "Ukończ migrację",
|
||||
"json_migration.heading.aliases": "Zastępcze nazwy:",
|
||||
"json_migration.heading.colors": "Kolory:",
|
||||
"json_migration.heading.differ": "Niezgodność",
|
||||
"json_migration.heading.entires": "Wpisy:",
|
||||
"json_migration.heading.extension_list_type": "Typ listy rozszerzeń:",
|
||||
"json_migration.heading.fields": "Pola:",
|
||||
"json_migration.heading.file_extension_list": "Lista rozszerzeń plików:",
|
||||
"json_migration.heading.match": "Dopasowane",
|
||||
"json_migration.heading.names": "Nazwy:",
|
||||
"json_migration.heading.parent_tags": "Tagi nadrzędne:",
|
||||
"json_migration.heading.paths": "Ścieżki:",
|
||||
"json_migration.heading.shorthands": "Skróty:",
|
||||
"json_migration.heading.tags": "Tagi:",
|
||||
"json_migration.migrating_files_entries": "Migrowanie {entries:,d} wpisów plików...",
|
||||
"json_migration.migration_complete": "Migrowanie skończone!",
|
||||
"json_migration.migration_complete_with_discrepancies": "Migrowanie skończone, znaleziono niezgodności",
|
||||
"json_migration.start_and_preview": "Zacznij i podglądnij",
|
||||
"json_migration.title": "Zapisz format migracji: \"{path}\"",
|
||||
"json_migration.title.new_lib": "<h2>Biblioteka v9.5+ </h2>",
|
||||
"json_migration.title.old_lib": "<h2>Biblioteka v9.4</h2>",
|
||||
"landing.open_create_library": "Otwórz/Stwórz bibliotekę {shortcut}",
|
||||
"library.field.add": "Dodaj pole",
|
||||
"library.field.confirm_remove": "Jesteś pewien że chcesz usunąć pole \"{name}\" ?",
|
||||
"library.field.mixed_data": "Mieszane dane",
|
||||
"library.field.remove": "Usuń pole",
|
||||
"library.missing": "Brak lokalizacji",
|
||||
"library.name": "Biblioteka",
|
||||
"library.refresh.scanning.plural": "Skanowanie folderów w poszukiwaniu nowych plików...\nPrzeszukano {searched_count} plików, Znaleziono {found_count} nowych plików",
|
||||
"library.refresh.scanning_preparing": "Skanowanie katalogów w poszukiwaniu nowych plików\nPrzygotowywanie...",
|
||||
"library.refresh.title": "Odświeżanie katalogów",
|
||||
"library.scan_library.title": "Skanowanie biblioteki",
|
||||
"library_object.name": "Nazwa",
|
||||
"library_object.name_required": "Nazwa (wymagana)",
|
||||
"macros.running.dialog.new_entries": "Stosowanie skonfigurowanych makr na {count}/{total} nowych wpisach plików...",
|
||||
"macros.running.dialog.title": "Stosowanie makr na nowych wpisach",
|
||||
"media_player.autoplay": "Automatyczne odtwarzanie",
|
||||
"menu.delete_selected_files_ambiguous": "Przenieś plik(i) do {trash_term}",
|
||||
"menu.delete_selected_files_plural": "Przenieś pliki do {trash_term}",
|
||||
"menu.delete_selected_files_singular": "Przenieś plik do {trash_term}",
|
||||
"menu.edit": "Edytuj",
|
||||
"menu.edit.ignore_list": "Ignoruj pliki i foldery",
|
||||
"menu.edit.manage_file_extensions": "Zarządzaj rozszerzeniami plików",
|
||||
"menu.edit.manage_tags": "Zarządzaj tagami",
|
||||
"menu.edit.new_tag": "Nowy &Tag",
|
||||
"menu.file": "&Plik",
|
||||
"menu.file.clear_recent_libraries": "Wyczyść ostatnie",
|
||||
"menu.file.close_library": "&Zamknij bibliotekę",
|
||||
"menu.file.new_library": "Nowa biblioteka",
|
||||
"menu.file.open_create_library": "&Otwórz/Stwórz bibliotekę",
|
||||
"menu.file.open_library": "Otwórz bibliotekę",
|
||||
"menu.file.open_recent_library": "Otwórz ostatnie",
|
||||
"menu.file.refresh_directories": "&Odśwież katalogi",
|
||||
"menu.file.save_backup": "&Zapisz kopię zapasową biblioteki",
|
||||
"menu.file.save_library": "Zapisz bibliotekę",
|
||||
"menu.help": "&Pomoc",
|
||||
"menu.help.about": "O programie",
|
||||
"menu.macros": "&Makra",
|
||||
"menu.macros.folders_to_tags": "Foldery na Tagi",
|
||||
"menu.select": "Zaznacz",
|
||||
"menu.settings": "Ustawienia...",
|
||||
"menu.tools": "&Narzędzia",
|
||||
"menu.tools.fix_duplicate_files": "Napraw zduplikowane &pliki",
|
||||
"menu.tools.fix_unlinked_entries": "Napraw &odłączone wpisy",
|
||||
"menu.view": "&Widok",
|
||||
"menu.window": "Okno",
|
||||
"namespace.create.description_color": "Kolory tagów używają przestrzeni jako grup palet. Wszystkie niestandardowe kolory muszą najpierw znajdować się w grupie przestrzeni.",
|
||||
"namespace.create.title": "Stwórz przestrzeń",
|
||||
"namespace.new.button": "Nowa przestrzeń",
|
||||
"namespace.new.prompt": "Stwórz nową przestrzeń żeby zacząć dodawać niestandardowe kolory!",
|
||||
"preview.multiple_selection": "<b>{count}</b> pozycji zaznaczonych",
|
||||
"preview.no_selection": "Nie wybrano żadnych pozycji",
|
||||
"select.add_tag_to_selected": "Dodaj tag do zaznaczonych",
|
||||
"select.all": "Zaznacz wszystko",
|
||||
"select.clear": "Odznacz zaznaczenie",
|
||||
"settings.clear_thumb_cache.title": "Wyczyść pamięć podręczną miniaturek",
|
||||
"settings.language": "Język",
|
||||
"settings.open_library_on_start": "Otwieraj bibliotekę podczas startu",
|
||||
"settings.restart_required": "Zrestartuj TagStudio żeby zmiany zaczęły obowiązywać.",
|
||||
"settings.show_filenames_in_grid": "Pokazuj nazwy plików w siatce",
|
||||
"settings.show_recent_libraries": "Pokazuj ostatnie biblioteki",
|
||||
"settings.title": "Ustawienia",
|
||||
"sorting.direction.ascending": "Rosnąco",
|
||||
"sorting.direction.descending": "Malejąco",
|
||||
"splash.opening_library": "Otwieranie biblioteki \"{library_path}\"...",
|
||||
"status.deleted_file_plural": "Usunięto {count} plików!",
|
||||
"status.deleted_file_singular": "Usunięto 1 plik!",
|
||||
"status.deleted_none": "Nie usunięto żadnych plików.",
|
||||
"status.deleted_partial_warning": "Usunięto tylko {count} plik(i/ów)! Sprawdź czy nie brakuje jakichś plików lub czy nie są obecnie w użyciu.",
|
||||
"status.deleting_file": "Usuwanie pliku [{i}/{count}]: \"{path}\"...",
|
||||
"status.library_backup_in_progress": "Zapisywanie kopii zapasowej biblioteki...",
|
||||
"status.library_backup_success": "Kopia zapasowa biblioteki zapisana w: \"{path}\" ({time_span})",
|
||||
"status.library_closed": "Biblioteka zamknięta ({time_span})",
|
||||
"status.library_closing": "Zamykanie biblioteki...",
|
||||
"status.library_save_success": "Biblioteka zapisana i zamknięta!",
|
||||
"status.library_search_query": "Przeszukiwanie biblioteki...",
|
||||
"status.library_version_expected": "Oczekiwano:",
|
||||
"status.library_version_found": "Znaleziono:",
|
||||
"status.library_version_mismatch": "Niezgodność wersji biblioteki!",
|
||||
"status.results": "Wyniki",
|
||||
"status.results.invalid_syntax": "Niepoprawna składnia zapytania:",
|
||||
"status.results_found": "Znaleziono {count} wyników ({time_span})",
|
||||
"tag.add": "Dodaj tag",
|
||||
"tag.add.plural": "Dodaj tagi",
|
||||
"tag.add_to_search": "Dodaj do wyszukiwania",
|
||||
"tag.aliases": "Aliasy",
|
||||
"tag.all_tags": "Wszystkie tagi",
|
||||
"tag.choose_color": "Wybierz kolor tagu",
|
||||
"tag.color": "Kolor",
|
||||
"tag.confirm_delete": "Jesteś pewien że chcesz usunąć tag \"{tag_name}\"?",
|
||||
"tag.create": "Stwórz tag",
|
||||
"tag.create_add": "Stwórz && dodaj \"{query}\"",
|
||||
"tag.disambiguation.tooltip": "Uzyj tego tagu dla uściślenia",
|
||||
"tag.edit": "Edytuj tag",
|
||||
"tag.is_category": "Jest kategorią",
|
||||
"tag.name": "Nazwa",
|
||||
"tag.new": "Nowy tag",
|
||||
"tag.parent_tags": "Tagi nadrzędne",
|
||||
"tag.parent_tags.add": "Dodaj tagi nadrzędne",
|
||||
"tag.parent_tags.description": "Ten tag może być traktowany w wyszukiwaniach jako zamiennik dla dowolnego z tych tagów nadrzędnych.",
|
||||
"tag.remove": "Usuń tag",
|
||||
"tag.search_for_tag": "Szukaj dla tagu",
|
||||
"tag.shorthand": "Skrót",
|
||||
"tag.tag_name_required": "Nazwa tagu (wymagana)",
|
||||
"tag.view_limit": "Limit wyświetlania:",
|
||||
"tag_manager.title": "Biblioteka tagów",
|
||||
"trash.context.ambiguous": "Przenieś plik(i) do {trash_term}",
|
||||
"trash.context.plural": "Przenieś pliki do {trash_term}",
|
||||
"trash.context.singular": "Przenieś plik do {trash_term}",
|
||||
"trash.dialog.disambiguation_warning.plural": "To usunie je z TagStudio <i>ORAZ</i> z twojego systemu plików!",
|
||||
"trash.dialog.disambiguation_warning.singular": "To usunie go z TagStudio <i>ORAZ</i> z twojego systemu plików!",
|
||||
"trash.dialog.move.confirmation.plural": "Czy na pewno chcesz przenieść te {count} plików do {trash_term}?",
|
||||
"trash.dialog.move.confirmation.singular": "Czy na pewno chcesz przenieść ten plik do {trash_term}?",
|
||||
"trash.dialog.permanent_delete_warning": "<b>WARNING!</b> Jeśli ten plik nie może być przeniesiony do {trash_term}, <b>Zostanie <b>usunięty na stałe!</b>",
|
||||
"trash.dialog.title.plural": "Usuń pliki",
|
||||
"trash.dialog.title.singular": "Usuń plik",
|
||||
"trash.name.generic": "Kosz",
|
||||
"trash.name.windows": "Kosz",
|
||||
"view.size.0": "Mini",
|
||||
"view.size.1": "Mały",
|
||||
"view.size.2": "Średni",
|
||||
"view.size.3": "Duży",
|
||||
"view.size.4": "Bardzo duży",
|
||||
"window.message.error_opening_library": "Błąd otwierania biblioteki.",
|
||||
"window.title.error": "Błąd",
|
||||
"window.title.open_create_library": "Otwórz/Stwórz bibliotekę"
|
||||
}
|
||||
@@ -1 +0,0 @@
|
||||
{}
|
||||
@@ -1,259 +0,0 @@
|
||||
{
|
||||
"about.content": "<p>TagStudio é uma aplicação de organização de fotos e arquivos com um sistema de tags que tem como foco conceder liberdade e flexibilidade ao usuário. Sem programas ou formatos proprietários, sem imensidão de arquivos Sidecar, e sem total transtorno de sua estrutura de sistema de arquivos.</p>Licença: GPLv3<br>Diretório de Configuração: {config_path}<br>FFmpeg: {ffmpeg}<br>FFprobe: {ffprobe}<p><a href=\"https://github.com/TagStudioDev/TagStudio\">GitHub</a> | <a href=\"https://docs.tagstud.io\">Documentação</a> | <a href=\"https://discord.com/invite/hRNnVKhF2G\">Discord</a></p>",
|
||||
"about.title": "Sobre",
|
||||
"app.git": "Confirmação do Git",
|
||||
"app.pre_release": "Pré-Lançamento",
|
||||
"app.title": "{base_title} - Biblioteca '{library_dir}'",
|
||||
"color.color_border": "Usar Cores Secundárias nas Bordas",
|
||||
"color.confirm_delete": "Tem certeza que você quer deletar a cor \"{color_name}\"?",
|
||||
"color.delete": "Deletar Tag",
|
||||
"color.import_pack": "Importar Pacote de Cores",
|
||||
"color.name": "Nome",
|
||||
"color.namespace.delete.prompt": "Tem certeza que você quer deletar o espaço de nome dessa cor? Isso irá deletar TODAS as cores do espaço de nome ao mesmo tempo!",
|
||||
"color.namespace.delete.title": "Deletar Espaço de Cor",
|
||||
"color.new": "Nova Cor",
|
||||
"color.placeholder": "Cor",
|
||||
"color.primary": "Cor Primária",
|
||||
"color.primary_required": "Cor Primária (Obrigatório)",
|
||||
"color.secondary": "Cor Secundária",
|
||||
"color.title.no_color": "Nenhuma Cor",
|
||||
"color_manager.title": "Gerenciar Cores das Tags",
|
||||
"drop_import.description": "Os seguintes arquivos correspondem a caminhos de arquivos que já existem na biblioteca",
|
||||
"drop_import.duplicates_choice.plural": "Os seguintes arquivos {count} correspondem a caminhos de arquivo que já existem na biblioteca.",
|
||||
"drop_import.duplicates_choice.singular": "O arquivo a seguir corresponde a um caminho de arquivo que já existe na biblioteca.",
|
||||
"drop_import.progress.label.initial": "Importando Novos Arquivos...",
|
||||
"drop_import.progress.label.plural": "Importando Novos Arquivos...\n{count} Arquivos Importados.{suffix}",
|
||||
"drop_import.progress.label.singular": "Importando Novos Arquivos...\n1 Arquivo Importado.{suffix}",
|
||||
"drop_import.progress.window_title": "Importar Arquivos",
|
||||
"drop_import.title": "Arquivo(s) em Conflito",
|
||||
"edit.color_manager": "Gerenciar Cores das Tags",
|
||||
"edit.copy_fields": "Copiar Campos",
|
||||
"edit.paste_fields": "Colar Campos",
|
||||
"edit.tag_manager": "Gerenciar Tags",
|
||||
"entries.duplicate.merge": "Mesclar Registros Duplicados",
|
||||
"entries.duplicate.merge.label": "Mesclando Itens Duplicados...",
|
||||
"entries.duplicate.refresh": "Atualizar Registros Duplicados",
|
||||
"entries.duplicates.description": "Registros duplicados são definidas como multiplos registros que levam ao mesmo arquivo no disco. Mesclar esses registros irá combinar as tags e metadados de todas as duplicatas em um único registro consolidado. Não confundir com \"Arquivos Duplicados\" que são duplicatas dos seus arquivos fora do TagStudio.",
|
||||
"entries.mirror": "&Espelho",
|
||||
"entries.mirror.confirmation": "Tem certeza que você deseja espelhar os seguintes {count} registros?",
|
||||
"entries.mirror.label": "Espelhando {idx}/{total} Registros...",
|
||||
"entries.mirror.title": "Espelhando Registros",
|
||||
"entries.mirror.window_title": "Espelhar Registros",
|
||||
"entries.running.dialog.new_entries": "Adicionando {total} Novos Registros de Arquivos...",
|
||||
"entries.running.dialog.title": "Adicionando Novos Registros de Arquivos",
|
||||
"entries.tags": "Tags",
|
||||
"entries.unlinked.delete": "Deletar Registros não Referenciados",
|
||||
"entries.unlinked.delete.confirm": "Tem certeza que deseja deletar os seguintes {count} Registros ?",
|
||||
"entries.unlinked.delete.deleting": "Deletando Registros",
|
||||
"entries.unlinked.delete.deleting_count": "Deletando {idx}/{count} Registros Não Linkadas",
|
||||
"entries.unlinked.delete_alt": "De&letar Registros Não Linkados",
|
||||
"entries.unlinked.description": "Cada registro na biblioteca faz referência à um arquivo em uma de suas pastas. Se um arquivo referenciado à uma entrada for movido ou deletado fora do TagStudio, ele é então considerado não-referenciado.<br><br>registros não-referenciados podem ser automaticamente referenciados por buscas nos seus diretórios, manualmente pelo usuário, ou deletado se for desejado.",
|
||||
"entries.unlinked.missing_count.none": "Registros Não Referenciados: N/A",
|
||||
"entries.unlinked.missing_count.some": "Registros não referenciados: {count}",
|
||||
"entries.unlinked.refresh_all": "&Atualizar Tudo",
|
||||
"entries.unlinked.relink.attempting": "Tentando referenciar {idx}/{missing_count} Registros, {fixed_count} Referenciados com Sucesso",
|
||||
"entries.unlinked.relink.manual": "&Referência Manual",
|
||||
"entries.unlinked.relink.title": "Referenciando Registros",
|
||||
"entries.unlinked.scanning": "Escaneando Bibliotecada em busca de Registros Não Referenciados...",
|
||||
"entries.unlinked.search_and_relink": "&Buscar && Referenciar",
|
||||
"entries.unlinked.title": "Corrigir Registros Não Referenciados",
|
||||
"field.copy": "Copiar Campo",
|
||||
"field.edit": "Editar Campo",
|
||||
"field.paste": "Colar Campo",
|
||||
"file.date_added": "Datta de Adição",
|
||||
"file.date_created": "Data de Criação",
|
||||
"file.date_modified": "Data de Modificação",
|
||||
"file.dimensions": "Dimensões",
|
||||
"file.duplicates.description": "TagStudio aceita resultados do DupeGuru pra gerenciar arquivos duplicados.",
|
||||
"file.duplicates.dupeguru.advice": "Após espelhagem, você estará livre para usar DupeGuru para deletar arquivos indesejados. Após, use a função \"Corrigir Registros Não Referenciados\" do TagStudio no menu de Ferramentas para deletar esses Registros.",
|
||||
"file.duplicates.dupeguru.file_extension": "Arquivos DupeGuru (*.dupeguru)",
|
||||
"file.duplicates.dupeguru.load_file": "&Carregar Aquivo DupeGuru",
|
||||
"file.duplicates.dupeguru.no_file": "Nenhum Arquivo DupeGuru Selecionado",
|
||||
"file.duplicates.dupeguru.open_file": "Abrir Arquivo de Resultados do DupeGuru",
|
||||
"file.duplicates.fix": "Corrigir Arquivos Duplicados",
|
||||
"file.duplicates.matches": "Correspondências de Arquivos Duplicados: {count}",
|
||||
"file.duplicates.matches_uninitialized": "Correspondências de Arquivos Duplicados: N/A",
|
||||
"file.duplicates.mirror.description": "Espelhe os ados de entrada em cada conjunto de correspondência duplicado, combinando todos os dados sem remover ou duplicar campos. Esta operação não excluirá nenhum arquivo ou dado.",
|
||||
"file.duplicates.mirror_entries": "&Registros Espelhados",
|
||||
"file.duration": "Duração",
|
||||
"file.not_found": "Arquivo não encontrado",
|
||||
"file.open_file": "Abrir arquivo",
|
||||
"file.open_file_with": "Abrir arquivo com",
|
||||
"file.open_location.generic": "Abrir no explorador de arquivos",
|
||||
"file.open_location.mac": "Mostrar no Finder",
|
||||
"file.open_location.windows": "Mostrar no Explorador de Arquivos",
|
||||
"folders_to_tags.close_all": "Fechar Tudo",
|
||||
"folders_to_tags.converting": "Convertendo pastas para Tags",
|
||||
"folders_to_tags.description": "Cria tags com base na sua estrutura de arquivos e aplica elas nos seus registros\nA estrutura abaixo mostra todas as tags que serão criadas e em quais itens elas serão aplicadas.",
|
||||
"folders_to_tags.open_all": "Abrir Tudo",
|
||||
"folders_to_tags.title": "Criar tags a partir de pastas",
|
||||
"generic.add": "Adicionar",
|
||||
"generic.apply": "Aplicar",
|
||||
"generic.apply_alt": "&Aplicar",
|
||||
"generic.cancel": "Cancelar",
|
||||
"generic.cancel_alt": "&Cancelar",
|
||||
"generic.close": "Fechar",
|
||||
"generic.continue": "Continuar",
|
||||
"generic.copy": "Copiar",
|
||||
"generic.cut": "Recortar",
|
||||
"generic.delete": "Deletar",
|
||||
"generic.delete_alt": "&Excluir",
|
||||
"generic.done": "Pronto",
|
||||
"generic.done_alt": "&Pronto",
|
||||
"generic.edit": "Editar",
|
||||
"generic.edit_alt": "&Editar",
|
||||
"generic.filename": "Nome do Arquivo",
|
||||
"generic.navigation.back": "Anterior",
|
||||
"generic.navigation.next": "Próximo",
|
||||
"generic.none": "Nenhum",
|
||||
"generic.overwrite": "Sobrescrever",
|
||||
"generic.overwrite_alt": "&Sobrescrever",
|
||||
"generic.paste": "Colar",
|
||||
"generic.recent_libraries": "Bibliotecas recentes",
|
||||
"generic.rename": "Renomear",
|
||||
"generic.rename_alt": "&Renomear",
|
||||
"generic.reset": "Redefinir",
|
||||
"generic.save": "Salvar",
|
||||
"generic.skip": "Pular",
|
||||
"generic.skip_alt": "&Pular",
|
||||
"help.visit_github": "Visite o Repositório no GitHub",
|
||||
"home.search": "Buscar",
|
||||
"home.search_entries": "Buscar Registros",
|
||||
"home.search_library": "Buscar na Biblioteca",
|
||||
"home.search_tags": "Buscar Tags",
|
||||
"home.thumbnail_size": "Tamanho de miniatura",
|
||||
"home.thumbnail_size.extra_large": "Miniaturas Extra Grandes",
|
||||
"home.thumbnail_size.large": "Miniaturas Grandes",
|
||||
"home.thumbnail_size.medium": "Miniaturas Médias",
|
||||
"home.thumbnail_size.mini": "Miniaturas Mini",
|
||||
"home.thumbnail_size.small": "Miniaturas Pequenas",
|
||||
"ignore_list.add_extension": "&Adicionar Extensão",
|
||||
"ignore_list.mode.exclude": "Excluir",
|
||||
"ignore_list.mode.include": "Incluir",
|
||||
"ignore_list.mode.label": "Modo:",
|
||||
"ignore_list.title": "Extensões de Arquivo",
|
||||
"json_migration.creating_database_tables": "Criando Tabelas de Banco de Dados SQL...",
|
||||
"json_migration.discrepancies_found": "Encontradas Discrepâncias na biblioteca",
|
||||
"json_migration.discrepancies_found.description": "Discrepâncias foram encontradas entre os arquivos de Biblioteca originais e os convertidos. Por favor, revise e escolha continuar com a migração ou cancelar.",
|
||||
"json_migration.finish_migration": "Finalizar Migração",
|
||||
"json_migration.heading.aliases": "Pseudônimos:",
|
||||
"json_migration.heading.colors": "Cores:",
|
||||
"json_migration.heading.differ": "Discrepância",
|
||||
"json_migration.heading.entires": "Registros:",
|
||||
"json_migration.heading.fields": "Campos:",
|
||||
"json_migration.heading.file_extension_list": "Lista de Extensão de Arquivo:",
|
||||
"json_migration.heading.names": "Nomes:",
|
||||
"json_migration.heading.parent_tags": "Tags Pai:",
|
||||
"json_migration.heading.tags": "Tags:",
|
||||
"json_migration.migrating_files_entries": "Migrando {entries:,d} Registros de Arquivos...",
|
||||
"json_migration.migration_complete": "Migração Concluída!",
|
||||
"json_migration.migration_complete_with_discrepancies": "Migração Concluída, Discrepâncias Encontradas",
|
||||
"json_migration.start_and_preview": "Iniciar e Visualizar",
|
||||
"landing.open_create_library": "Abrir/Criar Biblioteca {shortcut}",
|
||||
"library.field.add": "Adicionar Campo",
|
||||
"library.field.confirm_remove": "Você tem certeza de que quer remover o campo \"{name}\"?",
|
||||
"library.field.mixed_data": "Dados Mistos",
|
||||
"library.field.remove": "Remover Campo",
|
||||
"library.missing": "Localização Ausente",
|
||||
"library.name": "Biblioteca",
|
||||
"library.refresh.scanning.plural": "Buscando Pastas por Novos Arquivos ...\n{searched_count} Arquivos Encontrados, {found_count} Novos Arquivos",
|
||||
"library.refresh.scanning.singular": "Buscando Pastas por Novos Arquivos ...\n{searched_count} Arquivos Encontrados, {found_count} Novos Arquivos",
|
||||
"library.refresh.scanning_preparing": "Escaneando Diretórios por Novos Arquivos...\nPreparando...",
|
||||
"library.refresh.title": "Atualizando Pastas",
|
||||
"library.scan_library.title": "Escaneando Biblioteca",
|
||||
"library_object.name": "Nome",
|
||||
"library_object.name_required": "Nome (Obrigatório)",
|
||||
"macros.running.dialog.new_entries": "Executando Macros Configurados nos {count}/{total} Novos Registros de Arquivos...",
|
||||
"macros.running.dialog.title": "Executando Macros nos Novos Registros",
|
||||
"media_player.autoplay": "Tocar Automaticamente",
|
||||
"menu.delete_selected_files_ambiguous": "Mover Arquivo(s) para {trash_term}",
|
||||
"menu.delete_selected_files_plural": "Mover Arquivos para {trash_term}",
|
||||
"menu.delete_selected_files_singular": "Mover Arquivo para {trash_term}",
|
||||
"menu.edit": "Editar",
|
||||
"menu.edit.ignore_list": "Ignorar Arquivos e Pastas",
|
||||
"menu.edit.manage_file_extensions": "Gerenciar Extensões de Arquivo",
|
||||
"menu.edit.manage_tags": "Gerenciar Tags",
|
||||
"menu.edit.new_tag": "Nova &Tag",
|
||||
"menu.file": "&Arquivo",
|
||||
"menu.file.clear_recent_libraries": "Limpar Recentes",
|
||||
"menu.file.close_library": "&Fechar Biblioteca",
|
||||
"menu.file.new_library": "Nova Biblioteca",
|
||||
"menu.file.open_create_library": "&Abrir/Criar Biblioteca",
|
||||
"menu.file.open_library": "Abrir Biblioteca",
|
||||
"menu.file.open_recent_library": "Abrir Recente",
|
||||
"menu.file.refresh_directories": "&Atualizar Pastas",
|
||||
"menu.file.save_backup": "&Salvar Backup da Biblioteca",
|
||||
"menu.file.save_library": "Salvar Biblioteca",
|
||||
"menu.help": "&Ajuda",
|
||||
"menu.help.about": "Sobre",
|
||||
"menu.macros": "&Macros",
|
||||
"menu.macros.folders_to_tags": "Pastas para Tags",
|
||||
"menu.settings": "Configurações...",
|
||||
"menu.tools": "&Ferramentas",
|
||||
"menu.tools.fix_duplicate_files": "Corrigir &Arquivos Duplicados",
|
||||
"menu.tools.fix_unlinked_entries": "Corrigir &Registros Não Referenciados",
|
||||
"menu.view": "&Exibir",
|
||||
"menu.window": "Janela",
|
||||
"preview.multiple_selection": "<b>{count}</b> Itens Selecionados",
|
||||
"preview.no_selection": "Nenhum Item Selecionado",
|
||||
"select.add_tag_to_selected": "Adicionar Tag às Seleções",
|
||||
"select.all": "Selecionar Tudo",
|
||||
"select.clear": "Limpar Seleção",
|
||||
"settings.clear_thumb_cache.title": "Limpar cache de miniaturas",
|
||||
"settings.language": "Idioma",
|
||||
"settings.open_library_on_start": "Abrir Biblioteca ao Iniciar",
|
||||
"settings.restart_required": "Por favor reinicie o TagStudio para que as mudanças façam efeito.",
|
||||
"settings.show_filenames_in_grid": "Exibir nome dos arquivos",
|
||||
"settings.show_recent_libraries": "Mostrar Bibliotecas Recentes",
|
||||
"settings.title": "Configurações",
|
||||
"sorting.direction.ascending": "Ordem Ascendente",
|
||||
"sorting.direction.descending": "Ordem Descendente",
|
||||
"splash.opening_library": "Abrindo Biblioteca \"{library_path}\"...",
|
||||
"status.deleted_file_plural": "{count} Arquivos Apagados!",
|
||||
"status.deleted_file_singular": "1 Arquivo Apagado!",
|
||||
"status.deleted_none": "Nenhum Arquivo Apagado.",
|
||||
"status.deleting_file": "Apagando arquivo [{i}/{count}]: \"{path}\"...",
|
||||
"status.library_backup_in_progress": "Salvando Backup da Biblioteca...",
|
||||
"status.library_backup_success": "Backup da Biblioteca Salvo em: \"{path}\" ({time_span})",
|
||||
"status.library_closed": "Biblioteca Fechada ({time_span})",
|
||||
"status.library_closing": "Fechando Biblioteca...",
|
||||
"status.library_save_success": "Biblioteca Salva e Fechada!",
|
||||
"status.library_search_query": "Procurando na Biblioteca...",
|
||||
"status.library_version_expected": "Esperado:",
|
||||
"status.library_version_found": "Encontrado:",
|
||||
"status.library_version_mismatch": "Incompatibilidade de versão da biblioteca!",
|
||||
"status.results": "Resultados",
|
||||
"status.results.invalid_syntax": "Sintaxe de Pesquisa Inválida:",
|
||||
"status.results_found": "{count} Resultados Encontrados ({time_span})",
|
||||
"tag.add": "Adicionar Tag",
|
||||
"tag.add.plural": "Adicionar Tags",
|
||||
"tag.add_to_search": "Adicionar à Pesquisa",
|
||||
"tag.aliases": "Alias",
|
||||
"tag.all_tags": "Todas Tags",
|
||||
"tag.choose_color": "Escolha a cor da Tag",
|
||||
"tag.color": "Cor",
|
||||
"tag.confirm_delete": "Tem certeza que quer deletar a tag \"{tag_name}\"?",
|
||||
"tag.create": "Criar Tag",
|
||||
"tag.create_add": "Criar && Adicionar \"{query}\"",
|
||||
"tag.edit": "Editar Tag",
|
||||
"tag.is_category": "É Categoria",
|
||||
"tag.name": "Nome",
|
||||
"tag.new": "Nova Tag",
|
||||
"tag.parent_tags": "Tags Pai",
|
||||
"tag.parent_tags.add": "Adicionar Tag Pai",
|
||||
"tag.search_for_tag": "Procurar por Tag",
|
||||
"tag.shorthand": "Abreviação",
|
||||
"tag_manager.title": "Tags da biblioteca",
|
||||
"trash.context.ambiguous": "Mover arquivo(s) para {trash_term}",
|
||||
"trash.context.plural": "Mover arquivos para {trash_term}",
|
||||
"trash.context.singular": "Mover arquivo para {trash_term}",
|
||||
"trash.dialog.move.confirmation.plural": "Tem certeza que quer remover esses {count} arquivos para o {trash_term}?",
|
||||
"trash.dialog.move.confirmation.singular": "Tem certeza que quer mover esse arquivo para o {trash_term}?",
|
||||
"trash.dialog.permanent_delete_warning": "<b>AVISO!</b> Se esse arquivo não puder ser movido para o {trash_term}, <b> ele será <b>apagado permanentemente!</b>",
|
||||
"trash.dialog.title.plural": "Apagar Arquivos",
|
||||
"trash.dialog.title.singular": "Apagar Arquivo",
|
||||
"trash.name.windows": "Lixeira",
|
||||
"window.message.error_opening_library": "Erro ao abrir biblioteca.",
|
||||
"window.title.error": "Erro",
|
||||
"window.title.open_create_library": "Abrir/Criar Bilbioteca"
|
||||
}
|
||||
@@ -1,221 +0,0 @@
|
||||
{
|
||||
"about.title": "О программе",
|
||||
"color.new": "Новый цвет",
|
||||
"color.placeholder": "Цвет",
|
||||
"color.primary": "Основной цвет",
|
||||
"color.primary_required": "Основной цвет (Обязательный)",
|
||||
"color.secondary": "Дополнительный цвет",
|
||||
"color.title.no_color": "Без цвета",
|
||||
"color_manager.title": "Редактировать цвета тегов",
|
||||
"drop_import.description": "Данные файловые пути уже существуют в библиотеке",
|
||||
"drop_import.duplicates_choice.plural": "{count} данных файловых путей уже существуют в библиотеке.",
|
||||
"drop_import.duplicates_choice.singular": "Данный файловый путь уже существует в библиотеке.",
|
||||
"drop_import.progress.label.initial": "Импортирование новых файлов...",
|
||||
"drop_import.progress.label.plural": "Импортирование новых файлов...\n{count} файлов импортировано.{suffix}",
|
||||
"drop_import.progress.label.singular": "Импортирование новых файлов...\n1 файл импортирован.{suffix}",
|
||||
"drop_import.progress.window_title": "Импортировать файлы",
|
||||
"drop_import.title": "Конфликт файла(ов)",
|
||||
"edit.color_manager": "Редактировать цвета тегов",
|
||||
"edit.copy_fields": "Копировать поля",
|
||||
"edit.paste_fields": "Вставить поля",
|
||||
"edit.tag_manager": "Управлять тегами",
|
||||
"entries.duplicate.merge": "Объединить записи-дубликаты",
|
||||
"entries.duplicate.merge.label": "Объединение записей-дубликатов...",
|
||||
"entries.duplicate.refresh": "Обновить записи-дубликаты",
|
||||
"entries.duplicates.description": "Записи-дубликаты — это несколько записей, которые одновременно привязаны к одному файлу. Объединение таких дубликатов соединит все теги и мета данные из этих записей в одну. Записи-дубликаты не стоит путать с несколькими копиями самого файла, которые могут существовать вне TagStudio.",
|
||||
"entries.mirror": "Отзеркалить",
|
||||
"entries.mirror.confirmation": "Вы уверенны, что хотите отзеркалить следующие {count} записей?",
|
||||
"entries.mirror.label": "Отзеркаливание {idx}/{total} записей...",
|
||||
"entries.mirror.title": "Отзеркаливание записей",
|
||||
"entries.mirror.window_title": "Отзеркалить записи",
|
||||
"entries.running.dialog.new_entries": "Добавление {total} новых записей...",
|
||||
"entries.running.dialog.title": "Добавление новых записей",
|
||||
"entries.tags": "Теги",
|
||||
"entries.unlinked.delete": "Удалить откреплённые записи",
|
||||
"entries.unlinked.delete.confirm": "Вы уверены, что желаете удалить {count} записей?",
|
||||
"entries.unlinked.delete.deleting": "Удаление записей",
|
||||
"entries.unlinked.delete.deleting_count": "Удаление {idx}/{count} откреплённых записей",
|
||||
"entries.unlinked.delete_alt": "Удалить откреплённые записи",
|
||||
"entries.unlinked.description": "Каждая запись в библиотеке привязана к файлу, находящегося внутри той или иной папки. Если файл, к которому была привязана запись, был удалён или перемещён без использования TagStudio, то запись становиться \"откреплённой\".<br><br>Откреплённые записи могут быть прикреплены обратно автоматически, либо же удалены если в них нет надобности.",
|
||||
"entries.unlinked.missing_count.none": "Откреплённых записей: нет",
|
||||
"entries.unlinked.missing_count.some": "Откреплённых записей: {count}",
|
||||
"entries.unlinked.refresh_all": "Обновить Всё",
|
||||
"entries.unlinked.relink.attempting": "Попытка перепривязать {idx}/{missing_count} записей, {fixed_count} привязано успешно",
|
||||
"entries.unlinked.relink.manual": "Ручная привязка",
|
||||
"entries.unlinked.relink.title": "Привязка записей",
|
||||
"entries.unlinked.scanning": "Сканирование библиотеки на наличие откреплённых записей...",
|
||||
"entries.unlinked.search_and_relink": "Поиск и привязка",
|
||||
"entries.unlinked.title": "Исправить откреплённые записи",
|
||||
"field.copy": "Копировать поле",
|
||||
"field.edit": "Редактировать поле",
|
||||
"field.paste": "Вставить поле",
|
||||
"file.date_added": "Дата добавления",
|
||||
"file.date_created": "Дата создания",
|
||||
"file.date_modified": "Дата изменения",
|
||||
"file.dimensions": "Размер",
|
||||
"file.duplicates.description": "TagStudio позволяет импортировать результаты DupeGuru для управления дубликатами файлов.",
|
||||
"file.duplicates.dupeguru.advice": "После отзеркаливания, вы можете использовать DupeGuru, чтобы удалить ненужные файлы. После этого, используйте функцию \"Исправить откреплённые записи\" внутри панели \"Инструменты\" TagStudio, чтобы удалить откреплённые записи.",
|
||||
"file.duplicates.dupeguru.file_extension": "Файлы DupeGuru (*.dupeguru)",
|
||||
"file.duplicates.dupeguru.load_file": "Загрузить файл DupeGuru",
|
||||
"file.duplicates.dupeguru.no_file": "Файл DupeGuru не выбран",
|
||||
"file.duplicates.dupeguru.open_file": "Открыть файл результатов DupeGuru",
|
||||
"file.duplicates.fix": "Исправить дубликаты файлов",
|
||||
"file.duplicates.matches": "Совпадений дубликатов файлов: {count}",
|
||||
"file.duplicates.matches_uninitialized": "Совпадений дубликатов файлов: нет",
|
||||
"file.duplicates.mirror.description": "Отзеркалить данные записи внутри каждого указанного набора дубликатов, объединяя все данные внутри без удаления или дублирования категорий. Эта операция не удалит какие-либо файлы или данные.",
|
||||
"file.duplicates.mirror_entries": "Отзеркалить записи",
|
||||
"file.duration": "Длительность",
|
||||
"file.not_found": "Файл не найден",
|
||||
"file.open_file": "Открыть файл",
|
||||
"file.open_file_with": "Открыть файл с помощью",
|
||||
"file.open_location.generic": "Открыть файл в проводнике",
|
||||
"file.open_location.mac": "Показать в поисковике",
|
||||
"file.open_location.windows": "Открыть в проводнике",
|
||||
"folders_to_tags.close_all": "Закрыть всё",
|
||||
"folders_to_tags.converting": "Конвертировать папки в теги",
|
||||
"folders_to_tags.description": "Создаёт теги для записей согласно имеющейся иерархии папок.\nВнизу указаны все теги, которые будут созданы, а также записи к которым они будут применены.",
|
||||
"folders_to_tags.open_all": "Открыть всё",
|
||||
"folders_to_tags.title": "Создать теги из папок",
|
||||
"generic.add": "Добавить",
|
||||
"generic.apply": "Применить",
|
||||
"generic.apply_alt": "Применить",
|
||||
"generic.cancel": "Отмена",
|
||||
"generic.cancel_alt": "&Отмена",
|
||||
"generic.close": "Закрыть",
|
||||
"generic.continue": "Продолжить",
|
||||
"generic.copy": "Копировать",
|
||||
"generic.cut": "Вырезать",
|
||||
"generic.delete": "Удалить",
|
||||
"generic.delete_alt": "&Удалить",
|
||||
"generic.done": "Завершено",
|
||||
"generic.done_alt": "&Завершено",
|
||||
"generic.edit": "Редактировать",
|
||||
"generic.edit_alt": "&Редактировать",
|
||||
"generic.filename": "Имя файла",
|
||||
"generic.navigation.back": "Назад",
|
||||
"generic.navigation.next": "Далее",
|
||||
"generic.none": "Ничего",
|
||||
"generic.overwrite": "Перезаписать",
|
||||
"generic.overwrite_alt": "&Перезаписать",
|
||||
"generic.paste": "Вставить",
|
||||
"generic.recent_libraries": "Недавние библиотеки",
|
||||
"generic.rename": "Переименовать",
|
||||
"generic.rename_alt": "&Переименовать",
|
||||
"generic.reset": "Cбросить",
|
||||
"generic.save": "Сохранить",
|
||||
"generic.skip": "Пропустить",
|
||||
"generic.skip_alt": "&Пропустить",
|
||||
"help.visit_github": "Посетить GitHub-репозиторий",
|
||||
"home.search": "Поиск",
|
||||
"home.search_entries": "Поиск записей",
|
||||
"home.search_library": "Поиск по библиотеке",
|
||||
"home.search_tags": "Поиск тегов",
|
||||
"home.thumbnail_size": "Размер иконок",
|
||||
"home.thumbnail_size.extra_large": "Очень большие иконки",
|
||||
"home.thumbnail_size.large": "Большие иконки",
|
||||
"home.thumbnail_size.medium": "Средние иконки",
|
||||
"home.thumbnail_size.mini": "Крохотные иконки",
|
||||
"home.thumbnail_size.small": "Маленькие иконки",
|
||||
"ignore_list.add_extension": "&Добавить расширение",
|
||||
"ignore_list.mode.exclude": "Исключить",
|
||||
"ignore_list.mode.include": "Включить",
|
||||
"ignore_list.mode.label": "Список режимов:",
|
||||
"ignore_list.title": "Расширения файлов",
|
||||
"landing.open_create_library": "Открыть/создать библиотеку {shortcut}",
|
||||
"library.field.add": "Добавить поле",
|
||||
"library.field.confirm_remove": "Вы уверены, что хотите удалить поле \"{name}\"?",
|
||||
"library.field.mixed_data": "Смешанные данные",
|
||||
"library.field.remove": "Удалить поле",
|
||||
"library.missing": "Отсутствует путь к библиотеке",
|
||||
"library.name": "Библиотека",
|
||||
"library.refresh.scanning.plural": "Сканирование папок на наличие новых файлов...\nПросканировано {searched_count} файлов, найдено {found_count} новых",
|
||||
"library.refresh.scanning.singular": "Сканирование папок на наличие новых файлов...\nПросканирован {searched_count} файл, найдено {found_count} новых",
|
||||
"library.refresh.scanning_preparing": "Сканирование папок на наличие новых файлов...\nПодготовка...",
|
||||
"library.refresh.title": "Обновление папок",
|
||||
"library.scan_library.title": "Сканирование библиотеки",
|
||||
"library_object.name": "Название",
|
||||
"library_object.name_required": "Название (Обязательно)",
|
||||
"library_object.slug": "ID Slug",
|
||||
"library_object.slug_required": "ID Slug (Обязательно)",
|
||||
"macros.running.dialog.new_entries": "Выполнение макросов на {count}/{total} новых файлах...",
|
||||
"macros.running.dialog.title": "Выполнение макросов на новых файлах",
|
||||
"media_player.autoplay": "Автовоспроизведение",
|
||||
"menu.delete_selected_files_ambiguous": "Перемеcтить файл(ы) в {trash_term}",
|
||||
"menu.delete_selected_files_plural": "Перемеcтить файлы в {trash_term}",
|
||||
"menu.delete_selected_files_singular": "Перемеcтить файл в {trash_term}",
|
||||
"menu.edit": "Редактировать",
|
||||
"menu.edit.ignore_list": "Игнорировать файлы и папки",
|
||||
"menu.edit.manage_file_extensions": "Управлять разширениями файлов",
|
||||
"menu.edit.manage_tags": "Управлять тегами",
|
||||
"menu.edit.new_tag": "Новый &тег",
|
||||
"menu.file": "&Файл",
|
||||
"menu.file.clear_recent_libraries": "Очистить последние файлы",
|
||||
"menu.file.close_library": "&Закрыть библиотеку",
|
||||
"menu.file.new_library": "Новая библиотека",
|
||||
"menu.file.open_create_library": "Открыть/создать библиотеку",
|
||||
"menu.file.open_library": "Открыть библиотеку",
|
||||
"menu.file.open_recent_library": "Открыть последнюю",
|
||||
"menu.file.refresh_directories": "&Обновить папки",
|
||||
"menu.file.save_backup": "&Сохранить резервную копию библиотеки",
|
||||
"menu.file.save_library": "Сохранить библиотеку",
|
||||
"menu.help": "&Помощь",
|
||||
"menu.help.about": "О программе",
|
||||
"menu.macros": "&Макросы",
|
||||
"menu.macros.folders_to_tags": "Теги из папок",
|
||||
"menu.select": "Выбрать",
|
||||
"menu.settings": "Настройки...",
|
||||
"menu.tools": "&Инструменты",
|
||||
"menu.tools.fix_duplicate_files": "Исправить дубликаты &файлов",
|
||||
"menu.tools.fix_unlinked_entries": "Исправить &откреплённые записи",
|
||||
"menu.view": "&Вид",
|
||||
"menu.window": "Окно",
|
||||
"preview.multiple_selection": "Выбрано <b>{count}</b>",
|
||||
"preview.no_selection": "Ничего не выбрано",
|
||||
"select.add_tag_to_selected": "Добавить тег к выбранному",
|
||||
"select.all": "Выбрать всё",
|
||||
"select.clear": "Отменить выбор",
|
||||
"settings.clear_thumb_cache.title": "Очистить кэш иконок",
|
||||
"settings.language": "Язык",
|
||||
"settings.open_library_on_start": "Открывать библиотеку при запуске",
|
||||
"settings.restart_required": "Пожалуйста, перезапустите TagStudio для применения изменений.",
|
||||
"settings.show_filenames_in_grid": "Показывать имена файлов",
|
||||
"settings.show_recent_libraries": "Показывать недавние библиотеки",
|
||||
"settings.title": "Настройки",
|
||||
"sorting.direction.ascending": "По возрастанию",
|
||||
"sorting.direction.descending": "По убыванию",
|
||||
"splash.opening_library": "Открывание библиотеки \"{library_path}\"...",
|
||||
"status.deleted_file_plural": "{count} файлов удалено!",
|
||||
"status.deleted_file_singular": "Файл удалён!",
|
||||
"status.deleted_none": "Ничего не удалено.",
|
||||
"status.deleted_partial_warning": "Удалено только {count} файлов! Убедитесь, что файлы не пропали, и не используются в данный момент.",
|
||||
"status.deleting_file": "Удаление файла [{i}/{count}]: \"{path}\"...",
|
||||
"status.library_backup_in_progress": "Сохранение резервной копии библиотеки...",
|
||||
"status.library_backup_success": "Резервная копия библиотеки сохранена по адресу: \"{path}\" ({time_span})",
|
||||
"status.library_closed": "Библиотека закрыта ({time_span})",
|
||||
"status.library_closing": "Закрытие библиотеки...",
|
||||
"status.library_save_success": "Библиотека сохранена и закрыта!",
|
||||
"status.library_search_query": "Поиск по библиотеке...",
|
||||
"status.library_version_expected": "Ожидалось:",
|
||||
"status.library_version_found": "Найдено:",
|
||||
"status.library_version_mismatch": "Несоответствие версии библиотеки!",
|
||||
"status.results": "Результаты",
|
||||
"status.results.invalid_syntax": "Некорректный синтаксис поиска:",
|
||||
"status.results_found": "Найдено {count} результатов ({time_span})",
|
||||
"tag.add": "Добавить тег",
|
||||
"tag.add.plural": "Добавить теги",
|
||||
"tag.add_to_search": "Добавить к поисковому запросу",
|
||||
"tag.aliases": "Псевдонимы",
|
||||
"tag.all_tags": "Все теги",
|
||||
"tag.choose_color": "Выберите цвет тега",
|
||||
"tag.color": "Цвет",
|
||||
"tag.confirm_delete": "Вы уверены, что хотите удалить тег \"{tag_name}\"?",
|
||||
"tag.create": "Создать тег",
|
||||
"tag.create_add": "Создать и добавить \"{query}\"",
|
||||
"tag.name": "Имя",
|
||||
"tag.new": "Новый тег",
|
||||
"tag.parent_tags": "Теги-родители",
|
||||
"tag.parent_tags.add": "Добавить Теги-родители",
|
||||
"tag.search_for_tag": "Поиск тега",
|
||||
"tag.shorthand": "Сокращённое название",
|
||||
"tag_manager.title": "Теги этой библиотеки"
|
||||
}
|
||||
@@ -1,91 +0,0 @@
|
||||
{
|
||||
"app.title": "{base_title} - Bibliotek '{library_dir}'",
|
||||
"drop_import.description": "Följande filer har namn som redan finns i biblioteket",
|
||||
"drop_import.duplicates_choice.plural": "Följande {count} filer har namn som redan finns i biblioteket.",
|
||||
"drop_import.duplicates_choice.singular": "Följande fil har ett namn som redan finns i biblioteket.",
|
||||
"drop_import.progress.label.initial": "Importerar nya filer...",
|
||||
"drop_import.progress.label.plural": "Importerar nya filer...\n{count} filer importerade.{suffix}",
|
||||
"drop_import.progress.label.singular": "Importerar nya filer...\n1 Fil importerad.{suffix}",
|
||||
"drop_import.progress.window_title": "Importera Filer",
|
||||
"drop_import.title": "Konflikterande Filer",
|
||||
"edit.tag_manager": "Hantera Etiketter",
|
||||
"entries.duplicate.merge": "Sammanslå Dubbla Poster",
|
||||
"entries.duplicate.merge.label": "Sammanslår dubbla poster...",
|
||||
"entries.duplicate.refresh": "Uppdatera Dubbla Poster",
|
||||
"entries.duplicates.description": "Dubbla poster är definierade som flera poster som pekar på samma fil på datorn. Genom att slå ihop dessa poster kommer deras etiketter och metadata från dubbletterna att kombineras till en post. Dessa ska inte förväxlas med \"dubbla filer\", som är dubbletter av dina filer utanför TagStudio.",
|
||||
"entries.mirror": "Spegla",
|
||||
"entries.mirror.confirmation": "Är du säker att du vill spegla följande {count} poster?",
|
||||
"entries.mirror.label": "Speglar {idx}/{total} poster...",
|
||||
"entries.mirror.title": "Speglar Poster",
|
||||
"entries.mirror.window_title": "Spegla Poster",
|
||||
"entries.tags": "Etiketter",
|
||||
"entries.unlinked.delete": "Radera olänkade poster",
|
||||
"entries.unlinked.delete.confirm": "Är du säker att du vill radera följande {count} poster?",
|
||||
"entries.unlinked.delete.deleting": "Raderar poster",
|
||||
"entries.unlinked.delete.deleting_count": "Raderar {idx}/{count} olänkade poster",
|
||||
"entries.unlinked.delete_alt": "Radera olänkade poster",
|
||||
"entries.unlinked.description": "Varje post i biblioteket är länkad till en fil i en av dina kataloger. Om en fil länkad till en post är flyttad eller borttagen utanför TagStudio blir den olänkad. Olänkade poster kan automatiskt bli omlänkade genom att söka genom dina kataloger, manuellt omlänkade av användaren eller tas bort om så önskas.",
|
||||
"entries.unlinked.refresh_all": "Uppdatera alla",
|
||||
"entries.unlinked.relink.manual": "Länka om manuellt",
|
||||
"entries.unlinked.relink.title": "Länkar om poster",
|
||||
"entries.unlinked.scanning": "Skannar bibliotek efter olänkade poster...",
|
||||
"entries.unlinked.search_and_relink": "Sök && Länka om",
|
||||
"entries.unlinked.title": "Fixa olänkade poster",
|
||||
"file.date_created": "Skapad den",
|
||||
"file.date_modified": "Senast ändrad",
|
||||
"file.dimensions": "Dimensioner",
|
||||
"file.duplicates.fix": "Fixa dubbla filer",
|
||||
"file.duplicates.mirror_entries": "Spegla poster",
|
||||
"file.not_found": "Kunde inte hitta filen:",
|
||||
"file.open_file": "Öppna fil",
|
||||
"file.open_location.generic": "Öppna fil i utforskaren",
|
||||
"folders_to_tags.converting": "Konverterar mappar till etiketter",
|
||||
"folders_to_tags.description": "Skapar etiketter baserat på din mappstruktur och tillämpar dem till dina poster.\nStrukturen nedan visar vilka etiketter som kommer skapas och vilka filer de kommer tillämpas på.",
|
||||
"folders_to_tags.open_all": "Öppna alla",
|
||||
"folders_to_tags.title": "Skapa etiketter från mappar",
|
||||
"generic.add": "Lägg till",
|
||||
"generic.apply": "Tillämpa",
|
||||
"generic.cancel": "Avbryt",
|
||||
"generic.delete": "Ta bort",
|
||||
"generic.done": "Klar",
|
||||
"generic.edit": "Redigera",
|
||||
"generic.recent_libraries": "Senaste biblioteken",
|
||||
"home.search": "Sök",
|
||||
"home.search_entries": "Sök poster",
|
||||
"home.search_tags": "Sök etikett",
|
||||
"home.thumbnail_size": "Miniatyrbildsstorlek",
|
||||
"ignore_list.add_extension": "Lägg till tillägg",
|
||||
"ignore_list.mode.exclude": "Exkludera",
|
||||
"ignore_list.mode.include": "Inkludera",
|
||||
"ignore_list.title": "Filnamnstillägg",
|
||||
"library.field.add": "Lägg till fält",
|
||||
"library.field.remove": "Ta bort fält",
|
||||
"library.missing": "Platsen saknas",
|
||||
"library.name": "Bibliotek",
|
||||
"library.refresh.scanning_preparing": "Skannar kataloger efter nya filer...\nFörbereder...",
|
||||
"library.refresh.title": "Uppdaterar kataloger",
|
||||
"library.scan_library.title": "Skannar bibliotek",
|
||||
"macros.running.dialog.title": "Kör makros på nya poster",
|
||||
"menu.edit": "Redigera",
|
||||
"menu.file": "Fil",
|
||||
"menu.help": "Hjälp",
|
||||
"menu.macros": "Makron",
|
||||
"menu.tools": "Verktyg",
|
||||
"menu.window": "Fönster",
|
||||
"preview.no_selection": "Inga valda objekt",
|
||||
"status.library_backup_success": "Bibliotekets säkerhetskopia sparad i: \"{path}\" ({time_span})",
|
||||
"status.library_save_success": "Bibliotek sparat och stängt!",
|
||||
"status.library_search_query": "Söker i biblioteket efter",
|
||||
"status.results": "Resultat",
|
||||
"tag.add": "Lägg till etikett",
|
||||
"tag.add_to_search": "Lägg till i Sök",
|
||||
"tag.aliases": "Alias",
|
||||
"tag.color": "Färg",
|
||||
"tag.name": "Namn",
|
||||
"tag.new": "Ny etikett",
|
||||
"tag.parent_tags": "Förälderetiketter",
|
||||
"tag.parent_tags.add": "Lägg till förälderetikett",
|
||||
"tag.search_for_tag": "Sök efter etikett",
|
||||
"tag.shorthand": "Förkortning",
|
||||
"tag_manager.title": "Biblioteksetiketter"
|
||||
}
|
||||
@@ -1,91 +0,0 @@
|
||||
{
|
||||
"entries.duplicate.merge.label": "மறுநுழைவுகளை ஒன்றுசேர்த்தல்",
|
||||
"entries.duplicate.refresh": "நகல் உள்ளீடுகளைப் புதுப்பி",
|
||||
"entries.duplicates.description": "மறுநுழைவுகள் என்பது, ஒரே கோப்பை குறிக்கும் பல நுழைவுகளை குறிக்கும். இவற்றை இணைப்பதால், அனைத்து மறுநுழைவுகளின் குறிச்சொற்களும் மெட்டாடேட்டாவும் ஒரே ஒட்டுமொத்த நுழைவாகச் சேர்க்கப்படும். இவற்றை 'மறுகோப்புகள்' என்பதுடன் குழப்பக் கூடாது, ஏனெனில் அவை டாக் ஸ்டுடியோவுக்கு வெளியேயுள்ள கோப்புகளின் நகல்களாகும்.",
|
||||
"entries.mirror": "படிமம்",
|
||||
"entries.mirror.confirmation": "பின்வரும் உள்ளீடுகளைப் பிரதிபலிக்க விரும்புகிறீர்களா {count}?",
|
||||
"entries.mirror.label": "{idx}/{total} உள்ளீடுகளைப் பிரதிபலிக்கப்படுகின்றது...",
|
||||
"entries.mirror.title": "உள்ளீடுகள் பிரதிபழிக்கப்படுகின்றது",
|
||||
"entries.tags": "குறிச்சொற்கள்",
|
||||
"entries.unlinked.delete": "இணைக்கப்படாத உள்ளீடுகளை நீக்கு",
|
||||
"entries.unlinked.delete.confirm": "பின்வரும் உள்ளீடுகளை நிச்சயமாக நீக்க விரும்புகிறீர்களா {count}?",
|
||||
"entries.unlinked.delete.deleting": "உள்ளீடுகள் நீக்கப்படுகிறது",
|
||||
"entries.unlinked.delete.deleting_count": "{idx}/{count} இணைக்கப்படாத உள்ளீடுகள் நீக்கப்படுகிறது",
|
||||
"entries.unlinked.description": "ஒவ்வொரு புத்தககல்லரி நுழைவும் உங்கள் அடைவுகளில் உள்ள ஒரு கோப்புடன் இணைக்கப்பட்டுள்ளது. டாக் ஸ்டுடியோ-வைத் தவிர கோப்புகள் நகர்த்தப்பட்டால் அல்லது நீக்கப்பட்டால், அவை இணைக்கப்படாதவையாகக் கருதப்படும். இணைக்கப்படாத நுழைவுகளை உங்கள் அடைவுகளில் தேடுவதன் மூலம் தானாகவே மீண்டும் இணைக்கலாம், பயனர் கைமுறையாக இணைக்கலாம் அல்லது விருப்பப்படி நீக்கலாம்.",
|
||||
"entries.unlinked.refresh_all": "அனைத்தையும் புதுப்பி",
|
||||
"entries.unlinked.relink.attempting": "{idx}/{missing_count} உள்ளீடுகளை மீண்டும் இணைக்க முயற்சிக்கிறது, {fixed_count} மீண்டும் இணைக்கப்பட்டது",
|
||||
"entries.unlinked.relink.manual": "கைமுறை மறு இணைப்பு",
|
||||
"entries.unlinked.relink.title": "உள்ளீடுகள் மீண்டும் இணைக்கப்படுகின்றது",
|
||||
"entries.unlinked.scanning": "இணைக்கப்படாத நுழைவுகளை புத்தககல்லரியில் சோதனை செய்யப்படுகிறது...",
|
||||
"entries.unlinked.search_and_relink": "தேடல் && மீண்டும் இணை",
|
||||
"entries.unlinked.title": "இணைக்கப்படாத உள்ளீடுகளைச் சரிசெய்யவும்",
|
||||
"file.date_created": "உருவாக்கப்பட்ட தேதி",
|
||||
"file.date_modified": "மாற்றப்பட்ட தேதி",
|
||||
"file.dimensions": "பரிமாணங்கள்",
|
||||
"file.duplicates.dupeguru.advice": "படிமம் முடிந்தவுடன், தேவையற்ற கோப்புகளை நீக்க DupeGuru ஐ பயன்படுத்தலாம். அதற்குப் பிறகு, இணைக்காத நுழைவுகளை நீக்க 'டாக் ஸ்டுடியோ' வின் 'இணைக்கப்படாத உள்ளீடுகளைச் சரிசெய்' அம்சத்தைக் கருவிகள் பட்டியில் பயன்படுத்தவும்.",
|
||||
"file.duplicates.dupeguru.file_extension": "DupeGuru கோப்புகள் (*.dupeguru)",
|
||||
"file.duplicates.dupeguru.load_file": "DupeGuru கோப்பை ஏற்றவும்",
|
||||
"file.duplicates.dupeguru.no_file": "DupeGuru கோப்பு எதுவும் தேர்ந்தெடுக்கப்படவில்லை",
|
||||
"file.duplicates.dupeguru.open_file": "DupeGuru முடிவுகள் கோப்பைத் திறக்க",
|
||||
"file.duplicates.fix": "நகல் கோப்புகளைச் சரிசெய்",
|
||||
"file.duplicates.matches": "நகல் கோப்பு பொருத்தங்கள்: %{count}",
|
||||
"file.duplicates.matches_uninitialized": "நகல் கோப்பு பொருத்தங்கள்: ஒன்றும் இல்லை",
|
||||
"file.duplicates.mirror.description": "ஒவ்வொரு மறுநுழைவு பொருத்தத் தொகுப்பிலும் நுழைவு தரவுகளைப் பிரதிபலிக்கவும், அனைத்து தரவுகளையும் இணைக்கவும், எந்தத் தகவல்களையும் நீக்காமலும் மறு செய்யாமலும். இந்தச் செயலில் எந்தக் கோப்புகள் அல்லது தரவுகளும் நீக்கப்பட மாட்டாது.",
|
||||
"file.duplicates.mirror_entries": "படிம நுழைவுகள்",
|
||||
"file.not_found": "கோப்பு கிடைக்கவில்லை:",
|
||||
"file.open_file": "கோப்பைத் திறக்கவும்",
|
||||
"file.open_location.generic": "Explorer இல் கோப்பைத் திறக்கவும்",
|
||||
"folders_to_tags.converting": "கோப்புறைகளை குறிச்சொற்களாக மாற்றப்படுகிறது",
|
||||
"folders_to_tags.description": "உங்கள் அடைவு கட்டமைப்பின் அடிப்படையில் குறிச்சொற்களை உருவாக்கி, அவற்றை உங்கள் நுழைவுகளில் பயன்படுத்துகிறது.\nகீழே காணப்படும் கட்டமைப்பானது உருவாக்கப்படும் அனைத்து குறிச்சொற்களையும், அவை எந்த நுழைவுகளில் பயன்படுத்தப்படும் என்பதையும் காட்டுகிறது.",
|
||||
"folders_to_tags.open_all": "அனைத்தையும் திற",
|
||||
"folders_to_tags.title": "கோப்புறைகளிலிருந்து குறிச்சொற்களை உருவாக்கு",
|
||||
"generic.add": "சேர்",
|
||||
"generic.apply": "விண்ணப்பிக்க",
|
||||
"generic.cancel": "ரத்து செய்",
|
||||
"generic.delete": "நீக்கு",
|
||||
"generic.done": "முடிந்தது",
|
||||
"generic.edit": "திருத்து",
|
||||
"generic.recent_libraries": "சமீபத்திய நூலகங்கள்",
|
||||
"home.search": "தேடு",
|
||||
"home.search_entries": "தேடல் உள்ளீடுகள்",
|
||||
"home.search_tags": "குறிச்சொற்களைத் தேடு",
|
||||
"home.thumbnail_size": "சின்னப்பட அளவு",
|
||||
"ignore_list.add_extension": "நீட்டிப்பைச் சேர்க்க",
|
||||
"ignore_list.mode.exclude": "தவிர்",
|
||||
"ignore_list.mode.include": "உள்ளடக்கு",
|
||||
"ignore_list.mode.label": "பட்டியல் முறை:",
|
||||
"ignore_list.title": "கோப்பு நீட்டிப்புகள்",
|
||||
"library.field.add": "புலத்தைச் சேர்க்க",
|
||||
"library.field.confirm_remove": "இந்த \"{name}\" புலத்தை நிச்சயமாக அகற்ற விரும்புகிறீர்களா?",
|
||||
"library.field.mixed_data": "கலப்பு தரவு",
|
||||
"library.field.remove": "புலத்தை அகற்று",
|
||||
"library.missing": "இடம் காணவில்லை",
|
||||
"library.name": "நூலகம்",
|
||||
"library.refresh.scanning_preparing": "புதிய கோப்புகளுக்கான அடைவுகள் சோதனை செய்யப்படுகின்றது...\nதயாராகிறது...",
|
||||
"library.refresh.title": "கோப்பகங்கள் புதுப்பிக்கப்படுகின்றன",
|
||||
"library.scan_library.title": "புத்தககல்லரி சோதனை செய்யப்படுகிறது",
|
||||
"macros.running.dialog.new_entries": "{count} இல் கட்டமைக்கப்பட்ட செயல்முறைகளை இயக்கப்படுகிறது / {total} புதிய பதிவுகள்",
|
||||
"macros.running.dialog.title": "புதிய நுழைவுகளில் செயல்முறைகளை இயக்கப்படுகின்றது",
|
||||
"menu.edit": "திருத்து",
|
||||
"menu.file": "கோப்பு",
|
||||
"menu.help": "உதவி",
|
||||
"menu.macros": "செயல்முறை",
|
||||
"menu.tools": "கருவிகள்",
|
||||
"menu.window": "சாளரம்",
|
||||
"preview.no_selection": "உருப்படிகள் எதுவும் தேர்ந்தெடுக்கப்படவில்லை",
|
||||
"status.library_backup_success": "நூலக காப்புப் பிரதி சேமிக்கப்பட்டது: \"{path}\" ({time_span})",
|
||||
"status.library_save_success": "நூலகம் சேமிக்கப்பட்டு மூடப்பட்டது!",
|
||||
"status.library_search_query": "நூலகத்தைத் தேடுகிறது",
|
||||
"status.results": "முடிவுகள்",
|
||||
"tag.add": "குறிச்சொல் சேர்க்க",
|
||||
"tag.add_to_search": "தேடலில் சேர்",
|
||||
"tag.aliases": "மாற்றுப்பெயர்கள்",
|
||||
"tag.color": "நிறம்",
|
||||
"tag.name": "பெயர்",
|
||||
"tag.new": "புதிய குறிச்சொல்",
|
||||
"tag.parent_tags": "பெற்றோர் குறிச்சொற்கள்",
|
||||
"tag.parent_tags.add": "பெற்றோர் குறிச்சொற்களைச் சேர்க்க",
|
||||
"tag.search_for_tag": "குறிச்சொல்லைத் தேடு",
|
||||
"tag.shorthand": "சுருக்கெழுத்து",
|
||||
"tag_manager.title": "நூலக குறிச்சொற்கள்"
|
||||
}
|
||||
@@ -1,128 +0,0 @@
|
||||
{
|
||||
"app.git": "Git Commit",
|
||||
"app.pre_release": "ilo pi pakala lili",
|
||||
"edit.tag_manager": "o lawa e poki",
|
||||
"entries.duplicate.merge": "o wan e ijo sama",
|
||||
"entries.duplicate.merge.label": "ijo sama li kama wan",
|
||||
"entries.duplicate.refresh": "o kama jo e sona tan ijo sama",
|
||||
"entries.duplicates.description": "ken la, ijo mute li jo e ijo lon sama. ni li \"ijo sama\". sina wan e ona la, ijo sama li kama wan li jo e sona ale tan ijo sama ale.",
|
||||
"entries.mirror": "jasima",
|
||||
"entries.mirror.confirmation": "mi jasima e ijo {count}. ni li pona anu seme?",
|
||||
"entries.mirror.label": "mi jasima e ijo {idx}/{total}...",
|
||||
"entries.mirror.title": "mi jasima e ijo",
|
||||
"entries.tags": "poki",
|
||||
"entries.unlinked.delete": "o weka e ijo pi ijo lon ala",
|
||||
"entries.unlinked.delete.confirm": "mi weka e ijo {count}. ni li pona anu seme?",
|
||||
"entries.unlinked.delete.deleting": "mi weka e ijo",
|
||||
"entries.unlinked.delete.deleting_count": "mi weka e ijo {idx}/{count} pi ijo lon ala",
|
||||
"entries.unlinked.description": "ijo ale li jo e ijo lon. ona li tawa anu weka, ona li jo ala e ijo lon. ijo pi ijo lon li ken alasa e tomo li ken kama jo e ijo lon. ante la sina ken pana ijo lon tawa ijo. ante la sina ken weka e ijo.",
|
||||
"entries.unlinked.refresh_all": "o kama jo sin tan ale",
|
||||
"entries.unlinked.relink.attempting": "mi o pana e ijo lon tawa ijo {idx}/{missing_count}. mi pana e ijo lon tawa ijo {fixed_count}",
|
||||
"entries.unlinked.relink.manual": "sina o pana e ijo lon tawa ijo",
|
||||
"entries.unlinked.relink.title": "mi pana e ijo lon tawa ijo",
|
||||
"entries.unlinked.scanning": "mi o alasa e ijo pi ijo lon ala...",
|
||||
"entries.unlinked.search_and_relink": "o alasa o pana e ijo lon tawa ijo",
|
||||
"entries.unlinked.title": "o pona e ijo pi ijo lon ala",
|
||||
"field.copy": "o jo e sona sama",
|
||||
"field.edit": "o ante e sona",
|
||||
"field.paste": "o pana e sona sama",
|
||||
"file.date_added": "tenpo pi kama namako",
|
||||
"file.date_created": "tenpo pi kama sin",
|
||||
"file.date_modified": "tenpo pi kama ante",
|
||||
"file.dimensions": "suli",
|
||||
"file.duplicates.dupeguru.advice": "jasima li pini la, sina ken kepeken ilo DupeGuru. ilo DupeGuru li ken weka e ijo ike. ni li pini la, o kepeken e nasin \"o pona e ijo pi ijo lon ala\" lon ilo TagStudio. ni li weka e ijo pi ijo lon ala.",
|
||||
"file.duplicates.dupeguru.file_extension": "ijo DupeGuru (*.dupeguru)",
|
||||
"file.duplicates.dupeguru.load_file": "o kama sona e ijo DupeGuru",
|
||||
"file.duplicates.dupeguru.no_file": "sina o anu e ijo DupeGuru",
|
||||
"file.duplicates.dupeguru.open_file": "o open e sona pini tan ilo DupeGuru",
|
||||
"file.duplicates.fix": "pona e ijo sama",
|
||||
"file.duplicates.matches": "ijo sama: %{count}",
|
||||
"file.duplicates.matches_uninitialized": "ijo sama: ala",
|
||||
"file.duplicates.mirror.description": "o jasima e sona kama lon kulupu sama ale. sona ale li kama wan li weka ala li kama mute ala. ni li weka ala e sona e ijo.",
|
||||
"file.duplicates.mirror_entries": "o jasima e ijo",
|
||||
"file.duration": "suli tenpo",
|
||||
"file.not_found": "mi ken ala alasa e ijo",
|
||||
"file.open_file": "open e ijo",
|
||||
"file.open_file_with": "o lukin e ijo kepeken...",
|
||||
"file.open_location.generic": "open e ijo lon ilo alasa",
|
||||
"file.open_location.mac": "o alasa lon ilo Finder",
|
||||
"file.open_location.windows": "o alasa lon ilo File Explorer",
|
||||
"folders_to_tags.close_all": "o pini e lukin pi ijo ale",
|
||||
"folders_to_tags.converting": "mi o pali e poki tan poki tomo",
|
||||
"folders_to_tags.description": "ni li pali e poki tan poki tona li pana e poki sin tawa ijo lon tomo.\n ilo ni li pali e anpa.",
|
||||
"folders_to_tags.open_all": "open e ale",
|
||||
"folders_to_tags.title": "o pali e poki tan poki tomo",
|
||||
"generic.add": "o pana",
|
||||
"generic.apply": "o pana",
|
||||
"generic.cancel": "o ala",
|
||||
"generic.copy": "o jo e sona sama",
|
||||
"generic.cut": "o lanpan",
|
||||
"generic.delete": "o weka",
|
||||
"generic.done": "pona",
|
||||
"generic.edit": "ante",
|
||||
"generic.navigation.back": "o tawa weka",
|
||||
"generic.navigation.next": "o tawa poka",
|
||||
"generic.paste": "o pana e sona sama",
|
||||
"generic.recent_libraries": "tomo pi tenpo poka",
|
||||
"help.visit_github": "o tawa linluwi GitHub Repository",
|
||||
"home.search": "alasa",
|
||||
"home.search_entries": "ijo alasa",
|
||||
"home.search_library": "o alasa lon tomo",
|
||||
"home.search_tags": "o alasa e poki",
|
||||
"home.thumbnail_size": "suli sitelen",
|
||||
"ignore_list.add_extension": "o pana e nimi anpa",
|
||||
"ignore_list.mode.exclude": "o kepeken ala",
|
||||
"ignore_list.mode.include": "o kepeken",
|
||||
"ignore_list.mode.label": "nasin kulupu",
|
||||
"ignore_list.title": "nimi lon nimi ijo anpa",
|
||||
"library.field.add": "pana e sona",
|
||||
"library.field.confirm_remove": "sina weka e sona poki \"{name}\". ni li pona anu seme?",
|
||||
"library.field.mixed_data": "sona ante",
|
||||
"library.field.remove": "weka e sona",
|
||||
"library.missing": "ma li lon ala",
|
||||
"library.name": "tomo",
|
||||
"library.refresh.scanning_preparing": "mi alasa e ijo sin lon tomo...\nmi kama pona...",
|
||||
"library.refresh.title": "mi kama jo e sin lon tomo",
|
||||
"library.scan_library.title": "mi o lukin e tomo",
|
||||
"macros.running.dialog.new_entries": "mi pali lon ijo sin {count}/{total}",
|
||||
"macros.running.dialog.title": "mi pali lon ijo sin",
|
||||
"menu.edit": "ante",
|
||||
"menu.edit.ignore_list": "o sona ala e ijo ni",
|
||||
"menu.file": "ijo",
|
||||
"menu.file.new_library": "o sin e tomo",
|
||||
"menu.file.open_create_library": "o open/sin e tomo",
|
||||
"menu.file.open_library": "o open e tomo",
|
||||
"menu.file.save_library": "o awen e sona tomo",
|
||||
"menu.help": "mi jo e toki seme",
|
||||
"menu.macros": "ilo pali",
|
||||
"menu.tools": "ilo",
|
||||
"menu.view": "o lukin",
|
||||
"menu.window": "lipu",
|
||||
"preview.no_selection": "ijo ala li anu",
|
||||
"settings.open_library_on_start": "ilo Tagstudio li open la o open e tomo ni",
|
||||
"settings.show_filenames_in_grid": "o sitelen e nimi ijo lon leko sitelen",
|
||||
"settings.show_recent_libraries": "o sitelen e tomo pi tenpo poka",
|
||||
"splash.opening_library": "mi open e tomo \"{library_path}\"...",
|
||||
"status.library_backup_success": "tomo sama li lon: \"{path}\" ({time_span})",
|
||||
"status.library_save_success": "tomo li awen li weka!",
|
||||
"status.library_search_query": "mi alasa e",
|
||||
"status.results": "jo",
|
||||
"status.results_found": "mi sona e ijo {count} ({time_span})",
|
||||
"tag.add": "o pana e poki",
|
||||
"tag.add_to_search": "pana tawa alasa",
|
||||
"tag.aliases": "nimi ante",
|
||||
"tag.color": "kule",
|
||||
"tag.name": "nimi",
|
||||
"tag.new": "poki sin",
|
||||
"tag.parent_tags": "poki mama",
|
||||
"tag.parent_tags.add": "o pana e poki mama",
|
||||
"tag.parent_tags.description": "alasa la, poki ni li ken sama poki mama.",
|
||||
"tag.search_for_tag": "o alasa e poki",
|
||||
"tag.shorthand": "nimi lili",
|
||||
"tag_manager.title": "poki tomo",
|
||||
"view.size.0": "lili a",
|
||||
"view.size.1": "lili",
|
||||
"view.size.2": "meso",
|
||||
"view.size.3": "suli",
|
||||
"view.size.4": "suli a"
|
||||
}
|
||||
@@ -1,91 +0,0 @@
|
||||
{
|
||||
"entries.duplicate.merge.label": "Yinelenen Kayıtlar Birleştiriliyor",
|
||||
"entries.duplicate.refresh": "Yinelenen Kayıtları Yenile",
|
||||
"entries.duplicates.description": "Yinelenen kayıtlar, diskinizde aynı dosyaya işaret eden birden fazla kayıt olarak tanımlanmaktadır. Bu kayıtları birleştirdiğinizde, yinelenen tüm kayıtların içerisindeki etiketler ve metadata bilgisi tek bir tane kayıt üzerinde birleştirilecektir. Bu, \"yinelenen dosyalar\" ile karıştırılmamalıdır. Yinelenen dosyalar, TagStudio'nun dışında birden fazla kere bulunan dosyalarınızdır.",
|
||||
"entries.mirror": "Yansıt",
|
||||
"entries.mirror.confirmation": "{count} kaydı yansıtmak istediğinden emin misin?",
|
||||
"entries.mirror.label": "{idx}/{total} Kayıt Yansıtılıyor...",
|
||||
"entries.mirror.title": "Kayıtlar Yansıtılıyor",
|
||||
"entries.tags": "Etiketler",
|
||||
"entries.unlinked.delete": "Kopuk Kayıtları Sil",
|
||||
"entries.unlinked.delete.confirm": "{count} tane kayıtları silmek istediğinden emin misin?",
|
||||
"entries.unlinked.delete.deleting": "Kayıtlar Siliniyor",
|
||||
"entries.unlinked.delete.deleting_count": "{idx}/{count} Kopuk Kayıt Siliniyor",
|
||||
"entries.unlinked.description": "Kütüphanenizdeki her bir kayıt, dizinlerinizden bir tane dosya ile eşleştirilmektedir. Eğer bir kayıta bağlı dosya TagStudio dışında taşınır veya silinirse, o dosya artık kopuk olarak sayılır. Kopuk kayıtlar dizinlerinizde arama yapılırken otomatik olarak tekrar eşleştirilebilir, manuel olarak sizin tarafınızdan eşleştirilebilir veya isteğiniz üzere silinebilir.",
|
||||
"entries.unlinked.refresh_all": "Tümünü Yenile",
|
||||
"entries.unlinked.relink.attempting": "{idx}/{missing_count} Kayıt Yeniden Eşleştirilmeye Çalışılıyor, {fixed_count} Başarıyla Yeniden Eşleştirildi",
|
||||
"entries.unlinked.relink.manual": "Manuel Yeniden Eşleştirme",
|
||||
"entries.unlinked.relink.title": "Kayıtlar Yeniden Eşleştiriliyor",
|
||||
"entries.unlinked.scanning": "Kütüphane Kopuk Kayıtlar için Taranıyor...",
|
||||
"entries.unlinked.search_and_relink": "Ara && Yeniden Eşleştir",
|
||||
"entries.unlinked.title": "Kopuk Kayıtları Düzelt",
|
||||
"file.date_created": "Oluşturulma Tarihi",
|
||||
"file.date_modified": "Değiştirilme Tarihi",
|
||||
"file.dimensions": "Ölçüler",
|
||||
"file.duplicates.dupeguru.advice": "Yansıtma işleminden sonra, DupeGuru'yu kullanarak istenmeyen dosyaları silebilirsin. İşlem sonrasında, kopuk kayıtları silmek için TagStudio'nun Araçlar menüsünden \"Kopuk Kayıtları Düzelt\" özelliğini kullanabilirsin.",
|
||||
"file.duplicates.dupeguru.file_extension": "DupeGuru Dosyaları (*.dupeguru)",
|
||||
"file.duplicates.dupeguru.load_file": "DupeGuru Dosyasını Yükle",
|
||||
"file.duplicates.dupeguru.no_file": "Seçili DupeGuru Dosyası Yok",
|
||||
"file.duplicates.dupeguru.open_file": "DupeGuru Sonuçlar Dosyasını Aç",
|
||||
"file.duplicates.fix": "Yinelenen Dosyaları Düzelt",
|
||||
"file.duplicates.matches": "Bulunan Yinelenen Dosyalar: %{count}",
|
||||
"file.duplicates.matches_uninitialized": "Bulunan Yinelenen Dosyalar: Yok",
|
||||
"file.duplicates.mirror.description": "Kayıt verilerini bulunan her bir yinelemeye yansıtır, alanları kopyalamadan veya silmeden tüm verileri birleştirir. Bu operasyon herhangi bir dosya veya veri silmeyecek.",
|
||||
"file.duplicates.mirror_entries": "Kayıtları Yansıt",
|
||||
"file.not_found": "Dosya bulunamadı:",
|
||||
"file.open_file": "Dosya aç",
|
||||
"file.open_location.generic": "Dosyayı Dosya Gezgininde Aç",
|
||||
"folders_to_tags.converting": "Klasörler Etiketlere Dönüştürülüyor",
|
||||
"folders_to_tags.description": "Klasörlerinin yapısına bakarak etiketler oluşturur ve bu etiketleri kayıtlarına uygular.\nAşağıdaki yapı, oluşturulacak tüm etiketleri ve o etiketlerin hangi kayıtlarına uygulanacağını göstermektedir.",
|
||||
"folders_to_tags.open_all": "Tümünü Aç",
|
||||
"folders_to_tags.title": "Klasörlerden Etiketler Oluştur",
|
||||
"generic.add": "Ekle",
|
||||
"generic.apply": "Uygula",
|
||||
"generic.cancel": "İptal",
|
||||
"generic.delete": "Sil",
|
||||
"generic.done": "Tamamlandı",
|
||||
"generic.edit": "Düzenle",
|
||||
"generic.recent_libraries": "Son Kütüphaneler",
|
||||
"home.search": "Ara",
|
||||
"home.search_entries": "library",
|
||||
"home.search_tags": "Etiketleri Araştır",
|
||||
"home.thumbnail_size": "Küçük Resim Boyutu",
|
||||
"ignore_list.add_extension": "Dosya Uzantısı Ekle",
|
||||
"ignore_list.mode.exclude": "Hariç Tut",
|
||||
"ignore_list.mode.include": "Dahil Et",
|
||||
"ignore_list.mode.label": "Listeleme Modu:",
|
||||
"ignore_list.title": "Dosya Uzantıları",
|
||||
"library.field.add": "Alan Ekle",
|
||||
"library.field.confirm_remove": "Bu \"{name}\" alanını silmek istediğinden emin misin?",
|
||||
"library.field.mixed_data": "Karışık Veri",
|
||||
"library.field.remove": "Alan Kaldır",
|
||||
"library.missing": "Lokasyon bulunamadı",
|
||||
"library.name": "Kütüphane",
|
||||
"library.refresh.scanning_preparing": "Yeni Dosyalar için Dizinler Taranıyor...\nHazırlanıyor...",
|
||||
"library.refresh.title": "Dizinler Yenileniyor",
|
||||
"library.scan_library.title": "Kütüphane Taranıyor",
|
||||
"macros.running.dialog.new_entries": "{count}/{total} Tane Yeni Kayıt Üzerinde Yapılandırılmış Makrolar Çalıştırılıyor",
|
||||
"macros.running.dialog.title": "Yeni Kayıtlar Üzerinde Makrolar Çalıştırılıyor",
|
||||
"menu.edit": "Düzenle",
|
||||
"menu.file": "Dosya",
|
||||
"menu.help": "Yardım",
|
||||
"menu.macros": "Makrolar",
|
||||
"menu.tools": "Araçlar",
|
||||
"menu.window": "Pencere",
|
||||
"preview.no_selection": "Hiçbir Öğe Seçilmedi",
|
||||
"status.library_backup_success": "Kütüphane Yedeklemesi Şuraya Kaydedildi: \"{path}\" ({time_span})",
|
||||
"status.library_save_success": "Kütüphane Kaydedildi ve Çıkış Yapıldı!",
|
||||
"status.library_search_query": "Kütüphane Aranıyor",
|
||||
"status.results": "Sonuçlar",
|
||||
"tag.add": "Etiket Ekle",
|
||||
"tag.add_to_search": "Aramaya Ekle",
|
||||
"tag.aliases": "Takma Adlar",
|
||||
"tag.color": "Renk",
|
||||
"tag.name": "İsim",
|
||||
"tag.new": "Yeni Etiket",
|
||||
"tag.parent_tags": "Üst Etiketler",
|
||||
"tag.parent_tags.add": "Üst Etiketler Ekle",
|
||||
"tag.search_for_tag": "Etiket Ara",
|
||||
"tag.shorthand": "Kısaltma",
|
||||
"tag_manager.title": "Kütüphane Etiketleri"
|
||||
}
|
||||
@@ -1 +0,0 @@
|
||||
{}
|
||||
@@ -1,215 +0,0 @@
|
||||
{
|
||||
"app.git": "Git提交更新",
|
||||
"app.pre_release": "預先發行",
|
||||
"app.title": "{base_title} - 文庫 '{library_dir}'",
|
||||
"drop_import.description": "以下檔案的檔名已經存在於文庫中",
|
||||
"drop_import.duplicates_choice.plural": "以下 {count} 個檔案的檔名已經存在於文庫中。",
|
||||
"drop_import.duplicates_choice.singular": "此檔案的檔名已經存在於文庫中。",
|
||||
"drop_import.progress.label.initial": "新的檔案匯入中...",
|
||||
"drop_import.progress.label.plural": "匯入新檔案...\n已匯入 {count} 個檔案.{suffix}",
|
||||
"drop_import.progress.label.singular": "匯入新檔案...\n已匯入一個檔案.{suffix}",
|
||||
"drop_import.progress.window_title": "匯入檔案",
|
||||
"drop_import.title": "檔案衝突",
|
||||
"edit.tag_manager": "標籤管理",
|
||||
"entries.duplicate.merge": "合併重複項目",
|
||||
"entries.duplicate.merge.label": "正在合併重複項目...",
|
||||
"entries.duplicate.refresh": "重新整理重複項目",
|
||||
"entries.duplicates.description": "重複的項目指的是多個項目皆指向同一個檔案。合併這些重複項目會合併所有項目的標籤和後設資料。重複檔案和重複項目不同,重複檔案是在Tag Studio外的重複檔案。",
|
||||
"entries.mirror": "&鏡像",
|
||||
"entries.mirror.confirmation": "您確定要鏡像以下 {count} 個項目?",
|
||||
"entries.mirror.label": "正在鏡像 {idx}/{total} 個項目...",
|
||||
"entries.mirror.title": "進行項目鏡像",
|
||||
"entries.mirror.window_title": "項目鏡像",
|
||||
"entries.tags": "標籤",
|
||||
"entries.unlinked.delete": "刪除未連結的項目",
|
||||
"entries.unlinked.delete.confirm": "您確定要刪除 {count} 個項目?",
|
||||
"entries.unlinked.delete.deleting": "正在刪除項目",
|
||||
"entries.unlinked.delete.deleting_count": "正在刪除 {idx}/{count} 個未連結的項目",
|
||||
"entries.unlinked.delete_alt": "刪除並解除項目連結",
|
||||
"entries.unlinked.missing_count.none": "未連結項目:無",
|
||||
"entries.unlinked.missing_count.some": "未連結項目:{count}",
|
||||
"entries.unlinked.refresh_all": "&重新整理",
|
||||
"entries.unlinked.relink.attempting": "正在重新連結{idx}/{missing_count}個項目, 成功重新連結{fixed_count}",
|
||||
"entries.unlinked.relink.manual": "&手動重新連結",
|
||||
"entries.unlinked.relink.title": "正在重新連結項目",
|
||||
"entries.unlinked.scanning": "正在掃描資料庫以尋找未連結的項目...",
|
||||
"entries.unlinked.search_and_relink": "&搜尋並重新連結",
|
||||
"entries.unlinked.title": "修復未連結項目",
|
||||
"field.copy": "複製欄位",
|
||||
"field.edit": "編輯欄位",
|
||||
"field.paste": "貼上欄位",
|
||||
"file.date_added": "新增日期",
|
||||
"file.date_created": "建立日期",
|
||||
"file.date_modified": "更改日期",
|
||||
"file.dimensions": "尺寸",
|
||||
"file.duplicates.description": "TagStudio支援匯入DupeGuru結果,以管理重複檔案。",
|
||||
"file.duplicates.dupeguru.advice": "在鏡像後之後,你可以使用DupeGuru刪除不要的檔案。檔案刪除後,使用TagStudio內的 “修復未連結項目” 以移除未鏈結的項目。",
|
||||
"file.duplicates.dupeguru.file_extension": "DupeGuru 檔案 (*.dupeguru)",
|
||||
"file.duplicates.dupeguru.load_file": "&匯入 DupeGuru 檔案",
|
||||
"file.duplicates.dupeguru.no_file": "尚未選擇 DupeGuru 檔案",
|
||||
"file.duplicates.dupeguru.open_file": "開啟 DupeGuru 結果檔案",
|
||||
"file.duplicates.fix": "修復重複檔案",
|
||||
"file.duplicates.matches": "重複檔案: {count}",
|
||||
"file.duplicates.matches_uninitialized": "重複檔案: 無",
|
||||
"file.duplicates.mirror.description": "將項目資料鏡像至各複寫組,在不刪除或是重複欄位的狀態下合併所有資料。此動作不會刪除任何欄位或資料。",
|
||||
"file.duplicates.mirror_entries": "&項目鏡像",
|
||||
"file.duration": "長度",
|
||||
"file.not_found": "找不到檔案",
|
||||
"file.open_file": "開啟檔案",
|
||||
"file.open_file_with": "開啟檔案",
|
||||
"file.open_location.generic": "檔案總管內顯示",
|
||||
"file.open_location.mac": "在Finder顯示",
|
||||
"file.open_location.windows": "在檔案總管內顯示",
|
||||
"folders_to_tags.close_all": "關閉全部",
|
||||
"folders_to_tags.converting": "正在將資料夾轉換成標籤",
|
||||
"folders_to_tags.description": "依照你的資料夾結構建立標籤並套用到項目上。\n. 以下的結構提供所有會建立的標籤和會套用到的項目上。",
|
||||
"folders_to_tags.open_all": "開啟全部",
|
||||
"folders_to_tags.title": "從資料夾建立標籤",
|
||||
"generic.add": "新增",
|
||||
"generic.apply": "套用",
|
||||
"generic.apply_alt": "&套用",
|
||||
"generic.cancel": "取消",
|
||||
"generic.cancel_alt": "&取消",
|
||||
"generic.close": "關閉",
|
||||
"generic.continue": "繼續",
|
||||
"generic.copy": "複製",
|
||||
"generic.cut": "剪下",
|
||||
"generic.delete": "刪除",
|
||||
"generic.delete_alt": "&刪除",
|
||||
"generic.done": "完成",
|
||||
"generic.done_alt": "&完成",
|
||||
"generic.edit": "編輯",
|
||||
"generic.edit_alt": "&編輯",
|
||||
"generic.filename": "檔案名稱",
|
||||
"generic.navigation.back": "回到",
|
||||
"generic.navigation.next": "下一個",
|
||||
"generic.overwrite": "覆蓋",
|
||||
"generic.overwrite_alt": "&覆蓋",
|
||||
"generic.paste": "貼上",
|
||||
"generic.recent_libraries": "最近使用資料庫",
|
||||
"generic.rename": "重新命名",
|
||||
"generic.rename_alt": "&重新命名",
|
||||
"generic.save": "儲存",
|
||||
"generic.skip": "略過",
|
||||
"generic.skip_alt": "&略過",
|
||||
"help.visit_github": "訪問 GitHub 儲存庫",
|
||||
"home.search": "搜尋",
|
||||
"home.search_entries": "搜尋項目",
|
||||
"home.search_library": "搜尋資料庫",
|
||||
"home.search_tags": "搜尋標籤",
|
||||
"home.thumbnail_size": "縮圖大小",
|
||||
"home.thumbnail_size.extra_large": "特大縮圖",
|
||||
"home.thumbnail_size.large": "大縮圖",
|
||||
"home.thumbnail_size.medium": "中縮圖",
|
||||
"home.thumbnail_size.mini": "迷你縮圖",
|
||||
"home.thumbnail_size.small": "小縮圖",
|
||||
"ignore_list.add_extension": "&新增擴充功能",
|
||||
"ignore_list.mode.exclude": "排除",
|
||||
"ignore_list.mode.include": "包含",
|
||||
"ignore_list.mode.label": "條列模式:",
|
||||
"ignore_list.title": "檔案格式",
|
||||
"json_migration.checking_for_parity": "檢查奇偶性中...",
|
||||
"json_migration.creating_database_tables": "建立SQL資料庫表格中...",
|
||||
"json_migration.description": "<br>開始並預覽文庫移轉作業。 在你點擊 “完成移轉” 前 <i>不會</i> 啟用被移轉的文庫。 <br><br>Library data should either have matching values or feature a \"Matched\" label. Values that do not match will be displayed in red and feature a \"<b>(!)</b>\" symbol next to them.<br><center><i>大文庫可能需要幾分鐘移轉。</i></center>",
|
||||
"json_migration.discrepancies_found": "發現文庫差異",
|
||||
"json_migration.discrepancies_found.description": "在原始檔案和轉換後的資料庫格式中發現差異。請檢查並確認是否繼續執行移轉。",
|
||||
"json_migration.finish_migration": "完成移轉",
|
||||
"json_migration.heading.aliases": "別名:",
|
||||
"json_migration.heading.colors": "顏色:",
|
||||
"json_migration.heading.differ": "差異",
|
||||
"json_migration.heading.entires": "項目:",
|
||||
"json_migration.heading.extension_list_type": "擴展列表類型:",
|
||||
"json_migration.heading.fields": "欄位:",
|
||||
"json_migration.heading.file_extension_list": "檔案Extension列表:",
|
||||
"json_migration.heading.match": "配對",
|
||||
"json_migration.heading.parent_tags": "上層標籤:",
|
||||
"json_migration.heading.paths": "路徑:",
|
||||
"json_migration.heading.shorthands": "簡寫:",
|
||||
"json_migration.heading.tags": "標籤:",
|
||||
"json_migration.info.description": "透過TagStudio <b>9.4或更舊版本</b> 建立的文庫需要移轉到新的 <b>v9.5+</b> 版本。<br><h2>須知項目:</h2><ul><li>現有的文庫資料 <b><i>不會</i></b> 被刪除</li><li>你的個人資料 <b><i>不會</i></b> 被刪除,移動,或是更改</li><li>TagStudio v9.5+以上的檔案格式並不向下相容</li></ul>",
|
||||
"json_migration.migrating_files_entries": "移轉 {entries:,d} 個項目中...",
|
||||
"json_migration.migration_complete": "移轉完成!",
|
||||
"json_migration.migration_complete_with_discrepancies": "移轉完畢,發現差異",
|
||||
"json_migration.start_and_preview": "開始並預覽",
|
||||
"json_migration.title": "儲存格式移轉:\"{path}\"",
|
||||
"json_migration.title.new_lib": "<h2>v9.5+ 文庫 </h2>",
|
||||
"json_migration.title.old_lib": "<h2>v9.4 文庫</h2>",
|
||||
"landing.open_create_library": "開啟/ 建立文庫 {shortcut}",
|
||||
"library.field.add": "新增欄位",
|
||||
"library.field.confirm_remove": "您確定要移除此 \"{name}\" 欄位?",
|
||||
"library.field.mixed_data": "混合資料",
|
||||
"library.field.remove": "移除欄位",
|
||||
"library.missing": "找不到資料庫路徑",
|
||||
"library.name": "資料庫",
|
||||
"library.refresh.scanning.plural": "掃描並搜尋新項目...\n已搜尋{searched_count} 個檔案,找到 {found_count} 個新檔案",
|
||||
"library.refresh.scanning.singular": "掃描並搜尋新檔案...\n已搜尋{searched_count} 個檔案,找到 {found_count} 個新檔案",
|
||||
"library.refresh.scanning_preparing": "正在掃描目錄中的新檔案...\n準備中...",
|
||||
"library.refresh.title": "重新整理目錄中",
|
||||
"library.scan_library.title": "掃描資料庫中",
|
||||
"macros.running.dialog.new_entries": "對{count}/{total} 個新項目執行現有巨集",
|
||||
"macros.running.dialog.title": "針對新項目執行巨集",
|
||||
"media_player.autoplay": "自動播放",
|
||||
"menu.edit": "編輯",
|
||||
"menu.edit.ignore_list": "略過檔案和資料夾",
|
||||
"menu.edit.manage_file_extensions": "管理副檔名",
|
||||
"menu.edit.manage_tags": "標籤管理",
|
||||
"menu.edit.new_tag": "新 &標籤",
|
||||
"menu.file": "&檔案",
|
||||
"menu.file.close_library": "&關閉文庫",
|
||||
"menu.file.new_library": "新資料庫",
|
||||
"menu.file.open_create_library": "&開啟/建立文庫",
|
||||
"menu.file.open_library": "開啟資料庫",
|
||||
"menu.file.refresh_directories": "&重新整理目錄",
|
||||
"menu.file.save_backup": "&儲存文庫備份",
|
||||
"menu.file.save_library": "儲存儲存庫",
|
||||
"menu.help": "&提示",
|
||||
"menu.macros": "&巨集",
|
||||
"menu.macros.folders_to_tags": "檔案夾到標籤",
|
||||
"menu.select": "選擇",
|
||||
"menu.tools": "&工具",
|
||||
"menu.tools.fix_duplicate_files": "修復重複 &檔案",
|
||||
"menu.tools.fix_unlinked_entries": "修復並解除項目連結",
|
||||
"menu.view": "&檢視",
|
||||
"menu.window": "選單",
|
||||
"preview.no_selection": "尚未選擇物件",
|
||||
"select.all": "全選",
|
||||
"select.clear": "清除選項",
|
||||
"settings.open_library_on_start": "在啟動時開啟儲存庫",
|
||||
"settings.show_filenames_in_grid": "在Grid顯示檔案名稱",
|
||||
"settings.show_recent_libraries": "顯示最近使用過儲存庫",
|
||||
"splash.opening_library": "開啟文庫 \"{library_path}\"...",
|
||||
"status.library_backup_in_progress": "儲存文庫備份中...",
|
||||
"status.library_backup_success": "文庫備份路徑:\"{path}\" ({time_span})",
|
||||
"status.library_closed": "已關閉文庫({time_span})",
|
||||
"status.library_closing": "關閉文庫中...",
|
||||
"status.library_save_success": "資料庫保存成功!",
|
||||
"status.library_search_query": "正在搜尋文庫...",
|
||||
"status.results": "結果",
|
||||
"status.results_found": "用({time_span})找到 {count} 個結果",
|
||||
"tag.add": "新增標籤",
|
||||
"tag.add.plural": "新增標籤",
|
||||
"tag.add_to_search": "新增到搜尋",
|
||||
"tag.aliases": "別名",
|
||||
"tag.color": "顏色",
|
||||
"tag.confirm_delete": "你確定要刪除此標籤 \"{tag_name}\"?",
|
||||
"tag.create": "建立標籤",
|
||||
"tag.edit": "編輯標籤",
|
||||
"tag.name": "名稱",
|
||||
"tag.new": "新標籤",
|
||||
"tag.parent_tags": "上層標籤",
|
||||
"tag.parent_tags.add": "新增上層標籤",
|
||||
"tag.parent_tags.description": "此標籤可以在搜尋時替代以下的上層標籤。",
|
||||
"tag.remove": "移除標籤",
|
||||
"tag.search_for_tag": "尋找標籤",
|
||||
"tag.shorthand": "速記",
|
||||
"tag.tag_name_required": "標籤名稱(必要)",
|
||||
"tag_manager.title": "儲存庫標籤",
|
||||
"view.size.0": "迷你",
|
||||
"view.size.1": "小",
|
||||
"view.size.2": "中",
|
||||
"view.size.3": "大",
|
||||
"view.size.4": "特大",
|
||||
"window.message.error_opening_library": "開啟文庫時錯誤了。",
|
||||
"window.title.error": "錯誤",
|
||||
"window.title.open_create_library": "開啟/建立文庫"
|
||||
}
|
||||
3817
tagstudio/src/cli/ts_cli.py
Normal file
@@ -1,29 +1,59 @@
|
||||
# Copyright (C) 2025
|
||||
# Licensed under the GPL-3.0 License.
|
||||
# Created for TagStudio: https://github.com/CyanVoxel/TagStudio
|
||||
|
||||
VERSION: str = "9.5.1" # Major.Minor.Patch
|
||||
VERSION: str = "9.4.0" # Major.Minor.Patch
|
||||
VERSION_BRANCH: str = "" # Usually "" or "Pre-Release"
|
||||
|
||||
# The folder & file names where TagStudio keeps its data relative to a library.
|
||||
TS_FOLDER_NAME: str = ".TagStudio"
|
||||
BACKUP_FOLDER_NAME: str = "backups"
|
||||
COLLAGE_FOLDER_NAME: str = "collages"
|
||||
THUMB_CACHE_NAME: str = "thumbs"
|
||||
LIBRARY_FILENAME: str = "ts_library.json"
|
||||
|
||||
FONT_SAMPLE_TEXT: str = (
|
||||
"""ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!?@$%(){}[]"""
|
||||
)
|
||||
FONT_SAMPLE_SIZES: list[int] = [10, 15, 20]
|
||||
|
||||
# NOTE: These were the field IDs used for the "Tags", "Content Tags", and "Meta Tags" fields inside
|
||||
# the legacy JSON database. These are used to help migrate libraries from JSON to SQLite.
|
||||
LEGACY_TAG_FIELD_IDS: set[int] = {6, 7, 8}
|
||||
BOX_FIELDS = ["tag_box", "text_box"]
|
||||
TEXT_FIELDS = ["text_line", "text_box"]
|
||||
DATE_FIELDS = ["datetime"]
|
||||
|
||||
TAG_ARCHIVED = 0
|
||||
TAG_COLORS = [
|
||||
"",
|
||||
"black",
|
||||
"dark gray",
|
||||
"gray",
|
||||
"light gray",
|
||||
"white",
|
||||
"light pink",
|
||||
"pink",
|
||||
"red",
|
||||
"red orange",
|
||||
"orange",
|
||||
"yellow orange",
|
||||
"yellow",
|
||||
"lime",
|
||||
"light green",
|
||||
"mint",
|
||||
"green",
|
||||
"teal",
|
||||
"cyan",
|
||||
"light blue",
|
||||
"blue",
|
||||
"blue violet",
|
||||
"violet",
|
||||
"purple",
|
||||
"lavender",
|
||||
"berry",
|
||||
"magenta",
|
||||
"salmon",
|
||||
"auburn",
|
||||
"dark brown",
|
||||
"brown",
|
||||
"light brown",
|
||||
"blonde",
|
||||
"peach",
|
||||
"warm gray",
|
||||
"cool gray",
|
||||
"olive",
|
||||
]
|
||||
TAG_FAVORITE = 1
|
||||
TAG_META = 2
|
||||
RESERVED_TAG_START = 0
|
||||
RESERVED_TAG_END = 999
|
||||
|
||||
RESERVED_NAMESPACE_PREFIX = "tagstudio"
|
||||
TAG_ARCHIVED = 0
|
||||
|
||||
@@ -1,40 +0,0 @@
|
||||
from pathlib import Path
|
||||
|
||||
import structlog
|
||||
from PySide6.QtCore import QSettings
|
||||
from src.core.constants import TS_FOLDER_NAME
|
||||
from src.core.enums import SettingItems
|
||||
from src.core.library.alchemy.library import LibraryStatus
|
||||
|
||||
logger = structlog.get_logger(__name__)
|
||||
|
||||
|
||||
class DriverMixin:
|
||||
settings: QSettings
|
||||
|
||||
def evaluate_path(self, open_path: str | None) -> LibraryStatus:
|
||||
"""Check if the path of library is valid."""
|
||||
library_path: Path | None = None
|
||||
if open_path:
|
||||
library_path = Path(open_path).expanduser()
|
||||
if not library_path.exists():
|
||||
logger.error("Path does not exist.", open_path=open_path)
|
||||
return LibraryStatus(success=False, message="Path does not exist.")
|
||||
elif self.settings.value(
|
||||
SettingItems.START_LOAD_LAST, defaultValue=True, type=bool
|
||||
) and self.settings.value(SettingItems.LAST_LIBRARY):
|
||||
library_path = Path(str(self.settings.value(SettingItems.LAST_LIBRARY)))
|
||||
if not (library_path / TS_FOLDER_NAME).exists():
|
||||
logger.error(
|
||||
"TagStudio folder does not exist.",
|
||||
library_path=library_path,
|
||||
ts_folder=TS_FOLDER_NAME,
|
||||
)
|
||||
self.settings.setValue(SettingItems.LAST_LIBRARY, "")
|
||||
# dont consider this a fatal error, just skip opening the library
|
||||
library_path = None
|
||||
|
||||
return LibraryStatus(
|
||||
success=True,
|
||||
library_path=library_path,
|
||||
)
|
||||
@@ -1,10 +1,4 @@
|
||||
# Copyright (C) 2025
|
||||
# Licensed under the GPL-3.0 License.
|
||||
# Created for TagStudio: https://github.com/CyanVoxel/TagStudio
|
||||
|
||||
import enum
|
||||
from typing import Any
|
||||
from uuid import uuid4
|
||||
|
||||
|
||||
class SettingItems(str, enum.Enum):
|
||||
@@ -14,62 +8,34 @@ class SettingItems(str, enum.Enum):
|
||||
LAST_LIBRARY = "last_library"
|
||||
LIBS_LIST = "libs_list"
|
||||
WINDOW_SHOW_LIBS = "window_show_libs"
|
||||
SHOW_FILENAMES = "show_filenames"
|
||||
AUTOPLAY = "autoplay_videos"
|
||||
THUMB_CACHE_SIZE_LIMIT = "thumb_cache_size_limit"
|
||||
LANGUAGE = "language"
|
||||
|
||||
|
||||
class Theme(str, enum.Enum):
|
||||
COLOR_BG_DARK = "#65000000"
|
||||
COLOR_BG_LIGHT = "#22000000"
|
||||
COLOR_DARK_LABEL = "#DD000000"
|
||||
COLOR_BG = "#65000000"
|
||||
|
||||
COLOR_HOVER = "#65444444"
|
||||
COLOR_PRESSED = "#65777777"
|
||||
COLOR_DISABLED_BG = "#30000000"
|
||||
COLOR_FORBIDDEN = "#65F39CAA"
|
||||
COLOR_FORBIDDEN_BG = "#65440D12"
|
||||
COLOR_HOVER = "#65AAAAAA"
|
||||
COLOR_PRESSED = "#65EEEEEE"
|
||||
COLOR_DISABLED = "#65F39CAA"
|
||||
COLOR_DISABLED_BG = "#65440D12"
|
||||
|
||||
|
||||
class OpenStatus(enum.IntEnum):
|
||||
NOT_FOUND = 0
|
||||
SUCCESS = 1
|
||||
CORRUPTED = 2
|
||||
class SearchMode(int, enum.Enum):
|
||||
"""Operational modes for item searching."""
|
||||
|
||||
AND = 0
|
||||
OR = 1
|
||||
|
||||
|
||||
class MacroID(enum.Enum):
|
||||
AUTOFILL = "autofill"
|
||||
SIDECAR = "sidecar"
|
||||
BUILD_URL = "build_url"
|
||||
MATCH = "match"
|
||||
CLEAN_URL = "clean_url"
|
||||
|
||||
|
||||
class DefaultEnum(enum.Enum):
|
||||
"""Allow saving multiple identical values in property called .default."""
|
||||
|
||||
default: Any
|
||||
|
||||
def __new__(cls, value):
|
||||
# Create the enum instance
|
||||
obj = object.__new__(cls)
|
||||
# make value random
|
||||
obj._value_ = uuid4()
|
||||
# assign the actual value into .default property
|
||||
obj.default = value
|
||||
return obj
|
||||
|
||||
@property
|
||||
def value(self):
|
||||
raise AttributeError("access the value via .default property instead")
|
||||
|
||||
|
||||
class LibraryPrefs(DefaultEnum):
|
||||
"""Library preferences with default value accessible via .default property."""
|
||||
|
||||
IS_EXCLUDE_LIST = True
|
||||
EXTENSION_LIST: list[str] = [".json", ".xmp", ".aae"]
|
||||
PAGE_SIZE: int = 500
|
||||
DB_VERSION: int = 8
|
||||
class FieldID(int, enum.Enum):
|
||||
TITLE = 0
|
||||
AUTHOR = 1
|
||||
ARTIST = 2
|
||||
DESCRIPTION = 4
|
||||
NOTES = 5
|
||||
TAGS = 6
|
||||
CONTENT_TAGS = 7
|
||||
META_TAGS = 8
|
||||
DATE_PUBLISHED = 14
|
||||
SOURCE = 21
|
||||
|
||||
@@ -1,6 +0,0 @@
|
||||
# Copyright (C) 2024 Travis Abendshien (CyanVoxel).
|
||||
# Licensed under the GPL-3.0 License.
|
||||
# Created for TagStudio: https://github.com/CyanVoxel/TagStudio
|
||||
|
||||
|
||||
class NoRendererError(Exception): ...
|
||||