Compare commits

..

12 Commits

Author SHA1 Message Date
Alex The Bot
96f29cefeb Version v1.107.2 2024-07-03 03:18:19 +00:00
Alex
6f950ea45d fix(mobile): incorrect translation string (#10794) 2024-07-02 22:13:22 -05:00
Alex
99c45bd4d2 fix(web): slow people page load (#10793) 2024-07-02 22:13:11 -05:00
Weblate (bot)
312030f275 chore(web): update translations (#10753)
Translate-URL: https://hosted.weblate.org/projects/immich/immich/ar/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/ca/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/da/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/en_devel/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/es/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/fa/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/fi/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/it/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/ja/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/ko/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/nl/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/pl/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/pt/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/sl/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/ta/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/th/
Translate-URL: https://hosted.weblate.org/projects/immich/immich/vi/
Translation: Immich/immich

Co-authored-by: Alex van den Hoogen <alex3305@gmail.com>
Co-authored-by: Andrej Kralj <andrej.kralj@gmail.com>
Co-authored-by: Aurora <arci@anche.no>
Co-authored-by: Bartłomiej Ruk <bartek04041993@gmail.com>
Co-authored-by: Eryk Michalak <gnu.ewm@protonmail.com>
Co-authored-by: Heine Olsen <olsen10051988@gmail.com>
Co-authored-by: Henrik Lievonen <henrik.lievonen@hotmail.com>
Co-authored-by: Jordi Masip <jordi@masip.cat>
Co-authored-by: Jordy H <jordy@hoebergen.net>
Co-authored-by: Junghyuk Kwon <kwon@junghy.uk>
Co-authored-by: Justin Ruiter <weblate24@justinruiter.nl>
Co-authored-by: Maciek S <maslanypotwor1@gmail.com>
Co-authored-by: Majid <abtin.php@gmail.com>
Co-authored-by: Manar Aldroubi <droubi@gmail.com>
Co-authored-by: MiguelNdeCarvalho <geral@miguelndecarvalho.pt>
Co-authored-by: Nicolò <nicveronese@gmail.com>
Co-authored-by: Ryan Gleeson <gleeson.ryanj@gmail.com>
Co-authored-by: Vincenzo Nunziata <vinciosdev@gmail.com>
Co-authored-by: Ziemowit Zabawa <ziemek.zabawa@outlook.com>
Co-authored-by: dvbthien <dvbthien@dvbthien.onmicrosoft.com>
Co-authored-by: gallegonovato <fran-carro@hotmail.es>
Co-authored-by: nazo6 <git@nazo6.dev>
Co-authored-by: polar <polar8143@users.noreply.hosted.weblate.org>
Co-authored-by: wariw <wariwpl@gmail.com>
2024-07-02 22:03:20 -05:00
Alex
bed9ccadbc chore(mobile): post release pump (#10775) 2024-07-02 16:41:40 -05:00
renovate[bot]
d55499eba0 chore(deps): update typescript-projects (#10763)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-02 17:28:24 -04:00
Daniel Dietzler
910b75c6cc docs: fix typo in translations link (#10783) 2024-07-02 16:40:51 -04:00
Jason Rasmussen
6a11464d60 fix(server): do not allow merging a person into themselves (#10776) 2024-07-02 19:56:05 +00:00
Alex The Bot
aa29f5d69c Version v1.107.1 2024-07-02 19:04:29 +00:00
Alex
1ee10ee2d6 feat(mobile): Revert render assets on device by default (#10470) (#10774)
Revert "feat(mobile): render assets on device by default (#10470)"

This reverts commit 32da9d90e4.
2024-07-02 19:01:54 +00:00
Alex
f23401d911 fix(mobile): map crashes on Android (#10773)
Revert "fix(mobile): upgrade maplibre_gl package to fix issue with crash in ios7.4 above simulator (#10182)"

This reverts commit 99c6fdbc1c.
2024-07-02 13:43:52 -05:00
Alex
14d94df1b8 chore(mobile): post release pump (#10759)
* chore(mobile): post release pump

* remove cache report file
2024-07-02 11:20:52 -05:00
53 changed files with 1170 additions and 618 deletions

View File

@@ -54,7 +54,7 @@
- [Roadmap](https://immich.app/roadmap)
- [Demo](#demo)
- [Features](#features)
- [Translations](https://immich.app/docs/developer/tranlations)
- [Translations](https://immich.app/docs/developer/translations)
- [Contributing](https://immich.app/docs/overview/support-the-project)
## Demo

12
cli/package-lock.json generated
View File

@@ -1,12 +1,12 @@
{
"name": "@immich/cli",
"version": "2.2.5",
"version": "2.2.7",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "@immich/cli",
"version": "2.2.5",
"version": "2.2.7",
"license": "GNU Affero General Public License version 3",
"dependencies": {
"fast-glob": "^3.3.2",
@@ -47,7 +47,7 @@
},
"../open-api/typescript-sdk": {
"name": "@immich/sdk",
"version": "1.107.0",
"version": "1.107.2",
"dev": true,
"license": "GNU Affero General Public License version 3",
"dependencies": {
@@ -4315,9 +4315,9 @@
}
},
"node_modules/vite": {
"version": "5.3.1",
"resolved": "https://registry.npmjs.org/vite/-/vite-5.3.1.tgz",
"integrity": "sha512-XBmSKRLXLxiaPYamLv3/hnP/KXDai1NDexN0FpkTaZXTfycHvkRHoenpgl/fvuK/kPbB6xAgoyiryAhQNxYmAQ==",
"version": "5.3.2",
"resolved": "https://registry.npmjs.org/vite/-/vite-5.3.2.tgz",
"integrity": "sha512-6lA7OBHBlXUxiJxbO5aAY2fsHHzDr1q7DvXYnyZycRs2Dz+dXBWuhpWHvmljTRTpQC2uvGmUFFkSHF2vGo90MA==",
"dev": true,
"license": "MIT",
"dependencies": {

View File

@@ -1,6 +1,6 @@
{
"name": "@immich/cli",
"version": "2.2.5",
"version": "2.2.7",
"description": "Command Line Interface (CLI) for Immich",
"type": "module",
"exports": "./dist/index.js",

View File

@@ -1,4 +1,12 @@
[
{
"label": "v1.107.2",
"url": "https://v1.107.2.archive.immich.app"
},
{
"label": "v1.107.1",
"url": "https://v1.107.1.archive.immich.app"
},
{
"label": "v1.107.0",
"url": "https://v1.107.0.archive.immich.app"

8
e2e/package-lock.json generated
View File

@@ -1,12 +1,12 @@
{
"name": "immich-e2e",
"version": "1.107.0",
"version": "1.107.2",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "immich-e2e",
"version": "1.107.0",
"version": "1.107.2",
"license": "GNU Affero General Public License version 3",
"devDependencies": {
"@immich/cli": "file:../cli",
@@ -39,7 +39,7 @@
},
"../cli": {
"name": "@immich/cli",
"version": "2.2.5",
"version": "2.2.7",
"dev": true,
"license": "GNU Affero General Public License version 3",
"dependencies": {
@@ -81,7 +81,7 @@
},
"../open-api/typescript-sdk": {
"name": "@immich/sdk",
"version": "1.107.0",
"version": "1.107.2",
"dev": true,
"license": "GNU Affero General Public License version 3",
"dependencies": {

View File

@@ -1,6 +1,6 @@
{
"name": "immich-e2e",
"version": "1.107.0",
"version": "1.107.2",
"description": "",
"main": "index.js",
"type": "module",

View File

@@ -230,4 +230,21 @@ describe('/people', () => {
expect(body).toMatchObject({ birthDate: null });
});
});
describe('POST /people/:id/merge', () => {
it('should require authentication', async () => {
const { status, body } = await request(app).post(`/people/${uuidDto.notFound}/merge`);
expect(status).toBe(401);
expect(body).toEqual(errorDto.unauthorized);
});
it('should not supporting merging a person into themselves', async () => {
const { status, body } = await request(app)
.post(`/people/${visiblePerson.id}/merge`)
.set('Authorization', `Bearer ${admin.accessToken}`)
.send({ ids: [visiblePerson.id] });
expect(status).toBe(400);
expect(body).toEqual(errorDto.badRequest('Cannot merge a person into themselves'));
});
});
});

View File

@@ -1,6 +1,6 @@
[tool.poetry]
name = "machine-learning"
version = "1.107.0"
version = "1.107.2"
description = ""
authors = ["Hau Tran <alex.tran1502@gmail.com>"]
readme = "README.md"

View File

@@ -35,8 +35,8 @@ platform :android do
task: 'bundle',
build_type: 'Release',
properties: {
"android.injected.version.code" => 145,
"android.injected.version.name" => "1.107.0",
"android.injected.version.code" => 147,
"android.injected.version.name" => "1.107.2",
}
)
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')

View File

@@ -1,23 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<testsuites>
<testsuite name="fastlane.lanes">
<testcase classname="fastlane.lanes" name="0: default_platform" time="0.000381">
</testcase>
<testcase classname="fastlane.lanes" name="1: bundleRelease" time="52.832426">
</testcase>
<testcase classname="fastlane.lanes" name="2: upload_to_play_store" time="27.616558">
</testcase>
</testsuite>
</testsuites>

View File

@@ -17,9 +17,9 @@ PODS:
- fluttertoast (0.0.2):
- Flutter
- Toast
- FMDB (2.7.11):
- FMDB/standard (= 2.7.11)
- FMDB/standard (2.7.11)
- FMDB (2.7.5):
- FMDB/standard (= 2.7.5)
- FMDB/standard (2.7.5)
- geolocator_apple (1.2.0):
- Flutter
- image_picker_ios (0.0.1):
@@ -28,10 +28,10 @@ PODS:
- Flutter
- isar_flutter_libs (1.0.0):
- Flutter
- MapLibre (6.5.0)
- MapLibre (5.14.0-pre3)
- maplibre_gl (0.0.1):
- Flutter
- MapLibre (= 6.5.0)
- MapLibre (= 5.14.0-pre3)
- package_info_plus (0.4.5):
- Flutter
- path_provider_foundation (0.0.1):
@@ -44,7 +44,7 @@ PODS:
- photo_manager (2.0.0):
- Flutter
- FlutterMacOS
- ReachabilitySwift (5.2.3)
- ReachabilitySwift (5.0.0)
- SAMKeychain (1.5.3)
- share_plus (0.0.1):
- Flutter
@@ -54,7 +54,7 @@ PODS:
- sqflite (0.0.3):
- Flutter
- FMDB (>= 2.7.5)
- Toast (4.1.1)
- Toast (4.0.0)
- url_launcher_ios (0.0.1):
- Flutter
- video_player_avfoundation (0.0.1):
@@ -156,24 +156,24 @@ SPEC CHECKSUMS:
flutter_udid: a2482c67a61b9c806ef59dd82ed8d007f1b7ac04
flutter_web_auth: c25208760459cec375a3c39f6a8759165ca0fa4d
fluttertoast: 31b00dabfa7fb7bacd9e7dbee580d7a2ff4bf265
FMDB: 57486c1117fd8e0e6b947b2f54c3f42bf8e57a4e
FMDB: 2ce00b547f966261cd18927a3ddb07cb6f3db82a
geolocator_apple: 9157311f654584b9bb72686c55fc02a97b73f461
image_picker_ios: 4a8aadfbb6dc30ad5141a2ce3832af9214a705b5
integration_test: ce0a3ffa1de96d1a89ca0ac26fca7ea18a749ef4
isar_flutter_libs: b69f437aeab9c521821c3f376198c4371fa21073
MapLibre: 0ebfa9329d313cec8bf0a5ba5a336a1dc903785e
maplibre_gl: 943a491fffb3337c1b9de57fd377206d18c16e34
MapLibre: 620fc933c1d6029b33738c905c1490d024e5d4ef
maplibre_gl: a2efec727dd340e4c65e26d2b03b584f14881fd9
package_info_plus: 115f4ad11e0698c8c1c5d8a689390df880f47e85
path_provider_foundation: 29f094ae23ebbca9d3d0cec13889cd9060c0e943
path_provider_ios: 14f3d2fd28c4fdb42f44e0f751d12861c43cee02
permission_handler_apple: e76247795d700c14ea09e3a2d8855d41ee80a2e6
photo_manager: 4f6810b7dfc4feb03b461ac1a70dacf91fba7604
ReachabilitySwift: 7f151ff156cea1481a8411701195ac6a984f4979
ReachabilitySwift: 985039c6f7b23a1da463388634119492ff86c825
SAMKeychain: 483e1c9f32984d50ca961e26818a534283b4cd5c
share_plus: c3fef564749587fc939ef86ffb283ceac0baf9f5
shared_preferences_foundation: 5b919d13b803cadd15ed2dc053125c68730e5126
sqflite: 31f7eba61e3074736dff8807a9b41581e4f7f15a
Toast: 1f5ea13423a1e6674c4abdac5be53587ae481c4e
Toast: 91b396c56ee72a5790816f40d3a94dd357abc196
url_launcher_ios: bbd758c6e7f9fd7b5b1d4cde34d2b95fcce5e812
video_player_avfoundation: 02011213dab73ae3687df27ce441fbbcc82b5579
wakelock_plus: 8b09852c8876491e4b6d179e17dfe2a0b5f60d47

View File

@@ -265,7 +265,7 @@
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build";
shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build\n";
};
D218A34AEE62BC1EF119F5B0 /* [CP] Embed Pods Frameworks */ = {
isa = PBXShellScriptBuildPhase;
@@ -383,7 +383,7 @@
CODE_SIGN_ENTITLEMENTS = Runner/RunnerProfile.entitlements;
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 160;
CURRENT_PROJECT_VERSION = 162;
DEVELOPMENT_TEAM = 2F67MQ8R79;
ENABLE_BITCODE = NO;
INFOPLIST_FILE = Runner/Info.plist;
@@ -392,7 +392,7 @@
"$(inherited)",
"@executable_path/Frameworks",
);
MARKETING_VERSION = "$(FLUTTER_BUILD_NAME)";
MARKETING_VERSION = 1.107.0;
PRODUCT_BUNDLE_IDENTIFIER = app.alextran.immich;
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = "";
@@ -525,7 +525,7 @@
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 160;
CURRENT_PROJECT_VERSION = 162;
DEVELOPMENT_TEAM = 2F67MQ8R79;
ENABLE_BITCODE = NO;
INFOPLIST_FILE = Runner/Info.plist;
@@ -534,7 +534,7 @@
"$(inherited)",
"@executable_path/Frameworks",
);
MARKETING_VERSION = "$(FLUTTER_BUILD_NAME)";
MARKETING_VERSION = 1.107.0;
PRODUCT_BUNDLE_IDENTIFIER = app.alextran.immich;
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = "";
@@ -553,7 +553,7 @@
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 160;
CURRENT_PROJECT_VERSION = 162;
DEVELOPMENT_TEAM = 2F67MQ8R79;
ENABLE_BITCODE = NO;
INFOPLIST_FILE = Runner/Info.plist;
@@ -562,7 +562,7 @@
"$(inherited)",
"@executable_path/Frameworks",
);
MARKETING_VERSION = "$(FLUTTER_BUILD_NAME)";
MARKETING_VERSION = 1.107.0;
PRODUCT_BUNDLE_IDENTIFIER = app.alextran.immich;
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = "";

View File

@@ -58,11 +58,11 @@
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string>1.106.3</string>
<string>1.107.1</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>160</string>
<string>162</string>
<key>FLTEnableImpeller</key>
<true />
<key>ITSAppUsesNonExemptEncryption</key>

View File

@@ -19,7 +19,7 @@ platform :ios do
desc "iOS Beta"
lane :beta do
increment_version_number(
version_number: "1.107.0"
version_number: "1.107.2"
)
increment_build_number(
build_number: latest_testflight_build_number + 1,

View File

@@ -1,38 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<testsuites>
<testsuite name="fastlane.lanes">
<testcase classname="fastlane.lanes" name="0: default_platform" time="0.000491">
</testcase>
<testcase classname="fastlane.lanes" name="1: increment_version_number" time="39.414297">
</testcase>
<testcase classname="fastlane.lanes" name="2: latest_testflight_build_number" time="32.521647">
</testcase>
<testcase classname="fastlane.lanes" name="3: increment_build_number" time="0.511733">
</testcase>
<testcase classname="fastlane.lanes" name="4: build_app" time="202.628277">
</testcase>
<testcase classname="fastlane.lanes" name="5: upload_to_testflight" time="73.861852">
</testcase>
</testsuite>
</testsuites>

View File

@@ -6,7 +6,7 @@ import 'package:immich_mobile/models/map/map_marker.model.dart';
import 'package:immich_mobile/utils/map_utils.dart';
import 'package:maplibre_gl/maplibre_gl.dart';
extension MapMarkers on MapLibreMapController {
extension MapMarkers on MaplibreMapController {
static var _completer = Completer()..complete();
Future<void> addGeoJSONSourceForMarkers(List<MapMarker> markers) async {

View File

@@ -166,7 +166,7 @@ class HeaderKeyValueSettings extends StatelessWidget {
child: TextFormField(
controller: valueController,
decoration: InputDecoration(
labelText: 'header_settings_header_name_input'.tr(),
labelText: 'header_settings_header_value_input'.tr(),
border: const OutlineInputBorder(),
),
autocorrect: false,

View File

@@ -36,7 +36,7 @@ class MapPage extends HookConsumerWidget {
@override
Widget build(BuildContext context, WidgetRef ref) {
final mapController = useRef<MapLibreMapController?>(null);
final mapController = useRef<MaplibreMapController?>(null);
final markers = useRef<List<MapMarker>>([]);
final markersInBounds = useRef<List<MapMarker>>([]);
final bottomSheetStreamController = useStreamController<MapEvent>();
@@ -156,7 +156,7 @@ class MapPage extends HookConsumerWidget {
}
}
void onMapCreated(MapLibreMapController controller) async {
void onMapCreated(MaplibreMapController controller) async {
mapController.value = controller;
controller.addListener(() {
if (controller.isCameraMoving && selectedMarker.value != null) {
@@ -379,7 +379,7 @@ class _MapWithMarker extends StatelessWidget {
child: Stack(
children: [
style.widgetWhen(
onData: (style) => MapLibreMap(
onData: (style) => MaplibreMap(
initialCameraPosition:
const CameraPosition(target: LatLng(0, 0)),
styleString: style,
@@ -393,7 +393,7 @@ class _MapWithMarker extends StatelessWidget {
tiltGesturesEnabled: false,
dragEnabled: false,
myLocationEnabled: false,
attributionButtonPosition: AttributionButtonPosition.topRight,
attributionButtonPosition: AttributionButtonPosition.TopRight,
rotateGesturesEnabled: false,
),
),

View File

@@ -24,7 +24,7 @@ class MapLocationPickerPage extends HookConsumerWidget {
@override
Widget build(BuildContext context, WidgetRef ref) {
final selectedLatLng = useValueNotifier<LatLng>(initialLatLng);
final controller = useRef<MapLibreMapController?>(null);
final controller = useRef<MaplibreMapController?>(null);
final marker = useRef<Symbol?>(null);
Future<void> onStyleLoaded() async {
@@ -74,7 +74,7 @@ class MapLocationPickerPage extends HookConsumerWidget {
bottomRight: Radius.circular(40),
),
),
child: MapLibreMap(
child: MaplibreMap(
initialCameraPosition:
CameraPosition(target: initialLatLng, zoom: 12),
styleString: style,

View File

@@ -41,7 +41,7 @@ final getAllPlacesProvider =
final curatedContent = assetPlaces
.map(
(data) => SearchCuratedContent(
label: data.exifInfo?.city ?? '',
label: data.exifInfo!.city!,
id: data.id,
),
)

View File

@@ -1,8 +1,13 @@
import 'dart:async';
import 'dart:collection';
import 'dart:io';
import 'package:collection/collection.dart';
import 'package:flutter/foundation.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:immich_mobile/models/albums/album_add_asset_response.model.dart';
import 'package:immich_mobile/entities/backup_album.entity.dart';
import 'package:immich_mobile/services/backup.service.dart';
import 'package:immich_mobile/entities/album.entity.dart';
import 'package:immich_mobile/entities/asset.entity.dart';
import 'package:immich_mobile/entities/store.entity.dart';
@@ -23,6 +28,7 @@ final albumServiceProvider = Provider(
ref.watch(userServiceProvider),
ref.watch(syncServiceProvider),
ref.watch(dbProvider),
ref.watch(backupServiceProvider),
),
);
@@ -31,6 +37,7 @@ class AlbumService {
final UserService _userService;
final SyncService _syncService;
final Isar _db;
final BackupService _backupService;
final Logger _log = Logger('AlbumService');
Completer<bool> _localCompleter = Completer()..complete(false);
Completer<bool> _remoteCompleter = Completer()..complete(false);
@@ -40,6 +47,7 @@ class AlbumService {
this._userService,
this._syncService,
this._db,
this._backupService,
);
/// Checks all selected device albums for changes of albums and their assets
@@ -54,14 +62,60 @@ class AlbumService {
final Stopwatch sw = Stopwatch()..start();
bool changes = false;
try {
final List<String> excludedIds =
await _backupService.excludedAlbumsQuery().idProperty().findAll();
final List<String> selectedIds =
await _backupService.selectedAlbumsQuery().idProperty().findAll();
if (selectedIds.isEmpty) {
final numLocal = await _db.albums.where().localIdIsNotNull().count();
if (numLocal > 0) {
_syncService.removeAllLocalAlbumsAndAssets();
}
return false;
}
final List<AssetPathEntity> onDevice =
await PhotoManager.getAssetPathList(
hasAll: true,
filterOption: FilterOptionGroup(containsPathModified: true),
);
_log.info("Found ${onDevice.length} device albums");
changes = await _syncService.syncLocalAlbumAssetsToDb(onDevice);
Set<String>? excludedAssets;
if (excludedIds.isNotEmpty) {
if (Platform.isIOS) {
// iOS and Android device album working principle differ significantly
// on iOS, an asset can be in multiple albums
// on Android, an asset can only be in exactly one album (folder!) at the same time
// thus, on Android, excluding an album can be done by ignoring that album
// however, on iOS, it it necessary to load the assets from all excluded
// albums and check every asset from any selected album against the set
// of excluded assets
excludedAssets = await _loadExcludedAssetIds(onDevice, excludedIds);
_log.info("Found ${excludedAssets.length} assets to exclude");
}
// remove all excluded albums
onDevice.removeWhere((e) => excludedIds.contains(e.id));
_log.info(
"Ignoring ${excludedIds.length} excluded albums resulting in ${onDevice.length} device albums",
);
}
final hasAll = selectedIds
.map((id) => onDevice.firstWhereOrNull((a) => a.id == id))
.whereNotNull()
.any((a) => a.isAll);
if (hasAll) {
if (Platform.isAndroid) {
// remove the virtual "Recent" album and keep and individual albums
// on Android, the virtual "Recent" `lastModified` value is always null
onDevice.removeWhere((e) => e.isAll);
_log.info("'Recents' is selected, keeping all individual albums");
}
} else {
// keep only the explicitly selected albums
onDevice.removeWhere((e) => !selectedIds.contains(e.id));
_log.info("'Recents' is not selected, keeping only selected albums");
}
changes =
await _syncService.syncLocalAlbumAssetsToDb(onDevice, excludedAssets);
_log.info("Syncing completed. Changes: $changes");
} finally {
_localCompleter.complete(changes);
@@ -70,6 +124,21 @@ class AlbumService {
return changes;
}
Future<Set<String>> _loadExcludedAssetIds(
List<AssetPathEntity> albums,
List<String> excludedAlbumIds,
) async {
final Set<String> result = HashSet<String>();
for (AssetPathEntity a in albums) {
if (excludedAlbumIds.contains(a.id)) {
final List<AssetEntity> assets =
await a.getAssetListRange(start: 0, end: 0x7fffffffffffffff);
result.addAll(assets.map((e) => e.id));
}
}
return result;
}
/// Checks remote albums (owned if `isShared` is false) for changes,
/// updates the local database and returns `true` if there were any changes
Future<bool> refreshRemoteAlbums({required bool isShared}) async {

View File

@@ -24,9 +24,13 @@ class HashService {
AssetPathEntity album, {
int start = 0,
int end = 0x7fffffffffffffff,
Set<String>? excludedAssets,
}) async {
final entities = await album.getAssetListRange(start: start, end: end);
return _hashAssets(entities);
final filtered = excludedAssets == null
? entities
: entities.where((e) => !excludedAssets.contains(e.id)).toList();
return _hashAssets(filtered);
}
/// Converts a list of [AssetEntity]s to [Asset]s including only those

View File

@@ -68,9 +68,10 @@ class SyncService {
/// Syncs all device albums and their assets to the database
/// Returns `true` if there were any changes
Future<bool> syncLocalAlbumAssetsToDb(
List<AssetPathEntity> onDevice,
) =>
_lock.run(() => _syncLocalAlbumAssetsToDb(onDevice));
List<AssetPathEntity> onDevice, [
Set<String>? excludedAssets,
]) =>
_lock.run(() => _syncLocalAlbumAssetsToDb(onDevice, excludedAssets));
/// returns all Asset IDs that are not contained in the existing list
List<int> sharedAssetsToRemove(
@@ -491,8 +492,9 @@ class SyncService {
/// Syncs all device albums and their assets to the database
/// Returns `true` if there were any changes
Future<bool> _syncLocalAlbumAssetsToDb(
List<AssetPathEntity> onDevice,
) async {
List<AssetPathEntity> onDevice, [
Set<String>? excludedAssets,
]) async {
onDevice.sort((a, b) => a.id.compareTo(b.id));
final inDb =
await _db.albums.where().localIdIsNotNull().sortByLocalId().findAll();
@@ -508,8 +510,10 @@ class SyncService {
album,
deleteCandidates,
existing,
excludedAssets,
),
onlyFirst: (AssetPathEntity ape) => _addAlbumFromDevice(ape, existing),
onlyFirst: (AssetPathEntity ape) =>
_addAlbumFromDevice(ape, existing, excludedAssets),
onlySecond: (Album a) => _removeAlbumFromDb(a, deleteCandidates),
);
_log.fine(
@@ -541,13 +545,16 @@ class SyncService {
Album album,
List<Asset> deleteCandidates,
List<Asset> existing, [
Set<String>? excludedAssets,
bool forceRefresh = false,
]) async {
if (!forceRefresh && !await _hasAssetPathEntityChanged(ape, album)) {
_log.fine("Local album ${ape.name} has not changed. Skipping sync.");
return false;
}
if (!forceRefresh && await _syncDeviceAlbumFast(ape, album)) {
if (!forceRefresh &&
excludedAssets == null &&
await _syncDeviceAlbumFast(ape, album)) {
return true;
}
@@ -559,7 +566,8 @@ class SyncService {
.findAll();
assert(inDb.isSorted(Asset.compareByChecksum), "inDb not sorted!");
final int assetCountOnDevice = await ape.assetCountAsync;
final List<Asset> onDevice = await _hashService.getHashedAssets(ape);
final List<Asset> onDevice =
await _hashService.getHashedAssets(ape, excludedAssets: excludedAssets);
_removeDuplicates(onDevice);
// _removeDuplicates sorts `onDevice` by checksum
final (toAdd, toUpdate, toDelete) = _diffAssets(onDevice, inDb);
@@ -670,11 +678,13 @@ class SyncService {
/// assets already existing in the database to the list of `existing` assets
Future<void> _addAlbumFromDevice(
AssetPathEntity ape,
List<Asset> existing,
) async {
List<Asset> existing, [
Set<String>? excludedAssets,
]) async {
_log.info("Syncing a new local album to DB: ${ape.name}");
final Album a = Album.local(ape);
final assets = await _hashService.getHashedAssets(ape);
final assets =
await _hashService.getHashedAssets(ape, excludedAssets: excludedAssets);
_removeDuplicates(assets);
final (existingInDb, updated) = await _linkWithExistingFromDb(assets);
_log.info(

View File

@@ -41,10 +41,10 @@ class MapThumbnail extends HookConsumerWidget {
@override
Widget build(BuildContext context, WidgetRef ref) {
final offsettedCentre = LatLng(centre.latitude + 0.002, centre.longitude);
final controller = useRef<MapLibreMapController?>(null);
final controller = useRef<MaplibreMapController?>(null);
final position = useValueNotifier<Point<num>?>(null);
Future<void> onMapCreated(MapLibreMapController mapController) async {
Future<void> onMapCreated(MaplibreMapController mapController) async {
controller.value = mapController;
if (assetMarkerRemoteId != null) {
// The iOS impl returns wrong toScreenLocation without the delay
@@ -73,7 +73,7 @@ class MapThumbnail extends HookConsumerWidget {
alignment: Alignment.center,
children: [
style.widgetWhen(
onData: (style) => MapLibreMap(
onData: (style) => MaplibreMap(
initialCameraPosition:
CameraPosition(target: offsettedCentre, zoom: zoom),
styleString: style,

View File

@@ -3,7 +3,7 @@ Immich API
This Dart package is automatically generated by the [OpenAPI Generator](https://openapi-generator.tech) project:
- API version: 1.107.0
- API version: 1.107.2
- Generator version: 7.5.0
- Build package: org.openapitools.codegen.languages.DartClientCodegen

View File

@@ -911,27 +911,30 @@ packages:
maplibre_gl:
dependency: "direct main"
description:
name: maplibre_gl
sha256: ea2fa443e7d5dc18db7f37a0f6f5af40642888c56b81a14441aeddea077adaea
url: "https://pub.dev"
source: hosted
version: "0.20.0"
path: "."
ref: acb428a005efd9832a0a8e7ef0945f899dfb3ca5
resolved-ref: acb428a005efd9832a0a8e7ef0945f899dfb3ca5
url: "https://github.com/maplibre/flutter-maplibre-gl.git"
source: git
version: "0.18.0"
maplibre_gl_platform_interface:
dependency: transitive
description:
name: maplibre_gl_platform_interface
sha256: "718c3503f36936fbf35c34d6ddf8bf770474c5ba1e6cb1d8caece44efae424af"
url: "https://pub.dev"
source: hosted
version: "0.20.0"
path: maplibre_gl_platform_interface
ref: main
resolved-ref: acb428a005efd9832a0a8e7ef0945f899dfb3ca5
url: "https://github.com/maplibre/flutter-maplibre-gl.git"
source: git
version: "0.18.0"
maplibre_gl_web:
dependency: transitive
description:
name: maplibre_gl_web
sha256: e7d71b08f24dca70e9c9cf841b096704a677e6239447d87220ec071355768149
url: "https://pub.dev"
source: hosted
version: "0.20.0"
path: maplibre_gl_web
ref: main
resolved-ref: acb428a005efd9832a0a8e7ef0945f899dfb3ca5
url: "https://github.com/maplibre/flutter-maplibre-gl.git"
source: git
version: "0.18.0"
matcher:
dependency: transitive
description:

View File

@@ -2,7 +2,7 @@ name: immich_mobile
description: Immich - selfhosted backup media file on mobile phone
publish_to: 'none'
version: 1.107.0+145
version: 1.107.2+147
environment:
sdk: '>=3.3.0 <4.0.0'
@@ -28,7 +28,11 @@ dependencies:
video_player: ^2.8.2
chewie: ^1.7.4
socket_io_client: ^2.0.3+1
maplibre_gl: ^0.20.0
# TODO: Update it to tag once next stable release
maplibre_gl:
git:
url: https://github.com/maplibre/flutter-maplibre-gl.git
ref: acb428a005efd9832a0a8e7ef0945f899dfb3ca5
geolocator: ^11.0.0 # used to move to current location in map view
flutter_udid: ^3.0.0
flutter_svg: ^2.0.9

View File

@@ -7011,7 +7011,7 @@
"info": {
"title": "Immich",
"description": "Immich API",
"version": "1.107.0",
"version": "1.107.2",
"contact": {}
},
"tags": [],

View File

@@ -1,12 +1,12 @@
{
"name": "@immich/sdk",
"version": "1.107.0",
"version": "1.107.2",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "@immich/sdk",
"version": "1.107.0",
"version": "1.107.2",
"license": "GNU Affero General Public License version 3",
"dependencies": {
"@oazapfts/runtime": "^1.0.2"

View File

@@ -1,6 +1,6 @@
{
"name": "@immich/sdk",
"version": "1.107.0",
"version": "1.107.2",
"description": "Auto-generated TypeScript SDK for the Immich API",
"type": "module",
"main": "./build/index.js",

View File

@@ -1,6 +1,6 @@
/**
* Immich
* 1.107.0
* 1.107.2
* DO NOT MODIFY - This file has been generated using oazapfts.
* See https://www.npmjs.com/package/oazapfts
*/

View File

@@ -1,12 +1,12 @@
{
"name": "immich",
"version": "1.107.0",
"version": "1.107.2",
"lockfileVersion": 2,
"requires": true,
"packages": {
"": {
"name": "immich",
"version": "1.107.0",
"version": "1.107.2",
"license": "GNU Affero General Public License version 3",
"dependencies": {
"@nestjs/bullmq": "^10.0.1",
@@ -6175,9 +6175,9 @@
}
},
"node_modules/@types/lodash": {
"version": "4.17.5",
"resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.5.tgz",
"integrity": "sha512-MBIOHVZqVqgfro1euRDWX7OO0fBVUUMrN6Pwm8LQsz8cWhEpihlvR70ENj3f40j58TNxZaWv2ndSkInykNBBJw==",
"version": "4.17.6",
"resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.6.tgz",
"integrity": "sha512-OpXEVoCKSS3lQqjx9GGGOapBeuW5eUboYHRlHP9urXPX25IKZ6AnP5ZRxtVf63iieUbsHxLn8NQ5Nlftc6yzAA==",
"dev": true
},
"node_modules/@types/luxon": {
@@ -20832,9 +20832,9 @@
}
},
"@types/lodash": {
"version": "4.17.5",
"resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.5.tgz",
"integrity": "sha512-MBIOHVZqVqgfro1euRDWX7OO0fBVUUMrN6Pwm8LQsz8cWhEpihlvR70ENj3f40j58TNxZaWv2ndSkInykNBBJw==",
"version": "4.17.6",
"resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.6.tgz",
"integrity": "sha512-OpXEVoCKSS3lQqjx9GGGOapBeuW5eUboYHRlHP9urXPX25IKZ6AnP5ZRxtVf63iieUbsHxLn8NQ5Nlftc6yzAA==",
"dev": true
},
"@types/luxon": {

View File

@@ -1,6 +1,6 @@
{
"name": "immich",
"version": "1.107.0",
"version": "1.107.2",
"description": "",
"author": "",
"private": true,

View File

@@ -551,6 +551,10 @@ export class PersonService {
async mergePerson(auth: AuthDto, id: string, dto: MergePersonDto): Promise<BulkIdResponseDto[]> {
const mergeIds = dto.ids;
if (mergeIds.includes(id)) {
throw new BadRequestException('Cannot merge a person into themselves');
}
await this.access.requirePermission(auth, Permission.PERSON_WRITE, id);
let primaryPerson = await this.findOrFail(id);
const primaryName = primaryPerson.name || primaryPerson.id;

12
web/package-lock.json generated
View File

@@ -1,12 +1,12 @@
{
"name": "immich-web",
"version": "1.107.0",
"version": "1.107.2",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "immich-web",
"version": "1.107.0",
"version": "1.107.2",
"license": "GNU Affero General Public License version 3",
"dependencies": {
"@formatjs/icu-messageformat-parser": "^2.7.8",
@@ -70,7 +70,7 @@
},
"../open-api/typescript-sdk": {
"name": "@immich/sdk",
"version": "1.107.0",
"version": "1.107.2",
"license": "GNU Affero General Public License version 3",
"dependencies": {
"@oazapfts/runtime": "^1.0.2"
@@ -8762,9 +8762,9 @@
}
},
"node_modules/vite": {
"version": "5.3.1",
"resolved": "https://registry.npmjs.org/vite/-/vite-5.3.1.tgz",
"integrity": "sha512-XBmSKRLXLxiaPYamLv3/hnP/KXDai1NDexN0FpkTaZXTfycHvkRHoenpgl/fvuK/kPbB6xAgoyiryAhQNxYmAQ==",
"version": "5.3.2",
"resolved": "https://registry.npmjs.org/vite/-/vite-5.3.2.tgz",
"integrity": "sha512-6lA7OBHBlXUxiJxbO5aAY2fsHHzDr1q7DvXYnyZycRs2Dz+dXBWuhpWHvmljTRTpQC2uvGmUFFkSHF2vGo90MA==",
"dev": true,
"license": "MIT",
"dependencies": {

View File

@@ -1,6 +1,6 @@
{
"name": "immich-web",
"version": "1.107.0",
"version": "1.107.2",
"license": "GNU Affero General Public License version 3",
"scripts": {
"dev": "vite dev --host 0.0.0.0 --port 3000",

View File

@@ -66,27 +66,29 @@
{/if}
</a>
<div class="absolute top-2 right-2">
<ButtonContextMenu
buttonClass="icon-white-drop-shadow focus:opacity-100 {showVerticalDots ? 'opacity-100' : 'opacity-0'}"
color="opaque"
padding="2"
size="20"
icon={mdiDotsVertical}
title={$t('show_person_options')}
>
<MenuOption onClick={() => onMenuClick('hide-person')} icon={mdiEyeOffOutline} text={$t('hide_person')} />
<MenuOption onClick={() => onMenuClick('change-name')} icon={mdiAccountEditOutline} text={$t('change_name')} />
<MenuOption
onClick={() => onMenuClick('set-birth-date')}
icon={mdiCalendarEditOutline}
text={$t('set_date_of_birth')}
/>
<MenuOption
onClick={() => onMenuClick('merge-people')}
icon={mdiAccountMultipleCheckOutline}
text={$t('merge_people')}
/>
</ButtonContextMenu>
</div>
{#if showVerticalDots}
<div class="absolute top-2 right-2">
<ButtonContextMenu
buttonClass="icon-white-drop-shadow focus:opacity-100 {showVerticalDots ? 'opacity-100' : 'opacity-0'}"
color="opaque"
padding="2"
size="20"
icon={mdiDotsVertical}
title={$t('show_person_options')}
>
<MenuOption onClick={() => onMenuClick('hide-person')} icon={mdiEyeOffOutline} text={$t('hide_person')} />
<MenuOption onClick={() => onMenuClick('change-name')} icon={mdiAccountEditOutline} text={$t('change_name')} />
<MenuOption
onClick={() => onMenuClick('set-birth-date')}
icon={mdiCalendarEditOutline}
text={$t('set_date_of_birth')}
/>
<MenuOption
onClick={() => onMenuClick('merge-people')}
icon={mdiAccountMultipleCheckOutline}
text={$t('merge_people')}
/>
</ButtonContextMenu>
</div>
{/if}
</div>

View File

@@ -7,6 +7,7 @@
"actions": "العمليات",
"active": "نشط",
"activity": "النشاط",
"activity_changed": "النشاط {enabled, select, true {ممكّن} other {معطّل}}",
"add": "إضافة",
"add_a_description": "إضافة وصف",
"add_a_location": "إضافة موقع",
@@ -26,15 +27,17 @@
"added_to_favorites": "أضيفت إلى المفضلة",
"added_to_favorites_count": "تم إضافة {count} إلى المفضلة",
"admin": {
"add_exclusion_pattern_description": "إضافة أنماط الاستبعاد. يدعم التمويه باستخدام *، **، و؟. لتجاهل جميع الملفات في أي دليل يسمى \"Raw\"، استخدم \"**/Raw/**\". لتجاهل جميع الملفات التي تنتهي بـ \".tif\"، استخدم \"**/*.tif\". لتجاهل مسار مطلق، استخدم \"/path/to/ignore/**\".",
"authentication_settings": "إعدادات المصادقة",
"authentication_settings_description": "إدارة كلمة المرور وOAuth وإعدادات المصادقة الأخرى",
"authentication_settings_disable_all": "هل أنت متأكد أنك تريد تعطيل جميع طرق تسجيل الدخول؟ سيتم تعطيل تسجيل الدخول بالكامل.",
"authentication_settings_reenable": "لإعادة التمكين، استخدم <link>أمر الخادم</link>.",
"background_task_job": "العمليات في الخلفية",
"check_all": "اختر الكل",
"cleared_jobs": "تم مسح المهام لـ: {job}",
"config_set_by_file": "يتم حاليًا تعيين الإعدادات بواسطة ملف الإعدادات",
"confirm_delete_library": "هل انت متأكد أنك تريد حذف متكبة {library}؟",
"confirm_delete_library_assets": "هل انت متأكد أنك تريد حذف هذه المكتبه؟ سيؤدي ذلك الي حذف جميع الملفات البالغ عددها {count} من Immich ولا يمكن التراجع عن ذلك. الملفات سوف تبقى على القرص.",
"confirm_delete_library_assets": "هل أنت متأكد أنك تريد حذف هذه المكتبة؟ سيؤدي ذلك إلى حذف {count, plural, one {# أصل موجود} other {جميع # الأصول الموجودة}} من Immich ولا يمكن التراجع عنه. ستظل الملفات موجودة على القرص.",
"confirm_email_below": "للتأكيد, اكتب \"{email}\" في الاسفل",
"confirm_reprocess_all_faces": "هل انت متأكد انك تريد إعاده معالجه جميع الوجوه؟ هذا سوف يحذف الاشخاص الذين بالفعل سميتهم.",
"confirm_user_password_reset": "هل انت متأكد أنك تريد اعادة تعيين كلمه مرور {user}؟",
@@ -66,11 +69,13 @@
"image_thumbnail_format": "تنسيق الصور المصغّرة",
"image_thumbnail_resolution": "دقة الصور المصغّرة",
"image_thumbnail_resolution_description": "يُستخدم عند عرض مجموعات من الصور (المخطط الزمني الرئيسي، عرض الألبوم، وما إلى ذلك). يمكن أن تحافظ الدقة الأعلى على المزيد من التفاصيل ولكنها تستغرق وقتًا أطول للتشفير، ولها أحجام ملفات أكبر، ويمكن أن تقلل من استجابة التطبيق.",
"job_concurrency": "{job} تزامن",
"job_concurrency": "تزامن {job}",
"job_not_concurrency_safe": "هذه المهمة ليست آمنة للتشغيل المتزامن.",
"job_settings": "إعدادات العمليات",
"job_settings_description": "إدارة تزامن الوظائف",
"job_status": "حالة الوظيفة",
"jobs_delayed": "{jobCount, plural, other {# مؤجلة}}",
"jobs_failed": "{jobCount, plural, other {# فشلت}}",
"library_created": "تم إنشاء المكتبة: {library}",
"library_cron_expression": "تعبير Cron",
"library_cron_expression_description": "\"اضبط فاصل المسح باستخدام صيغة cron. لمزيد من المعلومات، يرجى الرجوع إلى <link>Crontab Guru</link>\"",
@@ -123,6 +128,7 @@
"map_dark_style": "النمط الداكن",
"map_enable_description": "تمكين ميزات الخرائط",
"map_light_style": "النمط الفاتح",
"map_manage_reverse_geocoding_settings": "إدارة إعدادات <link>التكوين الجغرافي المعكوس</link>",
"map_reverse_geocoding": "عكس الترميز الجغرافي",
"map_reverse_geocoding_enable_description": "تمكين عكس الترميز الجغرافي",
"map_reverse_geocoding_settings": "إعدادات عكس الترميز الجغرافي",
@@ -207,6 +213,8 @@
"sidecar_job_description": "اكتشاف أو مزامنة البيانات التعريفية الجانبية من نظام الملفات",
"slideshow_duration_description": "عدد الثواني لعرض كل صورة",
"smart_search_job_description": "قم بتشغيل التعلم الآلي على الأصول لدعم البحث الذكي",
"storage_template_date_time_description": "يتم استخدام الطابع الزمني لإنشاء الأصل للحصول على معلومات التاريخ والوقت",
"storage_template_date_time_sample": "عينة عن الوقت {date}",
"storage_template_enable_description": "تمكين محرك قالب التخزين",
"storage_template_hash_verification_enabled": "تم تمكين التحقق من الهاش",
"storage_template_hash_verification_enabled_description": "تمكين التحقق من الهاش، لا تعطل هذا إلا إذا كنت متأكدًا من تأثيراته",
@@ -245,90 +253,139 @@
"transcoding_bitrate_description": "مقاطع الفيديو التي يتجاوز معدل البت أقصى قيمة أو التي لا تكون في تنسيق مقبول",
"transcoding_codecs_learn_more": "لمعرفة المزيد حول المصطلحات المستخدمة هنا، يرجى الرجوع إلى وثائق FFmpeg لل<h264-link>H.264 codec</h264-link>, <hevc-link>HEVC codec</hevc-link> and <vp9-link>VP9 codec</vp9-link>.",
"transcoding_constant_quality_mode": "وضع الجودة الثابتة",
"transcoding_constant_quality_mode_description": "",
"transcoding_constant_rate_factor": "",
"transcoding_constant_rate_factor_description": "",
"transcoding_disabled_description": "",
"transcoding_hardware_acceleration": "",
"transcoding_hardware_acceleration_description": "",
"transcoding_hardware_decoding": "",
"transcoding_hardware_decoding_setting_description": "",
"transcoding_hevc_codec": "",
"transcoding_max_b_frames": "",
"transcoding_max_b_frames_description": "",
"transcoding_max_bitrate": "",
"transcoding_max_bitrate_description": "",
"transcoding_max_keyframe_interval": "",
"transcoding_max_keyframe_interval_description": "",
"transcoding_optimal_description": "",
"transcoding_preferred_hardware_device": "",
"transcoding_preferred_hardware_device_description": "",
"transcoding_preset_preset": "",
"transcoding_preset_preset_description": "",
"transcoding_reference_frames": "",
"transcoding_reference_frames_description": "",
"transcoding_required_description": "",
"transcoding_settings": "",
"transcoding_settings_description": "",
"transcoding_target_resolution": "",
"transcoding_target_resolution_description": "",
"transcoding_temporal_aq": "",
"transcoding_temporal_aq_description": "",
"transcoding_threads": "",
"transcoding_threads_description": "",
"transcoding_tone_mapping": "",
"transcoding_tone_mapping_description": "",
"transcoding_tone_mapping_npl": "",
"transcoding_tone_mapping_npl_description": "",
"transcoding_transcode_policy": "",
"transcoding_two_pass_encoding": "",
"transcoding_two_pass_encoding_setting_description": "",
"transcoding_video_codec": "",
"transcoding_video_codec_description": "",
"trash_enabled_description": "",
"trash_number_of_days": "",
"trash_number_of_days_description": "",
"trash_settings": "",
"trash_settings_description": "",
"user_delete_delay_settings": "",
"user_delete_delay_settings_description": "",
"user_settings": "",
"user_settings_description": "",
"version_check_enabled_description": "",
"version_check_settings": "",
"version_check_settings_description": "",
"video_conversion_job_description": ""
"transcoding_constant_quality_mode_description": "ICQ أفضل من CQP، ولكن بعض أجهزة عتاد التسريع لا تدعم هذا الوضع. تعيين هذا الخيار يسجعل الأفضلية للوضع المحدد عند استخدام الترميز بناءً على الجودة. يتم تجاهله بواسطة NVENC لأنه لا يدعم ICQ.",
"transcoding_constant_rate_factor": "عامل معدل الجودة الثابت (-crf)",
"transcoding_constant_rate_factor_description": "مستوى جودة الفيديو. القيم النموذجية هي 23 لـ H.264، 28 لـ HEVC، 31 لـ VP9، و 35 لـ AV1. كلما كانت القيمة أقل كان ذلك أفضل، ولكن يؤدي إلى ملفات أكبر.",
"transcoding_disabled_description": "لا تقم بتحويل أي مقاطع فيديو، قد تؤدي إلى عدم تشغيلها على بعض العملاء",
"transcoding_hardware_acceleration": "التسريع العتادي",
"transcoding_hardware_acceleration_description": "تجريبي؛ أسرع بكثير، ولكن ستكون جودتها أقل عند نفس معدل البت",
"transcoding_hardware_decoding": "فك تشفير الأجهزة",
"transcoding_hardware_decoding_setting_description": "ينطبق ذلك فقط على NVENC، QSV، و RKMPP. يمكن تمكين تسريع النهاية إلى النهاية بدلاً من تسريع الترميز فقط. قد لا يعمل على جميع مقاطع الفيديو.",
"transcoding_hevc_codec": "كود HEVC",
"transcoding_max_b_frames": "أقصى عدد من الإطارات B",
"transcoding_max_b_frames_description": "القيم الأعلى تعزز كفاءة الضغط، ولكنها تبطئ عملية الترميز. قد لا تكون متوافقة مع التسريع العتادي على الأجهزة القديمة. قيمة 0 تعطل إطارات B، بينما تضبط القيمة -1 هذا القيمة تلقائيًا.",
"transcoding_max_bitrate": "الحد الأقصى لمعدل البت",
"transcoding_max_bitrate_description": "يمكن أن يؤدي تعيين الحد الأقصى لمعدل البت إلى جعل أحجام الملفات أكثر قابلية للتنبؤ بها بتكلفة بسيطة بالنسبة للجودة. عند دقة 720 بكسل، تكون القيم النموذجية 2600 كيلو بايت لـ VP9 أو HEVC، أو 4500 كيلو بايت لـ H.264. معطل إذا تم ضبطه على 0.",
"transcoding_max_keyframe_interval": "الحد الأقصى للفاصل الزمني للإطار الرئيسي",
"transcoding_max_keyframe_interval_description": "يضبط الحد الأقصى لمسافة الإطار بين الإطارات الرئيسية. تؤدي القيم المنخفضة إلى زيادة سوء كفاءة الضغط، ولكنها تعمل على تحسين أوقات البحث وقد تعمل على تحسين الجودة في المشاهد ذات الحركة السريعة. 0 يضبط هذه القيمة تلقائيًا.",
"transcoding_optimal_description": "مقاطع الفيديو ذات الدقة الأعلى من الدقة المستهدفة أو بتنسيق غير مقبول",
"transcoding_preferred_hardware_device": "الجهاز المفضل",
"transcoding_preferred_hardware_device_description": "ينطبق فقط على VAAPI وQSV. يضبط عقدة dri المستخدمة لتحويل ترميز الأجهزة.",
"transcoding_preset_preset": "الضبط المُسبق (-preset)",
"transcoding_preset_preset_description": "سرعة الضغط. تؤدي الإعدادات المسبقة الأبطأ إلى إنتاج ملفات أصغر حجمًا، وزيادة الجودة عند استهداف معدل بت معين. يتجاهل VP9 السرعات الأعلى من \"الأسرع\".",
"transcoding_reference_frames": "الإطارات المرجعية",
"transcoding_reference_frames_description": "عدد الإطارات التي يجب الرجوع إليها عند ضغط إطار معين. تعمل القيم الأعلى على تحسين كفاءة الضغط، ولكنها تبطئ عملية التشفير. 0 يضبط هذه القيمة تلقائيًا.",
"transcoding_required_description": "فقط مقاطع الفيديو ذات التنسيق غير المقبول",
"transcoding_settings": "إعدادات تحويل ترميز الفيديو",
"transcoding_settings_description": "إدارة معلومات الدقة والترميز لملفات الفيديو",
"transcoding_target_resolution": "القرار المستهدف",
"transcoding_target_resolution_description": "يمكن أن تحافظ الدقة الأعلى على المزيد من التفاصيل ولكنها تستغرق وقتًا أطول للتشفير، ولها أحجام ملفات أكبر، ويمكن أن تقلل من استجابة التطبيق.",
"transcoding_temporal_aq": "التكميم التكيفي الزمني",
"transcoding_temporal_aq_description": "ينطبق فقط على NVENC. يزيد من جودة المشاهد عالية التفاصيل ومنخفضة الحركة. قد لا يكون متوافقًا مع الأجهزة القديمة.",
"transcoding_threads": "الخيوط",
"transcoding_threads_description": "تؤدي القيم الأعلى إلى تشفير أسرع، ولكنها تترك مساحة أقل للخادم لمعالجة المهام الأخرى أثناء النشاط. يجب ألا تزيد هذه القيمة عن عدد مراكز وحدة المعالجة المركزية. يزيد من الإستغلال إذا تم ضبطه على 0.",
"transcoding_tone_mapping": "رسم الخرائط النغمية",
"transcoding_tone_mapping_description": "تحاول الحفاظ على مظهر مقاطع الفيديو HDR عند تحويلها إلى SDR. يقدم كل خوارزمية تنازلات مختلفة بين اللون والتفاصيل والسطوع. Hable تحافظ على التفاصيل، Mobius تحافظ على الألوان، و Reinhard تحافظ على السطوع.",
"transcoding_tone_mapping_npl": "تحويل الصور من نطاق الإضاءة العالية",
"transcoding_tone_mapping_npl_description": "سيتم ضبط الألوان لتبدو طبيعية على شاشة بهذه السطوع. على عكس المتوقع، تزيد القيم الأقل من سطوع الفيديو والعكس بسبب تعويضها لسطوع الشاشة. قيمة 0 تضبط هذه القيمة تلقائيًا.",
"transcoding_transcode_policy": "سياسة الترميز",
"transcoding_transcode_policy_description": "سياسة تحديد متى يجب ترميز الفيديو. سيتم دائمًا ترميز مقاطع الفيديو HDR (ما لم يتم تعطيل الترميز).",
"transcoding_two_pass_encoding": "الترميز بمرورين",
"transcoding_two_pass_encoding_setting_description": "ترميز بمرورين لإنتاج مقاطع فيديو مشفرة بشكل أفضل. عند تمكين الحد الأقصى لمعدل البت (المطلوب للعمل مع H.264 و HEVC)، يستخدم هذا الوضع نطاق معدل البت استنادًا إلى الحد الأقصى لمعدل البت ويتجاهل CRF. بالنسبة لـ VP9، يمكن استخدام CRF إذا تم تعطيل الحد الأقصى لمعدل البت.",
"transcoding_video_codec": "كود الفيديو",
"transcoding_video_codec_description": "يتمتع VP9 بكفاءة عالية وتوافق مع الويب، ولكنه يستغرق وقتًا أطول في تحويل التعليمات البرمجية. يعمل HEVC بشكل مشابه، لكن توافقه مع الويب أقل. H.264 متوافق على نطاق واسع وسريع في تحويل التعليمات البرمجية، ولكنه ينتج ملفات أكبر بكثير. AV1 هو برنامج الترميز الأكثر كفاءة ولكنه يفتقر إلى الدعم على الأجهزة القديمة.",
"trash_enabled_description": "تمكين ميزات سلة المهملات",
"trash_number_of_days": "عدد الأيام",
"trash_number_of_days_description": "عدد الأيام اللازمة للاحتفاظ بالأصول في سلة المهملات قبل إزالتها نهائيًا",
"trash_settings": "إعدادات سلة المهملات",
"trash_settings_description": "إدارة إعدادات سلة المهملات",
"untracked_files": "الملفات التي لم يتم تعقبها",
"untracked_files_description": "لا يتم تعقب هذه الملفات بواسطة التطبيق. يمكن أن تكون نتيجة لعمليات نقل فاشلة، أو عمليات تحميل متقطعة، أو يتم تركها في الخلف بسبب خطأ ما",
"user_delete_delay": "سيتم جدولة حساب <b>{user}</b> وأصوله للحذف الدائم في غضون {delay, plural, one {# يوم} other {# أيام}}.",
"user_delete_delay_settings": "فترة التأخير قبل الحذف",
"user_delete_delay_settings_description": "عدد الأيام بعد الإزالة لحذف حساب المستخدم وأصوله بشكل دائم. يقوم وظيفة حذف المستخدم بالتشغيل في منتصف الليل للتحقق من المستخدمين الذين هم جاهزون للحذف. سيتم تقييم التغييرات على هذا الإعداد في التنفيذ القادم.",
"user_delete_immediately": "سيتم وضع حساب <b>{user}</b> وأصوله في قائمة الانتظار للحذف الدائم <b>على الفور</b>.",
"user_delete_immediately_checkbox": "قائمة انتظار المستخدم والأصول للحذف الفوري",
"user_management": "إدارة المستخدم",
"user_password_has_been_reset": "تمت إعادة تعيين كلمة المرور الخاصة بالمستخدم:",
"user_password_reset_description": "يرجى تزويد المستخدم بكلمة المرور المؤقتة وإبلاغه بأنه سيحتاج إلى تغيير كلمة المرور عند تسجيل الدخول التالي.",
"user_restore_description": "ستتم استعادة حساب <b>{user}</b>.",
"user_restore_scheduled_removal": "استعادة المستخدم - تمت جدولة الإزالة في {date, date, long}",
"user_settings": "إعدادات المستخدم",
"user_settings_description": "إدارة إعدادات المستخدم",
"user_successfully_removed": "تمت إزالة المستخدم {email} بنجاح.",
"version_check_enabled_description": "تمكين إرسال الطلبات الدورية إلى GitHub للتحقق من الإصدارات الجديدة",
"version_check_settings": "التحقق من الإصدار",
"version_check_settings_description": "تمكين/تعطيل إشعار الإصدار الجديد",
"video_conversion_job": "تحويل أشرطة الفيديو",
"video_conversion_job_description": "تحويل مقاطع الفيديو إلى توافق أوسع مع المتصفحات والأجهزة"
},
"admin_email": "",
"admin_password": "",
"admin_email": "البريد الإلكتروني للمشرف",
"admin_password": "كلمة سر المشرف",
"administration": "الإدارة",
"advanced": "متقدم",
"album_added": "",
"album_added_notification_setting_description": "",
"album_cover_updated": "",
"album_info_updated": "",
"age_months": "عمر {months, plural, one {# شهر} other {# أشهر}}",
"age_year_months": "عمر سنة واحدة، {months, plural, one {# شهر} other {# أشهر}}",
"age_years": "{سنوات , plural, other {العمر #}}",
"album_added": "تمت إضافة الألبوم",
"album_added_notification_setting_description": "تلقي إشعارًا بالبريد الإلكتروني عند إضافتك إلى ألبوم مشترك",
"album_cover_updated": "تم تحديث غلاف الألبوم",
"album_delete_confirmation": "هل أنت متأكد أنك تريد حذف الألبوم {album}؟\nإذا تمت مشاركة هذا الألبوم، فلن يتمكن المستخدمون الآخرون من الوصول إليه بعد الآن.",
"album_info_updated": "تم تحديث معلومات الألبوم",
"album_leave": "هل تريد مغادرة الألبوم؟",
"album_leave_confirmation": "هل أنت متأكد أنك تريد مغادرة {album}؟",
"album_name": "اسم الألبوم",
"album_options": "إعدادات الألبوم",
"album_updated": "",
"album_updated_setting_description": "",
"album_remove_user": "هل ترغب في إزالة المستخدم؟",
"album_remove_user_confirmation": "هل أنت متأكد أنك تريد إزالة {user}؟",
"album_share_no_users": "يبدو أنك قمت بمشاركة هذا الألبوم مع جميع المستخدمين أو ليس لديك أي مستخدم للمشاركة معه.",
"album_updated": "تم تحديث الألبوم",
"album_updated_setting_description": "تلقي إشعارًا عبر البريد الإلكتروني عندما يحتوي الألبوم المشترك على أصول جديدة",
"album_user_left": "تم ترك {album}",
"album_user_removed": "تم إزالة {user}",
"album_with_link_access": "السماح لأي شخص لديه الرابط برؤية الصور والأشخاص الموجودين في هذا الألبوم.",
"albums": "ألبومات",
"albums_count": "{count, plural, one {{count, number} ألبوم} other {{count, number} ألبومات}}",
"all": "الجميع",
"all_albums": "جميع الألبومات",
"all_people": "جميع الأشخاص",
"allow_dark_mode": "",
"all_videos": "جميع الفيديوهات",
"allow_dark_mode": "السماح بالوضع المعتم",
"allow_edits": "إسمح بالتعديل",
"allow_public_user_to_download": "السماح لأي مستخدم عام بالتنزيل",
"allow_public_user_to_upload": "السماح للمستخدم العام بالرفع",
"api_key": "مفتاح واجهة برمجة التطبيقات",
"api_key_description": "سيتم عرض هذه القيمة مرة واحدة فقط. يرجى التأكد من نسخها قبل إغلاق النافذة.",
"api_key_empty": "يجب ألا يكون اسم مفتاح API فارغًا",
"api_keys": "",
"api_keys": "مفاتيح واجهة برمجة التطبيقات",
"app_settings": "إعدادات التطبيق",
"appears_in": "",
"appears_in": "يظهر في",
"archive": "أرشيف",
"archive_or_unarchive_photo": "",
"archive_or_unarchive_photo": "أرشفة الصورة أو إلغاء أرشفتها",
"archive_size": "حجم الأرشيف",
"archive_size_description": "تكوين حجم الأرشيف للتنزيلات (بالجيجابايت)",
"archived": "",
"asset_offline": "",
"archived_count": "{count, plural, other {الأرشيف #}}",
"are_these_the_same_person": "هل هؤلاء هم نفس الشخص؟",
"are_you_sure_to_do_this": "هل انت متأكد من أنك تريد أن تفعل هذا؟",
"asset_added_to_album": "تمت إضافته إلى الألبوم",
"asset_adding_to_album": "جارٍ الإضافة إلى الألبوم...",
"asset_description_updated": "تم تحديث وصف الأصول",
"asset_filename_is_offline": "الأصل {filename} غير متصل",
"asset_has_unassigned_faces": "يحتوي الأصل على وجوه غير مخصصة",
"asset_hashing": "التجزئة...",
"asset_offline": "الأصول دون اتصال",
"asset_offline_description": "هذا الأصل غير متصل. لا يستطيع Immic الوصول إلى موقع الملف الخاص به. يرجى التأكد من توفر الأصل ثم إعادة فحص المكتبة.",
"asset_skipped": "تم تخطيه",
"asset_uploaded": "تم الرفع",
"asset_uploading": "جارٍ الرفع...",
"assets": "أصول",
"assets_added_count": "تمت إضافة {count, plural, one {# أصل} other {# أصول}}",
"assets_added_to_album_count": "تمت إضافة {count, plural, one {# أصل} other {# أصول}} إلى الألبوم",
"assets_added_to_name_count": "تمت إضافة {count, plural, one {# أصل} other {# أصول}} إلى {name}",
"assets_count": "{count, plural, one {# أصل} other {# أصول}}",
"assets_moved_to_trash_count": "تم نقل {count, plural, one {# أصل} other {# أصول}} إلى سلة المهملات",
"assets_permanently_deleted_count": "تم حذف {count, plural, one {# أصل} other {# أصول}} بشكل دائم",
"authorized_devices": "الأجهزه المخولة",
"back": "خلف",
"backward": "",

View File

@@ -1,4 +1,5 @@
{
"about": "Quant a",
"account": "Compte",
"account_settings": "Configuració del compte",
"acknowledge": "Reconeix",
@@ -273,16 +274,25 @@
"administration": "Administrador",
"advanced": "Avançat",
"album_added": "Àlbum afegit",
"album_added_notification_setting_description": "",
"album_added_notification_setting_description": "Rep una notificació per correu quan siguis afegit a un àlbum compartit",
"album_cover_updated": "Portada de l'àlbum actualitzada",
"album_delete_confirmation": "N'esteu segur que voleu suprimir l'àlbum {album}?\nSi aquest àlbum és compartit, altres usuaris no hi podran accedir més.",
"album_info_updated": "Informació de l'àlbum actualitzada",
"album_leave": "Sortir de l'àlbum?",
"album_leave_confirmation": "N'esteu segur que voleu sortir de {album}?",
"album_name": "Nom de l'àlbum",
"album_options": "Opcions de l'àlbum",
"album_remove_user": "Suprimir l'usuari?",
"album_remove_user_confirmation": "N'esteu segur que voleu suprimir {user}?",
"album_updated": "Àlbum actualitzat",
"album_updated_setting_description": "",
"album_user_left": "Surt de {album}",
"album_user_removed": "{user} suprimit",
"albums": "Àlbums",
"all": "Tots",
"all_albums": "Tots els àlbum",
"all_people": "Tota la gent",
"all_videos": "Tots els vídeos",
"allow_dark_mode": "Permet el tema fosc",
"allow_edits": "Permet editar",
"api_key": "Clau API",

View File

@@ -21,12 +21,17 @@
"add_to": "Tilføj til...",
"add_to_album": "Tilføj til album",
"add_to_shared_album": "Tilføj til delt album",
"added_to_archive": "Tilføjet til arkiv",
"added_to_favorites": "Tilføjet til favoritter",
"added_to_favorites_count": "Tilføjet {count} til favoritter",
"admin": {
"add_exclusion_pattern_description": "Tilføj udelukkelsesmønstre. Globbing ved hjælp af *, ** og ? understøttes. For at ignorere alle filer i enhver mappe med navnet \"Raw\", brug \"**/Raw/**\". For at ignorere alle filer, der slutter på \".tif\", brug \"**/*.tif\". For at ignorere en absolut sti, brug \"/sti/til/ignoreret/**\".",
"authentication_settings": "Godkendelsesindstillinger",
"authentication_settings_description": "Administrer adgangskode, OAuth og andre godkendelsesindstillinger",
"authentication_settings_disable_all": "Er du sikker på du vil deaktivere alle login muligheder? Login vil blive helt deaktiveret",
"background_task_job": "Baggrundsopgaver",
"check_all": "Tjek Alle",
"cleared_jobs": "Ryddet jobs til: {job}",
"config_set_by_file": "konfigurationen er i øjeblikket indstillet af en konfigurations fil",
"confirm_delete_library": "Er du sikker på, at du vil slette {library} bibliotek?",
"confirm_delete_library_assets": "Er du sikker på, at du vil slette dette bibliotek? Dette vil slette alle {count} indeholdte aktiver fra Immich og kan ikke gøres om. Filerne forbliver på disken.",

View File

@@ -214,13 +214,14 @@
"slideshow_duration_description": "Número de segundos para mostrar cada imagen",
"smart_search_job_description": "Ejecute aprendizaje automático en archivos para respaldar la búsqueda inteligente",
"storage_template_date_time_description": "La fecha y hora de creación del elemento será usada para la información sobre la fecha",
"storage_template_date_time_sample": "Hora de la muestra {date}",
"storage_template_enable_description": "Habilitar el motor de plantillas de almacenamiento",
"storage_template_hash_verification_enabled": "Verificación de hash habilitada",
"storage_template_hash_verification_enabled_description": "Habilita la verificación de hash, no la desactive a menos que esté seguro de las implicaciones",
"storage_template_migration": "Migración de plantillas de almacenamiento",
"storage_template_migration_description": "Aplicar la <link>{template}</link> actual a los elementos subidos previamente",
"storage_template_migration_info": "Los cambios en las plantillas solo se aplican a los elementos nuevos. Para aplicarlos retroactivamente a los elementos subidos previamente ejecute la <link>{job}</link>.",
"storage_template_migration_job": "Tarea de migración de las plantillas de almacenamiento",
"storage_template_migration_job": "Migración de la plantilla de almacenamiento",
"storage_template_more_details": "Para obtener más detalles sobre esta función, consulte la <template-link>Plantilla de almacenamiento</template-link> y sus <implications-link>implicaciones</implications-link>",
"storage_template_onboarding_description": "Cuando está habilitada, esta función organizará automáticamente los archivos según una plantilla definida por el usuario. Debido a problemas de estabilidad, la función se ha desactivado de forma predeterminada. Para obtener más información, consulte la <link>documentación</link>.",
"storage_template_path_length": "Límite aproximado de la longitud de la ruta: <b>{length, number}</b>/{limit, number}",
@@ -259,7 +260,7 @@
"transcoding_hardware_acceleration": "Aceleración por Hardware",
"transcoding_hardware_acceleration_description": "Experimental; mucho más rápido, pero tendrá menor calidad con la misma tasa de bits",
"transcoding_hardware_decoding": "Decodificación por hardware",
"transcoding_hardware_decoding_setting_description": "Se aplica únicamente a NVENC y RKMPP. Habilita la aceleración de un extremo a otro en lugar de solo acelerar la codificación. Puede que no funcione en todos los vídeos.",
"transcoding_hardware_decoding_setting_description": "Se aplica únicamente a NVENC, QSV y RKMPP. Habilita la aceleración de un extremo a otro en lugar de solo acelerar la codificación. Puede que no funcione en todos los vídeos.",
"transcoding_hevc_codec": "Codec HEVC",
"transcoding_max_b_frames": "Maximos B-frames",
"transcoding_max_b_frames_description": "Los valores más altos mejoran la eficiencia de la compresión, pero ralentizan la codificación. Puede que no sea compatible con la aceleración de hardware en dispositivos más antiguos. 0 desactiva los fotogramas B, mientras que -1 establece este valor automáticamente.",
@@ -372,6 +373,7 @@
"asset_description_updated": "La descripción del elemento ha sido actualizada",
"asset_filename_is_offline": "El archivo {filename} está offline",
"asset_has_unassigned_faces": "El archivo no tiene rostros asignados",
"asset_hashing": "Hashing...",
"asset_offline": "Archivos fuera de linea",
"asset_offline_description": "Este archivo está offline. Immich no puede acceder a la ubicación de su archivo. Asegúrese de que el archivo esté disponible y luego vuelva a escanear la biblioteca.",
"asset_skipped": "Omitido",
@@ -691,6 +693,7 @@
"extension": "Extension",
"external": "Externo",
"external_libraries": "Bibliotecas Externas",
"face_unassigned": "Sin asignar",
"failed_to_get_people": "No se pudo encontrar a personas",
"favorite": "Favorito",
"favorite_or_unfavorite_photo": "Foto favorita o no favorita",
@@ -899,6 +902,7 @@
"permanent_deletion_warning_setting_description": "Mostrar una advertencia al eliminar archivos permanentemente",
"permanently_delete": "Borrar permanentemente",
"permanently_delete_assets_count": "Eliminar permanentemente {count, plural, one {asset} other {assets}}",
"permanently_delete_assets_prompt": "¿Está seguro de que desea eliminar permanentemente {count, plural, one {¿este activo?} other {¿estos <b>#</b> activos?}} Esto también eliminará {count, plural, one {de tu} other {de tus}} álbum(es).",
"permanently_deleted_asset": "Archivo eliminado permanentemente",
"permanently_deleted_assets": "Eliminado permanentemente {count, plural, one {# activo} other {# activos}}",
"permanently_deleted_assets_count": "Eliminado permanentemente {count, plural, one {# asset} other {# assets}}",

View File

@@ -2,7 +2,7 @@
"about": "درباره",
"account": "حساب کاربری",
"account_settings": "تنظیمات حساب کاربری",
"acknowledge": "",
"acknowledge": "متوجه شدم",
"action": "",
"actions": "",
"active": "فعال",
@@ -27,30 +27,31 @@
"added_to_favorites_count": "{count} تا اضافه شد به علاقه مندی ها",
"admin": {
"add_exclusion_pattern_description": "",
"authentication_settings": "",
"authentication_settings_description": "",
"authentication_settings_reenable": "",
"background_task_job": "",
"check_all": "",
"cleared_jobs": "",
"config_set_by_file": "",
"confirm_delete_library": "",
"confirm_delete_library_assets": "",
"confirm_email_below": "",
"confirm_reprocess_all_faces": "",
"confirm_user_password_reset": "",
"disable_login": "",
"duplicate_detection_job_description": "",
"exclusion_pattern_description": "",
"external_library_created_at": "",
"external_library_management": "",
"face_detection": "",
"face_detection_description": "",
"facial_recognition_job_description": "",
"failed_job_command": "",
"force_delete_user_warning": "",
"forcing_refresh_library_files": "",
"image_format_description": "",
"authentication_settings": "تنظیمات احراز هویت",
"authentication_settings_description": "مدیریت رمز عبور، OAuth، و سایر تنظیمات احراز هویت",
"authentication_settings_disable_all": "آیا مطمئن هستید که می‌خواهید تمام روش‌های ورود را غیرفعال کنید؟ ورود به طور کامل غیرفعال خواهد شد.",
"authentication_settings_reenable": "برای فعال سازی مجدد از <link> دستور سرور </link> استفاده کنید.",
"background_task_job": "وظایف پس‌زمینه",
"check_all": "بررسی همه",
"cleared_jobs": "وظایف پاک شده برای:{job}",
"config_set_by_file": "تنظیم فعلی توسط یک فایل پیکربندی انجام شده است",
"confirm_delete_library": "آیا مطمئن هستید که می‌خواهید کتابخانه {library} را حذف کنید؟",
"confirm_delete_library_assets": "آیا مطمئن هستید که می‌خواهید این کتابخانه را حذف کنید؟ این عمل باعث حذف {count, plural, one {# فایل داخلی} other {همه # فایل داخلی}} از Immich خواهد شد و قابل بازگشت نیست. فایل‌ها بر روی دیسک باقی خواهند ماند.",
"confirm_email_below": "برای تأیید، \"{email}\" را در زیر تایپ کنید",
"confirm_reprocess_all_faces": "آیا مطمئن هستید که می‌خواهید تمام چهره‌ها را مجددا پردازش کنید؟ این عمل باعث پاک شدن افراد مشخص شده نیز خواهد شد.",
"confirm_user_password_reset": "آیا مطمئن هستید که می‌خواهید رمز عبور {user} را بازنشانی کنید؟",
"disable_login": "غیرفعال کردن ورود",
"duplicate_detection_job_description": "اجرای یادگیری ماشین بر روی فایل‌ها برای شناسایی تصاویر مشابه. این وابسته به جستجوی هوشمند است.",
"exclusion_pattern_description": "الگوهای استثنا به شما امکان می‌دهد هنگام اسکن کتابخانه خود فایل‌ها و پوشه‌ها را نادیده بگیرید . این مفید است اگر پوشه‌هایی دارید که فایل‌هایی را شامل می‌شوند که نمی‌خواهید وارد کنید، مانند فایل‌های RAW.",
"external_library_created_at": "کتابخانه خارجی (ایجاد شده در {date})",
"external_library_management": "مدیریت کتابخانه خارجی",
"face_detection": "تشخیص چهره",
"face_detection_description": "تشخیص چهره‌ها در فایل‌ها با استفاده از یادگیری ماشین. برای ویدیوها، تنها تصویر بندانگشتی در نظر گرفته می‌شود. گزینه \"همه\" تمام فایل‌ها را (مجددا) پردازش می‌کند. گزینه \"گمشده\" فایل‌ها را در صف قرار می‌دهد که هنوز پردازش نشده‌اند. چهره‌های تشخیص داده شده پس از اتمام تشخیص چهره، برای تشخیص چهره به صورت صف انتظار قرار می‌گیرند، آن‌ها را به افراد موجود یا جدید گروه‌بندی می‌کند.",
"facial_recognition_job_description": "گروه‌بندی چهره‌های تشخیص داده شده به افراد. این مرحله پس از تشخیص چهره انجام می‌شود. گزینه \"همه\" تمام چهره‌ها را (مجددا) دسته بندی می‌کند. گزینه \"گمشده\" چهره‌ها را در صف قرار می‌دهد که به هیچ فردی اختصاص داده نشده‌اند.",
"failed_job_command": "دستور {command} برای کار: {job} ناموفق بود",
"force_delete_user_warning": "هشدار: این عمل باعث حذف فوری کاربر و تمام فایل‌ها می‌شود. این عمل قابل بازگشت نیست و فایل‌ها قابل بازیابی نیستند.",
"forcing_refresh_library_files": "بروزرسانی اجباری تمام فایل‌های کتابخانه",
"image_format_description": "فرمت WebP فایل‌های کوچکتری نسبت به JPEG ایجاد می‌کند، اما زمان کدگذاری آن کندتر است.",
"image_prefer_embedded_preview": "",
"image_prefer_embedded_preview_setting_description": "",
"image_prefer_wide_gamut": "",
@@ -66,13 +67,13 @@
"image_thumbnail_resolution": "",
"image_thumbnail_resolution_description": "",
"job_concurrency": "",
"job_not_concurrency_safe": "",
"job_settings": "",
"job_settings_description": "",
"job_status": "",
"job_not_concurrency_safe": "این کار ایمنی همزمانی را تضمین نمی‌کند.",
"job_settings": "تنظیمات کار",
"job_settings_description": "مدیریت همزمانی کار",
"job_status": "وضعیت کار",
"jobs_delayed": "",
"jobs_failed": "",
"library_created": "",
"library_created": "کتابخانه ایجاد شده: {library}",
"library_cron_expression": "",
"library_cron_expression_description": "",
"library_cron_expression_presets": "",

View File

@@ -30,6 +30,7 @@
"add_exclusion_pattern_description": "Lisää mallit, jonka mukaan jätetään tiedostoja pois. Jokerimerkit *, ** ja ? ovat tuettuna. Jättääksesi pois kaikki tiedostot mistä tahansa löytyvästä kansiosta \"Raw\" käytä \"**/Raw/**\". Jättääksesi pois kaikki \". tif\" päätteiset tiedot, käytä \"**/*.tif\". Jättääksesi pois tarkan tiedostopolun, käytä \"/path/to/ignore/**\".",
"authentication_settings": "Autentikointiasetukset",
"authentication_settings_description": "Hallitse salasana-, OAuth- ja muut autentikoinnin asetukset",
"authentication_settings_disable_all": "Haluatko varmasti poistaa kaikki kirjautumistavat käytöstä? Kirjautuminen on tämän jälkeen mahdotonta.",
"background_task_job": "Taustatyöt",
"check_all": "Tarkista kaikki",
"cleared_jobs": "Työn {job} tehtävät tyhjennetty",
@@ -52,7 +53,7 @@
"failed_job_command": "Komento {command} epäonnistui työlle {job}",
"force_delete_user_warning": "VAROITUS: Tämä poistaa käyttäjän ja kaikki mediat. Tätä ei voi perua, eikä tiedostoja voi palauttaa.",
"forcing_refresh_library_files": "Pakotetaan virkistämään kaikkien kirjastojen tiedostot",
"image_format_description": "WebP tuottaa pienempiä tiedostoja kuin JPEG, mutta on hitaampi koodata",
"image_format_description": "WebP tuottaa pienempiä tiedostoja kuin JPEG, mutta on hitaampi pakata.",
"image_prefer_embedded_preview": "Suosi upotettua esikatselua",
"image_prefer_embedded_preview_setting_description": "Käytä RAW-kuvissa upotettuja esikatselukuvia aina kun mahdollista. Tämä voi joissain kuvissa tuottaa tarkemmat värit, mutta esikatselun laatu on riippuvainen kamerasta ja kuvassa voi olla enemmän pakkauksesta aiheutuvia häiriöitä.",
"image_prefer_wide_gamut": "Suosi laajaa väriskaalaa",
@@ -61,7 +62,7 @@
"image_preview_resolution": "Esikatselun resoluutio",
"image_preview_resolution_description": "Käytetään kun katsellaan yksittäisiä kuvia, tai koneoppimiseen. Suurempi resoluutio voi säilyttää paremmin yksityiskohtia. Tosin koodaus kestää kauemmin, tiedostokoko kasvaa, ja se saattaa hidastaa sovelluksen responsiivisuutta.",
"image_quality": "Laatu",
"image_quality_description": "Kuvan laatu välillä 1-100. Suurempi arvo on paremman laatuinen, mutta tuottaa kookkaampia tiedostoja. Tämä asetus vaikuttaa esikatselu- ja pikkukuviin.",
"image_quality_description": "Kuvan laatu välillä 1-100. Suurempi arvo on paremman laatuinen, mutta tuottaa kookkaampia tiedostoja. Tämä asetus vaikuttaa esikatselu- ja pikkukuviin.",
"image_settings": "Kuva-asetukset",
"image_settings_description": "Hallitse luotujen kuvien laatua ja resolutiota",
"image_thumbnail_format": "Pikkukuvien muoto",
@@ -75,8 +76,9 @@
"jobs_delayed": "{jobCount} tehtävää vivästetty",
"jobs_failed": "{jobCount} epäonnistui",
"library_created": "Kirjasto {library} luotu",
"library_cron_expression": "Cron lauseke",
"library_cron_expression_presets": "Cron lausekkeen esiasetukset",
"library_cron_expression": "Cron-lauseke",
"library_cron_expression_description": "Anna skannaustiheys cron-formaatissa. Saadaksesi lisätietoja katso esimerkiksi <link>Crontab Guru</link>",
"library_cron_expression_presets": "Cron-lausekkeen esiasetukset",
"library_deleted": "Kirjasto poistettu",
"library_import_path_description": "Määritä kansio joka tuodaan. Kuvat ja videot skannataan tästä kansiosta, sekä alikansioista.",
"library_scanning": "Ajoittainen skannaus",
@@ -91,7 +93,8 @@
"logging_enable_description": "Ota käyttöön lokitus",
"logging_level_description": "Kun käytössä, mitä lokituksen tasoa käytetään.",
"logging_settings": "Lokit",
"machine_learning_clip_model": "Clip malli",
"machine_learning_clip_model": "CLIP-malli",
"machine_learning_clip_model_description": "Käytettävän CLIP-mallin nimi <link>toimivien mallien listasta</link>. Huomaa että sinun täytyy suorittaa \"Älykäs etsintä\"-työ uudelleen vaihdettuasi käytettävää mallia.",
"machine_learning_duplicate_detection": "Kaksoiskappaleiden tunnistus",
"machine_learning_duplicate_detection_enabled": "Ota käyttöön kaksoiskappaleiden tunnistus",
"machine_learning_duplicate_detection_enabled_description": "Jos ei käytössä, täsmälleen samojen aineistojen kaksoiskappaleet tullaan silti poistamaan.",
@@ -124,13 +127,14 @@
"map_dark_style": "Tumma teema",
"map_enable_description": "Ota käyttöön karttatoiminnot",
"map_light_style": "Vaalea teema",
"map_manage_reverse_geocoding_settings": "Hallitse <link>käänteisen geokoodauksen</link> asetuksia",
"map_reverse_geocoding": "Käänteinen Geokoodaus",
"map_reverse_geocoding_enable_description": "Ota käyttöön osoitteiden poiminta karttakoordinaateista",
"map_reverse_geocoding_settings": "Käänteisen Geokoodauksen asetukset",
"map_settings": "Kartta- ja GPS asetukset",
"map_settings_description": "Hallitse kartan asetuksia",
"map_style_description": "style.json -karttateeman URL",
"metadata_extraction_job": "Poimi Metadata",
"metadata_extraction_job": "Kerää metadata",
"metadata_extraction_job_description": "Poimi metatiedot aineistoista, kuten GPS ja resoluutio",
"migration_job": "Migrointi",
"migration_job_description": "Migroi aineiston pikkukuvat ja kasvot uusimpaan kansiorakenteeseen",
@@ -170,6 +174,7 @@
"oauth_scope": "Skooppi (Scope)",
"oauth_settings": "OAuth",
"oauth_settings_description": "Hallitse OAuth kirjautumisen asetuksia",
"oauth_settings_more_details": "Saadaksesi lisätietoja tästä toiminnosta, katso <link>dokumentaatio</link>.",
"oauth_signing_algorithm": "Allekirjoitusalgoritmi",
"oauth_storage_label_claim": "Tallennustilan nimikkeen valtuutusväittämä (claim)",
"oauth_storage_label_claim_description": "Määriä käyttäjän tallennustilan nimike tämän väittämän arvoksi automaattisesti.",
@@ -326,8 +331,12 @@
"archive_size_description": "Määritä arkiston koko latauksissa (Gt)",
"archived": "Arkistoitu",
"asset_offline": "Aineisto offline-tilassa",
"asset_skipped": "Ohitettu",
"asset_uploaded": "Lähetetty",
"asset_uploading": "Lähetetään…",
"assets": "kohdetta",
"assets_added_to_album_count": "Albumiin lisätty {count, plural, one {# media} other {# mediaa}}",
"assets_added_count": "Lisätty {count, plural, one {# kohde} other {# kohdetta}}",
"assets_added_to_album_count": "Albumiin lisätty {count, plural, one {# kohde} other {# kohdetta}}",
"assets_added_to_name_count": "{name}:n lisätty {count, plural, one {# media} other {# mediaa}}",
"assets_count": "{count, plural, one {# media} other {# mediaa}}",
"assets_moved_to_trash": "Siirretty {count, plural, one {# aineisto} other {# aineistoa}} roskakoriin",
@@ -642,18 +651,20 @@
"invite_people": "",
"invite_to_album": "Kutsu albumiin",
"job_settings_description": "",
"jobs": "",
"keep": "",
"keyboard_shortcuts": "",
"language": "",
"language_setting_description": "",
"last_seen": "",
"jobs": "Taustatehtävät",
"keep": "Säilytä",
"keep_all": "Säilytä kaikki",
"keyboard_shortcuts": "Pikanäppäimet",
"language": "Kieli",
"language_setting_description": "Valitse suosimasi kieli",
"last_seen": "Viimeksi nähty",
"latest_version": "Viimeisin versio",
"leave": "",
"let_others_respond": "Anna muiden vastata",
"level": "",
"level": "Taso",
"library": "Kirjasto",
"library_options": "",
"light": "",
"light": "Vaalea",
"link_options": "",
"link_to_oauth": "",
"linked_oauth_account": "",
@@ -661,9 +672,12 @@
"loading": "",
"loading_search_results_failed": "",
"log_out": "Kirjaudu ulos",
"log_out_all_devices": "",
"login_has_been_disabled": "",
"look": "",
"log_out_all_devices": "Kirjaudu ulos kaikilta laitteilta",
"login": "Kirjaudu",
"login_has_been_disabled": "Kirjautuminen on otettu pois käytöstä.",
"logout_all_device_confirmation": "Haluatko varmasti kirjautua ulos kaikilta laitteilta?",
"logout_this_device_confirmation": "Haluatko varmasti kirjautua ulos näiltä laitteilta?",
"look": "Tyyli",
"loop_videos": "",
"loop_videos_description": "",
"make": "Valmistaja",

View File

@@ -1,13 +1,13 @@
{
"about": "Informazioni",
"account": "Account",
"account_settings": "Impostazioni account",
"acknowledge": "Acconsenti",
"account_settings": "Impostazioni Account",
"acknowledge": "Ho capito",
"action": "Azione",
"actions": "Azioni",
"active": "Attivo",
"activity": "Attività",
"activity_changed": "L'attività è {enabled, select, true {enabled} other {disabled}}",
"activity_changed": "L'attività è {enabled, select, true {abilitata} other {disabilitata}}",
"add": "Aggiungi",
"add_a_description": "Aggiungi una descrizione",
"add_a_location": "Aggiungi un luogo",
@@ -63,7 +63,7 @@
"image_preview_resolution": "Risoluzione anteprima",
"image_preview_resolution_description": "Usata per visualizzazione individuale di foto e per machine learning. Risoluzioni più alte possono preservare più dettagli ma richiedono un encoding più lento, occupano più spazio, e possono ridurre la responsività della app.",
"image_quality": "Qualità",
"image_quality_description": "Qualità dell'immagine da 1 a 100. Un valore più alto risulta in una migliore qualità, ma produce files più grandi.",
"image_quality_description": "Qualità dell'immagine da 1 a 100. Un valore più alto risulta in una migliore qualità, ma produce file più grandi.",
"image_settings": "Impostazioni delle immagini",
"image_settings_description": "Gestisci qualità e risoluzione delle immagini generate",
"image_thumbnail_format": "Formato miniatura",
@@ -73,7 +73,7 @@
"job_not_concurrency_safe": "Questo processo non è eseguibile in maniera concorrente.",
"job_settings": "Impostazioni dei processi",
"job_settings_description": "Gestisci la concorrenza dei processi",
"job_status": "Stato Processo",
"job_status": "Stato Processi",
"jobs_delayed": "{jobCount, plural, one {# posticipato} other {# posticipati}}",
"jobs_failed": "{jobCount, plural, one {# fallito} other {# falliti}}",
"library_created": "Creata libreria {library}",
@@ -90,13 +90,13 @@
"library_tasks_description": "Esegui processi della libreria",
"library_watching_enable_description": "Osserva le librerie esterne per cambiamenti",
"library_watching_settings": "Osserva librerie (SPERIMENTALE)",
"library_watching_settings_description": "Osserva automaticamente per cambiamenti di files",
"library_watching_settings_description": "Osserva automaticamente i cambiamenti dei file",
"logging_enable_description": "Attiva il logging",
"logging_level_description": "Quando attivato, che livello di log utilizzare.",
"logging_settings": "Logging",
"machine_learning_clip_model": "Modello CLIP",
"machine_learning_clip_model_description": "Il nome del modello CLIP mostrato <link>qui</link>. Bita cge devi rieseguire il processo 'Ricerca Intelligente' per tutte le immagini al cambio del modello.",
"machine_learning_duplicate_detection": "Detezione di Duplicati",
"machine_learning_duplicate_detection": "Rilevamento Duplicati",
"machine_learning_duplicate_detection_enabled": "Attiva rilevazione duplicati",
"machine_learning_duplicate_detection_enabled_description": "Se disattivo, risorse perfettamente identiche saranno comunque deduplicate.",
"machine_learning_duplicate_detection_setting_description": "Utilizza i CLIP embeddings per trovare possibili duplicati",
@@ -144,22 +144,22 @@
"note_apply_storage_label_previous_assets": "Nota: Per assegnare l'etichetta storage ad asset precedentemente caricati, esegui",
"note_cannot_be_changed_later": "NOTA: Non potrà essere modificato in futuro!",
"note_unlimited_quota": "Nota: Inserisci 0 per una quota illimitata",
"notification_email_from_address": "Indirizzo da",
"notification_email_from_address": "Indirizzo mittente",
"notification_email_from_address_description": "Indirizzo email mittente, ad esempio: \"Server Foto Immich <noreply@immich.app>\"",
"notification_email_host_description": "Host del server email (es. smtp.immich.app)",
"notification_email_ignore_certificate_errors": "Ignora errori di certificato",
"notification_email_ignore_certificate_errors_description": "Ignora errori di validazione del certificato TLS (sconsigliato)",
"notification_email_password_description": "Password da usare per l'autenticazione con il server email",
"notification_email_port_description": "Porta del server email (es. 25, 465, 587)",
"notification_email_sent_test_email_button": "Manda email di test e salva",
"notification_email_setting_description": "Impostazioni per notifiche email",
"notification_email_sent_test_email_button": "Invia email di test e salva",
"notification_email_setting_description": "Impostazioni per le notifiche via email",
"notification_email_test_email": "Invia email di prova",
"notification_email_test_email_failed": "Impossibile mandare email di test, controlla i valori inseriti",
"notification_email_test_email_sent": "Un'email di test è stata mandata a {email}. Per favore controlla la tua casella di posta.",
"notification_email_test_email_failed": "Impossibile inviare email di prova, controlla i valori inseriti",
"notification_email_test_email_sent": "Un'email di prova è stata inviata a {email}. Per favore controlla la tua casella di posta.",
"notification_email_username_description": "Nome utente utilizzato per l'autenticazione con il server email",
"notification_enable_email_notifications": "Attiva notifiche email",
"notification_enable_email_notifications": "Attiva notifiche via email",
"notification_settings": "Impostazioni Notifiche",
"notification_settings_description": "Gestisci impostazioni notifiche, incluse email",
"notification_settings_description": "Gestisci le impostazioni di notifica, incluse le email",
"oauth_auto_launch": "Avvio automatico",
"oauth_auto_launch_description": "Esegui il flusso di autenticazione OAuth automaticamente navigando sulla pagina di login",
"oauth_auto_register": "Registrazione automatica",
@@ -200,9 +200,9 @@
"require_password_change_on_login": "Richiedi all'utente di cambiare password al primo accesso",
"reset_settings_to_default": "Ripristina impostazioni predefinite",
"reset_settings_to_recent_saved": "Ripristina impostazioni alle impostazioni salvate di recente",
"scanning_library_for_changed_files": "Scansiona la libreria per file cambiati",
"scanning_library_for_changed_files": "Scansiona la libreria per file modificati",
"scanning_library_for_new_files": "Scansiona la libreria per nuovi file",
"send_welcome_email": "Manda email di benvenuto",
"send_welcome_email": "Invia email di benvenuto",
"server_external_domain_settings": "Dominio esterno",
"server_external_domain_settings_description": "Dominio per link condivisi pubblicamente, incluso http(s)://",
"server_settings": "Impostazioni Server",
@@ -277,7 +277,7 @@
"transcoding_reference_frames_description": "Il numero di frame da prendere in considerazione nel comprimere un determinato frame. Valori più alti migliorano l'efficienza di compressione, ma rallentano la codifica. 0 imposta questo valore automaticamente.",
"transcoding_required_description": "Solo video che non sono in un formato accettato",
"transcoding_settings": "Impostazioni Trascodifica Video",
"transcoding_settings_description": "Gestione informazioni risoluzione e codifica dei file video",
"transcoding_settings_description": "Gestisci le impostazioni di risoluzione e codifica dei file video",
"transcoding_target_resolution": "Risoluzione desiderata",
"transcoding_target_resolution_description": "Risoluzioni più elevate possono preservare più dettagli ma richiedono più tempo per la codifica, producono file di dimensioni maggiori e possono ridurre la reattività dell'applicazione.",
"transcoding_temporal_aq": "AQ temporale",
@@ -301,14 +301,16 @@
"trash_settings_description": "Gestisci impostazioni cestino",
"untracked_files": "File non tracciati",
"untracked_files_description": "Questi file non sono tracciati dall'applicazione. Potrebbero essere il risultato di spostamenti falliti, caricamenti interrotti o abbandonati a causa di un bug",
"user_delete_delay": "L'account e gli asset dell'utente <b>{user}</b> verranno programmati per la cancellazione definitiva tra {delay, plural, one {# giorno} other {# giorni}}.",
"user_delete_delay_settings": "Ritardo eliminazione",
"user_delete_delay_settings_description": "Numero di giorni dopo l'eliminazione per cancellare in modo definitivo l'account e gli asset di un utente. Il processo di cancellazione dell'utente viene eseguito a mezzanotte per verificare se esistono utenti pronti a essere eliminati. Le modifiche a questa impostazioni saranno prese in considerazione dalla possima esecuzione.",
"user_delete_immediately": "L'account e tutti gli asset di <b>{user}</b> vengono messi in coda per la cancellazione permanente <b>immediata</b>.",
"user_delete_immediately": "L'account e tutti gli asset dell'utente <b>{user}</b> verranno messi in coda per la cancellazione permanente <b>immediata</b>.",
"user_delete_immediately_checkbox": "utente",
"user_management": "Gestione Utenti",
"user_password_has_been_reset": "La password dell'utente è stata reimpostata:",
"user_password_reset_description": "Per favore inserisci una password temporanea per l'utente e informalo che dovrà cambiare la password al prossimo login.",
"user_restore_description": "L'account di <b>{user}</b> verrà ripristinato.",
"user_restore_scheduled_removal": "Ripristina utente - rimozione progammata per il {date, date, long}",
"user_settings": "Impostazione Utente",
"user_settings_description": "Gestisci impostazioni utente",
"user_successfully_removed": "L'utente {email} è stato rimosso con successo.",
@@ -322,6 +324,9 @@
"admin_password": "Password Amministratore",
"administration": "Amministrazione",
"advanced": "Avanzate",
"age_months": "Età {months, plural, one {# mese} other {# mesi}}",
"age_year_months": "Età 1 anno, {months, plural, one {# mese} other {# mesi}}",
"age_years": "{years, plural, one {# anno} other {# anni}}",
"album_added": "Album aggiunto",
"album_added_notification_setting_description": "Ricevi una notifica email quando sei aggiunto a un album condiviso",
"album_cover_updated": "Copertina dell'album aggiornata",
@@ -333,6 +338,7 @@
"album_options": "Impostazioni Album",
"album_remove_user": "Rimuovi l'utente?",
"album_remove_user_confirmation": "Sicuro di voler cancellare l'utente {user}?",
"album_share_no_users": "Sembra che tu abbia condiviso questo album con tutti gli utenti oppure non hai nessun utente con cui condividere.",
"album_updated": "Album aggiornato",
"album_updated_setting_description": "Ricevi una notifica email quando un album condiviso ha nuovi asset",
"album_user_removed": "Utente {user} rimosso",
@@ -345,6 +351,8 @@
"all_videos": "Tutti i video",
"allow_dark_mode": "Permetti tema scuro",
"allow_edits": "Permetti modifiche",
"allow_public_user_to_download": "Permetti di scaricare agli utenti pubblici",
"allow_public_user_to_upload": "Permetti di caricare agli utenti pubblici",
"api_key": "Chiave API",
"api_key_description": "Il campo verrà mostrato solo una volta. Abbi cura di copiarlo prima di chiudere la finestra.",
"api_key_empty": "Il valore del nome dell'API Key non può essere vuoto",
@@ -356,6 +364,7 @@
"archive_size": "Dimensioni Archivio",
"archive_size_description": "Imposta le dimensioni dell'archivio per i download (in GiB)",
"archived": "Archiviato",
"archived_count": "{count, plural, other {Archiviati #}}",
"are_these_the_same_person": "Sono la stessa persona?",
"are_you_sure_to_do_this": "Sei sicuro di voler procedere?",
"asset_added_to_album": "Aggiunto all'album",
@@ -366,18 +375,36 @@
"asset_hashing": "Hashing...",
"asset_offline": "Risorsa offline",
"asset_offline_description": "Il media è offline. Immich non è in grado di accedere al percorso del file. Assicurarsi che il media sia disponibile e riscansionare la libreria.",
"asset_skipped": "Saltato",
"asset_uploaded": "Caricato",
"asset_uploading": "Caricamento...",
"assets": "Risorse",
"assets_added_count": "{count, plural, one {# asset aggiunto} other {# asset aggiunti}}",
"assets_added_to_album_count": "{count, plural, one {# asset aggiunto} other {# asset aggiunti}} all'album",
"assets_added_to_name_count": "{count, plural, one {# asset aggiunto} other {# asset aggiunti}} a {name}",
"assets_count": "{count, plural, other {# asset}}",
"assets_moved_to_trash": "{count, plural, one {Spostato # asset} other {Spostati # asset}} nel cestino",
"assets_moved_to_trash_count": "{count, plural, one {# asset spostato} other {# asset spostati}} nel cestino",
"assets_permanently_deleted_count": "{count, plural, one {# asset cancellato} other {# asset cancellati}} definitivamente",
"assets_removed_count": "{count, plural, one {# asset rimosso} other {# asset rimossi}}",
"assets_restore_confirmation": "Sei sicuro di voler ripristinare tutti gli asset cancellati? Non puoi annullare questa azione!",
"assets_restored_count": "{count, plural, one {# asset ripristinato} other {# asset ripristinati}}",
"assets_trashed_count": "{count, plural, one {# asset spostato} other {# asset spostati}} nel cestino",
"authorized_devices": "Dispositivi autorizzati",
"back": "Indietro",
"back_close_deselect": "Indietro, chiudi o deseleziona",
"backward": "Indietro",
"birthdate_saved": "Data di nascita salvata con successo",
"birthdate_set_description": "La data di nascita è usata per calcolare l'età di questa persona nel momento dello scatto della foto.",
"blurred_background": "Sfondo sfocato",
"build": "",
"camera": "Fotocamera",
"camera_brand": "Marca fotocamera",
"camera_model": "Modello fotocamera",
"cancel": "Annulla",
"cancel_search": "Annulla ricerca",
"cannot_merge_people": "Impossibile unire le persone",
"cannot_undo_this_action": "Non puoi annullare questa azione!",
"cannot_update_the_description": "Impossibile aggiornare la descrizione",
"cant_apply_changes": "Impossibile applicare le modifiche",
"cant_get_faces": "Impossibile caricare i volti",
@@ -470,6 +497,7 @@
"download_settings": "Scarica",
"download_settings_description": "Gestisci le impostazioni riguardandi il download degli asset",
"downloading": "Scaricando",
"drop_files_to_upload": "Rilascia i file ovunque per caricarli",
"duplicates": "Duplicati",
"duplicates_description": "Risolvi ciascun gruppo indicando quali sono, se esistono, i duplicati",
"duration": "Durata",
@@ -511,6 +539,7 @@
"exclusion_pattern_already_exists": "Questo pattern di esclusione già esiste.",
"failed_job_command": "Il comando {command} è fallito per il processo: {job}",
"import_path_already_exists": "Questo percorso di importazione già esiste.",
"incorrect_email_or_password": "Email o password non corretta",
"paths_validation_failed": "{paths, plural, one {# percorso} other {# percorsi}} hanno fallito la validazione",
"quota_higher_than_disk_size": "Hai impostato un limite più alto della dimensione del disco",
"repair_unable_to_check_items": "Impossibile verificare {count, select, one {elemento} other {elementi}}",
@@ -536,6 +565,7 @@
"unable_to_delete_import_path": "Impossibile cancellare percorso di importazione",
"unable_to_delete_shared_link": "Impossibile cancellare link condiviso",
"unable_to_delete_user": "Impossibile cancellare utente",
"unable_to_download_files": "Impossibile scaricare i file",
"unable_to_edit_exclusion_pattern": "Impossibile modificare pattern di esclusione",
"unable_to_edit_import_path": "Impossibile cambiare percorso di importazione",
"unable_to_empty_trash": "Impossibile svuotare il cestino",
@@ -553,7 +583,7 @@
"unable_to_remove_api_key": "Impossibile rimuovere la chiave API",
"unable_to_remove_comment": "",
"unable_to_remove_library": "Impossibile rimuovere libreria",
"unable_to_remove_offline_files": "Impossibile rimuovere file offline",
"unable_to_remove_offline_files": "Impossibile rimuovere i file offline",
"unable_to_remove_partner": "Impossibile rimuovere compagno",
"unable_to_remove_reaction": "Impossibile rimuovere reazione",
"unable_to_remove_user": "",
@@ -619,6 +649,7 @@
"go_to_share_page": "Vai alla pagina condivisione",
"group_albums_by": "Raggruppa album in base a...",
"has_quota": "Ha limite",
"hi_user": "Ciao {name} ({email})",
"hide_gallery": "Nascondi galleria",
"hide_password": "Nascondi password",
"hide_person": "Nascondi persona",
@@ -727,7 +758,7 @@
"note_apply_storage_label_to_previously_uploaded assets": "Nota: Per aggiungere l'etichetta dell'archiviazione agli asset caricati in precedenza, esegui",
"note_unlimited_quota": "Nota: Inserisci 0 per archiviazione illimitata",
"notes": "Note",
"notification_toggle_setting_description": "Attiva le notifiche email",
"notification_toggle_setting_description": "Attiva le notifiche via email",
"notifications": "Notifiche",
"notifications_setting_description": "Gestisci notifiche",
"oauth": "OAuth",
@@ -811,7 +842,7 @@
"removed_api_key": "Rimossa chiave API: {name}",
"rename": "Rinomina",
"repair": "Ripara",
"repair_no_results_message": "I file che non sono traccia e mancanti saranno mostrati qui",
"repair_no_results_message": "I file mancanti e non tracciati saranno mostrati qui",
"replace_with_upload": "Rimpiazza con upload",
"require_password": "Richiedi password",
"require_user_to_change_password_on_first_login": "Richiedi all'utente di cambiare password al primo accesso",
@@ -864,7 +895,7 @@
"select_trash_all": "Seleziona cestina tutto",
"selected": "Selezionato",
"send_message": "Manda messaggio",
"send_welcome_email": "Manda email di benvenuto",
"send_welcome_email": "Invia email di benvenuto",
"server": "Server",
"server_stats": "Statistiche Server",
"set": "Imposta",
@@ -883,7 +914,7 @@
"shared_links": "Link condivisi",
"shared_photos_and_videos_count": "{assetCount, plural, other {# foto & video condivisi.}}",
"shared_with_partner": "Condiviso con {partner}",
"sharing": "Condividendo",
"sharing": "Condivisione",
"sharing_sidebar_description": "Mostra un link a Condivisione nella barra laterale",
"show_album_options": "Mostra opzioni album",
"show_and_hide_people": "Mostra & nascondi persone",
@@ -920,7 +951,7 @@
"stop_sharing_photos_with_user": "Non condividere più le tue foto con questo utente",
"storage": "Archiviazione",
"storage_label": "Etichetta archiviazione",
"storage_usage": "{used} di {available} utilizzato",
"storage_usage": "{used} di {available} utilizzati",
"submit": "Invia",
"suggestions": "Suggerimenti",
"sunrise_on_the_beach": "Tramonto sulla spiaggia",
@@ -934,14 +965,14 @@
"timezone": "Fuso orario",
"to_archive": "Archivio",
"to_favorite": "Preferito",
"to_trash": "Cestino",
"to_trash": "Cancella",
"toggle_settings": "Attiva/disattiva impostazioni",
"toggle_theme": "Cambia tema",
"toggle_visibility": "Cambia visibilità",
"total_usage": "Utilizzo totale",
"trash": "Cestino",
"trash_all": "Cestina Tutto",
"trash_count": "Cestino {count}",
"trash_count": "Cancella {count}",
"trash_no_results_message": "Le foto cestinate saranno mostrate qui.",
"trashed_items_will_be_permanently_deleted_after": "Gli elementi cestinati saranno eliminati definitivamente dopo {days, plural, one {# giorno} other {# giorni}}.",
"type": "Tipo",
@@ -965,6 +996,8 @@
"updated_password": "Password aggiornata",
"upload": "Carica",
"upload_concurrency": "Caricamenti contemporanei",
"upload_status_uploaded": "Caricato",
"upload_success": "Caricamento completato con successo, aggiorna la pagina per vedere i nuovi asset caricati.",
"url": "URL",
"usage": "Utilizzo",
"user": "Utente",

View File

@@ -167,7 +167,7 @@
"oauth_storage_label_claim_description": "ユーザーのストレージラベルを、このクレームの値に自動的に設定します。",
"oauth_storage_quota_claim": "",
"oauth_storage_quota_claim_description": "ユーザーのストレージクォータをこのクレームの値に自動的に設定します。",
"oauth_storage_quota_default": "",
"oauth_storage_quota_default": "デフォルトのストレージ割り当て(GiB)",
"oauth_storage_quota_default_description": "クレームが提供されていない場合に使用されるクォータをGiB単位で設定します無制限にする場合は0を入力してください。",
"offline_paths_description": "これらの結果は、外部ライブラリに属さないファイルを手動で削除したことによる可能性があります。",
"password_enable_description": "メールアドレスとパスワードでログイン",
@@ -196,10 +196,15 @@
"slideshow_duration_description": "各画像を表示する秒数",
"smart_search_job_description": "スマート検索をサポートするため、アセットに対して機械学習を実行する",
"storage_template_enable_description": "ストレージ テンプレート エンジンの有効化",
"storage_template_hash_verification_enabled": "ハッシュ検証に失敗",
"storage_template_hash_verification_enabled": "ハッシュ検証を有効化",
"storage_template_hash_verification_enabled_description": "ハッシュ検証の有効化(よくわからなければ、有効にしてください)",
"storage_template_migration": "ストレージ テンプレート の移行",
"storage_template_migration_job": "ストレージ移行ジョブ",
"storage_template_migration_description": "現在の<link>{template}</link>を以前にアップロードされたアセットに適用",
"storage_template_migration_info": "テンプレートの変更は新しいアセットにのみ適用されます。 以前にアップロードしたアセットにテンプレートを遡って適用するには、<link>{job}</link> を実行してください。",
"storage_template_migration_job": "ストレージテンプレート移行ジョブ",
"storage_template_more_details": "この機能の詳細については、<template-link>ストレージテンプレート</template-link>とその<implications-link>影響</implications-link>を参照してください",
"storage_template_onboarding_description": "この機能を有効にすると、ユーザー定義のテンプレートに基づいてファイルが自動で整理されます。 安定性の問題のため、この機能はデフォルトでオフになっています。 詳細については、<link>ドキュメント</link>を参照してください。",
"storage_template_path_length": "おおよそのパス長の制限: <b>{length, number}</b>/{limit, number}",
"storage_template_settings": "ストレージ テンプレート",
"storage_template_settings_description": "アップロードしたアセットのフォルダ構造とファイル名を管理します",
"system_settings": "システム設定",
@@ -261,112 +266,172 @@
"transcoding_tone_mapping_description": "HDR動画をSDRに変換する際に見た目を維持しようと試みます。各アルゴリズムは、色、詳細、明るさに対して異なるトレードオフを行います。Hableは詳細を維持し、Mobiusは色を維持し、Reinhardは明るさを維持します。",
"transcoding_tone_mapping_npl": "トーンマッピング NPL",
"transcoding_tone_mapping_npl_description": "",
"transcoding_transcode_policy": "",
"transcoding_two_pass_encoding": "",
"transcoding_two_pass_encoding_setting_description": "",
"transcoding_video_codec": "",
"transcoding_video_codec_description": "",
"trash_enabled_description": "",
"trash_number_of_days": "",
"trash_number_of_days_description": "",
"trash_settings": "",
"trash_settings_description": "",
"user_delete_delay_settings": "",
"user_delete_delay_settings_description": "",
"user_settings": "",
"user_settings_description": "",
"version_check_enabled_description": "",
"version_check_settings": "",
"version_check_settings_description": "",
"video_conversion_job_description": ""
"transcoding_transcode_policy": "トランスコードポリシー",
"transcoding_transcode_policy_description": "動画がトランスコードされるべきかを決めるポリシー。HDRビデオは常にトランスコードされます(トランスコードが無効化されている場合を除く)。",
"transcoding_two_pass_encoding": "Two-passエンコード",
"transcoding_two_pass_encoding_setting_description": "二つのパスでトランスコードし、よりよくエンコードされた動画を生成します。最大ビットレートが有効になっている場合(H.264とHEVCが動作するために必要)、このモードは最大ビットレートを基にしたビットレートの範囲を使用し、CRFを無視します。VP9については最大ビットレートの無効時にCRFを使うことができます。",
"transcoding_video_codec": "動画コーデック",
"transcoding_video_codec_description": "VP9 は高い効率とWeb 互換性を持ちますが、トランスコードに時間がかかります。 HEVC も同様ですが、Web 互換性が低くなります。 H.264 は幅広い互換性がありトランスコードが高速ですが、生成されるファイルははるかに大きくなります。 AV1 は最も効率的なコーデックですが、古いデバイスではサポートされていません。",
"trash_enabled_description": "ごみ箱機能を有効化",
"trash_number_of_days": "日数",
"trash_number_of_days_description": "アセットを完全に削除する前にごみ箱に保管しておく日数",
"trash_settings": "ごみ箱の設定",
"trash_settings_description": "ごみ箱の設定を管理します",
"untracked_files": "追跡されていないファイル",
"untracked_files_description": "これらのファイルはアプリケーションによって追跡されていません。これらは移動の失敗、アップロードの中断、またはバグにより取り残されたものである可能性があります",
"user_delete_delay": "<b>{user}</b>のアカウントとアセットは{delay, plural, one {#日} other {#日}}後に完全に削除されるように予定されます。",
"user_delete_delay_settings": "遅延削除",
"user_delete_delay_settings_description": "削除実行後、ユーザーのアカウントとアセットが完全に削除されるまでの日数。 ユーザー削除ジョブは深夜に実行され、削除の準備ができているユーザーを確認します。 この設定への変更は、次回の実行時に反映されます。",
"user_delete_immediately": "<b>{user}</b> のアカウントとアセットは、<b>直ちに</b>完全に削除するためにキューに追加されます。",
"user_delete_immediately_checkbox": "ユーザーとアセットを即時削除するキューに入れる",
"user_management": "ユーザー管理",
"user_password_has_been_reset": "ユーザーのパスワードがリセットされました:",
"user_password_reset_description": "ユーザーにこの一時パスワードを提供し、次回ログイン時にパスワードを変更しなければならないことを伝えてください。",
"user_restore_description": "<b>{user}</b>のアカウントは復元されました。",
"user_restore_scheduled_removal": "ユーザーを復元 - {date, date, long}に削除予定",
"user_settings": "ユーザー設定",
"user_settings_description": "ユーザー設定を管理します",
"user_successfully_removed": "ユーザー {email} は正常に削除されました。",
"version_check_enabled_description": "新しいリリースを確認するための定期的なGitHubへのリクエストを有効にする",
"version_check_settings": "バージョンチェック",
"version_check_settings_description": "新しいバージョンの通知を有効/無効にします",
"video_conversion_job": "動画をトランスコード",
"video_conversion_job_description": "幅広いブラウザやデバイスとの互換性を高めるために動画をトランスコードします"
},
"admin_email": "",
"admin_password": "",
"administration": "",
"admin_email": "管理者Email",
"admin_password": "管理者パスワード",
"administration": "管理",
"advanced": "詳細設定",
"album_added": "",
"album_added_notification_setting_description": "",
"album_added": "アルバム追加",
"album_added_notification_setting_description": "共有アルバムに追加されたときEメール通知を受信する",
"album_cover_updated": "",
"album_info_updated": "",
"album_name": "",
"album_delete_confirmation": "アルバム{album}を本当に削除しますか?\nこのアルバムが共有されているなら、他のユーザーもアルバムにアクセスできなくなります。",
"album_info_updated": "アルバム情報更新",
"album_name": "アルバム名",
"album_options": "",
"album_updated": "",
"album_updated_setting_description": "",
"album_remove_user": "ユーザーを削除しますか?",
"album_remove_user_confirmation": "本当に{user}を削除しますか?",
"album_share_no_users": "このアルバムを全てのユーザーと共有したか、共有するユーザーがいないようです。",
"album_updated": "アルバム更新",
"album_updated_setting_description": "共有アルバムに新しいアセットが追加されたとき通知を受け取る",
"album_with_link_access": "リンクを知っている人は誰でも、このアルバム中の写真と人物を閲覧できるようになります。",
"albums": "アルバム",
"all": "すべて",
"all_people": "",
"allow_dark_mode": "",
"allow_edits": "",
"api_key": "",
"api_keys": "",
"app_settings": "",
"appears_in": "",
"all_albums": "全てのアルバム",
"all_people": "全ての人物",
"all_videos": "全ての動画",
"allow_dark_mode": "ダークモードを許可",
"allow_edits": "編集を許可",
"api_key": "APIキー",
"api_key_description": "この値は一回のみ表示されます。 ウィンドウを閉じる前に必ずコピーしてください。",
"api_key_empty": "APIキー名は空白にできません",
"api_keys": "APIキー",
"app_settings": "アプリ設定",
"appears_in": "これらに含まれます",
"archive": "アーカイブ",
"archive_or_unarchive_photo": "",
"archive_or_unarchive_photo": "写真をアーカイブまたはアーカイブ解除",
"archive_size": "アーカイブサイズ",
"archived": "",
"asset_offline": "",
"assets": "写真と動画",
"authorized_devices": "",
"are_these_the_same_person": "これらは同じ人物ですか?",
"are_you_sure_to_do_this": "本当にこれを行いますか?",
"asset_added_to_album": "アルバムに追加",
"asset_adding_to_album": "アルバムに追加しています…",
"asset_description_updated": "アセットの説明が更新されました",
"asset_filename_is_offline": "アセット {filename} はオフラインです",
"asset_has_unassigned_faces": "アセットには未割り当ての顔があります",
"asset_hashing": "ハッシュ計算中…",
"asset_offline": "アセットはオフラインです",
"asset_offline_description": "このアセットはオフラインです。 Immichはファイルの場所にアクセスできません。 アセットが利用可能であることを確認しライブラリを再スキャンしてください。",
"asset_skipped": "スキップ済",
"asset_uploaded": "アップロード済",
"asset_uploading": "アップロード中...",
"assets": "アセット",
"assets_added_count": "{count, plural, one {#個} other {#個}}のアセットを追加しました",
"assets_added_to_album_count": "{count, plural, one {#個} other {#個}}のアセットをアルバムに追加しました",
"assets_added_to_name_count": "{count, plural, one {#個} other {#個}}のアセットを{name}に追加しました",
"assets_count": "{count, plural, one {#個} other {#個}}のアセット",
"assets_moved_to_trash_count": "{count, plural, one {#個} other {#個}}のアセットをごみ箱に移動しました",
"assets_permanently_deleted_count": "{count, plural, one {#個} other {#個}}のアセットを完全に削除しました",
"assets_removed_count": "{count, plural, one {#個} other {#個}}のアセットを削除しました",
"assets_restore_confirmation": "ごみ箱のアセットをすべて復元してもよろしいですか? この操作を元に戻すことはできません!",
"assets_restored_count": "{count, plural, one {#個} other {#個}}のアセットを復元しました",
"assets_trashed_count": "{count, plural, one {#個} other {#個}}のアセットをごみ箱に移動しました",
"assets_were_part_of_album_count": "{count, plural, one {個} other {個}}のアセットは既にアルバムの一部です",
"authorized_devices": "認可済みデバイス",
"back": "戻る",
"backward": "",
"back_close_deselect": "戻る、閉じる、選択解除",
"backward": "新しい方へ",
"birthdate_saved": "生年月日が正常に保存されました",
"birthdate_set_description": "生年月日は、写真撮影時のこの人物の年齢を計算するために使用されます。",
"blurred_background": "",
"camera": "",
"camera_brand": "",
"camera_model": "",
"bulk_delete_duplicates_confirmation": "本当に {count} 個の重複したアセットを一括削除しますか?これにより各重複中の最大のアセットが保持され、他の全ての重複が削除されます。この操作を元に戻すことはできません!",
"bulk_keep_duplicates_confirmation": "本当に {count}個の重複アセットを保持しますか?これにより何も削除されずに重複グループが解決されます。",
"bulk_trash_duplicates_confirmation": "本当に{count}個の重複したアセットを一括でごみ箱に移動しますか?これにより各重複中の最大のアセットが保持され、他の全ての重複はごみ箱に移動されます。",
"camera": "カメラブランド",
"camera_brand": "カメラブランド",
"camera_model": "カメラモデル",
"cancel": "キャンセル",
"cancel_search": "",
"cannot_merge_people": "",
"cannot_update_the_description": "",
"cancel_search": "検索をキャンセル",
"cannot_merge_people": "人物をマージできません",
"cannot_undo_this_action": "この操作は元に戻せません!",
"cannot_update_the_description": "説明を更新できません",
"cant_apply_changes": "",
"cant_get_faces": "",
"cant_search_people": "",
"cant_search_places": "",
"change_date": "",
"change_date": "日時を変更",
"change_expiration_time": "有効期限を変更",
"change_location": "",
"change_name": "",
"change_name_successfully": "",
"change_location": "場所を変更",
"change_name": "名前を変更",
"change_name_successfully": "名前を正常に変更しました",
"change_password": "パスワードを変更",
"change_your_password": "",
"change_password_description": "これは、初めてのサインインであるか、パスワードの変更要求が行われたかのいずれかです。 新しいパスワードを下に入力してください。",
"change_your_password": "パスワードを変更します",
"changed_visibility_successfully": "",
"check_logs": "",
"check_logs": "ログを確認",
"city": "市町村",
"clear": "クリア",
"clear_all": "",
"clear_message": "",
"clear_value": "",
"close": "",
"collapse_all": "",
"color_theme": "",
"comment_options": "",
"comments_are_disabled": "",
"confirm": "了解",
"confirm_admin_password": "",
"clear_all": "全てクリア",
"clear_message": "メッセージをクリア",
"clear_value": "値をクリア",
"close": "閉じる",
"collapse": "展開",
"collapse_all": "全て展開",
"color_theme": "カラーテーマ",
"comment_deleted": "コメントが削除されました",
"comment_options": "コメント設定",
"comments_are_disabled": "コメントは無効化されています",
"confirm": "確認",
"confirm_admin_password": "管理者パスワードを確認",
"confirm_delete_shared_link": "本当にこの共有リンクを削除しますか?",
"confirm_password": "確定",
"contain": "",
"context": "",
"continue": "",
"copied_image_to_clipboard": "",
"copy_error": "",
"copy_file_path": "",
"copy_image": "",
"copy_link": "",
"copy_link_to_clipboard": "",
"copy_password": "",
"copy_to_clipboard": "",
"contain": "収める",
"context": "状況",
"continue": "続ける",
"copied_image_to_clipboard": "画像をクリップボードにコピーしました。",
"copied_to_clipboard": "クリップボードにコピーしました!",
"copy_error": "コピーのエラー",
"copy_file_path": "ファイルパスをコピー",
"copy_image": "画像をコピー",
"copy_link": "リンクをコピー",
"copy_link_to_clipboard": "リンクをクリップボードにコピー",
"copy_password": "パスワードをコピー",
"copy_to_clipboard": "クリップボードにコピー",
"country": "国",
"cover": "",
"covers": "",
"cover": "カバー",
"covers": "カバー",
"create": "作成",
"create_album": "アルバムを作成",
"create_library": "",
"create_library": "ライブラリを作成",
"create_link": "リンクを作る",
"create_link_to_share": "共有リンクを作る",
"create_new_person": "",
"create_new_user": "",
"create_user": "",
"create_link_to_share_description": "リンクを知っている人全員が選択した写真を閲覧できるようになります",
"create_new_person": "新しい人物を作成",
"create_new_person_hint": "選択されたアセットを新しい人物に割り当て",
"create_new_user": "新規ユーザーの作成",
"create_user": "ユーザーを作成",
"created": "",
"current_device": "",
"current_device": "現在のデバイス",
"custom_locale": "",
"custom_locale_description": "",
"dark": "",
@@ -398,7 +463,9 @@
"display_original_photos_setting_description": "",
"done": "完了",
"download": "ダウンロード",
"downloading": "",
"downloading": "ダウンロード中",
"downloading_asset_filename": "アセット {filename} をダウンロード中",
"duplicates": "重複",
"duration": "",
"durations": {
"days": "",
@@ -493,7 +560,7 @@
"expand_all": "",
"expire_after": "有効期限",
"expired": "有効期限が切れました",
"explore": "",
"explore": "探索",
"extension": "",
"external_libraries": "",
"failed_to_get_people": "",
@@ -576,7 +643,7 @@
"manage_your_api_keys": "",
"manage_your_devices": "",
"manage_your_oauth_connection": "",
"map": "",
"map": "地図",
"map_marker_with_image": "",
"map_settings": "マップの設定",
"media_type": "",
@@ -609,7 +676,7 @@
"no_archived_assets_message": "",
"no_assets_message": "",
"no_exif_info_available": "",
"no_explore_results_message": "",
"no_explore_results_message": "コレクションを探索するにはさらに写真をアップロードしてください。",
"no_favorites_message": "",
"no_libraries_message": "",
"no_name": "",
@@ -693,8 +760,8 @@
"remove_from_favorites": "",
"remove_from_shared_link": "",
"remove_offline_files": "",
"repair": "",
"repair_no_results_message": "",
"repair": "修復",
"repair_no_results_message": "追跡されていないファイルや存在しないファイルがここに表示されます",
"replace_with_upload": "",
"require_password": "",
"reset": "",
@@ -740,8 +807,9 @@
"select_photos": "写真を選択",
"selected": "",
"send_message": "",
"server": "",
"server_stats": "",
"server": "サーバー",
"server_stats": "サーバー統計",
"server_version": "サーバーバージョン",
"set": "",
"set_as_album_cover": "",
"set_as_profile_picture": "",
@@ -782,10 +850,10 @@
"stacktrace": "",
"start_date": "",
"state": "都道府県",
"status": "",
"status": "ステータス",
"stop_motion_photo": "",
"stop_photo_sharing": "写真の共有を無効化しますか?",
"storage": "",
"storage": "ストレージ",
"storage_label": "",
"submit": "",
"suggestions": "ユーザーリスト",
@@ -821,6 +889,8 @@
"updated_password": "",
"upload": "アップロード",
"upload_concurrency": "",
"upload_status_duplicates": "重複",
"upload_status_errors": "エラー",
"url": "",
"usage": "",
"user": "",

View File

@@ -3,8 +3,8 @@
"account": "계정",
"account_settings": "계정 설정",
"acknowledge": "확인",
"action": "작",
"actions": "작",
"action": "작",
"actions": "작",
"active": "활성",
"activity": "활동",
"activity_changed": "활동이 {enabled, select, true {활성화} other {비활성화}}됨",
@@ -220,7 +220,7 @@
"storage_template_hash_verification_enabled_description": "해시 검증을 활성화합니다. 이 설정의 결과를 확실히 이해하지 않는 한 비활성화하지 마세요",
"storage_template_migration": "스토리지 템플릿 마이그레이션",
"storage_template_migration_description": "기존에 업로드된 콘텐츠에 현재 <link>{template}</link> 적용",
"storage_template_migration_info": "템플릿의 변경 사항은 새 콘텐츠에만 적용됩니다. 이전에 업로드한 콘텐츠에 템플릿을 소급 적용하려면, <link>{job}</link> 작업을 실행하세요.",
"storage_template_migration_info": "템플릿의 변경 사항은 새 콘텐츠에만 적용됩니다. 이전에 업로드한 콘텐츠에 적용하려면, <link>{job}</link>을 실행하세요.",
"storage_template_migration_job": "스토리지 템플릿 마이그레이션 작업",
"storage_template_more_details": "이 기능에 대한 자세한 정보는 <template-link>스토리지 템플릿</template-link> 및 <implications-link>설명</implications-link>을 참조하세요",
"storage_template_onboarding_description": "이 기능을 활성화하면 사용자 정의 템플릿을 기반으로 파일이 자동으로 정리됩니다. 안정성 문제로 인해 기능이 기본적으로 비활성화되어 있습니다. 자세한 내용은 <link>문서</link>를 참조하세요.",
@@ -459,7 +459,7 @@
"copy_to_clipboard": "클립보드에 복사",
"country": "국가",
"cover": "확대",
"covers": "표지",
"covers": "타일",
"create": "생성",
"create_album": "앨범 생성",
"create_library": "라이브러리 생성",
@@ -690,7 +690,7 @@
"explore": "탐색",
"export": "내보내기",
"export_as_json": "JSON으로 내보내기",
"extension": "추가 기능",
"extension": "확장자",
"external": "외부",
"external_libraries": "외부 라이브러리",
"face_unassigned": "할당되지 않음",
@@ -835,7 +835,7 @@
"no_duplicates_found": "중복 항목이 없습니다.",
"no_exif_info_available": "EXIF 정보 없음",
"no_explore_results_message": "컬렉션을 탐색하려면 더 많은 사진을 업로드하세요.",
"no_favorites_message": "즐겨찾기에 추가하여 좋아하는 사진과 동영상을 빠르게 찾기",
"no_favorites_message": "즐겨찾기에 좋아하는 사진과 동영상을 추가하여 빠르게 확인해보세요",
"no_libraries_message": "외부 라이브러리를 생성하여 사진과 동영상 보기",
"no_name": "이름 없음",
"no_places": "장소 없음",
@@ -903,7 +903,7 @@
"permanent_deletion_warning_setting_description": "콘텐츠 영구 삭제 시 경고 메시지 표시",
"permanently_delete": "영구 삭제",
"permanently_delete_assets_count": "{count, plural, one {개} other {개}} 항목을 영구적으로 삭제",
"permanently_delete_assets_prompt": "정말 {count, plural, one {이 항목} other {항목 <b>#</b>개}} 영구적으로 삭제하시겠습니까? 앨범에 포함된 {count, plural, one {항목도} other {항목들도}} 삭제됩니다.",
"permanently_delete_assets_prompt": "정말 {count, plural, one {이 항목} other {항목 <b>#</b>개}} 영구적으로 삭제하시겠습니까? 앨범에 포함된 {count, plural, one {항목도} other {항목들도}} 삭제됩니다.",
"permanently_deleted_asset": "콘텐츠가 영구적으로 삭제됨",
"permanently_deleted_assets": "항목 {count, plural, one {#개} other {#개}}가 영구적으로 삭제됨",
"permanently_deleted_assets_count": "{count, plural, one {개} other {개}} 항목이 영구적으로 삭제됨",
@@ -1014,7 +1014,7 @@
"search_state": "지역 검색...",
"search_timezone": "시간대로 검색...",
"search_type": "형식 검색",
"search_your_photos": "당신의 사진 검색하세요",
"search_your_photos": "사진 검색",
"searching_locales": "로케일 검색...",
"second": "초",
"see_all_people": "모든 인물 보기",
@@ -1173,7 +1173,7 @@
"validate": "검증",
"variables": "변수",
"version": "버전",
"version_announcement_closing": "당신의 친구, Alex",
"version_announcement_closing": "당신의 친구, Alex",
"version_announcement_message": "안녕하세요, 애플리케이션의 새로운 버전이 있습니다. <link>릴리스 노트</link>를 확인해주세요. WatchTower 등의 자동 업데이트 기능을 사용하는 경우, 잘못된 구성을 방지하기 위해 <code>docker-compose.yml</code> 및 <code>.env</code> 설정이 최신인지 확인해주세요.",
"video": "동영상",
"video_hover_setting": "동영상에 마우스를 올려 재생",

View File

@@ -63,8 +63,8 @@
"image_preview_resolution": "Voorbeeldresolutie",
"image_preview_resolution_description": "Gebruikt bij het tonen van een enkele foto en voor machine learning. Hogere resoluties kunnen meer detail behouden maar duren langer om te verwerken, hebben hogere bestandsgrootte, en kunnen de applicatie langzamer maken.",
"image_quality": "Kwaliteit",
"image_quality_description": "Afbeeldingskwaliteit van 1-100. Een hoger getal zorgt voor betere kwaliteit foto's, maar produceert grotere bestanden.",
"image_settings": "Afbeeldings-instellingen",
"image_quality_description": "Afbeeldingskwaliteit van 1-100. Een hoger getal zorgt voor betere kwaliteit foto's, maar produceert grotere bestanden. Dit heeft effect op voorbeeldfoto's en thumbnails.",
"image_settings": "Afbeeldings instellingen",
"image_settings_description": "Beheer de kwaliteit en resolutie van gegenereerde afbeeldingen",
"image_thumbnail_format": "Thumbnail bestandsformaat",
"image_thumbnail_resolution": "Thumbnail resolutie",
@@ -72,7 +72,7 @@
"job_concurrency": "{job} gelijktijdigheid",
"job_not_concurrency_safe": "Deze taak kan niet gelijktijdig worden uitgevoerd.",
"job_settings": "Achtergrondtaak-instellingen",
"job_settings_description": "Beheer gelijktijdigheid van taken",
"job_settings_description": "Beheer gelijktijdige taken",
"job_status": "Taakstatus",
"jobs_delayed": "{jobCount, plural, other {# vertraagd}}",
"jobs_failed": "{jobCount, plural, other {# mislukt}}",
@@ -87,21 +87,21 @@
"library_scanning_enable_description": "Periodieke bibliotheekscan aanzetten",
"library_settings": "Externe bibliotheek",
"library_settings_description": "Externe bibliotheekinstellingen beheren",
"library_tasks_description": "Bibliotheektaken uitvoeren",
"library_tasks_description": "Voer bibliotheek taken uit",
"library_watching_enable_description": "Externe bibliotheken monitoren op bestandswijzigingen",
"library_watching_settings": "Bibliotheek monitoren (EXPERIMENTEEL)",
"library_watching_settings_description": "Automatisch monitoren op gewijzigde bestanden",
"library_watching_settings_description": "Automatisch gewijzigde bestanden bijhouden",
"logging_enable_description": "Logboek inschakelen",
"logging_level_description": "Indien ingeschakeld, welk logniveau wordt gebruikt.",
"logging_settings": "Logboek",
"logging_level_description": "Indien ingeschakeld, welk logniveau er wordt gebruikt.",
"logging_settings": "Logging",
"machine_learning_clip_model": "CLIP model",
"machine_learning_clip_model_description": "De naam van een CLIP-model dat <link>hier</link> is vermeld. Let op: je moet de 'Slim Zoeken -taak opnieuw uitvoeren voor alle afbeeldingen wanneer je een model wijzigt.",
"machine_learning_duplicate_detection": "Duplicaat detectie",
"machine_learning_duplicate_detection_enabled": "Duplicaatdetectie inschakelen",
"machine_learning_duplicate_detection_enabled_description": "Indien uitgeschakeld, worden identieke assets nog steeds gededupliceerd.",
"machine_learning_duplicate_detection_setting_description": "Gebruik CLIP-embeddings om mogelijke duplicaten te vinden",
"machine_learning_duplicate_detection_setting_description": "Gebruik CLIP om exactie kopieën te vinden",
"machine_learning_enabled": "Machine learning inschakelen",
"machine_learning_enabled_description": "Indien uitgeschakeld, worden alle ML-functies uitgeschakeld ongeacht de onderstaande instellingen.",
"machine_learning_enabled_description": "Wanneer uitgeschakeld zullen alle ML instellingen uitgezet worden, ongeacht onderstaande instellingen.",
"machine_learning_facial_recognition": "Gezichtsherkenning",
"machine_learning_facial_recognition_description": "Detecteer, herken en groepeer gezichten in afbeeldingen",
"machine_learning_facial_recognition_model": "Model voor gezichtsherkenning",
@@ -887,7 +887,7 @@
"past_durations": {
"days": "Afgelopen {days, plural, one {dag} other {# dagen}}",
"hours": "Afgelopen {hours, plural, one {uur} other {# uren}}",
"years": "Afgelopen {years, plural, one {jaar} other {# jaren}}"
"years": "Afgelopen {years, plural, one {jaar} other {# jaar}}"
},
"path": "Pad",
"pattern": "Patroon",
@@ -1196,7 +1196,7 @@
"welcome": "Welkom",
"welcome_to_immich": "Welkom bij Immich",
"year": "Jaar",
"years_ago": "{years, plural, one {# jaar} other {# jaren}} geleden",
"years_ago": "{years, plural, one {# jaar} other {# jaar}} geleden",
"yes": "Ja",
"you_dont_have_any_shared_links": "Je hebt geen gedeelde links",
"zoom_image": "Inzoomen"

File diff suppressed because it is too large Load Diff

View File

@@ -1,20 +1,22 @@
{
"about": "Sobre",
"account": "Conta",
"account_settings": "Configurações de Conta",
"account_settings": "Configurações da Conta",
"acknowledge": "Confirmar",
"action": "Ação",
"actions": "Ações",
"active": "Executando",
"active": "Ativo",
"activity": "Atividade",
"activity_changed": "A atividade está {enabled, select, true {enabled} other {disabled}}",
"add": "Adicionar",
"add_a_description": "Adicionar descrição",
"add_a_location": "Adicionar uma localização",
"add_a_description": "Adicionar uma descrição",
"add_a_location": "Adicionar localização",
"add_a_name": "Adicionar um nome",
"add_a_title": "Adicionar um título",
"add_exclusion_pattern": "Adicionar padrão de exclusão",
"add_import_path": "Adicionar caminho de importação",
"add_location": "Adicionar local",
"add_more_users": "Adicionar mais usuários",
"add_exclusion_pattern": "Adicionar um padrão de exclusão",
"add_import_path": "Adicionar um caminho de importação",
"add_location": "Adicionar localização",
"add_more_users": "Adicionar mais utilizadores",
"add_partner": "Adicionar parceiro",
"add_path": "Adicionar caminho",
"add_photos": "Adicionar fotos",

View File

@@ -1,4 +1,5 @@
{
"about": "O programu",
"account": "Račun",
"account_settings": "Nastavitve računa",
"acknowledge": "Potrdi",

View File

@@ -114,7 +114,7 @@
"machine_learning_settings": "இயந்திர கற்றல் அமைப்புகள்",
"machine_learning_settings_description": "இயந்திர கற்றல் அம்சங்கள் மற்றும் அமைப்புகளை நிர்வகிக்கவும்",
"machine_learning_smart_search": "ஸ்மார்ட் தேடல்",
"machine_learning_smart_search_description": "CLIP உட்பொதிப்புகளைப் பயன்படுத்தி சொற்பொருளில் படங்களைத் தேடுங்கள்",
"machine_learning_smart_search_description": "CLIP மாடெலைப் பயன்படுத்தி சொற்பொருளில் படங்களைத் தேடுங்கள்",
"machine_learning_smart_search_enabled": "ஸ்மார்ட் தேடலை இயக்கு",
"machine_learning_smart_search_enabled_description": "முடக்கப்பட்டிருந்தால், ஸ்மார்ட் தேடலுக்காக படங்கள் குறியாக்கம் செய்யப்படாது.",
"machine_learning_url_description": "இயந்திர கற்றல் சேவையகத்தின் URL",
@@ -192,7 +192,7 @@
"repair_all": "அனைத்தையும் பழுதுபார்க்கவும்",
"repair_matched_items": "பொருந்தியது {count, plural, one {# உருப்படி} other {# உருப்படிகள்}}",
"repaired_items": "பழுதுபார்க்கப்பட்டது {count, plural, one {# உருப்படி} other {# உருப்படிகள்}}",
"require_password_change_on_login": "",
"require_password_change_on_login": "முதல் உள்நுழைவில் பயனர் கடவுச்சொல்லை மாற்ற வேண்டும்",
"reset_settings_to_default": "",
"reset_settings_to_recent_saved": "",
"scanning_library_for_changed_files": "",

View File

@@ -95,6 +95,7 @@
"logging_level_description": "เมื่อเปิดใช้งาน ใช้ระดับการบันทึกอะไร",
"logging_settings": "การบันทึก",
"machine_learning_clip_model": "โมเดล Clip",
"machine_learning_clip_model_description": "ชื่อของโมเดล CLIP ที่ระบุ<link>ตรงนี้</link> โปรดทราบว่าจำเป็นต้องดำเนินงาน 'ค้นหาอัจฉริยะ' ใหม่สำหรับทุกรูปเมื่อเปลี่ยนโมเดล",
"machine_learning_duplicate_detection": "ตรวจจับการซ้ำกัน",
"machine_learning_duplicate_detection_enabled": "เปิดใช้งานการตรวจจับการซ้ำ",
"machine_learning_duplicate_detection_enabled_description": "หากปิดใช้งาน สื่อที่เหมือนกันจะยังถูกลบออก",
@@ -127,6 +128,7 @@
"map_dark_style": "แบบมืด",
"map_enable_description": "เปิดใช้งานแผนที่",
"map_light_style": "แบบสว่าง",
"map_manage_reverse_geocoding_settings": "จัดการการตั้งค่า<link>แปลงพิกัดภูมิศาสตร์ </link>",
"map_reverse_geocoding": "ประมวลผลชื่อทางภูมิศาสตร์",
"map_reverse_geocoding_enable_description": "เปิดใช้งานประมวลผลชื่อทางภูมิศาสตร์",
"map_reverse_geocoding_settings": "การตั้งค่าประมวลผลชื่อทางภูมิศาสตร์",
@@ -173,6 +175,7 @@
"oauth_scope": "ขอบเขต",
"oauth_settings": "OAuth",
"oauth_settings_description": "จัดการการตั้งค่าล็อกอินผ่าน OAuth",
"oauth_settings_more_details": "สำหรับรายละเอียดเพิ่มเติม ให้อ้างถึง<link>เอกสาร</link>",
"oauth_signing_algorithm": "อัลกอริทึมการลงนาม",
"oauth_storage_label_claim": "สิทธิ์ที่ใช้อ้างถึงฉลากการจัดเก็บ",
"oauth_storage_label_claim_description": "ตั้งฉลากการจัดเก็บของผู้ใช้งานตามสิทธิ์ที่ใช้อ้างถึงโดยอัตโนมัติ",
@@ -188,8 +191,12 @@
"paths_validated_successfully": "พาธทั้งหมดถูกตรวจสอบสำเร็จแล้ว",
"quota_size_gib": "โควตา (GiB)",
"refreshing_all_libraries": "รีเฟรชคลังภาพทั้งหมด",
"registration": "ลงทะเบียนผู้จัดการ",
"registration_description": "เนื่องจากคุณเป็นผู้ใช้งานแรกของระบบ คุณจะถูกแต่งตั้งเป็นผู้จัดการและรับผิดชอบงานบริหาร ผู้ใช้งานเพิ่มเติมจะถูกสร้างโดยคุณ",
"removing_offline_files": "กำลังลบไฟล์ออฟไลน์",
"repair_all": "ซ่อมแซมทั้งหมด",
"repair_matched_items": "จับคู่ {count, plural, one {# รายการ} other {# รายการ}}",
"repaired_items": "ซ่อมแซม {count, plural, one {# รายการ} other {# รายการ}}",
"require_password_change_on_login": "บังคับผู้ใช้ให้เปลี่ยนรหัสผ่านเมื่อเข้าสู่ระบบครั้งแรก",
"reset_settings_to_default": "ตั้งค่าการตั้งค่าเป็นค่าเริ่มต้น",
"reset_settings_to_recent_saved": "ตั้งค่าการตั้งค่าเป็นค่าล่าสุด",
@@ -206,9 +213,13 @@
"sidecar_job_description": "ค้นหาหรือซิงค์ไฟล์ metadata จากระบบ",
"slideshow_duration_description": "จำนวนวินาทีที่จะแสดงแต่ละรูปภาพ",
"smart_search_job_description": "เรียกใช้ machine learning บนสื่อเพื่อรองรับการค้นหาอัจฉริยะ",
"storage_template_date_time_description": "เวลาประทับบนสื่อถูกใช้สำหรับข้อมูลวันเวลา",
"storage_template_date_time_sample": "ตัวอย่างเวลา {date}",
"storage_template_enable_description": "เปิดใช้งานการจัดเทมเพลตที่เก็บข้อมูล",
"storage_template_hash_verification_enabled": "เปิดใช้การตรวจสอบ Hash แล้ว",
"storage_template_hash_verification_enabled_description": "เปิดใช้งานการตรวจสอบ hash ห้ามปิดใช้งานเว้นแต่คุณจะเข้าใจผลกระทบ",
"storage_template_migration": "การย้ายเทมเพลตที่เก็บข้อมูล",
"storage_template_migration_description": "ใช้<link>{template}</link>ปัจจุบันกับสื่อที่อัพโหลดก่อนหน้านี้",
"storage_template_migration_job": "",
"storage_template_settings": "",
"storage_template_settings_description": "",
@@ -233,7 +244,7 @@
"transcoding_accepted_video_codecs_description": "เลือกแบบไฟล์วิดีโอที่จะไม่ถูกแปลงใหม่ ใช้สําหรับกฏการแปลงแบบไฟล์",
"transcoding_advanced_options_description": "ตัวเลือกที่ผู้ใช้ส่วนใหญ่ไม่จำเป็นต้องเปลี่ยน",
"transcoding_audio_codec": "แบบไฟล์เสียง",
"transcoding_audio_codec_description": "Opus ให้คุณภาพสูงสุด แต่อาจจะเข้ากันไม่ได้กับอุปกรณ์เก่าหรือซอฟต์แวร์เก่า",
"transcoding_audio_codec_description": "Opus ให้คุณภาพสูงสุด แต่อุปกรณ์เก่าหรือซอฟต์แวร์เก่าอาจจะเข้ากันไม่ได้",
"transcoding_bitrate_description": "วิดีโอมีค่า bitrate สูงกว่าค่าสูงสุดหรือไฟล์วิดีโอไม่รองรับ",
"transcoding_constant_quality_mode": "โหมดคุณภาพคงที่",
"transcoding_constant_quality_mode_description": "ICQ ดีกว่า CQP แต่อุปกรณ์บางตัวอาจจะไม่รองรับโหมดนี้ การตั้งค่าตัวนี้จะเลือกโหมดที่ระบุไว้เมื่อใช้การแปลงคุณภาพไฟล์ ไม่สน NVENC เพราะไม่รองรับ ICQ",

View File

@@ -30,6 +30,7 @@
"add_exclusion_pattern_description": "Thêm quy tắc loại trừ. Hỗ trợ sử dụng ký tự *, **, và ?. Để bỏ qua tất cả các tệp bất kỳ trong thư mục tên \"Raw\", hãy dùng \"**/Raw/**\". Để bỏ qua các tệp có đuôi \".tif\", hãy dùng \"**/*.tif\". Để bỏ qua một đường dẫn đầy đủ, hãy dùng \"/path/to/ignore/**\".",
"authentication_settings": "Cài đặt đăng nhập",
"authentication_settings_description": "Quản lý mật khẩu, OAuth và các cài đặt đăng nhập khác",
"authentication_settings_disable_all": "Bạn có chắc chắn muốn vô hiệu hoá tất cả các phương thức đăng nhập? Đăng nhập sẽ bị vô hiệu hóa hoàn toàn.",
"authentication_settings_reenable": "Để bật lại, dùng <link>Lệnh máy chủ</link>.",
"background_task_job": "Các tác vụ nền",
"check_all": "Chọn tất cả",
@@ -98,19 +99,19 @@
"machine_learning_duplicate_detection": "Phát hiện ảnh trùng lặp",
"machine_learning_duplicate_detection_enabled": "Bật phát hiện ảnh trùng lặp",
"machine_learning_duplicate_detection_enabled_description": "Nếu bị vô hiệu hoá, các ảnh trùng lặp giống hệt nhau vẫn sẽ bị loại bỏ.",
"machine_learning_duplicate_detection_setting_description": "",
"machine_learning_duplicate_detection_setting_description": "Sử dụng vector nhúng CLIP để tìm kiếm ảnh trùng lặp",
"machine_learning_enabled": "Bật machine learning",
"machine_learning_enabled_description": "Nếu bị vô hiệu hoá, tất cả các tính năng ML sẽ bị vô hiệu hoá kể các cài đặt bên dưới.",
"machine_learning_facial_recognition": "Nhận dạng khuôn mặt",
"machine_learning_facial_recognition_description": "Phát hiện, nhận dạng và nhóm các khuôn mặt trong ảnh",
"machine_learning_facial_recognition_model": "Mô hình nhận dạng khuôn mặt",
"machine_learning_facial_recognition_model_description": "",
"machine_learning_facial_recognition_model_description": "Các mô hình được liệt kê theo thứ tự kích thước giảm dần. Mô hình càng lớn, kết quả càng chính xác nhưng sẽ chạy chậm và tốn nhiều bộ nhớ hơn. Lưu ý rằng sau khi thay đổi mô hình, bạn cần chạy lại tính năng \"Phát hiện Khuôn mặt\" cho tất cả hình ảnh.",
"machine_learning_facial_recognition_setting": "Bật nhận dạng khuôn mặt",
"machine_learning_facial_recognition_setting_description": "",
"machine_learning_max_detection_distance": "",
"machine_learning_max_detection_distance_description": "",
"machine_learning_max_recognition_distance": "",
"machine_learning_max_recognition_distance_description": "",
"machine_learning_facial_recognition_setting_description": "Nếu tính năng này bị vô hiệu hóa, hình ảnh sẽ không được mã hóa để nhận diện khuôn mặt và sẽ không xuất hiện trong phần Mọi người trong trang Khám phá.",
"machine_learning_max_detection_distance": "Khoảng cách phát hiện tối đa",
"machine_learning_max_detection_distance_description": "Khoảng cách tối đa để hai ảnh được coi là trùng lặp, dao động từ 0,001 đến 0,1. Giá trị càng cao sẽ phát hiện được nhiều ảnh trùng lặp hơn, nhưng có thể bao gồm cả ảnh không thực sự giống nhau.",
"machine_learning_max_recognition_distance": "Khoảng cách nhận dạng tối đa",
"machine_learning_max_recognition_distance_description": "Khoảng cách tối đa để hai khuôn mặt được coi là cùng một người, dao động từ 0-2. Giảm giá trị này có thể ngăn chặn việc gán nhãn hai người cùng một người, trong khi tăng giá trị này có thể ngăn chặn việc gán nhãn cùng một người là hai người khác nhau. Lưu ý rằng việc gộp hai người lại với nhau dễ dàng hơn là tách một người thành hai, vì vậy hãy ưu tiên giá trị thấp khi có thể.",
"machine_learning_min_detection_score": "",
"machine_learning_min_detection_score_description": "",
"machine_learning_min_recognized_faces": "",
@@ -118,7 +119,7 @@
"machine_learning_settings": "Cài đặt Machine Learning",
"machine_learning_settings_description": "Quản lý các tính năng và cài đặt của machine learning",
"machine_learning_smart_search": "Tìm kiếm thông minh",
"machine_learning_smart_search_description": "",
"machine_learning_smart_search_description": "Tìm kiếm hình ảnh theo ngữ nghĩa với CLIP",
"machine_learning_smart_search_enabled": "Bật tìm kiếm thông minh",
"machine_learning_smart_search_enabled_description": "Nếu vô hiệu hoá, hình ảnh sẽ không được mã hoá để tìm kiếm thông minh.",
"machine_learning_url_description": "Địa chỉ máy chủ machine learning",
@@ -155,7 +156,7 @@
"oauth_auto_launch_description": "Tự động đăng nhập bằng tài khoản OAuth khi bạn truy cập trang đăng nhập",
"oauth_auto_register": "Tự động đăng ký",
"oauth_auto_register_description": "Tự động đăng ký người dùng mới sau khi đăng nhập với OAuth",
"oauth_button_text": "Nội dung văn bản nút",
"oauth_button_text": "Nội dung văn bản nút bấm",
"oauth_client_id": "Mã ứng dụng khách OAuth",
"oauth_client_secret": "Mật khẩu ứng dụng khách OAuth",
"oauth_enable_description": "Đăng nhập với OAuth",
@@ -282,7 +283,7 @@
},
"admin_email": "Email Quản trị",
"admin_password": "Mật khẩu Quản trị",
"administration": "",
"administration": "Trang quản trị",
"advanced": "Nâng cao",
"album_added": "",
"album_added_notification_setting_description": "",