Compare commits
35 Commits
fix-mobile
...
fix/server
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2997d3128b | ||
|
|
3968d76a57 | ||
|
|
55b31d1ce2 | ||
|
|
37cc6fbf27 | ||
|
|
899b8a0ce7 | ||
|
|
d3a5490e71 | ||
|
|
3afb5b497f | ||
|
|
1f0f880ecb | ||
|
|
2c05ceaf50 | ||
|
|
01f8b7e458 | ||
|
|
b73f7fe16f | ||
|
|
281cfc95a4 | ||
|
|
3a3ea6135e | ||
|
|
c44271e9b2 | ||
|
|
86904a8382 | ||
|
|
cf54829b3b | ||
|
|
990627e00d | ||
|
|
41580696c7 | ||
|
|
2423bb36c4 | ||
|
|
82b899649d | ||
|
|
8ee8450d18 | ||
|
|
6d47d52b3c | ||
|
|
919fd7d41f | ||
|
|
c2fdb6aab8 | ||
|
|
b6c4da37fd | ||
|
|
17c3e8e8bf | ||
|
|
21d3f248da | ||
|
|
a29660aae3 | ||
|
|
6c81fa0f0a | ||
|
|
7156da502f | ||
|
|
13741410a7 | ||
|
|
3408e6b3cb | ||
|
|
434bcec5cc | ||
|
|
ebc71e428d | ||
|
|
a70cd368af |
2
.github/workflows/cli.yml
vendored
2
.github/workflows/cli.yml
vendored
@@ -59,7 +59,7 @@ jobs:
|
||||
uses: docker/setup-qemu-action@v3.2.0
|
||||
|
||||
- name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@v3.5.0
|
||||
uses: docker/setup-buildx-action@v3.6.1
|
||||
|
||||
- name: Login to GitHub Container Registry
|
||||
uses: docker/login-action@v3
|
||||
|
||||
4
.github/workflows/docker-cleanup.yml
vendored
4
.github/workflows/docker-cleanup.yml
vendored
@@ -35,7 +35,7 @@ jobs:
|
||||
steps:
|
||||
- name: Clean temporary images
|
||||
if: "${{ env.TOKEN != '' }}"
|
||||
uses: stumpylog/image-cleaner-action/ephemeral@v0.7.0
|
||||
uses: stumpylog/image-cleaner-action/ephemeral@v0.8.0
|
||||
with:
|
||||
token: "${{ env.TOKEN }}"
|
||||
owner: "immich-app"
|
||||
@@ -64,7 +64,7 @@ jobs:
|
||||
steps:
|
||||
- name: Clean untagged images
|
||||
if: "${{ env.TOKEN != '' }}"
|
||||
uses: stumpylog/image-cleaner-action/untagged@v0.7.0
|
||||
uses: stumpylog/image-cleaner-action/untagged@v0.8.0
|
||||
with:
|
||||
token: "${{ env.TOKEN }}"
|
||||
owner: "immich-app"
|
||||
|
||||
2
.github/workflows/docker.yml
vendored
2
.github/workflows/docker.yml
vendored
@@ -66,7 +66,7 @@ jobs:
|
||||
uses: docker/setup-qemu-action@v3.2.0
|
||||
|
||||
- name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@v3.5.0
|
||||
uses: docker/setup-buildx-action@v3.6.1
|
||||
|
||||
- name: Login to Docker Hub
|
||||
# Only push to Docker Hub when making a release
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
FROM node:20.16.0-alpine3.20@sha256:aada767bf3e4b4a1437642b81db7d8bb99a6dba27627088e4608772f1f02ebc0 as core
|
||||
FROM node:20.16.0-alpine3.20@sha256:eb8101caae9ac02229bd64c024919fe3d4504ff7f329da79ca60a04db08cef52 as core
|
||||
|
||||
WORKDIR /usr/src/open-api/typescript-sdk
|
||||
COPY open-api/typescript-sdk/package*.json open-api/typescript-sdk/tsconfig*.json ./
|
||||
|
||||
1086
cli/package-lock.json
generated
1086
cli/package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@immich/cli",
|
||||
"version": "2.2.12",
|
||||
"version": "2.2.13",
|
||||
"description": "Command Line Interface (CLI) for Immich",
|
||||
"type": "module",
|
||||
"exports": "./dist/index.js",
|
||||
@@ -21,22 +21,22 @@
|
||||
"@types/node": "^20.14.12",
|
||||
"@typescript-eslint/eslint-plugin": "^7.0.0",
|
||||
"@typescript-eslint/parser": "^7.0.0",
|
||||
"@vitest/coverage-v8": "^1.2.2",
|
||||
"@vitest/coverage-v8": "^2.0.5",
|
||||
"byte-size": "^9.0.0",
|
||||
"cli-progress": "^3.12.0",
|
||||
"commander": "^12.0.0",
|
||||
"eslint": "^8.56.0",
|
||||
"eslint-config-prettier": "^9.1.0",
|
||||
"eslint-plugin-prettier": "^5.1.3",
|
||||
"eslint-plugin-unicorn": "^54.0.0",
|
||||
"eslint-plugin-unicorn": "^55.0.0",
|
||||
"mock-fs": "^5.2.0",
|
||||
"prettier": "^3.2.5",
|
||||
"prettier-plugin-organize-imports": "^4.0.0",
|
||||
"typescript": "^5.3.3",
|
||||
"vite": "^5.0.12",
|
||||
"vite-tsconfig-paths": "^4.3.2",
|
||||
"vitest": "^1.2.2",
|
||||
"vitest-fetch-mock": "^0.2.2",
|
||||
"vitest": "^2.0.5",
|
||||
"vitest-fetch-mock": "^0.3.0",
|
||||
"yaml": "^2.3.1"
|
||||
},
|
||||
"scripts": {
|
||||
|
||||
@@ -87,7 +87,7 @@ services:
|
||||
command: ['./run.sh', '-disable-reporting']
|
||||
ports:
|
||||
- 3000:3000
|
||||
image: grafana/grafana:11.1.0-ubuntu@sha256:c7fc29ec783d5e7fc1bdfaad6f92345a345cffbc5d21c388ca228175006fc107
|
||||
image: grafana/grafana:11.1.3-ubuntu@sha256:e10453733015f31103cb530425f32c994816b50102886fa885dafea2c50a711c
|
||||
volumes:
|
||||
- grafana-data:/var/lib/grafana
|
||||
|
||||
|
||||
@@ -16,6 +16,7 @@ services:
|
||||
# file: hwaccel.transcoding.yml
|
||||
# service: cpu # set to one of [nvenc, quicksync, rkmpp, vaapi, vaapi-wsl] for accelerated transcoding
|
||||
volumes:
|
||||
# Do not edit the next line. If you want to change the media storage location on your system, edit the value of UPLOAD_LOCATION in the .env file
|
||||
- ${UPLOAD_LOCATION}:/usr/src/app/upload
|
||||
- /etc/localtime:/etc/localtime:ro
|
||||
env_file:
|
||||
@@ -57,6 +58,7 @@ services:
|
||||
POSTGRES_DB: ${DB_DATABASE_NAME}
|
||||
POSTGRES_INITDB_ARGS: '--data-checksums'
|
||||
volumes:
|
||||
# Do not edit the next line. If you want to change the database storage location on your system, edit the value of DB_DATA_LOCATION in the .env file
|
||||
- ${DB_DATA_LOCATION}:/var/lib/postgresql/data
|
||||
healthcheck:
|
||||
test: pg_isready --dbname='${DB_DATABASE_NAME}' --username='${DB_USERNAME}' || exit 1; Chksum="$$(psql --dbname='${DB_DATABASE_NAME}' --username='${DB_USERNAME}' --tuples-only --no-align --command='SELECT COALESCE(SUM(checksum_failures), 0) FROM pg_stat_database')"; echo "checksum failure count is $$Chksum"; [ "$$Chksum" = '0' ] || exit 1
|
||||
|
||||
24
docs/package-lock.json
generated
24
docs/package-lock.json
generated
@@ -12754,9 +12754,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/postcss": {
|
||||
"version": "8.4.39",
|
||||
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.39.tgz",
|
||||
"integrity": "sha512-0vzE+lAiG7hZl1/9I8yzKLx3aR9Xbof3fBHKunvMfOCYAtMhrsnccJY2iTURb9EZd5+pLuiNV9/c/GZJOHsgIw==",
|
||||
"version": "8.4.40",
|
||||
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.40.tgz",
|
||||
"integrity": "sha512-YF2kKIUzAofPMpfH6hOi2cGnv/HrUlfucspc7pDyvv7kGdqXrfj8SCl/t8owkEgKEuu8ZcRjSOxFxVLqwChZ2Q==",
|
||||
"funding": [
|
||||
{
|
||||
"type": "opencollective",
|
||||
@@ -13600,9 +13600,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/prettier": {
|
||||
"version": "3.3.2",
|
||||
"resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.2.tgz",
|
||||
"integrity": "sha512-rAVeHYMcv8ATV5d508CFdn+8/pHPpXeIid1DdrPwXnaAdH7cqjVbpJaT5eq4yRAFU/lsbwYwSF/n5iNrdJHPQA==",
|
||||
"version": "3.3.3",
|
||||
"resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.3.tgz",
|
||||
"integrity": "sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"bin": {
|
||||
@@ -16014,9 +16014,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/tailwindcss": {
|
||||
"version": "3.4.4",
|
||||
"resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.4.tgz",
|
||||
"integrity": "sha512-ZoyXOdJjISB7/BcLTR6SEsLgKtDStYyYZVLsUtWChO4Ps20CBad7lfJKVDiejocV4ME1hLmyY0WJE3hSDcmQ2A==",
|
||||
"version": "3.4.7",
|
||||
"resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.7.tgz",
|
||||
"integrity": "sha512-rxWZbe87YJb4OcSopb7up2Ba4U82BoiSGUdoDr3Ydrg9ckxFS/YWsvhN323GMcddgU65QRy7JndC7ahhInhvlQ==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@alloc/quick-lru": "^5.2.0",
|
||||
@@ -16376,9 +16376,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/typescript": {
|
||||
"version": "5.5.3",
|
||||
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.3.tgz",
|
||||
"integrity": "sha512-/hreyEujaB0w76zKo6717l3L0o/qEUtRgdvUBvlkhoWeOVMjMuHNHk0BRBzikzuGDqNmPQbg5ifMEqsHLiIUcQ==",
|
||||
"version": "5.5.4",
|
||||
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.4.tgz",
|
||||
"integrity": "sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==",
|
||||
"license": "Apache-2.0",
|
||||
"bin": {
|
||||
"tsc": "bin/tsc",
|
||||
|
||||
4
docs/static/archived-versions.json
vendored
4
docs/static/archived-versions.json
vendored
@@ -1,4 +1,8 @@
|
||||
[
|
||||
{
|
||||
"label": "v1.111.0",
|
||||
"url": "https://v1.111.0.archive.immich.app"
|
||||
},
|
||||
{
|
||||
"label": "v1.110.0",
|
||||
"url": "https://v1.110.0.archive.immich.app"
|
||||
|
||||
1452
e2e/package-lock.json
generated
1452
e2e/package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "immich-e2e",
|
||||
"version": "1.110.0",
|
||||
"version": "1.111.0",
|
||||
"description": "",
|
||||
"main": "index.js",
|
||||
"type": "module",
|
||||
@@ -30,12 +30,12 @@
|
||||
"@types/supertest": "^6.0.2",
|
||||
"@typescript-eslint/eslint-plugin": "^7.1.0",
|
||||
"@typescript-eslint/parser": "^7.1.0",
|
||||
"@vitest/coverage-v8": "^1.3.0",
|
||||
"@vitest/coverage-v8": "^2.0.5",
|
||||
"eslint": "^8.57.0",
|
||||
"eslint-config-prettier": "^9.1.0",
|
||||
"eslint-plugin-prettier": "^5.1.3",
|
||||
"eslint-plugin-unicorn": "^54.0.0",
|
||||
"exiftool-vendored": "^27.0.0",
|
||||
"eslint-plugin-unicorn": "^55.0.0",
|
||||
"exiftool-vendored": "^28.0.0",
|
||||
"jose": "^5.6.3",
|
||||
"luxon": "^3.4.4",
|
||||
"oidc-provider": "^8.5.1",
|
||||
@@ -47,7 +47,7 @@
|
||||
"supertest": "^7.0.0",
|
||||
"typescript": "^5.3.3",
|
||||
"utimes": "^5.2.1",
|
||||
"vitest": "^1.6.0"
|
||||
"vitest": "^2.0.5"
|
||||
},
|
||||
"volta": {
|
||||
"node": "20.16.0"
|
||||
|
||||
@@ -159,4 +159,75 @@ describe('/map', () => {
|
||||
expect(body).toEqual(expect.objectContaining({ id: 'immich-map-dark' }));
|
||||
});
|
||||
});
|
||||
|
||||
describe('GET /map/reverse-geocode', () => {
|
||||
it('should require authentication', async () => {
|
||||
const { status, body } = await request(app).get('/map/reverse-geocode');
|
||||
expect(status).toBe(401);
|
||||
expect(body).toEqual(errorDto.unauthorized);
|
||||
});
|
||||
|
||||
it('should throw an error if a lat is not provided', async () => {
|
||||
const { status, body } = await request(app)
|
||||
.get('/map/reverse-geocode?lon=123')
|
||||
.set('Authorization', `Bearer ${admin.accessToken}`);
|
||||
expect(status).toBe(400);
|
||||
expect(body).toEqual(errorDto.badRequest(['lat must be a number between -90 and 90']));
|
||||
});
|
||||
|
||||
it('should throw an error if a lat is not a number', async () => {
|
||||
const { status, body } = await request(app)
|
||||
.get('/map/reverse-geocode?lat=abc&lon=123.456')
|
||||
.set('Authorization', `Bearer ${admin.accessToken}`);
|
||||
expect(status).toBe(400);
|
||||
expect(body).toEqual(errorDto.badRequest(['lat must be a number between -90 and 90']));
|
||||
});
|
||||
|
||||
it('should throw an error if a lat is out of range', async () => {
|
||||
const { status, body } = await request(app)
|
||||
.get('/map/reverse-geocode?lat=91&lon=123.456')
|
||||
.set('Authorization', `Bearer ${admin.accessToken}`);
|
||||
expect(status).toBe(400);
|
||||
expect(body).toEqual(errorDto.badRequest(['lat must be a number between -90 and 90']));
|
||||
});
|
||||
|
||||
it('should throw an error if a lon is not provided', async () => {
|
||||
const { status, body } = await request(app)
|
||||
.get('/map/reverse-geocode?lat=75')
|
||||
.set('Authorization', `Bearer ${admin.accessToken}`);
|
||||
expect(status).toBe(400);
|
||||
expect(body).toEqual(errorDto.badRequest(['lon must be a number between -180 and 180']));
|
||||
});
|
||||
|
||||
const reverseGeocodeTestCases = [
|
||||
{
|
||||
name: 'Vaucluse',
|
||||
lat: -33.858_977_058_663_13,
|
||||
lon: 151.278_490_730_270_48,
|
||||
results: [{ city: 'Vaucluse', state: 'New South Wales', country: 'Australia' }],
|
||||
},
|
||||
{
|
||||
name: 'Ravenhall',
|
||||
lat: -37.765_732_399_174_75,
|
||||
lon: 144.752_453_164_883_3,
|
||||
results: [{ city: 'Ravenhall', state: 'Victoria', country: 'Australia' }],
|
||||
},
|
||||
{
|
||||
name: 'Scarborough',
|
||||
lat: -31.894_346_156_789_997,
|
||||
lon: 115.757_617_103_904_64,
|
||||
results: [{ city: 'Scarborough', state: 'Western Australia', country: 'Australia' }],
|
||||
},
|
||||
];
|
||||
|
||||
it.each(reverseGeocodeTestCases)(`should resolve to $name`, async ({ lat, lon, results }) => {
|
||||
const { status, body } = await request(app)
|
||||
.get(`/map/reverse-geocode?lat=${lat}&lon=${lon}`)
|
||||
.set('Authorization', `Bearer ${admin.accessToken}`);
|
||||
expect(status).toBe(200);
|
||||
expect(Array.isArray(body)).toBe(true);
|
||||
expect(body.length).toBe(results.length);
|
||||
expect(body).toEqual(results);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@@ -6,10 +6,19 @@ import request from 'supertest';
|
||||
import { beforeAll, beforeEach, describe, expect, it } from 'vitest';
|
||||
|
||||
const invalidBirthday = [
|
||||
{ birthDate: 'false', response: 'birthDate must be a date string' },
|
||||
{ birthDate: '123567', response: 'birthDate must be a date string' },
|
||||
{ birthDate: 123_567, response: 'birthDate must be a date string' },
|
||||
{ birthDate: new Date(9999, 0, 0).toISOString(), response: ['Birth date cannot be in the future'] },
|
||||
{
|
||||
birthDate: 'false',
|
||||
response: ['birthDate must be a string in the format yyyy-MM-dd', 'Birth date cannot be in the future'],
|
||||
},
|
||||
{
|
||||
birthDate: '123567',
|
||||
response: ['birthDate must be a string in the format yyyy-MM-dd', 'Birth date cannot be in the future'],
|
||||
},
|
||||
{
|
||||
birthDate: 123_567,
|
||||
response: ['birthDate must be a string in the format yyyy-MM-dd', 'Birth date cannot be in the future'],
|
||||
},
|
||||
{ birthDate: '9999-01-01', response: ['Birth date cannot be in the future'] },
|
||||
];
|
||||
|
||||
describe('/people', () => {
|
||||
@@ -185,13 +194,13 @@ describe('/people', () => {
|
||||
.set('Authorization', `Bearer ${admin.accessToken}`)
|
||||
.send({
|
||||
name: 'New Person',
|
||||
birthDate: '1990-01-01T05:00:00.000Z',
|
||||
birthDate: '1990-01-01',
|
||||
});
|
||||
expect(status).toBe(201);
|
||||
expect(body).toMatchObject({
|
||||
id: expect.any(String),
|
||||
name: 'New Person',
|
||||
birthDate: '1990-01-01T05:00:00.000Z',
|
||||
birthDate: '1990-01-01',
|
||||
});
|
||||
});
|
||||
});
|
||||
@@ -233,7 +242,7 @@ describe('/people', () => {
|
||||
const { status, body } = await request(app)
|
||||
.put(`/people/${visiblePerson.id}`)
|
||||
.set('Authorization', `Bearer ${admin.accessToken}`)
|
||||
.send({ birthDate: '1990-01-01T05:00:00.000Z' });
|
||||
.send({ birthDate: '1990-01-01' });
|
||||
expect(status).toBe(200);
|
||||
expect(body).toMatchObject({ birthDate: '1990-01-01' });
|
||||
});
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { AssetMediaResponseDto, LoginResponseDto, deleteAssets, getMapMarkers, updateAsset } from '@immich/sdk';
|
||||
import { AssetMediaResponseDto, LoginResponseDto, deleteAssets, updateAsset } from '@immich/sdk';
|
||||
import { DateTime } from 'luxon';
|
||||
import { readFile } from 'node:fs/promises';
|
||||
import { join } from 'node:path';
|
||||
@@ -32,9 +32,6 @@ describe('/search', () => {
|
||||
let assetOneJpg5: AssetMediaResponseDto;
|
||||
let assetSprings: AssetMediaResponseDto;
|
||||
let assetLast: AssetMediaResponseDto;
|
||||
let cities: string[];
|
||||
let states: string[];
|
||||
let countries: string[];
|
||||
|
||||
beforeAll(async () => {
|
||||
await utils.resetDatabase();
|
||||
@@ -85,7 +82,7 @@ describe('/search', () => {
|
||||
// note: the coordinates here are not the actual coordinates of the images and are random for most of them
|
||||
const coordinates = [
|
||||
{ latitude: 48.853_41, longitude: 2.3488 }, // paris
|
||||
{ latitude: 63.0695, longitude: -151.0074 }, // denali
|
||||
{ latitude: 35.6895, longitude: 139.691_71 }, // tokyo
|
||||
{ latitude: 52.524_37, longitude: 13.410_53 }, // berlin
|
||||
{ latitude: 1.314_663_1, longitude: 103.845_409_3 }, // singapore
|
||||
{ latitude: 41.013_84, longitude: 28.949_66 }, // istanbul
|
||||
@@ -101,16 +98,15 @@ describe('/search', () => {
|
||||
{ latitude: 31.634_16, longitude: -7.999_94 }, // marrakesh
|
||||
{ latitude: 38.523_735_4, longitude: -78.488_619_4 }, // tanners ridge
|
||||
{ latitude: 59.938_63, longitude: 30.314_13 }, // st. petersburg
|
||||
{ latitude: 35.6895, longitude: 139.691_71 }, // tokyo
|
||||
];
|
||||
|
||||
const updates = assets.map((asset, i) =>
|
||||
updateAsset({ id: asset.id, updateAssetDto: coordinates[i] }, { headers: asBearerAuth(admin.accessToken) }),
|
||||
const updates = coordinates.map((dto, i) =>
|
||||
updateAsset({ id: assets[i].id, updateAssetDto: dto }, { headers: asBearerAuth(admin.accessToken) }),
|
||||
);
|
||||
|
||||
await Promise.all(updates);
|
||||
for (const asset of assets) {
|
||||
await utils.waitForWebsocketEvent({ event: 'assetUpdate', id: asset.id });
|
||||
for (const [i] of coordinates.entries()) {
|
||||
await utils.waitForWebsocketEvent({ event: 'assetUpdate', id: assets[i].id });
|
||||
}
|
||||
|
||||
[
|
||||
@@ -137,12 +133,6 @@ describe('/search', () => {
|
||||
assetLast = assets.at(-1) as AssetMediaResponseDto;
|
||||
|
||||
await deleteAssets({ assetBulkDeleteDto: { ids: [assetSilver.id] } }, { headers: asBearerAuth(admin.accessToken) });
|
||||
|
||||
const mapMarkers = await getMapMarkers({}, { headers: asBearerAuth(admin.accessToken) });
|
||||
const nonTrashed = mapMarkers.filter((mark) => mark.id !== assetSilver.id);
|
||||
cities = [...new Set(nonTrashed.map((mark) => mark.city).filter((entry): entry is string => !!entry))].sort();
|
||||
states = [...new Set(nonTrashed.map((mark) => mark.state).filter((entry): entry is string => !!entry))].sort();
|
||||
countries = [...new Set(nonTrashed.map((mark) => mark.country).filter((entry): entry is string => !!entry))].sort();
|
||||
}, 30_000);
|
||||
|
||||
afterAll(async () => {
|
||||
@@ -321,23 +311,120 @@ describe('/search', () => {
|
||||
},
|
||||
{
|
||||
should: 'should search by city',
|
||||
deferred: () => ({ dto: { city: 'Accra' }, assets: [assetHeic] }),
|
||||
deferred: () => ({
|
||||
dto: {
|
||||
city: 'Accra',
|
||||
includeNull: true,
|
||||
},
|
||||
assets: [assetHeic],
|
||||
}),
|
||||
},
|
||||
{
|
||||
should: "should search city ('')",
|
||||
deferred: () => ({
|
||||
dto: {
|
||||
city: '',
|
||||
isVisible: true,
|
||||
includeNull: true,
|
||||
},
|
||||
assets: [assetLast],
|
||||
}),
|
||||
},
|
||||
{
|
||||
should: 'should search city (null)',
|
||||
deferred: () => ({
|
||||
dto: {
|
||||
city: null,
|
||||
isVisible: true,
|
||||
includeNull: true,
|
||||
},
|
||||
assets: [assetLast],
|
||||
}),
|
||||
},
|
||||
{
|
||||
should: 'should search by state',
|
||||
deferred: () => ({ dto: { state: 'New York' }, assets: [assetDensity] }),
|
||||
deferred: () => ({
|
||||
dto: {
|
||||
state: 'New York',
|
||||
includeNull: true,
|
||||
},
|
||||
assets: [assetDensity],
|
||||
}),
|
||||
},
|
||||
{
|
||||
should: "should search state ('')",
|
||||
deferred: () => ({
|
||||
dto: {
|
||||
state: '',
|
||||
isVisible: true,
|
||||
withExif: true,
|
||||
includeNull: true,
|
||||
},
|
||||
assets: [assetLast, assetNotocactus],
|
||||
}),
|
||||
},
|
||||
{
|
||||
should: 'should search state (null)',
|
||||
deferred: () => ({
|
||||
dto: {
|
||||
state: null,
|
||||
isVisible: true,
|
||||
includeNull: true,
|
||||
},
|
||||
assets: [assetLast, assetNotocactus],
|
||||
}),
|
||||
},
|
||||
{
|
||||
should: 'should search by country',
|
||||
deferred: () => ({ dto: { country: 'France' }, assets: [assetFalcon] }),
|
||||
deferred: () => ({
|
||||
dto: {
|
||||
country: 'France',
|
||||
includeNull: true,
|
||||
},
|
||||
assets: [assetFalcon],
|
||||
}),
|
||||
},
|
||||
{
|
||||
should: "should search country ('')",
|
||||
deferred: () => ({
|
||||
dto: {
|
||||
country: '',
|
||||
isVisible: true,
|
||||
includeNull: true,
|
||||
},
|
||||
assets: [assetLast],
|
||||
}),
|
||||
},
|
||||
{
|
||||
should: 'should search country (null)',
|
||||
deferred: () => ({
|
||||
dto: {
|
||||
country: null,
|
||||
isVisible: true,
|
||||
includeNull: true,
|
||||
},
|
||||
assets: [assetLast],
|
||||
}),
|
||||
},
|
||||
{
|
||||
should: 'should search by make',
|
||||
deferred: () => ({ dto: { make: 'Canon' }, assets: [assetFalcon, assetDenali] }),
|
||||
deferred: () => ({
|
||||
dto: {
|
||||
make: 'Canon',
|
||||
includeNull: true,
|
||||
},
|
||||
assets: [assetFalcon, assetDenali],
|
||||
}),
|
||||
},
|
||||
{
|
||||
should: 'should search by model',
|
||||
deferred: () => ({ dto: { model: 'Canon EOS 7D' }, assets: [assetDenali] }),
|
||||
deferred: () => ({
|
||||
dto: {
|
||||
model: 'Canon EOS 7D',
|
||||
includeNull: true,
|
||||
},
|
||||
assets: [assetDenali],
|
||||
}),
|
||||
},
|
||||
{
|
||||
should: 'should allow searching the upload library (libraryId: null)',
|
||||
@@ -450,32 +537,79 @@ describe('/search', () => {
|
||||
|
||||
it('should get suggestions for country', async () => {
|
||||
const { status, body } = await request(app)
|
||||
.get('/search/suggestions?type=country')
|
||||
.get('/search/suggestions?type=country&includeNull=true')
|
||||
.set('Authorization', `Bearer ${admin.accessToken}`);
|
||||
expect(body).toEqual(countries);
|
||||
expect(body).toEqual([
|
||||
'Cuba',
|
||||
'France',
|
||||
'Georgia',
|
||||
'Germany',
|
||||
'Ghana',
|
||||
'Japan',
|
||||
'Morocco',
|
||||
"People's Republic of China",
|
||||
'Russian Federation',
|
||||
'Singapore',
|
||||
'Spain',
|
||||
'Switzerland',
|
||||
'United States of America',
|
||||
null,
|
||||
]);
|
||||
expect(status).toBe(200);
|
||||
});
|
||||
|
||||
it('should get suggestions for state', async () => {
|
||||
const { status, body } = await request(app)
|
||||
.get('/search/suggestions?type=state')
|
||||
.get('/search/suggestions?type=state&includeNull=true')
|
||||
.set('Authorization', `Bearer ${admin.accessToken}`);
|
||||
expect(body).toHaveLength(states.length);
|
||||
expect(body).toEqual(expect.arrayContaining(states));
|
||||
expect(body).toEqual([
|
||||
'Andalusia',
|
||||
'Berlin',
|
||||
'Glarus',
|
||||
'Greater Accra',
|
||||
'Havana',
|
||||
'Île-de-France',
|
||||
'Marrakesh-Safi',
|
||||
'Mississippi',
|
||||
'New York',
|
||||
'Shanghai',
|
||||
'St.-Petersburg',
|
||||
'Tbilisi',
|
||||
'Tokyo',
|
||||
'Virginia',
|
||||
null,
|
||||
]);
|
||||
expect(status).toBe(200);
|
||||
});
|
||||
|
||||
it('should get suggestions for city', async () => {
|
||||
const { status, body } = await request(app)
|
||||
.get('/search/suggestions?type=city')
|
||||
.get('/search/suggestions?type=city&includeNull=true')
|
||||
.set('Authorization', `Bearer ${admin.accessToken}`);
|
||||
expect(body).toEqual(cities);
|
||||
expect(body).toEqual([
|
||||
'Accra',
|
||||
'Berlin',
|
||||
'Glarus',
|
||||
'Havana',
|
||||
'Marrakesh',
|
||||
'Montalbán de Córdoba',
|
||||
'New York City',
|
||||
'Novena',
|
||||
'Paris',
|
||||
'Philadelphia',
|
||||
'Saint Petersburg',
|
||||
'Shanghai',
|
||||
'Stanley',
|
||||
'Tbilisi',
|
||||
'Tokyo',
|
||||
null,
|
||||
]);
|
||||
expect(status).toBe(200);
|
||||
});
|
||||
|
||||
it('should get suggestions for camera make', async () => {
|
||||
const { status, body } = await request(app)
|
||||
.get('/search/suggestions?type=camera-make')
|
||||
.get('/search/suggestions?type=camera-make&includeNull=true')
|
||||
.set('Authorization', `Bearer ${admin.accessToken}`);
|
||||
expect(body).toEqual([
|
||||
'Apple',
|
||||
@@ -485,13 +619,14 @@ describe('/search', () => {
|
||||
'PENTAX Corporation',
|
||||
'samsung',
|
||||
'SONY',
|
||||
null,
|
||||
]);
|
||||
expect(status).toBe(200);
|
||||
});
|
||||
|
||||
it('should get suggestions for camera model', async () => {
|
||||
const { status, body } = await request(app)
|
||||
.get('/search/suggestions?type=camera-model')
|
||||
.get('/search/suggestions?type=camera-model&includeNull=true')
|
||||
.set('Authorization', `Bearer ${admin.accessToken}`);
|
||||
expect(body).toEqual([
|
||||
'Canon EOS 7D',
|
||||
@@ -506,6 +641,7 @@ describe('/search', () => {
|
||||
'SM-F711N',
|
||||
'SM-S906U',
|
||||
'SM-T970',
|
||||
null,
|
||||
]);
|
||||
expect(status).toBe(200);
|
||||
});
|
||||
|
||||
@@ -112,6 +112,13 @@ describe('/shared-links', () => {
|
||||
expect(resp.header['content-type']).toContain('text/html');
|
||||
expect(resp.text).toContain(`<meta name="description" content="1 shared photos & videos" />`);
|
||||
});
|
||||
|
||||
it('should have fqdn og:image meta tag for shared asset', async () => {
|
||||
const resp = await request(shareUrl).get(`/${linkWithAssets.key}`);
|
||||
expect(resp.status).toBe(200);
|
||||
expect(resp.header['content-type']).toContain('text/html');
|
||||
expect(resp.text).toContain(`<meta property="og:image" content="http://`);
|
||||
});
|
||||
});
|
||||
|
||||
describe('GET /shared-links', () => {
|
||||
|
||||
@@ -424,12 +424,12 @@ export const utils = {
|
||||
|
||||
createPartner: (accessToken: string, id: string) => createPartner({ id }, { headers: asBearerAuth(accessToken) }),
|
||||
|
||||
setAuthCookies: async (context: BrowserContext, accessToken: string) =>
|
||||
setAuthCookies: async (context: BrowserContext, accessToken: string, domain = '127.0.0.1') =>
|
||||
await context.addCookies([
|
||||
{
|
||||
name: 'immich_access_token',
|
||||
value: accessToken,
|
||||
domain: '127.0.0.1',
|
||||
domain,
|
||||
path: '/',
|
||||
expires: 1_742_402_728,
|
||||
httpOnly: true,
|
||||
@@ -439,7 +439,7 @@ export const utils = {
|
||||
{
|
||||
name: 'immich_auth_type',
|
||||
value: 'password',
|
||||
domain: '127.0.0.1',
|
||||
domain,
|
||||
path: '/',
|
||||
expires: 1_742_402_728,
|
||||
httpOnly: true,
|
||||
@@ -449,7 +449,7 @@ export const utils = {
|
||||
{
|
||||
name: 'immich_is_authenticated',
|
||||
value: 'true',
|
||||
domain: '127.0.0.1',
|
||||
domain,
|
||||
path: '/',
|
||||
expires: 1_742_402_728,
|
||||
httpOnly: false,
|
||||
|
||||
@@ -10,6 +10,9 @@ test.describe('Asset Viewer Navbar', () => {
|
||||
utils.initSdk();
|
||||
await utils.resetDatabase();
|
||||
admin = await utils.adminSetup();
|
||||
});
|
||||
|
||||
test.beforeEach(async () => {
|
||||
asset = await utils.createAsset(admin.accessToken);
|
||||
});
|
||||
|
||||
@@ -49,4 +52,14 @@ test.describe('Asset Viewer Navbar', () => {
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
test.describe('actions', () => {
|
||||
test('favorite asset with shortcut', async ({ context, page }) => {
|
||||
await utils.setAuthCookies(context, admin.accessToken);
|
||||
await page.goto(`/photos/${asset.id}`);
|
||||
await page.waitForSelector('#immich-asset-viewer');
|
||||
await page.keyboard.press('f');
|
||||
await expect(page.locator('#notification-list').getByTestId('message')).toHaveText('Added to favorites');
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
56
e2e/src/web/specs/asset-viewer/slideshow.e2e-spec.ts
Normal file
56
e2e/src/web/specs/asset-viewer/slideshow.e2e-spec.ts
Normal file
@@ -0,0 +1,56 @@
|
||||
import { AssetMediaResponseDto, LoginResponseDto } from '@immich/sdk';
|
||||
import { expect, type Page, test } from '@playwright/test';
|
||||
import { utils } from 'src/utils';
|
||||
|
||||
test.describe('Slideshow', () => {
|
||||
let admin: LoginResponseDto;
|
||||
let asset: AssetMediaResponseDto;
|
||||
|
||||
test.beforeAll(async () => {
|
||||
utils.initSdk();
|
||||
await utils.resetDatabase();
|
||||
admin = await utils.adminSetup();
|
||||
asset = await utils.createAsset(admin.accessToken);
|
||||
});
|
||||
|
||||
const openSlideshow = async (page: Page) => {
|
||||
await page.goto(`/photos/${asset.id}`);
|
||||
await page.waitForSelector('#immich-asset-viewer');
|
||||
await page.getByRole('button', { name: 'More' }).click();
|
||||
await page.getByRole('menuitem', { name: 'Slideshow' }).click();
|
||||
};
|
||||
|
||||
test('open slideshow', async ({ context, page }) => {
|
||||
await utils.setAuthCookies(context, admin.accessToken);
|
||||
await openSlideshow(page);
|
||||
await expect(page.getByRole('button', { name: 'Exit Slideshow' })).toBeVisible();
|
||||
});
|
||||
|
||||
test('exit slideshow with button', async ({ context, page }) => {
|
||||
await utils.setAuthCookies(context, admin.accessToken);
|
||||
await openSlideshow(page);
|
||||
|
||||
const exitButton = page.getByRole('button', { name: 'Exit Slideshow' });
|
||||
await exitButton.click();
|
||||
await expect(exitButton).not.toBeVisible();
|
||||
});
|
||||
|
||||
test('exit slideshow with shortcut', async ({ context, page }) => {
|
||||
await utils.setAuthCookies(context, admin.accessToken);
|
||||
await openSlideshow(page);
|
||||
|
||||
const exitButton = page.getByRole('button', { name: 'Exit Slideshow' });
|
||||
await expect(exitButton).toBeVisible();
|
||||
await page.keyboard.press('Escape');
|
||||
await expect(exitButton).not.toBeVisible();
|
||||
});
|
||||
|
||||
test('favorite shortcut is disabled', async ({ context, page }) => {
|
||||
await utils.setAuthCookies(context, admin.accessToken);
|
||||
await openSlideshow(page);
|
||||
|
||||
await expect(page.getByRole('button', { name: 'Exit Slideshow' })).toBeVisible();
|
||||
await page.keyboard.press('f');
|
||||
await expect(page.locator('#notification-list')).not.toBeVisible();
|
||||
});
|
||||
});
|
||||
25
e2e/src/web/specs/websocket.e2e-spec.ts
Normal file
25
e2e/src/web/specs/websocket.e2e-spec.ts
Normal file
@@ -0,0 +1,25 @@
|
||||
import { LoginResponseDto } from '@immich/sdk';
|
||||
import { expect, test } from '@playwright/test';
|
||||
import { utils } from 'src/utils';
|
||||
|
||||
test.describe('Websocket', () => {
|
||||
let admin: LoginResponseDto;
|
||||
|
||||
test.beforeAll(async () => {
|
||||
utils.initSdk();
|
||||
await utils.resetDatabase();
|
||||
admin = await utils.adminSetup();
|
||||
});
|
||||
|
||||
test('connects using ipv4', async ({ page, context }) => {
|
||||
await utils.setAuthCookies(context, admin.accessToken);
|
||||
await page.goto('http://127.0.0.1:2283/');
|
||||
await expect(page.locator('#sidebar')).toContainText('Server Online');
|
||||
});
|
||||
|
||||
test('connects using ipv6', async ({ page, context }) => {
|
||||
await utils.setAuthCookies(context, admin.accessToken, '[::1]');
|
||||
await page.goto('http://[::1]:2283/');
|
||||
await expect(page.locator('#sidebar')).toContainText('Server Online');
|
||||
});
|
||||
});
|
||||
@@ -13,6 +13,7 @@ export default defineConfig({
|
||||
include: ['src/{api,cli,immich-admin}/specs/*.e2e-spec.ts'],
|
||||
globalSetup,
|
||||
testTimeout: 15_000,
|
||||
pool: 'threads',
|
||||
poolOptions: {
|
||||
threads: {
|
||||
singleThread: true,
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
ARG DEVICE=cpu
|
||||
|
||||
FROM python:3.11-bookworm@sha256:ef4b550f029a76b94f8e6cc6e4a8ed0e870fc6c5af1c4e9d77faaea50f41f6cd as builder-cpu
|
||||
FROM python:3.11-bookworm@sha256:f89d36dbb4728313572f88877b8be7d11fd03bea964cdf0a6b0f61edfcde3709 as builder-cpu
|
||||
|
||||
FROM builder-cpu as builder-openvino
|
||||
|
||||
@@ -34,7 +34,7 @@ RUN python3 -m venv /opt/venv
|
||||
COPY poetry.lock pyproject.toml ./
|
||||
RUN poetry install --sync --no-interaction --no-ansi --no-root --with ${DEVICE} --without dev
|
||||
|
||||
FROM python:3.11-slim-bookworm@sha256:ee317183d292ee6ed30e90bc325043ca3f7d2e8c79ac5019575490b5256ae244 as prod-cpu
|
||||
FROM python:3.11-slim-bookworm@sha256:7f49f147e57a65a5ca731203ed350ac5c88fa54aeb942924dd7057fe34a18e79 as prod-cpu
|
||||
|
||||
FROM prod-cpu as prod-openvino
|
||||
|
||||
|
||||
@@ -65,7 +65,7 @@ class Ann(metaclass=_Singleton):
|
||||
self.input_shapes: dict[int, tuple[tuple[int], ...]] = {}
|
||||
self.ann: int | None = None
|
||||
self.new()
|
||||
|
||||
|
||||
if self.tuning_file is not None:
|
||||
# make sure tuning file exists (without clearing contents)
|
||||
# once filled, the tuning file reduces the cost/time of the first
|
||||
@@ -105,7 +105,7 @@ class Ann(metaclass=_Singleton):
|
||||
raise ValueError("model_path must be a file with extension .armnn, .tflite or .onnx")
|
||||
if not exists(model_path):
|
||||
raise ValueError("model_path must point to an existing file!")
|
||||
|
||||
|
||||
save_cached_network = False
|
||||
if cached_network_path is not None and not exists(cached_network_path):
|
||||
save_cached_network = True
|
||||
|
||||
@@ -2,53 +2,64 @@ from app.config import clean_name
|
||||
from app.schemas import ModelSource
|
||||
|
||||
_OPENCLIP_MODELS = {
|
||||
"RN50__openai",
|
||||
"RN50__yfcc15m",
|
||||
"RN50__cc12m",
|
||||
"RN101__openai",
|
||||
"RN101__yfcc15m",
|
||||
"RN50x4__openai",
|
||||
"RN50__cc12m",
|
||||
"RN50__openai",
|
||||
"RN50__yfcc15m",
|
||||
"RN50x16__openai",
|
||||
"RN50x4__openai",
|
||||
"RN50x64__openai",
|
||||
"ViT-B-32__openai",
|
||||
"ViT-B-16-SigLIP-256__webli",
|
||||
"ViT-B-16-SigLIP-384__webli",
|
||||
"ViT-B-16-SigLIP-512__webli",
|
||||
"ViT-B-16-SigLIP-i18n-256__webli",
|
||||
"ViT-B-16-SigLIP__webli",
|
||||
"ViT-B-16-plus-240__laion400m_e31",
|
||||
"ViT-B-16-plus-240__laion400m_e32",
|
||||
"ViT-B-16__laion400m_e31",
|
||||
"ViT-B-16__laion400m_e32",
|
||||
"ViT-B-16__openai",
|
||||
"ViT-B-32__laion2b-s34b-b79k",
|
||||
"ViT-B-32__laion2b_e16",
|
||||
"ViT-B-32__laion400m_e31",
|
||||
"ViT-B-32__laion400m_e32",
|
||||
"ViT-B-32__laion2b-s34b-b79k",
|
||||
"ViT-B-16__openai",
|
||||
"ViT-B-16__laion400m_e31",
|
||||
"ViT-B-16__laion400m_e32",
|
||||
"ViT-B-16-plus-240__laion400m_e31",
|
||||
"ViT-B-16-plus-240__laion400m_e32",
|
||||
"ViT-L-14__openai",
|
||||
"ViT-B-32__openai",
|
||||
"ViT-H-14-378-quickgelu__dfn5b",
|
||||
"ViT-H-14-quickgelu__dfn5b",
|
||||
"ViT-H-14__laion2b-s32b-b79k",
|
||||
"ViT-L-14-336__openai",
|
||||
"ViT-L-14-quickgelu__dfn2b",
|
||||
"ViT-L-14__laion2b-s32b-b82k",
|
||||
"ViT-L-14__laion400m_e31",
|
||||
"ViT-L-14__laion400m_e32",
|
||||
"ViT-L-14__laion2b-s32b-b82k",
|
||||
"ViT-L-14-336__openai",
|
||||
"ViT-H-14__laion2b-s32b-b79k",
|
||||
"ViT-L-14__openai",
|
||||
"ViT-L-16-SigLIP-256__webli",
|
||||
"ViT-L-16-SigLIP-384__webli",
|
||||
"ViT-SO400M-14-SigLIP-384__webli",
|
||||
"ViT-g-14__laion2b-s12b-b42k",
|
||||
"ViT-L-14-quickgelu__dfn2b",
|
||||
"ViT-H-14-quickgelu__dfn5b",
|
||||
"ViT-H-14-378-quickgelu__dfn5b",
|
||||
"XLM-Roberta-Base-ViT-B-32__laion5b_s13b_b90k",
|
||||
"XLM-Roberta-Large-ViT-H-14__frozen_laion5b_s13b_b90k",
|
||||
"nllb-clip-base-siglip__mrl",
|
||||
"nllb-clip-base-siglip__v1",
|
||||
"nllb-clip-large-siglip__mrl",
|
||||
"nllb-clip-large-siglip__v1",
|
||||
}
|
||||
|
||||
|
||||
_MCLIP_MODELS = {
|
||||
"LABSE-Vit-L-14",
|
||||
"XLM-Roberta-Large-Vit-B-32",
|
||||
"XLM-Roberta-Large-Vit-B-16Plus",
|
||||
"XLM-Roberta-Large-Vit-B-32",
|
||||
"XLM-Roberta-Large-Vit-L-14",
|
||||
}
|
||||
|
||||
|
||||
_INSIGHTFACE_MODELS = {
|
||||
"antelopev2",
|
||||
"buffalo_l",
|
||||
"buffalo_m",
|
||||
"buffalo_s",
|
||||
"buffalo_m",
|
||||
"buffalo_l",
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
FROM mambaorg/micromamba:bookworm-slim@sha256:94d6837f023c0fc0bb68782dd2a984ff7fe0e21ea7e533056c9b8ca060e31de2 as builder
|
||||
FROM mambaorg/micromamba:bookworm-slim@sha256:eb744eed8e9308edaea942ddd92ad8da8a9b904ca0796fa240b72de51ce0d353 as builder
|
||||
|
||||
ENV TRANSFORMERS_CACHE=/cache \
|
||||
PYTHONDONTWRITEBYTECODE=1 \
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -2,7 +2,7 @@ name: base
|
||||
channels:
|
||||
- conda-forge
|
||||
- nvidia
|
||||
- pytorch-nightly
|
||||
- pytorch
|
||||
platforms:
|
||||
- linux-64
|
||||
dependencies:
|
||||
@@ -13,7 +13,7 @@ dependencies:
|
||||
- orjson==3.*
|
||||
- pip
|
||||
- python==3.11.*
|
||||
- pytorch
|
||||
- pytorch>=2.3
|
||||
- rich==13.*
|
||||
- safetensors==0.*
|
||||
- setuptools==68.*
|
||||
@@ -21,5 +21,5 @@ dependencies:
|
||||
- transformers==4.*
|
||||
- pip:
|
||||
- multilingual-clip
|
||||
- onnx-simplifier
|
||||
- onnxsim
|
||||
category: main
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
import os
|
||||
import tempfile
|
||||
import warnings
|
||||
from pathlib import Path
|
||||
@@ -8,7 +9,6 @@ from transformers import AutoTokenizer
|
||||
|
||||
from .openclip import OpenCLIPModelConfig
|
||||
from .openclip import to_onnx as openclip_to_onnx
|
||||
from .optimize import optimize
|
||||
from .util import get_model_path
|
||||
|
||||
_MCLIP_TO_OPENCLIP = {
|
||||
@@ -23,18 +23,20 @@ def to_onnx(
|
||||
model_name: str,
|
||||
output_dir_visual: Path | str,
|
||||
output_dir_textual: Path | str,
|
||||
) -> None:
|
||||
) -> tuple[Path, Path]:
|
||||
textual_path = get_model_path(output_dir_textual)
|
||||
with tempfile.TemporaryDirectory() as tmpdir:
|
||||
model = MultilingualCLIP.from_pretrained(model_name, cache_dir=tmpdir)
|
||||
model = MultilingualCLIP.from_pretrained(model_name, cache_dir=os.environ.get("CACHE_DIR", tmpdir))
|
||||
AutoTokenizer.from_pretrained(model_name).save_pretrained(output_dir_textual)
|
||||
|
||||
model.eval()
|
||||
for param in model.parameters():
|
||||
param.requires_grad_(False)
|
||||
|
||||
export_text_encoder(model, textual_path)
|
||||
openclip_to_onnx(_MCLIP_TO_OPENCLIP[model_name], output_dir_visual)
|
||||
optimize(textual_path)
|
||||
visual_path, _ = openclip_to_onnx(_MCLIP_TO_OPENCLIP[model_name], output_dir_visual)
|
||||
assert visual_path is not None, "Visual model export failed"
|
||||
return visual_path, textual_path
|
||||
|
||||
|
||||
def export_text_encoder(model: MultilingualCLIP, output_path: Path | str) -> None:
|
||||
@@ -58,10 +60,10 @@ def export_text_encoder(model: MultilingualCLIP, output_path: Path | str) -> Non
|
||||
args,
|
||||
output_path.as_posix(),
|
||||
input_names=["input_ids", "attention_mask"],
|
||||
output_names=["text_embedding"],
|
||||
output_names=["embedding"],
|
||||
opset_version=17,
|
||||
dynamic_axes={
|
||||
"input_ids": {0: "batch_size", 1: "sequence_length"},
|
||||
"attention_mask": {0: "batch_size", 1: "sequence_length"},
|
||||
},
|
||||
# dynamic_axes={
|
||||
# "input_ids": {0: "batch_size", 1: "sequence_length"},
|
||||
# "attention_mask": {0: "batch_size", 1: "sequence_length"},
|
||||
# },
|
||||
)
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
import os
|
||||
import tempfile
|
||||
import warnings
|
||||
from dataclasses import dataclass, field
|
||||
@@ -7,7 +8,6 @@ import open_clip
|
||||
import torch
|
||||
from transformers import AutoTokenizer
|
||||
|
||||
from .optimize import optimize
|
||||
from .util import get_model_path, save_config
|
||||
|
||||
|
||||
@@ -23,25 +23,28 @@ class OpenCLIPModelConfig:
|
||||
if open_clip_cfg is None:
|
||||
raise ValueError(f"Unknown model {self.name}")
|
||||
self.image_size = open_clip_cfg["vision_cfg"]["image_size"]
|
||||
self.sequence_length = open_clip_cfg["text_cfg"]["context_length"]
|
||||
self.sequence_length = open_clip_cfg["text_cfg"].get("context_length", 77)
|
||||
|
||||
|
||||
def to_onnx(
|
||||
model_cfg: OpenCLIPModelConfig,
|
||||
output_dir_visual: Path | str | None = None,
|
||||
output_dir_textual: Path | str | None = None,
|
||||
) -> None:
|
||||
) -> tuple[Path | None, Path | None]:
|
||||
visual_path = None
|
||||
textual_path = None
|
||||
with tempfile.TemporaryDirectory() as tmpdir:
|
||||
model = open_clip.create_model(
|
||||
model_cfg.name,
|
||||
pretrained=model_cfg.pretrained,
|
||||
jit=False,
|
||||
cache_dir=tmpdir,
|
||||
cache_dir=os.environ.get("CACHE_DIR", tmpdir),
|
||||
require_pretrained=True,
|
||||
)
|
||||
|
||||
text_vision_cfg = open_clip.get_model_config(model_cfg.name)
|
||||
|
||||
model.eval()
|
||||
for param in model.parameters():
|
||||
param.requires_grad_(False)
|
||||
|
||||
@@ -53,8 +56,6 @@ def to_onnx(
|
||||
save_config(text_vision_cfg, output_dir_visual.parent / "config.json")
|
||||
export_image_encoder(model, model_cfg, visual_path)
|
||||
|
||||
optimize(visual_path)
|
||||
|
||||
if output_dir_textual is not None:
|
||||
output_dir_textual = Path(output_dir_textual)
|
||||
textual_path = get_model_path(output_dir_textual)
|
||||
@@ -62,7 +63,7 @@ def to_onnx(
|
||||
tokenizer_name = text_vision_cfg["text_cfg"].get("hf_tokenizer_name", "openai/clip-vit-base-patch32")
|
||||
AutoTokenizer.from_pretrained(tokenizer_name).save_pretrained(output_dir_textual)
|
||||
export_text_encoder(model, model_cfg, textual_path)
|
||||
optimize(textual_path)
|
||||
return visual_path, textual_path
|
||||
|
||||
|
||||
def export_image_encoder(model: open_clip.CLIP, model_cfg: OpenCLIPModelConfig, output_path: Path | str) -> None:
|
||||
@@ -83,9 +84,9 @@ def export_image_encoder(model: open_clip.CLIP, model_cfg: OpenCLIPModelConfig,
|
||||
args,
|
||||
output_path.as_posix(),
|
||||
input_names=["image"],
|
||||
output_names=["image_embedding"],
|
||||
output_names=["embedding"],
|
||||
opset_version=17,
|
||||
dynamic_axes={"image": {0: "batch_size"}},
|
||||
# dynamic_axes={"image": {0: "batch_size"}},
|
||||
)
|
||||
|
||||
|
||||
@@ -107,7 +108,7 @@ def export_text_encoder(model: open_clip.CLIP, model_cfg: OpenCLIPModelConfig, o
|
||||
args,
|
||||
output_path.as_posix(),
|
||||
input_names=["text"],
|
||||
output_names=["text_embedding"],
|
||||
output_names=["embedding"],
|
||||
opset_version=17,
|
||||
dynamic_axes={"text": {0: "batch_size"}},
|
||||
# dynamic_axes={"text": {0: "batch_size"}},
|
||||
)
|
||||
|
||||
@@ -5,13 +5,26 @@ import onnxruntime as ort
|
||||
import onnxsim
|
||||
|
||||
|
||||
def save_onnx(model: onnx.ModelProto, output_path: Path | str) -> None:
|
||||
try:
|
||||
onnx.save(model, output_path)
|
||||
except ValueError as e:
|
||||
if "The proto size is larger than the 2 GB limit." in str(e):
|
||||
onnx.save(model, output_path, save_as_external_data=True, size_threshold=1_000_000)
|
||||
else:
|
||||
raise e
|
||||
|
||||
|
||||
def optimize_onnxsim(model_path: Path | str, output_path: Path | str) -> None:
|
||||
model_path = Path(model_path)
|
||||
output_path = Path(output_path)
|
||||
model = onnx.load(model_path.as_posix())
|
||||
model, check = onnxsim.simplify(model, skip_shape_inference=True)
|
||||
model, check = onnxsim.simplify(model)
|
||||
assert check, "Simplified ONNX model could not be validated"
|
||||
onnx.save(model, output_path.as_posix())
|
||||
for file in model_path.parent.iterdir():
|
||||
if file.name.startswith("Constant") or "onnx" in file.name or file.suffix == ".weight":
|
||||
file.unlink()
|
||||
save_onnx(model, output_path)
|
||||
|
||||
|
||||
def optimize_ort(
|
||||
@@ -33,6 +46,4 @@ def optimize(model_path: Path | str) -> None:
|
||||
model_path = Path(model_path)
|
||||
|
||||
optimize_ort(model_path, model_path)
|
||||
# onnxsim serializes large models as a blob, which uses much more memory when loading the model at runtime
|
||||
if not any(file.name.startswith("Constant") for file in model_path.parent.iterdir()):
|
||||
optimize_onnxsim(model_path, model_path)
|
||||
optimize_onnxsim(model_path, model_path)
|
||||
|
||||
@@ -3,74 +3,111 @@ import os
|
||||
from pathlib import Path
|
||||
from tempfile import TemporaryDirectory
|
||||
|
||||
from huggingface_hub import create_repo, login, upload_folder
|
||||
import torch
|
||||
from huggingface_hub import create_repo, upload_folder
|
||||
from models import mclip, openclip
|
||||
from models.optimize import optimize
|
||||
from rich.progress import Progress
|
||||
|
||||
models = [
|
||||
"RN50::openai",
|
||||
"RN50::yfcc15m",
|
||||
"RN50::cc12m",
|
||||
"M-CLIP/LABSE-Vit-L-14",
|
||||
"M-CLIP/XLM-Roberta-Large-Vit-B-16Plus",
|
||||
"M-CLIP/XLM-Roberta-Large-Vit-B-32",
|
||||
"M-CLIP/XLM-Roberta-Large-Vit-L-14",
|
||||
"RN101::openai",
|
||||
"RN101::yfcc15m",
|
||||
"RN50x4::openai",
|
||||
"RN50::cc12m",
|
||||
"RN50::openai",
|
||||
"RN50::yfcc15m",
|
||||
"RN50x16::openai",
|
||||
"RN50x4::openai",
|
||||
"RN50x64::openai",
|
||||
"ViT-B-32::openai",
|
||||
"ViT-B-16-SigLIP-256::webli",
|
||||
"ViT-B-16-SigLIP-384::webli",
|
||||
"ViT-B-16-SigLIP-512::webli",
|
||||
"ViT-B-16-SigLIP-i18n-256::webli",
|
||||
"ViT-B-16-SigLIP::webli",
|
||||
"ViT-B-16-plus-240::laion400m_e31",
|
||||
"ViT-B-16-plus-240::laion400m_e32",
|
||||
"ViT-B-16::laion400m_e31",
|
||||
"ViT-B-16::laion400m_e32",
|
||||
"ViT-B-16::openai",
|
||||
"ViT-B-32::laion2b-s34b-b79k",
|
||||
"ViT-B-32::laion2b_e16",
|
||||
"ViT-B-32::laion400m_e31",
|
||||
"ViT-B-32::laion400m_e32",
|
||||
"ViT-B-32::laion2b-s34b-b79k",
|
||||
"ViT-B-16::openai",
|
||||
"ViT-B-16::laion400m_e31",
|
||||
"ViT-B-16::laion400m_e32",
|
||||
"ViT-B-16-plus-240::laion400m_e31",
|
||||
"ViT-B-16-plus-240::laion400m_e32",
|
||||
"ViT-L-14::openai",
|
||||
"ViT-B-32::openai",
|
||||
"ViT-H-14-378-quickgelu::dfn5b",
|
||||
"ViT-H-14-quickgelu::dfn5b",
|
||||
"ViT-H-14::laion2b-s32b-b79k",
|
||||
"ViT-L-14-336::openai",
|
||||
"ViT-L-14-quickgelu::dfn2b",
|
||||
"ViT-L-14::laion2b-s32b-b82k",
|
||||
"ViT-L-14::laion400m_e31",
|
||||
"ViT-L-14::laion400m_e32",
|
||||
"ViT-L-14::laion2b-s32b-b82k",
|
||||
"ViT-L-14-336::openai",
|
||||
"ViT-H-14::laion2b-s32b-b79k",
|
||||
"ViT-L-14::openai",
|
||||
"ViT-L-16-SigLIP-256::webli",
|
||||
"ViT-L-16-SigLIP-384::webli",
|
||||
"ViT-SO400M-14-SigLIP-384::webli",
|
||||
"ViT-g-14::laion2b-s12b-b42k",
|
||||
"M-CLIP/LABSE-Vit-L-14",
|
||||
"M-CLIP/XLM-Roberta-Large-Vit-B-32",
|
||||
"M-CLIP/XLM-Roberta-Large-Vit-B-16Plus",
|
||||
"M-CLIP/XLM-Roberta-Large-Vit-L-14",
|
||||
"nllb-clip-base-siglip::mrl",
|
||||
"nllb-clip-base-siglip::v1",
|
||||
"nllb-clip-large-siglip::mrl",
|
||||
"nllb-clip-large-siglip::v1",
|
||||
"xlm-roberta-base-ViT-B-32::laion5b_s13b_b90k",
|
||||
"xlm-roberta-large-ViT-H-14::frozen_laion5b_s13b_b90k",
|
||||
]
|
||||
|
||||
login(token=os.environ["HF_AUTH_TOKEN"])
|
||||
# glob to delete old UUID blobs when reuploading models
|
||||
uuid_char = "[a-fA-F0-9]"
|
||||
uuid_glob = uuid_char * 8 + "-" + uuid_char * 4 + "-" + uuid_char * 4 + "-" + uuid_char * 4 + "-" + uuid_char * 12
|
||||
|
||||
# remote repo files to be deleted before uploading
|
||||
# deletion is in the same commit as the upload, so it's atomic
|
||||
delete_patterns = ["**/*onnx*", "**/Constant*", "**/*.weight", "**/*.bias", f"**/{uuid_glob}"]
|
||||
|
||||
with Progress() as progress:
|
||||
task1 = progress.add_task("[green]Exporting models...", total=len(models))
|
||||
task2 = progress.add_task("[yellow]Uploading models...", total=len(models))
|
||||
|
||||
task = progress.add_task("[green]Exporting models...", total=len(models))
|
||||
token = os.environ.get("HF_AUTH_TOKEN")
|
||||
torch.backends.mha.set_fastpath_enabled(False)
|
||||
with TemporaryDirectory() as tmp:
|
||||
tmpdir = Path(tmp)
|
||||
for model in models:
|
||||
model_name = model.split("/")[-1].replace("::", "__")
|
||||
hf_model_name = model_name.replace("xlm-roberta-large", "XLM-Roberta-Large")
|
||||
hf_model_name = model_name.replace("xlm-roberta-base", "XLM-Roberta-Base")
|
||||
config_path = tmpdir / model_name / "config.json"
|
||||
|
||||
def upload() -> None:
|
||||
progress.update(task2, description=f"[yellow]Uploading {model_name}")
|
||||
repo_id = f"immich-app/{model_name}"
|
||||
|
||||
create_repo(repo_id, exist_ok=True)
|
||||
upload_folder(repo_id=repo_id, folder_path=tmpdir / model_name)
|
||||
progress.update(task2, advance=1)
|
||||
|
||||
def export() -> None:
|
||||
progress.update(task1, description=f"[green]Exporting {model_name}")
|
||||
visual_dir = tmpdir / model_name / "visual"
|
||||
textual_dir = tmpdir / model_name / "textual"
|
||||
progress.update(task, description=f"[green]Exporting {hf_model_name}")
|
||||
visual_dir = tmpdir / hf_model_name / "visual"
|
||||
textual_dir = tmpdir / hf_model_name / "textual"
|
||||
if model.startswith("M-CLIP"):
|
||||
mclip.to_onnx(model, visual_dir, textual_dir)
|
||||
visual_path, textual_path = mclip.to_onnx(model, visual_dir, textual_dir)
|
||||
else:
|
||||
name, _, pretrained = model_name.partition("__")
|
||||
openclip.to_onnx(openclip.OpenCLIPModelConfig(name, pretrained), visual_dir, textual_dir)
|
||||
config = openclip.OpenCLIPModelConfig(name, pretrained)
|
||||
visual_path, textual_path = openclip.to_onnx(config, visual_dir, textual_dir)
|
||||
progress.update(task, description=f"[green]Optimizing {hf_model_name} (visual)")
|
||||
optimize(visual_path)
|
||||
progress.update(task, description=f"[green]Optimizing {hf_model_name} (textual)")
|
||||
optimize(textual_path)
|
||||
|
||||
progress.update(task1, advance=1)
|
||||
gc.collect()
|
||||
|
||||
def upload() -> None:
|
||||
progress.update(task, description=f"[yellow]Uploading {hf_model_name}")
|
||||
repo_id = f"immich-app/{hf_model_name}"
|
||||
|
||||
create_repo(repo_id, exist_ok=True)
|
||||
upload_folder(
|
||||
repo_id=repo_id,
|
||||
folder_path=tmpdir / hf_model_name,
|
||||
delete_patterns=delete_patterns,
|
||||
token=token,
|
||||
)
|
||||
|
||||
export()
|
||||
upload()
|
||||
if token is not None:
|
||||
upload()
|
||||
progress.update(task, advance=1)
|
||||
|
||||
58
machine-learning/poetry.lock
generated
58
machine-learning/poetry.lock
generated
@@ -1236,13 +1236,13 @@ socks = ["socksio (==1.*)"]
|
||||
|
||||
[[package]]
|
||||
name = "huggingface-hub"
|
||||
version = "0.24.0"
|
||||
version = "0.24.5"
|
||||
description = "Client library to download and publish models, datasets and other repos on the huggingface.co hub"
|
||||
optional = false
|
||||
python-versions = ">=3.8.0"
|
||||
files = [
|
||||
{file = "huggingface_hub-0.24.0-py3-none-any.whl", hash = "sha256:7ad92edefb93d8145c061f6df8d99df2ff85f8379ba5fac8a95aca0642afa5d7"},
|
||||
{file = "huggingface_hub-0.24.0.tar.gz", hash = "sha256:6c7092736b577d89d57b3cdfea026f1b0dc2234ae783fa0d59caf1bf7d52dfa7"},
|
||||
{file = "huggingface_hub-0.24.5-py3-none-any.whl", hash = "sha256:d93fb63b1f1a919a22ce91a14518974e81fc4610bf344dfe7572343ce8d3aced"},
|
||||
{file = "huggingface_hub-0.24.5.tar.gz", hash = "sha256:7b45d6744dd53ce9cbf9880957de00e9d10a9ae837f1c9b7255fc8fa4e8264f3"},
|
||||
]
|
||||
|
||||
[package.dependencies]
|
||||
@@ -2466,13 +2466,13 @@ files = [
|
||||
|
||||
[[package]]
|
||||
name = "pytest"
|
||||
version = "8.2.2"
|
||||
version = "8.3.2"
|
||||
description = "pytest: simple powerful testing with Python"
|
||||
optional = false
|
||||
python-versions = ">=3.8"
|
||||
files = [
|
||||
{file = "pytest-8.2.2-py3-none-any.whl", hash = "sha256:c434598117762e2bd304e526244f67bf66bbd7b5d6cf22138be51ff661980343"},
|
||||
{file = "pytest-8.2.2.tar.gz", hash = "sha256:de4bb8104e201939ccdc688b27a89a7be2079b22e2bd2b07f806b6ba71117977"},
|
||||
{file = "pytest-8.3.2-py3-none-any.whl", hash = "sha256:4ba08f9ae7dcf84ded419494d229b48d0903ea6407b030eaec46df5e6a73bba5"},
|
||||
{file = "pytest-8.3.2.tar.gz", hash = "sha256:c132345d12ce551242c87269de812483f5bcc87cdbb4722e48487ba194f9fdce"},
|
||||
]
|
||||
|
||||
[package.dependencies]
|
||||
@@ -2480,7 +2480,7 @@ colorama = {version = "*", markers = "sys_platform == \"win32\""}
|
||||
exceptiongroup = {version = ">=1.0.0rc8", markers = "python_version < \"3.11\""}
|
||||
iniconfig = "*"
|
||||
packaging = "*"
|
||||
pluggy = ">=1.5,<2.0"
|
||||
pluggy = ">=1.5,<2"
|
||||
tomli = {version = ">=1", markers = "python_version < \"3.11\""}
|
||||
|
||||
[package.extras]
|
||||
@@ -2827,29 +2827,29 @@ jupyter = ["ipywidgets (>=7.5.1,<9)"]
|
||||
|
||||
[[package]]
|
||||
name = "ruff"
|
||||
version = "0.5.4"
|
||||
version = "0.5.6"
|
||||
description = "An extremely fast Python linter and code formatter, written in Rust."
|
||||
optional = false
|
||||
python-versions = ">=3.7"
|
||||
files = [
|
||||
{file = "ruff-0.5.4-py3-none-linux_armv6l.whl", hash = "sha256:82acef724fc639699b4d3177ed5cc14c2a5aacd92edd578a9e846d5b5ec18ddf"},
|
||||
{file = "ruff-0.5.4-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:da62e87637c8838b325e65beee485f71eb36202ce8e3cdbc24b9fcb8b99a37be"},
|
||||
{file = "ruff-0.5.4-py3-none-macosx_11_0_arm64.whl", hash = "sha256:e98ad088edfe2f3b85a925ee96da652028f093d6b9b56b76fc242d8abb8e2059"},
|
||||
{file = "ruff-0.5.4-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4c55efbecc3152d614cfe6c2247a3054cfe358cefbf794f8c79c8575456efe19"},
|
||||
{file = "ruff-0.5.4-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f9b85eaa1f653abd0a70603b8b7008d9e00c9fa1bbd0bf40dad3f0c0bdd06793"},
|
||||
{file = "ruff-0.5.4-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0cf497a47751be8c883059c4613ba2f50dd06ec672692de2811f039432875278"},
|
||||
{file = "ruff-0.5.4-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:09c14ed6a72af9ccc8d2e313d7acf7037f0faff43cde4b507e66f14e812e37f7"},
|
||||
{file = "ruff-0.5.4-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:628f6b8f97b8bad2490240aa84f3e68f390e13fabc9af5c0d3b96b485921cd60"},
|
||||
{file = "ruff-0.5.4-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3520a00c0563d7a7a7c324ad7e2cde2355733dafa9592c671fb2e9e3cd8194c1"},
|
||||
{file = "ruff-0.5.4-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:93789f14ca2244fb91ed481456f6d0bb8af1f75a330e133b67d08f06ad85b516"},
|
||||
{file = "ruff-0.5.4-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:029454e2824eafa25b9df46882f7f7844d36fd8ce51c1b7f6d97e2615a57bbcc"},
|
||||
{file = "ruff-0.5.4-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:9492320eed573a13a0bc09a2957f17aa733fff9ce5bf00e66e6d4a88ec33813f"},
|
||||
{file = "ruff-0.5.4-py3-none-musllinux_1_2_i686.whl", hash = "sha256:a6e1f62a92c645e2919b65c02e79d1f61e78a58eddaebca6c23659e7c7cb4ac7"},
|
||||
{file = "ruff-0.5.4-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:768fa9208df2bec4b2ce61dbc7c2ddd6b1be9fb48f1f8d3b78b3332c7d71c1ff"},
|
||||
{file = "ruff-0.5.4-py3-none-win32.whl", hash = "sha256:e1e7393e9c56128e870b233c82ceb42164966f25b30f68acbb24ed69ce9c3a4e"},
|
||||
{file = "ruff-0.5.4-py3-none-win_amd64.whl", hash = "sha256:58b54459221fd3f661a7329f177f091eb35cf7a603f01d9eb3eb11cc348d38c4"},
|
||||
{file = "ruff-0.5.4-py3-none-win_arm64.whl", hash = "sha256:bd53da65f1085fb5b307c38fd3c0829e76acf7b2a912d8d79cadcdb4875c1eb7"},
|
||||
{file = "ruff-0.5.4.tar.gz", hash = "sha256:2795726d5f71c4f4e70653273d1c23a8182f07dd8e48c12de5d867bfb7557eed"},
|
||||
{file = "ruff-0.5.6-py3-none-linux_armv6l.whl", hash = "sha256:a0ef5930799a05522985b9cec8290b185952f3fcd86c1772c3bdbd732667fdcd"},
|
||||
{file = "ruff-0.5.6-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:b652dc14f6ef5d1552821e006f747802cc32d98d5509349e168f6bf0ee9f8f42"},
|
||||
{file = "ruff-0.5.6-py3-none-macosx_11_0_arm64.whl", hash = "sha256:80521b88d26a45e871f31e4b88938fd87db7011bb961d8afd2664982dfc3641a"},
|
||||
{file = "ruff-0.5.6-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d9bc8f328a9f1309ae80e4d392836e7dbc77303b38ed4a7112699e63d3b066ab"},
|
||||
{file = "ruff-0.5.6-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4d394940f61f7720ad371ddedf14722ee1d6250fd8d020f5ea5a86e7be217daf"},
|
||||
{file = "ruff-0.5.6-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:111a99cdb02f69ddb2571e2756e017a1496c2c3a2aeefe7b988ddab38b416d36"},
|
||||
{file = "ruff-0.5.6-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:e395daba77a79f6dc0d07311f94cc0560375ca20c06f354c7c99af3bf4560c5d"},
|
||||
{file = "ruff-0.5.6-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c476acb43c3c51e3c614a2e878ee1589655fa02dab19fe2db0423a06d6a5b1b6"},
|
||||
{file = "ruff-0.5.6-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e2ff8003f5252fd68425fd53d27c1f08b201d7ed714bb31a55c9ac1d4c13e2eb"},
|
||||
{file = "ruff-0.5.6-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c94e084ba3eaa80c2172918c2ca2eb2230c3f15925f4ed8b6297260c6ef179ad"},
|
||||
{file = "ruff-0.5.6-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:1f77c1c3aa0669fb230b06fb24ffa3e879391a3ba3f15e3d633a752da5a3e670"},
|
||||
{file = "ruff-0.5.6-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:f908148c93c02873210a52cad75a6eda856b2cbb72250370ce3afef6fb99b1ed"},
|
||||
{file = "ruff-0.5.6-py3-none-musllinux_1_2_i686.whl", hash = "sha256:563a7ae61ad284187d3071d9041c08019975693ff655438d8d4be26e492760bd"},
|
||||
{file = "ruff-0.5.6-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:94fe60869bfbf0521e04fd62b74cbca21cbc5beb67cbb75ab33fe8c174f54414"},
|
||||
{file = "ruff-0.5.6-py3-none-win32.whl", hash = "sha256:e6a584c1de6f8591c2570e171cc7ce482bb983d49c70ddf014393cd39e9dfaed"},
|
||||
{file = "ruff-0.5.6-py3-none-win_amd64.whl", hash = "sha256:d7fe7dccb1a89dc66785d7aa0ac283b2269712d8ed19c63af908fdccca5ccc1a"},
|
||||
{file = "ruff-0.5.6-py3-none-win_arm64.whl", hash = "sha256:57c6c0dd997b31b536bff49b9eee5ed3194d60605a4427f735eeb1f9c1b8d264"},
|
||||
{file = "ruff-0.5.6.tar.gz", hash = "sha256:07c9e3c2a8e1fe377dd460371c3462671a728c981c3205a5217291422209f642"},
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@@ -3263,13 +3263,13 @@ zstd = ["zstandard (>=0.18.0)"]
|
||||
|
||||
[[package]]
|
||||
name = "uvicorn"
|
||||
version = "0.30.1"
|
||||
version = "0.30.5"
|
||||
description = "The lightning-fast ASGI server."
|
||||
optional = false
|
||||
python-versions = ">=3.8"
|
||||
files = [
|
||||
{file = "uvicorn-0.30.1-py3-none-any.whl", hash = "sha256:cd17daa7f3b9d7a24de3617820e634d0933b69eed8e33a516071174427238c81"},
|
||||
{file = "uvicorn-0.30.1.tar.gz", hash = "sha256:d46cd8e0fd80240baffbcd9ec1012a712938754afcf81bce56c024c1656aece8"},
|
||||
{file = "uvicorn-0.30.5-py3-none-any.whl", hash = "sha256:b2d86de274726e9878188fa07576c9ceeff90a839e2b6e25c917fe05f5a6c835"},
|
||||
{file = "uvicorn-0.30.5.tar.gz", hash = "sha256:ac6fdbd4425c5fd17a9fe39daf4d4d075da6fdc80f653e5894cdc2fd98752bee"},
|
||||
]
|
||||
|
||||
[package.dependencies]
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
[tool.poetry]
|
||||
name = "machine-learning"
|
||||
version = "1.110.0"
|
||||
version = "1.111.0"
|
||||
description = ""
|
||||
authors = ["Hau Tran <alex.tran1502@gmail.com>"]
|
||||
readme = "README.md"
|
||||
|
||||
2
mobile/.vscode/settings.json
vendored
2
mobile/.vscode/settings.json
vendored
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"dart.flutterSdkPath": ".fvm/versions/3.22.1",
|
||||
"dart.flutterSdkPath": ".fvm/versions/3.22.3",
|
||||
"search.exclude": {
|
||||
"**/.fvm": true
|
||||
},
|
||||
|
||||
@@ -35,8 +35,8 @@ platform :android do
|
||||
task: 'bundle',
|
||||
build_type: 'Release',
|
||||
properties: {
|
||||
"android.injected.version.code" => 151,
|
||||
"android.injected.version.name" => "1.110.0",
|
||||
"android.injected.version.code" => 152,
|
||||
"android.injected.version.name" => "1.111.0",
|
||||
}
|
||||
)
|
||||
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')
|
||||
|
||||
@@ -3,6 +3,8 @@
|
||||
"action_common_cancel": "يلغي",
|
||||
"action_common_clear": "مسح",
|
||||
"action_common_confirm": "تأكيد",
|
||||
"action_common_save": "Save",
|
||||
"action_common_select": "Select",
|
||||
"action_common_update": "تحديث",
|
||||
"add_to_album_bottom_sheet_added": "تمت الاضافة{album}",
|
||||
"add_to_album_bottom_sheet_already_exists": "موجودة مسبقا {album}",
|
||||
@@ -141,11 +143,21 @@
|
||||
"change_password_form_new_password": "كلمة المرور الجديدة",
|
||||
"change_password_form_password_mismatch": "كلمة المرور غير مطابقة",
|
||||
"change_password_form_reenter_new_password": "أعد إدخال كلمة مرور جديدة",
|
||||
"client_cert_dialog_msg_confirm": "OK",
|
||||
"client_cert_enter_password": "Enter Password",
|
||||
"client_cert_import": "Import",
|
||||
"client_cert_import_success_msg": "Client certificate is imported",
|
||||
"client_cert_invalid_msg": "Invalid certificate file or wrong password",
|
||||
"client_cert_remove": "Remove",
|
||||
"client_cert_remove_msg": "Client certificate is removed",
|
||||
"client_cert_subtitle": "Supports PKCS12 (.p12, .pfx) format only. Certificate Import/Remove is available only before login",
|
||||
"client_cert_title": "SSL Client Certificate",
|
||||
"common_add_to_album": "أضف إلى الألبوم",
|
||||
"common_change_password": "تغيير كلمة المرور",
|
||||
"common_create_new_album": "إنشاء ألبوم جديد",
|
||||
"common_server_error": "يرجى التحقق من اتصال الشبكة الخاص بك ، والتأكد من أن الجهاز قابل للوصول وإصدارات التطبيق/الجهاز متوافقة.",
|
||||
"common_shared": "مشترك",
|
||||
"contextual_search": "Sunrise on the beach",
|
||||
"control_bottom_app_bar_add_to_album": "أضف إلى الألبوم",
|
||||
"control_bottom_app_bar_album_info": "{} items",
|
||||
"control_bottom_app_bar_album_info_shared": "{} items · Shared",
|
||||
@@ -154,6 +166,7 @@
|
||||
"control_bottom_app_bar_delete": "يمسح",
|
||||
"control_bottom_app_bar_delete_from_immich": " حذف منال تطبيق",
|
||||
"control_bottom_app_bar_delete_from_local": "حذف من الجهاز",
|
||||
"control_bottom_app_bar_edit": "Edit",
|
||||
"control_bottom_app_bar_edit_location": "تحديد الوجهة",
|
||||
"control_bottom_app_bar_edit_time": "تحرير التاريخ والوقت",
|
||||
"control_bottom_app_bar_favorite": "مفضل",
|
||||
@@ -203,6 +216,7 @@
|
||||
"experimental_settings_title": "تجريبي",
|
||||
"favorites_page_no_favorites": "لم يتم العثور على الأصول المفضلة",
|
||||
"favorites_page_title": "المفضلة",
|
||||
"filename_search": "File name or extension",
|
||||
"haptic_feedback_switch": "تمكين ردود الفعل اللمسية",
|
||||
"haptic_feedback_title": "ردود فعل لمسية",
|
||||
"header_settings_add_header_tip": "Add Header",
|
||||
@@ -230,6 +244,8 @@
|
||||
"image_viewer_page_state_provider_download_started": "بدأ التنزيل",
|
||||
"image_viewer_page_state_provider_download_success": "تم التنزيل بنجاح",
|
||||
"image_viewer_page_state_provider_share_error": "خطأ في المشاركة",
|
||||
"invalid_date": "Invalid date",
|
||||
"invalid_date_format": "Invalid date format",
|
||||
"library_page_albums": "ألبومات",
|
||||
"library_page_archive": "أرشيف",
|
||||
"library_page_device_albums": "ألبومات على الجهاز",
|
||||
@@ -311,6 +327,7 @@
|
||||
"multiselect_grid_edit_date_time_err_read_only": "لا يمكن تعديل تاريخ الأصول (المواد) للقراءة فقط، سوف يتخطى",
|
||||
"multiselect_grid_edit_gps_err_read_only": "لا يمكن تعديل موقع الأصول (المواد) للقراءة فقط، سوف يتخطى",
|
||||
"no_assets_to_show": "لا توجد أصول لعرضها",
|
||||
"no_name": "No name",
|
||||
"notification_permission_dialog_cancel": "يلغي",
|
||||
"notification_permission_dialog_content": "لتمكين الإخطارات ، انتقل إلى الإعدادات و اختار السماح.",
|
||||
"notification_permission_dialog_settings": "إعدادات",
|
||||
@@ -354,17 +371,30 @@
|
||||
"scaffold_body_error_occurred": "حدث خطأ",
|
||||
"search_bar_hint": "ابحث عن صورك",
|
||||
"search_filter_apply": "اختار الفلتر ",
|
||||
"search_filter_camera": "Camera",
|
||||
"search_filter_camera_make": "صنع",
|
||||
"search_filter_camera_model": "نموذج",
|
||||
"search_filter_camera_title": "Select camera type",
|
||||
"search_filter_date": "Date",
|
||||
"search_filter_date_interval": "{start} to {end}",
|
||||
"search_filter_date_title": "Select a date range",
|
||||
"search_filter_display_option_archive": "أرشيف",
|
||||
"search_filter_display_option_favorite": "مفضل",
|
||||
"search_filter_display_option_not_in_album": "ليس في الألبوم",
|
||||
"search_filter_display_options": "Display Options",
|
||||
"search_filter_display_options_title": "Display options",
|
||||
"search_filter_location": "Location",
|
||||
"search_filter_location_city": "مدينة",
|
||||
"search_filter_location_country": "دولة",
|
||||
"search_filter_location_state": "ولاية",
|
||||
"search_filter_location_title": "Select location",
|
||||
"search_filter_media_type": "Media Type",
|
||||
"search_filter_media_type_all": "الجميع",
|
||||
"search_filter_media_type_image": "صورة",
|
||||
"search_filter_media_type_title": "Select media type",
|
||||
"search_filter_media_type_video": "شريط فيديو",
|
||||
"search_filter_people": "People",
|
||||
"search_filter_people_title": "Select people",
|
||||
"search_page_categories": "فئات",
|
||||
"search_page_favorites": "المفضلة",
|
||||
"search_page_motion_photos": "الصور المتحركه",
|
||||
|
||||
@@ -3,6 +3,8 @@
|
||||
"action_common_cancel": "Zrušit",
|
||||
"action_common_clear": "Vyčistit",
|
||||
"action_common_confirm": "Potvrdit",
|
||||
"action_common_save": "Uložit",
|
||||
"action_common_select": "Vybrat",
|
||||
"action_common_update": "Aktualizovat",
|
||||
"add_to_album_bottom_sheet_added": "Přidáno do {album}",
|
||||
"add_to_album_bottom_sheet_already_exists": "Je již v {album}",
|
||||
@@ -141,11 +143,21 @@
|
||||
"change_password_form_new_password": "Nové heslo",
|
||||
"change_password_form_password_mismatch": "Hesla se neshodují",
|
||||
"change_password_form_reenter_new_password": "Znovu zadejte nové heslo",
|
||||
"client_cert_dialog_msg_confirm": "OK",
|
||||
"client_cert_enter_password": "Zadejte heslo",
|
||||
"client_cert_import": "Importovat",
|
||||
"client_cert_import_success_msg": "Klientský certifikát je importován",
|
||||
"client_cert_invalid_msg": "Neplatný soubor certifikátu nebo špatné heslo",
|
||||
"client_cert_remove": "Odstranit",
|
||||
"client_cert_remove_msg": "Klientský certifikát je odstraněn",
|
||||
"client_cert_subtitle": "Podpora pouze formátu PKCS12 (.p12, .pfx). Import/odstranění certifikátu je možné pouze před přihlášením",
|
||||
"client_cert_title": "Klientský SSL certifikát",
|
||||
"common_add_to_album": "Přidat do alba",
|
||||
"common_change_password": "Změnit heslo",
|
||||
"common_create_new_album": "Vytvořit nové album",
|
||||
"common_server_error": "Zkontrolujte připojení k internetu. Ujistěte se, že server je dostupný a aplikace/server jsou v kompatibilní verzi.",
|
||||
"common_shared": "Sdílené",
|
||||
"contextual_search": "Východ slunce na pláži",
|
||||
"control_bottom_app_bar_add_to_album": "Přidat do alba",
|
||||
"control_bottom_app_bar_album_info": "{} položek",
|
||||
"control_bottom_app_bar_album_info_shared": "{} položky – sdílené",
|
||||
@@ -154,6 +166,7 @@
|
||||
"control_bottom_app_bar_delete": "Smazat",
|
||||
"control_bottom_app_bar_delete_from_immich": "Smazat ze serveru Immich",
|
||||
"control_bottom_app_bar_delete_from_local": "Smazat ze zařízení",
|
||||
"control_bottom_app_bar_edit": "Upravit",
|
||||
"control_bottom_app_bar_edit_location": "Upravit polohu",
|
||||
"control_bottom_app_bar_edit_time": "Upravit datum a čas",
|
||||
"control_bottom_app_bar_favorite": "Oblíbené",
|
||||
@@ -203,6 +216,7 @@
|
||||
"experimental_settings_title": "Experimentální",
|
||||
"favorites_page_no_favorites": "Nebyla nalezena žádná oblíbená média",
|
||||
"favorites_page_title": "Oblíbené",
|
||||
"filename_search": "Název nebo přípona souboru",
|
||||
"haptic_feedback_switch": "Povolit dotykovou zpětnou vazbu",
|
||||
"haptic_feedback_title": "Dotyková zpětná vazba",
|
||||
"header_settings_add_header_tip": "Přidat hlavičku",
|
||||
@@ -230,6 +244,8 @@
|
||||
"image_viewer_page_state_provider_download_started": "Stahování zahájeno",
|
||||
"image_viewer_page_state_provider_download_success": "Stahování bylo úspěšné",
|
||||
"image_viewer_page_state_provider_share_error": "Chyba sdílení",
|
||||
"invalid_date": "Chybné datum",
|
||||
"invalid_date_format": "Chybný formát data",
|
||||
"library_page_albums": "Alba",
|
||||
"library_page_archive": "Archív",
|
||||
"library_page_device_albums": "Alba v zařízení",
|
||||
@@ -311,6 +327,7 @@
|
||||
"multiselect_grid_edit_date_time_err_read_only": "Nelze upravit datum položek pouze pro čtení, přeskakuji",
|
||||
"multiselect_grid_edit_gps_err_read_only": "Nelze upravit polohu položek pouze pro čtení, přeskakuji",
|
||||
"no_assets_to_show": "Žádné položky k zobrazení",
|
||||
"no_name": "Bez jména",
|
||||
"notification_permission_dialog_cancel": "Zrušit",
|
||||
"notification_permission_dialog_content": "Chcete-li povolit oznámení, přejděte do nastavení a vyberte možnost povolit.",
|
||||
"notification_permission_dialog_settings": "Nastavení",
|
||||
@@ -354,17 +371,30 @@
|
||||
"scaffold_body_error_occurred": "Došlo k chybě",
|
||||
"search_bar_hint": "Prohledejte své fotky",
|
||||
"search_filter_apply": "Použít filtr",
|
||||
"search_filter_camera": "Fotoaparát",
|
||||
"search_filter_camera_make": "Výrobce",
|
||||
"search_filter_camera_model": "Model",
|
||||
"search_filter_camera_title": "Výběr typu fotoaparátu",
|
||||
"search_filter_date": "Datum",
|
||||
"search_filter_date_interval": "{start} až {end}",
|
||||
"search_filter_date_title": "Výběr rozmezí dat",
|
||||
"search_filter_display_option_archive": "Archiv",
|
||||
"search_filter_display_option_favorite": "Oblíbené",
|
||||
"search_filter_display_option_not_in_album": "Není v albu",
|
||||
"search_filter_display_options": "Možnost zobrazení",
|
||||
"search_filter_display_options_title": "Možnosti zobrazení",
|
||||
"search_filter_location": "Poloha",
|
||||
"search_filter_location_city": "Město",
|
||||
"search_filter_location_country": "Země",
|
||||
"search_filter_location_state": "Stát",
|
||||
"search_filter_location_title": "Výběr polohy",
|
||||
"search_filter_media_type": "Typ média",
|
||||
"search_filter_media_type_all": "Všechny",
|
||||
"search_filter_media_type_image": "Obrázek",
|
||||
"search_filter_media_type_title": "Výběr typu média",
|
||||
"search_filter_media_type_video": "Video",
|
||||
"search_filter_people": "Lidé",
|
||||
"search_filter_people_title": "Výběr lidí",
|
||||
"search_page_categories": "Kategorie",
|
||||
"search_page_favorites": "Oblíbené",
|
||||
"search_page_motion_photos": "Pohyblivé fotky",
|
||||
|
||||
@@ -3,6 +3,8 @@
|
||||
"action_common_cancel": "Annuller",
|
||||
"action_common_clear": "Ryd",
|
||||
"action_common_confirm": "Bekræft",
|
||||
"action_common_save": "Save",
|
||||
"action_common_select": "Select",
|
||||
"action_common_update": "Opdater",
|
||||
"add_to_album_bottom_sheet_added": "Tilføjet til {album}",
|
||||
"add_to_album_bottom_sheet_already_exists": "Allerede i {album}",
|
||||
@@ -141,11 +143,21 @@
|
||||
"change_password_form_new_password": "Nyt kodeord",
|
||||
"change_password_form_password_mismatch": "Kodeord er ikke ens",
|
||||
"change_password_form_reenter_new_password": "Gentag nyt kodeord",
|
||||
"client_cert_dialog_msg_confirm": "OK",
|
||||
"client_cert_enter_password": "Enter Password",
|
||||
"client_cert_import": "Import",
|
||||
"client_cert_import_success_msg": "Client certificate is imported",
|
||||
"client_cert_invalid_msg": "Invalid certificate file or wrong password",
|
||||
"client_cert_remove": "Remove",
|
||||
"client_cert_remove_msg": "Client certificate is removed",
|
||||
"client_cert_subtitle": "Supports PKCS12 (.p12, .pfx) format only. Certificate Import/Remove is available only before login",
|
||||
"client_cert_title": "SSL Client Certificate",
|
||||
"common_add_to_album": "Tilføj til album",
|
||||
"common_change_password": "Skift kodeord",
|
||||
"common_create_new_album": "Opret et nyt album",
|
||||
"common_server_error": "Tjek din internetforbindelse, sørg for at serveren er tilgængelig og at app- og serversioner er kompatible.",
|
||||
"common_shared": "Delt",
|
||||
"contextual_search": "Sunrise on the beach",
|
||||
"control_bottom_app_bar_add_to_album": "Tilføj til album",
|
||||
"control_bottom_app_bar_album_info": "{} genstande",
|
||||
"control_bottom_app_bar_album_info_shared": "{} genstande • Delt",
|
||||
@@ -154,6 +166,7 @@
|
||||
"control_bottom_app_bar_delete": "Slet",
|
||||
"control_bottom_app_bar_delete_from_immich": "Slet fra Immich",
|
||||
"control_bottom_app_bar_delete_from_local": "Slet fra enhed",
|
||||
"control_bottom_app_bar_edit": "Edit",
|
||||
"control_bottom_app_bar_edit_location": "Rediger placering",
|
||||
"control_bottom_app_bar_edit_time": "Rediger tid og dato",
|
||||
"control_bottom_app_bar_favorite": "Favorit",
|
||||
@@ -203,6 +216,7 @@
|
||||
"experimental_settings_title": "Eksperimentelle",
|
||||
"favorites_page_no_favorites": "Ingen favoritter blev fundet",
|
||||
"favorites_page_title": "Favoritter",
|
||||
"filename_search": "File name or extension",
|
||||
"haptic_feedback_switch": "Slå haptisk feedback til",
|
||||
"haptic_feedback_title": "Haptisk feedback",
|
||||
"header_settings_add_header_tip": "Add Header",
|
||||
@@ -230,6 +244,8 @@
|
||||
"image_viewer_page_state_provider_download_started": "Download startet",
|
||||
"image_viewer_page_state_provider_download_success": "Download succesfuld",
|
||||
"image_viewer_page_state_provider_share_error": "Delingsfejl",
|
||||
"invalid_date": "Invalid date",
|
||||
"invalid_date_format": "Invalid date format",
|
||||
"library_page_albums": "Albummer",
|
||||
"library_page_archive": "Arkiv",
|
||||
"library_page_device_albums": "Albummer på enhed",
|
||||
@@ -311,6 +327,7 @@
|
||||
"multiselect_grid_edit_date_time_err_read_only": "Kan ikke redigere datoen på kun læselige elementer. Springer over",
|
||||
"multiselect_grid_edit_gps_err_read_only": "Kan ikke redigere lokation af kun læselige elementer. Springer over",
|
||||
"no_assets_to_show": "Ingen elementer at vise",
|
||||
"no_name": "No name",
|
||||
"notification_permission_dialog_cancel": "Annuller",
|
||||
"notification_permission_dialog_content": "Gå til indstillinger for at slå notifikationer til.",
|
||||
"notification_permission_dialog_settings": "Indstillinger",
|
||||
@@ -354,17 +371,30 @@
|
||||
"scaffold_body_error_occurred": "Der opstod en fejl",
|
||||
"search_bar_hint": "Søg i dine billeder",
|
||||
"search_filter_apply": "Tilføj filter",
|
||||
"search_filter_camera": "Camera",
|
||||
"search_filter_camera_make": "Producent",
|
||||
"search_filter_camera_model": "Model",
|
||||
"search_filter_camera_title": "Select camera type",
|
||||
"search_filter_date": "Date",
|
||||
"search_filter_date_interval": "{start} to {end}",
|
||||
"search_filter_date_title": "Select a date range",
|
||||
"search_filter_display_option_archive": "Arkiv",
|
||||
"search_filter_display_option_favorite": "Favorit",
|
||||
"search_filter_display_option_not_in_album": "Ikke i album",
|
||||
"search_filter_display_options": "Display Options",
|
||||
"search_filter_display_options_title": "Display options",
|
||||
"search_filter_location": "Location",
|
||||
"search_filter_location_city": "By",
|
||||
"search_filter_location_country": "Land",
|
||||
"search_filter_location_state": "Stat",
|
||||
"search_filter_location_title": "Select location",
|
||||
"search_filter_media_type": "Media Type",
|
||||
"search_filter_media_type_all": "Alle",
|
||||
"search_filter_media_type_image": "Billede",
|
||||
"search_filter_media_type_title": "Select media type",
|
||||
"search_filter_media_type_video": "Video",
|
||||
"search_filter_people": "People",
|
||||
"search_filter_people_title": "Select people",
|
||||
"search_page_categories": "Kategorier",
|
||||
"search_page_favorites": "Favoritter",
|
||||
"search_page_motion_photos": "Bevægelsesbilleder",
|
||||
|
||||
@@ -3,6 +3,8 @@
|
||||
"action_common_cancel": "Abbrechen",
|
||||
"action_common_clear": "Leeren",
|
||||
"action_common_confirm": "Bestätigen",
|
||||
"action_common_save": "Save",
|
||||
"action_common_select": "Select",
|
||||
"action_common_update": "Aktualisieren",
|
||||
"add_to_album_bottom_sheet_added": "Zu {album} hinzugefügt",
|
||||
"add_to_album_bottom_sheet_already_exists": "Bereits in {album}",
|
||||
@@ -141,11 +143,21 @@
|
||||
"change_password_form_new_password": "Neues Passwort",
|
||||
"change_password_form_password_mismatch": "Passwörter stimmen nicht überein",
|
||||
"change_password_form_reenter_new_password": "Passwort erneut eingeben",
|
||||
"client_cert_dialog_msg_confirm": "OK",
|
||||
"client_cert_enter_password": "Enter Password",
|
||||
"client_cert_import": "Import",
|
||||
"client_cert_import_success_msg": "Client certificate is imported",
|
||||
"client_cert_invalid_msg": "Invalid certificate file or wrong password",
|
||||
"client_cert_remove": "Remove",
|
||||
"client_cert_remove_msg": "Client certificate is removed",
|
||||
"client_cert_subtitle": "Supports PKCS12 (.p12, .pfx) format only. Certificate Import/Remove is available only before login",
|
||||
"client_cert_title": "SSL Client Certificate",
|
||||
"common_add_to_album": "Zu Album hinzufügen",
|
||||
"common_change_password": "Passwort ändern",
|
||||
"common_create_new_album": "Neues Album erstellen",
|
||||
"common_server_error": "Bitte überprüfe Deine Netzwerkverbindung und stelle sicher, dass die App und Server Versionen kompatibel sind.",
|
||||
"common_shared": "Geteilt",
|
||||
"contextual_search": "Sunrise on the beach",
|
||||
"control_bottom_app_bar_add_to_album": "Zu Album hinzufügen",
|
||||
"control_bottom_app_bar_album_info": "{} Elemente",
|
||||
"control_bottom_app_bar_album_info_shared": "{} Elemente · Geteilt",
|
||||
@@ -154,6 +166,7 @@
|
||||
"control_bottom_app_bar_delete": "Löschen",
|
||||
"control_bottom_app_bar_delete_from_immich": "Aus Immich löschen",
|
||||
"control_bottom_app_bar_delete_from_local": "Vom Gerät löschen",
|
||||
"control_bottom_app_bar_edit": "Edit",
|
||||
"control_bottom_app_bar_edit_location": "Ort bearbeiten",
|
||||
"control_bottom_app_bar_edit_time": "Datum und Uhrzeit bearbeiten",
|
||||
"control_bottom_app_bar_favorite": "Favorit",
|
||||
@@ -203,6 +216,7 @@
|
||||
"experimental_settings_title": "Experimentell",
|
||||
"favorites_page_no_favorites": "Keine favorisierten Inhalte gefunden",
|
||||
"favorites_page_title": "Favoriten",
|
||||
"filename_search": "File name or extension",
|
||||
"haptic_feedback_switch": "Haptisches Feedback aktivieren",
|
||||
"haptic_feedback_title": "Haptisches Feedback",
|
||||
"header_settings_add_header_tip": "Header hinzufügen",
|
||||
@@ -230,6 +244,8 @@
|
||||
"image_viewer_page_state_provider_download_started": "Download gestartet",
|
||||
"image_viewer_page_state_provider_download_success": "Erfolgreich heruntergeladen",
|
||||
"image_viewer_page_state_provider_share_error": "Fehler beim Teilen",
|
||||
"invalid_date": "Invalid date",
|
||||
"invalid_date_format": "Invalid date format",
|
||||
"library_page_albums": "Alben",
|
||||
"library_page_archive": "Archiv",
|
||||
"library_page_device_albums": "Alben auf dem Gerät",
|
||||
@@ -311,6 +327,7 @@
|
||||
"multiselect_grid_edit_date_time_err_read_only": "Das Datum und die Uhrzeit von schreibgeschützten Inhalten kann nicht verändert werden, überspringen...",
|
||||
"multiselect_grid_edit_gps_err_read_only": "Der Aufnahmeort von schreibgeschützten Inhalten kann nicht verändert werden, überspringen...",
|
||||
"no_assets_to_show": "Keine Vorschau vorhanden",
|
||||
"no_name": "No name",
|
||||
"notification_permission_dialog_cancel": "Abbrechen",
|
||||
"notification_permission_dialog_content": "Um Benachrichtigungen zu aktivieren, navigiere zu Einstellungen und klicke \"Erlauben\"",
|
||||
"notification_permission_dialog_settings": "Einstellungen",
|
||||
@@ -354,17 +371,30 @@
|
||||
"scaffold_body_error_occurred": "Ein Fehler ist aufgetreten",
|
||||
"search_bar_hint": "Durchsuche deine Fotos",
|
||||
"search_filter_apply": "Filter anwenden",
|
||||
"search_filter_camera": "Camera",
|
||||
"search_filter_camera_make": "Marke",
|
||||
"search_filter_camera_model": "Modell",
|
||||
"search_filter_camera_title": "Select camera type",
|
||||
"search_filter_date": "Date",
|
||||
"search_filter_date_interval": "{start} to {end}",
|
||||
"search_filter_date_title": "Select a date range",
|
||||
"search_filter_display_option_archive": "Archiv",
|
||||
"search_filter_display_option_favorite": "Favorit",
|
||||
"search_filter_display_option_not_in_album": "Nicht im Album",
|
||||
"search_filter_display_options": "Display Options",
|
||||
"search_filter_display_options_title": "Display options",
|
||||
"search_filter_location": "Location",
|
||||
"search_filter_location_city": "Stadt",
|
||||
"search_filter_location_country": "Land",
|
||||
"search_filter_location_state": "Bundesland",
|
||||
"search_filter_location_title": "Select location",
|
||||
"search_filter_media_type": "Media Type",
|
||||
"search_filter_media_type_all": "Alle",
|
||||
"search_filter_media_type_image": "Bild",
|
||||
"search_filter_media_type_title": "Select media type",
|
||||
"search_filter_media_type_video": "Video",
|
||||
"search_filter_people": "People",
|
||||
"search_filter_people_title": "Select people",
|
||||
"search_page_categories": "Kategorien",
|
||||
"search_page_favorites": "Favoriten",
|
||||
"search_page_motion_photos": "Live-Fotos",
|
||||
|
||||
@@ -3,6 +3,8 @@
|
||||
"action_common_cancel": "Ακύρωση",
|
||||
"action_common_clear": "Clear",
|
||||
"action_common_confirm": "Confirm",
|
||||
"action_common_save": "Save",
|
||||
"action_common_select": "Select",
|
||||
"action_common_update": "Ενημέρωση",
|
||||
"add_to_album_bottom_sheet_added": "Προστέθηκε στο {album}",
|
||||
"add_to_album_bottom_sheet_already_exists": "Ήδη στο {album}",
|
||||
@@ -141,11 +143,21 @@
|
||||
"change_password_form_new_password": "Νέος Κωδικός",
|
||||
"change_password_form_password_mismatch": "Οι κωδικοί δεν ταιριάζουν",
|
||||
"change_password_form_reenter_new_password": "Επανεισαγωγή Νέου Κωδικού",
|
||||
"client_cert_dialog_msg_confirm": "OK",
|
||||
"client_cert_enter_password": "Enter Password",
|
||||
"client_cert_import": "Import",
|
||||
"client_cert_import_success_msg": "Client certificate is imported",
|
||||
"client_cert_invalid_msg": "Invalid certificate file or wrong password",
|
||||
"client_cert_remove": "Remove",
|
||||
"client_cert_remove_msg": "Client certificate is removed",
|
||||
"client_cert_subtitle": "Supports PKCS12 (.p12, .pfx) format only. Certificate Import/Remove is available only before login",
|
||||
"client_cert_title": "SSL Client Certificate",
|
||||
"common_add_to_album": "Προσθήκη στο άλμπουμ",
|
||||
"common_change_password": "Αλλαγή Κωδικού",
|
||||
"common_create_new_album": "Δημιουργία νέου άλμπουμ",
|
||||
"common_server_error": "Ελέγξτε τη σύνδεσή σας, βεβαιωθείτε ότι ο διακομιστής είναι προσβάσιμος και ότι οι εκδόσεις της εφαρμογής/διακομιστή είναι συμβατές.",
|
||||
"common_shared": "Κοινόχρηστο",
|
||||
"contextual_search": "Sunrise on the beach",
|
||||
"control_bottom_app_bar_add_to_album": "Προσθήκη στο άλμπουμ",
|
||||
"control_bottom_app_bar_album_info": "{} αντικείμενα",
|
||||
"control_bottom_app_bar_album_info_shared": "{} αντικείμενα · Κοινόχρηστα",
|
||||
@@ -154,6 +166,7 @@
|
||||
"control_bottom_app_bar_delete": "Διαγραφή",
|
||||
"control_bottom_app_bar_delete_from_immich": "Διαγραφή από το Immich",
|
||||
"control_bottom_app_bar_delete_from_local": "Διαγραφή από τη συσκευή",
|
||||
"control_bottom_app_bar_edit": "Edit",
|
||||
"control_bottom_app_bar_edit_location": "Επεξεργασία Τοποθεσίας",
|
||||
"control_bottom_app_bar_edit_time": "Επεξεργασία Ημερομηνίας & Ώρας",
|
||||
"control_bottom_app_bar_favorite": "Προσθήκη στα αγαπημένα",
|
||||
@@ -203,6 +216,7 @@
|
||||
"experimental_settings_title": "Πειραματικό",
|
||||
"favorites_page_no_favorites": "Δεν βρέθηκαν αγαπημένα στοιχεία",
|
||||
"favorites_page_title": "Αγαπημένα",
|
||||
"filename_search": "File name or extension",
|
||||
"haptic_feedback_switch": "Enable haptic feedback",
|
||||
"haptic_feedback_title": "Haptic Feedback",
|
||||
"header_settings_add_header_tip": "Add Header",
|
||||
@@ -230,6 +244,8 @@
|
||||
"image_viewer_page_state_provider_download_started": "Download Started",
|
||||
"image_viewer_page_state_provider_download_success": "Download Success",
|
||||
"image_viewer_page_state_provider_share_error": "Share Error",
|
||||
"invalid_date": "Invalid date",
|
||||
"invalid_date_format": "Invalid date format",
|
||||
"library_page_albums": "Albums",
|
||||
"library_page_archive": "Archive",
|
||||
"library_page_device_albums": "Albums on Device",
|
||||
@@ -311,6 +327,7 @@
|
||||
"multiselect_grid_edit_date_time_err_read_only": "Cannot edit date of read only asset(s), skipping",
|
||||
"multiselect_grid_edit_gps_err_read_only": "Cannot edit location of read only asset(s), skipping",
|
||||
"no_assets_to_show": "No assets to show",
|
||||
"no_name": "No name",
|
||||
"notification_permission_dialog_cancel": "Cancel",
|
||||
"notification_permission_dialog_content": "To enable notifications, go to Settings and select allow.",
|
||||
"notification_permission_dialog_settings": "Settings",
|
||||
@@ -354,17 +371,30 @@
|
||||
"scaffold_body_error_occurred": "Error occurred",
|
||||
"search_bar_hint": "Search your photos",
|
||||
"search_filter_apply": "Apply filter",
|
||||
"search_filter_camera": "Camera",
|
||||
"search_filter_camera_make": "Make",
|
||||
"search_filter_camera_model": "Model",
|
||||
"search_filter_camera_title": "Select camera type",
|
||||
"search_filter_date": "Date",
|
||||
"search_filter_date_interval": "{start} to {end}",
|
||||
"search_filter_date_title": "Select a date range",
|
||||
"search_filter_display_option_archive": "Archive",
|
||||
"search_filter_display_option_favorite": "Favorite",
|
||||
"search_filter_display_option_not_in_album": "Not in album",
|
||||
"search_filter_display_options": "Display Options",
|
||||
"search_filter_display_options_title": "Display options",
|
||||
"search_filter_location": "Location",
|
||||
"search_filter_location_city": "City",
|
||||
"search_filter_location_country": "Country",
|
||||
"search_filter_location_state": "State",
|
||||
"search_filter_location_title": "Select location",
|
||||
"search_filter_media_type": "Media Type",
|
||||
"search_filter_media_type_all": "All",
|
||||
"search_filter_media_type_image": "Image",
|
||||
"search_filter_media_type_title": "Select media type",
|
||||
"search_filter_media_type_video": "Video",
|
||||
"search_filter_people": "People",
|
||||
"search_filter_people_title": "Select people",
|
||||
"search_page_categories": "Categories",
|
||||
"search_page_favorites": "Favorites",
|
||||
"search_page_motion_photos": "Motion Photos",
|
||||
|
||||
@@ -143,6 +143,15 @@
|
||||
"change_password_form_new_password": "New Password",
|
||||
"change_password_form_password_mismatch": "Passwords do not match",
|
||||
"change_password_form_reenter_new_password": "Re-enter New Password",
|
||||
"client_cert_dialog_msg_confirm": "OK",
|
||||
"client_cert_enter_password": "Enter Password",
|
||||
"client_cert_import": "Import",
|
||||
"client_cert_import_success_msg": "Client certificate is imported",
|
||||
"client_cert_invalid_msg": "Invalid certificate file or wrong password",
|
||||
"client_cert_remove": "Remove",
|
||||
"client_cert_remove_msg": "Client certificate is removed",
|
||||
"client_cert_subtitle": "Supports PKCS12 (.p12, .pfx) format only. Certificate Import/Remove is available only before login",
|
||||
"client_cert_title": "SSL Client Certificate",
|
||||
"common_add_to_album": "Add to album",
|
||||
"common_change_password": "Change Password",
|
||||
"common_create_new_album": "Create new album",
|
||||
@@ -157,6 +166,7 @@
|
||||
"control_bottom_app_bar_delete": "Delete",
|
||||
"control_bottom_app_bar_delete_from_immich": "Delete from Immich",
|
||||
"control_bottom_app_bar_delete_from_local": "Delete from device",
|
||||
"control_bottom_app_bar_edit": "Edit",
|
||||
"control_bottom_app_bar_edit_location": "Edit Location",
|
||||
"control_bottom_app_bar_edit_time": "Edit Date & Time",
|
||||
"control_bottom_app_bar_favorite": "Favorite",
|
||||
@@ -438,18 +448,15 @@
|
||||
"setting_notifications_total_progress_subtitle": "Overall upload progress (done/total assets)",
|
||||
"setting_notifications_total_progress_title": "Show background backup total progress",
|
||||
"setting_pages_app_bar_settings": "Settings",
|
||||
"settings_require_restart": "Please restart Immich to apply this setting",
|
||||
"setting_video_viewer_looping_subtitle": "Enable to automatically loop a video in the detail viewer.",
|
||||
"setting_video_viewer_looping_title": "Looping",
|
||||
"setting_video_viewer_title": "Videos",
|
||||
"settings_require_restart": "Please restart Immich to apply this setting",
|
||||
"share_add": "Add",
|
||||
"share_add_photos": "Add photos",
|
||||
"share_add_title": "Add a title",
|
||||
"share_assets_selected": "{} selected",
|
||||
"share_create_album": "Create album",
|
||||
"share_dialog_preparing": "Preparing...",
|
||||
"share_done": "Done",
|
||||
"share_invite": "Invite to album",
|
||||
"shared_album_activities_input_disable": "Comment is disabled",
|
||||
"shared_album_activities_input_hint": "Say something",
|
||||
"shared_album_activity_remove_content": "Do you want to delete this activity?",
|
||||
@@ -461,6 +468,7 @@
|
||||
"shared_album_section_people_action_remove_user": "Remove user from album",
|
||||
"shared_album_section_people_owner_label": "Owner",
|
||||
"shared_album_section_people_title": "PEOPLE",
|
||||
"share_dialog_preparing": "Preparing...",
|
||||
"shared_link_app_bar_title": "Shared Links",
|
||||
"shared_link_clipboard_copied_massage": "Copied to clipboard",
|
||||
"shared_link_clipboard_text": "Link: {}\nPassword: {}",
|
||||
@@ -506,12 +514,14 @@
|
||||
"shared_link_info_chip_upload": "Upload",
|
||||
"shared_link_manage_links": "Manage Shared links",
|
||||
"shared_link_public_album": "Public album",
|
||||
"share_done": "Done",
|
||||
"share_invite": "Invite to album",
|
||||
"sharing_page_album": "Shared albums",
|
||||
"sharing_page_description": "Create shared albums to share photos and videos with people in your network.",
|
||||
"sharing_page_empty_list": "EMPTY LIST",
|
||||
"sharing_silver_appbar_create_shared_album": "New shared album",
|
||||
"sharing_silver_appbar_share_partner": "Share with partner",
|
||||
"sharing_silver_appbar_shared_links": "Shared links",
|
||||
"sharing_silver_appbar_share_partner": "Share with partner",
|
||||
"tab_controller_nav_library": "Library",
|
||||
"tab_controller_nav_photos": "Photos",
|
||||
"tab_controller_nav_search": "Search",
|
||||
@@ -551,19 +561,5 @@
|
||||
"version_announcement_overlay_title": "New Server Version Available \uD83C\uDF89",
|
||||
"viewer_remove_from_stack": "Remove from Stack",
|
||||
"viewer_stack_use_as_main_asset": "Use as Main Asset",
|
||||
"viewer_unstack": "Un-Stack",
|
||||
"header_settings_header_name_input": "Header name",
|
||||
"header_settings_header_value_input": "Header value",
|
||||
"header_settings_page_title": "Proxy Headers",
|
||||
"header_settings_add_header_tip": "Add Header",
|
||||
"header_settings_field_validator_msg": "Value cannot be empty",
|
||||
"client_cert_title": "SSL Client Certificate",
|
||||
"client_cert_subtitle": "Supports PKCS12 (.p12, .pfx) format only. Certificate Import/Remove is available only before login",
|
||||
"client_cert_import": "Import",
|
||||
"client_cert_remove": "Remove",
|
||||
"client_cert_remove_msg": "Client certificate is removed",
|
||||
"client_cert_import_success_msg": "Client certificate is imported",
|
||||
"client_cert_invalid_msg": "Invalid certificate file or wrong password",
|
||||
"client_cert_dialog_msg_confirm": "OK",
|
||||
"client_cert_enter_password": "Enter Password"
|
||||
}
|
||||
"viewer_unstack": "Un-Stack"
|
||||
}
|
||||
@@ -3,6 +3,8 @@
|
||||
"action_common_cancel": "Cancelar",
|
||||
"action_common_clear": "Limpiar",
|
||||
"action_common_confirm": "Confirmar",
|
||||
"action_common_save": "Save",
|
||||
"action_common_select": "Select",
|
||||
"action_common_update": "Actualizar",
|
||||
"add_to_album_bottom_sheet_added": "Agregado a {album}",
|
||||
"add_to_album_bottom_sheet_already_exists": "Ya se encuentra en {album}",
|
||||
@@ -141,11 +143,21 @@
|
||||
"change_password_form_new_password": "Nueva Contraseña",
|
||||
"change_password_form_password_mismatch": "Las contraseñas no coinciden",
|
||||
"change_password_form_reenter_new_password": "Vuelve a ingresar la nueva contraseña",
|
||||
"client_cert_dialog_msg_confirm": "OK",
|
||||
"client_cert_enter_password": "Enter Password",
|
||||
"client_cert_import": "Import",
|
||||
"client_cert_import_success_msg": "Client certificate is imported",
|
||||
"client_cert_invalid_msg": "Invalid certificate file or wrong password",
|
||||
"client_cert_remove": "Remove",
|
||||
"client_cert_remove_msg": "Client certificate is removed",
|
||||
"client_cert_subtitle": "Supports PKCS12 (.p12, .pfx) format only. Certificate Import/Remove is available only before login",
|
||||
"client_cert_title": "SSL Client Certificate",
|
||||
"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",
|
||||
"contextual_search": "Sunrise on the beach",
|
||||
"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",
|
||||
@@ -154,6 +166,7 @@
|
||||
"control_bottom_app_bar_delete": "Eliminar",
|
||||
"control_bottom_app_bar_delete_from_immich": "Borrar de Immich",
|
||||
"control_bottom_app_bar_delete_from_local": "Borrar del dispositivo",
|
||||
"control_bottom_app_bar_edit": "Edit",
|
||||
"control_bottom_app_bar_edit_location": "Editar ubicación",
|
||||
"control_bottom_app_bar_edit_time": "Editar fecha y hora",
|
||||
"control_bottom_app_bar_favorite": "Favorito",
|
||||
@@ -203,6 +216,7 @@
|
||||
"experimental_settings_title": "Experimental",
|
||||
"favorites_page_no_favorites": "No se encontraron elementos marcados como favoritos",
|
||||
"favorites_page_title": "Favoritos",
|
||||
"filename_search": "File name or extension",
|
||||
"haptic_feedback_switch": "Activar respuesta háptica",
|
||||
"haptic_feedback_title": "Respuesta Háptica",
|
||||
"header_settings_add_header_tip": "Añadir cabecera",
|
||||
@@ -230,6 +244,8 @@
|
||||
"image_viewer_page_state_provider_download_started": "Descarga Iniciada",
|
||||
"image_viewer_page_state_provider_download_success": "Descarga exitosa",
|
||||
"image_viewer_page_state_provider_share_error": "Error al compartir",
|
||||
"invalid_date": "Invalid date",
|
||||
"invalid_date_format": "Invalid date format",
|
||||
"library_page_albums": "Álbumes",
|
||||
"library_page_archive": "Archivo",
|
||||
"library_page_device_albums": "Álbumes en el dispositivo",
|
||||
@@ -311,6 +327,7 @@
|
||||
"multiselect_grid_edit_date_time_err_read_only": "No se puede cambiar la fecha del archivo(s) de solo lectura, omitiendo",
|
||||
"multiselect_grid_edit_gps_err_read_only": "No se puede cambiar la localización de archivos de solo lectura. Saltando.",
|
||||
"no_assets_to_show": "No hay elementos a mostrar",
|
||||
"no_name": "No name",
|
||||
"notification_permission_dialog_cancel": "Cancelar",
|
||||
"notification_permission_dialog_content": "Para activar las notificaciones, ve a Configuración y selecciona permitir.",
|
||||
"notification_permission_dialog_settings": "Ajustes",
|
||||
@@ -354,17 +371,30 @@
|
||||
"scaffold_body_error_occurred": "Ha ocurrido un error",
|
||||
"search_bar_hint": "Busca tus fotos",
|
||||
"search_filter_apply": "Aplicar filtros",
|
||||
"search_filter_camera": "Camera",
|
||||
"search_filter_camera_make": "Marca",
|
||||
"search_filter_camera_model": "Modelo",
|
||||
"search_filter_camera_title": "Select camera type",
|
||||
"search_filter_date": "Date",
|
||||
"search_filter_date_interval": "{start} to {end}",
|
||||
"search_filter_date_title": "Select a date range",
|
||||
"search_filter_display_option_archive": "Archivado",
|
||||
"search_filter_display_option_favorite": "Favorito",
|
||||
"search_filter_display_option_not_in_album": "No en álbum",
|
||||
"search_filter_display_options": "Display Options",
|
||||
"search_filter_display_options_title": "Display options",
|
||||
"search_filter_location": "Location",
|
||||
"search_filter_location_city": "Ciudad",
|
||||
"search_filter_location_country": "País",
|
||||
"search_filter_location_state": "Estado",
|
||||
"search_filter_location_title": "Select location",
|
||||
"search_filter_media_type": "Media Type",
|
||||
"search_filter_media_type_all": "Todos",
|
||||
"search_filter_media_type_image": "Imagen",
|
||||
"search_filter_media_type_title": "Select media type",
|
||||
"search_filter_media_type_video": "Vídeo",
|
||||
"search_filter_people": "People",
|
||||
"search_filter_people_title": "Select people",
|
||||
"search_page_categories": "Categorías",
|
||||
"search_page_favorites": "Favoritos",
|
||||
"search_page_motion_photos": "Foto en Movimiento",
|
||||
|
||||
@@ -3,6 +3,8 @@
|
||||
"action_common_cancel": "Cancel",
|
||||
"action_common_clear": "Clear",
|
||||
"action_common_confirm": "Confirm",
|
||||
"action_common_save": "Save",
|
||||
"action_common_select": "Select",
|
||||
"action_common_update": "Update",
|
||||
"add_to_album_bottom_sheet_added": "Agregado a {album}",
|
||||
"add_to_album_bottom_sheet_already_exists": "Ya se encuentra en {album}",
|
||||
@@ -141,11 +143,21 @@
|
||||
"change_password_form_new_password": "Nueva Contraseña",
|
||||
"change_password_form_password_mismatch": "Las contraseñas no coinciden",
|
||||
"change_password_form_reenter_new_password": "Vuelve a ingresar la nueva contraseña",
|
||||
"client_cert_dialog_msg_confirm": "OK",
|
||||
"client_cert_enter_password": "Enter Password",
|
||||
"client_cert_import": "Import",
|
||||
"client_cert_import_success_msg": "Client certificate is imported",
|
||||
"client_cert_invalid_msg": "Invalid certificate file or wrong password",
|
||||
"client_cert_remove": "Remove",
|
||||
"client_cert_remove_msg": "Client certificate is removed",
|
||||
"client_cert_subtitle": "Supports PKCS12 (.p12, .pfx) format only. Certificate Import/Remove is available only before login",
|
||||
"client_cert_title": "SSL Client Certificate",
|
||||
"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",
|
||||
"contextual_search": "Sunrise on the beach",
|
||||
"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",
|
||||
@@ -154,6 +166,7 @@
|
||||
"control_bottom_app_bar_delete": "Eliminar",
|
||||
"control_bottom_app_bar_delete_from_immich": "Delete from Immich",
|
||||
"control_bottom_app_bar_delete_from_local": "Delete from device",
|
||||
"control_bottom_app_bar_edit": "Edit",
|
||||
"control_bottom_app_bar_edit_location": "Edit Location",
|
||||
"control_bottom_app_bar_edit_time": "Edit Date & Time",
|
||||
"control_bottom_app_bar_favorite": "Favorito",
|
||||
@@ -203,6 +216,7 @@
|
||||
"experimental_settings_title": "Experimental",
|
||||
"favorites_page_no_favorites": "No se encontraron recursos marcados como favoritos",
|
||||
"favorites_page_title": "Favoritos",
|
||||
"filename_search": "File name or extension",
|
||||
"haptic_feedback_switch": "Enable haptic feedback",
|
||||
"haptic_feedback_title": "Haptic Feedback",
|
||||
"header_settings_add_header_tip": "Add Header",
|
||||
@@ -230,6 +244,8 @@
|
||||
"image_viewer_page_state_provider_download_started": "Download Started",
|
||||
"image_viewer_page_state_provider_download_success": "Descarga exitosa",
|
||||
"image_viewer_page_state_provider_share_error": "Error al compartir",
|
||||
"invalid_date": "Invalid date",
|
||||
"invalid_date_format": "Invalid date format",
|
||||
"library_page_albums": "Álbumes",
|
||||
"library_page_archive": "Archivo",
|
||||
"library_page_device_albums": "Álbumes en el dispositivo",
|
||||
@@ -311,6 +327,7 @@
|
||||
"multiselect_grid_edit_date_time_err_read_only": "Cannot edit date of read only asset(s), skipping",
|
||||
"multiselect_grid_edit_gps_err_read_only": "Cannot edit location of read only asset(s), skipping",
|
||||
"no_assets_to_show": "No assets to show",
|
||||
"no_name": "No name",
|
||||
"notification_permission_dialog_cancel": "Cancelar",
|
||||
"notification_permission_dialog_content": "Para activar las notificaciones, ve a Configuración y selecciona permitir.",
|
||||
"notification_permission_dialog_settings": "Ajustes",
|
||||
@@ -354,17 +371,30 @@
|
||||
"scaffold_body_error_occurred": "Error occurred",
|
||||
"search_bar_hint": "Busca tus fotos",
|
||||
"search_filter_apply": "Apply filter",
|
||||
"search_filter_camera": "Camera",
|
||||
"search_filter_camera_make": "Make",
|
||||
"search_filter_camera_model": "Model",
|
||||
"search_filter_camera_title": "Select camera type",
|
||||
"search_filter_date": "Date",
|
||||
"search_filter_date_interval": "{start} to {end}",
|
||||
"search_filter_date_title": "Select a date range",
|
||||
"search_filter_display_option_archive": "Archive",
|
||||
"search_filter_display_option_favorite": "Favorite",
|
||||
"search_filter_display_option_not_in_album": "Not in album",
|
||||
"search_filter_display_options": "Display Options",
|
||||
"search_filter_display_options_title": "Display options",
|
||||
"search_filter_location": "Location",
|
||||
"search_filter_location_city": "City",
|
||||
"search_filter_location_country": "Country",
|
||||
"search_filter_location_state": "State",
|
||||
"search_filter_location_title": "Select location",
|
||||
"search_filter_media_type": "Media Type",
|
||||
"search_filter_media_type_all": "All",
|
||||
"search_filter_media_type_image": "Image",
|
||||
"search_filter_media_type_title": "Select media type",
|
||||
"search_filter_media_type_video": "Video",
|
||||
"search_filter_people": "People",
|
||||
"search_filter_people_title": "Select people",
|
||||
"search_page_categories": "Categorías",
|
||||
"search_page_favorites": "Favoritos",
|
||||
"search_page_motion_photos": "Foto en Movimiento",
|
||||
|
||||
@@ -3,6 +3,8 @@
|
||||
"action_common_cancel": "Cancel",
|
||||
"action_common_clear": "Clear",
|
||||
"action_common_confirm": "Confirm",
|
||||
"action_common_save": "Save",
|
||||
"action_common_select": "Select",
|
||||
"action_common_update": "Update",
|
||||
"add_to_album_bottom_sheet_added": "Agregado a {album}",
|
||||
"add_to_album_bottom_sheet_already_exists": "Ya se encuentra en {album}",
|
||||
@@ -141,11 +143,21 @@
|
||||
"change_password_form_new_password": "Nueva Contraseña",
|
||||
"change_password_form_password_mismatch": "Las contraseñas no coinciden",
|
||||
"change_password_form_reenter_new_password": "Vuelve a ingresar la nueva contraseña",
|
||||
"client_cert_dialog_msg_confirm": "OK",
|
||||
"client_cert_enter_password": "Enter Password",
|
||||
"client_cert_import": "Import",
|
||||
"client_cert_import_success_msg": "Client certificate is imported",
|
||||
"client_cert_invalid_msg": "Invalid certificate file or wrong password",
|
||||
"client_cert_remove": "Remove",
|
||||
"client_cert_remove_msg": "Client certificate is removed",
|
||||
"client_cert_subtitle": "Supports PKCS12 (.p12, .pfx) format only. Certificate Import/Remove is available only before login",
|
||||
"client_cert_title": "SSL Client Certificate",
|
||||
"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",
|
||||
"contextual_search": "Sunrise on the beach",
|
||||
"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",
|
||||
@@ -154,6 +166,7 @@
|
||||
"control_bottom_app_bar_delete": "Eliminar",
|
||||
"control_bottom_app_bar_delete_from_immich": "Delete from Immich",
|
||||
"control_bottom_app_bar_delete_from_local": "Delete from device",
|
||||
"control_bottom_app_bar_edit": "Edit",
|
||||
"control_bottom_app_bar_edit_location": "Edit Location",
|
||||
"control_bottom_app_bar_edit_time": "Edit Date & Time",
|
||||
"control_bottom_app_bar_favorite": "Favorito",
|
||||
@@ -203,6 +216,7 @@
|
||||
"experimental_settings_title": "Experimental",
|
||||
"favorites_page_no_favorites": "No se encontraron recursos marcados como favoritos",
|
||||
"favorites_page_title": "Favoritos",
|
||||
"filename_search": "File name or extension",
|
||||
"haptic_feedback_switch": "Enable haptic feedback",
|
||||
"haptic_feedback_title": "Haptic Feedback",
|
||||
"header_settings_add_header_tip": "Add Header",
|
||||
@@ -230,6 +244,8 @@
|
||||
"image_viewer_page_state_provider_download_started": "Download Started",
|
||||
"image_viewer_page_state_provider_download_success": "Descarga exitosa",
|
||||
"image_viewer_page_state_provider_share_error": "Error al compartir",
|
||||
"invalid_date": "Invalid date",
|
||||
"invalid_date_format": "Invalid date format",
|
||||
"library_page_albums": "Álbumes",
|
||||
"library_page_archive": "Archivo",
|
||||
"library_page_device_albums": "Álbumes en el dispositivo",
|
||||
@@ -311,6 +327,7 @@
|
||||
"multiselect_grid_edit_date_time_err_read_only": "Cannot edit date of read only asset(s), skipping",
|
||||
"multiselect_grid_edit_gps_err_read_only": "Cannot edit location of read only asset(s), skipping",
|
||||
"no_assets_to_show": "No assets to show",
|
||||
"no_name": "No name",
|
||||
"notification_permission_dialog_cancel": "Cancelar",
|
||||
"notification_permission_dialog_content": "Para activar las notificaciones, ve a Configuración y selecciona permitir.",
|
||||
"notification_permission_dialog_settings": "Ajustes",
|
||||
@@ -354,17 +371,30 @@
|
||||
"scaffold_body_error_occurred": "Error occurred",
|
||||
"search_bar_hint": "Busca tus fotos",
|
||||
"search_filter_apply": "Apply filter",
|
||||
"search_filter_camera": "Camera",
|
||||
"search_filter_camera_make": "Make",
|
||||
"search_filter_camera_model": "Model",
|
||||
"search_filter_camera_title": "Select camera type",
|
||||
"search_filter_date": "Date",
|
||||
"search_filter_date_interval": "{start} to {end}",
|
||||
"search_filter_date_title": "Select a date range",
|
||||
"search_filter_display_option_archive": "Archive",
|
||||
"search_filter_display_option_favorite": "Favorite",
|
||||
"search_filter_display_option_not_in_album": "Not in album",
|
||||
"search_filter_display_options": "Display Options",
|
||||
"search_filter_display_options_title": "Display options",
|
||||
"search_filter_location": "Location",
|
||||
"search_filter_location_city": "City",
|
||||
"search_filter_location_country": "Country",
|
||||
"search_filter_location_state": "State",
|
||||
"search_filter_location_title": "Select location",
|
||||
"search_filter_media_type": "Media Type",
|
||||
"search_filter_media_type_all": "All",
|
||||
"search_filter_media_type_image": "Image",
|
||||
"search_filter_media_type_title": "Select media type",
|
||||
"search_filter_media_type_video": "Video",
|
||||
"search_filter_people": "People",
|
||||
"search_filter_people_title": "Select people",
|
||||
"search_page_categories": "Categorías",
|
||||
"search_page_favorites": "Favoritos",
|
||||
"search_page_motion_photos": "Foto en Movimiento",
|
||||
|
||||
@@ -3,6 +3,8 @@
|
||||
"action_common_cancel": "Cancel",
|
||||
"action_common_clear": "Clear",
|
||||
"action_common_confirm": "Confirm",
|
||||
"action_common_save": "Save",
|
||||
"action_common_select": "Select",
|
||||
"action_common_update": "Update",
|
||||
"add_to_album_bottom_sheet_added": "Agregado a {album}",
|
||||
"add_to_album_bottom_sheet_already_exists": "Ya se encuentra en {album}",
|
||||
@@ -141,11 +143,21 @@
|
||||
"change_password_form_new_password": "Nueva Contraseña",
|
||||
"change_password_form_password_mismatch": "Las contraseñas no coinciden",
|
||||
"change_password_form_reenter_new_password": "Vuelve a ingresar la nueva contraseña",
|
||||
"client_cert_dialog_msg_confirm": "OK",
|
||||
"client_cert_enter_password": "Enter Password",
|
||||
"client_cert_import": "Import",
|
||||
"client_cert_import_success_msg": "Client certificate is imported",
|
||||
"client_cert_invalid_msg": "Invalid certificate file or wrong password",
|
||||
"client_cert_remove": "Remove",
|
||||
"client_cert_remove_msg": "Client certificate is removed",
|
||||
"client_cert_subtitle": "Supports PKCS12 (.p12, .pfx) format only. Certificate Import/Remove is available only before login",
|
||||
"client_cert_title": "SSL Client Certificate",
|
||||
"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",
|
||||
"contextual_search": "Sunrise on the beach",
|
||||
"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 · Compartido",
|
||||
@@ -154,6 +166,7 @@
|
||||
"control_bottom_app_bar_delete": "Eliminar",
|
||||
"control_bottom_app_bar_delete_from_immich": "Delete from Immich",
|
||||
"control_bottom_app_bar_delete_from_local": "Delete from device",
|
||||
"control_bottom_app_bar_edit": "Edit",
|
||||
"control_bottom_app_bar_edit_location": "Edit Location",
|
||||
"control_bottom_app_bar_edit_time": "Edit Date & Time",
|
||||
"control_bottom_app_bar_favorite": "Favorito",
|
||||
@@ -203,6 +216,7 @@
|
||||
"experimental_settings_title": "Experimental",
|
||||
"favorites_page_no_favorites": "No se encontraron recursos marcados como favoritos",
|
||||
"favorites_page_title": "Favoritos",
|
||||
"filename_search": "File name or extension",
|
||||
"haptic_feedback_switch": "Enable haptic feedback",
|
||||
"haptic_feedback_title": "Haptic Feedback",
|
||||
"header_settings_add_header_tip": "Add Header",
|
||||
@@ -230,6 +244,8 @@
|
||||
"image_viewer_page_state_provider_download_started": "Download Started",
|
||||
"image_viewer_page_state_provider_download_success": "Descarga exitosa",
|
||||
"image_viewer_page_state_provider_share_error": "Error al compartir",
|
||||
"invalid_date": "Invalid date",
|
||||
"invalid_date_format": "Invalid date format",
|
||||
"library_page_albums": "Álbumes",
|
||||
"library_page_archive": "Archivo",
|
||||
"library_page_device_albums": "Álbumes en el dispositivo",
|
||||
@@ -311,6 +327,7 @@
|
||||
"multiselect_grid_edit_date_time_err_read_only": "Cannot edit date of read only asset(s), skipping",
|
||||
"multiselect_grid_edit_gps_err_read_only": "Cannot edit location of read only asset(s), skipping",
|
||||
"no_assets_to_show": "No assets to show",
|
||||
"no_name": "No name",
|
||||
"notification_permission_dialog_cancel": "Cancelar",
|
||||
"notification_permission_dialog_content": "Para activar las notificaciones, ve a Configuración y selecciona permitir.",
|
||||
"notification_permission_dialog_settings": "Configuración",
|
||||
@@ -354,17 +371,30 @@
|
||||
"scaffold_body_error_occurred": "Error occurred",
|
||||
"search_bar_hint": "Busca tus fotos",
|
||||
"search_filter_apply": "Apply filter",
|
||||
"search_filter_camera": "Camera",
|
||||
"search_filter_camera_make": "Make",
|
||||
"search_filter_camera_model": "Model",
|
||||
"search_filter_camera_title": "Select camera type",
|
||||
"search_filter_date": "Date",
|
||||
"search_filter_date_interval": "{start} to {end}",
|
||||
"search_filter_date_title": "Select a date range",
|
||||
"search_filter_display_option_archive": "Archive",
|
||||
"search_filter_display_option_favorite": "Favorite",
|
||||
"search_filter_display_option_not_in_album": "Not in album",
|
||||
"search_filter_display_options": "Display Options",
|
||||
"search_filter_display_options_title": "Display options",
|
||||
"search_filter_location": "Location",
|
||||
"search_filter_location_city": "City",
|
||||
"search_filter_location_country": "Country",
|
||||
"search_filter_location_state": "State",
|
||||
"search_filter_location_title": "Select location",
|
||||
"search_filter_media_type": "Media Type",
|
||||
"search_filter_media_type_all": "All",
|
||||
"search_filter_media_type_image": "Image",
|
||||
"search_filter_media_type_title": "Select media type",
|
||||
"search_filter_media_type_video": "Video",
|
||||
"search_filter_people": "People",
|
||||
"search_filter_people_title": "Select people",
|
||||
"search_page_categories": "Categorías",
|
||||
"search_page_favorites": "Favoritos",
|
||||
"search_page_motion_photos": "Fotos en .ovimiento",
|
||||
|
||||
@@ -3,6 +3,8 @@
|
||||
"action_common_cancel": "Peruuta",
|
||||
"action_common_clear": "Tyhjennä",
|
||||
"action_common_confirm": "Vahvista",
|
||||
"action_common_save": "Save",
|
||||
"action_common_select": "Select",
|
||||
"action_common_update": "Päivitä",
|
||||
"add_to_album_bottom_sheet_added": "Lisätty albumiin {album}",
|
||||
"add_to_album_bottom_sheet_already_exists": "Kohde on jo albumissa {album}",
|
||||
@@ -141,11 +143,21 @@
|
||||
"change_password_form_new_password": "Uusi salasana",
|
||||
"change_password_form_password_mismatch": "Salasanat eivät täsmää",
|
||||
"change_password_form_reenter_new_password": "Uusi salasana uudelleen",
|
||||
"client_cert_dialog_msg_confirm": "OK",
|
||||
"client_cert_enter_password": "Enter Password",
|
||||
"client_cert_import": "Import",
|
||||
"client_cert_import_success_msg": "Client certificate is imported",
|
||||
"client_cert_invalid_msg": "Invalid certificate file or wrong password",
|
||||
"client_cert_remove": "Remove",
|
||||
"client_cert_remove_msg": "Client certificate is removed",
|
||||
"client_cert_subtitle": "Supports PKCS12 (.p12, .pfx) format only. Certificate Import/Remove is available only before login",
|
||||
"client_cert_title": "SSL Client Certificate",
|
||||
"common_add_to_album": "Lisää albumiin",
|
||||
"common_change_password": "Vaihda salasana",
|
||||
"common_create_new_album": "Luo uusi albumi",
|
||||
"common_server_error": "Tarkista internet-yhteytesi. Varmista että palvelin on saavutettavissa ja sovellus-/palvelinversiot ovat yhteensopivia.",
|
||||
"common_shared": "Jaettu",
|
||||
"contextual_search": "Sunrise on the beach",
|
||||
"control_bottom_app_bar_add_to_album": "Lisää albumiin",
|
||||
"control_bottom_app_bar_album_info": "{} kohdetta",
|
||||
"control_bottom_app_bar_album_info_shared": "{} kohdetta · Jaettu",
|
||||
@@ -154,6 +166,7 @@
|
||||
"control_bottom_app_bar_delete": "Poista",
|
||||
"control_bottom_app_bar_delete_from_immich": "Poista Immichistä",
|
||||
"control_bottom_app_bar_delete_from_local": "Poista laitteelta",
|
||||
"control_bottom_app_bar_edit": "Edit",
|
||||
"control_bottom_app_bar_edit_location": "Muokkaa sijaintia",
|
||||
"control_bottom_app_bar_edit_time": "Muokkaa aikaa",
|
||||
"control_bottom_app_bar_favorite": "Suosikki",
|
||||
@@ -203,6 +216,7 @@
|
||||
"experimental_settings_title": "Kokeellinen",
|
||||
"favorites_page_no_favorites": "Suosikkikohteita ei löytynyt",
|
||||
"favorites_page_title": "Suosikit",
|
||||
"filename_search": "File name or extension",
|
||||
"haptic_feedback_switch": "Ota haptinen palaute käyttöön",
|
||||
"haptic_feedback_title": "Haptinen palaute",
|
||||
"header_settings_add_header_tip": "Add Header",
|
||||
@@ -230,6 +244,8 @@
|
||||
"image_viewer_page_state_provider_download_started": "Lataaminen aloitettu",
|
||||
"image_viewer_page_state_provider_download_success": "Lataus onnistui",
|
||||
"image_viewer_page_state_provider_share_error": "Jakovirhe",
|
||||
"invalid_date": "Invalid date",
|
||||
"invalid_date_format": "Invalid date format",
|
||||
"library_page_albums": "Albumit",
|
||||
"library_page_archive": "Arkisto",
|
||||
"library_page_device_albums": "Laitteen albumit",
|
||||
@@ -311,6 +327,7 @@
|
||||
"multiselect_grid_edit_date_time_err_read_only": "Vain luku -tilassa olevien kohteiden päivämäärää ei voitu muokata, ohitetaan",
|
||||
"multiselect_grid_edit_gps_err_read_only": "Vain luku-tilassa olevien kohteiden sijantitietoja ei voitu muokata, ohitetaan",
|
||||
"no_assets_to_show": "Ei näytettäviä kohteita",
|
||||
"no_name": "No name",
|
||||
"notification_permission_dialog_cancel": "Peruuta",
|
||||
"notification_permission_dialog_content": "Ottaaksesi ilmoitukset käyttöön, siirry asetuksiin ja valitse 'salli'.",
|
||||
"notification_permission_dialog_settings": "Asetukset",
|
||||
@@ -354,17 +371,30 @@
|
||||
"scaffold_body_error_occurred": "Tapahtui virhe",
|
||||
"search_bar_hint": "Etsi kuvia",
|
||||
"search_filter_apply": "Käytä",
|
||||
"search_filter_camera": "Camera",
|
||||
"search_filter_camera_make": "Valmistaja",
|
||||
"search_filter_camera_model": "Malli",
|
||||
"search_filter_camera_title": "Select camera type",
|
||||
"search_filter_date": "Date",
|
||||
"search_filter_date_interval": "{start} to {end}",
|
||||
"search_filter_date_title": "Select a date range",
|
||||
"search_filter_display_option_archive": "Arkisto",
|
||||
"search_filter_display_option_favorite": "Suosikki",
|
||||
"search_filter_display_option_not_in_album": "Ei kuulu albumiin",
|
||||
"search_filter_display_options": "Display Options",
|
||||
"search_filter_display_options_title": "Display options",
|
||||
"search_filter_location": "Location",
|
||||
"search_filter_location_city": "Kaupunki",
|
||||
"search_filter_location_country": "Maa",
|
||||
"search_filter_location_state": "Maakunta/osavaltio",
|
||||
"search_filter_location_title": "Select location",
|
||||
"search_filter_media_type": "Media Type",
|
||||
"search_filter_media_type_all": "Kaikki",
|
||||
"search_filter_media_type_image": "Kuva",
|
||||
"search_filter_media_type_title": "Select media type",
|
||||
"search_filter_media_type_video": "Video",
|
||||
"search_filter_people": "People",
|
||||
"search_filter_people_title": "Select people",
|
||||
"search_page_categories": "Kategoriat",
|
||||
"search_page_favorites": "Suosikit",
|
||||
"search_page_motion_photos": "Liikekuvat",
|
||||
|
||||
@@ -3,6 +3,8 @@
|
||||
"action_common_cancel": "Cancel",
|
||||
"action_common_clear": "Clear",
|
||||
"action_common_confirm": "Confirm",
|
||||
"action_common_save": "Save",
|
||||
"action_common_select": "Select",
|
||||
"action_common_update": "Update",
|
||||
"add_to_album_bottom_sheet_added": "Ajouté à {album}",
|
||||
"add_to_album_bottom_sheet_already_exists": "Déjà dans {album}",
|
||||
@@ -141,11 +143,21 @@
|
||||
"change_password_form_new_password": "Nouveau mot de passe",
|
||||
"change_password_form_password_mismatch": "Les mots de passe ne correspondent pas",
|
||||
"change_password_form_reenter_new_password": "Saisissez à nouveau le nouveau mot de passe",
|
||||
"client_cert_dialog_msg_confirm": "OK",
|
||||
"client_cert_enter_password": "Enter Password",
|
||||
"client_cert_import": "Import",
|
||||
"client_cert_import_success_msg": "Client certificate is imported",
|
||||
"client_cert_invalid_msg": "Invalid certificate file or wrong password",
|
||||
"client_cert_remove": "Remove",
|
||||
"client_cert_remove_msg": "Client certificate is removed",
|
||||
"client_cert_subtitle": "Supports PKCS12 (.p12, .pfx) format only. Certificate Import/Remove is available only before login",
|
||||
"client_cert_title": "SSL Client Certificate",
|
||||
"common_add_to_album": "Ajouter à l'album",
|
||||
"common_change_password": "Modifier le mot de passe",
|
||||
"common_create_new_album": "Créer un nouvel album",
|
||||
"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é",
|
||||
"contextual_search": "Sunrise on the beach",
|
||||
"control_bottom_app_bar_add_to_album": "Ajouter à l'album",
|
||||
"control_bottom_app_bar_album_info": "{} éléments",
|
||||
"control_bottom_app_bar_album_info_shared": "{} éléments - Partagés",
|
||||
@@ -154,6 +166,7 @@
|
||||
"control_bottom_app_bar_delete": "Supprimer",
|
||||
"control_bottom_app_bar_delete_from_immich": "Delete from Immich",
|
||||
"control_bottom_app_bar_delete_from_local": "Delete from device",
|
||||
"control_bottom_app_bar_edit": "Edit",
|
||||
"control_bottom_app_bar_edit_location": "Edit Location",
|
||||
"control_bottom_app_bar_edit_time": "Edit Date & Time",
|
||||
"control_bottom_app_bar_favorite": "Favoris",
|
||||
@@ -203,6 +216,7 @@
|
||||
"experimental_settings_title": "Expérimental",
|
||||
"favorites_page_no_favorites": "Aucun élément favori n'a été trouvé",
|
||||
"favorites_page_title": "Favoris",
|
||||
"filename_search": "File name or extension",
|
||||
"haptic_feedback_switch": "Enable haptic feedback",
|
||||
"haptic_feedback_title": "Haptic Feedback",
|
||||
"header_settings_add_header_tip": "Add Header",
|
||||
@@ -230,6 +244,8 @@
|
||||
"image_viewer_page_state_provider_download_started": "Download Started",
|
||||
"image_viewer_page_state_provider_download_success": "Téléchargement réussi",
|
||||
"image_viewer_page_state_provider_share_error": "Erreur de partage",
|
||||
"invalid_date": "Invalid date",
|
||||
"invalid_date_format": "Invalid date format",
|
||||
"library_page_albums": "Albums",
|
||||
"library_page_archive": "Archive",
|
||||
"library_page_device_albums": "Albums sur l'appareil",
|
||||
@@ -311,6 +327,7 @@
|
||||
"multiselect_grid_edit_date_time_err_read_only": "Cannot edit date of read only asset(s), skipping",
|
||||
"multiselect_grid_edit_gps_err_read_only": "Cannot edit location of read only asset(s), skipping",
|
||||
"no_assets_to_show": "No assets to show",
|
||||
"no_name": "No name",
|
||||
"notification_permission_dialog_cancel": "Annuler",
|
||||
"notification_permission_dialog_content": "Pour activer les notifications, allez dans Paramètres et sélectionnez Autoriser.",
|
||||
"notification_permission_dialog_settings": "Paramètres",
|
||||
@@ -354,17 +371,30 @@
|
||||
"scaffold_body_error_occurred": "Error occurred",
|
||||
"search_bar_hint": "Rechercher vos photos",
|
||||
"search_filter_apply": "Apply filter",
|
||||
"search_filter_camera": "Camera",
|
||||
"search_filter_camera_make": "Make",
|
||||
"search_filter_camera_model": "Model",
|
||||
"search_filter_camera_title": "Select camera type",
|
||||
"search_filter_date": "Date",
|
||||
"search_filter_date_interval": "{start} to {end}",
|
||||
"search_filter_date_title": "Select a date range",
|
||||
"search_filter_display_option_archive": "Archive",
|
||||
"search_filter_display_option_favorite": "Favorite",
|
||||
"search_filter_display_option_not_in_album": "Not in album",
|
||||
"search_filter_display_options": "Display Options",
|
||||
"search_filter_display_options_title": "Display options",
|
||||
"search_filter_location": "Location",
|
||||
"search_filter_location_city": "City",
|
||||
"search_filter_location_country": "Country",
|
||||
"search_filter_location_state": "State",
|
||||
"search_filter_location_title": "Select location",
|
||||
"search_filter_media_type": "Media Type",
|
||||
"search_filter_media_type_all": "All",
|
||||
"search_filter_media_type_image": "Image",
|
||||
"search_filter_media_type_title": "Select media type",
|
||||
"search_filter_media_type_video": "Video",
|
||||
"search_filter_people": "People",
|
||||
"search_filter_people_title": "Select people",
|
||||
"search_page_categories": "Catégories",
|
||||
"search_page_favorites": "Favoris",
|
||||
"search_page_motion_photos": "Photos avec mouvement",
|
||||
|
||||
@@ -3,6 +3,8 @@
|
||||
"action_common_cancel": "Annuler",
|
||||
"action_common_clear": "Vider",
|
||||
"action_common_confirm": "Confirmer",
|
||||
"action_common_save": "Save",
|
||||
"action_common_select": "Select",
|
||||
"action_common_update": "Mise à jour",
|
||||
"add_to_album_bottom_sheet_added": "Ajouté à {album}",
|
||||
"add_to_album_bottom_sheet_already_exists": "Déjà dans {album}",
|
||||
@@ -141,11 +143,21 @@
|
||||
"change_password_form_new_password": "Nouveau mot de passe",
|
||||
"change_password_form_password_mismatch": "Les mots de passe ne correspondent pas",
|
||||
"change_password_form_reenter_new_password": "Saisissez à nouveau le nouveau mot de passe",
|
||||
"client_cert_dialog_msg_confirm": "OK",
|
||||
"client_cert_enter_password": "Enter Password",
|
||||
"client_cert_import": "Import",
|
||||
"client_cert_import_success_msg": "Client certificate is imported",
|
||||
"client_cert_invalid_msg": "Invalid certificate file or wrong password",
|
||||
"client_cert_remove": "Remove",
|
||||
"client_cert_remove_msg": "Client certificate is removed",
|
||||
"client_cert_subtitle": "Supports PKCS12 (.p12, .pfx) format only. Certificate Import/Remove is available only before login",
|
||||
"client_cert_title": "SSL Client Certificate",
|
||||
"common_add_to_album": "Ajouter à l'album",
|
||||
"common_change_password": "Modifier le mot de passe",
|
||||
"common_create_new_album": "Créer un nouvel album",
|
||||
"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é",
|
||||
"contextual_search": "Sunrise on the beach",
|
||||
"control_bottom_app_bar_add_to_album": "Ajouter à l'album",
|
||||
"control_bottom_app_bar_album_info": "{} éléments",
|
||||
"control_bottom_app_bar_album_info_shared": "{} éléments - Partagés",
|
||||
@@ -154,6 +166,7 @@
|
||||
"control_bottom_app_bar_delete": "Supprimer",
|
||||
"control_bottom_app_bar_delete_from_immich": "Supprimer de Immich",
|
||||
"control_bottom_app_bar_delete_from_local": "Supprimer de l'appareil",
|
||||
"control_bottom_app_bar_edit": "Edit",
|
||||
"control_bottom_app_bar_edit_location": "Modifier la localisation",
|
||||
"control_bottom_app_bar_edit_time": "Modifier la date et l'heure",
|
||||
"control_bottom_app_bar_favorite": "Favoris",
|
||||
@@ -203,6 +216,7 @@
|
||||
"experimental_settings_title": "Expérimental",
|
||||
"favorites_page_no_favorites": "Aucun élément favori n'a été trouvé",
|
||||
"favorites_page_title": "Favoris",
|
||||
"filename_search": "File name or extension",
|
||||
"haptic_feedback_switch": "Activer le retour haptique",
|
||||
"haptic_feedback_title": "Retour haptique",
|
||||
"header_settings_add_header_tip": "Add Header",
|
||||
@@ -230,6 +244,8 @@
|
||||
"image_viewer_page_state_provider_download_started": "Téléchargement Démarré",
|
||||
"image_viewer_page_state_provider_download_success": "Téléchargement réussi",
|
||||
"image_viewer_page_state_provider_share_error": "Erreur de partage",
|
||||
"invalid_date": "Invalid date",
|
||||
"invalid_date_format": "Invalid date format",
|
||||
"library_page_albums": "Albums",
|
||||
"library_page_archive": "Archive",
|
||||
"library_page_device_albums": "Albums sur l'appareil",
|
||||
@@ -311,6 +327,7 @@
|
||||
"multiselect_grid_edit_date_time_err_read_only": "Impossible de modifier la date d'un élément d'actif en lecture seule.",
|
||||
"multiselect_grid_edit_gps_err_read_only": "Impossible de modifier l'emplacement d'un élément en lecture seule.",
|
||||
"no_assets_to_show": "Aucuns éléments à afficher",
|
||||
"no_name": "No name",
|
||||
"notification_permission_dialog_cancel": "Annuler",
|
||||
"notification_permission_dialog_content": "Pour activer les notifications, allez dans Paramètres et sélectionnez Autoriser.",
|
||||
"notification_permission_dialog_settings": "Paramètres",
|
||||
@@ -354,17 +371,30 @@
|
||||
"scaffold_body_error_occurred": "Une erreur s'est produite",
|
||||
"search_bar_hint": "Rechercher vos photos",
|
||||
"search_filter_apply": "Appliquer le filtre",
|
||||
"search_filter_camera": "Camera",
|
||||
"search_filter_camera_make": "Fabricant",
|
||||
"search_filter_camera_model": "Modéle",
|
||||
"search_filter_camera_title": "Select camera type",
|
||||
"search_filter_date": "Date",
|
||||
"search_filter_date_interval": "{start} to {end}",
|
||||
"search_filter_date_title": "Select a date range",
|
||||
"search_filter_display_option_archive": "Achive",
|
||||
"search_filter_display_option_favorite": "Favoris",
|
||||
"search_filter_display_option_not_in_album": "Pas dans un album",
|
||||
"search_filter_display_options": "Display Options",
|
||||
"search_filter_display_options_title": "Display options",
|
||||
"search_filter_location": "Location",
|
||||
"search_filter_location_city": "Ville",
|
||||
"search_filter_location_country": "Pays",
|
||||
"search_filter_location_state": "Région",
|
||||
"search_filter_location_title": "Select location",
|
||||
"search_filter_media_type": "Media Type",
|
||||
"search_filter_media_type_all": "Tous",
|
||||
"search_filter_media_type_image": "Image",
|
||||
"search_filter_media_type_title": "Select media type",
|
||||
"search_filter_media_type_video": "Vidéo",
|
||||
"search_filter_people": "People",
|
||||
"search_filter_people_title": "Select people",
|
||||
"search_page_categories": "Catégories",
|
||||
"search_page_favorites": "Favoris",
|
||||
"search_page_motion_photos": "Photos animées",
|
||||
|
||||
@@ -3,6 +3,8 @@
|
||||
"action_common_cancel": "ביטול",
|
||||
"action_common_clear": "נקה",
|
||||
"action_common_confirm": "אישור",
|
||||
"action_common_save": "Save",
|
||||
"action_common_select": "Select",
|
||||
"action_common_update": "עדכון",
|
||||
"add_to_album_bottom_sheet_added": "נוסף ל {album}",
|
||||
"add_to_album_bottom_sheet_already_exists": "כבר ב {album}",
|
||||
@@ -141,11 +143,21 @@
|
||||
"change_password_form_new_password": "סיסמה חדשה",
|
||||
"change_password_form_password_mismatch": "סיסמאות לא תואמות",
|
||||
"change_password_form_reenter_new_password": "הכנס שוב סיסמה חדשה",
|
||||
"client_cert_dialog_msg_confirm": "OK",
|
||||
"client_cert_enter_password": "Enter Password",
|
||||
"client_cert_import": "Import",
|
||||
"client_cert_import_success_msg": "Client certificate is imported",
|
||||
"client_cert_invalid_msg": "Invalid certificate file or wrong password",
|
||||
"client_cert_remove": "Remove",
|
||||
"client_cert_remove_msg": "Client certificate is removed",
|
||||
"client_cert_subtitle": "Supports PKCS12 (.p12, .pfx) format only. Certificate Import/Remove is available only before login",
|
||||
"client_cert_title": "SSL Client Certificate",
|
||||
"common_add_to_album": "הוסף לאלבום",
|
||||
"common_change_password": "שנה סיסמה",
|
||||
"common_create_new_album": "צור אלבום חדש",
|
||||
"common_server_error": "נא לבדוק את חיבור הרשת שלך, תוודא/י שהשרת נגיש ושגרסאות אפליקציה/שרת תואמות",
|
||||
"common_shared": "משותף",
|
||||
"contextual_search": "Sunrise on the beach",
|
||||
"control_bottom_app_bar_add_to_album": "הוסף לאלבום",
|
||||
"control_bottom_app_bar_album_info": "{} פריטים",
|
||||
"control_bottom_app_bar_album_info_shared": "{} פריטים · משותפים",
|
||||
@@ -154,6 +166,7 @@
|
||||
"control_bottom_app_bar_delete": "מחק",
|
||||
"control_bottom_app_bar_delete_from_immich": "מחק מהשרת",
|
||||
"control_bottom_app_bar_delete_from_local": "מחק מהמכשיר",
|
||||
"control_bottom_app_bar_edit": "Edit",
|
||||
"control_bottom_app_bar_edit_location": "ערוך מיקום",
|
||||
"control_bottom_app_bar_edit_time": "ערוך תאריך & זמן",
|
||||
"control_bottom_app_bar_favorite": "הוסף למועדפים",
|
||||
@@ -203,6 +216,7 @@
|
||||
"experimental_settings_title": "נסיוני",
|
||||
"favorites_page_no_favorites": "לא נמצאו נכסים מועדפים",
|
||||
"favorites_page_title": "מועדפים",
|
||||
"filename_search": "File name or extension",
|
||||
"haptic_feedback_switch": "אפשר משוב ברטט",
|
||||
"haptic_feedback_title": "משוב ברטט",
|
||||
"header_settings_add_header_tip": "הוסף כותרת",
|
||||
@@ -230,6 +244,8 @@
|
||||
"image_viewer_page_state_provider_download_started": "ההורדה החלה",
|
||||
"image_viewer_page_state_provider_download_success": "הצלחת הורדה",
|
||||
"image_viewer_page_state_provider_share_error": "שיתוף שגיאה",
|
||||
"invalid_date": "Invalid date",
|
||||
"invalid_date_format": "Invalid date format",
|
||||
"library_page_albums": "אלבומים",
|
||||
"library_page_archive": "ארכיון",
|
||||
"library_page_device_albums": "אלבומים במכשיר",
|
||||
@@ -311,6 +327,7 @@
|
||||
"multiselect_grid_edit_date_time_err_read_only": "לא ניתן לערוך תאריך של נכס(ים) לקריאה בלבד, מדלג",
|
||||
"multiselect_grid_edit_gps_err_read_only": "לא ניתן לערוך מיקום של נכס(ים) לקריאה בלבד, מדלג",
|
||||
"no_assets_to_show": "אין נכסים להציג",
|
||||
"no_name": "No name",
|
||||
"notification_permission_dialog_cancel": "ביטול",
|
||||
"notification_permission_dialog_content": "כדי לאפשר התראות, לך להגדרות ובחר התר",
|
||||
"notification_permission_dialog_settings": "הגדרות",
|
||||
@@ -354,17 +371,30 @@
|
||||
"scaffold_body_error_occurred": "אירעה שגיאה",
|
||||
"search_bar_hint": "חפש/י בתמונות שלך",
|
||||
"search_filter_apply": "החל סינון",
|
||||
"search_filter_camera": "Camera",
|
||||
"search_filter_camera_make": "תוצרת",
|
||||
"search_filter_camera_model": "דגם",
|
||||
"search_filter_camera_title": "Select camera type",
|
||||
"search_filter_date": "Date",
|
||||
"search_filter_date_interval": "{start} to {end}",
|
||||
"search_filter_date_title": "Select a date range",
|
||||
"search_filter_display_option_archive": "ארכיון",
|
||||
"search_filter_display_option_favorite": "מועדף",
|
||||
"search_filter_display_option_not_in_album": "לא באלבום",
|
||||
"search_filter_display_options": "Display Options",
|
||||
"search_filter_display_options_title": "Display options",
|
||||
"search_filter_location": "Location",
|
||||
"search_filter_location_city": "עיר",
|
||||
"search_filter_location_country": "ארץ",
|
||||
"search_filter_location_state": "מדינה",
|
||||
"search_filter_location_title": "Select location",
|
||||
"search_filter_media_type": "Media Type",
|
||||
"search_filter_media_type_all": "הכל",
|
||||
"search_filter_media_type_image": "תמונה",
|
||||
"search_filter_media_type_title": "Select media type",
|
||||
"search_filter_media_type_video": "סרטון",
|
||||
"search_filter_people": "People",
|
||||
"search_filter_people_title": "Select people",
|
||||
"search_page_categories": "קטגוריות",
|
||||
"search_page_favorites": "מועדפים",
|
||||
"search_page_motion_photos": "תמונות עם תנועה",
|
||||
|
||||
@@ -3,6 +3,8 @@
|
||||
"action_common_cancel": "Cancel",
|
||||
"action_common_clear": "Clear",
|
||||
"action_common_confirm": "Confirm",
|
||||
"action_common_save": "Save",
|
||||
"action_common_select": "Select",
|
||||
"action_common_update": "Update",
|
||||
"add_to_album_bottom_sheet_added": "Added to {album}",
|
||||
"add_to_album_bottom_sheet_already_exists": "Already in {album}",
|
||||
@@ -141,11 +143,21 @@
|
||||
"change_password_form_new_password": "New Password",
|
||||
"change_password_form_password_mismatch": "Passwords do not match",
|
||||
"change_password_form_reenter_new_password": "Re-enter New Password",
|
||||
"client_cert_dialog_msg_confirm": "OK",
|
||||
"client_cert_enter_password": "Enter Password",
|
||||
"client_cert_import": "Import",
|
||||
"client_cert_import_success_msg": "Client certificate is imported",
|
||||
"client_cert_invalid_msg": "Invalid certificate file or wrong password",
|
||||
"client_cert_remove": "Remove",
|
||||
"client_cert_remove_msg": "Client certificate is removed",
|
||||
"client_cert_subtitle": "Supports PKCS12 (.p12, .pfx) format only. Certificate Import/Remove is available only before login",
|
||||
"client_cert_title": "SSL Client Certificate",
|
||||
"common_add_to_album": "Add to album",
|
||||
"common_change_password": "Change Password",
|
||||
"common_create_new_album": "Create new album",
|
||||
"common_server_error": "Please check your network connection, make sure the server is reachable and app/server versions are compatible.",
|
||||
"common_shared": "Shared",
|
||||
"contextual_search": "Sunrise on the beach",
|
||||
"control_bottom_app_bar_add_to_album": "Add to album",
|
||||
"control_bottom_app_bar_album_info": "{} items",
|
||||
"control_bottom_app_bar_album_info_shared": "{} items · Shared",
|
||||
@@ -154,6 +166,7 @@
|
||||
"control_bottom_app_bar_delete": "Delete",
|
||||
"control_bottom_app_bar_delete_from_immich": "Delete from Immich",
|
||||
"control_bottom_app_bar_delete_from_local": "Delete from device",
|
||||
"control_bottom_app_bar_edit": "Edit",
|
||||
"control_bottom_app_bar_edit_location": "Edit Location",
|
||||
"control_bottom_app_bar_edit_time": "Edit Date & Time",
|
||||
"control_bottom_app_bar_favorite": "Favorite",
|
||||
@@ -203,6 +216,7 @@
|
||||
"experimental_settings_title": "Experimental",
|
||||
"favorites_page_no_favorites": "No favorite assets found",
|
||||
"favorites_page_title": "Favorites",
|
||||
"filename_search": "File name or extension",
|
||||
"haptic_feedback_switch": "Enable haptic feedback",
|
||||
"haptic_feedback_title": "Haptic Feedback",
|
||||
"header_settings_add_header_tip": "Add Header",
|
||||
@@ -230,6 +244,8 @@
|
||||
"image_viewer_page_state_provider_download_started": "Download Started",
|
||||
"image_viewer_page_state_provider_download_success": "Download Success",
|
||||
"image_viewer_page_state_provider_share_error": "Share Error",
|
||||
"invalid_date": "Invalid date",
|
||||
"invalid_date_format": "Invalid date format",
|
||||
"library_page_albums": "Albums",
|
||||
"library_page_archive": "Archive",
|
||||
"library_page_device_albums": "Albums on Device",
|
||||
@@ -311,6 +327,7 @@
|
||||
"multiselect_grid_edit_date_time_err_read_only": "Cannot edit date of read only asset(s), skipping",
|
||||
"multiselect_grid_edit_gps_err_read_only": "Cannot edit location of read only asset(s), skipping",
|
||||
"no_assets_to_show": "No assets to show",
|
||||
"no_name": "No name",
|
||||
"notification_permission_dialog_cancel": "Cancel",
|
||||
"notification_permission_dialog_content": "To enable notifications, go to Settings and select allow.",
|
||||
"notification_permission_dialog_settings": "Settings",
|
||||
@@ -354,17 +371,30 @@
|
||||
"scaffold_body_error_occurred": "Error occurred",
|
||||
"search_bar_hint": "Search your photos",
|
||||
"search_filter_apply": "Apply filter",
|
||||
"search_filter_camera": "Camera",
|
||||
"search_filter_camera_make": "Make",
|
||||
"search_filter_camera_model": "Model",
|
||||
"search_filter_camera_title": "Select camera type",
|
||||
"search_filter_date": "Date",
|
||||
"search_filter_date_interval": "{start} to {end}",
|
||||
"search_filter_date_title": "Select a date range",
|
||||
"search_filter_display_option_archive": "Archive",
|
||||
"search_filter_display_option_favorite": "Favorite",
|
||||
"search_filter_display_option_not_in_album": "Not in album",
|
||||
"search_filter_display_options": "Display Options",
|
||||
"search_filter_display_options_title": "Display options",
|
||||
"search_filter_location": "Location",
|
||||
"search_filter_location_city": "City",
|
||||
"search_filter_location_country": "Country",
|
||||
"search_filter_location_state": "State",
|
||||
"search_filter_location_title": "Select location",
|
||||
"search_filter_media_type": "Media Type",
|
||||
"search_filter_media_type_all": "All",
|
||||
"search_filter_media_type_image": "Image",
|
||||
"search_filter_media_type_title": "Select media type",
|
||||
"search_filter_media_type_video": "Video",
|
||||
"search_filter_people": "People",
|
||||
"search_filter_people_title": "Select people",
|
||||
"search_page_categories": "Categories",
|
||||
"search_page_favorites": "Favorites",
|
||||
"search_page_motion_photos": "Motion Photos",
|
||||
|
||||
@@ -3,6 +3,8 @@
|
||||
"action_common_cancel": "Mégsem",
|
||||
"action_common_clear": "Kitöröl",
|
||||
"action_common_confirm": "Jóváhagy",
|
||||
"action_common_save": "Save",
|
||||
"action_common_select": "Select",
|
||||
"action_common_update": "Frissít",
|
||||
"add_to_album_bottom_sheet_added": "Hozzáadva a(z) \"{album}\" albumhoz",
|
||||
"add_to_album_bottom_sheet_already_exists": "Már benne van a(z) \"{album}\" albumban",
|
||||
@@ -141,11 +143,21 @@
|
||||
"change_password_form_new_password": "Új Jelszó",
|
||||
"change_password_form_password_mismatch": "A beírt jelszavak nem egyeznek",
|
||||
"change_password_form_reenter_new_password": "Jelszó (még egyszer)",
|
||||
"client_cert_dialog_msg_confirm": "OK",
|
||||
"client_cert_enter_password": "Enter Password",
|
||||
"client_cert_import": "Import",
|
||||
"client_cert_import_success_msg": "Client certificate is imported",
|
||||
"client_cert_invalid_msg": "Invalid certificate file or wrong password",
|
||||
"client_cert_remove": "Remove",
|
||||
"client_cert_remove_msg": "Client certificate is removed",
|
||||
"client_cert_subtitle": "Supports PKCS12 (.p12, .pfx) format only. Certificate Import/Remove is available only before login",
|
||||
"client_cert_title": "SSL Client Certificate",
|
||||
"common_add_to_album": "Albumhoz ad",
|
||||
"common_change_password": "Jelszócsere",
|
||||
"common_create_new_album": "Új album létrehozása",
|
||||
"common_server_error": "Kérjük, ellenőrizd a hálózati kapcsolatot, gondoskodj róla, hogy a szerver elérhető legyen, valamint az alkalmazás és a szerver kompatibilis verziójú legyen.",
|
||||
"common_shared": "Megosztva",
|
||||
"contextual_search": "Sunrise on the beach",
|
||||
"control_bottom_app_bar_add_to_album": "Albumhoz ad",
|
||||
"control_bottom_app_bar_album_info": "{} elem",
|
||||
"control_bottom_app_bar_album_info_shared": "{} elemek · Megosztva",
|
||||
@@ -154,6 +166,7 @@
|
||||
"control_bottom_app_bar_delete": "Törlés",
|
||||
"control_bottom_app_bar_delete_from_immich": "Törlés az Immich-ből",
|
||||
"control_bottom_app_bar_delete_from_local": "Törlés az eszközről",
|
||||
"control_bottom_app_bar_edit": "Edit",
|
||||
"control_bottom_app_bar_edit_location": "Hely Módosítása",
|
||||
"control_bottom_app_bar_edit_time": "Dátum és Idő Módosítása",
|
||||
"control_bottom_app_bar_favorite": "Kedvenc",
|
||||
@@ -203,6 +216,7 @@
|
||||
"experimental_settings_title": "Kísérleti",
|
||||
"favorites_page_no_favorites": "Nem található kedvencnek jelölt elem",
|
||||
"favorites_page_title": "Kedvencek",
|
||||
"filename_search": "File name or extension",
|
||||
"haptic_feedback_switch": "Rezgéses visszajelzés engedélyezése",
|
||||
"haptic_feedback_title": "Rezgéses Visszajelzés",
|
||||
"header_settings_add_header_tip": "Add Header",
|
||||
@@ -230,6 +244,8 @@
|
||||
"image_viewer_page_state_provider_download_started": "Letöltés Megkezdődött",
|
||||
"image_viewer_page_state_provider_download_success": "Letöltés Sikeres",
|
||||
"image_viewer_page_state_provider_share_error": "Megosztási Hiba",
|
||||
"invalid_date": "Invalid date",
|
||||
"invalid_date_format": "Invalid date format",
|
||||
"library_page_albums": "Albumok",
|
||||
"library_page_archive": "Archívum",
|
||||
"library_page_device_albums": "Albumok az Eszközön",
|
||||
@@ -311,6 +327,7 @@
|
||||
"multiselect_grid_edit_date_time_err_read_only": "Csak-olvasható elem(ek) dátuma nem módosítható, ezért kihagyjuk",
|
||||
"multiselect_grid_edit_gps_err_read_only": "Csak-olvasható elem(ek) helyszíne nem módosítható, ezért kihagyjuk",
|
||||
"no_assets_to_show": "Nincs megjeleníthető elem",
|
||||
"no_name": "No name",
|
||||
"notification_permission_dialog_cancel": "Mégsem",
|
||||
"notification_permission_dialog_content": "Az értesítések bekapcsolásához a Beállítások menüben válaszd ki az Engedélyezés-t.",
|
||||
"notification_permission_dialog_settings": "Beállítások",
|
||||
@@ -354,17 +371,30 @@
|
||||
"scaffold_body_error_occurred": "Hiba történt",
|
||||
"search_bar_hint": "Fotók keresése",
|
||||
"search_filter_apply": "Szűrő alkalmazása",
|
||||
"search_filter_camera": "Camera",
|
||||
"search_filter_camera_make": "Gyártó",
|
||||
"search_filter_camera_model": "Modell",
|
||||
"search_filter_camera_title": "Select camera type",
|
||||
"search_filter_date": "Date",
|
||||
"search_filter_date_interval": "{start} to {end}",
|
||||
"search_filter_date_title": "Select a date range",
|
||||
"search_filter_display_option_archive": "Archivált",
|
||||
"search_filter_display_option_favorite": "Kedvenc",
|
||||
"search_filter_display_option_not_in_album": "Nincs albumban",
|
||||
"search_filter_display_options": "Display Options",
|
||||
"search_filter_display_options_title": "Display options",
|
||||
"search_filter_location": "Location",
|
||||
"search_filter_location_city": "Város",
|
||||
"search_filter_location_country": "Ország",
|
||||
"search_filter_location_state": "Állam",
|
||||
"search_filter_location_title": "Select location",
|
||||
"search_filter_media_type": "Media Type",
|
||||
"search_filter_media_type_all": "Összes",
|
||||
"search_filter_media_type_image": "Kép",
|
||||
"search_filter_media_type_title": "Select media type",
|
||||
"search_filter_media_type_video": "Videó",
|
||||
"search_filter_people": "People",
|
||||
"search_filter_people_title": "Select people",
|
||||
"search_page_categories": "Kategóriák",
|
||||
"search_page_favorites": "Kedvencek",
|
||||
"search_page_motion_photos": "Mozgó Fotók",
|
||||
|
||||
@@ -3,6 +3,8 @@
|
||||
"action_common_cancel": "Annulla",
|
||||
"action_common_clear": "Pulisci",
|
||||
"action_common_confirm": "Conferma",
|
||||
"action_common_save": "Save",
|
||||
"action_common_select": "Select",
|
||||
"action_common_update": "Aggiorna",
|
||||
"add_to_album_bottom_sheet_added": "Aggiunto in {album}",
|
||||
"add_to_album_bottom_sheet_already_exists": "Già presente in {album}",
|
||||
@@ -141,11 +143,21 @@
|
||||
"change_password_form_new_password": "Nuova Password",
|
||||
"change_password_form_password_mismatch": "Le password non coincidono",
|
||||
"change_password_form_reenter_new_password": "Inserisci ancora la nuova password ",
|
||||
"client_cert_dialog_msg_confirm": "OK",
|
||||
"client_cert_enter_password": "Enter Password",
|
||||
"client_cert_import": "Import",
|
||||
"client_cert_import_success_msg": "Client certificate is imported",
|
||||
"client_cert_invalid_msg": "Invalid certificate file or wrong password",
|
||||
"client_cert_remove": "Remove",
|
||||
"client_cert_remove_msg": "Client certificate is removed",
|
||||
"client_cert_subtitle": "Supports PKCS12 (.p12, .pfx) format only. Certificate Import/Remove is available only before login",
|
||||
"client_cert_title": "SSL Client Certificate",
|
||||
"common_add_to_album": "Aggiungi all'album",
|
||||
"common_change_password": "Cambia Password",
|
||||
"common_create_new_album": "Crea nuovo Album",
|
||||
"common_server_error": "Si prega di controllare la connessione network, che il server sia raggiungibile e che le versione del server e app sono gli stessi",
|
||||
"common_shared": "Condivisi",
|
||||
"contextual_search": "Sunrise on the beach",
|
||||
"control_bottom_app_bar_add_to_album": "Aggiungi all'album",
|
||||
"control_bottom_app_bar_album_info": "{} elementi",
|
||||
"control_bottom_app_bar_album_info_shared": "{} elementi · Condivisi",
|
||||
@@ -154,6 +166,7 @@
|
||||
"control_bottom_app_bar_delete": "Elimina",
|
||||
"control_bottom_app_bar_delete_from_immich": "Elimina da Immich",
|
||||
"control_bottom_app_bar_delete_from_local": "Elimina dal dispositivo",
|
||||
"control_bottom_app_bar_edit": "Edit",
|
||||
"control_bottom_app_bar_edit_location": "Modifica posizione",
|
||||
"control_bottom_app_bar_edit_time": "Modifica data e ora",
|
||||
"control_bottom_app_bar_favorite": "Preferito",
|
||||
@@ -203,6 +216,7 @@
|
||||
"experimental_settings_title": "Sperimentale",
|
||||
"favorites_page_no_favorites": "Nessun preferito",
|
||||
"favorites_page_title": "Preferiti",
|
||||
"filename_search": "File name or extension",
|
||||
"haptic_feedback_switch": "Abilita feedback aptico",
|
||||
"haptic_feedback_title": "Feedback aptico",
|
||||
"header_settings_add_header_tip": "Add Header",
|
||||
@@ -230,6 +244,8 @@
|
||||
"image_viewer_page_state_provider_download_started": "Download Started",
|
||||
"image_viewer_page_state_provider_download_success": "Download con successo",
|
||||
"image_viewer_page_state_provider_share_error": "Errore di condivisione",
|
||||
"invalid_date": "Invalid date",
|
||||
"invalid_date_format": "Invalid date format",
|
||||
"library_page_albums": "Album",
|
||||
"library_page_archive": "Archivia",
|
||||
"library_page_device_albums": "Album sul dispositivo",
|
||||
@@ -311,6 +327,7 @@
|
||||
"multiselect_grid_edit_date_time_err_read_only": "Non puoi modificare la data di risorse in sola lettura, azione ignorata",
|
||||
"multiselect_grid_edit_gps_err_read_only": "Non puoi modificare la posizione di risorse in sola lettura, azione ignorata",
|
||||
"no_assets_to_show": "Nessuna risorsa da mostrare",
|
||||
"no_name": "No name",
|
||||
"notification_permission_dialog_cancel": "Annulla",
|
||||
"notification_permission_dialog_content": "Per attivare le notifiche, vai alle Impostazioni e seleziona concedi",
|
||||
"notification_permission_dialog_settings": "Impostazioni",
|
||||
@@ -354,17 +371,30 @@
|
||||
"scaffold_body_error_occurred": "Si è verificato un errore.",
|
||||
"search_bar_hint": "Cerca le tue foto",
|
||||
"search_filter_apply": "Applica filtro",
|
||||
"search_filter_camera": "Camera",
|
||||
"search_filter_camera_make": "Produttore",
|
||||
"search_filter_camera_model": "Modello",
|
||||
"search_filter_camera_title": "Select camera type",
|
||||
"search_filter_date": "Date",
|
||||
"search_filter_date_interval": "{start} to {end}",
|
||||
"search_filter_date_title": "Select a date range",
|
||||
"search_filter_display_option_archive": "Archivia",
|
||||
"search_filter_display_option_favorite": "Preferito",
|
||||
"search_filter_display_option_not_in_album": "Non nell'album",
|
||||
"search_filter_display_options": "Display Options",
|
||||
"search_filter_display_options_title": "Display options",
|
||||
"search_filter_location": "Location",
|
||||
"search_filter_location_city": "Città",
|
||||
"search_filter_location_country": "Nazione",
|
||||
"search_filter_location_state": "Provincia",
|
||||
"search_filter_location_title": "Select location",
|
||||
"search_filter_media_type": "Media Type",
|
||||
"search_filter_media_type_all": "Tutto",
|
||||
"search_filter_media_type_image": "Immagine",
|
||||
"search_filter_media_type_title": "Select media type",
|
||||
"search_filter_media_type_video": "VIdeo",
|
||||
"search_filter_people": "People",
|
||||
"search_filter_people_title": "Select people",
|
||||
"search_page_categories": "Categoria",
|
||||
"search_page_favorites": "Preferiti",
|
||||
"search_page_motion_photos": "Foto in movimento",
|
||||
|
||||
@@ -3,6 +3,8 @@
|
||||
"action_common_cancel": "キャンセル",
|
||||
"action_common_clear": "クリア",
|
||||
"action_common_confirm": "了解",
|
||||
"action_common_save": "Save",
|
||||
"action_common_select": "Select",
|
||||
"action_common_update": "更新",
|
||||
"add_to_album_bottom_sheet_added": "{album}に追加",
|
||||
"add_to_album_bottom_sheet_already_exists": "{album}に追加済み",
|
||||
@@ -141,11 +143,21 @@
|
||||
"change_password_form_new_password": "新しいパスワード",
|
||||
"change_password_form_password_mismatch": "パスワードが一致しません",
|
||||
"change_password_form_reenter_new_password": "再度パスワードを入力してください",
|
||||
"client_cert_dialog_msg_confirm": "OK",
|
||||
"client_cert_enter_password": "Enter Password",
|
||||
"client_cert_import": "Import",
|
||||
"client_cert_import_success_msg": "Client certificate is imported",
|
||||
"client_cert_invalid_msg": "Invalid certificate file or wrong password",
|
||||
"client_cert_remove": "Remove",
|
||||
"client_cert_remove_msg": "Client certificate is removed",
|
||||
"client_cert_subtitle": "Supports PKCS12 (.p12, .pfx) format only. Certificate Import/Remove is available only before login",
|
||||
"client_cert_title": "SSL Client Certificate",
|
||||
"common_add_to_album": "アルバムに追加",
|
||||
"common_change_password": "パスワードを変更",
|
||||
"common_create_new_album": "アルバムを作成",
|
||||
"common_server_error": "ネットワーク接続を確認し、サーバーが接続できる状態にあるか確認してください。アプリとサーバーのバージョンが一致しているかも確認してください。",
|
||||
"common_shared": "共有済み",
|
||||
"contextual_search": "Sunrise on the beach",
|
||||
"control_bottom_app_bar_add_to_album": "アルバムに追加",
|
||||
"control_bottom_app_bar_album_info": "{}枚",
|
||||
"control_bottom_app_bar_album_info_shared": "{}枚 · 共有済",
|
||||
@@ -154,6 +166,7 @@
|
||||
"control_bottom_app_bar_delete": "削除",
|
||||
"control_bottom_app_bar_delete_from_immich": "Immichから削除",
|
||||
"control_bottom_app_bar_delete_from_local": "デバイスから削除",
|
||||
"control_bottom_app_bar_edit": "Edit",
|
||||
"control_bottom_app_bar_edit_location": "位置情報を編集",
|
||||
"control_bottom_app_bar_edit_time": "日時を変更",
|
||||
"control_bottom_app_bar_favorite": "お気に入り",
|
||||
@@ -203,6 +216,7 @@
|
||||
"experimental_settings_title": "試験的機能",
|
||||
"favorites_page_no_favorites": "お気に入り登録された写真またはビデオがありません",
|
||||
"favorites_page_title": "お気に入り",
|
||||
"filename_search": "File name or extension",
|
||||
"haptic_feedback_switch": "ハプティックフィードバック",
|
||||
"haptic_feedback_title": "ハプティックフィードバックを有効にする",
|
||||
"header_settings_add_header_tip": "Add Header",
|
||||
@@ -230,6 +244,8 @@
|
||||
"image_viewer_page_state_provider_download_started": "ダウンロードが始まります",
|
||||
"image_viewer_page_state_provider_download_success": "ダウンロード成功",
|
||||
"image_viewer_page_state_provider_share_error": "共有エラー",
|
||||
"invalid_date": "Invalid date",
|
||||
"invalid_date_format": "Invalid date format",
|
||||
"library_page_albums": "アルバム",
|
||||
"library_page_archive": "アーカイブ",
|
||||
"library_page_device_albums": "デバイス上のアルバム",
|
||||
@@ -311,6 +327,7 @@
|
||||
"multiselect_grid_edit_date_time_err_read_only": "読み取り専用の項目の日付を変更できません",
|
||||
"multiselect_grid_edit_gps_err_read_only": "読み取り専用の項目の位置情報を変更できません",
|
||||
"no_assets_to_show": "表示する項目がありません",
|
||||
"no_name": "No name",
|
||||
"notification_permission_dialog_cancel": "キャンセル",
|
||||
"notification_permission_dialog_content": "通知を許可するには設定を開いてオンにしてください",
|
||||
"notification_permission_dialog_settings": "設定",
|
||||
@@ -354,17 +371,30 @@
|
||||
"scaffold_body_error_occurred": "エラーが発生しました",
|
||||
"search_bar_hint": "写真を検索",
|
||||
"search_filter_apply": "フィルターを適用する",
|
||||
"search_filter_camera": "Camera",
|
||||
"search_filter_camera_make": "メーカー",
|
||||
"search_filter_camera_model": "モデル",
|
||||
"search_filter_camera_title": "Select camera type",
|
||||
"search_filter_date": "Date",
|
||||
"search_filter_date_interval": "{start} to {end}",
|
||||
"search_filter_date_title": "Select a date range",
|
||||
"search_filter_display_option_archive": "アーカイブ",
|
||||
"search_filter_display_option_favorite": "お気に入り",
|
||||
"search_filter_display_option_not_in_album": "アルバムにありません",
|
||||
"search_filter_display_options": "Display Options",
|
||||
"search_filter_display_options_title": "Display options",
|
||||
"search_filter_location": "Location",
|
||||
"search_filter_location_city": "市町村",
|
||||
"search_filter_location_country": "国",
|
||||
"search_filter_location_state": "都道府県",
|
||||
"search_filter_location_title": "Select location",
|
||||
"search_filter_media_type": "Media Type",
|
||||
"search_filter_media_type_all": "すべて",
|
||||
"search_filter_media_type_image": "写真",
|
||||
"search_filter_media_type_title": "Select media type",
|
||||
"search_filter_media_type_video": "動画",
|
||||
"search_filter_people": "People",
|
||||
"search_filter_people_title": "Select people",
|
||||
"search_page_categories": "カテゴリ",
|
||||
"search_page_favorites": "お気に入り",
|
||||
"search_page_motion_photos": "モーションフォト",
|
||||
|
||||
@@ -3,6 +3,8 @@
|
||||
"action_common_cancel": "취소",
|
||||
"action_common_clear": "지우기",
|
||||
"action_common_confirm": "확인",
|
||||
"action_common_save": "저장",
|
||||
"action_common_select": "선택",
|
||||
"action_common_update": "업데이트",
|
||||
"add_to_album_bottom_sheet_added": "{album}에 추가되었습니다.",
|
||||
"add_to_album_bottom_sheet_already_exists": "{album}에 이미 존재하는 항목입니다.",
|
||||
@@ -141,11 +143,21 @@
|
||||
"change_password_form_new_password": "새 비밀번호 입력",
|
||||
"change_password_form_password_mismatch": "비밀번호가 일치하지 않습니다.",
|
||||
"change_password_form_reenter_new_password": "새 비밀번호 확인",
|
||||
"client_cert_dialog_msg_confirm": "확인",
|
||||
"client_cert_enter_password": "비밀번호 입력",
|
||||
"client_cert_import": "가져오기",
|
||||
"client_cert_import_success_msg": "클라이언트 인증서를 가져왔습니다.",
|
||||
"client_cert_invalid_msg": "올바르지 않은 인증서이거나 비밀번호가 일치하지 않습니다.",
|
||||
"client_cert_remove": "제거",
|
||||
"client_cert_remove_msg": "클라이언트 인증서가 제거되었습니다.",
|
||||
"client_cert_subtitle": "인증서 가져오기/제거는 로그인 전에만 가능합니다. PKCS12 (.p12, .pfx) 형식을 지원합니다.",
|
||||
"client_cert_title": "SSL 클라이언트 인증서",
|
||||
"common_add_to_album": "앨범에 추가",
|
||||
"common_change_password": "비밀번호 변경",
|
||||
"common_create_new_album": "앨범 생성",
|
||||
"common_server_error": "네트워크 연결 상태를 확인하고, 서버에 접속할 수 있는지, 앱/서버 버전이 호환되는지 확인해주세요.",
|
||||
"common_shared": "공유됨",
|
||||
"contextual_search": "동해안에서 맞이하는 새해 일출",
|
||||
"control_bottom_app_bar_add_to_album": "앨범에 추가",
|
||||
"control_bottom_app_bar_album_info": "{}개 항목",
|
||||
"control_bottom_app_bar_album_info_shared": "{}개 항목 · 공유됨",
|
||||
@@ -154,6 +166,7 @@
|
||||
"control_bottom_app_bar_delete": "삭제",
|
||||
"control_bottom_app_bar_delete_from_immich": "Immich에서 삭제",
|
||||
"control_bottom_app_bar_delete_from_local": "기기에서 삭제",
|
||||
"control_bottom_app_bar_edit": "편집",
|
||||
"control_bottom_app_bar_edit_location": "위치 편집",
|
||||
"control_bottom_app_bar_edit_time": "날짜 및 시간 변경",
|
||||
"control_bottom_app_bar_favorite": "즐겨찾기",
|
||||
@@ -203,6 +216,7 @@
|
||||
"experimental_settings_title": "실험적",
|
||||
"favorites_page_no_favorites": "즐겨찾기된 항목 없음",
|
||||
"favorites_page_title": "즐겨찾기",
|
||||
"filename_search": "파일 이름 또는 확장자",
|
||||
"haptic_feedback_switch": "햅틱 피드백 활성화",
|
||||
"haptic_feedback_title": "햅틱 피드백",
|
||||
"header_settings_add_header_tip": "헤더 추가",
|
||||
@@ -230,6 +244,8 @@
|
||||
"image_viewer_page_state_provider_download_started": "다운로드 시작됨",
|
||||
"image_viewer_page_state_provider_download_success": "다운로드 완료",
|
||||
"image_viewer_page_state_provider_share_error": "공유 오류",
|
||||
"invalid_date": "올바르지 않은 날짜입니다.",
|
||||
"invalid_date_format": "올바르지 않은 날짜 형식입니다.",
|
||||
"library_page_albums": "앨범",
|
||||
"library_page_archive": "보관함",
|
||||
"library_page_device_albums": "기기의 앨범",
|
||||
@@ -311,6 +327,7 @@
|
||||
"multiselect_grid_edit_date_time_err_read_only": "읽기 전용 항목의 날짜는 변경할 수 없습니다. 건너뜁니다.",
|
||||
"multiselect_grid_edit_gps_err_read_only": "읽기 전용 항목의 위치는 변경할 수 없습니다. 건너뜁니다.",
|
||||
"no_assets_to_show": "표시할 항목 없음",
|
||||
"no_name": "이름 없음",
|
||||
"notification_permission_dialog_cancel": "취소",
|
||||
"notification_permission_dialog_content": "알림을 활성화하려면 설정에서 알림 권한을 허용하세요.",
|
||||
"notification_permission_dialog_settings": "설정",
|
||||
@@ -354,17 +371,30 @@
|
||||
"scaffold_body_error_occurred": "문제가 발생했습니다.",
|
||||
"search_bar_hint": "사진 검색",
|
||||
"search_filter_apply": "필터 적용",
|
||||
"search_filter_camera": "카메라",
|
||||
"search_filter_camera_make": "제조사",
|
||||
"search_filter_camera_model": "모델명",
|
||||
"search_filter_camera_title": "카메라 종류 선택",
|
||||
"search_filter_date": "날짜\n",
|
||||
"search_filter_date_interval": "{start}에서 {end} 까지",
|
||||
"search_filter_date_title": "날짜 범위 선택\n",
|
||||
"search_filter_display_option_archive": "보관함",
|
||||
"search_filter_display_option_favorite": "즐겨찾기",
|
||||
"search_filter_display_option_not_in_album": "앨범에 없음",
|
||||
"search_filter_display_options": "표시 옵션",
|
||||
"search_filter_display_options_title": "표시 옵션",
|
||||
"search_filter_location": "위치",
|
||||
"search_filter_location_city": "도시",
|
||||
"search_filter_location_country": "국가",
|
||||
"search_filter_location_state": "지역",
|
||||
"search_filter_location_title": "위치 선택",
|
||||
"search_filter_media_type": "미디어 종류",
|
||||
"search_filter_media_type_all": "모두",
|
||||
"search_filter_media_type_image": "이미지",
|
||||
"search_filter_media_type_title": "미디어 종류 선택",
|
||||
"search_filter_media_type_video": "동영상",
|
||||
"search_filter_people": "인물",
|
||||
"search_filter_people_title": "인물 선택",
|
||||
"search_page_categories": "분류",
|
||||
"search_page_favorites": "즐겨찾기",
|
||||
"search_page_motion_photos": "모션 포토",
|
||||
|
||||
@@ -3,6 +3,8 @@
|
||||
"action_common_cancel": "Cancel",
|
||||
"action_common_clear": "Clear",
|
||||
"action_common_confirm": "Confirm",
|
||||
"action_common_save": "Save",
|
||||
"action_common_select": "Select",
|
||||
"action_common_update": "Update",
|
||||
"add_to_album_bottom_sheet_added": "Added to {album}",
|
||||
"add_to_album_bottom_sheet_already_exists": "Already in {album}",
|
||||
@@ -141,11 +143,21 @@
|
||||
"change_password_form_new_password": "New Password",
|
||||
"change_password_form_password_mismatch": "Passwords do not match",
|
||||
"change_password_form_reenter_new_password": "Re-enter New Password",
|
||||
"client_cert_dialog_msg_confirm": "OK",
|
||||
"client_cert_enter_password": "Enter Password",
|
||||
"client_cert_import": "Import",
|
||||
"client_cert_import_success_msg": "Client certificate is imported",
|
||||
"client_cert_invalid_msg": "Invalid certificate file or wrong password",
|
||||
"client_cert_remove": "Remove",
|
||||
"client_cert_remove_msg": "Client certificate is removed",
|
||||
"client_cert_subtitle": "Supports PKCS12 (.p12, .pfx) format only. Certificate Import/Remove is available only before login",
|
||||
"client_cert_title": "SSL Client Certificate",
|
||||
"common_add_to_album": "Add to album",
|
||||
"common_change_password": "Change Password",
|
||||
"common_create_new_album": "Create new album",
|
||||
"common_server_error": "Please check your network connection, make sure the server is reachable and app/server versions are compatible.",
|
||||
"common_shared": "Shared",
|
||||
"contextual_search": "Sunrise on the beach",
|
||||
"control_bottom_app_bar_add_to_album": "Add to album",
|
||||
"control_bottom_app_bar_album_info": "{} items",
|
||||
"control_bottom_app_bar_album_info_shared": "{} items · Shared",
|
||||
@@ -154,6 +166,7 @@
|
||||
"control_bottom_app_bar_delete": "Delete",
|
||||
"control_bottom_app_bar_delete_from_immich": "Delete from Immich",
|
||||
"control_bottom_app_bar_delete_from_local": "Delete from device",
|
||||
"control_bottom_app_bar_edit": "Edit",
|
||||
"control_bottom_app_bar_edit_location": "Edit Location",
|
||||
"control_bottom_app_bar_edit_time": "Edit Date & Time",
|
||||
"control_bottom_app_bar_favorite": "Favorite",
|
||||
@@ -203,6 +216,7 @@
|
||||
"experimental_settings_title": "Experimental",
|
||||
"favorites_page_no_favorites": "No favorite assets found",
|
||||
"favorites_page_title": "Favorites",
|
||||
"filename_search": "File name or extension",
|
||||
"haptic_feedback_switch": "Enable haptic feedback",
|
||||
"haptic_feedback_title": "Haptic Feedback",
|
||||
"header_settings_add_header_tip": "Add Header",
|
||||
@@ -230,6 +244,8 @@
|
||||
"image_viewer_page_state_provider_download_started": "Download Started",
|
||||
"image_viewer_page_state_provider_download_success": "Download Success",
|
||||
"image_viewer_page_state_provider_share_error": "Share Error",
|
||||
"invalid_date": "Invalid date",
|
||||
"invalid_date_format": "Invalid date format",
|
||||
"library_page_albums": "Albums",
|
||||
"library_page_archive": "Archive",
|
||||
"library_page_device_albums": "Albums on Device",
|
||||
@@ -311,6 +327,7 @@
|
||||
"multiselect_grid_edit_date_time_err_read_only": "Cannot edit date of read only asset(s), skipping",
|
||||
"multiselect_grid_edit_gps_err_read_only": "Cannot edit location of read only asset(s), skipping",
|
||||
"no_assets_to_show": "No assets to show",
|
||||
"no_name": "No name",
|
||||
"notification_permission_dialog_cancel": "Cancel",
|
||||
"notification_permission_dialog_content": "To enable notifications, go to Settings and select allow.",
|
||||
"notification_permission_dialog_settings": "Settings",
|
||||
@@ -354,17 +371,30 @@
|
||||
"scaffold_body_error_occurred": "Error occurred",
|
||||
"search_bar_hint": "Search your photos",
|
||||
"search_filter_apply": "Apply filter",
|
||||
"search_filter_camera": "Camera",
|
||||
"search_filter_camera_make": "Make",
|
||||
"search_filter_camera_model": "Model",
|
||||
"search_filter_camera_title": "Select camera type",
|
||||
"search_filter_date": "Date",
|
||||
"search_filter_date_interval": "{start} to {end}",
|
||||
"search_filter_date_title": "Select a date range",
|
||||
"search_filter_display_option_archive": "Archive",
|
||||
"search_filter_display_option_favorite": "Favorite",
|
||||
"search_filter_display_option_not_in_album": "Not in album",
|
||||
"search_filter_display_options": "Display Options",
|
||||
"search_filter_display_options_title": "Display options",
|
||||
"search_filter_location": "Location",
|
||||
"search_filter_location_city": "City",
|
||||
"search_filter_location_country": "Country",
|
||||
"search_filter_location_state": "State",
|
||||
"search_filter_location_title": "Select location",
|
||||
"search_filter_media_type": "Media Type",
|
||||
"search_filter_media_type_all": "All",
|
||||
"search_filter_media_type_image": "Image",
|
||||
"search_filter_media_type_title": "Select media type",
|
||||
"search_filter_media_type_video": "Video",
|
||||
"search_filter_people": "People",
|
||||
"search_filter_people_title": "Select people",
|
||||
"search_page_categories": "Categories",
|
||||
"search_page_favorites": "Favorites",
|
||||
"search_page_motion_photos": "Motion Photos",
|
||||
|
||||
@@ -3,6 +3,8 @@
|
||||
"action_common_cancel": "Atcelt",
|
||||
"action_common_clear": "Notīrīt",
|
||||
"action_common_confirm": "Apstiprināt",
|
||||
"action_common_save": "Save",
|
||||
"action_common_select": "Select",
|
||||
"action_common_update": "Atjaunināt",
|
||||
"add_to_album_bottom_sheet_added": "Pievienots {album}",
|
||||
"add_to_album_bottom_sheet_already_exists": "Jau pievienots {album}",
|
||||
@@ -141,11 +143,21 @@
|
||||
"change_password_form_new_password": "Jauna Parole",
|
||||
"change_password_form_password_mismatch": "Paroles nesakrīt",
|
||||
"change_password_form_reenter_new_password": "Atkārtoti ievadīt jaunu paroli",
|
||||
"client_cert_dialog_msg_confirm": "OK",
|
||||
"client_cert_enter_password": "Enter Password",
|
||||
"client_cert_import": "Import",
|
||||
"client_cert_import_success_msg": "Client certificate is imported",
|
||||
"client_cert_invalid_msg": "Invalid certificate file or wrong password",
|
||||
"client_cert_remove": "Remove",
|
||||
"client_cert_remove_msg": "Client certificate is removed",
|
||||
"client_cert_subtitle": "Supports PKCS12 (.p12, .pfx) format only. Certificate Import/Remove is available only before login",
|
||||
"client_cert_title": "SSL Client Certificate",
|
||||
"common_add_to_album": "Pievienot albumam",
|
||||
"common_change_password": "Nomainīt Paroli",
|
||||
"common_create_new_album": "Izveidot jaunu albumu",
|
||||
"common_server_error": "Lūdzu, pārbaudiet tīkla savienojumu, pārliecinieties, vai serveris ir sasniedzams un aplikācijas/servera versijas ir saderīgas.",
|
||||
"common_shared": "Kopīgots",
|
||||
"contextual_search": "Sunrise on the beach",
|
||||
"control_bottom_app_bar_add_to_album": "Pievienot albumam",
|
||||
"control_bottom_app_bar_album_info": "{} vienumi",
|
||||
"control_bottom_app_bar_album_info_shared": "{} vienumi · Koplietoti",
|
||||
@@ -154,6 +166,7 @@
|
||||
"control_bottom_app_bar_delete": "Dzēst",
|
||||
"control_bottom_app_bar_delete_from_immich": "Dzēst no Immich",
|
||||
"control_bottom_app_bar_delete_from_local": "Dzēst no ierīces",
|
||||
"control_bottom_app_bar_edit": "Edit",
|
||||
"control_bottom_app_bar_edit_location": "Rediģēt Atrašanās Vietu",
|
||||
"control_bottom_app_bar_edit_time": "Rediģēt Datumu un Laiku",
|
||||
"control_bottom_app_bar_favorite": "Izlase",
|
||||
@@ -203,6 +216,7 @@
|
||||
"experimental_settings_title": "Eksperimentāls",
|
||||
"favorites_page_no_favorites": "Nav atrasti iecienītākie aktīvi",
|
||||
"favorites_page_title": "Izlase",
|
||||
"filename_search": "File name or extension",
|
||||
"haptic_feedback_switch": "Iestatīt haptisku reakciju",
|
||||
"haptic_feedback_title": "Haptiska Reakcija",
|
||||
"header_settings_add_header_tip": "Add Header",
|
||||
@@ -230,6 +244,8 @@
|
||||
"image_viewer_page_state_provider_download_started": "Lejupielāde Uzsākta",
|
||||
"image_viewer_page_state_provider_download_success": "Lejupielāde Izdevās",
|
||||
"image_viewer_page_state_provider_share_error": "Kopīgošanas Kļūda",
|
||||
"invalid_date": "Invalid date",
|
||||
"invalid_date_format": "Invalid date format",
|
||||
"library_page_albums": "Albums",
|
||||
"library_page_archive": "Arhīvs",
|
||||
"library_page_device_albums": "Albumi ierīcē",
|
||||
@@ -311,6 +327,7 @@
|
||||
"multiselect_grid_edit_date_time_err_read_only": "Nevar rediģēt read only aktīva(-u) datumu, notiek izlaišana",
|
||||
"multiselect_grid_edit_gps_err_read_only": "Nevar rediģēt atrašanās vietu read only aktīva(-u) datumu, notiek izlaišana",
|
||||
"no_assets_to_show": "Nav uzrādāmo aktīvu",
|
||||
"no_name": "No name",
|
||||
"notification_permission_dialog_cancel": "Atcelt",
|
||||
"notification_permission_dialog_content": "Lai iespējotu paziņojumus, atveriet Iestatījumi un atlasiet Atļaut.",
|
||||
"notification_permission_dialog_settings": "Iestatījumi",
|
||||
@@ -354,17 +371,30 @@
|
||||
"scaffold_body_error_occurred": "Radās kļūda",
|
||||
"search_bar_hint": "Meklēt Jūsu fotoattēlus",
|
||||
"search_filter_apply": "Lietot filtru",
|
||||
"search_filter_camera": "Camera",
|
||||
"search_filter_camera_make": "Firma",
|
||||
"search_filter_camera_model": "Modelis",
|
||||
"search_filter_camera_title": "Select camera type",
|
||||
"search_filter_date": "Date",
|
||||
"search_filter_date_interval": "{start} to {end}",
|
||||
"search_filter_date_title": "Select a date range",
|
||||
"search_filter_display_option_archive": "Arhīvs",
|
||||
"search_filter_display_option_favorite": "Izlase",
|
||||
"search_filter_display_option_not_in_album": "Nav albumā",
|
||||
"search_filter_display_options": "Display Options",
|
||||
"search_filter_display_options_title": "Display options",
|
||||
"search_filter_location": "Location",
|
||||
"search_filter_location_city": "Pilsēta",
|
||||
"search_filter_location_country": "Valsts",
|
||||
"search_filter_location_state": "Štats",
|
||||
"search_filter_location_title": "Select location",
|
||||
"search_filter_media_type": "Media Type",
|
||||
"search_filter_media_type_all": "Viss",
|
||||
"search_filter_media_type_image": "Attēls",
|
||||
"search_filter_media_type_title": "Select media type",
|
||||
"search_filter_media_type_video": "Videoklips",
|
||||
"search_filter_people": "People",
|
||||
"search_filter_people_title": "Select people",
|
||||
"search_page_categories": "Kategorijas",
|
||||
"search_page_favorites": "Izlase",
|
||||
"search_page_motion_photos": "Kustību Fotoattēli",
|
||||
|
||||
@@ -3,6 +3,8 @@
|
||||
"action_common_cancel": "Cancel",
|
||||
"action_common_clear": "Clear",
|
||||
"action_common_confirm": "Confirm",
|
||||
"action_common_save": "Save",
|
||||
"action_common_select": "Select",
|
||||
"action_common_update": "Update",
|
||||
"add_to_album_bottom_sheet_added": "Added to {album}",
|
||||
"add_to_album_bottom_sheet_already_exists": "Already in {album}",
|
||||
@@ -141,11 +143,21 @@
|
||||
"change_password_form_new_password": "New Password",
|
||||
"change_password_form_password_mismatch": "Passwords do not match",
|
||||
"change_password_form_reenter_new_password": "Re-enter New Password",
|
||||
"client_cert_dialog_msg_confirm": "OK",
|
||||
"client_cert_enter_password": "Enter Password",
|
||||
"client_cert_import": "Import",
|
||||
"client_cert_import_success_msg": "Client certificate is imported",
|
||||
"client_cert_invalid_msg": "Invalid certificate file or wrong password",
|
||||
"client_cert_remove": "Remove",
|
||||
"client_cert_remove_msg": "Client certificate is removed",
|
||||
"client_cert_subtitle": "Supports PKCS12 (.p12, .pfx) format only. Certificate Import/Remove is available only before login",
|
||||
"client_cert_title": "SSL Client Certificate",
|
||||
"common_add_to_album": "Add to album",
|
||||
"common_change_password": "Change Password",
|
||||
"common_create_new_album": "Create new album",
|
||||
"common_server_error": "Please check your network connection, make sure the server is reachable and app/server versions are compatible.",
|
||||
"common_shared": "Shared",
|
||||
"contextual_search": "Sunrise on the beach",
|
||||
"control_bottom_app_bar_add_to_album": "Add to album",
|
||||
"control_bottom_app_bar_album_info": "{} items",
|
||||
"control_bottom_app_bar_album_info_shared": "{} items · Shared",
|
||||
@@ -154,6 +166,7 @@
|
||||
"control_bottom_app_bar_delete": "Delete",
|
||||
"control_bottom_app_bar_delete_from_immich": "Delete from Immich",
|
||||
"control_bottom_app_bar_delete_from_local": "Delete from device",
|
||||
"control_bottom_app_bar_edit": "Edit",
|
||||
"control_bottom_app_bar_edit_location": "Edit Location",
|
||||
"control_bottom_app_bar_edit_time": "Edit Date & Time",
|
||||
"control_bottom_app_bar_favorite": "Favorite",
|
||||
@@ -203,6 +216,7 @@
|
||||
"experimental_settings_title": "Experimental",
|
||||
"favorites_page_no_favorites": "No favorite assets found",
|
||||
"favorites_page_title": "Favorites",
|
||||
"filename_search": "File name or extension",
|
||||
"haptic_feedback_switch": "Enable haptic feedback",
|
||||
"haptic_feedback_title": "Haptic Feedback",
|
||||
"header_settings_add_header_tip": "Add Header",
|
||||
@@ -230,6 +244,8 @@
|
||||
"image_viewer_page_state_provider_download_started": "Download Started",
|
||||
"image_viewer_page_state_provider_download_success": "Download Success",
|
||||
"image_viewer_page_state_provider_share_error": "Share Error",
|
||||
"invalid_date": "Invalid date",
|
||||
"invalid_date_format": "Invalid date format",
|
||||
"library_page_albums": "Albums",
|
||||
"library_page_archive": "Archive",
|
||||
"library_page_device_albums": "Albums on Device",
|
||||
@@ -311,6 +327,7 @@
|
||||
"multiselect_grid_edit_date_time_err_read_only": "Cannot edit date of read only asset(s), skipping",
|
||||
"multiselect_grid_edit_gps_err_read_only": "Cannot edit location of read only asset(s), skipping",
|
||||
"no_assets_to_show": "No assets to show",
|
||||
"no_name": "No name",
|
||||
"notification_permission_dialog_cancel": "Цуцлах",
|
||||
"notification_permission_dialog_content": "To enable notifications, go to Settings and select allow.",
|
||||
"notification_permission_dialog_settings": "Тохиргоо",
|
||||
@@ -354,17 +371,30 @@
|
||||
"scaffold_body_error_occurred": "Error occurred",
|
||||
"search_bar_hint": "Search your photos",
|
||||
"search_filter_apply": "Apply filter",
|
||||
"search_filter_camera": "Camera",
|
||||
"search_filter_camera_make": "Make",
|
||||
"search_filter_camera_model": "Model",
|
||||
"search_filter_camera_title": "Select camera type",
|
||||
"search_filter_date": "Date",
|
||||
"search_filter_date_interval": "{start} to {end}",
|
||||
"search_filter_date_title": "Select a date range",
|
||||
"search_filter_display_option_archive": "Archive",
|
||||
"search_filter_display_option_favorite": "Favorite",
|
||||
"search_filter_display_option_not_in_album": "Not in album",
|
||||
"search_filter_display_options": "Display Options",
|
||||
"search_filter_display_options_title": "Display options",
|
||||
"search_filter_location": "Location",
|
||||
"search_filter_location_city": "City",
|
||||
"search_filter_location_country": "Country",
|
||||
"search_filter_location_state": "State",
|
||||
"search_filter_location_title": "Select location",
|
||||
"search_filter_media_type": "Media Type",
|
||||
"search_filter_media_type_all": "All",
|
||||
"search_filter_media_type_image": "Image",
|
||||
"search_filter_media_type_title": "Select media type",
|
||||
"search_filter_media_type_video": "Video",
|
||||
"search_filter_people": "People",
|
||||
"search_filter_people_title": "Select people",
|
||||
"search_page_categories": "Categories",
|
||||
"search_page_favorites": "Favorites",
|
||||
"search_page_motion_photos": "Motion Photos",
|
||||
|
||||
@@ -3,6 +3,8 @@
|
||||
"action_common_cancel": "Avbryt",
|
||||
"action_common_clear": "Tøm",
|
||||
"action_common_confirm": "Bekreft",
|
||||
"action_common_save": "Save",
|
||||
"action_common_select": "Select",
|
||||
"action_common_update": "Oppdater",
|
||||
"add_to_album_bottom_sheet_added": "Lagt til i {album}",
|
||||
"add_to_album_bottom_sheet_already_exists": "Allerede i {album}",
|
||||
@@ -141,11 +143,21 @@
|
||||
"change_password_form_new_password": "Nytt passord",
|
||||
"change_password_form_password_mismatch": "Passordene stemmer ikke",
|
||||
"change_password_form_reenter_new_password": "Skriv nytt passord igjen",
|
||||
"client_cert_dialog_msg_confirm": "OK",
|
||||
"client_cert_enter_password": "Enter Password",
|
||||
"client_cert_import": "Import",
|
||||
"client_cert_import_success_msg": "Client certificate is imported",
|
||||
"client_cert_invalid_msg": "Invalid certificate file or wrong password",
|
||||
"client_cert_remove": "Remove",
|
||||
"client_cert_remove_msg": "Client certificate is removed",
|
||||
"client_cert_subtitle": "Supports PKCS12 (.p12, .pfx) format only. Certificate Import/Remove is available only before login",
|
||||
"client_cert_title": "SSL Client Certificate",
|
||||
"common_add_to_album": "Legg til i album",
|
||||
"common_change_password": "Endre passord",
|
||||
"common_create_new_album": "Lag nytt album",
|
||||
"common_server_error": "Sjekk nettverkstilkoblingen din, forsikre deg om at serveren er mulig å nå, og at app-/server-versjonene er kompatible.",
|
||||
"common_shared": "Delt",
|
||||
"contextual_search": "Sunrise on the beach",
|
||||
"control_bottom_app_bar_add_to_album": "Legg til i album",
|
||||
"control_bottom_app_bar_album_info": "{} objekter",
|
||||
"control_bottom_app_bar_album_info_shared": "{} objekter · Delt",
|
||||
@@ -154,6 +166,7 @@
|
||||
"control_bottom_app_bar_delete": "Slett",
|
||||
"control_bottom_app_bar_delete_from_immich": "Slett fra Immich",
|
||||
"control_bottom_app_bar_delete_from_local": "Slett fra enhet",
|
||||
"control_bottom_app_bar_edit": "Edit",
|
||||
"control_bottom_app_bar_edit_location": "Endre lokasjon",
|
||||
"control_bottom_app_bar_edit_time": "Endre Dato og tid",
|
||||
"control_bottom_app_bar_favorite": "Favoritt",
|
||||
@@ -203,6 +216,7 @@
|
||||
"experimental_settings_title": "Eksperimentelt",
|
||||
"favorites_page_no_favorites": "Ingen favorittobjekter funnet",
|
||||
"favorites_page_title": "Favoritter",
|
||||
"filename_search": "File name or extension",
|
||||
"haptic_feedback_switch": "Aktivert haptisk tilbakemelding",
|
||||
"haptic_feedback_title": "Haptisk tilbakemelding",
|
||||
"header_settings_add_header_tip": "Legg til header",
|
||||
@@ -230,6 +244,8 @@
|
||||
"image_viewer_page_state_provider_download_started": "Nedlasting startet",
|
||||
"image_viewer_page_state_provider_download_success": "Nedlasting vellykket",
|
||||
"image_viewer_page_state_provider_share_error": "Delingsfeil",
|
||||
"invalid_date": "Invalid date",
|
||||
"invalid_date_format": "Invalid date format",
|
||||
"library_page_albums": "Albumer",
|
||||
"library_page_archive": "Arkiv",
|
||||
"library_page_device_albums": "Albumer på enheten",
|
||||
@@ -311,6 +327,7 @@
|
||||
"multiselect_grid_edit_date_time_err_read_only": "Kan ikke endre dato på objekt(er) med kun lese-rettigheter, hopper over",
|
||||
"multiselect_grid_edit_gps_err_read_only": "Kan ikke endre lokasjon på objekt(er) med kun lese-rettigheter, hopper over",
|
||||
"no_assets_to_show": "Ingen objekter å vise",
|
||||
"no_name": "No name",
|
||||
"notification_permission_dialog_cancel": "Avbryt",
|
||||
"notification_permission_dialog_content": "For å aktivere notifikasjoner, gå til Innstillinger og velg tillat.",
|
||||
"notification_permission_dialog_settings": "Innstillinger",
|
||||
@@ -354,17 +371,30 @@
|
||||
"scaffold_body_error_occurred": "Feil oppstått",
|
||||
"search_bar_hint": "Søk i dine bilder",
|
||||
"search_filter_apply": "Aktiver filter",
|
||||
"search_filter_camera": "Camera",
|
||||
"search_filter_camera_make": "Merke",
|
||||
"search_filter_camera_model": "Modell",
|
||||
"search_filter_camera_title": "Select camera type",
|
||||
"search_filter_date": "Date",
|
||||
"search_filter_date_interval": "{start} to {end}",
|
||||
"search_filter_date_title": "Select a date range",
|
||||
"search_filter_display_option_archive": "Arkiver",
|
||||
"search_filter_display_option_favorite": "Favoritt",
|
||||
"search_filter_display_option_not_in_album": "Ikke i album",
|
||||
"search_filter_display_options": "Display Options",
|
||||
"search_filter_display_options_title": "Display options",
|
||||
"search_filter_location": "Location",
|
||||
"search_filter_location_city": "By",
|
||||
"search_filter_location_country": "Land",
|
||||
"search_filter_location_state": "Fylke",
|
||||
"search_filter_location_title": "Select location",
|
||||
"search_filter_media_type": "Media Type",
|
||||
"search_filter_media_type_all": "Alle",
|
||||
"search_filter_media_type_image": "Bilde",
|
||||
"search_filter_media_type_title": "Select media type",
|
||||
"search_filter_media_type_video": "Video",
|
||||
"search_filter_people": "People",
|
||||
"search_filter_people_title": "Select people",
|
||||
"search_page_categories": "Kategorier",
|
||||
"search_page_favorites": "Favoritter",
|
||||
"search_page_motion_photos": "Bevegelige bilder",
|
||||
|
||||
@@ -3,6 +3,8 @@
|
||||
"action_common_cancel": "Annuleren",
|
||||
"action_common_clear": "Resetten",
|
||||
"action_common_confirm": "Bevestigen",
|
||||
"action_common_save": "Opslaan",
|
||||
"action_common_select": "Selecteren",
|
||||
"action_common_update": "Bijwerken",
|
||||
"add_to_album_bottom_sheet_added": "Toegevoegd aan {album}",
|
||||
"add_to_album_bottom_sheet_already_exists": "Staat al in {album}",
|
||||
@@ -32,7 +34,7 @@
|
||||
"album_viewer_appbar_share_err_title": "Albumtitel wijzigen mislukt",
|
||||
"album_viewer_appbar_share_leave": "Verlaat album",
|
||||
"album_viewer_appbar_share_remove": "Verwijder uit album",
|
||||
"album_viewer_appbar_share_to": "Delen met",
|
||||
"album_viewer_appbar_share_to": "Delen via",
|
||||
"album_viewer_page_share_add_users": "Gebruikers toevoegen",
|
||||
"all_people_page_title": "Mensen",
|
||||
"all_videos_page_title": "Video's",
|
||||
@@ -141,11 +143,21 @@
|
||||
"change_password_form_new_password": "Nieuw wachtwoord",
|
||||
"change_password_form_password_mismatch": "Wachtwoorden komen niet overeen",
|
||||
"change_password_form_reenter_new_password": "Vul het wachtwoord opnieuw in",
|
||||
"client_cert_dialog_msg_confirm": "Ok",
|
||||
"client_cert_enter_password": "Voer wachtwoord in",
|
||||
"client_cert_import": "Importeren",
|
||||
"client_cert_import_success_msg": "Clientcertificaat is geïmporteerd",
|
||||
"client_cert_invalid_msg": "Ongeldig certificaatbestand of verkeerd wachtwoord",
|
||||
"client_cert_remove": "Verwijderen",
|
||||
"client_cert_remove_msg": "Clientcertificaat is verwijderd",
|
||||
"client_cert_subtitle": "Ondersteunt alleen PKCS12 (.p12, .pfx) formaat. Certificaat importeren/verwijderen is alleen beschikbaar vóór het inloggen",
|
||||
"client_cert_title": "SSL clientcertificaat",
|
||||
"common_add_to_album": "Aan album toevoegen",
|
||||
"common_change_password": "Wachtwoord wijzigen",
|
||||
"common_create_new_album": "Nieuw album maken",
|
||||
"common_server_error": "Controleer je netwerkverbinding, zorg ervoor dat de server bereikbaar is en de app/server versies compatibel zijn.",
|
||||
"common_shared": "Gedeeld",
|
||||
"contextual_search": "Zonsopkomst op het strand",
|
||||
"control_bottom_app_bar_add_to_album": "Aan album toevoegen",
|
||||
"control_bottom_app_bar_album_info": "{} items",
|
||||
"control_bottom_app_bar_album_info_shared": "{} items · Gedeeld",
|
||||
@@ -154,6 +166,7 @@
|
||||
"control_bottom_app_bar_delete": "Verwijderen",
|
||||
"control_bottom_app_bar_delete_from_immich": "Verwijderen van Immich",
|
||||
"control_bottom_app_bar_delete_from_local": "Verwijderen van apparaat",
|
||||
"control_bottom_app_bar_edit": "Bewerken",
|
||||
"control_bottom_app_bar_edit_location": "Locatie bewerken",
|
||||
"control_bottom_app_bar_edit_time": "Datum & tijd bewerken",
|
||||
"control_bottom_app_bar_favorite": "Favoriet",
|
||||
@@ -203,6 +216,7 @@
|
||||
"experimental_settings_title": "Experimenteel",
|
||||
"favorites_page_no_favorites": "Geen favoriete assets gevonden",
|
||||
"favorites_page_title": "Favorieten",
|
||||
"filename_search": "Bestandsnaam of extensie",
|
||||
"haptic_feedback_switch": "Aanraaktrillingen inschakelen",
|
||||
"haptic_feedback_title": "Aanraaktrillingen",
|
||||
"header_settings_add_header_tip": "Header toevoegen",
|
||||
@@ -230,6 +244,8 @@
|
||||
"image_viewer_page_state_provider_download_started": "Download gestart",
|
||||
"image_viewer_page_state_provider_download_success": "Download succesvol",
|
||||
"image_viewer_page_state_provider_share_error": "Deel Error",
|
||||
"invalid_date": "Ongeldige datum",
|
||||
"invalid_date_format": "Ongeldig datumformaat",
|
||||
"library_page_albums": "Albums",
|
||||
"library_page_archive": "Archief",
|
||||
"library_page_device_albums": "Albums op apparaat",
|
||||
@@ -311,6 +327,7 @@
|
||||
"multiselect_grid_edit_date_time_err_read_only": "Kan datum van alleen-lezen asset(s) niet wijzigen, overslaan",
|
||||
"multiselect_grid_edit_gps_err_read_only": "Kan locatie van alleen-lezen asset(s) niet wijzigen, overslaan",
|
||||
"no_assets_to_show": "Geen foto's om te laten zien",
|
||||
"no_name": "Geen naam",
|
||||
"notification_permission_dialog_cancel": "Annuleren",
|
||||
"notification_permission_dialog_content": "Om meldingen in te schakelen, ga naar Instellingen en selecteer toestaan.",
|
||||
"notification_permission_dialog_settings": "Instellingen",
|
||||
@@ -354,17 +371,30 @@
|
||||
"scaffold_body_error_occurred": "Fout opgetreden",
|
||||
"search_bar_hint": "Foto's doorzoeken",
|
||||
"search_filter_apply": "Filter toepassen",
|
||||
"search_filter_camera": "Camera",
|
||||
"search_filter_camera_make": "Merk",
|
||||
"search_filter_camera_model": "Model",
|
||||
"search_filter_camera_title": "Selecteer cameratype",
|
||||
"search_filter_date": "Datum",
|
||||
"search_filter_date_interval": "{start} tot {end}",
|
||||
"search_filter_date_title": "Selecteer datumbereik",
|
||||
"search_filter_display_option_archive": "Archief",
|
||||
"search_filter_display_option_favorite": "Favoriet",
|
||||
"search_filter_display_option_not_in_album": "Niet in album",
|
||||
"search_filter_display_options": "Weergaveopties",
|
||||
"search_filter_display_options_title": "Weergaveopties",
|
||||
"search_filter_location": "Locatie",
|
||||
"search_filter_location_city": "Stad",
|
||||
"search_filter_location_country": "Land",
|
||||
"search_filter_location_state": "Status",
|
||||
"search_filter_location_title": "Selecteer locatie",
|
||||
"search_filter_media_type": "Mediatype",
|
||||
"search_filter_media_type_all": "Alle",
|
||||
"search_filter_media_type_image": "Afbeelding",
|
||||
"search_filter_media_type_title": "Selecteer mediatype",
|
||||
"search_filter_media_type_video": "Video",
|
||||
"search_filter_people": "Mensen",
|
||||
"search_filter_people_title": "Selecteer mensen",
|
||||
"search_page_categories": "Categorieën",
|
||||
"search_page_favorites": "Favorieten",
|
||||
"search_page_motion_photos": "Bewegende foto's",
|
||||
|
||||
@@ -3,6 +3,8 @@
|
||||
"action_common_cancel": "Anuluj",
|
||||
"action_common_clear": "Wyrzuść",
|
||||
"action_common_confirm": "Potwierdzać",
|
||||
"action_common_save": "Save",
|
||||
"action_common_select": "Select",
|
||||
"action_common_update": "Aktualizuj",
|
||||
"add_to_album_bottom_sheet_added": "Dodano do {album}",
|
||||
"add_to_album_bottom_sheet_already_exists": "Już w {album}",
|
||||
@@ -141,11 +143,21 @@
|
||||
"change_password_form_new_password": "Nowe Hasło",
|
||||
"change_password_form_password_mismatch": "Hasła nie są zgodne",
|
||||
"change_password_form_reenter_new_password": "Wprowadź ponownie Nowe Hasło",
|
||||
"client_cert_dialog_msg_confirm": "OK",
|
||||
"client_cert_enter_password": "Enter Password",
|
||||
"client_cert_import": "Import",
|
||||
"client_cert_import_success_msg": "Client certificate is imported",
|
||||
"client_cert_invalid_msg": "Invalid certificate file or wrong password",
|
||||
"client_cert_remove": "Remove",
|
||||
"client_cert_remove_msg": "Client certificate is removed",
|
||||
"client_cert_subtitle": "Supports PKCS12 (.p12, .pfx) format only. Certificate Import/Remove is available only before login",
|
||||
"client_cert_title": "SSL Client Certificate",
|
||||
"common_add_to_album": "Dodaj do albumu",
|
||||
"common_change_password": "Zmień Hasło",
|
||||
"common_create_new_album": "Utwórz nowy album",
|
||||
"common_server_error": "Sprawdź połączenie sieciowe, upewnij się, że serwer jest osiągalny i wersje aplikacji/serwera są kompatybilne.",
|
||||
"common_shared": "Udostępnione",
|
||||
"contextual_search": "Sunrise on the beach",
|
||||
"control_bottom_app_bar_add_to_album": "Dodaj do albumu",
|
||||
"control_bottom_app_bar_album_info": "{} pozycji",
|
||||
"control_bottom_app_bar_album_info_shared": "{} pozycji · Udostępnionych",
|
||||
@@ -154,6 +166,7 @@
|
||||
"control_bottom_app_bar_delete": "Usuń",
|
||||
"control_bottom_app_bar_delete_from_immich": "Usuń z Immicha",
|
||||
"control_bottom_app_bar_delete_from_local": "Usuń z urządzenia",
|
||||
"control_bottom_app_bar_edit": "Edit",
|
||||
"control_bottom_app_bar_edit_location": "Edytuj lokalizację",
|
||||
"control_bottom_app_bar_edit_time": "Edytuj datę i godzinę",
|
||||
"control_bottom_app_bar_favorite": "Ulubione",
|
||||
@@ -203,6 +216,7 @@
|
||||
"experimental_settings_title": "Eksperymentalny",
|
||||
"favorites_page_no_favorites": "Nie znaleziono ulubionych zasobów",
|
||||
"favorites_page_title": "Ulubione",
|
||||
"filename_search": "File name or extension",
|
||||
"haptic_feedback_switch": "Enable haptic feedback",
|
||||
"haptic_feedback_title": "Haptic Feedback",
|
||||
"header_settings_add_header_tip": "Dodaj nagłówek",
|
||||
@@ -230,6 +244,8 @@
|
||||
"image_viewer_page_state_provider_download_started": "Pobieranie rozpoczęte",
|
||||
"image_viewer_page_state_provider_download_success": "Pobieranie zakończone",
|
||||
"image_viewer_page_state_provider_share_error": "Udostępnij błąd",
|
||||
"invalid_date": "Invalid date",
|
||||
"invalid_date_format": "Invalid date format",
|
||||
"library_page_albums": "Albumy",
|
||||
"library_page_archive": "Archiwum",
|
||||
"library_page_device_albums": "Albumy na Urządzeniu",
|
||||
@@ -311,6 +327,7 @@
|
||||
"multiselect_grid_edit_date_time_err_read_only": "Nie można edytować daty zasobów tylko do odczytu, pomijanie",
|
||||
"multiselect_grid_edit_gps_err_read_only": "Nie można edytować lokalizacji zasobów tylko do odczytu, pomijanie",
|
||||
"no_assets_to_show": "Brak zasobów do pokazania",
|
||||
"no_name": "No name",
|
||||
"notification_permission_dialog_cancel": "Anuluj",
|
||||
"notification_permission_dialog_content": "Aby włączyć powiadomienia, przejdź do Ustawień i wybierz opcję Zezwalaj.",
|
||||
"notification_permission_dialog_settings": "Ustawienia",
|
||||
@@ -354,17 +371,30 @@
|
||||
"scaffold_body_error_occurred": "Wystąpił błąd",
|
||||
"search_bar_hint": "Szukaj swoich zdjęć",
|
||||
"search_filter_apply": "Zastosuj filtr",
|
||||
"search_filter_camera": "Camera",
|
||||
"search_filter_camera_make": "Make",
|
||||
"search_filter_camera_model": "Model",
|
||||
"search_filter_camera_title": "Select camera type",
|
||||
"search_filter_date": "Date",
|
||||
"search_filter_date_interval": "{start} to {end}",
|
||||
"search_filter_date_title": "Select a date range",
|
||||
"search_filter_display_option_archive": "Archiwum",
|
||||
"search_filter_display_option_favorite": "Ulubiony",
|
||||
"search_filter_display_option_not_in_album": "Nie w albumie",
|
||||
"search_filter_display_options": "Display Options",
|
||||
"search_filter_display_options_title": "Display options",
|
||||
"search_filter_location": "Location",
|
||||
"search_filter_location_city": "Miasto",
|
||||
"search_filter_location_country": "Kraj",
|
||||
"search_filter_location_state": "State",
|
||||
"search_filter_location_title": "Select location",
|
||||
"search_filter_media_type": "Media Type",
|
||||
"search_filter_media_type_all": "Wszystko",
|
||||
"search_filter_media_type_image": "Obrazy",
|
||||
"search_filter_media_type_title": "Select media type",
|
||||
"search_filter_media_type_video": "Filmy",
|
||||
"search_filter_people": "People",
|
||||
"search_filter_people_title": "Select people",
|
||||
"search_page_categories": "Kategorie",
|
||||
"search_page_favorites": "Ulubione",
|
||||
"search_page_motion_photos": "Zdjęcia ruchome",
|
||||
|
||||
@@ -3,6 +3,8 @@
|
||||
"action_common_cancel": "Cancelar",
|
||||
"action_common_clear": "Clear",
|
||||
"action_common_confirm": "Confirm",
|
||||
"action_common_save": "Save",
|
||||
"action_common_select": "Select",
|
||||
"action_common_update": "Atualizar",
|
||||
"add_to_album_bottom_sheet_added": "Adicionar a {album}",
|
||||
"add_to_album_bottom_sheet_already_exists": "Já pertence a {album}",
|
||||
@@ -141,11 +143,21 @@
|
||||
"change_password_form_new_password": "Nova senha",
|
||||
"change_password_form_password_mismatch": "As senhas não coincidem",
|
||||
"change_password_form_reenter_new_password": "Re-introduza a nova senha",
|
||||
"client_cert_dialog_msg_confirm": "OK",
|
||||
"client_cert_enter_password": "Enter Password",
|
||||
"client_cert_import": "Import",
|
||||
"client_cert_import_success_msg": "Client certificate is imported",
|
||||
"client_cert_invalid_msg": "Invalid certificate file or wrong password",
|
||||
"client_cert_remove": "Remove",
|
||||
"client_cert_remove_msg": "Client certificate is removed",
|
||||
"client_cert_subtitle": "Supports PKCS12 (.p12, .pfx) format only. Certificate Import/Remove is available only before login",
|
||||
"client_cert_title": "SSL Client Certificate",
|
||||
"common_add_to_album": "Adicionar ao álbum",
|
||||
"common_change_password": "Mudar a senha",
|
||||
"common_create_new_album": "Criar novo álbum",
|
||||
"common_server_error": "Verifique a sua ligação de rede, certifique-se de que o servidor está acessível e de que as versões da aplicação/servidor são compatíveis.",
|
||||
"common_shared": "Partilhado",
|
||||
"contextual_search": "Sunrise on the beach",
|
||||
"control_bottom_app_bar_add_to_album": "Adicionar ao álbum",
|
||||
"control_bottom_app_bar_album_info": "{} itens",
|
||||
"control_bottom_app_bar_album_info_shared": "{} itens · Partilhado",
|
||||
@@ -154,6 +166,7 @@
|
||||
"control_bottom_app_bar_delete": "Deletar",
|
||||
"control_bottom_app_bar_delete_from_immich": "Apagar do Immich",
|
||||
"control_bottom_app_bar_delete_from_local": "Apagar do dispositivo",
|
||||
"control_bottom_app_bar_edit": "Edit",
|
||||
"control_bottom_app_bar_edit_location": "Editar Localização",
|
||||
"control_bottom_app_bar_edit_time": "Editar Data & Hora",
|
||||
"control_bottom_app_bar_favorite": "Favorito",
|
||||
@@ -203,6 +216,7 @@
|
||||
"experimental_settings_title": "Experimental",
|
||||
"favorites_page_no_favorites": "Nenhum recurso favorito encontrado",
|
||||
"favorites_page_title": "Favoritos",
|
||||
"filename_search": "File name or extension",
|
||||
"haptic_feedback_switch": "Enable haptic feedback",
|
||||
"haptic_feedback_title": "Haptic Feedback",
|
||||
"header_settings_add_header_tip": "Add Header",
|
||||
@@ -230,6 +244,8 @@
|
||||
"image_viewer_page_state_provider_download_started": "Download Started",
|
||||
"image_viewer_page_state_provider_download_success": "Descarregado",
|
||||
"image_viewer_page_state_provider_share_error": "Erro ao partilhar",
|
||||
"invalid_date": "Invalid date",
|
||||
"invalid_date_format": "Invalid date format",
|
||||
"library_page_albums": "Álbuns",
|
||||
"library_page_archive": "Arquivo",
|
||||
"library_page_device_albums": "Álbuns no dispositivo",
|
||||
@@ -311,6 +327,7 @@
|
||||
"multiselect_grid_edit_date_time_err_read_only": "Não é possível editar a data de recurso(s) só de leitura, ignorando",
|
||||
"multiselect_grid_edit_gps_err_read_only": "Não é possível editar a localização de recurso(s) só de leitura, ignorando",
|
||||
"no_assets_to_show": "No assets to show",
|
||||
"no_name": "No name",
|
||||
"notification_permission_dialog_cancel": "Cancelar",
|
||||
"notification_permission_dialog_content": "Para ativar as notificações, vá a Definições e selecione permitir.",
|
||||
"notification_permission_dialog_settings": "Definições",
|
||||
@@ -354,17 +371,30 @@
|
||||
"scaffold_body_error_occurred": "Ocorreu um erro",
|
||||
"search_bar_hint": "Busque suas fotos",
|
||||
"search_filter_apply": "Apply filter",
|
||||
"search_filter_camera": "Camera",
|
||||
"search_filter_camera_make": "Make",
|
||||
"search_filter_camera_model": "Model",
|
||||
"search_filter_camera_title": "Select camera type",
|
||||
"search_filter_date": "Date",
|
||||
"search_filter_date_interval": "{start} to {end}",
|
||||
"search_filter_date_title": "Select a date range",
|
||||
"search_filter_display_option_archive": "Archive",
|
||||
"search_filter_display_option_favorite": "Favorite",
|
||||
"search_filter_display_option_not_in_album": "Not in album",
|
||||
"search_filter_display_options": "Display Options",
|
||||
"search_filter_display_options_title": "Display options",
|
||||
"search_filter_location": "Location",
|
||||
"search_filter_location_city": "City",
|
||||
"search_filter_location_country": "Country",
|
||||
"search_filter_location_state": "State",
|
||||
"search_filter_location_title": "Select location",
|
||||
"search_filter_media_type": "Media Type",
|
||||
"search_filter_media_type_all": "All",
|
||||
"search_filter_media_type_image": "Image",
|
||||
"search_filter_media_type_title": "Select media type",
|
||||
"search_filter_media_type_video": "Video",
|
||||
"search_filter_people": "People",
|
||||
"search_filter_people_title": "Select people",
|
||||
"search_page_categories": "Categorias",
|
||||
"search_page_favorites": "Favoritos",
|
||||
"search_page_motion_photos": "Fotos com movimento",
|
||||
|
||||
@@ -3,6 +3,8 @@
|
||||
"action_common_cancel": "Anulează",
|
||||
"action_common_clear": "Clear",
|
||||
"action_common_confirm": "Confirm",
|
||||
"action_common_save": "Save",
|
||||
"action_common_select": "Select",
|
||||
"action_common_update": "Actualizează",
|
||||
"add_to_album_bottom_sheet_added": "Adăugat în {album}",
|
||||
"add_to_album_bottom_sheet_already_exists": "Deja în {album}",
|
||||
@@ -141,11 +143,21 @@
|
||||
"change_password_form_new_password": "Parolă nouă",
|
||||
"change_password_form_password_mismatch": "Parolele nu se potrivesc",
|
||||
"change_password_form_reenter_new_password": "Reintrodu noua parolă",
|
||||
"client_cert_dialog_msg_confirm": "OK",
|
||||
"client_cert_enter_password": "Enter Password",
|
||||
"client_cert_import": "Import",
|
||||
"client_cert_import_success_msg": "Client certificate is imported",
|
||||
"client_cert_invalid_msg": "Invalid certificate file or wrong password",
|
||||
"client_cert_remove": "Remove",
|
||||
"client_cert_remove_msg": "Client certificate is removed",
|
||||
"client_cert_subtitle": "Supports PKCS12 (.p12, .pfx) format only. Certificate Import/Remove is available only before login",
|
||||
"client_cert_title": "SSL Client Certificate",
|
||||
"common_add_to_album": "Adaugă în album",
|
||||
"common_change_password": "Schimbă parola",
|
||||
"common_create_new_album": "Creează album nou",
|
||||
"common_server_error": "Te rugăm să verifici conexiunea la rețea, asigura-te că server-ul este accesibil și că versiunile aplicației/server-ului sunt compatibile.",
|
||||
"common_shared": "Distribuit",
|
||||
"contextual_search": "Sunrise on the beach",
|
||||
"control_bottom_app_bar_add_to_album": "Adaugă în album",
|
||||
"control_bottom_app_bar_album_info": "{} elemente",
|
||||
"control_bottom_app_bar_album_info_shared": "{} elemente · Distribuite",
|
||||
@@ -154,6 +166,7 @@
|
||||
"control_bottom_app_bar_delete": "Șterge",
|
||||
"control_bottom_app_bar_delete_from_immich": "Șterge din Immich",
|
||||
"control_bottom_app_bar_delete_from_local": "Șterge din dispozitiv",
|
||||
"control_bottom_app_bar_edit": "Edit",
|
||||
"control_bottom_app_bar_edit_location": "Editează locație",
|
||||
"control_bottom_app_bar_edit_time": "Editează Data și Ora",
|
||||
"control_bottom_app_bar_favorite": "Favorite",
|
||||
@@ -203,6 +216,7 @@
|
||||
"experimental_settings_title": "Experimental",
|
||||
"favorites_page_no_favorites": "Nu au fost găsite resurse favorite",
|
||||
"favorites_page_title": "Favorite",
|
||||
"filename_search": "File name or extension",
|
||||
"haptic_feedback_switch": "Enable haptic feedback",
|
||||
"haptic_feedback_title": "Haptic Feedback",
|
||||
"header_settings_add_header_tip": "Add Header",
|
||||
@@ -230,6 +244,8 @@
|
||||
"image_viewer_page_state_provider_download_started": "Download Started",
|
||||
"image_viewer_page_state_provider_download_success": "Descărcare cu succes",
|
||||
"image_viewer_page_state_provider_share_error": "Eroare distribuire",
|
||||
"invalid_date": "Invalid date",
|
||||
"invalid_date_format": "Invalid date format",
|
||||
"library_page_albums": "Albume",
|
||||
"library_page_archive": "Arhivă",
|
||||
"library_page_device_albums": "Albume în dispozitiv",
|
||||
@@ -311,6 +327,7 @@
|
||||
"multiselect_grid_edit_date_time_err_read_only": "Nu se poate edita data fișierului(lor) cu permisiuni doar pentru citire, omitere",
|
||||
"multiselect_grid_edit_gps_err_read_only": "Nu se poate edita locația fișierului(lor) cu permisiuni doar pentru citire, omitere",
|
||||
"no_assets_to_show": "No assets to show",
|
||||
"no_name": "No name",
|
||||
"notification_permission_dialog_cancel": "Anulează",
|
||||
"notification_permission_dialog_content": "Pentru a activa notificările, mergi în Setări > Immich și selectează permite.",
|
||||
"notification_permission_dialog_settings": "Setări",
|
||||
@@ -354,17 +371,30 @@
|
||||
"scaffold_body_error_occurred": "A apărut o eroare",
|
||||
"search_bar_hint": "Căutare fotografii",
|
||||
"search_filter_apply": "Apply filter",
|
||||
"search_filter_camera": "Camera",
|
||||
"search_filter_camera_make": "Make",
|
||||
"search_filter_camera_model": "Model",
|
||||
"search_filter_camera_title": "Select camera type",
|
||||
"search_filter_date": "Date",
|
||||
"search_filter_date_interval": "{start} to {end}",
|
||||
"search_filter_date_title": "Select a date range",
|
||||
"search_filter_display_option_archive": "Archive",
|
||||
"search_filter_display_option_favorite": "Favorite",
|
||||
"search_filter_display_option_not_in_album": "Not in album",
|
||||
"search_filter_display_options": "Display Options",
|
||||
"search_filter_display_options_title": "Display options",
|
||||
"search_filter_location": "Location",
|
||||
"search_filter_location_city": "City",
|
||||
"search_filter_location_country": "Country",
|
||||
"search_filter_location_state": "State",
|
||||
"search_filter_location_title": "Select location",
|
||||
"search_filter_media_type": "Media Type",
|
||||
"search_filter_media_type_all": "All",
|
||||
"search_filter_media_type_image": "Image",
|
||||
"search_filter_media_type_title": "Select media type",
|
||||
"search_filter_media_type_video": "Video",
|
||||
"search_filter_people": "People",
|
||||
"search_filter_people_title": "Select people",
|
||||
"search_page_categories": "Categorii",
|
||||
"search_page_favorites": "Favorite",
|
||||
"search_page_motion_photos": "Fotografii în mișcare",
|
||||
|
||||
@@ -3,6 +3,8 @@
|
||||
"action_common_cancel": "Отмена",
|
||||
"action_common_clear": "Очистить",
|
||||
"action_common_confirm": "Подтвердить",
|
||||
"action_common_save": "Save",
|
||||
"action_common_select": "Select",
|
||||
"action_common_update": "Обновить",
|
||||
"add_to_album_bottom_sheet_added": "Добавлено в {album}",
|
||||
"add_to_album_bottom_sheet_already_exists": "Уже в {album}",
|
||||
@@ -141,11 +143,21 @@
|
||||
"change_password_form_new_password": "Новый пароль",
|
||||
"change_password_form_password_mismatch": "Пароли не совпадают",
|
||||
"change_password_form_reenter_new_password": "Повторно введите новый пароль",
|
||||
"client_cert_dialog_msg_confirm": "OK",
|
||||
"client_cert_enter_password": "Enter Password",
|
||||
"client_cert_import": "Import",
|
||||
"client_cert_import_success_msg": "Client certificate is imported",
|
||||
"client_cert_invalid_msg": "Invalid certificate file or wrong password",
|
||||
"client_cert_remove": "Remove",
|
||||
"client_cert_remove_msg": "Client certificate is removed",
|
||||
"client_cert_subtitle": "Supports PKCS12 (.p12, .pfx) format only. Certificate Import/Remove is available only before login",
|
||||
"client_cert_title": "SSL Client Certificate",
|
||||
"common_add_to_album": "Добавить в альбом",
|
||||
"common_change_password": "Изменить пароль",
|
||||
"common_create_new_album": "Создать новый альбом",
|
||||
"common_server_error": "Пожалуйста, проверьте подключение к сети и убедитесь, что ваш сервер доступен, а версии приложения и сервера — совместимы.",
|
||||
"common_shared": "Общие",
|
||||
"contextual_search": "Sunrise on the beach",
|
||||
"control_bottom_app_bar_add_to_album": "Добавить в альбом",
|
||||
"control_bottom_app_bar_album_info": "{} файлов",
|
||||
"control_bottom_app_bar_album_info_shared": "{} файлов · Общий",
|
||||
@@ -154,6 +166,7 @@
|
||||
"control_bottom_app_bar_delete": "Удалить",
|
||||
"control_bottom_app_bar_delete_from_immich": "Удалить из Immich\n",
|
||||
"control_bottom_app_bar_delete_from_local": "Удалить с устройства",
|
||||
"control_bottom_app_bar_edit": "Edit",
|
||||
"control_bottom_app_bar_edit_location": "Редактировать местоположение",
|
||||
"control_bottom_app_bar_edit_time": "Редактировать дату и время",
|
||||
"control_bottom_app_bar_favorite": "В избранное",
|
||||
@@ -203,6 +216,7 @@
|
||||
"experimental_settings_title": "Экспериментальные функции",
|
||||
"favorites_page_no_favorites": "В избранном сейчас пусто",
|
||||
"favorites_page_title": "Избранное",
|
||||
"filename_search": "File name or extension",
|
||||
"haptic_feedback_switch": "Включить тактильную отдачу",
|
||||
"haptic_feedback_title": "Тактильная отдача",
|
||||
"header_settings_add_header_tip": "Добавить заголовок",
|
||||
@@ -230,6 +244,8 @@
|
||||
"image_viewer_page_state_provider_download_started": "Загрузка началась",
|
||||
"image_viewer_page_state_provider_download_success": "Успешно загружено",
|
||||
"image_viewer_page_state_provider_share_error": "Ошибка общего доступа",
|
||||
"invalid_date": "Invalid date",
|
||||
"invalid_date_format": "Invalid date format",
|
||||
"library_page_albums": "Альбомы",
|
||||
"library_page_archive": "Архив",
|
||||
"library_page_device_albums": "Альбомы на устройстве",
|
||||
@@ -311,6 +327,7 @@
|
||||
"multiselect_grid_edit_date_time_err_read_only": "Невозможно редактировать дату объектов только для чтения, пропуск...",
|
||||
"multiselect_grid_edit_gps_err_read_only": "Невозможно редактировать местоположение объектов только для чтения, пропуск...",
|
||||
"no_assets_to_show": "Объекты отсутствуют",
|
||||
"no_name": "No name",
|
||||
"notification_permission_dialog_cancel": "Отмена",
|
||||
"notification_permission_dialog_content": "Чтобы включить уведомления, перейдите в «Настройки» и выберите «Разрешить».",
|
||||
"notification_permission_dialog_settings": "Настройки",
|
||||
@@ -354,17 +371,30 @@
|
||||
"scaffold_body_error_occurred": "Возникла ошибка",
|
||||
"search_bar_hint": "Поиск фотографий",
|
||||
"search_filter_apply": "Применить фильтр",
|
||||
"search_filter_camera": "Camera",
|
||||
"search_filter_camera_make": "Производитель",
|
||||
"search_filter_camera_model": "Модель",
|
||||
"search_filter_camera_title": "Select camera type",
|
||||
"search_filter_date": "Date",
|
||||
"search_filter_date_interval": "{start} to {end}",
|
||||
"search_filter_date_title": "Select a date range",
|
||||
"search_filter_display_option_archive": "Архив",
|
||||
"search_filter_display_option_favorite": "Избранное",
|
||||
"search_filter_display_option_not_in_album": "Не в альбоме",
|
||||
"search_filter_display_options": "Display Options",
|
||||
"search_filter_display_options_title": "Display options",
|
||||
"search_filter_location": "Location",
|
||||
"search_filter_location_city": "Город",
|
||||
"search_filter_location_country": "Страна",
|
||||
"search_filter_location_state": "Регион",
|
||||
"search_filter_location_title": "Select location",
|
||||
"search_filter_media_type": "Media Type",
|
||||
"search_filter_media_type_all": "Все",
|
||||
"search_filter_media_type_image": "Изображения",
|
||||
"search_filter_media_type_title": "Select media type",
|
||||
"search_filter_media_type_video": "Видео",
|
||||
"search_filter_people": "People",
|
||||
"search_filter_people_title": "Select people",
|
||||
"search_page_categories": "Категории",
|
||||
"search_page_favorites": "Избранное",
|
||||
"search_page_motion_photos": "Динамические фото",
|
||||
|
||||
@@ -3,6 +3,8 @@
|
||||
"action_common_cancel": "Zrušiť",
|
||||
"action_common_clear": "Vyčistiť",
|
||||
"action_common_confirm": "Potvrdiť",
|
||||
"action_common_save": "Save",
|
||||
"action_common_select": "Select",
|
||||
"action_common_update": "Aktualizovať",
|
||||
"add_to_album_bottom_sheet_added": "Pridané do {album}",
|
||||
"add_to_album_bottom_sheet_already_exists": "Už v {album}",
|
||||
@@ -141,11 +143,21 @@
|
||||
"change_password_form_new_password": "Nové heslo",
|
||||
"change_password_form_password_mismatch": "Heslá sa nezhodujú",
|
||||
"change_password_form_reenter_new_password": "Znova zadajte nové heslo",
|
||||
"client_cert_dialog_msg_confirm": "OK",
|
||||
"client_cert_enter_password": "Enter Password",
|
||||
"client_cert_import": "Import",
|
||||
"client_cert_import_success_msg": "Client certificate is imported",
|
||||
"client_cert_invalid_msg": "Invalid certificate file or wrong password",
|
||||
"client_cert_remove": "Remove",
|
||||
"client_cert_remove_msg": "Client certificate is removed",
|
||||
"client_cert_subtitle": "Supports PKCS12 (.p12, .pfx) format only. Certificate Import/Remove is available only before login",
|
||||
"client_cert_title": "SSL Client Certificate",
|
||||
"common_add_to_album": "Pridať do albumu",
|
||||
"common_change_password": "Zmeniť heslo",
|
||||
"common_create_new_album": "Vytvoriť nový album",
|
||||
"common_server_error": "Skontrolujte svoje sieťové pripojenie, uistite sa, že server je dostupný a verzie aplikácie/server sú kompatibilné.",
|
||||
"common_shared": "Zdieľané",
|
||||
"contextual_search": "Sunrise on the beach",
|
||||
"control_bottom_app_bar_add_to_album": "Pridať do albumu",
|
||||
"control_bottom_app_bar_album_info": "{} položiek",
|
||||
"control_bottom_app_bar_album_info_shared": "{} položiek - zdieľané",
|
||||
@@ -154,6 +166,7 @@
|
||||
"control_bottom_app_bar_delete": "Vymazať",
|
||||
"control_bottom_app_bar_delete_from_immich": "Vymazať z Immichu",
|
||||
"control_bottom_app_bar_delete_from_local": "Vymazať zo zariadenia",
|
||||
"control_bottom_app_bar_edit": "Edit",
|
||||
"control_bottom_app_bar_edit_location": "Upraviť polohu",
|
||||
"control_bottom_app_bar_edit_time": "Upraviť dátum a čas",
|
||||
"control_bottom_app_bar_favorite": "Obľúbené",
|
||||
@@ -203,6 +216,7 @@
|
||||
"experimental_settings_title": "Experimentálne",
|
||||
"favorites_page_no_favorites": "Žiadne obľúbené médiá",
|
||||
"favorites_page_title": "Obľúbené",
|
||||
"filename_search": "File name or extension",
|
||||
"haptic_feedback_switch": "Povoliť hmatovú odozvu",
|
||||
"haptic_feedback_title": "Hmatová odozva",
|
||||
"header_settings_add_header_tip": "Add Header",
|
||||
@@ -230,6 +244,8 @@
|
||||
"image_viewer_page_state_provider_download_started": "Sťahovanie sa začalo",
|
||||
"image_viewer_page_state_provider_download_success": "Sťahovanie bolo úspešné",
|
||||
"image_viewer_page_state_provider_share_error": "Chyba zdieľania",
|
||||
"invalid_date": "Invalid date",
|
||||
"invalid_date_format": "Invalid date format",
|
||||
"library_page_albums": "Albumy",
|
||||
"library_page_archive": "Archív",
|
||||
"library_page_device_albums": "Albumy v zariadení",
|
||||
@@ -311,6 +327,7 @@
|
||||
"multiselect_grid_edit_date_time_err_read_only": "Nemožno upraviť dátum položky len na čítanie, preskakujem",
|
||||
"multiselect_grid_edit_gps_err_read_only": "Nemožno upraviť polohu položky len na čítanie, preskakujem",
|
||||
"no_assets_to_show": "Žiadne položky",
|
||||
"no_name": "No name",
|
||||
"notification_permission_dialog_cancel": "Zrušiť",
|
||||
"notification_permission_dialog_content": "Ak chcete povoliť upozornenia, prejdite do Nastavenia a vyberte možnosť Povoliť.",
|
||||
"notification_permission_dialog_settings": "Nastavenia",
|
||||
@@ -354,17 +371,30 @@
|
||||
"scaffold_body_error_occurred": "Vyskytla sa chyba",
|
||||
"search_bar_hint": "Prehľadajte svoje obrázky",
|
||||
"search_filter_apply": "Použiť filter",
|
||||
"search_filter_camera": "Camera",
|
||||
"search_filter_camera_make": "Spraviť",
|
||||
"search_filter_camera_model": "Model",
|
||||
"search_filter_camera_title": "Select camera type",
|
||||
"search_filter_date": "Date",
|
||||
"search_filter_date_interval": "{start} to {end}",
|
||||
"search_filter_date_title": "Select a date range",
|
||||
"search_filter_display_option_archive": "Archív",
|
||||
"search_filter_display_option_favorite": "Obľúbené",
|
||||
"search_filter_display_option_not_in_album": "Mimo albumu",
|
||||
"search_filter_display_options": "Display Options",
|
||||
"search_filter_display_options_title": "Display options",
|
||||
"search_filter_location": "Location",
|
||||
"search_filter_location_city": "Mesto",
|
||||
"search_filter_location_country": "Oblasť",
|
||||
"search_filter_location_state": "Štát",
|
||||
"search_filter_location_title": "Select location",
|
||||
"search_filter_media_type": "Media Type",
|
||||
"search_filter_media_type_all": "Všetky",
|
||||
"search_filter_media_type_image": "Obrázok",
|
||||
"search_filter_media_type_title": "Select media type",
|
||||
"search_filter_media_type_video": "Video",
|
||||
"search_filter_people": "People",
|
||||
"search_filter_people_title": "Select people",
|
||||
"search_page_categories": "Kategórie",
|
||||
"search_page_favorites": "Obľúbené",
|
||||
"search_page_motion_photos": "Pohyblivé fotky",
|
||||
|
||||
@@ -3,6 +3,8 @@
|
||||
"action_common_cancel": "Prekliči",
|
||||
"action_common_clear": "Počisti",
|
||||
"action_common_confirm": "Potrdi",
|
||||
"action_common_save": "Save",
|
||||
"action_common_select": "Select",
|
||||
"action_common_update": "Posodobi",
|
||||
"add_to_album_bottom_sheet_added": "Dodano v {album}",
|
||||
"add_to_album_bottom_sheet_already_exists": "Že v {albumu}",
|
||||
@@ -141,11 +143,21 @@
|
||||
"change_password_form_new_password": "Novo geslo",
|
||||
"change_password_form_password_mismatch": "Gesli se ne ujemata",
|
||||
"change_password_form_reenter_new_password": "Znova vnesi novo geslo",
|
||||
"client_cert_dialog_msg_confirm": "OK",
|
||||
"client_cert_enter_password": "Enter Password",
|
||||
"client_cert_import": "Import",
|
||||
"client_cert_import_success_msg": "Client certificate is imported",
|
||||
"client_cert_invalid_msg": "Invalid certificate file or wrong password",
|
||||
"client_cert_remove": "Remove",
|
||||
"client_cert_remove_msg": "Client certificate is removed",
|
||||
"client_cert_subtitle": "Supports PKCS12 (.p12, .pfx) format only. Certificate Import/Remove is available only before login",
|
||||
"client_cert_title": "SSL Client Certificate",
|
||||
"common_add_to_album": "Dodaj v album",
|
||||
"common_change_password": "Zamenjaj geslo",
|
||||
"common_create_new_album": "Ustvari nov album",
|
||||
"common_server_error": "Preverite omrežno povezavo, preverite, ali je strežnik dosegljiv in ali sta različici aplikacije/strežnika združljivi.",
|
||||
"common_shared": "V skupni rabi",
|
||||
"contextual_search": "Sunrise on the beach",
|
||||
"control_bottom_app_bar_add_to_album": "Dodaj v album",
|
||||
"control_bottom_app_bar_album_info": "{} elementov",
|
||||
"control_bottom_app_bar_album_info_shared": "{} elementov · V skupni rabi",
|
||||
@@ -154,6 +166,7 @@
|
||||
"control_bottom_app_bar_delete": "Izbriši",
|
||||
"control_bottom_app_bar_delete_from_immich": "Izbriši iz Immicha",
|
||||
"control_bottom_app_bar_delete_from_local": "Izbriši iz naprave",
|
||||
"control_bottom_app_bar_edit": "Edit",
|
||||
"control_bottom_app_bar_edit_location": "Uredi lokacijo",
|
||||
"control_bottom_app_bar_edit_time": "Uredi datum in uro",
|
||||
"control_bottom_app_bar_favorite": "Priljubljen",
|
||||
@@ -203,6 +216,7 @@
|
||||
"experimental_settings_title": "Eksperimentalno",
|
||||
"favorites_page_no_favorites": "Ni priljubljenih sredstev",
|
||||
"favorites_page_title": "Priljubljene",
|
||||
"filename_search": "File name or extension",
|
||||
"haptic_feedback_switch": "Uporabi haptičen odziv",
|
||||
"haptic_feedback_title": "Haptičen odziv",
|
||||
"header_settings_add_header_tip": "Dodaj glavo",
|
||||
@@ -230,6 +244,8 @@
|
||||
"image_viewer_page_state_provider_download_started": "Prenos se je začel",
|
||||
"image_viewer_page_state_provider_download_success": "Prenos je uspel",
|
||||
"image_viewer_page_state_provider_share_error": "Napaka skupne rabe",
|
||||
"invalid_date": "Invalid date",
|
||||
"invalid_date_format": "Invalid date format",
|
||||
"library_page_albums": "Albumi",
|
||||
"library_page_archive": "Arhiv",
|
||||
"library_page_device_albums": "Albumi v napravi",
|
||||
@@ -311,6 +327,7 @@
|
||||
"multiselect_grid_edit_date_time_err_read_only": "Ni mogoče urediti datuma sredstev samo za branje, preskočim",
|
||||
"multiselect_grid_edit_gps_err_read_only": "Ni mogoče urediti lokacije sredstev samo za branje, preskočim",
|
||||
"no_assets_to_show": "Ni sredstev za prikaz",
|
||||
"no_name": "No name",
|
||||
"notification_permission_dialog_cancel": "Prekliči",
|
||||
"notification_permission_dialog_content": "Če želite omogočiti obvestila, pojdite v Nastavitve in izberite Dovoli.",
|
||||
"notification_permission_dialog_settings": "Nastavitve",
|
||||
@@ -354,17 +371,30 @@
|
||||
"scaffold_body_error_occurred": "Prišlo je do napake",
|
||||
"search_bar_hint": "Poišči svoje fotografije",
|
||||
"search_filter_apply": "Uporabi filter",
|
||||
"search_filter_camera": "Camera",
|
||||
"search_filter_camera_make": "Izdelava",
|
||||
"search_filter_camera_model": "Model",
|
||||
"search_filter_camera_title": "Select camera type",
|
||||
"search_filter_date": "Date",
|
||||
"search_filter_date_interval": "{start} to {end}",
|
||||
"search_filter_date_title": "Select a date range",
|
||||
"search_filter_display_option_archive": "Arhiv",
|
||||
"search_filter_display_option_favorite": "Priljubljen",
|
||||
"search_filter_display_option_not_in_album": "Ni v albumu",
|
||||
"search_filter_display_options": "Display Options",
|
||||
"search_filter_display_options_title": "Display options",
|
||||
"search_filter_location": "Location",
|
||||
"search_filter_location_city": "Mesto",
|
||||
"search_filter_location_country": "Država",
|
||||
"search_filter_location_state": "Dežela",
|
||||
"search_filter_location_title": "Select location",
|
||||
"search_filter_media_type": "Media Type",
|
||||
"search_filter_media_type_all": "Vse",
|
||||
"search_filter_media_type_image": "Slika",
|
||||
"search_filter_media_type_title": "Select media type",
|
||||
"search_filter_media_type_video": "Video",
|
||||
"search_filter_people": "People",
|
||||
"search_filter_people_title": "Select people",
|
||||
"search_page_categories": "Kategorije",
|
||||
"search_page_favorites": "Priljubljene",
|
||||
"search_page_motion_photos": "Fotografije v gibanju",
|
||||
|
||||
@@ -3,6 +3,8 @@
|
||||
"action_common_cancel": "Cancel",
|
||||
"action_common_clear": "Clear",
|
||||
"action_common_confirm": "Confirm",
|
||||
"action_common_save": "Save",
|
||||
"action_common_select": "Select",
|
||||
"action_common_update": "Update",
|
||||
"add_to_album_bottom_sheet_added": "Added to {album}",
|
||||
"add_to_album_bottom_sheet_already_exists": "Already in {album}",
|
||||
@@ -141,11 +143,21 @@
|
||||
"change_password_form_new_password": "New Password",
|
||||
"change_password_form_password_mismatch": "Passwords do not match",
|
||||
"change_password_form_reenter_new_password": "Re-enter New Password",
|
||||
"client_cert_dialog_msg_confirm": "OK",
|
||||
"client_cert_enter_password": "Enter Password",
|
||||
"client_cert_import": "Import",
|
||||
"client_cert_import_success_msg": "Client certificate is imported",
|
||||
"client_cert_invalid_msg": "Invalid certificate file or wrong password",
|
||||
"client_cert_remove": "Remove",
|
||||
"client_cert_remove_msg": "Client certificate is removed",
|
||||
"client_cert_subtitle": "Supports PKCS12 (.p12, .pfx) format only. Certificate Import/Remove is available only before login",
|
||||
"client_cert_title": "SSL Client Certificate",
|
||||
"common_add_to_album": "Add to album",
|
||||
"common_change_password": "Change Password",
|
||||
"common_create_new_album": "Create new album",
|
||||
"common_server_error": "Please check your network connection, make sure the server is reachable and app/server versions are compatible.",
|
||||
"common_shared": "Shared",
|
||||
"contextual_search": "Sunrise on the beach",
|
||||
"control_bottom_app_bar_add_to_album": "Add to album",
|
||||
"control_bottom_app_bar_album_info": "{} items",
|
||||
"control_bottom_app_bar_album_info_shared": "{} items · Shared",
|
||||
@@ -154,6 +166,7 @@
|
||||
"control_bottom_app_bar_delete": "Delete",
|
||||
"control_bottom_app_bar_delete_from_immich": "Delete from Immich",
|
||||
"control_bottom_app_bar_delete_from_local": "Delete from device",
|
||||
"control_bottom_app_bar_edit": "Edit",
|
||||
"control_bottom_app_bar_edit_location": "Edit Location",
|
||||
"control_bottom_app_bar_edit_time": "Edit Date & Time",
|
||||
"control_bottom_app_bar_favorite": "Favorite",
|
||||
@@ -203,6 +216,7 @@
|
||||
"experimental_settings_title": "Experimental",
|
||||
"favorites_page_no_favorites": "No favorite assets found",
|
||||
"favorites_page_title": "Favorites",
|
||||
"filename_search": "File name or extension",
|
||||
"haptic_feedback_switch": "Enable haptic feedback",
|
||||
"haptic_feedback_title": "Haptic Feedback",
|
||||
"header_settings_add_header_tip": "Add Header",
|
||||
@@ -230,6 +244,8 @@
|
||||
"image_viewer_page_state_provider_download_started": "Download Started",
|
||||
"image_viewer_page_state_provider_download_success": "Download Success",
|
||||
"image_viewer_page_state_provider_share_error": "Share Error",
|
||||
"invalid_date": "Invalid date",
|
||||
"invalid_date_format": "Invalid date format",
|
||||
"library_page_albums": "Albums",
|
||||
"library_page_archive": "Archive",
|
||||
"library_page_device_albums": "Albums on Device",
|
||||
@@ -311,6 +327,7 @@
|
||||
"multiselect_grid_edit_date_time_err_read_only": "Cannot edit date of read only asset(s), skipping",
|
||||
"multiselect_grid_edit_gps_err_read_only": "Cannot edit location of read only asset(s), skipping",
|
||||
"no_assets_to_show": "No assets to show",
|
||||
"no_name": "No name",
|
||||
"notification_permission_dialog_cancel": "Cancel",
|
||||
"notification_permission_dialog_content": "To enable notifications, go to Settings and select allow.",
|
||||
"notification_permission_dialog_settings": "Settings",
|
||||
@@ -354,17 +371,30 @@
|
||||
"scaffold_body_error_occurred": "Error occurred",
|
||||
"search_bar_hint": "Search your photos",
|
||||
"search_filter_apply": "Apply filter",
|
||||
"search_filter_camera": "Camera",
|
||||
"search_filter_camera_make": "Make",
|
||||
"search_filter_camera_model": "Model",
|
||||
"search_filter_camera_title": "Select camera type",
|
||||
"search_filter_date": "Date",
|
||||
"search_filter_date_interval": "{start} to {end}",
|
||||
"search_filter_date_title": "Select a date range",
|
||||
"search_filter_display_option_archive": "Archive",
|
||||
"search_filter_display_option_favorite": "Favorite",
|
||||
"search_filter_display_option_not_in_album": "Not in album",
|
||||
"search_filter_display_options": "Display Options",
|
||||
"search_filter_display_options_title": "Display options",
|
||||
"search_filter_location": "Location",
|
||||
"search_filter_location_city": "City",
|
||||
"search_filter_location_country": "Country",
|
||||
"search_filter_location_state": "State",
|
||||
"search_filter_location_title": "Select location",
|
||||
"search_filter_media_type": "Media Type",
|
||||
"search_filter_media_type_all": "All",
|
||||
"search_filter_media_type_image": "Image",
|
||||
"search_filter_media_type_title": "Select media type",
|
||||
"search_filter_media_type_video": "Video",
|
||||
"search_filter_people": "People",
|
||||
"search_filter_people_title": "Select people",
|
||||
"search_page_categories": "Categories",
|
||||
"search_page_favorites": "Favorites",
|
||||
"search_page_motion_photos": "Motion Photos",
|
||||
|
||||
@@ -3,6 +3,8 @@
|
||||
"action_common_cancel": "Cancel",
|
||||
"action_common_clear": "Clear",
|
||||
"action_common_confirm": "Confirm",
|
||||
"action_common_save": "Save",
|
||||
"action_common_select": "Select",
|
||||
"action_common_update": "Update",
|
||||
"add_to_album_bottom_sheet_added": "Dodato u {album}",
|
||||
"add_to_album_bottom_sheet_already_exists": "Već u {album}",
|
||||
@@ -141,11 +143,21 @@
|
||||
"change_password_form_new_password": "Nova šifra",
|
||||
"change_password_form_password_mismatch": "Šifre se ne podudaraju",
|
||||
"change_password_form_reenter_new_password": "Ponovo unesite novu šifru",
|
||||
"client_cert_dialog_msg_confirm": "OK",
|
||||
"client_cert_enter_password": "Enter Password",
|
||||
"client_cert_import": "Import",
|
||||
"client_cert_import_success_msg": "Client certificate is imported",
|
||||
"client_cert_invalid_msg": "Invalid certificate file or wrong password",
|
||||
"client_cert_remove": "Remove",
|
||||
"client_cert_remove_msg": "Client certificate is removed",
|
||||
"client_cert_subtitle": "Supports PKCS12 (.p12, .pfx) format only. Certificate Import/Remove is available only before login",
|
||||
"client_cert_title": "SSL Client Certificate",
|
||||
"common_add_to_album": "Dodaj u album",
|
||||
"common_change_password": "Promeni Šifru",
|
||||
"common_create_new_album": "Kreiraj novi album",
|
||||
"common_server_error": "Please check your network connection, make sure the server is reachable and app/server versions are compatible.",
|
||||
"common_shared": "Deljeno",
|
||||
"contextual_search": "Sunrise on the beach",
|
||||
"control_bottom_app_bar_add_to_album": "Dodaj u album",
|
||||
"control_bottom_app_bar_album_info": "{} stvari",
|
||||
"control_bottom_app_bar_album_info_shared": "{} stvari podeljeno",
|
||||
@@ -154,6 +166,7 @@
|
||||
"control_bottom_app_bar_delete": "Obriši",
|
||||
"control_bottom_app_bar_delete_from_immich": "Delete from Immich",
|
||||
"control_bottom_app_bar_delete_from_local": "Delete from device",
|
||||
"control_bottom_app_bar_edit": "Edit",
|
||||
"control_bottom_app_bar_edit_location": "Edit Location",
|
||||
"control_bottom_app_bar_edit_time": "Edit Date & Time",
|
||||
"control_bottom_app_bar_favorite": "Omliljeno",
|
||||
@@ -203,6 +216,7 @@
|
||||
"experimental_settings_title": "Eksperimentalno",
|
||||
"favorites_page_no_favorites": "No favorite assets found",
|
||||
"favorites_page_title": "Omiljeno",
|
||||
"filename_search": "File name or extension",
|
||||
"haptic_feedback_switch": "Enable haptic feedback",
|
||||
"haptic_feedback_title": "Haptic Feedback",
|
||||
"header_settings_add_header_tip": "Add Header",
|
||||
@@ -230,6 +244,8 @@
|
||||
"image_viewer_page_state_provider_download_started": "Download Started",
|
||||
"image_viewer_page_state_provider_download_success": "Preuzimanje Uspešno",
|
||||
"image_viewer_page_state_provider_share_error": "Share Error",
|
||||
"invalid_date": "Invalid date",
|
||||
"invalid_date_format": "Invalid date format",
|
||||
"library_page_albums": "Albumi",
|
||||
"library_page_archive": "Archive",
|
||||
"library_page_device_albums": "Albums on Device",
|
||||
@@ -311,6 +327,7 @@
|
||||
"multiselect_grid_edit_date_time_err_read_only": "Cannot edit date of read only asset(s), skipping",
|
||||
"multiselect_grid_edit_gps_err_read_only": "Cannot edit location of read only asset(s), skipping",
|
||||
"no_assets_to_show": "No assets to show",
|
||||
"no_name": "No name",
|
||||
"notification_permission_dialog_cancel": "Odustani",
|
||||
"notification_permission_dialog_content": "Da bi ukljucili notifikacije, idite u Opcije i odaberite Dozvoli",
|
||||
"notification_permission_dialog_settings": "Podešavanja",
|
||||
@@ -354,17 +371,30 @@
|
||||
"scaffold_body_error_occurred": "Error occurred",
|
||||
"search_bar_hint": "Pretražite Vaše fotografije",
|
||||
"search_filter_apply": "Apply filter",
|
||||
"search_filter_camera": "Camera",
|
||||
"search_filter_camera_make": "Make",
|
||||
"search_filter_camera_model": "Model",
|
||||
"search_filter_camera_title": "Select camera type",
|
||||
"search_filter_date": "Date",
|
||||
"search_filter_date_interval": "{start} to {end}",
|
||||
"search_filter_date_title": "Select a date range",
|
||||
"search_filter_display_option_archive": "Archive",
|
||||
"search_filter_display_option_favorite": "Favorite",
|
||||
"search_filter_display_option_not_in_album": "Not in album",
|
||||
"search_filter_display_options": "Display Options",
|
||||
"search_filter_display_options_title": "Display options",
|
||||
"search_filter_location": "Location",
|
||||
"search_filter_location_city": "City",
|
||||
"search_filter_location_country": "Country",
|
||||
"search_filter_location_state": "State",
|
||||
"search_filter_location_title": "Select location",
|
||||
"search_filter_media_type": "Media Type",
|
||||
"search_filter_media_type_all": "All",
|
||||
"search_filter_media_type_image": "Image",
|
||||
"search_filter_media_type_title": "Select media type",
|
||||
"search_filter_media_type_video": "Video",
|
||||
"search_filter_people": "People",
|
||||
"search_filter_people_title": "Select people",
|
||||
"search_page_categories": "Categories",
|
||||
"search_page_favorites": "Favorites",
|
||||
"search_page_motion_photos": "Motion Photos",
|
||||
|
||||
@@ -3,6 +3,8 @@
|
||||
"action_common_cancel": "Cancel",
|
||||
"action_common_clear": "Clear",
|
||||
"action_common_confirm": "Confirm",
|
||||
"action_common_save": "Save",
|
||||
"action_common_select": "Select",
|
||||
"action_common_update": "Update",
|
||||
"add_to_album_bottom_sheet_added": "Added to {album}",
|
||||
"add_to_album_bottom_sheet_already_exists": "Already in {album}",
|
||||
@@ -141,11 +143,21 @@
|
||||
"change_password_form_new_password": "New Password",
|
||||
"change_password_form_password_mismatch": "Passwords do not match",
|
||||
"change_password_form_reenter_new_password": "Re-enter New Password",
|
||||
"client_cert_dialog_msg_confirm": "OK",
|
||||
"client_cert_enter_password": "Enter Password",
|
||||
"client_cert_import": "Import",
|
||||
"client_cert_import_success_msg": "Client certificate is imported",
|
||||
"client_cert_invalid_msg": "Invalid certificate file or wrong password",
|
||||
"client_cert_remove": "Remove",
|
||||
"client_cert_remove_msg": "Client certificate is removed",
|
||||
"client_cert_subtitle": "Supports PKCS12 (.p12, .pfx) format only. Certificate Import/Remove is available only before login",
|
||||
"client_cert_title": "SSL Client Certificate",
|
||||
"common_add_to_album": "Add to album",
|
||||
"common_change_password": "Change Password",
|
||||
"common_create_new_album": "Create new album",
|
||||
"common_server_error": "Please check your network connection, make sure the server is reachable and app/server versions are compatible.",
|
||||
"common_shared": "Shared",
|
||||
"contextual_search": "Sunrise on the beach",
|
||||
"control_bottom_app_bar_add_to_album": "Add to album",
|
||||
"control_bottom_app_bar_album_info": "{} items",
|
||||
"control_bottom_app_bar_album_info_shared": "{} items · Shared",
|
||||
@@ -154,6 +166,7 @@
|
||||
"control_bottom_app_bar_delete": "Delete",
|
||||
"control_bottom_app_bar_delete_from_immich": "Delete from Immich",
|
||||
"control_bottom_app_bar_delete_from_local": "Delete from device",
|
||||
"control_bottom_app_bar_edit": "Edit",
|
||||
"control_bottom_app_bar_edit_location": "Edit Location",
|
||||
"control_bottom_app_bar_edit_time": "Edit Date & Time",
|
||||
"control_bottom_app_bar_favorite": "Favorite",
|
||||
@@ -203,6 +216,7 @@
|
||||
"experimental_settings_title": "Experimental",
|
||||
"favorites_page_no_favorites": "No favorite assets found",
|
||||
"favorites_page_title": "Favorites",
|
||||
"filename_search": "File name or extension",
|
||||
"haptic_feedback_switch": "Enable haptic feedback",
|
||||
"haptic_feedback_title": "Haptic Feedback",
|
||||
"header_settings_add_header_tip": "Add Header",
|
||||
@@ -230,6 +244,8 @@
|
||||
"image_viewer_page_state_provider_download_started": "Download Started",
|
||||
"image_viewer_page_state_provider_download_success": "Download Success",
|
||||
"image_viewer_page_state_provider_share_error": "Share Error",
|
||||
"invalid_date": "Invalid date",
|
||||
"invalid_date_format": "Invalid date format",
|
||||
"library_page_albums": "Albums",
|
||||
"library_page_archive": "Archive",
|
||||
"library_page_device_albums": "Albums on Device",
|
||||
@@ -311,6 +327,7 @@
|
||||
"multiselect_grid_edit_date_time_err_read_only": "Cannot edit date of read only asset(s), skipping",
|
||||
"multiselect_grid_edit_gps_err_read_only": "Cannot edit location of read only asset(s), skipping",
|
||||
"no_assets_to_show": "No assets to show",
|
||||
"no_name": "No name",
|
||||
"notification_permission_dialog_cancel": "Cancel",
|
||||
"notification_permission_dialog_content": "To enable notifications, go to Settings and select allow.",
|
||||
"notification_permission_dialog_settings": "Settings",
|
||||
@@ -354,17 +371,30 @@
|
||||
"scaffold_body_error_occurred": "Error occurred",
|
||||
"search_bar_hint": "Search your photos",
|
||||
"search_filter_apply": "Apply filter",
|
||||
"search_filter_camera": "Camera",
|
||||
"search_filter_camera_make": "Make",
|
||||
"search_filter_camera_model": "Model",
|
||||
"search_filter_camera_title": "Select camera type",
|
||||
"search_filter_date": "Date",
|
||||
"search_filter_date_interval": "{start} to {end}",
|
||||
"search_filter_date_title": "Select a date range",
|
||||
"search_filter_display_option_archive": "Archive",
|
||||
"search_filter_display_option_favorite": "Favorite",
|
||||
"search_filter_display_option_not_in_album": "Not in album",
|
||||
"search_filter_display_options": "Display Options",
|
||||
"search_filter_display_options_title": "Display options",
|
||||
"search_filter_location": "Location",
|
||||
"search_filter_location_city": "City",
|
||||
"search_filter_location_country": "Country",
|
||||
"search_filter_location_state": "State",
|
||||
"search_filter_location_title": "Select location",
|
||||
"search_filter_media_type": "Media Type",
|
||||
"search_filter_media_type_all": "All",
|
||||
"search_filter_media_type_image": "Image",
|
||||
"search_filter_media_type_title": "Select media type",
|
||||
"search_filter_media_type_video": "Video",
|
||||
"search_filter_people": "People",
|
||||
"search_filter_people_title": "Select people",
|
||||
"search_page_categories": "Categories",
|
||||
"search_page_favorites": "Favorites",
|
||||
"search_page_motion_photos": "Motion Photos",
|
||||
|
||||
@@ -3,6 +3,8 @@
|
||||
"action_common_cancel": "Avbryt",
|
||||
"action_common_clear": "Rensa",
|
||||
"action_common_confirm": "Bekräfta",
|
||||
"action_common_save": "Spara",
|
||||
"action_common_select": "Välj",
|
||||
"action_common_update": "Uppdatera",
|
||||
"add_to_album_bottom_sheet_added": "Tillagd till {album}",
|
||||
"add_to_album_bottom_sheet_already_exists": "Redan i {album}",
|
||||
@@ -141,11 +143,21 @@
|
||||
"change_password_form_new_password": "Nytt lösenord",
|
||||
"change_password_form_password_mismatch": "Lösenorden matchar inte",
|
||||
"change_password_form_reenter_new_password": "Ange Nytt Lösenord Igen",
|
||||
"client_cert_dialog_msg_confirm": "OK",
|
||||
"client_cert_enter_password": "Ange Lösenord",
|
||||
"client_cert_import": "Importera",
|
||||
"client_cert_import_success_msg": "Klientcertifikatet är importerat",
|
||||
"client_cert_invalid_msg": "Felaktig certifikatfil eller fel lösenord",
|
||||
"client_cert_remove": "Ta bort",
|
||||
"client_cert_remove_msg": "Klientcertifikatet är borttaget",
|
||||
"client_cert_subtitle": "Stödjer endast formatet PKCS12 (.p12, .pfx). Import/borttagning av certifikat är tillgängligt endast före inloggning",
|
||||
"client_cert_title": "SSL-Klientcertifikat",
|
||||
"common_add_to_album": "Lägg till, till album",
|
||||
"common_change_password": "Ändra lösenord",
|
||||
"common_create_new_album": "Skapa ett nytt album",
|
||||
"common_server_error": "Kontrollera din nätverksanslutning, se till att servern går att nå och att app- och server-versioner är kompatibla.",
|
||||
"common_shared": "Delad",
|
||||
"contextual_search": "Soluppgång på stranden",
|
||||
"control_bottom_app_bar_add_to_album": "Lägg till i album",
|
||||
"control_bottom_app_bar_album_info": "{} objekt",
|
||||
"control_bottom_app_bar_album_info_shared": "{} objekt • Delat",
|
||||
@@ -154,6 +166,7 @@
|
||||
"control_bottom_app_bar_delete": "Radera",
|
||||
"control_bottom_app_bar_delete_from_immich": "Ta bort från Immich",
|
||||
"control_bottom_app_bar_delete_from_local": "Ta bort från enhet",
|
||||
"control_bottom_app_bar_edit": "Edit",
|
||||
"control_bottom_app_bar_edit_location": "Redigera plats",
|
||||
"control_bottom_app_bar_edit_time": "Redigera Datum & Tid",
|
||||
"control_bottom_app_bar_favorite": "Favorit",
|
||||
@@ -203,6 +216,7 @@
|
||||
"experimental_settings_title": "Experimentellt",
|
||||
"favorites_page_no_favorites": "Inga favoritobjekt hittades",
|
||||
"favorites_page_title": "Favoriter",
|
||||
"filename_search": "Filnamn eller filändelse",
|
||||
"haptic_feedback_switch": "Aktivera haptisk feedback",
|
||||
"haptic_feedback_title": "Haptisk Feedback",
|
||||
"header_settings_add_header_tip": "Lägg Till Header",
|
||||
@@ -230,6 +244,8 @@
|
||||
"image_viewer_page_state_provider_download_started": "Nedladdning Påbörjad",
|
||||
"image_viewer_page_state_provider_download_success": "Nedladdningen Lyckades",
|
||||
"image_viewer_page_state_provider_share_error": "Delningsfel",
|
||||
"invalid_date": "Felaktigt datum",
|
||||
"invalid_date_format": "Felaktigt datumformat",
|
||||
"library_page_albums": "Album",
|
||||
"library_page_archive": "Arkiv",
|
||||
"library_page_device_albums": "Album på Enheten",
|
||||
@@ -311,6 +327,7 @@
|
||||
"multiselect_grid_edit_date_time_err_read_only": "Kan inte ändra datum på skrivskyddade objekt, hoppar över",
|
||||
"multiselect_grid_edit_gps_err_read_only": "Kan inte ändra plats på skrivskyddade objekt, hoppar över",
|
||||
"no_assets_to_show": "Inga objekt att visa",
|
||||
"no_name": "Inget namn",
|
||||
"notification_permission_dialog_cancel": "Avbryt",
|
||||
"notification_permission_dialog_content": "För att aktivera notiser, gå till Inställningar och välj tillåt",
|
||||
"notification_permission_dialog_settings": "Inställningar",
|
||||
@@ -354,17 +371,30 @@
|
||||
"scaffold_body_error_occurred": "Fel uppstod",
|
||||
"search_bar_hint": "Sök bland dina foton",
|
||||
"search_filter_apply": "Aktivera filter",
|
||||
"search_filter_camera": "Kamera",
|
||||
"search_filter_camera_make": "Tillverkare",
|
||||
"search_filter_camera_model": "Modell",
|
||||
"search_filter_camera_title": "Välj kameratyp",
|
||||
"search_filter_date": "Datum",
|
||||
"search_filter_date_interval": "{start} till {end}",
|
||||
"search_filter_date_title": "Välj datumintervall",
|
||||
"search_filter_display_option_archive": "Arkiv",
|
||||
"search_filter_display_option_favorite": "Favorit",
|
||||
"search_filter_display_option_not_in_album": "Ej i album",
|
||||
"search_filter_display_options": "Visningsalternativ",
|
||||
"search_filter_display_options_title": "Visningsalternativ",
|
||||
"search_filter_location": "Plats",
|
||||
"search_filter_location_city": "Stad",
|
||||
"search_filter_location_country": "Land",
|
||||
"search_filter_location_state": "Stat",
|
||||
"search_filter_location_title": "Välj plats",
|
||||
"search_filter_media_type": "Mediatyp",
|
||||
"search_filter_media_type_all": "Alla",
|
||||
"search_filter_media_type_image": "Bild",
|
||||
"search_filter_media_type_title": "Välj mediatyp",
|
||||
"search_filter_media_type_video": "Videor",
|
||||
"search_filter_people": "Personer",
|
||||
"search_filter_people_title": "Välj personer",
|
||||
"search_page_categories": "Kategorier",
|
||||
"search_page_favorites": "Favoriter",
|
||||
"search_page_motion_photos": "Rörelsefoton",
|
||||
|
||||
@@ -3,6 +3,8 @@
|
||||
"action_common_cancel": "ยกเลิก",
|
||||
"action_common_clear": "เคลียร์",
|
||||
"action_common_confirm": "ยืนยัน",
|
||||
"action_common_save": "Save",
|
||||
"action_common_select": "Select",
|
||||
"action_common_update": "อัปเดต",
|
||||
"add_to_album_bottom_sheet_added": "เพิ่มไปยัง {album}",
|
||||
"add_to_album_bottom_sheet_already_exists": "อยู่ใน {album} อยู่แล้ว",
|
||||
@@ -141,11 +143,21 @@
|
||||
"change_password_form_new_password": "รหัสผ่านใหม่",
|
||||
"change_password_form_password_mismatch": "รหัสผ่านไม่ตรงกัน",
|
||||
"change_password_form_reenter_new_password": "กรอกรหัสผ่านใหม่",
|
||||
"client_cert_dialog_msg_confirm": "OK",
|
||||
"client_cert_enter_password": "Enter Password",
|
||||
"client_cert_import": "Import",
|
||||
"client_cert_import_success_msg": "Client certificate is imported",
|
||||
"client_cert_invalid_msg": "Invalid certificate file or wrong password",
|
||||
"client_cert_remove": "Remove",
|
||||
"client_cert_remove_msg": "Client certificate is removed",
|
||||
"client_cert_subtitle": "Supports PKCS12 (.p12, .pfx) format only. Certificate Import/Remove is available only before login",
|
||||
"client_cert_title": "SSL Client Certificate",
|
||||
"common_add_to_album": "เพิ่มเข้าอัลบั้ม",
|
||||
"common_change_password": "เปลี่ยนรหัสผ่าน",
|
||||
"common_create_new_album": "สร้างอัลบั้มใหม่",
|
||||
"common_server_error": "กรุณาตรวจสอบการเชื่อมต่ออินเทอร์เน็ต ให้แน่ใจว่าเซิร์ฟเวอร์สามารถเข้าถึงได้ และเวอร์ชันแอพกับเซิร์ฟเวอร์เข้ากันได้",
|
||||
"common_shared": "แชร์",
|
||||
"contextual_search": "Sunrise on the beach",
|
||||
"control_bottom_app_bar_add_to_album": "เพิ่มลงอัลบั้ม",
|
||||
"control_bottom_app_bar_album_info": "{} รายการ",
|
||||
"control_bottom_app_bar_album_info_shared": "{} รายการ · ถูกแชร์",
|
||||
@@ -154,6 +166,7 @@
|
||||
"control_bottom_app_bar_delete": "ลบออก",
|
||||
"control_bottom_app_bar_delete_from_immich": "ลบจาก Immich",
|
||||
"control_bottom_app_bar_delete_from_local": "ลบจากเรื่อง",
|
||||
"control_bottom_app_bar_edit": "Edit",
|
||||
"control_bottom_app_bar_edit_location": "แก้ไขตำแหน่ง",
|
||||
"control_bottom_app_bar_edit_time": "แก้ไขวันและเวลา",
|
||||
"control_bottom_app_bar_favorite": "รายการโปรด",
|
||||
@@ -203,6 +216,7 @@
|
||||
"experimental_settings_title": "ทดลอง",
|
||||
"favorites_page_no_favorites": "ไม่พบทรัพยากรในรายการโปรด",
|
||||
"favorites_page_title": "รายการโปรด",
|
||||
"filename_search": "File name or extension",
|
||||
"haptic_feedback_switch": "เปิดการตอบสนองแบบสัมผัส",
|
||||
"haptic_feedback_title": "การตอบสนองแบบสัมผัส",
|
||||
"header_settings_add_header_tip": "Add Header",
|
||||
@@ -230,6 +244,8 @@
|
||||
"image_viewer_page_state_provider_download_started": "ดาวน์โหลดเริ่มต้น",
|
||||
"image_viewer_page_state_provider_download_success": "ดาวน์โหลดสำเร็จ",
|
||||
"image_viewer_page_state_provider_share_error": "แชร์ผิดพลาด",
|
||||
"invalid_date": "Invalid date",
|
||||
"invalid_date_format": "Invalid date format",
|
||||
"library_page_albums": "อัลบั้ม",
|
||||
"library_page_archive": "เก็บถาวร",
|
||||
"library_page_device_albums": "อัลบั้มบนเครื่อง",
|
||||
@@ -311,6 +327,7 @@
|
||||
"multiselect_grid_edit_date_time_err_read_only": "ไม่สามารถแก้ไขวันที่ทรัพยากรแบบอ่านอย่างเดียว กำลังข้าม",
|
||||
"multiselect_grid_edit_gps_err_read_only": "ไม่สามารถแก้ตำแหน่งของทรัพยากรแบบอ่านอย่างเดียว กำลังข้าม",
|
||||
"no_assets_to_show": "ไม่มีทรัพยากรให้แสดง",
|
||||
"no_name": "No name",
|
||||
"notification_permission_dialog_cancel": "ยกเลิก",
|
||||
"notification_permission_dialog_content": "เพื่อเปิดการแจ้งเตือน เข้าตั้งค่าแล้วกดอนุญาต",
|
||||
"notification_permission_dialog_settings": "ตั้งค่า",
|
||||
@@ -354,17 +371,30 @@
|
||||
"scaffold_body_error_occurred": "เกิดข้อผิดพลาด",
|
||||
"search_bar_hint": "ค้นหารูปภาพของคุณ",
|
||||
"search_filter_apply": "บันทึกตัวกรอง",
|
||||
"search_filter_camera": "Camera",
|
||||
"search_filter_camera_make": "ยี่ห้อ",
|
||||
"search_filter_camera_model": "รุ่น",
|
||||
"search_filter_camera_title": "Select camera type",
|
||||
"search_filter_date": "Date",
|
||||
"search_filter_date_interval": "{start} to {end}",
|
||||
"search_filter_date_title": "Select a date range",
|
||||
"search_filter_display_option_archive": "เก็บถาวร",
|
||||
"search_filter_display_option_favorite": "รายการโปรด",
|
||||
"search_filter_display_option_not_in_album": "ไม่อยู่ในอัลบั้ม",
|
||||
"search_filter_display_options": "Display Options",
|
||||
"search_filter_display_options_title": "Display options",
|
||||
"search_filter_location": "Location",
|
||||
"search_filter_location_city": "เมือง",
|
||||
"search_filter_location_country": "ประเทศ",
|
||||
"search_filter_location_state": "รัฐ",
|
||||
"search_filter_location_title": "Select location",
|
||||
"search_filter_media_type": "Media Type",
|
||||
"search_filter_media_type_all": "ทั้งหมด",
|
||||
"search_filter_media_type_image": "รูปภาพ",
|
||||
"search_filter_media_type_title": "Select media type",
|
||||
"search_filter_media_type_video": "วิดีโอ",
|
||||
"search_filter_people": "People",
|
||||
"search_filter_people_title": "Select people",
|
||||
"search_page_categories": "หมวดหมู่",
|
||||
"search_page_favorites": "รายการโปรด",
|
||||
"search_page_motion_photos": "ภาพเคลื่อนไหว",
|
||||
|
||||
@@ -3,6 +3,8 @@
|
||||
"action_common_cancel": "Скасувати",
|
||||
"action_common_clear": "Очистити",
|
||||
"action_common_confirm": "Підтвердити",
|
||||
"action_common_save": "Save",
|
||||
"action_common_select": "Select",
|
||||
"action_common_update": "Оновити",
|
||||
"add_to_album_bottom_sheet_added": "Додати до {album}",
|
||||
"add_to_album_bottom_sheet_already_exists": "Вже є в {album}",
|
||||
@@ -141,11 +143,21 @@
|
||||
"change_password_form_new_password": "Новий пароль",
|
||||
"change_password_form_password_mismatch": "Паролі не співпадають",
|
||||
"change_password_form_reenter_new_password": "Повторіть новий пароль",
|
||||
"client_cert_dialog_msg_confirm": "OK",
|
||||
"client_cert_enter_password": "Enter Password",
|
||||
"client_cert_import": "Import",
|
||||
"client_cert_import_success_msg": "Client certificate is imported",
|
||||
"client_cert_invalid_msg": "Invalid certificate file or wrong password",
|
||||
"client_cert_remove": "Remove",
|
||||
"client_cert_remove_msg": "Client certificate is removed",
|
||||
"client_cert_subtitle": "Supports PKCS12 (.p12, .pfx) format only. Certificate Import/Remove is available only before login",
|
||||
"client_cert_title": "SSL Client Certificate",
|
||||
"common_add_to_album": "Додати у альбом",
|
||||
"common_change_password": "Змінити пароль",
|
||||
"common_create_new_album": "Створити новий альбом",
|
||||
"common_server_error": "Будь ласка, перевірте з'єднання, переконайтеся, що сервер доступний і версія програми/сервера сумісна.",
|
||||
"common_shared": "Спільні",
|
||||
"contextual_search": "Sunrise on the beach",
|
||||
"control_bottom_app_bar_add_to_album": "Додати у альбом",
|
||||
"control_bottom_app_bar_album_info": "{} елементи",
|
||||
"control_bottom_app_bar_album_info_shared": "{} елементи · Спільні",
|
||||
@@ -154,6 +166,7 @@
|
||||
"control_bottom_app_bar_delete": "Видалити",
|
||||
"control_bottom_app_bar_delete_from_immich": "Видалити з Immich",
|
||||
"control_bottom_app_bar_delete_from_local": "Видалити з пристрою",
|
||||
"control_bottom_app_bar_edit": "Edit",
|
||||
"control_bottom_app_bar_edit_location": "Редагувати місцезнаходження",
|
||||
"control_bottom_app_bar_edit_time": "Редагувати дату та час",
|
||||
"control_bottom_app_bar_favorite": "До улюблених",
|
||||
@@ -203,6 +216,7 @@
|
||||
"experimental_settings_title": "Експериментальні",
|
||||
"favorites_page_no_favorites": "Немає улюблених елементів",
|
||||
"favorites_page_title": "Улюблені",
|
||||
"filename_search": "File name or extension",
|
||||
"haptic_feedback_switch": "Увімкнути тактильну віддачу",
|
||||
"haptic_feedback_title": "Тактильна віддача",
|
||||
"header_settings_add_header_tip": "Додати заголовок",
|
||||
@@ -230,6 +244,8 @@
|
||||
"image_viewer_page_state_provider_download_started": "Завантаження почалося",
|
||||
"image_viewer_page_state_provider_download_success": "Усіпшно завантажено",
|
||||
"image_viewer_page_state_provider_share_error": "Помилка спільного доступу",
|
||||
"invalid_date": "Invalid date",
|
||||
"invalid_date_format": "Invalid date format",
|
||||
"library_page_albums": "Альбоми",
|
||||
"library_page_archive": "Архів",
|
||||
"library_page_device_albums": "Альбоми на пристрої",
|
||||
@@ -311,6 +327,7 @@
|
||||
"multiselect_grid_edit_date_time_err_read_only": "Неможливо редагувати дату елементів лише для читання, пропущено",
|
||||
"multiselect_grid_edit_gps_err_read_only": "Неможливо редагувати місцезнаходження елементів лише для читання, пропущено",
|
||||
"no_assets_to_show": "Елементи відсутні",
|
||||
"no_name": "No name",
|
||||
"notification_permission_dialog_cancel": "Скасувати",
|
||||
"notification_permission_dialog_content": "Щоб увімкнути сповіщення, перейдіть до Налаштувань і надайте дозвіл.",
|
||||
"notification_permission_dialog_settings": "Налаштування",
|
||||
@@ -354,17 +371,30 @@
|
||||
"scaffold_body_error_occurred": "Виникла помилка",
|
||||
"search_bar_hint": "Шукати ваші знімки",
|
||||
"search_filter_apply": "Застосувати фільтр",
|
||||
"search_filter_camera": "Camera",
|
||||
"search_filter_camera_make": "Виробник",
|
||||
"search_filter_camera_model": "Модель",
|
||||
"search_filter_camera_title": "Select camera type",
|
||||
"search_filter_date": "Date",
|
||||
"search_filter_date_interval": "{start} to {end}",
|
||||
"search_filter_date_title": "Select a date range",
|
||||
"search_filter_display_option_archive": "Архів",
|
||||
"search_filter_display_option_favorite": "Улюблені",
|
||||
"search_filter_display_option_not_in_album": "Не в альбомі",
|
||||
"search_filter_display_options": "Display Options",
|
||||
"search_filter_display_options_title": "Display options",
|
||||
"search_filter_location": "Location",
|
||||
"search_filter_location_city": "Місто",
|
||||
"search_filter_location_country": "Країна",
|
||||
"search_filter_location_state": "Регіон",
|
||||
"search_filter_location_title": "Select location",
|
||||
"search_filter_media_type": "Media Type",
|
||||
"search_filter_media_type_all": "Усі",
|
||||
"search_filter_media_type_image": "Зображення",
|
||||
"search_filter_media_type_title": "Select media type",
|
||||
"search_filter_media_type_video": "Відео",
|
||||
"search_filter_people": "People",
|
||||
"search_filter_people_title": "Select people",
|
||||
"search_page_categories": "Категорії",
|
||||
"search_page_favorites": "Улюблені",
|
||||
"search_page_motion_photos": "Рухомі знімки",
|
||||
|
||||
@@ -3,13 +3,15 @@
|
||||
"action_common_cancel": "Từ chối",
|
||||
"action_common_clear": "Xoá",
|
||||
"action_common_confirm": "Xác nhận",
|
||||
"action_common_save": "Save",
|
||||
"action_common_select": "Select",
|
||||
"action_common_update": "Cập nhật",
|
||||
"add_to_album_bottom_sheet_added": "Thêm vào {album}",
|
||||
"add_to_album_bottom_sheet_already_exists": "Đã có sẵn trong {album}",
|
||||
"advanced_settings_log_level_title": "Phân loại nhật ký: {}",
|
||||
"advanced_settings_prefer_remote_subtitle": "Trên một số thiết bị, việc tải hình thu nhỏ từ ảnh trên thiết bị diễn ra chậm. Kích hoạt cài đặt này để tải ảnh từ máy chủ.",
|
||||
"advanced_settings_prefer_remote_title": "Ưu tiên ảnh từ máy chủ",
|
||||
"advanced_settings_proxy_headers_subtitle": "Xác định các header của proxy Immich sẽ gửi kèm theo mỗi yêu cầu mạng.",
|
||||
"advanced_settings_proxy_headers_subtitle": "Xác định các header của proxy mà Immich sẽ gửi kèm theo mỗi yêu cầu mạng.",
|
||||
"advanced_settings_proxy_headers_title": "Các header của proxy",
|
||||
"advanced_settings_self_signed_ssl_subtitle": "Bỏ qua xác minh chứng chỉ SSL cho máy chủ cuối. Yêu cầu cho chứng chỉ tự ký.",
|
||||
"advanced_settings_self_signed_ssl_title": "Cho phép chứng chỉ SSL tự ký",
|
||||
@@ -141,11 +143,21 @@
|
||||
"change_password_form_new_password": "Mật khẩu mới",
|
||||
"change_password_form_password_mismatch": "Mật khẩu không giống nhau",
|
||||
"change_password_form_reenter_new_password": "Nhập lại mật khẩu mới",
|
||||
"client_cert_dialog_msg_confirm": "OK",
|
||||
"client_cert_enter_password": "Enter Password",
|
||||
"client_cert_import": "Import",
|
||||
"client_cert_import_success_msg": "Client certificate is imported",
|
||||
"client_cert_invalid_msg": "Invalid certificate file or wrong password",
|
||||
"client_cert_remove": "Remove",
|
||||
"client_cert_remove_msg": "Client certificate is removed",
|
||||
"client_cert_subtitle": "Supports PKCS12 (.p12, .pfx) format only. Certificate Import/Remove is available only before login",
|
||||
"client_cert_title": "SSL Client Certificate",
|
||||
"common_add_to_album": "Thêm vào album",
|
||||
"common_change_password": "Thay đổi mật khẩu",
|
||||
"common_create_new_album": "Tạo album mới",
|
||||
"common_server_error": "Vui lòng kiểm tra kết nối mạng của bạn, đảm bảo máy chủ có thể truy cập được và các phiên bản ứng dụng/máy chủ phải tương thích với nhau",
|
||||
"common_shared": "Chia sẻ",
|
||||
"contextual_search": "Sunrise on the beach",
|
||||
"control_bottom_app_bar_add_to_album": "Thêm vào album",
|
||||
"control_bottom_app_bar_album_info": "{} mục",
|
||||
"control_bottom_app_bar_album_info_shared": "{} mục chia sẻ",
|
||||
@@ -154,6 +166,7 @@
|
||||
"control_bottom_app_bar_delete": "Xoá",
|
||||
"control_bottom_app_bar_delete_from_immich": "Xóa khỏi Immich",
|
||||
"control_bottom_app_bar_delete_from_local": "Xóa khỏi thiết bị\n",
|
||||
"control_bottom_app_bar_edit": "Edit",
|
||||
"control_bottom_app_bar_edit_location": "Chỉnh sửa vị trí",
|
||||
"control_bottom_app_bar_edit_time": "Chỉnh sửa Ngày và Giờ",
|
||||
"control_bottom_app_bar_favorite": "Yêu thích",
|
||||
@@ -203,12 +216,13 @@
|
||||
"experimental_settings_title": "Chưa hoàn thiện",
|
||||
"favorites_page_no_favorites": "Không tìm thấy ảnh yêu thích",
|
||||
"favorites_page_title": "Ảnh yêu thích",
|
||||
"filename_search": "File name or extension",
|
||||
"haptic_feedback_switch": "Bật haptic feedback\n",
|
||||
"haptic_feedback_title": "Haptic Feedback\n",
|
||||
"header_settings_add_header_tip": "Thêm Header",
|
||||
"header_settings_field_validator_msg": "Trường này không được để trống",
|
||||
"header_settings_header_name_input": "Tên header",
|
||||
"header_settings_header_value_input": "Giá trị header",
|
||||
"header_settings_header_name_input": "Tên Header",
|
||||
"header_settings_header_value_input": "Giá trị Header",
|
||||
"header_settings_page_title": "Các header của proxy",
|
||||
"headers_settings_tile_subtitle": "Xác định proxy header ứng dụng sẽ gửi kèm theo mỗi yêu cầu mạng.",
|
||||
"headers_settings_tile_title": "Tuỳ chỉnh các header của proxy",
|
||||
@@ -230,6 +244,8 @@
|
||||
"image_viewer_page_state_provider_download_started": "Đã bắt đầu tải xuống",
|
||||
"image_viewer_page_state_provider_download_success": "Tải xuống thành công",
|
||||
"image_viewer_page_state_provider_share_error": "Chia sẻ không thành công",
|
||||
"invalid_date": "Invalid date",
|
||||
"invalid_date_format": "Invalid date format",
|
||||
"library_page_albums": "Album",
|
||||
"library_page_archive": "Kho lưu trữ",
|
||||
"library_page_device_albums": "Album trên thiết bị",
|
||||
@@ -311,6 +327,7 @@
|
||||
"multiselect_grid_edit_date_time_err_read_only": "Không thể chỉnh sửa ngày của ảnh chỉ có quyền đọc, bỏ qua",
|
||||
"multiselect_grid_edit_gps_err_read_only": "Không thể chỉnh sửa vị trí của ảnh chỉ có quyền đọc, bỏ qua",
|
||||
"no_assets_to_show": "Không có mục nào để hiển thị",
|
||||
"no_name": "No name",
|
||||
"notification_permission_dialog_cancel": "Từ chối",
|
||||
"notification_permission_dialog_content": "Để bật thông báo, chuyển tới Cài đặt và chọn cho phép",
|
||||
"notification_permission_dialog_settings": "Cài đặt",
|
||||
@@ -354,17 +371,30 @@
|
||||
"scaffold_body_error_occurred": "Xảy ra lỗi",
|
||||
"search_bar_hint": "Tìm kiếm ảnh của bạn",
|
||||
"search_filter_apply": "Áp dụng bộ lọc",
|
||||
"search_filter_camera": "Camera",
|
||||
"search_filter_camera_make": "Chụp bởi",
|
||||
"search_filter_camera_model": "Model",
|
||||
"search_filter_camera_title": "Select camera type",
|
||||
"search_filter_date": "Date",
|
||||
"search_filter_date_interval": "{start} to {end}",
|
||||
"search_filter_date_title": "Select a date range",
|
||||
"search_filter_display_option_archive": "Kho lưu trữ",
|
||||
"search_filter_display_option_favorite": "Yêu thích",
|
||||
"search_filter_display_option_not_in_album": "Không nằm trong album",
|
||||
"search_filter_display_options": "Display Options",
|
||||
"search_filter_display_options_title": "Display options",
|
||||
"search_filter_location": "Location",
|
||||
"search_filter_location_city": "Thành phố",
|
||||
"search_filter_location_country": "Quốc gia",
|
||||
"search_filter_location_state": "Tỉnh",
|
||||
"search_filter_location_title": "Select location",
|
||||
"search_filter_media_type": "Media Type",
|
||||
"search_filter_media_type_all": "Tất cả",
|
||||
"search_filter_media_type_image": "Ảnh",
|
||||
"search_filter_media_type_title": "Select media type",
|
||||
"search_filter_media_type_video": "Video",
|
||||
"search_filter_people": "People",
|
||||
"search_filter_people_title": "Select people",
|
||||
"search_page_categories": "Danh mục",
|
||||
"search_page_favorites": "Ảnh yêu thích",
|
||||
"search_page_motion_photos": "Ảnh động",
|
||||
|
||||
@@ -3,6 +3,8 @@
|
||||
"action_common_cancel": "取消",
|
||||
"action_common_clear": "清空",
|
||||
"action_common_confirm": "确定",
|
||||
"action_common_save": "保存",
|
||||
"action_common_select": "选择",
|
||||
"action_common_update": "更新",
|
||||
"add_to_album_bottom_sheet_added": "添加到 {album}",
|
||||
"add_to_album_bottom_sheet_already_exists": "已在 {album} 中",
|
||||
@@ -141,11 +143,21 @@
|
||||
"change_password_form_new_password": "新密码",
|
||||
"change_password_form_password_mismatch": "密码不匹配",
|
||||
"change_password_form_reenter_new_password": "再次输入新密码",
|
||||
"client_cert_dialog_msg_confirm": "确定",
|
||||
"client_cert_enter_password": "输入密码",
|
||||
"client_cert_import": "导入",
|
||||
"client_cert_import_success_msg": "客户端证书已导入",
|
||||
"client_cert_invalid_msg": "无效的证书文件或密码错误",
|
||||
"client_cert_remove": "移除",
|
||||
"client_cert_remove_msg": "客户端证书已移除",
|
||||
"client_cert_subtitle": "仅支持PKCS12 (.p12, .pfx)格式。仅可在登录前进行证书的导入和移除",
|
||||
"client_cert_title": "SSL客户端证书",
|
||||
"common_add_to_album": "添加到相册",
|
||||
"common_change_password": "更改密码",
|
||||
"common_create_new_album": "新建相册",
|
||||
"common_server_error": "请检查您的网络连接,确保服务器可访问且该应用程序与服务器版本兼容。",
|
||||
"common_shared": "共享",
|
||||
"contextual_search": "海滩上的日出",
|
||||
"control_bottom_app_bar_add_to_album": "添加到相册",
|
||||
"control_bottom_app_bar_album_info": "{} 项",
|
||||
"control_bottom_app_bar_album_info_shared": "{} 项 · 已共享",
|
||||
@@ -154,6 +166,7 @@
|
||||
"control_bottom_app_bar_delete": "删除",
|
||||
"control_bottom_app_bar_delete_from_immich": "从Immich服务器中删除",
|
||||
"control_bottom_app_bar_delete_from_local": "从移动设备中删除",
|
||||
"control_bottom_app_bar_edit": "编辑",
|
||||
"control_bottom_app_bar_edit_location": "编辑位置信息",
|
||||
"control_bottom_app_bar_edit_time": "编辑日期和时间",
|
||||
"control_bottom_app_bar_favorite": "收藏",
|
||||
@@ -203,6 +216,7 @@
|
||||
"experimental_settings_title": "实验性功能",
|
||||
"favorites_page_no_favorites": "未找到收藏项目",
|
||||
"favorites_page_title": "收藏",
|
||||
"filename_search": "文件名或扩展名",
|
||||
"haptic_feedback_switch": "启用振动反馈",
|
||||
"haptic_feedback_title": "振动反馈",
|
||||
"header_settings_add_header_tip": "添加标头",
|
||||
@@ -230,6 +244,8 @@
|
||||
"image_viewer_page_state_provider_download_started": "下载启动",
|
||||
"image_viewer_page_state_provider_download_success": "下载成功",
|
||||
"image_viewer_page_state_provider_share_error": "共享出错",
|
||||
"invalid_date": "无效的日期",
|
||||
"invalid_date_format": "无效的日期格式",
|
||||
"library_page_albums": "相册",
|
||||
"library_page_archive": "归档",
|
||||
"library_page_device_albums": "设备上的相册",
|
||||
@@ -311,6 +327,7 @@
|
||||
"multiselect_grid_edit_date_time_err_read_only": "无法编辑只读项目的日期,跳过",
|
||||
"multiselect_grid_edit_gps_err_read_only": "无法编辑只读项目的位置信息,跳过",
|
||||
"no_assets_to_show": "无项目展示",
|
||||
"no_name": "无姓名",
|
||||
"notification_permission_dialog_cancel": "取消",
|
||||
"notification_permission_dialog_content": "要启用通知,请转到“设置”,并选择“允许”。",
|
||||
"notification_permission_dialog_settings": "设置",
|
||||
@@ -354,17 +371,30 @@
|
||||
"scaffold_body_error_occurred": "发生错误",
|
||||
"search_bar_hint": "搜索照片",
|
||||
"search_filter_apply": "应用筛选",
|
||||
"search_filter_camera": "相机",
|
||||
"search_filter_camera_make": "制造商",
|
||||
"search_filter_camera_model": "型号",
|
||||
"search_filter_camera_title": "选择相机类型",
|
||||
"search_filter_date": "日期",
|
||||
"search_filter_date_interval": "从{start}到{end}",
|
||||
"search_filter_date_title": "选择日期范围",
|
||||
"search_filter_display_option_archive": "归档",
|
||||
"search_filter_display_option_favorite": "收藏",
|
||||
"search_filter_display_option_not_in_album": "不在相册中",
|
||||
"search_filter_display_options": "显示选项",
|
||||
"search_filter_display_options_title": "显示选项",
|
||||
"search_filter_location": "位置",
|
||||
"search_filter_location_city": "城市",
|
||||
"search_filter_location_country": "国家",
|
||||
"search_filter_location_state": "省",
|
||||
"search_filter_location_title": "选择位置",
|
||||
"search_filter_media_type": "媒体类型",
|
||||
"search_filter_media_type_all": "所有",
|
||||
"search_filter_media_type_image": "照片",
|
||||
"search_filter_media_type_title": "选择媒体类型",
|
||||
"search_filter_media_type_video": "视频",
|
||||
"search_filter_people": "人物",
|
||||
"search_filter_people_title": "选择人物",
|
||||
"search_page_categories": "类别",
|
||||
"search_page_favorites": "收藏",
|
||||
"search_page_motion_photos": "动图",
|
||||
|
||||
@@ -3,6 +3,8 @@
|
||||
"action_common_cancel": "取消",
|
||||
"action_common_clear": "清空",
|
||||
"action_common_confirm": "确定",
|
||||
"action_common_save": "保存",
|
||||
"action_common_select": "选择",
|
||||
"action_common_update": "更新",
|
||||
"add_to_album_bottom_sheet_added": "添加到 {album}",
|
||||
"add_to_album_bottom_sheet_already_exists": "已在 {album} 中",
|
||||
@@ -141,11 +143,21 @@
|
||||
"change_password_form_new_password": "新密码",
|
||||
"change_password_form_password_mismatch": "密码不匹配",
|
||||
"change_password_form_reenter_new_password": "再次输入新密码",
|
||||
"client_cert_dialog_msg_confirm": "确定",
|
||||
"client_cert_enter_password": "输入密码",
|
||||
"client_cert_import": "导入",
|
||||
"client_cert_import_success_msg": "客户端证书已导入",
|
||||
"client_cert_invalid_msg": "无效的证书文件或密码错误",
|
||||
"client_cert_remove": "移除",
|
||||
"client_cert_remove_msg": "客户端证书已移除",
|
||||
"client_cert_subtitle": "仅支持PKCS12 (.p12, .pfx)格式。仅可在登录前进行证书的导入和移除",
|
||||
"client_cert_title": "SSL客户端证书",
|
||||
"common_add_to_album": "添加到相册",
|
||||
"common_change_password": "更改密码",
|
||||
"common_create_new_album": "新建相册",
|
||||
"common_server_error": "请检查您的网络连接,确保服务器可访问且该应用程序与服务器版本兼容。",
|
||||
"common_shared": "共享",
|
||||
"contextual_search": "海滩上的日出",
|
||||
"control_bottom_app_bar_add_to_album": "添加到相册",
|
||||
"control_bottom_app_bar_album_info": "{} 项",
|
||||
"control_bottom_app_bar_album_info_shared": "{} 项 · 已共享",
|
||||
@@ -154,6 +166,7 @@
|
||||
"control_bottom_app_bar_delete": "删除",
|
||||
"control_bottom_app_bar_delete_from_immich": "从Immich服务器中删除",
|
||||
"control_bottom_app_bar_delete_from_local": "从移动设备中删除",
|
||||
"control_bottom_app_bar_edit": "编辑",
|
||||
"control_bottom_app_bar_edit_location": "编辑位置信息",
|
||||
"control_bottom_app_bar_edit_time": "编辑日期和时间",
|
||||
"control_bottom_app_bar_favorite": "收藏",
|
||||
@@ -203,6 +216,7 @@
|
||||
"experimental_settings_title": "实验性功能",
|
||||
"favorites_page_no_favorites": "未找到收藏项目",
|
||||
"favorites_page_title": "收藏",
|
||||
"filename_search": "文件名或扩展名",
|
||||
"haptic_feedback_switch": "启用振动反馈",
|
||||
"haptic_feedback_title": "振动反馈",
|
||||
"header_settings_add_header_tip": "添加标头",
|
||||
@@ -230,6 +244,8 @@
|
||||
"image_viewer_page_state_provider_download_started": "下载启动",
|
||||
"image_viewer_page_state_provider_download_success": "下载成功",
|
||||
"image_viewer_page_state_provider_share_error": "共享出错",
|
||||
"invalid_date": "无效的日期",
|
||||
"invalid_date_format": "无效的日期格式",
|
||||
"library_page_albums": "相册",
|
||||
"library_page_archive": "归档",
|
||||
"library_page_device_albums": "设备上的相册",
|
||||
@@ -311,6 +327,7 @@
|
||||
"multiselect_grid_edit_date_time_err_read_only": "无法编辑只读项目的日期,跳过",
|
||||
"multiselect_grid_edit_gps_err_read_only": "无法编辑只读项目的位置信息,跳过",
|
||||
"no_assets_to_show": "无项目展示",
|
||||
"no_name": "无姓名",
|
||||
"notification_permission_dialog_cancel": "取消",
|
||||
"notification_permission_dialog_content": "要启用通知,请转到“设置”,并选择“允许”。",
|
||||
"notification_permission_dialog_settings": "设置",
|
||||
@@ -354,17 +371,30 @@
|
||||
"scaffold_body_error_occurred": "发生错误",
|
||||
"search_bar_hint": "搜索照片",
|
||||
"search_filter_apply": "应用筛选",
|
||||
"search_filter_camera": "相机",
|
||||
"search_filter_camera_make": "制造商",
|
||||
"search_filter_camera_model": "型号",
|
||||
"search_filter_camera_title": "选择相机类型",
|
||||
"search_filter_date": "日期",
|
||||
"search_filter_date_interval": "从{start}到{end}",
|
||||
"search_filter_date_title": "选择日期范围",
|
||||
"search_filter_display_option_archive": "归档",
|
||||
"search_filter_display_option_favorite": "收藏",
|
||||
"search_filter_display_option_not_in_album": "不在相册中",
|
||||
"search_filter_display_options": "显示选项",
|
||||
"search_filter_display_options_title": "显示选项",
|
||||
"search_filter_location": "位置",
|
||||
"search_filter_location_city": "城市",
|
||||
"search_filter_location_country": "国家",
|
||||
"search_filter_location_state": "省",
|
||||
"search_filter_location_title": "选择位置",
|
||||
"search_filter_media_type": "媒体类型",
|
||||
"search_filter_media_type_all": "所有",
|
||||
"search_filter_media_type_image": "照片",
|
||||
"search_filter_media_type_title": "选择媒体类型",
|
||||
"search_filter_media_type_video": "视频",
|
||||
"search_filter_people": "人物",
|
||||
"search_filter_people_title": "选择人物",
|
||||
"search_page_categories": "类别",
|
||||
"search_page_favorites": "收藏",
|
||||
"search_page_motion_photos": "动图",
|
||||
|
||||
@@ -3,6 +3,8 @@
|
||||
"action_common_cancel": "Cancel",
|
||||
"action_common_clear": "Clear",
|
||||
"action_common_confirm": "Confirm",
|
||||
"action_common_save": "Save",
|
||||
"action_common_select": "Select",
|
||||
"action_common_update": "Update",
|
||||
"add_to_album_bottom_sheet_added": "Added to {album}",
|
||||
"add_to_album_bottom_sheet_already_exists": "Already in {album}",
|
||||
@@ -141,11 +143,21 @@
|
||||
"change_password_form_new_password": "New Password",
|
||||
"change_password_form_password_mismatch": "Passwords do not match",
|
||||
"change_password_form_reenter_new_password": "Re-enter New Password",
|
||||
"client_cert_dialog_msg_confirm": "OK",
|
||||
"client_cert_enter_password": "Enter Password",
|
||||
"client_cert_import": "Import",
|
||||
"client_cert_import_success_msg": "Client certificate is imported",
|
||||
"client_cert_invalid_msg": "Invalid certificate file or wrong password",
|
||||
"client_cert_remove": "Remove",
|
||||
"client_cert_remove_msg": "Client certificate is removed",
|
||||
"client_cert_subtitle": "Supports PKCS12 (.p12, .pfx) format only. Certificate Import/Remove is available only before login",
|
||||
"client_cert_title": "SSL Client Certificate",
|
||||
"common_add_to_album": "Add to album",
|
||||
"common_change_password": "Change Password",
|
||||
"common_create_new_album": "Create new album",
|
||||
"common_server_error": "Please check your network connection, make sure the server is reachable and app/server versions are compatible.",
|
||||
"common_shared": "Shared",
|
||||
"contextual_search": "Sunrise on the beach",
|
||||
"control_bottom_app_bar_add_to_album": "Add to album",
|
||||
"control_bottom_app_bar_album_info": "{} items",
|
||||
"control_bottom_app_bar_album_info_shared": "{} items · Shared",
|
||||
@@ -154,6 +166,7 @@
|
||||
"control_bottom_app_bar_delete": "Delete",
|
||||
"control_bottom_app_bar_delete_from_immich": "Delete from Immich",
|
||||
"control_bottom_app_bar_delete_from_local": "Delete from device",
|
||||
"control_bottom_app_bar_edit": "Edit",
|
||||
"control_bottom_app_bar_edit_location": "Edit Location",
|
||||
"control_bottom_app_bar_edit_time": "Edit Date & Time",
|
||||
"control_bottom_app_bar_favorite": "Favorite",
|
||||
@@ -203,6 +216,7 @@
|
||||
"experimental_settings_title": "Experimental",
|
||||
"favorites_page_no_favorites": "No favorite assets found",
|
||||
"favorites_page_title": "Favorites",
|
||||
"filename_search": "File name or extension",
|
||||
"haptic_feedback_switch": "Enable haptic feedback",
|
||||
"haptic_feedback_title": "Haptic Feedback",
|
||||
"header_settings_add_header_tip": "Add Header",
|
||||
@@ -230,6 +244,8 @@
|
||||
"image_viewer_page_state_provider_download_started": "Download Started",
|
||||
"image_viewer_page_state_provider_download_success": "Download Success",
|
||||
"image_viewer_page_state_provider_share_error": "Share Error",
|
||||
"invalid_date": "Invalid date",
|
||||
"invalid_date_format": "Invalid date format",
|
||||
"library_page_albums": "Albums",
|
||||
"library_page_archive": "Archive",
|
||||
"library_page_device_albums": "Albums on Device",
|
||||
@@ -311,6 +327,7 @@
|
||||
"multiselect_grid_edit_date_time_err_read_only": "Cannot edit date of read only asset(s), skipping",
|
||||
"multiselect_grid_edit_gps_err_read_only": "Cannot edit location of read only asset(s), skipping",
|
||||
"no_assets_to_show": "No assets to show",
|
||||
"no_name": "No name",
|
||||
"notification_permission_dialog_cancel": "Cancel",
|
||||
"notification_permission_dialog_content": "To enable notifications, go to Settings and select allow.",
|
||||
"notification_permission_dialog_settings": "Settings",
|
||||
@@ -354,17 +371,30 @@
|
||||
"scaffold_body_error_occurred": "Error occurred",
|
||||
"search_bar_hint": "Search your photos",
|
||||
"search_filter_apply": "Apply filter",
|
||||
"search_filter_camera": "Camera",
|
||||
"search_filter_camera_make": "Make",
|
||||
"search_filter_camera_model": "Model",
|
||||
"search_filter_camera_title": "Select camera type",
|
||||
"search_filter_date": "Date",
|
||||
"search_filter_date_interval": "{start} to {end}",
|
||||
"search_filter_date_title": "Select a date range",
|
||||
"search_filter_display_option_archive": "Archive",
|
||||
"search_filter_display_option_favorite": "Favorite",
|
||||
"search_filter_display_option_not_in_album": "Not in album",
|
||||
"search_filter_display_options": "Display Options",
|
||||
"search_filter_display_options_title": "Display options",
|
||||
"search_filter_location": "Location",
|
||||
"search_filter_location_city": "City",
|
||||
"search_filter_location_country": "Country",
|
||||
"search_filter_location_state": "State",
|
||||
"search_filter_location_title": "Select location",
|
||||
"search_filter_media_type": "Media Type",
|
||||
"search_filter_media_type_all": "All",
|
||||
"search_filter_media_type_image": "Image",
|
||||
"search_filter_media_type_title": "Select media type",
|
||||
"search_filter_media_type_video": "Video",
|
||||
"search_filter_people": "People",
|
||||
"search_filter_people_title": "Select people",
|
||||
"search_page_categories": "Categories",
|
||||
"search_page_favorites": "Favorites",
|
||||
"search_page_motion_photos": "Motion Photos",
|
||||
|
||||
@@ -383,7 +383,7 @@
|
||||
CODE_SIGN_ENTITLEMENTS = Runner/RunnerProfile.entitlements;
|
||||
CODE_SIGN_IDENTITY = "Apple Development";
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
CURRENT_PROJECT_VERSION = 165;
|
||||
CURRENT_PROJECT_VERSION = 167;
|
||||
DEVELOPMENT_TEAM = 2F67MQ8R79;
|
||||
ENABLE_BITCODE = NO;
|
||||
INFOPLIST_FILE = Runner/Info.plist;
|
||||
@@ -525,7 +525,7 @@
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
CODE_SIGN_IDENTITY = "Apple Development";
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
CURRENT_PROJECT_VERSION = 165;
|
||||
CURRENT_PROJECT_VERSION = 167;
|
||||
DEVELOPMENT_TEAM = 2F67MQ8R79;
|
||||
ENABLE_BITCODE = NO;
|
||||
INFOPLIST_FILE = Runner/Info.plist;
|
||||
@@ -553,7 +553,7 @@
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
CODE_SIGN_IDENTITY = "Apple Development";
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
CURRENT_PROJECT_VERSION = 165;
|
||||
CURRENT_PROJECT_VERSION = 167;
|
||||
DEVELOPMENT_TEAM = 2F67MQ8R79;
|
||||
ENABLE_BITCODE = NO;
|
||||
INFOPLIST_FILE = Runner/Info.plist;
|
||||
|
||||
@@ -58,11 +58,11 @@
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>APPL</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>1.110.0</string>
|
||||
<string>1.111.0</string>
|
||||
<key>CFBundleSignature</key>
|
||||
<string>????</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>165</string>
|
||||
<string>167</string>
|
||||
<key>FLTEnableImpeller</key>
|
||||
<true/>
|
||||
<key>ITSAppUsesNonExemptEncryption</key>
|
||||
|
||||
@@ -19,7 +19,7 @@ platform :ios do
|
||||
desc "iOS Release"
|
||||
lane :release do
|
||||
increment_version_number(
|
||||
version_number: "1.110.0"
|
||||
version_number: "1.111.0"
|
||||
)
|
||||
increment_build_number(
|
||||
build_number: latest_testflight_build_number + 1,
|
||||
|
||||
@@ -43,7 +43,7 @@ class Activity {
|
||||
assetId = dto.assetId,
|
||||
comment = dto.comment,
|
||||
createdAt = dto.createdAt,
|
||||
type = dto.type == ActivityResponseDtoTypeEnum.comment
|
||||
type = dto.type == ReactionType.comment
|
||||
? ActivityType.comment
|
||||
: ActivityType.like,
|
||||
user = User.fromSimpleUserDto(dto.user);
|
||||
|
||||
@@ -9,7 +9,6 @@ import 'package:immich_mobile/routing/router.dart';
|
||||
import 'package:immich_mobile/entities/store.entity.dart';
|
||||
import 'package:immich_mobile/providers/api.provider.dart';
|
||||
import 'package:logging/logging.dart';
|
||||
import 'package:openapi/api.dart';
|
||||
|
||||
@RoutePage()
|
||||
class SplashScreenPage extends HookConsumerWidget {
|
||||
@@ -19,45 +18,22 @@ class SplashScreenPage extends HookConsumerWidget {
|
||||
Widget build(BuildContext context, WidgetRef ref) {
|
||||
final apiService = ref.watch(apiServiceProvider);
|
||||
final serverUrl = Store.tryGet(StoreKey.serverUrl);
|
||||
final endpoint = Store.tryGet(StoreKey.serverEndpoint);
|
||||
final accessToken = Store.tryGet(StoreKey.accessToken);
|
||||
final log = Logger("SplashScreenPage");
|
||||
|
||||
void performLoggingIn() async {
|
||||
bool isSuccess = false;
|
||||
bool deviceIsOffline = false;
|
||||
bool isAuthSuccess = false;
|
||||
|
||||
if (accessToken != null && serverUrl != null) {
|
||||
try {
|
||||
// Resolve API server endpoint from user provided serverUrl
|
||||
await apiService.resolveAndSetEndpoint(serverUrl);
|
||||
} on ApiException catch (error, stackTrace) {
|
||||
log.severe(
|
||||
"Failed to resolve endpoint [ApiException]",
|
||||
error,
|
||||
stackTrace,
|
||||
);
|
||||
// okay, try to continue anyway if offline
|
||||
if (error.code == 503) {
|
||||
deviceIsOffline = true;
|
||||
log.warning("Device seems to be offline upon launch");
|
||||
} else {
|
||||
log.severe("Failed to resolve endpoint", error);
|
||||
}
|
||||
} catch (error, stackTrace) {
|
||||
log.severe(
|
||||
"Failed to resolve endpoint [Catch All]",
|
||||
error,
|
||||
stackTrace,
|
||||
);
|
||||
}
|
||||
if (accessToken != null && serverUrl != null && endpoint != null) {
|
||||
apiService.setEndpoint(endpoint);
|
||||
|
||||
try {
|
||||
isSuccess = await ref
|
||||
isAuthSuccess = await ref
|
||||
.read(authenticationProvider.notifier)
|
||||
.setSuccessLoginInfo(
|
||||
accessToken: accessToken,
|
||||
serverUrl: serverUrl,
|
||||
offlineLogin: deviceIsOffline,
|
||||
);
|
||||
} catch (error, stackTrace) {
|
||||
log.severe(
|
||||
@@ -66,39 +42,35 @@ class SplashScreenPage extends HookConsumerWidget {
|
||||
stackTrace,
|
||||
);
|
||||
}
|
||||
} else {
|
||||
isAuthSuccess = false;
|
||||
log.severe(
|
||||
'Missing authentication, server, or endpoint info from the local store',
|
||||
);
|
||||
}
|
||||
|
||||
// If the device is offline and there is a currentUser stored locallly
|
||||
// Proceed into the app
|
||||
if (deviceIsOffline && Store.tryGet(StoreKey.currentUser) != null) {
|
||||
context.replaceRoute(const TabControllerRoute());
|
||||
} else if (isSuccess) {
|
||||
// If device was able to login through the internet successfully
|
||||
final hasPermission =
|
||||
await ref.read(galleryPermissionNotifier.notifier).hasPermission;
|
||||
if (hasPermission) {
|
||||
// Resume backup (if enable) then navigate
|
||||
ref.watch(backupProvider.notifier).resumeBackup();
|
||||
}
|
||||
context.replaceRoute(const TabControllerRoute());
|
||||
} else {
|
||||
if (!isAuthSuccess) {
|
||||
log.severe(
|
||||
'Unable to login through offline or online methods - logging out completely',
|
||||
'Unable to login using offline or online methods - Logging out completely',
|
||||
);
|
||||
|
||||
ref.read(authenticationProvider.notifier).logout();
|
||||
// User was unable to login through either offline or online methods
|
||||
context.replaceRoute(const LoginRoute());
|
||||
return;
|
||||
}
|
||||
|
||||
context.replaceRoute(const TabControllerRoute());
|
||||
|
||||
final hasPermission =
|
||||
await ref.read(galleryPermissionNotifier.notifier).hasPermission;
|
||||
if (hasPermission) {
|
||||
// Resume backup (if enable) then navigate
|
||||
ref.watch(backupProvider.notifier).resumeBackup();
|
||||
}
|
||||
}
|
||||
|
||||
useEffect(
|
||||
() {
|
||||
if (serverUrl != null && accessToken != null) {
|
||||
performLoggingIn();
|
||||
} else {
|
||||
context.replaceRoute(const LoginRoute());
|
||||
}
|
||||
performLoggingIn();
|
||||
return null;
|
||||
},
|
||||
[],
|
||||
|
||||
@@ -192,6 +192,7 @@ class _AspectRatioButton extends StatelessWidget {
|
||||
: Theme.of(context).iconTheme.color,
|
||||
),
|
||||
onPressed: () {
|
||||
cropController.crop = const Rect.fromLTRB(0.1, 0.1, 0.9, 0.9);
|
||||
aspectRatio.value = ratio;
|
||||
cropController.aspectRatio = ratio;
|
||||
},
|
||||
|
||||
@@ -101,7 +101,7 @@ class AuthenticationNotifier extends StateNotifier<AuthenticationState> {
|
||||
try {
|
||||
String? userEmail = Store.tryGet(StoreKey.currentUser)?.email;
|
||||
|
||||
_apiService.authenticationApi
|
||||
await _apiService.authenticationApi
|
||||
.logout()
|
||||
.then((_) => log.info("Logout was successful for $userEmail"))
|
||||
.onError(
|
||||
@@ -156,7 +156,6 @@ class AuthenticationNotifier extends StateNotifier<AuthenticationState> {
|
||||
Future<bool> setSuccessLoginInfo({
|
||||
required String accessToken,
|
||||
required String serverUrl,
|
||||
bool offlineLogin = false,
|
||||
}) async {
|
||||
_apiService.setAccessToken(accessToken);
|
||||
|
||||
@@ -165,57 +164,56 @@ class AuthenticationNotifier extends StateNotifier<AuthenticationState> {
|
||||
Store.tryGet(StoreKey.deviceId) ?? await FlutterUdid.consistentUdid;
|
||||
|
||||
bool shouldChangePassword = false;
|
||||
User? user;
|
||||
User? user = Store.tryGet(StoreKey.currentUser);
|
||||
|
||||
bool retResult = false;
|
||||
User? offlineUser = Store.tryGet(StoreKey.currentUser);
|
||||
|
||||
// If the user is offline and there is a user saved on the device,
|
||||
// if not try an online login
|
||||
if (offlineLogin && offlineUser != null) {
|
||||
user = offlineUser;
|
||||
retResult = false;
|
||||
} else {
|
||||
UserAdminResponseDto? userResponseDto;
|
||||
UserPreferencesResponseDto? userPreferences;
|
||||
try {
|
||||
userResponseDto = await _apiService.usersApi.getMyUser();
|
||||
userPreferences = await _apiService.usersApi.getMyPreferences();
|
||||
} on ApiException catch (error, stackTrace) {
|
||||
_log.severe(
|
||||
"Error getting user information from the server [API EXCEPTION]",
|
||||
error,
|
||||
stackTrace,
|
||||
);
|
||||
if (error.innerException is SocketException) {
|
||||
state = state.copyWith(isAuthenticated: true);
|
||||
}
|
||||
} catch (error, stackTrace) {
|
||||
_log.severe(
|
||||
"Error getting user information from the server [CATCH ALL]",
|
||||
error,
|
||||
stackTrace,
|
||||
);
|
||||
}
|
||||
|
||||
if (userResponseDto != null) {
|
||||
Store.put(StoreKey.deviceId, deviceId);
|
||||
Store.put(StoreKey.deviceIdHash, fastHash(deviceId));
|
||||
Store.put(
|
||||
StoreKey.currentUser,
|
||||
User.fromUserDto(userResponseDto, userPreferences),
|
||||
);
|
||||
Store.put(StoreKey.serverUrl, serverUrl);
|
||||
Store.put(StoreKey.accessToken, accessToken);
|
||||
|
||||
shouldChangePassword = userResponseDto.shouldChangePassword;
|
||||
user = User.fromUserDto(userResponseDto, userPreferences);
|
||||
|
||||
retResult = true;
|
||||
} else {
|
||||
_log.severe("Unable to get user information from the server.");
|
||||
UserAdminResponseDto? userResponse;
|
||||
UserPreferencesResponseDto? userPreferences;
|
||||
try {
|
||||
final responses = await Future.wait([
|
||||
_apiService.usersApi.getMyUser(),
|
||||
_apiService.usersApi.getMyPreferences(),
|
||||
]);
|
||||
userResponse = responses[0] as UserAdminResponseDto;
|
||||
userPreferences = responses[1] as UserPreferencesResponseDto;
|
||||
} on ApiException catch (error, stackTrace) {
|
||||
if (error.code == 401) {
|
||||
_log.severe("Unauthorized access, token likely expired. Logging out.");
|
||||
return false;
|
||||
}
|
||||
_log.severe(
|
||||
"Error getting user information from the server [API EXCEPTION]",
|
||||
stackTrace,
|
||||
);
|
||||
} catch (error, stackTrace) {
|
||||
_log.severe(
|
||||
"Error getting user information from the server [CATCH ALL]",
|
||||
error,
|
||||
stackTrace,
|
||||
);
|
||||
}
|
||||
|
||||
// If the user information is successfully retrieved, update the store
|
||||
// Due to the flow of the code, this will always happen on first login
|
||||
if (userResponse != null) {
|
||||
Store.put(StoreKey.deviceId, deviceId);
|
||||
Store.put(StoreKey.deviceIdHash, fastHash(deviceId));
|
||||
Store.put(
|
||||
StoreKey.currentUser,
|
||||
User.fromUserDto(userResponse, userPreferences),
|
||||
);
|
||||
Store.put(StoreKey.serverUrl, serverUrl);
|
||||
Store.put(StoreKey.accessToken, accessToken);
|
||||
|
||||
shouldChangePassword = userResponse.shouldChangePassword;
|
||||
user = User.fromUserDto(userResponse, userPreferences);
|
||||
} else {
|
||||
_log.severe("Unable to get user information from the server.");
|
||||
}
|
||||
|
||||
// If the user is null, the login was not successful
|
||||
// and we don't have a local copy of the user from a prior successful login
|
||||
if (user == null) {
|
||||
return false;
|
||||
}
|
||||
|
||||
state = state.copyWith(
|
||||
@@ -229,7 +227,7 @@ class AuthenticationNotifier extends StateNotifier<AuthenticationState> {
|
||||
deviceId: deviceId,
|
||||
);
|
||||
|
||||
return retResult;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -72,7 +72,7 @@ class BottomGalleryBar extends ConsumerWidget {
|
||||
),
|
||||
if (asset.isImage)
|
||||
BottomNavigationBarItem(
|
||||
icon: const Icon(Icons.edit_outlined),
|
||||
icon: const Icon(Icons.tune_outlined),
|
||||
label: 'control_bottom_app_bar_edit'.tr(),
|
||||
tooltip: 'control_bottom_app_bar_edit'.tr(),
|
||||
),
|
||||
@@ -94,7 +94,7 @@ class BottomGalleryBar extends ConsumerWidget {
|
||||
label: 'control_bottom_app_bar_stack'.tr(),
|
||||
tooltip: 'control_bottom_app_bar_stack'.tr(),
|
||||
),
|
||||
if (isOwner)
|
||||
if (isOwner && !isInAlbum)
|
||||
BottomNavigationBarItem(
|
||||
icon: const Icon(Icons.delete_outline),
|
||||
label: 'control_bottom_app_bar_delete'.tr(),
|
||||
@@ -391,10 +391,22 @@ class BottomGalleryBar extends ConsumerWidget {
|
||||
backgroundColor: Colors.black.withOpacity(0.4),
|
||||
unselectedIconTheme: const IconThemeData(color: Colors.white),
|
||||
selectedIconTheme: const IconThemeData(color: Colors.white),
|
||||
unselectedLabelStyle: const TextStyle(color: Colors.black),
|
||||
selectedLabelStyle: const TextStyle(color: Colors.black),
|
||||
showSelectedLabels: false,
|
||||
showUnselectedLabels: false,
|
||||
unselectedLabelStyle: const TextStyle(
|
||||
color: Colors.white,
|
||||
fontWeight: FontWeight.w500,
|
||||
height: 2.3,
|
||||
),
|
||||
selectedLabelStyle: const TextStyle(
|
||||
color: Colors.white,
|
||||
fontWeight: FontWeight.w500,
|
||||
height: 2.3,
|
||||
),
|
||||
unselectedFontSize: 14,
|
||||
selectedFontSize: 14,
|
||||
selectedItemColor: Colors.white,
|
||||
unselectedItemColor: Colors.white,
|
||||
showSelectedLabels: true,
|
||||
showUnselectedLabels: true,
|
||||
items: itemsList,
|
||||
onTap: (index) {
|
||||
if (index < actionslist.length) {
|
||||
|
||||
4
mobile/openapi/README.md
generated
4
mobile/openapi/README.md
generated
@@ -3,7 +3,7 @@ Immich API
|
||||
|
||||
This Dart package is automatically generated by the [OpenAPI Generator](https://openapi-generator.tech) project:
|
||||
|
||||
- API version: 1.110.0
|
||||
- API version: 1.111.0
|
||||
- Generator version: 7.5.0
|
||||
- Build package: org.openapitools.codegen.languages.DartClientCodegen
|
||||
|
||||
@@ -146,6 +146,7 @@ Class | Method | HTTP request | Description
|
||||
*LibrariesApi* | [**validate**](doc//LibrariesApi.md#validate) | **POST** /libraries/{id}/validate |
|
||||
*MapApi* | [**getMapMarkers**](doc//MapApi.md#getmapmarkers) | **GET** /map/markers |
|
||||
*MapApi* | [**getMapStyle**](doc//MapApi.md#getmapstyle) | **GET** /map/style.json |
|
||||
*MapApi* | [**reverseGeocode**](doc//MapApi.md#reversegeocode) | **GET** /map/reverse-geocode |
|
||||
*MemoriesApi* | [**addMemoryAssets**](doc//MemoriesApi.md#addmemoryassets) | **PUT** /memories/{id}/assets |
|
||||
*MemoriesApi* | [**createMemory**](doc//MemoriesApi.md#creatememory) | **POST** /memories |
|
||||
*MemoriesApi* | [**deleteMemory**](doc//MemoriesApi.md#deletememory) | **DELETE** /memories/{id} |
|
||||
@@ -339,6 +340,7 @@ Class | Method | HTTP request | Description
|
||||
- [LoginResponseDto](doc//LoginResponseDto.md)
|
||||
- [LogoutResponseDto](doc//LogoutResponseDto.md)
|
||||
- [MapMarkerResponseDto](doc//MapMarkerResponseDto.md)
|
||||
- [MapReverseGeocodeResponseDto](doc//MapReverseGeocodeResponseDto.md)
|
||||
- [MapTheme](doc//MapTheme.md)
|
||||
- [MemoryCreateDto](doc//MemoryCreateDto.md)
|
||||
- [MemoryLaneResponseDto](doc//MemoryLaneResponseDto.md)
|
||||
|
||||
1
mobile/openapi/lib/api.dart
generated
1
mobile/openapi/lib/api.dart
generated
@@ -152,6 +152,7 @@ part 'model/login_credential_dto.dart';
|
||||
part 'model/login_response_dto.dart';
|
||||
part 'model/logout_response_dto.dart';
|
||||
part 'model/map_marker_response_dto.dart';
|
||||
part 'model/map_reverse_geocode_response_dto.dart';
|
||||
part 'model/map_theme.dart';
|
||||
part 'model/memory_create_dto.dart';
|
||||
part 'model/memory_lane_response_dto.dart';
|
||||
|
||||
57
mobile/openapi/lib/api/map_api.dart
generated
57
mobile/openapi/lib/api/map_api.dart
generated
@@ -160,4 +160,61 @@ class MapApi {
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/// Performs an HTTP 'GET /map/reverse-geocode' operation and returns the [Response].
|
||||
/// Parameters:
|
||||
///
|
||||
/// * [double] lat (required):
|
||||
///
|
||||
/// * [double] lon (required):
|
||||
Future<Response> reverseGeocodeWithHttpInfo(double lat, double lon,) async {
|
||||
// ignore: prefer_const_declarations
|
||||
final path = r'/map/reverse-geocode';
|
||||
|
||||
// ignore: prefer_final_locals
|
||||
Object? postBody;
|
||||
|
||||
final queryParams = <QueryParam>[];
|
||||
final headerParams = <String, String>{};
|
||||
final formParams = <String, String>{};
|
||||
|
||||
queryParams.addAll(_queryParams('', 'lat', lat));
|
||||
queryParams.addAll(_queryParams('', 'lon', lon));
|
||||
|
||||
const contentTypes = <String>[];
|
||||
|
||||
|
||||
return apiClient.invokeAPI(
|
||||
path,
|
||||
'GET',
|
||||
queryParams,
|
||||
postBody,
|
||||
headerParams,
|
||||
formParams,
|
||||
contentTypes.isEmpty ? null : contentTypes.first,
|
||||
);
|
||||
}
|
||||
|
||||
/// Parameters:
|
||||
///
|
||||
/// * [double] lat (required):
|
||||
///
|
||||
/// * [double] lon (required):
|
||||
Future<List<MapReverseGeocodeResponseDto>?> reverseGeocode(double lat, double lon,) async {
|
||||
final response = await reverseGeocodeWithHttpInfo(lat, lon,);
|
||||
if (response.statusCode >= HttpStatus.badRequest) {
|
||||
throw ApiException(response.statusCode, await _decodeBodyBytes(response));
|
||||
}
|
||||
// When a remote server returns no body with a status of 204, we shall not decode it.
|
||||
// At the time of writing this, `dart:convert` will throw an "Unexpected end of input"
|
||||
// FormatException when trying to decode an empty string.
|
||||
if (response.body.isNotEmpty && response.statusCode != HttpStatus.noContent) {
|
||||
final responseBody = await _decodeBodyBytes(response);
|
||||
return (await apiClient.deserializeAsync(responseBody, 'List<MapReverseGeocodeResponseDto>') as List)
|
||||
.cast<MapReverseGeocodeResponseDto>()
|
||||
.toList(growable: false);
|
||||
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
15
mobile/openapi/lib/api/search_api.dart
generated
15
mobile/openapi/lib/api/search_api.dart
generated
@@ -111,12 +111,15 @@ class SearchApi {
|
||||
///
|
||||
/// * [String] country:
|
||||
///
|
||||
/// * [bool] includeNull:
|
||||
/// This property was added in v111.0.0
|
||||
///
|
||||
/// * [String] make:
|
||||
///
|
||||
/// * [String] model:
|
||||
///
|
||||
/// * [String] state:
|
||||
Future<Response> getSearchSuggestionsWithHttpInfo(SearchSuggestionType type, { String? country, String? make, String? model, String? state, }) async {
|
||||
Future<Response> getSearchSuggestionsWithHttpInfo(SearchSuggestionType type, { String? country, bool? includeNull, String? make, String? model, String? state, }) async {
|
||||
// ignore: prefer_const_declarations
|
||||
final path = r'/search/suggestions';
|
||||
|
||||
@@ -130,6 +133,9 @@ class SearchApi {
|
||||
if (country != null) {
|
||||
queryParams.addAll(_queryParams('', 'country', country));
|
||||
}
|
||||
if (includeNull != null) {
|
||||
queryParams.addAll(_queryParams('', 'includeNull', includeNull));
|
||||
}
|
||||
if (make != null) {
|
||||
queryParams.addAll(_queryParams('', 'make', make));
|
||||
}
|
||||
@@ -161,13 +167,16 @@ class SearchApi {
|
||||
///
|
||||
/// * [String] country:
|
||||
///
|
||||
/// * [bool] includeNull:
|
||||
/// This property was added in v111.0.0
|
||||
///
|
||||
/// * [String] make:
|
||||
///
|
||||
/// * [String] model:
|
||||
///
|
||||
/// * [String] state:
|
||||
Future<List<String>?> getSearchSuggestions(SearchSuggestionType type, { String? country, String? make, String? model, String? state, }) async {
|
||||
final response = await getSearchSuggestionsWithHttpInfo(type, country: country, make: make, model: model, state: state, );
|
||||
Future<List<String>?> getSearchSuggestions(SearchSuggestionType type, { String? country, bool? includeNull, String? make, String? model, String? state, }) async {
|
||||
final response = await getSearchSuggestionsWithHttpInfo(type, country: country, includeNull: includeNull, make: make, model: model, state: state, );
|
||||
if (response.statusCode >= HttpStatus.badRequest) {
|
||||
throw ApiException(response.statusCode, await _decodeBodyBytes(response));
|
||||
}
|
||||
|
||||
2
mobile/openapi/lib/api_client.dart
generated
2
mobile/openapi/lib/api_client.dart
generated
@@ -362,6 +362,8 @@ class ApiClient {
|
||||
return LogoutResponseDto.fromJson(value);
|
||||
case 'MapMarkerResponseDto':
|
||||
return MapMarkerResponseDto.fromJson(value);
|
||||
case 'MapReverseGeocodeResponseDto':
|
||||
return MapReverseGeocodeResponseDto.fromJson(value);
|
||||
case 'MapTheme':
|
||||
return MapThemeTypeTransformer().decode(value);
|
||||
case 'MemoryCreateDto':
|
||||
|
||||
78
mobile/openapi/lib/model/activity_response_dto.dart
generated
78
mobile/openapi/lib/model/activity_response_dto.dart
generated
@@ -29,7 +29,7 @@ class ActivityResponseDto {
|
||||
|
||||
String id;
|
||||
|
||||
ActivityResponseDtoTypeEnum type;
|
||||
ReactionType type;
|
||||
|
||||
UserResponseDto user;
|
||||
|
||||
@@ -86,7 +86,7 @@ class ActivityResponseDto {
|
||||
comment: mapValueOfType<String>(json, r'comment'),
|
||||
createdAt: mapDateTime(json, r'createdAt', r'')!,
|
||||
id: mapValueOfType<String>(json, r'id')!,
|
||||
type: ActivityResponseDtoTypeEnum.fromJson(json[r'type'])!,
|
||||
type: ReactionType.fromJson(json[r'type'])!,
|
||||
user: UserResponseDto.fromJson(json[r'user'])!,
|
||||
);
|
||||
}
|
||||
@@ -143,77 +143,3 @@ class ActivityResponseDto {
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
class ActivityResponseDtoTypeEnum {
|
||||
/// Instantiate a new enum with the provided [value].
|
||||
const ActivityResponseDtoTypeEnum._(this.value);
|
||||
|
||||
/// The underlying value of this enum member.
|
||||
final String value;
|
||||
|
||||
@override
|
||||
String toString() => value;
|
||||
|
||||
String toJson() => value;
|
||||
|
||||
static const comment = ActivityResponseDtoTypeEnum._(r'comment');
|
||||
static const like = ActivityResponseDtoTypeEnum._(r'like');
|
||||
|
||||
/// List of all possible values in this [enum][ActivityResponseDtoTypeEnum].
|
||||
static const values = <ActivityResponseDtoTypeEnum>[
|
||||
comment,
|
||||
like,
|
||||
];
|
||||
|
||||
static ActivityResponseDtoTypeEnum? fromJson(dynamic value) => ActivityResponseDtoTypeEnumTypeTransformer().decode(value);
|
||||
|
||||
static List<ActivityResponseDtoTypeEnum> listFromJson(dynamic json, {bool growable = false,}) {
|
||||
final result = <ActivityResponseDtoTypeEnum>[];
|
||||
if (json is List && json.isNotEmpty) {
|
||||
for (final row in json) {
|
||||
final value = ActivityResponseDtoTypeEnum.fromJson(row);
|
||||
if (value != null) {
|
||||
result.add(value);
|
||||
}
|
||||
}
|
||||
}
|
||||
return result.toList(growable: growable);
|
||||
}
|
||||
}
|
||||
|
||||
/// Transformation class that can [encode] an instance of [ActivityResponseDtoTypeEnum] to String,
|
||||
/// and [decode] dynamic data back to [ActivityResponseDtoTypeEnum].
|
||||
class ActivityResponseDtoTypeEnumTypeTransformer {
|
||||
factory ActivityResponseDtoTypeEnumTypeTransformer() => _instance ??= const ActivityResponseDtoTypeEnumTypeTransformer._();
|
||||
|
||||
const ActivityResponseDtoTypeEnumTypeTransformer._();
|
||||
|
||||
String encode(ActivityResponseDtoTypeEnum data) => data.value;
|
||||
|
||||
/// Decodes a [dynamic value][data] to a ActivityResponseDtoTypeEnum.
|
||||
///
|
||||
/// If [allowNull] is true and the [dynamic value][data] cannot be decoded successfully,
|
||||
/// then null is returned. However, if [allowNull] is false and the [dynamic value][data]
|
||||
/// cannot be decoded successfully, then an [UnimplementedError] is thrown.
|
||||
///
|
||||
/// The [allowNull] is very handy when an API changes and a new enum value is added or removed,
|
||||
/// and users are still using an old app with the old code.
|
||||
ActivityResponseDtoTypeEnum? decode(dynamic data, {bool allowNull = true}) {
|
||||
if (data != null) {
|
||||
switch (data) {
|
||||
case r'comment': return ActivityResponseDtoTypeEnum.comment;
|
||||
case r'like': return ActivityResponseDtoTypeEnum.like;
|
||||
default:
|
||||
if (!allowNull) {
|
||||
throw ArgumentError('Unknown enum value to decode: $data');
|
||||
}
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/// Singleton [ActivityResponseDtoTypeEnumTypeTransformer] instance.
|
||||
static ActivityResponseDtoTypeEnumTypeTransformer? _instance;
|
||||
}
|
||||
|
||||
|
||||
|
||||
126
mobile/openapi/lib/model/map_reverse_geocode_response_dto.dart
generated
Normal file
126
mobile/openapi/lib/model/map_reverse_geocode_response_dto.dart
generated
Normal file
@@ -0,0 +1,126 @@
|
||||
//
|
||||
// AUTO-GENERATED FILE, DO NOT MODIFY!
|
||||
//
|
||||
// @dart=2.18
|
||||
|
||||
// ignore_for_file: unused_element, unused_import
|
||||
// ignore_for_file: always_put_required_named_parameters_first
|
||||
// ignore_for_file: constant_identifier_names
|
||||
// ignore_for_file: lines_longer_than_80_chars
|
||||
|
||||
part of openapi.api;
|
||||
|
||||
class MapReverseGeocodeResponseDto {
|
||||
/// Returns a new [MapReverseGeocodeResponseDto] instance.
|
||||
MapReverseGeocodeResponseDto({
|
||||
required this.city,
|
||||
required this.country,
|
||||
required this.state,
|
||||
});
|
||||
|
||||
String? city;
|
||||
|
||||
String? country;
|
||||
|
||||
String? state;
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) => identical(this, other) || other is MapReverseGeocodeResponseDto &&
|
||||
other.city == city &&
|
||||
other.country == country &&
|
||||
other.state == state;
|
||||
|
||||
@override
|
||||
int get hashCode =>
|
||||
// ignore: unnecessary_parenthesis
|
||||
(city == null ? 0 : city!.hashCode) +
|
||||
(country == null ? 0 : country!.hashCode) +
|
||||
(state == null ? 0 : state!.hashCode);
|
||||
|
||||
@override
|
||||
String toString() => 'MapReverseGeocodeResponseDto[city=$city, country=$country, state=$state]';
|
||||
|
||||
Map<String, dynamic> toJson() {
|
||||
final json = <String, dynamic>{};
|
||||
if (this.city != null) {
|
||||
json[r'city'] = this.city;
|
||||
} else {
|
||||
// json[r'city'] = null;
|
||||
}
|
||||
if (this.country != null) {
|
||||
json[r'country'] = this.country;
|
||||
} else {
|
||||
// json[r'country'] = null;
|
||||
}
|
||||
if (this.state != null) {
|
||||
json[r'state'] = this.state;
|
||||
} else {
|
||||
// json[r'state'] = null;
|
||||
}
|
||||
return json;
|
||||
}
|
||||
|
||||
/// Returns a new [MapReverseGeocodeResponseDto] instance and imports its values from
|
||||
/// [value] if it's a [Map], null otherwise.
|
||||
// ignore: prefer_constructors_over_static_methods
|
||||
static MapReverseGeocodeResponseDto? fromJson(dynamic value) {
|
||||
if (value is Map) {
|
||||
final json = value.cast<String, dynamic>();
|
||||
|
||||
return MapReverseGeocodeResponseDto(
|
||||
city: mapValueOfType<String>(json, r'city'),
|
||||
country: mapValueOfType<String>(json, r'country'),
|
||||
state: mapValueOfType<String>(json, r'state'),
|
||||
);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
static List<MapReverseGeocodeResponseDto> listFromJson(dynamic json, {bool growable = false,}) {
|
||||
final result = <MapReverseGeocodeResponseDto>[];
|
||||
if (json is List && json.isNotEmpty) {
|
||||
for (final row in json) {
|
||||
final value = MapReverseGeocodeResponseDto.fromJson(row);
|
||||
if (value != null) {
|
||||
result.add(value);
|
||||
}
|
||||
}
|
||||
}
|
||||
return result.toList(growable: growable);
|
||||
}
|
||||
|
||||
static Map<String, MapReverseGeocodeResponseDto> mapFromJson(dynamic json) {
|
||||
final map = <String, MapReverseGeocodeResponseDto>{};
|
||||
if (json is Map && json.isNotEmpty) {
|
||||
json = json.cast<String, dynamic>(); // ignore: parameter_assignments
|
||||
for (final entry in json.entries) {
|
||||
final value = MapReverseGeocodeResponseDto.fromJson(entry.value);
|
||||
if (value != null) {
|
||||
map[entry.key] = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
return map;
|
||||
}
|
||||
|
||||
// maps a json object with a list of MapReverseGeocodeResponseDto-objects as value to a dart map
|
||||
static Map<String, List<MapReverseGeocodeResponseDto>> mapListFromJson(dynamic json, {bool growable = false,}) {
|
||||
final map = <String, List<MapReverseGeocodeResponseDto>>{};
|
||||
if (json is Map && json.isNotEmpty) {
|
||||
// ignore: parameter_assignments
|
||||
json = json.cast<String, dynamic>();
|
||||
for (final entry in json.entries) {
|
||||
map[entry.key] = MapReverseGeocodeResponseDto.listFromJson(entry.value, growable: growable,);
|
||||
}
|
||||
}
|
||||
return map;
|
||||
}
|
||||
|
||||
/// The list of required keys that must be present in a JSON.
|
||||
static const requiredKeys = <String>{
|
||||
'city',
|
||||
'country',
|
||||
'state',
|
||||
};
|
||||
}
|
||||
|
||||
75
mobile/openapi/lib/model/memory_response_dto.dart
generated
75
mobile/openapi/lib/model/memory_response_dto.dart
generated
@@ -56,7 +56,7 @@ class MemoryResponseDto {
|
||||
///
|
||||
DateTime? seenAt;
|
||||
|
||||
MemoryResponseDtoTypeEnum type;
|
||||
MemoryType type;
|
||||
|
||||
DateTime updatedAt;
|
||||
|
||||
@@ -133,7 +133,7 @@ class MemoryResponseDto {
|
||||
memoryAt: mapDateTime(json, r'memoryAt', r'')!,
|
||||
ownerId: mapValueOfType<String>(json, r'ownerId')!,
|
||||
seenAt: mapDateTime(json, r'seenAt', r''),
|
||||
type: MemoryResponseDtoTypeEnum.fromJson(json[r'type'])!,
|
||||
type: MemoryType.fromJson(json[r'type'])!,
|
||||
updatedAt: mapDateTime(json, r'updatedAt', r'')!,
|
||||
);
|
||||
}
|
||||
@@ -194,74 +194,3 @@ class MemoryResponseDto {
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
class MemoryResponseDtoTypeEnum {
|
||||
/// Instantiate a new enum with the provided [value].
|
||||
const MemoryResponseDtoTypeEnum._(this.value);
|
||||
|
||||
/// The underlying value of this enum member.
|
||||
final String value;
|
||||
|
||||
@override
|
||||
String toString() => value;
|
||||
|
||||
String toJson() => value;
|
||||
|
||||
static const onThisDay = MemoryResponseDtoTypeEnum._(r'on_this_day');
|
||||
|
||||
/// List of all possible values in this [enum][MemoryResponseDtoTypeEnum].
|
||||
static const values = <MemoryResponseDtoTypeEnum>[
|
||||
onThisDay,
|
||||
];
|
||||
|
||||
static MemoryResponseDtoTypeEnum? fromJson(dynamic value) => MemoryResponseDtoTypeEnumTypeTransformer().decode(value);
|
||||
|
||||
static List<MemoryResponseDtoTypeEnum> listFromJson(dynamic json, {bool growable = false,}) {
|
||||
final result = <MemoryResponseDtoTypeEnum>[];
|
||||
if (json is List && json.isNotEmpty) {
|
||||
for (final row in json) {
|
||||
final value = MemoryResponseDtoTypeEnum.fromJson(row);
|
||||
if (value != null) {
|
||||
result.add(value);
|
||||
}
|
||||
}
|
||||
}
|
||||
return result.toList(growable: growable);
|
||||
}
|
||||
}
|
||||
|
||||
/// Transformation class that can [encode] an instance of [MemoryResponseDtoTypeEnum] to String,
|
||||
/// and [decode] dynamic data back to [MemoryResponseDtoTypeEnum].
|
||||
class MemoryResponseDtoTypeEnumTypeTransformer {
|
||||
factory MemoryResponseDtoTypeEnumTypeTransformer() => _instance ??= const MemoryResponseDtoTypeEnumTypeTransformer._();
|
||||
|
||||
const MemoryResponseDtoTypeEnumTypeTransformer._();
|
||||
|
||||
String encode(MemoryResponseDtoTypeEnum data) => data.value;
|
||||
|
||||
/// Decodes a [dynamic value][data] to a MemoryResponseDtoTypeEnum.
|
||||
///
|
||||
/// If [allowNull] is true and the [dynamic value][data] cannot be decoded successfully,
|
||||
/// then null is returned. However, if [allowNull] is false and the [dynamic value][data]
|
||||
/// cannot be decoded successfully, then an [UnimplementedError] is thrown.
|
||||
///
|
||||
/// The [allowNull] is very handy when an API changes and a new enum value is added or removed,
|
||||
/// and users are still using an old app with the old code.
|
||||
MemoryResponseDtoTypeEnum? decode(dynamic data, {bool allowNull = true}) {
|
||||
if (data != null) {
|
||||
switch (data) {
|
||||
case r'on_this_day': return MemoryResponseDtoTypeEnum.onThisDay;
|
||||
default:
|
||||
if (!allowNull) {
|
||||
throw ArgumentError('Unknown enum value to decode: $data');
|
||||
}
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/// Singleton [MemoryResponseDtoTypeEnumTypeTransformer] instance.
|
||||
static MemoryResponseDtoTypeEnumTypeTransformer? _instance;
|
||||
}
|
||||
|
||||
|
||||
|
||||
30
mobile/openapi/lib/model/metadata_search_dto.dart
generated
30
mobile/openapi/lib/model/metadata_search_dto.dart
generated
@@ -64,20 +64,8 @@ class MetadataSearchDto {
|
||||
///
|
||||
String? checksum;
|
||||
|
||||
///
|
||||
/// Please note: This property should have been non-nullable! Since the specification file
|
||||
/// does not include a default value (using the "default:" property), however, the generated
|
||||
/// source code must fall back to having a nullable type.
|
||||
/// Consider adding a "default:" property in the specification file to hide this note.
|
||||
///
|
||||
String? city;
|
||||
|
||||
///
|
||||
/// Please note: This property should have been non-nullable! Since the specification file
|
||||
/// does not include a default value (using the "default:" property), however, the generated
|
||||
/// source code must fall back to having a nullable type.
|
||||
/// Consider adding a "default:" property in the specification file to hide this note.
|
||||
///
|
||||
String? country;
|
||||
|
||||
///
|
||||
@@ -184,12 +172,6 @@ class MetadataSearchDto {
|
||||
///
|
||||
bool? isVisible;
|
||||
|
||||
///
|
||||
/// Please note: This property should have been non-nullable! Since the specification file
|
||||
/// does not include a default value (using the "default:" property), however, the generated
|
||||
/// source code must fall back to having a nullable type.
|
||||
/// Consider adding a "default:" property in the specification file to hide this note.
|
||||
///
|
||||
String? lensModel;
|
||||
|
||||
String? libraryId;
|
||||
@@ -202,12 +184,6 @@ class MetadataSearchDto {
|
||||
///
|
||||
String? make;
|
||||
|
||||
///
|
||||
/// Please note: This property should have been non-nullable! Since the specification file
|
||||
/// does not include a default value (using the "default:" property), however, the generated
|
||||
/// source code must fall back to having a nullable type.
|
||||
/// Consider adding a "default:" property in the specification file to hide this note.
|
||||
///
|
||||
String? model;
|
||||
|
||||
///
|
||||
@@ -263,12 +239,6 @@ class MetadataSearchDto {
|
||||
///
|
||||
num? size;
|
||||
|
||||
///
|
||||
/// Please note: This property should have been non-nullable! Since the specification file
|
||||
/// does not include a default value (using the "default:" property), however, the generated
|
||||
/// source code must fall back to having a nullable type.
|
||||
/// Consider adding a "default:" property in the specification file to hide this note.
|
||||
///
|
||||
String? state;
|
||||
|
||||
///
|
||||
|
||||
30
mobile/openapi/lib/model/smart_search_dto.dart
generated
30
mobile/openapi/lib/model/smart_search_dto.dart
generated
@@ -46,20 +46,8 @@ class SmartSearchDto {
|
||||
this.withExif,
|
||||
});
|
||||
|
||||
///
|
||||
/// Please note: This property should have been non-nullable! Since the specification file
|
||||
/// does not include a default value (using the "default:" property), however, the generated
|
||||
/// source code must fall back to having a nullable type.
|
||||
/// Consider adding a "default:" property in the specification file to hide this note.
|
||||
///
|
||||
String? city;
|
||||
|
||||
///
|
||||
/// Please note: This property should have been non-nullable! Since the specification file
|
||||
/// does not include a default value (using the "default:" property), however, the generated
|
||||
/// source code must fall back to having a nullable type.
|
||||
/// Consider adding a "default:" property in the specification file to hide this note.
|
||||
///
|
||||
String? country;
|
||||
|
||||
///
|
||||
@@ -142,12 +130,6 @@ class SmartSearchDto {
|
||||
///
|
||||
bool? isVisible;
|
||||
|
||||
///
|
||||
/// Please note: This property should have been non-nullable! Since the specification file
|
||||
/// does not include a default value (using the "default:" property), however, the generated
|
||||
/// source code must fall back to having a nullable type.
|
||||
/// Consider adding a "default:" property in the specification file to hide this note.
|
||||
///
|
||||
String? lensModel;
|
||||
|
||||
String? libraryId;
|
||||
@@ -160,12 +142,6 @@ class SmartSearchDto {
|
||||
///
|
||||
String? make;
|
||||
|
||||
///
|
||||
/// Please note: This property should have been non-nullable! Since the specification file
|
||||
/// does not include a default value (using the "default:" property), however, the generated
|
||||
/// source code must fall back to having a nullable type.
|
||||
/// Consider adding a "default:" property in the specification file to hide this note.
|
||||
///
|
||||
String? model;
|
||||
|
||||
/// Minimum value: 1
|
||||
@@ -191,12 +167,6 @@ class SmartSearchDto {
|
||||
///
|
||||
num? size;
|
||||
|
||||
///
|
||||
/// Please note: This property should have been non-nullable! Since the specification file
|
||||
/// does not include a default value (using the "default:" property), however, the generated
|
||||
/// source code must fall back to having a nullable type.
|
||||
/// Consider adding a "default:" property in the specification file to hide this note.
|
||||
///
|
||||
String? state;
|
||||
|
||||
///
|
||||
|
||||
@@ -2,7 +2,7 @@ name: immich_mobile
|
||||
description: Immich - selfhosted backup media file on mobile phone
|
||||
|
||||
publish_to: 'none'
|
||||
version: 1.110.0+151
|
||||
version: 1.111.0+152
|
||||
|
||||
environment:
|
||||
sdk: '>=3.3.0 <4.0.0'
|
||||
|
||||
@@ -3109,6 +3109,60 @@
|
||||
]
|
||||
}
|
||||
},
|
||||
"/map/reverse-geocode": {
|
||||
"get": {
|
||||
"operationId": "reverseGeocode",
|
||||
"parameters": [
|
||||
{
|
||||
"name": "lat",
|
||||
"required": true,
|
||||
"in": "query",
|
||||
"schema": {
|
||||
"format": "double",
|
||||
"type": "number"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "lon",
|
||||
"required": true,
|
||||
"in": "query",
|
||||
"schema": {
|
||||
"format": "double",
|
||||
"type": "number"
|
||||
}
|
||||
}
|
||||
],
|
||||
"responses": {
|
||||
"200": {
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"items": {
|
||||
"$ref": "#/components/schemas/MapReverseGeocodeResponseDto"
|
||||
},
|
||||
"type": "array"
|
||||
}
|
||||
}
|
||||
},
|
||||
"description": ""
|
||||
}
|
||||
},
|
||||
"security": [
|
||||
{
|
||||
"bearer": []
|
||||
},
|
||||
{
|
||||
"cookie": []
|
||||
},
|
||||
{
|
||||
"api_key": []
|
||||
}
|
||||
],
|
||||
"tags": [
|
||||
"Map"
|
||||
]
|
||||
}
|
||||
},
|
||||
"/map/style.json": {
|
||||
"get": {
|
||||
"operationId": "getMapStyle",
|
||||
@@ -4673,6 +4727,15 @@
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "includeNull",
|
||||
"required": false,
|
||||
"in": "query",
|
||||
"description": "This property was added in v111.0.0",
|
||||
"schema": {
|
||||
"type": "boolean"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "make",
|
||||
"required": false,
|
||||
@@ -7033,7 +7096,7 @@
|
||||
"info": {
|
||||
"title": "Immich",
|
||||
"description": "Immich API",
|
||||
"version": "1.110.0",
|
||||
"version": "1.111.0",
|
||||
"contact": {}
|
||||
},
|
||||
"tags": [],
|
||||
@@ -7162,11 +7225,7 @@
|
||||
"type": "string"
|
||||
},
|
||||
"type": {
|
||||
"enum": [
|
||||
"comment",
|
||||
"like"
|
||||
],
|
||||
"type": "string"
|
||||
"$ref": "#/components/schemas/ReactionType"
|
||||
},
|
||||
"user": {
|
||||
"$ref": "#/components/schemas/UserResponseDto"
|
||||
@@ -9128,6 +9187,28 @@
|
||||
],
|
||||
"type": "object"
|
||||
},
|
||||
"MapReverseGeocodeResponseDto": {
|
||||
"properties": {
|
||||
"city": {
|
||||
"nullable": true,
|
||||
"type": "string"
|
||||
},
|
||||
"country": {
|
||||
"nullable": true,
|
||||
"type": "string"
|
||||
},
|
||||
"state": {
|
||||
"nullable": true,
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"city",
|
||||
"country",
|
||||
"state"
|
||||
],
|
||||
"type": "object"
|
||||
},
|
||||
"MapTheme": {
|
||||
"enum": [
|
||||
"light",
|
||||
@@ -9235,10 +9316,7 @@
|
||||
"type": "string"
|
||||
},
|
||||
"type": {
|
||||
"enum": [
|
||||
"on_this_day"
|
||||
],
|
||||
"type": "string"
|
||||
"$ref": "#/components/schemas/MemoryType"
|
||||
},
|
||||
"updatedAt": {
|
||||
"format": "date-time",
|
||||
@@ -9309,9 +9387,11 @@
|
||||
"type": "string"
|
||||
},
|
||||
"city": {
|
||||
"nullable": true,
|
||||
"type": "string"
|
||||
},
|
||||
"country": {
|
||||
"nullable": true,
|
||||
"type": "string"
|
||||
},
|
||||
"createdAfter": {
|
||||
@@ -9357,6 +9437,7 @@
|
||||
"type": "boolean"
|
||||
},
|
||||
"lensModel": {
|
||||
"nullable": true,
|
||||
"type": "string"
|
||||
},
|
||||
"libraryId": {
|
||||
@@ -9368,6 +9449,7 @@
|
||||
"type": "string"
|
||||
},
|
||||
"model": {
|
||||
"nullable": true,
|
||||
"type": "string"
|
||||
},
|
||||
"order": {
|
||||
@@ -9399,6 +9481,7 @@
|
||||
"type": "number"
|
||||
},
|
||||
"state": {
|
||||
"nullable": true,
|
||||
"type": "string"
|
||||
},
|
||||
"takenAfter": {
|
||||
@@ -10542,9 +10625,11 @@
|
||||
"SmartSearchDto": {
|
||||
"properties": {
|
||||
"city": {
|
||||
"nullable": true,
|
||||
"type": "string"
|
||||
},
|
||||
"country": {
|
||||
"nullable": true,
|
||||
"type": "string"
|
||||
},
|
||||
"createdAfter": {
|
||||
@@ -10580,6 +10665,7 @@
|
||||
"type": "boolean"
|
||||
},
|
||||
"lensModel": {
|
||||
"nullable": true,
|
||||
"type": "string"
|
||||
},
|
||||
"libraryId": {
|
||||
@@ -10591,6 +10677,7 @@
|
||||
"type": "string"
|
||||
},
|
||||
"model": {
|
||||
"nullable": true,
|
||||
"type": "string"
|
||||
},
|
||||
"page": {
|
||||
@@ -10613,6 +10700,7 @@
|
||||
"type": "number"
|
||||
},
|
||||
"state": {
|
||||
"nullable": true,
|
||||
"type": "string"
|
||||
},
|
||||
"takenAfter": {
|
||||
|
||||
10
open-api/typescript-sdk/package-lock.json
generated
10
open-api/typescript-sdk/package-lock.json
generated
@@ -1,12 +1,12 @@
|
||||
{
|
||||
"name": "@immich/sdk",
|
||||
"version": "1.110.0",
|
||||
"version": "1.111.0",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "@immich/sdk",
|
||||
"version": "1.110.0",
|
||||
"version": "1.111.0",
|
||||
"license": "GNU Affero General Public License version 3",
|
||||
"dependencies": {
|
||||
"@oazapfts/runtime": "^1.0.2"
|
||||
@@ -32,9 +32,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/typescript": {
|
||||
"version": "5.5.3",
|
||||
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.3.tgz",
|
||||
"integrity": "sha512-/hreyEujaB0w76zKo6717l3L0o/qEUtRgdvUBvlkhoWeOVMjMuHNHk0BRBzikzuGDqNmPQbg5ifMEqsHLiIUcQ==",
|
||||
"version": "5.5.4",
|
||||
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.4.tgz",
|
||||
"integrity": "sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==",
|
||||
"dev": true,
|
||||
"license": "Apache-2.0",
|
||||
"bin": {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@immich/sdk",
|
||||
"version": "1.110.0",
|
||||
"version": "1.111.0",
|
||||
"description": "Auto-generated TypeScript SDK for the Immich API",
|
||||
"type": "module",
|
||||
"main": "./build/index.js",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/**
|
||||
* Immich
|
||||
* 1.110.0
|
||||
* 1.111.0
|
||||
* DO NOT MODIFY - This file has been generated using oazapfts.
|
||||
* See https://www.npmjs.com/package/oazapfts
|
||||
*/
|
||||
@@ -26,7 +26,7 @@ export type ActivityResponseDto = {
|
||||
comment?: string | null;
|
||||
createdAt: string;
|
||||
id: string;
|
||||
"type": Type;
|
||||
"type": ReactionType;
|
||||
user: UserResponseDto;
|
||||
};
|
||||
export type ActivityCreateDto = {
|
||||
@@ -554,6 +554,11 @@ export type MapMarkerResponseDto = {
|
||||
lon: number;
|
||||
state: string | null;
|
||||
};
|
||||
export type MapReverseGeocodeResponseDto = {
|
||||
city: string | null;
|
||||
country: string | null;
|
||||
state: string | null;
|
||||
};
|
||||
export type OnThisDayDto = {
|
||||
year: number;
|
||||
};
|
||||
@@ -567,7 +572,7 @@ export type MemoryResponseDto = {
|
||||
memoryAt: string;
|
||||
ownerId: string;
|
||||
seenAt?: string;
|
||||
"type": Type2;
|
||||
"type": MemoryType;
|
||||
updatedAt: string;
|
||||
};
|
||||
export type MemoryCreateDto = {
|
||||
@@ -703,8 +708,8 @@ export type SearchExploreResponseDto = {
|
||||
};
|
||||
export type MetadataSearchDto = {
|
||||
checksum?: string;
|
||||
city?: string;
|
||||
country?: string;
|
||||
city?: string | null;
|
||||
country?: string | null;
|
||||
createdAfter?: string;
|
||||
createdBefore?: string;
|
||||
deviceAssetId?: string;
|
||||
@@ -718,10 +723,10 @@ export type MetadataSearchDto = {
|
||||
isNotInAlbum?: boolean;
|
||||
isOffline?: boolean;
|
||||
isVisible?: boolean;
|
||||
lensModel?: string;
|
||||
lensModel?: string | null;
|
||||
libraryId?: string | null;
|
||||
make?: string;
|
||||
model?: string;
|
||||
model?: string | null;
|
||||
order?: AssetOrder;
|
||||
originalFileName?: string;
|
||||
originalPath?: string;
|
||||
@@ -729,7 +734,7 @@ export type MetadataSearchDto = {
|
||||
personIds?: string[];
|
||||
previewPath?: string;
|
||||
size?: number;
|
||||
state?: string;
|
||||
state?: string | null;
|
||||
takenAfter?: string;
|
||||
takenBefore?: string;
|
||||
thumbnailPath?: string;
|
||||
@@ -777,8 +782,8 @@ export type PlacesResponseDto = {
|
||||
name: string;
|
||||
};
|
||||
export type SmartSearchDto = {
|
||||
city?: string;
|
||||
country?: string;
|
||||
city?: string | null;
|
||||
country?: string | null;
|
||||
createdAfter?: string;
|
||||
createdBefore?: string;
|
||||
deviceId?: string;
|
||||
@@ -789,15 +794,15 @@ export type SmartSearchDto = {
|
||||
isNotInAlbum?: boolean;
|
||||
isOffline?: boolean;
|
||||
isVisible?: boolean;
|
||||
lensModel?: string;
|
||||
lensModel?: string | null;
|
||||
libraryId?: string | null;
|
||||
make?: string;
|
||||
model?: string;
|
||||
model?: string | null;
|
||||
page?: number;
|
||||
personIds?: string[];
|
||||
query: string;
|
||||
size?: number;
|
||||
state?: string;
|
||||
state?: string | null;
|
||||
takenAfter?: string;
|
||||
takenBefore?: string;
|
||||
trashedAfter?: string;
|
||||
@@ -1991,6 +1996,20 @@ export function getMapMarkers({ fileCreatedAfter, fileCreatedBefore, isArchived,
|
||||
...opts
|
||||
}));
|
||||
}
|
||||
export function reverseGeocode({ lat, lon }: {
|
||||
lat: number;
|
||||
lon: number;
|
||||
}, opts?: Oazapfts.RequestOpts) {
|
||||
return oazapfts.ok(oazapfts.fetchJson<{
|
||||
status: 200;
|
||||
data: MapReverseGeocodeResponseDto[];
|
||||
}>(`/map/reverse-geocode${QS.query(QS.explode({
|
||||
lat,
|
||||
lon
|
||||
}))}`, {
|
||||
...opts
|
||||
}));
|
||||
}
|
||||
export function getMapStyle({ key, theme }: {
|
||||
key?: string;
|
||||
theme: MapTheme;
|
||||
@@ -2399,8 +2418,9 @@ export function searchSmart({ smartSearchDto }: {
|
||||
body: smartSearchDto
|
||||
})));
|
||||
}
|
||||
export function getSearchSuggestions({ country, make, model, state, $type }: {
|
||||
export function getSearchSuggestions({ country, includeNull, make, model, state, $type }: {
|
||||
country?: string;
|
||||
includeNull?: boolean;
|
||||
make?: string;
|
||||
model?: string;
|
||||
state?: string;
|
||||
@@ -2411,6 +2431,7 @@ export function getSearchSuggestions({ country, make, model, state, $type }: {
|
||||
data: string[];
|
||||
}>(`/search/suggestions${QS.query(QS.explode({
|
||||
country,
|
||||
includeNull,
|
||||
make,
|
||||
model,
|
||||
state,
|
||||
@@ -3046,10 +3067,6 @@ export enum ReactionType {
|
||||
Comment = "comment",
|
||||
Like = "like"
|
||||
}
|
||||
export enum Type {
|
||||
Comment = "comment",
|
||||
Like = "like"
|
||||
}
|
||||
export enum UserAvatarColor {
|
||||
Primary = "primary",
|
||||
Pink = "pink",
|
||||
@@ -3145,9 +3162,6 @@ export enum MapTheme {
|
||||
Light = "light",
|
||||
Dark = "dark"
|
||||
}
|
||||
export enum Type2 {
|
||||
OnThisDay = "on_this_day"
|
||||
}
|
||||
export enum MemoryType {
|
||||
OnThisDay = "on_this_day"
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
# dev build
|
||||
FROM ghcr.io/immich-app/base-server-dev:20240723@sha256:78ecd6ffa8808fab3e4062840f814633c296cb0ec98c4cb8f98b302088f3ea64 as dev
|
||||
FROM ghcr.io/immich-app/base-server-dev:20240730@sha256:3e03f236d7669d0b27fbd49bc617df69fbb719cec2310a1c7ed8291236648c22 as dev
|
||||
|
||||
RUN apt-get install --no-install-recommends -yqq tini
|
||||
WORKDIR /usr/src/app
|
||||
@@ -25,7 +25,7 @@ COPY --from=dev /usr/src/app/node_modules/@img ./node_modules/@img
|
||||
COPY --from=dev /usr/src/app/node_modules/exiftool-vendored.pl ./node_modules/exiftool-vendored.pl
|
||||
|
||||
# web build
|
||||
FROM node:20.16.0-alpine3.20@sha256:aada767bf3e4b4a1437642b81db7d8bb99a6dba27627088e4608772f1f02ebc0 as web
|
||||
FROM node:20.16.0-alpine3.20@sha256:eb8101caae9ac02229bd64c024919fe3d4504ff7f329da79ca60a04db08cef52 as web
|
||||
|
||||
WORKDIR /usr/src/open-api/typescript-sdk
|
||||
COPY open-api/typescript-sdk/package*.json open-api/typescript-sdk/tsconfig*.json ./
|
||||
@@ -41,7 +41,7 @@ RUN npm run build
|
||||
|
||||
|
||||
# prod build
|
||||
FROM ghcr.io/immich-app/base-server-prod:20240723@sha256:6f687ab6d8ba5ca4b134bdc3f1538dfe7de7d32bebb3939fbf46fa592609a554
|
||||
FROM ghcr.io/immich-app/base-server-prod:20240730@sha256:40efde970c4dfb1ace5a10211b8ca1b5f04bff5da4b7537c9f76a0454a05f47d
|
||||
|
||||
WORKDIR /usr/src/app
|
||||
ENV NODE_ENV=production \
|
||||
|
||||
2835
server/package-lock.json
generated
2835
server/package-lock.json
generated
File diff suppressed because it is too large
Load Diff
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user