Compare commits
113 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
58ae734fc2 | ||
|
|
54b2779b79 | ||
|
|
df26e12db6 | ||
|
|
343d89c032 | ||
|
|
49c2d4d115 | ||
|
|
58aefc928d | ||
|
|
70d8902737 | ||
|
|
78eeebf8e6 | ||
|
|
585330b179 | ||
|
|
5b1ac27058 | ||
|
|
bcc36d14a1 | ||
|
|
22f5e05060 | ||
|
|
e510e733cd | ||
|
|
d0a06739d8 | ||
|
|
26c43617d1 | ||
|
|
0a89c7ffc4 | ||
|
|
7097cf6319 | ||
|
|
912a13ea0d | ||
|
|
cb391342d7 | ||
|
|
305889f32b | ||
|
|
f1027d7807 | ||
|
|
2806ac6eb4 | ||
|
|
cc1fecfffd | ||
|
|
e02817362c | ||
|
|
1b0484fc46 | ||
|
|
6fe214a784 | ||
|
|
e18a9f84a4 | ||
|
|
59bb727636 | ||
|
|
20e0c03b39 | ||
|
|
6d1567cf44 | ||
|
|
dc3f53a973 | ||
|
|
dad7cf47b4 | ||
|
|
165b91b068 | ||
|
|
8211afb726 | ||
|
|
2cccef174a | ||
|
|
9bbef4a97b | ||
|
|
10c2bda3a9 | ||
|
|
cf9e04c8ec | ||
|
|
d6887117ac | ||
|
|
3b11be2859 | ||
|
|
d7f52739e8 | ||
|
|
71ea46d95e | ||
|
|
e2afc43506 | ||
|
|
6aed1180e7 | ||
|
|
476b735e3c | ||
|
|
7ad12c7f33 | ||
|
|
60729a091a | ||
|
|
d2bad1d553 | ||
|
|
3e31ad51be | ||
|
|
fbeb4664f7 | ||
|
|
4ee8a30a5a | ||
|
|
6243bce46c | ||
|
|
98b72fdb9b | ||
|
|
5e901e4d21 | ||
|
|
66490d5db4 | ||
|
|
2b839088c7 | ||
|
|
28d3d3e679 | ||
|
|
2de30e34f4 | ||
|
|
2ff71b0d27 | ||
|
|
cdb45364c3 | ||
|
|
8ba338fbe1 | ||
|
|
ce84f9c755 | ||
|
|
d1e74a28d9 | ||
|
|
78a2a9e666 | ||
|
|
53f5643994 | ||
|
|
4ee634766d | ||
|
|
bab739efbd | ||
|
|
8568ec838a | ||
|
|
4cbb18aabc | ||
|
|
3fb60aca4f | ||
|
|
19bbdebdf7 | ||
|
|
bc66b1a556 | ||
|
|
4762fd83d4 | ||
|
|
c27c12d975 | ||
|
|
0abbd85134 | ||
|
|
af1f00dff9 | ||
|
|
35b4c9d375 | ||
|
|
74da15e20d | ||
|
|
efc7fdb669 | ||
|
|
a75f368d5b | ||
|
|
a3b6095b61 | ||
|
|
7ca6f80ed2 | ||
|
|
f1b8a7ab54 | ||
|
|
079aa13edb | ||
|
|
67bac9ff59 | ||
|
|
0d80ae3a91 | ||
|
|
b1b215f083 | ||
|
|
f55c80eadf | ||
|
|
c81bb2b70a | ||
|
|
5fa9704a65 | ||
|
|
60d39a7d1f | ||
|
|
13564fbc17 | ||
|
|
77a5820c3c | ||
|
|
b790354f9a | ||
|
|
7948819e0c | ||
|
|
5cd13227ad | ||
|
|
36dc7bd924 | ||
|
|
6bd7c6c06d | ||
|
|
e9b0840f01 | ||
|
|
a8b01dc21a | ||
|
|
a815592954 | ||
|
|
f4475549d6 | ||
|
|
a6eb227330 | ||
|
|
343087e2b4 | ||
|
|
66b2ad7939 | ||
|
|
57a7103d75 | ||
|
|
23b836ffbb | ||
|
|
e54cf914d7 | ||
|
|
fa57853bd2 | ||
|
|
ddd4ec2d9e | ||
|
|
1812e8811b | ||
|
|
1d37d8cac0 | ||
|
|
19da705fcb |
2
.github/workflows/build-mobile.yml
vendored
2
.github/workflows/build-mobile.yml
vendored
@@ -45,7 +45,7 @@ jobs:
|
|||||||
uses: subosito/flutter-action@v2
|
uses: subosito/flutter-action@v2
|
||||||
with:
|
with:
|
||||||
channel: "stable"
|
channel: "stable"
|
||||||
flutter-version: "3.10.5"
|
flutter-version: "3.13.0"
|
||||||
cache: true
|
cache: true
|
||||||
|
|
||||||
- name: Create the Keystore
|
- name: Create the Keystore
|
||||||
|
|||||||
4
.github/workflows/docker.yml
vendored
4
.github/workflows/docker.yml
vendored
@@ -42,7 +42,7 @@ jobs:
|
|||||||
uses: docker/setup-qemu-action@v2.2.0
|
uses: docker/setup-qemu-action@v2.2.0
|
||||||
|
|
||||||
- name: Set up Docker Buildx
|
- name: Set up Docker Buildx
|
||||||
uses: docker/setup-buildx-action@v2.9.1
|
uses: docker/setup-buildx-action@v2.10.0
|
||||||
# Workaround to fix error:
|
# Workaround to fix error:
|
||||||
# failed to push: failed to copy: io: read/write on closed pipe
|
# failed to push: failed to copy: io: read/write on closed pipe
|
||||||
# See https://github.com/docker/build-push-action/issues/761
|
# See https://github.com/docker/build-push-action/issues/761
|
||||||
@@ -126,7 +126,7 @@ jobs:
|
|||||||
uses: docker/setup-qemu-action@v2.2.0
|
uses: docker/setup-qemu-action@v2.2.0
|
||||||
|
|
||||||
- name: Set up Docker Buildx
|
- name: Set up Docker Buildx
|
||||||
uses: docker/setup-buildx-action@v2.9.1
|
uses: docker/setup-buildx-action@v2.10.0
|
||||||
# Workaround to fix error:
|
# Workaround to fix error:
|
||||||
# failed to push: failed to copy: io: read/write on closed pipe
|
# failed to push: failed to copy: io: read/write on closed pipe
|
||||||
# See https://github.com/docker/build-push-action/issues/761
|
# See https://github.com/docker/build-push-action/issues/761
|
||||||
|
|||||||
2
.github/workflows/static_analysis.yml
vendored
2
.github/workflows/static_analysis.yml
vendored
@@ -23,7 +23,7 @@ jobs:
|
|||||||
uses: subosito/flutter-action@v2
|
uses: subosito/flutter-action@v2
|
||||||
with:
|
with:
|
||||||
channel: "stable"
|
channel: "stable"
|
||||||
flutter-version: "3.10.5"
|
flutter-version: "3.13.0"
|
||||||
|
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: dart pub get
|
run: dart pub get
|
||||||
|
|||||||
3
.github/workflows/test.yml
vendored
3
.github/workflows/test.yml
vendored
@@ -149,7 +149,7 @@ jobs:
|
|||||||
uses: subosito/flutter-action@v2
|
uses: subosito/flutter-action@v2
|
||||||
with:
|
with:
|
||||||
channel: "stable"
|
channel: "stable"
|
||||||
flutter-version: "3.10.5"
|
flutter-version: "3.13.0"
|
||||||
- name: Run tests
|
- name: Run tests
|
||||||
working-directory: ./mobile
|
working-directory: ./mobile
|
||||||
run: flutter test -j 1
|
run: flutter test -j 1
|
||||||
@@ -171,6 +171,7 @@ jobs:
|
|||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: |
|
run: |
|
||||||
poetry install --with dev
|
poetry install --with dev
|
||||||
|
poetry run pip install --no-deps -r requirements.txt
|
||||||
- name: Lint with ruff
|
- name: Lint with ruff
|
||||||
run: |
|
run: |
|
||||||
poetry run ruff check --format=github app
|
poetry run ruff check --format=github app
|
||||||
|
|||||||
@@ -28,7 +28,8 @@
|
|||||||
|
|
||||||
- ⚠️ The project is under **very active** development.
|
- ⚠️ The project is under **very active** development.
|
||||||
- ⚠️ Expect bugs and breaking changes.
|
- ⚠️ Expect bugs and breaking changes.
|
||||||
- ⚠️ **Do not use the app as the only way to store your photos and videos!**
|
- ⚠️ **Do not use the app as the only way to store your photos and videos.**
|
||||||
|
- ⚠️ Always follow [3-2-1](https://www.backblaze.com/blog/the-3-2-1-backup-strategy/) backup plan for your precious photos and videos!
|
||||||
|
|
||||||
## Content
|
## Content
|
||||||
|
|
||||||
|
|||||||
@@ -13,7 +13,7 @@
|
|||||||
</p>
|
</p>
|
||||||
<h3 align="center">Immich - 高性能的自托管照片和视频备份方案</h3>
|
<h3 align="center">Immich - 高性能的自托管照片和视频备份方案</h3>
|
||||||
<p align="center">
|
<p align="center">
|
||||||
请注意: 此README不是由Immich团队维护, 这意味着它在某一时间点不会被更新,因为我们是依靠贡献者来更新的。感谢理解。
|
请注意: 此 README 不是由 Immich 团队维护, 而是依靠贡献者来更新的,这意味着它可能并不会被及时更新。感谢理解。
|
||||||
</p>
|
</p>
|
||||||
<br/>
|
<br/>
|
||||||
<a href="https://immich.app">
|
<a href="https://immich.app">
|
||||||
@@ -31,29 +31,31 @@
|
|||||||
|
|
||||||
## 免责声明
|
## 免责声明
|
||||||
|
|
||||||
- ⚠️ 本项目正在 **非常活跃** 的开发中。
|
- ⚠️ 本项目正在 **非常活跃** 地开发中。
|
||||||
- ⚠️ 可能存在bug或者重大变更。
|
- ⚠️ 可能存在 bug 或者随时有重大变更。
|
||||||
- ⚠️ **不要把本软件作为你存储照片或视频的唯一方式!**
|
- ⚠️ **不要把本软件作为您存储照片或视频的唯一方式。**
|
||||||
|
- ⚠️ 为了您宝贵的照片与视频,始终遵守 [3-2-1](https://www.backblaze.com/blog/the-3-2-1-backup-strategy/) 备份方案!
|
||||||
|
|
||||||
## 目录
|
## 目录
|
||||||
|
|
||||||
- [官方文档](https://immich.app/docs/overview/introduction)
|
- [官方文档](https://immich.app/docs)
|
||||||
|
- [路线图](https://github.com/orgs/immich-app/projects/1)
|
||||||
- [示例](#示例)
|
- [示例](#示例)
|
||||||
- [功能特性](#功能特性)
|
- [功能特性](#功能特性)
|
||||||
- [介绍](https://immich.app/docs/overview/introduction)
|
- [介绍](https://immich.app/docs/overview/introduction)
|
||||||
- [安装](https://immich.app/docs/install/requirements)
|
- [安装](https://immich.app/docs/install/requirements)
|
||||||
- [贡献指南](https://immich.app/docs/overview/support-the-project)
|
- [贡献指南](https://immich.app/docs/overview/support-the-project)
|
||||||
- [支持本项目](#support-the-project)
|
- [支持本项目](#支持本项目)
|
||||||
- [已知问题](#known-issues)
|
|
||||||
|
|
||||||
## 官方文档
|
## 官方文档
|
||||||
|
|
||||||
你可以在 https://immich.app/ 找到包含安装手册的官方文档.
|
您可以在 https://immich.app/ 找到官方文档(包含安装手册)。
|
||||||
|
|
||||||
## 示例
|
## 示例
|
||||||
|
|
||||||
你可以在 https://demo.immich.app 访问示例.
|
您可以在 https://demo.immich.app 访问示例。
|
||||||
|
|
||||||
在移动端, 你可以使用 `https://demo.immich.app/api`获取`服务终端链接`
|
在移动端, 您可以使用 `https://demo.immich.app/api` 获取 `服务终端链接`
|
||||||
|
|
||||||
```bash title="示例认证信息"
|
```bash title="示例认证信息"
|
||||||
认证信息
|
认证信息
|
||||||
@@ -62,57 +64,52 @@
|
|||||||
```
|
```
|
||||||
|
|
||||||
```
|
```
|
||||||
规格: 甲骨文免费虚拟机套餐-阿姆斯特丹 4核 2.4Ghz ARM64 CPU, 24GB RAM。
|
规格: 甲骨文免费虚拟机套餐——阿姆斯特丹 4核 2.4Ghz ARM64 CPU, 24GB RAM。
|
||||||
```
|
```
|
||||||
|
|
||||||
# 功能特性
|
# 功能特性
|
||||||
|
|
||||||
| 功能特性 | 移动端 | 网页端 |
|
| 功能特性 | 移动端 | 网页端 |
|
||||||
| ------------------------------------------- | ------- | --- |
|
| ------------------------------------------- | ------- | --- |
|
||||||
| 上传并查看照片和视频 | 是 | 是 |
|
| 上传并查看照片和视频 | 是 | 是 |
|
||||||
| 软件运行时自动备份 | 是 | N/A |
|
| 软件运行时自动备份 | 是 | N/A |
|
||||||
| 选择需要备份的相册 | 是 | N/A |
|
| 选择需要备份的相册 | 是 | N/A |
|
||||||
| 下载照片和视频到本地 | 是 | 是 |
|
| 下载照片和视频到本地 | 是 | 是 |
|
||||||
| 多用户支持 | 是 | 是 |
|
| 多用户支持 | 是 | 是 |
|
||||||
| 相册 | 是 | 是 |
|
| 相册 | 是 | 是 |
|
||||||
| 共享相册 | 是 | 是 |
|
| 共享相册 | 是 | 是 |
|
||||||
| 可拖动的快速导航栏 | 是 | 是 |
|
| 可拖动的快速导航栏 | 是 | 是 |
|
||||||
| 支持RAW格式 (HEIC, HEIF, DNG, Apple ProRaw) | 是 | 是 |
|
| 支持RAW格式 (HEIC, HEIF, DNG, Apple ProRaw) | 是 | 是 |
|
||||||
| 元数据视图 (EXIF, 地图) | 是 | 是 |
|
| 元数据视图(EXIF, 地图) | 是 | 是 |
|
||||||
| 通过元数据、对象和标签进行搜索 | 是 | No |
|
| 通过元数据、对象和标签进行搜索 | 是 | 是 |
|
||||||
| 管理功能 (用户管理) | N/A | 是 |
|
| 管理功能(用户管理) | 否 | 是 |
|
||||||
| 后台备份 | Android | N/A |
|
| 后台备份 | 是 | N/A |
|
||||||
| 虚拟滚动 | 是 | 是 |
|
| 虚拟滚动 | 是 | 是 |
|
||||||
| OAuth支持 | 是 | 是 |
|
| OAuth 支持 | 是 | 是 |
|
||||||
| 实时照片备份和查看 (仅iOS) | 是 | 是 |
|
| API Keys|N/A|是|
|
||||||
|
| 实况照片备份和查看 | 仅 iOS | 是 |
|
||||||
|
|用户自定义存储结构|是|是|
|
||||||
|
|公共分享|否|是|
|
||||||
|
|归档与收藏功能|是|是|
|
||||||
|
|全局地图|否|是|
|
||||||
|
|好友分享|是|是|
|
||||||
|
|人像识别与分组|是|是|
|
||||||
|
|回忆(那年今日)|是|是|
|
||||||
|
|离线支持|是|否|
|
||||||
|
|只读相册|是|是|
|
||||||
|
|
||||||
# 支持本项目
|
# 支持本项目
|
||||||
|
|
||||||
我已经致力于本项目并且将我会持续更新文档、新增功能和修复问题。但是我不能一个人走下去,所以我需要你给予我走下去的动力。
|
我已经致力于本项目并且将我会持续更新文档、新增功能和修复问题。但是独木不成林,我需要您给予我坚持下去的动力。
|
||||||
|
|
||||||
就像我主页里面 [selfhosted.show - In the episode 'The-organization-must-not-be-name is a Hostile Actor'](https://selfhosted.show/79?t=1418) 说的一样,这是我和团队的一项艰巨的任务。我希望某一天我能够全职开发本项目,在此我希望你们能够助我梦想成真。
|
就像我在 [selfhosted.show - In the episode 'The-organization-must-not-be-name is a Hostile Actor'](https://selfhosted.show/79?t=1418) 节目里说的一样,这是我和团队的一项艰巨任务。并且我希望某一天我能够全职开发本项目,在此我请求您能够助我梦想成真。
|
||||||
|
|
||||||
如果你使用了本项目一段时间,并且觉得上面的话有道理,那么请你按照如下方式帮助我吧。
|
如果您使用了本项目一段时间,并且觉得上面的话有道理,那么请您考虑通过下列任一方式支持我吧。
|
||||||
|
|
||||||
## 捐赠
|
## 捐赠
|
||||||
|
|
||||||
- [按月捐赠](https://github.com/sponsors/alextran1502) via GitHub Sponsors
|
- 通过 GitHub Sponsors [按月捐赠](https://github.com/sponsors/alextran1502)
|
||||||
- [一次捐赠](https://github.com/sponsors/alextran1502?frequency=one-time&sponsor=alextran1502) via Github Sponsors
|
- 通过 Github Sponsors [单次捐赠](https://github.com/sponsors/alextran1502?frequency=one-time&sponsor=alextran1502)
|
||||||
|
- [Librepay](https://liberapay.com/alex.tran1502/)
|
||||||
# 已知问题
|
- [buymeacoffee](https://www.buymeacoffee.com/altran1502)
|
||||||
|
- 比特币: 1FvEp6P6NM8EZEkpGUFAN2LqJ1gxusNxZX
|
||||||
## TensorFlow 构建问题
|
|
||||||
|
|
||||||
_这是一个针对于Proxmox的已知问题_
|
|
||||||
|
|
||||||
TensorFlow 不能运行在很旧的CPU架构上, 需要运行在AVX和AVX2指令集的CPU上。如果你在docker-compose的命令行中遇到了 `illegal instruction core dump`的错误, 通过如下命令检查你的CPU flag寄存器然后确保你能够看到`AVX`和`AVX2`的字样:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
more /proc/cpuinfo | grep flags
|
|
||||||
```
|
|
||||||
|
|
||||||
如果你在Proxmox中运行虚拟机, 虚拟机中没有启用flag寄存器。
|
|
||||||
|
|
||||||
你需要在虚拟机的硬件面板中把CPU类型从`kvm64`改为`host`。
|
|
||||||
|
|
||||||
`Hardware > Processors > Edit > Advanced > Type (dropdown menu) > host`
|
|
||||||
|
|||||||
1084
cli/src/api/open-api/api.ts
generated
1084
cli/src/api/open-api/api.ts
generated
File diff suppressed because it is too large
Load Diff
2
cli/src/api/open-api/base.ts
generated
2
cli/src/api/open-api/base.ts
generated
@@ -4,7 +4,7 @@
|
|||||||
* Immich
|
* Immich
|
||||||
* Immich API
|
* Immich API
|
||||||
*
|
*
|
||||||
* The version of the OpenAPI document: 1.72.2
|
* The version of the OpenAPI document: 1.76.1
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
|
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
|
||||||
|
|||||||
2
cli/src/api/open-api/common.ts
generated
2
cli/src/api/open-api/common.ts
generated
@@ -4,7 +4,7 @@
|
|||||||
* Immich
|
* Immich
|
||||||
* Immich API
|
* Immich API
|
||||||
*
|
*
|
||||||
* The version of the OpenAPI document: 1.72.2
|
* The version of the OpenAPI document: 1.76.1
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
|
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
|
||||||
|
|||||||
2
cli/src/api/open-api/configuration.ts
generated
2
cli/src/api/open-api/configuration.ts
generated
@@ -4,7 +4,7 @@
|
|||||||
* Immich
|
* Immich
|
||||||
* Immich API
|
* Immich API
|
||||||
*
|
*
|
||||||
* The version of the OpenAPI document: 1.72.2
|
* The version of the OpenAPI document: 1.76.1
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
|
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
|
||||||
|
|||||||
2
cli/src/api/open-api/index.ts
generated
2
cli/src/api/open-api/index.ts
generated
@@ -4,7 +4,7 @@
|
|||||||
* Immich
|
* Immich
|
||||||
* Immich API
|
* Immich API
|
||||||
*
|
*
|
||||||
* The version of the OpenAPI document: 1.72.2
|
* The version of the OpenAPI document: 1.76.1
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
|
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
|
||||||
|
|||||||
@@ -4,14 +4,14 @@ import { SessionService } from '../services/session.service';
|
|||||||
import { LoginError } from '../cores/errors/login-error';
|
import { LoginError } from '../cores/errors/login-error';
|
||||||
import { exit } from 'node:process';
|
import { exit } from 'node:process';
|
||||||
import os from 'os';
|
import os from 'os';
|
||||||
import { ServerVersionReponseDto, UserResponseDto } from 'src/api/open-api';
|
import { ServerVersionResponseDto, UserResponseDto } from 'src/api/open-api';
|
||||||
|
|
||||||
export abstract class BaseCommand {
|
export abstract class BaseCommand {
|
||||||
protected sessionService!: SessionService;
|
protected sessionService!: SessionService;
|
||||||
protected immichApi!: ImmichApi;
|
protected immichApi!: ImmichApi;
|
||||||
protected deviceId!: string;
|
protected deviceId!: string;
|
||||||
protected user!: UserResponseDto;
|
protected user!: UserResponseDto;
|
||||||
protected serverVersion!: ServerVersionReponseDto;
|
protected serverVersion!: ServerVersionResponseDto;
|
||||||
|
|
||||||
protected configDir;
|
protected configDir;
|
||||||
protected authPath;
|
protected authPath;
|
||||||
|
|||||||
@@ -100,8 +100,8 @@ services:
|
|||||||
environment:
|
environment:
|
||||||
- TYPESENSE_API_KEY=${TYPESENSE_API_KEY}
|
- TYPESENSE_API_KEY=${TYPESENSE_API_KEY}
|
||||||
- TYPESENSE_DATA_DIR=/data
|
- TYPESENSE_DATA_DIR=/data
|
||||||
logging:
|
# remove this to get debug messages
|
||||||
driver: none
|
- GLOG_minloglevel=1
|
||||||
volumes:
|
volumes:
|
||||||
- tsdata:/data
|
- tsdata:/data
|
||||||
|
|
||||||
|
|||||||
@@ -68,8 +68,8 @@ services:
|
|||||||
environment:
|
environment:
|
||||||
- TYPESENSE_API_KEY=${TYPESENSE_API_KEY}
|
- TYPESENSE_API_KEY=${TYPESENSE_API_KEY}
|
||||||
- TYPESENSE_DATA_DIR=/data
|
- TYPESENSE_DATA_DIR=/data
|
||||||
logging:
|
# remove this to get debug messages
|
||||||
driver: none
|
- GLOG_minloglevel=1
|
||||||
volumes:
|
volumes:
|
||||||
- tsdata:/data
|
- tsdata:/data
|
||||||
restart: always
|
restart: always
|
||||||
|
|||||||
@@ -54,6 +54,8 @@ services:
|
|||||||
environment:
|
environment:
|
||||||
- TYPESENSE_API_KEY=${TYPESENSE_API_KEY}
|
- TYPESENSE_API_KEY=${TYPESENSE_API_KEY}
|
||||||
- TYPESENSE_DATA_DIR=/data
|
- TYPESENSE_DATA_DIR=/data
|
||||||
|
# remove this to get debug messages
|
||||||
|
- GLOG_minloglevel=1
|
||||||
volumes:
|
volumes:
|
||||||
- tsdata:/data
|
- tsdata:/data
|
||||||
restart: always
|
restart: always
|
||||||
|
|||||||
@@ -1,116 +1,19 @@
|
|||||||
###################################################################################
|
# You can find documentation for all the supported env variables at https://immich.app/docs/install/environment-variables
|
||||||
# Database
|
|
||||||
###################################################################################
|
|
||||||
|
|
||||||
# NOTE: The following four database variables support Docker secrets by adding a *_FILE suffix to the variable name
|
# The location where your uploaded files are stored
|
||||||
# See the docker-compose documentation on secrets for additional details: https://docs.docker.com/compose/compose-file/compose-file-v3/#secrets
|
UPLOAD_LOCATION=./library
|
||||||
|
|
||||||
|
# The Immich version to use. You can pin this to a specific version like "v1.71.0"
|
||||||
|
IMMICH_VERSION=release
|
||||||
|
|
||||||
|
# Connection secrets for postgres and typesense. You should change these to random passwords
|
||||||
|
TYPESENSE_API_KEY=some-random-text
|
||||||
|
DB_PASSWORD=postgres
|
||||||
|
|
||||||
|
# The values below this line do not need to be changed
|
||||||
|
###################################################################################
|
||||||
DB_HOSTNAME=immich_postgres
|
DB_HOSTNAME=immich_postgres
|
||||||
DB_USERNAME=postgres
|
DB_USERNAME=postgres
|
||||||
DB_PASSWORD=postgres
|
|
||||||
DB_DATABASE_NAME=immich
|
DB_DATABASE_NAME=immich
|
||||||
|
|
||||||
# Optional Database settings:
|
|
||||||
# DB_PORT=5432
|
|
||||||
|
|
||||||
###################################################################################
|
|
||||||
# Redis
|
|
||||||
###################################################################################
|
|
||||||
|
|
||||||
REDIS_HOSTNAME=immich_redis
|
REDIS_HOSTNAME=immich_redis
|
||||||
|
|
||||||
# REDIS_URL will be used to pass custom options to ioredis.
|
|
||||||
# Example for Sentinel
|
|
||||||
# {"sentinels":[{"host":"redis-sentinel-node-0","port":26379},{"host":"redis-sentinel-node-1","port":26379},{"host":"redis-sentinel-node-2","port":26379}],"name":"redis-sentinel"}
|
|
||||||
# REDIS_URL=ioredis://eyJzZW50aW5lbHMiOlt7Imhvc3QiOiJyZWRpcy1zZW50aW5lbDEiLCJwb3J0IjoyNjM3OX0seyJob3N0IjoicmVkaXMtc2VudGluZWwyIiwicG9ydCI6MjYzNzl9XSwibmFtZSI6Im15bWFzdGVyIn0=
|
|
||||||
|
|
||||||
# Optional Redis settings:
|
|
||||||
|
|
||||||
# Note: these parameters are not automatically passed to the Redis Container
|
|
||||||
# to do so, please edit the docker-compose.yml file as well. Redis is not configured
|
|
||||||
# via environment variables, only redis.conf or the command line
|
|
||||||
|
|
||||||
# REDIS_PORT=6379
|
|
||||||
# REDIS_DBINDEX=0
|
|
||||||
# REDIS_USERNAME=
|
|
||||||
# REDIS_PASSWORD=
|
|
||||||
# REDIS_SOCKET=
|
|
||||||
|
|
||||||
###################################################################################
|
|
||||||
# Upload File Location
|
|
||||||
#
|
|
||||||
# This is the location where uploaded files are stored.
|
|
||||||
###################################################################################
|
|
||||||
|
|
||||||
UPLOAD_LOCATION=absolute_location_on_your_machine_where_you_want_to_store_the_backup
|
|
||||||
|
|
||||||
|
|
||||||
###################################################################################
|
|
||||||
# Typesense
|
|
||||||
###################################################################################
|
|
||||||
TYPESENSE_API_KEY=some-random-text
|
|
||||||
# TYPESENSE_ENABLED=false
|
|
||||||
# TYPESENSE_URL uses base64 encoding for the nodes json.
|
|
||||||
# Example JSON that was used:
|
|
||||||
# [
|
|
||||||
# { "host": "typesense-1.example.net", "port": "443", "protocol": "https" },
|
|
||||||
# { "host": "typesense-2.example.net", "port": "443", "protocol": "https" },
|
|
||||||
# { "host": "typesense-3.example.net", "port": "443", "protocol": "https" },
|
|
||||||
# ]
|
|
||||||
# TYPESENSE_URL=ha://WwogIHsgImhvc3QiOiAidHlwZXNlbnNlLTEuZXhhbXBsZS5uZXQiLCAicG9ydCI6ICI0NDMiLCAicHJvdG9jb2wiOiAiaHR0cHMiIH0sCiAgeyAiaG9zdCI6ICJ0eXBlc2Vuc2UtMi5leGFtcGxlLm5ldCIsICJwb3J0IjogIjQ0MyIsICJwcm90b2NvbCI6ICJodHRwcyIgfSwKICB7ICJob3N0IjogInR5cGVzZW5zZS0zLmV4YW1wbGUubmV0IiwgInBvcnQiOiAiNDQzIiwgInByb3RvY29sIjogImh0dHBzIiB9Cl0=
|
|
||||||
|
|
||||||
###################################################################################
|
|
||||||
# Reverse Geocoding
|
|
||||||
#
|
|
||||||
# Reverse geocoding is done locally which has a small impact on memory usage
|
|
||||||
# This memory usage can be altered by changing the REVERSE_GEOCODING_PRECISION variable
|
|
||||||
# This ranges from 0-3 with 3 being the most precise
|
|
||||||
# 3 - Cities > 500 population: ~200MB RAM
|
|
||||||
# 2 - Cities > 1000 population: ~150MB RAM
|
|
||||||
# 1 - Cities > 5000 population: ~80MB RAM
|
|
||||||
# 0 - Cities > 15000 population: ~40MB RAM
|
|
||||||
####################################################################################
|
|
||||||
|
|
||||||
# DISABLE_REVERSE_GEOCODING=false
|
|
||||||
# REVERSE_GEOCODING_PRECISION=3
|
|
||||||
|
|
||||||
####################################################################################
|
|
||||||
# WEB - Optional
|
|
||||||
#
|
|
||||||
# Custom message on the login page, should be written in HTML form.
|
|
||||||
# For example:
|
|
||||||
# PUBLIC_LOGIN_PAGE_MESSAGE="This is a demo instance of Immich.<br><br>Email: <i>demo@demo.de</i><br>Password: <i>demo</i>"
|
|
||||||
####################################################################################
|
|
||||||
|
|
||||||
PUBLIC_LOGIN_PAGE_MESSAGE=
|
|
||||||
|
|
||||||
####################################################################################
|
|
||||||
# Alternative Service Addresses - Optional
|
|
||||||
#
|
|
||||||
# This is an advanced feature for users who may be running their immich services on different hosts.
|
|
||||||
# It will not change which address or port that services bind to within their containers, but it will change where other services look for their peers.
|
|
||||||
# Note: immich-microservices is bound to 3002, but no references are made
|
|
||||||
####################################################################################
|
|
||||||
|
|
||||||
IMMICH_WEB_URL=http://immich-web:3000
|
|
||||||
IMMICH_SERVER_URL=http://immich-server:3001
|
|
||||||
IMMICH_MACHINE_LEARNING_URL=http://immich-machine-learning:3003
|
|
||||||
|
|
||||||
####################################################################################
|
|
||||||
# Alternative API's External Address - Optional
|
|
||||||
#
|
|
||||||
# This is an advanced feature used to control the public server endpoint returned to clients during Well-known discovery.
|
|
||||||
# You should only use this if you want mobile apps to access the immich API over a custom URL. Do not include trailing slash.
|
|
||||||
# NOTE: At this time, the web app will not be affected by this setting and will continue to use the relative path: /api
|
|
||||||
# Examples: http://localhost:3001, http://immich-api.example.com, etc
|
|
||||||
####################################################################################
|
|
||||||
|
|
||||||
#IMMICH_API_URL_EXTERNAL=http://localhost:3001
|
|
||||||
|
|
||||||
###################################################################################
|
|
||||||
# Immich Version - Optional
|
|
||||||
#
|
|
||||||
# This allows all immich docker images to be pinned to a specific version. By default,
|
|
||||||
# the version is "release" but could be a specific version, like "v1.59.0".
|
|
||||||
###################################################################################
|
|
||||||
|
|
||||||
#IMMICH_VERSION=
|
|
||||||
|
|||||||
@@ -20,4 +20,4 @@ services:
|
|||||||
# devices:
|
# devices:
|
||||||
# - driver: nvidia
|
# - driver: nvidia
|
||||||
# count: 1
|
# count: 1
|
||||||
# capabilities: [gpu]
|
# capabilities: [gpu,video]
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ This often happens when using a reverse proxy or cloudflare tunnel in front of I
|
|||||||
|
|
||||||
### Why is Immich slow on low-memory systems like the Raspberry Pi?
|
### Why is Immich slow on low-memory systems like the Raspberry Pi?
|
||||||
|
|
||||||
Immich uses optional machine-learning features to enhance search results. This feature, however, can be too heavy to run on a Raspberry Pi. To disable machine learning, comment out the `immich-machine-learning` section of your docker-compose.yml and set `IMMICH_MACHINE_LEARNING_URL=false` in your .env file.
|
Immich uses optional machine-learning features to enhance search results. This feature, however, can be too heavy to run on a Raspberry Pi. To disable machine learning, comment out the `immich-machine-learning` section of your docker-compose.yml and set `IMMICH_MACHINE_LEARNING_ENABLED=false` in your .env file.
|
||||||
|
|
||||||
### How to disable machine-learning and TypeSense?
|
### How to disable machine-learning and TypeSense?
|
||||||
|
|
||||||
@@ -47,7 +47,7 @@ Immich uses optional machine-learning features to enhance search results. This f
|
|||||||
Disabling both will result in poor search experience and typesense utilizes CLIP embeddings which are generated by machine-learning.
|
Disabling both will result in poor search experience and typesense utilizes CLIP embeddings which are generated by machine-learning.
|
||||||
:::
|
:::
|
||||||
|
|
||||||
These features can be disabled by commenting out `immich-typesense` and `immich-machine-learning` sections of the docker-compose.yml and setting `IMMICH_MACHINE_LEARNING_URL=false` & `TYPESENSE_ENABLED=false` in your .env file.
|
These features can be disabled by commenting out `immich-typesense` and `immich-machine-learning` sections of the docker-compose.yml and setting `IMMICH_MACHINE_LEARNING_ENABLED=false` & `TYPESENSE_ENABLED=false` in your .env file.
|
||||||
|
|
||||||
### What happens to existing files after I choose a new [Storage Template](/docs/administration/storage-template.mdx)?
|
### What happens to existing files after I choose a new [Storage Template](/docs/administration/storage-template.mdx)?
|
||||||
|
|
||||||
@@ -99,3 +99,29 @@ After removing the containers and volumes, the **Files** can be cleaned up (if n
|
|||||||
### Why iOS app shows duplicate photos on the timeline while the web doesn't?
|
### Why iOS app shows duplicate photos on the timeline while the web doesn't?
|
||||||
|
|
||||||
If you are using `My Photo Stream`, the Photos app temporarily creates duplicates of photos taken in the last 30 days. These photos are included in the `Recents` album and thus shown up twice. To fix this, you can disable `My Photo Stream` in the native Photos app or choose a different album in the backup screen in Immich.
|
If you are using `My Photo Stream`, the Photos app temporarily creates duplicates of photos taken in the last 30 days. These photos are included in the `Recents` album and thus shown up twice. To fix this, you can disable `My Photo Stream` in the native Photos app or choose a different album in the backup screen in Immich.
|
||||||
|
|
||||||
|
### How can I move all data (photos, persons, albums) from one user to another?
|
||||||
|
|
||||||
|
This requires some database queries. You can do this on the command line (in the PostgreSQL container using the psql command), or you can add for example an [Adminer](https://www.adminer.org/) container to the `docker-compose.yml` file, so that you can use a web-interface.
|
||||||
|
|
||||||
|
:::warning
|
||||||
|
This is an advanced operation. If you can't to do it with the steps described here, this is not for you.
|
||||||
|
:::
|
||||||
|
|
||||||
|
1. **MAKE A BACKUP** - See [backup and restore](/docs/administration/backup-and-restore.md).
|
||||||
|
2. Find the id of both the 'source' and the 'destination' user (it's the id column in the users table)
|
||||||
|
3. Three tables need to be updated:
|
||||||
|
|
||||||
|
```sql
|
||||||
|
// reassign albums
|
||||||
|
update albums set "ownerId" = '<destinationId>' where "ownerId" = '<sourceId>';
|
||||||
|
|
||||||
|
// reassign people
|
||||||
|
update person set "ownerId" = '<destinationId>' where "ownerId" = '<sourceId>';
|
||||||
|
|
||||||
|
// reassign assets
|
||||||
|
update assets set "ownerId" = '<destinationId>' where "ownerId" = '<sourceId>'
|
||||||
|
and checksum not in (select checksum from assets where "ownerId" = '<destinationId>');
|
||||||
|
```
|
||||||
|
|
||||||
|
4. There might be left-over assets in the 'source' user's library if they are skipped by the last query because of duplicate checksums. These are probably duplicates anyway, and can probably be removed.
|
||||||
|
|||||||
@@ -170,4 +170,10 @@ The proper command for above would be as shown below. You should have access to
|
|||||||
immich upload --key HFEJ38DNSDUEG --server http://192.168.1.216:2283/api --recursive /path/to/media --import
|
immich upload --key HFEJ38DNSDUEG --server http://192.168.1.216:2283/api --recursive /path/to/media --import
|
||||||
```
|
```
|
||||||
|
|
||||||
|
If you are running the import using the docker command, please note that the volumes should point to the `/path/to/media` exactly on the environment the CLI command is being run on
|
||||||
|
|
||||||
|
```
|
||||||
|
docker run -it --rm -v "/path/to/media:/path/to/media" ghcr.io/immich-app/immich-cli:latest upload --key HFEJ38DNSDUEG --server http://192.168.1.216:2283/api --recursive /path/to/media --import
|
||||||
|
```
|
||||||
|
|
||||||
:::
|
:::
|
||||||
|
|||||||
26
docs/docs/guides/machine-learning.md
Normal file
26
docs/docs/guides/machine-learning.md
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
# Hosting the machine-learning service on another system
|
||||||
|
|
||||||
|
To alleviate [performance issues on low-memory systems](/docs/FAQ.md#why-is-immich-slow-on-low-memory-systems-like-the-raspberry-pi) like the Raspberry Pi, you may also host Immich's machine-learning container on a more powerful system (e.g. your laptop or desktop computer):
|
||||||
|
|
||||||
|
- Set `IMMICH_MACHINE_LEARNING_URL` to point to the designated ML system, e.g. `http://workstation:3003`.
|
||||||
|
- Copy the following `docker-compose.yml` to your ML system.
|
||||||
|
- Start the container by running `docker-compose up -d` or `docker compose up -d` (depending on your Docker version).
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
version: '3.8'
|
||||||
|
|
||||||
|
services:
|
||||||
|
immich-machine-learning:
|
||||||
|
container_name: immich_machine_learning
|
||||||
|
image: ghcr.io/immich-app/immich-machine-learning:${IMMICH_VERSION:-release}
|
||||||
|
volumes:
|
||||||
|
- model-cache:/cache
|
||||||
|
restart: always
|
||||||
|
ports:
|
||||||
|
- 3003:3003
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
model-cache:
|
||||||
|
```
|
||||||
|
|
||||||
|
Please note that version mismatches between both hosts may cause instabilities and bugs, so make sure to always perform updates together.
|
||||||
91
docs/docs/install/config-file.md
Normal file
91
docs/docs/install/config-file.md
Normal file
@@ -0,0 +1,91 @@
|
|||||||
|
# Config File
|
||||||
|
|
||||||
|
A config file can be provided as an alternative to the UI configuration.
|
||||||
|
|
||||||
|
### Step 1 - Create a new config file
|
||||||
|
|
||||||
|
In JSON format, create a new config file (e.g. `immich.config`) and put it in a location that can be accessed by Immich.
|
||||||
|
The default configuration looks like this:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"ffmpeg": {
|
||||||
|
"crf": 23,
|
||||||
|
"threads": 0,
|
||||||
|
"preset": "ultrafast",
|
||||||
|
"targetVideoCodec": "h264",
|
||||||
|
"targetAudioCodec": "aac",
|
||||||
|
"targetResolution": "720",
|
||||||
|
"maxBitrate": "0",
|
||||||
|
"twoPass": false,
|
||||||
|
"transcode": "required",
|
||||||
|
"tonemap": "hable",
|
||||||
|
"accel": "disabled"
|
||||||
|
},
|
||||||
|
"job": {
|
||||||
|
"backgroundTask": {
|
||||||
|
"concurrency": 5
|
||||||
|
},
|
||||||
|
"clipEncoding": {
|
||||||
|
"concurrency": 2
|
||||||
|
},
|
||||||
|
"metadataExtraction": {
|
||||||
|
"concurrency": 5
|
||||||
|
},
|
||||||
|
"objectTagging": {
|
||||||
|
"concurrency": 2
|
||||||
|
},
|
||||||
|
"recognizeFaces": {
|
||||||
|
"concurrency": 2
|
||||||
|
},
|
||||||
|
"search": {
|
||||||
|
"concurrency": 5
|
||||||
|
},
|
||||||
|
"sidecar": {
|
||||||
|
"concurrency": 5
|
||||||
|
},
|
||||||
|
"storageTemplateMigration": {
|
||||||
|
"concurrency": 5
|
||||||
|
},
|
||||||
|
"thumbnailGeneration": {
|
||||||
|
"concurrency": 5
|
||||||
|
},
|
||||||
|
"videoConversion": {
|
||||||
|
"concurrency": 1
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"oauth": {
|
||||||
|
"enabled": false,
|
||||||
|
"issuerUrl": "",
|
||||||
|
"clientId": "",
|
||||||
|
"clientSecret": "",
|
||||||
|
"mobileOverrideEnabled": false,
|
||||||
|
"mobileRedirectUri": "",
|
||||||
|
"scope": "openid email profile",
|
||||||
|
"storageLabelClaim": "preferred_username",
|
||||||
|
"buttonText": "Login with OAuth",
|
||||||
|
"autoRegister": true,
|
||||||
|
"autoLaunch": false
|
||||||
|
},
|
||||||
|
"passwordLogin": {
|
||||||
|
"enabled": true
|
||||||
|
},
|
||||||
|
"storageTemplate": {
|
||||||
|
"template": "{{y}}/{{y}}-{{MM}}-{{dd}}/{{filename}}"
|
||||||
|
},
|
||||||
|
"thumbnail": {
|
||||||
|
"webpSize": 250,
|
||||||
|
"jpegSize": 1440
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
:::tip
|
||||||
|
In Administration > Settings is a button to copy the current configuration to your clipboard.
|
||||||
|
So you can just grab it from there, paste it into a file and you're pretty much good to go.
|
||||||
|
:::
|
||||||
|
|
||||||
|
### Step 2 - Specify the file location
|
||||||
|
|
||||||
|
In your `.env` file, set the variable `IMMICH_CONFIG_FILE` to the path of your config.
|
||||||
|
For more information, refer to the [Environment Variables](https://docs.immich.app/docs/install/environment-variables) section.
|
||||||
@@ -132,7 +132,6 @@ PUBLIC_LOGIN_PAGE_MESSAGE="My Family Photos and Videos Backup Server"
|
|||||||
|
|
||||||
IMMICH_WEB_URL=http://immich-web:3000
|
IMMICH_WEB_URL=http://immich-web:3000
|
||||||
IMMICH_SERVER_URL=http://immich-server:3001
|
IMMICH_SERVER_URL=http://immich-server:3001
|
||||||
IMMICH_MACHINE_LEARNING_URL=http://immich-machine-learning:3003
|
|
||||||
|
|
||||||
####################################################################################
|
####################################################################################
|
||||||
# Alternative API's External Address - Optional
|
# Alternative API's External Address - Optional
|
||||||
|
|||||||
@@ -1,3 +1,7 @@
|
|||||||
|
---
|
||||||
|
sidebar_position: 90
|
||||||
|
---
|
||||||
|
|
||||||
# Environment Variables
|
# Environment Variables
|
||||||
|
|
||||||
## Docker Compose
|
## Docker Compose
|
||||||
@@ -22,6 +26,7 @@ These environment variables are used by the `docker-compose.yml` file and do **N
|
|||||||
| `LOG_LEVEL` | Log Level (verbose, debug, log, warn, error) | `log` | server, microservices |
|
| `LOG_LEVEL` | Log Level (verbose, debug, log, warn, error) | `log` | server, microservices |
|
||||||
| `IMMICH_MEDIA_LOCATION` | Media Location | `./upload` | server, microservices |
|
| `IMMICH_MEDIA_LOCATION` | Media Location | `./upload` | server, microservices |
|
||||||
| `PUBLIC_LOGIN_PAGE_MESSAGE` | Public Login Page Message | | web |
|
| `PUBLIC_LOGIN_PAGE_MESSAGE` | Public Login Page Message | | web |
|
||||||
|
| `IMMICH_CONFIG_FILE` | Path to config file | | server |
|
||||||
|
|
||||||
:::tip
|
:::tip
|
||||||
|
|
||||||
@@ -50,13 +55,14 @@ These environment variables are used by the `docker-compose.yml` file and do **N
|
|||||||
|
|
||||||
## URLs
|
## URLs
|
||||||
|
|
||||||
| Variable | Description | Default | Services |
|
| Variable | Description | Default | Services |
|
||||||
| :---------------------------- | :------------------------------------------------------- | :-----------------------------------: | :-------------------- |
|
| :-------------------------------- | :--------------------------- | :-----------------------------------: | :-------------------- |
|
||||||
| `IMMICH_WEB_URL` | Immich Web URL | `http://immich-web:3000` | proxy |
|
| `IMMICH_WEB_URL` | Immich Web URL | `http://immich-web:3000` | proxy |
|
||||||
| `IMMICH_SERVER_URL` | Immich Server URL | `http://immich-server:3001` | web, proxy |
|
| `IMMICH_SERVER_URL` | Immich Server URL | `http://immich-server:3001` | web, proxy |
|
||||||
| `IMMICH_MACHINE_LEARNING_URL` | Immich Machine Learning URL, set `"false"` to disable ML | `http://immich-machine-learning:3003` | server, microservices |
|
| `IMMICH_MACHINE_LEARNING_ENABLED` | Enabled machine learning | `true` | server, microservices |
|
||||||
| `PUBLIC_IMMICH_SERVER_URL` | Public Immich URL | `http://immich-server:3001` | web |
|
| `IMMICH_MACHINE_LEARNING_URL` | Immich Machine Learning URL, | `http://immich-machine-learning:3003` | server, microservices |
|
||||||
| `IMMICH_API_URL_EXTERNAL` | Immich API URL External | `/api` | web |
|
| `PUBLIC_IMMICH_SERVER_URL` | Public Immich URL | `http://immich-server:3001` | web |
|
||||||
|
| `IMMICH_API_URL_EXTERNAL` | Immich API URL External | `/api` | web |
|
||||||
|
|
||||||
:::info
|
:::info
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
---
|
---
|
||||||
sidebar_position: 100
|
sidebar_position: 80
|
||||||
---
|
---
|
||||||
|
|
||||||
import RegisterAdminUser from '../partials/_register-admin.md';
|
import RegisterAdminUser from '../partials/_register-admin.md';
|
||||||
|
|||||||
@@ -10,8 +10,9 @@ RUN poetry config installer.max-workers 10 && \
|
|||||||
RUN python -m venv /opt/venv
|
RUN python -m venv /opt/venv
|
||||||
ENV VIRTUAL_ENV="/opt/venv" PATH="/opt/venv/bin:${PATH}"
|
ENV VIRTUAL_ENV="/opt/venv" PATH="/opt/venv/bin:${PATH}"
|
||||||
|
|
||||||
COPY poetry.lock pyproject.toml ./
|
COPY poetry.lock pyproject.toml requirements.txt ./
|
||||||
RUN poetry install --sync --no-interaction --no-ansi --no-root --only main
|
RUN poetry install --sync --no-interaction --no-ansi --no-root --only main
|
||||||
|
RUN pip install --no-deps -r requirements.txt
|
||||||
|
|
||||||
FROM python:3.11.4-slim-bullseye@sha256:91d194f58f50594cda71dcd2e8fdefd90e7ecc57d07823813b67c8521e565dcd
|
FROM python:3.11.4-slim-bullseye@sha256:91d194f58f50594cda71dcd2e8fdefd90e7ecc57d07823813b67c8521e565dcd
|
||||||
|
|
||||||
|
|||||||
@@ -1,32 +1,67 @@
|
|||||||
|
import logging
|
||||||
|
import os
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
|
import starlette
|
||||||
from pydantic import BaseSettings
|
from pydantic import BaseSettings
|
||||||
|
from rich.console import Console
|
||||||
|
from rich.logging import RichHandler
|
||||||
|
|
||||||
from .schemas import ModelType
|
from .schemas import ModelType
|
||||||
|
|
||||||
|
|
||||||
class Settings(BaseSettings):
|
class Settings(BaseSettings):
|
||||||
cache_folder: str = "/cache"
|
cache_folder: str = "/cache"
|
||||||
classification_model: str = "microsoft/resnet-50"
|
eager_startup: bool = False
|
||||||
clip_image_model: str = "clip-ViT-B-32"
|
|
||||||
clip_text_model: str = "clip-ViT-B-32"
|
|
||||||
facial_recognition_model: str = "buffalo_l"
|
|
||||||
min_tag_score: float = 0.9
|
|
||||||
eager_startup: bool = True
|
|
||||||
model_ttl: int = 0
|
model_ttl: int = 0
|
||||||
host: str = "0.0.0.0"
|
host: str = "0.0.0.0"
|
||||||
port: int = 3003
|
port: int = 3003
|
||||||
workers: int = 1
|
workers: int = 1
|
||||||
min_face_score: float = 0.7
|
|
||||||
test_full: bool = False
|
test_full: bool = False
|
||||||
|
request_threads: int = os.cpu_count() or 4
|
||||||
|
model_inter_op_threads: int = 1
|
||||||
|
model_intra_op_threads: int = 2
|
||||||
|
|
||||||
class Config:
|
class Config:
|
||||||
env_prefix = "MACHINE_LEARNING_"
|
env_prefix = "MACHINE_LEARNING_"
|
||||||
case_sensitive = False
|
case_sensitive = False
|
||||||
|
|
||||||
|
|
||||||
def get_cache_dir(model_name: str, model_type: ModelType) -> Path:
|
class LogSettings(BaseSettings):
|
||||||
return Path(settings.cache_folder, model_type.value, model_name)
|
log_level: str = "info"
|
||||||
|
no_color: bool = False
|
||||||
|
|
||||||
|
class Config:
|
||||||
|
case_sensitive = False
|
||||||
|
|
||||||
|
|
||||||
|
_clean_name = str.maketrans(":\\/", "___", ".")
|
||||||
|
|
||||||
|
|
||||||
|
def get_cache_dir(model_name: str, model_type: ModelType) -> Path:
|
||||||
|
return Path(settings.cache_folder) / model_type.value / model_name.translate(_clean_name)
|
||||||
|
|
||||||
|
|
||||||
|
LOG_LEVELS: dict[str, int] = {
|
||||||
|
"critical": logging.ERROR,
|
||||||
|
"error": logging.ERROR,
|
||||||
|
"warning": logging.WARNING,
|
||||||
|
"warn": logging.WARNING,
|
||||||
|
"info": logging.INFO,
|
||||||
|
"log": logging.INFO,
|
||||||
|
"debug": logging.DEBUG,
|
||||||
|
"verbose": logging.DEBUG,
|
||||||
|
}
|
||||||
|
|
||||||
settings = Settings()
|
settings = Settings()
|
||||||
|
log_settings = LogSettings()
|
||||||
|
|
||||||
|
console = Console(color_system="standard", no_color=log_settings.no_color)
|
||||||
|
logging.basicConfig(
|
||||||
|
format="%(message)s",
|
||||||
|
handlers=[
|
||||||
|
RichHandler(show_path=False, omit_repeated_times=False, console=console, tracebacks_suppress=[starlette])
|
||||||
|
],
|
||||||
|
)
|
||||||
|
log = logging.getLogger("uvicorn")
|
||||||
|
log.setLevel(LOG_LEVELS.get(log_settings.log_level.lower(), logging.INFO))
|
||||||
|
|||||||
@@ -1,58 +1,45 @@
|
|||||||
|
import asyncio
|
||||||
|
import logging
|
||||||
import os
|
import os
|
||||||
from io import BytesIO
|
from concurrent.futures import ThreadPoolExecutor
|
||||||
from typing import Any
|
from typing import Any
|
||||||
|
|
||||||
import cv2
|
import orjson
|
||||||
import numpy as np
|
|
||||||
import uvicorn
|
import uvicorn
|
||||||
from fastapi import Body, Depends, FastAPI
|
from fastapi import FastAPI, Form, HTTPException, UploadFile
|
||||||
from PIL import Image
|
from fastapi.responses import ORJSONResponse
|
||||||
|
from starlette.formparsers import MultiPartParser
|
||||||
|
|
||||||
from .config import settings
|
from app.models.base import InferenceModel
|
||||||
|
|
||||||
|
from .config import log, settings
|
||||||
from .models.cache import ModelCache
|
from .models.cache import ModelCache
|
||||||
from .schemas import (
|
from .schemas import (
|
||||||
EmbeddingResponse,
|
|
||||||
FaceResponse,
|
|
||||||
MessageResponse,
|
MessageResponse,
|
||||||
ModelType,
|
ModelType,
|
||||||
TagResponse,
|
|
||||||
TextModelRequest,
|
|
||||||
TextResponse,
|
TextResponse,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
MultiPartParser.max_file_size = 2**24 # spools to disk if payload is 16 MiB or larger
|
||||||
app = FastAPI()
|
app = FastAPI()
|
||||||
|
|
||||||
|
|
||||||
def init_state() -> None:
|
def init_state() -> None:
|
||||||
app.state.model_cache = ModelCache(ttl=settings.model_ttl, revalidate=settings.model_ttl > 0)
|
app.state.model_cache = ModelCache(ttl=settings.model_ttl, revalidate=settings.model_ttl > 0)
|
||||||
|
log.info(
|
||||||
|
(
|
||||||
async def load_models() -> None:
|
"Created in-memory cache with unloading "
|
||||||
models = [
|
f"{f'after {settings.model_ttl}s of inactivity' if settings.model_ttl > 0 else 'disabled'}."
|
||||||
(settings.classification_model, ModelType.IMAGE_CLASSIFICATION),
|
)
|
||||||
(settings.clip_image_model, ModelType.CLIP),
|
)
|
||||||
(settings.clip_text_model, ModelType.CLIP),
|
# asyncio is a huge bottleneck for performance, so we use a thread pool to run blocking code
|
||||||
(settings.facial_recognition_model, ModelType.FACIAL_RECOGNITION),
|
app.state.thread_pool = ThreadPoolExecutor(settings.request_threads)
|
||||||
]
|
log.info(f"Initialized request thread pool with {settings.request_threads} threads.")
|
||||||
|
|
||||||
# Get all models
|
|
||||||
for model_name, model_type in models:
|
|
||||||
await app.state.model_cache.get(model_name, model_type, eager=settings.eager_startup)
|
|
||||||
|
|
||||||
|
|
||||||
@app.on_event("startup")
|
@app.on_event("startup")
|
||||||
async def startup_event() -> None:
|
async def startup_event() -> None:
|
||||||
init_state()
|
init_state()
|
||||||
await load_models()
|
|
||||||
|
|
||||||
|
|
||||||
def dep_pil_image(byte_image: bytes = Body(...)) -> Image.Image:
|
|
||||||
return Image.open(BytesIO(byte_image))
|
|
||||||
|
|
||||||
|
|
||||||
def dep_cv_image(byte_image: bytes = Body(...)) -> cv2.Mat:
|
|
||||||
byte_image_np = np.frombuffer(byte_image, np.uint8)
|
|
||||||
return cv2.imdecode(byte_image_np, cv2.IMREAD_COLOR)
|
|
||||||
|
|
||||||
|
|
||||||
@app.get("/", response_model=MessageResponse)
|
@app.get("/", response_model=MessageResponse)
|
||||||
@@ -65,54 +52,28 @@ def ping() -> str:
|
|||||||
return "pong"
|
return "pong"
|
||||||
|
|
||||||
|
|
||||||
@app.post(
|
@app.post("/predict")
|
||||||
"/image-classifier/tag-image",
|
async def predict(
|
||||||
response_model=TagResponse,
|
model_name: str = Form(alias="modelName"),
|
||||||
status_code=200,
|
model_type: ModelType = Form(alias="modelType"),
|
||||||
)
|
options: str = Form(default="{}"),
|
||||||
async def image_classification(
|
text: str | None = Form(default=None),
|
||||||
image: Image.Image = Depends(dep_pil_image),
|
image: UploadFile | None = None,
|
||||||
) -> list[str]:
|
) -> Any:
|
||||||
model = await app.state.model_cache.get(settings.classification_model, ModelType.IMAGE_CLASSIFICATION)
|
if image is not None:
|
||||||
labels = model.predict(image)
|
inputs: str | bytes = await image.read()
|
||||||
return labels
|
elif text is not None:
|
||||||
|
inputs = text
|
||||||
|
else:
|
||||||
|
raise HTTPException(400, "Either image or text must be provided")
|
||||||
|
|
||||||
|
model: InferenceModel = await app.state.model_cache.get(model_name, model_type, **orjson.loads(options))
|
||||||
|
outputs = await run(model, inputs)
|
||||||
|
return ORJSONResponse(outputs)
|
||||||
|
|
||||||
|
|
||||||
@app.post(
|
async def run(model: InferenceModel, inputs: Any) -> Any:
|
||||||
"/sentence-transformer/encode-image",
|
return await asyncio.get_running_loop().run_in_executor(app.state.thread_pool, model.predict, inputs)
|
||||||
response_model=EmbeddingResponse,
|
|
||||||
status_code=200,
|
|
||||||
)
|
|
||||||
async def clip_encode_image(
|
|
||||||
image: Image.Image = Depends(dep_pil_image),
|
|
||||||
) -> list[float]:
|
|
||||||
model = await app.state.model_cache.get(settings.clip_image_model, ModelType.CLIP)
|
|
||||||
embedding = model.predict(image)
|
|
||||||
return embedding
|
|
||||||
|
|
||||||
|
|
||||||
@app.post(
|
|
||||||
"/sentence-transformer/encode-text",
|
|
||||||
response_model=EmbeddingResponse,
|
|
||||||
status_code=200,
|
|
||||||
)
|
|
||||||
async def clip_encode_text(payload: TextModelRequest) -> list[float]:
|
|
||||||
model = await app.state.model_cache.get(settings.clip_text_model, ModelType.CLIP)
|
|
||||||
embedding = model.predict(payload.text)
|
|
||||||
return embedding
|
|
||||||
|
|
||||||
|
|
||||||
@app.post(
|
|
||||||
"/facial-recognition/detect-faces",
|
|
||||||
response_model=FaceResponse,
|
|
||||||
status_code=200,
|
|
||||||
)
|
|
||||||
async def facial_recognition(
|
|
||||||
image: cv2.Mat = Depends(dep_cv_image),
|
|
||||||
) -> list[dict[str, Any]]:
|
|
||||||
model = await app.state.model_cache.get(settings.facial_recognition_model, ModelType.FACIAL_RECOGNITION)
|
|
||||||
faces = model.predict(image)
|
|
||||||
return faces
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
@@ -123,4 +84,6 @@ if __name__ == "__main__":
|
|||||||
port=settings.port,
|
port=settings.port,
|
||||||
reload=is_dev,
|
reload=is_dev,
|
||||||
workers=settings.workers,
|
workers=settings.workers,
|
||||||
|
log_config=None,
|
||||||
|
access_log=log.isEnabledFor(logging.INFO),
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -1,3 +1,3 @@
|
|||||||
from .clip import CLIPSTEncoder
|
from .clip import CLIPEncoder
|
||||||
from .facial_recognition import FaceRecognizer
|
from .facial_recognition import FaceRecognizer
|
||||||
from .image_classification import ImageClassifier
|
from .image_classification import ImageClassifier
|
||||||
|
|||||||
@@ -1,13 +1,16 @@
|
|||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
|
import pickle
|
||||||
from abc import ABC, abstractmethod
|
from abc import ABC, abstractmethod
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from shutil import rmtree
|
from shutil import rmtree
|
||||||
from typing import Any
|
from typing import Any
|
||||||
|
from zipfile import BadZipFile
|
||||||
|
|
||||||
|
import onnxruntime as ort
|
||||||
from onnxruntime.capi.onnxruntime_pybind11_state import InvalidProtobuf # type: ignore
|
from onnxruntime.capi.onnxruntime_pybind11_state import InvalidProtobuf # type: ignore
|
||||||
|
|
||||||
from ..config import get_cache_dir
|
from ..config import get_cache_dir, log, settings
|
||||||
from ..schemas import ModelType
|
from ..schemas import ModelType
|
||||||
|
|
||||||
|
|
||||||
@@ -15,20 +18,59 @@ class InferenceModel(ABC):
|
|||||||
_model_type: ModelType
|
_model_type: ModelType
|
||||||
|
|
||||||
def __init__(
|
def __init__(
|
||||||
self, model_name: str, cache_dir: Path | str | None = None, eager: bool = True, **model_kwargs: Any
|
self,
|
||||||
|
model_name: str,
|
||||||
|
cache_dir: Path | str | None = None,
|
||||||
|
eager: bool = True,
|
||||||
|
inter_op_num_threads: int = settings.model_inter_op_threads,
|
||||||
|
intra_op_num_threads: int = settings.model_intra_op_threads,
|
||||||
|
**model_kwargs: Any,
|
||||||
) -> None:
|
) -> None:
|
||||||
self.model_name = model_name
|
self.model_name = model_name
|
||||||
self._loaded = False
|
self._loaded = False
|
||||||
self._cache_dir = Path(cache_dir) if cache_dir is not None else get_cache_dir(model_name, self.model_type)
|
self._cache_dir = Path(cache_dir) if cache_dir is not None else get_cache_dir(model_name, self.model_type)
|
||||||
loader = self.load if eager else self.download
|
loader = self.load if eager else self.download
|
||||||
|
|
||||||
|
self.providers = model_kwargs.pop("providers", ["CPUExecutionProvider"])
|
||||||
|
# don't pre-allocate more memory than needed
|
||||||
|
self.provider_options = model_kwargs.pop(
|
||||||
|
"provider_options", [{"arena_extend_strategy": "kSameAsRequested"}] * len(self.providers)
|
||||||
|
)
|
||||||
|
log.debug(
|
||||||
|
(
|
||||||
|
f"Setting '{self.model_name}' execution providers to {self.providers}"
|
||||||
|
"in descending order of preference"
|
||||||
|
),
|
||||||
|
)
|
||||||
|
log.debug(f"Setting execution provider options to {self.provider_options}")
|
||||||
|
self.sess_options = PicklableSessionOptions()
|
||||||
|
# avoid thread contention between models
|
||||||
|
if inter_op_num_threads > 1:
|
||||||
|
self.sess_options.execution_mode = ort.ExecutionMode.ORT_PARALLEL
|
||||||
|
|
||||||
|
log.debug(f"Setting execution_mode to {self.sess_options.execution_mode.name}")
|
||||||
|
log.debug(f"Setting inter_op_num_threads to {inter_op_num_threads}")
|
||||||
|
log.debug(f"Setting intra_op_num_threads to {intra_op_num_threads}")
|
||||||
|
self.sess_options.inter_op_num_threads = inter_op_num_threads
|
||||||
|
self.sess_options.intra_op_num_threads = intra_op_num_threads
|
||||||
|
|
||||||
try:
|
try:
|
||||||
loader(**model_kwargs)
|
loader(**model_kwargs)
|
||||||
except (OSError, InvalidProtobuf):
|
except (OSError, InvalidProtobuf, BadZipFile):
|
||||||
|
log.warn(
|
||||||
|
(
|
||||||
|
f"Failed to load {self.model_type.replace('_', ' ')} model '{self.model_name}'."
|
||||||
|
"Clearing cache and retrying."
|
||||||
|
)
|
||||||
|
)
|
||||||
self.clear_cache()
|
self.clear_cache()
|
||||||
loader(**model_kwargs)
|
loader(**model_kwargs)
|
||||||
|
|
||||||
def download(self, **model_kwargs: Any) -> None:
|
def download(self, **model_kwargs: Any) -> None:
|
||||||
if not self.cached:
|
if not self.cached:
|
||||||
|
log.info(
|
||||||
|
(f"Downloading {self.model_type.replace('_', ' ')} model '{self.model_name}'." "This may take a while.")
|
||||||
|
)
|
||||||
self._download(**model_kwargs)
|
self._download(**model_kwargs)
|
||||||
|
|
||||||
def load(self, **model_kwargs: Any) -> None:
|
def load(self, **model_kwargs: Any) -> None:
|
||||||
@@ -36,15 +78,21 @@ class InferenceModel(ABC):
|
|||||||
self._load(**model_kwargs)
|
self._load(**model_kwargs)
|
||||||
self._loaded = True
|
self._loaded = True
|
||||||
|
|
||||||
def predict(self, inputs: Any) -> Any:
|
def predict(self, inputs: Any, **model_kwargs: Any) -> Any:
|
||||||
if not self._loaded:
|
if not self._loaded:
|
||||||
|
log.info(f"Loading {self.model_type.replace('_', ' ')} model '{self.model_name}'")
|
||||||
self.load()
|
self.load()
|
||||||
|
if model_kwargs:
|
||||||
|
self.configure(**model_kwargs)
|
||||||
return self._predict(inputs)
|
return self._predict(inputs)
|
||||||
|
|
||||||
@abstractmethod
|
@abstractmethod
|
||||||
def _predict(self, inputs: Any) -> Any:
|
def _predict(self, inputs: Any) -> Any:
|
||||||
...
|
...
|
||||||
|
|
||||||
|
def configure(self, **model_kwargs: Any) -> None:
|
||||||
|
pass
|
||||||
|
|
||||||
@abstractmethod
|
@abstractmethod
|
||||||
def _download(self, **model_kwargs: Any) -> None:
|
def _download(self, **model_kwargs: Any) -> None:
|
||||||
...
|
...
|
||||||
@@ -79,12 +127,33 @@ class InferenceModel(ABC):
|
|||||||
|
|
||||||
def clear_cache(self) -> None:
|
def clear_cache(self) -> None:
|
||||||
if not self.cache_dir.exists():
|
if not self.cache_dir.exists():
|
||||||
|
log.warn(
|
||||||
|
f"Attempted to clear cache for model '{self.model_name}' but cache directory does not exist.",
|
||||||
|
)
|
||||||
return
|
return
|
||||||
if not rmtree.avoids_symlink_attacks:
|
if not rmtree.avoids_symlink_attacks:
|
||||||
raise RuntimeError("Attempted to clear cache, but rmtree is not safe on this platform.")
|
raise RuntimeError("Attempted to clear cache, but rmtree is not safe on this platform.")
|
||||||
|
|
||||||
if self.cache_dir.is_dir():
|
if self.cache_dir.is_dir():
|
||||||
|
log.info(f"Cleared cache directory for model '{self.model_name}'.")
|
||||||
rmtree(self.cache_dir)
|
rmtree(self.cache_dir)
|
||||||
else:
|
else:
|
||||||
|
log.warn(
|
||||||
|
(
|
||||||
|
f"Encountered file instead of directory at cache path "
|
||||||
|
f"for '{self.model_name}'. Removing file and replacing with a directory."
|
||||||
|
),
|
||||||
|
)
|
||||||
self.cache_dir.unlink()
|
self.cache_dir.unlink()
|
||||||
self.cache_dir.mkdir(parents=True, exist_ok=True)
|
self.cache_dir.mkdir(parents=True, exist_ok=True)
|
||||||
|
|
||||||
|
|
||||||
|
# HF deep copies configs, so we need to make session options picklable
|
||||||
|
class PicklableSessionOptions(ort.SessionOptions):
|
||||||
|
def __getstate__(self) -> bytes:
|
||||||
|
return pickle.dumps([(attr, getattr(self, attr)) for attr in dir(self) if not callable(getattr(self, attr))])
|
||||||
|
|
||||||
|
def __setstate__(self, state: Any) -> None:
|
||||||
|
self.__init__() # type: ignore
|
||||||
|
for attr, val in pickle.loads(state):
|
||||||
|
setattr(self, attr, val)
|
||||||
|
|||||||
@@ -46,7 +46,7 @@ class ModelCache:
|
|||||||
model: The requested model.
|
model: The requested model.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
key = self.cache.build_key(model_name, model_type.value)
|
key = f"{model_name}{model_type.value}{model_kwargs.get('mode', '')}"
|
||||||
async with OptimisticLock(self.cache, key) as lock:
|
async with OptimisticLock(self.cache, key) as lock:
|
||||||
model = await self.cache.get(key)
|
model = await self.cache.get(key)
|
||||||
if model is None:
|
if model is None:
|
||||||
|
|||||||
@@ -1,31 +1,148 @@
|
|||||||
from typing import Any
|
import os
|
||||||
|
import zipfile
|
||||||
|
from io import BytesIO
|
||||||
|
from typing import Any, Literal
|
||||||
|
|
||||||
from PIL.Image import Image
|
import onnxruntime as ort
|
||||||
from sentence_transformers import SentenceTransformer
|
import torch
|
||||||
from sentence_transformers.util import snapshot_download
|
from clip_server.model.clip import BICUBIC, _convert_image_to_rgb
|
||||||
|
from clip_server.model.clip_onnx import _MODELS, _S3_BUCKET_V2, CLIPOnnxModel, download_model
|
||||||
|
from clip_server.model.pretrained_models import _VISUAL_MODEL_IMAGE_SIZE
|
||||||
|
from clip_server.model.tokenization import Tokenizer
|
||||||
|
from PIL import Image
|
||||||
|
from torchvision.transforms import CenterCrop, Compose, Normalize, Resize, ToTensor
|
||||||
|
|
||||||
|
from ..config import log
|
||||||
from ..schemas import ModelType
|
from ..schemas import ModelType
|
||||||
from .base import InferenceModel
|
from .base import InferenceModel
|
||||||
|
|
||||||
|
_ST_TO_JINA_MODEL_NAME = {
|
||||||
|
"clip-ViT-B-16": "ViT-B-16::openai",
|
||||||
|
"clip-ViT-B-32": "ViT-B-32::openai",
|
||||||
|
"clip-ViT-B-32-multilingual-v1": "M-CLIP/XLM-Roberta-Large-Vit-B-32",
|
||||||
|
"clip-ViT-L-14": "ViT-L-14::openai",
|
||||||
|
}
|
||||||
|
|
||||||
class CLIPSTEncoder(InferenceModel):
|
|
||||||
|
class CLIPEncoder(InferenceModel):
|
||||||
_model_type = ModelType.CLIP
|
_model_type = ModelType.CLIP
|
||||||
|
|
||||||
|
def __init__(
|
||||||
|
self,
|
||||||
|
model_name: str,
|
||||||
|
cache_dir: str | None = None,
|
||||||
|
mode: Literal["text", "vision"] | None = None,
|
||||||
|
**model_kwargs: Any,
|
||||||
|
) -> None:
|
||||||
|
if mode is not None and mode not in ("text", "vision"):
|
||||||
|
raise ValueError(f"Mode must be 'text', 'vision', or omitted; got '{mode}'")
|
||||||
|
if "vit-b" not in model_name.lower():
|
||||||
|
raise ValueError(f"Only ViT-B models are currently supported; got '{model_name}'")
|
||||||
|
self.mode = mode
|
||||||
|
jina_model_name = self._get_jina_model_name(model_name)
|
||||||
|
super().__init__(jina_model_name, cache_dir, **model_kwargs)
|
||||||
|
|
||||||
def _download(self, **model_kwargs: Any) -> None:
|
def _download(self, **model_kwargs: Any) -> None:
|
||||||
repo_id = self.model_name if "/" in self.model_name else f"sentence-transformers/{self.model_name}"
|
models: tuple[tuple[str, str], tuple[str, str]] = _MODELS[self.model_name]
|
||||||
snapshot_download(
|
text_onnx_path = self.cache_dir / "textual.onnx"
|
||||||
cache_dir=self.cache_dir,
|
vision_onnx_path = self.cache_dir / "visual.onnx"
|
||||||
repo_id=repo_id,
|
|
||||||
library_name="sentence-transformers",
|
if not text_onnx_path.is_file():
|
||||||
ignore_files=["flax_model.msgpack", "rust_model.ot", "tf_model.h5"],
|
self._download_model(*models[0])
|
||||||
)
|
|
||||||
|
if not vision_onnx_path.is_file():
|
||||||
|
self._download_model(*models[1])
|
||||||
|
|
||||||
def _load(self, **model_kwargs: Any) -> None:
|
def _load(self, **model_kwargs: Any) -> None:
|
||||||
self.model = SentenceTransformer(
|
if self.mode == "text" or self.mode is None:
|
||||||
self.model_name,
|
self.text_model = ort.InferenceSession(
|
||||||
cache_folder=self.cache_dir.as_posix(),
|
self.cache_dir / "textual.onnx",
|
||||||
**model_kwargs,
|
sess_options=self.sess_options,
|
||||||
)
|
providers=self.providers,
|
||||||
|
provider_options=self.provider_options,
|
||||||
|
)
|
||||||
|
self.text_outputs = [output.name for output in self.text_model.get_outputs()]
|
||||||
|
self.tokenizer = Tokenizer(self.model_name)
|
||||||
|
|
||||||
def _predict(self, image_or_text: Image | str) -> list[float]:
|
if self.mode == "vision" or self.mode is None:
|
||||||
return self.model.encode(image_or_text).tolist()
|
self.vision_model = ort.InferenceSession(
|
||||||
|
self.cache_dir / "visual.onnx",
|
||||||
|
sess_options=self.sess_options,
|
||||||
|
providers=self.providers,
|
||||||
|
provider_options=self.provider_options,
|
||||||
|
)
|
||||||
|
self.vision_outputs = [output.name for output in self.vision_model.get_outputs()]
|
||||||
|
|
||||||
|
image_size = _VISUAL_MODEL_IMAGE_SIZE[CLIPOnnxModel.get_model_name(self.model_name)]
|
||||||
|
self.transform = _transform_pil_image(image_size)
|
||||||
|
|
||||||
|
def _predict(self, image_or_text: Image.Image | str) -> list[float]:
|
||||||
|
if isinstance(image_or_text, bytes):
|
||||||
|
image_or_text = Image.open(BytesIO(image_or_text))
|
||||||
|
|
||||||
|
match image_or_text:
|
||||||
|
case Image.Image():
|
||||||
|
if self.mode == "text":
|
||||||
|
raise TypeError("Cannot encode image as text-only model")
|
||||||
|
pixel_values = self.transform(image_or_text)
|
||||||
|
assert isinstance(pixel_values, torch.Tensor)
|
||||||
|
pixel_values = torch.unsqueeze(pixel_values, 0).numpy()
|
||||||
|
outputs = self.vision_model.run(self.vision_outputs, {"pixel_values": pixel_values})
|
||||||
|
case str():
|
||||||
|
if self.mode == "vision":
|
||||||
|
raise TypeError("Cannot encode text as vision-only model")
|
||||||
|
text_inputs: dict[str, torch.Tensor] = self.tokenizer(image_or_text)
|
||||||
|
inputs = {
|
||||||
|
"input_ids": text_inputs["input_ids"].int().numpy(),
|
||||||
|
"attention_mask": text_inputs["attention_mask"].int().numpy(),
|
||||||
|
}
|
||||||
|
outputs = self.text_model.run(self.text_outputs, inputs)
|
||||||
|
case _:
|
||||||
|
raise TypeError(f"Expected Image or str, but got: {type(image_or_text)}")
|
||||||
|
|
||||||
|
return outputs[0][0].tolist()
|
||||||
|
|
||||||
|
def _get_jina_model_name(self, model_name: str) -> str:
|
||||||
|
if model_name in _MODELS:
|
||||||
|
return model_name
|
||||||
|
elif model_name in _ST_TO_JINA_MODEL_NAME:
|
||||||
|
log.warn(
|
||||||
|
(
|
||||||
|
f"Sentence-Transformer models like '{model_name}' are not supported."
|
||||||
|
f"Using '{_ST_TO_JINA_MODEL_NAME[model_name]}' instead as it is the best match for '{model_name}'."
|
||||||
|
),
|
||||||
|
)
|
||||||
|
return _ST_TO_JINA_MODEL_NAME[model_name]
|
||||||
|
else:
|
||||||
|
raise ValueError(f"Unknown model name {model_name}.")
|
||||||
|
|
||||||
|
def _download_model(self, model_name: str, model_md5: str) -> bool:
|
||||||
|
# downloading logic is adapted from clip-server's CLIPOnnxModel class
|
||||||
|
download_model(
|
||||||
|
url=_S3_BUCKET_V2 + model_name,
|
||||||
|
target_folder=self.cache_dir.as_posix(),
|
||||||
|
md5sum=model_md5,
|
||||||
|
with_resume=True,
|
||||||
|
)
|
||||||
|
file = self.cache_dir / model_name.split("/")[1]
|
||||||
|
if file.suffix == ".zip":
|
||||||
|
with zipfile.ZipFile(file, "r") as zip_ref:
|
||||||
|
zip_ref.extractall(self.cache_dir)
|
||||||
|
os.remove(file)
|
||||||
|
return True
|
||||||
|
|
||||||
|
|
||||||
|
# same as `_transform_blob` without `_blob2image`
|
||||||
|
def _transform_pil_image(n_px: int) -> Compose:
|
||||||
|
return Compose(
|
||||||
|
[
|
||||||
|
Resize(n_px, interpolation=BICUBIC),
|
||||||
|
CenterCrop(n_px),
|
||||||
|
_convert_image_to_rgb,
|
||||||
|
ToTensor(),
|
||||||
|
Normalize(
|
||||||
|
(0.48145466, 0.4578275, 0.40821073),
|
||||||
|
(0.26862954, 0.26130258, 0.27577711),
|
||||||
|
),
|
||||||
|
]
|
||||||
|
)
|
||||||
|
|||||||
@@ -4,11 +4,11 @@ from typing import Any
|
|||||||
|
|
||||||
import cv2
|
import cv2
|
||||||
import numpy as np
|
import numpy as np
|
||||||
|
import onnxruntime as ort
|
||||||
from insightface.model_zoo import ArcFaceONNX, RetinaFace
|
from insightface.model_zoo import ArcFaceONNX, RetinaFace
|
||||||
from insightface.utils.face_align import norm_crop
|
from insightface.utils.face_align import norm_crop
|
||||||
from insightface.utils.storage import BASE_REPO_URL, download_file
|
from insightface.utils.storage import BASE_REPO_URL, download_file
|
||||||
|
|
||||||
from ..config import settings
|
|
||||||
from ..schemas import ModelType
|
from ..schemas import ModelType
|
||||||
from .base import InferenceModel
|
from .base import InferenceModel
|
||||||
|
|
||||||
@@ -19,11 +19,11 @@ class FaceRecognizer(InferenceModel):
|
|||||||
def __init__(
|
def __init__(
|
||||||
self,
|
self,
|
||||||
model_name: str,
|
model_name: str,
|
||||||
min_score: float = settings.min_face_score,
|
min_score: float = 0.7,
|
||||||
cache_dir: Path | str | None = None,
|
cache_dir: Path | str | None = None,
|
||||||
**model_kwargs: Any,
|
**model_kwargs: Any,
|
||||||
) -> None:
|
) -> None:
|
||||||
self.min_score = min_score
|
self.min_score = model_kwargs.pop("minScore", min_score)
|
||||||
super().__init__(model_name, cache_dir, **model_kwargs)
|
super().__init__(model_name, cache_dir, **model_kwargs)
|
||||||
|
|
||||||
def _download(self, **model_kwargs: Any) -> None:
|
def _download(self, **model_kwargs: Any) -> None:
|
||||||
@@ -42,21 +42,39 @@ class FaceRecognizer(InferenceModel):
|
|||||||
rec_file = next(self.cache_dir.glob("w600k_*.onnx"))
|
rec_file = next(self.cache_dir.glob("w600k_*.onnx"))
|
||||||
except StopIteration:
|
except StopIteration:
|
||||||
raise FileNotFoundError("Facial recognition models not found in cache directory")
|
raise FileNotFoundError("Facial recognition models not found in cache directory")
|
||||||
self.det_model = RetinaFace(det_file.as_posix())
|
|
||||||
self.rec_model = ArcFaceONNX(rec_file.as_posix())
|
self.det_model = RetinaFace(
|
||||||
|
session=ort.InferenceSession(
|
||||||
|
det_file.as_posix(),
|
||||||
|
sess_options=self.sess_options,
|
||||||
|
providers=self.providers,
|
||||||
|
provider_options=self.provider_options,
|
||||||
|
),
|
||||||
|
)
|
||||||
|
self.rec_model = ArcFaceONNX(
|
||||||
|
rec_file.as_posix(),
|
||||||
|
session=ort.InferenceSession(
|
||||||
|
rec_file.as_posix(),
|
||||||
|
sess_options=self.sess_options,
|
||||||
|
providers=self.providers,
|
||||||
|
provider_options=self.provider_options,
|
||||||
|
),
|
||||||
|
)
|
||||||
|
|
||||||
self.det_model.prepare(
|
self.det_model.prepare(
|
||||||
ctx_id=-1,
|
ctx_id=0,
|
||||||
det_thresh=self.min_score,
|
det_thresh=self.min_score,
|
||||||
input_size=(640, 640),
|
input_size=(640, 640),
|
||||||
)
|
)
|
||||||
self.rec_model.prepare(ctx_id=-1)
|
self.rec_model.prepare(ctx_id=0)
|
||||||
|
|
||||||
def _predict(self, image: cv2.Mat) -> list[dict[str, Any]]:
|
def _predict(self, image: np.ndarray[int, np.dtype[Any]] | bytes) -> list[dict[str, Any]]:
|
||||||
|
if isinstance(image, bytes):
|
||||||
|
image = cv2.imdecode(np.frombuffer(image, np.uint8), cv2.IMREAD_COLOR)
|
||||||
bboxes, kpss = self.det_model.detect(image)
|
bboxes, kpss = self.det_model.detect(image)
|
||||||
if bboxes.size == 0:
|
if bboxes.size == 0:
|
||||||
return []
|
return []
|
||||||
assert isinstance(kpss, np.ndarray)
|
assert isinstance(image, np.ndarray) and isinstance(kpss, np.ndarray)
|
||||||
|
|
||||||
scores = bboxes[:, 4].tolist()
|
scores = bboxes[:, 4].tolist()
|
||||||
bboxes = bboxes[:, :4].round().tolist()
|
bboxes = bboxes[:, :4].round().tolist()
|
||||||
@@ -85,3 +103,6 @@ class FaceRecognizer(InferenceModel):
|
|||||||
@property
|
@property
|
||||||
def cached(self) -> bool:
|
def cached(self) -> bool:
|
||||||
return self.cache_dir.is_dir() and any(self.cache_dir.glob("*.onnx"))
|
return self.cache_dir.is_dir() and any(self.cache_dir.glob("*.onnx"))
|
||||||
|
|
||||||
|
def configure(self, **model_kwargs: Any) -> None:
|
||||||
|
self.det_model.det_thresh = model_kwargs.pop("minScore", self.det_model.det_thresh)
|
||||||
|
|||||||
@@ -1,11 +1,14 @@
|
|||||||
|
from io import BytesIO
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import Any
|
from typing import Any
|
||||||
|
|
||||||
from huggingface_hub import snapshot_download
|
from huggingface_hub import snapshot_download
|
||||||
from PIL.Image import Image
|
from optimum.onnxruntime import ORTModelForImageClassification
|
||||||
from transformers.pipelines import pipeline
|
from optimum.pipelines import pipeline
|
||||||
|
from PIL import Image
|
||||||
|
from transformers import AutoImageProcessor
|
||||||
|
|
||||||
from ..config import settings
|
from ..config import log
|
||||||
from ..schemas import ModelType
|
from ..schemas import ModelType
|
||||||
from .base import InferenceModel
|
from .base import InferenceModel
|
||||||
|
|
||||||
@@ -16,27 +19,57 @@ class ImageClassifier(InferenceModel):
|
|||||||
def __init__(
|
def __init__(
|
||||||
self,
|
self,
|
||||||
model_name: str,
|
model_name: str,
|
||||||
min_score: float = settings.min_tag_score,
|
min_score: float = 0.9,
|
||||||
cache_dir: Path | str | None = None,
|
cache_dir: Path | str | None = None,
|
||||||
**model_kwargs: Any,
|
**model_kwargs: Any,
|
||||||
) -> None:
|
) -> None:
|
||||||
self.min_score = min_score
|
self.min_score = model_kwargs.pop("minScore", min_score)
|
||||||
super().__init__(model_name, cache_dir, **model_kwargs)
|
super().__init__(model_name, cache_dir, **model_kwargs)
|
||||||
|
|
||||||
def _download(self, **model_kwargs: Any) -> None:
|
def _download(self, **model_kwargs: Any) -> None:
|
||||||
snapshot_download(
|
snapshot_download(
|
||||||
cache_dir=self.cache_dir, repo_id=self.model_name, allow_patterns=["*.bin", "*.json", "*.txt"]
|
cache_dir=self.cache_dir,
|
||||||
|
repo_id=self.model_name,
|
||||||
|
allow_patterns=["*.bin", "*.json", "*.txt"],
|
||||||
|
local_dir=self.cache_dir,
|
||||||
|
local_dir_use_symlinks=True,
|
||||||
)
|
)
|
||||||
|
|
||||||
def _load(self, **model_kwargs: Any) -> None:
|
def _load(self, **model_kwargs: Any) -> None:
|
||||||
self.model = pipeline(
|
processor = AutoImageProcessor.from_pretrained(self.cache_dir, cache_dir=self.cache_dir)
|
||||||
self.model_type.value,
|
model_path = self.cache_dir / "model.onnx"
|
||||||
self.model_name,
|
model_kwargs |= {
|
||||||
model_kwargs={"cache_dir": self.cache_dir, **model_kwargs},
|
"cache_dir": self.cache_dir,
|
||||||
)
|
"provider": self.providers[0],
|
||||||
|
"provider_options": self.provider_options[0],
|
||||||
|
"session_options": self.sess_options,
|
||||||
|
}
|
||||||
|
|
||||||
def _predict(self, image: Image) -> list[str]:
|
if model_path.exists():
|
||||||
|
model = ORTModelForImageClassification.from_pretrained(self.cache_dir, **model_kwargs)
|
||||||
|
self.model = pipeline(self.model_type.value, model, feature_extractor=processor)
|
||||||
|
else:
|
||||||
|
log.info(
|
||||||
|
(
|
||||||
|
f"ONNX model not found in cache directory for '{self.model_name}'."
|
||||||
|
"Exporting optimized model for future use."
|
||||||
|
),
|
||||||
|
)
|
||||||
|
self.sess_options.optimized_model_filepath = model_path.as_posix()
|
||||||
|
self.model = pipeline(
|
||||||
|
self.model_type.value,
|
||||||
|
self.model_name,
|
||||||
|
model_kwargs=model_kwargs,
|
||||||
|
feature_extractor=processor,
|
||||||
|
)
|
||||||
|
|
||||||
|
def _predict(self, image: Image.Image | bytes) -> list[str]:
|
||||||
|
if isinstance(image, bytes):
|
||||||
|
image = Image.open(BytesIO(image))
|
||||||
predictions: list[dict[str, Any]] = self.model(image) # type: ignore
|
predictions: list[dict[str, Any]] = self.model(image) # type: ignore
|
||||||
tags = [tag for pred in predictions for tag in pred["label"].split(", ") if pred["score"] >= self.min_score]
|
tags = [tag for pred in predictions for tag in pred["label"].split(", ") if pred["score"] >= self.min_score]
|
||||||
|
|
||||||
return tags
|
return tags
|
||||||
|
|
||||||
|
def configure(self, **model_kwargs: Any) -> None:
|
||||||
|
self.min_score = model_kwargs.pop("minScore", self.min_score)
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
from enum import Enum
|
from enum import StrEnum
|
||||||
|
|
||||||
from pydantic import BaseModel
|
from pydantic import BaseModel
|
||||||
|
|
||||||
@@ -20,18 +20,6 @@ class MessageResponse(BaseModel):
|
|||||||
message: str
|
message: str
|
||||||
|
|
||||||
|
|
||||||
class TagResponse(BaseModel):
|
|
||||||
__root__: list[str]
|
|
||||||
|
|
||||||
|
|
||||||
class Embedding(BaseModel):
|
|
||||||
__root__: list[float]
|
|
||||||
|
|
||||||
|
|
||||||
class EmbeddingResponse(BaseModel):
|
|
||||||
__root__: Embedding
|
|
||||||
|
|
||||||
|
|
||||||
class BoundingBox(BaseModel):
|
class BoundingBox(BaseModel):
|
||||||
x1: int
|
x1: int
|
||||||
y1: int
|
y1: int
|
||||||
@@ -39,23 +27,7 @@ class BoundingBox(BaseModel):
|
|||||||
y2: int
|
y2: int
|
||||||
|
|
||||||
|
|
||||||
class Face(BaseModel):
|
class ModelType(StrEnum):
|
||||||
image_width: int
|
|
||||||
image_height: int
|
|
||||||
bounding_box: BoundingBox
|
|
||||||
score: float
|
|
||||||
embedding: Embedding
|
|
||||||
|
|
||||||
class Config:
|
|
||||||
alias_generator = to_lower_camel
|
|
||||||
allow_population_by_field_name = True
|
|
||||||
|
|
||||||
|
|
||||||
class FaceResponse(BaseModel):
|
|
||||||
__root__: list[Face]
|
|
||||||
|
|
||||||
|
|
||||||
class ModelType(Enum):
|
|
||||||
IMAGE_CLASSIFICATION = "image-classification"
|
IMAGE_CLASSIFICATION = "image-classification"
|
||||||
CLIP = "clip"
|
CLIP = "clip"
|
||||||
FACIAL_RECOGNITION = "facial-recognition"
|
FACIAL_RECOGNITION = "facial-recognition"
|
||||||
|
|||||||
@@ -1,17 +1,20 @@
|
|||||||
|
import pickle
|
||||||
from io import BytesIO
|
from io import BytesIO
|
||||||
from typing import TypeAlias
|
from typing import TypeAlias
|
||||||
from unittest import mock
|
from unittest import mock
|
||||||
|
|
||||||
import cv2
|
import cv2
|
||||||
import numpy as np
|
import numpy as np
|
||||||
|
import onnxruntime as ort
|
||||||
import pytest
|
import pytest
|
||||||
from fastapi.testclient import TestClient
|
from fastapi.testclient import TestClient
|
||||||
from PIL import Image
|
from PIL import Image
|
||||||
from pytest_mock import MockerFixture
|
from pytest_mock import MockerFixture
|
||||||
|
|
||||||
from .config import settings
|
from .config import settings
|
||||||
|
from .models.base import PicklableSessionOptions
|
||||||
from .models.cache import ModelCache
|
from .models.cache import ModelCache
|
||||||
from .models.clip import CLIPSTEncoder
|
from .models.clip import CLIPEncoder
|
||||||
from .models.facial_recognition import FaceRecognizer
|
from .models.facial_recognition import FaceRecognizer
|
||||||
from .models.image_classification import ImageClassifier
|
from .models.image_classification import ImageClassifier
|
||||||
from .schemas import ModelType
|
from .schemas import ModelType
|
||||||
@@ -72,45 +75,47 @@ class TestCLIP:
|
|||||||
embedding = np.random.rand(512).astype(np.float32)
|
embedding = np.random.rand(512).astype(np.float32)
|
||||||
|
|
||||||
def test_eager_init(self, mocker: MockerFixture) -> None:
|
def test_eager_init(self, mocker: MockerFixture) -> None:
|
||||||
mocker.patch.object(CLIPSTEncoder, "download")
|
mocker.patch.object(CLIPEncoder, "download")
|
||||||
mock_load = mocker.patch.object(CLIPSTEncoder, "load")
|
mock_load = mocker.patch.object(CLIPEncoder, "load")
|
||||||
clip_model = CLIPSTEncoder("test_model_name", cache_dir="test_cache", eager=True, test_arg="test_arg")
|
clip_model = CLIPEncoder("ViT-B-32::openai", cache_dir="test_cache", eager=True, test_arg="test_arg")
|
||||||
|
|
||||||
assert clip_model.model_name == "test_model_name"
|
assert clip_model.model_name == "ViT-B-32::openai"
|
||||||
mock_load.assert_called_once_with(test_arg="test_arg")
|
mock_load.assert_called_once_with(test_arg="test_arg")
|
||||||
|
|
||||||
def test_lazy_init(self, mocker: MockerFixture) -> None:
|
def test_lazy_init(self, mocker: MockerFixture) -> None:
|
||||||
mock_download = mocker.patch.object(CLIPSTEncoder, "download")
|
mock_download = mocker.patch.object(CLIPEncoder, "download")
|
||||||
mock_load = mocker.patch.object(CLIPSTEncoder, "load")
|
mock_load = mocker.patch.object(CLIPEncoder, "load")
|
||||||
clip_model = CLIPSTEncoder("test_model_name", cache_dir="test_cache", eager=False, test_arg="test_arg")
|
clip_model = CLIPEncoder("ViT-B-32::openai", cache_dir="test_cache", eager=False, test_arg="test_arg")
|
||||||
|
|
||||||
assert clip_model.model_name == "test_model_name"
|
assert clip_model.model_name == "ViT-B-32::openai"
|
||||||
mock_download.assert_called_once_with(test_arg="test_arg")
|
mock_download.assert_called_once_with(test_arg="test_arg")
|
||||||
mock_load.assert_not_called()
|
mock_load.assert_not_called()
|
||||||
|
|
||||||
def test_basic_image(self, pil_image: Image.Image, mocker: MockerFixture) -> None:
|
def test_basic_image(self, pil_image: Image.Image, mocker: MockerFixture) -> None:
|
||||||
mocker.patch.object(CLIPSTEncoder, "load")
|
mocker.patch.object(CLIPEncoder, "download")
|
||||||
clip_encoder = CLIPSTEncoder("test_model_name", cache_dir="test_cache")
|
mocked = mocker.patch("app.models.clip.ort.InferenceSession", autospec=True)
|
||||||
clip_encoder.model = mock.Mock()
|
mocked.return_value.run.return_value = [[self.embedding]]
|
||||||
clip_encoder.model.encode.return_value = self.embedding
|
clip_encoder = CLIPEncoder("ViT-B-32::openai", cache_dir="test_cache", mode="vision")
|
||||||
|
assert clip_encoder.mode == "vision"
|
||||||
embedding = clip_encoder.predict(pil_image)
|
embedding = clip_encoder.predict(pil_image)
|
||||||
|
|
||||||
assert isinstance(embedding, list)
|
assert isinstance(embedding, list)
|
||||||
assert len(embedding) == 512
|
assert len(embedding) == 512
|
||||||
assert all([isinstance(num, float) for num in embedding])
|
assert all([isinstance(num, float) for num in embedding])
|
||||||
clip_encoder.model.encode.assert_called_once()
|
clip_encoder.vision_model.run.assert_called_once()
|
||||||
|
|
||||||
def test_basic_text(self, mocker: MockerFixture) -> None:
|
def test_basic_text(self, mocker: MockerFixture) -> None:
|
||||||
mocker.patch.object(CLIPSTEncoder, "load")
|
mocker.patch.object(CLIPEncoder, "download")
|
||||||
clip_encoder = CLIPSTEncoder("test_model_name", cache_dir="test_cache")
|
mocked = mocker.patch("app.models.clip.ort.InferenceSession", autospec=True)
|
||||||
clip_encoder.model = mock.Mock()
|
mocked.return_value.run.return_value = [[self.embedding]]
|
||||||
clip_encoder.model.encode.return_value = self.embedding
|
clip_encoder = CLIPEncoder("ViT-B-32::openai", cache_dir="test_cache", mode="text")
|
||||||
|
assert clip_encoder.mode == "text"
|
||||||
embedding = clip_encoder.predict("test search query")
|
embedding = clip_encoder.predict("test search query")
|
||||||
|
|
||||||
assert isinstance(embedding, list)
|
assert isinstance(embedding, list)
|
||||||
assert len(embedding) == 512
|
assert len(embedding) == 512
|
||||||
assert all([isinstance(num, float) for num in embedding])
|
assert all([isinstance(num, float) for num in embedding])
|
||||||
clip_encoder.model.encode.assert_called_once()
|
clip_encoder.text_model.run.assert_called_once()
|
||||||
|
|
||||||
|
|
||||||
class TestFaceRecognition:
|
class TestFaceRecognition:
|
||||||
@@ -254,3 +259,13 @@ class TestEndpoints:
|
|||||||
headers=headers,
|
headers=headers,
|
||||||
)
|
)
|
||||||
assert response.status_code == 200
|
assert response.status_code == 200
|
||||||
|
|
||||||
|
|
||||||
|
def test_sess_options() -> None:
|
||||||
|
sess_options = PicklableSessionOptions()
|
||||||
|
sess_options.intra_op_num_threads = 1
|
||||||
|
sess_options.inter_op_num_threads = 1
|
||||||
|
pickled = pickle.dumps(sess_options)
|
||||||
|
unpickled = pickle.loads(pickled)
|
||||||
|
assert unpickled.intra_op_num_threads == 1
|
||||||
|
assert unpickled.inter_op_num_threads == 1
|
||||||
|
|||||||
2468
machine-learning/poetry.lock
generated
2468
machine-learning/poetry.lock
generated
File diff suppressed because it is too large
Load Diff
@@ -1,6 +1,6 @@
|
|||||||
[tool.poetry]
|
[tool.poetry]
|
||||||
name = "machine-learning"
|
name = "machine-learning"
|
||||||
version = "1.72.2"
|
version = "1.76.1"
|
||||||
description = ""
|
description = ""
|
||||||
authors = ["Hau Tran <alex.tran1502@gmail.com>"]
|
authors = ["Hau Tran <alex.tran1502@gmail.com>"]
|
||||||
readme = "README.md"
|
readme = "README.md"
|
||||||
@@ -13,7 +13,6 @@ torch = [
|
|||||||
{markers = "platform_machine == 'amd64' or platform_machine == 'x86_64'", version = "=2.0.1", source = "pytorch-cpu"}
|
{markers = "platform_machine == 'amd64' or platform_machine == 'x86_64'", version = "=2.0.1", source = "pytorch-cpu"}
|
||||||
]
|
]
|
||||||
transformers = "^4.29.2"
|
transformers = "^4.29.2"
|
||||||
sentence-transformers = "^2.2.2"
|
|
||||||
onnxruntime = "^1.15.0"
|
onnxruntime = "^1.15.0"
|
||||||
insightface = "^0.7.3"
|
insightface = "^0.7.3"
|
||||||
opencv-python-headless = "^4.7.0.72"
|
opencv-python-headless = "^4.7.0.72"
|
||||||
@@ -22,6 +21,18 @@ fastapi = "^0.95.2"
|
|||||||
uvicorn = {extras = ["standard"], version = "^0.22.0"}
|
uvicorn = {extras = ["standard"], version = "^0.22.0"}
|
||||||
pydantic = "^1.10.8"
|
pydantic = "^1.10.8"
|
||||||
aiocache = "^0.12.1"
|
aiocache = "^0.12.1"
|
||||||
|
optimum = "^1.9.1"
|
||||||
|
torchvision = [
|
||||||
|
{markers = "platform_machine == 'arm64' or platform_machine == 'aarch64'", version = "=0.15.2", source = "pypi"},
|
||||||
|
{markers = "platform_machine == 'amd64' or platform_machine == 'x86_64'", version = "=0.15.2", source = "pytorch-cpu"}
|
||||||
|
]
|
||||||
|
rich = "^13.4.2"
|
||||||
|
ftfy = "^6.1.1"
|
||||||
|
setuptools = "^68.0.0"
|
||||||
|
open-clip-torch = "^2.20.0"
|
||||||
|
python-multipart = "^0.0.6"
|
||||||
|
orjson = "^3.9.5"
|
||||||
|
safetensors = "0.3.2"
|
||||||
|
|
||||||
[tool.poetry.group.dev.dependencies]
|
[tool.poetry.group.dev.dependencies]
|
||||||
mypy = "^1.3.0"
|
mypy = "^1.3.0"
|
||||||
@@ -62,13 +73,20 @@ warn_untyped_fields = true
|
|||||||
[[tool.mypy.overrides]]
|
[[tool.mypy.overrides]]
|
||||||
module = [
|
module = [
|
||||||
"huggingface_hub",
|
"huggingface_hub",
|
||||||
"transformers.pipelines",
|
"transformers",
|
||||||
"cv2",
|
"cv2",
|
||||||
"insightface.model_zoo",
|
"insightface.model_zoo",
|
||||||
"insightface.utils.face_align",
|
"insightface.utils.face_align",
|
||||||
"insightface.utils.storage",
|
"insightface.utils.storage",
|
||||||
"sentence_transformers",
|
"onnxruntime",
|
||||||
"sentence_transformers.util",
|
"optimum",
|
||||||
|
"optimum.pipelines",
|
||||||
|
"optimum.onnxruntime",
|
||||||
|
"clip_server.model.clip",
|
||||||
|
"clip_server.model.clip_onnx",
|
||||||
|
"clip_server.model.pretrained_models",
|
||||||
|
"clip_server.model.tokenization",
|
||||||
|
"torchvision.transforms",
|
||||||
"aiocache.backends.memory",
|
"aiocache.backends.memory",
|
||||||
"aiocache.lock",
|
"aiocache.lock",
|
||||||
"aiocache.plugins"
|
"aiocache.plugins"
|
||||||
|
|||||||
2
machine-learning/requirements.txt
Normal file
2
machine-learning/requirements.txt
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
# requirements to be installed with `--no-deps` flag
|
||||||
|
clip-server==0.8.*
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
{
|
{
|
||||||
"flutterSdkVersion": "3.10.5",
|
"flutterSdkVersion": "3.13.0",
|
||||||
"flavors": {}
|
"flavors": {}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -52,7 +52,7 @@ android {
|
|||||||
defaultConfig {
|
defaultConfig {
|
||||||
// TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
|
// TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
|
||||||
applicationId "app.alextran.immich"
|
applicationId "app.alextran.immich"
|
||||||
minSdkVersion 23
|
minSdkVersion 26
|
||||||
targetSdkVersion 33
|
targetSdkVersion 33
|
||||||
versionCode flutterVersionCode.toInteger()
|
versionCode flutterVersionCode.toInteger()
|
||||||
versionName flutterVersionName
|
versionName flutterVersionName
|
||||||
|
|||||||
@@ -56,7 +56,7 @@
|
|||||||
|
|
||||||
<uses-permission android:name="android.permission.INTERNET" />
|
<uses-permission android:name="android.permission.INTERNET" />
|
||||||
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
|
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
|
||||||
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
|
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" android:maxSdkVersion="32"/>
|
||||||
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
|
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
|
||||||
<uses-permission android:name="android.permission.ACCESS_MEDIA_LOCATION" />
|
<uses-permission android:name="android.permission.ACCESS_MEDIA_LOCATION" />
|
||||||
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />
|
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />
|
||||||
@@ -64,11 +64,16 @@
|
|||||||
<uses-permission android:name="android.permission.READ_MEDIA_AUDIO" />
|
<uses-permission android:name="android.permission.READ_MEDIA_AUDIO" />
|
||||||
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
|
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
|
||||||
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
|
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
|
||||||
|
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
|
||||||
|
|
||||||
<queries>
|
<queries>
|
||||||
<intent>
|
<intent>
|
||||||
<action android:name="android.intent.action.VIEW" />
|
<action android:name="android.intent.action.VIEW" />
|
||||||
<data android:scheme="https" />
|
<data android:scheme="https" />
|
||||||
</intent>
|
</intent>
|
||||||
|
<intent>
|
||||||
|
<action android:name="android.intent.action.VIEW" />
|
||||||
|
<data android:scheme="geo" />
|
||||||
|
</intent>
|
||||||
</queries>
|
</queries>
|
||||||
</manifest>
|
</manifest>
|
||||||
@@ -35,8 +35,8 @@ platform :android do
|
|||||||
task: 'bundle',
|
task: 'bundle',
|
||||||
build_type: 'Release',
|
build_type: 'Release',
|
||||||
properties: {
|
properties: {
|
||||||
"android.injected.version.code" => 95,
|
"android.injected.version.code" => 99,
|
||||||
"android.injected.version.name" => "1.72.2",
|
"android.injected.version.name" => "1.76.1",
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
upload_to_play_store(skip_upload_apk: true, skip_upload_images: true, skip_upload_screenshots: true, aab: '../build/app/outputs/bundle/release/app-release.aab')
|
upload_to_play_store(skip_upload_apk: true, skip_upload_images: true, skip_upload_screenshots: true, aab: '../build/app/outputs/bundle/release/app-release.aab')
|
||||||
|
|||||||
@@ -5,17 +5,17 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
<testcase classname="fastlane.lanes" name="0: default_platform" time="0.000239">
|
<testcase classname="fastlane.lanes" name="0: default_platform" time="0.00023">
|
||||||
|
|
||||||
</testcase>
|
</testcase>
|
||||||
|
|
||||||
|
|
||||||
<testcase classname="fastlane.lanes" name="1: bundleRelease" time="68.788432">
|
<testcase classname="fastlane.lanes" name="1: bundleRelease" time="63.585931">
|
||||||
|
|
||||||
</testcase>
|
</testcase>
|
||||||
|
|
||||||
|
|
||||||
<testcase classname="fastlane.lanes" name="2: upload_to_play_store" time="29.76592">
|
<testcase classname="fastlane.lanes" name="2: upload_to_play_store" time="24.755096">
|
||||||
|
|
||||||
</testcase>
|
</testcase>
|
||||||
|
|
||||||
|
|||||||
@@ -2,60 +2,60 @@
|
|||||||
"add_to_album_bottom_sheet_added": "Added to {album}",
|
"add_to_album_bottom_sheet_added": "Added to {album}",
|
||||||
"add_to_album_bottom_sheet_already_exists": "Already in {album}",
|
"add_to_album_bottom_sheet_already_exists": "Already in {album}",
|
||||||
"advanced_settings_prefer_remote_subtitle": "Some devices are painfully slow to load thumbnails from assets on the device. Activate this setting to load remote images instead.",
|
"advanced_settings_prefer_remote_subtitle": "Some devices are painfully slow to load thumbnails from assets on the device. Activate this setting to load remote images instead.",
|
||||||
"advanced_settings_prefer_remote_title": "Prefer remote images",
|
"advanced_settings_prefer_remote_title": "Prefereix imatges remotes",
|
||||||
"advanced_settings_tile_subtitle": "Advanced user's settings",
|
"advanced_settings_tile_subtitle": "Advanced user's settings",
|
||||||
"advanced_settings_tile_title": "Avançat",
|
"advanced_settings_tile_title": "Avançat",
|
||||||
"advanced_settings_troubleshooting_subtitle": "Enable additional features for troubleshooting",
|
"advanced_settings_troubleshooting_subtitle": "Enable additional features for troubleshooting",
|
||||||
"advanced_settings_troubleshooting_title": "Resolució de problemes",
|
"advanced_settings_troubleshooting_title": "Resolució de problemes",
|
||||||
"album_info_card_backup_album_excluded": "EXCLUDED",
|
"album_info_card_backup_album_excluded": "Exclosos",
|
||||||
"album_info_card_backup_album_included": "INCLUDED",
|
"album_info_card_backup_album_included": "Inclosos",
|
||||||
"album_thumbnail_card_item": "1 item",
|
"album_thumbnail_card_item": "1 item",
|
||||||
"album_thumbnail_card_items": "{} items",
|
"album_thumbnail_card_items": "{} items",
|
||||||
"album_thumbnail_card_shared": " · Shared",
|
"album_thumbnail_card_shared": " · Shared",
|
||||||
"album_thumbnail_owned": "Owned",
|
"album_thumbnail_owned": "Owned",
|
||||||
"album_thumbnail_shared_by": "Compartit per {}",
|
"album_thumbnail_shared_by": "Compartit per {}",
|
||||||
"album_viewer_appbar_share_delete": "Delete album",
|
"album_viewer_appbar_share_delete": "Esborra l'àlbum",
|
||||||
"album_viewer_appbar_share_err_delete": "Failed to delete album",
|
"album_viewer_appbar_share_err_delete": "Error al esborrar l'àlbum",
|
||||||
"album_viewer_appbar_share_err_leave": "Failed to leave album",
|
"album_viewer_appbar_share_err_leave": "Error al sortir de l'àlbum",
|
||||||
"album_viewer_appbar_share_err_remove": "There are problems in removing assets from album",
|
"album_viewer_appbar_share_err_remove": "Hi ha hagut problemes al treure elements de l'àlbum",
|
||||||
"album_viewer_appbar_share_err_title": "Failed to change album title",
|
"album_viewer_appbar_share_err_title": "Error al modificar el títol de l'àlbum",
|
||||||
"album_viewer_appbar_share_leave": "Leave album",
|
"album_viewer_appbar_share_leave": "Surt de l'àlbum",
|
||||||
"album_viewer_appbar_share_remove": "Remove from album",
|
"album_viewer_appbar_share_remove": "Treu de l'àlbum",
|
||||||
"album_viewer_page_share_add_users": "Add users",
|
"album_viewer_page_share_add_users": "Afegeix usuaris",
|
||||||
"all_people_page_title": "People",
|
"all_people_page_title": "Persones",
|
||||||
"all_videos_page_title": "Vídeos",
|
"all_videos_page_title": "Vídeos",
|
||||||
"archive_page_no_archived_assets": "No s'ha trobat res arxivat",
|
"archive_page_no_archived_assets": "No s'ha trobat res arxivat",
|
||||||
"archive_page_title": "Arxiu({})",
|
"archive_page_title": "Arxiu({})",
|
||||||
"asset_list_layout_settings_dynamic_layout_title": "Dynamic layout",
|
"asset_list_layout_settings_dynamic_layout_title": "Dynamic layout",
|
||||||
"asset_list_layout_settings_group_automatically": "Automatic",
|
"asset_list_layout_settings_group_automatically": "Automàtic",
|
||||||
"asset_list_layout_settings_group_by": "Group assets by",
|
"asset_list_layout_settings_group_by": "Group assets by",
|
||||||
"asset_list_layout_settings_group_by_month": "Month",
|
"asset_list_layout_settings_group_by_month": "Month",
|
||||||
"asset_list_layout_settings_group_by_month_day": "Month + day",
|
"asset_list_layout_settings_group_by_month_day": "Month + day",
|
||||||
"asset_list_settings_subtitle": "Photo grid layout settings",
|
"asset_list_settings_subtitle": "Photo grid layout settings",
|
||||||
"asset_list_settings_title": "Photo Grid",
|
"asset_list_settings_title": "Photo Grid",
|
||||||
"backup_album_selection_page_albums_device": "Albums on device ({})",
|
"backup_album_selection_page_albums_device": "Àlbums al dispositiu ({})",
|
||||||
"backup_album_selection_page_albums_tap": "Tap to include, double tap to exclude",
|
"backup_album_selection_page_albums_tap": "Tap to include, double tap to exclude",
|
||||||
"backup_album_selection_page_assets_scatter": "Assets can scatter across multiple albums. Thus, albums can be included or excluded during the backup process.",
|
"backup_album_selection_page_assets_scatter": "Assets can scatter across multiple albums. Thus, albums can be included or excluded during the backup process.",
|
||||||
"backup_album_selection_page_select_albums": "Select albums",
|
"backup_album_selection_page_select_albums": "Selecciona àlbums",
|
||||||
"backup_album_selection_page_selection_info": "Selection Info",
|
"backup_album_selection_page_selection_info": "Informació de la selecció",
|
||||||
"backup_album_selection_page_total_assets": "Total unique assets",
|
"backup_album_selection_page_total_assets": "Total d'elements únics",
|
||||||
"backup_all": "All",
|
"backup_all": "All",
|
||||||
"backup_background_service_backup_failed_message": "Failed to backup assets. Retrying…",
|
"backup_background_service_backup_failed_message": "Failed to backup assets. Retrying…",
|
||||||
"backup_background_service_connection_failed_message": "Failed to connect to the server. Retrying…",
|
"backup_background_service_connection_failed_message": "Failed to connect to the server. Retrying…",
|
||||||
"backup_background_service_current_upload_notification": "Uploading {}",
|
"backup_background_service_current_upload_notification": "Pujant {}",
|
||||||
"backup_background_service_default_notification": "Checking for new assets…",
|
"backup_background_service_default_notification": "Cercant nous elements...",
|
||||||
"backup_background_service_error_title": "Backup error",
|
"backup_background_service_error_title": "Error copiant",
|
||||||
"backup_background_service_in_progress_notification": "Backing up your assets…",
|
"backup_background_service_in_progress_notification": "Copiant els teus elements",
|
||||||
"backup_background_service_upload_failure_notification": "Failed to upload {}",
|
"backup_background_service_upload_failure_notification": "Error al pujar {}",
|
||||||
"backup_controller_page_albums": "Backup Albums",
|
"backup_controller_page_albums": "Copia els àlbums",
|
||||||
"backup_controller_page_background_app_refresh_disabled_content": "Enable background app refresh in Settings > General > Background App Refresh in order to use background backup.",
|
"backup_controller_page_background_app_refresh_disabled_content": "Enable background app refresh in Settings > General > Background App Refresh in order to use background backup.",
|
||||||
"backup_controller_page_background_app_refresh_disabled_title": "Background app refresh disabled",
|
"backup_controller_page_background_app_refresh_disabled_title": "Background app refresh disabled",
|
||||||
"backup_controller_page_background_app_refresh_enable_button_text": "Go to settings",
|
"backup_controller_page_background_app_refresh_enable_button_text": "Vés a configuració",
|
||||||
"backup_controller_page_background_battery_info_link": "Show me how",
|
"backup_controller_page_background_battery_info_link": "Mostra'm com",
|
||||||
"backup_controller_page_background_battery_info_message": "For the best background backup experience, please disable any battery optimizations restricting background activity for Immich.\n\nSince this is device-specific, please lookup the required information for your device manufacturer.",
|
"backup_controller_page_background_battery_info_message": "For the best background backup experience, please disable any battery optimizations restricting background activity for Immich.\n\nSince this is device-specific, please lookup the required information for your device manufacturer.",
|
||||||
"backup_controller_page_background_battery_info_ok": "OK",
|
"backup_controller_page_background_battery_info_ok": "D'acord",
|
||||||
"backup_controller_page_background_battery_info_title": "Battery optimizations",
|
"backup_controller_page_background_battery_info_title": "Optimitzacions de bateria",
|
||||||
"backup_controller_page_background_charging": "Only while charging",
|
"backup_controller_page_background_charging": "Només mentre es carrega",
|
||||||
"backup_controller_page_background_configure_error": "Failed to configure the background service",
|
"backup_controller_page_background_configure_error": "Failed to configure the background service",
|
||||||
"backup_controller_page_background_delay": "Delay new assets backup: {}",
|
"backup_controller_page_background_delay": "Delay new assets backup: {}",
|
||||||
"backup_controller_page_background_description": "Turn on the background service to automatically backup any new assets without needing to open the app",
|
"backup_controller_page_background_description": "Turn on the background service to automatically backup any new assets without needing to open the app",
|
||||||
@@ -64,85 +64,90 @@
|
|||||||
"backup_controller_page_background_turn_off": "Turn off background service",
|
"backup_controller_page_background_turn_off": "Turn off background service",
|
||||||
"backup_controller_page_background_turn_on": "Turn on background service",
|
"backup_controller_page_background_turn_on": "Turn on background service",
|
||||||
"backup_controller_page_background_wifi": "Only on WiFi",
|
"backup_controller_page_background_wifi": "Only on WiFi",
|
||||||
"backup_controller_page_backup": "Backup",
|
"backup_controller_page_backup": "Còpia",
|
||||||
"backup_controller_page_backup_selected": "Selected: ",
|
"backup_controller_page_backup_selected": "Selected: ",
|
||||||
"backup_controller_page_backup_sub": "Backed up photos and videos",
|
"backup_controller_page_backup_sub": "Fotografies i vídeos copiats",
|
||||||
"backup_controller_page_cancel": "Cancel",
|
"backup_controller_page_cancel": "Cancel·la",
|
||||||
"backup_controller_page_created": "Created on: {}",
|
"backup_controller_page_created": "Created on: {}",
|
||||||
"backup_controller_page_desc_backup": "Turn on foreground backup to automatically upload new assets to the server when opening the app.",
|
"backup_controller_page_desc_backup": "Turn on foreground backup to automatically upload new assets to the server when opening the app.",
|
||||||
"backup_controller_page_excluded": "Excluded: ",
|
"backup_controller_page_excluded": "Exclosos:",
|
||||||
"backup_controller_page_failed": "Failed ({})",
|
"backup_controller_page_failed": "Failed ({})",
|
||||||
"backup_controller_page_filename": "File name: {} [{}]",
|
"backup_controller_page_filename": "File name: {} [{}]",
|
||||||
"backup_controller_page_id": "ID: {}",
|
"backup_controller_page_id": "ID: {}",
|
||||||
"backup_controller_page_info": "Backup Information",
|
"backup_controller_page_info": "Informació de la còpia",
|
||||||
"backup_controller_page_none_selected": "None selected",
|
"backup_controller_page_none_selected": "None selected",
|
||||||
"backup_controller_page_remainder": "Remainder",
|
"backup_controller_page_remainder": "Restant",
|
||||||
"backup_controller_page_remainder_sub": "Remaining photos and videos to back up from selection",
|
"backup_controller_page_remainder_sub": "Fotografies i vídeos restants per copiar de la selecció",
|
||||||
"backup_controller_page_select": "Select",
|
"backup_controller_page_select": "Selecciona",
|
||||||
"backup_controller_page_server_storage": "Server Storage",
|
"backup_controller_page_server_storage": "Server Storage",
|
||||||
"backup_controller_page_start_backup": "Start Backup",
|
"backup_controller_page_start_backup": "Inicia la còpia",
|
||||||
"backup_controller_page_status_off": "Automatic foreground backup is off",
|
"backup_controller_page_status_off": "Automatic foreground backup is off",
|
||||||
"backup_controller_page_status_on": "Automatic foreground backup is on",
|
"backup_controller_page_status_on": "Automatic foreground backup is on",
|
||||||
"backup_controller_page_storage_format": "{} of {} used",
|
"backup_controller_page_storage_format": "{} of {} used",
|
||||||
"backup_controller_page_to_backup": "Albums to be backup",
|
"backup_controller_page_to_backup": "Àlbums a copiar",
|
||||||
"backup_controller_page_total": "Total",
|
"backup_controller_page_total": "Total",
|
||||||
"backup_controller_page_total_sub": "All unique photos and videos from selected albums",
|
"backup_controller_page_total_sub": "Totes les fotografies i vídeos dels àlbums seleccionats",
|
||||||
"backup_controller_page_turn_off": "Turn off foreground backup",
|
"backup_controller_page_turn_off": "Turn off foreground backup",
|
||||||
"backup_controller_page_turn_on": "Turn on foreground backup",
|
"backup_controller_page_turn_on": "Turn on foreground backup",
|
||||||
"backup_controller_page_uploading_file_info": "Uploading file info",
|
"backup_controller_page_uploading_file_info": "Uploading file info",
|
||||||
"backup_err_only_album": "Cannot remove the only album",
|
"backup_err_only_album": "Cannot remove the only album",
|
||||||
"backup_info_card_assets": "assets",
|
"backup_info_card_assets": "elements",
|
||||||
|
"backup_manual_cancelled": "Cancelled",
|
||||||
|
"backup_manual_failed": "Failed",
|
||||||
|
"backup_manual_in_progress": "Upload already in progress. Try after sometime",
|
||||||
|
"backup_manual_success": "Success",
|
||||||
|
"backup_manual_title": "Upload status",
|
||||||
"cache_settings_album_thumbnails": "Library page thumbnails ({} assets)",
|
"cache_settings_album_thumbnails": "Library page thumbnails ({} assets)",
|
||||||
"cache_settings_clear_cache_button": "Clear cache",
|
"cache_settings_clear_cache_button": "Clear cache",
|
||||||
"cache_settings_clear_cache_button_title": "Clears the app's cache. This will significantly impact the app's performance until the cache has rebuilt.",
|
"cache_settings_clear_cache_button_title": "Clears the app's cache. This will significantly impact the app's performance until the cache has rebuilt.",
|
||||||
"cache_settings_image_cache_size": "Image cache size ({} assets)",
|
"cache_settings_image_cache_size": "Image cache size ({} assets)",
|
||||||
"cache_settings_statistics_album": "Library thumbnails",
|
"cache_settings_statistics_album": "Library thumbnails",
|
||||||
"cache_settings_statistics_assets": "{} assets ({})",
|
"cache_settings_statistics_assets": "{} elements ({})",
|
||||||
"cache_settings_statistics_full": "Full images",
|
"cache_settings_statistics_full": "Imatges completes",
|
||||||
"cache_settings_statistics_shared": "Shared album thumbnails",
|
"cache_settings_statistics_shared": "Shared album thumbnails",
|
||||||
"cache_settings_statistics_thumbnail": "Thumbnails",
|
"cache_settings_statistics_thumbnail": "Miniatures",
|
||||||
"cache_settings_statistics_title": "Cache usage",
|
"cache_settings_statistics_title": "Ús de memòria cau",
|
||||||
"cache_settings_subtitle": "Control the caching behaviour of the Immich mobile application",
|
"cache_settings_subtitle": "Control the caching behaviour of the Immich mobile application",
|
||||||
"cache_settings_thumbnail_size": "Thumbnail cache size ({} assets)",
|
"cache_settings_thumbnail_size": "Thumbnail cache size ({} assets)",
|
||||||
"cache_settings_title": "Caching Settings",
|
"cache_settings_title": "Configuració de la memòria cau",
|
||||||
"change_password_form_confirm_password": "Confirm Password",
|
"change_password_form_confirm_password": "Confirma la contrasenya",
|
||||||
"change_password_form_description": "Hi {firstName} {lastName},\n\nThis is either the first time you are signing into the system or a request has been made to change your password. Please enter the new password below.",
|
"change_password_form_description": "Hi {firstName} {lastName},\n\nThis is either the first time you are signing into the system or a request has been made to change your password. Please enter the new password below.",
|
||||||
"change_password_form_new_password": "New Password",
|
"change_password_form_new_password": "New Password",
|
||||||
"change_password_form_password_mismatch": "Passwords do not match",
|
"change_password_form_password_mismatch": "Passwords do not match",
|
||||||
"change_password_form_reenter_new_password": "Re-enter New Password",
|
"change_password_form_reenter_new_password": "Re-enter New Password",
|
||||||
"common_add_to_album": "Add to album",
|
"common_add_to_album": "Add to album",
|
||||||
"common_change_password": "Change Password",
|
"common_change_password": "Change Password",
|
||||||
"common_create_new_album": "Create new album",
|
"common_create_new_album": "Crea un àlbum nou",
|
||||||
"common_server_error": "Please check your network connection, make sure the server is reachable and app/server versions are compatible.",
|
"common_server_error": "Please check your network connection, make sure the server is reachable and app/server versions are compatible.",
|
||||||
"common_shared": "Compartit",
|
"common_shared": "Compartit",
|
||||||
"control_bottom_app_bar_add_to_album": "Add to album",
|
"control_bottom_app_bar_add_to_album": "Add to album",
|
||||||
"control_bottom_app_bar_album_info": "{} items",
|
"control_bottom_app_bar_album_info": "{} elements",
|
||||||
"control_bottom_app_bar_album_info_shared": "{} items · Shared",
|
"control_bottom_app_bar_album_info_shared": "{} elements - Compartits",
|
||||||
"control_bottom_app_bar_archive": "Arxiu",
|
"control_bottom_app_bar_archive": "Arxiu",
|
||||||
"control_bottom_app_bar_create_new_album": "Create new album",
|
"control_bottom_app_bar_create_new_album": "Crea un àlbum nou",
|
||||||
"control_bottom_app_bar_delete": "Delete",
|
"control_bottom_app_bar_delete": "Esborra",
|
||||||
"control_bottom_app_bar_favorite": "Favorite",
|
"control_bottom_app_bar_favorite": "Preferit",
|
||||||
"control_bottom_app_bar_share": "Share",
|
"control_bottom_app_bar_share": "Share",
|
||||||
"control_bottom_app_bar_unarchive": "Unarchive",
|
"control_bottom_app_bar_unarchive": "Desarxiva",
|
||||||
"create_album_page_untitled": "Untitled",
|
"create_album_page_untitled": "Untitled",
|
||||||
"create_shared_album_page_create": "Create",
|
"create_shared_album_page_create": "Create",
|
||||||
"create_shared_album_page_share": "Share",
|
"create_shared_album_page_share": "Comparteix",
|
||||||
"create_shared_album_page_share_add_assets": "ADD ASSETS",
|
"create_shared_album_page_share_add_assets": "AFEGEIX ELEMENTS",
|
||||||
"create_shared_album_page_share_select_photos": "Select Photos",
|
"create_shared_album_page_share_select_photos": "Escull fotografies",
|
||||||
"curated_location_page_title": "Localitzacions",
|
"curated_location_page_title": "Localitzacions",
|
||||||
"curated_object_page_title": "Coses",
|
"curated_object_page_title": "Coses",
|
||||||
"daily_title_text_date": "E, MMM dd",
|
"daily_title_text_date": "E, MMM dd",
|
||||||
"daily_title_text_date_year": "E, MMM dd, yyyy",
|
"daily_title_text_date_year": "E, MMM dd, yyyy",
|
||||||
"date_format": "E, LLL d, y • h:mm a",
|
"date_format": "E, LLL d, y • h:mm a",
|
||||||
"delete_dialog_alert": "These items will be permanently deleted from Immich and from your device",
|
"delete_dialog_alert": "These items will be permanently deleted from Immich and from your device",
|
||||||
"delete_dialog_cancel": "Cancel",
|
"delete_dialog_cancel": "Cancel·la",
|
||||||
"delete_dialog_ok": "Delete",
|
"delete_dialog_ok": "Esborra",
|
||||||
"delete_dialog_title": "Delete Permanently",
|
"delete_dialog_title": "Esborra permanentment",
|
||||||
"description_input_hint_text": "Afegeix descripció...",
|
"description_input_hint_text": "Afegeix descripció...",
|
||||||
"description_input_submit_error": "Error updating description, check the log for more details",
|
"description_input_submit_error": "Error updating description, check the log for more details",
|
||||||
"exif_bottom_sheet_description": "Add Description...",
|
"exif_bottom_sheet_description": "Afegeix descripció",
|
||||||
"exif_bottom_sheet_details": "DETAILS",
|
"exif_bottom_sheet_details": "DETALLS",
|
||||||
"exif_bottom_sheet_location": "LOCATION",
|
"exif_bottom_sheet_location": "UBICACIÓ",
|
||||||
"experimental_settings_new_asset_list_subtitle": "Work in progress",
|
"experimental_settings_new_asset_list_subtitle": "Work in progress",
|
||||||
"experimental_settings_new_asset_list_title": "Enable experimental photo grid",
|
"experimental_settings_new_asset_list_title": "Enable experimental photo grid",
|
||||||
"experimental_settings_subtitle": "Use at your own risk!",
|
"experimental_settings_subtitle": "Use at your own risk!",
|
||||||
@@ -156,9 +161,10 @@
|
|||||||
"home_page_building_timeline": "Building the timeline",
|
"home_page_building_timeline": "Building the timeline",
|
||||||
"home_page_favorite_err_local": "Can not favorite local assets yet, skipping",
|
"home_page_favorite_err_local": "Can not favorite local assets yet, skipping",
|
||||||
"home_page_first_time_notice": "If this is your first time using the app, please make sure to choose a backup album(s) so that the timeline can populate photos and videos in the album(s).",
|
"home_page_first_time_notice": "If this is your first time using the app, please make sure to choose a backup album(s) so that the timeline can populate photos and videos in the album(s).",
|
||||||
|
"home_page_upload_err_limit": "Can only upload a maximum of 30 assets at a time, skipping",
|
||||||
"image_viewer_page_state_provider_download_error": "Download Error",
|
"image_viewer_page_state_provider_download_error": "Download Error",
|
||||||
"image_viewer_page_state_provider_download_success": "Download Success",
|
"image_viewer_page_state_provider_download_success": "Download Success",
|
||||||
"library_page_albums": "Albums",
|
"library_page_albums": "Àlbums",
|
||||||
"library_page_archive": "Arxiu",
|
"library_page_archive": "Arxiu",
|
||||||
"library_page_device_albums": "Àlbums al Dispositiu",
|
"library_page_device_albums": "Àlbums al Dispositiu",
|
||||||
"library_page_favorites": "Favorites",
|
"library_page_favorites": "Favorites",
|
||||||
@@ -166,24 +172,25 @@
|
|||||||
"library_page_sharing": "Sharing",
|
"library_page_sharing": "Sharing",
|
||||||
"library_page_sort_created": "Most recently created",
|
"library_page_sort_created": "Most recently created",
|
||||||
"library_page_sort_title": "Album title",
|
"library_page_sort_title": "Album title",
|
||||||
|
"login_disabled": "Login has been disabled",
|
||||||
"login_form_api_exception": "API exception. Please check the server URL and try again.",
|
"login_form_api_exception": "API exception. Please check the server URL and try again.",
|
||||||
"login_form_button_text": "Login",
|
"login_form_button_text": "Entra",
|
||||||
"login_form_email_hint": "youremail@email.com",
|
"login_form_email_hint": "elteu@correu.cat",
|
||||||
"login_form_endpoint_hint": "http://your-server-ip:port/api",
|
"login_form_endpoint_hint": "http://ip-del-servidor:port/api",
|
||||||
"login_form_endpoint_url": "Server Endpoint URL",
|
"login_form_endpoint_url": "URL del servidor",
|
||||||
"login_form_err_http": "Please specify http:// or https://",
|
"login_form_err_http": "Especifica http:// o https://",
|
||||||
"login_form_err_invalid_email": "Invalid Email",
|
"login_form_err_invalid_email": "Adreça de correu electrònic no vàlida",
|
||||||
"login_form_err_invalid_url": "Invalid URL",
|
"login_form_err_invalid_url": "Invalid URL",
|
||||||
"login_form_err_leading_whitespace": "Leading whitespace",
|
"login_form_err_leading_whitespace": "Espai en blanc al principi",
|
||||||
"login_form_err_trailing_whitespace": "Trailing whitespace",
|
"login_form_err_trailing_whitespace": "Espai en blanc al final",
|
||||||
"login_form_failed_get_oauth_server_config": "Error logging using OAuth, check server URL",
|
"login_form_failed_get_oauth_server_config": "Error logging using OAuth, check server URL",
|
||||||
"login_form_failed_get_oauth_server_disable": "OAuth feature is not available on this server",
|
"login_form_failed_get_oauth_server_disable": "OAuth feature is not available on this server",
|
||||||
"login_form_failed_login": "Error logging you in, check server URL, email and password",
|
"login_form_failed_login": "Error logging you in, check server URL, email and password",
|
||||||
"login_form_label_email": "Email",
|
"login_form_label_email": "Correu electrònic",
|
||||||
"login_form_label_password": "Password",
|
"login_form_label_password": "Contrasenya",
|
||||||
"login_form_next_button": "Següent",
|
"login_form_next_button": "Següent",
|
||||||
"login_form_password_hint": "password",
|
"login_form_password_hint": "contrasenya",
|
||||||
"login_form_save_login": "Stay logged in",
|
"login_form_save_login": "Mantingues identificat",
|
||||||
"login_form_server_empty": "Enter a server URL.",
|
"login_form_server_empty": "Enter a server URL.",
|
||||||
"login_form_server_error": "Could not connect to server.",
|
"login_form_server_error": "Could not connect to server.",
|
||||||
"monthly_title_text_date_format": "MMMM y",
|
"monthly_title_text_date_format": "MMMM y",
|
||||||
@@ -194,15 +201,15 @@
|
|||||||
"notification_permission_list_tile_content": "Grant permission to enable notifications.",
|
"notification_permission_list_tile_content": "Grant permission to enable notifications.",
|
||||||
"notification_permission_list_tile_enable_button": "Activa les notificacions",
|
"notification_permission_list_tile_enable_button": "Activa les notificacions",
|
||||||
"notification_permission_list_tile_title": "Notification Permission",
|
"notification_permission_list_tile_title": "Notification Permission",
|
||||||
"partner_page_add_partner": "Add partner",
|
"partner_page_add_partner": "Afegeix company",
|
||||||
"partner_page_empty_message": "Your photos are not yet shared with any partner.",
|
"partner_page_empty_message": "Your photos are not yet shared with any partner.",
|
||||||
"partner_page_no_more_users": "No more users to add",
|
"partner_page_no_more_users": "No more users to add",
|
||||||
"partner_page_partner_add_failed": "Failed to add partner",
|
"partner_page_partner_add_failed": "Failed to add partner",
|
||||||
"partner_page_select_partner": "Select partner",
|
"partner_page_select_partner": "Escull company",
|
||||||
"partner_page_shared_to_title": "Shared to",
|
"partner_page_shared_to_title": "Compartit amb",
|
||||||
"partner_page_stop_sharing_content": "{} will no longer be able to access your photos.",
|
"partner_page_stop_sharing_content": "{} will no longer be able to access your photos.",
|
||||||
"partner_page_stop_sharing_title": "Stop sharing your photos?",
|
"partner_page_stop_sharing_title": "Stop sharing your photos?",
|
||||||
"partner_page_title": "Partner",
|
"partner_page_title": "Company",
|
||||||
"permission_onboarding_continue_anyway": "Continue anyway",
|
"permission_onboarding_continue_anyway": "Continue anyway",
|
||||||
"permission_onboarding_get_started": "Get started",
|
"permission_onboarding_get_started": "Get started",
|
||||||
"permission_onboarding_go_to_settings": "Go to settings",
|
"permission_onboarding_go_to_settings": "Go to settings",
|
||||||
@@ -215,7 +222,7 @@
|
|||||||
"profile_drawer_app_logs": "Logs",
|
"profile_drawer_app_logs": "Logs",
|
||||||
"profile_drawer_client_server_up_to_date": "Client and Server are up-to-date",
|
"profile_drawer_client_server_up_to_date": "Client and Server are up-to-date",
|
||||||
"profile_drawer_settings": "Settings",
|
"profile_drawer_settings": "Settings",
|
||||||
"profile_drawer_sign_out": "Sign Out",
|
"profile_drawer_sign_out": "Tanca la sessió",
|
||||||
"recently_added_page_title": "Recently Added",
|
"recently_added_page_title": "Recently Added",
|
||||||
"search_bar_hint": "Search your photos",
|
"search_bar_hint": "Search your photos",
|
||||||
"search_page_categories": "Categories",
|
"search_page_categories": "Categories",
|
||||||
@@ -223,20 +230,20 @@
|
|||||||
"search_page_motion_photos": "Fotografies animades",
|
"search_page_motion_photos": "Fotografies animades",
|
||||||
"search_page_no_objects": "No Objects Info Available",
|
"search_page_no_objects": "No Objects Info Available",
|
||||||
"search_page_no_places": "No Places Info Available",
|
"search_page_no_places": "No Places Info Available",
|
||||||
"search_page_people": "People",
|
"search_page_people": "Persones",
|
||||||
"search_page_places": "Places",
|
"search_page_places": "Llocs",
|
||||||
"search_page_recently_added": "Afegit recentment",
|
"search_page_recently_added": "Afegit recentment",
|
||||||
"search_page_screenshots": "Captures de pantalla",
|
"search_page_screenshots": "Captures de pantalla",
|
||||||
"search_page_selfies": "Autofotos",
|
"search_page_selfies": "Autofotos",
|
||||||
"search_page_things": "Things",
|
"search_page_things": "Coses",
|
||||||
"search_page_videos": "Videos",
|
"search_page_videos": "Videos",
|
||||||
"search_page_view_all_button": "Veure tot",
|
"search_page_view_all_button": "Veure tot",
|
||||||
"search_page_your_activity": "Your activity",
|
"search_page_your_activity": "Your activity",
|
||||||
"search_result_page_new_search_hint": "New Search",
|
"search_result_page_new_search_hint": "Cerca nova",
|
||||||
"search_suggestion_list_smart_search_hint_1": "Smart search is enabled by default, to search for metadata use the syntax ",
|
"search_suggestion_list_smart_search_hint_1": "Smart search is enabled by default, to search for metadata use the syntax ",
|
||||||
"search_suggestion_list_smart_search_hint_2": "m:your-search-term",
|
"search_suggestion_list_smart_search_hint_2": "m:your-search-term",
|
||||||
"select_additional_user_for_sharing_page_suggestions": "Suggestions",
|
"select_additional_user_for_sharing_page_suggestions": "Suggeriments",
|
||||||
"select_user_for_sharing_page_err_album": "Failed to create album",
|
"select_user_for_sharing_page_err_album": "Error al crear l'àlbum",
|
||||||
"select_user_for_sharing_page_share_suggestions": "Suggestions",
|
"select_user_for_sharing_page_share_suggestions": "Suggestions",
|
||||||
"server_info_box_app_version": "Versió de l'aplicació",
|
"server_info_box_app_version": "Versió de l'aplicació",
|
||||||
"server_info_box_server_version": "Versió del servidor",
|
"server_info_box_server_version": "Versió del servidor",
|
||||||
@@ -259,21 +266,21 @@
|
|||||||
"setting_notifications_total_progress_title": "Show background backup total progress",
|
"setting_notifications_total_progress_title": "Show background backup total progress",
|
||||||
"setting_pages_app_bar_settings": "Settings",
|
"setting_pages_app_bar_settings": "Settings",
|
||||||
"settings_require_restart": "Please restart Immich to apply this setting",
|
"settings_require_restart": "Please restart Immich to apply this setting",
|
||||||
"share_add": "Add",
|
"share_add": "Afegeix",
|
||||||
"share_add_photos": "Add photos",
|
"share_add_photos": "Afegeix fotografies",
|
||||||
"share_add_title": "Add a title",
|
"share_add_title": "Afegeix un títol",
|
||||||
"share_create_album": "Create album",
|
"share_create_album": "Crea un àlbum",
|
||||||
"share_dialog_preparing": "Preparing...",
|
"share_dialog_preparing": "Preparing...",
|
||||||
"share_invite": "Invite to album",
|
"share_invite": "Convida a l'àlbum",
|
||||||
"sharing_page_album": "Shared albums",
|
"sharing_page_album": "Shared albums",
|
||||||
"sharing_page_description": "Create shared albums to share photos and videos with people in your network.",
|
"sharing_page_description": "Create shared albums to share photos and videos with people in your network.",
|
||||||
"sharing_page_empty_list": "EMPTY LIST",
|
"sharing_page_empty_list": "EMPTY LIST",
|
||||||
"sharing_silver_appbar_create_shared_album": "Create shared album",
|
"sharing_silver_appbar_create_shared_album": "Crea àlbum compartit",
|
||||||
"sharing_silver_appbar_share_partner": "Share with partner",
|
"sharing_silver_appbar_share_partner": "Comparteix amb un company",
|
||||||
"tab_controller_nav_library": "Library",
|
"tab_controller_nav_library": "Library",
|
||||||
"tab_controller_nav_photos": "Photos",
|
"tab_controller_nav_photos": "Fotografies",
|
||||||
"tab_controller_nav_search": "Search",
|
"tab_controller_nav_search": "Cerca",
|
||||||
"tab_controller_nav_sharing": "Sharing",
|
"tab_controller_nav_sharing": "Compartint",
|
||||||
"theme_setting_asset_list_storage_indicator_title": "Show storage indicator on asset tiles",
|
"theme_setting_asset_list_storage_indicator_title": "Show storage indicator on asset tiles",
|
||||||
"theme_setting_asset_list_tiles_per_row_title": "Number of assets per row ({})",
|
"theme_setting_asset_list_tiles_per_row_title": "Number of assets per row ({})",
|
||||||
"theme_setting_dark_mode_switch": "Dark mode",
|
"theme_setting_dark_mode_switch": "Dark mode",
|
||||||
@@ -284,6 +291,10 @@
|
|||||||
"theme_setting_theme_title": "Theme",
|
"theme_setting_theme_title": "Theme",
|
||||||
"theme_setting_three_stage_loading_subtitle": "Three-stage loading might increase the loading performance but causes significantly higher network load",
|
"theme_setting_three_stage_loading_subtitle": "Three-stage loading might increase the loading performance but causes significantly higher network load",
|
||||||
"theme_setting_three_stage_loading_title": "Enable three-stage loading",
|
"theme_setting_three_stage_loading_title": "Enable three-stage loading",
|
||||||
|
"upload_dialog_cancel": "Cancel",
|
||||||
|
"upload_dialog_info": "Do you want to backup the selected Asset(s) to the server?",
|
||||||
|
"upload_dialog_ok": "Upload",
|
||||||
|
"upload_dialog_title": "Upload Asset",
|
||||||
"version_announcement_overlay_ack": "Acknowledge",
|
"version_announcement_overlay_ack": "Acknowledge",
|
||||||
"version_announcement_overlay_release_notes": "release notes",
|
"version_announcement_overlay_release_notes": "release notes",
|
||||||
"version_announcement_overlay_text_1": "Hi friend, there is a new release of",
|
"version_announcement_overlay_text_1": "Hi friend, there is a new release of",
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
{
|
{
|
||||||
"add_to_album_bottom_sheet_added": "Přidáno do {album}",
|
"add_to_album_bottom_sheet_added": "Přidáno do {album}",
|
||||||
"add_to_album_bottom_sheet_already_exists": "Již v {album}",
|
"add_to_album_bottom_sheet_already_exists": "Již v {album}",
|
||||||
"advanced_settings_prefer_remote_subtitle": "Some devices are painfully slow to load thumbnails from assets on the device. Activate this setting to load remote images instead.",
|
"advanced_settings_prefer_remote_subtitle": "U některých zařízení je načítání miniatur z prostředků v zařízení velmi pomalé. Aktivujte toto nastavení, aby se místo toho načítaly vzdálené obrázky.",
|
||||||
"advanced_settings_prefer_remote_title": "Prefer remote images",
|
"advanced_settings_prefer_remote_title": "Preferovat vzdálené obrázky",
|
||||||
"advanced_settings_tile_subtitle": "Pokročilé uživatelské nastavení",
|
"advanced_settings_tile_subtitle": "Pokročilé uživatelské nastavení",
|
||||||
"advanced_settings_tile_title": "Pokročilé",
|
"advanced_settings_tile_title": "Pokročilé",
|
||||||
"advanced_settings_troubleshooting_subtitle": "Povolit dodatečné funkce pro řešení problémů",
|
"advanced_settings_troubleshooting_subtitle": "Povolit dodatečné funkce pro řešení problémů",
|
||||||
@@ -22,12 +22,12 @@
|
|||||||
"album_viewer_appbar_share_leave": "Opustit album",
|
"album_viewer_appbar_share_leave": "Opustit album",
|
||||||
"album_viewer_appbar_share_remove": "Odstranit z alba",
|
"album_viewer_appbar_share_remove": "Odstranit z alba",
|
||||||
"album_viewer_page_share_add_users": "Přidat uživatele",
|
"album_viewer_page_share_add_users": "Přidat uživatele",
|
||||||
"all_people_page_title": "People",
|
"all_people_page_title": "Lidé",
|
||||||
"all_videos_page_title": "Videa",
|
"all_videos_page_title": "Videa",
|
||||||
"archive_page_no_archived_assets": "No archived assets found",
|
"archive_page_no_archived_assets": "Nebyla nalezena žádná archivovaná média",
|
||||||
"archive_page_title": "Archív ({})",
|
"archive_page_title": "Archív ({})",
|
||||||
"asset_list_layout_settings_dynamic_layout_title": "Dynamické rozložení",
|
"asset_list_layout_settings_dynamic_layout_title": "Dynamické rozložení",
|
||||||
"asset_list_layout_settings_group_automatically": "Automatic",
|
"asset_list_layout_settings_group_automatically": "Automaticky",
|
||||||
"asset_list_layout_settings_group_by": "Seskupit položky podle",
|
"asset_list_layout_settings_group_by": "Seskupit položky podle",
|
||||||
"asset_list_layout_settings_group_by_month": "Měsíc",
|
"asset_list_layout_settings_group_by_month": "Měsíc",
|
||||||
"asset_list_layout_settings_group_by_month_day": "Měsíc + den",
|
"asset_list_layout_settings_group_by_month_day": "Měsíc + den",
|
||||||
@@ -92,6 +92,11 @@
|
|||||||
"backup_controller_page_uploading_file_info": "Nahrávaný soubor",
|
"backup_controller_page_uploading_file_info": "Nahrávaný soubor",
|
||||||
"backup_err_only_album": "Nelze odstranit jediné vybrané album",
|
"backup_err_only_album": "Nelze odstranit jediné vybrané album",
|
||||||
"backup_info_card_assets": "položek",
|
"backup_info_card_assets": "položek",
|
||||||
|
"backup_manual_cancelled": "Cancelled",
|
||||||
|
"backup_manual_failed": "Selhalo",
|
||||||
|
"backup_manual_in_progress": "Zálohování již probíhá. Zkuste znovu později",
|
||||||
|
"backup_manual_success": "Úspěch",
|
||||||
|
"backup_manual_title": "Stav zálohování",
|
||||||
"cache_settings_album_thumbnails": "Náhledy stránek knihovny (položek {})",
|
"cache_settings_album_thumbnails": "Náhledy stránek knihovny (položek {})",
|
||||||
"cache_settings_clear_cache_button": "Vymazat vyrovnávací paměť",
|
"cache_settings_clear_cache_button": "Vymazat vyrovnávací paměť",
|
||||||
"cache_settings_clear_cache_button_title": "Vymaže vyrovnávací paměť aplikace. To výrazně ovlivní výkon aplikace, dokud se vyrovnávací paměť neobnoví.",
|
"cache_settings_clear_cache_button_title": "Vymaže vyrovnávací paměť aplikace. To výrazně ovlivní výkon aplikace, dokud se vyrovnávací paměť neobnoví.",
|
||||||
@@ -123,7 +128,7 @@
|
|||||||
"control_bottom_app_bar_delete": "Vymazat",
|
"control_bottom_app_bar_delete": "Vymazat",
|
||||||
"control_bottom_app_bar_favorite": "Oblíbené",
|
"control_bottom_app_bar_favorite": "Oblíbené",
|
||||||
"control_bottom_app_bar_share": "Sdílet",
|
"control_bottom_app_bar_share": "Sdílet",
|
||||||
"control_bottom_app_bar_unarchive": "Unarchive",
|
"control_bottom_app_bar_unarchive": "Odarchivovat",
|
||||||
"create_album_page_untitled": "Bez názvu",
|
"create_album_page_untitled": "Bez názvu",
|
||||||
"create_shared_album_page_create": "Vytvořit",
|
"create_shared_album_page_create": "Vytvořit",
|
||||||
"create_shared_album_page_share": "Sdílet",
|
"create_shared_album_page_share": "Sdílet",
|
||||||
@@ -147,7 +152,7 @@
|
|||||||
"experimental_settings_new_asset_list_title": "Povolení experimentální mřížky fotografií",
|
"experimental_settings_new_asset_list_title": "Povolení experimentální mřížky fotografií",
|
||||||
"experimental_settings_subtitle": "Používejte na vlastní riziko!",
|
"experimental_settings_subtitle": "Používejte na vlastní riziko!",
|
||||||
"experimental_settings_title": "Experimentální",
|
"experimental_settings_title": "Experimentální",
|
||||||
"favorites_page_no_favorites": "No favorite assets found",
|
"favorites_page_no_favorites": "Nebyla nalezena žádná oblíbená média",
|
||||||
"favorites_page_title": "Oblíbené",
|
"favorites_page_title": "Oblíbené",
|
||||||
"home_page_add_to_album_conflicts": "Přidáno {added} položek do alba {album}. {failed} položek již je v albu.",
|
"home_page_add_to_album_conflicts": "Přidáno {added} položek do alba {album}. {failed} položek již je v albu.",
|
||||||
"home_page_add_to_album_err_local": "Zatím není možné přidat lokální média do alb, přeskakuje se",
|
"home_page_add_to_album_err_local": "Zatím není možné přidat lokální média do alb, přeskakuje se",
|
||||||
@@ -156,6 +161,7 @@
|
|||||||
"home_page_building_timeline": "Vytváření časové osy",
|
"home_page_building_timeline": "Vytváření časové osy",
|
||||||
"home_page_favorite_err_local": "Zatím není možné zařadit lokální média mezi oblíbená, přeskakuje se",
|
"home_page_favorite_err_local": "Zatím není možné zařadit lokální média mezi oblíbená, přeskakuje se",
|
||||||
"home_page_first_time_notice": "Pokud aplikaci používáte poprvé, nezapomeňte si vybrat zálohovaná alba, aby se na časové ose mohly nacházet fotografie a videa z vybraných albech.",
|
"home_page_first_time_notice": "Pokud aplikaci používáte poprvé, nezapomeňte si vybrat zálohovaná alba, aby se na časové ose mohly nacházet fotografie a videa z vybraných albech.",
|
||||||
|
"home_page_upload_err_limit": "Lze nahrát nejvýše 30 položek najednou, přeskakuji",
|
||||||
"image_viewer_page_state_provider_download_error": "Chyba stahování",
|
"image_viewer_page_state_provider_download_error": "Chyba stahování",
|
||||||
"image_viewer_page_state_provider_download_success": "Stahování bylo úspěšné",
|
"image_viewer_page_state_provider_download_success": "Stahování bylo úspěšné",
|
||||||
"library_page_albums": "Alba",
|
"library_page_albums": "Alba",
|
||||||
@@ -166,6 +172,7 @@
|
|||||||
"library_page_sharing": "Sdílení",
|
"library_page_sharing": "Sdílení",
|
||||||
"library_page_sort_created": "Naposledy vytvořené",
|
"library_page_sort_created": "Naposledy vytvořené",
|
||||||
"library_page_sort_title": "Podle názvu alba",
|
"library_page_sort_title": "Podle názvu alba",
|
||||||
|
"login_disabled": "Přihlášení bylo zakázáno",
|
||||||
"login_form_api_exception": "Výjimka API. Zkontrolujte URL serveru a zkuste to znovu.",
|
"login_form_api_exception": "Výjimka API. Zkontrolujte URL serveru a zkuste to znovu.",
|
||||||
"login_form_button_text": "Přihlásit se",
|
"login_form_button_text": "Přihlásit se",
|
||||||
"login_form_email_hint": "tvůjmail@email.com",
|
"login_form_email_hint": "tvůjmail@email.com",
|
||||||
@@ -194,14 +201,14 @@
|
|||||||
"notification_permission_list_tile_content": "Udělte oprávnění k aktivaci oznámení.",
|
"notification_permission_list_tile_content": "Udělte oprávnění k aktivaci oznámení.",
|
||||||
"notification_permission_list_tile_enable_button": "Povolit oznámení",
|
"notification_permission_list_tile_enable_button": "Povolit oznámení",
|
||||||
"notification_permission_list_tile_title": "Povolení oznámení",
|
"notification_permission_list_tile_title": "Povolení oznámení",
|
||||||
"partner_page_add_partner": "Add partner",
|
"partner_page_add_partner": "Přidat partnera",
|
||||||
"partner_page_empty_message": "Your photos are not yet shared with any partner.",
|
"partner_page_empty_message": "Vaše fotografie zatím nejsou sdíleny s žádným partnerem.",
|
||||||
"partner_page_no_more_users": "No more users to add",
|
"partner_page_no_more_users": "Žádní další uživatelé k přidání",
|
||||||
"partner_page_partner_add_failed": "Failed to add partner",
|
"partner_page_partner_add_failed": "Nepodařilo se přidat partnera",
|
||||||
"partner_page_select_partner": "Select partner",
|
"partner_page_select_partner": "Vyberte partnera",
|
||||||
"partner_page_shared_to_title": "Shared to",
|
"partner_page_shared_to_title": "Sdíleno",
|
||||||
"partner_page_stop_sharing_content": "{} will no longer be able to access your photos.",
|
"partner_page_stop_sharing_content": "{} již nebude mít přístup k vašim fotografiím.",
|
||||||
"partner_page_stop_sharing_title": "Stop sharing your photos?",
|
"partner_page_stop_sharing_title": "Přestat sdílet vaše fotografie?",
|
||||||
"partner_page_title": "Partner",
|
"partner_page_title": "Partner",
|
||||||
"permission_onboarding_continue_anyway": "Přesto pokračovat",
|
"permission_onboarding_continue_anyway": "Přesto pokračovat",
|
||||||
"permission_onboarding_get_started": "Začít",
|
"permission_onboarding_get_started": "Začít",
|
||||||
@@ -223,7 +230,7 @@
|
|||||||
"search_page_motion_photos": "Pohyblivé fotky",
|
"search_page_motion_photos": "Pohyblivé fotky",
|
||||||
"search_page_no_objects": "Informace o objektech nejsou k dispozici",
|
"search_page_no_objects": "Informace o objektech nejsou k dispozici",
|
||||||
"search_page_no_places": "Informace o místě nejsou k dispozici",
|
"search_page_no_places": "Informace o místě nejsou k dispozici",
|
||||||
"search_page_people": "People",
|
"search_page_people": "Lidé",
|
||||||
"search_page_places": "Místa",
|
"search_page_places": "Místa",
|
||||||
"search_page_recently_added": "Nedávno přidané",
|
"search_page_recently_added": "Nedávno přidané",
|
||||||
"search_page_screenshots": "Snímky obrazovky",
|
"search_page_screenshots": "Snímky obrazovky",
|
||||||
@@ -284,6 +291,10 @@
|
|||||||
"theme_setting_theme_title": "Téma",
|
"theme_setting_theme_title": "Téma",
|
||||||
"theme_setting_three_stage_loading_subtitle": "Třístupňové načítání může zvýšit výkonnost načítání, ale vede k výrazně vyššímu zatížení sítě.",
|
"theme_setting_three_stage_loading_subtitle": "Třístupňové načítání může zvýšit výkonnost načítání, ale vede k výrazně vyššímu zatížení sítě.",
|
||||||
"theme_setting_three_stage_loading_title": "Povolení třístupňového načítání",
|
"theme_setting_three_stage_loading_title": "Povolení třístupňového načítání",
|
||||||
|
"upload_dialog_cancel": "Zrušit",
|
||||||
|
"upload_dialog_info": "Chcete zálohovat vybrané položky na server?",
|
||||||
|
"upload_dialog_ok": "Zálohovat",
|
||||||
|
"upload_dialog_title": "Zálohovat položku",
|
||||||
"version_announcement_overlay_ack": "Potvrdit",
|
"version_announcement_overlay_ack": "Potvrdit",
|
||||||
"version_announcement_overlay_release_notes": "poznámky k vydání",
|
"version_announcement_overlay_release_notes": "poznámky k vydání",
|
||||||
"version_announcement_overlay_text_1": "Ahoj, je zde nová verze",
|
"version_announcement_overlay_text_1": "Ahoj, je zde nová verze",
|
||||||
|
|||||||
@@ -92,6 +92,11 @@
|
|||||||
"backup_controller_page_uploading_file_info": "Uploader filinformation",
|
"backup_controller_page_uploading_file_info": "Uploader filinformation",
|
||||||
"backup_err_only_album": "Kan ikke slette det eneste album",
|
"backup_err_only_album": "Kan ikke slette det eneste album",
|
||||||
"backup_info_card_assets": "elementer",
|
"backup_info_card_assets": "elementer",
|
||||||
|
"backup_manual_cancelled": "Cancelled",
|
||||||
|
"backup_manual_failed": "Failed",
|
||||||
|
"backup_manual_in_progress": "Upload already in progress. Try after sometime",
|
||||||
|
"backup_manual_success": "Success",
|
||||||
|
"backup_manual_title": "Upload status",
|
||||||
"cache_settings_album_thumbnails": "Biblioteksminiaturebilleder ({} elementer)",
|
"cache_settings_album_thumbnails": "Biblioteksminiaturebilleder ({} elementer)",
|
||||||
"cache_settings_clear_cache_button": "Fjern cache",
|
"cache_settings_clear_cache_button": "Fjern cache",
|
||||||
"cache_settings_clear_cache_button_title": "Fjern appens cache. Dette vil i stor grad påvirke appens ydeevne indtil cachen er genopbygget.",
|
"cache_settings_clear_cache_button_title": "Fjern appens cache. Dette vil i stor grad påvirke appens ydeevne indtil cachen er genopbygget.",
|
||||||
@@ -156,6 +161,7 @@
|
|||||||
"home_page_building_timeline": "Bygger tidslinjen",
|
"home_page_building_timeline": "Bygger tidslinjen",
|
||||||
"home_page_favorite_err_local": "Kan endnu ikke gøre lokale elementer til favoritter. Springer over..",
|
"home_page_favorite_err_local": "Kan endnu ikke gøre lokale elementer til favoritter. Springer over..",
|
||||||
"home_page_first_time_notice": "Hvis dette er din første gang i appen, bedes du vælge en backup af albummer så tidlinjen kan blive fyldt med billeder og videoer fra albummerne.",
|
"home_page_first_time_notice": "Hvis dette er din første gang i appen, bedes du vælge en backup af albummer så tidlinjen kan blive fyldt med billeder og videoer fra albummerne.",
|
||||||
|
"home_page_upload_err_limit": "Can only upload a maximum of 30 assets at a time, skipping",
|
||||||
"image_viewer_page_state_provider_download_error": "Fejl ved download",
|
"image_viewer_page_state_provider_download_error": "Fejl ved download",
|
||||||
"image_viewer_page_state_provider_download_success": "Download succesfuld",
|
"image_viewer_page_state_provider_download_success": "Download succesfuld",
|
||||||
"library_page_albums": "Albummer",
|
"library_page_albums": "Albummer",
|
||||||
@@ -166,6 +172,7 @@
|
|||||||
"library_page_sharing": "Delte",
|
"library_page_sharing": "Delte",
|
||||||
"library_page_sort_created": "Senest oprettet",
|
"library_page_sort_created": "Senest oprettet",
|
||||||
"library_page_sort_title": "Albumtitel",
|
"library_page_sort_title": "Albumtitel",
|
||||||
|
"login_disabled": "Login has been disabled",
|
||||||
"login_form_api_exception": "API-undtagelse. Tjek serverens URL og prøv igen. ",
|
"login_form_api_exception": "API-undtagelse. Tjek serverens URL og prøv igen. ",
|
||||||
"login_form_button_text": "Log ind",
|
"login_form_button_text": "Log ind",
|
||||||
"login_form_email_hint": "din-e-mail@e-mail.com",
|
"login_form_email_hint": "din-e-mail@e-mail.com",
|
||||||
@@ -284,6 +291,10 @@
|
|||||||
"theme_setting_theme_title": "Tema",
|
"theme_setting_theme_title": "Tema",
|
||||||
"theme_setting_three_stage_loading_subtitle": "Tre-trins indlæsning kan øge ydeevnen, men kan ligeledes føre til højere netværksbelastning",
|
"theme_setting_three_stage_loading_subtitle": "Tre-trins indlæsning kan øge ydeevnen, men kan ligeledes føre til højere netværksbelastning",
|
||||||
"theme_setting_three_stage_loading_title": "Slå tre-trins indlæsning til",
|
"theme_setting_three_stage_loading_title": "Slå tre-trins indlæsning til",
|
||||||
|
"upload_dialog_cancel": "Cancel",
|
||||||
|
"upload_dialog_info": "Do you want to backup the selected Asset(s) to the server?",
|
||||||
|
"upload_dialog_ok": "Upload",
|
||||||
|
"upload_dialog_title": "Upload Asset",
|
||||||
"version_announcement_overlay_ack": "Accepter",
|
"version_announcement_overlay_ack": "Accepter",
|
||||||
"version_announcement_overlay_release_notes": "udgivelsesnoterne",
|
"version_announcement_overlay_release_notes": "udgivelsesnoterne",
|
||||||
"version_announcement_overlay_text_1": "Hej ven, der er en ny version af",
|
"version_announcement_overlay_text_1": "Hej ven, der er en ny version af",
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
{
|
{
|
||||||
"add_to_album_bottom_sheet_added": "Zu {album} hinzugefügt",
|
"add_to_album_bottom_sheet_added": "Zu {album} hinzugefügt",
|
||||||
"add_to_album_bottom_sheet_already_exists": "Bereits in {album}",
|
"add_to_album_bottom_sheet_already_exists": "Bereits in {album}",
|
||||||
"advanced_settings_prefer_remote_subtitle": "Some devices are painfully slow to load thumbnails from assets on the device. Activate this setting to load remote images instead.",
|
"advanced_settings_prefer_remote_subtitle": "Manche Endgeräte laden Vorschaubilder lokaler Bilder sehr langsam. Durch diese Einstellung werden diese stattdessen direkt vom Server geladen.",
|
||||||
"advanced_settings_prefer_remote_title": "Prefer remote images",
|
"advanced_settings_prefer_remote_title": "Server-Bilder bevorzugen",
|
||||||
"advanced_settings_tile_subtitle": "Erweiterte Benutzereinstellungen",
|
"advanced_settings_tile_subtitle": "Erweiterte Benutzereinstellungen",
|
||||||
"advanced_settings_tile_title": "Sonstige",
|
"advanced_settings_tile_title": "Sonstige",
|
||||||
"advanced_settings_troubleshooting_subtitle": "Aktiviere erweiterte Funktionen zur Fehlersuche",
|
"advanced_settings_troubleshooting_subtitle": "Aktiviere erweiterte Funktionen zur Fehlersuche",
|
||||||
@@ -22,9 +22,9 @@
|
|||||||
"album_viewer_appbar_share_leave": "Album verlassen",
|
"album_viewer_appbar_share_leave": "Album verlassen",
|
||||||
"album_viewer_appbar_share_remove": "Entferne vom Album",
|
"album_viewer_appbar_share_remove": "Entferne vom Album",
|
||||||
"album_viewer_page_share_add_users": "Nutzer hinzufügen",
|
"album_viewer_page_share_add_users": "Nutzer hinzufügen",
|
||||||
"all_people_page_title": "People",
|
"all_people_page_title": "Personen",
|
||||||
"all_videos_page_title": "Videos",
|
"all_videos_page_title": "Videos",
|
||||||
"archive_page_no_archived_assets": "Keine archivierten Elemente gefunden",
|
"archive_page_no_archived_assets": "Keine archivierten Inhalte gefunden",
|
||||||
"archive_page_title": "Archive ({})",
|
"archive_page_title": "Archive ({})",
|
||||||
"asset_list_layout_settings_dynamic_layout_title": "Dynamisches Layout",
|
"asset_list_layout_settings_dynamic_layout_title": "Dynamisches Layout",
|
||||||
"asset_list_layout_settings_group_automatically": "Automatisch",
|
"asset_list_layout_settings_group_automatically": "Automatisch",
|
||||||
@@ -92,6 +92,11 @@
|
|||||||
"backup_controller_page_uploading_file_info": "Informationen",
|
"backup_controller_page_uploading_file_info": "Informationen",
|
||||||
"backup_err_only_album": "Das einzige Album kann nicht entfernt werden",
|
"backup_err_only_album": "Das einzige Album kann nicht entfernt werden",
|
||||||
"backup_info_card_assets": "Elemente",
|
"backup_info_card_assets": "Elemente",
|
||||||
|
"backup_manual_cancelled": "Cancelled",
|
||||||
|
"backup_manual_failed": "Failed",
|
||||||
|
"backup_manual_in_progress": "Upload already in progress. Try after sometime",
|
||||||
|
"backup_manual_success": "Success",
|
||||||
|
"backup_manual_title": "Upload status",
|
||||||
"cache_settings_album_thumbnails": "Library page thumbnails ({} assets)",
|
"cache_settings_album_thumbnails": "Library page thumbnails ({} assets)",
|
||||||
"cache_settings_clear_cache_button": "Zwischenspeicher löschen",
|
"cache_settings_clear_cache_button": "Zwischenspeicher löschen",
|
||||||
"cache_settings_clear_cache_button_title": "Löscht den Zwischenspeicher der App. Dies wird die Leistungsfähigkeit der App deutlich einschränken, bis der Zwischenspeicher wieder aufgebaut wurde.",
|
"cache_settings_clear_cache_button_title": "Löscht den Zwischenspeicher der App. Dies wird die Leistungsfähigkeit der App deutlich einschränken, bis der Zwischenspeicher wieder aufgebaut wurde.",
|
||||||
@@ -127,7 +132,7 @@
|
|||||||
"create_album_page_untitled": "Unbenannt",
|
"create_album_page_untitled": "Unbenannt",
|
||||||
"create_shared_album_page_create": "Erstellen",
|
"create_shared_album_page_create": "Erstellen",
|
||||||
"create_shared_album_page_share": "Teilen",
|
"create_shared_album_page_share": "Teilen",
|
||||||
"create_shared_album_page_share_add_assets": "ELEMENTE HINZUFÜGEN",
|
"create_shared_album_page_share_add_assets": "INHALTE HINZUFÜGEN",
|
||||||
"create_shared_album_page_share_select_photos": "Fotos auswählen",
|
"create_shared_album_page_share_select_photos": "Fotos auswählen",
|
||||||
"curated_location_page_title": "Orte",
|
"curated_location_page_title": "Orte",
|
||||||
"curated_object_page_title": "Dinge",
|
"curated_object_page_title": "Dinge",
|
||||||
@@ -147,7 +152,7 @@
|
|||||||
"experimental_settings_new_asset_list_title": "Experimentelle Fotogitter aktivieren",
|
"experimental_settings_new_asset_list_title": "Experimentelle Fotogitter aktivieren",
|
||||||
"experimental_settings_subtitle": "Benutzung auf eigene Gefahr!",
|
"experimental_settings_subtitle": "Benutzung auf eigene Gefahr!",
|
||||||
"experimental_settings_title": "Experimentell",
|
"experimental_settings_title": "Experimentell",
|
||||||
"favorites_page_no_favorites": "Keine favorisierten Elemente gefunden",
|
"favorites_page_no_favorites": "Keine favorisierten Inhalte gefunden",
|
||||||
"favorites_page_title": "Favoriten",
|
"favorites_page_title": "Favoriten",
|
||||||
"home_page_add_to_album_conflicts": "{added} Elemente zu {album} hinzugefügt. {failed} Elemente sind bereits vorhanden.",
|
"home_page_add_to_album_conflicts": "{added} Elemente zu {album} hinzugefügt. {failed} Elemente sind bereits vorhanden.",
|
||||||
"home_page_add_to_album_err_local": "Kann lokale Elemente noch nicht zu Alben hinzufügen, überspringe",
|
"home_page_add_to_album_err_local": "Kann lokale Elemente noch nicht zu Alben hinzufügen, überspringe",
|
||||||
@@ -156,6 +161,7 @@
|
|||||||
"home_page_building_timeline": "Zeitachse wird erstellt.",
|
"home_page_building_timeline": "Zeitachse wird erstellt.",
|
||||||
"home_page_favorite_err_local": "Kann lokale Elemente noch nicht favorisieren, überspringe",
|
"home_page_favorite_err_local": "Kann lokale Elemente noch nicht favorisieren, überspringe",
|
||||||
"home_page_first_time_notice": "Wenn dies das erste Mal ist dass Du Immich nutzt, stelle bitte sicher, dass mindestens ein Album zur Sicherung ausgewählt ist, sodass die Zeitachse mit Fotos und Videos gefüllt werden kann.",
|
"home_page_first_time_notice": "Wenn dies das erste Mal ist dass Du Immich nutzt, stelle bitte sicher, dass mindestens ein Album zur Sicherung ausgewählt ist, sodass die Zeitachse mit Fotos und Videos gefüllt werden kann.",
|
||||||
|
"home_page_upload_err_limit": "Can only upload a maximum of 30 assets at a time, skipping",
|
||||||
"image_viewer_page_state_provider_download_error": "Fehler beim Herunterladen",
|
"image_viewer_page_state_provider_download_error": "Fehler beim Herunterladen",
|
||||||
"image_viewer_page_state_provider_download_success": "Erfolgreich heruntergeladen",
|
"image_viewer_page_state_provider_download_success": "Erfolgreich heruntergeladen",
|
||||||
"library_page_albums": "Alben",
|
"library_page_albums": "Alben",
|
||||||
@@ -166,6 +172,7 @@
|
|||||||
"library_page_sharing": "Teilen",
|
"library_page_sharing": "Teilen",
|
||||||
"library_page_sort_created": "Zuletzt erstellt",
|
"library_page_sort_created": "Zuletzt erstellt",
|
||||||
"library_page_sort_title": "Albumtitel",
|
"library_page_sort_title": "Albumtitel",
|
||||||
|
"login_disabled": "Login has been disabled",
|
||||||
"login_form_api_exception": "API Fehler. Bitte die Serveradresse überprüfen und erneut versuchen.",
|
"login_form_api_exception": "API Fehler. Bitte die Serveradresse überprüfen und erneut versuchen.",
|
||||||
"login_form_button_text": "Anmelden",
|
"login_form_button_text": "Anmelden",
|
||||||
"login_form_email_hint": "deine@email.de",
|
"login_form_email_hint": "deine@email.de",
|
||||||
@@ -174,8 +181,8 @@
|
|||||||
"login_form_err_http": "Bitte gebe http:// oder https:// an",
|
"login_form_err_http": "Bitte gebe http:// oder https:// an",
|
||||||
"login_form_err_invalid_email": "Ungültige E-Mail",
|
"login_form_err_invalid_email": "Ungültige E-Mail",
|
||||||
"login_form_err_invalid_url": "Ungültige URL",
|
"login_form_err_invalid_url": "Ungültige URL",
|
||||||
"login_form_err_leading_whitespace": "Führendes Leerzichen",
|
"login_form_err_leading_whitespace": "Leerzichen am Anfang",
|
||||||
"login_form_err_trailing_whitespace": "Folgendes Leerzeichen",
|
"login_form_err_trailing_whitespace": "Leerzeichen am Ende",
|
||||||
"login_form_failed_get_oauth_server_config": "Fehler beim Login per OAuth, Server-URL überprüfen",
|
"login_form_failed_get_oauth_server_config": "Fehler beim Login per OAuth, Server-URL überprüfen",
|
||||||
"login_form_failed_get_oauth_server_disable": "OAuth-Funktion nicht verfügbar auf diesem Server.",
|
"login_form_failed_get_oauth_server_disable": "OAuth-Funktion nicht verfügbar auf diesem Server.",
|
||||||
"login_form_failed_login": "Error logging you in, check server url, email and password",
|
"login_form_failed_login": "Error logging you in, check server url, email and password",
|
||||||
@@ -194,13 +201,13 @@
|
|||||||
"notification_permission_list_tile_content": "Erlaube Berechtigung für Benachrichtigungen",
|
"notification_permission_list_tile_content": "Erlaube Berechtigung für Benachrichtigungen",
|
||||||
"notification_permission_list_tile_enable_button": "Aktiviere Benachrichtigungen",
|
"notification_permission_list_tile_enable_button": "Aktiviere Benachrichtigungen",
|
||||||
"notification_permission_list_tile_title": "Benachrichtigungs-Berechtigung",
|
"notification_permission_list_tile_title": "Benachrichtigungs-Berechtigung",
|
||||||
"partner_page_add_partner": "Add partner",
|
"partner_page_add_partner": "Partner hinzufügen",
|
||||||
"partner_page_empty_message": "Your photos are not yet shared with any partner.",
|
"partner_page_empty_message": "Your photos are not yet shared with any partner.",
|
||||||
"partner_page_no_more_users": "No more users to add",
|
"partner_page_no_more_users": "No more users to add",
|
||||||
"partner_page_partner_add_failed": "Failed to add partner",
|
"partner_page_partner_add_failed": "Failed to add partner",
|
||||||
"partner_page_select_partner": "Select partner",
|
"partner_page_select_partner": "Partner auswählen",
|
||||||
"partner_page_shared_to_title": "Shared to",
|
"partner_page_shared_to_title": "Geteilt mit",
|
||||||
"partner_page_stop_sharing_content": "{} will no longer be able to access your photos.",
|
"partner_page_stop_sharing_content": "{} wird nicht mehr auf deine Fotos zugreifen können.",
|
||||||
"partner_page_stop_sharing_title": "Stop sharing your photos?",
|
"partner_page_stop_sharing_title": "Stop sharing your photos?",
|
||||||
"partner_page_title": "Partner",
|
"partner_page_title": "Partner",
|
||||||
"permission_onboarding_continue_anyway": "Trotzdem fortfahren",
|
"permission_onboarding_continue_anyway": "Trotzdem fortfahren",
|
||||||
@@ -223,7 +230,7 @@
|
|||||||
"search_page_motion_photos": "Live Photos",
|
"search_page_motion_photos": "Live Photos",
|
||||||
"search_page_no_objects": "Keine Objektinformationen verfügbar",
|
"search_page_no_objects": "Keine Objektinformationen verfügbar",
|
||||||
"search_page_no_places": "Keine Informationen über Orte verfügbar",
|
"search_page_no_places": "Keine Informationen über Orte verfügbar",
|
||||||
"search_page_people": "People",
|
"search_page_people": "Personen",
|
||||||
"search_page_places": "Orte",
|
"search_page_places": "Orte",
|
||||||
"search_page_recently_added": "Zuletzt hinzugefügt",
|
"search_page_recently_added": "Zuletzt hinzugefügt",
|
||||||
"search_page_screenshots": "Bildschirmfotos",
|
"search_page_screenshots": "Bildschirmfotos",
|
||||||
@@ -284,6 +291,10 @@
|
|||||||
"theme_setting_theme_title": "Theme",
|
"theme_setting_theme_title": "Theme",
|
||||||
"theme_setting_three_stage_loading_subtitle": "Das dreistufige Ladeverfahren kann die Performance beim Laden verbessern, erhöht allerdings den Datenverbrauch deutlich",
|
"theme_setting_three_stage_loading_subtitle": "Das dreistufige Ladeverfahren kann die Performance beim Laden verbessern, erhöht allerdings den Datenverbrauch deutlich",
|
||||||
"theme_setting_three_stage_loading_title": "Dreistufiges Laden aktivieren",
|
"theme_setting_three_stage_loading_title": "Dreistufiges Laden aktivieren",
|
||||||
|
"upload_dialog_cancel": "Cancel",
|
||||||
|
"upload_dialog_info": "Do you want to backup the selected Asset(s) to the server?",
|
||||||
|
"upload_dialog_ok": "Upload",
|
||||||
|
"upload_dialog_title": "Upload Asset",
|
||||||
"version_announcement_overlay_ack": "Ich habe verstanden",
|
"version_announcement_overlay_ack": "Ich habe verstanden",
|
||||||
"version_announcement_overlay_release_notes": "Änderungsprotokoll",
|
"version_announcement_overlay_release_notes": "Änderungsprotokoll",
|
||||||
"version_announcement_overlay_text_1": "Hallo mein Freund! Es gibt eine neue Version von",
|
"version_announcement_overlay_text_1": "Hallo mein Freund! Es gibt eine neue Version von",
|
||||||
|
|||||||
@@ -84,7 +84,7 @@
|
|||||||
"backup_controller_page_status_off": "Automatic foreground backup is off",
|
"backup_controller_page_status_off": "Automatic foreground backup is off",
|
||||||
"backup_controller_page_status_on": "Automatic foreground backup is on",
|
"backup_controller_page_status_on": "Automatic foreground backup is on",
|
||||||
"backup_controller_page_storage_format": "{} of {} used",
|
"backup_controller_page_storage_format": "{} of {} used",
|
||||||
"backup_controller_page_to_backup": "Albums to be backed up",
|
"backup_controller_page_to_backup": "Albums to be backup",
|
||||||
"backup_controller_page_total": "Total",
|
"backup_controller_page_total": "Total",
|
||||||
"backup_controller_page_total_sub": "All unique photos and videos from selected albums",
|
"backup_controller_page_total_sub": "All unique photos and videos from selected albums",
|
||||||
"backup_controller_page_turn_off": "Turn off foreground backup",
|
"backup_controller_page_turn_off": "Turn off foreground backup",
|
||||||
@@ -92,10 +92,11 @@
|
|||||||
"backup_controller_page_uploading_file_info": "Uploading file info",
|
"backup_controller_page_uploading_file_info": "Uploading file info",
|
||||||
"backup_err_only_album": "Cannot remove the only album",
|
"backup_err_only_album": "Cannot remove the only album",
|
||||||
"backup_info_card_assets": "assets",
|
"backup_info_card_assets": "assets",
|
||||||
|
"backup_manual_cancelled": "Cancelled",
|
||||||
"backup_manual_failed": "Failed",
|
"backup_manual_failed": "Failed",
|
||||||
"backup_manual_title": "Upload status",
|
|
||||||
"backup_manual_success": "Success",
|
|
||||||
"backup_manual_in_progress": "Upload already in progress. Try after sometime",
|
"backup_manual_in_progress": "Upload already in progress. Try after sometime",
|
||||||
|
"backup_manual_success": "Success",
|
||||||
|
"backup_manual_title": "Upload status",
|
||||||
"cache_settings_album_thumbnails": "Library page thumbnails ({} assets)",
|
"cache_settings_album_thumbnails": "Library page thumbnails ({} assets)",
|
||||||
"cache_settings_clear_cache_button": "Clear cache",
|
"cache_settings_clear_cache_button": "Clear cache",
|
||||||
"cache_settings_clear_cache_button_title": "Clears the app's cache. This will significantly impact the app's performance until the cache has rebuilt.",
|
"cache_settings_clear_cache_button_title": "Clears the app's cache. This will significantly impact the app's performance until the cache has rebuilt.",
|
||||||
@@ -142,10 +143,6 @@
|
|||||||
"delete_dialog_cancel": "Cancel",
|
"delete_dialog_cancel": "Cancel",
|
||||||
"delete_dialog_ok": "Delete",
|
"delete_dialog_ok": "Delete",
|
||||||
"delete_dialog_title": "Delete Permanently",
|
"delete_dialog_title": "Delete Permanently",
|
||||||
"upload_dialog_title": "Upload Asset",
|
|
||||||
"upload_dialog_info": "Do you want to backup the selected Asset(s) to the server?",
|
|
||||||
"upload_dialog_ok": "Upload",
|
|
||||||
"upload_dialog_cancel": "Cancel",
|
|
||||||
"description_input_hint_text": "Add description...",
|
"description_input_hint_text": "Add description...",
|
||||||
"description_input_submit_error": "Error updating description, check the log for more details",
|
"description_input_submit_error": "Error updating description, check the log for more details",
|
||||||
"exif_bottom_sheet_description": "Add Description...",
|
"exif_bottom_sheet_description": "Add Description...",
|
||||||
@@ -161,10 +158,10 @@
|
|||||||
"home_page_add_to_album_err_local": "Can not add local assets to albums yet, skipping",
|
"home_page_add_to_album_err_local": "Can not add local assets to albums yet, skipping",
|
||||||
"home_page_add_to_album_success": "Added {added} assets to album {album}.",
|
"home_page_add_to_album_success": "Added {added} assets to album {album}.",
|
||||||
"home_page_archive_err_local": "Can not archive local assets yet, skipping",
|
"home_page_archive_err_local": "Can not archive local assets yet, skipping",
|
||||||
"home_page_upload_err_limit": "Can only upload a maximum of 30 assets at a time, skipping",
|
|
||||||
"home_page_building_timeline": "Building the timeline",
|
"home_page_building_timeline": "Building the timeline",
|
||||||
"home_page_favorite_err_local": "Can not favorite local assets yet, skipping",
|
"home_page_favorite_err_local": "Can not favorite local assets yet, skipping",
|
||||||
"home_page_first_time_notice": "If this is your first time using the app, please make sure to choose a backup album(s) so that the timeline can populate photos and videos in the album(s).",
|
"home_page_first_time_notice": "If this is your first time using the app, please make sure to choose a backup album(s) so that the timeline can populate photos and videos in the album(s).",
|
||||||
|
"home_page_upload_err_limit": "Can only upload a maximum of 30 assets at a time, skipping",
|
||||||
"image_viewer_page_state_provider_download_error": "Download Error",
|
"image_viewer_page_state_provider_download_error": "Download Error",
|
||||||
"image_viewer_page_state_provider_download_success": "Download Success",
|
"image_viewer_page_state_provider_download_success": "Download Success",
|
||||||
"library_page_albums": "Albums",
|
"library_page_albums": "Albums",
|
||||||
@@ -175,6 +172,7 @@
|
|||||||
"library_page_sharing": "Sharing",
|
"library_page_sharing": "Sharing",
|
||||||
"library_page_sort_created": "Most recently created",
|
"library_page_sort_created": "Most recently created",
|
||||||
"library_page_sort_title": "Album title",
|
"library_page_sort_title": "Album title",
|
||||||
|
"login_disabled": "Login has been disabled",
|
||||||
"login_form_api_exception": "API exception. Please check the server URL and try again.",
|
"login_form_api_exception": "API exception. Please check the server URL and try again.",
|
||||||
"login_form_button_text": "Login",
|
"login_form_button_text": "Login",
|
||||||
"login_form_email_hint": "youremail@email.com",
|
"login_form_email_hint": "youremail@email.com",
|
||||||
@@ -195,7 +193,6 @@
|
|||||||
"login_form_save_login": "Stay logged in",
|
"login_form_save_login": "Stay logged in",
|
||||||
"login_form_server_empty": "Enter a server URL.",
|
"login_form_server_empty": "Enter a server URL.",
|
||||||
"login_form_server_error": "Could not connect to server.",
|
"login_form_server_error": "Could not connect to server.",
|
||||||
"login_disabled": "Login has been disabled",
|
|
||||||
"monthly_title_text_date_format": "MMMM y",
|
"monthly_title_text_date_format": "MMMM y",
|
||||||
"motion_photos_page_title": "Motion Photos",
|
"motion_photos_page_title": "Motion Photos",
|
||||||
"notification_permission_dialog_cancel": "Cancel",
|
"notification_permission_dialog_cancel": "Cancel",
|
||||||
@@ -294,10 +291,30 @@
|
|||||||
"theme_setting_theme_title": "Theme",
|
"theme_setting_theme_title": "Theme",
|
||||||
"theme_setting_three_stage_loading_subtitle": "Three-stage loading might increase the loading performance but causes significantly higher network load",
|
"theme_setting_three_stage_loading_subtitle": "Three-stage loading might increase the loading performance but causes significantly higher network load",
|
||||||
"theme_setting_three_stage_loading_title": "Enable three-stage loading",
|
"theme_setting_three_stage_loading_title": "Enable three-stage loading",
|
||||||
|
"upload_dialog_cancel": "Cancel",
|
||||||
|
"upload_dialog_info": "Do you want to backup the selected Asset(s) to the server?",
|
||||||
|
"upload_dialog_ok": "Upload",
|
||||||
|
"upload_dialog_title": "Upload Asset",
|
||||||
"version_announcement_overlay_ack": "Acknowledge",
|
"version_announcement_overlay_ack": "Acknowledge",
|
||||||
"version_announcement_overlay_release_notes": "release notes",
|
"version_announcement_overlay_release_notes": "release notes",
|
||||||
"version_announcement_overlay_text_1": "Hi friend, there is a new release of",
|
"version_announcement_overlay_text_1": "Hi friend, there is a new release of",
|
||||||
"version_announcement_overlay_text_2": "please take your time to visit the ",
|
"version_announcement_overlay_text_2": "please take your time to visit the ",
|
||||||
"version_announcement_overlay_text_3": " and ensure your docker-compose and .env setup is up-to-date to prevent any misconfigurations, especially if you use WatchTower or any mechanism that handles updating your server application automatically.",
|
"version_announcement_overlay_text_3": " and ensure your docker-compose and .env setup is up-to-date to prevent any misconfigurations, especially if you use WatchTower or any mechanism that handles updating your server application automatically.",
|
||||||
"version_announcement_overlay_title": "New Server Version Available \uD83C\uDF89"
|
"version_announcement_overlay_title": "New Server Version Available \uD83C\uDF89",
|
||||||
|
"translated_text_options": "Options",
|
||||||
|
"map_no_assets_in_bounds": "No photos in this area",
|
||||||
|
"map_zoom_to_see_photos": "Zoom out to see photos",
|
||||||
|
"map_settings_dialog_title": "Map Settings",
|
||||||
|
"map_settings_dark_mode": "Dark mode",
|
||||||
|
"map_settings_only_show_favorites": "Show Favorite Only",
|
||||||
|
"map_settings_only_relative_range": "Date range",
|
||||||
|
"map_settings_dialog_cancel": "Cancel",
|
||||||
|
"map_settings_dialog_save": "Save",
|
||||||
|
"map_cannot_get_user_location": "Cannot get user's location",
|
||||||
|
"map_location_service_disabled_title": "Location Service disabled",
|
||||||
|
"map_location_service_disabled_content": "Location service needs to be enabled to display assets from your current location. Do you want to enable it now?",
|
||||||
|
"map_no_location_permission_title": "Location Permission denied",
|
||||||
|
"map_no_location_permission_content": "Location permission is needed to display assets from your current location. Do you want to allow it now?",
|
||||||
|
"map_location_dialog_cancel": "Cancel",
|
||||||
|
"map_location_dialog_yes": "Yes"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,83 +1,83 @@
|
|||||||
{
|
{
|
||||||
"add_to_album_bottom_sheet_added": "Added to {album}",
|
"add_to_album_bottom_sheet_added": "Agregado a {album}",
|
||||||
"add_to_album_bottom_sheet_already_exists": "Already in {album}",
|
"add_to_album_bottom_sheet_already_exists": "Ya se encuentra en {album}",
|
||||||
"advanced_settings_prefer_remote_subtitle": "Some devices are painfully slow to load thumbnails from assets on the device. Activate this setting to load remote images instead.",
|
"advanced_settings_prefer_remote_subtitle": "Algunos dispositivos tardan mucho en cargar las miniaturas de recursos encontrados el dispositivo. Activa esta opción para cargar imágenes remotas en su lugar.",
|
||||||
"advanced_settings_prefer_remote_title": "Prefer remote images",
|
"advanced_settings_prefer_remote_title": "Preferir imágenes remotas",
|
||||||
"advanced_settings_tile_subtitle": "Advanced user's settings",
|
"advanced_settings_tile_subtitle": "Configuraciones avanzadas del usuario",
|
||||||
"advanced_settings_tile_title": "Advanced",
|
"advanced_settings_tile_title": "Avanzado",
|
||||||
"advanced_settings_troubleshooting_subtitle": "Enable additional features for troubleshooting",
|
"advanced_settings_troubleshooting_subtitle": "Habilitar funciones adicionales para solución de problemas",
|
||||||
"advanced_settings_troubleshooting_title": "Troubleshooting",
|
"advanced_settings_troubleshooting_title": "Solución de problemas",
|
||||||
"album_info_card_backup_album_excluded": "EXCLUIDOS",
|
"album_info_card_backup_album_excluded": "EXCLUIDOS",
|
||||||
"album_info_card_backup_album_included": "INCLUIDOS",
|
"album_info_card_backup_album_included": "INCLUIDOS",
|
||||||
"album_thumbnail_card_item": "1 item",
|
"album_thumbnail_card_item": "1 elemento",
|
||||||
"album_thumbnail_card_items": "{} items",
|
"album_thumbnail_card_items": "{} elementos",
|
||||||
"album_thumbnail_card_shared": " · Shared",
|
"album_thumbnail_card_shared": "Compartido",
|
||||||
"album_thumbnail_owned": "Owned",
|
"album_thumbnail_owned": "Propio",
|
||||||
"album_thumbnail_shared_by": "Shared by {}",
|
"album_thumbnail_shared_by": "Compartido por {}",
|
||||||
"album_viewer_appbar_share_delete": "Eliminar álbum ",
|
"album_viewer_appbar_share_delete": "Eliminar álbum ",
|
||||||
"album_viewer_appbar_share_err_delete": "No ha podido eliminar el álbum",
|
"album_viewer_appbar_share_err_delete": "No ha podido eliminar el álbum",
|
||||||
"album_viewer_appbar_share_err_leave": "No ha podido dejar el álbum",
|
"album_viewer_appbar_share_err_leave": "No se ha podido abandonar el álbum",
|
||||||
"album_viewer_appbar_share_err_remove": "Hay problemas para eliminar los activos del álbum",
|
"album_viewer_appbar_share_err_remove": "Hay problemas para eliminar los archivos del álbum",
|
||||||
"album_viewer_appbar_share_err_title": "Error al cambiar el título del álbum ",
|
"album_viewer_appbar_share_err_title": "Error al cambiar el título del álbum ",
|
||||||
"album_viewer_appbar_share_leave": "Abandonar álbum ",
|
"album_viewer_appbar_share_leave": "Abandonar álbum ",
|
||||||
"album_viewer_appbar_share_remove": "Eliminar del álbum ",
|
"album_viewer_appbar_share_remove": "Eliminar del álbum ",
|
||||||
"album_viewer_page_share_add_users": "Añadir usuarios",
|
"album_viewer_page_share_add_users": "Agregar usuarios",
|
||||||
"all_people_page_title": "People",
|
"all_people_page_title": "Personas",
|
||||||
"all_videos_page_title": "Videos",
|
"all_videos_page_title": "Videos",
|
||||||
"archive_page_no_archived_assets": "No archived assets found",
|
"archive_page_no_archived_assets": "No se encontraron recursos archivados",
|
||||||
"archive_page_title": "Archive ({})",
|
"archive_page_title": "Archivo ({})",
|
||||||
"asset_list_layout_settings_dynamic_layout_title": "Disposición dinámica",
|
"asset_list_layout_settings_dynamic_layout_title": "Diseño dinámico",
|
||||||
"asset_list_layout_settings_group_automatically": "Automatic",
|
"asset_list_layout_settings_group_automatically": "Automatico",
|
||||||
"asset_list_layout_settings_group_by": "Agrupar recursos por",
|
"asset_list_layout_settings_group_by": "Agrupar recursos por",
|
||||||
"asset_list_layout_settings_group_by_month": "Mes",
|
"asset_list_layout_settings_group_by_month": "Mes",
|
||||||
"asset_list_layout_settings_group_by_month_day": "Mes + día",
|
"asset_list_layout_settings_group_by_month_day": "Mes + día",
|
||||||
"asset_list_settings_subtitle": "Photo grid layout settings",
|
"asset_list_settings_subtitle": "Configuraciones del diseño de la cuadrícula de fotos",
|
||||||
"asset_list_settings_title": "Photo Grid",
|
"asset_list_settings_title": "Cuadrícula de fotos",
|
||||||
"backup_album_selection_page_albums_device": "Álbumes en el dispositivo ({})",
|
"backup_album_selection_page_albums_device": "Álbumes en el dispositivo ({})",
|
||||||
"backup_album_selection_page_albums_tap": "Toque para incluir, doble toque para excluir",
|
"backup_album_selection_page_albums_tap": "Toque para incluir, doble toque para excluir",
|
||||||
"backup_album_selection_page_assets_scatter": "Los activos pueden dispersarse en varios álbumes. De este modo, los álbumes pueden ser incluidos o excluidos durante el proceso de copia de seguridad.",
|
"backup_album_selection_page_assets_scatter": "Los archivos pueden dispersarse en varios álbumes. De este modo, los álbumes pueden ser incluidos o excluidos durante el proceso de copia de seguridad.",
|
||||||
"backup_album_selection_page_select_albums": "Seleccionar Álbumes",
|
"backup_album_selection_page_select_albums": "Seleccionar Álbumes",
|
||||||
"backup_album_selection_page_selection_info": "Información sobre la Selección",
|
"backup_album_selection_page_selection_info": "Información sobre la Selección",
|
||||||
"backup_album_selection_page_total_assets": "Total de activos únicos",
|
"backup_album_selection_page_total_assets": "Total de archivos únicos",
|
||||||
"backup_all": "Todos",
|
"backup_all": "Todos",
|
||||||
"backup_background_service_backup_failed_message": "Failed to backup assets. Retrying…",
|
"backup_background_service_backup_failed_message": "Error al copiar archivos. Reintentando...",
|
||||||
"backup_background_service_connection_failed_message": "Failed to connect to the server. Retrying…",
|
"backup_background_service_connection_failed_message": "Error al conectar con el servidor. Reintentando...",
|
||||||
"backup_background_service_current_upload_notification": "Uploading {}",
|
"backup_background_service_current_upload_notification": "Cargando {}",
|
||||||
"backup_background_service_default_notification": "Checking for new assets…",
|
"backup_background_service_default_notification": "Verificando si hay nuevos archivos",
|
||||||
"backup_background_service_error_title": "Backup error",
|
"backup_background_service_error_title": "Error de copia de seguridad",
|
||||||
"backup_background_service_in_progress_notification": "Backing up your assets…",
|
"backup_background_service_in_progress_notification": "Creando copia de seguridad de tus archivos...",
|
||||||
"backup_background_service_upload_failure_notification": "Failed to upload {}",
|
"backup_background_service_upload_failure_notification": "Error al cargar {}",
|
||||||
"backup_controller_page_albums": "Álbumes de copia de seguridad",
|
"backup_controller_page_albums": "Álbumes de copia de seguridad",
|
||||||
"backup_controller_page_background_app_refresh_disabled_content": "Enable background app refresh in Settings > General > Background App Refresh in order to use background backup.",
|
"backup_controller_page_background_app_refresh_disabled_content": "Activa la actualización en segundo plano de la aplicación en Configuración > General > Actualización en segundo plano para usar la copia de seguridad en segundo plano.",
|
||||||
"backup_controller_page_background_app_refresh_disabled_title": "Background app refresh disabled",
|
"backup_controller_page_background_app_refresh_disabled_title": "Actualización en segundo plano desactivada",
|
||||||
"backup_controller_page_background_app_refresh_enable_button_text": "Go to settings",
|
"backup_controller_page_background_app_refresh_enable_button_text": "Ir a configuración",
|
||||||
"backup_controller_page_background_battery_info_link": "Show me how",
|
"backup_controller_page_background_battery_info_link": "Muestrame cómo",
|
||||||
"backup_controller_page_background_battery_info_message": "For the best background backup experience, please disable any battery optimizations restricting background activity for Immich.\n\nSince this is device-specific, please lookup the required information for your device manufacturer.",
|
"backup_controller_page_background_battery_info_message": "Para obtener la mejor experiencia de copia de seguridad en segundo plano, desactiva cualquier optimización de batería que restrinja la actividad en segundo plano para Immich.\n\nDado que esto es específico en cada dispositivo, busca la información necesaria de el fabricante de tu dispositivo.",
|
||||||
"backup_controller_page_background_battery_info_ok": "OK",
|
"backup_controller_page_background_battery_info_ok": "Ok",
|
||||||
"backup_controller_page_background_battery_info_title": "Battery optimizations",
|
"backup_controller_page_background_battery_info_title": "Optimizaciones de batería",
|
||||||
"backup_controller_page_background_charging": "Only while charging",
|
"backup_controller_page_background_charging": "Solo mientras se carga",
|
||||||
"backup_controller_page_background_configure_error": "Failed to configure the background service",
|
"backup_controller_page_background_configure_error": "Error al configurar el servicio en segundo plano",
|
||||||
"backup_controller_page_background_delay": "Delay new assets backup: {}",
|
"backup_controller_page_background_delay": "Retraso en la copia de seguridad de nuevos activos: {}",
|
||||||
"backup_controller_page_background_description": "Turn on the background service to automatically backup any new assets without needing to open the app",
|
"backup_controller_page_background_description": "Activa el servicio en segundo plano para copiar automáticamente cualquier nuevos archivos sin necesidad de abrir la aplicación.",
|
||||||
"backup_controller_page_background_is_off": "Automatic background backup is off",
|
"backup_controller_page_background_is_off": "La copia de seguridad en segundo plano automática está desactivada",
|
||||||
"backup_controller_page_background_is_on": "Automatic background backup is on",
|
"backup_controller_page_background_is_on": "La copia de seguridad en segundo plano automática está activada",
|
||||||
"backup_controller_page_background_turn_off": "Turn off background service",
|
"backup_controller_page_background_turn_off": "Desactivar el servicio en segundo plano",
|
||||||
"backup_controller_page_background_turn_on": "Turn on background service",
|
"backup_controller_page_background_turn_on": "Activar el servicio en segundo plano",
|
||||||
"backup_controller_page_background_wifi": "Only on WiFi",
|
"backup_controller_page_background_wifi": "Solo en WiFi",
|
||||||
"backup_controller_page_backup": "Copia de Seguridad",
|
"backup_controller_page_backup": "Copia de Seguridad",
|
||||||
"backup_controller_page_backup_selected": "Seleccionado:",
|
"backup_controller_page_backup_selected": "Seleccionado:",
|
||||||
"backup_controller_page_backup_sub": "Copia de seguridad de fotos y vídeos",
|
"backup_controller_page_backup_sub": "Fotos y videos respaldados",
|
||||||
"backup_controller_page_cancel": "Cancelar",
|
"backup_controller_page_cancel": "Cancelar",
|
||||||
"backup_controller_page_created": "Created on: {}",
|
"backup_controller_page_created": "Creado el: {}",
|
||||||
"backup_controller_page_desc_backup": "Active la copia de seguridad para cargar automáticamente los nuevos activos al servidor.",
|
"backup_controller_page_desc_backup": "Active la copia de seguridad para cargar automáticamente los nuevos activos al servidor.",
|
||||||
"backup_controller_page_excluded": "Excluido:",
|
"backup_controller_page_excluded": "Excluido:",
|
||||||
"backup_controller_page_failed": "Failed ({})",
|
"backup_controller_page_failed": "Fallidos ({})",
|
||||||
"backup_controller_page_filename": "File name: {} [{}]",
|
"backup_controller_page_filename": "Nombre del archivo: {} [{}]",
|
||||||
"backup_controller_page_id": "ID: {}",
|
"backup_controller_page_id": "ID: {}",
|
||||||
"backup_controller_page_info": "Información de la Copia de Seguridad",
|
"backup_controller_page_info": "Información de la Copia de Seguridad",
|
||||||
"backup_controller_page_none_selected": "Ninguno seleccionado",
|
"backup_controller_page_none_selected": "Ninguno seleccionado",
|
||||||
"backup_controller_page_remainder": "Remanente",
|
"backup_controller_page_remainder": "Restante",
|
||||||
"backup_controller_page_remainder_sub": "Fotos y álbumes restantes para hacer una copia de seguridad de la selección",
|
"backup_controller_page_remainder_sub": "Fotos y videos restantes para hacer una copia de seguridad de la selección",
|
||||||
"backup_controller_page_select": "Seleccionar",
|
"backup_controller_page_select": "Seleccionar",
|
||||||
"backup_controller_page_server_storage": "Almacenamiento en el servidor",
|
"backup_controller_page_server_storage": "Almacenamiento en el servidor",
|
||||||
"backup_controller_page_start_backup": "Iniciar copia de seguridad",
|
"backup_controller_page_start_backup": "Iniciar copia de seguridad",
|
||||||
@@ -89,48 +89,53 @@
|
|||||||
"backup_controller_page_total_sub": "Todas las fotos y vídeos únicos de los álbumes seleccionados",
|
"backup_controller_page_total_sub": "Todas las fotos y vídeos únicos de los álbumes seleccionados",
|
||||||
"backup_controller_page_turn_off": "Apagar la copia de seguridad",
|
"backup_controller_page_turn_off": "Apagar la copia de seguridad",
|
||||||
"backup_controller_page_turn_on": "Activar la copia de seguridad",
|
"backup_controller_page_turn_on": "Activar la copia de seguridad",
|
||||||
"backup_controller_page_uploading_file_info": "Uploading file info",
|
"backup_controller_page_uploading_file_info": "Cargando información del archivo",
|
||||||
"backup_err_only_album": "No se puede eliminar el único álbum",
|
"backup_err_only_album": "No se puede eliminar el único álbum",
|
||||||
"backup_info_card_assets": "activos",
|
"backup_info_card_assets": "archivos",
|
||||||
"cache_settings_album_thumbnails": "Library page thumbnails ({} assets)",
|
"backup_manual_cancelled": "Cancelled",
|
||||||
"cache_settings_clear_cache_button": "Clear cache",
|
"backup_manual_failed": "Failed",
|
||||||
"cache_settings_clear_cache_button_title": "Clears the app's cache. This will significantly impact the app's performance until the cache has rebuilt.",
|
"backup_manual_in_progress": "Upload already in progress. Try after sometime",
|
||||||
"cache_settings_image_cache_size": "Image cache size ({} assets)",
|
"backup_manual_success": "Success",
|
||||||
"cache_settings_statistics_album": "Library thumbnails",
|
"backup_manual_title": "Upload status",
|
||||||
"cache_settings_statistics_assets": "{} assets ({})",
|
"cache_settings_album_thumbnails": "Miniaturas de la página de la biblioteca ({} archivos)",
|
||||||
"cache_settings_statistics_full": "Full images",
|
"cache_settings_clear_cache_button": "Borrar caché",
|
||||||
"cache_settings_statistics_shared": "Shared album thumbnails",
|
"cache_settings_clear_cache_button_title": "Borra la caché de la aplicación. Esto afectará significativamente el rendimiento de la aplicación hasta que se reconstruya la caché.",
|
||||||
"cache_settings_statistics_thumbnail": "Thumbnails",
|
"cache_settings_image_cache_size": "Tamaño de la caché de imágenes ({} archivos)",
|
||||||
"cache_settings_statistics_title": "Cache usage",
|
"cache_settings_statistics_album": "Miniaturas de la biblioteca",
|
||||||
"cache_settings_subtitle": "Control the caching behaviour of the Immich mobile application",
|
"cache_settings_statistics_assets": "{} archivos ({})",
|
||||||
"cache_settings_thumbnail_size": "Thumbnail cache size ({} assets)",
|
"cache_settings_statistics_full": "Imágenes completas",
|
||||||
"cache_settings_title": "Caching Settings",
|
"cache_settings_statistics_shared": "Miniaturas de álbumes compartidos",
|
||||||
"change_password_form_confirm_password": "Confirm Password",
|
"cache_settings_statistics_thumbnail": "Miniaturas",
|
||||||
"change_password_form_description": "Hi {firstName} {lastName},\n\nThis is either the first time you are signing into the system or a request has been made to change your password. Please enter the new password below.",
|
"cache_settings_statistics_title": "Uso de caché",
|
||||||
"change_password_form_new_password": "New Password",
|
"cache_settings_subtitle": "Controla el comportamiento del almacenamiento en caché de la aplicación móvil Immich",
|
||||||
"change_password_form_password_mismatch": "Passwords do not match",
|
"cache_settings_thumbnail_size": "Tamaño de la caché de miniaturas ({} archivos)",
|
||||||
"change_password_form_reenter_new_password": "Re-enter New Password",
|
"cache_settings_title": "Configuración de la caché",
|
||||||
"common_add_to_album": "Add to album",
|
"change_password_form_confirm_password": "Confirmar Contraseña",
|
||||||
"common_change_password": "Change Password",
|
"change_password_form_description": "Hola {firstName} {lastName},\n\nEsta es la primera vez que inicias sesión en el sistema o se ha solicitado cambiar tu contraseña. Por favor, introduce la nueva contraseña a continuación.",
|
||||||
"common_create_new_album": "Create new album",
|
"change_password_form_new_password": "Nueva Contraseña",
|
||||||
"common_server_error": "Please check your network connection, make sure the server is reachable and app/server versions are compatible.",
|
"change_password_form_password_mismatch": "Las contraseñas no coinciden",
|
||||||
"common_shared": "Shared",
|
"change_password_form_reenter_new_password": "Vuelve a ingresar la nueva contraseña",
|
||||||
"control_bottom_app_bar_add_to_album": "Añadir al álbum",
|
"common_add_to_album": "Agregar al álbum",
|
||||||
|
"common_change_password": "Cambiar Contraseña",
|
||||||
|
"common_create_new_album": "Crear nuevo álbum",
|
||||||
|
"common_server_error": "Por favor, verifica tu conexión de red, asegúrate de que el servidor esté accesible y las versiones de la aplicación y del servidor sean compatibles.",
|
||||||
|
"common_shared": "Compartido",
|
||||||
|
"control_bottom_app_bar_add_to_album": "Agregar al álbum",
|
||||||
"control_bottom_app_bar_album_info": "{} elementos",
|
"control_bottom_app_bar_album_info": "{} elementos",
|
||||||
"control_bottom_app_bar_album_info_shared": "{} elementos · Compartido",
|
"control_bottom_app_bar_album_info_shared": "{} elementos · Compartidos",
|
||||||
"control_bottom_app_bar_archive": "Archive",
|
"control_bottom_app_bar_archive": "Archivar",
|
||||||
"control_bottom_app_bar_create_new_album": "Crear nuevo álbum",
|
"control_bottom_app_bar_create_new_album": "Crear nuevo álbum",
|
||||||
"control_bottom_app_bar_delete": "Eliminar",
|
"control_bottom_app_bar_delete": "Eliminar",
|
||||||
"control_bottom_app_bar_favorite": "Favorite",
|
"control_bottom_app_bar_favorite": "Favorito",
|
||||||
"control_bottom_app_bar_share": "Share",
|
"control_bottom_app_bar_share": "Compartir",
|
||||||
"control_bottom_app_bar_unarchive": "Unarchive",
|
"control_bottom_app_bar_unarchive": "Desarchivar",
|
||||||
"create_album_page_untitled": "Untitled",
|
"create_album_page_untitled": "Sin título",
|
||||||
"create_shared_album_page_create": "Create",
|
"create_shared_album_page_create": "Crear",
|
||||||
"create_shared_album_page_share": "Compartir",
|
"create_shared_album_page_share": "Compartir",
|
||||||
"create_shared_album_page_share_add_assets": "AÑADIR ACTIVOS",
|
"create_shared_album_page_share_add_assets": "AGREGAR ARCHIVOS",
|
||||||
"create_shared_album_page_share_select_photos": "Seleccionar Fotos",
|
"create_shared_album_page_share_select_photos": "Seleccionar Fotos",
|
||||||
"curated_location_page_title": "Places",
|
"curated_location_page_title": "Lugares",
|
||||||
"curated_object_page_title": "Things",
|
"curated_object_page_title": "Objetos",
|
||||||
"daily_title_text_date": "E dd, MMM",
|
"daily_title_text_date": "E dd, MMM",
|
||||||
"daily_title_text_date_year": "E dd de MMM, yyyy",
|
"daily_title_text_date_year": "E dd de MMM, yyyy",
|
||||||
"date_format": "E d, LLL y • h:mm a",
|
"date_format": "E d, LLL y • h:mm a",
|
||||||
@@ -138,35 +143,37 @@
|
|||||||
"delete_dialog_cancel": "Cancelar",
|
"delete_dialog_cancel": "Cancelar",
|
||||||
"delete_dialog_ok": "Eliminar",
|
"delete_dialog_ok": "Eliminar",
|
||||||
"delete_dialog_title": "Eliminar Permanentemente",
|
"delete_dialog_title": "Eliminar Permanentemente",
|
||||||
"description_input_hint_text": "Add description...",
|
"description_input_hint_text": "Agregar descripción...",
|
||||||
"description_input_submit_error": "Error updating description, check the log for more details",
|
"description_input_submit_error": "Error al actualizar la descripción, verifica el registro para obtener más detalles",
|
||||||
"exif_bottom_sheet_description": "Añadir Descripción...",
|
"exif_bottom_sheet_description": "Agregar Descripción...",
|
||||||
"exif_bottom_sheet_details": "DETALLES",
|
"exif_bottom_sheet_details": "DETALLES",
|
||||||
"exif_bottom_sheet_location": "LOCALZACIÓN",
|
"exif_bottom_sheet_location": "UBICACIÓN",
|
||||||
"experimental_settings_new_asset_list_subtitle": "Work in progress",
|
"experimental_settings_new_asset_list_subtitle": "Trabajo en progreso",
|
||||||
"experimental_settings_new_asset_list_title": "Enable experimental photo grid",
|
"experimental_settings_new_asset_list_title": "Habilitar cuadrícula fotográfica experimental",
|
||||||
"experimental_settings_subtitle": "Use at your own risk!",
|
"experimental_settings_subtitle": "Úsalo bajo tu responsabilidad",
|
||||||
"experimental_settings_title": "Experimental",
|
"experimental_settings_title": "Experimental",
|
||||||
"favorites_page_no_favorites": "No favorite assets found",
|
"favorites_page_no_favorites": "No se encontraron recursos marcados como favoritos",
|
||||||
"favorites_page_title": "Favoritos",
|
"favorites_page_title": "Favoritos",
|
||||||
"home_page_add_to_album_conflicts": "Añadidos {added} elementos al álbum {album}. {failed} elementos ya están añadidos.",
|
"home_page_add_to_album_conflicts": "{added} elementos agregados al álbum {album}.{failed} elementos ya existen en el álbum.",
|
||||||
"home_page_add_to_album_err_local": "Can not add local assets to albums yet, skipping",
|
"home_page_add_to_album_err_local": "Aún no se pueden agregar recursos locales a álbumes, omitiendo",
|
||||||
"home_page_add_to_album_success": "Añadidos {added} elementos al álbum {album}.",
|
"home_page_add_to_album_success": "{added} elementos agregados al álbum {album}. ",
|
||||||
"home_page_archive_err_local": "Can not archive local assets yet, skipping",
|
"home_page_archive_err_local": "Los recursos locales no pueden ser archivados, omitiendo",
|
||||||
"home_page_building_timeline": "Construyendo la línea de tiempo",
|
"home_page_building_timeline": "Construyendo la línea de tiempo",
|
||||||
"home_page_favorite_err_local": "Can not favorite local assets yet, skipping",
|
"home_page_favorite_err_local": "Aún no se pueden archivar recursos locales, omitiendo",
|
||||||
"home_page_first_time_notice": "Si esta es la primera vez que usas la app, por favor, asegúrate de elegir un álbum de respaldo para que la línea de tiempo pueda cargar fotos y videos en los álbumes.",
|
"home_page_first_time_notice": "Si esta es la primera vez que usas la app, por favor, asegúrate de elegir un álbum de respaldo para que la línea de tiempo pueda cargar fotos y videos en los álbumes.",
|
||||||
"image_viewer_page_state_provider_download_error": "Download Error",
|
"home_page_upload_err_limit": "Can only upload a maximum of 30 assets at a time, skipping",
|
||||||
"image_viewer_page_state_provider_download_success": "Download Success",
|
"image_viewer_page_state_provider_download_error": "Error de descarga",
|
||||||
"library_page_albums": "Albums",
|
"image_viewer_page_state_provider_download_success": "Descarga exitosa",
|
||||||
"library_page_archive": "Archive",
|
"library_page_albums": "Álbumes",
|
||||||
"library_page_device_albums": "Albums on Device",
|
"library_page_archive": "Archivo",
|
||||||
|
"library_page_device_albums": "Álbumes en el dispositivo",
|
||||||
"library_page_favorites": "Favoritos",
|
"library_page_favorites": "Favoritos",
|
||||||
"library_page_new_album": "New album",
|
"library_page_new_album": "Nuevo álbum",
|
||||||
"library_page_sharing": "Compartiendo",
|
"library_page_sharing": "Compartiendo",
|
||||||
"library_page_sort_created": "Creado más recientemente",
|
"library_page_sort_created": "Creado más recientemente",
|
||||||
"library_page_sort_title": "Título del álbum",
|
"library_page_sort_title": "Título del álbum",
|
||||||
"login_form_api_exception": "API exception. Please check the server URL and try again.",
|
"login_disabled": "Login has been disabled",
|
||||||
|
"login_form_api_exception": "Excepción producida por API. Por favor, verifica el URL del servidor e inténtalo de nuevo.",
|
||||||
"login_form_button_text": "Iniciar Sesión",
|
"login_form_button_text": "Iniciar Sesión",
|
||||||
"login_form_email_hint": "tucorreo@correo.com",
|
"login_form_email_hint": "tucorreo@correo.com",
|
||||||
"login_form_endpoint_hint": "http://tu-ip-de-servidor:puerto/api",
|
"login_form_endpoint_hint": "http://tu-ip-de-servidor:puerto/api",
|
||||||
@@ -176,118 +183,122 @@
|
|||||||
"login_form_err_invalid_url": "URL no válida",
|
"login_form_err_invalid_url": "URL no válida",
|
||||||
"login_form_err_leading_whitespace": "Espacio en blanco inicial",
|
"login_form_err_leading_whitespace": "Espacio en blanco inicial",
|
||||||
"login_form_err_trailing_whitespace": "Espacio en blanco al final",
|
"login_form_err_trailing_whitespace": "Espacio en blanco al final",
|
||||||
"login_form_failed_get_oauth_server_config": "Error logging using OAuth, check server URL",
|
"login_form_failed_get_oauth_server_config": "Error al iniciar sesión con OAuth, verifica la URL del servidor",
|
||||||
"login_form_failed_get_oauth_server_disable": "OAuth feature is not available on this server",
|
"login_form_failed_get_oauth_server_disable": "La función de OAuth no está disponible en este servidor",
|
||||||
"login_form_failed_login": "Error logging you in, check server URL, email and password",
|
"login_form_failed_login": "Error al iniciar sesión, comprueba la URL del servidor, el correo electrónico y la contraseña",
|
||||||
"login_form_label_email": "Correo",
|
"login_form_label_email": "Correo",
|
||||||
"login_form_label_password": "Contraseña",
|
"login_form_label_password": "Contraseña",
|
||||||
"login_form_next_button": "Next",
|
"login_form_next_button": "Siguiente",
|
||||||
"login_form_password_hint": "contraseña",
|
"login_form_password_hint": "contraseña",
|
||||||
"login_form_save_login": "Mantener la sesión iniciada",
|
"login_form_save_login": "Mantener la sesión iniciada",
|
||||||
"login_form_server_empty": "Enter a server URL.",
|
"login_form_server_empty": "Agrega la URL del servidor.",
|
||||||
"login_form_server_error": "Could not connect to server.",
|
"login_form_server_error": "No se pudo conectar al servidor.",
|
||||||
"monthly_title_text_date_format": "MMMM y",
|
"monthly_title_text_date_format": "MMMM y",
|
||||||
"motion_photos_page_title": "Motion Photos",
|
"motion_photos_page_title": "Foto en Movimiento",
|
||||||
"notification_permission_dialog_cancel": "Cancel",
|
"notification_permission_dialog_cancel": "Cancelar",
|
||||||
"notification_permission_dialog_content": "To enable notifications, go to Settings and select allow.",
|
"notification_permission_dialog_content": "Para activar las notificaciones, ve a Configuración y selecciona permitir.",
|
||||||
"notification_permission_dialog_settings": "Settings",
|
"notification_permission_dialog_settings": "Ajustes",
|
||||||
"notification_permission_list_tile_content": "Grant permission to enable notifications.",
|
"notification_permission_list_tile_content": "Concede permiso para habilitar las notificaciones.",
|
||||||
"notification_permission_list_tile_enable_button": "Enable Notifications",
|
"notification_permission_list_tile_enable_button": "Permitir notificaciones",
|
||||||
"notification_permission_list_tile_title": "Notification Permission",
|
"notification_permission_list_tile_title": "Permisos de Notificacion",
|
||||||
"partner_page_add_partner": "Add partner",
|
"partner_page_add_partner": "Agregar compañero",
|
||||||
"partner_page_empty_message": "Your photos are not yet shared with any partner.",
|
"partner_page_empty_message": "Tus fotos aún no se han compartido con ningún compañero.",
|
||||||
"partner_page_no_more_users": "No more users to add",
|
"partner_page_no_more_users": "No hay más usuarios para agregar",
|
||||||
"partner_page_partner_add_failed": "Failed to add partner",
|
"partner_page_partner_add_failed": "Compañero no pudo ser agregado ",
|
||||||
"partner_page_select_partner": "Select partner",
|
"partner_page_select_partner": "Seleccionar compañero",
|
||||||
"partner_page_shared_to_title": "Shared to",
|
"partner_page_shared_to_title": "Compartido con",
|
||||||
"partner_page_stop_sharing_content": "{} will no longer be able to access your photos.",
|
"partner_page_stop_sharing_content": "{} ya no podrá acceder a tus fotos",
|
||||||
"partner_page_stop_sharing_title": "Stop sharing your photos?",
|
"partner_page_stop_sharing_title": "¿Dejar de compartir tus fotos?",
|
||||||
"partner_page_title": "Partner",
|
"partner_page_title": "Compañero",
|
||||||
"permission_onboarding_continue_anyway": "Continue anyway",
|
"permission_onboarding_continue_anyway": "Continuar de todos modos",
|
||||||
"permission_onboarding_get_started": "Get started",
|
"permission_onboarding_get_started": "Empezar",
|
||||||
"permission_onboarding_go_to_settings": "Go to settings",
|
"permission_onboarding_go_to_settings": "Ir a configuración",
|
||||||
"permission_onboarding_grant_permission": "Grant permission",
|
"permission_onboarding_grant_permission": "Conceder permiso",
|
||||||
"permission_onboarding_log_out": "Log out",
|
"permission_onboarding_log_out": "Cerrar sesión",
|
||||||
"permission_onboarding_permission_denied": "Permission denied. To use Immich, grant photo and video permissions in Settings.",
|
"permission_onboarding_permission_denied": "Permiso denegado. Para usar Immich, concede permisos de fotos y videos en Configuración.",
|
||||||
"permission_onboarding_permission_granted": "Permission granted! You are all set.",
|
"permission_onboarding_permission_granted": "¡Permiso concedido! Todo listo.",
|
||||||
"permission_onboarding_permission_limited": "Permission limited. To let Immich backup and manage your entire gallery collection, grant photo and video permissions in Settings.",
|
"permission_onboarding_permission_limited": "Permiso limitado. Para permitir que Immich haga copia de seguridad y gestione toda tu colección de galería, concede permisos de fotos y videos en Configuración.",
|
||||||
"permission_onboarding_request": "Immich requires permission to view your photos and videos.",
|
"permission_onboarding_request": "Immich requiere permiso para ver tus fotos y videos.",
|
||||||
"profile_drawer_app_logs": "Logs",
|
"profile_drawer_app_logs": "Registros",
|
||||||
"profile_drawer_client_server_up_to_date": "El Cliente y el Servidor están actualizados",
|
"profile_drawer_client_server_up_to_date": "El Cliente y el Servidor están actualizados",
|
||||||
"profile_drawer_settings": "Settings",
|
"profile_drawer_settings": "Configuración",
|
||||||
"profile_drawer_sign_out": "Cerrar Sesión",
|
"profile_drawer_sign_out": "Cerrar Sesión",
|
||||||
"recently_added_page_title": "Recently Added",
|
"recently_added_page_title": "Recién Agregadas",
|
||||||
"search_bar_hint": "Busca tus fotos",
|
"search_bar_hint": "Busca tus fotos",
|
||||||
"search_page_categories": "Categories",
|
"search_page_categories": "Categorías",
|
||||||
"search_page_favorites": "Favorites",
|
"search_page_favorites": "Favoritos",
|
||||||
"search_page_motion_photos": "Motion Photos",
|
"search_page_motion_photos": "Foto en Movimiento",
|
||||||
"search_page_no_objects": "No Objects Info Available",
|
"search_page_no_objects": "No hay información de objetos disponibles",
|
||||||
"search_page_no_places": "No hay información de lugares disponibles",
|
"search_page_no_places": "No hay información de lugares disponibles",
|
||||||
"search_page_people": "People",
|
"search_page_people": "Personas",
|
||||||
"search_page_places": "Lugares",
|
"search_page_places": "Lugares",
|
||||||
"search_page_recently_added": "Recently added",
|
"search_page_recently_added": "Recién agregadas",
|
||||||
"search_page_screenshots": "Screenshots",
|
"search_page_screenshots": "Capturas de pantalla",
|
||||||
"search_page_selfies": "Selfies",
|
"search_page_selfies": "Selfies",
|
||||||
"search_page_things": "Cosas",
|
"search_page_things": "Cosas",
|
||||||
"search_page_videos": "Videos",
|
"search_page_videos": "Videos",
|
||||||
"search_page_view_all_button": "View all",
|
"search_page_view_all_button": "Ver todo",
|
||||||
"search_page_your_activity": "Your activity",
|
"search_page_your_activity": "Tu actividad",
|
||||||
"search_result_page_new_search_hint": "Nueva Busqueda",
|
"search_result_page_new_search_hint": "Nueva Busqueda",
|
||||||
"search_suggestion_list_smart_search_hint_1": "Smart search is enabled by default, to search for metadata use the syntax ",
|
"search_suggestion_list_smart_search_hint_1": "La búsqueda inteligente está habilitada por defecto, para buscar metadatos utiliza esta sintaxis ",
|
||||||
"search_suggestion_list_smart_search_hint_2": "m:your-search-term",
|
"search_suggestion_list_smart_search_hint_2": "m:tu-término-de-búsqueda",
|
||||||
"select_additional_user_for_sharing_page_suggestions": "Sugerencias",
|
"select_additional_user_for_sharing_page_suggestions": "Sugerencias",
|
||||||
"select_user_for_sharing_page_err_album": "Fallo al crear el álbum",
|
"select_user_for_sharing_page_err_album": "Fallo al crear el álbum",
|
||||||
"select_user_for_sharing_page_share_suggestions": "Suggestions",
|
"select_user_for_sharing_page_share_suggestions": "Sugerencias",
|
||||||
"server_info_box_app_version": "App Version",
|
"server_info_box_app_version": "Versión de la Aplicación",
|
||||||
"server_info_box_server_version": "Server Version",
|
"server_info_box_server_version": "Versión del Servidor",
|
||||||
"setting_image_viewer_help": "The detail viewer loads the small thumbnail first, then loads the medium-size preview (if enabled), finally loads the original (if enabled).",
|
"setting_image_viewer_help": "El visor de detalles carga primero la miniatura pequeña, luego carga la vista previa de tamaño mediano (si está habilitada), finalmente carga la original (si está habilitada).",
|
||||||
"setting_image_viewer_original_subtitle": "Habilitar para cargar la imagen en resolución original (¡muy grande!). Deshabilitar para reducir el consumo de datos (de red y caché).",
|
"setting_image_viewer_original_subtitle": "Activar para cargar la imagen en resolución original (¡muy grande!). Deshabilitar para reducir el consumo de datos (de red y caché).",
|
||||||
"setting_image_viewer_original_title": "Cargar imagen original",
|
"setting_image_viewer_original_title": "Cargar imagen original",
|
||||||
"setting_image_viewer_preview_subtitle": "Habilitar para cargar una imagen de resolución media. Deshabilitar para cargar directamente la imagen original o usar una miniatura.",
|
"setting_image_viewer_preview_subtitle": "Activar para cargar una imagen de resolución media. Deshabilitar para cargar directamente la imagen original o usar una miniatura.",
|
||||||
"setting_image_viewer_preview_title": "Cargar imagen de previsualización",
|
"setting_image_viewer_preview_title": "Cargar imagen de previsualización",
|
||||||
"setting_notifications_notify_failures_grace_period": "Notify background backup failures: {}",
|
"setting_notifications_notify_failures_grace_period": "Notificar fallos de copia de seguridad en segundo plano: {}",
|
||||||
"setting_notifications_notify_hours": "{} hours",
|
"setting_notifications_notify_hours": "{} horas",
|
||||||
"setting_notifications_notify_immediately": "immediately",
|
"setting_notifications_notify_immediately": "inmediatamente",
|
||||||
"setting_notifications_notify_minutes": "{} minutes",
|
"setting_notifications_notify_minutes": "{} minutos",
|
||||||
"setting_notifications_notify_never": "never",
|
"setting_notifications_notify_never": "nunca",
|
||||||
"setting_notifications_notify_seconds": "{} seconds",
|
"setting_notifications_notify_seconds": "{} segundos",
|
||||||
"setting_notifications_single_progress_subtitle": "Detailed upload progress information per asset",
|
"setting_notifications_single_progress_subtitle": "Información detallada del progreso de subida de cada archivo",
|
||||||
"setting_notifications_single_progress_title": "Show background backup detail progress",
|
"setting_notifications_single_progress_title": "Mostrar progreso detallado de copia de seguridad en segundo plano",
|
||||||
"setting_notifications_subtitle": "Adjust your notification preferences",
|
"setting_notifications_subtitle": "Ajusta tus preferencias de notificación",
|
||||||
"setting_notifications_title": "Notifications",
|
"setting_notifications_title": "Notificaciones",
|
||||||
"setting_notifications_total_progress_subtitle": "Overall upload progress (done/total assets)",
|
"setting_notifications_total_progress_subtitle": "Progreso general de subida (archivos completados/total)",
|
||||||
"setting_notifications_total_progress_title": "Show background backup total progress",
|
"setting_notifications_total_progress_title": "Mostrar progreso total de copia de seguridad en segundo plano",
|
||||||
"setting_pages_app_bar_settings": "Settings",
|
"setting_pages_app_bar_settings": "Ajustes",
|
||||||
"settings_require_restart": "Please restart Immich to apply this setting",
|
"settings_require_restart": "Por favor, reinicia Immich para aplicar este ajuste",
|
||||||
"share_add": "Añadir",
|
"share_add": "Agregar",
|
||||||
"share_add_photos": "Añadir fotos",
|
"share_add_photos": "Agregar fotos",
|
||||||
"share_add_title": "Añadir un título",
|
"share_add_title": "Agregar un título",
|
||||||
"share_create_album": "Crear álbum",
|
"share_create_album": "Crear álbum",
|
||||||
"share_dialog_preparing": "Preparing...",
|
"share_dialog_preparing": "Preparando...",
|
||||||
"share_invite": "Invitar al álbum",
|
"share_invite": "Invitar al álbum",
|
||||||
"sharing_page_album": "Álbumes compartidos",
|
"sharing_page_album": "Álbumes compartidos",
|
||||||
"sharing_page_description": "Crea álbumes compartidos para compartir fotos y vídeos con las personas de tu red.",
|
"sharing_page_description": "Crea álbumes compartidos para compartir fotos y vídeos con las personas de tu red.",
|
||||||
"sharing_page_empty_list": "LISTA VACIA",
|
"sharing_page_empty_list": "LISTA VACIA",
|
||||||
"sharing_silver_appbar_create_shared_album": "Crear un álbum compartido",
|
"sharing_silver_appbar_create_shared_album": "Crear un álbum compartido",
|
||||||
"sharing_silver_appbar_share_partner": "Compartir con el compañero",
|
"sharing_silver_appbar_share_partner": "Compartir con el compañero",
|
||||||
"tab_controller_nav_library": "Library",
|
"tab_controller_nav_library": "Biblioteca",
|
||||||
"tab_controller_nav_photos": "Fotos",
|
"tab_controller_nav_photos": "Fotos",
|
||||||
"tab_controller_nav_search": "Buscar",
|
"tab_controller_nav_search": "Buscar",
|
||||||
"tab_controller_nav_sharing": "Compartiendo",
|
"tab_controller_nav_sharing": "Compartiendo",
|
||||||
"theme_setting_asset_list_storage_indicator_title": "Show storage indicator on asset tiles",
|
"theme_setting_asset_list_storage_indicator_title": "Mostrar indicador de almacenamiento en las miniaturas de los archivos",
|
||||||
"theme_setting_asset_list_tiles_per_row_title": "Number of assets per row ({})",
|
"theme_setting_asset_list_tiles_per_row_title": "Número de activos por fila ({})",
|
||||||
"theme_setting_dark_mode_switch": "Dark mode",
|
"theme_setting_dark_mode_switch": "Modo oscuro",
|
||||||
"theme_setting_image_viewer_quality_subtitle": "Adjust the quality of the detail image viewer",
|
"theme_setting_image_viewer_quality_subtitle": "Ajustar la calidad del visor de detalles de imágenes",
|
||||||
"theme_setting_image_viewer_quality_title": "Image viewer quality",
|
"theme_setting_image_viewer_quality_title": "Calidad del visor de imágenes",
|
||||||
"theme_setting_system_theme_switch": "Automatic (Follow system setting)",
|
"theme_setting_system_theme_switch": "Automático (seguir ajuste del sistema)",
|
||||||
"theme_setting_theme_subtitle": "Choose the app's theme setting",
|
"theme_setting_theme_subtitle": "Elige la configuración del tema de la aplicación",
|
||||||
"theme_setting_theme_title": "Theme",
|
"theme_setting_theme_title": "Tema",
|
||||||
"theme_setting_three_stage_loading_subtitle": "Three-stage loading might increase the loading performance but causes significantly higher network load",
|
"theme_setting_three_stage_loading_subtitle": "La carga en tres etapas puede aumentar el rendimiento de carga pero provoca un consumo de red significativamente mayor",
|
||||||
"theme_setting_three_stage_loading_title": "Enable three-stage loading",
|
"theme_setting_three_stage_loading_title": "Activar carga en tres etapas",
|
||||||
"version_announcement_overlay_ack": "Reconocer",
|
"upload_dialog_cancel": "Cancel",
|
||||||
|
"upload_dialog_info": "Do you want to backup the selected Asset(s) to the server?",
|
||||||
|
"upload_dialog_ok": "Upload",
|
||||||
|
"upload_dialog_title": "Upload Asset",
|
||||||
|
"version_announcement_overlay_ack": "Aceptar",
|
||||||
"version_announcement_overlay_release_notes": "notas de versión",
|
"version_announcement_overlay_release_notes": "notas de versión",
|
||||||
"version_announcement_overlay_text_1": "Hola amigo, hay una nueva versión de",
|
"version_announcement_overlay_text_1": "Hola amigo, hay una nueva versión de",
|
||||||
"version_announcement_overlay_text_2": "tómese su tiempo para visitar la ",
|
"version_announcement_overlay_text_2": "por favor, tómate tu tiempo para visitar las ",
|
||||||
"version_announcement_overlay_text_3": "y asegurate de que tu configuración de docker-compose y .env está actualizada para evitar cualquier desconfiguración, especialmente si utiliza WatchTower o cualquier mecanismo que se encargue de actualizar su aplicación de servidor automáticamente.",
|
"version_announcement_overlay_text_3": " y asegúrate de que la configuración de docker-compose y .env estén actualizadas para evitar cualquier error de configuración, especialmente si utilizas WatchTower o cualquier mecanismo que actualice automáticamente la aplicación del servidor.",
|
||||||
"version_announcement_overlay_title": "Nueva versión del servidor disponible \uD83C\uDF89"
|
"version_announcement_overlay_title": "Nueva versión del servidor disponible \uD83C\uDF89"
|
||||||
}
|
}
|
||||||
@@ -1,69 +1,69 @@
|
|||||||
{
|
{
|
||||||
"add_to_album_bottom_sheet_added": "Added to {album}",
|
"add_to_album_bottom_sheet_added": "Agregado a {album}",
|
||||||
"add_to_album_bottom_sheet_already_exists": "Already in {album}",
|
"add_to_album_bottom_sheet_already_exists": "Ya se encuentra en {album}",
|
||||||
"advanced_settings_prefer_remote_subtitle": "Some devices are painfully slow to load thumbnails from assets on the device. Activate this setting to load remote images instead.",
|
"advanced_settings_prefer_remote_subtitle": "Algunos dispositivos tardan mucho en cargar las miniaturas de recursos encontrados el dispositivo. Activa esta opción para cargar imágenes remotas en su lugar.",
|
||||||
"advanced_settings_prefer_remote_title": "Prefer remote images",
|
"advanced_settings_prefer_remote_title": "Preferir imágenes remotas",
|
||||||
"advanced_settings_tile_subtitle": "Advanced user's settings",
|
"advanced_settings_tile_subtitle": "Configuraciones avanzadas del usuario",
|
||||||
"advanced_settings_tile_title": "Advanced",
|
"advanced_settings_tile_title": "Avanzado",
|
||||||
"advanced_settings_troubleshooting_subtitle": "Enable additional features for troubleshooting",
|
"advanced_settings_troubleshooting_subtitle": "Habilitar funciones adicionales para solución de problemas",
|
||||||
"advanced_settings_troubleshooting_title": "Troubleshooting",
|
"advanced_settings_troubleshooting_title": "Solución de problemas",
|
||||||
"album_info_card_backup_album_excluded": "EXCLUIDOS",
|
"album_info_card_backup_album_excluded": "EXCLUIDOS",
|
||||||
"album_info_card_backup_album_included": "INCLUIDOS",
|
"album_info_card_backup_album_included": "INCLUIDOS",
|
||||||
"album_thumbnail_card_item": "1 elemento",
|
"album_thumbnail_card_item": "1 elemento",
|
||||||
"album_thumbnail_card_items": "{} elementos",
|
"album_thumbnail_card_items": "{} elementos",
|
||||||
"album_thumbnail_card_shared": " · Compartido",
|
"album_thumbnail_card_shared": " · Compartido",
|
||||||
"album_thumbnail_owned": "Owned",
|
"album_thumbnail_owned": "Propio",
|
||||||
"album_thumbnail_shared_by": "Shared by {}",
|
"album_thumbnail_shared_by": "Compartido por {}",
|
||||||
"album_viewer_appbar_share_delete": "Eliminar álbum",
|
"album_viewer_appbar_share_delete": "Eliminar álbum",
|
||||||
"album_viewer_appbar_share_err_delete": "No se ha podido eliminar el álbum",
|
"album_viewer_appbar_share_err_delete": "No se ha podido eliminar el álbum",
|
||||||
"album_viewer_appbar_share_err_leave": "No se ha podido abandonar el álbum",
|
"album_viewer_appbar_share_err_leave": "No se ha podido abandonar el álbum",
|
||||||
"album_viewer_appbar_share_err_remove": "Hay problemas para eliminar recursos del álbum",
|
"album_viewer_appbar_share_err_remove": "Hay problemas para eliminar los archivos del álbum",
|
||||||
"album_viewer_appbar_share_err_title": "Error al cambiar el título del álbum",
|
"album_viewer_appbar_share_err_title": "Error al cambiar el título del álbum",
|
||||||
"album_viewer_appbar_share_leave": "Abandonar álbum ",
|
"album_viewer_appbar_share_leave": "Abandonar álbum ",
|
||||||
"album_viewer_appbar_share_remove": "Eliminar del álbum",
|
"album_viewer_appbar_share_remove": "Eliminar del álbum",
|
||||||
"album_viewer_page_share_add_users": "Añadir usuarios",
|
"album_viewer_page_share_add_users": "Agregar usuarios",
|
||||||
"all_people_page_title": "People",
|
"all_people_page_title": "Personas",
|
||||||
"all_videos_page_title": "Videos",
|
"all_videos_page_title": "Videos",
|
||||||
"archive_page_no_archived_assets": "No archived assets found",
|
"archive_page_no_archived_assets": "No se encontraron recursos archivados",
|
||||||
"archive_page_title": "Archive ({})",
|
"archive_page_title": "Archivo ({})",
|
||||||
"asset_list_layout_settings_dynamic_layout_title": "Dynamic layout",
|
"asset_list_layout_settings_dynamic_layout_title": "Diseño dinámico",
|
||||||
"asset_list_layout_settings_group_automatically": "Automatic",
|
"asset_list_layout_settings_group_automatically": "Automatico",
|
||||||
"asset_list_layout_settings_group_by": "Group assets by",
|
"asset_list_layout_settings_group_by": "Agrupar recursos por",
|
||||||
"asset_list_layout_settings_group_by_month": "Month",
|
"asset_list_layout_settings_group_by_month": "Mes",
|
||||||
"asset_list_layout_settings_group_by_month_day": "Month + day",
|
"asset_list_layout_settings_group_by_month_day": "Mes + día",
|
||||||
"asset_list_settings_subtitle": "Photo grid layout settings",
|
"asset_list_settings_subtitle": "Configuraciones del diseño de la cuadrícula de fotos",
|
||||||
"asset_list_settings_title": "Photo Grid",
|
"asset_list_settings_title": "Cuadrícula de fotos",
|
||||||
"backup_album_selection_page_albums_device": "Álbumes en el dispositivo ({})",
|
"backup_album_selection_page_albums_device": "Álbumes en el dispositivo ({})",
|
||||||
"backup_album_selection_page_albums_tap": "Pulsar para incluir, pulsar dos veces para excluir",
|
"backup_album_selection_page_albums_tap": "Pulsar para incluir, pulsar dos veces para excluir",
|
||||||
"backup_album_selection_page_assets_scatter": "Los recursos pueden dispersarse entre varios álbumes. Por lo tanto, los álbumes pueden incluirse o excluirse durante el proceso de respaldo.",
|
"backup_album_selection_page_assets_scatter": "Los archivos pueden dispersarse en varios álbumes. De este modo, los álbumes pueden ser incluidos o excluidos durante el proceso de copia de seguridad.",
|
||||||
"backup_album_selection_page_select_albums": "Seleccionar álbumes",
|
"backup_album_selection_page_select_albums": "Seleccionar álbumes",
|
||||||
"backup_album_selection_page_selection_info": "Información de la selección",
|
"backup_album_selection_page_selection_info": "Información de la selección",
|
||||||
"backup_album_selection_page_total_assets": "Total de recursos únicos",
|
"backup_album_selection_page_total_assets": "Total de archivos únicos",
|
||||||
"backup_all": "Todos",
|
"backup_all": "Todos",
|
||||||
"backup_background_service_backup_failed_message": "Failed to backup assets. Retrying…",
|
"backup_background_service_backup_failed_message": "Error al copiar archivos. Reintentando...",
|
||||||
"backup_background_service_connection_failed_message": "Failed to connect to the server. Retrying…",
|
"backup_background_service_connection_failed_message": "Error al conectar con el servidor. Reintentando...",
|
||||||
"backup_background_service_current_upload_notification": "Cargando {}",
|
"backup_background_service_current_upload_notification": "Cargando {}",
|
||||||
"backup_background_service_default_notification": "Comprobando por nuevos recursos...",
|
"backup_background_service_default_notification": "Verificando si hay nuevos archivos",
|
||||||
"backup_background_service_error_title": "Error al respaldar",
|
"backup_background_service_error_title": "Error de copia de seguridad",
|
||||||
"backup_background_service_in_progress_notification": "Respaldando tus recursos...",
|
"backup_background_service_in_progress_notification": "Creando copia de seguridad de tus archivos...",
|
||||||
"backup_background_service_upload_failure_notification": "Error al cargar {}",
|
"backup_background_service_upload_failure_notification": "Error al cargar {}",
|
||||||
"backup_controller_page_albums": "Álbumes de respaldo",
|
"backup_controller_page_albums": "Álbumes de respaldo",
|
||||||
"backup_controller_page_background_app_refresh_disabled_content": "Enable background app refresh in Settings > General > Background App Refresh in order to use background backup.",
|
"backup_controller_page_background_app_refresh_disabled_content": "Activa la actualización en segundo plano de la aplicación en Configuración > General > Actualización en segundo plano para usar la copia de seguridad en segundo plano.",
|
||||||
"backup_controller_page_background_app_refresh_disabled_title": "Background app refresh disabled",
|
"backup_controller_page_background_app_refresh_disabled_title": "Actualización en segundo plano desactivada",
|
||||||
"backup_controller_page_background_app_refresh_enable_button_text": "Go to settings",
|
"backup_controller_page_background_app_refresh_enable_button_text": "Ir a configuración",
|
||||||
"backup_controller_page_background_battery_info_link": "Show me how",
|
"backup_controller_page_background_battery_info_link": "Muestrame cómo",
|
||||||
"backup_controller_page_background_battery_info_message": "For the best background backup experience, please disable any battery optimizations restricting background activity for Immich.\n\nSince this is device-specific, please lookup the required information for your device manufacturer.",
|
"backup_controller_page_background_battery_info_message": "Para obtener la mejor experiencia de copia de seguridad en segundo plano, desactiva cualquier optimización de batería que restrinja la actividad en segundo plano para Immich.\n\nDado que esto es específico en cada dispositivo, busca la información necesaria de el fabricante de tu dispositivo.",
|
||||||
"backup_controller_page_background_battery_info_ok": "OK",
|
"backup_controller_page_background_battery_info_ok": "Ok",
|
||||||
"backup_controller_page_background_battery_info_title": "Battery optimizations",
|
"backup_controller_page_background_battery_info_title": "Optimizaciones de batería",
|
||||||
"backup_controller_page_background_charging": "Only while charging",
|
"backup_controller_page_background_charging": "Solo mientras se carga",
|
||||||
"backup_controller_page_background_configure_error": "Failed to configure the background service",
|
"backup_controller_page_background_configure_error": "Error al configurar el servicio en segundo plano",
|
||||||
"backup_controller_page_background_delay": "Delay new assets backup: {}",
|
"backup_controller_page_background_delay": "Retraso en la copia de seguridad de nuevos activos: {}",
|
||||||
"backup_controller_page_background_description": "Turn on the background service to automatically backup any new assets without needing to open the app",
|
"backup_controller_page_background_description": "Activa el servicio en segundo plano para copiar automáticamente cualquier nuevos archivos sin necesidad de abrir la aplicación.",
|
||||||
"backup_controller_page_background_is_off": "Automatic background backup is off",
|
"backup_controller_page_background_is_off": "La copia de seguridad en segundo plano automática está desactivada",
|
||||||
"backup_controller_page_background_is_on": "Automatic background backup is on",
|
"backup_controller_page_background_is_on": "La copia de seguridad en segundo plano automática está desactivada",
|
||||||
"backup_controller_page_background_turn_off": "Turn off background service",
|
"backup_controller_page_background_turn_off": "Desactivar el servicio en segundo plano",
|
||||||
"backup_controller_page_background_turn_on": "Turn on background service",
|
"backup_controller_page_background_turn_on": "Activar el servicio en segundo plano",
|
||||||
"backup_controller_page_background_wifi": "Only on WiFi",
|
"backup_controller_page_background_wifi": "Solo en WiFi",
|
||||||
"backup_controller_page_backup": "Respaldo",
|
"backup_controller_page_backup": "Respaldo",
|
||||||
"backup_controller_page_backup_selected": "Seleccionado:",
|
"backup_controller_page_backup_selected": "Seleccionado:",
|
||||||
"backup_controller_page_backup_sub": "Fotos y videos respaldados",
|
"backup_controller_page_backup_sub": "Fotos y videos respaldados",
|
||||||
@@ -72,12 +72,12 @@
|
|||||||
"backup_controller_page_desc_backup": "Activa la copia de seguridad en primer plano para cargar automáticamente nuevos recursos al servidor al abrir la aplicación.",
|
"backup_controller_page_desc_backup": "Activa la copia de seguridad en primer plano para cargar automáticamente nuevos recursos al servidor al abrir la aplicación.",
|
||||||
"backup_controller_page_excluded": "Excluido:",
|
"backup_controller_page_excluded": "Excluido:",
|
||||||
"backup_controller_page_failed": "Fallidos ({})",
|
"backup_controller_page_failed": "Fallidos ({})",
|
||||||
"backup_controller_page_filename": "Nombre: {} [{}]",
|
"backup_controller_page_filename": "Nombre del archivo: {} [{}]",
|
||||||
"backup_controller_page_id": "ID: {}",
|
"backup_controller_page_id": "ID: {}",
|
||||||
"backup_controller_page_info": "Información del respaldo",
|
"backup_controller_page_info": "Información del respaldo",
|
||||||
"backup_controller_page_none_selected": "Ninguno seleccionado",
|
"backup_controller_page_none_selected": "Ninguno seleccionado",
|
||||||
"backup_controller_page_remainder": "Restante",
|
"backup_controller_page_remainder": "Restante",
|
||||||
"backup_controller_page_remainder_sub": "Fotos y videos restantes de la selección a los que realizar un respaldo",
|
"backup_controller_page_remainder_sub": "Fotos y videos restantes para hacer una copia de seguridad de la selección",
|
||||||
"backup_controller_page_select": "Seleccionar",
|
"backup_controller_page_select": "Seleccionar",
|
||||||
"backup_controller_page_server_storage": "Almacenamiento del servidor",
|
"backup_controller_page_server_storage": "Almacenamiento del servidor",
|
||||||
"backup_controller_page_start_backup": "Iniciar respaldo",
|
"backup_controller_page_start_backup": "Iniciar respaldo",
|
||||||
@@ -89,48 +89,53 @@
|
|||||||
"backup_controller_page_total_sub": "Todas las fotos y videos únicos de los álbumes seleccionados",
|
"backup_controller_page_total_sub": "Todas las fotos y videos únicos de los álbumes seleccionados",
|
||||||
"backup_controller_page_turn_off": "Desactivar la copia de seguridad en primer plano",
|
"backup_controller_page_turn_off": "Desactivar la copia de seguridad en primer plano",
|
||||||
"backup_controller_page_turn_on": "Activar la copia de seguridad en primer plano",
|
"backup_controller_page_turn_on": "Activar la copia de seguridad en primer plano",
|
||||||
"backup_controller_page_uploading_file_info": "Info de carga de archivo",
|
"backup_controller_page_uploading_file_info": "Cargando información del archivo",
|
||||||
"backup_err_only_album": "No se puede eliminar el único álbum",
|
"backup_err_only_album": "No se puede eliminar el único álbum",
|
||||||
"backup_info_card_assets": "recursos",
|
"backup_info_card_assets": "archivos",
|
||||||
"cache_settings_album_thumbnails": "Library page thumbnails ({} assets)",
|
"backup_manual_cancelled": "Cancelled",
|
||||||
"cache_settings_clear_cache_button": "Clear cache",
|
"backup_manual_failed": "Failed",
|
||||||
"cache_settings_clear_cache_button_title": "Clears the app's cache. This will significantly impact the app's performance until the cache has rebuilt.",
|
"backup_manual_in_progress": "Upload already in progress. Try after sometime",
|
||||||
"cache_settings_image_cache_size": "Image cache size ({} assets)",
|
"backup_manual_success": "Success",
|
||||||
"cache_settings_statistics_album": "Library thumbnails",
|
"backup_manual_title": "Upload status",
|
||||||
"cache_settings_statistics_assets": "{} assets ({})",
|
"cache_settings_album_thumbnails": "Miniaturas de la página de la biblioteca ({} archivos)",
|
||||||
"cache_settings_statistics_full": "Full images",
|
"cache_settings_clear_cache_button": "Borrar caché",
|
||||||
"cache_settings_statistics_shared": "Shared album thumbnails",
|
"cache_settings_clear_cache_button_title": "Borra la caché de la aplicación. Esto afectará significativamente el rendimiento de la aplicación hasta que se reconstruya la caché.",
|
||||||
"cache_settings_statistics_thumbnail": "Thumbnails",
|
"cache_settings_image_cache_size": "Tamaño de la caché de imágenes ({} archivos)",
|
||||||
"cache_settings_statistics_title": "Cache usage",
|
"cache_settings_statistics_album": "Miniaturas de la biblioteca",
|
||||||
"cache_settings_subtitle": "Control the caching behaviour of the Immich mobile application",
|
"cache_settings_statistics_assets": "{} archivos ({})",
|
||||||
"cache_settings_thumbnail_size": "Thumbnail cache size ({} assets)",
|
"cache_settings_statistics_full": "Imágenes completas",
|
||||||
"cache_settings_title": "Caching Settings",
|
"cache_settings_statistics_shared": "Miniaturas de álbumes compartidos",
|
||||||
"change_password_form_confirm_password": "Confirm Password",
|
"cache_settings_statistics_thumbnail": "Miniaturas",
|
||||||
"change_password_form_description": "Hi {firstName} {lastName},\n\nThis is either the first time you are signing into the system or a request has been made to change your password. Please enter the new password below.",
|
"cache_settings_statistics_title": "Uso de caché",
|
||||||
"change_password_form_new_password": "New Password",
|
"cache_settings_subtitle": "Controla el comportamiento del almacenamiento en caché de la aplicación móvil Immich",
|
||||||
"change_password_form_password_mismatch": "Passwords do not match",
|
"cache_settings_thumbnail_size": "Tamaño de la caché de miniaturas ({} archivos)",
|
||||||
"change_password_form_reenter_new_password": "Re-enter New Password",
|
"cache_settings_title": "Configuración de la caché",
|
||||||
"common_add_to_album": "Add to album",
|
"change_password_form_confirm_password": "Confirmar Contraseña",
|
||||||
"common_change_password": "Change Password",
|
"change_password_form_description": "Hola {firstName} {lastName},\n\nEsta es la primera vez que inicias sesión en el sistema o se ha solicitado cambiar tu contraseña. Por favor, introduce la nueva contraseña a continuación.",
|
||||||
"common_create_new_album": "Create new album",
|
"change_password_form_new_password": "Nueva Contraseña",
|
||||||
"common_server_error": "Please check your network connection, make sure the server is reachable and app/server versions are compatible.",
|
"change_password_form_password_mismatch": "Las contraseñas no coinciden",
|
||||||
"common_shared": "Shared",
|
"change_password_form_reenter_new_password": "Vuelve a ingresar la nueva contraseña",
|
||||||
"control_bottom_app_bar_add_to_album": "Add to album",
|
"common_add_to_album": "Agregar al álbum",
|
||||||
"control_bottom_app_bar_album_info": "{} items",
|
"common_change_password": "Cambiar Contraseña",
|
||||||
"control_bottom_app_bar_album_info_shared": "{} items · Shared",
|
"common_create_new_album": "Crear nuevo álbum",
|
||||||
"control_bottom_app_bar_archive": "Archive",
|
"common_server_error": "Por favor, verifica tu conexión de red, asegúrate de que el servidor esté accesible y las versiones de la aplicación y del servidor sean compatibles.",
|
||||||
"control_bottom_app_bar_create_new_album": "Create new album",
|
"common_shared": "Compartido",
|
||||||
|
"control_bottom_app_bar_add_to_album": "Agregar al álbum",
|
||||||
|
"control_bottom_app_bar_album_info": "{} elementos",
|
||||||
|
"control_bottom_app_bar_album_info_shared": "{} elementos · Compartidos",
|
||||||
|
"control_bottom_app_bar_archive": "Archivar",
|
||||||
|
"control_bottom_app_bar_create_new_album": "Crear nuevo álbum",
|
||||||
"control_bottom_app_bar_delete": "Eliminar",
|
"control_bottom_app_bar_delete": "Eliminar",
|
||||||
"control_bottom_app_bar_favorite": "Favorite",
|
"control_bottom_app_bar_favorite": "Favorito",
|
||||||
"control_bottom_app_bar_share": "Compartir",
|
"control_bottom_app_bar_share": "Compartir",
|
||||||
"control_bottom_app_bar_unarchive": "Unarchive",
|
"control_bottom_app_bar_unarchive": "Desarchivar",
|
||||||
"create_album_page_untitled": "Sin título",
|
"create_album_page_untitled": "Sin título",
|
||||||
"create_shared_album_page_create": "Crear",
|
"create_shared_album_page_create": "Crear",
|
||||||
"create_shared_album_page_share": "Compartir",
|
"create_shared_album_page_share": "Compartir",
|
||||||
"create_shared_album_page_share_add_assets": "AÑADIR RECURSOS",
|
"create_shared_album_page_share_add_assets": "AGREGAR ARCHIVOS",
|
||||||
"create_shared_album_page_share_select_photos": "Seleccionar fotos",
|
"create_shared_album_page_share_select_photos": "Seleccionar fotos",
|
||||||
"curated_location_page_title": "Places",
|
"curated_location_page_title": "Lugares",
|
||||||
"curated_object_page_title": "Things",
|
"curated_object_page_title": "Objetos",
|
||||||
"daily_title_text_date": "E, dd MMM",
|
"daily_title_text_date": "E, dd MMM",
|
||||||
"daily_title_text_date_year": "E, dd de MMM de yyyy",
|
"daily_title_text_date_year": "E, dd de MMM de yyyy",
|
||||||
"date_format": "E d, LLL y • h:mm a",
|
"date_format": "E d, LLL y • h:mm a",
|
||||||
@@ -138,130 +143,132 @@
|
|||||||
"delete_dialog_cancel": "Cancelar",
|
"delete_dialog_cancel": "Cancelar",
|
||||||
"delete_dialog_ok": "Eliminar",
|
"delete_dialog_ok": "Eliminar",
|
||||||
"delete_dialog_title": "Eliminar permanentemente",
|
"delete_dialog_title": "Eliminar permanentemente",
|
||||||
"description_input_hint_text": "Add description...",
|
"description_input_hint_text": "Agregar descripción...",
|
||||||
"description_input_submit_error": "Error updating description, check the log for more details",
|
"description_input_submit_error": "Error al actualizar la descripción, verifica el registro para obtener más detalles",
|
||||||
"exif_bottom_sheet_description": "Añadir descripción...",
|
"exif_bottom_sheet_description": "Agregar Descripción...",
|
||||||
"exif_bottom_sheet_details": "DETALLES",
|
"exif_bottom_sheet_details": "DETALLES",
|
||||||
"exif_bottom_sheet_location": "UBICACIÓN",
|
"exif_bottom_sheet_location": "UBICACIÓN",
|
||||||
"experimental_settings_new_asset_list_subtitle": "Work in progress",
|
"experimental_settings_new_asset_list_subtitle": "Trabajo en progreso",
|
||||||
"experimental_settings_new_asset_list_title": "Enable experimental photo grid",
|
"experimental_settings_new_asset_list_title": "Habilitar cuadrícula fotográfica experimental",
|
||||||
"experimental_settings_subtitle": "Use at your own risk!",
|
"experimental_settings_subtitle": "Úsalo bajo tu responsabilidad",
|
||||||
"experimental_settings_title": "Experimental",
|
"experimental_settings_title": "Experimental",
|
||||||
"favorites_page_no_favorites": "No favorite assets found",
|
"favorites_page_no_favorites": "No se encontraron recursos marcados como favoritos",
|
||||||
"favorites_page_title": "Favorites",
|
"favorites_page_title": "Favoritos",
|
||||||
"home_page_add_to_album_conflicts": "Added {added} assets to album {album}. {failed} assets are already in the album.",
|
"home_page_add_to_album_conflicts": "{added} elementos agregados al álbum {album}.\n{failed} elementos ya existen en el álbum.",
|
||||||
"home_page_add_to_album_err_local": "Can not add local assets to albums yet, skipping",
|
"home_page_add_to_album_err_local": "Aún no se pueden agregar recursos locales a álbumes, omitiendo",
|
||||||
"home_page_add_to_album_success": "Added {added} assets to album {album}.",
|
"home_page_add_to_album_success": "{added} elementos agregados al álbum {album}. ",
|
||||||
"home_page_archive_err_local": "Can not archive local assets yet, skipping",
|
"home_page_archive_err_local": "Los recursos locales no pueden ser archivados, omitiendo",
|
||||||
"home_page_building_timeline": "Building the timeline",
|
"home_page_building_timeline": "Construyendo la línea de tiempo",
|
||||||
"home_page_favorite_err_local": "Can not favorite local assets yet, skipping",
|
"home_page_favorite_err_local": "Aún no se pueden archivar recursos locales, omitiendo",
|
||||||
"home_page_first_time_notice": "If this is your first time using the app, please make sure to choose a backup album(s) so that the timeline can populate photos and videos in the album(s).",
|
"home_page_first_time_notice": "Si esta es la primera vez que usas la app, por favor, asegúrate de elegir un álbum de respaldo para que la línea de tiempo pueda cargar fotos y videos en los álbumes.",
|
||||||
"image_viewer_page_state_provider_download_error": "Download Error",
|
"home_page_upload_err_limit": "Can only upload a maximum of 30 assets at a time, skipping",
|
||||||
"image_viewer_page_state_provider_download_success": "Download Success",
|
"image_viewer_page_state_provider_download_error": "Error de descarga",
|
||||||
|
"image_viewer_page_state_provider_download_success": "Descarga exitosa",
|
||||||
"library_page_albums": "Álbumes",
|
"library_page_albums": "Álbumes",
|
||||||
"library_page_archive": "Archive",
|
"library_page_archive": "Archivo",
|
||||||
"library_page_device_albums": "Albums on Device",
|
"library_page_device_albums": "Álbumes en el dispositivo",
|
||||||
"library_page_favorites": "Favorites",
|
"library_page_favorites": "Favoritos",
|
||||||
"library_page_new_album": "Nuevo álbum",
|
"library_page_new_album": "Nuevo álbum",
|
||||||
"library_page_sharing": "Sharing",
|
"library_page_sharing": "Compartiendo",
|
||||||
"library_page_sort_created": "Most recently created",
|
"library_page_sort_created": "Creado más recientemente",
|
||||||
"library_page_sort_title": "Album title",
|
"library_page_sort_title": "Título del álbum",
|
||||||
"login_form_api_exception": "API exception. Please check the server URL and try again.",
|
"login_disabled": "Login has been disabled",
|
||||||
|
"login_form_api_exception": "Excepción producida por API. Por favor, verifica el URL del servidor e inténtalo de nuevo.",
|
||||||
"login_form_button_text": "Iniciar sesión",
|
"login_form_button_text": "Iniciar sesión",
|
||||||
"login_form_email_hint": "tucorreo@correo.com",
|
"login_form_email_hint": "tucorreo@correo.com",
|
||||||
"login_form_endpoint_hint": "http://la-ip-de-tu-servidor:puerto/api",
|
"login_form_endpoint_hint": "http://la-ip-de-tu-servidor:puerto/api",
|
||||||
"login_form_endpoint_url": "URL del servidor",
|
"login_form_endpoint_url": "URL del servidor",
|
||||||
"login_form_err_http": "Por favor, especifique http:// o https://",
|
"login_form_err_http": "Por favor, especifique http:// o https://",
|
||||||
"login_form_err_invalid_email": "Correo electrónico inválido",
|
"login_form_err_invalid_email": "Correo electrónico inválido",
|
||||||
"login_form_err_invalid_url": "Invalid URL",
|
"login_form_err_invalid_url": "URL no válida",
|
||||||
"login_form_err_leading_whitespace": "Espacio en blanco inicial",
|
"login_form_err_leading_whitespace": "Espacio en blanco inicial",
|
||||||
"login_form_err_trailing_whitespace": "Espacio en blanco al final",
|
"login_form_err_trailing_whitespace": "Espacio en blanco al final",
|
||||||
"login_form_failed_get_oauth_server_config": "Error logging using OAuth, check server URL",
|
"login_form_failed_get_oauth_server_config": "Error al iniciar sesión con OAuth, verifica la URL del servidor",
|
||||||
"login_form_failed_get_oauth_server_disable": "OAuth feature is not available on this server",
|
"login_form_failed_get_oauth_server_disable": "La función de OAuth no está disponible en este servidor",
|
||||||
"login_form_failed_login": "Error al iniciar sesión, comprueba la URL del servidor, el correo electrónico y la contraseña",
|
"login_form_failed_login": "Error al iniciar sesión, comprueba la URL del servidor, el correo electrónico y la contraseña",
|
||||||
"login_form_label_email": "Correo electrónico",
|
"login_form_label_email": "Correo electrónico",
|
||||||
"login_form_label_password": "Contraseña",
|
"login_form_label_password": "Contraseña",
|
||||||
"login_form_next_button": "Next",
|
"login_form_next_button": "Siguiente",
|
||||||
"login_form_password_hint": "contraseña",
|
"login_form_password_hint": "contraseña",
|
||||||
"login_form_save_login": "Permanecer conectado",
|
"login_form_save_login": "Permanecer conectado",
|
||||||
"login_form_server_empty": "Enter a server URL.",
|
"login_form_server_empty": "Agrega la URL del servidor.",
|
||||||
"login_form_server_error": "Could not connect to server.",
|
"login_form_server_error": "No se pudo conectar al servidor.",
|
||||||
"monthly_title_text_date_format": "MMMM y",
|
"monthly_title_text_date_format": "MMMM y",
|
||||||
"motion_photos_page_title": "Motion Photos",
|
"motion_photos_page_title": "Foto en Movimiento",
|
||||||
"notification_permission_dialog_cancel": "Cancel",
|
"notification_permission_dialog_cancel": "Cancelar",
|
||||||
"notification_permission_dialog_content": "To enable notifications, go to Settings and select allow.",
|
"notification_permission_dialog_content": "Para activar las notificaciones, ve a Configuración y selecciona permitir.",
|
||||||
"notification_permission_dialog_settings": "Settings",
|
"notification_permission_dialog_settings": "Ajustes",
|
||||||
"notification_permission_list_tile_content": "Grant permission to enable notifications.",
|
"notification_permission_list_tile_content": "Concede permiso para habilitar las notificaciones.",
|
||||||
"notification_permission_list_tile_enable_button": "Enable Notifications",
|
"notification_permission_list_tile_enable_button": "Permitir notificaciones",
|
||||||
"notification_permission_list_tile_title": "Notification Permission",
|
"notification_permission_list_tile_title": "Permisos de Notificacion",
|
||||||
"partner_page_add_partner": "Add partner",
|
"partner_page_add_partner": "Agregar compañero",
|
||||||
"partner_page_empty_message": "Your photos are not yet shared with any partner.",
|
"partner_page_empty_message": "Tus fotos aún no se han compartido con ningún compañero.",
|
||||||
"partner_page_no_more_users": "No more users to add",
|
"partner_page_no_more_users": "No hay más usuarios para agregar",
|
||||||
"partner_page_partner_add_failed": "Failed to add partner",
|
"partner_page_partner_add_failed": "Compañero no pudo ser agregado ",
|
||||||
"partner_page_select_partner": "Select partner",
|
"partner_page_select_partner": "Seleccionar compañero",
|
||||||
"partner_page_shared_to_title": "Shared to",
|
"partner_page_shared_to_title": "Compartido con",
|
||||||
"partner_page_stop_sharing_content": "{} will no longer be able to access your photos.",
|
"partner_page_stop_sharing_content": "{} ya no podrá acceder a tus fotos",
|
||||||
"partner_page_stop_sharing_title": "Stop sharing your photos?",
|
"partner_page_stop_sharing_title": "¿Dejar de compartir tus fotos?",
|
||||||
"partner_page_title": "Partner",
|
"partner_page_title": "Compañero",
|
||||||
"permission_onboarding_continue_anyway": "Continue anyway",
|
"permission_onboarding_continue_anyway": "Continuar de todos modos",
|
||||||
"permission_onboarding_get_started": "Get started",
|
"permission_onboarding_get_started": "Empezar",
|
||||||
"permission_onboarding_go_to_settings": "Go to settings",
|
"permission_onboarding_go_to_settings": "Ir a configuración",
|
||||||
"permission_onboarding_grant_permission": "Grant permission",
|
"permission_onboarding_grant_permission": "Conceder permiso",
|
||||||
"permission_onboarding_log_out": "Log out",
|
"permission_onboarding_log_out": "Cerrar sesión",
|
||||||
"permission_onboarding_permission_denied": "Permission denied. To use Immich, grant photo and video permissions in Settings.",
|
"permission_onboarding_permission_denied": "Permiso denegado. Para usar Immich, concede permisos de fotos y videos en Configuración.",
|
||||||
"permission_onboarding_permission_granted": "Permission granted! You are all set.",
|
"permission_onboarding_permission_granted": "¡Permiso concedido! Todo listo.",
|
||||||
"permission_onboarding_permission_limited": "Permission limited. To let Immich backup and manage your entire gallery collection, grant photo and video permissions in Settings.",
|
"permission_onboarding_permission_limited": "Permiso limitado. Para permitir que Immich haga copia de seguridad y gestione toda tu colección de galería, concede permisos de fotos y videos en Configuración.",
|
||||||
"permission_onboarding_request": "Immich requires permission to view your photos and videos.",
|
"permission_onboarding_request": "Immich requiere permiso para ver tus fotos y videos.",
|
||||||
"profile_drawer_app_logs": "Logs",
|
"profile_drawer_app_logs": "Registros",
|
||||||
"profile_drawer_client_server_up_to_date": "El cliente y el servidor están actualizados",
|
"profile_drawer_client_server_up_to_date": "El cliente y el servidor están actualizados",
|
||||||
"profile_drawer_settings": "Configuración",
|
"profile_drawer_settings": "Configuración",
|
||||||
"profile_drawer_sign_out": "Cerrar sesión",
|
"profile_drawer_sign_out": "Cerrar sesión",
|
||||||
"recently_added_page_title": "Recently Added",
|
"recently_added_page_title": "Recién Agregadas",
|
||||||
"search_bar_hint": "Busca tus fotos",
|
"search_bar_hint": "Busca tus fotos",
|
||||||
"search_page_categories": "Categories",
|
"search_page_categories": "Categorías",
|
||||||
"search_page_favorites": "Favorites",
|
"search_page_favorites": "Favoritos",
|
||||||
"search_page_motion_photos": "Motion Photos",
|
"search_page_motion_photos": "Foto en Movimiento",
|
||||||
"search_page_no_objects": "No hay información de objetos disponible",
|
"search_page_no_objects": "No hay información de objetos disponibles",
|
||||||
"search_page_no_places": "No hay información de lugares disponible",
|
"search_page_no_places": "No hay información de lugares disponible",
|
||||||
"search_page_people": "People",
|
"search_page_people": "Personas",
|
||||||
"search_page_places": "Lugares",
|
"search_page_places": "Lugares",
|
||||||
"search_page_recently_added": "Recently added",
|
"search_page_recently_added": "Recién agregadas",
|
||||||
"search_page_screenshots": "Screenshots",
|
"search_page_screenshots": "Capturas de pantalla",
|
||||||
"search_page_selfies": "Selfies",
|
"search_page_selfies": "Selfies",
|
||||||
"search_page_things": "Cosas",
|
"search_page_things": "Cosas",
|
||||||
"search_page_videos": "Videos",
|
"search_page_videos": "Videos",
|
||||||
"search_page_view_all_button": "View all",
|
"search_page_view_all_button": "Ver todo",
|
||||||
"search_page_your_activity": "Your activity",
|
"search_page_your_activity": "Tu actividad",
|
||||||
"search_result_page_new_search_hint": "Nueva búsqueda",
|
"search_result_page_new_search_hint": "Nueva búsqueda",
|
||||||
"search_suggestion_list_smart_search_hint_1": "Smart search is enabled by default, to search for metadata use the syntax ",
|
"search_suggestion_list_smart_search_hint_1": "La búsqueda inteligente está habilitada por defecto, para buscar metadatos utiliza esta sintaxis ",
|
||||||
"search_suggestion_list_smart_search_hint_2": "m:your-search-term",
|
"search_suggestion_list_smart_search_hint_2": "m:tu-término-de-búsqueda",
|
||||||
"select_additional_user_for_sharing_page_suggestions": "Sugerencias",
|
"select_additional_user_for_sharing_page_suggestions": "Sugerencias",
|
||||||
"select_user_for_sharing_page_err_album": "Error al crear álbum",
|
"select_user_for_sharing_page_err_album": "Error al crear álbum",
|
||||||
"select_user_for_sharing_page_share_suggestions": "Sugerencias",
|
"select_user_for_sharing_page_share_suggestions": "Sugerencias",
|
||||||
"server_info_box_app_version": "App Version",
|
"server_info_box_app_version": "Versión de la Aplicación",
|
||||||
"server_info_box_server_version": "Server Version",
|
"server_info_box_server_version": "Versión del Servidor",
|
||||||
"setting_image_viewer_help": "The detail viewer loads the small thumbnail first, then loads the medium-size preview (if enabled), finally loads the original (if enabled).",
|
"setting_image_viewer_help": "El visor de detalles carga primero la miniatura pequeña, luego carga la vista previa de tamaño mediano (si está habilitada), finalmente carga la original (si está habilitada).",
|
||||||
"setting_image_viewer_original_subtitle": "Enable to load the original full-resolution image (large!). Disable to reduce data usage (both network and on device cache).",
|
"setting_image_viewer_original_subtitle": "Activar para cargar la imagen en resolución original (¡muy grande!). Deshabilitar para reducir el consumo de datos (de red y caché).",
|
||||||
"setting_image_viewer_original_title": "Load original image",
|
"setting_image_viewer_original_title": "Cargar imagen original",
|
||||||
"setting_image_viewer_preview_subtitle": "Enable to load a medium-resolution image. Disable to either directly load the original or only use the thumbnail.",
|
"setting_image_viewer_preview_subtitle": "Activar para cargar una imagen de resolución media. Deshabilitar para cargar directamente la imagen original o usar una miniatura.",
|
||||||
"setting_image_viewer_preview_title": "Load preview image",
|
"setting_image_viewer_preview_title": "Cargar imagen de previsualización",
|
||||||
"setting_notifications_notify_failures_grace_period": "Notify background backup failures: {}",
|
"setting_notifications_notify_failures_grace_period": "Notificar fallos de copia de seguridad en segundo plano: {}",
|
||||||
"setting_notifications_notify_hours": "{} hours",
|
"setting_notifications_notify_hours": "{} horas",
|
||||||
"setting_notifications_notify_immediately": "immediately",
|
"setting_notifications_notify_immediately": "inmediatamente",
|
||||||
"setting_notifications_notify_minutes": "{} minutes",
|
"setting_notifications_notify_minutes": "{} minutos",
|
||||||
"setting_notifications_notify_never": "never",
|
"setting_notifications_notify_never": "nunca",
|
||||||
"setting_notifications_notify_seconds": "{} seconds",
|
"setting_notifications_notify_seconds": "{} segundos",
|
||||||
"setting_notifications_single_progress_subtitle": "Detailed upload progress information per asset",
|
"setting_notifications_single_progress_subtitle": "Información detallada del progreso de subida de cada archivo",
|
||||||
"setting_notifications_single_progress_title": "Show background backup detail progress",
|
"setting_notifications_single_progress_title": "Mostrar progreso detallado de copia de seguridad en segundo plano",
|
||||||
"setting_notifications_subtitle": "Adjust your notification preferences",
|
"setting_notifications_subtitle": "Ajusta tus preferencias de notificación",
|
||||||
"setting_notifications_title": "Notifications",
|
"setting_notifications_title": "Notificaciones",
|
||||||
"setting_notifications_total_progress_subtitle": "Overall upload progress (done/total assets)",
|
"setting_notifications_total_progress_subtitle": "Progreso general de subida (archivos completados/total)",
|
||||||
"setting_notifications_total_progress_title": "Show background backup total progress",
|
"setting_notifications_total_progress_title": "Mostrar progreso total de copia de seguridad en segundo plano",
|
||||||
"setting_pages_app_bar_settings": "Settings",
|
"setting_pages_app_bar_settings": "Ajustes",
|
||||||
"settings_require_restart": "Please restart Immich to apply this setting",
|
"settings_require_restart": "Por favor, reinicia Immich para aplicar este ajuste",
|
||||||
"share_add": "Añadir",
|
"share_add": "Agregar",
|
||||||
"share_add_photos": "Añadir fotos",
|
"share_add_photos": "Agregar fotos",
|
||||||
"share_add_title": "Añadir un título",
|
"share_add_title": "Agregar un título",
|
||||||
"share_create_album": "Crear álbum",
|
"share_create_album": "Crear álbum",
|
||||||
"share_dialog_preparing": "Preparando...",
|
"share_dialog_preparing": "Preparando...",
|
||||||
"share_invite": "Invitar al álbum",
|
"share_invite": "Invitar al álbum",
|
||||||
@@ -274,20 +281,24 @@
|
|||||||
"tab_controller_nav_photos": "Fotos",
|
"tab_controller_nav_photos": "Fotos",
|
||||||
"tab_controller_nav_search": "Buscar",
|
"tab_controller_nav_search": "Buscar",
|
||||||
"tab_controller_nav_sharing": "Compartiendo",
|
"tab_controller_nav_sharing": "Compartiendo",
|
||||||
"theme_setting_asset_list_storage_indicator_title": "Show storage indicator on asset tiles",
|
"theme_setting_asset_list_storage_indicator_title": "Mostrar indicador de almacenamiento en las miniaturas de los archivos",
|
||||||
"theme_setting_asset_list_tiles_per_row_title": "Number of assets per row ({})",
|
"theme_setting_asset_list_tiles_per_row_title": "Número de activos por fila ({})",
|
||||||
"theme_setting_dark_mode_switch": "Dark mode",
|
"theme_setting_dark_mode_switch": "Modo oscuro",
|
||||||
"theme_setting_image_viewer_quality_subtitle": "Adjust the quality of the detail image viewer",
|
"theme_setting_image_viewer_quality_subtitle": "Ajustar la calidad del visor de detalles de imágenes",
|
||||||
"theme_setting_image_viewer_quality_title": "Image viewer quality",
|
"theme_setting_image_viewer_quality_title": "Calidad del visor de imágenes",
|
||||||
"theme_setting_system_theme_switch": "Automatic (Follow system setting)",
|
"theme_setting_system_theme_switch": "Automático (seguir ajuste del sistema)",
|
||||||
"theme_setting_theme_subtitle": "Choose the app's theme setting",
|
"theme_setting_theme_subtitle": "Elige la configuración del tema de la aplicación",
|
||||||
"theme_setting_theme_title": "Theme",
|
"theme_setting_theme_title": "Tema",
|
||||||
"theme_setting_three_stage_loading_subtitle": "Three-stage loading might increase the loading performance but causes significantly higher network load",
|
"theme_setting_three_stage_loading_subtitle": "La carga en tres etapas puede aumentar el rendimiento de carga pero provoca un consumo de red significativamente mayor",
|
||||||
"theme_setting_three_stage_loading_title": "Enable three-stage loading",
|
"theme_setting_three_stage_loading_title": "Activar carga en tres etapas",
|
||||||
|
"upload_dialog_cancel": "Cancel",
|
||||||
|
"upload_dialog_info": "Do you want to backup the selected Asset(s) to the server?",
|
||||||
|
"upload_dialog_ok": "Upload",
|
||||||
|
"upload_dialog_title": "Upload Asset",
|
||||||
"version_announcement_overlay_ack": "Aceptar",
|
"version_announcement_overlay_ack": "Aceptar",
|
||||||
"version_announcement_overlay_release_notes": "notas de la versión",
|
"version_announcement_overlay_release_notes": "notas de la versión",
|
||||||
"version_announcement_overlay_text_1": "Hola, amigo, hay una nueva versión de",
|
"version_announcement_overlay_text_1": "Hola, amigo, hay una nueva versión de",
|
||||||
"version_announcement_overlay_text_2": "por favor, tómese su tiempo para visitar las",
|
"version_announcement_overlay_text_2": "por favor, tómate tu tiempo para visitar las ",
|
||||||
"version_announcement_overlay_text_3": "y asegúrate de que tu configuración de docker-compose y .env está actualizada para evitar cualquier error de configuración, especialmente si utilizas WatchTower o cualquier mecanismo que se encargue de actualizar tu aplicación de servidor automáticamente.",
|
"version_announcement_overlay_text_3": " y asegúrate de que la configuración de docker-compose y .env estén actualizadas para evitar cualquier error de configuración, especialmente si utilizas WatchTower o cualquier mecanismo que actualice automáticamente la aplicación del servidor.",
|
||||||
"version_announcement_overlay_title": "Nueva versión del servidor disponible \uD83C\uDF89"
|
"version_announcement_overlay_title": "Nueva versión del servidor disponible \uD83C\uDF89"
|
||||||
}
|
}
|
||||||
@@ -1,69 +1,69 @@
|
|||||||
{
|
{
|
||||||
"add_to_album_bottom_sheet_added": "Added to {album}",
|
"add_to_album_bottom_sheet_added": "Agregado a {album}",
|
||||||
"add_to_album_bottom_sheet_already_exists": "Already in {album}",
|
"add_to_album_bottom_sheet_already_exists": "Ya se encuentra en {album}",
|
||||||
"advanced_settings_prefer_remote_subtitle": "Some devices are painfully slow to load thumbnails from assets on the device. Activate this setting to load remote images instead.",
|
"advanced_settings_prefer_remote_subtitle": "Algunos dispositivos tardan mucho en cargar las miniaturas de recursos encontrados el dispositivo. Activa esta opción para cargar imágenes remotas en su lugar.",
|
||||||
"advanced_settings_prefer_remote_title": "Prefer remote images",
|
"advanced_settings_prefer_remote_title": "Preferir imágenes remotas",
|
||||||
"advanced_settings_tile_subtitle": "Advanced user's settings",
|
"advanced_settings_tile_subtitle": "Configuraciones avanzadas del usuario",
|
||||||
"advanced_settings_tile_title": "Advanced",
|
"advanced_settings_tile_title": "Avanzado",
|
||||||
"advanced_settings_troubleshooting_subtitle": "Enable additional features for troubleshooting",
|
"advanced_settings_troubleshooting_subtitle": "Habilitar funciones adicionales para solución de problemas",
|
||||||
"advanced_settings_troubleshooting_title": "Troubleshooting",
|
"advanced_settings_troubleshooting_title": "Solución de problemas",
|
||||||
"album_info_card_backup_album_excluded": "EXCLUIDOS",
|
"album_info_card_backup_album_excluded": "EXCLUIDOS",
|
||||||
"album_info_card_backup_album_included": "INCLUIDOS",
|
"album_info_card_backup_album_included": "INCLUIDOS",
|
||||||
"album_thumbnail_card_item": "1 elemento",
|
"album_thumbnail_card_item": "1 elemento",
|
||||||
"album_thumbnail_card_items": "{} elementos",
|
"album_thumbnail_card_items": "{} elementos",
|
||||||
"album_thumbnail_card_shared": " · Compartido",
|
"album_thumbnail_card_shared": " · Compartido",
|
||||||
"album_thumbnail_owned": "Owned",
|
"album_thumbnail_owned": "Propio",
|
||||||
"album_thumbnail_shared_by": "Shared by {}",
|
"album_thumbnail_shared_by": "Compartido por {}",
|
||||||
"album_viewer_appbar_share_delete": "Eliminar álbum",
|
"album_viewer_appbar_share_delete": "Eliminar álbum",
|
||||||
"album_viewer_appbar_share_err_delete": "No se ha podido eliminar el álbum",
|
"album_viewer_appbar_share_err_delete": "No se ha podido eliminar el álbum",
|
||||||
"album_viewer_appbar_share_err_leave": "No se ha podido abandonar el álbum",
|
"album_viewer_appbar_share_err_leave": "No se ha podido abandonar el álbum",
|
||||||
"album_viewer_appbar_share_err_remove": "Hay problemas para eliminar recursos del álbum",
|
"album_viewer_appbar_share_err_remove": "Hay problemas para eliminar los archivos del álbum",
|
||||||
"album_viewer_appbar_share_err_title": "Error al cambiar el título del álbum",
|
"album_viewer_appbar_share_err_title": "Error al cambiar el título del álbum",
|
||||||
"album_viewer_appbar_share_leave": "Abandonar álbum ",
|
"album_viewer_appbar_share_leave": "Abandonar álbum ",
|
||||||
"album_viewer_appbar_share_remove": "Eliminar del álbum",
|
"album_viewer_appbar_share_remove": "Eliminar del álbum",
|
||||||
"album_viewer_page_share_add_users": "Añadir usuarios",
|
"album_viewer_page_share_add_users": "Agregar usuarios",
|
||||||
"all_people_page_title": "People",
|
"all_people_page_title": "Personas",
|
||||||
"all_videos_page_title": "Videos",
|
"all_videos_page_title": "Videos",
|
||||||
"archive_page_no_archived_assets": "No archived assets found",
|
"archive_page_no_archived_assets": "No se encontraron recursos archivados",
|
||||||
"archive_page_title": "Archive ({})",
|
"archive_page_title": "Archivo ({})",
|
||||||
"asset_list_layout_settings_dynamic_layout_title": "Dynamic layout",
|
"asset_list_layout_settings_dynamic_layout_title": "Diseño dinámico",
|
||||||
"asset_list_layout_settings_group_automatically": "Automatic",
|
"asset_list_layout_settings_group_automatically": "Automatico",
|
||||||
"asset_list_layout_settings_group_by": "Group assets by",
|
"asset_list_layout_settings_group_by": "Agrupar recursos por",
|
||||||
"asset_list_layout_settings_group_by_month": "Month",
|
"asset_list_layout_settings_group_by_month": "Mes",
|
||||||
"asset_list_layout_settings_group_by_month_day": "Month + day",
|
"asset_list_layout_settings_group_by_month_day": "Mes + día",
|
||||||
"asset_list_settings_subtitle": "Photo grid layout settings",
|
"asset_list_settings_subtitle": "Configuraciones del diseño de la cuadrícula de fotos",
|
||||||
"asset_list_settings_title": "Photo Grid",
|
"asset_list_settings_title": "Cuadrícula de fotos",
|
||||||
"backup_album_selection_page_albums_device": "Álbumes en el dispositivo ({})",
|
"backup_album_selection_page_albums_device": "Álbumes en el dispositivo ({})",
|
||||||
"backup_album_selection_page_albums_tap": "Pulsar para incluir, pulsar dos veces para excluir",
|
"backup_album_selection_page_albums_tap": "Pulsar para incluir, pulsar dos veces para excluir",
|
||||||
"backup_album_selection_page_assets_scatter": "Los recursos pueden dispersarse entre varios álbumes. Por lo tanto, los álbumes pueden incluirse o excluirse durante el proceso de respaldo.",
|
"backup_album_selection_page_assets_scatter": "Los archivos pueden dispersarse en varios álbumes. De este modo, los álbumes pueden ser incluidos o excluidos durante el proceso de copia de seguridad.",
|
||||||
"backup_album_selection_page_select_albums": "Seleccionar álbumes",
|
"backup_album_selection_page_select_albums": "Seleccionar álbumes",
|
||||||
"backup_album_selection_page_selection_info": "Información de la selección",
|
"backup_album_selection_page_selection_info": "Información de la selección",
|
||||||
"backup_album_selection_page_total_assets": "Total de recursos únicos",
|
"backup_album_selection_page_total_assets": "Total de archivos únicos",
|
||||||
"backup_all": "Todos",
|
"backup_all": "Todos",
|
||||||
"backup_background_service_backup_failed_message": "Failed to backup assets. Retrying…",
|
"backup_background_service_backup_failed_message": "Error al copiar archivos. Reintentando...",
|
||||||
"backup_background_service_connection_failed_message": "Failed to connect to the server. Retrying…",
|
"backup_background_service_connection_failed_message": "Error al conectar con el servidor. Reintentando...",
|
||||||
"backup_background_service_current_upload_notification": "Cargando {}",
|
"backup_background_service_current_upload_notification": "Cargando {}",
|
||||||
"backup_background_service_default_notification": "Comprobando por nuevos recursos...",
|
"backup_background_service_default_notification": "Verificando si hay nuevos archivos",
|
||||||
"backup_background_service_error_title": "Error al respaldar",
|
"backup_background_service_error_title": "Error de copia de seguridad",
|
||||||
"backup_background_service_in_progress_notification": "Respaldando tus recursos...",
|
"backup_background_service_in_progress_notification": "Creando copia de seguridad de tus archivos...",
|
||||||
"backup_background_service_upload_failure_notification": "Error al cargar {}",
|
"backup_background_service_upload_failure_notification": "Error al cargar {}",
|
||||||
"backup_controller_page_albums": "Álbumes de respaldo",
|
"backup_controller_page_albums": "Álbumes de respaldo",
|
||||||
"backup_controller_page_background_app_refresh_disabled_content": "Enable background app refresh in Settings > General > Background App Refresh in order to use background backup.",
|
"backup_controller_page_background_app_refresh_disabled_content": "Activa la actualización en segundo plano de la aplicación en Configuración > General > Actualización en segundo plano para usar la copia de seguridad en segundo plano.",
|
||||||
"backup_controller_page_background_app_refresh_disabled_title": "Background app refresh disabled",
|
"backup_controller_page_background_app_refresh_disabled_title": "Actualización en segundo plano desactivada",
|
||||||
"backup_controller_page_background_app_refresh_enable_button_text": "Go to settings",
|
"backup_controller_page_background_app_refresh_enable_button_text": "Ir a configuración",
|
||||||
"backup_controller_page_background_battery_info_link": "Show me how",
|
"backup_controller_page_background_battery_info_link": "Muestrame cómo",
|
||||||
"backup_controller_page_background_battery_info_message": "For the best background backup experience, please disable any battery optimizations restricting background activity for Immich.\n\nSince this is device-specific, please lookup the required information for your device manufacturer.",
|
"backup_controller_page_background_battery_info_message": "Para obtener la mejor experiencia de copia de seguridad en segundo plano, desactiva cualquier optimización de batería que restrinja la actividad en segundo plano para Immich.\n\nDado que esto es específico en cada dispositivo, busca la información necesaria de el fabricante de tu dispositivo.",
|
||||||
"backup_controller_page_background_battery_info_ok": "OK",
|
"backup_controller_page_background_battery_info_ok": "Ok",
|
||||||
"backup_controller_page_background_battery_info_title": "Battery optimizations",
|
"backup_controller_page_background_battery_info_title": "Optimizaciones de batería",
|
||||||
"backup_controller_page_background_charging": "Only while charging",
|
"backup_controller_page_background_charging": "Solo mientras se carga",
|
||||||
"backup_controller_page_background_configure_error": "Failed to configure the background service",
|
"backup_controller_page_background_configure_error": "Error al configurar el servicio en segundo plano",
|
||||||
"backup_controller_page_background_delay": "Delay new assets backup: {}",
|
"backup_controller_page_background_delay": "Retraso en la copia de seguridad de nuevos activos: {}",
|
||||||
"backup_controller_page_background_description": "Turn on the background service to automatically backup any new assets without needing to open the app",
|
"backup_controller_page_background_description": "Activa el servicio en segundo plano para copiar automáticamente cualquier nuevos archivos sin necesidad de abrir la aplicación.",
|
||||||
"backup_controller_page_background_is_off": "Automatic background backup is off",
|
"backup_controller_page_background_is_off": "La copia de seguridad en segundo plano automática está desactivada",
|
||||||
"backup_controller_page_background_is_on": "Automatic background backup is on",
|
"backup_controller_page_background_is_on": "La copia de seguridad en segundo plano automática está desactivada",
|
||||||
"backup_controller_page_background_turn_off": "Turn off background service",
|
"backup_controller_page_background_turn_off": "Desactivar el servicio en segundo plano",
|
||||||
"backup_controller_page_background_turn_on": "Turn on background service",
|
"backup_controller_page_background_turn_on": "Activar el servicio en segundo plano",
|
||||||
"backup_controller_page_background_wifi": "Only on WiFi",
|
"backup_controller_page_background_wifi": "Solo en WiFi",
|
||||||
"backup_controller_page_backup": "Respaldo",
|
"backup_controller_page_backup": "Respaldo",
|
||||||
"backup_controller_page_backup_selected": "Seleccionado:",
|
"backup_controller_page_backup_selected": "Seleccionado:",
|
||||||
"backup_controller_page_backup_sub": "Fotos y videos respaldados",
|
"backup_controller_page_backup_sub": "Fotos y videos respaldados",
|
||||||
@@ -72,12 +72,12 @@
|
|||||||
"backup_controller_page_desc_backup": "Activa la copia de seguridad en primer plano para cargar automáticamente nuevos recursos al servidor al abrir la aplicación.",
|
"backup_controller_page_desc_backup": "Activa la copia de seguridad en primer plano para cargar automáticamente nuevos recursos al servidor al abrir la aplicación.",
|
||||||
"backup_controller_page_excluded": "Excluido:",
|
"backup_controller_page_excluded": "Excluido:",
|
||||||
"backup_controller_page_failed": "Fallidos ({})",
|
"backup_controller_page_failed": "Fallidos ({})",
|
||||||
"backup_controller_page_filename": "Nombre: {} [{}]",
|
"backup_controller_page_filename": "Nombre del archivo: {} [{}]",
|
||||||
"backup_controller_page_id": "ID: {}",
|
"backup_controller_page_id": "ID: {}",
|
||||||
"backup_controller_page_info": "Información del respaldo",
|
"backup_controller_page_info": "Información del respaldo",
|
||||||
"backup_controller_page_none_selected": "Ninguno seleccionado",
|
"backup_controller_page_none_selected": "Ninguno seleccionado",
|
||||||
"backup_controller_page_remainder": "Restante",
|
"backup_controller_page_remainder": "Restante",
|
||||||
"backup_controller_page_remainder_sub": "Fotos y videos restantes de la selección a los que realizar un respaldo",
|
"backup_controller_page_remainder_sub": "Fotos y videos restantes para hacer una copia de seguridad de la selección",
|
||||||
"backup_controller_page_select": "Seleccionar",
|
"backup_controller_page_select": "Seleccionar",
|
||||||
"backup_controller_page_server_storage": "Almacenamiento del servidor",
|
"backup_controller_page_server_storage": "Almacenamiento del servidor",
|
||||||
"backup_controller_page_start_backup": "Iniciar respaldo",
|
"backup_controller_page_start_backup": "Iniciar respaldo",
|
||||||
@@ -89,48 +89,53 @@
|
|||||||
"backup_controller_page_total_sub": "Todas las fotos y videos únicos de los álbumes seleccionados",
|
"backup_controller_page_total_sub": "Todas las fotos y videos únicos de los álbumes seleccionados",
|
||||||
"backup_controller_page_turn_off": "Desactivar la copia de seguridad en primer plano",
|
"backup_controller_page_turn_off": "Desactivar la copia de seguridad en primer plano",
|
||||||
"backup_controller_page_turn_on": "Activar la copia de seguridad en primer plano",
|
"backup_controller_page_turn_on": "Activar la copia de seguridad en primer plano",
|
||||||
"backup_controller_page_uploading_file_info": "Info de carga de archivo",
|
"backup_controller_page_uploading_file_info": "Cargando información del archivo",
|
||||||
"backup_err_only_album": "No se puede eliminar el único álbum",
|
"backup_err_only_album": "No se puede eliminar el único álbum",
|
||||||
"backup_info_card_assets": "recursos",
|
"backup_info_card_assets": "archivos",
|
||||||
"cache_settings_album_thumbnails": "Library page thumbnails ({} assets)",
|
"backup_manual_cancelled": "Cancelled",
|
||||||
"cache_settings_clear_cache_button": "Clear cache",
|
"backup_manual_failed": "Failed",
|
||||||
"cache_settings_clear_cache_button_title": "Clears the app's cache. This will significantly impact the app's performance until the cache has rebuilt.",
|
"backup_manual_in_progress": "Upload already in progress. Try after sometime",
|
||||||
"cache_settings_image_cache_size": "Image cache size ({} assets)",
|
"backup_manual_success": "Success",
|
||||||
"cache_settings_statistics_album": "Library thumbnails",
|
"backup_manual_title": "Upload status",
|
||||||
"cache_settings_statistics_assets": "{} assets ({})",
|
"cache_settings_album_thumbnails": "Miniaturas de la página de la biblioteca ({} archivos)",
|
||||||
"cache_settings_statistics_full": "Full images",
|
"cache_settings_clear_cache_button": "Borrar caché",
|
||||||
"cache_settings_statistics_shared": "Shared album thumbnails",
|
"cache_settings_clear_cache_button_title": "Borra la caché de la aplicación. Esto afectará significativamente el rendimiento de la aplicación hasta que se reconstruya la caché.",
|
||||||
"cache_settings_statistics_thumbnail": "Thumbnails",
|
"cache_settings_image_cache_size": "Tamaño de la caché de imágenes ({} archivos)",
|
||||||
"cache_settings_statistics_title": "Cache usage",
|
"cache_settings_statistics_album": "Miniaturas de la biblioteca",
|
||||||
"cache_settings_subtitle": "Control the caching behaviour of the Immich mobile application",
|
"cache_settings_statistics_assets": "{} archivos ({})",
|
||||||
"cache_settings_thumbnail_size": "Thumbnail cache size ({} assets)",
|
"cache_settings_statistics_full": "Imágenes completas",
|
||||||
"cache_settings_title": "Caching Settings",
|
"cache_settings_statistics_shared": "Miniaturas de álbumes compartidos",
|
||||||
"change_password_form_confirm_password": "Confirm Password",
|
"cache_settings_statistics_thumbnail": "Miniaturas",
|
||||||
"change_password_form_description": "Hi {firstName} {lastName},\n\nThis is either the first time you are signing into the system or a request has been made to change your password. Please enter the new password below.",
|
"cache_settings_statistics_title": "Uso de caché",
|
||||||
"change_password_form_new_password": "New Password",
|
"cache_settings_subtitle": "Controla el comportamiento del almacenamiento en caché de la aplicación móvil Immich",
|
||||||
"change_password_form_password_mismatch": "Passwords do not match",
|
"cache_settings_thumbnail_size": "Tamaño de la caché de miniaturas ({} archivos)",
|
||||||
"change_password_form_reenter_new_password": "Re-enter New Password",
|
"cache_settings_title": "Configuración de la caché",
|
||||||
"common_add_to_album": "Add to album",
|
"change_password_form_confirm_password": "Confirmar Contraseña",
|
||||||
"common_change_password": "Change Password",
|
"change_password_form_description": "Hola {firstName} {lastName},\n\nEsta es la primera vez que inicias sesión en el sistema o se ha solicitado cambiar tu contraseña. Por favor, introduce la nueva contraseña a continuación.",
|
||||||
"common_create_new_album": "Create new album",
|
"change_password_form_new_password": "Nueva Contraseña",
|
||||||
"common_server_error": "Please check your network connection, make sure the server is reachable and app/server versions are compatible.",
|
"change_password_form_password_mismatch": "Las contraseñas no coinciden",
|
||||||
"common_shared": "Shared",
|
"change_password_form_reenter_new_password": "Vuelve a ingresar la nueva contraseña",
|
||||||
"control_bottom_app_bar_add_to_album": "Add to album",
|
"common_add_to_album": "Agregar al álbum",
|
||||||
"control_bottom_app_bar_album_info": "{} items",
|
"common_change_password": "Cambiar Contraseña",
|
||||||
"control_bottom_app_bar_album_info_shared": "{} items · Shared",
|
"common_create_new_album": "Crear nuevo álbum",
|
||||||
"control_bottom_app_bar_archive": "Archive",
|
"common_server_error": "Por favor, verifica tu conexión de red, asegúrate de que el servidor esté accesible y las versiones de la aplicación y del servidor sean compatibles.",
|
||||||
"control_bottom_app_bar_create_new_album": "Create new album",
|
"common_shared": "Compartido",
|
||||||
|
"control_bottom_app_bar_add_to_album": "Agregar al álbum",
|
||||||
|
"control_bottom_app_bar_album_info": "{} elementos",
|
||||||
|
"control_bottom_app_bar_album_info_shared": "{} elementos · Compartidos",
|
||||||
|
"control_bottom_app_bar_archive": "Archivar",
|
||||||
|
"control_bottom_app_bar_create_new_album": "Crear nuevo álbum",
|
||||||
"control_bottom_app_bar_delete": "Eliminar",
|
"control_bottom_app_bar_delete": "Eliminar",
|
||||||
"control_bottom_app_bar_favorite": "Favorite",
|
"control_bottom_app_bar_favorite": "Favorito",
|
||||||
"control_bottom_app_bar_share": "Compartir",
|
"control_bottom_app_bar_share": "Compartir",
|
||||||
"control_bottom_app_bar_unarchive": "Unarchive",
|
"control_bottom_app_bar_unarchive": "Desarchivar",
|
||||||
"create_album_page_untitled": "Sin título",
|
"create_album_page_untitled": "Sin título",
|
||||||
"create_shared_album_page_create": "Crear",
|
"create_shared_album_page_create": "Crear",
|
||||||
"create_shared_album_page_share": "Compartir",
|
"create_shared_album_page_share": "Compartir",
|
||||||
"create_shared_album_page_share_add_assets": "AÑADIR RECURSOS",
|
"create_shared_album_page_share_add_assets": "AGREGAR ARCHIVOS",
|
||||||
"create_shared_album_page_share_select_photos": "Seleccionar fotos",
|
"create_shared_album_page_share_select_photos": "Seleccionar fotos",
|
||||||
"curated_location_page_title": "Places",
|
"curated_location_page_title": "Lugares",
|
||||||
"curated_object_page_title": "Things",
|
"curated_object_page_title": "Objetos",
|
||||||
"daily_title_text_date": "E, dd MMM",
|
"daily_title_text_date": "E, dd MMM",
|
||||||
"daily_title_text_date_year": "E, dd de MMM de yyyy",
|
"daily_title_text_date_year": "E, dd de MMM de yyyy",
|
||||||
"date_format": "E d, LLL y • h:mm a",
|
"date_format": "E d, LLL y • h:mm a",
|
||||||
@@ -138,130 +143,132 @@
|
|||||||
"delete_dialog_cancel": "Cancelar",
|
"delete_dialog_cancel": "Cancelar",
|
||||||
"delete_dialog_ok": "Eliminar",
|
"delete_dialog_ok": "Eliminar",
|
||||||
"delete_dialog_title": "Eliminar permanentemente",
|
"delete_dialog_title": "Eliminar permanentemente",
|
||||||
"description_input_hint_text": "Add description...",
|
"description_input_hint_text": "Agregar descripción...",
|
||||||
"description_input_submit_error": "Error updating description, check the log for more details",
|
"description_input_submit_error": "Error al actualizar la descripción, verifica el registro para obtener más detalles",
|
||||||
"exif_bottom_sheet_description": "Añadir descripción...",
|
"exif_bottom_sheet_description": "Agregar Descripción...",
|
||||||
"exif_bottom_sheet_details": "DETALLES",
|
"exif_bottom_sheet_details": "DETALLES",
|
||||||
"exif_bottom_sheet_location": "UBICACIÓN",
|
"exif_bottom_sheet_location": "UBICACIÓN",
|
||||||
"experimental_settings_new_asset_list_subtitle": "Work in progress",
|
"experimental_settings_new_asset_list_subtitle": "Trabajo en progreso",
|
||||||
"experimental_settings_new_asset_list_title": "Enable experimental photo grid",
|
"experimental_settings_new_asset_list_title": "Habilitar cuadrícula fotográfica experimental",
|
||||||
"experimental_settings_subtitle": "Use at your own risk!",
|
"experimental_settings_subtitle": "Úsalo bajo tu responsabilidad",
|
||||||
"experimental_settings_title": "Experimental",
|
"experimental_settings_title": "Experimental",
|
||||||
"favorites_page_no_favorites": "No favorite assets found",
|
"favorites_page_no_favorites": "No se encontraron recursos marcados como favoritos",
|
||||||
"favorites_page_title": "Favorites",
|
"favorites_page_title": "Favoritos",
|
||||||
"home_page_add_to_album_conflicts": "Added {added} assets to album {album}. {failed} assets are already in the album.",
|
"home_page_add_to_album_conflicts": "{added} elementos agregados al álbum {album}.\n{failed} elementos ya existen en el álbum.",
|
||||||
"home_page_add_to_album_err_local": "Can not add local assets to albums yet, skipping",
|
"home_page_add_to_album_err_local": "Aún no se pueden agregar recursos locales a álbumes, omitiendo",
|
||||||
"home_page_add_to_album_success": "Added {added} assets to album {album}.",
|
"home_page_add_to_album_success": "{added} elementos agregados al álbum {album}. ",
|
||||||
"home_page_archive_err_local": "Can not archive local assets yet, skipping",
|
"home_page_archive_err_local": "Los recursos locales no pueden ser archivados, omitiendo",
|
||||||
"home_page_building_timeline": "Building the timeline",
|
"home_page_building_timeline": "Construyendo la línea de tiempo",
|
||||||
"home_page_favorite_err_local": "Can not favorite local assets yet, skipping",
|
"home_page_favorite_err_local": "Aún no se pueden archivar recursos locales, omitiendo",
|
||||||
"home_page_first_time_notice": "If this is your first time using the app, please make sure to choose a backup album(s) so that the timeline can populate photos and videos in the album(s).",
|
"home_page_first_time_notice": "Si esta es la primera vez que usas la app, por favor, asegúrate de elegir un álbum de respaldo para que la línea de tiempo pueda cargar fotos y videos en los álbumes.",
|
||||||
"image_viewer_page_state_provider_download_error": "Download Error",
|
"home_page_upload_err_limit": "Can only upload a maximum of 30 assets at a time, skipping",
|
||||||
"image_viewer_page_state_provider_download_success": "Download Success",
|
"image_viewer_page_state_provider_download_error": "Error de descarga",
|
||||||
|
"image_viewer_page_state_provider_download_success": "Descarga exitosa",
|
||||||
"library_page_albums": "Álbumes",
|
"library_page_albums": "Álbumes",
|
||||||
"library_page_archive": "Archive",
|
"library_page_archive": "Archivo",
|
||||||
"library_page_device_albums": "Albums on Device",
|
"library_page_device_albums": "Álbumes en el dispositivo",
|
||||||
"library_page_favorites": "Favorites",
|
"library_page_favorites": "Favoritos",
|
||||||
"library_page_new_album": "Nuevo álbum",
|
"library_page_new_album": "Nuevo álbum",
|
||||||
"library_page_sharing": "Sharing",
|
"library_page_sharing": "Compartiendo",
|
||||||
"library_page_sort_created": "Most recently created",
|
"library_page_sort_created": "Creado más recientemente",
|
||||||
"library_page_sort_title": "Album title",
|
"library_page_sort_title": "Título del álbum",
|
||||||
"login_form_api_exception": "API exception. Please check the server URL and try again.",
|
"login_disabled": "Login has been disabled",
|
||||||
|
"login_form_api_exception": "Excepción producida por API. Por favor, verifica el URL del servidor e inténtalo de nuevo.",
|
||||||
"login_form_button_text": "Iniciar sesión",
|
"login_form_button_text": "Iniciar sesión",
|
||||||
"login_form_email_hint": "tucorreo@correo.com",
|
"login_form_email_hint": "tucorreo@correo.com",
|
||||||
"login_form_endpoint_hint": "http://la-ip-de-tu-servidor:puerto/api",
|
"login_form_endpoint_hint": "http://la-ip-de-tu-servidor:puerto/api",
|
||||||
"login_form_endpoint_url": "URL del servidor",
|
"login_form_endpoint_url": "URL del servidor",
|
||||||
"login_form_err_http": "Por favor, especifique http:// o https://",
|
"login_form_err_http": "Por favor, especifique http:// o https://",
|
||||||
"login_form_err_invalid_email": "Correo electrónico inválido",
|
"login_form_err_invalid_email": "Correo electrónico inválido",
|
||||||
"login_form_err_invalid_url": "Invalid URL",
|
"login_form_err_invalid_url": "URL no válida",
|
||||||
"login_form_err_leading_whitespace": "Espacio en blanco inicial",
|
"login_form_err_leading_whitespace": "Espacio en blanco inicial",
|
||||||
"login_form_err_trailing_whitespace": "Espacio en blanco al final",
|
"login_form_err_trailing_whitespace": "Espacio en blanco al final",
|
||||||
"login_form_failed_get_oauth_server_config": "Error logging using OAuth, check server URL",
|
"login_form_failed_get_oauth_server_config": "Error al iniciar sesión con OAuth, verifica la URL del servidor",
|
||||||
"login_form_failed_get_oauth_server_disable": "OAuth feature is not available on this server",
|
"login_form_failed_get_oauth_server_disable": "La función de OAuth no está disponible en este servidor",
|
||||||
"login_form_failed_login": "Error al iniciar sesión, comprueba la URL del servidor, el correo electrónico y la contraseña",
|
"login_form_failed_login": "Error al iniciar sesión, comprueba la URL del servidor, el correo electrónico y la contraseña",
|
||||||
"login_form_label_email": "Correo electrónico",
|
"login_form_label_email": "Correo electrónico",
|
||||||
"login_form_label_password": "Contraseña",
|
"login_form_label_password": "Contraseña",
|
||||||
"login_form_next_button": "Next",
|
"login_form_next_button": "Siguiente",
|
||||||
"login_form_password_hint": "contraseña",
|
"login_form_password_hint": "contraseña",
|
||||||
"login_form_save_login": "Permanecer conectado",
|
"login_form_save_login": "Permanecer conectado",
|
||||||
"login_form_server_empty": "Enter a server URL.",
|
"login_form_server_empty": "Agrega la URL del servidor.",
|
||||||
"login_form_server_error": "Could not connect to server.",
|
"login_form_server_error": "No se pudo conectar al servidor.",
|
||||||
"monthly_title_text_date_format": "MMMM y",
|
"monthly_title_text_date_format": "MMMM y",
|
||||||
"motion_photos_page_title": "Motion Photos",
|
"motion_photos_page_title": "Foto en Movimiento",
|
||||||
"notification_permission_dialog_cancel": "Cancel",
|
"notification_permission_dialog_cancel": "Cancelar",
|
||||||
"notification_permission_dialog_content": "To enable notifications, go to Settings and select allow.",
|
"notification_permission_dialog_content": "Para activar las notificaciones, ve a Configuración y selecciona permitir.",
|
||||||
"notification_permission_dialog_settings": "Settings",
|
"notification_permission_dialog_settings": "Ajustes",
|
||||||
"notification_permission_list_tile_content": "Grant permission to enable notifications.",
|
"notification_permission_list_tile_content": "Concede permiso para habilitar las notificaciones.",
|
||||||
"notification_permission_list_tile_enable_button": "Enable Notifications",
|
"notification_permission_list_tile_enable_button": "Permitir notificaciones",
|
||||||
"notification_permission_list_tile_title": "Notification Permission",
|
"notification_permission_list_tile_title": "Permisos de Notificacion",
|
||||||
"partner_page_add_partner": "Add partner",
|
"partner_page_add_partner": "Agregar compañero",
|
||||||
"partner_page_empty_message": "Your photos are not yet shared with any partner.",
|
"partner_page_empty_message": "Tus fotos aún no se han compartido con ningún compañero.",
|
||||||
"partner_page_no_more_users": "No more users to add",
|
"partner_page_no_more_users": "No hay más usuarios para agregar",
|
||||||
"partner_page_partner_add_failed": "Failed to add partner",
|
"partner_page_partner_add_failed": "Compañero no pudo ser agregado ",
|
||||||
"partner_page_select_partner": "Select partner",
|
"partner_page_select_partner": "Seleccionar compañero",
|
||||||
"partner_page_shared_to_title": "Shared to",
|
"partner_page_shared_to_title": "Compartido con",
|
||||||
"partner_page_stop_sharing_content": "{} will no longer be able to access your photos.",
|
"partner_page_stop_sharing_content": "{} ya no podrá acceder a tus fotos",
|
||||||
"partner_page_stop_sharing_title": "Stop sharing your photos?",
|
"partner_page_stop_sharing_title": "¿Dejar de compartir tus fotos?",
|
||||||
"partner_page_title": "Partner",
|
"partner_page_title": "Compañero",
|
||||||
"permission_onboarding_continue_anyway": "Continue anyway",
|
"permission_onboarding_continue_anyway": "Continuar de todos modos",
|
||||||
"permission_onboarding_get_started": "Get started",
|
"permission_onboarding_get_started": "Empezar",
|
||||||
"permission_onboarding_go_to_settings": "Go to settings",
|
"permission_onboarding_go_to_settings": "Ir a configuración",
|
||||||
"permission_onboarding_grant_permission": "Grant permission",
|
"permission_onboarding_grant_permission": "Conceder permiso",
|
||||||
"permission_onboarding_log_out": "Log out",
|
"permission_onboarding_log_out": "Cerrar sesión",
|
||||||
"permission_onboarding_permission_denied": "Permission denied. To use Immich, grant photo and video permissions in Settings.",
|
"permission_onboarding_permission_denied": "Permiso denegado. Para usar Immich, concede permisos de fotos y videos en Configuración.",
|
||||||
"permission_onboarding_permission_granted": "Permission granted! You are all set.",
|
"permission_onboarding_permission_granted": "¡Permiso concedido! Todo listo.",
|
||||||
"permission_onboarding_permission_limited": "Permission limited. To let Immich backup and manage your entire gallery collection, grant photo and video permissions in Settings.",
|
"permission_onboarding_permission_limited": "Permiso limitado. Para permitir que Immich haga copia de seguridad y gestione toda tu colección de galería, concede permisos de fotos y videos en Configuración.",
|
||||||
"permission_onboarding_request": "Immich requires permission to view your photos and videos.",
|
"permission_onboarding_request": "Immich requiere permiso para ver tus fotos y videos.",
|
||||||
"profile_drawer_app_logs": "Logs",
|
"profile_drawer_app_logs": "Registros",
|
||||||
"profile_drawer_client_server_up_to_date": "El cliente y el servidor están actualizados",
|
"profile_drawer_client_server_up_to_date": "El cliente y el servidor están actualizados",
|
||||||
"profile_drawer_settings": "Configuración",
|
"profile_drawer_settings": "Configuración",
|
||||||
"profile_drawer_sign_out": "Cerrar sesión",
|
"profile_drawer_sign_out": "Cerrar sesión",
|
||||||
"recently_added_page_title": "Recently Added",
|
"recently_added_page_title": "Recién Agregadas",
|
||||||
"search_bar_hint": "Busca tus fotos",
|
"search_bar_hint": "Busca tus fotos",
|
||||||
"search_page_categories": "Categories",
|
"search_page_categories": "Categorías",
|
||||||
"search_page_favorites": "Favorites",
|
"search_page_favorites": "Favoritos",
|
||||||
"search_page_motion_photos": "Motion Photos",
|
"search_page_motion_photos": "Foto en Movimiento",
|
||||||
"search_page_no_objects": "No hay información de objetos disponible",
|
"search_page_no_objects": "No hay información de objetos disponibles",
|
||||||
"search_page_no_places": "No hay información de lugares disponible",
|
"search_page_no_places": "No hay información de lugares disponible",
|
||||||
"search_page_people": "People",
|
"search_page_people": "Personas",
|
||||||
"search_page_places": "Lugares",
|
"search_page_places": "Lugares",
|
||||||
"search_page_recently_added": "Recently added",
|
"search_page_recently_added": "Recién agregadas",
|
||||||
"search_page_screenshots": "Screenshots",
|
"search_page_screenshots": "Capturas de pantalla",
|
||||||
"search_page_selfies": "Selfies",
|
"search_page_selfies": "Selfies",
|
||||||
"search_page_things": "Cosas",
|
"search_page_things": "Cosas",
|
||||||
"search_page_videos": "Videos",
|
"search_page_videos": "Videos",
|
||||||
"search_page_view_all_button": "View all",
|
"search_page_view_all_button": "Ver todo",
|
||||||
"search_page_your_activity": "Your activity",
|
"search_page_your_activity": "Tu actividad",
|
||||||
"search_result_page_new_search_hint": "Nueva búsqueda",
|
"search_result_page_new_search_hint": "Nueva búsqueda",
|
||||||
"search_suggestion_list_smart_search_hint_1": "Smart search is enabled by default, to search for metadata use the syntax ",
|
"search_suggestion_list_smart_search_hint_1": "La búsqueda inteligente está habilitada por defecto, para buscar metadatos utiliza esta sintaxis ",
|
||||||
"search_suggestion_list_smart_search_hint_2": "m:your-search-term",
|
"search_suggestion_list_smart_search_hint_2": "m:tu-término-de-búsqueda",
|
||||||
"select_additional_user_for_sharing_page_suggestions": "Sugerencias",
|
"select_additional_user_for_sharing_page_suggestions": "Sugerencias",
|
||||||
"select_user_for_sharing_page_err_album": "Error al crear álbum",
|
"select_user_for_sharing_page_err_album": "Error al crear álbum",
|
||||||
"select_user_for_sharing_page_share_suggestions": "Sugerencias",
|
"select_user_for_sharing_page_share_suggestions": "Sugerencias",
|
||||||
"server_info_box_app_version": "App Version",
|
"server_info_box_app_version": "Versión de la Aplicación",
|
||||||
"server_info_box_server_version": "Server Version",
|
"server_info_box_server_version": "Versión del Servidor",
|
||||||
"setting_image_viewer_help": "The detail viewer loads the small thumbnail first, then loads the medium-size preview (if enabled), finally loads the original (if enabled).",
|
"setting_image_viewer_help": "El visor de detalles carga primero la miniatura pequeña, luego carga la vista previa de tamaño mediano (si está habilitada), finalmente carga la original (si está habilitada).",
|
||||||
"setting_image_viewer_original_subtitle": "Enable to load the original full-resolution image (large!). Disable to reduce data usage (both network and on device cache).",
|
"setting_image_viewer_original_subtitle": "Activar para cargar la imagen en resolución original (¡muy grande!). Deshabilitar para reducir el consumo de datos (de red y caché).",
|
||||||
"setting_image_viewer_original_title": "Load original image",
|
"setting_image_viewer_original_title": "Cargar imagen original",
|
||||||
"setting_image_viewer_preview_subtitle": "Enable to load a medium-resolution image. Disable to either directly load the original or only use the thumbnail.",
|
"setting_image_viewer_preview_subtitle": "Activar para cargar una imagen de resolución media. Deshabilitar para cargar directamente la imagen original o usar una miniatura.",
|
||||||
"setting_image_viewer_preview_title": "Load preview image",
|
"setting_image_viewer_preview_title": "Cargar imagen de previsualización",
|
||||||
"setting_notifications_notify_failures_grace_period": "Notify background backup failures: {}",
|
"setting_notifications_notify_failures_grace_period": "Notificar fallos de copia de seguridad en segundo plano: {}",
|
||||||
"setting_notifications_notify_hours": "{} hours",
|
"setting_notifications_notify_hours": "{} horas",
|
||||||
"setting_notifications_notify_immediately": "immediately",
|
"setting_notifications_notify_immediately": "inmediatamente",
|
||||||
"setting_notifications_notify_minutes": "{} minutes",
|
"setting_notifications_notify_minutes": "{} minutos",
|
||||||
"setting_notifications_notify_never": "never",
|
"setting_notifications_notify_never": "nunca",
|
||||||
"setting_notifications_notify_seconds": "{} seconds",
|
"setting_notifications_notify_seconds": "{} segundos",
|
||||||
"setting_notifications_single_progress_subtitle": "Detailed upload progress information per asset",
|
"setting_notifications_single_progress_subtitle": "Información detallada del progreso de subida de cada archivo",
|
||||||
"setting_notifications_single_progress_title": "Show background backup detail progress",
|
"setting_notifications_single_progress_title": "Mostrar progreso detallado de copia de seguridad en segundo plano",
|
||||||
"setting_notifications_subtitle": "Adjust your notification preferences",
|
"setting_notifications_subtitle": "Ajusta tus preferencias de notificación",
|
||||||
"setting_notifications_title": "Notifications",
|
"setting_notifications_title": "Notificaciones",
|
||||||
"setting_notifications_total_progress_subtitle": "Overall upload progress (done/total assets)",
|
"setting_notifications_total_progress_subtitle": "Progreso general de subida (archivos completados/total)",
|
||||||
"setting_notifications_total_progress_title": "Show background backup total progress",
|
"setting_notifications_total_progress_title": "Mostrar progreso total de copia de seguridad en segundo plano",
|
||||||
"setting_pages_app_bar_settings": "Settings",
|
"setting_pages_app_bar_settings": "Ajustes",
|
||||||
"settings_require_restart": "Please restart Immich to apply this setting",
|
"settings_require_restart": "Por favor, reinicia Immich para aplicar este ajuste",
|
||||||
"share_add": "Añadir",
|
"share_add": "Agregar",
|
||||||
"share_add_photos": "Añadir fotos",
|
"share_add_photos": "Agregar fotos",
|
||||||
"share_add_title": "Añadir un título",
|
"share_add_title": "Agregar un título",
|
||||||
"share_create_album": "Crear álbum",
|
"share_create_album": "Crear álbum",
|
||||||
"share_dialog_preparing": "Preparando...",
|
"share_dialog_preparing": "Preparando...",
|
||||||
"share_invite": "Invitar al álbum",
|
"share_invite": "Invitar al álbum",
|
||||||
@@ -274,20 +281,24 @@
|
|||||||
"tab_controller_nav_photos": "Fotos",
|
"tab_controller_nav_photos": "Fotos",
|
||||||
"tab_controller_nav_search": "Buscar",
|
"tab_controller_nav_search": "Buscar",
|
||||||
"tab_controller_nav_sharing": "Compartiendo",
|
"tab_controller_nav_sharing": "Compartiendo",
|
||||||
"theme_setting_asset_list_storage_indicator_title": "Show storage indicator on asset tiles",
|
"theme_setting_asset_list_storage_indicator_title": "Mostrar indicador de almacenamiento en las miniaturas de los archivos",
|
||||||
"theme_setting_asset_list_tiles_per_row_title": "Number of assets per row ({})",
|
"theme_setting_asset_list_tiles_per_row_title": "Número de activos por fila ({})",
|
||||||
"theme_setting_dark_mode_switch": "Dark mode",
|
"theme_setting_dark_mode_switch": "Modo oscuro",
|
||||||
"theme_setting_image_viewer_quality_subtitle": "Adjust the quality of the detail image viewer",
|
"theme_setting_image_viewer_quality_subtitle": "Ajustar la calidad del visor de detalles de imágenes",
|
||||||
"theme_setting_image_viewer_quality_title": "Image viewer quality",
|
"theme_setting_image_viewer_quality_title": "Calidad del visor de imágenes",
|
||||||
"theme_setting_system_theme_switch": "Automatic (Follow system setting)",
|
"theme_setting_system_theme_switch": "Automático (seguir ajuste del sistema)",
|
||||||
"theme_setting_theme_subtitle": "Choose the app's theme setting",
|
"theme_setting_theme_subtitle": "Elige la configuración del tema de la aplicación",
|
||||||
"theme_setting_theme_title": "Theme",
|
"theme_setting_theme_title": "Tema",
|
||||||
"theme_setting_three_stage_loading_subtitle": "Three-stage loading might increase the loading performance but causes significantly higher network load",
|
"theme_setting_three_stage_loading_subtitle": "La carga en tres etapas puede aumentar el rendimiento de carga pero provoca un consumo de red significativamente mayor",
|
||||||
"theme_setting_three_stage_loading_title": "Enable three-stage loading",
|
"theme_setting_three_stage_loading_title": "Activar carga en tres etapas",
|
||||||
|
"upload_dialog_cancel": "Cancel",
|
||||||
|
"upload_dialog_info": "Do you want to backup the selected Asset(s) to the server?",
|
||||||
|
"upload_dialog_ok": "Upload",
|
||||||
|
"upload_dialog_title": "Upload Asset",
|
||||||
"version_announcement_overlay_ack": "Aceptar",
|
"version_announcement_overlay_ack": "Aceptar",
|
||||||
"version_announcement_overlay_release_notes": "notas de la versión",
|
"version_announcement_overlay_release_notes": "notas de la versión",
|
||||||
"version_announcement_overlay_text_1": "Hola, amigo, hay una nueva versión de",
|
"version_announcement_overlay_text_1": "Hola, amigo, hay una nueva versión de",
|
||||||
"version_announcement_overlay_text_2": "por favor, tómese su tiempo para visitar las",
|
"version_announcement_overlay_text_2": "por favor, tómate tu tiempo para visitar las ",
|
||||||
"version_announcement_overlay_text_3": "y asegúrate de que tu configuración de docker-compose y .env está actualizada para evitar cualquier error de configuración, especialmente si utilizas WatchTower o cualquier mecanismo que se encargue de actualizar tu aplicación de servidor automáticamente.",
|
"version_announcement_overlay_text_3": " y asegúrate de que la configuración de docker-compose y .env estén actualizadas para evitar cualquier error de configuración, especialmente si utilizas WatchTower o cualquier mecanismo que actualice automáticamente la aplicación del servidor.",
|
||||||
"version_announcement_overlay_title": "Nueva versión del servidor disponible \uD83C\uDF89"
|
"version_announcement_overlay_title": "Nueva versión del servidor disponible \uD83C\uDF89"
|
||||||
}
|
}
|
||||||
@@ -92,6 +92,11 @@
|
|||||||
"backup_controller_page_uploading_file_info": "Tiedostojen lähetystiedot",
|
"backup_controller_page_uploading_file_info": "Tiedostojen lähetystiedot",
|
||||||
"backup_err_only_album": "Vähintään yhden albumin tulee olla valittuna",
|
"backup_err_only_album": "Vähintään yhden albumin tulee olla valittuna",
|
||||||
"backup_info_card_assets": "kohdetta",
|
"backup_info_card_assets": "kohdetta",
|
||||||
|
"backup_manual_cancelled": "Cancelled",
|
||||||
|
"backup_manual_failed": "Failed",
|
||||||
|
"backup_manual_in_progress": "Upload already in progress. Try after sometime",
|
||||||
|
"backup_manual_success": "Success",
|
||||||
|
"backup_manual_title": "Upload status",
|
||||||
"cache_settings_album_thumbnails": "Kirjastosivun esikatselukuvat ({} kohdetta)",
|
"cache_settings_album_thumbnails": "Kirjastosivun esikatselukuvat ({} kohdetta)",
|
||||||
"cache_settings_clear_cache_button": "Tyhjennä välimuisti",
|
"cache_settings_clear_cache_button": "Tyhjennä välimuisti",
|
||||||
"cache_settings_clear_cache_button_title": "Tyhjennä sovelluksen välimuisti. Tämä vaikuttaa merkittävästi sovelluksen suorituskykyyn, kunnes välimuisti on rakennettu uudelleen.",
|
"cache_settings_clear_cache_button_title": "Tyhjennä sovelluksen välimuisti. Tämä vaikuttaa merkittävästi sovelluksen suorituskykyyn, kunnes välimuisti on rakennettu uudelleen.",
|
||||||
@@ -156,6 +161,7 @@
|
|||||||
"home_page_building_timeline": "Rakennetaan aikajanaa",
|
"home_page_building_timeline": "Rakennetaan aikajanaa",
|
||||||
"home_page_favorite_err_local": "Paikallisten kohteiden lisääminen suosikkeihin ei ole mahdollista, ohitetaan",
|
"home_page_favorite_err_local": "Paikallisten kohteiden lisääminen suosikkeihin ei ole mahdollista, ohitetaan",
|
||||||
"home_page_first_time_notice": "Jos käytät sovellusta ensimmäistä kertaa, muista valita varmuuskopioitavat albumi(t), jotta aikajanalla voi olla kuvia ja videoita.",
|
"home_page_first_time_notice": "Jos käytät sovellusta ensimmäistä kertaa, muista valita varmuuskopioitavat albumi(t), jotta aikajanalla voi olla kuvia ja videoita.",
|
||||||
|
"home_page_upload_err_limit": "Can only upload a maximum of 30 assets at a time, skipping",
|
||||||
"image_viewer_page_state_provider_download_error": "Lataus epäonnistui",
|
"image_viewer_page_state_provider_download_error": "Lataus epäonnistui",
|
||||||
"image_viewer_page_state_provider_download_success": "Lataus onnistui",
|
"image_viewer_page_state_provider_download_success": "Lataus onnistui",
|
||||||
"library_page_albums": "Albumit",
|
"library_page_albums": "Albumit",
|
||||||
@@ -166,6 +172,7 @@
|
|||||||
"library_page_sharing": "Jakaminen",
|
"library_page_sharing": "Jakaminen",
|
||||||
"library_page_sort_created": "Viimeisin luotu",
|
"library_page_sort_created": "Viimeisin luotu",
|
||||||
"library_page_sort_title": "Albumin otsikko",
|
"library_page_sort_title": "Albumin otsikko",
|
||||||
|
"login_disabled": "Login has been disabled",
|
||||||
"login_form_api_exception": "API-virhe. Tarkista palvelimen URL-osoite ja yritä uudelleen.",
|
"login_form_api_exception": "API-virhe. Tarkista palvelimen URL-osoite ja yritä uudelleen.",
|
||||||
"login_form_button_text": "Kirjaudu",
|
"login_form_button_text": "Kirjaudu",
|
||||||
"login_form_email_hint": "sahkopostisi@esimerkki.fi",
|
"login_form_email_hint": "sahkopostisi@esimerkki.fi",
|
||||||
@@ -284,6 +291,10 @@
|
|||||||
"theme_setting_theme_title": "Teema",
|
"theme_setting_theme_title": "Teema",
|
||||||
"theme_setting_three_stage_loading_subtitle": "Kolmivaiheinen lataaminen saattaa parantaa latauksen suorituskykyä, mutta lisää kaistankäyttöä huomattavasti.",
|
"theme_setting_three_stage_loading_subtitle": "Kolmivaiheinen lataaminen saattaa parantaa latauksen suorituskykyä, mutta lisää kaistankäyttöä huomattavasti.",
|
||||||
"theme_setting_three_stage_loading_title": "Ota kolmivaiheinen lataus käyttöön",
|
"theme_setting_three_stage_loading_title": "Ota kolmivaiheinen lataus käyttöön",
|
||||||
|
"upload_dialog_cancel": "Cancel",
|
||||||
|
"upload_dialog_info": "Do you want to backup the selected Asset(s) to the server?",
|
||||||
|
"upload_dialog_ok": "Upload",
|
||||||
|
"upload_dialog_title": "Upload Asset",
|
||||||
"version_announcement_overlay_ack": "Tiedostan",
|
"version_announcement_overlay_ack": "Tiedostan",
|
||||||
"version_announcement_overlay_release_notes": "julkaisutiedoissa",
|
"version_announcement_overlay_release_notes": "julkaisutiedoissa",
|
||||||
"version_announcement_overlay_text_1": "Hei, kaveri! Uusi palvelinversio on saatavilla sovelluksesta",
|
"version_announcement_overlay_text_1": "Hei, kaveri! Uusi palvelinversio on saatavilla sovelluksesta",
|
||||||
|
|||||||
@@ -1,19 +1,19 @@
|
|||||||
{
|
{
|
||||||
"add_to_album_bottom_sheet_added": "Ajouté à {album}",
|
"add_to_album_bottom_sheet_added": "Ajouté à {album}",
|
||||||
"add_to_album_bottom_sheet_already_exists": "Déjà dans {album}",
|
"add_to_album_bottom_sheet_already_exists": "Déjà dans {album}",
|
||||||
"advanced_settings_prefer_remote_subtitle": "Some devices are painfully slow to load thumbnails from assets on the device. Activate this setting to load remote images instead.",
|
"advanced_settings_prefer_remote_subtitle": "Certains appareils sont terriblement lents à charger des miniatures à partir de ressources présentes sur l'appareil. Activez ce paramètre pour charger des images distantes à la place.",
|
||||||
"advanced_settings_prefer_remote_title": "Prefer remote images",
|
"advanced_settings_prefer_remote_title": "Préférer les images distantes",
|
||||||
"advanced_settings_tile_subtitle": "Advanced user's settings",
|
"advanced_settings_tile_subtitle": "Paramètres d'utilisateur avancés",
|
||||||
"advanced_settings_tile_title": "Advanced",
|
"advanced_settings_tile_title": "Avancé",
|
||||||
"advanced_settings_troubleshooting_subtitle": "Enable additional features for troubleshooting",
|
"advanced_settings_troubleshooting_subtitle": "Activer des fonctions supplémentaires pour le dépannage",
|
||||||
"advanced_settings_troubleshooting_title": "Troubleshooting",
|
"advanced_settings_troubleshooting_title": "Dépannage",
|
||||||
"album_info_card_backup_album_excluded": "EXCLU",
|
"album_info_card_backup_album_excluded": "EXCLU",
|
||||||
"album_info_card_backup_album_included": "INCLUS",
|
"album_info_card_backup_album_included": "INCLUS",
|
||||||
"album_thumbnail_card_item": "1 élément",
|
"album_thumbnail_card_item": "1 élément",
|
||||||
"album_thumbnail_card_items": "{} éléments",
|
"album_thumbnail_card_items": "{} éléments",
|
||||||
"album_thumbnail_card_shared": " · Partagé",
|
"album_thumbnail_card_shared": " · Partagé",
|
||||||
"album_thumbnail_owned": "Owned",
|
"album_thumbnail_owned": "Possédé",
|
||||||
"album_thumbnail_shared_by": "Shared by {}",
|
"album_thumbnail_shared_by": "Partagé par {}",
|
||||||
"album_viewer_appbar_share_delete": "Supprimer l'album",
|
"album_viewer_appbar_share_delete": "Supprimer l'album",
|
||||||
"album_viewer_appbar_share_err_delete": "Échec de la suppression de l'album",
|
"album_viewer_appbar_share_err_delete": "Échec de la suppression de l'album",
|
||||||
"album_viewer_appbar_share_err_leave": "Impossible de quitter l'album",
|
"album_viewer_appbar_share_err_leave": "Impossible de quitter l'album",
|
||||||
@@ -22,12 +22,12 @@
|
|||||||
"album_viewer_appbar_share_leave": "Quitter l'album",
|
"album_viewer_appbar_share_leave": "Quitter l'album",
|
||||||
"album_viewer_appbar_share_remove": "Retirer de l'album",
|
"album_viewer_appbar_share_remove": "Retirer de l'album",
|
||||||
"album_viewer_page_share_add_users": "Ajouter des utilisateurs",
|
"album_viewer_page_share_add_users": "Ajouter des utilisateurs",
|
||||||
"all_people_page_title": "People",
|
"all_people_page_title": "Personnes",
|
||||||
"all_videos_page_title": "Videos",
|
"all_videos_page_title": "Vidéos",
|
||||||
"archive_page_no_archived_assets": "No archived assets found",
|
"archive_page_no_archived_assets": "Aucun élément archivé n'a été trouvé",
|
||||||
"archive_page_title": "Archive ({})",
|
"archive_page_title": "Archive ({})",
|
||||||
"asset_list_layout_settings_dynamic_layout_title": "Affichage dynamique",
|
"asset_list_layout_settings_dynamic_layout_title": "Affichage dynamique",
|
||||||
"asset_list_layout_settings_group_automatically": "Automatic",
|
"asset_list_layout_settings_group_automatically": "Automatique",
|
||||||
"asset_list_layout_settings_group_by": "Grouper les éléments par",
|
"asset_list_layout_settings_group_by": "Grouper les éléments par",
|
||||||
"asset_list_layout_settings_group_by_month": "Mois",
|
"asset_list_layout_settings_group_by_month": "Mois",
|
||||||
"asset_list_layout_settings_group_by_month_day": "Mois + jour",
|
"asset_list_layout_settings_group_by_month_day": "Mois + jour",
|
||||||
@@ -92,6 +92,11 @@
|
|||||||
"backup_controller_page_uploading_file_info": "Transfert des informations du fichier",
|
"backup_controller_page_uploading_file_info": "Transfert des informations du fichier",
|
||||||
"backup_err_only_album": "Impossible de retirer le seul album",
|
"backup_err_only_album": "Impossible de retirer le seul album",
|
||||||
"backup_info_card_assets": "éléments",
|
"backup_info_card_assets": "éléments",
|
||||||
|
"backup_manual_cancelled": "Cancelled",
|
||||||
|
"backup_manual_failed": "Failed",
|
||||||
|
"backup_manual_in_progress": "Upload already in progress. Try after sometime",
|
||||||
|
"backup_manual_success": "Success",
|
||||||
|
"backup_manual_title": "Upload status",
|
||||||
"cache_settings_album_thumbnails": "Miniatures de la page bibliothèque ({} éléments)",
|
"cache_settings_album_thumbnails": "Miniatures de la page bibliothèque ({} éléments)",
|
||||||
"cache_settings_clear_cache_button": "Effacer le cache",
|
"cache_settings_clear_cache_button": "Effacer le cache",
|
||||||
"cache_settings_clear_cache_button_title": "Efface le cache de l'application. Cela aura un impact significatif sur les performances de l'application jusqu'à ce que le cache soit reconstruit.",
|
"cache_settings_clear_cache_button_title": "Efface le cache de l'application. Cela aura un impact significatif sur les performances de l'application jusqu'à ce que le cache soit reconstruit.",
|
||||||
@@ -113,7 +118,7 @@
|
|||||||
"common_add_to_album": "Ajouter à l'album",
|
"common_add_to_album": "Ajouter à l'album",
|
||||||
"common_change_password": "Modifier le mot de passe",
|
"common_change_password": "Modifier le mot de passe",
|
||||||
"common_create_new_album": "Créer un nouvel album",
|
"common_create_new_album": "Créer un nouvel album",
|
||||||
"common_server_error": "Please check your network connection, make sure the server is reachable and app/server versions are compatible.",
|
"common_server_error": "Veuillez vérifier votre connexion réseau, vous assurer que le serveur est accessible et que les versions de l'application et du serveur sont compatibles.",
|
||||||
"common_shared": "Partagé",
|
"common_shared": "Partagé",
|
||||||
"control_bottom_app_bar_add_to_album": "Ajouter à l'album",
|
"control_bottom_app_bar_add_to_album": "Ajouter à l'album",
|
||||||
"control_bottom_app_bar_album_info": "{} éléments",
|
"control_bottom_app_bar_album_info": "{} éléments",
|
||||||
@@ -123,14 +128,14 @@
|
|||||||
"control_bottom_app_bar_delete": "Supprimer",
|
"control_bottom_app_bar_delete": "Supprimer",
|
||||||
"control_bottom_app_bar_favorite": "Favoris",
|
"control_bottom_app_bar_favorite": "Favoris",
|
||||||
"control_bottom_app_bar_share": "Partager",
|
"control_bottom_app_bar_share": "Partager",
|
||||||
"control_bottom_app_bar_unarchive": "Unarchive",
|
"control_bottom_app_bar_unarchive": "Désarchiver",
|
||||||
"create_album_page_untitled": "Sans titre",
|
"create_album_page_untitled": "Sans titre",
|
||||||
"create_shared_album_page_create": "Créer",
|
"create_shared_album_page_create": "Créer",
|
||||||
"create_shared_album_page_share": "Partager",
|
"create_shared_album_page_share": "Partager",
|
||||||
"create_shared_album_page_share_add_assets": "AJOUTER DES ÉLÉMENTS",
|
"create_shared_album_page_share_add_assets": "AJOUTER DES ÉLÉMENTS",
|
||||||
"create_shared_album_page_share_select_photos": "Sélectionner les photos",
|
"create_shared_album_page_share_select_photos": "Sélectionner les photos",
|
||||||
"curated_location_page_title": "Places",
|
"curated_location_page_title": "Places",
|
||||||
"curated_object_page_title": "Things",
|
"curated_object_page_title": "Objets",
|
||||||
"daily_title_text_date": "E, dd MMM",
|
"daily_title_text_date": "E, dd MMM",
|
||||||
"daily_title_text_date_year": "E, dd MMM, yyyy",
|
"daily_title_text_date_year": "E, dd MMM, yyyy",
|
||||||
"date_format": "E, LLL d, y • h:mm a",
|
"date_format": "E, LLL d, y • h:mm a",
|
||||||
@@ -138,8 +143,8 @@
|
|||||||
"delete_dialog_cancel": "Annuler",
|
"delete_dialog_cancel": "Annuler",
|
||||||
"delete_dialog_ok": "Supprimer",
|
"delete_dialog_ok": "Supprimer",
|
||||||
"delete_dialog_title": "Supprimer définitivement",
|
"delete_dialog_title": "Supprimer définitivement",
|
||||||
"description_input_hint_text": "Add description...",
|
"description_input_hint_text": "Ajouter une description...",
|
||||||
"description_input_submit_error": "Error updating description, check the log for more details",
|
"description_input_submit_error": "Erreur de mise à jour de la description, vérifier le journal pour plus de détails",
|
||||||
"exif_bottom_sheet_description": "Ajouter une description...",
|
"exif_bottom_sheet_description": "Ajouter une description...",
|
||||||
"exif_bottom_sheet_details": "DÉTAILS",
|
"exif_bottom_sheet_details": "DÉTAILS",
|
||||||
"exif_bottom_sheet_location": "LOCALISATION",
|
"exif_bottom_sheet_location": "LOCALISATION",
|
||||||
@@ -147,94 +152,96 @@
|
|||||||
"experimental_settings_new_asset_list_title": "Activer la grille de photos expérimentale",
|
"experimental_settings_new_asset_list_title": "Activer la grille de photos expérimentale",
|
||||||
"experimental_settings_subtitle": "Utilisez à vos dépends !",
|
"experimental_settings_subtitle": "Utilisez à vos dépends !",
|
||||||
"experimental_settings_title": "Expérimental",
|
"experimental_settings_title": "Expérimental",
|
||||||
"favorites_page_no_favorites": "No favorite assets found",
|
"favorites_page_no_favorites": "Aucun élément favori n'a été trouvé",
|
||||||
"favorites_page_title": "Favoris",
|
"favorites_page_title": "Favoris",
|
||||||
"home_page_add_to_album_conflicts": "{added} éléments ajoutés à l'album {album}. Les éléments {failed} sont déjà dans l'album.",
|
"home_page_add_to_album_conflicts": "{added} éléments ajoutés à l'album {album}. Les éléments {failed} sont déjà dans l'album.",
|
||||||
"home_page_add_to_album_err_local": "Impossible d'ajouter des éléments locaux aux albums pour le moment, étape ignorée",
|
"home_page_add_to_album_err_local": "Impossible d'ajouter des éléments locaux aux albums pour le moment, étape ignorée",
|
||||||
"home_page_add_to_album_success": "{added} éléments ajoutés à l'album {album}.",
|
"home_page_add_to_album_success": "{added} éléments ajoutés à l'album {album}.",
|
||||||
"home_page_archive_err_local": "Can not archive local assets yet, skipping",
|
"home_page_archive_err_local": "Impossible d'archiver les ressources locales pour l'instant, étape ignorée",
|
||||||
"home_page_building_timeline": "Construction de la chronologie",
|
"home_page_building_timeline": "Construction de la chronologie",
|
||||||
"home_page_favorite_err_local": "Impossible d'ajouter des éléments locaux aux favoris pour le moment, étape ignorée",
|
"home_page_favorite_err_local": "Impossible d'ajouter des éléments locaux aux favoris pour le moment, étape ignorée",
|
||||||
"home_page_first_time_notice": "Si c'est la première fois que vous utilisez l'application, veillez à choisir un ou plusieurs albums de sauvegarde afin que la chronologie puisse alimenter les photos et les vidéos de cet ou ces albums.",
|
"home_page_first_time_notice": "Si c'est la première fois que vous utilisez l'application, veillez à choisir un ou plusieurs albums de sauvegarde afin que la chronologie puisse alimenter les photos et les vidéos de cet ou ces albums.",
|
||||||
|
"home_page_upload_err_limit": "Can only upload a maximum of 30 assets at a time, skipping",
|
||||||
"image_viewer_page_state_provider_download_error": "Erreur de téléchargement",
|
"image_viewer_page_state_provider_download_error": "Erreur de téléchargement",
|
||||||
"image_viewer_page_state_provider_download_success": "Téléchargement réussi",
|
"image_viewer_page_state_provider_download_success": "Téléchargement réussi",
|
||||||
"library_page_albums": "Albums",
|
"library_page_albums": "Albums",
|
||||||
"library_page_archive": "Archive",
|
"library_page_archive": "Archive",
|
||||||
"library_page_device_albums": "Albums on Device",
|
"library_page_device_albums": "Albums sur l'appareil",
|
||||||
"library_page_favorites": "Favoris",
|
"library_page_favorites": "Favoris",
|
||||||
"library_page_new_album": "Nouvel album",
|
"library_page_new_album": "Nouvel album",
|
||||||
"library_page_sharing": "Partage",
|
"library_page_sharing": "Partage",
|
||||||
"library_page_sort_created": "Créations les plus récentes",
|
"library_page_sort_created": "Créations les plus récentes",
|
||||||
"library_page_sort_title": "Titre de l'album",
|
"library_page_sort_title": "Titre de l'album",
|
||||||
"login_form_api_exception": "API exception. Please check the server URL and try again.",
|
"login_disabled": "Login has been disabled",
|
||||||
|
"login_form_api_exception": "Erreur de l'API. Veuillez vérifier l'URL du serveur et et réessayer.",
|
||||||
"login_form_button_text": "Connexion",
|
"login_form_button_text": "Connexion",
|
||||||
"login_form_email_hint": "votreemail@email.com",
|
"login_form_email_hint": "votreemail@email.com",
|
||||||
"login_form_endpoint_hint": "http://adresse-ip-serveur:port/api",
|
"login_form_endpoint_hint": "http://adresse-ip-serveur:port/api",
|
||||||
"login_form_endpoint_url": "URL du point d'accès au serveur",
|
"login_form_endpoint_url": "URL du point d'accès au serveur",
|
||||||
"login_form_err_http": "Veuillez préciser http:// ou https://",
|
"login_form_err_http": "Veuillez préciser http:// ou https://",
|
||||||
"login_form_err_invalid_email": "Email invalide",
|
"login_form_err_invalid_email": "E-mail invalide",
|
||||||
"login_form_err_invalid_url": "URL invalide",
|
"login_form_err_invalid_url": "URL invalide",
|
||||||
"login_form_err_leading_whitespace": "Espace en début de ligne",
|
"login_form_err_leading_whitespace": "Espace en début de ligne",
|
||||||
"login_form_err_trailing_whitespace": "Espace de fin de ligne",
|
"login_form_err_trailing_whitespace": "Espace de fin de ligne",
|
||||||
"login_form_failed_get_oauth_server_config": "Erreur de connexion par OAuth, vérifiez l\"URL du serveur",
|
"login_form_failed_get_oauth_server_config": "Erreur de connexion par OAuth, vérifiez l\"URL du serveur",
|
||||||
"login_form_failed_get_oauth_server_disable": "La fonctionnalité OAuth n'est pas disponible sur ce serveur",
|
"login_form_failed_get_oauth_server_disable": "La fonctionnalité OAuth n'est pas disponible sur ce serveur",
|
||||||
"login_form_failed_login": "Erreur de connexion, vérifiez l'url du serveur, l'email et le mot de passe",
|
"login_form_failed_login": "Erreur de connexion, vérifiez l'url du serveur, l'email et le mot de passe",
|
||||||
"login_form_label_email": "Email",
|
"login_form_label_email": "E-mail",
|
||||||
"login_form_label_password": "Mot de passe",
|
"login_form_label_password": "Mot de passe",
|
||||||
"login_form_next_button": "Next",
|
"login_form_next_button": "Suivant",
|
||||||
"login_form_password_hint": "mot de passe",
|
"login_form_password_hint": "mot de passe",
|
||||||
"login_form_save_login": "Rester connecté",
|
"login_form_save_login": "Rester connecté",
|
||||||
"login_form_server_empty": "Enter a server URL.",
|
"login_form_server_empty": "Saisissez l'URL du serveur.",
|
||||||
"login_form_server_error": "Could not connect to server.",
|
"login_form_server_error": "Impossible de se connecter au serveur.",
|
||||||
"monthly_title_text_date_format": "MMMM y",
|
"monthly_title_text_date_format": "MMMM y",
|
||||||
"motion_photos_page_title": "Motion Photos",
|
"motion_photos_page_title": "Photos avec mouvement",
|
||||||
"notification_permission_dialog_cancel": "Annuler",
|
"notification_permission_dialog_cancel": "Annuler",
|
||||||
"notification_permission_dialog_content": "Pour activer les notifications, allez dans Paramètres et sélectionnez Autoriser.",
|
"notification_permission_dialog_content": "Pour activer les notifications, allez dans Paramètres et sélectionnez Autoriser.",
|
||||||
"notification_permission_dialog_settings": "Paramètres",
|
"notification_permission_dialog_settings": "Paramètres",
|
||||||
"notification_permission_list_tile_content": "Accordez la permission d'activer les notifications.",
|
"notification_permission_list_tile_content": "Accordez la permission d'activer les notifications.",
|
||||||
"notification_permission_list_tile_enable_button": "Activer les notifications",
|
"notification_permission_list_tile_enable_button": "Activer les notifications",
|
||||||
"notification_permission_list_tile_title": "Permission de notification",
|
"notification_permission_list_tile_title": "Permission de notification",
|
||||||
"partner_page_add_partner": "Add partner",
|
"partner_page_add_partner": "Ajouter un partenaire",
|
||||||
"partner_page_empty_message": "Your photos are not yet shared with any partner.",
|
"partner_page_empty_message": "Vos photos ne sont pas encore partagées avec un partenaire.",
|
||||||
"partner_page_no_more_users": "No more users to add",
|
"partner_page_no_more_users": "Plus d'utilisateurs à ajouter",
|
||||||
"partner_page_partner_add_failed": "Failed to add partner",
|
"partner_page_partner_add_failed": "Échec de l'ajout d'un partenaire",
|
||||||
"partner_page_select_partner": "Select partner",
|
"partner_page_select_partner": "Sélectionner un partenaire",
|
||||||
"partner_page_shared_to_title": "Shared to",
|
"partner_page_shared_to_title": "Partagé avec",
|
||||||
"partner_page_stop_sharing_content": "{} will no longer be able to access your photos.",
|
"partner_page_stop_sharing_content": "{} ne pourra plus accéder à vos photos.",
|
||||||
"partner_page_stop_sharing_title": "Stop sharing your photos?",
|
"partner_page_stop_sharing_title": "Arrêter de partager vos photos ?",
|
||||||
"partner_page_title": "Partner",
|
"partner_page_title": "Partenaire",
|
||||||
"permission_onboarding_continue_anyway": "Continue anyway",
|
"permission_onboarding_continue_anyway": "Continuer quand même",
|
||||||
"permission_onboarding_get_started": "Get started",
|
"permission_onboarding_get_started": "Commencer",
|
||||||
"permission_onboarding_go_to_settings": "Go to settings",
|
"permission_onboarding_go_to_settings": "Accéder aux paramètres",
|
||||||
"permission_onboarding_grant_permission": "Grant permission",
|
"permission_onboarding_grant_permission": "Accorder l'autorisation",
|
||||||
"permission_onboarding_log_out": "Log out",
|
"permission_onboarding_log_out": "Se déconnecter",
|
||||||
"permission_onboarding_permission_denied": "Permission denied. To use Immich, grant photo and video permissions in Settings.",
|
"permission_onboarding_permission_denied": "Permission refusée. Pour utiliser Immich, accordez lautorisation pour les photos et vidéos dans les Paramètres.",
|
||||||
"permission_onboarding_permission_granted": "Permission granted! You are all set.",
|
"permission_onboarding_permission_granted": "Permission accordée ! Vous êtes prêts.",
|
||||||
"permission_onboarding_permission_limited": "Permission limited. To let Immich backup and manage your entire gallery collection, grant photo and video permissions in Settings.",
|
"permission_onboarding_permission_limited": "Permission limitée. Pour permettre à Immich de sauvegarder et de gérer l'ensemble de votre bibliothèque, accordez l'autorisation pour les photos et vidéos dans les Paramètres.",
|
||||||
"permission_onboarding_request": "Immich requires permission to view your photos and videos.",
|
"permission_onboarding_request": "Immich demande l'autorisation de visionner vos photos et vidéo",
|
||||||
"profile_drawer_app_logs": "Journaux",
|
"profile_drawer_app_logs": "Journaux",
|
||||||
"profile_drawer_client_server_up_to_date": "Le client et le serveur sont à jour",
|
"profile_drawer_client_server_up_to_date": "Le client et le serveur sont à jour",
|
||||||
"profile_drawer_settings": "Paramètres",
|
"profile_drawer_settings": "Paramètres",
|
||||||
"profile_drawer_sign_out": "Se déconnecter",
|
"profile_drawer_sign_out": "Se déconnecter",
|
||||||
"recently_added_page_title": "Recently Added",
|
"recently_added_page_title": "Récemment ajouté",
|
||||||
"search_bar_hint": "Rechercher vos photos",
|
"search_bar_hint": "Rechercher vos photos",
|
||||||
"search_page_categories": "Categories",
|
"search_page_categories": "Catégories",
|
||||||
"search_page_favorites": "Favorites",
|
"search_page_favorites": "Favoris",
|
||||||
"search_page_motion_photos": "Motion Photos",
|
"search_page_motion_photos": "Photos avec mouvement",
|
||||||
"search_page_no_objects": "Aucune information disponible sur les objets",
|
"search_page_no_objects": "Aucune information disponible sur les objets",
|
||||||
"search_page_no_places": "Aucune information disponible sur la localisation",
|
"search_page_no_places": "Aucune information disponible sur la localisation",
|
||||||
"search_page_people": "People",
|
"search_page_people": "Personnes",
|
||||||
"search_page_places": "Lieux",
|
"search_page_places": "Lieux",
|
||||||
"search_page_recently_added": "Recently added",
|
"search_page_recently_added": "Récemment ajouté",
|
||||||
"search_page_screenshots": "Screenshots",
|
"search_page_screenshots": "Captures d'écran",
|
||||||
"search_page_selfies": "Selfies",
|
"search_page_selfies": "Selfies",
|
||||||
"search_page_things": "Objets",
|
"search_page_things": "Objets",
|
||||||
"search_page_videos": "Videos",
|
"search_page_videos": "Vidéos",
|
||||||
"search_page_view_all_button": "View all",
|
"search_page_view_all_button": "Voir tout",
|
||||||
"search_page_your_activity": "Your activity",
|
"search_page_your_activity": "Votre activité",
|
||||||
"search_result_page_new_search_hint": "Nouvelle recherche",
|
"search_result_page_new_search_hint": "Nouvelle recherche",
|
||||||
"search_suggestion_list_smart_search_hint_1": "Smart search is enabled by default, to search for metadata use the syntax ",
|
"search_suggestion_list_smart_search_hint_1": "La recherche intelligente est activée par défaut. Pour rechercher des métadonnées, utilisez la syntaxe suivante",
|
||||||
"search_suggestion_list_smart_search_hint_2": "m:your-search-term",
|
"search_suggestion_list_smart_search_hint_2": "m:votre-terme-de-recherche",
|
||||||
"select_additional_user_for_sharing_page_suggestions": "Suggestions",
|
"select_additional_user_for_sharing_page_suggestions": "Suggestions",
|
||||||
"select_user_for_sharing_page_err_album": "Échec de la création de l'album",
|
"select_user_for_sharing_page_err_album": "Échec de la création de l'album",
|
||||||
"select_user_for_sharing_page_share_suggestions": "Suggestions",
|
"select_user_for_sharing_page_share_suggestions": "Suggestions",
|
||||||
@@ -255,7 +262,7 @@
|
|||||||
"setting_notifications_single_progress_title": "Afficher la progression du détail de la sauvegarde en arrière-plan",
|
"setting_notifications_single_progress_title": "Afficher la progression du détail de la sauvegarde en arrière-plan",
|
||||||
"setting_notifications_subtitle": "Ajustez vos préférences de notification",
|
"setting_notifications_subtitle": "Ajustez vos préférences de notification",
|
||||||
"setting_notifications_title": "Notifications",
|
"setting_notifications_title": "Notifications",
|
||||||
"setting_notifications_total_progress_subtitle": "Progrès global du transfert (effectué/total des éléments)",
|
"setting_notifications_total_progress_subtitle": "Progression globale du transfert (effectué/total des éléments)",
|
||||||
"setting_notifications_total_progress_title": "Afficher la progression totale de la sauvegarde en arrière-plan",
|
"setting_notifications_total_progress_title": "Afficher la progression totale de la sauvegarde en arrière-plan",
|
||||||
"setting_pages_app_bar_settings": "Paramètres",
|
"setting_pages_app_bar_settings": "Paramètres",
|
||||||
"settings_require_restart": "Veuillez redémarrer Immich pour appliquer ce paramètre",
|
"settings_require_restart": "Veuillez redémarrer Immich pour appliquer ce paramètre",
|
||||||
@@ -284,6 +291,10 @@
|
|||||||
"theme_setting_theme_title": "Thème",
|
"theme_setting_theme_title": "Thème",
|
||||||
"theme_setting_three_stage_loading_subtitle": "Le chargement en trois étapes peut améliorer les performances de chargement, mais entraîne une augmentation significative de la charge du réseau.",
|
"theme_setting_three_stage_loading_subtitle": "Le chargement en trois étapes peut améliorer les performances de chargement, mais entraîne une augmentation significative de la charge du réseau.",
|
||||||
"theme_setting_three_stage_loading_title": "Activer le chargement en trois étapes",
|
"theme_setting_three_stage_loading_title": "Activer le chargement en trois étapes",
|
||||||
|
"upload_dialog_cancel": "Cancel",
|
||||||
|
"upload_dialog_info": "Do you want to backup the selected Asset(s) to the server?",
|
||||||
|
"upload_dialog_ok": "Upload",
|
||||||
|
"upload_dialog_title": "Upload Asset",
|
||||||
"version_announcement_overlay_ack": "Confirmer",
|
"version_announcement_overlay_ack": "Confirmer",
|
||||||
"version_announcement_overlay_release_notes": "notes de mise à jour",
|
"version_announcement_overlay_release_notes": "notes de mise à jour",
|
||||||
"version_announcement_overlay_text_1": "Bonjour, une nouvelle version de",
|
"version_announcement_overlay_text_1": "Bonjour, une nouvelle version de",
|
||||||
|
|||||||
@@ -92,6 +92,11 @@
|
|||||||
"backup_controller_page_uploading_file_info": "Uploading file info",
|
"backup_controller_page_uploading_file_info": "Uploading file info",
|
||||||
"backup_err_only_album": "Cannot remove the only album",
|
"backup_err_only_album": "Cannot remove the only album",
|
||||||
"backup_info_card_assets": "assets",
|
"backup_info_card_assets": "assets",
|
||||||
|
"backup_manual_cancelled": "Cancelled",
|
||||||
|
"backup_manual_failed": "Failed",
|
||||||
|
"backup_manual_in_progress": "Upload already in progress. Try after sometime",
|
||||||
|
"backup_manual_success": "Success",
|
||||||
|
"backup_manual_title": "Upload status",
|
||||||
"cache_settings_album_thumbnails": "Library page thumbnails ({} assets)",
|
"cache_settings_album_thumbnails": "Library page thumbnails ({} assets)",
|
||||||
"cache_settings_clear_cache_button": "Clear cache",
|
"cache_settings_clear_cache_button": "Clear cache",
|
||||||
"cache_settings_clear_cache_button_title": "Clears the app's cache. This will significantly impact the app's performance until the cache has rebuilt.",
|
"cache_settings_clear_cache_button_title": "Clears the app's cache. This will significantly impact the app's performance until the cache has rebuilt.",
|
||||||
@@ -156,6 +161,7 @@
|
|||||||
"home_page_building_timeline": "Building the timeline",
|
"home_page_building_timeline": "Building the timeline",
|
||||||
"home_page_favorite_err_local": "Can not favorite local assets yet, skipping",
|
"home_page_favorite_err_local": "Can not favorite local assets yet, skipping",
|
||||||
"home_page_first_time_notice": "If this is your first time using the app, please make sure to choose a backup album(s) so that the timeline can populate photos and videos in the album(s).",
|
"home_page_first_time_notice": "If this is your first time using the app, please make sure to choose a backup album(s) so that the timeline can populate photos and videos in the album(s).",
|
||||||
|
"home_page_upload_err_limit": "Can only upload a maximum of 30 assets at a time, skipping",
|
||||||
"image_viewer_page_state_provider_download_error": "Download Error",
|
"image_viewer_page_state_provider_download_error": "Download Error",
|
||||||
"image_viewer_page_state_provider_download_success": "Download Success",
|
"image_viewer_page_state_provider_download_success": "Download Success",
|
||||||
"library_page_albums": "Albums",
|
"library_page_albums": "Albums",
|
||||||
@@ -166,6 +172,7 @@
|
|||||||
"library_page_sharing": "Sharing",
|
"library_page_sharing": "Sharing",
|
||||||
"library_page_sort_created": "Most recently created",
|
"library_page_sort_created": "Most recently created",
|
||||||
"library_page_sort_title": "Album title",
|
"library_page_sort_title": "Album title",
|
||||||
|
"login_disabled": "Login has been disabled",
|
||||||
"login_form_api_exception": "API exception. Please check the server URL and try again.",
|
"login_form_api_exception": "API exception. Please check the server URL and try again.",
|
||||||
"login_form_button_text": "Login",
|
"login_form_button_text": "Login",
|
||||||
"login_form_email_hint": "youremail@email.com",
|
"login_form_email_hint": "youremail@email.com",
|
||||||
@@ -284,6 +291,10 @@
|
|||||||
"theme_setting_theme_title": "Theme",
|
"theme_setting_theme_title": "Theme",
|
||||||
"theme_setting_three_stage_loading_subtitle": "Three-stage loading might increase the loading performance but causes significantly higher network load",
|
"theme_setting_three_stage_loading_subtitle": "Three-stage loading might increase the loading performance but causes significantly higher network load",
|
||||||
"theme_setting_three_stage_loading_title": "Enable three-stage loading",
|
"theme_setting_three_stage_loading_title": "Enable three-stage loading",
|
||||||
|
"upload_dialog_cancel": "Cancel",
|
||||||
|
"upload_dialog_info": "Do you want to backup the selected Asset(s) to the server?",
|
||||||
|
"upload_dialog_ok": "Upload",
|
||||||
|
"upload_dialog_title": "Upload Asset",
|
||||||
"version_announcement_overlay_ack": "Acknowledge",
|
"version_announcement_overlay_ack": "Acknowledge",
|
||||||
"version_announcement_overlay_release_notes": "release notes",
|
"version_announcement_overlay_release_notes": "release notes",
|
||||||
"version_announcement_overlay_text_1": "Hi friend, there is a new release of",
|
"version_announcement_overlay_text_1": "Hi friend, there is a new release of",
|
||||||
|
|||||||
@@ -92,6 +92,11 @@
|
|||||||
"backup_controller_page_uploading_file_info": "Uploading file info",
|
"backup_controller_page_uploading_file_info": "Uploading file info",
|
||||||
"backup_err_only_album": "Cannot remove the only album",
|
"backup_err_only_album": "Cannot remove the only album",
|
||||||
"backup_info_card_assets": "assets",
|
"backup_info_card_assets": "assets",
|
||||||
|
"backup_manual_cancelled": "Cancelled",
|
||||||
|
"backup_manual_failed": "Failed",
|
||||||
|
"backup_manual_in_progress": "Upload already in progress. Try after sometime",
|
||||||
|
"backup_manual_success": "Success",
|
||||||
|
"backup_manual_title": "Upload status",
|
||||||
"cache_settings_album_thumbnails": "Library page thumbnails ({} assets)",
|
"cache_settings_album_thumbnails": "Library page thumbnails ({} assets)",
|
||||||
"cache_settings_clear_cache_button": "Clear cache",
|
"cache_settings_clear_cache_button": "Clear cache",
|
||||||
"cache_settings_clear_cache_button_title": "Clears the app's cache. This will significantly impact the app's performance until the cache has rebuilt.",
|
"cache_settings_clear_cache_button_title": "Clears the app's cache. This will significantly impact the app's performance until the cache has rebuilt.",
|
||||||
@@ -156,6 +161,7 @@
|
|||||||
"home_page_building_timeline": "Building the timeline",
|
"home_page_building_timeline": "Building the timeline",
|
||||||
"home_page_favorite_err_local": "Helyi médiát még nem lehet a kedvencek közé tenni. Kihagyjuk.",
|
"home_page_favorite_err_local": "Helyi médiát még nem lehet a kedvencek közé tenni. Kihagyjuk.",
|
||||||
"home_page_first_time_notice": "If this is your first time using the app, please make sure to choose a backup album(s) so that the timeline can populate photos and videos in the album(s).",
|
"home_page_first_time_notice": "If this is your first time using the app, please make sure to choose a backup album(s) so that the timeline can populate photos and videos in the album(s).",
|
||||||
|
"home_page_upload_err_limit": "Can only upload a maximum of 30 assets at a time, skipping",
|
||||||
"image_viewer_page_state_provider_download_error": "Letöltési Hiba",
|
"image_viewer_page_state_provider_download_error": "Letöltési Hiba",
|
||||||
"image_viewer_page_state_provider_download_success": "Letöltés Sikeres",
|
"image_viewer_page_state_provider_download_success": "Letöltés Sikeres",
|
||||||
"library_page_albums": "Albums",
|
"library_page_albums": "Albums",
|
||||||
@@ -166,6 +172,7 @@
|
|||||||
"library_page_sharing": "Sharing",
|
"library_page_sharing": "Sharing",
|
||||||
"library_page_sort_created": "Most recently created",
|
"library_page_sort_created": "Most recently created",
|
||||||
"library_page_sort_title": "Album title",
|
"library_page_sort_title": "Album title",
|
||||||
|
"login_disabled": "Login has been disabled",
|
||||||
"login_form_api_exception": "API hiba. Kérljük, ellenőrid a szerver címét, majd próbáld újra.",
|
"login_form_api_exception": "API hiba. Kérljük, ellenőrid a szerver címét, majd próbáld újra.",
|
||||||
"login_form_button_text": "Login",
|
"login_form_button_text": "Login",
|
||||||
"login_form_email_hint": "youremail@email.com",
|
"login_form_email_hint": "youremail@email.com",
|
||||||
@@ -284,6 +291,10 @@
|
|||||||
"theme_setting_theme_title": "Theme",
|
"theme_setting_theme_title": "Theme",
|
||||||
"theme_setting_three_stage_loading_subtitle": "Three-stage loading might increase the loading performance but causes significantly higher network load",
|
"theme_setting_three_stage_loading_subtitle": "Three-stage loading might increase the loading performance but causes significantly higher network load",
|
||||||
"theme_setting_three_stage_loading_title": "Enable three-stage loading",
|
"theme_setting_three_stage_loading_title": "Enable three-stage loading",
|
||||||
|
"upload_dialog_cancel": "Cancel",
|
||||||
|
"upload_dialog_info": "Do you want to backup the selected Asset(s) to the server?",
|
||||||
|
"upload_dialog_ok": "Upload",
|
||||||
|
"upload_dialog_title": "Upload Asset",
|
||||||
"version_announcement_overlay_ack": "Acknowledge",
|
"version_announcement_overlay_ack": "Acknowledge",
|
||||||
"version_announcement_overlay_release_notes": "release notes",
|
"version_announcement_overlay_release_notes": "release notes",
|
||||||
"version_announcement_overlay_text_1": "Hi friend, there is a new release of",
|
"version_announcement_overlay_text_1": "Hi friend, there is a new release of",
|
||||||
|
|||||||
@@ -92,6 +92,11 @@
|
|||||||
"backup_controller_page_uploading_file_info": "Caricando informazioni sul file",
|
"backup_controller_page_uploading_file_info": "Caricando informazioni sul file",
|
||||||
"backup_err_only_album": "Non è possibile rimuovere l'unico album",
|
"backup_err_only_album": "Non è possibile rimuovere l'unico album",
|
||||||
"backup_info_card_assets": "oggetti ",
|
"backup_info_card_assets": "oggetti ",
|
||||||
|
"backup_manual_cancelled": "Cancelled",
|
||||||
|
"backup_manual_failed": "Failed",
|
||||||
|
"backup_manual_in_progress": "Upload already in progress. Try after sometime",
|
||||||
|
"backup_manual_success": "Success",
|
||||||
|
"backup_manual_title": "Upload status",
|
||||||
"cache_settings_album_thumbnails": "Anteprime pagine librerie ({} assets)",
|
"cache_settings_album_thumbnails": "Anteprime pagine librerie ({} assets)",
|
||||||
"cache_settings_clear_cache_button": "Cancella cache",
|
"cache_settings_clear_cache_button": "Cancella cache",
|
||||||
"cache_settings_clear_cache_button_title": "Cancella la cache dell'app. Questo impatterà significativamente le prestazioni dell''app fino a quando la cache non sarà rigenerata.",
|
"cache_settings_clear_cache_button_title": "Cancella la cache dell'app. Questo impatterà significativamente le prestazioni dell''app fino a quando la cache non sarà rigenerata.",
|
||||||
@@ -156,6 +161,7 @@
|
|||||||
"home_page_building_timeline": "Costruendo il Timeline",
|
"home_page_building_timeline": "Costruendo il Timeline",
|
||||||
"home_page_favorite_err_local": "Non puoi aggiungere tra i preferiti le foto ancora non caricate",
|
"home_page_favorite_err_local": "Non puoi aggiungere tra i preferiti le foto ancora non caricate",
|
||||||
"home_page_first_time_notice": "Se è la prima volta che usi l'app, assicurati di scegliere gli album per avere il Timeline con immagini e video",
|
"home_page_first_time_notice": "Se è la prima volta che usi l'app, assicurati di scegliere gli album per avere il Timeline con immagini e video",
|
||||||
|
"home_page_upload_err_limit": "Can only upload a maximum of 30 assets at a time, skipping",
|
||||||
"image_viewer_page_state_provider_download_error": "Errore nel Download",
|
"image_viewer_page_state_provider_download_error": "Errore nel Download",
|
||||||
"image_viewer_page_state_provider_download_success": "Download con successo",
|
"image_viewer_page_state_provider_download_success": "Download con successo",
|
||||||
"library_page_albums": "Album",
|
"library_page_albums": "Album",
|
||||||
@@ -166,6 +172,7 @@
|
|||||||
"library_page_sharing": "Condividendo",
|
"library_page_sharing": "Condividendo",
|
||||||
"library_page_sort_created": "Creato il più recente",
|
"library_page_sort_created": "Creato il più recente",
|
||||||
"library_page_sort_title": "Titolo album",
|
"library_page_sort_title": "Titolo album",
|
||||||
|
"login_disabled": "Login has been disabled",
|
||||||
"login_form_api_exception": "API error, per favore ricontrolli URL del server e riprovi",
|
"login_form_api_exception": "API error, per favore ricontrolli URL del server e riprovi",
|
||||||
"login_form_button_text": "Login",
|
"login_form_button_text": "Login",
|
||||||
"login_form_email_hint": "tuaemail@email.com",
|
"login_form_email_hint": "tuaemail@email.com",
|
||||||
@@ -284,6 +291,10 @@
|
|||||||
"theme_setting_theme_title": "Tema",
|
"theme_setting_theme_title": "Tema",
|
||||||
"theme_setting_three_stage_loading_subtitle": "Il caricamento a tre stage aumenterà le performance di caricamento ma anche il consumo di banda",
|
"theme_setting_three_stage_loading_subtitle": "Il caricamento a tre stage aumenterà le performance di caricamento ma anche il consumo di banda",
|
||||||
"theme_setting_three_stage_loading_title": "Abilita il caricamento a tre stage",
|
"theme_setting_three_stage_loading_title": "Abilita il caricamento a tre stage",
|
||||||
|
"upload_dialog_cancel": "Cancel",
|
||||||
|
"upload_dialog_info": "Do you want to backup the selected Asset(s) to the server?",
|
||||||
|
"upload_dialog_ok": "Upload",
|
||||||
|
"upload_dialog_title": "Upload Asset",
|
||||||
"version_announcement_overlay_ack": "Presa visione",
|
"version_announcement_overlay_ack": "Presa visione",
|
||||||
"version_announcement_overlay_release_notes": "note di rilascio ",
|
"version_announcement_overlay_release_notes": "note di rilascio ",
|
||||||
"version_announcement_overlay_text_1": "Ciao, c'è una nuova versione di",
|
"version_announcement_overlay_text_1": "Ciao, c'è una nuova versione di",
|
||||||
|
|||||||
@@ -92,6 +92,11 @@
|
|||||||
"backup_controller_page_uploading_file_info": "アップロード中のファイル",
|
"backup_controller_page_uploading_file_info": "アップロード中のファイル",
|
||||||
"backup_err_only_album": "最低1つのアルバムを選択してください",
|
"backup_err_only_album": "最低1つのアルバムを選択してください",
|
||||||
"backup_info_card_assets": "写真と動画",
|
"backup_info_card_assets": "写真と動画",
|
||||||
|
"backup_manual_cancelled": "Cancelled",
|
||||||
|
"backup_manual_failed": "Failed",
|
||||||
|
"backup_manual_in_progress": "Upload already in progress. Try after sometime",
|
||||||
|
"backup_manual_success": "Success",
|
||||||
|
"backup_manual_title": "Upload status",
|
||||||
"cache_settings_album_thumbnails": "ライブラリのサムネイル ({}枚)",
|
"cache_settings_album_thumbnails": "ライブラリのサムネイル ({}枚)",
|
||||||
"cache_settings_clear_cache_button": "キャッシュをクリア",
|
"cache_settings_clear_cache_button": "キャッシュをクリア",
|
||||||
"cache_settings_clear_cache_button_title": "キャッシュを削除(キャッシュ再生成までアプリのパフォーマンスが著しく低下)",
|
"cache_settings_clear_cache_button_title": "キャッシュを削除(キャッシュ再生成までアプリのパフォーマンスが著しく低下)",
|
||||||
@@ -156,6 +161,7 @@
|
|||||||
"home_page_building_timeline": "タイムライン構築中",
|
"home_page_building_timeline": "タイムライン構築中",
|
||||||
"home_page_favorite_err_local": "まだアップロードされてない項目はお気に入り登録できません",
|
"home_page_favorite_err_local": "まだアップロードされてない項目はお気に入り登録できません",
|
||||||
"home_page_first_time_notice": "はじめてアプリを使う場合、タイムラインに写真を表示するためにアルバムを選択してください",
|
"home_page_first_time_notice": "はじめてアプリを使う場合、タイムラインに写真を表示するためにアルバムを選択してください",
|
||||||
|
"home_page_upload_err_limit": "Can only upload a maximum of 30 assets at a time, skipping",
|
||||||
"image_viewer_page_state_provider_download_error": "ダウンロード失敗",
|
"image_viewer_page_state_provider_download_error": "ダウンロード失敗",
|
||||||
"image_viewer_page_state_provider_download_success": "ダウンロード成功",
|
"image_viewer_page_state_provider_download_success": "ダウンロード成功",
|
||||||
"library_page_albums": "アルバム",
|
"library_page_albums": "アルバム",
|
||||||
@@ -166,6 +172,7 @@
|
|||||||
"library_page_sharing": "共有中",
|
"library_page_sharing": "共有中",
|
||||||
"library_page_sort_created": "作成日時",
|
"library_page_sort_created": "作成日時",
|
||||||
"library_page_sort_title": "アルバム名",
|
"library_page_sort_title": "アルバム名",
|
||||||
|
"login_disabled": "Login has been disabled",
|
||||||
"login_form_api_exception": "APIエラー。URLをチェックしてもう一度試してください",
|
"login_form_api_exception": "APIエラー。URLをチェックしてもう一度試してください",
|
||||||
"login_form_button_text": "ログイン",
|
"login_form_button_text": "ログイン",
|
||||||
"login_form_email_hint": "hoge@email.com",
|
"login_form_email_hint": "hoge@email.com",
|
||||||
@@ -284,6 +291,10 @@
|
|||||||
"theme_setting_theme_title": "テーマ",
|
"theme_setting_theme_title": "テーマ",
|
||||||
"theme_setting_three_stage_loading_subtitle": "三段階読み込みを有効にするとパフォーマンスが改善する可能性がありますが、ネットワーク負荷が著しく増加します",
|
"theme_setting_three_stage_loading_subtitle": "三段階読み込みを有効にするとパフォーマンスが改善する可能性がありますが、ネットワーク負荷が著しく増加します",
|
||||||
"theme_setting_three_stage_loading_title": "三段階読み込みをオンにする",
|
"theme_setting_three_stage_loading_title": "三段階読み込みをオンにする",
|
||||||
|
"upload_dialog_cancel": "Cancel",
|
||||||
|
"upload_dialog_info": "Do you want to backup the selected Asset(s) to the server?",
|
||||||
|
"upload_dialog_ok": "Upload",
|
||||||
|
"upload_dialog_title": "Upload Asset",
|
||||||
"version_announcement_overlay_ack": "了解",
|
"version_announcement_overlay_ack": "了解",
|
||||||
"version_announcement_overlay_release_notes": "更新情報",
|
"version_announcement_overlay_release_notes": "更新情報",
|
||||||
"version_announcement_overlay_text_1": "こんにちは、またはこんばんは!新しい",
|
"version_announcement_overlay_text_1": "こんにちは、またはこんばんは!新しい",
|
||||||
|
|||||||
@@ -92,6 +92,11 @@
|
|||||||
"backup_controller_page_uploading_file_info": "파일 정보 업로드 중",
|
"backup_controller_page_uploading_file_info": "파일 정보 업로드 중",
|
||||||
"backup_err_only_album": "유일한 앨범은 제거할 수 없습니다",
|
"backup_err_only_album": "유일한 앨범은 제거할 수 없습니다",
|
||||||
"backup_info_card_assets": "미디어",
|
"backup_info_card_assets": "미디어",
|
||||||
|
"backup_manual_cancelled": "Cancelled",
|
||||||
|
"backup_manual_failed": "Failed",
|
||||||
|
"backup_manual_in_progress": "Upload already in progress. Try after sometime",
|
||||||
|
"backup_manual_success": "Success",
|
||||||
|
"backup_manual_title": "Upload status",
|
||||||
"cache_settings_album_thumbnails": "라이브러리 페이지 썸네일 ({} 미디어)",
|
"cache_settings_album_thumbnails": "라이브러리 페이지 썸네일 ({} 미디어)",
|
||||||
"cache_settings_clear_cache_button": "캐시 지우기",
|
"cache_settings_clear_cache_button": "캐시 지우기",
|
||||||
"cache_settings_clear_cache_button_title": "앱의 캐시를 지웁니다. 이 작업은 캐시가 다시 빌드될 때까지 앱의 성능에 상당한 영향을 미칩니다.",
|
"cache_settings_clear_cache_button_title": "앱의 캐시를 지웁니다. 이 작업은 캐시가 다시 빌드될 때까지 앱의 성능에 상당한 영향을 미칩니다.",
|
||||||
@@ -156,6 +161,7 @@
|
|||||||
"home_page_building_timeline": "타임라인 생성",
|
"home_page_building_timeline": "타임라인 생성",
|
||||||
"home_page_favorite_err_local": "미디어파일을 즐겨찾기에 추가할 수 없어, 건너뜁니다.",
|
"home_page_favorite_err_local": "미디어파일을 즐겨찾기에 추가할 수 없어, 건너뜁니다.",
|
||||||
"home_page_first_time_notice": "앱을 처음 사용하는 경우 타임라인이 앨범의 사진과 비디오를 채울 수 있도록 백업대상 앨범을 선택해야 합니다.",
|
"home_page_first_time_notice": "앱을 처음 사용하는 경우 타임라인이 앨범의 사진과 비디오를 채울 수 있도록 백업대상 앨범을 선택해야 합니다.",
|
||||||
|
"home_page_upload_err_limit": "Can only upload a maximum of 30 assets at a time, skipping",
|
||||||
"image_viewer_page_state_provider_download_error": "다운로드 에러",
|
"image_viewer_page_state_provider_download_error": "다운로드 에러",
|
||||||
"image_viewer_page_state_provider_download_success": "다운로드 완료",
|
"image_viewer_page_state_provider_download_success": "다운로드 완료",
|
||||||
"library_page_albums": "앨범",
|
"library_page_albums": "앨범",
|
||||||
@@ -166,6 +172,7 @@
|
|||||||
"library_page_sharing": "공유",
|
"library_page_sharing": "공유",
|
||||||
"library_page_sort_created": "최근생성일",
|
"library_page_sort_created": "최근생성일",
|
||||||
"library_page_sort_title": "앨범 제목",
|
"library_page_sort_title": "앨범 제목",
|
||||||
|
"login_disabled": "Login has been disabled",
|
||||||
"login_form_api_exception": "API exception. Please check the server URL and try again.",
|
"login_form_api_exception": "API exception. Please check the server URL and try again.",
|
||||||
"login_form_button_text": "로그인",
|
"login_form_button_text": "로그인",
|
||||||
"login_form_email_hint": "youremail@email.com",
|
"login_form_email_hint": "youremail@email.com",
|
||||||
@@ -284,6 +291,10 @@
|
|||||||
"theme_setting_theme_title": "테마",
|
"theme_setting_theme_title": "테마",
|
||||||
"theme_setting_three_stage_loading_subtitle": "이 기능은 로딩 성능을 향상시킬 수 있지만 훨씬 더 많은 데이터를 사용합니다.",
|
"theme_setting_three_stage_loading_subtitle": "이 기능은 로딩 성능을 향상시킬 수 있지만 훨씬 더 많은 데이터를 사용합니다.",
|
||||||
"theme_setting_three_stage_loading_title": "3단계 로딩 활성화",
|
"theme_setting_three_stage_loading_title": "3단계 로딩 활성화",
|
||||||
|
"upload_dialog_cancel": "Cancel",
|
||||||
|
"upload_dialog_info": "Do you want to backup the selected Asset(s) to the server?",
|
||||||
|
"upload_dialog_ok": "Upload",
|
||||||
|
"upload_dialog_title": "Upload Asset",
|
||||||
"version_announcement_overlay_ack": "승인",
|
"version_announcement_overlay_ack": "승인",
|
||||||
"version_announcement_overlay_release_notes": "릴리스 정보",
|
"version_announcement_overlay_release_notes": "릴리스 정보",
|
||||||
"version_announcement_overlay_text_1": "안녕하세요!",
|
"version_announcement_overlay_text_1": "안녕하세요!",
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
{
|
{
|
||||||
"add_to_album_bottom_sheet_added": "Pievienots {album}",
|
"add_to_album_bottom_sheet_added": "Pievienots {album}",
|
||||||
"add_to_album_bottom_sheet_already_exists": "Jau pievienots {album}",
|
"add_to_album_bottom_sheet_already_exists": "Jau pievienots {album}",
|
||||||
"advanced_settings_prefer_remote_subtitle": "Some devices are painfully slow to load thumbnails from assets on the device. Activate this setting to load remote images instead.",
|
"advanced_settings_prefer_remote_subtitle": "Dažās ierīcēs sīktēli no ierīcē esošajiem resursiem tiek ielādēti ļoti lēni. Aktivizējiet šo iestatījumu, lai tā vietā ielādētu attālus attēlus.",
|
||||||
"advanced_settings_prefer_remote_title": "Prefer remote images",
|
"advanced_settings_prefer_remote_title": "Dot priekšroku attāliem attēliem",
|
||||||
"advanced_settings_tile_subtitle": "Lietotāja papildu iestatījumi",
|
"advanced_settings_tile_subtitle": "Lietotāja papildu iestatījumi",
|
||||||
"advanced_settings_tile_title": "Papildu",
|
"advanced_settings_tile_title": "Papildu",
|
||||||
"advanced_settings_troubleshooting_subtitle": "Iespējot papildu aktīvus problēmu novēršanai",
|
"advanced_settings_troubleshooting_subtitle": "Iespējot papildu aktīvus problēmu novēršanai",
|
||||||
@@ -22,7 +22,7 @@
|
|||||||
"album_viewer_appbar_share_leave": "Pamest albumu",
|
"album_viewer_appbar_share_leave": "Pamest albumu",
|
||||||
"album_viewer_appbar_share_remove": "Noņemt no albuma",
|
"album_viewer_appbar_share_remove": "Noņemt no albuma",
|
||||||
"album_viewer_page_share_add_users": "Pievienot lietotājus",
|
"album_viewer_page_share_add_users": "Pievienot lietotājus",
|
||||||
"all_people_page_title": "People",
|
"all_people_page_title": "Cilvēki",
|
||||||
"all_videos_page_title": "Videoklipi",
|
"all_videos_page_title": "Videoklipi",
|
||||||
"archive_page_no_archived_assets": "Nav atrasts neviens arhivēts aktīvs",
|
"archive_page_no_archived_assets": "Nav atrasts neviens arhivēts aktīvs",
|
||||||
"archive_page_title": "Arhīvs ({})",
|
"archive_page_title": "Arhīvs ({})",
|
||||||
@@ -92,6 +92,11 @@
|
|||||||
"backup_controller_page_uploading_file_info": "Faila informācijas augšupielāde",
|
"backup_controller_page_uploading_file_info": "Faila informācijas augšupielāde",
|
||||||
"backup_err_only_album": "Nevar noņemt vienīgo albumu",
|
"backup_err_only_album": "Nevar noņemt vienīgo albumu",
|
||||||
"backup_info_card_assets": "aktīvi",
|
"backup_info_card_assets": "aktīvi",
|
||||||
|
"backup_manual_cancelled": "Cancelled",
|
||||||
|
"backup_manual_failed": "Failed",
|
||||||
|
"backup_manual_in_progress": "Upload already in progress. Try after sometime",
|
||||||
|
"backup_manual_success": "Success",
|
||||||
|
"backup_manual_title": "Upload status",
|
||||||
"cache_settings_album_thumbnails": "Bibliotēkas lapu sīktēli ({} aktīvi)",
|
"cache_settings_album_thumbnails": "Bibliotēkas lapu sīktēli ({} aktīvi)",
|
||||||
"cache_settings_clear_cache_button": "Iztīrīt kešatmiņu",
|
"cache_settings_clear_cache_button": "Iztīrīt kešatmiņu",
|
||||||
"cache_settings_clear_cache_button_title": "Iztīra aplikācijas kešatmiņu. Tas būtiski ietekmēs lietotnes veiktspēju, līdz kešatmiņa būs pārbūvēta.",
|
"cache_settings_clear_cache_button_title": "Iztīra aplikācijas kešatmiņu. Tas būtiski ietekmēs lietotnes veiktspēju, līdz kešatmiņa būs pārbūvēta.",
|
||||||
@@ -156,6 +161,7 @@
|
|||||||
"home_page_building_timeline": "Tiek izveidota laika skala",
|
"home_page_building_timeline": "Tiek izveidota laika skala",
|
||||||
"home_page_favorite_err_local": "Vēl nevar pievienot izlaisei vietējos aktīvus, notiek izlaišana",
|
"home_page_favorite_err_local": "Vēl nevar pievienot izlaisei vietējos aktīvus, notiek izlaišana",
|
||||||
"home_page_first_time_notice": "Ja šī ir pirmā reize, kad izmantojat aplikāciju, lūdzu, izvēlieties dublējuma albumu(s), lai laika skala varētu aizpildīt fotoattēlus un videoklipus albumā(os).",
|
"home_page_first_time_notice": "Ja šī ir pirmā reize, kad izmantojat aplikāciju, lūdzu, izvēlieties dublējuma albumu(s), lai laika skala varētu aizpildīt fotoattēlus un videoklipus albumā(os).",
|
||||||
|
"home_page_upload_err_limit": "Can only upload a maximum of 30 assets at a time, skipping",
|
||||||
"image_viewer_page_state_provider_download_error": "Lejupielādes Kļūda",
|
"image_viewer_page_state_provider_download_error": "Lejupielādes Kļūda",
|
||||||
"image_viewer_page_state_provider_download_success": "Lejupielāde Izdevās",
|
"image_viewer_page_state_provider_download_success": "Lejupielāde Izdevās",
|
||||||
"library_page_albums": "Albums",
|
"library_page_albums": "Albums",
|
||||||
@@ -166,6 +172,7 @@
|
|||||||
"library_page_sharing": "Kopīgošana",
|
"library_page_sharing": "Kopīgošana",
|
||||||
"library_page_sort_created": "Jaunākais izveidotais",
|
"library_page_sort_created": "Jaunākais izveidotais",
|
||||||
"library_page_sort_title": "Albuma virsraksts",
|
"library_page_sort_title": "Albuma virsraksts",
|
||||||
|
"login_disabled": "Login has been disabled",
|
||||||
"login_form_api_exception": "API izņēmums. Lūdzu, pārbaudiet servera URL un mēģiniet vēlreiz.",
|
"login_form_api_exception": "API izņēmums. Lūdzu, pārbaudiet servera URL un mēģiniet vēlreiz.",
|
||||||
"login_form_button_text": "Pieteikties",
|
"login_form_button_text": "Pieteikties",
|
||||||
"login_form_email_hint": "jūsuepasts@email.com",
|
"login_form_email_hint": "jūsuepasts@email.com",
|
||||||
@@ -194,15 +201,15 @@
|
|||||||
"notification_permission_list_tile_content": "Piešķirt atļauju, lai iespējotu paziņojumus.",
|
"notification_permission_list_tile_content": "Piešķirt atļauju, lai iespējotu paziņojumus.",
|
||||||
"notification_permission_list_tile_enable_button": "Iespējot Paziņojumus",
|
"notification_permission_list_tile_enable_button": "Iespējot Paziņojumus",
|
||||||
"notification_permission_list_tile_title": "Paziņojumu Atļaujas",
|
"notification_permission_list_tile_title": "Paziņojumu Atļaujas",
|
||||||
"partner_page_add_partner": "Add partner",
|
"partner_page_add_partner": "Pievienot partneri",
|
||||||
"partner_page_empty_message": "Your photos are not yet shared with any partner.",
|
"partner_page_empty_message": "Jūsu fotogrāfijas pagaidām nav kopīgotas ar nevienu partneri.",
|
||||||
"partner_page_no_more_users": "No more users to add",
|
"partner_page_no_more_users": "Nav vairs lietotāju, kurus var pievienot",
|
||||||
"partner_page_partner_add_failed": "Failed to add partner",
|
"partner_page_partner_add_failed": "Neizdevās pievienot partneri",
|
||||||
"partner_page_select_partner": "Select partner",
|
"partner_page_select_partner": "Izvēlēties partneri",
|
||||||
"partner_page_shared_to_title": "Shared to",
|
"partner_page_shared_to_title": "Kopīgots uz",
|
||||||
"partner_page_stop_sharing_content": "{} will no longer be able to access your photos.",
|
"partner_page_stop_sharing_content": "{} vairs nevarēs piekļūt jūsu fotoattēliem.",
|
||||||
"partner_page_stop_sharing_title": "Stop sharing your photos?",
|
"partner_page_stop_sharing_title": "Beigt kopīgot jūsu fotogrāfijas?",
|
||||||
"partner_page_title": "Partner",
|
"partner_page_title": "Partneris",
|
||||||
"permission_onboarding_continue_anyway": "Tomēr turpināt",
|
"permission_onboarding_continue_anyway": "Tomēr turpināt",
|
||||||
"permission_onboarding_get_started": "Darba sākšana",
|
"permission_onboarding_get_started": "Darba sākšana",
|
||||||
"permission_onboarding_go_to_settings": "Doties uz iestatījumiem",
|
"permission_onboarding_go_to_settings": "Doties uz iestatījumiem",
|
||||||
@@ -223,7 +230,7 @@
|
|||||||
"search_page_motion_photos": "Kustību Fotoattēli",
|
"search_page_motion_photos": "Kustību Fotoattēli",
|
||||||
"search_page_no_objects": "Informācija par Objektiem nav pieejama",
|
"search_page_no_objects": "Informācija par Objektiem nav pieejama",
|
||||||
"search_page_no_places": "Nav pieejama Informācija par Vietām",
|
"search_page_no_places": "Nav pieejama Informācija par Vietām",
|
||||||
"search_page_people": "People",
|
"search_page_people": "Cilvēki",
|
||||||
"search_page_places": "Vietas",
|
"search_page_places": "Vietas",
|
||||||
"search_page_recently_added": "Nesen Pievienotais",
|
"search_page_recently_added": "Nesen Pievienotais",
|
||||||
"search_page_screenshots": "Ekrānuzņēmumi",
|
"search_page_screenshots": "Ekrānuzņēmumi",
|
||||||
@@ -284,6 +291,10 @@
|
|||||||
"theme_setting_theme_title": "Dizains",
|
"theme_setting_theme_title": "Dizains",
|
||||||
"theme_setting_three_stage_loading_subtitle": "Trīspakāpju ielāde var palielināt ielādēšanas veiktspēju, bet izraisa ievērojami lielāku tīkla noslodzi",
|
"theme_setting_three_stage_loading_subtitle": "Trīspakāpju ielāde var palielināt ielādēšanas veiktspēju, bet izraisa ievērojami lielāku tīkla noslodzi",
|
||||||
"theme_setting_three_stage_loading_title": "Iespējot trīspakāpju ielādi",
|
"theme_setting_three_stage_loading_title": "Iespējot trīspakāpju ielādi",
|
||||||
|
"upload_dialog_cancel": "Cancel",
|
||||||
|
"upload_dialog_info": "Do you want to backup the selected Asset(s) to the server?",
|
||||||
|
"upload_dialog_ok": "Upload",
|
||||||
|
"upload_dialog_title": "Upload Asset",
|
||||||
"version_announcement_overlay_ack": "Atzīt",
|
"version_announcement_overlay_ack": "Atzīt",
|
||||||
"version_announcement_overlay_release_notes": "informācija par laidienu",
|
"version_announcement_overlay_release_notes": "informācija par laidienu",
|
||||||
"version_announcement_overlay_text_1": "Sveiks draugs, ir jauns izlaidums no",
|
"version_announcement_overlay_text_1": "Sveiks draugs, ir jauns izlaidums no",
|
||||||
|
|||||||
@@ -92,6 +92,11 @@
|
|||||||
"backup_controller_page_uploading_file_info": "Uploading file info",
|
"backup_controller_page_uploading_file_info": "Uploading file info",
|
||||||
"backup_err_only_album": "Cannot remove the only album",
|
"backup_err_only_album": "Cannot remove the only album",
|
||||||
"backup_info_card_assets": "assets",
|
"backup_info_card_assets": "assets",
|
||||||
|
"backup_manual_cancelled": "Cancelled",
|
||||||
|
"backup_manual_failed": "Failed",
|
||||||
|
"backup_manual_in_progress": "Upload already in progress. Try after sometime",
|
||||||
|
"backup_manual_success": "Success",
|
||||||
|
"backup_manual_title": "Upload status",
|
||||||
"cache_settings_album_thumbnails": "Library page thumbnails ({} assets)",
|
"cache_settings_album_thumbnails": "Library page thumbnails ({} assets)",
|
||||||
"cache_settings_clear_cache_button": "Clear cache",
|
"cache_settings_clear_cache_button": "Clear cache",
|
||||||
"cache_settings_clear_cache_button_title": "Clears the app's cache. This will significantly impact the app's performance until the cache has rebuilt.",
|
"cache_settings_clear_cache_button_title": "Clears the app's cache. This will significantly impact the app's performance until the cache has rebuilt.",
|
||||||
@@ -156,6 +161,7 @@
|
|||||||
"home_page_building_timeline": "Building the timeline",
|
"home_page_building_timeline": "Building the timeline",
|
||||||
"home_page_favorite_err_local": "Can not favorite local assets yet, skipping",
|
"home_page_favorite_err_local": "Can not favorite local assets yet, skipping",
|
||||||
"home_page_first_time_notice": "If this is your first time using the app, please make sure to choose a backup album(s) so that the timeline can populate photos and videos in the album(s).",
|
"home_page_first_time_notice": "If this is your first time using the app, please make sure to choose a backup album(s) so that the timeline can populate photos and videos in the album(s).",
|
||||||
|
"home_page_upload_err_limit": "Can only upload a maximum of 30 assets at a time, skipping",
|
||||||
"image_viewer_page_state_provider_download_error": "Download Error",
|
"image_viewer_page_state_provider_download_error": "Download Error",
|
||||||
"image_viewer_page_state_provider_download_success": "Download Success",
|
"image_viewer_page_state_provider_download_success": "Download Success",
|
||||||
"library_page_albums": "Albums",
|
"library_page_albums": "Albums",
|
||||||
@@ -166,6 +172,7 @@
|
|||||||
"library_page_sharing": "Sharing",
|
"library_page_sharing": "Sharing",
|
||||||
"library_page_sort_created": "Most recently created",
|
"library_page_sort_created": "Most recently created",
|
||||||
"library_page_sort_title": "Album title",
|
"library_page_sort_title": "Album title",
|
||||||
|
"login_disabled": "Login has been disabled",
|
||||||
"login_form_api_exception": "API exception. Please check the server URL and try again.",
|
"login_form_api_exception": "API exception. Please check the server URL and try again.",
|
||||||
"login_form_button_text": "Login",
|
"login_form_button_text": "Login",
|
||||||
"login_form_email_hint": "youremail@email.com",
|
"login_form_email_hint": "youremail@email.com",
|
||||||
@@ -284,6 +291,10 @@
|
|||||||
"theme_setting_theme_title": "Theme",
|
"theme_setting_theme_title": "Theme",
|
||||||
"theme_setting_three_stage_loading_subtitle": "Three-stage loading might increase the loading performance but causes significantly higher network load",
|
"theme_setting_three_stage_loading_subtitle": "Three-stage loading might increase the loading performance but causes significantly higher network load",
|
||||||
"theme_setting_three_stage_loading_title": "Enable three-stage loading",
|
"theme_setting_three_stage_loading_title": "Enable three-stage loading",
|
||||||
|
"upload_dialog_cancel": "Cancel",
|
||||||
|
"upload_dialog_info": "Do you want to backup the selected Asset(s) to the server?",
|
||||||
|
"upload_dialog_ok": "Upload",
|
||||||
|
"upload_dialog_title": "Upload Asset",
|
||||||
"version_announcement_overlay_ack": "Acknowledge",
|
"version_announcement_overlay_ack": "Acknowledge",
|
||||||
"version_announcement_overlay_release_notes": "release notes",
|
"version_announcement_overlay_release_notes": "release notes",
|
||||||
"version_announcement_overlay_text_1": "Hi friend, there is a new release of",
|
"version_announcement_overlay_text_1": "Hi friend, there is a new release of",
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
{
|
{
|
||||||
"add_to_album_bottom_sheet_added": "Lagt til i {album}",
|
"add_to_album_bottom_sheet_added": "Lagt til i {album}",
|
||||||
"add_to_album_bottom_sheet_already_exists": "Allerede i {album}",
|
"add_to_album_bottom_sheet_already_exists": "Allerede i {album}",
|
||||||
"advanced_settings_prefer_remote_subtitle": "Some devices are painfully slow to load thumbnails from assets on the device. Activate this setting to load remote images instead.",
|
"advanced_settings_prefer_remote_subtitle": "Noen enheter er veldige trege til å hente mikrobilder fra enheten. Aktiver denne innstillingen for å hente de eksternt istedenfor.",
|
||||||
"advanced_settings_prefer_remote_title": "Prefer remote images",
|
"advanced_settings_prefer_remote_title": "Foretrekk eksterne bilder",
|
||||||
"advanced_settings_tile_subtitle": "Avanserte brukerinnstillinger",
|
"advanced_settings_tile_subtitle": "Avanserte brukerinnstillinger",
|
||||||
"advanced_settings_tile_title": "Avansert",
|
"advanced_settings_tile_title": "Avansert",
|
||||||
"advanced_settings_troubleshooting_subtitle": "Aktiver ekstra funksjoner for feilsøking",
|
"advanced_settings_troubleshooting_subtitle": "Aktiver ekstra funksjoner for feilsøking",
|
||||||
@@ -22,7 +22,7 @@
|
|||||||
"album_viewer_appbar_share_leave": "Forlat album",
|
"album_viewer_appbar_share_leave": "Forlat album",
|
||||||
"album_viewer_appbar_share_remove": "Fjern fra album",
|
"album_viewer_appbar_share_remove": "Fjern fra album",
|
||||||
"album_viewer_page_share_add_users": "Legg til brukere",
|
"album_viewer_page_share_add_users": "Legg til brukere",
|
||||||
"all_people_page_title": "People",
|
"all_people_page_title": "Folk",
|
||||||
"all_videos_page_title": "Videoer",
|
"all_videos_page_title": "Videoer",
|
||||||
"archive_page_no_archived_assets": "Ingen arkiverte objekter funnet",
|
"archive_page_no_archived_assets": "Ingen arkiverte objekter funnet",
|
||||||
"archive_page_title": "Arkiv ({})",
|
"archive_page_title": "Arkiv ({})",
|
||||||
@@ -92,6 +92,11 @@
|
|||||||
"backup_controller_page_uploading_file_info": "Laster opp filinformasjon",
|
"backup_controller_page_uploading_file_info": "Laster opp filinformasjon",
|
||||||
"backup_err_only_album": "Kan ikke fjerne det eneste albumet",
|
"backup_err_only_album": "Kan ikke fjerne det eneste albumet",
|
||||||
"backup_info_card_assets": "objekter",
|
"backup_info_card_assets": "objekter",
|
||||||
|
"backup_manual_cancelled": "Cancelled",
|
||||||
|
"backup_manual_failed": "Feilet",
|
||||||
|
"backup_manual_in_progress": "Opplasting er allerede i gang. Prøv igjen om litt",
|
||||||
|
"backup_manual_success": "Vellykket",
|
||||||
|
"backup_manual_title": "Opplastingsstatus",
|
||||||
"cache_settings_album_thumbnails": "Bibliotekminiatyrbilder ({} objekter)",
|
"cache_settings_album_thumbnails": "Bibliotekminiatyrbilder ({} objekter)",
|
||||||
"cache_settings_clear_cache_button": "Tøm buffer",
|
"cache_settings_clear_cache_button": "Tøm buffer",
|
||||||
"cache_settings_clear_cache_button_title": "Tømmer app-ens buffer. Dette vil ha betydelig innvirkning på appens ytelse inntil bufferen er gjenoppbygd.",
|
"cache_settings_clear_cache_button_title": "Tømmer app-ens buffer. Dette vil ha betydelig innvirkning på appens ytelse inntil bufferen er gjenoppbygd.",
|
||||||
@@ -156,6 +161,7 @@
|
|||||||
"home_page_building_timeline": "Genererer tidslinjen",
|
"home_page_building_timeline": "Genererer tidslinjen",
|
||||||
"home_page_favorite_err_local": "Kan ikke sette favoritt på lokale objekter enda, hopper over",
|
"home_page_favorite_err_local": "Kan ikke sette favoritt på lokale objekter enda, hopper over",
|
||||||
"home_page_first_time_notice": "Hvis dette er første gangen du benytter appen, velg et album (eller flere) for sikkerhetskopiering, slik at tidslinjen kan fylles med dine bilder og videoer.",
|
"home_page_first_time_notice": "Hvis dette er første gangen du benytter appen, velg et album (eller flere) for sikkerhetskopiering, slik at tidslinjen kan fylles med dine bilder og videoer.",
|
||||||
|
"home_page_upload_err_limit": "Maksimalt 30 objekter kan lastes opp om gangen, hopper over",
|
||||||
"image_viewer_page_state_provider_download_error": "Nedlasting feilet",
|
"image_viewer_page_state_provider_download_error": "Nedlasting feilet",
|
||||||
"image_viewer_page_state_provider_download_success": "Nedlasting vellykket",
|
"image_viewer_page_state_provider_download_success": "Nedlasting vellykket",
|
||||||
"library_page_albums": "Albumer",
|
"library_page_albums": "Albumer",
|
||||||
@@ -166,6 +172,7 @@
|
|||||||
"library_page_sharing": "Deling",
|
"library_page_sharing": "Deling",
|
||||||
"library_page_sort_created": "Nylig opplastet",
|
"library_page_sort_created": "Nylig opplastet",
|
||||||
"library_page_sort_title": "Albumtittel",
|
"library_page_sort_title": "Albumtittel",
|
||||||
|
"login_disabled": "Innlogging har blitt deaktivert",
|
||||||
"login_form_api_exception": "API-feil. Sjekk URL-en til serveren og prøv igjen.",
|
"login_form_api_exception": "API-feil. Sjekk URL-en til serveren og prøv igjen.",
|
||||||
"login_form_button_text": "Logg inn",
|
"login_form_button_text": "Logg inn",
|
||||||
"login_form_email_hint": "dinepost@epost.no",
|
"login_form_email_hint": "dinepost@epost.no",
|
||||||
@@ -194,14 +201,14 @@
|
|||||||
"notification_permission_list_tile_content": "Gi tilgang for å aktivere notifikasjoner",
|
"notification_permission_list_tile_content": "Gi tilgang for å aktivere notifikasjoner",
|
||||||
"notification_permission_list_tile_enable_button": "Aktiver notifikasjoner",
|
"notification_permission_list_tile_enable_button": "Aktiver notifikasjoner",
|
||||||
"notification_permission_list_tile_title": "Notifikasjonstilgang",
|
"notification_permission_list_tile_title": "Notifikasjonstilgang",
|
||||||
"partner_page_add_partner": "Add partner",
|
"partner_page_add_partner": "Legg til partner",
|
||||||
"partner_page_empty_message": "Your photos are not yet shared with any partner.",
|
"partner_page_empty_message": "Dine bilder deles ikke med noen partner.",
|
||||||
"partner_page_no_more_users": "No more users to add",
|
"partner_page_no_more_users": "Ingen flere brukere å legge til",
|
||||||
"partner_page_partner_add_failed": "Failed to add partner",
|
"partner_page_partner_add_failed": "Klarte ikke å legge til partner",
|
||||||
"partner_page_select_partner": "Select partner",
|
"partner_page_select_partner": "Velg partner",
|
||||||
"partner_page_shared_to_title": "Shared to",
|
"partner_page_shared_to_title": "Delt med",
|
||||||
"partner_page_stop_sharing_content": "{} will no longer be able to access your photos.",
|
"partner_page_stop_sharing_content": "{} vil ikke lenger ha tilgang til dine bilder.",
|
||||||
"partner_page_stop_sharing_title": "Stop sharing your photos?",
|
"partner_page_stop_sharing_title": "Stopp deling av bildene dine?",
|
||||||
"partner_page_title": "Partner",
|
"partner_page_title": "Partner",
|
||||||
"permission_onboarding_continue_anyway": "Fortsett uansett",
|
"permission_onboarding_continue_anyway": "Fortsett uansett",
|
||||||
"permission_onboarding_get_started": "Kom i gang",
|
"permission_onboarding_get_started": "Kom i gang",
|
||||||
@@ -223,7 +230,7 @@
|
|||||||
"search_page_motion_photos": "Bevegelige bilder",
|
"search_page_motion_photos": "Bevegelige bilder",
|
||||||
"search_page_no_objects": "Ingen objektinfo tilgjengelig",
|
"search_page_no_objects": "Ingen objektinfo tilgjengelig",
|
||||||
"search_page_no_places": "Ingen stedsinformasjon er tilgjengelig",
|
"search_page_no_places": "Ingen stedsinformasjon er tilgjengelig",
|
||||||
"search_page_people": "People",
|
"search_page_people": "Folk",
|
||||||
"search_page_places": "Steder",
|
"search_page_places": "Steder",
|
||||||
"search_page_recently_added": "Nylig lagt til",
|
"search_page_recently_added": "Nylig lagt til",
|
||||||
"search_page_screenshots": "Skjermbilder",
|
"search_page_screenshots": "Skjermbilder",
|
||||||
@@ -284,6 +291,10 @@
|
|||||||
"theme_setting_theme_title": "Tema",
|
"theme_setting_theme_title": "Tema",
|
||||||
"theme_setting_three_stage_loading_subtitle": "Tre-trinns innlasting kan øke lasteytelsen, men forårsaker betydelig høyere nettverksbelastning",
|
"theme_setting_three_stage_loading_subtitle": "Tre-trinns innlasting kan øke lasteytelsen, men forårsaker betydelig høyere nettverksbelastning",
|
||||||
"theme_setting_three_stage_loading_title": "Aktiver tre-trinns innlasting",
|
"theme_setting_three_stage_loading_title": "Aktiver tre-trinns innlasting",
|
||||||
|
"upload_dialog_cancel": "Avbryt",
|
||||||
|
"upload_dialog_info": "Vil du utføre backup av valgte objekt(er) til serveren?",
|
||||||
|
"upload_dialog_ok": "Last opp",
|
||||||
|
"upload_dialog_title": "Last opp objekt",
|
||||||
"version_announcement_overlay_ack": "Bekreft",
|
"version_announcement_overlay_ack": "Bekreft",
|
||||||
"version_announcement_overlay_release_notes": "endringsloggen",
|
"version_announcement_overlay_release_notes": "endringsloggen",
|
||||||
"version_announcement_overlay_text_1": "Hei, det er en ny versjon av",
|
"version_announcement_overlay_text_1": "Hei, det er en ny versjon av",
|
||||||
|
|||||||
@@ -92,6 +92,11 @@
|
|||||||
"backup_controller_page_uploading_file_info": "Bestandsgegevens uploaden",
|
"backup_controller_page_uploading_file_info": "Bestandsgegevens uploaden",
|
||||||
"backup_err_only_album": "Kan het enige album niet verwijderen",
|
"backup_err_only_album": "Kan het enige album niet verwijderen",
|
||||||
"backup_info_card_assets": "items",
|
"backup_info_card_assets": "items",
|
||||||
|
"backup_manual_cancelled": "Cancelled",
|
||||||
|
"backup_manual_failed": "Failed",
|
||||||
|
"backup_manual_in_progress": "Upload already in progress. Try after sometime",
|
||||||
|
"backup_manual_success": "Success",
|
||||||
|
"backup_manual_title": "Upload status",
|
||||||
"cache_settings_album_thumbnails": "Thumbnails bibliotheekpagina ({} items)",
|
"cache_settings_album_thumbnails": "Thumbnails bibliotheekpagina ({} items)",
|
||||||
"cache_settings_clear_cache_button": "Cache wissen",
|
"cache_settings_clear_cache_button": "Cache wissen",
|
||||||
"cache_settings_clear_cache_button_title": "Wist de cache van de app. Dit zal de presentaties van de app aanzienlijk beïnvloeden totdat de cache opnieuw is opgebouwd.",
|
"cache_settings_clear_cache_button_title": "Wist de cache van de app. Dit zal de presentaties van de app aanzienlijk beïnvloeden totdat de cache opnieuw is opgebouwd.",
|
||||||
@@ -156,6 +161,7 @@
|
|||||||
"home_page_building_timeline": "Tijdlijn opbouwen",
|
"home_page_building_timeline": "Tijdlijn opbouwen",
|
||||||
"home_page_favorite_err_local": "Lokale items kunnen nog niet als favoriet worden aangemerkt, overslaan",
|
"home_page_favorite_err_local": "Lokale items kunnen nog niet als favoriet worden aangemerkt, overslaan",
|
||||||
"home_page_first_time_notice": "Als dit de eerste keer is dat je de app gebruikt, zorg er dan voor dat je een back-up album kiest, zodat de tijdlijn gevuld kan worden met foto's en video's uit het album.",
|
"home_page_first_time_notice": "Als dit de eerste keer is dat je de app gebruikt, zorg er dan voor dat je een back-up album kiest, zodat de tijdlijn gevuld kan worden met foto's en video's uit het album.",
|
||||||
|
"home_page_upload_err_limit": "Can only upload a maximum of 30 assets at a time, skipping",
|
||||||
"image_viewer_page_state_provider_download_error": "Download mislukt",
|
"image_viewer_page_state_provider_download_error": "Download mislukt",
|
||||||
"image_viewer_page_state_provider_download_success": "Download succesvol",
|
"image_viewer_page_state_provider_download_success": "Download succesvol",
|
||||||
"library_page_albums": "Albums",
|
"library_page_albums": "Albums",
|
||||||
@@ -166,6 +172,7 @@
|
|||||||
"library_page_sharing": "Gedeeld",
|
"library_page_sharing": "Gedeeld",
|
||||||
"library_page_sort_created": "Meest recent gemaakt",
|
"library_page_sort_created": "Meest recent gemaakt",
|
||||||
"library_page_sort_title": "Albumtitel",
|
"library_page_sort_title": "Albumtitel",
|
||||||
|
"login_disabled": "Login has been disabled",
|
||||||
"login_form_api_exception": "API fout. Controleer de server URL en probeer opnieuw.",
|
"login_form_api_exception": "API fout. Controleer de server URL en probeer opnieuw.",
|
||||||
"login_form_button_text": "Inloggen",
|
"login_form_button_text": "Inloggen",
|
||||||
"login_form_email_hint": "jouwemail@email.com",
|
"login_form_email_hint": "jouwemail@email.com",
|
||||||
@@ -284,6 +291,10 @@
|
|||||||
"theme_setting_theme_title": "Thema",
|
"theme_setting_theme_title": "Thema",
|
||||||
"theme_setting_three_stage_loading_subtitle": "Laden in drie fasen kan de laadprestaties verbeteren, maar veroorzaakt een aanzienlijk hogere netwerkbelasting",
|
"theme_setting_three_stage_loading_subtitle": "Laden in drie fasen kan de laadprestaties verbeteren, maar veroorzaakt een aanzienlijk hogere netwerkbelasting",
|
||||||
"theme_setting_three_stage_loading_title": "Laden in drie fasen inschakelen",
|
"theme_setting_three_stage_loading_title": "Laden in drie fasen inschakelen",
|
||||||
|
"upload_dialog_cancel": "Cancel",
|
||||||
|
"upload_dialog_info": "Do you want to backup the selected Asset(s) to the server?",
|
||||||
|
"upload_dialog_ok": "Upload",
|
||||||
|
"upload_dialog_title": "Upload Asset",
|
||||||
"version_announcement_overlay_ack": "Bevestig",
|
"version_announcement_overlay_ack": "Bevestig",
|
||||||
"version_announcement_overlay_release_notes": "releaseopmerkingen",
|
"version_announcement_overlay_release_notes": "releaseopmerkingen",
|
||||||
"version_announcement_overlay_text_1": "Hoi, er is een nieuwe versie beschikbaar van",
|
"version_announcement_overlay_text_1": "Hoi, er is een nieuwe versie beschikbaar van",
|
||||||
|
|||||||
@@ -92,6 +92,11 @@
|
|||||||
"backup_controller_page_uploading_file_info": "Przesyłanie informacji o pliku",
|
"backup_controller_page_uploading_file_info": "Przesyłanie informacji o pliku",
|
||||||
"backup_err_only_album": "Nie można usunąć tylko i wyłącznie albumu",
|
"backup_err_only_album": "Nie można usunąć tylko i wyłącznie albumu",
|
||||||
"backup_info_card_assets": "zasoby",
|
"backup_info_card_assets": "zasoby",
|
||||||
|
"backup_manual_cancelled": "Cancelled",
|
||||||
|
"backup_manual_failed": "Failed",
|
||||||
|
"backup_manual_in_progress": "Upload already in progress. Try after sometime",
|
||||||
|
"backup_manual_success": "Success",
|
||||||
|
"backup_manual_title": "Upload status",
|
||||||
"cache_settings_album_thumbnails": "Miniatury stron bibliotek ({} zasobów)",
|
"cache_settings_album_thumbnails": "Miniatury stron bibliotek ({} zasobów)",
|
||||||
"cache_settings_clear_cache_button": "Wyczyść Cache",
|
"cache_settings_clear_cache_button": "Wyczyść Cache",
|
||||||
"cache_settings_clear_cache_button_title": "Czyści pamięć podręczną aplikacji. Wpłynie to znacząco na wydajność aplikacji, dopóki pamięć podręczna nie zostanie odbudowana.",
|
"cache_settings_clear_cache_button_title": "Czyści pamięć podręczną aplikacji. Wpłynie to znacząco na wydajność aplikacji, dopóki pamięć podręczna nie zostanie odbudowana.",
|
||||||
@@ -156,6 +161,7 @@
|
|||||||
"home_page_building_timeline": "Building the timeline",
|
"home_page_building_timeline": "Building the timeline",
|
||||||
"home_page_favorite_err_local": "Can not favorite local assets yet, skipping",
|
"home_page_favorite_err_local": "Can not favorite local assets yet, skipping",
|
||||||
"home_page_first_time_notice": "If this is your first time using the app, please make sure to choose a backup album(s) so that the timeline can populate photos and videos in the album(s).",
|
"home_page_first_time_notice": "If this is your first time using the app, please make sure to choose a backup album(s) so that the timeline can populate photos and videos in the album(s).",
|
||||||
|
"home_page_upload_err_limit": "Can only upload a maximum of 30 assets at a time, skipping",
|
||||||
"image_viewer_page_state_provider_download_error": "Download Error",
|
"image_viewer_page_state_provider_download_error": "Download Error",
|
||||||
"image_viewer_page_state_provider_download_success": "Download Success",
|
"image_viewer_page_state_provider_download_success": "Download Success",
|
||||||
"library_page_albums": "Albumy",
|
"library_page_albums": "Albumy",
|
||||||
@@ -166,6 +172,7 @@
|
|||||||
"library_page_sharing": "Sharing",
|
"library_page_sharing": "Sharing",
|
||||||
"library_page_sort_created": "Most recently created",
|
"library_page_sort_created": "Most recently created",
|
||||||
"library_page_sort_title": "Album title",
|
"library_page_sort_title": "Album title",
|
||||||
|
"login_disabled": "Login has been disabled",
|
||||||
"login_form_api_exception": "API exception. Please check the server URL and try again.",
|
"login_form_api_exception": "API exception. Please check the server URL and try again.",
|
||||||
"login_form_button_text": "Login",
|
"login_form_button_text": "Login",
|
||||||
"login_form_email_hint": "twojmail@email.com",
|
"login_form_email_hint": "twojmail@email.com",
|
||||||
@@ -284,6 +291,10 @@
|
|||||||
"theme_setting_theme_title": "Motyw",
|
"theme_setting_theme_title": "Motyw",
|
||||||
"theme_setting_three_stage_loading_subtitle": "Trójstopniowe ładowanie może zwiększyć wydajność ładowania, ale powoduje znacznie większe obciążenie sieci",
|
"theme_setting_three_stage_loading_subtitle": "Trójstopniowe ładowanie może zwiększyć wydajność ładowania, ale powoduje znacznie większe obciążenie sieci",
|
||||||
"theme_setting_three_stage_loading_title": "Włączenie trójstopniowego ładowania",
|
"theme_setting_three_stage_loading_title": "Włączenie trójstopniowego ładowania",
|
||||||
|
"upload_dialog_cancel": "Cancel",
|
||||||
|
"upload_dialog_info": "Do you want to backup the selected Asset(s) to the server?",
|
||||||
|
"upload_dialog_ok": "Upload",
|
||||||
|
"upload_dialog_title": "Upload Asset",
|
||||||
"version_announcement_overlay_ack": "Potwierdzam",
|
"version_announcement_overlay_ack": "Potwierdzam",
|
||||||
"version_announcement_overlay_release_notes": "informacje o wydaniu",
|
"version_announcement_overlay_release_notes": "informacje o wydaniu",
|
||||||
"version_announcement_overlay_text_1": "Cześć przyjacielu, jest nowe wydanie",
|
"version_announcement_overlay_text_1": "Cześć przyjacielu, jest nowe wydanie",
|
||||||
|
|||||||
@@ -92,6 +92,11 @@
|
|||||||
"backup_controller_page_uploading_file_info": "Загрузка информации о файле",
|
"backup_controller_page_uploading_file_info": "Загрузка информации о файле",
|
||||||
"backup_err_only_album": "Невозможно удалить единственный альбом",
|
"backup_err_only_album": "Невозможно удалить единственный альбом",
|
||||||
"backup_info_card_assets": "объекты",
|
"backup_info_card_assets": "объекты",
|
||||||
|
"backup_manual_cancelled": "Cancelled",
|
||||||
|
"backup_manual_failed": "Failed",
|
||||||
|
"backup_manual_in_progress": "Upload already in progress. Try after sometime",
|
||||||
|
"backup_manual_success": "Success",
|
||||||
|
"backup_manual_title": "Upload status",
|
||||||
"cache_settings_album_thumbnails": "Миниатюры страниц библиотеки ({} объектов)",
|
"cache_settings_album_thumbnails": "Миниатюры страниц библиотеки ({} объектов)",
|
||||||
"cache_settings_clear_cache_button": "Очистить кэш",
|
"cache_settings_clear_cache_button": "Очистить кэш",
|
||||||
"cache_settings_clear_cache_button_title": "Очищает кэш приложения. Это значительно повлияет на производительность приложения, до тех пор, пока кэш не будет перестроен заново.",
|
"cache_settings_clear_cache_button_title": "Очищает кэш приложения. Это значительно повлияет на производительность приложения, до тех пор, пока кэш не будет перестроен заново.",
|
||||||
@@ -156,6 +161,7 @@
|
|||||||
"home_page_building_timeline": "Построение временной шкалы",
|
"home_page_building_timeline": "Построение временной шкалы",
|
||||||
"home_page_favorite_err_local": "Пока не удается добавить в избранное локальные объекты, пропускаем",
|
"home_page_favorite_err_local": "Пока не удается добавить в избранное локальные объекты, пропускаем",
|
||||||
"home_page_first_time_notice": "Если вы используете приложение впервые, убедитесь, что вы выбрали резервный(е) альбом(ы), чтобы временная шкала могла заполнить фотографии и видео в альбоме(ах).",
|
"home_page_first_time_notice": "Если вы используете приложение впервые, убедитесь, что вы выбрали резервный(е) альбом(ы), чтобы временная шкала могла заполнить фотографии и видео в альбоме(ах).",
|
||||||
|
"home_page_upload_err_limit": "Can only upload a maximum of 30 assets at a time, skipping",
|
||||||
"image_viewer_page_state_provider_download_error": "Ошибка загрузки",
|
"image_viewer_page_state_provider_download_error": "Ошибка загрузки",
|
||||||
"image_viewer_page_state_provider_download_success": "Успешно загружено",
|
"image_viewer_page_state_provider_download_success": "Успешно загружено",
|
||||||
"library_page_albums": "Альбомы",
|
"library_page_albums": "Альбомы",
|
||||||
@@ -166,6 +172,7 @@
|
|||||||
"library_page_sharing": "Общие",
|
"library_page_sharing": "Общие",
|
||||||
"library_page_sort_created": "По новизне",
|
"library_page_sort_created": "По новизне",
|
||||||
"library_page_sort_title": "По названию альбома",
|
"library_page_sort_title": "По названию альбома",
|
||||||
|
"login_disabled": "Login has been disabled",
|
||||||
"login_form_api_exception": "API exception. Please check the server URL and try again.",
|
"login_form_api_exception": "API exception. Please check the server URL and try again.",
|
||||||
"login_form_button_text": "Войти",
|
"login_form_button_text": "Войти",
|
||||||
"login_form_email_hint": "youremail@email.com",
|
"login_form_email_hint": "youremail@email.com",
|
||||||
@@ -284,6 +291,10 @@
|
|||||||
"theme_setting_theme_title": "Тема",
|
"theme_setting_theme_title": "Тема",
|
||||||
"theme_setting_three_stage_loading_subtitle": "Трехэтапная загрузка может повысить производительность загрузки, но вызывает значительно более высокую нагрузку на сеть",
|
"theme_setting_three_stage_loading_subtitle": "Трехэтапная загрузка может повысить производительность загрузки, но вызывает значительно более высокую нагрузку на сеть",
|
||||||
"theme_setting_three_stage_loading_title": "Включить трехэтапную загрузку",
|
"theme_setting_three_stage_loading_title": "Включить трехэтапную загрузку",
|
||||||
|
"upload_dialog_cancel": "Cancel",
|
||||||
|
"upload_dialog_info": "Do you want to backup the selected Asset(s) to the server?",
|
||||||
|
"upload_dialog_ok": "Upload",
|
||||||
|
"upload_dialog_title": "Upload Asset",
|
||||||
"version_announcement_overlay_ack": "Подтверждение",
|
"version_announcement_overlay_ack": "Подтверждение",
|
||||||
"version_announcement_overlay_release_notes": "примечания к выпуску",
|
"version_announcement_overlay_release_notes": "примечания к выпуску",
|
||||||
"version_announcement_overlay_text_1": "Привет друг, вышел новый релиз",
|
"version_announcement_overlay_text_1": "Привет друг, вышел новый релиз",
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
{
|
{
|
||||||
"add_to_album_bottom_sheet_added": "Pridané do {album}",
|
"add_to_album_bottom_sheet_added": "Pridané do {album}",
|
||||||
"add_to_album_bottom_sheet_already_exists": "Už v {album}",
|
"add_to_album_bottom_sheet_already_exists": "Už v {album}",
|
||||||
"advanced_settings_prefer_remote_subtitle": "Some devices are painfully slow to load thumbnails from assets on the device. Activate this setting to load remote images instead.",
|
"advanced_settings_prefer_remote_subtitle": "Niektoré zariadenia sú extrémne pomalé pre načítavanie miniatúr z fotiek na zariadení. Povoľte toto nastavenie aby sa namiesto toho načítavali obrázky zo servera.",
|
||||||
"advanced_settings_prefer_remote_title": "Prefer remote images",
|
"advanced_settings_prefer_remote_title": "Preferovať vzdialené obrázky",
|
||||||
"advanced_settings_tile_subtitle": "Pokročilé nastavenia používateľa",
|
"advanced_settings_tile_subtitle": "Pokročilé nastavenia používateľa",
|
||||||
"advanced_settings_tile_title": "Pokročilé",
|
"advanced_settings_tile_title": "Pokročilé",
|
||||||
"advanced_settings_troubleshooting_subtitle": "Povoliť ďalšie funkcie pre opravu chýb",
|
"advanced_settings_troubleshooting_subtitle": "Povoliť ďalšie funkcie pre opravu chýb",
|
||||||
@@ -22,7 +22,7 @@
|
|||||||
"album_viewer_appbar_share_leave": "Opustiť album",
|
"album_viewer_appbar_share_leave": "Opustiť album",
|
||||||
"album_viewer_appbar_share_remove": "Odstrániť z albumu",
|
"album_viewer_appbar_share_remove": "Odstrániť z albumu",
|
||||||
"album_viewer_page_share_add_users": "Pridať používateľov",
|
"album_viewer_page_share_add_users": "Pridať používateľov",
|
||||||
"all_people_page_title": "People",
|
"all_people_page_title": "Ľudia",
|
||||||
"all_videos_page_title": "Videá",
|
"all_videos_page_title": "Videá",
|
||||||
"archive_page_no_archived_assets": "Žiadne archivované médiá",
|
"archive_page_no_archived_assets": "Žiadne archivované médiá",
|
||||||
"archive_page_title": "Archív ({})",
|
"archive_page_title": "Archív ({})",
|
||||||
@@ -92,6 +92,11 @@
|
|||||||
"backup_controller_page_uploading_file_info": "Nahrávaný súbor",
|
"backup_controller_page_uploading_file_info": "Nahrávaný súbor",
|
||||||
"backup_err_only_album": "Nie je možné odstrániť jediný vybraný album",
|
"backup_err_only_album": "Nie je možné odstrániť jediný vybraný album",
|
||||||
"backup_info_card_assets": "položiek",
|
"backup_info_card_assets": "položiek",
|
||||||
|
"backup_manual_cancelled": "Cancelled",
|
||||||
|
"backup_manual_failed": "Failed",
|
||||||
|
"backup_manual_in_progress": "Upload already in progress. Try after sometime",
|
||||||
|
"backup_manual_success": "Success",
|
||||||
|
"backup_manual_title": "Upload status",
|
||||||
"cache_settings_album_thumbnails": "Náhľady stránok knižnice (položiek {})",
|
"cache_settings_album_thumbnails": "Náhľady stránok knižnice (položiek {})",
|
||||||
"cache_settings_clear_cache_button": "Vymazať vyrovnávaciu pamäť",
|
"cache_settings_clear_cache_button": "Vymazať vyrovnávaciu pamäť",
|
||||||
"cache_settings_clear_cache_button_title": "Vymaže vyrovnávaciu pamäť aplikácie. To výrazne ovplyvní výkon aplikácie, kým sa vyrovnávacia pamäť neobnoví.",
|
"cache_settings_clear_cache_button_title": "Vymaže vyrovnávaciu pamäť aplikácie. To výrazne ovplyvní výkon aplikácie, kým sa vyrovnávacia pamäť neobnoví.",
|
||||||
@@ -156,16 +161,18 @@
|
|||||||
"home_page_building_timeline": "Vytváranie časovej osi",
|
"home_page_building_timeline": "Vytváranie časovej osi",
|
||||||
"home_page_favorite_err_local": "Zatiaľ nie je možné zaradiť lokálne média medzi obľúbené, preskakuje sa",
|
"home_page_favorite_err_local": "Zatiaľ nie je možné zaradiť lokálne média medzi obľúbené, preskakuje sa",
|
||||||
"home_page_first_time_notice": "Ak aplikáciu používate prvý krát, nezabudnite si vybrať zálohované albumy, aby sa na časovej osi mohli nachádzať fotografie a videá z vybraných albumoch.",
|
"home_page_first_time_notice": "Ak aplikáciu používate prvý krát, nezabudnite si vybrať zálohované albumy, aby sa na časovej osi mohli nachádzať fotografie a videá z vybraných albumoch.",
|
||||||
|
"home_page_upload_err_limit": "Can only upload a maximum of 30 assets at a time, skipping",
|
||||||
"image_viewer_page_state_provider_download_error": "Chyba sťahovania",
|
"image_viewer_page_state_provider_download_error": "Chyba sťahovania",
|
||||||
"image_viewer_page_state_provider_download_success": "Sťahovanie bolo úspešné",
|
"image_viewer_page_state_provider_download_success": "Sťahovanie bolo úspešné",
|
||||||
"library_page_albums": "Albumy",
|
"library_page_albums": "Albumy",
|
||||||
"library_page_archive": "Archivovať",
|
"library_page_archive": "Archív",
|
||||||
"library_page_device_albums": "Albumy v zariadení",
|
"library_page_device_albums": "Albumy v zariadení",
|
||||||
"library_page_favorites": "Obľúbené",
|
"library_page_favorites": "Obľúbené",
|
||||||
"library_page_new_album": "Nový album",
|
"library_page_new_album": "Nový album",
|
||||||
"library_page_sharing": "Zdieľanie",
|
"library_page_sharing": "Zdieľanie",
|
||||||
"library_page_sort_created": "Najnovšie vytvorené",
|
"library_page_sort_created": "Najnovšie vytvorené",
|
||||||
"library_page_sort_title": "Podľa názvu albumu",
|
"library_page_sort_title": "Podľa názvu albumu",
|
||||||
|
"login_disabled": "Login has been disabled",
|
||||||
"login_form_api_exception": "Chyba API. Skontrolujte adresu URL servera a skúste to znova.",
|
"login_form_api_exception": "Chyba API. Skontrolujte adresu URL servera a skúste to znova.",
|
||||||
"login_form_button_text": "Prihlásiť sa",
|
"login_form_button_text": "Prihlásiť sa",
|
||||||
"login_form_email_hint": "tvojmail@email.com",
|
"login_form_email_hint": "tvojmail@email.com",
|
||||||
@@ -194,14 +201,14 @@
|
|||||||
"notification_permission_list_tile_content": "Udeľte oprávnenie k aktivácii oznámení.",
|
"notification_permission_list_tile_content": "Udeľte oprávnenie k aktivácii oznámení.",
|
||||||
"notification_permission_list_tile_enable_button": "Povoliť upozornenia",
|
"notification_permission_list_tile_enable_button": "Povoliť upozornenia",
|
||||||
"notification_permission_list_tile_title": "Povolenie oznámení",
|
"notification_permission_list_tile_title": "Povolenie oznámení",
|
||||||
"partner_page_add_partner": "Add partner",
|
"partner_page_add_partner": "Pridať partnera",
|
||||||
"partner_page_empty_message": "Your photos are not yet shared with any partner.",
|
"partner_page_empty_message": "Vaše fotky zatiaľ nie sú zdieľané so žiadnym partnerom.",
|
||||||
"partner_page_no_more_users": "No more users to add",
|
"partner_page_no_more_users": "Žiadni ďalší užívatelia na zdieľanie",
|
||||||
"partner_page_partner_add_failed": "Failed to add partner",
|
"partner_page_partner_add_failed": "Pridávanie partnera zlyhalo",
|
||||||
"partner_page_select_partner": "Select partner",
|
"partner_page_select_partner": "Zvoliť partnera",
|
||||||
"partner_page_shared_to_title": "Shared to",
|
"partner_page_shared_to_title": "Zdieľané pre",
|
||||||
"partner_page_stop_sharing_content": "{} will no longer be able to access your photos.",
|
"partner_page_stop_sharing_content": "{} už nebude mať prístup ku vašim fotkám.",
|
||||||
"partner_page_stop_sharing_title": "Stop sharing your photos?",
|
"partner_page_stop_sharing_title": "Zastaviť zdieľanie vašich fotiek?",
|
||||||
"partner_page_title": "Partner",
|
"partner_page_title": "Partner",
|
||||||
"permission_onboarding_continue_anyway": "Pokračovať aj tak",
|
"permission_onboarding_continue_anyway": "Pokračovať aj tak",
|
||||||
"permission_onboarding_get_started": "Začať",
|
"permission_onboarding_get_started": "Začať",
|
||||||
@@ -223,7 +230,7 @@
|
|||||||
"search_page_motion_photos": "Pohyblivé fotky",
|
"search_page_motion_photos": "Pohyblivé fotky",
|
||||||
"search_page_no_objects": "Žiadne informácie o objektoch",
|
"search_page_no_objects": "Žiadne informácie o objektoch",
|
||||||
"search_page_no_places": "Žiadne informácie o mieste",
|
"search_page_no_places": "Žiadne informácie o mieste",
|
||||||
"search_page_people": "People",
|
"search_page_people": "Ľudia",
|
||||||
"search_page_places": "Miesta",
|
"search_page_places": "Miesta",
|
||||||
"search_page_recently_added": "Nedávno pridané",
|
"search_page_recently_added": "Nedávno pridané",
|
||||||
"search_page_screenshots": "Snímky obrazovky",
|
"search_page_screenshots": "Snímky obrazovky",
|
||||||
@@ -284,6 +291,10 @@
|
|||||||
"theme_setting_theme_title": "Téma",
|
"theme_setting_theme_title": "Téma",
|
||||||
"theme_setting_three_stage_loading_subtitle": "Trojstupňové načítanie môže zvýšiť výkonnosť načítania, ale vedie k výrazne vyššiemu zaťaženiu siete.",
|
"theme_setting_three_stage_loading_subtitle": "Trojstupňové načítanie môže zvýšiť výkonnosť načítania, ale vedie k výrazne vyššiemu zaťaženiu siete.",
|
||||||
"theme_setting_three_stage_loading_title": "Povolenie trojstupňového načítavania",
|
"theme_setting_three_stage_loading_title": "Povolenie trojstupňového načítavania",
|
||||||
|
"upload_dialog_cancel": "Cancel",
|
||||||
|
"upload_dialog_info": "Do you want to backup the selected Asset(s) to the server?",
|
||||||
|
"upload_dialog_ok": "Upload",
|
||||||
|
"upload_dialog_title": "Upload Asset",
|
||||||
"version_announcement_overlay_ack": "Potvrdiť",
|
"version_announcement_overlay_ack": "Potvrdiť",
|
||||||
"version_announcement_overlay_release_notes": "poznámky k vydaniu",
|
"version_announcement_overlay_release_notes": "poznámky k vydaniu",
|
||||||
"version_announcement_overlay_text_1": "Ahoj, je tu nová verzia",
|
"version_announcement_overlay_text_1": "Ahoj, je tu nová verzia",
|
||||||
|
|||||||
@@ -92,6 +92,11 @@
|
|||||||
"backup_controller_page_uploading_file_info": "Uploading file info",
|
"backup_controller_page_uploading_file_info": "Uploading file info",
|
||||||
"backup_err_only_album": "Cannot remove the only album",
|
"backup_err_only_album": "Cannot remove the only album",
|
||||||
"backup_info_card_assets": "assets",
|
"backup_info_card_assets": "assets",
|
||||||
|
"backup_manual_cancelled": "Cancelled",
|
||||||
|
"backup_manual_failed": "Failed",
|
||||||
|
"backup_manual_in_progress": "Upload already in progress. Try after sometime",
|
||||||
|
"backup_manual_success": "Success",
|
||||||
|
"backup_manual_title": "Upload status",
|
||||||
"cache_settings_album_thumbnails": "Library page thumbnails ({} assets)",
|
"cache_settings_album_thumbnails": "Library page thumbnails ({} assets)",
|
||||||
"cache_settings_clear_cache_button": "Clear cache",
|
"cache_settings_clear_cache_button": "Clear cache",
|
||||||
"cache_settings_clear_cache_button_title": "Clears the app's cache. This will significantly impact the app's performance until the cache has rebuilt.",
|
"cache_settings_clear_cache_button_title": "Clears the app's cache. This will significantly impact the app's performance until the cache has rebuilt.",
|
||||||
@@ -156,6 +161,7 @@
|
|||||||
"home_page_building_timeline": "Building the timeline",
|
"home_page_building_timeline": "Building the timeline",
|
||||||
"home_page_favorite_err_local": "Can not favorite local assets yet, skipping",
|
"home_page_favorite_err_local": "Can not favorite local assets yet, skipping",
|
||||||
"home_page_first_time_notice": "If this is your first time using the app, please make sure to choose a backup album(s) so that the timeline can populate photos and videos in the album(s).",
|
"home_page_first_time_notice": "If this is your first time using the app, please make sure to choose a backup album(s) so that the timeline can populate photos and videos in the album(s).",
|
||||||
|
"home_page_upload_err_limit": "Can only upload a maximum of 30 assets at a time, skipping",
|
||||||
"image_viewer_page_state_provider_download_error": "Download Error",
|
"image_viewer_page_state_provider_download_error": "Download Error",
|
||||||
"image_viewer_page_state_provider_download_success": "Download Success",
|
"image_viewer_page_state_provider_download_success": "Download Success",
|
||||||
"library_page_albums": "Albums",
|
"library_page_albums": "Albums",
|
||||||
@@ -166,6 +172,7 @@
|
|||||||
"library_page_sharing": "Sharing",
|
"library_page_sharing": "Sharing",
|
||||||
"library_page_sort_created": "Most recently created",
|
"library_page_sort_created": "Most recently created",
|
||||||
"library_page_sort_title": "Album title",
|
"library_page_sort_title": "Album title",
|
||||||
|
"login_disabled": "Login has been disabled",
|
||||||
"login_form_api_exception": "API exception. Please check the server URL and try again.",
|
"login_form_api_exception": "API exception. Please check the server URL and try again.",
|
||||||
"login_form_button_text": "Login",
|
"login_form_button_text": "Login",
|
||||||
"login_form_email_hint": "youremail@email.com",
|
"login_form_email_hint": "youremail@email.com",
|
||||||
@@ -284,6 +291,10 @@
|
|||||||
"theme_setting_theme_title": "Theme",
|
"theme_setting_theme_title": "Theme",
|
||||||
"theme_setting_three_stage_loading_subtitle": "Three-stage loading might increase the loading performance but causes significantly higher network load",
|
"theme_setting_three_stage_loading_subtitle": "Three-stage loading might increase the loading performance but causes significantly higher network load",
|
||||||
"theme_setting_three_stage_loading_title": "Enable three-stage loading",
|
"theme_setting_three_stage_loading_title": "Enable three-stage loading",
|
||||||
|
"upload_dialog_cancel": "Cancel",
|
||||||
|
"upload_dialog_info": "Do you want to backup the selected Asset(s) to the server?",
|
||||||
|
"upload_dialog_ok": "Upload",
|
||||||
|
"upload_dialog_title": "Upload Asset",
|
||||||
"version_announcement_overlay_ack": "Acknowledge",
|
"version_announcement_overlay_ack": "Acknowledge",
|
||||||
"version_announcement_overlay_release_notes": "release notes",
|
"version_announcement_overlay_release_notes": "release notes",
|
||||||
"version_announcement_overlay_text_1": "Hi friend, there is a new release of",
|
"version_announcement_overlay_text_1": "Hi friend, there is a new release of",
|
||||||
|
|||||||
@@ -92,6 +92,11 @@
|
|||||||
"backup_controller_page_uploading_file_info": "Otpremanje svojstava datoteke",
|
"backup_controller_page_uploading_file_info": "Otpremanje svojstava datoteke",
|
||||||
"backup_err_only_album": "Nemoguće brisanje jedinog albuma",
|
"backup_err_only_album": "Nemoguće brisanje jedinog albuma",
|
||||||
"backup_info_card_assets": "zapisi",
|
"backup_info_card_assets": "zapisi",
|
||||||
|
"backup_manual_cancelled": "Cancelled",
|
||||||
|
"backup_manual_failed": "Failed",
|
||||||
|
"backup_manual_in_progress": "Upload already in progress. Try after sometime",
|
||||||
|
"backup_manual_success": "Success",
|
||||||
|
"backup_manual_title": "Upload status",
|
||||||
"cache_settings_album_thumbnails": "Sličice na stranici biblioteke",
|
"cache_settings_album_thumbnails": "Sličice na stranici biblioteke",
|
||||||
"cache_settings_clear_cache_button": "Obriši keš memoriju",
|
"cache_settings_clear_cache_button": "Obriši keš memoriju",
|
||||||
"cache_settings_clear_cache_button_title": "Ova opcija briše keš memoriju aplikacije. Ovo će bitno uticati na performanse aplikacije dok se keš memorija ne učita ponovo.",
|
"cache_settings_clear_cache_button_title": "Ova opcija briše keš memoriju aplikacije. Ovo će bitno uticati na performanse aplikacije dok se keš memorija ne učita ponovo.",
|
||||||
@@ -156,6 +161,7 @@
|
|||||||
"home_page_building_timeline": "Kreiranje hronološke linije",
|
"home_page_building_timeline": "Kreiranje hronološke linije",
|
||||||
"home_page_favorite_err_local": "Trenutno nije moguce dodati lokalne zapise u favorite, preskacu se",
|
"home_page_favorite_err_local": "Trenutno nije moguce dodati lokalne zapise u favorite, preskacu se",
|
||||||
"home_page_first_time_notice": "Ako je ovo prvi put da koristite aplikaciju, molimo Vas da odaberete albume koje želite da sačuvate",
|
"home_page_first_time_notice": "Ako je ovo prvi put da koristite aplikaciju, molimo Vas da odaberete albume koje želite da sačuvate",
|
||||||
|
"home_page_upload_err_limit": "Can only upload a maximum of 30 assets at a time, skipping",
|
||||||
"image_viewer_page_state_provider_download_error": "Preuzimanje Neuspešno",
|
"image_viewer_page_state_provider_download_error": "Preuzimanje Neuspešno",
|
||||||
"image_viewer_page_state_provider_download_success": "Preuzimanje Uspešno",
|
"image_viewer_page_state_provider_download_success": "Preuzimanje Uspešno",
|
||||||
"library_page_albums": "Albumi",
|
"library_page_albums": "Albumi",
|
||||||
@@ -166,6 +172,7 @@
|
|||||||
"library_page_sharing": "Deljenje",
|
"library_page_sharing": "Deljenje",
|
||||||
"library_page_sort_created": "Najnovije kreirano",
|
"library_page_sort_created": "Najnovije kreirano",
|
||||||
"library_page_sort_title": "Naziv albuma",
|
"library_page_sort_title": "Naziv albuma",
|
||||||
|
"login_disabled": "Login has been disabled",
|
||||||
"login_form_api_exception": "API exception. Please check the server URL and try again.",
|
"login_form_api_exception": "API exception. Please check the server URL and try again.",
|
||||||
"login_form_button_text": "Prijavi se",
|
"login_form_button_text": "Prijavi se",
|
||||||
"login_form_email_hint": "vašemail@email.com",
|
"login_form_email_hint": "vašemail@email.com",
|
||||||
@@ -284,6 +291,10 @@
|
|||||||
"theme_setting_theme_title": "Teme",
|
"theme_setting_theme_title": "Teme",
|
||||||
"theme_setting_three_stage_loading_subtitle": "Trostepeno učitavanje možda ubrza učitavanje, po cenu potrošnje podataka",
|
"theme_setting_three_stage_loading_subtitle": "Trostepeno učitavanje možda ubrza učitavanje, po cenu potrošnje podataka",
|
||||||
"theme_setting_three_stage_loading_title": "Aktiviraj trostepeno učitavanje",
|
"theme_setting_three_stage_loading_title": "Aktiviraj trostepeno učitavanje",
|
||||||
|
"upload_dialog_cancel": "Cancel",
|
||||||
|
"upload_dialog_info": "Do you want to backup the selected Asset(s) to the server?",
|
||||||
|
"upload_dialog_ok": "Upload",
|
||||||
|
"upload_dialog_title": "Upload Asset",
|
||||||
"version_announcement_overlay_ack": "Priznati",
|
"version_announcement_overlay_ack": "Priznati",
|
||||||
"version_announcement_overlay_release_notes": "novine nove verzije",
|
"version_announcement_overlay_release_notes": "novine nove verzije",
|
||||||
"version_announcement_overlay_text_1": "Ćao, nova verzija",
|
"version_announcement_overlay_text_1": "Ćao, nova verzija",
|
||||||
|
|||||||
@@ -92,6 +92,11 @@
|
|||||||
"backup_controller_page_uploading_file_info": "Uploading file info",
|
"backup_controller_page_uploading_file_info": "Uploading file info",
|
||||||
"backup_err_only_album": "Cannot remove the only album",
|
"backup_err_only_album": "Cannot remove the only album",
|
||||||
"backup_info_card_assets": "assets",
|
"backup_info_card_assets": "assets",
|
||||||
|
"backup_manual_cancelled": "Cancelled",
|
||||||
|
"backup_manual_failed": "Failed",
|
||||||
|
"backup_manual_in_progress": "Upload already in progress. Try after sometime",
|
||||||
|
"backup_manual_success": "Success",
|
||||||
|
"backup_manual_title": "Upload status",
|
||||||
"cache_settings_album_thumbnails": "Library page thumbnails ({} assets)",
|
"cache_settings_album_thumbnails": "Library page thumbnails ({} assets)",
|
||||||
"cache_settings_clear_cache_button": "Clear cache",
|
"cache_settings_clear_cache_button": "Clear cache",
|
||||||
"cache_settings_clear_cache_button_title": "Clears the app's cache. This will significantly impact the app's performance until the cache has rebuilt.",
|
"cache_settings_clear_cache_button_title": "Clears the app's cache. This will significantly impact the app's performance until the cache has rebuilt.",
|
||||||
@@ -156,6 +161,7 @@
|
|||||||
"home_page_building_timeline": "Building the timeline",
|
"home_page_building_timeline": "Building the timeline",
|
||||||
"home_page_favorite_err_local": "Can not favorite local assets yet, skipping",
|
"home_page_favorite_err_local": "Can not favorite local assets yet, skipping",
|
||||||
"home_page_first_time_notice": "If this is your first time using the app, please make sure to choose a backup album(s) so that the timeline can populate photos and videos in the album(s).",
|
"home_page_first_time_notice": "If this is your first time using the app, please make sure to choose a backup album(s) so that the timeline can populate photos and videos in the album(s).",
|
||||||
|
"home_page_upload_err_limit": "Can only upload a maximum of 30 assets at a time, skipping",
|
||||||
"image_viewer_page_state_provider_download_error": "Download Error",
|
"image_viewer_page_state_provider_download_error": "Download Error",
|
||||||
"image_viewer_page_state_provider_download_success": "Download Success",
|
"image_viewer_page_state_provider_download_success": "Download Success",
|
||||||
"library_page_albums": "Albums",
|
"library_page_albums": "Albums",
|
||||||
@@ -166,6 +172,7 @@
|
|||||||
"library_page_sharing": "Sharing",
|
"library_page_sharing": "Sharing",
|
||||||
"library_page_sort_created": "Most recently created",
|
"library_page_sort_created": "Most recently created",
|
||||||
"library_page_sort_title": "Album title",
|
"library_page_sort_title": "Album title",
|
||||||
|
"login_disabled": "Login has been disabled",
|
||||||
"login_form_api_exception": "API exception. Please check the server URL and try again.",
|
"login_form_api_exception": "API exception. Please check the server URL and try again.",
|
||||||
"login_form_button_text": "Login",
|
"login_form_button_text": "Login",
|
||||||
"login_form_email_hint": "youremail@email.com",
|
"login_form_email_hint": "youremail@email.com",
|
||||||
@@ -284,6 +291,10 @@
|
|||||||
"theme_setting_theme_title": "Theme",
|
"theme_setting_theme_title": "Theme",
|
||||||
"theme_setting_three_stage_loading_subtitle": "Three-stage loading might increase the loading performance but causes significantly higher network load",
|
"theme_setting_three_stage_loading_subtitle": "Three-stage loading might increase the loading performance but causes significantly higher network load",
|
||||||
"theme_setting_three_stage_loading_title": "Enable three-stage loading",
|
"theme_setting_three_stage_loading_title": "Enable three-stage loading",
|
||||||
|
"upload_dialog_cancel": "Cancel",
|
||||||
|
"upload_dialog_info": "Do you want to backup the selected Asset(s) to the server?",
|
||||||
|
"upload_dialog_ok": "Upload",
|
||||||
|
"upload_dialog_title": "Upload Asset",
|
||||||
"version_announcement_overlay_ack": "Acknowledge",
|
"version_announcement_overlay_ack": "Acknowledge",
|
||||||
"version_announcement_overlay_release_notes": "release notes",
|
"version_announcement_overlay_release_notes": "release notes",
|
||||||
"version_announcement_overlay_text_1": "Hi friend, there is a new release of",
|
"version_announcement_overlay_text_1": "Hi friend, there is a new release of",
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
"advanced_settings_prefer_remote_subtitle": "Some devices are painfully slow to load thumbnails from assets on the device. Activate this setting to load remote images instead.",
|
"advanced_settings_prefer_remote_subtitle": "Some devices are painfully slow to load thumbnails from assets on the device. Activate this setting to load remote images instead.",
|
||||||
"advanced_settings_prefer_remote_title": "Prefer remote images",
|
"advanced_settings_prefer_remote_title": "Prefer remote images",
|
||||||
"advanced_settings_tile_subtitle": "Advanced user's settings",
|
"advanced_settings_tile_subtitle": "Advanced user's settings",
|
||||||
"advanced_settings_tile_title": "Advanced",
|
"advanced_settings_tile_title": "Avancerad",
|
||||||
"advanced_settings_troubleshooting_subtitle": "Enable additional features for troubleshooting",
|
"advanced_settings_troubleshooting_subtitle": "Enable additional features for troubleshooting",
|
||||||
"advanced_settings_troubleshooting_title": "Troubleshooting",
|
"advanced_settings_troubleshooting_title": "Troubleshooting",
|
||||||
"album_info_card_backup_album_excluded": "EXKLUDERAD",
|
"album_info_card_backup_album_excluded": "EXKLUDERAD",
|
||||||
@@ -25,7 +25,7 @@
|
|||||||
"all_people_page_title": "People",
|
"all_people_page_title": "People",
|
||||||
"all_videos_page_title": "Videos",
|
"all_videos_page_title": "Videos",
|
||||||
"archive_page_no_archived_assets": "No archived assets found",
|
"archive_page_no_archived_assets": "No archived assets found",
|
||||||
"archive_page_title": "Archive ({})",
|
"archive_page_title": "Arkivera ({})",
|
||||||
"asset_list_layout_settings_dynamic_layout_title": "Dynamisk layout",
|
"asset_list_layout_settings_dynamic_layout_title": "Dynamisk layout",
|
||||||
"asset_list_layout_settings_group_automatically": "Automatic",
|
"asset_list_layout_settings_group_automatically": "Automatic",
|
||||||
"asset_list_layout_settings_group_by": "Gruppera bilder efter",
|
"asset_list_layout_settings_group_by": "Gruppera bilder efter",
|
||||||
@@ -92,6 +92,11 @@
|
|||||||
"backup_controller_page_uploading_file_info": "Laddar upp filinformation",
|
"backup_controller_page_uploading_file_info": "Laddar upp filinformation",
|
||||||
"backup_err_only_album": "Kan inte ta bort det enda albumet",
|
"backup_err_only_album": "Kan inte ta bort det enda albumet",
|
||||||
"backup_info_card_assets": "objekt",
|
"backup_info_card_assets": "objekt",
|
||||||
|
"backup_manual_cancelled": "Cancelled",
|
||||||
|
"backup_manual_failed": "Failed",
|
||||||
|
"backup_manual_in_progress": "Upload already in progress. Try after sometime",
|
||||||
|
"backup_manual_success": "Success",
|
||||||
|
"backup_manual_title": "Upload status",
|
||||||
"cache_settings_album_thumbnails": "Miniatyrbilder för bibliotek ({} bilder och videor)",
|
"cache_settings_album_thumbnails": "Miniatyrbilder för bibliotek ({} bilder och videor)",
|
||||||
"cache_settings_clear_cache_button": "Rensa cacheminnet",
|
"cache_settings_clear_cache_button": "Rensa cacheminnet",
|
||||||
"cache_settings_clear_cache_button_title": "Rensar appens cacheminne. Detta kommer att avsevärt påverka appens prestanda tills cachen har byggts om.",
|
"cache_settings_clear_cache_button_title": "Rensar appens cacheminne. Detta kommer att avsevärt påverka appens prestanda tills cachen har byggts om.",
|
||||||
@@ -138,7 +143,7 @@
|
|||||||
"delete_dialog_cancel": "Avbryt",
|
"delete_dialog_cancel": "Avbryt",
|
||||||
"delete_dialog_ok": "Radera",
|
"delete_dialog_ok": "Radera",
|
||||||
"delete_dialog_title": "Radera permanent",
|
"delete_dialog_title": "Radera permanent",
|
||||||
"description_input_hint_text": "Add description...",
|
"description_input_hint_text": "Lägg till beskrivning...",
|
||||||
"description_input_submit_error": "Error updating description, check the log for more details",
|
"description_input_submit_error": "Error updating description, check the log for more details",
|
||||||
"exif_bottom_sheet_description": "Lägg till beskrivning...",
|
"exif_bottom_sheet_description": "Lägg till beskrivning...",
|
||||||
"exif_bottom_sheet_details": "DETALJER",
|
"exif_bottom_sheet_details": "DETALJER",
|
||||||
@@ -156,16 +161,18 @@
|
|||||||
"home_page_building_timeline": "Bygger tidslinjen",
|
"home_page_building_timeline": "Bygger tidslinjen",
|
||||||
"home_page_favorite_err_local": "Can not favorite local assets yet, skipping",
|
"home_page_favorite_err_local": "Can not favorite local assets yet, skipping",
|
||||||
"home_page_first_time_notice": "Om det här är första gången du använder appen, välj ett eller flera backup-album så att tidslinjen kan fyllas med foton och videor från albumen.",
|
"home_page_first_time_notice": "Om det här är första gången du använder appen, välj ett eller flera backup-album så att tidslinjen kan fyllas med foton och videor från albumen.",
|
||||||
|
"home_page_upload_err_limit": "Can only upload a maximum of 30 assets at a time, skipping",
|
||||||
"image_viewer_page_state_provider_download_error": "Download Error",
|
"image_viewer_page_state_provider_download_error": "Download Error",
|
||||||
"image_viewer_page_state_provider_download_success": "Download Success",
|
"image_viewer_page_state_provider_download_success": "Download Success",
|
||||||
"library_page_albums": "Album",
|
"library_page_albums": "Album",
|
||||||
"library_page_archive": "Archive",
|
"library_page_archive": "Arkiv",
|
||||||
"library_page_device_albums": "Albums on Device",
|
"library_page_device_albums": "Albums on Device",
|
||||||
"library_page_favorites": "Favoriter",
|
"library_page_favorites": "Favoriter",
|
||||||
"library_page_new_album": "Nytt album",
|
"library_page_new_album": "Nytt album",
|
||||||
"library_page_sharing": "Delas",
|
"library_page_sharing": "Delas",
|
||||||
"library_page_sort_created": "Senast skapad",
|
"library_page_sort_created": "Senast skapad",
|
||||||
"library_page_sort_title": "Albumtitel",
|
"library_page_sort_title": "Albumtitel",
|
||||||
|
"login_disabled": "Login has been disabled",
|
||||||
"login_form_api_exception": "API exception. Please check the server URL and try again.",
|
"login_form_api_exception": "API exception. Please check the server URL and try again.",
|
||||||
"login_form_button_text": "Logga in",
|
"login_form_button_text": "Logga in",
|
||||||
"login_form_email_hint": "din.email@email.com",
|
"login_form_email_hint": "din.email@email.com",
|
||||||
@@ -194,24 +201,24 @@
|
|||||||
"notification_permission_list_tile_content": "Grant permission to enable notifications.",
|
"notification_permission_list_tile_content": "Grant permission to enable notifications.",
|
||||||
"notification_permission_list_tile_enable_button": "Enable Notifications",
|
"notification_permission_list_tile_enable_button": "Enable Notifications",
|
||||||
"notification_permission_list_tile_title": "Notification Permission",
|
"notification_permission_list_tile_title": "Notification Permission",
|
||||||
"partner_page_add_partner": "Add partner",
|
"partner_page_add_partner": "Lägg till partner",
|
||||||
"partner_page_empty_message": "Your photos are not yet shared with any partner.",
|
"partner_page_empty_message": "Your photos are not yet shared with any partner.",
|
||||||
"partner_page_no_more_users": "No more users to add",
|
"partner_page_no_more_users": "No more users to add",
|
||||||
"partner_page_partner_add_failed": "Failed to add partner",
|
"partner_page_partner_add_failed": "Failed to add partner",
|
||||||
"partner_page_select_partner": "Select partner",
|
"partner_page_select_partner": "Select partner",
|
||||||
"partner_page_shared_to_title": "Shared to",
|
"partner_page_shared_to_title": "Shared to",
|
||||||
"partner_page_stop_sharing_content": "{} will no longer be able to access your photos.",
|
"partner_page_stop_sharing_content": "{} will no longer be able to access your photos.",
|
||||||
"partner_page_stop_sharing_title": "Stop sharing your photos?",
|
"partner_page_stop_sharing_title": "Sluta dela dina foton?",
|
||||||
"partner_page_title": "Partner",
|
"partner_page_title": "Partner",
|
||||||
"permission_onboarding_continue_anyway": "Continue anyway",
|
"permission_onboarding_continue_anyway": "Continue anyway",
|
||||||
"permission_onboarding_get_started": "Get started",
|
"permission_onboarding_get_started": "Kom igång",
|
||||||
"permission_onboarding_go_to_settings": "Gå till inställningar",
|
"permission_onboarding_go_to_settings": "Gå till inställningar",
|
||||||
"permission_onboarding_grant_permission": "Grant permission",
|
"permission_onboarding_grant_permission": "Tillåt",
|
||||||
"permission_onboarding_log_out": "Logga ut",
|
"permission_onboarding_log_out": "Logga ut",
|
||||||
"permission_onboarding_permission_denied": "Permission denied. To use Immich, grant photo and video permissions in Settings.",
|
"permission_onboarding_permission_denied": "Permission denied. To use Immich, grant photo and video permissions in Settings.",
|
||||||
"permission_onboarding_permission_granted": "Permission granted! You are all set.",
|
"permission_onboarding_permission_granted": "Permission granted! You are all set.",
|
||||||
"permission_onboarding_permission_limited": "Permission limited. To let Immich backup and manage your entire gallery collection, grant photo and video permissions in Settings.",
|
"permission_onboarding_permission_limited": "Permission limited. To let Immich backup and manage your entire gallery collection, grant photo and video permissions in Settings.",
|
||||||
"permission_onboarding_request": "Immich requires permission to view your photos and videos.",
|
"permission_onboarding_request": "Immich kräver tillstånd för att se dina foton och videor.",
|
||||||
"profile_drawer_app_logs": "Loggar",
|
"profile_drawer_app_logs": "Loggar",
|
||||||
"profile_drawer_client_server_up_to_date": "Klient och server är uppdaterade",
|
"profile_drawer_client_server_up_to_date": "Klient och server är uppdaterade",
|
||||||
"profile_drawer_settings": "Inställningar",
|
"profile_drawer_settings": "Inställningar",
|
||||||
@@ -284,6 +291,10 @@
|
|||||||
"theme_setting_theme_title": "Tema",
|
"theme_setting_theme_title": "Tema",
|
||||||
"theme_setting_three_stage_loading_subtitle": "Trestegsladdning kan öka prestandan, men kan också leda till signifikant högre nätverksbelastning",
|
"theme_setting_three_stage_loading_subtitle": "Trestegsladdning kan öka prestandan, men kan också leda till signifikant högre nätverksbelastning",
|
||||||
"theme_setting_three_stage_loading_title": "Aktivera trestegsladdning",
|
"theme_setting_three_stage_loading_title": "Aktivera trestegsladdning",
|
||||||
|
"upload_dialog_cancel": "Cancel",
|
||||||
|
"upload_dialog_info": "Do you want to backup the selected Asset(s) to the server?",
|
||||||
|
"upload_dialog_ok": "Upload",
|
||||||
|
"upload_dialog_title": "Upload Asset",
|
||||||
"version_announcement_overlay_ack": "Bekräfta",
|
"version_announcement_overlay_ack": "Bekräfta",
|
||||||
"version_announcement_overlay_release_notes": "versionsinformation",
|
"version_announcement_overlay_release_notes": "versionsinformation",
|
||||||
"version_announcement_overlay_text_1": "Hej vännen, det finns en ny version av",
|
"version_announcement_overlay_text_1": "Hej vännen, det finns en ny version av",
|
||||||
|
|||||||
@@ -1,199 +1,206 @@
|
|||||||
{
|
{
|
||||||
"add_to_album_bottom_sheet_added": "Added to {album}",
|
"add_to_album_bottom_sheet_added": "เพิ่มไปยัง {album}",
|
||||||
"add_to_album_bottom_sheet_already_exists": "Already in {album}",
|
"add_to_album_bottom_sheet_already_exists": "อยู่ใน {album} อยู่แล้ว",
|
||||||
"advanced_settings_prefer_remote_subtitle": "อุปกรณ์บางเครื่องโหลด thumbnails ช้ามาก เปิดการตั้งค่านี้เพื่อโหลดรูปภาพรีโมทแทน",
|
"advanced_settings_prefer_remote_subtitle": "อุปกรณ์บางเครื่องโหลดภาพขนาดย่อช้ามาก เปิดการตั้งค่านี้เพื่อโหลดรูปภาพจากรีโมทแทน",
|
||||||
"advanced_settings_prefer_remote_title": "ให้ความสำคัญกับรูปภาพรีโมท",
|
"advanced_settings_prefer_remote_title": "ให้ความสำคัญกับรูปภาพรีโมท",
|
||||||
"advanced_settings_tile_subtitle": "ตั้งค่าผู้ใช้งานขั้นสูง",
|
"advanced_settings_tile_subtitle": "ตั้งค่าผู้ใช้งานขั้นสูง",
|
||||||
"advanced_settings_tile_title": "ขั้งสูง",
|
"advanced_settings_tile_title": "ขั้นสูง",
|
||||||
"advanced_settings_troubleshooting_subtitle": "เปิดฟีเจอร์เพิ่มเติมเพื่อแก้ไขปัญหา",
|
"advanced_settings_troubleshooting_subtitle": "เปิดฟีเจอร์เพิ่มเติมเพื่อแก้ไขปัญหา",
|
||||||
"advanced_settings_troubleshooting_title": "แก้ไขปัญหา",
|
"advanced_settings_troubleshooting_title": "แก้ไขปัญหา",
|
||||||
"album_info_card_backup_album_excluded": "EXCLUDED",
|
"album_info_card_backup_album_excluded": "ถูกยกเว้น",
|
||||||
"album_info_card_backup_album_included": "INCLUDED",
|
"album_info_card_backup_album_included": "รวม",
|
||||||
"album_thumbnail_card_item": "1 item",
|
"album_thumbnail_card_item": "1 item",
|
||||||
"album_thumbnail_card_items": "{} items",
|
"album_thumbnail_card_items": "{} items",
|
||||||
"album_thumbnail_card_shared": " · Shared",
|
"album_thumbnail_card_shared": " · Shared",
|
||||||
"album_thumbnail_owned": "เป็นเจ้าของ",
|
"album_thumbnail_owned": "เป็นเจ้าของ",
|
||||||
"album_thumbnail_shared_by": "แชร์โดย {}",
|
"album_thumbnail_shared_by": "แชร์โดย {}",
|
||||||
"album_viewer_appbar_share_delete": "Delete album",
|
"album_viewer_appbar_share_delete": "ลบอั้ลบั้ม",
|
||||||
"album_viewer_appbar_share_err_delete": "Failed to delete album",
|
"album_viewer_appbar_share_err_delete": "ลบอัลบั้มไม่สำเร็จ",
|
||||||
"album_viewer_appbar_share_err_leave": "Failed to leave album",
|
"album_viewer_appbar_share_err_leave": "ออกจากอัลบั้มไม่สำเร็จ",
|
||||||
"album_viewer_appbar_share_err_remove": "There are problems in removing assets from album",
|
"album_viewer_appbar_share_err_remove": "มีปัญหาในการนำทรัพยากรออกจากอัลบั้ม",
|
||||||
"album_viewer_appbar_share_err_title": "Failed to change album title",
|
"album_viewer_appbar_share_err_title": "เปลี่ยนชื่ออัลบั้มไม่สำเร็จ",
|
||||||
"album_viewer_appbar_share_leave": "Leave album",
|
"album_viewer_appbar_share_leave": "ออกจากอัลบั้ม",
|
||||||
"album_viewer_appbar_share_remove": "Remove from album",
|
"album_viewer_appbar_share_remove": "ลบออกจากอัลบั้ม",
|
||||||
"album_viewer_page_share_add_users": "Add users",
|
"album_viewer_page_share_add_users": "เพิ่มผู้ใช้งาน",
|
||||||
"all_people_page_title": "ผู้คน",
|
"all_people_page_title": "ผู้คน",
|
||||||
"all_videos_page_title": "วิดีโอ",
|
"all_videos_page_title": "วิดีโอ",
|
||||||
"archive_page_no_archived_assets": "ไม่พบทรัพยากรในที่เก็บถาวร",
|
"archive_page_no_archived_assets": "ไม่พบทรัพยากรในที่เก็บถาวร",
|
||||||
"archive_page_title": "เก็บถาวร ({})",
|
"archive_page_title": "เก็บถาวร ({})",
|
||||||
"asset_list_layout_settings_dynamic_layout_title": "Dynamic layout",
|
"asset_list_layout_settings_dynamic_layout_title": "แผนผังปรับตัว",
|
||||||
"asset_list_layout_settings_group_automatically": "อัตโนมัติ",
|
"asset_list_layout_settings_group_automatically": "อัตโนมัติ",
|
||||||
"asset_list_layout_settings_group_by": "Group assets by",
|
"asset_list_layout_settings_group_by": "จัดกลุ่มทรัพยากรโดย",
|
||||||
"asset_list_layout_settings_group_by_month": "Month",
|
"asset_list_layout_settings_group_by_month": "เดือน",
|
||||||
"asset_list_layout_settings_group_by_month_day": "Month + day",
|
"asset_list_layout_settings_group_by_month_day": "เดือน + วัน",
|
||||||
"asset_list_settings_subtitle": "Photo grid layout settings",
|
"asset_list_settings_subtitle": "Photo grid layout settings",
|
||||||
"asset_list_settings_title": "Photo Grid",
|
"asset_list_settings_title": "Photo Grid",
|
||||||
"backup_album_selection_page_albums_device": "Albums on device ({})",
|
"backup_album_selection_page_albums_device": "อัลบั้มบนเครื่อง ({})",
|
||||||
"backup_album_selection_page_albums_tap": "Tap to include, double tap to exclude",
|
"backup_album_selection_page_albums_tap": "กดเพื่อรวม กดสองครั้งเพื่อยกเว้น",
|
||||||
"backup_album_selection_page_assets_scatter": "Assets can scatter across multiple albums. Thus, albums can be included or excluded during the backup process.",
|
"backup_album_selection_page_assets_scatter": "ทรัพยาการสามารถกระจายไปในหลายอัลบั้ม ดังนั้นอัลบั้มสามารถถูกรวมหรือยกเว้นในกระบวนการสำรองข้อมูล",
|
||||||
"backup_album_selection_page_select_albums": "Select albums",
|
"backup_album_selection_page_select_albums": "เลือกอัลบั้ม",
|
||||||
"backup_album_selection_page_selection_info": "Selection Info",
|
"backup_album_selection_page_selection_info": "ข้อมูลของที่เลือก",
|
||||||
"backup_album_selection_page_total_assets": "Total unique assets",
|
"backup_album_selection_page_total_assets": "ทรัพยากรทั้งหมด",
|
||||||
"backup_all": "All",
|
"backup_all": "ทั้งหมด",
|
||||||
"backup_background_service_backup_failed_message": "Failed to backup assets. Retrying…",
|
"backup_background_service_backup_failed_message": "ไม่สามารถสำรองทรัพยากรได้ กำลังลองใหม่...",
|
||||||
"backup_background_service_connection_failed_message": "Failed to connect to the server. Retrying…",
|
"backup_background_service_connection_failed_message": "ไม่สามารถเชื่อมต่อกับเซิร์ฟเวอร์ได้ กำลังลองใหม่...",
|
||||||
"backup_background_service_current_upload_notification": "Uploading {}",
|
"backup_background_service_current_upload_notification": "กำลังอัพโหลด {}",
|
||||||
"backup_background_service_default_notification": "Checking for new assets…",
|
"backup_background_service_default_notification": "ตรวจสอบหาทรัพยากรใหม่...",
|
||||||
"backup_background_service_error_title": "Backup error",
|
"backup_background_service_error_title": "สำรองข้อมูลผิดพลาด",
|
||||||
"backup_background_service_in_progress_notification": "Backing up your assets…",
|
"backup_background_service_in_progress_notification": "กำลังสำรองทรัพยากรของคุณ...",
|
||||||
"backup_background_service_upload_failure_notification": "Failed to upload {}",
|
"backup_background_service_upload_failure_notification": "อัพโหลดล้มเหลว {}",
|
||||||
"backup_controller_page_albums": "Backup Albums",
|
"backup_controller_page_albums": "สำรองข้อมูลอัลบั้ม",
|
||||||
"backup_controller_page_background_app_refresh_disabled_content": "Enable background app refresh in Settings > General > Background App Refresh in order to use background backup.",
|
"backup_controller_page_background_app_refresh_disabled_content": "เปิดการดึงข้อมูลแอพอยู่เบื้องหลังโดยการไปที่ ตั้งค่า > ทั่วไป > ดึงข้อมูลแอปอยู่เบื้องหลัง เพื่อใช้การดึงข้อมูลในเบื้องหลัง",
|
||||||
"backup_controller_page_background_app_refresh_disabled_title": "Background app refresh disabled",
|
"backup_controller_page_background_app_refresh_disabled_title": "การรีเฟรชแอพในฉากหลังปิด",
|
||||||
"backup_controller_page_background_app_refresh_enable_button_text": "Go to settings",
|
"backup_controller_page_background_app_refresh_enable_button_text": "ไปยังการตั้งค่า",
|
||||||
"backup_controller_page_background_battery_info_link": "Show me how",
|
"backup_controller_page_background_battery_info_link": "แสดงให้ฉันเห็น",
|
||||||
"backup_controller_page_background_battery_info_message": "For the best background backup experience, please disable any battery optimizations restricting background activity for Immich.\n\nSince this is device-specific, please lookup the required information for your device manufacturer.",
|
"backup_controller_page_background_battery_info_message": "เพื่อประสบการณ์สำรองข้อมูลที่ดีที่สุด กรุณาปิดการตั้งค่าประสิทธิภาพแบตเตอรี่จำกัดกิจกรรมในเบื้องหลังสำหรับ Immich\n\nเนื่องจากการตั้งค่าดังกล่าวเฉพาะเจาะจงสำหรับโทรศัพท์แต่ละเครื่อง กรุณาค้นหาข้อมูลจากผู้ผลิตโทรศัพท์ของคุณ",
|
||||||
"backup_controller_page_background_battery_info_ok": "OK",
|
"backup_controller_page_background_battery_info_ok": "โอเค",
|
||||||
"backup_controller_page_background_battery_info_title": "Battery optimizations",
|
"backup_controller_page_background_battery_info_title": "ประสิทธิภาพแบตเตอรี่",
|
||||||
"backup_controller_page_background_charging": "Only while charging",
|
"backup_controller_page_background_charging": "ขณะชาร์จอย่างเดียว",
|
||||||
"backup_controller_page_background_configure_error": "Failed to configure the background service",
|
"backup_controller_page_background_configure_error": "ไม่สามารถติดตั้งบริการเบื้องหลัง",
|
||||||
"backup_controller_page_background_delay": "Delay new assets backup: {}",
|
"backup_controller_page_background_delay": "ล่าช้าการลำรองทรัพยากรใหม่: {}",
|
||||||
"backup_controller_page_background_description": "Turn on the background service to automatically backup any new assets without needing to open the app",
|
"backup_controller_page_background_description": "เปิดบริการเบื้องหลังเพื่อที่จะสำรองทรัพยากรใหม่โดยที่ไม่จำเป็นต้องเปิดแอป",
|
||||||
"backup_controller_page_background_is_off": "Automatic background backup is off",
|
"backup_controller_page_background_is_off": "การสำรองข้อมูลอัตโนมัติปิดอยู่",
|
||||||
"backup_controller_page_background_is_on": "Automatic background backup is on",
|
"backup_controller_page_background_is_on": "การสำรองข้อมูลอัตโนมัติเปิดอยู่",
|
||||||
"backup_controller_page_background_turn_off": "Turn off background service",
|
"backup_controller_page_background_turn_off": "ปิดบริการเบื้องหลัง",
|
||||||
"backup_controller_page_background_turn_on": "Turn on background service",
|
"backup_controller_page_background_turn_on": "เปิดบริการเบื้องหลัง",
|
||||||
"backup_controller_page_background_wifi": "Only on WiFi",
|
"backup_controller_page_background_wifi": "บน WiFi เท่านั้น",
|
||||||
"backup_controller_page_backup": "Backup",
|
"backup_controller_page_backup": "สำรองข้อมูล",
|
||||||
"backup_controller_page_backup_selected": "Selected: ",
|
"backup_controller_page_backup_selected": "ที่เลือก:",
|
||||||
"backup_controller_page_backup_sub": "Backed up photos and videos",
|
"backup_controller_page_backup_sub": "รูปภาพและวิดีโอที่สำรองแล้ว",
|
||||||
"backup_controller_page_cancel": "Cancel",
|
"backup_controller_page_cancel": "ยกเลิก",
|
||||||
"backup_controller_page_created": "Created on: {}",
|
"backup_controller_page_created": "Created on: {}",
|
||||||
"backup_controller_page_desc_backup": "Turn on foreground backup to automatically upload new assets to the server when opening the app.",
|
"backup_controller_page_desc_backup": "เปิดการสำรองข้อมูลในฉากหน้าเพื่อที่จะอัพโหลดทรัพยากรใหม่ไปยังเซิร์ฟเวอร์เมื่อเปิดแอพ",
|
||||||
"backup_controller_page_excluded": "Excluded: ",
|
"backup_controller_page_excluded": "ถูกยกเว้น:",
|
||||||
"backup_controller_page_failed": "Failed ({})",
|
"backup_controller_page_failed": "Failed ({})",
|
||||||
"backup_controller_page_filename": "File name: {} [{}]",
|
"backup_controller_page_filename": "File name: {} [{}]",
|
||||||
"backup_controller_page_id": "ID: {}",
|
"backup_controller_page_id": "ID: {}",
|
||||||
"backup_controller_page_info": "Backup Information",
|
"backup_controller_page_info": "ข้อมูลเกี่ยวกับการสำรองข้อมูล",
|
||||||
"backup_controller_page_none_selected": "None selected",
|
"backup_controller_page_none_selected": "ไม่มีที่เลือก",
|
||||||
"backup_controller_page_remainder": "Remainder",
|
"backup_controller_page_remainder": "ที่เหลือ",
|
||||||
"backup_controller_page_remainder_sub": "Remaining photos and videos to back up from selection",
|
"backup_controller_page_remainder_sub": "รูปภาพและวิดีโอที่เลือกสำรองที่เหลือ",
|
||||||
"backup_controller_page_select": "Select",
|
"backup_controller_page_select": "เลือก",
|
||||||
"backup_controller_page_server_storage": "Server Storage",
|
"backup_controller_page_server_storage": "พื้นที่จัดเก็บเซิร์ฟเวอร์",
|
||||||
"backup_controller_page_start_backup": "Start Backup",
|
"backup_controller_page_start_backup": "เริ่มสำรองข้อมูล",
|
||||||
"backup_controller_page_status_off": "Automatic foreground backup is off",
|
"backup_controller_page_status_off": "การสำรองข้อมูลในฉากหน้าปิดอยู่",
|
||||||
"backup_controller_page_status_on": "Automatic foreground backup is on",
|
"backup_controller_page_status_on": "การสำรองข้อมูลในฉากหน้าเปิดอยู่",
|
||||||
"backup_controller_page_storage_format": "{} of {} used",
|
"backup_controller_page_storage_format": "{} จาก {} ถูกใช้งาน",
|
||||||
"backup_controller_page_to_backup": "Albums to be backup",
|
"backup_controller_page_to_backup": "อัลบั้มที่จะสำรองข้อมูล",
|
||||||
"backup_controller_page_total": "Total",
|
"backup_controller_page_total": "ทั้งหมด",
|
||||||
"backup_controller_page_total_sub": "All unique photos and videos from selected albums",
|
"backup_controller_page_total_sub": "รูปภาพและวิดีโอที่ไม่ซ้ำทั้งหมดจากอัลบั้มที่เลือก",
|
||||||
"backup_controller_page_turn_off": "Turn off foreground backup",
|
"backup_controller_page_turn_off": "ปิดการสำรองข้อมูลในฉากหน้า",
|
||||||
"backup_controller_page_turn_on": "Turn on foreground backup",
|
"backup_controller_page_turn_on": "เปิดการสำรองข้อมูลในฉากหน้า",
|
||||||
"backup_controller_page_uploading_file_info": "Uploading file info",
|
"backup_controller_page_uploading_file_info": "Uploading file info",
|
||||||
"backup_err_only_album": "Cannot remove the only album",
|
"backup_err_only_album": "ไม่สามารถนำอัลบั้มสุดท้ายออกได้",
|
||||||
"backup_info_card_assets": "assets",
|
"backup_info_card_assets": "ทรัพยากร",
|
||||||
|
"backup_manual_cancelled": "Cancelled",
|
||||||
|
"backup_manual_failed": "ล้มเหลว",
|
||||||
|
"backup_manual_in_progress": "อัปโหลดกำลังดำเนินการอยู่ โปรดลองใหม่ในสักพัก",
|
||||||
|
"backup_manual_success": "สำเร็จ",
|
||||||
|
"backup_manual_title": "สถานะอัพโหลด",
|
||||||
"cache_settings_album_thumbnails": "Library page thumbnails ({} assets)",
|
"cache_settings_album_thumbnails": "Library page thumbnails ({} assets)",
|
||||||
"cache_settings_clear_cache_button": "Clear cache",
|
"cache_settings_clear_cache_button": "ล้างแคช",
|
||||||
"cache_settings_clear_cache_button_title": "Clears the app's cache. This will significantly impact the app's performance until the cache has rebuilt.",
|
"cache_settings_clear_cache_button_title": "Clears the app's cache. This will significantly impact the app's performance until the cache has rebuilt.",
|
||||||
"cache_settings_image_cache_size": "Image cache size ({} assets)",
|
"cache_settings_image_cache_size": "Image cache size ({} assets)",
|
||||||
"cache_settings_statistics_album": "Library thumbnails",
|
"cache_settings_statistics_album": "รูปย่อไลบลารี่",
|
||||||
"cache_settings_statistics_assets": "{} assets ({})",
|
"cache_settings_statistics_assets": "{} assets ({})",
|
||||||
"cache_settings_statistics_full": "Full images",
|
"cache_settings_statistics_full": "รูปภาพเต็ม",
|
||||||
"cache_settings_statistics_shared": "Shared album thumbnails",
|
"cache_settings_statistics_shared": "Shared album thumbnails",
|
||||||
"cache_settings_statistics_thumbnail": "Thumbnails",
|
"cache_settings_statistics_thumbnail": "รูปย่อ",
|
||||||
"cache_settings_statistics_title": "Cache usage",
|
"cache_settings_statistics_title": "การใช้งานแคช",
|
||||||
"cache_settings_subtitle": "Control the caching behaviour of the Immich mobile application",
|
"cache_settings_subtitle": "ควบคุมพฤติกรรมการแคชของแอปพลิเคชัน Immich",
|
||||||
"cache_settings_thumbnail_size": "Thumbnail cache size ({} assets)",
|
"cache_settings_thumbnail_size": "ขนาดแคชรูปย่อ ({} ทรัพยากร)",
|
||||||
"cache_settings_title": "Caching Settings",
|
"cache_settings_title": "ตั้งค่าแคช",
|
||||||
"change_password_form_confirm_password": "Confirm Password",
|
"change_password_form_confirm_password": "ยืนยันรหัสผ่าน",
|
||||||
"change_password_form_description": "Hi {firstName} {lastName},\n\nThis is either the first time you are signing into the system or a request has been made to change your password. Please enter the new password below.",
|
"change_password_form_description": "สวัสดี {firstName} {lastName},\n\nครั้งนี้อาจจะเป็นครั้งแรกที่คุณเข้าสู่ระบบ หรือมีคำขอเพื่อที่จะเปลี่ยนรหัสผ่านของคุI กรุณาเพิ่มรหัสผ่านใหม่ข้างล่าง",
|
||||||
"change_password_form_new_password": "New Password",
|
"change_password_form_new_password": "รหัสผ่านใหม่",
|
||||||
"change_password_form_password_mismatch": "Passwords do not match",
|
"change_password_form_password_mismatch": "รหัสผ่านไม่ตรงกัน",
|
||||||
"change_password_form_reenter_new_password": "Re-enter New Password",
|
"change_password_form_reenter_new_password": "กรอกรหัสผ่านใหม่",
|
||||||
"common_add_to_album": "Add to album",
|
"common_add_to_album": "เพิ่มเข้าอัลบั้ม",
|
||||||
"common_change_password": "Change Password",
|
"common_change_password": "เปลี่ยนรหัสผ่าน",
|
||||||
"common_create_new_album": "Create new album",
|
"common_create_new_album": "สร้างอัลบั้มใหม่",
|
||||||
"common_server_error": "กรุณาตรวจสอบการเชื่อมต่ออินเทอร์เน็ต ให้แน่ใจว่าเซิร์ฟเวอร์สามารถเข้าถึงได้ และเวอร์ชั่นแอพและเซิร์ฟเวอร์เข้ากันได้",
|
"common_server_error": "กรุณาตรวจสอบการเชื่อมต่ออินเทอร์เน็ต ให้แน่ใจว่าเซิร์ฟเวอร์สามารถเข้าถึงได้ และเวอร์ชั่นแอพกับเซิร์ฟเวอร์เข้ากันได้",
|
||||||
"common_shared": "Shared",
|
"common_shared": "แชร์",
|
||||||
"control_bottom_app_bar_add_to_album": "Add to album",
|
"control_bottom_app_bar_add_to_album": "เพิ่มลงอัลบั้ม",
|
||||||
"control_bottom_app_bar_album_info": "{} items",
|
"control_bottom_app_bar_album_info": "{} รายการ",
|
||||||
"control_bottom_app_bar_album_info_shared": "{} items · Shared",
|
"control_bottom_app_bar_album_info_shared": "{} รายการ · ถูกแชร์",
|
||||||
"control_bottom_app_bar_archive": "เก็บถาวร",
|
"control_bottom_app_bar_archive": "เก็บถาวร",
|
||||||
"control_bottom_app_bar_create_new_album": "Create new album",
|
"control_bottom_app_bar_create_new_album": "สร้างอัลบั้มใหม่",
|
||||||
"control_bottom_app_bar_delete": "Delete",
|
"control_bottom_app_bar_delete": "ลบออก",
|
||||||
"control_bottom_app_bar_favorite": "Favorite",
|
"control_bottom_app_bar_favorite": "รายการโปรด",
|
||||||
"control_bottom_app_bar_share": "Share",
|
"control_bottom_app_bar_share": "แชร์",
|
||||||
"control_bottom_app_bar_unarchive": "นำออกจากที่เก็บถาวร",
|
"control_bottom_app_bar_unarchive": "นำออกจากที่เก็บถาวร",
|
||||||
"create_album_page_untitled": "Untitled",
|
"create_album_page_untitled": "ไม่มีชื่อ",
|
||||||
"create_shared_album_page_create": "Create",
|
"create_shared_album_page_create": "Create",
|
||||||
"create_shared_album_page_share": "Share",
|
"create_shared_album_page_share": "แชร์",
|
||||||
"create_shared_album_page_share_add_assets": "ADD ASSETS",
|
"create_shared_album_page_share_add_assets": "เพิ่มทรัพยากร",
|
||||||
"create_shared_album_page_share_select_photos": "Select Photos",
|
"create_shared_album_page_share_select_photos": "เลือกรูปภาพ",
|
||||||
"curated_location_page_title": "สถานที่",
|
"curated_location_page_title": "สถานที่",
|
||||||
"curated_object_page_title": "สิ่งของ",
|
"curated_object_page_title": "สิ่งของ",
|
||||||
"daily_title_text_date": "E, MMM dd",
|
"daily_title_text_date": "E dd MMM",
|
||||||
"daily_title_text_date_year": "E, MMM dd, yyyy",
|
"daily_title_text_date_year": "E dd MMM yyyy",
|
||||||
"date_format": "E, LLL d, y • h:mm a",
|
"date_format": "E, LLL d, y • h:mm a",
|
||||||
"delete_dialog_alert": "These items will be permanently deleted from Immich and from your device",
|
"delete_dialog_alert": "รายการดังกล่าวจะถูกลบจาก Immich และเครื่องอย่างถาวร",
|
||||||
"delete_dialog_cancel": "Cancel",
|
"delete_dialog_cancel": "ยกเลิก",
|
||||||
"delete_dialog_ok": "Delete",
|
"delete_dialog_ok": "ลบออก",
|
||||||
"delete_dialog_title": "Delete Permanently",
|
"delete_dialog_title": "ลบถาวร",
|
||||||
"description_input_hint_text": "เพื่มรายละเอียด...",
|
"description_input_hint_text": "เพื่มรายละเอียด...",
|
||||||
"description_input_submit_error": "อัพเดตรายละเอียดผิดพลาด ตรวจสอบการบันทึกเพื่อรายละเอียดเพิ่มเติม",
|
"description_input_submit_error": "อัพเดตรายละเอียดผิดพลาด ตรวจสอบ log เพื่อรายละเอียดเพิ่มเติม",
|
||||||
"exif_bottom_sheet_description": "Add Description...",
|
"exif_bottom_sheet_description": "เพิ่มคำอธิบาย",
|
||||||
"exif_bottom_sheet_details": "DETAILS",
|
"exif_bottom_sheet_details": "รายละเอียด",
|
||||||
"exif_bottom_sheet_location": "LOCATION",
|
"exif_bottom_sheet_location": "ตำแหน่ง",
|
||||||
"experimental_settings_new_asset_list_subtitle": "Work in progress",
|
"experimental_settings_new_asset_list_subtitle": "กำลังพัฒนา",
|
||||||
"experimental_settings_new_asset_list_title": "Enable experimental photo grid",
|
"experimental_settings_new_asset_list_title": "Enable experimental photo grid",
|
||||||
"experimental_settings_subtitle": "Use at your own risk!",
|
"experimental_settings_subtitle": "Use at your own risk!",
|
||||||
"experimental_settings_title": "Experimental",
|
"experimental_settings_title": "ทดลอง",
|
||||||
"favorites_page_no_favorites": "ไม่พบทรัพยากรในรายการโปรด",
|
"favorites_page_no_favorites": "ไม่พบทรัพยากรในรายการโปรด",
|
||||||
"favorites_page_title": "Favorites",
|
"favorites_page_title": "รายการโปรด",
|
||||||
"home_page_add_to_album_conflicts": "Added {added} assets to album {album}. {failed} assets are already in the album.",
|
"home_page_add_to_album_conflicts": "เพิ่ม {added} ทรัพยากรเข้าอัลบั้ม {album}. {failed} ทรัพยากรอยู่ในอัลบั้มอยู่แล้ว",
|
||||||
"home_page_add_to_album_err_local": "Can not add local assets to albums yet, skipping",
|
"home_page_add_to_album_err_local": " ไม่สามารถเพิ่มทรัพยากรบนเครื่องเข้าอัลบั้ม กำลังข้าม",
|
||||||
"home_page_add_to_album_success": "Added {added} assets to album {album}.",
|
"home_page_add_to_album_success": "Added {added} assets to album {album}.",
|
||||||
"home_page_archive_err_local": "ไม่สามารถเก็บถาวรในขณะนี้ กำลังข้าม",
|
"home_page_archive_err_local": "ไม่สามารถเก็บถาวรในขณะนี้ กำลังข้าม",
|
||||||
"home_page_building_timeline": "Building the timeline",
|
"home_page_building_timeline": "กำลังสร้าง timeline",
|
||||||
"home_page_favorite_err_local": "Can not favorite local assets yet, skipping",
|
"home_page_favorite_err_local": " ไม่สามารถตั้งทรัพยากรบนเครื่องเป็นรายการโปรด กำลังข้าม",
|
||||||
"home_page_first_time_notice": "If this is your first time using the app, please make sure to choose a backup album(s) so that the timeline can populate photos and videos in the album(s).",
|
"home_page_first_time_notice": "ถ้าครั้งนี้เป็นครั้งแรกที่ใช้แอปนี้ กรุณาเลือกอัลบั้มที่จะสำรองข้อมูล ไทม์ไลน์จะได้เพิ่มรูปภาพและวิดีโอที่อยู่ในอัลบั้ม",
|
||||||
"image_viewer_page_state_provider_download_error": "Download Error",
|
"home_page_upload_err_limit": "สามารถอัพโหลดได้มากสุดครั้งละ 30 ทรัพยากร กำลังข้าม",
|
||||||
"image_viewer_page_state_provider_download_success": "Download Success",
|
"image_viewer_page_state_provider_download_error": "ดาวน์โหลดผิดพลาด",
|
||||||
|
"image_viewer_page_state_provider_download_success": "ดาวน์โหลดสำเร็จ",
|
||||||
"library_page_albums": "Albums",
|
"library_page_albums": "Albums",
|
||||||
"library_page_archive": "เก็บถาวร",
|
"library_page_archive": "เก็บถาวร",
|
||||||
"library_page_device_albums": "อัลบั้มบนเครื่อง",
|
"library_page_device_albums": "อัลบั้มบนเครื่อง",
|
||||||
"library_page_favorites": "Favorites",
|
"library_page_favorites": "รายการโปรด",
|
||||||
"library_page_new_album": "New album",
|
"library_page_new_album": "อัลบั้มใหม่",
|
||||||
"library_page_sharing": "Sharing",
|
"library_page_sharing": "การแชร์",
|
||||||
"library_page_sort_created": "Most recently created",
|
"library_page_sort_created": "สร้างล่าสุด",
|
||||||
"library_page_sort_title": "Album title",
|
"library_page_sort_title": "ชื่ออัลบั้ม",
|
||||||
|
"login_disabled": "ล็อกอินถูกปิด",
|
||||||
"login_form_api_exception": "ข้อผิดพลาด API กรุณาตรวจสอบ URL แล้วลองใหม่",
|
"login_form_api_exception": "ข้อผิดพลาด API กรุณาตรวจสอบ URL แล้วลองใหม่",
|
||||||
"login_form_button_text": "Login",
|
"login_form_button_text": "เข้าสู่ระบบ",
|
||||||
"login_form_email_hint": "youremail@email.com",
|
"login_form_email_hint": "อีเมลคุณ@อีเมล.com",
|
||||||
"login_form_endpoint_hint": "http://your-server-ip:port/api",
|
"login_form_endpoint_hint": "http://ไอพีเชอร์ฟเวอร์คุณ:พอร์ต/api",
|
||||||
"login_form_endpoint_url": "Server Endpoint URL",
|
"login_form_endpoint_url": "URL ปลายทางของเซิร์ฟเวอร์",
|
||||||
"login_form_err_http": "Please specify http:// or https://",
|
"login_form_err_http": "โปรดระบุ http:// หรือ https://",
|
||||||
"login_form_err_invalid_email": "Invalid Email",
|
"login_form_err_invalid_email": "อีเมลไม่ถูกต้อง",
|
||||||
"login_form_err_invalid_url": "Invalid URL",
|
"login_form_err_invalid_url": "URL ไม่ถูกต้อง",
|
||||||
"login_form_err_leading_whitespace": "Leading whitespace",
|
"login_form_err_leading_whitespace": "เว้นว่างข้างหน้า",
|
||||||
"login_form_err_trailing_whitespace": "Trailing whitespace",
|
"login_form_err_trailing_whitespace": "เว้นว่างข้างหลัง",
|
||||||
"login_form_failed_get_oauth_server_config": "Error logging using OAuth, check server URL",
|
"login_form_failed_get_oauth_server_config": "เกิดข้อผิดพลาดในการล็อกอินผ่าน OAuth ตรวจสอบ URL เซิร์ฟเวอร์",
|
||||||
"login_form_failed_get_oauth_server_disable": "OAuth feature is not available on this server",
|
"login_form_failed_get_oauth_server_disable": "ฟีเจอร์ OAuth ไม่สามารถใช้งานบนเซิร์ฟเวอร์นี้",
|
||||||
"login_form_failed_login": "Error logging you in, check server URL, email and password",
|
"login_form_failed_login": "เกิดข้อผิดพลาดในการล็อกอิน โปรดตรวจสอบ URL ของเซิร์ฟเวอร์ อีเมล และรหัสผ่าน",
|
||||||
"login_form_label_email": "Email",
|
"login_form_label_email": "อีเมล",
|
||||||
"login_form_label_password": "Password",
|
"login_form_label_password": "รหัสผ่าน",
|
||||||
"login_form_next_button": "ต่อไป",
|
"login_form_next_button": "ต่อไป",
|
||||||
"login_form_password_hint": "password",
|
"login_form_password_hint": "รหัสผ่าน",
|
||||||
"login_form_save_login": "Stay logged in",
|
"login_form_save_login": "อยู่ในระบบต่อไป",
|
||||||
"login_form_server_empty": "กรอก URL เซิร์ฟเวอร์",
|
"login_form_server_empty": "กรอก URL เซิร์ฟเวอร์",
|
||||||
"login_form_server_error": "ไม่สามารถติดต่อกับเซิร์ฟเวอร์",
|
"login_form_server_error": "ไม่สามารถติดต่อกับเซิร์ฟเวอร์",
|
||||||
"monthly_title_text_date_format": "MMMM y",
|
"monthly_title_text_date_format": "MMMM y",
|
||||||
"motion_photos_page_title": "ภาพเคลื่อนไหว",
|
"motion_photos_page_title": "ภาพเคลื่อนไหว",
|
||||||
"notification_permission_dialog_cancel": "Cancel",
|
"notification_permission_dialog_cancel": "ยกเลิก",
|
||||||
"notification_permission_dialog_content": "To enable notifications, go to Settings and select allow.",
|
"notification_permission_dialog_content": "เพื่อเปิดการแจ้งเตือน เข้าตั้งค่าแล้วกดอนุญาต",
|
||||||
"notification_permission_dialog_settings": "Settings",
|
"notification_permission_dialog_settings": "ตั้งค่า",
|
||||||
"notification_permission_list_tile_content": "Grant permission to enable notifications.",
|
"notification_permission_list_tile_content": "อนุญาตการแจ้งเตือน",
|
||||||
"notification_permission_list_tile_enable_button": "Enable Notifications",
|
"notification_permission_list_tile_enable_button": "เปิดการแจ้งเดือน",
|
||||||
"notification_permission_list_tile_title": "Notification Permission",
|
"notification_permission_list_tile_title": "สิทธิ์การแจ้งเตือน",
|
||||||
"partner_page_add_partner": "เพิ่มพันธมิตร",
|
"partner_page_add_partner": "เพิ่มพันธมิตร",
|
||||||
"partner_page_empty_message": "รูปภาพของคุณยังไม่ถูกแชร์กับพันธมิตร",
|
"partner_page_empty_message": "รูปภาพของคุณยังไม่ถูกแชร์กับพันธมิตร",
|
||||||
"partner_page_no_more_users": "ไม่มีผู้ใช้งานให้เพิ่ม",
|
"partner_page_no_more_users": "ไม่มีผู้ใช้งานให้เพิ่ม",
|
||||||
@@ -201,80 +208,80 @@
|
|||||||
"partner_page_select_partner": "เลือกพันธมิตร",
|
"partner_page_select_partner": "เลือกพันธมิตร",
|
||||||
"partner_page_shared_to_title": "แชร์กับ",
|
"partner_page_shared_to_title": "แชร์กับ",
|
||||||
"partner_page_stop_sharing_content": "{} จะไม่สามารถเข้าถึงรูปภาพของคุณ",
|
"partner_page_stop_sharing_content": "{} จะไม่สามารถเข้าถึงรูปภาพของคุณ",
|
||||||
"partner_page_stop_sharing_title": "หยุดแชร์รูปภาพหรือไม่?",
|
"partner_page_stop_sharing_title": "หยุดแชร์รูปภาพ?",
|
||||||
"partner_page_title": "พันธมิตร",
|
"partner_page_title": "พันธมิตร",
|
||||||
"permission_onboarding_continue_anyway": "ไปต่ออยู่ดี",
|
"permission_onboarding_continue_anyway": "ดำเนินการต่อ",
|
||||||
"permission_onboarding_get_started": "เริ่มต้น",
|
"permission_onboarding_get_started": "เริ่มต้น",
|
||||||
"permission_onboarding_go_to_settings": "ไปยังการตั้งค่า",
|
"permission_onboarding_go_to_settings": "ไปยังการตั้งค่า",
|
||||||
"permission_onboarding_grant_permission": "ใหิสิทธิ์",
|
"permission_onboarding_grant_permission": "ให้สิทธิ์",
|
||||||
"permission_onboarding_log_out": "ออกจากระบบ",
|
"permission_onboarding_log_out": "ออกจากระบบ",
|
||||||
"permission_onboarding_permission_denied": "ไม่อนุญาต ตั้งค่าสิทธิ์เข้าถึงรูปภาพและวิดีโอเพื่อใช้งาน Immich",
|
"permission_onboarding_permission_denied": "ไม่อนุญาต ตั้งค่าสิทธิ์เข้าถึงรูปภาพและวิดีโอเพื่อใช้งาน Immich",
|
||||||
"permission_onboarding_permission_granted": "ให้สิทธิ์สำเร็จ คุณพร้อมใช้งานแล้ว",
|
"permission_onboarding_permission_granted": "ให้สิทธิ์สำเร็จ คุณพร้อมใช้งานแล้ว",
|
||||||
"permission_onboarding_permission_limited": "สิทธ์จำกัด เพื่อให้ Immich สำรองข้อมูลและบริหารคลังรูปภาพได้ ตั้งค่าสิทธิเข้าถึงรูปภาพและวิดิโอ",
|
"permission_onboarding_permission_limited": "สิทธ์จำกัด เพื่อให้ Immich สำรองข้อมูลและบริหารคลังรูปภาพได้ ตั้งค่าสิทธิเข้าถึงรูปภาพและวิดีโอ",
|
||||||
"permission_onboarding_request": "Immich จำเป็นจะต้องได้รับสิทธิ์ดูรูปภาพและวิดีโอ",
|
"permission_onboarding_request": "Immich จำเป็นจะต้องได้รับสิทธิ์ดูรูปภาพและวิดีโอ",
|
||||||
"profile_drawer_app_logs": "Logs",
|
"profile_drawer_app_logs": "Log",
|
||||||
"profile_drawer_client_server_up_to_date": "Client and Server are up-to-date",
|
"profile_drawer_client_server_up_to_date": "ไคลเอนต์และเซิร์ฟเวอร์เป็นปัจจุบัน",
|
||||||
"profile_drawer_settings": "Settings",
|
"profile_drawer_settings": "Settings",
|
||||||
"profile_drawer_sign_out": "Sign Out",
|
"profile_drawer_sign_out": "ออกจากระบบ",
|
||||||
"recently_added_page_title": "เพิ่มมาเร็วๆนี้",
|
"recently_added_page_title": "เพิ่มล่าสุด",
|
||||||
"search_bar_hint": "Search your photos",
|
"search_bar_hint": "ค้นหารูปภาพของคุณ",
|
||||||
"search_page_categories": "หมวดหมู่",
|
"search_page_categories": "หมวดหมู่",
|
||||||
"search_page_favorites": "รายการโปรด",
|
"search_page_favorites": "รายการโปรด",
|
||||||
"search_page_motion_photos": "ภาพเคลื่อนไหว",
|
"search_page_motion_photos": "ภาพเคลื่อนไหว",
|
||||||
"search_page_no_objects": "No Objects Info Available",
|
"search_page_no_objects": "No Objects Info Available",
|
||||||
"search_page_no_places": "No Places Info Available",
|
"search_page_no_places": "ไม่มีข้อมูลสถานที่",
|
||||||
"search_page_people": "ผู้คน",
|
"search_page_people": "ผู้คน",
|
||||||
"search_page_places": "Places",
|
"search_page_places": "สถานที่",
|
||||||
"search_page_recently_added": "เพิ่มมาเร็วๆนี้",
|
"search_page_recently_added": "เพิ่มล่าสุด",
|
||||||
"search_page_screenshots": "แคปหน้าจอ",
|
"search_page_screenshots": "แคปหน้าจอ",
|
||||||
"search_page_selfies": "เซลฟี่",
|
"search_page_selfies": "เซลฟี่",
|
||||||
"search_page_things": "Things",
|
"search_page_things": "สิ่งของ",
|
||||||
"search_page_videos": "วิดีโอ",
|
"search_page_videos": "วิดีโอ",
|
||||||
"search_page_view_all_button": "ดูทั้งหมด",
|
"search_page_view_all_button": "ดูทั้งหมด",
|
||||||
"search_page_your_activity": "กิจกรรมของคุณ",
|
"search_page_your_activity": "กิจกรรมของคุณ",
|
||||||
"search_result_page_new_search_hint": "New Search",
|
"search_result_page_new_search_hint": "ค้นหาใหม่",
|
||||||
"search_suggestion_list_smart_search_hint_1": "การค้นหาอัจฉริยะเปิดเป็นค่าเริ่มต้น เพื่อค้นหา metadata ให้ใช้ไวยากรณ์",
|
"search_suggestion_list_smart_search_hint_1": "การค้นหาอัจฉริยะเปิดเป็นค่าเริ่มต้น เพื่อค้นหา metadata ให้ใช้ไวยากรณ์",
|
||||||
"search_suggestion_list_smart_search_hint_2": "m:คำค้นหา",
|
"search_suggestion_list_smart_search_hint_2": "m:คำค้นหา",
|
||||||
"select_additional_user_for_sharing_page_suggestions": "Suggestions",
|
"select_additional_user_for_sharing_page_suggestions": "ข้อเสนอแนะ",
|
||||||
"select_user_for_sharing_page_err_album": "Failed to create album",
|
"select_user_for_sharing_page_err_album": "สร้างอัลบั้มล้มเหลว",
|
||||||
"select_user_for_sharing_page_share_suggestions": "Suggestions",
|
"select_user_for_sharing_page_share_suggestions": "Suggestions",
|
||||||
"server_info_box_app_version": "App Version",
|
"server_info_box_app_version": "เวอร์ชั่นแอพ",
|
||||||
"server_info_box_server_version": "Server Version",
|
"server_info_box_server_version": "เวอร์ชั้นเซิร์ฟเวอร์",
|
||||||
"setting_image_viewer_help": "The detail viewer loads the small thumbnail first, then loads the medium-size preview (if enabled), finally loads the original (if enabled).",
|
"setting_image_viewer_help": "The detail viewer loads the small thumbnail first, then loads the medium-size preview (if enabled), finally loads the original (if enabled).",
|
||||||
"setting_image_viewer_original_subtitle": "Enable to load the original full-resolution image (large!). Disable to reduce data usage (both network and on device cache).",
|
"setting_image_viewer_original_subtitle": "Enable to load the original full-resolution image (large!). Disable to reduce data usage (both network and on device cache).",
|
||||||
"setting_image_viewer_original_title": "Load original image",
|
"setting_image_viewer_original_title": "โหลดรูปต้นฉบับ",
|
||||||
"setting_image_viewer_preview_subtitle": "Enable to load a medium-resolution image. Disable to either directly load the original or only use the thumbnail.",
|
"setting_image_viewer_preview_subtitle": "Enable to load a medium-resolution image. Disable to either directly load the original or only use the thumbnail.",
|
||||||
"setting_image_viewer_preview_title": "Load preview image",
|
"setting_image_viewer_preview_title": "โหลดรูปภาพตัวอย่าง",
|
||||||
"setting_notifications_notify_failures_grace_period": "Notify background backup failures: {}",
|
"setting_notifications_notify_failures_grace_period": "แจ้งการสำรองข้อมูลในเบื้องหลังล้มเหลว: {}",
|
||||||
"setting_notifications_notify_hours": "{} hours",
|
"setting_notifications_notify_hours": "{} ชั่วโมง",
|
||||||
"setting_notifications_notify_immediately": "immediately",
|
"setting_notifications_notify_immediately": "immediately",
|
||||||
"setting_notifications_notify_minutes": "{} minutes",
|
"setting_notifications_notify_minutes": "{} นาที",
|
||||||
"setting_notifications_notify_never": "never",
|
"setting_notifications_notify_never": "ไม่เคย",
|
||||||
"setting_notifications_notify_seconds": "{} seconds",
|
"setting_notifications_notify_seconds": "{} วินาที",
|
||||||
"setting_notifications_single_progress_subtitle": "Detailed upload progress information per asset",
|
"setting_notifications_single_progress_subtitle": "Detailed upload progress information per asset",
|
||||||
"setting_notifications_single_progress_title": "Show background backup detail progress",
|
"setting_notifications_single_progress_title": "แสดงรายละเอียดสถานะการสำรองข้อมูลในเบื้องหลัง",
|
||||||
"setting_notifications_subtitle": "Adjust your notification preferences",
|
"setting_notifications_subtitle": "Adjust your notification preferences",
|
||||||
"setting_notifications_title": "Notifications",
|
"setting_notifications_title": "Notifications",
|
||||||
"setting_notifications_total_progress_subtitle": "Overall upload progress (done/total assets)",
|
"setting_notifications_total_progress_subtitle": "Overall upload progress (done/total assets)",
|
||||||
"setting_notifications_total_progress_title": "Show background backup total progress",
|
"setting_notifications_total_progress_title": "แสดงสถานะการสำรองข้อมูลในเบื้องหลังทั้งหมด",
|
||||||
"setting_pages_app_bar_settings": "Settings",
|
"setting_pages_app_bar_settings": "Settings",
|
||||||
"settings_require_restart": "Please restart Immich to apply this setting",
|
"settings_require_restart": "กรุณารีสตาร์ท Immmich เพื่อใช้การตั้งค่า",
|
||||||
"share_add": "Add",
|
"share_add": "เพิ่ม",
|
||||||
"share_add_photos": "Add photos",
|
"share_add_photos": "เพิ่มรูปภาพ",
|
||||||
"share_add_title": "Add a title",
|
"share_add_title": "เพิ่มชื่อ",
|
||||||
"share_create_album": "Create album",
|
"share_create_album": "สร้างอัลบั้ม",
|
||||||
"share_dialog_preparing": "Preparing...",
|
"share_dialog_preparing": "กำลังเตรียม...",
|
||||||
"share_invite": "Invite to album",
|
"share_invite": "เชิญเข้าอัลบั้ม",
|
||||||
"sharing_page_album": "Shared albums",
|
"sharing_page_album": "อัลบั้มที่แชร์",
|
||||||
"sharing_page_description": "Create shared albums to share photos and videos with people in your network.",
|
"sharing_page_description": "สร้างอัลบั้มที่แชร์เพื่อแชร์รูปภาพและวิดีโอให้กับคนบนเครื่อข่ายคุณ",
|
||||||
"sharing_page_empty_list": "EMPTY LIST",
|
"sharing_page_empty_list": "รายการว่างเปล่า",
|
||||||
"sharing_silver_appbar_create_shared_album": "Create shared album",
|
"sharing_silver_appbar_create_shared_album": "สร้างอัลบั้มแชร์",
|
||||||
"sharing_silver_appbar_share_partner": "Share with partner",
|
"sharing_silver_appbar_share_partner": "แชร์กับพันธมิตร",
|
||||||
"tab_controller_nav_library": "Library",
|
"tab_controller_nav_library": "Library",
|
||||||
"tab_controller_nav_photos": "Photos",
|
"tab_controller_nav_photos": "รูปภาพ",
|
||||||
"tab_controller_nav_search": "Search",
|
"tab_controller_nav_search": "ค้นหา",
|
||||||
"tab_controller_nav_sharing": "Sharing",
|
"tab_controller_nav_sharing": "แชร์",
|
||||||
"theme_setting_asset_list_storage_indicator_title": "Show storage indicator on asset tiles",
|
"theme_setting_asset_list_storage_indicator_title": "แสดงตัวพื้นที่จัดเก็บบนตารางทรัพยากร",
|
||||||
"theme_setting_asset_list_tiles_per_row_title": "Number of assets per row ({})",
|
"theme_setting_asset_list_tiles_per_row_title": "Number of assets per row ({})",
|
||||||
"theme_setting_dark_mode_switch": "Dark mode",
|
"theme_setting_dark_mode_switch": "Dark mode",
|
||||||
"theme_setting_image_viewer_quality_subtitle": "Adjust the quality of the detail image viewer",
|
"theme_setting_image_viewer_quality_subtitle": "Adjust the quality of the detail image viewer",
|
||||||
@@ -284,10 +291,14 @@
|
|||||||
"theme_setting_theme_title": "Theme",
|
"theme_setting_theme_title": "Theme",
|
||||||
"theme_setting_three_stage_loading_subtitle": "Three-stage loading might increase the loading performance but causes significantly higher network load",
|
"theme_setting_three_stage_loading_subtitle": "Three-stage loading might increase the loading performance but causes significantly higher network load",
|
||||||
"theme_setting_three_stage_loading_title": "Enable three-stage loading",
|
"theme_setting_three_stage_loading_title": "Enable three-stage loading",
|
||||||
|
"upload_dialog_cancel": "ยกเลิก",
|
||||||
|
"upload_dialog_info": "คุณต้องการอัพโหลดทรัพยากรดังกล่าวบนเซิร์ฟเวอร์หรือไม่?",
|
||||||
|
"upload_dialog_ok": "อัปโหลด",
|
||||||
|
"upload_dialog_title": "อัปโหลดทรัพยากร",
|
||||||
"version_announcement_overlay_ack": "Acknowledge",
|
"version_announcement_overlay_ack": "Acknowledge",
|
||||||
"version_announcement_overlay_release_notes": "release notes",
|
"version_announcement_overlay_release_notes": "release notes",
|
||||||
"version_announcement_overlay_text_1": "Hi friend, there is a new release of",
|
"version_announcement_overlay_text_1": "Hi friend, there is a new release of",
|
||||||
"version_announcement_overlay_text_2": "please take your time to visit the ",
|
"version_announcement_overlay_text_2": "please take your time to visit the ",
|
||||||
"version_announcement_overlay_text_3": " and ensure your docker-compose and .env setup is up-to-date to prevent any misconfigurations, especially if you use WatchTower or any mechanism that handles updating your server application automatically.",
|
"version_announcement_overlay_text_3": " and ensure your docker-compose and .env setup is up-to-date to prevent any misconfigurations, especially if you use WatchTower or any mechanism that handles updating your server application automatically.",
|
||||||
"version_announcement_overlay_title": "New Server Version Available \uD83C\uDF89"
|
"version_announcement_overlay_title": "มีเวอร์ชั่นใหม่สำหรับเซิร์ฟเวอร์ \uD83C\uDF89"
|
||||||
}
|
}
|
||||||
@@ -92,6 +92,11 @@
|
|||||||
"backup_controller_page_uploading_file_info": "Uploading file info",
|
"backup_controller_page_uploading_file_info": "Uploading file info",
|
||||||
"backup_err_only_album": "Cannot remove the only album",
|
"backup_err_only_album": "Cannot remove the only album",
|
||||||
"backup_info_card_assets": "assets",
|
"backup_info_card_assets": "assets",
|
||||||
|
"backup_manual_cancelled": "Cancelled",
|
||||||
|
"backup_manual_failed": "Failed",
|
||||||
|
"backup_manual_in_progress": "Upload already in progress. Try after sometime",
|
||||||
|
"backup_manual_success": "Success",
|
||||||
|
"backup_manual_title": "Upload status",
|
||||||
"cache_settings_album_thumbnails": "Library page thumbnails ({} assets)",
|
"cache_settings_album_thumbnails": "Library page thumbnails ({} assets)",
|
||||||
"cache_settings_clear_cache_button": "Clear cache",
|
"cache_settings_clear_cache_button": "Clear cache",
|
||||||
"cache_settings_clear_cache_button_title": "Clears the app's cache. This will significantly impact the app's performance until the cache has rebuilt.",
|
"cache_settings_clear_cache_button_title": "Clears the app's cache. This will significantly impact the app's performance until the cache has rebuilt.",
|
||||||
@@ -156,6 +161,7 @@
|
|||||||
"home_page_building_timeline": "Building the timeline",
|
"home_page_building_timeline": "Building the timeline",
|
||||||
"home_page_favorite_err_local": "Can not favorite local assets yet, skipping",
|
"home_page_favorite_err_local": "Can not favorite local assets yet, skipping",
|
||||||
"home_page_first_time_notice": "If this is your first time using the app, please make sure to choose a backup album(s) so that the timeline can populate photos and videos in the album(s).",
|
"home_page_first_time_notice": "If this is your first time using the app, please make sure to choose a backup album(s) so that the timeline can populate photos and videos in the album(s).",
|
||||||
|
"home_page_upload_err_limit": "Can only upload a maximum of 30 assets at a time, skipping",
|
||||||
"image_viewer_page_state_provider_download_error": "Download Error",
|
"image_viewer_page_state_provider_download_error": "Download Error",
|
||||||
"image_viewer_page_state_provider_download_success": "Download Success",
|
"image_viewer_page_state_provider_download_success": "Download Success",
|
||||||
"library_page_albums": "Albums",
|
"library_page_albums": "Albums",
|
||||||
@@ -166,6 +172,7 @@
|
|||||||
"library_page_sharing": "Sharing",
|
"library_page_sharing": "Sharing",
|
||||||
"library_page_sort_created": "Most recently created",
|
"library_page_sort_created": "Most recently created",
|
||||||
"library_page_sort_title": "Album title",
|
"library_page_sort_title": "Album title",
|
||||||
|
"login_disabled": "Login has been disabled",
|
||||||
"login_form_api_exception": "API exception. Please check the server URL and try again.",
|
"login_form_api_exception": "API exception. Please check the server URL and try again.",
|
||||||
"login_form_button_text": "Login",
|
"login_form_button_text": "Login",
|
||||||
"login_form_email_hint": "youremail@email.com",
|
"login_form_email_hint": "youremail@email.com",
|
||||||
@@ -284,6 +291,10 @@
|
|||||||
"theme_setting_theme_title": "Theme",
|
"theme_setting_theme_title": "Theme",
|
||||||
"theme_setting_three_stage_loading_subtitle": "Three-stage loading might increase the loading performance but causes significantly higher network load",
|
"theme_setting_three_stage_loading_subtitle": "Three-stage loading might increase the loading performance but causes significantly higher network load",
|
||||||
"theme_setting_three_stage_loading_title": "Enable three-stage loading",
|
"theme_setting_three_stage_loading_title": "Enable three-stage loading",
|
||||||
|
"upload_dialog_cancel": "Cancel",
|
||||||
|
"upload_dialog_info": "Do you want to backup the selected Asset(s) to the server?",
|
||||||
|
"upload_dialog_ok": "Upload",
|
||||||
|
"upload_dialog_title": "Upload Asset",
|
||||||
"version_announcement_overlay_ack": "Acknowledge",
|
"version_announcement_overlay_ack": "Acknowledge",
|
||||||
"version_announcement_overlay_release_notes": "release notes",
|
"version_announcement_overlay_release_notes": "release notes",
|
||||||
"version_announcement_overlay_text_1": "Hi friend, there is a new release of",
|
"version_announcement_overlay_text_1": "Hi friend, there is a new release of",
|
||||||
|
|||||||
@@ -92,6 +92,11 @@
|
|||||||
"backup_controller_page_uploading_file_info": "Uploading file info",
|
"backup_controller_page_uploading_file_info": "Uploading file info",
|
||||||
"backup_err_only_album": "Cannot remove the only album",
|
"backup_err_only_album": "Cannot remove the only album",
|
||||||
"backup_info_card_assets": "assets",
|
"backup_info_card_assets": "assets",
|
||||||
|
"backup_manual_cancelled": "Cancelled",
|
||||||
|
"backup_manual_failed": "Failed",
|
||||||
|
"backup_manual_in_progress": "Upload already in progress. Try after sometime",
|
||||||
|
"backup_manual_success": "Success",
|
||||||
|
"backup_manual_title": "Upload status",
|
||||||
"cache_settings_album_thumbnails": "Library page thumbnails ({} assets)",
|
"cache_settings_album_thumbnails": "Library page thumbnails ({} assets)",
|
||||||
"cache_settings_clear_cache_button": "Clear cache",
|
"cache_settings_clear_cache_button": "Clear cache",
|
||||||
"cache_settings_clear_cache_button_title": "Clears the app's cache. This will significantly impact the app's performance until the cache has rebuilt.",
|
"cache_settings_clear_cache_button_title": "Clears the app's cache. This will significantly impact the app's performance until the cache has rebuilt.",
|
||||||
@@ -156,6 +161,7 @@
|
|||||||
"home_page_building_timeline": "Building the timeline",
|
"home_page_building_timeline": "Building the timeline",
|
||||||
"home_page_favorite_err_local": "Can not favorite local assets yet, skipping",
|
"home_page_favorite_err_local": "Can not favorite local assets yet, skipping",
|
||||||
"home_page_first_time_notice": "If this is your first time using the app, please make sure to choose a backup album(s) so that the timeline can populate photos and videos in the album(s).",
|
"home_page_first_time_notice": "If this is your first time using the app, please make sure to choose a backup album(s) so that the timeline can populate photos and videos in the album(s).",
|
||||||
|
"home_page_upload_err_limit": "Can only upload a maximum of 30 assets at a time, skipping",
|
||||||
"image_viewer_page_state_provider_download_error": "Download Error",
|
"image_viewer_page_state_provider_download_error": "Download Error",
|
||||||
"image_viewer_page_state_provider_download_success": "Download Success",
|
"image_viewer_page_state_provider_download_success": "Download Success",
|
||||||
"library_page_albums": "Albums",
|
"library_page_albums": "Albums",
|
||||||
@@ -166,6 +172,7 @@
|
|||||||
"library_page_sharing": "Sharing",
|
"library_page_sharing": "Sharing",
|
||||||
"library_page_sort_created": "Most recently created",
|
"library_page_sort_created": "Most recently created",
|
||||||
"library_page_sort_title": "Album title",
|
"library_page_sort_title": "Album title",
|
||||||
|
"login_disabled": "Login has been disabled",
|
||||||
"login_form_api_exception": "API exception. Please check the server URL and try again.",
|
"login_form_api_exception": "API exception. Please check the server URL and try again.",
|
||||||
"login_form_button_text": "Login",
|
"login_form_button_text": "Login",
|
||||||
"login_form_email_hint": "youremail@email.com",
|
"login_form_email_hint": "youremail@email.com",
|
||||||
@@ -284,6 +291,10 @@
|
|||||||
"theme_setting_theme_title": "Theme",
|
"theme_setting_theme_title": "Theme",
|
||||||
"theme_setting_three_stage_loading_subtitle": "Three-stage loading might increase the loading performance but causes significantly higher network load",
|
"theme_setting_three_stage_loading_subtitle": "Three-stage loading might increase the loading performance but causes significantly higher network load",
|
||||||
"theme_setting_three_stage_loading_title": "Enable three-stage loading",
|
"theme_setting_three_stage_loading_title": "Enable three-stage loading",
|
||||||
|
"upload_dialog_cancel": "Cancel",
|
||||||
|
"upload_dialog_info": "Do you want to backup the selected Asset(s) to the server?",
|
||||||
|
"upload_dialog_ok": "Upload",
|
||||||
|
"upload_dialog_title": "Upload Asset",
|
||||||
"version_announcement_overlay_ack": "Acknowledge",
|
"version_announcement_overlay_ack": "Acknowledge",
|
||||||
"version_announcement_overlay_release_notes": "release notes",
|
"version_announcement_overlay_release_notes": "release notes",
|
||||||
"version_announcement_overlay_text_1": "Hi friend, there is a new release of",
|
"version_announcement_overlay_text_1": "Hi friend, there is a new release of",
|
||||||
|
|||||||
@@ -92,6 +92,11 @@
|
|||||||
"backup_controller_page_uploading_file_info": "正在上传文件信息",
|
"backup_controller_page_uploading_file_info": "正在上传文件信息",
|
||||||
"backup_err_only_album": "不能移除唯一的一个相册",
|
"backup_err_only_album": "不能移除唯一的一个相册",
|
||||||
"backup_info_card_assets": "张",
|
"backup_info_card_assets": "张",
|
||||||
|
"backup_manual_cancelled": "Cancelled",
|
||||||
|
"backup_manual_failed": "失败",
|
||||||
|
"backup_manual_in_progress": "上传正在进行中,请稍后再试",
|
||||||
|
"backup_manual_success": "成功",
|
||||||
|
"backup_manual_title": "上传状态",
|
||||||
"cache_settings_album_thumbnails": "图库缩略图({} 张)",
|
"cache_settings_album_thumbnails": "图库缩略图({} 张)",
|
||||||
"cache_settings_clear_cache_button": "清除缓存",
|
"cache_settings_clear_cache_button": "清除缓存",
|
||||||
"cache_settings_clear_cache_button_title": "清除应用缓存。在重新生成缓存之前,将显著影响应用的性能。",
|
"cache_settings_clear_cache_button_title": "清除应用缓存。在重新生成缓存之前,将显著影响应用的性能。",
|
||||||
@@ -156,6 +161,7 @@
|
|||||||
"home_page_building_timeline": "正在生成时间线",
|
"home_page_building_timeline": "正在生成时间线",
|
||||||
"home_page_favorite_err_local": "暂不能收藏本地项目,跳过",
|
"home_page_favorite_err_local": "暂不能收藏本地项目,跳过",
|
||||||
"home_page_first_time_notice": "如果这是您第一次使用该应用程序,请确保选择一个要备份的本地相册,以便可以在时间线中预览该相册中的照片和视频。",
|
"home_page_first_time_notice": "如果这是您第一次使用该应用程序,请确保选择一个要备份的本地相册,以便可以在时间线中预览该相册中的照片和视频。",
|
||||||
|
"home_page_upload_err_limit": "一次最多只能上传 30 个项目,跳过",
|
||||||
"image_viewer_page_state_provider_download_error": "下载出现错误",
|
"image_viewer_page_state_provider_download_error": "下载出现错误",
|
||||||
"image_viewer_page_state_provider_download_success": "下载成功",
|
"image_viewer_page_state_provider_download_success": "下载成功",
|
||||||
"library_page_albums": "相册",
|
"library_page_albums": "相册",
|
||||||
@@ -166,6 +172,7 @@
|
|||||||
"library_page_sharing": "共享",
|
"library_page_sharing": "共享",
|
||||||
"library_page_sort_created": "最近创建的",
|
"library_page_sort_created": "最近创建的",
|
||||||
"library_page_sort_title": "相册标题",
|
"library_page_sort_title": "相册标题",
|
||||||
|
"login_disabled": "登录已被禁用",
|
||||||
"login_form_api_exception": "API 异常,请检查服务器地址并重试。",
|
"login_form_api_exception": "API 异常,请检查服务器地址并重试。",
|
||||||
"login_form_button_text": "登录",
|
"login_form_button_text": "登录",
|
||||||
"login_form_email_hint": "youremail@email.com",
|
"login_form_email_hint": "youremail@email.com",
|
||||||
@@ -284,6 +291,10 @@
|
|||||||
"theme_setting_theme_title": "主题",
|
"theme_setting_theme_title": "主题",
|
||||||
"theme_setting_three_stage_loading_subtitle": "三段式加载可能会提升加载性能,但可能会导致更高的网络负载",
|
"theme_setting_three_stage_loading_subtitle": "三段式加载可能会提升加载性能,但可能会导致更高的网络负载",
|
||||||
"theme_setting_three_stage_loading_title": "启用三段式加载",
|
"theme_setting_three_stage_loading_title": "启用三段式加载",
|
||||||
|
"upload_dialog_cancel": "取消",
|
||||||
|
"upload_dialog_info": "是否要将所选项目备份到服务器?",
|
||||||
|
"upload_dialog_ok": "上传",
|
||||||
|
"upload_dialog_title": "上传项目",
|
||||||
"version_announcement_overlay_ack": "我知道了",
|
"version_announcement_overlay_ack": "我知道了",
|
||||||
"version_announcement_overlay_release_notes": "发行说明",
|
"version_announcement_overlay_release_notes": "发行说明",
|
||||||
"version_announcement_overlay_text_1": "号外号外,有新版本的",
|
"version_announcement_overlay_text_1": "号外号外,有新版本的",
|
||||||
|
|||||||
@@ -92,6 +92,11 @@
|
|||||||
"backup_controller_page_uploading_file_info": "正在上传文件信息",
|
"backup_controller_page_uploading_file_info": "正在上传文件信息",
|
||||||
"backup_err_only_album": "不能移除唯一的一个相册",
|
"backup_err_only_album": "不能移除唯一的一个相册",
|
||||||
"backup_info_card_assets": "张",
|
"backup_info_card_assets": "张",
|
||||||
|
"backup_manual_cancelled": "Cancelled",
|
||||||
|
"backup_manual_failed": "失败",
|
||||||
|
"backup_manual_in_progress": "上传正在进行中,请稍后再试",
|
||||||
|
"backup_manual_success": "成功",
|
||||||
|
"backup_manual_title": "上传状态",
|
||||||
"cache_settings_album_thumbnails": "图库缩略图({} 张)",
|
"cache_settings_album_thumbnails": "图库缩略图({} 张)",
|
||||||
"cache_settings_clear_cache_button": "清除缓存",
|
"cache_settings_clear_cache_button": "清除缓存",
|
||||||
"cache_settings_clear_cache_button_title": "清除应用缓存。在重新生成缓存之前,将显著影响应用的性能。",
|
"cache_settings_clear_cache_button_title": "清除应用缓存。在重新生成缓存之前,将显著影响应用的性能。",
|
||||||
@@ -156,6 +161,7 @@
|
|||||||
"home_page_building_timeline": "正在生成时间线",
|
"home_page_building_timeline": "正在生成时间线",
|
||||||
"home_page_favorite_err_local": "暂不能收藏本地项目,跳过",
|
"home_page_favorite_err_local": "暂不能收藏本地项目,跳过",
|
||||||
"home_page_first_time_notice": "如果这是您第一次使用该应用程序,请确保选择一个要备份的本地相册,以便可以在时间线中预览该相册中的照片和视频。",
|
"home_page_first_time_notice": "如果这是您第一次使用该应用程序,请确保选择一个要备份的本地相册,以便可以在时间线中预览该相册中的照片和视频。",
|
||||||
|
"home_page_upload_err_limit": "一次最多只能上传 30 个项目,跳过",
|
||||||
"image_viewer_page_state_provider_download_error": "下载出现错误",
|
"image_viewer_page_state_provider_download_error": "下载出现错误",
|
||||||
"image_viewer_page_state_provider_download_success": "下载成功",
|
"image_viewer_page_state_provider_download_success": "下载成功",
|
||||||
"library_page_albums": "相册",
|
"library_page_albums": "相册",
|
||||||
@@ -166,6 +172,7 @@
|
|||||||
"library_page_sharing": "共享",
|
"library_page_sharing": "共享",
|
||||||
"library_page_sort_created": "最近创建的",
|
"library_page_sort_created": "最近创建的",
|
||||||
"library_page_sort_title": "相册标题",
|
"library_page_sort_title": "相册标题",
|
||||||
|
"login_disabled": "登录已被禁用",
|
||||||
"login_form_api_exception": "API 异常,请检查服务器地址并重试。",
|
"login_form_api_exception": "API 异常,请检查服务器地址并重试。",
|
||||||
"login_form_button_text": "登录",
|
"login_form_button_text": "登录",
|
||||||
"login_form_email_hint": "youremail@email.com",
|
"login_form_email_hint": "youremail@email.com",
|
||||||
@@ -284,6 +291,10 @@
|
|||||||
"theme_setting_theme_title": "主题",
|
"theme_setting_theme_title": "主题",
|
||||||
"theme_setting_three_stage_loading_subtitle": "三段式加载可能会提升加载性能,但可能会导致更高的网络负载",
|
"theme_setting_three_stage_loading_subtitle": "三段式加载可能会提升加载性能,但可能会导致更高的网络负载",
|
||||||
"theme_setting_three_stage_loading_title": "启用三段式加载",
|
"theme_setting_three_stage_loading_title": "启用三段式加载",
|
||||||
|
"upload_dialog_cancel": "取消",
|
||||||
|
"upload_dialog_info": "是否要将所选项目备份到服务器?",
|
||||||
|
"upload_dialog_ok": "上传",
|
||||||
|
"upload_dialog_title": "上传正在进行中,请稍后再试",
|
||||||
"version_announcement_overlay_ack": "我知道了",
|
"version_announcement_overlay_ack": "我知道了",
|
||||||
"version_announcement_overlay_release_notes": "发行说明",
|
"version_announcement_overlay_release_notes": "发行说明",
|
||||||
"version_announcement_overlay_text_1": "号外号外,有新版本的",
|
"version_announcement_overlay_text_1": "号外号外,有新版本的",
|
||||||
|
|||||||
BIN
mobile/assets/lighthouse.png
Normal file
BIN
mobile/assets/lighthouse.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 45 KiB |
@@ -20,6 +20,8 @@ PODS:
|
|||||||
- FMDB (2.7.5):
|
- FMDB (2.7.5):
|
||||||
- FMDB/standard (= 2.7.5)
|
- FMDB/standard (= 2.7.5)
|
||||||
- FMDB/standard (2.7.5)
|
- FMDB/standard (2.7.5)
|
||||||
|
- geolocator_apple (1.2.0):
|
||||||
|
- Flutter
|
||||||
- image_picker_ios (0.0.1):
|
- image_picker_ios (0.0.1):
|
||||||
- Flutter
|
- Flutter
|
||||||
- integration_test (0.0.1):
|
- integration_test (0.0.1):
|
||||||
@@ -33,7 +35,7 @@ PODS:
|
|||||||
- FlutterMacOS
|
- FlutterMacOS
|
||||||
- path_provider_ios (0.0.1):
|
- path_provider_ios (0.0.1):
|
||||||
- Flutter
|
- Flutter
|
||||||
- permission_handler_apple (9.0.4):
|
- permission_handler_apple (9.1.1):
|
||||||
- Flutter
|
- Flutter
|
||||||
- photo_manager (2.0.0):
|
- photo_manager (2.0.0):
|
||||||
- Flutter
|
- Flutter
|
||||||
@@ -53,7 +55,7 @@ PODS:
|
|||||||
- Flutter
|
- Flutter
|
||||||
- video_player_avfoundation (0.0.1):
|
- video_player_avfoundation (0.0.1):
|
||||||
- Flutter
|
- Flutter
|
||||||
- wakelock (0.0.1):
|
- wakelock_plus (0.0.1):
|
||||||
- Flutter
|
- Flutter
|
||||||
|
|
||||||
DEPENDENCIES:
|
DEPENDENCIES:
|
||||||
@@ -65,6 +67,7 @@ DEPENDENCIES:
|
|||||||
- flutter_udid (from `.symlinks/plugins/flutter_udid/ios`)
|
- flutter_udid (from `.symlinks/plugins/flutter_udid/ios`)
|
||||||
- flutter_web_auth (from `.symlinks/plugins/flutter_web_auth/ios`)
|
- flutter_web_auth (from `.symlinks/plugins/flutter_web_auth/ios`)
|
||||||
- fluttertoast (from `.symlinks/plugins/fluttertoast/ios`)
|
- fluttertoast (from `.symlinks/plugins/fluttertoast/ios`)
|
||||||
|
- geolocator_apple (from `.symlinks/plugins/geolocator_apple/ios`)
|
||||||
- image_picker_ios (from `.symlinks/plugins/image_picker_ios/ios`)
|
- image_picker_ios (from `.symlinks/plugins/image_picker_ios/ios`)
|
||||||
- integration_test (from `.symlinks/plugins/integration_test/ios`)
|
- integration_test (from `.symlinks/plugins/integration_test/ios`)
|
||||||
- isar_flutter_libs (from `.symlinks/plugins/isar_flutter_libs/ios`)
|
- isar_flutter_libs (from `.symlinks/plugins/isar_flutter_libs/ios`)
|
||||||
@@ -78,7 +81,7 @@ DEPENDENCIES:
|
|||||||
- sqflite (from `.symlinks/plugins/sqflite/ios`)
|
- sqflite (from `.symlinks/plugins/sqflite/ios`)
|
||||||
- url_launcher_ios (from `.symlinks/plugins/url_launcher_ios/ios`)
|
- url_launcher_ios (from `.symlinks/plugins/url_launcher_ios/ios`)
|
||||||
- video_player_avfoundation (from `.symlinks/plugins/video_player_avfoundation/ios`)
|
- video_player_avfoundation (from `.symlinks/plugins/video_player_avfoundation/ios`)
|
||||||
- wakelock (from `.symlinks/plugins/wakelock/ios`)
|
- wakelock_plus (from `.symlinks/plugins/wakelock_plus/ios`)
|
||||||
|
|
||||||
SPEC REPOS:
|
SPEC REPOS:
|
||||||
trunk:
|
trunk:
|
||||||
@@ -104,6 +107,8 @@ EXTERNAL SOURCES:
|
|||||||
:path: ".symlinks/plugins/flutter_web_auth/ios"
|
:path: ".symlinks/plugins/flutter_web_auth/ios"
|
||||||
fluttertoast:
|
fluttertoast:
|
||||||
:path: ".symlinks/plugins/fluttertoast/ios"
|
:path: ".symlinks/plugins/fluttertoast/ios"
|
||||||
|
geolocator_apple:
|
||||||
|
:path: ".symlinks/plugins/geolocator_apple/ios"
|
||||||
image_picker_ios:
|
image_picker_ios:
|
||||||
:path: ".symlinks/plugins/image_picker_ios/ios"
|
:path: ".symlinks/plugins/image_picker_ios/ios"
|
||||||
integration_test:
|
integration_test:
|
||||||
@@ -130,8 +135,8 @@ EXTERNAL SOURCES:
|
|||||||
:path: ".symlinks/plugins/url_launcher_ios/ios"
|
:path: ".symlinks/plugins/url_launcher_ios/ios"
|
||||||
video_player_avfoundation:
|
video_player_avfoundation:
|
||||||
:path: ".symlinks/plugins/video_player_avfoundation/ios"
|
:path: ".symlinks/plugins/video_player_avfoundation/ios"
|
||||||
wakelock:
|
wakelock_plus:
|
||||||
:path: ".symlinks/plugins/wakelock/ios"
|
:path: ".symlinks/plugins/wakelock_plus/ios"
|
||||||
|
|
||||||
SPEC CHECKSUMS:
|
SPEC CHECKSUMS:
|
||||||
connectivity_plus: 07c49e96d7fc92bc9920617b83238c4d178b446a
|
connectivity_plus: 07c49e96d7fc92bc9920617b83238c4d178b446a
|
||||||
@@ -141,26 +146,27 @@ SPEC CHECKSUMS:
|
|||||||
flutter_native_splash: 52501b97d1c0a5f898d687f1646226c1f93c56ef
|
flutter_native_splash: 52501b97d1c0a5f898d687f1646226c1f93c56ef
|
||||||
flutter_udid: 0848809dbed4c055175747ae6a45a8b4f6771e1c
|
flutter_udid: 0848809dbed4c055175747ae6a45a8b4f6771e1c
|
||||||
flutter_web_auth: c25208760459cec375a3c39f6a8759165ca0fa4d
|
flutter_web_auth: c25208760459cec375a3c39f6a8759165ca0fa4d
|
||||||
fluttertoast: eb263d302cc92e04176c053d2385237e9f43fad0
|
fluttertoast: fafc4fa4d01a6a9e4f772ecd190ffa525e9e2d9c
|
||||||
FMDB: 2ce00b547f966261cd18927a3ddb07cb6f3db82a
|
FMDB: 2ce00b547f966261cd18927a3ddb07cb6f3db82a
|
||||||
|
geolocator_apple: cc556e6844d508c95df1e87e3ea6fa4e58c50401
|
||||||
image_picker_ios: 4a8aadfbb6dc30ad5141a2ce3832af9214a705b5
|
image_picker_ios: 4a8aadfbb6dc30ad5141a2ce3832af9214a705b5
|
||||||
integration_test: 13825b8a9334a850581300559b8839134b124670
|
integration_test: 13825b8a9334a850581300559b8839134b124670
|
||||||
isar_flutter_libs: b69f437aeab9c521821c3f376198c4371fa21073
|
isar_flutter_libs: b69f437aeab9c521821c3f376198c4371fa21073
|
||||||
package_info_plus: 6c92f08e1f853dc01228d6f553146438dafcd14e
|
package_info_plus: fd030dabf36271f146f1f3beacd48f564b0f17f7
|
||||||
path_provider_foundation: eaf5b3e458fc0e5fbb9940fb09980e853fe058b8
|
path_provider_foundation: 29f094ae23ebbca9d3d0cec13889cd9060c0e943
|
||||||
path_provider_ios: 14f3d2fd28c4fdb42f44e0f751d12861c43cee02
|
path_provider_ios: 14f3d2fd28c4fdb42f44e0f751d12861c43cee02
|
||||||
permission_handler_apple: 44366e37eaf29454a1e7b1b7d736c2cceaeb17ce
|
permission_handler_apple: e76247795d700c14ea09e3a2d8855d41ee80a2e6
|
||||||
photo_manager: 4f6810b7dfc4feb03b461ac1a70dacf91fba7604
|
photo_manager: 4f6810b7dfc4feb03b461ac1a70dacf91fba7604
|
||||||
ReachabilitySwift: 985039c6f7b23a1da463388634119492ff86c825
|
ReachabilitySwift: 985039c6f7b23a1da463388634119492ff86c825
|
||||||
SAMKeychain: 483e1c9f32984d50ca961e26818a534283b4cd5c
|
SAMKeychain: 483e1c9f32984d50ca961e26818a534283b4cd5c
|
||||||
share_plus: 056a1e8ac890df3e33cb503afffaf1e9b4fbae68
|
share_plus: 599aa54e4ea31d4b4c0e9c911bcc26c55e791028
|
||||||
shared_preferences_foundation: e2dae3258e06f44cc55f49d42024fd8dd03c590c
|
shared_preferences_foundation: 5b919d13b803cadd15ed2dc053125c68730e5126
|
||||||
sqflite: 31f7eba61e3074736dff8807a9b41581e4f7f15a
|
sqflite: 31f7eba61e3074736dff8807a9b41581e4f7f15a
|
||||||
Toast: 91b396c56ee72a5790816f40d3a94dd357abc196
|
Toast: 91b396c56ee72a5790816f40d3a94dd357abc196
|
||||||
url_launcher_ios: 08a3dfac5fb39e8759aeb0abbd5d9480f30fc8b4
|
url_launcher_ios: 08a3dfac5fb39e8759aeb0abbd5d9480f30fc8b4
|
||||||
video_player_avfoundation: 81e49bb3d9fb63dccf9fa0f6d877dc3ddbeac126
|
video_player_avfoundation: 81e49bb3d9fb63dccf9fa0f6d877dc3ddbeac126
|
||||||
wakelock: d0fc7c864128eac40eba1617cb5264d9c940b46f
|
wakelock_plus: 8b09852c8876491e4b6d179e17dfe2a0b5f60d47
|
||||||
|
|
||||||
PODFILE CHECKSUM: 599d8aeb73728400c15364e734525722250a5382
|
PODFILE CHECKSUM: 599d8aeb73728400c15364e734525722250a5382
|
||||||
|
|
||||||
COCOAPODS: 1.11.3
|
COCOAPODS: 1.12.1
|
||||||
|
|||||||
@@ -171,7 +171,7 @@
|
|||||||
97C146E61CF9000F007C117D /* Project object */ = {
|
97C146E61CF9000F007C117D /* Project object */ = {
|
||||||
isa = PBXProject;
|
isa = PBXProject;
|
||||||
attributes = {
|
attributes = {
|
||||||
LastUpgradeCheck = 1300;
|
LastUpgradeCheck = 1430;
|
||||||
ORGANIZATIONNAME = "";
|
ORGANIZATIONNAME = "";
|
||||||
TargetAttributes = {
|
TargetAttributes = {
|
||||||
97C146ED1CF9000F007C117D = {
|
97C146ED1CF9000F007C117D = {
|
||||||
@@ -379,7 +379,7 @@
|
|||||||
CODE_SIGN_ENTITLEMENTS = Runner/RunnerProfile.entitlements;
|
CODE_SIGN_ENTITLEMENTS = Runner/RunnerProfile.entitlements;
|
||||||
CODE_SIGN_IDENTITY = "Apple Development";
|
CODE_SIGN_IDENTITY = "Apple Development";
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
CURRENT_PROJECT_VERSION = 110;
|
CURRENT_PROJECT_VERSION = 116;
|
||||||
DEVELOPMENT_TEAM = 2F67MQ8R79;
|
DEVELOPMENT_TEAM = 2F67MQ8R79;
|
||||||
ENABLE_BITCODE = NO;
|
ENABLE_BITCODE = NO;
|
||||||
INFOPLIST_FILE = Runner/Info.plist;
|
INFOPLIST_FILE = Runner/Info.plist;
|
||||||
@@ -515,7 +515,7 @@
|
|||||||
CLANG_ENABLE_MODULES = YES;
|
CLANG_ENABLE_MODULES = YES;
|
||||||
CODE_SIGN_IDENTITY = "Apple Development";
|
CODE_SIGN_IDENTITY = "Apple Development";
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
CURRENT_PROJECT_VERSION = 110;
|
CURRENT_PROJECT_VERSION = 116;
|
||||||
DEVELOPMENT_TEAM = 2F67MQ8R79;
|
DEVELOPMENT_TEAM = 2F67MQ8R79;
|
||||||
ENABLE_BITCODE = NO;
|
ENABLE_BITCODE = NO;
|
||||||
INFOPLIST_FILE = Runner/Info.plist;
|
INFOPLIST_FILE = Runner/Info.plist;
|
||||||
@@ -543,7 +543,7 @@
|
|||||||
CLANG_ENABLE_MODULES = YES;
|
CLANG_ENABLE_MODULES = YES;
|
||||||
CODE_SIGN_IDENTITY = "Apple Development";
|
CODE_SIGN_IDENTITY = "Apple Development";
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
CURRENT_PROJECT_VERSION = 110;
|
CURRENT_PROJECT_VERSION = 116;
|
||||||
DEVELOPMENT_TEAM = 2F67MQ8R79;
|
DEVELOPMENT_TEAM = 2F67MQ8R79;
|
||||||
ENABLE_BITCODE = NO;
|
ENABLE_BITCODE = NO;
|
||||||
INFOPLIST_FILE = Runner/Info.plist;
|
INFOPLIST_FILE = Runner/Info.plist;
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<Scheme
|
<Scheme
|
||||||
LastUpgradeVersion = "1300"
|
LastUpgradeVersion = "1430"
|
||||||
version = "1.3">
|
version = "1.3">
|
||||||
<BuildAction
|
<BuildAction
|
||||||
parallelizeBuildables = "YES"
|
parallelizeBuildables = "YES"
|
||||||
|
|||||||
@@ -59,11 +59,11 @@
|
|||||||
<key>CFBundlePackageType</key>
|
<key>CFBundlePackageType</key>
|
||||||
<string>APPL</string>
|
<string>APPL</string>
|
||||||
<key>CFBundleShortVersionString</key>
|
<key>CFBundleShortVersionString</key>
|
||||||
<string>1.70.0</string>
|
<string>1.76.0</string>
|
||||||
<key>CFBundleSignature</key>
|
<key>CFBundleSignature</key>
|
||||||
<string>????</string>
|
<string>????</string>
|
||||||
<key>CFBundleVersion</key>
|
<key>CFBundleVersion</key>
|
||||||
<string>110</string>
|
<string>116</string>
|
||||||
<key>FLTEnableImpeller</key>
|
<key>FLTEnableImpeller</key>
|
||||||
<true />
|
<true />
|
||||||
<key>ITSAppUsesNonExemptEncryption</key>
|
<key>ITSAppUsesNonExemptEncryption</key>
|
||||||
@@ -83,8 +83,6 @@
|
|||||||
</dict>
|
</dict>
|
||||||
<key>NSCameraUsageDescription</key>
|
<key>NSCameraUsageDescription</key>
|
||||||
<string>We need to access the camera to let you take beautiful video using this app</string>
|
<string>We need to access the camera to let you take beautiful video using this app</string>
|
||||||
<key>NSLocationAlwaysUsageDescription</key>
|
|
||||||
<string>Enable location setting to show position of assets on map</string>
|
|
||||||
<key>NSLocationWhenInUseUsageDescription</key>
|
<key>NSLocationWhenInUseUsageDescription</key>
|
||||||
<string>Enable location setting to show position of assets on map</string>
|
<string>Enable location setting to show position of assets on map</string>
|
||||||
<key>NSMicrophoneUsageDescription</key>
|
<key>NSMicrophoneUsageDescription</key>
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
#!/bin/sh
|
#!/usr/bin/env sh
|
||||||
|
|
||||||
# The default execution directory of this script is the ci_scripts directory.
|
# The default execution directory of this script is the ci_scripts directory.
|
||||||
cd $CI_WORKSPACE/mobile
|
cd $CI_WORKSPACE/mobile
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ platform :ios do
|
|||||||
desc "iOS Beta"
|
desc "iOS Beta"
|
||||||
lane :beta do
|
lane :beta do
|
||||||
increment_version_number(
|
increment_version_number(
|
||||||
version_number: "1.72.2"
|
version_number: "1.76.1"
|
||||||
)
|
)
|
||||||
increment_build_number(
|
increment_build_number(
|
||||||
build_number: latest_testflight_build_number + 1,
|
build_number: latest_testflight_build_number + 1,
|
||||||
|
|||||||
@@ -5,32 +5,32 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
<testcase classname="fastlane.lanes" name="0: default_platform" time="0.000211">
|
<testcase classname="fastlane.lanes" name="0: default_platform" time="0.000243">
|
||||||
|
|
||||||
</testcase>
|
</testcase>
|
||||||
|
|
||||||
|
|
||||||
<testcase classname="fastlane.lanes" name="1: increment_version_number" time="2.108738">
|
<testcase classname="fastlane.lanes" name="1: increment_version_number" time="2.611762">
|
||||||
|
|
||||||
</testcase>
|
</testcase>
|
||||||
|
|
||||||
|
|
||||||
<testcase classname="fastlane.lanes" name="2: latest_testflight_build_number" time="28.952846">
|
<testcase classname="fastlane.lanes" name="2: latest_testflight_build_number" time="6.937008">
|
||||||
|
|
||||||
</testcase>
|
</testcase>
|
||||||
|
|
||||||
|
|
||||||
<testcase classname="fastlane.lanes" name="3: increment_build_number" time="1.821481">
|
<testcase classname="fastlane.lanes" name="3: increment_build_number" time="2.740416">
|
||||||
|
|
||||||
</testcase>
|
</testcase>
|
||||||
|
|
||||||
|
|
||||||
<testcase classname="fastlane.lanes" name="4: build_app" time="99.212621">
|
<testcase classname="fastlane.lanes" name="4: build_app" time="93.625943">
|
||||||
|
|
||||||
</testcase>
|
</testcase>
|
||||||
|
|
||||||
|
|
||||||
<testcase classname="fastlane.lanes" name="5: upload_to_testflight" time="68.366701">
|
<testcase classname="fastlane.lanes" name="5: upload_to_testflight" time="62.107671">
|
||||||
|
|
||||||
</testcase>
|
</testcase>
|
||||||
|
|
||||||
|
|||||||
@@ -11,13 +11,6 @@ import 'package:immich_mobile/constants/locales.dart';
|
|||||||
import 'package:immich_mobile/modules/backup/background_service/background.service.dart';
|
import 'package:immich_mobile/modules/backup/background_service/background.service.dart';
|
||||||
import 'package:immich_mobile/modules/backup/models/backup_album.model.dart';
|
import 'package:immich_mobile/modules/backup/models/backup_album.model.dart';
|
||||||
import 'package:immich_mobile/modules/backup/models/duplicated_asset.model.dart';
|
import 'package:immich_mobile/modules/backup/models/duplicated_asset.model.dart';
|
||||||
import 'package:immich_mobile/modules/backup/providers/backup.provider.dart';
|
|
||||||
import 'package:immich_mobile/modules/backup/providers/ios_background_settings.provider.dart';
|
|
||||||
import 'package:immich_mobile/modules/backup/providers/manual_upload.provider.dart';
|
|
||||||
import 'package:immich_mobile/modules/login/providers/authentication.provider.dart';
|
|
||||||
import 'package:immich_mobile/modules/memories/providers/memory.provider.dart';
|
|
||||||
import 'package:immich_mobile/modules/onboarding/providers/gallery_permission.provider.dart';
|
|
||||||
import 'package:immich_mobile/modules/settings/providers/notification_permission.provider.dart';
|
|
||||||
import 'package:immich_mobile/routing/router.dart';
|
import 'package:immich_mobile/routing/router.dart';
|
||||||
import 'package:immich_mobile/routing/tab_navigation_observer.dart';
|
import 'package:immich_mobile/routing/tab_navigation_observer.dart';
|
||||||
import 'package:immich_mobile/shared/models/album.dart';
|
import 'package:immich_mobile/shared/models/album.dart';
|
||||||
@@ -30,11 +23,8 @@ import 'package:immich_mobile/shared/models/logger_message.model.dart';
|
|||||||
import 'package:immich_mobile/shared/models/store.dart';
|
import 'package:immich_mobile/shared/models/store.dart';
|
||||||
import 'package:immich_mobile/shared/models/user.dart';
|
import 'package:immich_mobile/shared/models/user.dart';
|
||||||
import 'package:immich_mobile/shared/providers/app_state.provider.dart';
|
import 'package:immich_mobile/shared/providers/app_state.provider.dart';
|
||||||
import 'package:immich_mobile/shared/providers/asset.provider.dart';
|
|
||||||
import 'package:immich_mobile/shared/providers/db.provider.dart';
|
import 'package:immich_mobile/shared/providers/db.provider.dart';
|
||||||
import 'package:immich_mobile/shared/providers/release_info.provider.dart';
|
import 'package:immich_mobile/shared/providers/release_info.provider.dart';
|
||||||
import 'package:immich_mobile/shared/providers/server_info.provider.dart';
|
|
||||||
import 'package:immich_mobile/shared/providers/websocket.provider.dart';
|
|
||||||
import 'package:immich_mobile/shared/services/immich_logger.service.dart';
|
import 'package:immich_mobile/shared/services/immich_logger.service.dart';
|
||||||
import 'package:immich_mobile/shared/services/local_notification.service.dart';
|
import 'package:immich_mobile/shared/services/local_notification.service.dart';
|
||||||
import 'package:immich_mobile/shared/views/immich_loading_overlay.dart';
|
import 'package:immich_mobile/shared/views/immich_loading_overlay.dart';
|
||||||
@@ -44,7 +34,6 @@ import 'package:immich_mobile/utils/migration.dart';
|
|||||||
import 'package:isar/isar.dart';
|
import 'package:isar/isar.dart';
|
||||||
import 'package:logging/logging.dart';
|
import 'package:logging/logging.dart';
|
||||||
import 'package:path_provider/path_provider.dart';
|
import 'package:path_provider/path_provider.dart';
|
||||||
import 'package:permission_handler/permission_handler.dart';
|
|
||||||
|
|
||||||
void main() async {
|
void main() async {
|
||||||
WidgetsFlutterBinding.ensureInitialized();
|
WidgetsFlutterBinding.ensureInitialized();
|
||||||
@@ -74,11 +63,15 @@ Future<void> initApp() async {
|
|||||||
|
|
||||||
FlutterError.onError = (details) {
|
FlutterError.onError = (details) {
|
||||||
FlutterError.presentError(details);
|
FlutterError.presentError(details);
|
||||||
log.severe(details.toString(), details, details.stack);
|
log.severe(
|
||||||
|
'Catch all error: ${details.toString()} - ${details.exception} - ${details.library} - ${details.context} - ${details.stack}',
|
||||||
|
details,
|
||||||
|
details.stack,
|
||||||
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
PlatformDispatcher.instance.onError = (error, stack) {
|
PlatformDispatcher.instance.onError = (error, stack) {
|
||||||
log.severe(error.toString(), error, stack);
|
log.severe('Catch all error: ${error.toString()} - $error', error, stack);
|
||||||
return true;
|
return true;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
@@ -133,54 +126,26 @@ class ImmichAppState extends ConsumerState<ImmichApp>
|
|||||||
switch (state) {
|
switch (state) {
|
||||||
case AppLifecycleState.resumed:
|
case AppLifecycleState.resumed:
|
||||||
debugPrint("[APP STATE] resumed");
|
debugPrint("[APP STATE] resumed");
|
||||||
ref.watch(appStateProvider.notifier).state = AppStateEnum.resumed;
|
ref.read(appStateProvider.notifier).handleAppResume();
|
||||||
|
|
||||||
var isAuthenticated = ref.watch(authenticationProvider).isAuthenticated;
|
|
||||||
final permission = ref.watch(galleryPermissionNotifier);
|
|
||||||
|
|
||||||
// Needs to be logged in and have gallery permissions
|
|
||||||
if (isAuthenticated && (permission.isGranted || permission.isLimited)) {
|
|
||||||
ref.read(backupProvider.notifier).resumeBackup();
|
|
||||||
ref.read(backgroundServiceProvider).resumeServiceIfEnabled();
|
|
||||||
ref.watch(assetProvider.notifier).getAllAsset();
|
|
||||||
ref.watch(serverInfoProvider.notifier).getServerVersion();
|
|
||||||
}
|
|
||||||
|
|
||||||
ref.watch(websocketProvider.notifier).connect();
|
|
||||||
|
|
||||||
ref.watch(releaseInfoProvider.notifier).checkGithubReleaseInfo();
|
|
||||||
|
|
||||||
ref
|
|
||||||
.watch(notificationPermissionProvider.notifier)
|
|
||||||
.getNotificationPermission();
|
|
||||||
ref
|
|
||||||
.watch(galleryPermissionNotifier.notifier)
|
|
||||||
.getGalleryPermissionStatus();
|
|
||||||
|
|
||||||
ref.read(iOSBackgroundSettingsProvider.notifier).refresh();
|
|
||||||
|
|
||||||
ref.invalidate(memoryFutureProvider);
|
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case AppLifecycleState.inactive:
|
case AppLifecycleState.inactive:
|
||||||
debugPrint("[APP STATE] inactive");
|
debugPrint("[APP STATE] inactive");
|
||||||
ref.watch(appStateProvider.notifier).state = AppStateEnum.inactive;
|
ref.read(appStateProvider.notifier).handleAppInactivity();
|
||||||
ImmichLogger().flush();
|
|
||||||
ref.watch(websocketProvider.notifier).disconnect();
|
|
||||||
ref.watch(manualUploadProvider.notifier).cancelBackup();
|
|
||||||
ref.read(backupProvider.notifier).cancelBackup();
|
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case AppLifecycleState.paused:
|
case AppLifecycleState.paused:
|
||||||
debugPrint("[APP STATE] paused");
|
debugPrint("[APP STATE] paused");
|
||||||
ref.watch(appStateProvider.notifier).state = AppStateEnum.paused;
|
ref.read(appStateProvider.notifier).handleAppPause();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case AppLifecycleState.detached:
|
case AppLifecycleState.detached:
|
||||||
debugPrint("[APP STATE] detached");
|
debugPrint("[APP STATE] detached");
|
||||||
ref.watch(appStateProvider.notifier).state = AppStateEnum.detached;
|
ref.read(appStateProvider.notifier).handleAppDetached();
|
||||||
|
break;
|
||||||
|
case AppLifecycleState.hidden:
|
||||||
|
debugPrint("[APP STATE] hidden");
|
||||||
|
ref.read(appStateProvider.notifier).handleAppHidden();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -56,6 +56,16 @@ class SharedAlbumNotifier extends StateNotifier<List<Album>> {
|
|||||||
return _albumService.removeAssetFromAlbum(album, assets);
|
return _albumService.removeAssetFromAlbum(album, assets);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Future<bool> removeUserFromAlbum(Album album, User user) async {
|
||||||
|
final result = await _albumService.removeUserFromAlbum(album, user);
|
||||||
|
|
||||||
|
if (result && album.sharedUsers.isEmpty) {
|
||||||
|
state = state.where((element) => element.id != album.id).toList();
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void dispose() {
|
void dispose() {
|
||||||
_streamSub.cancel();
|
_streamSub.cancel();
|
||||||
|
|||||||
@@ -348,6 +348,26 @@ class AlbumService {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Future<bool> removeUserFromAlbum(
|
||||||
|
Album album,
|
||||||
|
User user,
|
||||||
|
) async {
|
||||||
|
try {
|
||||||
|
await _apiService.albumApi.removeUserFromAlbum(
|
||||||
|
album.remoteId!,
|
||||||
|
user.id,
|
||||||
|
);
|
||||||
|
|
||||||
|
album.sharedUsers.remove(user);
|
||||||
|
await _db.writeTxn(() => album.sharedUsers.update(unlink: [user]));
|
||||||
|
|
||||||
|
return true;
|
||||||
|
} catch (e) {
|
||||||
|
debugPrint("Error removeUserFromAlbum ${e.toString()}");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Future<bool> changeTitleAlbum(
|
Future<bool> changeTitleAlbum(
|
||||||
Album album,
|
Album album,
|
||||||
String newAlbumTitle,
|
String newAlbumTitle,
|
||||||
|
|||||||
@@ -49,7 +49,7 @@ class AlbumThumbnailListTile extends StatelessWidget {
|
|||||||
type: ThumbnailFormat.JPEG,
|
type: ThumbnailFormat.JPEG,
|
||||||
),
|
),
|
||||||
httpHeaders: {
|
httpHeaders: {
|
||||||
"Authorization": "Bearer ${Store.get(StoreKey.accessToken)}"
|
"Authorization": "Bearer ${Store.get(StoreKey.accessToken)}",
|
||||||
},
|
},
|
||||||
cacheKey: getAlbumThumbNailCacheKey(album, type: ThumbnailFormat.JPEG),
|
cacheKey: getAlbumThumbNailCacheKey(album, type: ThumbnailFormat.JPEG),
|
||||||
errorWidget: (context, url, error) =>
|
errorWidget: (context, url, error) =>
|
||||||
@@ -105,9 +105,9 @@ class AlbumThumbnailListTile extends StatelessWidget {
|
|||||||
style: TextStyle(
|
style: TextStyle(
|
||||||
fontSize: 12,
|
fontSize: 12,
|
||||||
),
|
),
|
||||||
).tr()
|
).tr(),
|
||||||
],
|
],
|
||||||
)
|
),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
|||||||
@@ -69,6 +69,11 @@ class AlbumTitleTextField extends ConsumerWidget {
|
|||||||
borderRadius: BorderRadius.circular(10),
|
borderRadius: BorderRadius.circular(10),
|
||||||
),
|
),
|
||||||
hintText: 'share_add_title'.tr(),
|
hintText: 'share_add_title'.tr(),
|
||||||
|
hintStyle: TextStyle(
|
||||||
|
fontSize: 28,
|
||||||
|
color: isDarkTheme ? Colors.grey[300] : Colors.grey[700],
|
||||||
|
fontWeight: FontWeight.bold,
|
||||||
|
),
|
||||||
focusColor: Colors.grey[300],
|
focusColor: Colors.grey[300],
|
||||||
fillColor: isDarkTheme
|
fillColor: isDarkTheme
|
||||||
? const Color.fromARGB(255, 32, 33, 35)
|
? const Color.fromARGB(255, 32, 33, 35)
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ class AlbumViewerAppbar extends HookConsumerWidget
|
|||||||
final newAlbumTitle = ref.watch(albumViewerProvider).editTitleText;
|
final newAlbumTitle = ref.watch(albumViewerProvider).editTitleText;
|
||||||
final isEditAlbum = ref.watch(albumViewerProvider).isEditAlbum;
|
final isEditAlbum = ref.watch(albumViewerProvider).isEditAlbum;
|
||||||
|
|
||||||
void onDeleteAlbumPressed() async {
|
deleteAlbum() async {
|
||||||
ImmichLoadingOverlayController.appLoader.show();
|
ImmichLoadingOverlayController.appLoader.show();
|
||||||
|
|
||||||
final bool success;
|
final bool success;
|
||||||
@@ -65,6 +65,52 @@ class AlbumViewerAppbar extends HookConsumerWidget
|
|||||||
ImmichLoadingOverlayController.appLoader.hide();
|
ImmichLoadingOverlayController.appLoader.hide();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Future<void> showConfirmationDialog() async {
|
||||||
|
return showDialog<void>(
|
||||||
|
context: context,
|
||||||
|
barrierDismissible: false, // user must tap button!
|
||||||
|
builder: (BuildContext context) {
|
||||||
|
return AlertDialog(
|
||||||
|
title: const Text('Delete album'),
|
||||||
|
content: const Text(
|
||||||
|
'Are you sure you want to delete this album from your account?',
|
||||||
|
),
|
||||||
|
actions: <Widget>[
|
||||||
|
TextButton(
|
||||||
|
onPressed: () => Navigator.pop(context, 'Cancel'),
|
||||||
|
child: Text(
|
||||||
|
'Cancel',
|
||||||
|
style: TextStyle(
|
||||||
|
color: Theme.of(context).primaryColor,
|
||||||
|
fontWeight: FontWeight.bold,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
TextButton(
|
||||||
|
onPressed: () {
|
||||||
|
Navigator.pop(context, 'Confirm');
|
||||||
|
deleteAlbum();
|
||||||
|
},
|
||||||
|
child: Text(
|
||||||
|
'Confirm',
|
||||||
|
style: TextStyle(
|
||||||
|
fontWeight: FontWeight.bold,
|
||||||
|
color: Theme.of(context).brightness == Brightness.light
|
||||||
|
? Colors.red
|
||||||
|
: Colors.red[300],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
void onDeleteAlbumPressed() async {
|
||||||
|
showConfirmationDialog();
|
||||||
|
}
|
||||||
|
|
||||||
void onLeaveAlbumPressed() async {
|
void onLeaveAlbumPressed() async {
|
||||||
ImmichLoadingOverlayController.appLoader.show();
|
ImmichLoadingOverlayController.appLoader.show();
|
||||||
|
|
||||||
@@ -152,43 +198,61 @@ class AlbumViewerAppbar extends HookConsumerWidget
|
|||||||
}
|
}
|
||||||
|
|
||||||
void buildBottomSheet() {
|
void buildBottomSheet() {
|
||||||
|
final ownerActions = [
|
||||||
|
ListTile(
|
||||||
|
leading: const Icon(Icons.person_add_alt_rounded),
|
||||||
|
onTap: () {
|
||||||
|
Navigator.pop(context);
|
||||||
|
onAddUsers!(album);
|
||||||
|
},
|
||||||
|
title: const Text(
|
||||||
|
"album_viewer_page_share_add_users",
|
||||||
|
style: TextStyle(fontWeight: FontWeight.bold),
|
||||||
|
).tr(),
|
||||||
|
),
|
||||||
|
ListTile(
|
||||||
|
leading: const Icon(Icons.settings_rounded),
|
||||||
|
onTap: () =>
|
||||||
|
AutoRouter.of(context).navigate(AlbumOptionsRoute(album: album)),
|
||||||
|
title: const Text(
|
||||||
|
"translated_text_options",
|
||||||
|
style: TextStyle(fontWeight: FontWeight.bold),
|
||||||
|
).tr(),
|
||||||
|
),
|
||||||
|
];
|
||||||
|
|
||||||
|
final commonActions = [
|
||||||
|
ListTile(
|
||||||
|
leading: const Icon(Icons.add_photo_alternate_outlined),
|
||||||
|
onTap: () {
|
||||||
|
Navigator.pop(context);
|
||||||
|
onAddPhotos!(album);
|
||||||
|
},
|
||||||
|
title: const Text(
|
||||||
|
"share_add_photos",
|
||||||
|
style: TextStyle(fontWeight: FontWeight.bold),
|
||||||
|
).tr(),
|
||||||
|
),
|
||||||
|
];
|
||||||
showModalBottomSheet(
|
showModalBottomSheet(
|
||||||
backgroundColor: Theme.of(context).scaffoldBackgroundColor,
|
backgroundColor: Theme.of(context).scaffoldBackgroundColor,
|
||||||
isScrollControlled: false,
|
isScrollControlled: false,
|
||||||
context: context,
|
context: context,
|
||||||
builder: (context) {
|
builder: (context) {
|
||||||
return SafeArea(
|
return SafeArea(
|
||||||
child: Column(
|
child: Padding(
|
||||||
mainAxisSize: MainAxisSize.min,
|
padding: const EdgeInsets.only(top: 24.0),
|
||||||
children: [
|
child: Column(
|
||||||
buildBottomSheetActionButton(),
|
mainAxisSize: MainAxisSize.min,
|
||||||
if (selected.isEmpty && onAddPhotos != null)
|
children: [
|
||||||
ListTile(
|
buildBottomSheetActionButton(),
|
||||||
leading: const Icon(Icons.add_photo_alternate_outlined),
|
if (selected.isEmpty && onAddPhotos != null) ...commonActions,
|
||||||
onTap: () {
|
if (selected.isEmpty &&
|
||||||
Navigator.pop(context);
|
onAddPhotos != null &&
|
||||||
onAddPhotos!(album);
|
userId == album.ownerId)
|
||||||
},
|
...ownerActions,
|
||||||
title: const Text(
|
],
|
||||||
"share_add_photos",
|
),
|
||||||
style: TextStyle(fontWeight: FontWeight.bold),
|
|
||||||
).tr(),
|
|
||||||
),
|
|
||||||
if (selected.isEmpty &&
|
|
||||||
onAddPhotos != null &&
|
|
||||||
userId == album.ownerId)
|
|
||||||
ListTile(
|
|
||||||
leading: const Icon(Icons.person_add_alt_rounded),
|
|
||||||
onTap: () {
|
|
||||||
Navigator.pop(context);
|
|
||||||
onAddUsers!(album);
|
|
||||||
},
|
|
||||||
title: const Text(
|
|
||||||
"album_viewer_page_share_add_users",
|
|
||||||
style: TextStyle(fontWeight: FontWeight.bold),
|
|
||||||
).tr(),
|
|
||||||
),
|
|
||||||
],
|
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
@@ -217,6 +281,8 @@ class AlbumViewerAppbar extends HookConsumerWidget
|
|||||||
toastType: ToastType.error,
|
toastType: ToastType.error,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
titleFocusNode.unfocus();
|
||||||
},
|
},
|
||||||
icon: const Icon(Icons.check_rounded),
|
icon: const Icon(Icons.check_rounded),
|
||||||
splashRadius: 25,
|
splashRadius: 25,
|
||||||
|
|||||||
@@ -84,6 +84,11 @@ class AlbumViewerEditableTitle extends HookConsumerWidget {
|
|||||||
: Colors.grey[200],
|
: Colors.grey[200],
|
||||||
filled: titleFocusNode.hasFocus,
|
filled: titleFocusNode.hasFocus,
|
||||||
hintText: 'share_add_title'.tr(),
|
hintText: 'share_add_title'.tr(),
|
||||||
|
hintStyle: TextStyle(
|
||||||
|
fontSize: 28,
|
||||||
|
color: isDarkTheme ? Colors.grey[300] : Colors.grey[700],
|
||||||
|
fontWeight: FontWeight.bold,
|
||||||
|
),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
205
mobile/lib/modules/album/views/album_options_part.dart
Normal file
205
mobile/lib/modules/album/views/album_options_part.dart
Normal file
@@ -0,0 +1,205 @@
|
|||||||
|
import 'package:auto_route/auto_route.dart';
|
||||||
|
import 'package:easy_localization/easy_localization.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:flutter_hooks/flutter_hooks.dart';
|
||||||
|
import 'package:fluttertoast/fluttertoast.dart';
|
||||||
|
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
||||||
|
import 'package:immich_mobile/modules/album/providers/shared_album.provider.dart';
|
||||||
|
import 'package:immich_mobile/modules/login/providers/authentication.provider.dart';
|
||||||
|
import 'package:immich_mobile/routing/router.dart';
|
||||||
|
import 'package:immich_mobile/shared/models/album.dart';
|
||||||
|
import 'package:immich_mobile/shared/models/user.dart';
|
||||||
|
import 'package:immich_mobile/shared/ui/immich_toast.dart';
|
||||||
|
import 'package:immich_mobile/shared/ui/user_circle_avatar.dart';
|
||||||
|
import 'package:immich_mobile/shared/views/immich_loading_overlay.dart';
|
||||||
|
|
||||||
|
class AlbumOptionsPage extends HookConsumerWidget {
|
||||||
|
final Album album;
|
||||||
|
|
||||||
|
const AlbumOptionsPage({super.key, required this.album});
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context, WidgetRef ref) {
|
||||||
|
final sharedUsers = useState(album.sharedUsers.toList());
|
||||||
|
final owner = album.owner.value;
|
||||||
|
final userId = ref.watch(authenticationProvider).userId;
|
||||||
|
final isOwner = owner?.id == userId;
|
||||||
|
|
||||||
|
void showErrorMessage() {
|
||||||
|
Navigator.pop(context);
|
||||||
|
ImmichToast.show(
|
||||||
|
context: context,
|
||||||
|
msg: "Error leaving/removing from album",
|
||||||
|
toastType: ToastType.error,
|
||||||
|
gravity: ToastGravity.BOTTOM,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
void leaveAlbum() async {
|
||||||
|
ImmichLoadingOverlayController.appLoader.show();
|
||||||
|
|
||||||
|
try {
|
||||||
|
final isSuccess =
|
||||||
|
await ref.read(sharedAlbumProvider.notifier).leaveAlbum(album);
|
||||||
|
|
||||||
|
if (isSuccess) {
|
||||||
|
AutoRouter.of(context)
|
||||||
|
.navigate(const TabControllerRoute(children: [SharingRoute()]));
|
||||||
|
} else {
|
||||||
|
showErrorMessage();
|
||||||
|
}
|
||||||
|
} catch (_) {
|
||||||
|
showErrorMessage();
|
||||||
|
}
|
||||||
|
|
||||||
|
ImmichLoadingOverlayController.appLoader.hide();
|
||||||
|
}
|
||||||
|
|
||||||
|
void removeUserFromAlbum(User user) async {
|
||||||
|
ImmichLoadingOverlayController.appLoader.show();
|
||||||
|
|
||||||
|
try {
|
||||||
|
await ref
|
||||||
|
.read(sharedAlbumProvider.notifier)
|
||||||
|
.removeUserFromAlbum(album, user);
|
||||||
|
album.sharedUsers.remove(user);
|
||||||
|
sharedUsers.value = album.sharedUsers.toList();
|
||||||
|
} catch (error) {
|
||||||
|
showErrorMessage();
|
||||||
|
}
|
||||||
|
|
||||||
|
Navigator.pop(context);
|
||||||
|
ImmichLoadingOverlayController.appLoader.hide();
|
||||||
|
}
|
||||||
|
|
||||||
|
void handleUserClick(User user) {
|
||||||
|
var actions = [];
|
||||||
|
|
||||||
|
if (user.id == userId) {
|
||||||
|
actions = [
|
||||||
|
ListTile(
|
||||||
|
leading: const Icon(Icons.exit_to_app_rounded),
|
||||||
|
title: const Text("Leave album"),
|
||||||
|
onTap: leaveAlbum,
|
||||||
|
),
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isOwner) {
|
||||||
|
actions = [
|
||||||
|
ListTile(
|
||||||
|
leading: const Icon(Icons.person_remove_rounded),
|
||||||
|
title: const Text("Remove user from album"),
|
||||||
|
onTap: () => removeUserFromAlbum(user),
|
||||||
|
),
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
showModalBottomSheet(
|
||||||
|
backgroundColor: Theme.of(context).scaffoldBackgroundColor,
|
||||||
|
isScrollControlled: false,
|
||||||
|
context: context,
|
||||||
|
builder: (context) {
|
||||||
|
return SafeArea(
|
||||||
|
child: Padding(
|
||||||
|
padding: const EdgeInsets.only(top: 24.0),
|
||||||
|
child: Column(
|
||||||
|
mainAxisSize: MainAxisSize.min,
|
||||||
|
children: [...actions],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
buildOwnerInfo() {
|
||||||
|
return ListTile(
|
||||||
|
leading: owner != null
|
||||||
|
? UserCircleAvatar(
|
||||||
|
user: owner,
|
||||||
|
useRandomBackgroundColor: true,
|
||||||
|
)
|
||||||
|
: const SizedBox(),
|
||||||
|
title: Text(
|
||||||
|
album.owner.value?.firstName ?? "",
|
||||||
|
style: const TextStyle(
|
||||||
|
fontWeight: FontWeight.bold,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
subtitle: Text(
|
||||||
|
album.owner.value?.email ?? "",
|
||||||
|
style: TextStyle(color: Colors.grey[500]),
|
||||||
|
),
|
||||||
|
trailing: const Text(
|
||||||
|
"Owner",
|
||||||
|
style: TextStyle(
|
||||||
|
fontWeight: FontWeight.bold,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
buildSharedUsersList() {
|
||||||
|
return ListView.builder(
|
||||||
|
shrinkWrap: true,
|
||||||
|
itemCount: sharedUsers.value.length,
|
||||||
|
itemBuilder: (context, index) {
|
||||||
|
final user = sharedUsers.value[index];
|
||||||
|
return ListTile(
|
||||||
|
leading: UserCircleAvatar(
|
||||||
|
user: user,
|
||||||
|
useRandomBackgroundColor: true,
|
||||||
|
radius: 22,
|
||||||
|
),
|
||||||
|
title: Text(
|
||||||
|
user.firstName,
|
||||||
|
style: const TextStyle(
|
||||||
|
fontWeight: FontWeight.bold,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
subtitle: Text(
|
||||||
|
user.email,
|
||||||
|
style: TextStyle(color: Colors.grey[500]),
|
||||||
|
),
|
||||||
|
trailing: userId == user.id || isOwner
|
||||||
|
? const Icon(Icons.more_horiz_rounded)
|
||||||
|
: const SizedBox(),
|
||||||
|
onTap: userId == user.id || isOwner
|
||||||
|
? () => handleUserClick(user)
|
||||||
|
: null,
|
||||||
|
);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
buildSectionTitle(String text) {
|
||||||
|
return Padding(
|
||||||
|
padding: const EdgeInsets.all(16.0),
|
||||||
|
child: Text(text, style: Theme.of(context).textTheme.bodySmall),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
return Scaffold(
|
||||||
|
appBar: AppBar(
|
||||||
|
leading: IconButton(
|
||||||
|
icon: const Icon(Icons.arrow_back_ios_new_rounded),
|
||||||
|
onPressed: () {
|
||||||
|
AutoRouter.of(context).pop(null);
|
||||||
|
},
|
||||||
|
),
|
||||||
|
centerTitle: true,
|
||||||
|
title: Text("translated_text_options".tr()),
|
||||||
|
),
|
||||||
|
body: Column(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.start,
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
children: [
|
||||||
|
buildSectionTitle("PEOPLE"),
|
||||||
|
buildOwnerInfo(),
|
||||||
|
buildSharedUsersList(),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -17,6 +17,7 @@ import 'package:immich_mobile/routing/router.dart';
|
|||||||
import 'package:immich_mobile/shared/models/album.dart';
|
import 'package:immich_mobile/shared/models/album.dart';
|
||||||
import 'package:immich_mobile/shared/models/asset.dart';
|
import 'package:immich_mobile/shared/models/asset.dart';
|
||||||
import 'package:immich_mobile/shared/ui/immich_loading_indicator.dart';
|
import 'package:immich_mobile/shared/ui/immich_loading_indicator.dart';
|
||||||
|
import 'package:immich_mobile/shared/ui/user_circle_avatar.dart';
|
||||||
import 'package:immich_mobile/shared/views/immich_loading_overlay.dart';
|
import 'package:immich_mobile/shared/views/immich_loading_overlay.dart';
|
||||||
|
|
||||||
class AlbumViewerPage extends HookConsumerWidget {
|
class AlbumViewerPage extends HookConsumerWidget {
|
||||||
@@ -116,7 +117,7 @@ class AlbumViewerPage extends HookConsumerWidget {
|
|||||||
|
|
||||||
Widget buildControlButton(Album album) {
|
Widget buildControlButton(Album album) {
|
||||||
return Padding(
|
return Padding(
|
||||||
padding: const EdgeInsets.only(left: 16.0, top: 8, bottom: 8),
|
padding: const EdgeInsets.only(left: 16.0, top: 8, bottom: 16),
|
||||||
child: SizedBox(
|
child: SizedBox(
|
||||||
height: 40,
|
height: 40,
|
||||||
child: ListView(
|
child: ListView(
|
||||||
@@ -141,7 +142,7 @@ class AlbumViewerPage extends HookConsumerWidget {
|
|||||||
|
|
||||||
Widget buildTitle(Album album) {
|
Widget buildTitle(Album album) {
|
||||||
return Padding(
|
return Padding(
|
||||||
padding: const EdgeInsets.only(left: 8, right: 8, top: 16),
|
padding: const EdgeInsets.only(left: 8, right: 8, top: 24),
|
||||||
child: userId == album.ownerId && album.isRemote
|
child: userId == album.ownerId && album.isRemote
|
||||||
? AlbumViewerEditableTitle(
|
? AlbumViewerEditableTitle(
|
||||||
album: album,
|
album: album,
|
||||||
@@ -172,7 +173,6 @@ class AlbumViewerPage extends HookConsumerWidget {
|
|||||||
return Padding(
|
return Padding(
|
||||||
padding: EdgeInsets.only(
|
padding: EdgeInsets.only(
|
||||||
left: 16.0,
|
left: 16.0,
|
||||||
top: 8.0,
|
|
||||||
bottom: album.shared ? 0.0 : 8.0,
|
bottom: album.shared ? 0.0 : 8.0,
|
||||||
),
|
),
|
||||||
child: Text(
|
child: Text(
|
||||||
@@ -180,7 +180,34 @@ class AlbumViewerPage extends HookConsumerWidget {
|
|||||||
style: const TextStyle(
|
style: const TextStyle(
|
||||||
fontSize: 14,
|
fontSize: 14,
|
||||||
fontWeight: FontWeight.bold,
|
fontWeight: FontWeight.bold,
|
||||||
color: Colors.grey,
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
Widget buildSharedUserIconsRow(Album album) {
|
||||||
|
return GestureDetector(
|
||||||
|
onTap: () async {
|
||||||
|
await AutoRouter.of(context).push(AlbumOptionsRoute(album: album));
|
||||||
|
ref.invalidate(albumDetailProvider(album.id));
|
||||||
|
},
|
||||||
|
child: SizedBox(
|
||||||
|
height: 50,
|
||||||
|
child: ListView.builder(
|
||||||
|
padding: const EdgeInsets.only(left: 16),
|
||||||
|
scrollDirection: Axis.horizontal,
|
||||||
|
itemBuilder: ((context, index) {
|
||||||
|
return Padding(
|
||||||
|
padding: const EdgeInsets.only(right: 8.0),
|
||||||
|
child: UserCircleAvatar(
|
||||||
|
user: album.sharedUsers.toList()[index],
|
||||||
|
radius: 18,
|
||||||
|
size: 36,
|
||||||
|
useRandomBackgroundColor: true,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}),
|
||||||
|
itemCount: album.sharedUsers.length,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
@@ -193,33 +220,7 @@ class AlbumViewerPage extends HookConsumerWidget {
|
|||||||
children: [
|
children: [
|
||||||
buildTitle(album),
|
buildTitle(album),
|
||||||
if (album.assets.isNotEmpty == true) buildAlbumDateRange(album),
|
if (album.assets.isNotEmpty == true) buildAlbumDateRange(album),
|
||||||
if (album.shared)
|
if (album.shared) buildSharedUserIconsRow(album),
|
||||||
SizedBox(
|
|
||||||
height: 50,
|
|
||||||
child: ListView.builder(
|
|
||||||
padding: const EdgeInsets.only(left: 16),
|
|
||||||
scrollDirection: Axis.horizontal,
|
|
||||||
itemBuilder: ((context, index) {
|
|
||||||
return Padding(
|
|
||||||
padding: const EdgeInsets.only(right: 8.0),
|
|
||||||
child: CircleAvatar(
|
|
||||||
backgroundColor: Colors.grey[300],
|
|
||||||
radius: 18,
|
|
||||||
child: Padding(
|
|
||||||
padding: const EdgeInsets.all(2.0),
|
|
||||||
child: ClipRRect(
|
|
||||||
borderRadius: BorderRadius.circular(50.0),
|
|
||||||
child: Image.asset(
|
|
||||||
'assets/immich-logo-no-outline.png',
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
);
|
|
||||||
}),
|
|
||||||
itemCount: album.sharedUsers.length,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
],
|
],
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -73,9 +73,12 @@ class AssetSelectionPage extends HookConsumerWidget {
|
|||||||
AutoRouter.of(context)
|
AutoRouter.of(context)
|
||||||
.popForced<AssetSelectionPageResult>(payload);
|
.popForced<AssetSelectionPageResult>(payload);
|
||||||
},
|
},
|
||||||
child: const Text(
|
child: Text(
|
||||||
"share_add",
|
"share_add",
|
||||||
style: TextStyle(fontWeight: FontWeight.bold),
|
style: TextStyle(
|
||||||
|
fontWeight: FontWeight.bold,
|
||||||
|
color: Theme.of(context).primaryColor,
|
||||||
|
),
|
||||||
).tr(),
|
).tr(),
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
|
|||||||
@@ -30,7 +30,8 @@ class CreateAlbumPage extends HookConsumerWidget {
|
|||||||
final albumTitleTextFieldFocusNode = useFocusNode();
|
final albumTitleTextFieldFocusNode = useFocusNode();
|
||||||
final isAlbumTitleTextFieldFocus = useState(false);
|
final isAlbumTitleTextFieldFocus = useState(false);
|
||||||
final isAlbumTitleEmpty = useState(true);
|
final isAlbumTitleEmpty = useState(true);
|
||||||
final selectedAssets = useState<Set<Asset>>(initialAssets != null ? Set.from(initialAssets!) : const {});
|
final selectedAssets = useState<Set<Asset>>(
|
||||||
|
initialAssets != null ? Set.from(initialAssets!) : const {},);
|
||||||
final isDarkTheme = Theme.of(context).brightness == Brightness.dark;
|
final isDarkTheme = Theme.of(context).brightness == Brightness.dark;
|
||||||
|
|
||||||
showSelectUserPage() async {
|
showSelectUserPage() async {
|
||||||
@@ -248,8 +249,9 @@ class CreateAlbumPage extends HookConsumerWidget {
|
|||||||
: null,
|
: null,
|
||||||
child: Text(
|
child: Text(
|
||||||
'create_shared_album_page_create'.tr(),
|
'create_shared_album_page_create'.tr(),
|
||||||
style: const TextStyle(
|
style: TextStyle(
|
||||||
fontWeight: FontWeight.bold,
|
fontWeight: FontWeight.bold,
|
||||||
|
color: Theme.of(context).primaryColor,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
|||||||
@@ -60,7 +60,7 @@ class LibraryPage extends HookConsumerWidget {
|
|||||||
Widget buildSortButton() {
|
Widget buildSortButton() {
|
||||||
final options = [
|
final options = [
|
||||||
"library_page_sort_created".tr(),
|
"library_page_sort_created".tr(),
|
||||||
"library_page_sort_title".tr()
|
"library_page_sort_title".tr(),
|
||||||
];
|
];
|
||||||
|
|
||||||
return PopupMenuButton(
|
return PopupMenuButton(
|
||||||
@@ -87,7 +87,7 @@ class LibraryPage extends HookConsumerWidget {
|
|||||||
color: selected ? Theme.of(context).primaryColor : null,
|
color: selected ? Theme.of(context).primaryColor : null,
|
||||||
fontSize: 12.0,
|
fontSize: 12.0,
|
||||||
),
|
),
|
||||||
)
|
),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ import 'package:immich_mobile/modules/album/providers/suggested_shared_users.pro
|
|||||||
import 'package:immich_mobile/shared/models/album.dart';
|
import 'package:immich_mobile/shared/models/album.dart';
|
||||||
import 'package:immich_mobile/shared/models/user.dart';
|
import 'package:immich_mobile/shared/models/user.dart';
|
||||||
import 'package:immich_mobile/shared/ui/immich_loading_indicator.dart';
|
import 'package:immich_mobile/shared/ui/immich_loading_indicator.dart';
|
||||||
|
import 'package:immich_mobile/shared/ui/user_circle_avatar.dart';
|
||||||
|
|
||||||
class SelectAdditionalUserForSharingPage extends HookConsumerWidget {
|
class SelectAdditionalUserForSharingPage extends HookConsumerWidget {
|
||||||
final Album album;
|
final Album album;
|
||||||
@@ -35,10 +36,8 @@ class SelectAdditionalUserForSharingPage extends HookConsumerWidget {
|
|||||||
),
|
),
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
return CircleAvatar(
|
return UserCircleAvatar(
|
||||||
backgroundImage:
|
user: user,
|
||||||
const AssetImage('assets/immich-logo-no-outline.png'),
|
|
||||||
backgroundColor: Theme.of(context).primaryColor.withAlpha(50),
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -103,7 +102,7 @@ class SelectAdditionalUserForSharingPage extends HookConsumerWidget {
|
|||||||
} else {
|
} else {
|
||||||
sharedUsersList.value = {
|
sharedUsersList.value = {
|
||||||
...sharedUsersList.value,
|
...sharedUsersList.value,
|
||||||
users[index]
|
users[index],
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -136,7 +135,7 @@ class SelectAdditionalUserForSharingPage extends HookConsumerWidget {
|
|||||||
"share_add",
|
"share_add",
|
||||||
style: TextStyle(fontSize: 14, fontWeight: FontWeight.bold),
|
style: TextStyle(fontSize: 14, fontWeight: FontWeight.bold),
|
||||||
).tr(),
|
).tr(),
|
||||||
)
|
),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
body: suggestedShareUsers.when(
|
body: suggestedShareUsers.when(
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ import 'package:immich_mobile/routing/router.dart';
|
|||||||
import 'package:immich_mobile/shared/models/asset.dart';
|
import 'package:immich_mobile/shared/models/asset.dart';
|
||||||
import 'package:immich_mobile/shared/models/user.dart';
|
import 'package:immich_mobile/shared/models/user.dart';
|
||||||
import 'package:immich_mobile/shared/ui/immich_loading_indicator.dart';
|
import 'package:immich_mobile/shared/ui/immich_loading_indicator.dart';
|
||||||
|
import 'package:immich_mobile/shared/ui/user_circle_avatar.dart';
|
||||||
|
|
||||||
class SelectUserForSharingPage extends HookConsumerWidget {
|
class SelectUserForSharingPage extends HookConsumerWidget {
|
||||||
const SelectUserForSharingPage({Key? key, required this.assets})
|
const SelectUserForSharingPage({Key? key, required this.assets})
|
||||||
@@ -56,10 +57,8 @@ class SelectUserForSharingPage extends HookConsumerWidget {
|
|||||||
),
|
),
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
return CircleAvatar(
|
return UserCircleAvatar(
|
||||||
backgroundImage:
|
user: user,
|
||||||
const AssetImage('assets/immich-logo-no-outline.png'),
|
|
||||||
backgroundColor: Theme.of(context).primaryColor.withAlpha(50),
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -124,7 +123,7 @@ class SelectUserForSharingPage extends HookConsumerWidget {
|
|||||||
} else {
|
} else {
|
||||||
sharedUsersList.value = {
|
sharedUsersList.value = {
|
||||||
...sharedUsersList.value,
|
...sharedUsersList.value,
|
||||||
users[index]
|
users[index],
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -164,7 +163,7 @@ class SelectUserForSharingPage extends HookConsumerWidget {
|
|||||||
// color: Theme.of(context).primaryColor,
|
// color: Theme.of(context).primaryColor,
|
||||||
),
|
),
|
||||||
).tr(),
|
).tr(),
|
||||||
)
|
),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
body: suggestedShareUsers.when(
|
body: suggestedShareUsers.when(
|
||||||
|
|||||||
@@ -160,7 +160,7 @@ class SharingPage extends HookConsumerWidget {
|
|||||||
maxLines: 1,
|
maxLines: 1,
|
||||||
).tr(),
|
).tr(),
|
||||||
),
|
),
|
||||||
)
|
),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -2,14 +2,12 @@ import 'package:auto_route/auto_route.dart';
|
|||||||
import 'package:easy_localization/easy_localization.dart';
|
import 'package:easy_localization/easy_localization.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_hooks/flutter_hooks.dart';
|
import 'package:flutter_hooks/flutter_hooks.dart';
|
||||||
import 'package:fluttertoast/fluttertoast.dart';
|
|
||||||
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
||||||
import 'package:immich_mobile/modules/archive/providers/archive_asset_provider.dart';
|
import 'package:immich_mobile/modules/archive/providers/archive_asset_provider.dart';
|
||||||
import 'package:immich_mobile/modules/home/ui/asset_grid/immich_asset_grid.dart';
|
import 'package:immich_mobile/modules/home/ui/asset_grid/immich_asset_grid.dart';
|
||||||
import 'package:immich_mobile/shared/models/asset.dart';
|
import 'package:immich_mobile/shared/models/asset.dart';
|
||||||
import 'package:immich_mobile/shared/providers/asset.provider.dart';
|
|
||||||
import 'package:immich_mobile/shared/ui/immich_loading_indicator.dart';
|
import 'package:immich_mobile/shared/ui/immich_loading_indicator.dart';
|
||||||
import 'package:immich_mobile/shared/ui/immich_toast.dart';
|
import 'package:immich_mobile/utils/selection_handlers.dart';
|
||||||
|
|
||||||
class ArchivePage extends HookConsumerWidget {
|
class ArchivePage extends HookConsumerWidget {
|
||||||
const ArchivePage({super.key});
|
const ArchivePage({super.key});
|
||||||
@@ -68,30 +66,18 @@ class ArchivePage extends HookConsumerWidget {
|
|||||||
: () async {
|
: () async {
|
||||||
processing.value = true;
|
processing.value = true;
|
||||||
try {
|
try {
|
||||||
if (selection.value.isNotEmpty) {
|
await handleArchiveAssets(
|
||||||
await ref
|
ref,
|
||||||
.watch(assetProvider.notifier)
|
context,
|
||||||
.toggleArchive(
|
selection.value.toList(),
|
||||||
selection.value.toList(),
|
shouldArchive: false,
|
||||||
false,
|
);
|
||||||
);
|
|
||||||
|
|
||||||
final assetOrAssets = selection.value.length > 1
|
|
||||||
? 'assets'
|
|
||||||
: 'asset';
|
|
||||||
ImmichToast.show(
|
|
||||||
context: context,
|
|
||||||
msg:
|
|
||||||
'Moved ${selection.value.length} $assetOrAssets to library',
|
|
||||||
gravity: ToastGravity.CENTER,
|
|
||||||
);
|
|
||||||
}
|
|
||||||
} finally {
|
} finally {
|
||||||
processing.value = false;
|
processing.value = false;
|
||||||
selectionEnabledHook.value = false;
|
selectionEnabledHook.value = false;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
)
|
),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
@@ -124,7 +110,7 @@ class ArchivePage extends HookConsumerWidget {
|
|||||||
),
|
),
|
||||||
if (selectionEnabledHook.value) buildBottomBar(),
|
if (selectionEnabledHook.value) buildBottomBar(),
|
||||||
if (processing.value)
|
if (processing.value)
|
||||||
const Center(child: ImmichLoadingIndicator())
|
const Center(child: ImmichLoadingIndicator()),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
|||||||
@@ -1,8 +1,11 @@
|
|||||||
|
import 'dart:io';
|
||||||
|
|
||||||
import 'package:easy_localization/easy_localization.dart';
|
import 'package:easy_localization/easy_localization.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_map/flutter_map.dart';
|
import 'package:flutter_map/flutter_map.dart';
|
||||||
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
||||||
import 'package:immich_mobile/modules/asset_viewer/ui/description_input.dart';
|
import 'package:immich_mobile/modules/asset_viewer/ui/description_input.dart';
|
||||||
|
import 'package:immich_mobile/modules/map/ui/map_thumbnail.dart';
|
||||||
import 'package:immich_mobile/shared/models/asset.dart';
|
import 'package:immich_mobile/shared/models/asset.dart';
|
||||||
import 'package:immich_mobile/shared/ui/drag_sheet.dart';
|
import 'package:immich_mobile/shared/ui/drag_sheet.dart';
|
||||||
import 'package:latlong2/latlong.dart';
|
import 'package:latlong2/latlong.dart';
|
||||||
@@ -14,9 +17,59 @@ class ExifBottomSheet extends HookConsumerWidget {
|
|||||||
|
|
||||||
const ExifBottomSheet({Key? key, required this.asset}) : super(key: key);
|
const ExifBottomSheet({Key? key, required this.asset}) : super(key: key);
|
||||||
|
|
||||||
bool get showMap =>
|
bool get hasCoordinates =>
|
||||||
asset.exifInfo?.latitude != null && asset.exifInfo?.longitude != null;
|
asset.exifInfo?.latitude != null && asset.exifInfo?.longitude != null;
|
||||||
|
|
||||||
|
String get formattedDateTime {
|
||||||
|
final fileCreatedAt = asset.fileCreatedAt.toLocal();
|
||||||
|
final date = DateFormat.yMMMEd().format(fileCreatedAt);
|
||||||
|
final time = DateFormat.jm().format(fileCreatedAt);
|
||||||
|
|
||||||
|
return '$date • $time';
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<Uri?> _createCoordinatesUri() async {
|
||||||
|
if (!hasCoordinates) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
double latitude = asset.exifInfo!.latitude!;
|
||||||
|
double longitude = asset.exifInfo!.longitude!;
|
||||||
|
|
||||||
|
const zoomLevel = 16;
|
||||||
|
|
||||||
|
if (Platform.isAndroid) {
|
||||||
|
Uri uri = Uri(
|
||||||
|
scheme: 'geo',
|
||||||
|
host: '$latitude,$longitude',
|
||||||
|
queryParameters: {
|
||||||
|
'z': '$zoomLevel',
|
||||||
|
'q': '$latitude,$longitude($formattedDateTime)',
|
||||||
|
},
|
||||||
|
);
|
||||||
|
if (await canLaunchUrl(uri)) {
|
||||||
|
return uri;
|
||||||
|
}
|
||||||
|
} else if (Platform.isIOS) {
|
||||||
|
var params = {
|
||||||
|
'll': '$latitude,$longitude',
|
||||||
|
'q': formattedDateTime,
|
||||||
|
'z': '$zoomLevel',
|
||||||
|
};
|
||||||
|
Uri uri = Uri.https('maps.apple.com', '/', params);
|
||||||
|
if (await canLaunchUrl(uri)) {
|
||||||
|
return uri;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return Uri(
|
||||||
|
scheme: 'https',
|
||||||
|
host: 'openstreetmap.org',
|
||||||
|
queryParameters: {'mlat': '$latitude', 'mlon': '$longitude'},
|
||||||
|
fragment: 'map=$zoomLevel/$latitude/$longitude',
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context, WidgetRef ref) {
|
Widget build(BuildContext context, WidgetRef ref) {
|
||||||
final exifInfo = asset.exifInfo;
|
final exifInfo = asset.exifInfo;
|
||||||
@@ -28,55 +81,35 @@ class ExifBottomSheet extends HookConsumerWidget {
|
|||||||
padding: const EdgeInsets.symmetric(vertical: 16.0),
|
padding: const EdgeInsets.symmetric(vertical: 16.0),
|
||||||
child: LayoutBuilder(
|
child: LayoutBuilder(
|
||||||
builder: (context, constraints) {
|
builder: (context, constraints) {
|
||||||
return Container(
|
return MapThumbnail(
|
||||||
height: 150,
|
coords: LatLng(
|
||||||
width: constraints.maxWidth,
|
exifInfo?.latitude ?? 0,
|
||||||
decoration: const BoxDecoration(
|
exifInfo?.longitude ?? 0,
|
||||||
borderRadius: BorderRadius.all(Radius.circular(15)),
|
|
||||||
),
|
),
|
||||||
child: FlutterMap(
|
height: 150,
|
||||||
options: MapOptions(
|
zoom: 16.0,
|
||||||
interactiveFlags: InteractiveFlag.none,
|
markers: [
|
||||||
center: LatLng(
|
Marker(
|
||||||
|
anchorPos: AnchorPos.align(AnchorAlign.top),
|
||||||
|
point: LatLng(
|
||||||
exifInfo?.latitude ?? 0,
|
exifInfo?.latitude ?? 0,
|
||||||
exifInfo?.longitude ?? 0,
|
exifInfo?.longitude ?? 0,
|
||||||
),
|
),
|
||||||
zoom: 16.0,
|
builder: (ctx) => const Image(
|
||||||
|
image: AssetImage('assets/location-pin.png'),
|
||||||
|
),
|
||||||
),
|
),
|
||||||
nonRotatedChildren: [
|
],
|
||||||
RichAttributionWidget(
|
onTap: (tapPosition, latLong) async {
|
||||||
attributions: [
|
Uri? uri = await _createCoordinatesUri();
|
||||||
TextSourceAttribution(
|
|
||||||
'OpenStreetMap contributors',
|
if (uri == null) {
|
||||||
onTap: () => launchUrl(
|
return;
|
||||||
Uri.parse('https://openstreetmap.org/copyright'),
|
}
|
||||||
),
|
|
||||||
),
|
debugPrint('Opening Map Uri: $uri');
|
||||||
],
|
launchUrl(uri);
|
||||||
),
|
},
|
||||||
],
|
|
||||||
children: [
|
|
||||||
TileLayer(
|
|
||||||
urlTemplate:
|
|
||||||
"https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png",
|
|
||||||
subdomains: const ['a', 'b', 'c'],
|
|
||||||
),
|
|
||||||
MarkerLayer(
|
|
||||||
markers: [
|
|
||||||
Marker(
|
|
||||||
anchorPos: AnchorPos.align(AnchorAlign.top),
|
|
||||||
point: LatLng(
|
|
||||||
exifInfo?.latitude ?? 0,
|
|
||||||
exifInfo?.longitude ?? 0,
|
|
||||||
),
|
|
||||||
builder: (ctx) => const Image(
|
|
||||||
image: AssetImage('assets/location-pin.png'),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
@@ -110,7 +143,7 @@ class ExifBottomSheet extends HookConsumerWidget {
|
|||||||
|
|
||||||
buildLocation() {
|
buildLocation() {
|
||||||
// Guard no lat/lng
|
// Guard no lat/lng
|
||||||
if (!showMap) {
|
if (!hasCoordinates) {
|
||||||
return Container();
|
return Container();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -158,7 +191,7 @@ class ExifBottomSheet extends HookConsumerWidget {
|
|||||||
Text(
|
Text(
|
||||||
"${exifInfo!.latitude!.toStringAsFixed(4)}, ${exifInfo.longitude!.toStringAsFixed(4)}",
|
"${exifInfo!.latitude!.toStringAsFixed(4)}, ${exifInfo.longitude!.toStringAsFixed(4)}",
|
||||||
style: const TextStyle(fontSize: 12),
|
style: const TextStyle(fontSize: 12),
|
||||||
)
|
),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
@@ -166,12 +199,8 @@ class ExifBottomSheet extends HookConsumerWidget {
|
|||||||
}
|
}
|
||||||
|
|
||||||
buildDate() {
|
buildDate() {
|
||||||
final fileCreatedAt = asset.fileCreatedAt.toLocal();
|
|
||||||
final date = DateFormat.yMMMEd().format(fileCreatedAt);
|
|
||||||
final time = DateFormat.jm().format(fileCreatedAt);
|
|
||||||
|
|
||||||
return Text(
|
return Text(
|
||||||
'$date • $time',
|
formattedDateTime,
|
||||||
style: const TextStyle(
|
style: const TextStyle(
|
||||||
fontWeight: FontWeight.bold,
|
fontWeight: FontWeight.bold,
|
||||||
fontSize: 14,
|
fontSize: 14,
|
||||||
@@ -226,7 +255,7 @@ class ExifBottomSheet extends HookConsumerWidget {
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
subtitle: Text(
|
subtitle: Text(
|
||||||
"ƒ/${exifInfo.fNumber} ${exifInfo.exposureTime} ${exifInfo.focalLength} mm ISO${exifInfo.iso} ",
|
"ƒ/${exifInfo.fNumber} ${exifInfo.exposureTime} ${exifInfo.focalLength} mm ISO ${exifInfo.iso ?? ''} ",
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
@@ -265,7 +294,7 @@ class ExifBottomSheet extends HookConsumerWidget {
|
|||||||
crossAxisAlignment: CrossAxisAlignment.start,
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
children: [
|
children: [
|
||||||
Flexible(
|
Flexible(
|
||||||
flex: showMap ? 5 : 0,
|
flex: hasCoordinates ? 5 : 0,
|
||||||
child: Padding(
|
child: Padding(
|
||||||
padding: const EdgeInsets.only(right: 8.0),
|
padding: const EdgeInsets.only(right: 8.0),
|
||||||
child: buildLocation(),
|
child: buildLocation(),
|
||||||
@@ -295,7 +324,7 @@ class ExifBottomSheet extends HookConsumerWidget {
|
|||||||
if (asset.isRemote) DescriptionInput(asset: asset),
|
if (asset.isRemote) DescriptionInput(asset: asset),
|
||||||
const SizedBox(height: 8.0),
|
const SizedBox(height: 8.0),
|
||||||
buildLocation(),
|
buildLocation(),
|
||||||
SizedBox(height: showMap ? 16.0 : 0.0),
|
SizedBox(height: hasCoordinates ? 16.0 : 0.0),
|
||||||
buildDetail(),
|
buildDetail(),
|
||||||
const SizedBox(height: 50),
|
const SizedBox(height: 50),
|
||||||
],
|
],
|
||||||
|
|||||||
@@ -128,7 +128,7 @@ class TopControlAppBar extends HookConsumerWidget {
|
|||||||
if (asset.isLocal && !asset.isRemote) buildUploadButton(),
|
if (asset.isLocal && !asset.isRemote) buildUploadButton(),
|
||||||
if (asset.isRemote && !asset.isLocal) buildDownloadButton(),
|
if (asset.isRemote && !asset.isLocal) buildDownloadButton(),
|
||||||
if (asset.isRemote) buildAddToAlbumButtom(),
|
if (asset.isRemote) buildAddToAlbumButtom(),
|
||||||
buildMoreInfoButton()
|
buildMoreInfoButton(),
|
||||||
],
|
],
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user