From 1d834703bec6c979d49061caf5bd6191118e0cd4 Mon Sep 17 00:00:00 2001 From: NaiJi Date: Sun, 4 Feb 2024 11:12:14 +0400 Subject: [PATCH 01/75] feat(ui): Move provider card title to the top row - Resolve: https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/448 --- lib/ui/pages/providers/providers.dart | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/lib/ui/pages/providers/providers.dart b/lib/ui/pages/providers/providers.dart index 5b2285f3..a4dbc517 100644 --- a/lib/ui/pages/providers/providers.dart +++ b/lib/ui/pages/providers/providers.dart @@ -148,9 +148,18 @@ class _Card extends StatelessWidget { Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ - IconStatusMask( - status: state, - icon: Icon(icon, size: 30, color: Colors.white), + Row( + children: [ + IconStatusMask( + status: state, + icon: Icon(icon, size: 30, color: Colors.white), + ), + const SizedBox(width: 8), + Text( + title, + style: Theme.of(context).textTheme.titleLarge, + ), + ], ), if (state != StateType.uninitialized) IconStatusMask( @@ -167,10 +176,6 @@ class _Card extends StatelessWidget { ], ), const SizedBox(height: 8), - Text( - title, - style: Theme.of(context).textTheme.titleLarge, - ), if (state != StateType.uninitialized) Text( subtitle, From 60c6736487bd168be661e6d14db47a3b76e0ea97 Mon Sep 17 00:00:00 2001 From: Inex Code Date: Sat, 2 Mar 2024 19:49:36 +0300 Subject: [PATCH 02/75] fix: Empty server confirmation screen during recovery --- lib/ui/pages/setup/recovering/recovery_confirm_server.dart | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/lib/ui/pages/setup/recovering/recovery_confirm_server.dart b/lib/ui/pages/setup/recovering/recovery_confirm_server.dart index 8e0ff022..e9c53f94 100644 --- a/lib/ui/pages/setup/recovering/recovery_confirm_server.dart +++ b/lib/ui/pages/setup/recovering/recovery_confirm_server.dart @@ -61,8 +61,7 @@ class _RecoveryConfirmServerState extends State { _firstValidServer(servers), servers.length > 1, ), - if (servers.length > 1 && - (_isExtended || !_isServerFound(servers))) + if (_isExtended || !_isServerFound(servers)) chooseServer(context, servers), ], ), From 67bcbe419fb6c1654dcd1a6d2eecc7fb1679fafc Mon Sep 17 00:00:00 2001 From: Inex Code Date: Mon, 4 Mar 2024 01:31:27 +0300 Subject: [PATCH 03/75] fix: Do not include faulty link-local DNS records in the list of found records --- lib/logic/cubit/dns_records/dns_records_cubit.dart | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/lib/logic/cubit/dns_records/dns_records_cubit.dart b/lib/logic/cubit/dns_records/dns_records_cubit.dart index 1b682dea..55fa9b5a 100644 --- a/lib/logic/cubit/dns_records/dns_records_cubit.dart +++ b/lib/logic/cubit/dns_records/dns_records_cubit.dart @@ -93,6 +93,10 @@ class DnsRecordsCubit extends ServerConnectionDependentCubit { final List foundRecords = []; try { for (final DnsRecord pendingDnsRecord in pendingDnsRecords) { + if (pendingDnsRecord.type == 'AAAA' && + (pendingDnsRecord.content?.startsWith('fe80::') ?? false)) { + continue; + } if (pendingDnsRecord.name == 'selector._domainkey') { final foundRecord = providerDnsRecords.firstWhere( (final r) => @@ -207,7 +211,6 @@ class DnsRecordsCubit extends ServerConnectionDependentCubit { records.addAll(recordsToAdd); } - /// TODO: Error handling? final ServerDomain? domain = getIt().serverDomain; await ProvidersController.currentDnsProvider!.removeDomainRecords( From aec259301cb42a58c0aa4c92be9a5a2d6e70560e Mon Sep 17 00:00:00 2001 From: NaiJi Date: Mon, 4 Mar 2024 14:58:16 +0400 Subject: [PATCH 04/75] feat(ui): Change provider card title to headline medium - Resolve: https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/448 --- lib/ui/pages/providers/providers.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/ui/pages/providers/providers.dart b/lib/ui/pages/providers/providers.dart index c4cf2dc7..554c594b 100644 --- a/lib/ui/pages/providers/providers.dart +++ b/lib/ui/pages/providers/providers.dart @@ -157,7 +157,7 @@ class _Card extends StatelessWidget { const SizedBox(width: 8), Text( title, - style: Theme.of(context).textTheme.titleLarge, + style: Theme.of(context).textTheme.headlineMedium, ), ], ), From ff2b6b8f036d35465ec87bb17348407476378489 Mon Sep 17 00:00:00 2001 From: Inex Code Date: Tue, 5 Mar 2024 18:10:15 +0300 Subject: [PATCH 05/75] refactor(ui): Move server settings to a separate screen --- assets/translations/en.json | 1 + .../server_details/server_details_screen.dart | 18 ++++------ .../pages/server_details/server_settings.dart | 2 +- .../server_settings_screen.dart | 35 +++++++++++++++++++ .../server_details/time_zone/time_zone.dart | 2 +- lib/ui/router/router.dart | 2 ++ lib/ui/router/router.gr.dart | 20 +++++++++++ 7 files changed, 67 insertions(+), 13 deletions(-) create mode 100644 lib/ui/pages/server_details/server_settings_screen.dart diff --git a/assets/translations/en.json b/assets/translations/en.json index 2e75f9cd..2c0c50a7 100644 --- a/assets/translations/en.json +++ b/assets/translations/en.json @@ -123,6 +123,7 @@ "description": "All your services live here", "general_information": "General information", "resource_usage": "Resource usage", + "settings": "Server settings", "allow_autoupgrade": "Allow auto-upgrade", "allow_autoupgrade_hint": "Allow automatic packages upgrades on server", "reboot_after_upgrade": "Reboot after upgrade", diff --git a/lib/ui/pages/server_details/server_details_screen.dart b/lib/ui/pages/server_details/server_details_screen.dart index ab1f64d3..6a57e318 100644 --- a/lib/ui/pages/server_details/server_details_screen.dart +++ b/lib/ui/pages/server_details/server_details_screen.dart @@ -1,16 +1,13 @@ import 'package:auto_route/auto_route.dart'; -import 'package:cubit_form/cubit_form.dart'; import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:selfprivacy/logic/bloc/volumes/volumes_bloc.dart'; import 'package:selfprivacy/logic/common_enum/common_enum.dart'; -import 'package:selfprivacy/logic/cubit/client_jobs/client_jobs_cubit.dart'; import 'package:selfprivacy/logic/cubit/metrics/metrics_cubit.dart'; import 'package:selfprivacy/logic/cubit/server_detailed_info/server_detailed_info_cubit.dart'; import 'package:selfprivacy/logic/cubit/server_installation/server_installation_cubit.dart'; -import 'package:selfprivacy/logic/models/job.dart'; import 'package:selfprivacy/ui/components/brand_icons/brand_icons.dart'; -import 'package:selfprivacy/ui/components/brand_loader/brand_loader.dart'; import 'package:selfprivacy/ui/components/buttons/segmented_buttons.dart'; import 'package:selfprivacy/ui/components/cards/filled_card.dart'; import 'package:selfprivacy/ui/components/list_tiles/list_tile_on_surface_variant.dart'; @@ -18,15 +15,10 @@ import 'package:selfprivacy/ui/layouts/brand_hero_screen.dart'; import 'package:selfprivacy/ui/pages/server_details/charts/cpu_chart.dart'; import 'package:selfprivacy/ui/pages/server_details/charts/network_charts.dart'; import 'package:selfprivacy/ui/pages/server_storage/storage_card.dart'; -import 'package:selfprivacy/utils/breakpoints.dart'; -import 'package:selfprivacy/utils/extensions/duration.dart'; -import 'package:selfprivacy/utils/route_transitions/basic.dart'; -import 'package:timezone/timezone.dart'; +import 'package:selfprivacy/ui/router/router.dart'; part 'charts/chart.dart'; -part 'server_settings.dart'; part 'text_details.dart'; -part 'time_zone/time_zone.dart'; var navigatorKey = GlobalKey(); @@ -83,7 +75,11 @@ class _ServerDetailsScreenState extends State diskStatus: context.watch().state.diskStatus, ), const SizedBox(height: 16), - const _ServerSettings(), + ListTile( + title: Text('server.settings'.tr()), + leading: const Icon(BrandIcons.settings), + onTap: () => context.pushRoute(const ServerSettingsRoute()), + ), const Divider(height: 32), Text( 'server.resource_usage'.tr(), diff --git a/lib/ui/pages/server_details/server_settings.dart b/lib/ui/pages/server_details/server_settings.dart index c6381a3e..df343ca1 100644 --- a/lib/ui/pages/server_details/server_settings.dart +++ b/lib/ui/pages/server_details/server_settings.dart @@ -1,4 +1,4 @@ -part of 'server_details_screen.dart'; +part of 'server_settings_screen.dart'; class _ServerSettings extends StatefulWidget { const _ServerSettings(); diff --git a/lib/ui/pages/server_details/server_settings_screen.dart b/lib/ui/pages/server_details/server_settings_screen.dart new file mode 100644 index 00000000..ea98e100 --- /dev/null +++ b/lib/ui/pages/server_details/server_settings_screen.dart @@ -0,0 +1,35 @@ +import 'package:auto_route/auto_route.dart'; +import 'package:easy_localization/easy_localization.dart'; +import 'package:flutter/material.dart'; +import 'package:selfprivacy/logic/cubit/client_jobs/client_jobs_cubit.dart'; +import 'package:selfprivacy/logic/cubit/server_detailed_info/server_detailed_info_cubit.dart'; +import 'package:selfprivacy/logic/models/job.dart'; +import 'package:selfprivacy/ui/components/brand_loader/brand_loader.dart'; +import 'package:selfprivacy/ui/layouts/brand_hero_screen.dart'; +import 'package:selfprivacy/utils/breakpoints.dart'; +import 'package:selfprivacy/utils/extensions/duration.dart'; +import 'package:selfprivacy/utils/route_transitions/basic.dart'; +import 'package:timezone/timezone.dart'; + +part 'server_settings.dart'; +part 'time_zone/time_zone.dart'; + +@RoutePage() +class ServerSettingsScreen extends StatefulWidget { + const ServerSettingsScreen({super.key}); + + @override + State createState() => _ServerSettingsScreenState(); +} + +class _ServerSettingsScreenState extends State { + @override + Widget build(final BuildContext context) => BrandHeroScreen( + hasFlashButton: true, + heroIcon: Icons.settings_outlined, + heroTitle: 'server.settings'.tr(), + children: const [ + _ServerSettings(), + ], + ); +} diff --git a/lib/ui/pages/server_details/time_zone/time_zone.dart b/lib/ui/pages/server_details/time_zone/time_zone.dart index 2bb2608f..d574d5e4 100644 --- a/lib/ui/pages/server_details/time_zone/time_zone.dart +++ b/lib/ui/pages/server_details/time_zone/time_zone.dart @@ -1,4 +1,4 @@ -part of '../server_details_screen.dart'; +part of '../server_settings_screen.dart'; final List locations = timeZoneDatabase.locations.values.toList() ..sort( diff --git a/lib/ui/router/router.dart b/lib/ui/router/router.dart index 48eb2d5a..89c43618 100644 --- a/lib/ui/router/router.dart +++ b/lib/ui/router/router.dart @@ -17,6 +17,7 @@ import 'package:selfprivacy/ui/pages/providers/providers.dart'; import 'package:selfprivacy/ui/pages/recovery_key/recovery_key.dart'; import 'package:selfprivacy/ui/pages/root_route.dart'; import 'package:selfprivacy/ui/pages/server_details/server_details_screen.dart'; +import 'package:selfprivacy/ui/pages/server_details/server_settings_screen.dart'; import 'package:selfprivacy/ui/pages/server_storage/binds_migration/services_migration.dart'; import 'package:selfprivacy/ui/pages/server_storage/extending_volume.dart'; import 'package:selfprivacy/ui/pages/server_storage/server_storage.dart'; @@ -100,6 +101,7 @@ class RootRouter extends _$RootRouter { AutoRoute(page: BackupsListRoute.page), AutoRoute(page: ServerStorageRoute.page), AutoRoute(page: ExtendingVolumeRoute.page), + AutoRoute(page: ServerSettingsRoute.page), ], ), AutoRoute(page: ServicesMigrationRoute.page), diff --git a/lib/ui/router/router.gr.dart b/lib/ui/router/router.gr.dart index 98f4453a..2428f7df 100644 --- a/lib/ui/router/router.gr.dart +++ b/lib/ui/router/router.gr.dart @@ -132,6 +132,12 @@ abstract class _$RootRouter extends RootStackRouter { child: const ServerDetailsScreen(), ); }, + ServerSettingsRoute.name: (routeData) { + return AutoRoutePage( + routeData: routeData, + child: const ServerSettingsScreen(), + ); + }, ServerStorageRoute.name: (routeData) { final args = routeData.argsAs(); return AutoRoutePage( @@ -494,6 +500,20 @@ class ServerDetailsRoute extends PageRouteInfo { static const PageInfo page = PageInfo(name); } +/// generated route for +/// [ServerSettingsScreen] +class ServerSettingsRoute extends PageRouteInfo { + const ServerSettingsRoute({List? children}) + : super( + ServerSettingsRoute.name, + initialChildren: children, + ); + + static const String name = 'ServerSettingsRoute'; + + static const PageInfo page = PageInfo(name); +} + /// generated route for /// [ServerStoragePage] class ServerStorageRoute extends PageRouteInfo { From b2384a5635a0f5435d1f09f8de71f7ff5ff6aaab Mon Sep 17 00:00:00 2001 From: Inex Code Date: Fri, 8 Mar 2024 14:14:23 +0300 Subject: [PATCH 06/75] feat(jobs): Block starting client-side jobs when server is rebuilding or moving a service --- lib/logic/bloc/server_jobs/server_jobs_state.dart | 9 +++++++++ lib/ui/components/jobs_content/jobs_content.dart | 7 ++++++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/lib/logic/bloc/server_jobs/server_jobs_state.dart b/lib/logic/bloc/server_jobs/server_jobs_state.dart index 09f7e9ff..42370d51 100644 --- a/lib/logic/bloc/server_jobs/server_jobs_state.dart +++ b/lib/logic/bloc/server_jobs/server_jobs_state.dart @@ -36,6 +36,15 @@ sealed class ServerJobsState extends Equatable { job.status == JobStatusEnum.error, ); + bool get hasJobsBlockingRebuild => serverJobList.any( + (final job) => + (job.status == JobStatusEnum.running || + job.status == JobStatusEnum.created) && + (job.typeId.contains('system.nixos.rebuild') || + job.typeId.contains('system.nixos.upgrade') || + job.typeId.contains('move')), + ); + @override List get props => [_hashCode]; } diff --git a/lib/ui/components/jobs_content/jobs_content.dart b/lib/ui/components/jobs_content/jobs_content.dart index e3c1c9de..c4e8d43a 100644 --- a/lib/ui/components/jobs_content/jobs_content.dart +++ b/lib/ui/components/jobs_content/jobs_content.dart @@ -53,6 +53,9 @@ class JobsContent extends StatelessWidget { final bool hasRemovableJobs = context.watch().state.hasRemovableJobs; + final bool hasBlockingJobs = + context.watch().state.hasJobsBlockingRebuild; + return BlocBuilder( builder: (final context, final state) { late List widgets; @@ -422,7 +425,9 @@ class JobsContent extends StatelessWidget { ), const SizedBox(height: 16), BrandButton.rised( - onPressed: () => context.read().applyAll(), + onPressed: hasBlockingJobs + ? null + : () => context.read().applyAll(), text: 'jobs.start'.tr(), ), ]; From bba29caeba90639e4166b7cf2f58a611a76d4feb Mon Sep 17 00:00:00 2001 From: Inex Code Date: Sat, 9 Mar 2024 19:30:43 +0300 Subject: [PATCH 07/75] feat: Add ssh settings --- assets/translations/en.json | 10 +- .../schema/server_settings.graphql | 10 + .../schema/server_settings.graphql.dart | 780 ++++++++++++++++++ .../graphql_maps/server_api/server_api.dart | 44 + .../server_detailed_info_cubit.dart | 2 + .../server_detailed_info_state.dart | 6 +- .../get_it/api_connection_repository.dart | 19 + lib/logic/models/job.dart | 44 + .../pages/server_details/server_settings.dart | 73 ++ .../server_settings_screen.dart | 14 +- lib/ui/pages/users/user_details.dart | 181 ++-- lib/ui/pages/users/users.dart | 1 + 12 files changed, 1094 insertions(+), 90 deletions(-) diff --git a/assets/translations/en.json b/assets/translations/en.json index 2c0c50a7..d78873c9 100644 --- a/assets/translations/en.json +++ b/assets/translations/en.json @@ -95,7 +95,8 @@ "no_key_name": "Unnamed key", "root_title": "These are superuser keys", "root_subtitle": "Owners of these keys get full access to the server and can do anything on it. Only add your own keys to the server.", - "input_label": "Public ED25519, ECDSA or RSA key" + "input_label": "Public ED25519, ECDSA or RSA key", + "ssh_disabled_warning": "SSH is disabled. You can enable it in the server settings." }, "onboarding": { "page1_title": "Digital independence, available to all of us", @@ -130,6 +131,10 @@ "reboot_after_upgrade_hint": "Reboot without prompt after applying changes on server", "server_timezone": "Server timezone", "select_timezone": "Select timezone", + "enable_ssh": "Enable SSH", + "enable_ssh_hint": "Allow SSH access to the server", + "allow_password_authentication": "Allow password authentication for SSH", + "allow_password_authentication_hint": "Allow users to log into your server's shell with a password (does not apply to root user)", "timezone_search_bar": "Timezone name or time shift value", "server_id": "Server ID", "status": "Status", @@ -626,7 +631,8 @@ "rebuild_system": "Rebuild system", "start_server_upgrade": "Start the server upgrade", "change_auto_upgrade_settings": "Change auto-upgrade settings", - "change_server_timezone": "Change server timezone" + "change_server_timezone": "Change server timezone", + "change_ssh_settings": "Change SSH settings" }, "validations": { "required": "Required", diff --git a/lib/logic/api_maps/graphql_maps/schema/server_settings.graphql b/lib/logic/api_maps/graphql_maps/schema/server_settings.graphql index ca6c5078..f7d93d92 100644 --- a/lib/logic/api_maps/graphql_maps/schema/server_settings.graphql +++ b/lib/logic/api_maps/graphql_maps/schema/server_settings.graphql @@ -62,3 +62,13 @@ mutation ChangeAutoUpgradeSettings($settings: AutoUpgradeSettingsInput!) { } } } + +mutation ChangeSshSettings($settings: SSHSettingsInput!) { + system { + changeSshSettings(settings: $settings) { + ...basicMutationReturnFields + enable + passwordAuthentication + } + } +} diff --git a/lib/logic/api_maps/graphql_maps/schema/server_settings.graphql.dart b/lib/logic/api_maps/graphql_maps/schema/server_settings.graphql.dart index 6e461a41..1a70fc06 100644 --- a/lib/logic/api_maps/graphql_maps/schema/server_settings.graphql.dart +++ b/lib/logic/api_maps/graphql_maps/schema/server_settings.graphql.dart @@ -4123,3 +4123,783 @@ class _CopyWithStubImpl$Mutation$ChangeAutoUpgradeSettings$system$changeAutoUpgr }) => _res; } + +class Variables$Mutation$ChangeSshSettings { + factory Variables$Mutation$ChangeSshSettings( + {required Input$SSHSettingsInput settings}) => + Variables$Mutation$ChangeSshSettings._({ + r'settings': settings, + }); + + Variables$Mutation$ChangeSshSettings._(this._$data); + + factory Variables$Mutation$ChangeSshSettings.fromJson( + Map data) { + final result$data = {}; + final l$settings = data['settings']; + result$data['settings'] = + Input$SSHSettingsInput.fromJson((l$settings as Map)); + return Variables$Mutation$ChangeSshSettings._(result$data); + } + + Map _$data; + + Input$SSHSettingsInput get settings => + (_$data['settings'] as Input$SSHSettingsInput); + + Map toJson() { + final result$data = {}; + final l$settings = settings; + result$data['settings'] = l$settings.toJson(); + return result$data; + } + + CopyWith$Variables$Mutation$ChangeSshSettings< + Variables$Mutation$ChangeSshSettings> + get copyWith => CopyWith$Variables$Mutation$ChangeSshSettings( + this, + (i) => i, + ); + + @override + bool operator ==(Object other) { + if (identical(this, other)) { + return true; + } + if (!(other is Variables$Mutation$ChangeSshSettings) || + runtimeType != other.runtimeType) { + return false; + } + final l$settings = settings; + final lOther$settings = other.settings; + if (l$settings != lOther$settings) { + return false; + } + return true; + } + + @override + int get hashCode { + final l$settings = settings; + return Object.hashAll([l$settings]); + } +} + +abstract class CopyWith$Variables$Mutation$ChangeSshSettings { + factory CopyWith$Variables$Mutation$ChangeSshSettings( + Variables$Mutation$ChangeSshSettings instance, + TRes Function(Variables$Mutation$ChangeSshSettings) then, + ) = _CopyWithImpl$Variables$Mutation$ChangeSshSettings; + + factory CopyWith$Variables$Mutation$ChangeSshSettings.stub(TRes res) = + _CopyWithStubImpl$Variables$Mutation$ChangeSshSettings; + + TRes call({Input$SSHSettingsInput? settings}); +} + +class _CopyWithImpl$Variables$Mutation$ChangeSshSettings + implements CopyWith$Variables$Mutation$ChangeSshSettings { + _CopyWithImpl$Variables$Mutation$ChangeSshSettings( + this._instance, + this._then, + ); + + final Variables$Mutation$ChangeSshSettings _instance; + + final TRes Function(Variables$Mutation$ChangeSshSettings) _then; + + static const _undefined = {}; + + TRes call({Object? settings = _undefined}) => + _then(Variables$Mutation$ChangeSshSettings._({ + ..._instance._$data, + if (settings != _undefined && settings != null) + 'settings': (settings as Input$SSHSettingsInput), + })); +} + +class _CopyWithStubImpl$Variables$Mutation$ChangeSshSettings + implements CopyWith$Variables$Mutation$ChangeSshSettings { + _CopyWithStubImpl$Variables$Mutation$ChangeSshSettings(this._res); + + TRes _res; + + call({Input$SSHSettingsInput? settings}) => _res; +} + +class Mutation$ChangeSshSettings { + Mutation$ChangeSshSettings({ + required this.system, + this.$__typename = 'Mutation', + }); + + factory Mutation$ChangeSshSettings.fromJson(Map json) { + final l$system = json['system']; + final l$$__typename = json['__typename']; + return Mutation$ChangeSshSettings( + system: Mutation$ChangeSshSettings$system.fromJson( + (l$system as Map)), + $__typename: (l$$__typename as String), + ); + } + + final Mutation$ChangeSshSettings$system system; + + final String $__typename; + + Map toJson() { + final _resultData = {}; + final l$system = system; + _resultData['system'] = l$system.toJson(); + final l$$__typename = $__typename; + _resultData['__typename'] = l$$__typename; + return _resultData; + } + + @override + int get hashCode { + final l$system = system; + final l$$__typename = $__typename; + return Object.hashAll([ + l$system, + l$$__typename, + ]); + } + + @override + bool operator ==(Object other) { + if (identical(this, other)) { + return true; + } + if (!(other is Mutation$ChangeSshSettings) || + runtimeType != other.runtimeType) { + return false; + } + final l$system = system; + final lOther$system = other.system; + if (l$system != lOther$system) { + return false; + } + final l$$__typename = $__typename; + final lOther$$__typename = other.$__typename; + if (l$$__typename != lOther$$__typename) { + return false; + } + return true; + } +} + +extension UtilityExtension$Mutation$ChangeSshSettings + on Mutation$ChangeSshSettings { + CopyWith$Mutation$ChangeSshSettings + get copyWith => CopyWith$Mutation$ChangeSshSettings( + this, + (i) => i, + ); +} + +abstract class CopyWith$Mutation$ChangeSshSettings { + factory CopyWith$Mutation$ChangeSshSettings( + Mutation$ChangeSshSettings instance, + TRes Function(Mutation$ChangeSshSettings) then, + ) = _CopyWithImpl$Mutation$ChangeSshSettings; + + factory CopyWith$Mutation$ChangeSshSettings.stub(TRes res) = + _CopyWithStubImpl$Mutation$ChangeSshSettings; + + TRes call({ + Mutation$ChangeSshSettings$system? system, + String? $__typename, + }); + CopyWith$Mutation$ChangeSshSettings$system get system; +} + +class _CopyWithImpl$Mutation$ChangeSshSettings + implements CopyWith$Mutation$ChangeSshSettings { + _CopyWithImpl$Mutation$ChangeSshSettings( + this._instance, + this._then, + ); + + final Mutation$ChangeSshSettings _instance; + + final TRes Function(Mutation$ChangeSshSettings) _then; + + static const _undefined = {}; + + TRes call({ + Object? system = _undefined, + Object? $__typename = _undefined, + }) => + _then(Mutation$ChangeSshSettings( + system: system == _undefined || system == null + ? _instance.system + : (system as Mutation$ChangeSshSettings$system), + $__typename: $__typename == _undefined || $__typename == null + ? _instance.$__typename + : ($__typename as String), + )); + + CopyWith$Mutation$ChangeSshSettings$system get system { + final local$system = _instance.system; + return CopyWith$Mutation$ChangeSshSettings$system( + local$system, (e) => call(system: e)); + } +} + +class _CopyWithStubImpl$Mutation$ChangeSshSettings + implements CopyWith$Mutation$ChangeSshSettings { + _CopyWithStubImpl$Mutation$ChangeSshSettings(this._res); + + TRes _res; + + call({ + Mutation$ChangeSshSettings$system? system, + String? $__typename, + }) => + _res; + + CopyWith$Mutation$ChangeSshSettings$system get system => + CopyWith$Mutation$ChangeSshSettings$system.stub(_res); +} + +const documentNodeMutationChangeSshSettings = DocumentNode(definitions: [ + OperationDefinitionNode( + type: OperationType.mutation, + name: NameNode(value: 'ChangeSshSettings'), + variableDefinitions: [ + VariableDefinitionNode( + variable: VariableNode(name: NameNode(value: 'settings')), + type: NamedTypeNode( + name: NameNode(value: 'SSHSettingsInput'), + isNonNull: true, + ), + defaultValue: DefaultValueNode(value: null), + directives: [], + ) + ], + directives: [], + selectionSet: SelectionSetNode(selections: [ + FieldNode( + name: NameNode(value: 'system'), + alias: null, + arguments: [], + directives: [], + selectionSet: SelectionSetNode(selections: [ + FieldNode( + name: NameNode(value: 'changeSshSettings'), + alias: null, + arguments: [ + ArgumentNode( + name: NameNode(value: 'settings'), + value: VariableNode(name: NameNode(value: 'settings')), + ) + ], + directives: [], + selectionSet: SelectionSetNode(selections: [ + FragmentSpreadNode( + name: NameNode(value: 'basicMutationReturnFields'), + directives: [], + ), + FieldNode( + name: NameNode(value: 'enable'), + alias: null, + arguments: [], + directives: [], + selectionSet: null, + ), + FieldNode( + name: NameNode(value: 'passwordAuthentication'), + alias: null, + arguments: [], + directives: [], + selectionSet: null, + ), + FieldNode( + name: NameNode(value: '__typename'), + alias: null, + arguments: [], + directives: [], + selectionSet: null, + ), + ]), + ), + FieldNode( + name: NameNode(value: '__typename'), + alias: null, + arguments: [], + directives: [], + selectionSet: null, + ), + ]), + ), + FieldNode( + name: NameNode(value: '__typename'), + alias: null, + arguments: [], + directives: [], + selectionSet: null, + ), + ]), + ), + fragmentDefinitionbasicMutationReturnFields, +]); +Mutation$ChangeSshSettings _parserFn$Mutation$ChangeSshSettings( + Map data) => + Mutation$ChangeSshSettings.fromJson(data); +typedef OnMutationCompleted$Mutation$ChangeSshSettings = FutureOr + Function( + Map?, + Mutation$ChangeSshSettings?, +); + +class Options$Mutation$ChangeSshSettings + extends graphql.MutationOptions { + Options$Mutation$ChangeSshSettings({ + String? operationName, + required Variables$Mutation$ChangeSshSettings variables, + graphql.FetchPolicy? fetchPolicy, + graphql.ErrorPolicy? errorPolicy, + graphql.CacheRereadPolicy? cacheRereadPolicy, + Object? optimisticResult, + Mutation$ChangeSshSettings? typedOptimisticResult, + graphql.Context? context, + OnMutationCompleted$Mutation$ChangeSshSettings? onCompleted, + graphql.OnMutationUpdate? update, + graphql.OnError? onError, + }) : onCompletedWithParsed = onCompleted, + super( + variables: variables.toJson(), + operationName: operationName, + fetchPolicy: fetchPolicy, + errorPolicy: errorPolicy, + cacheRereadPolicy: cacheRereadPolicy, + optimisticResult: optimisticResult ?? typedOptimisticResult?.toJson(), + context: context, + onCompleted: onCompleted == null + ? null + : (data) => onCompleted( + data, + data == null + ? null + : _parserFn$Mutation$ChangeSshSettings(data), + ), + update: update, + onError: onError, + document: documentNodeMutationChangeSshSettings, + parserFn: _parserFn$Mutation$ChangeSshSettings, + ); + + final OnMutationCompleted$Mutation$ChangeSshSettings? onCompletedWithParsed; + + @override + List get properties => [ + ...super.onCompleted == null + ? super.properties + : super.properties.where((property) => property != onCompleted), + onCompletedWithParsed, + ]; +} + +class WatchOptions$Mutation$ChangeSshSettings + extends graphql.WatchQueryOptions { + WatchOptions$Mutation$ChangeSshSettings({ + String? operationName, + required Variables$Mutation$ChangeSshSettings variables, + graphql.FetchPolicy? fetchPolicy, + graphql.ErrorPolicy? errorPolicy, + graphql.CacheRereadPolicy? cacheRereadPolicy, + Object? optimisticResult, + Mutation$ChangeSshSettings? typedOptimisticResult, + graphql.Context? context, + Duration? pollInterval, + bool? eagerlyFetchResults, + bool carryForwardDataOnException = true, + bool fetchResults = false, + }) : super( + variables: variables.toJson(), + operationName: operationName, + fetchPolicy: fetchPolicy, + errorPolicy: errorPolicy, + cacheRereadPolicy: cacheRereadPolicy, + optimisticResult: optimisticResult ?? typedOptimisticResult?.toJson(), + context: context, + document: documentNodeMutationChangeSshSettings, + pollInterval: pollInterval, + eagerlyFetchResults: eagerlyFetchResults, + carryForwardDataOnException: carryForwardDataOnException, + fetchResults: fetchResults, + parserFn: _parserFn$Mutation$ChangeSshSettings, + ); +} + +extension ClientExtension$Mutation$ChangeSshSettings on graphql.GraphQLClient { + Future> + mutate$ChangeSshSettings( + Options$Mutation$ChangeSshSettings options) async => + await this.mutate(options); + graphql.ObservableQuery + watchMutation$ChangeSshSettings( + WatchOptions$Mutation$ChangeSshSettings options) => + this.watchMutation(options); +} + +class Mutation$ChangeSshSettings$system { + Mutation$ChangeSshSettings$system({ + required this.changeSshSettings, + this.$__typename = 'SystemMutations', + }); + + factory Mutation$ChangeSshSettings$system.fromJson( + Map json) { + final l$changeSshSettings = json['changeSshSettings']; + final l$$__typename = json['__typename']; + return Mutation$ChangeSshSettings$system( + changeSshSettings: + Mutation$ChangeSshSettings$system$changeSshSettings.fromJson( + (l$changeSshSettings as Map)), + $__typename: (l$$__typename as String), + ); + } + + final Mutation$ChangeSshSettings$system$changeSshSettings changeSshSettings; + + final String $__typename; + + Map toJson() { + final _resultData = {}; + final l$changeSshSettings = changeSshSettings; + _resultData['changeSshSettings'] = l$changeSshSettings.toJson(); + final l$$__typename = $__typename; + _resultData['__typename'] = l$$__typename; + return _resultData; + } + + @override + int get hashCode { + final l$changeSshSettings = changeSshSettings; + final l$$__typename = $__typename; + return Object.hashAll([ + l$changeSshSettings, + l$$__typename, + ]); + } + + @override + bool operator ==(Object other) { + if (identical(this, other)) { + return true; + } + if (!(other is Mutation$ChangeSshSettings$system) || + runtimeType != other.runtimeType) { + return false; + } + final l$changeSshSettings = changeSshSettings; + final lOther$changeSshSettings = other.changeSshSettings; + if (l$changeSshSettings != lOther$changeSshSettings) { + return false; + } + final l$$__typename = $__typename; + final lOther$$__typename = other.$__typename; + if (l$$__typename != lOther$$__typename) { + return false; + } + return true; + } +} + +extension UtilityExtension$Mutation$ChangeSshSettings$system + on Mutation$ChangeSshSettings$system { + CopyWith$Mutation$ChangeSshSettings$system + get copyWith => CopyWith$Mutation$ChangeSshSettings$system( + this, + (i) => i, + ); +} + +abstract class CopyWith$Mutation$ChangeSshSettings$system { + factory CopyWith$Mutation$ChangeSshSettings$system( + Mutation$ChangeSshSettings$system instance, + TRes Function(Mutation$ChangeSshSettings$system) then, + ) = _CopyWithImpl$Mutation$ChangeSshSettings$system; + + factory CopyWith$Mutation$ChangeSshSettings$system.stub(TRes res) = + _CopyWithStubImpl$Mutation$ChangeSshSettings$system; + + TRes call({ + Mutation$ChangeSshSettings$system$changeSshSettings? changeSshSettings, + String? $__typename, + }); + CopyWith$Mutation$ChangeSshSettings$system$changeSshSettings + get changeSshSettings; +} + +class _CopyWithImpl$Mutation$ChangeSshSettings$system + implements CopyWith$Mutation$ChangeSshSettings$system { + _CopyWithImpl$Mutation$ChangeSshSettings$system( + this._instance, + this._then, + ); + + final Mutation$ChangeSshSettings$system _instance; + + final TRes Function(Mutation$ChangeSshSettings$system) _then; + + static const _undefined = {}; + + TRes call({ + Object? changeSshSettings = _undefined, + Object? $__typename = _undefined, + }) => + _then(Mutation$ChangeSshSettings$system( + changeSshSettings: + changeSshSettings == _undefined || changeSshSettings == null + ? _instance.changeSshSettings + : (changeSshSettings + as Mutation$ChangeSshSettings$system$changeSshSettings), + $__typename: $__typename == _undefined || $__typename == null + ? _instance.$__typename + : ($__typename as String), + )); + + CopyWith$Mutation$ChangeSshSettings$system$changeSshSettings + get changeSshSettings { + final local$changeSshSettings = _instance.changeSshSettings; + return CopyWith$Mutation$ChangeSshSettings$system$changeSshSettings( + local$changeSshSettings, (e) => call(changeSshSettings: e)); + } +} + +class _CopyWithStubImpl$Mutation$ChangeSshSettings$system + implements CopyWith$Mutation$ChangeSshSettings$system { + _CopyWithStubImpl$Mutation$ChangeSshSettings$system(this._res); + + TRes _res; + + call({ + Mutation$ChangeSshSettings$system$changeSshSettings? changeSshSettings, + String? $__typename, + }) => + _res; + + CopyWith$Mutation$ChangeSshSettings$system$changeSshSettings + get changeSshSettings => + CopyWith$Mutation$ChangeSshSettings$system$changeSshSettings.stub( + _res); +} + +class Mutation$ChangeSshSettings$system$changeSshSettings + implements Fragment$basicMutationReturnFields$$SSHSettingsMutationReturn { + Mutation$ChangeSshSettings$system$changeSshSettings({ + required this.code, + required this.message, + required this.success, + this.$__typename = 'SSHSettingsMutationReturn', + required this.enable, + required this.passwordAuthentication, + }); + + factory Mutation$ChangeSshSettings$system$changeSshSettings.fromJson( + Map json) { + final l$code = json['code']; + final l$message = json['message']; + final l$success = json['success']; + final l$$__typename = json['__typename']; + final l$enable = json['enable']; + final l$passwordAuthentication = json['passwordAuthentication']; + return Mutation$ChangeSshSettings$system$changeSshSettings( + code: (l$code as int), + message: (l$message as String), + success: (l$success as bool), + $__typename: (l$$__typename as String), + enable: (l$enable as bool), + passwordAuthentication: (l$passwordAuthentication as bool), + ); + } + + final int code; + + final String message; + + final bool success; + + final String $__typename; + + final bool enable; + + final bool passwordAuthentication; + + Map toJson() { + final _resultData = {}; + final l$code = code; + _resultData['code'] = l$code; + final l$message = message; + _resultData['message'] = l$message; + final l$success = success; + _resultData['success'] = l$success; + final l$$__typename = $__typename; + _resultData['__typename'] = l$$__typename; + final l$enable = enable; + _resultData['enable'] = l$enable; + final l$passwordAuthentication = passwordAuthentication; + _resultData['passwordAuthentication'] = l$passwordAuthentication; + return _resultData; + } + + @override + int get hashCode { + final l$code = code; + final l$message = message; + final l$success = success; + final l$$__typename = $__typename; + final l$enable = enable; + final l$passwordAuthentication = passwordAuthentication; + return Object.hashAll([ + l$code, + l$message, + l$success, + l$$__typename, + l$enable, + l$passwordAuthentication, + ]); + } + + @override + bool operator ==(Object other) { + if (identical(this, other)) { + return true; + } + if (!(other is Mutation$ChangeSshSettings$system$changeSshSettings) || + runtimeType != other.runtimeType) { + return false; + } + final l$code = code; + final lOther$code = other.code; + if (l$code != lOther$code) { + return false; + } + final l$message = message; + final lOther$message = other.message; + if (l$message != lOther$message) { + return false; + } + final l$success = success; + final lOther$success = other.success; + if (l$success != lOther$success) { + return false; + } + final l$$__typename = $__typename; + final lOther$$__typename = other.$__typename; + if (l$$__typename != lOther$$__typename) { + return false; + } + final l$enable = enable; + final lOther$enable = other.enable; + if (l$enable != lOther$enable) { + return false; + } + final l$passwordAuthentication = passwordAuthentication; + final lOther$passwordAuthentication = other.passwordAuthentication; + if (l$passwordAuthentication != lOther$passwordAuthentication) { + return false; + } + return true; + } +} + +extension UtilityExtension$Mutation$ChangeSshSettings$system$changeSshSettings + on Mutation$ChangeSshSettings$system$changeSshSettings { + CopyWith$Mutation$ChangeSshSettings$system$changeSshSettings< + Mutation$ChangeSshSettings$system$changeSshSettings> + get copyWith => + CopyWith$Mutation$ChangeSshSettings$system$changeSshSettings( + this, + (i) => i, + ); +} + +abstract class CopyWith$Mutation$ChangeSshSettings$system$changeSshSettings< + TRes> { + factory CopyWith$Mutation$ChangeSshSettings$system$changeSshSettings( + Mutation$ChangeSshSettings$system$changeSshSettings instance, + TRes Function(Mutation$ChangeSshSettings$system$changeSshSettings) then, + ) = _CopyWithImpl$Mutation$ChangeSshSettings$system$changeSshSettings; + + factory CopyWith$Mutation$ChangeSshSettings$system$changeSshSettings.stub( + TRes res) = + _CopyWithStubImpl$Mutation$ChangeSshSettings$system$changeSshSettings; + + TRes call({ + int? code, + String? message, + bool? success, + String? $__typename, + bool? enable, + bool? passwordAuthentication, + }); +} + +class _CopyWithImpl$Mutation$ChangeSshSettings$system$changeSshSettings + implements + CopyWith$Mutation$ChangeSshSettings$system$changeSshSettings { + _CopyWithImpl$Mutation$ChangeSshSettings$system$changeSshSettings( + this._instance, + this._then, + ); + + final Mutation$ChangeSshSettings$system$changeSshSettings _instance; + + final TRes Function(Mutation$ChangeSshSettings$system$changeSshSettings) + _then; + + static const _undefined = {}; + + TRes call({ + Object? code = _undefined, + Object? message = _undefined, + Object? success = _undefined, + Object? $__typename = _undefined, + Object? enable = _undefined, + Object? passwordAuthentication = _undefined, + }) => + _then(Mutation$ChangeSshSettings$system$changeSshSettings( + code: + code == _undefined || code == null ? _instance.code : (code as int), + message: message == _undefined || message == null + ? _instance.message + : (message as String), + success: success == _undefined || success == null + ? _instance.success + : (success as bool), + $__typename: $__typename == _undefined || $__typename == null + ? _instance.$__typename + : ($__typename as String), + enable: enable == _undefined || enable == null + ? _instance.enable + : (enable as bool), + passwordAuthentication: passwordAuthentication == _undefined || + passwordAuthentication == null + ? _instance.passwordAuthentication + : (passwordAuthentication as bool), + )); +} + +class _CopyWithStubImpl$Mutation$ChangeSshSettings$system$changeSshSettings< + TRes> + implements + CopyWith$Mutation$ChangeSshSettings$system$changeSshSettings { + _CopyWithStubImpl$Mutation$ChangeSshSettings$system$changeSshSettings( + this._res); + + TRes _res; + + call({ + int? code, + String? message, + bool? success, + String? $__typename, + bool? enable, + bool? passwordAuthentication, + }) => + _res; +} diff --git a/lib/logic/api_maps/graphql_maps/server_api/server_api.dart b/lib/logic/api_maps/graphql_maps/server_api/server_api.dart index 31c09a74..e2efb41b 100644 --- a/lib/logic/api_maps/graphql_maps/server_api/server_api.dart +++ b/lib/logic/api_maps/graphql_maps/server_api/server_api.dart @@ -258,6 +258,50 @@ class ServerApi extends GraphQLApiMap } } + Future> setSshSettings( + final SshSettings settings, + ) async { + try { + final GraphQLClient client = await getClient(); + final input = Input$SSHSettingsInput( + enable: settings.enable, + passwordAuthentication: settings.passwordAuthentication, + ); + final variables = Variables$Mutation$ChangeSshSettings( + settings: input, + ); + final mutation = Options$Mutation$ChangeSshSettings( + variables: variables, + ); + final result = await client.mutate$ChangeSshSettings(mutation); + if (result.hasException) { + return GenericResult( + success: false, + message: result.exception.toString(), + data: null, + ); + } + return GenericResult( + success: result.parsedData?.system.changeSshSettings.success ?? false, + message: result.parsedData?.system.changeSshSettings.message, + data: result.parsedData == null + ? null + : SshSettings( + enable: result.parsedData!.system.changeSshSettings.enable, + passwordAuthentication: result.parsedData!.system + .changeSshSettings.passwordAuthentication, + ), + ); + } catch (e) { + print(e); + return GenericResult( + success: false, + message: e.toString(), + data: null, + ); + } + } + Future getSystemSettings() async { QueryResult response; SystemSettings settings = SystemSettings( diff --git a/lib/logic/cubit/server_detailed_info/server_detailed_info_cubit.dart b/lib/logic/cubit/server_detailed_info/server_detailed_info_cubit.dart index a2b53f59..d6e548f8 100644 --- a/lib/logic/cubit/server_detailed_info/server_detailed_info_cubit.dart +++ b/lib/logic/cubit/server_detailed_info/server_detailed_info_cubit.dart @@ -4,6 +4,7 @@ import 'package:selfprivacy/config/get_it_config.dart'; import 'package:selfprivacy/logic/cubit/server_connection_dependent/server_connection_dependent_cubit.dart'; import 'package:selfprivacy/logic/models/auto_upgrade_settings.dart'; import 'package:selfprivacy/logic/models/server_metadata.dart'; +import 'package:selfprivacy/logic/models/ssh_settings.dart'; import 'package:selfprivacy/logic/models/system_settings.dart'; import 'package:selfprivacy/logic/models/timezone_settings.dart'; import 'package:selfprivacy/logic/providers/providers_controller.dart'; @@ -31,6 +32,7 @@ class ServerDetailsCubit metadata: state.metadata, serverTimezone: TimeZoneSettings.fromString(settings.timezone), autoUpgradeSettings: settings.autoUpgradeSettings, + sshSettings: settings.sshSettings, ), ); } diff --git a/lib/logic/cubit/server_detailed_info/server_detailed_info_state.dart b/lib/logic/cubit/server_detailed_info/server_detailed_info_state.dart index 8fb3a6c7..f8589f82 100644 --- a/lib/logic/cubit/server_detailed_info/server_detailed_info_state.dart +++ b/lib/logic/cubit/server_detailed_info/server_detailed_info_state.dart @@ -52,15 +52,18 @@ class Loaded extends ServerDetailsState { required super.metadata, required this.serverTimezone, required this.autoUpgradeSettings, + required this.sshSettings, }); final TimeZoneSettings serverTimezone; final AutoUpgradeSettings autoUpgradeSettings; + final SshSettings sshSettings; @override List get props => [ metadata, serverTimezone, autoUpgradeSettings, + sshSettings, ]; @override @@ -68,11 +71,12 @@ class Loaded extends ServerDetailsState { final List? metadata, final TimeZoneSettings? serverTimezone, final AutoUpgradeSettings? autoUpgradeSettings, - final DateTime? checkTime, + final SshSettings? sshSettings, }) => Loaded( metadata: metadata ?? this.metadata, serverTimezone: serverTimezone ?? this.serverTimezone, autoUpgradeSettings: autoUpgradeSettings ?? this.autoUpgradeSettings, + sshSettings: sshSettings ?? this.sshSettings, ); } diff --git a/lib/logic/get_it/api_connection_repository.dart b/lib/logic/get_it/api_connection_repository.dart index 78968a45..b46c9e81 100644 --- a/lib/logic/get_it/api_connection_repository.dart +++ b/lib/logic/get_it/api_connection_repository.dart @@ -16,6 +16,7 @@ import 'package:selfprivacy/logic/models/json/recovery_token_status.dart'; import 'package:selfprivacy/logic/models/json/server_disk_volume.dart'; import 'package:selfprivacy/logic/models/json/server_job.dart'; import 'package:selfprivacy/logic/models/service.dart'; +import 'package:selfprivacy/logic/models/ssh_settings.dart'; import 'package:selfprivacy/logic/models/system_settings.dart'; /// Repository for all API calls @@ -220,6 +221,24 @@ class ApiConnectionRepository { } } + Future<(bool, String)> setSshSettings( + final bool enable, + final bool passwordAuthentication, + ) async { + final GenericResult result = await api.setSshSettings( + SshSettings( + enable: enable, + passwordAuthentication: passwordAuthentication, + ), + ); + _apiData.settings.invalidate(); + if (result.data != null) { + return (true, result.message ?? 'basis.done'.tr()); + } else { + return (false, result.message ?? 'jobs.generic_error'.tr()); + } + } + void dispose() { _dataStream.close(); _connectionStatusStream.close(); diff --git a/lib/logic/models/job.dart b/lib/logic/models/job.dart index 0cda1407..896da72a 100644 --- a/lib/logic/models/job.dart +++ b/lib/logic/models/job.dart @@ -399,3 +399,47 @@ class ChangeServerTimezoneJob extends ReplaceableJob { id: id, ); } + +class ChangeSshSettingsJob extends ReplaceableJob { + ChangeSshSettingsJob({ + required this.enable, + required this.passwordAuthentication, + super.status, + super.message, + super.id, + }) : super(title: 'jobs.change_ssh_settings'.tr()); + + final bool enable; + final bool passwordAuthentication; + + @override + Future<(bool, String)> execute() async => getIt() + .setSshSettings(enable, passwordAuthentication); + + @override + bool shouldRemoveInsteadOfAdd(final List jobs) { + final currentSettings = + getIt().apiData.settings.data?.sshSettings; + if (currentSettings == null) { + return false; + } + return currentSettings.enable == enable && + currentSettings.passwordAuthentication == passwordAuthentication; + } + + @override + List get props => [...super.props, enable, passwordAuthentication]; + + @override + ChangeSshSettingsJob copyWithNewStatus({ + required final JobStatusEnum status, + final String? message, + }) => + ChangeSshSettingsJob( + enable: enable, + passwordAuthentication: passwordAuthentication, + status: status, + message: message, + id: id, + ); +} diff --git a/lib/ui/pages/server_details/server_settings.dart b/lib/ui/pages/server_details/server_settings.dart index df343ca1..f3a78292 100644 --- a/lib/ui/pages/server_details/server_settings.dart +++ b/lib/ui/pages/server_details/server_settings.dart @@ -10,6 +10,8 @@ class _ServerSettings extends StatefulWidget { class _ServerSettingsState extends State<_ServerSettings> { bool? allowAutoUpgrade; bool? rebootAfterUpgrade; + bool? enableSsh; + bool? allowPasswordAuthentication; @override Widget build(final BuildContext context) { @@ -24,6 +26,12 @@ class _ServerSettingsState extends State<_ServerSettings> { rebootAfterUpgrade = serverDetailsState.autoUpgradeSettings.allowReboot; } + if (enableSsh == null || allowPasswordAuthentication == null) { + enableSsh = serverDetailsState.sshSettings.enable; + allowPasswordAuthentication = + serverDetailsState.sshSettings.passwordAuthentication; + } + return Column( children: [ SwitchListTile( @@ -105,6 +113,71 @@ class _ServerSettingsState extends State<_ServerSettings> { ); }, ), + SwitchListTile( + value: enableSsh ?? true, + onChanged: (final switched) { + context.read().addJob( + ChangeSshSettingsJob( + enable: switched, + passwordAuthentication: + allowPasswordAuthentication ?? false, + ), + ); + setState(() { + enableSsh = switched; + }); + }, + title: Text( + 'server.enable_ssh'.tr(), + style: TextStyle( + fontStyle: enableSsh != serverDetailsState.sshSettings.enable + ? FontStyle.italic + : FontStyle.normal, + ), + ), + subtitle: Text( + 'server.enable_ssh_hint'.tr(), + style: TextStyle( + fontStyle: enableSsh != serverDetailsState.sshSettings.enable + ? FontStyle.italic + : FontStyle.normal, + ), + ), + activeColor: Theme.of(context).colorScheme.primary, + ), + SwitchListTile( + value: allowPasswordAuthentication ?? false, + onChanged: (final switched) { + context.read().addJob( + ChangeSshSettingsJob( + enable: enableSsh ?? true, + passwordAuthentication: switched, + ), + ); + setState(() { + allowPasswordAuthentication = switched; + }); + }, + title: Text( + 'server.allow_password_authentication'.tr(), + style: TextStyle( + fontStyle: allowPasswordAuthentication != + serverDetailsState.sshSettings.passwordAuthentication + ? FontStyle.italic + : FontStyle.normal, + ), + ), + subtitle: Text( + 'server.allow_password_authentication_hint'.tr(), + style: TextStyle( + fontStyle: allowPasswordAuthentication != + serverDetailsState.sshSettings.passwordAuthentication + ? FontStyle.italic + : FontStyle.normal, + ), + ), + activeColor: Theme.of(context).colorScheme.primary, + ), ], ); } diff --git a/lib/ui/pages/server_details/server_settings_screen.dart b/lib/ui/pages/server_details/server_settings_screen.dart index ea98e100..87926db8 100644 --- a/lib/ui/pages/server_details/server_settings_screen.dart +++ b/lib/ui/pages/server_details/server_settings_screen.dart @@ -25,11 +25,11 @@ class ServerSettingsScreen extends StatefulWidget { class _ServerSettingsScreenState extends State { @override Widget build(final BuildContext context) => BrandHeroScreen( - hasFlashButton: true, - heroIcon: Icons.settings_outlined, - heroTitle: 'server.settings'.tr(), - children: const [ - _ServerSettings(), - ], - ); + hasFlashButton: true, + heroIcon: Icons.settings_outlined, + heroTitle: 'server.settings'.tr(), + children: const [ + _ServerSettings(), + ], + ); } diff --git a/lib/ui/pages/users/user_details.dart b/lib/ui/pages/users/user_details.dart index f09aac70..a117af3c 100644 --- a/lib/ui/pages/users/user_details.dart +++ b/lib/ui/pages/users/user_details.dart @@ -169,89 +169,110 @@ class _SshKeysCard extends StatelessWidget { final User user; @override - Widget build(final BuildContext context) => FilledCard( - child: Column( - children: [ - ListTileOnSurfaceVariant( - title: 'ssh.title'.tr(), - ), - const Divider(height: 0), - ListTileOnSurfaceVariant( - title: 'ssh.create'.tr(), - leadingIcon: Icons.add_circle_outline, - onTap: () { - showModalBottomSheet( - context: context, - isScrollControlled: true, - useRootNavigator: true, - builder: (final BuildContext context) => Padding( - padding: MediaQuery.of(context).viewInsets, - child: NewSshKey(user), - ), - ); - }, - ), - Column( - children: user.sshKeys.map((final String key) { - final publicKey = - key.split(' ').length > 1 ? key.split(' ')[1] : key; - final keyType = key.split(' ')[0]; - final keyName = key.split(' ').length > 2 - ? key.split(' ')[2] - : 'ssh.no_key_name'.tr(); - return ListTileOnSurfaceVariant( - title: '$keyName ($keyType)', - disableSubtitleOverflow: true, - // do not overflow text - subtitle: publicKey, - onTap: () { - showDialog( - context: context, - builder: (final BuildContext context) => AlertDialog( - title: Text('ssh.delete'.tr()), - content: SingleChildScrollView( - child: ListBody( - children: [ - Text('ssh.delete_confirm_question'.tr()), - Text('$keyName ($keyType)'), - Text(publicKey), - ], - ), + Widget build(final BuildContext context) { + final serverDetailsState = context.watch().state; + final bool sshDisabled = + serverDetailsState is Loaded && !serverDetailsState.sshSettings.enable; + + return FilledCard( + child: Column( + children: [ + ListTileOnSurfaceVariant( + title: 'ssh.title'.tr(), + ), + const Divider(height: 0), + ListTileOnSurfaceVariant( + title: 'ssh.create'.tr(), + leadingIcon: Icons.add_circle_outline, + onTap: () { + showModalBottomSheet( + context: context, + isScrollControlled: true, + useRootNavigator: true, + builder: (final BuildContext context) => Padding( + padding: MediaQuery.of(context).viewInsets, + child: NewSshKey(user), + ), + ); + }, + ), + Column( + children: user.sshKeys.map((final String key) { + final publicKey = + key.split(' ').length > 1 ? key.split(' ')[1] : key; + final keyType = key.split(' ')[0]; + final keyName = key.split(' ').length > 2 + ? key.split(' ')[2] + : 'ssh.no_key_name'.tr(); + return ListTileOnSurfaceVariant( + title: '$keyName ($keyType)', + disableSubtitleOverflow: true, + // do not overflow text + subtitle: publicKey, + onTap: () { + showDialog( + context: context, + builder: (final BuildContext context) => AlertDialog( + title: Text('ssh.delete'.tr()), + content: SingleChildScrollView( + child: ListBody( + children: [ + Text('ssh.delete_confirm_question'.tr()), + Text('$keyName ($keyType)'), + Text(publicKey), + ], ), - actions: [ - TextButton( - child: Text('basis.cancel'.tr()), - onPressed: () { - Navigator.of(context).pop(); - }, - ), - TextButton( - child: Text( - 'basis.delete'.tr(), - style: TextStyle( - color: Theme.of(context).colorScheme.error, - ), - ), - onPressed: () { - context.read().addJob( - DeleteSSHKeyJob( - user: user, - publicKey: key, - ), - ); - context.popRoute(); - }, - ), - ], ), - ); - }, - ); - }).toList(), + actions: [ + TextButton( + child: Text('basis.cancel'.tr()), + onPressed: () { + Navigator.of(context).pop(); + }, + ), + TextButton( + child: Text( + 'basis.delete'.tr(), + style: TextStyle( + color: Theme.of(context).colorScheme.error, + ), + ), + onPressed: () { + context.read().addJob( + DeleteSSHKeyJob( + user: user, + publicKey: key, + ), + ); + context.popRoute(); + }, + ), + ], + ), + ); + }, + ); + }).toList(), + ), + if (sshDisabled) + Column( + children: [ + const Divider(height: 0), + Padding( + padding: const EdgeInsets.all(8.0), + child: Expanded( + child: InfoBox( + text: 'ssh.ssh_disabled_warning'.tr(), + isWarning: true, + ), + ), + ), + ], ), - ], - ), - ); + ], + ), + ); + } } class NewSshKey extends StatelessWidget { diff --git a/lib/ui/pages/users/users.dart b/lib/ui/pages/users/users.dart index f7edce9e..b08b168e 100644 --- a/lib/ui/pages/users/users.dart +++ b/lib/ui/pages/users/users.dart @@ -9,6 +9,7 @@ import 'package:selfprivacy/logic/cubit/client_jobs/client_jobs_cubit.dart'; import 'package:selfprivacy/logic/cubit/forms/factories/field_cubit_factory.dart'; import 'package:selfprivacy/logic/cubit/forms/user/ssh_form_cubit.dart'; import 'package:selfprivacy/logic/cubit/forms/user/user_form_cubit.dart'; +import 'package:selfprivacy/logic/cubit/server_detailed_info/server_detailed_info_cubit.dart'; import 'package:selfprivacy/logic/cubit/server_installation/server_installation_cubit.dart'; import 'package:selfprivacy/logic/models/hive/user.dart'; import 'package:selfprivacy/logic/models/job.dart'; From 1cb5df19f391186b935cae32eb9d5cc6ce57c877 Mon Sep 17 00:00:00 2001 From: Inex Code Date: Wed, 13 Mar 2024 18:02:13 +0300 Subject: [PATCH 08/75] fix: Title overflow of the provider and service cards titles --- lib/ui/pages/providers/providers.dart | 25 ++++++++++++------------- lib/ui/pages/services/services.dart | 11 +++++++---- 2 files changed, 19 insertions(+), 17 deletions(-) diff --git a/lib/ui/pages/providers/providers.dart b/lib/ui/pages/providers/providers.dart index 554c594b..ec397805 100644 --- a/lib/ui/pages/providers/providers.dart +++ b/lib/ui/pages/providers/providers.dart @@ -1,6 +1,7 @@ import 'package:auto_route/auto_route.dart'; import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; +import 'package:gap/gap.dart'; import 'package:selfprivacy/config/brand_theme.dart'; import 'package:selfprivacy/logic/bloc/backups/backups_bloc.dart'; import 'package:selfprivacy/logic/bloc/volumes/volumes_bloc.dart'; @@ -146,20 +147,18 @@ class _Card extends StatelessWidget { crossAxisAlignment: CrossAxisAlignment.start, children: [ Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, + mainAxisAlignment: MainAxisAlignment.start, children: [ - Row( - children: [ - IconStatusMask( - status: state, - icon: Icon(icon, size: 30, color: Colors.white), - ), - const SizedBox(width: 8), - Text( - title, - style: Theme.of(context).textTheme.headlineMedium, - ), - ], + IconStatusMask( + status: state, + icon: Icon(icon, size: 30, color: Colors.white), + ), + const Gap(8), + Expanded( + child: Text( + title, + style: Theme.of(context).textTheme.headlineMedium, + ), ), if (state != StateType.uninitialized) IconStatusMask( diff --git a/lib/ui/pages/services/services.dart b/lib/ui/pages/services/services.dart index 994e2040..684af19a 100644 --- a/lib/ui/pages/services/services.dart +++ b/lib/ui/pages/services/services.dart @@ -2,6 +2,7 @@ import 'package:auto_route/auto_route.dart'; import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; import 'package:flutter_svg/flutter_svg.dart'; +import 'package:gap/gap.dart'; import 'package:selfprivacy/config/brand_theme.dart'; import 'package:selfprivacy/logic/bloc/services/services_bloc.dart'; import 'package:selfprivacy/logic/cubit/server_installation/server_installation_cubit.dart'; @@ -134,10 +135,12 @@ class _Card extends StatelessWidget { ), ), ), - const SizedBox(width: 8), - Text( - service.displayName, - style: Theme.of(context).textTheme.headlineMedium, + const Gap(8), + Expanded( + child: Text( + service.displayName, + style: Theme.of(context).textTheme.headlineMedium, + ), ), ], ), From e9538a4a84c0ad0e96e79980a8bee99b47f5ef3a Mon Sep 17 00:00:00 2001 From: Inex Code Date: Wed, 13 Mar 2024 18:20:50 +0300 Subject: [PATCH 09/75] feat(ui): Use adaptive widgets where possible --- lib/ui/pages/backups/backup_details.dart | 2 +- lib/ui/pages/backups/change_period_modal.dart | 4 ++-- lib/ui/pages/backups/change_rotation_quotas_modal.dart | 2 +- lib/ui/pages/backups/create_backups_modal.dart | 4 ++-- lib/ui/pages/devices/devices.dart | 4 ++-- lib/ui/pages/devices/new_device.dart | 4 +++- lib/ui/pages/more/app_settings/app_settings.dart | 4 ++-- lib/ui/pages/more/app_settings/developer_settings.dart | 6 +++--- lib/ui/pages/more/console.dart | 2 +- lib/ui/pages/recovery_key/recovery_key.dart | 6 +++--- lib/ui/pages/server_details/charts/chart.dart | 2 +- lib/ui/pages/server_details/server_settings.dart | 8 ++++---- .../binds_migration/services_migration.dart | 2 +- lib/ui/pages/server_storage/extending_volume.dart | 2 +- lib/ui/pages/services/service_page.dart | 2 +- lib/ui/pages/setup/initializing/server_type_picker.dart | 4 ++-- .../pages/setup/recovering/recovery_confirm_server.dart | 2 +- lib/ui/pages/users/users.dart | 2 +- 18 files changed, 32 insertions(+), 30 deletions(-) diff --git a/lib/ui/pages/backups/backup_details.dart b/lib/ui/pages/backups/backup_details.dart index dad45db4..a5650bbb 100644 --- a/lib/ui/pages/backups/backup_details.dart +++ b/lib/ui/pages/backups/backup_details.dart @@ -67,7 +67,7 @@ class BackupDetailsPage extends StatelessWidget { const Center( child: Padding( padding: EdgeInsets.all(16.0), - child: CircularProgressIndicator(), + child: CircularProgressIndicator.adaptive(), ), ), if (!preventActions) diff --git a/lib/ui/pages/backups/change_period_modal.dart b/lib/ui/pages/backups/change_period_modal.dart index d3217b64..80247acb 100644 --- a/lib/ui/pages/backups/change_period_modal.dart +++ b/lib/ui/pages/backups/change_period_modal.dart @@ -53,7 +53,7 @@ class _ChangeAutobackupsPeriodModalState ), const SizedBox(height: 16), // Select all services tile - RadioListTile( + RadioListTile.adaptive( onChanged: (final Duration? value) { setState(() { selectedPeriod = value; @@ -69,7 +69,7 @@ class _ChangeAutobackupsPeriodModalState height: 1.0, ), ...autobackupPeriods.map( - (final Duration period) => RadioListTile( + (final Duration period) => RadioListTile.adaptive( onChanged: (final Duration? value) { setState(() { selectedPeriod = value; diff --git a/lib/ui/pages/backups/change_rotation_quotas_modal.dart b/lib/ui/pages/backups/change_rotation_quotas_modal.dart index 1a7e91bc..19b39151 100644 --- a/lib/ui/pages/backups/change_rotation_quotas_modal.dart +++ b/lib/ui/pages/backups/change_rotation_quotas_modal.dart @@ -232,7 +232,7 @@ class QuotaSelectionTile extends StatelessWidget { children: [ // Discrete slider to select the new value if (value >= -1 && value <= max) - Slider( + Slider.adaptive( value: value == -1 ? max + 1 : value.toDouble(), min: min.toDouble(), max: (max + 1).toDouble(), diff --git a/lib/ui/pages/backups/create_backups_modal.dart b/lib/ui/pages/backups/create_backups_modal.dart index acf6ac6f..f78e1075 100644 --- a/lib/ui/pages/backups/create_backups_modal.dart +++ b/lib/ui/pages/backups/create_backups_modal.dart @@ -71,7 +71,7 @@ class _CreateBackupsModalState extends State { ), const SizedBox(height: 16), // Select all services tile - CheckboxListTile( + CheckboxListTile.adaptive( onChanged: (final bool? value) { setState(() { if (value ?? true) { @@ -103,7 +103,7 @@ class _CreateBackupsModalState extends State { ...widget.services.map( (final Service service) { final bool busy = busyServices.contains(service.id); - return CheckboxListTile( + return CheckboxListTile.adaptive( onChanged: !busy ? (final bool? value) { setState(() { diff --git a/lib/ui/pages/devices/devices.dart b/lib/ui/pages/devices/devices.dart index 4d92cd56..6c2992c8 100644 --- a/lib/ui/pages/devices/devices.dart +++ b/lib/ui/pages/devices/devices.dart @@ -36,7 +36,7 @@ class _DevicesScreenState extends State { if (devicesStatus is DevicesInitial) ...[ const Center( heightFactor: 8, - child: CircularProgressIndicator(), + child: CircularProgressIndicator.adaptive(), ), ], if (devicesStatus is! DevicesInitial) ...[ @@ -94,7 +94,7 @@ class _DevicesInfo extends StatelessWidget { if (devicesStatus is DevicesDeleting) ...[ const Center( heightFactor: 4, - child: CircularProgressIndicator(), + child: CircularProgressIndicator.adaptive(), ), ], if (devicesStatus is! DevicesDeleting) diff --git a/lib/ui/pages/devices/new_device.dart b/lib/ui/pages/devices/new_device.dart index 6f343b22..bbf03728 100644 --- a/lib/ui/pages/devices/new_device.dart +++ b/lib/ui/pages/devices/new_device.dart @@ -27,7 +27,9 @@ class NewDeviceScreen extends StatelessWidget { newDeviceKey: snapshot.data.toString(), ); } else { - return const Center(child: CircularProgressIndicator()); + return const Center( + child: CircularProgressIndicator.adaptive(), + ); } }, ), diff --git a/lib/ui/pages/more/app_settings/app_settings.dart b/lib/ui/pages/more/app_settings/app_settings.dart index 43b4ef32..b41f1a74 100644 --- a/lib/ui/pages/more/app_settings/app_settings.dart +++ b/lib/ui/pages/more/app_settings/app_settings.dart @@ -31,7 +31,7 @@ class _AppSettingsPageState extends State { bodyPadding: const EdgeInsets.symmetric(vertical: 16), heroTitle: 'application_settings.title'.tr(), children: [ - SwitchListTile( + SwitchListTile.adaptive( title: Text('application_settings.system_dark_theme_title'.tr()), subtitle: Text('application_settings.system_dark_theme_description'.tr()), @@ -40,7 +40,7 @@ class _AppSettingsPageState extends State { .read() .updateAutoDarkMode(isAutoDarkModeOn: !isSystemDarkModeOn), ), - SwitchListTile( + SwitchListTile.adaptive( title: Text('application_settings.dark_theme_title'.tr()), subtitle: Text('application_settings.dark_theme_description'.tr()), value: Theme.of(context).brightness == Brightness.dark, diff --git a/lib/ui/pages/more/app_settings/developer_settings.dart b/lib/ui/pages/more/app_settings/developer_settings.dart index 46149e15..751eabb6 100644 --- a/lib/ui/pages/more/app_settings/developer_settings.dart +++ b/lib/ui/pages/more/app_settings/developer_settings.dart @@ -28,7 +28,7 @@ class _DeveloperSettingsPageState extends State { heroSubtitle: 'developer_settings.subtitle'.tr(), children: [ SectionTitle(title: 'developer_settings.server_setup'.tr()), - SwitchListTile( + SwitchListTile.adaptive( title: Text('developer_settings.use_staging_acme'.tr()), subtitle: Text('developer_settings.use_staging_acme_description'.tr()), @@ -37,7 +37,7 @@ class _DeveloperSettingsPageState extends State { () => TlsOptions.stagingAcme = value, ), ), - SwitchListTile( + SwitchListTile.adaptive( title: Text('developer_settings.ignore_tls'.tr()), subtitle: Text('developer_settings.ignore_tls_description'.tr()), value: !TlsOptions.verifyCertificate, @@ -45,7 +45,7 @@ class _DeveloperSettingsPageState extends State { () => TlsOptions.verifyCertificate = !value, ), ), - SwitchListTile( + SwitchListTile.adaptive( title: Text('developer_settings.allow_ssh_key_at_setup'.tr()), subtitle: Text( 'developer_settings.allow_ssh_key_at_setup_description'.tr(), diff --git a/lib/ui/pages/more/console.dart b/lib/ui/pages/more/console.dart index 94c06b4d..0c60cf81 100644 --- a/lib/ui/pages/more/console.dart +++ b/lib/ui/pages/more/console.dart @@ -96,7 +96,7 @@ class _ConsolePageState extends State { children: [ Text('console_page.waiting'.tr()), const Gap(16), - const CircularProgressIndicator(), + const CircularProgressIndicator.adaptive(), ], ); } diff --git a/lib/ui/pages/recovery_key/recovery_key.dart b/lib/ui/pages/recovery_key/recovery_key.dart index b211bad7..d5bd7a15 100644 --- a/lib/ui/pages/recovery_key/recovery_key.dart +++ b/lib/ui/pages/recovery_key/recovery_key.dart @@ -32,7 +32,7 @@ class _RecoveryKeyPageState extends State { case RecoveryKeyRefreshing(): subtitle = 'recovery_key.key_synchronizing'.tr(); widgets = [ - const Center(child: CircularProgressIndicator()), + const Center(child: CircularProgressIndicator.adaptive()), ]; break; case RecoveryKeyLoaded(): @@ -306,7 +306,7 @@ class _RecoveryKeyConfigurationState extends State { return Column( children: [ - SwitchListTile( + SwitchListTile.adaptive( value: _isAmountToggled, title: Text('recovery_key.key_amount_toggle'.tr()), activeColor: Theme.of(context).colorScheme.primary, @@ -346,7 +346,7 @@ class _RecoveryKeyConfigurationState extends State { ), secondChild: Container(), ), - SwitchListTile( + SwitchListTile.adaptive( value: _isExpirationToggled, title: Text('recovery_key.key_duedate_toggle'.tr()), activeColor: Theme.of(context).colorScheme.primary, diff --git a/lib/ui/pages/server_details/charts/chart.dart b/lib/ui/pages/server_details/charts/chart.dart index 76576261..da39c104 100644 --- a/lib/ui/pages/server_details/charts/chart.dart +++ b/lib/ui/pages/server_details/charts/chart.dart @@ -156,7 +156,7 @@ class _GraphLoadingCardContent extends StatelessWidget { @override Widget build(final BuildContext context) => const SizedBox( height: 200, - child: Center(child: CircularProgressIndicator()), + child: Center(child: CircularProgressIndicator.adaptive()), ); } diff --git a/lib/ui/pages/server_details/server_settings.dart b/lib/ui/pages/server_details/server_settings.dart index f3a78292..58715fa6 100644 --- a/lib/ui/pages/server_details/server_settings.dart +++ b/lib/ui/pages/server_details/server_settings.dart @@ -34,7 +34,7 @@ class _ServerSettingsState extends State<_ServerSettings> { return Column( children: [ - SwitchListTile( + SwitchListTile.adaptive( value: allowAutoUpgrade ?? false, onChanged: (final switched) { context.read().addJob( @@ -67,7 +67,7 @@ class _ServerSettingsState extends State<_ServerSettings> { ), activeColor: Theme.of(context).colorScheme.primary, ), - SwitchListTile( + SwitchListTile.adaptive( value: rebootAfterUpgrade ?? false, onChanged: (final switched) { context.read().addJob( @@ -113,7 +113,7 @@ class _ServerSettingsState extends State<_ServerSettings> { ); }, ), - SwitchListTile( + SwitchListTile.adaptive( value: enableSsh ?? true, onChanged: (final switched) { context.read().addJob( @@ -145,7 +145,7 @@ class _ServerSettingsState extends State<_ServerSettings> { ), activeColor: Theme.of(context).colorScheme.primary, ), - SwitchListTile( + SwitchListTile.adaptive( value: allowPasswordAuthentication ?? false, onChanged: (final switched) { context.read().addJob( diff --git a/lib/ui/pages/server_storage/binds_migration/services_migration.dart b/lib/ui/pages/server_storage/binds_migration/services_migration.dart index 695b8de4..cc4d18aa 100644 --- a/lib/ui/pages/server_storage/binds_migration/services_migration.dart +++ b/lib/ui/pages/server_storage/binds_migration/services_migration.dart @@ -147,7 +147,7 @@ class _ServicesMigrationPageState extends State { padding: const EdgeInsets.all(16.0), children: [ if (widget.services.isEmpty) - const Center(child: CircularProgressIndicator()), + const Center(child: CircularProgressIndicator.adaptive()), ...widget.services.map( (final service) => Column( children: [ diff --git a/lib/ui/pages/server_storage/extending_volume.dart b/lib/ui/pages/server_storage/extending_volume.dart index e6961a95..2b222276 100644 --- a/lib/ui/pages/server_storage/extending_volume.dart +++ b/lib/ui/pages/server_storage/extending_volume.dart @@ -71,7 +71,7 @@ class _ExtendingVolumePageState extends State { children: const [ SizedBox(height: 16), Center( - child: CircularProgressIndicator(), + child: CircularProgressIndicator.adaptive(), ), ], ); diff --git a/lib/ui/pages/services/service_page.dart b/lib/ui/pages/services/service_page.dart index c0064eef..6e441c94 100644 --- a/lib/ui/pages/services/service_page.dart +++ b/lib/ui/pages/services/service_page.dart @@ -33,7 +33,7 @@ class _ServicePageState extends State { hasBackButton: true, children: [ Center( - child: CircularProgressIndicator(), + child: CircularProgressIndicator.adaptive(), ), ], ); diff --git a/lib/ui/pages/setup/initializing/server_type_picker.dart b/lib/ui/pages/setup/initializing/server_type_picker.dart index 067746f6..6fb09f4b 100644 --- a/lib/ui/pages/setup/initializing/server_type_picker.dart +++ b/lib/ui/pages/setup/initializing/server_type_picker.dart @@ -141,7 +141,7 @@ class SelectLocationPage extends StatelessWidget { ), ); } else { - return const Center(child: CircularProgressIndicator()); + return const Center(child: CircularProgressIndicator.adaptive()); } }, ); @@ -479,7 +479,7 @@ class SelectTypePage extends StatelessWidget { InfoBox(text: 'initializing.choose_server_type_notice'.tr()), ); } else { - return const Center(child: CircularProgressIndicator()); + return const Center(child: CircularProgressIndicator.adaptive()); } }, ); diff --git a/lib/ui/pages/setup/recovering/recovery_confirm_server.dart b/lib/ui/pages/setup/recovering/recovery_confirm_server.dart index e9c53f94..9e7709bc 100644 --- a/lib/ui/pages/setup/recovering/recovery_confirm_server.dart +++ b/lib/ui/pages/setup/recovering/recovery_confirm_server.dart @@ -76,7 +76,7 @@ class _RecoveryConfirmServerState extends State { ); } else { return const Center( - child: CircularProgressIndicator(), + child: CircularProgressIndicator.adaptive(), ); } }, diff --git a/lib/ui/pages/users/users.dart b/lib/ui/pages/users/users.dart index b08b168e..b7469a6e 100644 --- a/lib/ui/pages/users/users.dart +++ b/lib/ui/pages/users/users.dart @@ -56,7 +56,7 @@ class UsersPage extends StatelessWidget { if (users.isEmpty) { if (state is UsersRefreshing) { return const Center( - child: CircularProgressIndicator(), + child: CircularProgressIndicator.adaptive(), ); } return RefreshIndicator( From f1c5fa7d825e97d63d63a43d853f0ce3ca52bb1c Mon Sep 17 00:00:00 2001 From: Inex Code Date: Wed, 13 Mar 2024 18:32:04 +0300 Subject: [PATCH 10/75] feat(ui): Try out iOS bottom navbar --- .../root_scaffold_with_navigation.dart | 46 +++++++++++++------ 1 file changed, 32 insertions(+), 14 deletions(-) diff --git a/lib/ui/layouts/root_scaffold_with_navigation.dart b/lib/ui/layouts/root_scaffold_with_navigation.dart index 2278bb4e..abbd82d7 100644 --- a/lib/ui/layouts/root_scaffold_with_navigation.dart +++ b/lib/ui/layouts/root_scaffold_with_navigation.dart @@ -1,4 +1,7 @@ +import 'dart:io'; + import 'package:auto_route/auto_route.dart'; +import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:selfprivacy/ui/components/drawers/support_drawer.dart'; import 'package:selfprivacy/ui/components/pre_styled_buttons/flash_fab.dart'; @@ -199,21 +202,36 @@ class _BottomBar extends StatelessWidget { decoration: BoxDecoration( color: Theme.of(context).scaffoldBackgroundColor, ), - child: NavigationBar( - selectedIndex: prevActiveIndex == -1 ? 0 : prevActiveIndex, - labelBehavior: NavigationDestinationLabelBehavior.alwaysShow, - onDestinationSelected: (final index) { - context.router.replaceAll([destinations[index].route]); - }, - destinations: destinations - .map( - (final destination) => NavigationDestination( - icon: Icon(destination.icon), - label: destination.label, - ), + child: Platform.isIOS + ? CupertinoTabBar( + currentIndex: prevActiveIndex == -1 ? 0 : prevActiveIndex, + onTap: (final index) { + context.router.replaceAll([destinations[index].route]); + }, + items: destinations + .map( + (final destination) => BottomNavigationBarItem( + icon: Icon(destination.icon), + label: destination.label, + ), + ) + .toList(), ) - .toList(), - ), + : NavigationBar( + selectedIndex: prevActiveIndex == -1 ? 0 : prevActiveIndex, + labelBehavior: NavigationDestinationLabelBehavior.alwaysShow, + onDestinationSelected: (final index) { + context.router.replaceAll([destinations[index].route]); + }, + destinations: destinations + .map( + (final destination) => NavigationDestination( + icon: Icon(destination.icon), + label: destination.label, + ), + ) + .toList(), + ), ); } } From 4b08b96b384fbc8bce97edf4e04633a81e862723 Mon Sep 17 00:00:00 2001 From: Inex Code Date: Wed, 13 Mar 2024 19:03:44 +0300 Subject: [PATCH 11/75] feat(ui): Text overflow on the storage card --- lib/ui/pages/server_storage/storage_card.dart | 28 ++++++++++--------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/lib/ui/pages/server_storage/storage_card.dart b/lib/ui/pages/server_storage/storage_card.dart index 15ac54fc..ac603d3b 100644 --- a/lib/ui/pages/server_storage/storage_card.dart +++ b/lib/ui/pages/server_storage/storage_card.dart @@ -59,21 +59,23 @@ class StorageCard extends StatelessWidget { mainAxisAlignment: MainAxisAlignment.spaceBetween, crossAxisAlignment: CrossAxisAlignment.start, children: [ - Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text( - 'storage.card_title'.tr(), - style: Theme.of(context).textTheme.titleLarge, - ), - if (state != StateType.uninitialized) + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ Text( - diskStatus.isDiskOkay - ? 'storage.status_ok'.tr() - : 'storage.status_error'.tr(), - style: Theme.of(context).textTheme.bodyLarge, + 'storage.card_title'.tr(), + style: Theme.of(context).textTheme.titleLarge, ), - ], + if (state != StateType.uninitialized) + Text( + diskStatus.isDiskOkay + ? 'storage.status_ok'.tr() + : 'storage.status_error'.tr(), + style: Theme.of(context).textTheme.bodyLarge, + ), + ], + ), ), if (state != StateType.uninitialized) IconStatusMask( From b25e2f2d5f40867d79839ec5c648ded9b674b190 Mon Sep 17 00:00:00 2001 From: Inex Code Date: Wed, 13 Mar 2024 19:22:56 +0300 Subject: [PATCH 12/75] feat(ui): Overflow of the network graph card --- lib/ui/pages/server_details/charts/chart.dart | 46 +++++++++++++------ 1 file changed, 31 insertions(+), 15 deletions(-) diff --git a/lib/ui/pages/server_details/charts/chart.dart b/lib/ui/pages/server_details/charts/chart.dart index da39c104..ffa2e367 100644 --- a/lib/ui/pages/server_details/charts/chart.dart +++ b/lib/ui/pages/server_details/charts/chart.dart @@ -48,23 +48,38 @@ class _Chart extends StatelessWidget { children: [ Row( crossAxisAlignment: CrossAxisAlignment.center, + mainAxisSize: MainAxisSize.max, + mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ - Text( - 'resource_chart.network_title'.tr(), - style: Theme.of(context).textTheme.titleMedium?.copyWith( - color: - Theme.of(context).colorScheme.onSurfaceVariant, + Flexible( + child: Text( + 'resource_chart.network_title'.tr(), + style: + Theme.of(context).textTheme.titleMedium?.copyWith( + color: Theme.of(context) + .colorScheme + .onSurfaceVariant, + ), + ), + ), + Flexible( + fit: FlexFit.loose, + child: Wrap( + spacing: 8.0, + runSpacing: 8.0, + alignment: WrapAlignment.end, + runAlignment: WrapAlignment.end, + children: [ + Legend( + color: Theme.of(context).colorScheme.primary, + text: 'resource_chart.in'.tr(), ), - ), - const Spacer(), - Legend( - color: Theme.of(context).colorScheme.primary, - text: 'resource_chart.in'.tr(), - ), - const SizedBox(width: 5), - Legend( - color: Theme.of(context).colorScheme.tertiary, - text: 'resource_chart.out'.tr(), + Legend( + color: Theme.of(context).colorScheme.tertiary, + text: 'resource_chart.out'.tr(), + ), + ], + ), ), ], ), @@ -172,6 +187,7 @@ class Legend extends StatelessWidget { @override Widget build(final BuildContext context) => Row( mainAxisAlignment: MainAxisAlignment.end, + mainAxisSize: MainAxisSize.min, children: [ _ColoredBox(color: color), const SizedBox(width: 5), From 6e1ed0474b3e4712818d127078462088774645af Mon Sep 17 00:00:00 2001 From: Inex Code Date: Wed, 13 Mar 2024 19:35:25 +0300 Subject: [PATCH 13/75] build(ios): Update ios build things --- ios/Podfile.lock | 44 +++++-------- ios/Runner.xcodeproj/project.pbxproj | 19 +++--- .../xcshareddata/xcschemes/Runner.xcscheme | 2 +- ios/Runner/Info.plist | 8 +-- macos/Podfile | 2 +- macos/Podfile.lock | 66 ++++++++----------- macos/Runner.xcodeproj/project.pbxproj | 17 ++--- .../xcshareddata/xcschemes/Runner.xcscheme | 2 +- 8 files changed, 72 insertions(+), 88 deletions(-) diff --git a/ios/Podfile.lock b/ios/Podfile.lock index ac765d6c..640a910c 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -11,17 +11,15 @@ PODS: - Flutter - package_info (0.0.1): - Flutter - - path_provider_ios (0.0.1): + - path_provider_foundation (0.0.1): - Flutter + - FlutterMacOS - ReachabilitySwift (5.0.0) - - share_plus (0.0.1): - - Flutter - - shared_preferences_ios (0.0.1): + - shared_preferences_foundation (0.0.1): - Flutter + - FlutterMacOS - url_launcher_ios (0.0.1): - Flutter - - wakelock (0.0.1): - - Flutter DEPENDENCIES: - connectivity_plus (from `.symlinks/plugins/connectivity_plus/ios`) @@ -30,11 +28,9 @@ DEPENDENCIES: - flutter_secure_storage (from `.symlinks/plugins/flutter_secure_storage/ios`) - local_auth_ios (from `.symlinks/plugins/local_auth_ios/ios`) - package_info (from `.symlinks/plugins/package_info/ios`) - - path_provider_ios (from `.symlinks/plugins/path_provider_ios/ios`) - - share_plus (from `.symlinks/plugins/share_plus/ios`) - - shared_preferences_ios (from `.symlinks/plugins/shared_preferences_ios/ios`) + - path_provider_foundation (from `.symlinks/plugins/path_provider_foundation/darwin`) + - shared_preferences_foundation (from `.symlinks/plugins/shared_preferences_foundation/darwin`) - url_launcher_ios (from `.symlinks/plugins/url_launcher_ios/ios`) - - wakelock (from `.symlinks/plugins/wakelock/ios`) SPEC REPOS: trunk: @@ -53,31 +49,25 @@ EXTERNAL SOURCES: :path: ".symlinks/plugins/local_auth_ios/ios" package_info: :path: ".symlinks/plugins/package_info/ios" - path_provider_ios: - :path: ".symlinks/plugins/path_provider_ios/ios" - share_plus: - :path: ".symlinks/plugins/share_plus/ios" - shared_preferences_ios: - :path: ".symlinks/plugins/shared_preferences_ios/ios" + path_provider_foundation: + :path: ".symlinks/plugins/path_provider_foundation/darwin" + shared_preferences_foundation: + :path: ".symlinks/plugins/shared_preferences_foundation/darwin" url_launcher_ios: :path: ".symlinks/plugins/url_launcher_ios/ios" - wakelock: - :path: ".symlinks/plugins/wakelock/ios" SPEC CHECKSUMS: - connectivity_plus: 413a8857dd5d9f1c399a39130850d02fe0feaf7e - device_info_plus: e5c5da33f982a436e103237c0c85f9031142abed + connectivity_plus: bf0076dd84a130856aa636df1c71ccaff908fa1d + device_info_plus: c6fb39579d0f423935b0c9ce7ee2f44b71b9fce6 Flutter: f04841e97a9d0b0a8025694d0796dd46242b2854 flutter_secure_storage: 23fc622d89d073675f2eaa109381aefbcf5a49be - local_auth_ios: 0d333dde7780f669e66f19d2ff6005f3ea84008d + local_auth_ios: c6cf091ded637a88f24f86a8875d8b0f526e2605 package_info: 873975fc26034f0b863a300ad47e7f1ac6c7ec62 - path_provider_ios: 14f3d2fd28c4fdb42f44e0f751d12861c43cee02 + path_provider_foundation: 29f094ae23ebbca9d3d0cec13889cd9060c0e943 ReachabilitySwift: 985039c6f7b23a1da463388634119492ff86c825 - share_plus: 056a1e8ac890df3e33cb503afffaf1e9b4fbae68 - shared_preferences_ios: 548a61f8053b9b8a49ac19c1ffbc8b92c50d68ad - url_launcher_ios: 839c58cdb4279282219f5e248c3321761ff3c4de - wakelock: d0fc7c864128eac40eba1617cb5264d9c940b46f + shared_preferences_foundation: 5b919d13b803cadd15ed2dc053125c68730e5126 + url_launcher_ios: bf5ce03e0e2088bad9cc378ea97fa0ed5b49673b PODFILE CHECKSUM: ef19549a9bc3046e7bb7d2fab4d021637c0c58a3 -COCOAPODS: 1.11.3 +COCOAPODS: 1.15.2 diff --git a/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj index ad268014..f134273d 100644 --- a/ios/Runner.xcodeproj/project.pbxproj +++ b/ios/Runner.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 51; + objectVersion = 54; objects = { /* Begin PBXBuildFile section */ @@ -159,7 +159,7 @@ 97C146E61CF9000F007C117D /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 1300; + LastUpgradeCheck = 1430; ORGANIZATIONNAME = ""; TargetAttributes = { 97C146ED1CF9000F007C117D = { @@ -203,10 +203,12 @@ /* Begin PBXShellScriptBuildPhase section */ 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); name = "Thin Binary"; outputPaths = ( @@ -239,6 +241,7 @@ }; 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); @@ -360,14 +363,14 @@ CLANG_ENABLE_MODULES = YES; CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; - DEVELOPMENT_TEAM = 46723VZHWZ; + DEVELOPMENT_TEAM = P2P92N48K5; ENABLE_BITCODE = NO; INFOPLIST_FILE = Runner/Info.plist; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", ); - PRODUCT_BUNDLE_IDENTIFIER = org.selfprivacy.selfprivacy; + PRODUCT_BUNDLE_IDENTIFIER = org.selfprivacy.app; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; SWIFT_VERSION = 5.0; @@ -490,14 +493,14 @@ CLANG_ENABLE_MODULES = YES; CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; - DEVELOPMENT_TEAM = 46723VZHWZ; + DEVELOPMENT_TEAM = P2P92N48K5; ENABLE_BITCODE = NO; INFOPLIST_FILE = Runner/Info.plist; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", ); - PRODUCT_BUNDLE_IDENTIFIER = org.selfprivacy.selfprivacy; + PRODUCT_BUNDLE_IDENTIFIER = org.selfprivacy.app; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; @@ -514,14 +517,14 @@ CLANG_ENABLE_MODULES = YES; CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; - DEVELOPMENT_TEAM = 46723VZHWZ; + DEVELOPMENT_TEAM = P2P92N48K5; ENABLE_BITCODE = NO; INFOPLIST_FILE = Runner/Info.plist; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", ); - PRODUCT_BUNDLE_IDENTIFIER = org.selfprivacy.selfprivacy; + PRODUCT_BUNDLE_IDENTIFIER = org.selfprivacy.app; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; SWIFT_VERSION = 5.0; diff --git a/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme index c87d15a3..a6b826db 100644 --- a/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme +++ b/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -1,6 +1,6 @@ + CADisableMinimumFrameDurationOnPhone + CFBundleDevelopmentRegion $(DEVELOPMENT_LANGUAGE) CFBundleDisplayName @@ -24,6 +26,8 @@ $(FLUTTER_BUILD_NUMBER) LSRequiresIPhoneOS + UIApplicationSupportsIndirectInputEvents + UILaunchStoryboardName LaunchScreen UIMainStoryboardFile @@ -43,9 +47,5 @@ UIViewControllerBasedStatusBarAppearance - CADisableMinimumFrameDurationOnPhone - - UIApplicationSupportsIndirectInputEvents - diff --git a/macos/Podfile b/macos/Podfile index de1123e8..e20d34c6 100644 --- a/macos/Podfile +++ b/macos/Podfile @@ -1,4 +1,4 @@ -platform :osx, '10.13' +platform :osx, '10.14' # CocoaPods analytics sends network stats synchronously affecting flutter build latency. ENV['COCOAPODS_DISABLE_STATS'] = 'true' diff --git a/macos/Podfile.lock b/macos/Podfile.lock index 7bd65a88..7d720b06 100644 --- a/macos/Podfile.lock +++ b/macos/Podfile.lock @@ -1,8 +1,8 @@ PODS: - - connectivity_plus_macos (0.0.1): + - connectivity_plus (0.0.1): - FlutterMacOS - ReachabilitySwift - - device_info_plus_macos (0.0.1): + - device_info_plus (0.0.1): - FlutterMacOS - dynamic_color (0.0.2): - FlutterMacOS @@ -11,40 +11,36 @@ PODS: - FlutterMacOS (1.0.0) - package_info (0.0.1): - FlutterMacOS - - path_provider_macos (0.0.1): + - path_provider_foundation (0.0.1): + - Flutter - FlutterMacOS - ReachabilitySwift (5.0.0) - - share_plus_macos (0.0.1): - - FlutterMacOS - - shared_preferences_macos (0.0.1): + - shared_preferences_foundation (0.0.1): + - Flutter - FlutterMacOS - url_launcher_macos (0.0.1): - FlutterMacOS - - wakelock_macos (0.0.1): - - FlutterMacOS DEPENDENCIES: - - connectivity_plus_macos (from `Flutter/ephemeral/.symlinks/plugins/connectivity_plus_macos/macos`) - - device_info_plus_macos (from `Flutter/ephemeral/.symlinks/plugins/device_info_plus_macos/macos`) + - connectivity_plus (from `Flutter/ephemeral/.symlinks/plugins/connectivity_plus/macos`) + - device_info_plus (from `Flutter/ephemeral/.symlinks/plugins/device_info_plus/macos`) - dynamic_color (from `Flutter/ephemeral/.symlinks/plugins/dynamic_color/macos`) - flutter_secure_storage_macos (from `Flutter/ephemeral/.symlinks/plugins/flutter_secure_storage_macos/macos`) - FlutterMacOS (from `Flutter/ephemeral`) - package_info (from `Flutter/ephemeral/.symlinks/plugins/package_info/macos`) - - path_provider_macos (from `Flutter/ephemeral/.symlinks/plugins/path_provider_macos/macos`) - - share_plus_macos (from `Flutter/ephemeral/.symlinks/plugins/share_plus_macos/macos`) - - shared_preferences_macos (from `Flutter/ephemeral/.symlinks/plugins/shared_preferences_macos/macos`) + - path_provider_foundation (from `Flutter/ephemeral/.symlinks/plugins/path_provider_foundation/darwin`) + - shared_preferences_foundation (from `Flutter/ephemeral/.symlinks/plugins/shared_preferences_foundation/darwin`) - url_launcher_macos (from `Flutter/ephemeral/.symlinks/plugins/url_launcher_macos/macos`) - - wakelock_macos (from `Flutter/ephemeral/.symlinks/plugins/wakelock_macos/macos`) SPEC REPOS: trunk: - ReachabilitySwift EXTERNAL SOURCES: - connectivity_plus_macos: - :path: Flutter/ephemeral/.symlinks/plugins/connectivity_plus_macos/macos - device_info_plus_macos: - :path: Flutter/ephemeral/.symlinks/plugins/device_info_plus_macos/macos + connectivity_plus: + :path: Flutter/ephemeral/.symlinks/plugins/connectivity_plus/macos + device_info_plus: + :path: Flutter/ephemeral/.symlinks/plugins/device_info_plus/macos dynamic_color: :path: Flutter/ephemeral/.symlinks/plugins/dynamic_color/macos flutter_secure_storage_macos: @@ -53,31 +49,25 @@ EXTERNAL SOURCES: :path: Flutter/ephemeral package_info: :path: Flutter/ephemeral/.symlinks/plugins/package_info/macos - path_provider_macos: - :path: Flutter/ephemeral/.symlinks/plugins/path_provider_macos/macos - share_plus_macos: - :path: Flutter/ephemeral/.symlinks/plugins/share_plus_macos/macos - shared_preferences_macos: - :path: Flutter/ephemeral/.symlinks/plugins/shared_preferences_macos/macos + path_provider_foundation: + :path: Flutter/ephemeral/.symlinks/plugins/path_provider_foundation/darwin + shared_preferences_foundation: + :path: Flutter/ephemeral/.symlinks/plugins/shared_preferences_foundation/darwin url_launcher_macos: :path: Flutter/ephemeral/.symlinks/plugins/url_launcher_macos/macos - wakelock_macos: - :path: Flutter/ephemeral/.symlinks/plugins/wakelock_macos/macos SPEC CHECKSUMS: - connectivity_plus_macos: f6e86fd000e971d361e54b5afcadc8c8fa773308 - device_info_plus_macos: 1ad388a1ef433505c4038e7dd9605aadd1e2e9c7 - dynamic_color: 394d6a888650f8534e029b27d2f8bc5c64e44008 - flutter_secure_storage_macos: 75c8cadfdba05ca007c0fa4ea0c16e5cf85e521b - FlutterMacOS: ae6af50a8ea7d6103d888583d46bd8328a7e9811 + connectivity_plus: 18d3c32514c886e046de60e9c13895109866c747 + device_info_plus: 5401765fde0b8d062a2f8eb65510fb17e77cf07f + dynamic_color: 2eaa27267de1ca20d879fbd6e01259773fb1670f + flutter_secure_storage_macos: d56e2d218c1130b262bef8b4a7d64f88d7f9c9ea + FlutterMacOS: 8f6f14fa908a6fb3fba0cd85dbd81ec4b251fb24 package_info: 6eba2fd8d3371dda2d85c8db6fe97488f24b74b2 - path_provider_macos: 3c0c3b4b0d4a76d2bf989a913c2de869c5641a19 + path_provider_foundation: 29f094ae23ebbca9d3d0cec13889cd9060c0e943 ReachabilitySwift: 985039c6f7b23a1da463388634119492ff86c825 - share_plus_macos: 853ee48e7dce06b633998ca0735d482dd671ade4 - shared_preferences_macos: a64dc611287ed6cbe28fd1297898db1336975727 - url_launcher_macos: 597e05b8e514239626bcf4a850fcf9ef5c856ec3 - wakelock_macos: bc3f2a9bd8d2e6c89fee1e1822e7ddac3bd004a9 + shared_preferences_foundation: 5b919d13b803cadd15ed2dc053125c68730e5126 + url_launcher_macos: d2691c7dd33ed713bf3544850a623080ec693d95 -PODFILE CHECKSUM: 69608711ca93a0af5aac7e2f834b34cf2422afce +PODFILE CHECKSUM: b0cc1fdf1eda0fefb5163971bbf18550427d02c4 -COCOAPODS: 1.11.3 +COCOAPODS: 1.15.2 diff --git a/macos/Runner.xcodeproj/project.pbxproj b/macos/Runner.xcodeproj/project.pbxproj index ce134fe4..37e2180a 100644 --- a/macos/Runner.xcodeproj/project.pbxproj +++ b/macos/Runner.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 51; + objectVersion = 54; objects = { /* Begin PBXAggregateTarget section */ @@ -202,7 +202,7 @@ isa = PBXProject; attributes = { LastSwiftUpdateCheck = 0920; - LastUpgradeCheck = 1300; + LastUpgradeCheck = 1430; ORGANIZATIONNAME = ""; TargetAttributes = { 33CC10EC2044A3C60003C045 = { @@ -255,6 +255,7 @@ /* Begin PBXShellScriptBuildPhase section */ 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); @@ -403,7 +404,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.13; + MACOSX_DEPLOYMENT_TARGET = 10.14; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = macosx; SWIFT_COMPILATION_MODE = wholemodule; @@ -428,7 +429,7 @@ "$(inherited)", "@executable_path/../Frameworks", ); - MACOSX_DEPLOYMENT_TARGET = 10.13; + MACOSX_DEPLOYMENT_TARGET = 10.14; MARKETING_VERSION = 0.8.0; PROVISIONING_PROFILE_SPECIFIER = ""; SWIFT_VERSION = 5.0; @@ -487,7 +488,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.13; + MACOSX_DEPLOYMENT_TARGET = 10.14; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = macosx; @@ -534,7 +535,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.13; + MACOSX_DEPLOYMENT_TARGET = 10.14; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = macosx; SWIFT_COMPILATION_MODE = wholemodule; @@ -559,7 +560,7 @@ "$(inherited)", "@executable_path/../Frameworks", ); - MACOSX_DEPLOYMENT_TARGET = 10.13; + MACOSX_DEPLOYMENT_TARGET = 10.14; MARKETING_VERSION = 0.8.0; PROVISIONING_PROFILE_SPECIFIER = ""; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; @@ -584,7 +585,7 @@ "$(inherited)", "@executable_path/../Frameworks", ); - MACOSX_DEPLOYMENT_TARGET = 10.13; + MACOSX_DEPLOYMENT_TARGET = 10.14; MARKETING_VERSION = 0.8.0; PROVISIONING_PROFILE_SPECIFIER = ""; SWIFT_VERSION = 5.0; diff --git a/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme index 523b108f..aa456674 100644 --- a/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme +++ b/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -1,6 +1,6 @@ Date: Mon, 11 Mar 2024 09:00:53 +0400 Subject: [PATCH 14/75] fix: delete old english strings --- assets/translations/en.json | 39 +++---------------------------------- 1 file changed, 3 insertions(+), 36 deletions(-) diff --git a/assets/translations/en.json b/assets/translations/en.json index d78873c9..063b52af 100644 --- a/assets/translations/en.json +++ b/assets/translations/en.json @@ -90,8 +90,6 @@ "create": "Create SSH key", "delete": "Delete SSH key", "delete_confirm_question": "Are you sure you want to delete SSH key?", - "subtitle_with_keys": "{} keys", - "subtitle_without_keys": "No keys", "no_key_name": "Unnamed key", "root_title": "These are superuser keys", "root_subtitle": "Owners of these keys get full access to the server and can do anything on it. Only add your own keys to the server.", @@ -162,7 +160,6 @@ "meet": "Video conference", "social": "Social network", "password": "Password manager", - "vpn": "VPN", "mx": "MX record", "dmarc": "DMARC record", "spf": "SPF record", @@ -180,28 +177,20 @@ "services_subtitle": "Type “A” records required for each service.", "email_title": "Email", "email_subtitle": "Records necessary for secure email exchange.", - "update_list": "Update list", - "domain_validation_failure": "We can't reach your domain!" + "update_list": "Update list" }, "backup": { "card_title": "Backup", "card_subtitle": "Manage your backups", "description": "Will save your day in case of incident: hackers attack, server deletion, etc.", - "reupload_key": "Force reupload key", - "reuploaded_key": "Key reuploaded", "initialize": "Initialize", - "waiting_for_rebuild": "You will be able to create your first backup in a few minutes.", "restore": "Restore from backup", "no_backups": "There are no backups yet", "create_new": "Create a new backup", - "creating": "Creating a new backup: {}%", - "restoring": "Restoring from backup", - "error_pending": "Server returned error, check it below", "restore_alert": "You are about to restore from backup created on {}. All current data will be lost. Are you sure?", "refresh": "Refresh status", "refetch_backups": "Refetch backup list", "refetch_backups_subtitle": "Invalidate cache and refetch data from your storage provider. May cause additional charges.", - "reupload_key_subtitle": "Will instruct the server to initialize backup storage again. Use if something is broken.", "refetching_list": "In a few minutes list will be updated", "select_all": "Backup everything", "create_new_select_heading": "Select what to backup", @@ -215,10 +204,7 @@ "autobackup_period_never": "Automatic backups are disabled", "autobackup_period_every": "Every {period}", "autobackup_period_disable": "Disable automatic backups", - "autobackup_custom": "Custom", - "autobackup_custom_hint": "Enter custom period in minutes", "autobackup_set_period": "Set period", - "autobackup_period_set": "Period set", "backups_encryption_key": "Encryption key", "backups_encryption_key_subtitle": "Keep it in a safe place.", "backups_encryption_key_copy": "Copy the encryption key", @@ -250,7 +236,6 @@ }, "rotation_quotas_title": "Snapshot rotation settings", "set_rotation_quotas": "Set new rotation quotas", - "quotas_set": "New backup rotation quotas set", "quotas_only_applied_to_autobackups": "These settings are only applied to automatic backups. Manual backups won't get deleted.", "quota_titles": { "last": "How many latest backups to keep", @@ -324,7 +309,6 @@ "extending_volume_price_info": "Price includes VAT and is estimated from pricing data provided by your server provider. Server will be rebooted after resizing.", "extending_volume_error": "Couldn't initialize volume extending.", "extending_volume_started": "Volume extending started", - "extending_volume_provider_waiting": "Provider volume resized, waiting 10 seconds…", "extending_volume_server_waiting": "Server volume resized, waiting 20 seconds…", "extending_volume_rebooting": "Rebooting server…", "extending_volume_modal_description": "Upgrade to {} for {} plan per month.", @@ -332,9 +316,7 @@ "price": "Price", "data_migration_title": "Data migration", "data_migration_notice": "During migration all services will be turned off.", - "start_migration_button": "Start migration", - "migration_process": "Migrating…", - "migration_done": "Finish" + "start_migration_button": "Start migration" }, "not_ready_card": { "in_menu": "Server is not set up yet. Please finish setup using setup wizard for further work." @@ -388,10 +370,6 @@ "subtitle": "Private alternative to the Github, that belongs to you, but not a Microsoft.", "login_info": "You will have to create an account on the website. First user will become an admin." }, - "vpn": { - "title": "VPN Server", - "subtitle": "Private VPN server" - }, "users": { "details_title": "User details", "add_new_user": "Add a first user", @@ -403,7 +381,6 @@ "delete_confirm_question": "Are you sure?", "reset_password": "Reset password", "account": "Account", - "send_registration_data": "Share login credentials", "could_not_fetch_users": "Couldn't fetch users list", "could_not_fetch_description": "Please check your internet connection and try again", "refresh_users": "Refresh users list", @@ -416,8 +393,6 @@ "user_already_exists": "User with such username already exists" }, "initializing": { - "server_provider_description": "A place where your data and SelfPrivacy services will reside:", - "dns_provider_description": "A service which lets your IP point towards domain names:", "connect_to_server": "Let's start with a server.", "select_provider": "Pick any provider from the following list, they all support SelfPrivacy", "select_provider_notice": "By 'Relatively small' we mean a machine with 2 cores of CPU and 2 gigabytes of RAM.", @@ -431,7 +406,6 @@ "select_provider_payment_title": "Payment methods", "select_provider_payment_text_hetzner": "Credit cards, SWIFT, SEPA, PayPal", "select_provider_payment_text_do": "Credit cards, Google Pay, PayPal", - "select_provider_payment_text_cloudflare": "Credit cards", "select_provider_email_notice": "E-mail hosting won't be available for new clients. Nevertheless it will be unlocked as soon as you complete your first payment.", "select_provider_site_button": "Visit site", "connect_to_server_provider": "Now log in ", @@ -454,21 +428,16 @@ "choose_server_type_payment_server": "{} for the server", "choose_server_type_payment_storage": "{} for additional storage", "choose_server_type_payment_ip": "{} for the public IPv4 address", - "no_server_types_found": "No available server types found. Make sure your account is accessible and try to change your server location.", "dns_provider_bad_key_error": "API key is invalid", "backblaze_bad_key_error": "Backblaze storage information is invalid", "connect_to_dns": "Connect the DNS provider", - "connect_to_dns_provider_text": "With API token SelfPrivacy will manage all DNS entries", "select_dns": "Now let's select a DNS provider", - "manage_domain_dns": "To manage your domain's DNS", "use_this_domain": "Use this domain?", "use_this_domain_text": "The token you provided gives access to the following domain", "multiple_domains_found": "Multiple domains found", "multiple_domains_found_text": "The token you provided gives access to the following domains. Please select the one you want to use. For the security of your other domains, you should restrict this token's access to only the domain you want to use with SelfPrivacy.", - "connect_backblaze_storage": "Connect Backblaze storage", "no_connected_domains": "No connected domains at the moment", "loading_domain_list": "Loading domain list", - "found_more_domains": "Found more than one domain. For your own security, please be asked to delete unnecessary domains", "save_domain": "Save domain", "final": "Final step", "create_server": "Create server", @@ -482,7 +451,6 @@ "one_more_restart": "One more restart to apply your security certificates.", "create_master_account": "Create master account", "enter_username_and_password": "Enter username and strong password", - "finish": "Everything is initialized", "checks": "Checks have been completed \n{} out of {}", "steps": { "hosting": "Hosting", @@ -597,7 +565,6 @@ "purge_all_keys_confirm": "Yes, purge all my tokens", "delete_server_volume": "Delete the server and volume?", "reboot": "Reboot", - "you_cant_use_this_api": "You cannot use this API for domains with such TLD.", "yes": "Yes", "no": "No" }, @@ -664,4 +631,4 @@ "reset_onboarding_description": "Reset onboarding switch to show onboarding screen again", "cubit_statuses": "Cubit loading statuses" } -} +} \ No newline at end of file From b0528aba81a6043ad9a1f4d367eac447624e5742 Mon Sep 17 00:00:00 2001 From: Inex Code Date: Thu, 14 Mar 2024 18:59:12 +0300 Subject: [PATCH 15/75] fix: english strings --- assets/translations/en.json | 31 ++++-------------------- lib/logic/bloc/volumes/volumes_bloc.dart | 2 +- 2 files changed, 6 insertions(+), 27 deletions(-) diff --git a/assets/translations/en.json b/assets/translations/en.json index 063b52af..40b1a85a 100644 --- a/assets/translations/en.json +++ b/assets/translations/en.json @@ -152,19 +152,6 @@ "other": "{} cores" } }, - "record": { - "root": "Root domain", - "api": "SelfPrivacy API", - "cloud": "File cloud", - "git": "Git server", - "meet": "Video conference", - "social": "Social network", - "password": "Password manager", - "mx": "MX record", - "dmarc": "DMARC record", - "spf": "SPF record", - "dkim": "DKIM key" - }, "domain": { "card_title": "Domain", "screen_title": "Domain and DNS", @@ -183,6 +170,9 @@ "card_title": "Backup", "card_subtitle": "Manage your backups", "description": "Will save your day in case of incident: hackers attack, server deletion, etc.", + "reupload_key": "Force reupload key", + "reuploaded_key": "Key reuploaded", + "reupload_key_subtitle": "Will instruct the server to initialize backup storage again. Use if something is broken.", "initialize": "Initialize", "restore": "Restore from backup", "no_backups": "There are no backups yet", @@ -309,6 +299,7 @@ "extending_volume_price_info": "Price includes VAT and is estimated from pricing data provided by your server provider. Server will be rebooted after resizing.", "extending_volume_error": "Couldn't initialize volume extending.", "extending_volume_started": "Volume extending started", + "extending_volume_provider_waiting": "Provider volume resized, waiting 10 seconds…", "extending_volume_server_waiting": "Server volume resized, waiting 20 seconds…", "extending_volume_rebooting": "Rebooting server…", "extending_volume_modal_description": "Upgrade to {} for {} plan per month.", @@ -341,33 +332,21 @@ } }, "mail": { - "title": "E-Mail", - "subtitle": "E-Mail for company and family.", "login_info": "Use username and password from users tab. IMAP port is 143 with STARTTLS, SMTP port is 587 with STARTTLS." }, "password_manager": { - "title": "Password Manager", - "subtitle": "Base of your security. Bitwarden will help you to create, store and move passwords between devices, as well as input them, when requested using autocompletion.", "login_info": "You will have to create an account on the website." }, "video": { - "title": "Videomeet", - "subtitle": "Zoom and Google Meet are good, but Jitsi Meet is a worth alternative that also gives you confidence that you're not being listened.", "login_info": "No account needed." }, "cloud": { - "title": "Cloud Storage", - "subtitle": "Do not allow cloud services to read your data by using NextCloud.", "login_info": "Login is admin, password is the same as with your main user. Create new accounts in Nextcloud interface." }, "social_network": { - "title": "Social Network", - "subtitle": "It's hard to believe, but it became possible to create your own social network, with your own rules and target audience.", "login_info": "You will have to create an account on the website." }, "git": { - "title": "Git Server", - "subtitle": "Private alternative to the Github, that belongs to you, but not a Microsoft.", "login_info": "You will have to create an account on the website. First user will become an admin." }, "users": { @@ -631,4 +610,4 @@ "reset_onboarding_description": "Reset onboarding switch to show onboarding screen again", "cubit_statuses": "Cubit loading statuses" } -} \ No newline at end of file +} diff --git a/lib/logic/bloc/volumes/volumes_bloc.dart b/lib/logic/bloc/volumes/volumes_bloc.dart index 55fb15e7..95e753a9 100644 --- a/lib/logic/bloc/volumes/volumes_bloc.dart +++ b/lib/logic/bloc/volumes/volumes_bloc.dart @@ -218,7 +218,7 @@ class VolumesBloc extends Bloc { } getIt().showSnackBar( - 'storage.extending_volume_waiting'.tr(), + 'storage.extending_volume_provider_waiting'.tr(), ); await Future.delayed(const Duration(seconds: 10)); From 8f3078931d6b0b20978b0295726f9815acc37698 Mon Sep 17 00:00:00 2001 From: Yaron Date: Mon, 12 Feb 2024 13:36:34 +0000 Subject: [PATCH 16/75] Translated using Weblate (Hebrew) Currently translated at 100.0% (539 of 539 strings) Translation: SelfPrivacy/SelfPrivacy App Translate-URL: http://weblate.selfprivacy.org/projects/selfprivacy/selfprivacy-app/he/ --- assets/translations/he.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/assets/translations/he.json b/assets/translations/he.json index 90e4b419..7b7d971e 100644 --- a/assets/translations/he.json +++ b/assets/translations/he.json @@ -77,7 +77,8 @@ "services_title": "שירותים", "services_subtitle": "רשומות מסוג „A” נחוצות לכל אחד מהשירותים.", "email_title": "דוא״ל", - "update_list": "עדכון הרשימה" + "update_list": "עדכון הרשימה", + "domain_validation_failure": "לא הצלחנו להגיע לשם התחום שלך!" }, "console_page": { "title": "מסוף", From eeb93d6523c38d9c8bddc53ea816394c693f83a4 Mon Sep 17 00:00:00 2001 From: Dmitri Date: Sat, 17 Feb 2024 11:30:00 +0000 Subject: [PATCH 17/75] Translated using Weblate (Estonian) Currently translated at 50.2% (271 of 539 strings) Translation: SelfPrivacy/SelfPrivacy App Translate-URL: http://weblate.selfprivacy.org/projects/selfprivacy/selfprivacy-app/et/ --- assets/translations/et.json | 316 +++++++++++++++++++++++++++++++++++- 1 file changed, 315 insertions(+), 1 deletion(-) diff --git a/assets/translations/et.json b/assets/translations/et.json index 0967ef42..3692bc19 100644 --- a/assets/translations/et.json +++ b/assets/translations/et.json @@ -1 +1,315 @@ -{} +{ + "application_settings": { + "system_dark_theme_description": "Kasutage valgus- või tumeteemat sõltuvalt süsteemi seadetest", + "delete_server_description": "See eemaldab teie serveri. Seda ei saa enam juurde pääseda.", + "title": "Rakenduse seaded", + "system_dark_theme_title": "Süsteemi vaiketeema", + "dark_theme_title": "Tume teema", + "dark_theme_description": "Vaheta oma rakenduse teemat", + "dangerous_settings": "Ohtlikud seaded", + "reset_config_title": "Lähtesta rakenduse konfiguratsioon", + "reset_config_description": "Lähtestab API võtmed ja juurkasutaja.", + "delete_server_title": "Kustuta server" + }, + "server": { + "reboot_after_upgrade": "Taaskäivita pärast värskendust", + "card_title": "Server", + "description": "Kõik teie teenused elavad siin", + "general_information": "Üldine teave", + "resource_usage": "Ressursside kasutamine", + "allow_autoupgrade": "Luba automaatsed värskendused", + "allow_autoupgrade_hint": "Luba automaatsed pakettide värskendused serveris", + "reboot_after_upgrade_hint": "Taaskäivitage ilma hoiatuseta pärast muudatuste rakendamist serveris", + "server_timezone": "Serveri ajavöönd", + "select_timezone": "Valige ajavöönd", + "timezone_search_bar": "Ajavööndi nimi või ajavahemiku väärtus", + "server_id": "Serveri ID", + "status": "Staatus", + "cpu": "CPU", + "ram": "Mälu", + "disk": "Kohalik ketas", + "monthly_cost": "Kuukulu", + "location": "Asukoht", + "pricing_error": "Teenusepakkuja hindu ei õnnestunud tuua", + "server_provider": "Serveri Teenusepakkuja", + "dns_provider": "DNS Teenusepakkuja", + "core_count": { + "one": "{} tuum", + "two": "{} tuumi", + "few": "{} tuumi", + "many": "{} südamikud", + "other": "{} südamikud" + } + }, + "ssh": { + "root_subtitle": "Nende võtmete omanikud saavad serverisse täieliku juurdepääsu ja saavad sellega teha mida iganes. Lisage serverisse ainult omaenda võtmed.", + "title": "SSH võtmed", + "create": "Loo SSH võti", + "delete": "Kustuta SSH võti", + "delete_confirm_question": "Kas olete kindel, et soovite SSH võtme kustutada?", + "subtitle_with_keys": "{} võtmed", + "subtitle_without_keys": "Võtmeid pole", + "no_key_name": "Nimetu võti", + "root_title": "Need on superkasutaja võtmed", + "input_label": "Avalik ED25519, ECDSA või RSA võti" + }, + "onboarding": { + "page2_dns_provider_text": "Teil on vaja domeeni, et olla Internetis olemas. Ja teil on vaja ka usaldusväärset DNS-teenuse pakkujat, et domeen suunataks teie serverisse. Me soovitame teil valida toetatud DNS-teenuse pakkuja, et võrguühenduse automaatselt seadistada.", + "page1_title": "Digitaalne sõltumatus, saadaval kõigile meist", + "page1_text": "Meil, VPN, Messenger, sotsiaalvõrgustik ja palju muud teie privaatsel serveril, teie kontrolli all.", + "page2_title": "SelfPrivacy ei ole pilv, see on Teie isiklik andmekeskus", + "page2_text": "SelfPrivacy töötab ainult valitud teenusepakkujatega. Kui teil pole neis vajalikke kontosid, aitame teil neid luua.", + "page2_server_provider_title": "Serveri pakkuja", + "page2_server_provider_text": "Serveri pakkuja haldab teie serverit oma andmekeskuses. SelfPrivacy ühendub automaatselt pakkuja juurde ja seadistab kõik vajaliku.", + "page2_dns_provider_title": "DNS pakkuja", + "page2_backup_provider_title": "Varundamisteenuse pakkuja", + "page2_backup_provider_text": "Mis juhtub, kui midagi juhtub teie serveriga? Kujutage ette häkkerirünnakut, juhuslikku andmete kustutamist või teenuse keeldumist? Teie andmed hoitakse turvaliselt teie varundusteenuse pakkuja juures. Need on turvaliselt krüpteeritud ja igal ajal ligipääsetavad teie serveri taastamiseks." + }, + "test": "ee-katse", + "locale": "ee", + "basis": { + "providers": "Pakkujad", + "providers_title": "Teie andmehoidla", + "select": "Valige", + "services": "Teenused", + "services_title": "Teie isiklikud, privaatsed ja sõltumatud teenused.", + "users": "Kasutajad", + "more": "Rohkem", + "next": "Järgmine", + "got_it": "Sain aru", + "settings": "Seaded", + "password": "Parool", + "create": "Lisa uus", + "confirmation": "Kinnitus", + "cancel": "Tühista", + "delete": "Kustuta", + "close": "Sulge", + "connect": "Ühendama", + "domain": "Domeen", + "saving": "Salvestamine…", + "username": "Kasutajanimi", + "loading": "Laadimine…", + "app_name": "SelfPrivacy", + "later": "Jätka seadistamist hiljem", + "connect_to_existing": "Mul on juba SelfPrivacy server!", + "reset": "Lähtesta", + "details": "Detailid", + "no_data": "Andmed puuduvad", + "wait": "Oota", + "remove": "Eemalda", + "apply": "Rakenda", + "done": "Tehtud", + "continue": "Jätka", + "alert": "Häire", + "copied_to_clipboard": "Kopeeritud lõikelauale!", + "please_connect": "Palun ühendage oma server, domeen ja DNS-teenuse pakkuja, et alustada!" + }, + "more_page": { + "configuration_wizard": "Seadistusviisard", + "about_project": "Meist", + "about_application": "Teave", + "onboarding": "Sissejuhatus", + "create_ssh_key": "Superkasutaja SSH võtmed", + "console": "Konsool", + "application_settings": "Rakenduse seaded" + }, + "console_page": { + "title": "Konsool", + "waiting": "Ootab initsialiseerimist…", + "copy": "Kopeeri" + }, + "about_us_page": { + "title": "Meist" + }, + "about_application_page": { + "title": "Teave", + "application_version_text": "Rakenduse versioon {}", + "api_version_text": "Serveri API versioon {}", + "privacy_policy": "Privaatsuspoliitika" + }, + "resource_chart": { + "month": "Kuu", + "day": "Päev", + "hour": "Tund", + "cpu_title": "CPU kasutus", + "network_title": "Võrgu kasutus", + "in": "Sisse", + "out": "Välja" + }, + "record": { + "root": "Juurdomeen", + "api": "SelfPrivacy API", + "cloud": "Failipilv", + "git": "Git server", + "meet": "Videokonverents", + "social": "Sotsiaalne võrgustik", + "password": "Paroolihaldur", + "vpn": "VPN", + "mx": "MX kirje", + "dmarc": "DMARC kirje", + "spf": "SPF kirje", + "dkim": "DKIM võti" + }, + "domain": { + "card_title": "Domeen", + "screen_title": "Domeen ja DNS", + "ok": "Kirjed on korras", + "error": "Probleemid leitud", + "error_subtitle": "Puudutage siia nende parandamiseks. See eemaldab ka kohandatud kirjed.", + "refreshing": "Värskendatakse staatust…", + "uninitialized": "Andmeid pole veel kätte saadud", + "services_title": "Teenused", + "services_subtitle": "Iga teenuse jaoks on vajalikud \"A\" kirjed.", + "email_title": "E-post", + "email_subtitle": "Kirjed turvaliseks e-kirja vahetamiseks vajalikud.", + "update_list": "Värskenda nimekirja", + "domain_validation_failure": "Me ei saa teie domeenile juurde!" + }, + "backup": { + "quota_subtitles": { + "last": { + "zero": "Reegel on keelatud", + "one": "Viimane {} varundus säilitatakse sõltumata selle vanusest", + "two": "Viimased {} varukoopiad säilitatakse sõltumata nende vanusest", + "few": "Viimased {} varundused säilitatakse sõltumata nende vanusest", + "many": "Viimased {} varundused säilitatakse sõltumata nende vanusest", + "other": "Viimased {} varundused säilitatakse sõltumata nende vanusest" + }, + "no_effect": "See reegel ei oma mõju, kuna teine reegel säilitab rohkem varukoopiaid", + "last_infinite": "Kõik varukoopiad säilitatakse", + "daily": { + "zero": "Reegel on keelatud", + "one": "Viimane {} päevane varundus säilitatakse", + "two": "Viimased {} päevased varundused säilitatakse", + "few": "Viimased {} igapäevased varukoopiad säilitatakse", + "many": "Säilitatakse viimased {} päevased varukoopiad", + "other": "Viimased {} igapäevased varundused säilitatakse" + }, + "daily_infinite": "Kõik igapäevased varundused säilitatakse", + "weekly": { + "zero": "Reegel on keelatud", + "one": "Viimane {} nädalane varundus säilitatakse", + "two": "Viimased {} nädalased varundused säilitatakse", + "few": "Viimased {} nädalased varukoopiad säilitatakse", + "many": "Viimased {} nädalased varundused säilitatakse", + "other": "Viimased {} nädalased varukoopiad säilitatakse" + }, + "weekly_infinite": "Kõik nädalased varundused säilitatakse", + "monthly": { + "zero": "Reegel on keelatud", + "one": "Viimane {} kuine varukoopia säilitatakse", + "two": "Viimased {} kuise varukoopiad säilitatakse" + } + }, + "card_title": "Varundus", + "card_subtitle": "Halda oma varukoopiad", + "description": "Päästab teie päeva juhul, kui juhtub intsident: häkkerirünnak, serveri kustutamine jne.", + "reupload_key": "Võtme sunnitud lähtestamine", + "reuploaded_key": "Võti laaditi uuesti", + "initialize": "Initsialiseerimine", + "waiting_for_rebuild": "Mõne minuti pärast saate luua oma esimese varukoopia.", + "restore": "Taasta varukoopiast", + "no_backups": "Varukoopiaid pole veel olemas", + "create_new": "Loo uus varukoopia", + "creating": "Uue varukoopia loomine: {}%", + "restoring": "Taastamine varukoopiast", + "error_pending": "Server tagastas vea, kontrollige seda allpool", + "restore_alert": "Olete valmis taastama varukoopiast, mis loodi {} . Kõik praegused andmed lähevad kaotsi. Kas olete kindel?", + "refresh": "Värskenda olekut", + "refetch_backups": "Uuenda varukoopiate loendit", + "refetch_backups_subtitle": "Tühistage vahemälu ja uuendage andmed oma salvestusettevõtjast. Võib põhjustada lisatasusid.", + "reupload_key_subtitle": "Juhtige serverit varundusmälu uuesti alglaadima. Kasutage, kui midagi on katki.", + "refetching_list": "Mõne minuti pärast loendit värskendatakse", + "select_all": "Varunda kõik", + "create_new_select_heading": "Valige, mida varundada", + "start": "Alusta varundust", + "service_busy": "Teine varundamistoiming on käimas", + "latest_snapshots": "Viimased hetktõmmised", + "latest_snapshots_subtitle": "Näitab viimased 15 hetktõmmist", + "show_more": "Näita rohkem", + "autobackup_period_title": "Automaatsete varukoopiate periood", + "autobackup_period_subtitle": "Varukoopiaid luuakse iga {period}", + "autobackup_period_never": "Automaatne varundamine on keelatud", + "autobackup_period_every": "iga {periood}", + "autobackup_period_disable": "Keela automaatne varundamine", + "autobackup_custom": "Kohandatud", + "autobackup_custom_hint": "Sisestage kohandatud periood minutites", + "autobackup_set_period": "Määra periood", + "autobackup_period_set": "Määratud periood", + "backups_encryption_key": "Krüpteerimisvõti", + "backups_encryption_key_subtitle": "Hoidke seda kindlas kohas.", + "backups_encryption_key_copy": "Kopeerige krüpteerimisvõti", + "backups_encryption_key_show": "Näita krüpteerimisvõtit", + "backups_encryption_key_description": "Seda võtit kasutatakse teie varukoopiate krüptimiseks. Kui kaotate selle, ei saa te varukoopiaid taastada. Hoidke seda kindlas kohas, sest see on kasulik, kui peate kunagi varukoopiatest käsitsi taastama.", + "backups_encryption_key_not_found": "Krüpteerimisvõtit ei leitud veel, proovige hiljem uuesti.", + "pending_jobs": "Praegu töötavad varundustööd", + "snapshots_title": "Hetkekujutis nimekiri", + "forget_snapshot": "Unustage hetkeseade", + "forget_snapshot_alert": "Te kavatsete selle hetkefoto kustutada. Kas olete kindel? Seda tegevust ei saa tavaliselt tagasi võtta.", + "forget_snapshot_error": "Snapshot'i unustamine ei õnnestunud", + "quota_titles": { + "daily": "Kui palju päevaseid varukoopiaid säilitada", + "weekly": "Kui palju nädalaseid varukoopiaid säilitada", + "monthly": "Kui palju kuiseid varukoopiaid säilitada", + "yearly": "Kui palju aastaseid varukoopiaid säilitada" + } + }, + "initializing": { + "connect_to_server_provider_text": "API võtme abil saab SelfPrivacy rentida masina ja seadistada sellele oma serveri", + "how": "Kuidas saada API võtit", + "connect_to_dns_provider_text": "API võtmega SelfPrivacy haldab kõiki DNS kirjeid", + "select_dns": "Nüüd valime DNS teenusepakkuja", + "manage_domain_dns": "Oma domeeni DNS haldamiseks", + "use_this_domain": "Kasutada seda domeeni?", + "use_this_domain_text": "Esitatud võti annab juurdepääsu järgnevale domeenile", + "select_provider_countries_title": "Saadaval olevad riigid", + "select_provider_countries_text_hetzner": "Saksamaa, Soome, Ameerika Ühendriigid", + "select_provider_countries_text_do": "Ameerika Ühendriigid, Holland, Singapur, Suurbritannia, Saksamaa, Kanada, India, Austraalia", + "select_provider_price_title": "Keskm hind", + "select_provider_price_free": "Tasuta", + "select_provider_price_text_hetzner": "€8 kuus suhteliselt väikese serveri ja 50 GB ketasruumi eest", + "select_provider_price_text_do": "$17 kuus suhteliselt väikese serveri ja 50 GB ketasruumi eest", + "select_provider_payment_title": "Maksemeetodid", + "select_provider_payment_text_hetzner": "Krediitkaardid, SWIFT, SEPA, PayPal", + "select_provider_payment_text_do": "Krediitkaardid, Google Pay, PayPal", + "select_provider_payment_text_cloudflare": "Krediitkaardid", + "select_provider_email_notice": "E-posti majutust uutele klientidele ei pakuta. Siiski saab selle lukust avada niipea, kui teete oma esimese makse.", + "select_provider_site_button": "Külasta saiti", + "connect_to_server_provider": "Logi sisse ", + "provider_bad_key_error": "Pakkuja API võti on kehtetu", + "could_not_connect": "Ühendust pakkuja juurde ei saanud.", + "choose_location_type": "Kust soovite tellida oma serveri?", + "choose_location_type_text": "Erinevad asukohad pakuvad erinevaid serverikonfiguratsioone, hindu ja ühenduse kiirust.", + "locations_not_found": "Oih!", + "locations_not_found_text": "Rentida pole saadaval ühtegi serverit", + "back_to_locations": "Valige midagi muud", + "no_locations_found": "Saadaolevaid asukohti ei leitud, veenduge, et teie konto oleks ligipääsetav", + "choose_server_type": "Millist tüüpi serverit te vajate?", + "choose_server_type_text": "Erinevad ressursside võimalused toetavad erinevaid teenuseid. Ärge muretsege, saate oma serverit igal ajal laiendada", + "choose_server_type_notice": "Olulised asjad, mida vaadata, on CPU ja RAM. Teie teenuste andmed salvestatakse kinnitatud mahule, mida saab hõlpsasti laiendada ja eraldi tasuda.", + "choose_server_type_ram": "{} GB ja RAM", + "choose_server_type_storage": "{} GB süsteemi salvestusruumi", + "choose_server_type_payment_per_month": "{} kuus", + "choose_server_type_payment_server": "{} serveri eest", + "choose_server_type_payment_storage": "{} lisasalvestuse eest", + "choose_server_type_payment_ip": "{} avaliku IPv4 aadressi eest", + "no_server_types_found": "Serveritüüpe ei leitud. Veenduge, et teie konto oleks ligipääsetav, ja proovige muuta oma serveri asukohta.", + "dns_provider_bad_key_error": "API võti on kehtetu", + "backblaze_bad_key_error": "Backblaze'i salvestusinfo on kehtetu", + "connect_to_dns": "Ühendage DNS teenusepakkuja", + "multiple_domains_found": "Leiti mitu domeeni", + "multiple_domains_found_text": "Esitatud võti annab juurdepääsu järgmistele domeenidele. Palun valige see, mida soovite kasutada. Teiste domeenide turvalisuse tagamiseks peaksite piirama selle võtme juurdepääsu ainult domeeniga, mida soovite kasutada koos SelfPrivacy.", + "connect_backblaze_storage": "Ühendage Backblaze salvestusruum", + "no_connected_domains": "Praegu pole ühtegi ühendatud domeeni", + "loading_domain_list": "Laadib domeenide loendit", + "found_more_domains": "Leiti rohkem kui üks domeen. Teie enda turvalisuse tagamiseks palume kustutada mittevajalikud domeenid", + "save_domain": "Salvesta domeen", + "final": "Viimane samm", + "create_server": "Looge server", + "what": "Mida see tähendab?", + "server_started": "Server on käivitatud. Nüüd toimub selle kontroll ja taaskäivitamine…", + "server_created": "Server on loodud. DNS kontroll ja serveri käivitamine on pooleli…", + "domain_critical_error": "Me ei saa sellele domeenile ühendust! Puudutage lisateabe lugemiseks…", + "server_rebooted": "Server taaskäivitati. Ootame viimast kontrolli…" + } +} From 55b9ca652f91ba927210077c80cd96d3585d7a5f Mon Sep 17 00:00:00 2001 From: Dmitri B Date: Sun, 18 Feb 2024 06:43:24 +0000 Subject: [PATCH 18/75] Translated using Weblate (Estonian) Currently translated at 100.0% (539 of 539 strings) Translation: SelfPrivacy/SelfPrivacy App Translate-URL: http://weblate.selfprivacy.org/projects/selfprivacy/selfprivacy-app/et/ --- assets/translations/et.json | 342 ++++++++++++++++++++++++++++++++++-- 1 file changed, 332 insertions(+), 10 deletions(-) diff --git a/assets/translations/et.json b/assets/translations/et.json index 3692bc19..0d0e590f 100644 --- a/assets/translations/et.json +++ b/assets/translations/et.json @@ -37,8 +37,8 @@ "one": "{} tuum", "two": "{} tuumi", "few": "{} tuumi", - "many": "{} südamikud", - "other": "{} südamikud" + "many": "{} tuumi", + "other": "{} tuumi" } }, "ssh": { @@ -54,7 +54,7 @@ "input_label": "Avalik ED25519, ECDSA või RSA võti" }, "onboarding": { - "page2_dns_provider_text": "Teil on vaja domeeni, et olla Internetis olemas. Ja teil on vaja ka usaldusväärset DNS-teenuse pakkujat, et domeen suunataks teie serverisse. Me soovitame teil valida toetatud DNS-teenuse pakkuja, et võrguühenduse automaatselt seadistada.", + "page2_dns_provider_text": "Teil on vaja domeeni, et olla Internetis olemas. Ja teil on vaja ka usaldusväärset DNS teenuse pakkujat, et domeen suunataks teie serverisse. Me soovitame teil valida toetatud DNS teenuse pakkuja, et võrguühenduse automaatselt seadistada.", "page1_title": "Digitaalne sõltumatus, saadaval kõigile meist", "page1_text": "Meil, VPN, Messenger, sotsiaalvõrgustik ja palju muud teie privaatsel serveril, teie kontrolli all.", "page2_title": "SelfPrivacy ei ole pilv, see on Teie isiklik andmekeskus", @@ -102,7 +102,7 @@ "continue": "Jätka", "alert": "Häire", "copied_to_clipboard": "Kopeeritud lõikelauale!", - "please_connect": "Palun ühendage oma server, domeen ja DNS-teenuse pakkuja, et alustada!" + "please_connect": "Palun ühendage oma server, domeen ja DNS teenuse pakkuja, et alustada!" }, "more_page": { "configuration_wizard": "Seadistusviisard", @@ -143,7 +143,7 @@ "git": "Git server", "meet": "Videokonverents", "social": "Sotsiaalne võrgustik", - "password": "Paroolihaldur", + "password": "Paroolide haldur", "vpn": "VPN", "mx": "MX kirje", "dmarc": "DMARC kirje", @@ -198,8 +198,21 @@ "monthly": { "zero": "Reegel on keelatud", "one": "Viimane {} kuine varukoopia säilitatakse", - "two": "Viimased {} kuise varukoopiad säilitatakse" - } + "two": "Viimased {} kuise varukoopiad säilitatakse", + "few": "Säilitatakse viimased {} igakuist varukoopiat", + "many": "Säilitatakse viimased {} igakuist varukoopiat", + "other": "Säilitatakse viimased {} igakuist varukoopiat" + }, + "monthly_infinite": "Kõik igakuised varukoopiad säilitatakse", + "yearly": { + "many": "Säilitatakse viimased {} aasta varukoopiad", + "zero": "Reegel on keelatud", + "one": "Säilitatakse viimane {} aasta varukoopia", + "two": "Säilitatakse viimased {} aasta varukoopiad", + "few": "Säilitatakse viimased {} aasta varukoopiad", + "other": "Säilitatakse viimased {} aasta varukoopiad" + }, + "yearly_infinite": "Kõik iga-aastased varukoopiad säilitatakse" }, "card_title": "Varundus", "card_subtitle": "Halda oma varukoopiad", @@ -251,8 +264,31 @@ "daily": "Kui palju päevaseid varukoopiaid säilitada", "weekly": "Kui palju nädalaseid varukoopiaid säilitada", "monthly": "Kui palju kuiseid varukoopiaid säilitada", - "yearly": "Kui palju aastaseid varukoopiaid säilitada" - } + "yearly": "Kui palju aastaseid varukoopiaid säilitada", + "last": "Kui palju uusimaid varukoopiaid säilitada" + }, + "snapshot_modal_heading": "Hetktõmmise Üksikasjad", + "snapshot_service_title": "Teenindus", + "snapshot_creation_time_title": "Loomise aeg", + "snapshot_id_title": "Hetktõmmise ID", + "snapshot_modal_select_strategy": "Valige taastamise strateegia", + "snapshot_modal_download_verify_option_title": "Laadige alla, kontrollige ja seejärel asendage", + "snapshot_modal_download_verify_option_description": "Vähem riski, kuid vaja on rohkem vaba ruumi. Laadib kogu hetktõmmise ajutisse salvestusruumi alla, kontrollib seda ja seejärel asendab praegused andmed.", + "snapshot_modal_inplace_option_title": "Vahetage oma kohale", + "snapshot_modal_inplace_option_description": "Vaja on vähem vaba ruumi, kuid suurem risk. Asendab allalaadimise ajal praegused andmed hetktõmmise andmetega.", + "snapshot_modal_service_not_found": "See on hetktõmmis teenusest, mida teie serveris enam pole. Tavaliselt ei tohiks see juhtuda ja me ei saa automaatset taastamist teha. Saate siiski hetktõmmise alla laadida ja käsitsi taastada. Kui vajate abi, võtke ühendust SelfPrivacy toega.", + "restore_started": "Taastamine on alanud, kontrollige tööde loendist praegust olekut", + "snapshot_reason_title": "Loomise põhjus", + "snapshot_reasons": { + "auto": "Loodud automaatselt", + "explicit": "Loodud teie selgesõnalise taotluse alusel", + "pre_restore": "Loodud ettevaatusabinõuna enne riskantset taastamist", + "unknown": "Tundmatu" + }, + "rotation_quotas_title": "Hetktõmmise pööramise Seaded", + "set_rotation_quotas": "Määrake uued rotatsioonikvoodid", + "quotas_set": "Määrati uued varukoopiate pöörlemiskvoodid", + "quotas_only_applied_to_autobackups": "Neid sätteid rakendatakse ainult automaatse varundamise korral. Käsitsi tehtud varukoopiaid ei kustutata." }, "initializing": { "connect_to_server_provider_text": "API võtme abil saab SelfPrivacy rentida masina ja seadistada sellele oma serveri", @@ -310,6 +346,292 @@ "server_started": "Server on käivitatud. Nüüd toimub selle kontroll ja taaskäivitamine…", "server_created": "Server on loodud. DNS kontroll ja serveri käivitamine on pooleli…", "domain_critical_error": "Me ei saa sellele domeenile ühendust! Puudutage lisateabe lugemiseks…", - "server_rebooted": "Server taaskäivitati. Ootame viimast kontrolli…" + "server_rebooted": "Server taaskäivitati. Ootame viimast kontrolli…", + "steps": { + "master_account": "Põhikonto", + "hosting": "Hosting", + "server_type": "Serveri tüüp", + "dns_provider": "DNS pakkuja", + "backups_provider": "Varukoopiad", + "domain": "Domeen", + "server": "Server", + "dns_setup": "DNS seadistamine", + "nixos_installation": "NixOS installimine", + "server_reboot": "Serveri taaskäivitamine", + "final_checks": "Viimased kontrollid" + }, + "create_master_account": "Loo põhikonto", + "enter_username_and_password": "Sisesta kasutajanimi ja tugev parool", + "finish": "Kõik on initsialiseeritud", + "checks": "Kontrollid on lõpetatud\n{} otsas {}", + "server_provider_description": "Koht, kus asuvad teie andmed ja SelfPrivacy teenused:", + "dns_provider_description": "Teenus, mis võimaldab teie IP suunata domeeninimedele:", + "connect_to_server": "Alustame serveriga.", + "select_provider": "Valige järgmisest loendist mis tahes pakkuja, need kõik toetavad SelfPrivacy", + "select_provider_notice": "\"Suhteliselt väikese\" all peame silmas masinat, millel on 2 tuuma CPU ja 2 gigabaiti muutmälu.", + "until_the_next_check": "Kuni järgmise kontrollini: ", + "check": "Kontrollima", + "one_more_restart": "Veel üks taaskäivitus turvasertifikaatide rakendamiseks." + }, + "developer_settings": { + "ignore_tls_description": "Rakendus ei kontrolli TLS sertifikaate ühenduse loomisel serveriga.", + "subtitle": "Need seaded on ainult silumise jaoks. Ärge muutke neid, kui te ei tea, mida teete.", + "title": "Arendaja seaded", + "server_setup": "Serveri seadistamine", + "use_staging_acme_description": "Kehtib uue serveri seadistamisel.", + "use_staging_acme": "Kasuta etapilist ACME serverit", + "ignore_tls": "Ära kontrolli TLS sertifikaate", + "allow_ssh_key_at_setup": "Lubage juur SSH võtme seadistamine paigaldamise ajal", + "add_root_ssh_key": "Lisage juur SSH võti", + "allow_ssh_key_at_setup_description": "Kinnitusekraanile ilmub nupp võtme lisamiseks.", + "root_ssh_key_added": "SSH juurvõti on määratud ja seda rakendatakse", + "routing": "Rakenduse marsruutimine", + "reset_onboarding": "Lähtestage liitumislüliti", + "reset_onboarding_description": "Alguskuva uuesti kuvamiseks lähtestage liitumislüliti", + "cubit_statuses": "laadimise olekud" + }, + "not_ready_card": { + "in_menu": "Server pole veel seadistatud. Palun lõpetage seadistamine kasutades seadistusviisardit edasiseks tööks." + }, + "storage": { + "migration_process": "Migreerimine…", + "migration_done": "lõpetama", + "start_migration_button": "Alusta migreerimist", + "extending_volume_description": "Helitugevuse suuruse muutmine võimaldab teil salvestada serverisse rohkem andmeid ilma serverit ennast laiendamata. Helitugevust saab ainult pikendada: kokkutõmbumine pole võimalik.", + "data_migration_notice": "Migratsiooni ajal lülitatakse kõik teenused välja.", + "extending_volume_title": "Helitugevuse pikendamine", + "card_title": "Serveri salvestusruum", + "status_ok": "Kettakasutus on OK", + "status_error": "Vähene kettaruumi", + "disk_usage": "{} kasutatud", + "disk_total": "{} Kokku · {}", + "gb": "{} GB", + "mb": "{} MB", + "kb": "{} KB", + "bytes": "Baitid", + "extend_volume_button": "Laiendage helitugevust", + "extending_volume_price_info": "Hind sisaldab käibemaksu ja on prognoositud teie serveripakkuja esitatud hinnaandmete põhjal. Server taaskäivitatakse pärast suuruse muutmist.", + "extending_volume_error": "Helitugevuse suurendamist ei saanud lähtestada.", + "extending_volume_modal_description": "Uuendage {} plaanile {} kuus.", + "size": "Suurus", + "price": "Hind", + "data_migration_title": "Andmete migratsioon" + }, + "service_page": { + "nothing_here": "Midagi siin", + "open_in_browser": "Ava brauseris", + "restart": "Teenuse taaskäivitamine", + "disable": "Keela teenus", + "enable": "luba teenus", + "move": "Liigu teisele mahule", + "uses": "Kasutab {usage} mahul {volume}", + "snapshots": "Varukoopia hetkepilte", + "status": { + "active": "Üleval ja töötab", + "inactive": "Peatatud", + "failed": "Käivitamine ebaõnnestus", + "off": "Keelatud", + "activating": "Aktiveerimine", + "deactivating": "Deaktiveerimine", + "reloading": "Taaskäivitamine" + } + }, + "mail": { + "title": "E-post", + "login_info": "Kasutage kasutajanime ja parooli kasutajate vahekaardilt. IMAP port on 143 koos STARTTLS, SMTP port on 587 koos STARTTLS.", + "subtitle": "E-post ettevõttele ja perele." + }, + "password_manager": { + "subtitle": "Teie turvalisuse alus. Bitwarden aitab teil luua, salvestada ja liigutada paroole seadmete vahel ning sisestada neid, kui neid küsitakse, kasutades automaatset täitmist.", + "login_info": "Teil tuleb luua konto veebisaidil.", + "title": "Paroolide haldur" + }, + "recovering": { + "method_device_description": "Avage rakendus teises seadmes ja minge seadmete lehele. Oma märgi saamiseks vajutage nuppu \"Lisa seade\".", + "method_select_description": "Valige taastamisviis:", + "domain_recovery_description": "Sisestage serveri domeen, millele soovite juurdepääsu saada:", + "domain_recover_placeholder": "Teie domeen", + "domain_recover_error": "Sellise domeeniga serverit ei leitud", + "fallback_select_provider_console_hint": "Näiteks: Hetzner.", + "provider_connected": "Ühenda {}", + "generic_error": "Toiming ebaõnnestus, proovige uuesti.", + "recovery_main_header": "Ühendage olemasoleva serveriga", + "method_select_other_device": "Mul on juurdepääs teises seadmes", + "method_select_recovery_key": "Mul on taastevõti", + "method_select_nothing": "Mul pole midagi sellist", + "method_device_button": "Sain oma märgi kätte", + "method_device_input_description": "Sisestage oma autoriseerimisluba", + "method_device_input_placeholder": "Token", + "method_recovery_input_description": "Sisestage oma taastevõti", + "fallback_select_description": "Mis sul täpsemalt on? Valige esimene saadaolev valik:", + "fallback_select_token_copy": "Auth tokeni koopia rakenduse teisest versioonist.", + "fallback_select_root_ssh": "SSH juurjuurdepääs serverile.", + "fallback_select_provider_console": "Juurdepääs minu teenusepakkuja serverikonsoolile.", + "authorization_failed": "Selle võtmega ei saanud sisse logida", + "provider_connected_description": "Sisestage oma tunnus, millel on juurdepääs domeenile {}:", + "provider_connected_placeholder": "{} tunnus", + "confirm_server": "Kinnitage server", + "confirm_server_description": "Teie server leitud! Kinnitage, et see on õige:", + "confirm_server_accept": "Jah! See on kõik", + "confirm_server_decline": "Valige mõni muu server", + "choose_server": "Valige oma server", + "choose_server_description": "Me ei saanud aru, millise serveriga proovite ühendust luua.", + "no_servers": "Teie kontol pole saadaolevaid servereid.", + "domain_not_available_on_token": "Valitud domeen pole sellel märgil saadaval.", + "modal_confirmation_title": "Kas see on tõesti teie server?", + "modal_confirmation_description": "Kui loote ühenduse vale serveriga, võite kaotada kõik oma andmed.", + "modal_confirmation_dns_valid": "Vastupidine DNS on kehtiv", + "modal_confirmation_dns_invalid": "Vastupidine DNS osutab teisele domeenile", + "modal_confirmation_ip_valid": "IP on sama, mis DNS kirjes", + "modal_confirmation_ip_invalid": "IP ei ole sama, mis DNS kirjes" + }, + "video": { + "subtitle": "Zoom ja Google Meet on head, kuid Jitsi Meet on väärt alternatiiv, mis annab teile kindlustunde, et teid ei kuulata.", + "title": "Videokoosolek", + "login_info": "Konto pole vaja." + }, + "users": { + "could_not_fetch_users": "Kasutajate loendit ei õnnestunud hankida", + "refresh_users": "Värskenda kasutajate loendit", + "details_title": "Kasutaja üksikasjad", + "add_new_user": "Lisa esimene kasutaja", + "new_user": "Uus kasutaja", + "delete_user": "Kustuta kasutaja", + "nobody_here": "Siin pole kedagi", + "login": "Logi sisse", + "new_user_info_note": "Uuele kasutajale antakse automaatselt juurdepääs kõikidele teenustele", + "delete_confirm_question": "Kas oled kindel?", + "reset_password": "Parooli lähtestamine", + "account": "Konto", + "send_registration_data": "Jagage sisselogimisandmeid", + "could_not_fetch_description": "Palun kontrollige oma internetiühendust ja proovige uuesti", + "could_not_create_user": "Kasutaja loomine ebaõnnestus", + "could_not_delete_user": "Kasutaja kustutamine ebaõnnestus", + "could_not_add_ssh_key": "SSH võtme lisamine ebaõnnestus", + "username_rule": "Kasutajanimi võib sisaldada ainult väiketähti, numbreid ja allkriipse, ei tohi alata numbriga", + "email_login": "E-posti sisselogimine", + "no_ssh_notice": "Sellele kasutajale luuakse ainult e-posti ja SSH kontod. Ühe sisselogimise lahendus kõikidele teenustele on varsti saadaval." + }, + "devices": { + "main_screen": { + "other_devices": "Muud seadmed", + "authorize_new_device": "Autoriseeri uus seade", + "access_granted_on": "Juurdepääs anti {}", + "tip": "Juurdepääsu tühistamiseks vajutage seadmel nuppu.", + "header": "Seadmed", + "description": "Nendel seadmetel on SelfPrivacy rakenduse kaudu täielik juurdepääs serverile.", + "this_device": "See seade" + }, + "add_new_device_screen": { + "header": "Uue seadme autoriseerimine", + "description": "Sisestage selle seadme võti, mida soovite autoriseerida:", + "please_wait": "Palun oota", + "tip": "Võti kehtib 10 minutit.", + "expired": "Võti on aegunud.", + "get_new_key": "Hangi uus võti" + }, + "revoke_device_alert": { + "header": "Tühistada juurdepääsu?", + "description": "Seadmel {} ei ole enam serverile juurdepääsu.", + "no": "Tühista", + "yes": "Tühistama" + } + }, + "recovery_key": { + "key_connection_error": "Ühendust serveriga ei õnnestunud luua.", + "key_synchronizing": "Sünkroniseerimine…", + "key_main_header": "Taastevõti", + "key_main_description": "On vajalik SelfPrivacy autoriseerimiseks, kui kõik teised autoriseeritud seadmed pole kättesaadavad.", + "key_amount_toggle": "Piirang kasutuste arvu järgi", + "key_amount_field_title": "Maksimaalne kasutuskordade arv", + "key_duedate_toggle": "Piirang aja järgi", + "key_duedate_field_title": "Aegumiskuupäev", + "key_receive_button": "Võtme saamine", + "key_valid": "Teie võti on kehtiv", + "key_invalid": "Teie võti ei kehti enam", + "key_valid_until": "Kehtib kuni {}", + "key_valid_for": "Kehtib {} kasutuskorraks", + "key_creation_date": "Loodud {}", + "key_replace_button": "Genereeri uus võti", + "key_receiving_description": "Kirjutage see võti üles ja asetage turvalisse kohta. Seda kasutatakse täieliku juurdepääsu taastamiseks teie serverile:", + "key_receiving_info": "Võtit ei näidata kunagi enam, kuid teil on võimalus asendada see teisega.", + "key_receiving_done": "Valmis!", + "generation_error": "Taastevõtit ei õnnestunud luua. {}" + }, + "jobs": { + "service_turn_off": "Välja lülitamine", + "service_turn_on": "Sisselülitamine", + "upgrade_success": "Serveri värskendamine on alanud", + "upgrade_failed": "Serveri värskendamine ebaõnnestus", + "upgrade_server": "Värskenda serverit", + "reboot_server": "Taaskäivita server", + "create_ssh_key": "Looge SSH võti {} jaoks", + "generic_error": "Ei õnnestunud ühendust serveriga luua!", + "delete_ssh_key": "Kustutage SSH võti {} jaoks", + "server_jobs": "Tööd serveris", + "reset_user_password": "Kasutaja parooli lähtestamine", + "title": "Töökohtade nimekiri", + "start": "Alusta", + "empty": "Töökohti pole", + "create_user": "Kasutaja loomine", + "delete_user": "Kasutaja kustutamine", + "job_added": "Töö lisatud", + "run_jobs": "Käivita tööd", + "reboot_success": "Server taaskäivitub", + "reboot_failed": "Serverit ei õnnestunud taaskäivitada. Kontrollige rakenduse logisid.", + "config_pull_failed": "Konfiguratsiooni värskendust ei õnnestunud alla laadida. Tarkvara värskendamine algas siiski." + }, + "validations": { + "required": "Nõutud", + "already_exist": "Juba eksisteerib", + "invalid_format": "Kehtetu vorming", + "invalid_format_password": "Parool ei tohi sisaldada tühikuid", + "invalid_format_ssh": "Peab järgima SSH võtme formaati", + "root_name": "Ei saa olla 'root'", + "length_not_equal": "Pikkus on [], peaks olema {}", + "length_longer": "Pikkus on [], peaks olema lühem või võrdne kui {}" + }, + "support": { + "title": "SelfPrivacy tugi" + }, + "cloud": { + "title": "Pilvesalvestus", + "subtitle": "Ärge lubage pilveteenustel teie andmeid lugeda, kasutades NextCloud.", + "login_info": "Sisselogimine on admin, parool on sama mis teie põhikasutajal. Looge uusi kontosid Nextcloudi liideses." + }, + "social_network": { + "title": "Sotsiaalvõrgustik", + "subtitle": "On raske uskuda, kuid nüüd on võimalik luua oma sotsiaalvõrgustik oma reeglite ja sihtrühmaga.", + "login_info": "Teil tuleb luua konto veebisaidil." + }, + "git": { + "title": "Git Server", + "subtitle": "Erakasutusel olev alternatiiv Github, mis kuulub teile, kuid mitte Microsoft.", + "login_info": "Teil tuleb luua konto veebisaidil. Esimesest kasutajast saab administraator." + }, + "vpn": { + "title": "VPN server", + "subtitle": "Eravõrgu VPN server" + }, + "modals": { + "dns_removal_error": "DNS kirjeid ei õnnestunud eemaldada.", + "server_deletion_error": "Aktiivset serverit ei õnnestunud kustutada.", + "volume_creation_error": "Mahu loomine ebaõnnestus.", + "server_validators_error": "Saadaolevate serverite hankimine ebaõnnestus.", + "already_exists": "Selline server on juba olemas.", + "unexpected_error": "Pakkuja poolelt tekkis paigutuse ajal ootamatu viga.", + "destroy_server": "Hävitage server ja looge uus?", + "try_again": "Proovige uuesti?", + "are_you_sure": "Kas olete kindel?", + "purge_all_keys": "Kustutada kõik autentimisvõtmed?", + "purge_all_keys_confirm": "Jah, kustuta kõik minu võtmed", + "delete_server_volume": "Kustutada server ja maht?", + "reboot": "Taaskäivitage", + "you_cant_use_this_api": "Te ei saa seda API kasutada domeenide puhul sellise TLD.", + "yes": "Jah", + "no": "Ei" + }, + "timer": { + "sec": "{} sek" } } From b8ca1093fc4d0fd60e3326e381a8413cfd7db4a2 Mon Sep 17 00:00:00 2001 From: Dmitri B Date: Mon, 19 Feb 2024 03:55:51 +0000 Subject: [PATCH 19/75] Translated using Weblate (Estonian) Currently translated at 100.0% (539 of 539 strings) Translation: SelfPrivacy/SelfPrivacy App Translate-URL: http://weblate.selfprivacy.org/projects/selfprivacy/selfprivacy-app/et/ --- assets/translations/et.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assets/translations/et.json b/assets/translations/et.json index 0d0e590f..d200cf33 100644 --- a/assets/translations/et.json +++ b/assets/translations/et.json @@ -143,7 +143,7 @@ "git": "Git server", "meet": "Videokonverents", "social": "Sotsiaalne võrgustik", - "password": "Paroolide haldur", + "password": "Paroolihaldur", "vpn": "VPN", "mx": "MX kirje", "dmarc": "DMARC kirje", From 081c30dd249727eb52b608cd1cef0c55aa4cb4d1 Mon Sep 17 00:00:00 2001 From: TabithiS Date: Mon, 19 Feb 2024 10:37:07 +0000 Subject: [PATCH 20/75] Translated using Weblate (Ukrainian) Currently translated at 80.3% (433 of 539 strings) Translation: SelfPrivacy/SelfPrivacy App Translate-URL: http://weblate.selfprivacy.org/projects/selfprivacy/selfprivacy-app/uk/ --- assets/translations/uk.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/assets/translations/uk.json b/assets/translations/uk.json index 90f62613..6ffdb27b 100644 --- a/assets/translations/uk.json +++ b/assets/translations/uk.json @@ -12,7 +12,7 @@ "username": "І'мя користовача", "loading": "Завантаження…", "later": "Перейти до налаштувати пізніше", - "connect_to_existing": "Підключитись до існуючого серверу", + "connect_to_existing": "У мене вже є SelfPrivacy сервер!", "reset": "Скинути", "details": "Подробиці", "no_data": "Немає данних", @@ -59,7 +59,7 @@ "subtitle_without_keys": "Ключів немає", "no_key_name": "Безіменний ключ", "root_title": "Це ключі суперкористувача", - "input_label": "Публічний ED25519 або RSA ключ" + "input_label": "Публічний ED25519, ECDSA або RSA ключ" }, "more_page": { "about_project": "Про нас", From 120bb85f2696a48ba7811a9be8c2d8bdf0a837f0 Mon Sep 17 00:00:00 2001 From: Nagibator Nagibuchiy Date: Mon, 19 Feb 2024 11:58:45 +0000 Subject: [PATCH 21/75] Translated using Weblate (Ukrainian) Currently translated at 80.3% (433 of 539 strings) Translation: SelfPrivacy/SelfPrivacy App Translate-URL: http://weblate.selfprivacy.org/projects/selfprivacy/selfprivacy-app/uk/ --- assets/translations/uk.json | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/assets/translations/uk.json b/assets/translations/uk.json index 6ffdb27b..8d4b7feb 100644 --- a/assets/translations/uk.json +++ b/assets/translations/uk.json @@ -34,7 +34,8 @@ "close": "Закрити", "connect": "Підключіться", "app_name": "SelfPrivacy", - "copied_to_clipboard": "Скопійовано в буфер обміну!" + "copied_to_clipboard": "Скопійовано в буфер обміну!", + "please_connect": "Будь ласка, підключіть свій сервер, домен та провайдера DNS, щоб зануритися!" }, "locale": "ua", "application_settings": { @@ -228,7 +229,8 @@ "monthly_cost": "Щомісячна вартість", "location": "Місцезнаходження", "server_provider": "Провайдер сервера", - "dns_provider": "Провайдер DNS" + "dns_provider": "Провайдер DNS", + "pricing_error": "Не вдалося отримати ціни постачальника" }, "record": { "api": "SelfPrivacy API", @@ -256,7 +258,8 @@ "email_subtitle": "Записи, необхідні для безпечного обміну електронною поштою.", "update_list": "Лист оновлень", "error_subtitle": "Натисніть тут, щоб виправити їх. При цьому також буде видалено користувацькі записи.", - "services_subtitle": "Введіть \"А\" записи, необхідні для кожної служби." + "services_subtitle": "Введіть \"А\" записи, необхідні для кожної служби.", + "domain_validation_failure": "Ми не можемо отримати доступ до вашого домену!" }, "backup": { "card_title": "Резервне копіювання", @@ -296,7 +299,21 @@ "backups_encryption_key_subtitle": "Зберігайте його в безпечному місці.", "backups_encryption_key_copy": "Скопіюйте ключ шифрування", "card_subtitle": "Керуйте резервними копіями", - "select_all": "Копіювати все" + "select_all": "Копіювати все", + "backups_encryption_key_show": "Показати ключ шифрування", + "backups_encryption_key_description": "Цей ключ використовується для шифрування ваших резервних копій. Якщо ви його втратите, ви не зможете відновити резервні копії. Зберігайте його в безпечному місці, оскільки він стане в нагоді, якщо вам коли-небудь знадобиться відновити з резервних копій вручну.", + "backups_encryption_key_not_found": "Ключ шифрування ще не знайдено, спробуйте пізніше.", + "snapshot_service_title": "Сервіс", + "snapshot_creation_time_title": "Час створення", + "snapshot_modal_download_verify_option_title": "Завантажте, перевірте та замініть", + "pending_jobs": "Зараз виконуються завдання резервного копіювання", + "snapshots_title": "Список знімків", + "snapshot_modal_inplace_option_title": "Замініть на місце", + "snapshot_reason_title": "Причина створення", + "snapshot_reasons": { + "auto": "Створено автоматично", + "explicit": "Створено за вашим явним запитом" + } }, "storage": { "card_title": "Серверне сховище", From 8780ceec8326421c016d505f9ca32c404de620db Mon Sep 17 00:00:00 2001 From: TabithiS Date: Mon, 19 Feb 2024 11:26:39 +0000 Subject: [PATCH 22/75] Translated using Weblate (Kazakh) Currently translated at 0.5% (3 of 539 strings) Translation: SelfPrivacy/SelfPrivacy App Translate-URL: http://weblate.selfprivacy.org/projects/selfprivacy/selfprivacy-app/kk/ --- assets/translations/kk.json | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/assets/translations/kk.json b/assets/translations/kk.json index 0967ef42..9faa3adb 100644 --- a/assets/translations/kk.json +++ b/assets/translations/kk.json @@ -1 +1,7 @@ -{} +{ + "test": "kz-test", + "locale": "kz", + "basis": { + "app_name": "SelfPrivacy" + } +} From 3e61dafa3f3e35cc2442cac3b34431b950f59728 Mon Sep 17 00:00:00 2001 From: Nagibator Nagibuchiy Date: Mon, 19 Feb 2024 11:56:30 +0000 Subject: [PATCH 23/75] Translated using Weblate (Ukrainian) Currently translated at 100.0% (1 of 1 strings) Translation: SelfPrivacy/SelfPrivacy App Markdown: how_digital_ocean Translate-URL: http://weblate.selfprivacy.org/projects/selfprivacy/selfprivacy-app-markdown-how_digital_ocean/uk/ --- assets/markdown/how_digital_ocean-uk.md | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/assets/markdown/how_digital_ocean-uk.md b/assets/markdown/how_digital_ocean-uk.md index dc6355c2..a4f5cc88 100644 --- a/assets/markdown/how_digital_ocean-uk.md +++ b/assets/markdown/how_digital_ocean-uk.md @@ -1,12 +1,11 @@ -### How to get Digital Ocean API Token -1. Visit the following [link](https://cloud.digitalocean.com/) and sign - into newly created account. -2. Enter into previously created project. If you haven't created one, - then please proceed. -3. Go to the "API" link on the left bar. -4. Click on the "Generate New Token". -5. Enter any name for the token. -6. Put expiration time to "No expiry". -7. Check the "Write (optional)" checkbox. -8. Now click on the "Generate Token" button. -9. After that, the token will be shown. Store it in any reliable place, preferably a password manager. \ No newline at end of file +### Як отримати токен Digital Ocean API + +1. Перейдіть за цим [посилання](https://cloud.digitalocean.com/) і увійдіть у щойно створений обліковий запис. +2. Увійдіть у раніше створений проект. Якщо ви його не створили, тоді, будь ласка, продовжуйте. +3. Перейдіть за посиланням «API» на лівій панелі. +4. Натисніть «Створити новий токен». +5. Введіть будь-яку назву токену. +6. Встановіть для терміну дії значення «Без терміну дії». +7. Встановіть прапорець «Написати (необов’язково)». +8. Тепер натисніть кнопку «Створити токен». +9. Після цього буде показано токен. Зберігайте його в будь-якому надійному місці, бажано в менеджері паролів. \ No newline at end of file From 1a22917d0f4f20fc64b90e48140fe98e964cfdc8 Mon Sep 17 00:00:00 2001 From: Nagibator Nagibuchiy Date: Mon, 19 Feb 2024 12:17:01 +0000 Subject: [PATCH 24/75] Translated using Weblate (Ukrainian) Currently translated at 81.0% (437 of 539 strings) Translation: SelfPrivacy/SelfPrivacy App Translate-URL: http://weblate.selfprivacy.org/projects/selfprivacy/selfprivacy-app/uk/ --- assets/translations/uk.json | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/assets/translations/uk.json b/assets/translations/uk.json index 8d4b7feb..c55c115f 100644 --- a/assets/translations/uk.json +++ b/assets/translations/uk.json @@ -312,7 +312,17 @@ "snapshot_reason_title": "Причина створення", "snapshot_reasons": { "auto": "Створено автоматично", - "explicit": "Створено за вашим явним запитом" + "explicit": "Створено за вашим явним запитом", + "unknown": "Невідомий" + }, + "set_rotation_quotas": "Встановити нові квоти ротації", + "quota_subtitles": { + "last": { + "zero": "Правило вимкнено" + }, + "daily": { + "zero": "Правило вимкнено" + } } }, "storage": { From c54bfef4fc83c7e1b5caf94e52af676a22c5c2cd Mon Sep 17 00:00:00 2001 From: TabithiS Date: Mon, 19 Feb 2024 16:27:43 +0000 Subject: [PATCH 25/75] Translated using Weblate (Kazakh) Currently translated at 2.7% (15 of 539 strings) Translation: SelfPrivacy/SelfPrivacy App Translate-URL: http://weblate.selfprivacy.org/projects/selfprivacy/selfprivacy-app/kk/ --- assets/translations/kk.json | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/assets/translations/kk.json b/assets/translations/kk.json index 9faa3adb..47420b69 100644 --- a/assets/translations/kk.json +++ b/assets/translations/kk.json @@ -1,7 +1,19 @@ { - "test": "kz-test", + "test": "сынақ", "locale": "kz", "basis": { - "app_name": "SelfPrivacy" + "app_name": "SelfPrivacy", + "providers": "Провайдерлер", + "providers_title": "Сіздің Деректер Орталығыңыз", + "got_it": "Түсіндім", + "select": "Таңдау", + "services_title": "Сіздің жеке, жеке және тәуелсіз қызметтеріңіз.", + "more": "Толығырақ", + "next": "Келесі", + "settings": "Параметрлер", + "password": "Құпия сөз", + "create": "Жаңаны қосу", + "confirmation": "Растау", + "users": "Пайдаланушылар" } } From bd41849aeb5f438c3fd264c0acb4b3e8959a095a Mon Sep 17 00:00:00 2001 From: TabithiS Date: Wed, 21 Feb 2024 09:40:51 +0000 Subject: [PATCH 26/75] Translated using Weblate (Japanese) Currently translated at 0.5% (3 of 539 strings) Translation: SelfPrivacy/SelfPrivacy App Translate-URL: http://weblate.selfprivacy.org/projects/selfprivacy/selfprivacy-app/ja/ --- assets/translations/ja.json | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/assets/translations/ja.json b/assets/translations/ja.json index 07e84b75..44bb3d22 100644 --- a/assets/translations/ja.json +++ b/assets/translations/ja.json @@ -1,4 +1,7 @@ { "test": "jp-test", - "locale": "jp" + "locale": "jp", + "basis": { + "app_name": "SelfPrivacy" + } } From edb469522853076f32d4b6855b04ce6a168f1b08 Mon Sep 17 00:00:00 2001 From: TabithiS Date: Thu, 22 Feb 2024 08:13:32 +0000 Subject: [PATCH 27/75] Translated using Weblate (Polish) Currently translated at 88.8% (479 of 539 strings) Translation: SelfPrivacy/SelfPrivacy App Translate-URL: http://weblate.selfprivacy.org/projects/selfprivacy/selfprivacy-app/pl/ --- assets/translations/pl.json | 69 +++++++++++++++++++++++++++++++++---- 1 file changed, 62 insertions(+), 7 deletions(-) diff --git a/assets/translations/pl.json b/assets/translations/pl.json index 8c0d99bd..45df32b9 100644 --- a/assets/translations/pl.json +++ b/assets/translations/pl.json @@ -22,7 +22,7 @@ "saving": "Zapisywanie…", "username": "Nazwa użytkownika", "loading": "Ładowanie…", - "connect_to_existing": "Podłącz do istniejącego serwera", + "connect_to_existing": "Mam już serwer SelfPrivacy!", "reset": "Zresetuj to", "details": "Dokładna informacja", "no_data": "Brak danych", @@ -32,7 +32,9 @@ "done": "Gotowe", "continue": "Kontynuować", "alert": "Powiadomienie", - "app_name": "SelfPrivacy" + "app_name": "SelfPrivacy", + "please_connect": "Połącz się z serwerem, aby rozpocząć grę!", + "copied_to_clipboard": "Skopiowane do schowka!" }, "test": "pl-test", "locale": "pl", @@ -78,7 +80,7 @@ "subtitle_without_keys": "Brak kluczy", "no_key_name": "Bezimienny klucz", "root_title": "To są klucze superużytkownika", - "input_label": "Publiczny klucz ED25519 lub RSA", + "input_label": "Publiczny klucz ED25519, ECDSA lub RSA", "create": "Dodaj klucz SSH", "delete_confirm_question": "Czy na pewno chcesz usunąć następny klucz?", "root_subtitle": "Właściciele określonych tutaj kluczy uzyskują pełny dostęp do danych i ustawień serwera. Dodaj tylko swoje klucze." @@ -129,7 +131,10 @@ "allow_autoupgrade": "Zezwalaj na automatyczne aktualizacje", "reboot_after_upgrade_hint": "Automatycznie uruchom ponownie serwer po zastosowaniu aktualizacji", "select_timezone": "Wybierz swoją strefę czasową", - "timezone_search_bar": "Nazwa strefy czasowej lub znaczenie przesunięcia czasowego" + "timezone_search_bar": "Nazwa strefy czasowej lub znaczenie przesunięcia czasowego", + "server_provider": "Provider serwera", + "dns_provider": "Dostawca DNS", + "pricing_error": "Nie udało się uzyskać cen dostawców" }, "record": { "root": "Domena główna", @@ -156,8 +161,9 @@ "email_title": "Email", "update_list": "Zaktualizuj listę", "ok": "Zapisy są w porządku", - "error_subtitle": "Kliknij tutaj, aby naprawić", - "email_subtitle": "Zapisy wymagane do bezpiecznej wymiany poczty elektronicznej." + "error_subtitle": "Stuknij tutaj, aby je naprawić. Spowoduje to również usunięcie niestandardowych rekordów.", + "email_subtitle": "Zapisy wymagane do bezpiecznej wymiany poczty elektronicznej.", + "domain_validation_failure": "Nie możemy osiągnąć twojej domeny!" }, "backup": { "card_title": "Utworzyć kopię zapasową", @@ -175,7 +181,56 @@ "refresh": "Odśwież status", "refetch_backups": "Ponownie pobierz listę kopii zapasowych", "refetching_list": "Za kilka minut lista zostanie zaktualizowana", - "restore_alert": "Za chwilę przywrócisz z kopii utworzonej przez {}. Wszystkie bieżące dane zostaną utracone. Jesteś pewny?" + "restore_alert": "Za chwilę przywrócisz z kopii utworzonej przez {}. Wszystkie bieżące dane zostaną utracone. Jesteś pewny?", + "backups_encryption_key_description": "Ten klucz służy do szyfrowania kopii zapasowych. Jeśli go zgubisz, nie będziesz w stanie przywrócić kopii zapasowych. Przechowuj go w bezpiecznym miejscu, ponieważ będzie przydatny, jeśli kiedykolwiek będziesz musiał ręcznie przywrócić dane z kopii zapasowych.", + "snapshot_modal_download_verify_option_description": "Less risk, but more free space needed. Downloads entire snapshot to the temporary storage, verifies it and then replaces the current data.", + "refetch_backups_subtitle": "Unieważnienie pamięci podręcznej i ponowne pobranie danych od dostawcy pamięci masowej. Może to spowodować naliczenie dodatkowych opłat.", + "snapshot_modal_service_not_found": "Jest to migawka usługi, której nie ma już na serwerze. Zwykle nie powinno się to zdarzyć i nie możemy wykonać automatycznego przywracania. Nadal możesz pobrać migawkę i przywrócić ją ręcznie. Skontaktuj się z pomocą techniczną SelfPrivacy, jeśli potrzebujesz pomocy.", + "backups_encryption_key_subtitle": "Przechowuj go w bezpiecznym miejscu.", + "quotas_only_applied_to_autobackups": "Te ustawienia są stosowane tylko do automatycznych kopii zapasowych. Ręczne kopie zapasowe nie zostaną usunięte.", + "card_subtitle": "Zarządzanie kopiami zapasowymi", + "latest_snapshots_subtitle": "Wyświetlanie ostatnich 15 migawek", + "show_more": "Pokaż więcej", + "autobackup_period_title": "Okres automatycznego tworzenia kopii zapasowych", + "autobackup_period_subtitle": "Kopie zapasowe tworzone co {okres}", + "autobackup_period_never": "Automatyczne kopie zapasowe są wyłączone", + "snapshot_reasons": { + "unknown": "Nieznany", + "auto": "Utworzony automatycznie", + "explicit": "Utworzone na wyraźne żądanie użytkownika", + "pre_restore": "Utworzony jako środek ostrożności przed ryzykownym przywracaniem" + }, + "set_rotation_quotas": "Ustaw nowe limity rotacji", + "backups_encryption_key_not_found": "Nie znaleziono klucza szyfrowania, spróbuj ponownie później.", + "snapshots_title": "Lista migawek", + "reupload_key_subtitle": "Nakaże serwerowi ponowne zainicjowanie magazynu kopii zapasowych. Użyj, jeśli coś jest uszkodzone.", + "select_all": "Kopiuj wszystko", + "create_new_select_heading": "Wybór elementów do utworzenia kopii zapasowej", + "start": "Rozpocznij tworzenie kopii zapasowej", + "backups_encryption_key_copy": "Kopiowanie klucza szyfrowania", + "backups_encryption_key_show": "Pokaż klucz szyfrowania", + "pending_jobs": "Aktualnie uruchomione zadania tworzenia kopii zapasowych", + "forget_snapshot": "Zapomnij o migawce", + "forget_snapshot_alert": "Zamierzasz usunąć tę migawkę. Czy na pewno? Tej akcji zazwyczaj nie można cofnąć.", + "forget_snapshot_error": "Nie mogłem zapomnieć migawki", + "snapshot_modal_heading": "Szczegóły migawki", + "snapshot_service_title": "Usługa", + "snapshot_creation_time_title": "Czas tworzenia", + "snapshot_modal_select_strategy": "Wybierz strategię przywracania", + "snapshot_modal_download_verify_option_title": "Pobierz, zweryfikuj, a następnie wymień", + "snapshot_modal_inplace_option_title": "Zastąp w miejscu", + "snapshot_modal_inplace_option_description": "Mniej wolnego miejsca, ale większe ryzyko. Zastępuje bieżące dane danymi z migawki podczas pobierania.", + "restore_started": "Przywracanie rozpoczęte, sprawdź aktualny status na liście zadań.", + "snapshot_reason_title": "Przyczyna stworzenia", + "service_busy": "Trwa kolejna operacja tworzenia kopii zapasowej", + "latest_snapshots": "Najnowsze zdjęcia", + "autobackup_period_every": "Każdy {okres}", + "autobackup_period_disable": "Wyłącz automatyczne tworzenie kopii zapasowych", + "autobackup_custom": "Niestandardowe", + "autobackup_custom_hint": "Wprowadź niestandardowy okres w minutach", + "autobackup_set_period": "Ustawiony okres", + "autobackup_period_set": "Okres ustalony", + "backups_encryption_key": "Klucz szyfrowania" }, "storage": { "card_title": "Pamięć serwera", From 06cfd211a889880211fb709eda47a514b0975d50 Mon Sep 17 00:00:00 2001 From: TabithiS Date: Thu, 22 Feb 2024 08:32:29 +0000 Subject: [PATCH 28/75] Translated using Weblate (Ukrainian) Currently translated at 85.7% (462 of 539 strings) Translation: SelfPrivacy/SelfPrivacy App Translate-URL: http://weblate.selfprivacy.org/projects/selfprivacy/selfprivacy-app/uk/ --- assets/translations/uk.json | 35 +++++++++++++++++++++++++++++++---- 1 file changed, 31 insertions(+), 4 deletions(-) diff --git a/assets/translations/uk.json b/assets/translations/uk.json index c55c115f..cd551050 100644 --- a/assets/translations/uk.json +++ b/assets/translations/uk.json @@ -313,17 +313,44 @@ "snapshot_reasons": { "auto": "Створено автоматично", "explicit": "Створено за вашим явним запитом", - "unknown": "Невідомий" + "unknown": "Невідомий", + "pre_restore": "Створено як запобіжний захід перед ризикованим відновленням" }, "set_rotation_quotas": "Встановити нові квоти ротації", "quota_subtitles": { "last": { - "zero": "Правило вимкнено" + "zero": "Правило вимкнено", + "one": "Останній {} знімок буде зберігатися незалежно від дати створення", + "two": "Останні {} знімка будуть зберігатися незалежно від дати створення", + "few": "Останні {} знімка будуть зберігатися незалежно від дати створення", + "many": "Останні {} знімків будуть зберігатися незалежно від дати створення", + "other": "Останні {} знімків будуть зберігатися незалежно від дати створення" }, "daily": { "zero": "Правило вимкнено" - } - } + }, + "no_effect": "Це правило не має ефекту, оскільки перекрите іншим правилом" + }, + "snapshot_modal_service_not_found": "Це знімок сервісу, якого більше немає на вашому сервері. Зазвичай цього не повинно відбуватися, і ми не зможемо виконати автоматичне відновлення. Ви можете завантажити знімок і відновити його вручну. Зверніться до служби підтримки SelfPrivacy, якщо вам потрібна допомога.", + "quotas_set": "Нові квоти ротації резервних копій задано", + "rotation_quotas_title": "Налаштування ротації знімків", + "quotas_only_applied_to_autobackups": "Ці налаштування застосовуються тільки до резервних копій, створених автоматично. Створені вручну резервні копії не будуть видалені цими правилами.", + "quota_titles": { + "last": "Скільки останніх знімків зберігати", + "daily": "Скільки щоденних знімків зберігати", + "weekly": "Скільки щотижневих знімків зберігати", + "monthly": "Скільки щомісячних знімків зберігати", + "yearly": "Скільки щорічних знімків зберігати" + }, + "forget_snapshot": "Забудьте про моментальний знімок", + "forget_snapshot_alert": "Ви впевнені що хочете видалити цей знімок? Цю дію зазвичай не можна скасувати.", + "forget_snapshot_error": "Не вдалося забути знімок", + "snapshot_modal_heading": "Відомості про знімок", + "snapshot_id_title": "ID знімка", + "snapshot_modal_select_strategy": "Виберіть стратегію відновлення", + "snapshot_modal_download_verify_option_description": "Менший ризик, але потрібно більше вільного місця. Завантаження всієї резервної копії в тимчасове сховище, перевірка цілісності копії, і подальша заміна поточних даних.", + "snapshot_modal_inplace_option_description": "Потрібно менше вільного місця, але вищий ризик. Під час завантаження даних із резервної копії замінюють поточні дані відразу.", + "restore_started": "Відновлення почалося, перевірте поточний статус у списку завдань" }, "storage": { "card_title": "Серверне сховище", From 61376026370ef7b8c0afcc7f6f9856b2ef2fa415 Mon Sep 17 00:00:00 2001 From: Weblate Date: Fri, 23 Feb 2024 15:57:00 +0000 Subject: [PATCH 29/75] Update translation files Updated by "Cleanup translation files" hook in Weblate. Translation: SelfPrivacy/SelfPrivacy App Translate-URL: http://weblate.selfprivacy.org/projects/selfprivacy/selfprivacy-app/ --- assets/translations/az.json | 9 +-------- assets/translations/be.json | 9 +-------- assets/translations/cs.json | 7 ------- assets/translations/de.json | 9 +-------- assets/translations/es.json | 9 +-------- assets/translations/et.json | 9 +-------- assets/translations/fr.json | 7 ------- assets/translations/he.json | 7 ------- assets/translations/lv.json | 9 +-------- assets/translations/pl.json | 7 ------- assets/translations/ru.json | 9 +-------- assets/translations/sk.json | 7 ------- assets/translations/sl.json | 9 +-------- assets/translations/th.json | 9 +-------- assets/translations/uk.json | 7 ------- 15 files changed, 9 insertions(+), 114 deletions(-) diff --git a/assets/translations/az.json b/assets/translations/az.json index d340f9da..b688d121 100644 --- a/assets/translations/az.json +++ b/assets/translations/az.json @@ -39,11 +39,7 @@ "more_page": { "configuration_wizard": "Quraşdırma Sihirbazı", "onboarding": "Salamlar", - "create_ssh_key": "SSH admin açarları", - "console": "Konsol", - "application_settings": "Tətbiq parametrləri", - "about_project": "SelfPrivacy haqqında", - "about_application": "Proqram haqqında" + "create_ssh_key": "SSH admin açarları" }, "console_page": { "title": "Konsol", @@ -92,9 +88,6 @@ "page2_server_provider_text": "Server provayderi öz məlumat mərkəzində serverinizə xidmət göstərəcək. SelfPrivacy avtomatik olaraq ona qoşulacaq və sizin üçün server quracaq.", "page2_backup_provider_text": "Bəs serverə bir şey olarsa? Haker hücumu, xidmətdən imtina və ya sadəcə məlumatların təsadüfən silinməsi? Məlumatlarınız ehtiyat yaddaş provayderinizlə başqa yerdə təhlükəsiz olacaq. Onların hamısı təhlükəsiz şəkildə şifrələnib və siz serverinizi bərpa edə bilərsiniz." }, - "about_us_page": { - "title": "SelfPrivacy haqqında" - }, "resource_chart": { "month": "Ay", "day": "Gün", diff --git a/assets/translations/be.json b/assets/translations/be.json index 957856cc..1d46d250 100644 --- a/assets/translations/be.json +++ b/assets/translations/be.json @@ -244,12 +244,8 @@ }, "more_page": { "configuration_wizard": "Майстар наладкі", - "application_settings": "Налады праграмы", - "about_project": "Аб праекце SelfPrivacy", - "about_application": "Аб праграме", "onboarding": "Прівітанне", - "create_ssh_key": "SSH ключы адміністратара", - "console": "Кансоль" + "create_ssh_key": "SSH ключы адміністратара" }, "about_application_page": { "application_version_text": "Версія праграмы {}", @@ -393,9 +389,6 @@ "waiting": "Чакаем ініцыялізацыі…", "copy": "Капіяваць" }, - "about_us_page": { - "title": "Аб праекце SelfPrivacy" - }, "resource_chart": { "month": "Месяц", "day": "Дзень", diff --git a/assets/translations/cs.json b/assets/translations/cs.json index a82d7a3b..ca20cf60 100644 --- a/assets/translations/cs.json +++ b/assets/translations/cs.json @@ -43,11 +43,7 @@ "application_version_text": "Verze aplikace {}" }, "more_page": { - "about_project": "O nás", - "about_application": "O příloze", "onboarding": "Pozdravy", - "console": "Konzole", - "application_settings": "Nastavení aplikace", "configuration_wizard": "Průvodce nastavením", "create_ssh_key": "Superuživatelské klíče SSH" }, @@ -205,9 +201,6 @@ "select_provider_payment_text_cloudflare": "Bankovní karty", "connect_to_dns_provider_text": "Pomocí rozhraní token API nakonfiguruje aplikace SelfPrivacy záznamy DNS" }, - "about_us_page": { - "title": "O nás" - }, "users": { "no_ssh_notice": "Pro tohoto uživatele jsou vytvořeny pouze účty e-mailu a SSH. Jednotné přihlašování pro všechny služby se chystá brzy.", "add_new_user": "Přidání prvního uživatele", diff --git a/assets/translations/de.json b/assets/translations/de.json index 2e4eb195..c4593e06 100644 --- a/assets/translations/de.json +++ b/assets/translations/de.json @@ -40,21 +40,14 @@ }, "more_page": { "configuration_wizard": "Setup-Assistent", - "about_project": "Über uns", - "about_application": "Über", "onboarding": "Onboarding", - "create_ssh_key": "Superuser SSH Schlüssel", - "console": "Konsole", - "application_settings": "Anwendungseinstellungen" + "create_ssh_key": "Superuser SSH Schlüssel" }, "console_page": { "title": "Konsole", "waiting": "Warten auf Initialisierung…", "copy": "Kopieren" }, - "about_us_page": { - "title": "Über uns" - }, "about_application_page": { "title": "Über", "application_version_text": "Anwendungsversion {}", diff --git a/assets/translations/es.json b/assets/translations/es.json index 54d11a45..4d2b1d31 100644 --- a/assets/translations/es.json +++ b/assets/translations/es.json @@ -81,21 +81,14 @@ }, "more_page": { "configuration_wizard": "Asistente de configuración", - "about_project": "Sobre nosotros", - "about_application": "Sobre", "onboarding": "Incorporación", - "create_ssh_key": "Claves SSH de superusuario", - "console": "Consola", - "application_settings": "Ajustes de la aplicación" + "create_ssh_key": "Claves SSH de superusuario" }, "console_page": { "title": "Consola", "waiting": "Esperando la inicialización…", "copy": "Copiar" }, - "about_us_page": { - "title": "Sobre nosotros" - }, "server": { "reboot_after_upgrade_hint": "Reinicio sin aviso después de aplicar cambios en el servidor", "card_title": "Servidor", diff --git a/assets/translations/et.json b/assets/translations/et.json index d200cf33..910fcb95 100644 --- a/assets/translations/et.json +++ b/assets/translations/et.json @@ -106,21 +106,14 @@ }, "more_page": { "configuration_wizard": "Seadistusviisard", - "about_project": "Meist", - "about_application": "Teave", "onboarding": "Sissejuhatus", - "create_ssh_key": "Superkasutaja SSH võtmed", - "console": "Konsool", - "application_settings": "Rakenduse seaded" + "create_ssh_key": "Superkasutaja SSH võtmed" }, "console_page": { "title": "Konsool", "waiting": "Ootab initsialiseerimist…", "copy": "Kopeeri" }, - "about_us_page": { - "title": "Meist" - }, "about_application_page": { "title": "Teave", "application_version_text": "Rakenduse versioon {}", diff --git a/assets/translations/fr.json b/assets/translations/fr.json index f34e5a8e..5c3d016a 100644 --- a/assets/translations/fr.json +++ b/assets/translations/fr.json @@ -39,12 +39,8 @@ "copied_to_clipboard": "Copié dans le presse-papier !" }, "more_page": { - "about_application": "À propos", "create_ssh_key": "Clés SSH du super utilisateur", - "console": "Console", - "application_settings": "Paramètres de l'application", "configuration_wizard": "Assistant de configuration", - "about_project": "À propos de nous", "onboarding": "Embarquement" }, "console_page": { @@ -52,9 +48,6 @@ "waiting": "En attente de l'initialisation…", "copy": "Copier" }, - "about_us_page": { - "title": "À propos de nous" - }, "about_application_page": { "title": "À propos", "privacy_policy": "Politique de confidentialité", diff --git a/assets/translations/he.json b/assets/translations/he.json index 7b7d971e..3b49c778 100644 --- a/assets/translations/he.json +++ b/assets/translations/he.json @@ -2,12 +2,8 @@ "test": "he-test", "locale": "he", "more_page": { - "application_settings": "הגדרות יישום", "configuration_wizard": "אשף הקמה", - "about_project": "עלינו", - "about_application": "על אודות", "create_ssh_key": "מפתחות SSH למשתמשי על", - "console": "מסוף", "onboarding": "קבלת פנים" }, "basis": { @@ -85,9 +81,6 @@ "waiting": "בהמתנה לאתחול…", "copy": "העתקה" }, - "about_us_page": { - "title": "עלינו" - }, "application_settings": { "title": "הגדרות יישום", "system_dark_theme_title": "ערכת העיצוב כברירת המחדל של המערכת", diff --git a/assets/translations/lv.json b/assets/translations/lv.json index bac9a852..2951a070 100644 --- a/assets/translations/lv.json +++ b/assets/translations/lv.json @@ -37,11 +37,7 @@ }, "more_page": { "configuration_wizard": "Iestatīšanas vednis", - "about_project": "Par mums", - "about_application": "Par", "onboarding": "Pievienošanās", - "console": "Konsole", - "application_settings": "Aplikācijas iestatījumi", "create_ssh_key": "Superlietotāja SSH atslēgas" }, "console_page": { @@ -49,9 +45,6 @@ "copy": "Kopēt", "waiting": "Gaida inicializatīnu…" }, - "about_us_page": { - "title": "Par mums" - }, "about_application_page": { "title": "Par", "application_version_text": "Aplikācijas versija {}", @@ -214,4 +207,4 @@ "not_ready_card": { "in_menu": "Serveris vēl nav iestatīts. Lūdzu, pabeidziet iestatīšanu, izmantojot iestatīšanas vedni, lai turpinātu darbu." } -} \ No newline at end of file +} diff --git a/assets/translations/pl.json b/assets/translations/pl.json index 45df32b9..d80f15a8 100644 --- a/assets/translations/pl.json +++ b/assets/translations/pl.json @@ -39,12 +39,8 @@ "test": "pl-test", "locale": "pl", "more_page": { - "about_project": "O projekcie \"SelfPrivacy\"", - "about_application": "O aplikacji", "create_ssh_key": "SSH klucze administratora", - "console": "Konsola", "configuration_wizard": "Kreator konfiguracji", - "application_settings": "Ustawienia aplikacji", "onboarding": "Witamy" }, "console_page": { @@ -52,9 +48,6 @@ "waiting": "Oczekiwanie na inicjalizację…", "copy": "Kopia" }, - "about_us_page": { - "title": "O projekcie \"SelfPrivacy\"" - }, "about_application_page": { "title": "O aplikacji", "application_version_text": "Wersja aplikacji {}", diff --git a/assets/translations/ru.json b/assets/translations/ru.json index 0b413bdb..ddebe7c1 100644 --- a/assets/translations/ru.json +++ b/assets/translations/ru.json @@ -40,21 +40,14 @@ }, "more_page": { "configuration_wizard": "Мастер настройки", - "about_project": "О проекте SelfPrivacy", - "about_application": "О приложении", "onboarding": "Приветствие", - "console": "Консоль", - "create_ssh_key": "SSH ключи администратора", - "application_settings": "Настройки приложения" + "create_ssh_key": "SSH ключи администратора" }, "console_page": { "title": "Консоль", "waiting": "Ждём инициализации…", "copy": "Копировать" }, - "about_us_page": { - "title": "О проекте SelfPrivacy" - }, "about_application_page": { "title": "О приложении", "application_version_text": "Версия приложения {}", diff --git a/assets/translations/sk.json b/assets/translations/sk.json index 7d490a9b..25cd65ad 100644 --- a/assets/translations/sk.json +++ b/assets/translations/sk.json @@ -88,10 +88,6 @@ }, "more_page": { "configuration_wizard": "Sprievodca nastavením", - "about_project": "O nás", - "about_application": "O apke", - "console": "Konzola", - "application_settings": "Nastavenia aplikácie", "onboarding": "Vitajte", "create_ssh_key": "SSH kľúče superužívateľa" }, @@ -100,9 +96,6 @@ "waiting": "Čakáme na inicializáciu…", "copy": "Kopírovať" }, - "about_us_page": { - "title": "O nás" - }, "about_application_page": { "title": "O apke", "application_version_text": "Verzia aplikácie {}", diff --git a/assets/translations/sl.json b/assets/translations/sl.json index f8250745..7ddc7457 100644 --- a/assets/translations/sl.json +++ b/assets/translations/sl.json @@ -37,11 +37,7 @@ "alert": "Opozorilo" }, "more_page": { - "about_application": "O prilogi", - "about_project": "O storitvi SelfPrivacy", "onboarding": "Pozdravi", - "console": "Konzola", - "application_settings": "Nastavitve aplikacije", "create_ssh_key": "Superuporabniški ključi SSH", "configuration_wizard": "Pomočnik za nastavitev" }, @@ -50,9 +46,6 @@ "waiting": "Čakanje na inicializacijo…", "copy": "Kopiraj" }, - "about_us_page": { - "title": "O storitvi SelfPrivacy" - }, "about_application_page": { "title": "O dodatku", "api_version_text": "Različica API strežnika {}", @@ -252,4 +245,4 @@ "title": "VPN Strežnik", "subtitle": "Zasebni strežnik VPN" } -} \ No newline at end of file +} diff --git a/assets/translations/th.json b/assets/translations/th.json index b50526bf..fda84eba 100644 --- a/assets/translations/th.json +++ b/assets/translations/th.json @@ -38,14 +38,7 @@ "more_page": { "configuration_wizard": "การติดตั้งอย่างง่าย", "create_ssh_key": "กุญแจ SSH ของผู้ใช้ระดับสูงสุด", - "about_project": "เกี่ยวกับพวกเรา", - "about_application": "เกี่ยวกับ", - "onboarding": "ออนบอร์ด", - "console": "คอนโซล", - "application_settings": "การตั้งค่าของแอพลิเคชั่น" - }, - "about_us_page": { - "title": "เกี่ยวกับพวกเรา" + "onboarding": "ออนบอร์ด" }, "about_application_page": { "api_version_text": "API เซิฟเวอร์เวอร์ชั้น {}", diff --git a/assets/translations/uk.json b/assets/translations/uk.json index cd551050..ff0b74c6 100644 --- a/assets/translations/uk.json +++ b/assets/translations/uk.json @@ -63,12 +63,8 @@ "input_label": "Публічний ED25519, ECDSA або RSA ключ" }, "more_page": { - "about_project": "Про нас", "create_ssh_key": "SSH-ключі суперкористовача", - "console": "Консоль", - "application_settings": "Налаштування додатка", "configuration_wizard": "Майстер установки", - "about_application": "Про нас", "onboarding": "Адаптація" }, "console_page": { @@ -76,9 +72,6 @@ "waiting": "Очікування ініціалізації…", "copy": "Copie" }, - "about_us_page": { - "title": "Про нас" - }, "about_application_page": { "application_version_text": "Версія додатку {}", "api_version_text": "Версія API сервера {}", From a9ee135241e1a4471ea1ebb629a4dfc83424af75 Mon Sep 17 00:00:00 2001 From: Dmitri B Date: Sat, 24 Feb 2024 09:01:03 +0000 Subject: [PATCH 30/75] Translated using Weblate (Estonian) Currently translated at 100.0% (546 of 546 strings) Translation: SelfPrivacy/SelfPrivacy App Translate-URL: http://weblate.selfprivacy.org/projects/selfprivacy/selfprivacy-app/et/ --- assets/translations/et.json | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/assets/translations/et.json b/assets/translations/et.json index 910fcb95..0bd68f0d 100644 --- a/assets/translations/et.json +++ b/assets/translations/et.json @@ -102,7 +102,8 @@ "continue": "Jätka", "alert": "Häire", "copied_to_clipboard": "Kopeeritud lõikelauale!", - "please_connect": "Palun ühendage oma server, domeen ja DNS teenuse pakkuja, et alustada!" + "please_connect": "Palun ühendage oma server, domeen ja DNS teenuse pakkuja, et alustada!", + "network_error": "Võrgu viga" }, "more_page": { "configuration_wizard": "Seadistusviisard", @@ -408,7 +409,11 @@ "extending_volume_modal_description": "Uuendage {} plaanile {} kuus.", "size": "Suurus", "price": "Hind", - "data_migration_title": "Andmete migratsioon" + "data_migration_title": "Andmete migratsioon", + "extending_volume_started": "Mahtu laiendamine algas", + "extending_volume_provider_waiting": "Teenusepakkuja maht on muudetud, ootame 10 sekundit…", + "extending_volume_server_waiting": "Serveri maht on muudetud, ootame 20 sekundit…", + "extending_volume_rebooting": "Serveri taaskäivitamine…" }, "service_page": { "nothing_here": "Midagi siin", @@ -503,7 +508,8 @@ "could_not_add_ssh_key": "SSH võtme lisamine ebaõnnestus", "username_rule": "Kasutajanimi võib sisaldada ainult väiketähti, numbreid ja allkriipse, ei tohi alata numbriga", "email_login": "E-posti sisselogimine", - "no_ssh_notice": "Sellele kasutajale luuakse ainult e-posti ja SSH kontod. Ühe sisselogimise lahendus kõikidele teenustele on varsti saadaval." + "no_ssh_notice": "Sellele kasutajale luuakse ainult e-posti ja SSH kontod. Ühe sisselogimise lahendus kõikidele teenustele on varsti saadaval.", + "user_already_exists": "Sama nimega kasutaja on juba olemas" }, "devices": { "main_screen": { @@ -572,7 +578,13 @@ "run_jobs": "Käivita tööd", "reboot_success": "Server taaskäivitub", "reboot_failed": "Serverit ei õnnestunud taaskäivitada. Kontrollige rakenduse logisid.", - "config_pull_failed": "Konfiguratsiooni värskendust ei õnnestunud alla laadida. Tarkvara värskendamine algas siiski." + "config_pull_failed": "Konfiguratsiooni värskendust ei õnnestunud alla laadida. Tarkvara värskendamine algas siiski.", + "job_postponed": "Töö lisatud, kuid saate selle käivitada pärast praeguste tööde lõppu", + "job_removed": "Töö eemaldatud", + "rebuild_system": "Süsteemi ümberkorraldamine", + "start_server_upgrade": "Serveri värskenduse käivitamine", + "change_auto_upgrade_settings": "Automaatse värskenduse seadete muutmine", + "change_server_timezone": "Serveri ajavööndi muutmine" }, "validations": { "required": "Nõutud", From a59c3841064cc914bb4c2262dcfa22f04989a710 Mon Sep 17 00:00:00 2001 From: Meko Date: Tue, 27 Feb 2024 20:53:26 +0000 Subject: [PATCH 31/75] Translated using Weblate (Ukrainian) Currently translated at 89.3% (488 of 546 strings) Translation: SelfPrivacy/SelfPrivacy App Translate-URL: http://weblate.selfprivacy.org/projects/selfprivacy/selfprivacy-app/uk/ --- assets/translations/uk.json | 47 ++++++++++++++++++++++++++++++++----- 1 file changed, 41 insertions(+), 6 deletions(-) diff --git a/assets/translations/uk.json b/assets/translations/uk.json index ff0b74c6..1d49c832 100644 --- a/assets/translations/uk.json +++ b/assets/translations/uk.json @@ -35,7 +35,8 @@ "connect": "Підключіться", "app_name": "SelfPrivacy", "copied_to_clipboard": "Скопійовано в буфер обміну!", - "please_connect": "Будь ласка, підключіть свій сервер, домен та провайдера DNS, щоб зануритися!" + "please_connect": "Будь ласка, підключіть свій сервер, домен та провайдера DNS, щоб зануритися!", + "network_error": "Помилка мережі" }, "locale": "ua", "application_settings": { @@ -145,7 +146,20 @@ "one_more_restart": "Ще один перезапуск, щоб застосувати сертифікати безпеки.", "create_master_account": "Створити внутрішній рахунок", "finish": "Усе ініціалізовано", - "checks": "Перевірка була завершена\n{} з {}" + "checks": "Перевірка була завершена\n{} з {}", + "dns_provider_bad_key_error": "Невірний ключ API", + "steps": { + "dns_provider": "DNS провайдер", + "dns_setup": "Налаштування DNS", + "server_type": "Тип сервера", + "hosting": "Хостинг", + "domain": "Домен", + "server": "Сервер", + "nixos_installation": "Встановлення NixOS", + "server_reboot": "Перезапуск сервера", + "final_checks": "Фінальні перевірки" + }, + "select_provider_price_free": "Безкоштовно" }, "recovering": { "recovery_main_header": "З’ єднатися з існуючим сервером", @@ -165,7 +179,7 @@ "fallback_select_description": "Що у вас є? Виберіть перший доступний варіант:", "fallback_select_token_copy": "Копія токена автентифікації з іншої версії застосунку.", "fallback_select_root_ssh": "Root SSH доступ до сервера.", - "fallback_select_provider_console": "Доступ до серверної консолі мого продiвера.", + "fallback_select_provider_console": "Доступ до серверної консолі мого провайдера.", "authorization_failed": "Не можу авторизуватись за цим ключем", "fallback_select_provider_console_hint": "Наприклад: Hetzner.", "provider_connected": "Підключіться до {}", @@ -365,7 +379,9 @@ "status_ok": "Використання диска нормальне", "extending_volume_title": "Збільшення обсягу", "extending_volume_description": "Зміна обсягу дозволить зберігати більше даних на вашому сервері без розширення сервера. Обсяг може бути тільки збільшеним: зменшення неможливе.", - "data_migration_notice": "Під час переносу всі послуги будуть вимкнені." + "data_migration_notice": "Під час переносу всі послуги будуть вимкнені.", + "price": "Ціна", + "extending_volume_rebooting": "Перезапуск сервера…" }, "not_ready_card": { "in_menu": "Сервер ще не налаштовано. Будь ласка, завершіть налаштування за допомогою майстра налаштування для подальшої роботи." @@ -529,16 +545,35 @@ "delete_ssh_key": "Видалити SSH-ключ для {}", "server_jobs": "Задачі на сервері", "reset_user_password": "Скинути пароль користувача", - "generic_error": "Не вдалося підключитись до сервера!" + "generic_error": "Не вдалося підключитись до сервера!", + "start_server_upgrade": "Запуск оновлення сервера", + "job_removed": "Завдання видалено", + "change_server_timezone": "Змінити часовий пояс сервера" }, "validations": { "required": "Потрібно", "already_exist": "Вже існує", "invalid_format": "Неприпустимий формат", - "invalid_format_password": "Не повинен містити порожніх символів", + "invalid_format_password": "Пароль не має містити пробілів", "length_longer": "Довжина [] повинна бути коротшою або дорівнює {}", "invalid_format_ssh": "Повинен відповідати формату ключа SSH", "root_name": "Не може бути 'root'", "length_not_equal": "Довжина [], має бути {}" + }, + "developer_settings": { + "allow_ssh_key_at_setup": "Дозволити налаштовувати ключі SSH користувача root під час установки", + "allow_ssh_key_at_setup_description": "Кнопка для додання ключа з'явиться на екрані підтвердження.", + "add_root_ssh_key": "Додати ключ SSH для root", + "root_ssh_key_added": "Ключ SSH для root встановлено і буде застосовано", + "ignore_tls": "Не перевіряти TLS сертифікати", + "title": "Налаштування розробника", + "subtitle": "Дані налаштування призначені лише для налагодження. Не змінюйте їх, якщо ви точно не знаєте, що робите.", + "server_setup": "Майстер встановлення сервера", + "use_staging_acme": "Використання тестового ACME сервера", + "use_staging_acme_description": "Використовується при налаштуванні нового сервера.", + "ignore_tls_description": "Програма не буде перевіряти TLS сертифікати при підключенні до сервера." + }, + "support": { + "title": "Підтримка SelfPrivacy" } } From 60359eea03ea77bc46112ff3890eb6351e57234f Mon Sep 17 00:00:00 2001 From: TabithiS Date: Thu, 29 Feb 2024 14:39:33 +0000 Subject: [PATCH 32/75] Translated using Weblate (Kazakh) Currently translated at 20.9% (118 of 564 strings) Translation: SelfPrivacy/SelfPrivacy App Translate-URL: http://weblate.selfprivacy.org/projects/selfprivacy/selfprivacy-app/kk/ --- assets/translations/kk.json | 123 +++++++++++++++++++++++++++++++++++- 1 file changed, 121 insertions(+), 2 deletions(-) diff --git a/assets/translations/kk.json b/assets/translations/kk.json index 47420b69..60c7dfec 100644 --- a/assets/translations/kk.json +++ b/assets/translations/kk.json @@ -1,5 +1,5 @@ { - "test": "сынақ", + "test": "kz-test", "locale": "kz", "basis": { "app_name": "SelfPrivacy", @@ -14,6 +14,125 @@ "password": "Құпия сөз", "create": "Жаңаны қосу", "confirmation": "Растау", - "users": "Пайдаланушылар" + "users": "Пайдаланушылар", + "network_error": "Желі қатесі", + "username": "Пайдаланушы аты", + "later": "Кейінірек", + "reset": "Қалпына келтіру", + "loading": "Жүктеу…", + "connect_to_existing": "Бар болғанға қосылу!", + "wait": "Күте тұрыңыз", + "remove": "Аластау", + "apply": "Қолдану", + "no_data": "Деректер жоқ", + "done": "Аяқталды", + "continue": "Жалғастыру", + "alert": "Ескерту", + "details": "Толығырақ ақпарат", + "saving": "Сақтау…", + "services": "Қызметтер", + "cancel": "Бас тарту", + "delete": "Жою", + "close": "Жабу", + "connect": "Қосылу", + "domain": "Домен", + "copied_to_clipboard": "Буферге көшірілді!", + "please_connect": "Қосылуыңызды сұраймыз!" + }, + "more_page": { + "onboarding": "Қосылу процессі", + "create_ssh_key": "SSH кілтін құру", + "configuration_wizard": "Конфигурация көмекшісі" + }, + "ssh": { + "create": "Жасау", + "title": "SSH", + "delete": "SSH кілтін жою", + "delete_confirm_question": "Жоюды растау сұрағы?", + "root_subtitle": "Root сипаттамасы.", + "subtitle_with_keys": "Кілттері бар", + "subtitle_without_keys": "Кілтсіз", + "no_key_name": "Кілт атауы жоқ", + "root_title": "Root атауы", + "input_label": "Енгізу жолағы" + }, + "onboarding": { + "page2_dns_provider_title": "2-бет DNS провайдер аталымы", + "page2_dns_provider_text": "Интернетте болу үшін домен қажет. Домендің сайтіңізге бағытына қарайтында, үзінді DNS-сервер қажет. Біз сізден қолайлы реттеудің арасынан бірін сайлауығымызды ұсынамыз, барлық жазбаларды автоматты түрде орнатамыз. Оларды қолмен қолдауға алу керек пе? Сол тұра мүмкін.", + "page2_backup_provider_text": "Серверде неғиздік не іске меселе келе ме? Хакерлік хампшылығы, қызмет қабылдауды тыйым салу немесе қоршаған жадылықтар? Сіздің деректеріңіз басқа орында қадамдық сайтты көшетуші қолжетімділік болады, қолдаушы жеделдіктеме жасайтын жерде сақталады. Олардың барлығы үнемі шифрланады, сондықтан серверіңізді көбейтіп алуға болады.", + "page2_title": "Бағдарламаны баптау 2-бет", + "page2_server_provider_title": "Сервер провайдерінің атауы", + "page1_text": "Бағдарламаны баптау 1-бет мәтіні.", + "page2_server_provider_text": "Сервер-провайдер серверіңізді оғанға өз дата-мерзімінде қызмет көрсетеді. SelfPrivacy онымен автоматты түрде байланыс байланған және серверді сізге орнатады.", + "page2_text": "SelfPrivacy тек сіздің таңдаған сервистік ұсыныстармен жұмыс істейді. Сізде тіркелгі жоқ болса, біз оны жасауға көмек көрсетеміз.", + "page1_title": "Бағдарламаны баптау 1-бет", + "page2_backup_provider_title": "2-бет сақтандыру провайдер аталымы" + }, + "about_application_page": { + "title": "Бағдарлама жайлы", + "versions": "Нұсқалары", + "application_version_text": "Бағдарлама нұсқасы", + "api_version_text": "API нұсқасы", + "open_source_licenses": "Опенсорс лицензиялары", + "links": "Сілтемелер", + "website": "Вебсайт", + "documentation": "Құжаттама", + "matrix_channel": "Matrix арнасы", + "telegram_channel": "Telegram арнасы", + "get_support": "Қолдау алу", + "matrix_support_chat": "Matrix қолдау чаты", + "telegram_support_chat": "Telegram қолдау чаты", + "email_support": "Электрондық пошта арқылы қолдау", + "contribute": "Үлес қосу", + "source_code": "Бастапқы код", + "bug_report": "Қате туралы хабарлау", + "matrix_contributors_chat": "Үлес қосушылардың Matrix чаты", + "help_translate": "Аудармаға көмектесу", + "telegram_contributors_chat": "Үлес қосушылардың Telegram чаты", + "privacy_policy": "Құпиялылық саясаты", + "bug_report_subtitle": "Қате туралы егжей-тегжейлі." + }, + "application_settings": { + "dangerous_settings": "Қауіпті параметрлер", + "reset_config_title": "Конфигурацияны қалпына келтіру", + "title": "Қосымша параметрлері", + "system_dark_theme_title": "Системалық қараңғы тақырып", + "system_dark_theme_description": "Системалық қараңғы тақырып сипаттамасы", + "dark_theme_title": "Қараңғы тақырып", + "dark_theme_description": "Қараңғы тақырып сипаттамасы", + "delete_server_title": "Серверді жою", + "reset_config_description": "Конфигурацияны қалпына келтіру сипаттамасы.", + "delete_server_description": "Серверді жою сипаттамасы." + }, + "resource_chart": { + "month": "Ай", + "day": "Күн", + "hour": "Сағат", + "cpu_title": "Процессор атауы", + "network_title": "Желі атауы", + "in": "Кіру", + "out": "Шығу" + }, + "server": { + "card_title": "Сервер карточкасы", + "server_id": "Сервер идентификаторы", + "status": "Күй", + "cpu": "CPU", + "ram": "RAM", + "description": "Сипаттама", + "general_information": "Жалпы ақпарат", + "allow_autoupgrade": "Автоматты жаңартуға рұқсат етілген", + "resource_usage": "Ресурс пайдалануы", + "allow_autoupgrade_hint": "Автоматты жаңартуға рұқсат етілген сілтеме", + "reboot_after_upgrade": "Жаңартудан кейін қайта жүктеу", + "reboot_after_upgrade_hint": "Жаңартудан кейін қайта жүктеу түсініктемесі", + "server_timezone": "Сервер уақыты белдеуі", + "select_timezone": "Уақыт белдеуін таңдау", + "timezone_search_bar": "Уақыт белдеуі іздеу жолағы" + }, + "console_page": { + "title": "Консоль", + "waiting": "Күтуде…", + "copy": "Көшіру" } } From 7caa84002cb592ca1fc20bbd08cb98f4b55bf4a4 Mon Sep 17 00:00:00 2001 From: Inex Code Date: Sun, 3 Mar 2024 14:37:55 +0000 Subject: [PATCH 33/75] Added translation using Weblate (Arabic) --- assets/translations/ar.json | 1 + 1 file changed, 1 insertion(+) create mode 100644 assets/translations/ar.json diff --git a/assets/translations/ar.json b/assets/translations/ar.json new file mode 100644 index 00000000..0967ef42 --- /dev/null +++ b/assets/translations/ar.json @@ -0,0 +1 @@ +{} From 21c24d7492d6b0a62956c791fb0e57554d2872e9 Mon Sep 17 00:00:00 2001 From: Inex Code Date: Sun, 3 Mar 2024 14:37:55 +0000 Subject: [PATCH 34/75] Added translation using Weblate (Chinese (Simplified)) --- assets/translations/zh_Hans.json | 1 + 1 file changed, 1 insertion(+) create mode 100644 assets/translations/zh_Hans.json diff --git a/assets/translations/zh_Hans.json b/assets/translations/zh_Hans.json new file mode 100644 index 00000000..0967ef42 --- /dev/null +++ b/assets/translations/zh_Hans.json @@ -0,0 +1 @@ +{} From c9f031fc4187f10003d02f5fa20640aba5b1795f Mon Sep 17 00:00:00 2001 From: Inex Code Date: Sun, 3 Mar 2024 14:37:55 +0000 Subject: [PATCH 35/75] Added translation using Weblate (Chinese (Traditional)) --- assets/translations/zh_Hant.json | 1 + 1 file changed, 1 insertion(+) create mode 100644 assets/translations/zh_Hant.json diff --git a/assets/translations/zh_Hant.json b/assets/translations/zh_Hant.json new file mode 100644 index 00000000..0967ef42 --- /dev/null +++ b/assets/translations/zh_Hant.json @@ -0,0 +1 @@ +{} From 3b28c31a9f5ea02d6101e078a987f463b5a798bd Mon Sep 17 00:00:00 2001 From: Inex Code Date: Sun, 3 Mar 2024 14:48:58 +0000 Subject: [PATCH 36/75] Translated using Weblate (Russian) Currently translated at 100.0% (546 of 546 strings) Translation: SelfPrivacy/SelfPrivacy App Translate-URL: http://weblate.selfprivacy.org/projects/selfprivacy/selfprivacy-app/ru/ --- assets/translations/ru.json | 29 +++++++++++++++++++++-------- 1 file changed, 21 insertions(+), 8 deletions(-) diff --git a/assets/translations/ru.json b/assets/translations/ru.json index ddebe7c1..cb384ead 100644 --- a/assets/translations/ru.json +++ b/assets/translations/ru.json @@ -36,7 +36,8 @@ "alert": "Уведомление", "copied_to_clipboard": "Скопировано в буфер обмена!", "app_name": "SelfPrivacy", - "please_connect": "Настройте ваш сервер и подключите домен для полного погружения!" + "please_connect": "Настройте ваш сервер и подключите домен для полного погружения!", + "network_error": "Ошибка сети" }, "more_page": { "configuration_wizard": "Мастер настройки", @@ -50,8 +51,8 @@ }, "about_application_page": { "title": "О приложении", - "application_version_text": "Версия приложения {}", - "api_version_text": "Версия API сервера {}", + "application_version_text": "Версия приложения", + "api_version_text": "Версия API сервера", "privacy_policy": "Политика конфиденциальности" }, "application_settings": { @@ -155,7 +156,8 @@ "services_subtitle": "Записи типа “A” необходимые для работы сервисов.", "email_title": "Электронная почта", "email_subtitle": "Записи необходимые для безопасного обмена электронной почтой.", - "update_list": "Обновить список" + "update_list": "Обновить список", + "domain_validation_failure": "Мы не можем установить соединение с вашим доменом!" }, "backup": { "card_title": "Резервное копирование", @@ -304,7 +306,11 @@ "migration_process": "Мигрируем…", "migration_done": "Завершить", "price": "Цена", - "extending_volume_modal_description": "Хранилище будет расширено до {}, новая стоимость {} в месяц." + "extending_volume_modal_description": "Хранилище будет расширено до {}, новая стоимость {} в месяц.", + "extending_volume_started": "Расширение хранилища началось", + "extending_volume_provider_waiting": "Хранилище расширено со стороны провайдера, ждём 10 секунд…", + "extending_volume_server_waiting": "Хранилище расширено со стороны сервера, ждём 20 секунд…", + "extending_volume_rebooting": "Перезагружаем сервер…" }, "not_ready_card": { "in_menu": "Сервер ещё не настроен, воспользуйтесь мастером подключения." @@ -382,7 +388,8 @@ "username_rule": "Имя может содержать только маленькие латинские буквы, цифры, подчёркивания, не может начинаться с цифр", "email_login": "Авторизация по Email", "no_ssh_notice": "Для этого пользователя созданы только SSH и Email аккаунт. Единая авторизация для всех сервисов ещё не реализована.", - "details_title": "Пользователь" + "details_title": "Пользователь", + "user_already_exists": "Пользователь с таким именем уже существует" }, "initializing": { "dns_provider_description": "Это позволит связать ваш домен с IP адресом:", @@ -471,7 +478,7 @@ "generic_error": "Ошибка проведения операции, попробуйте ещё раз.", "recovery_main_header": "Подключение к существующему серверу", "domain_recovery_description": "Введите домен, по которому вы хотите получить доступ к серверу:", - "domain_recover_placeholder": "Домен", + "domain_recover_placeholder": "Ваш домен", "domain_recover_error": "Не удалось найти сервер с таким доменом", "method_select_description": "Выберите способ входа:", "method_select_other_device": "У меня есть доступ на другом устройстве", @@ -594,7 +601,13 @@ "delete_ssh_key": "Удалить SSH ключ для {}", "server_jobs": "Задачи на сервере", "reset_user_password": "Сбросить пароль пользователя", - "generic_error": "Не удалось подключиться к серверу!" + "generic_error": "Не удалось подключиться к серверу!", + "job_postponed": "Задача добавлена, но вы сможете её запустить после завершения текущих задач", + "change_auto_upgrade_settings": "Изменить настройки автоматических обновлений", + "job_removed": "Задача удалена", + "rebuild_system": "Пересобрать систему", + "start_server_upgrade": "Начать обновление сервера", + "change_server_timezone": "Изменить часовой пояс сервера" }, "validations": { "required": "Обязательное поле", From b3fd65e02de8f28229649933f9e47b576e49ad98 Mon Sep 17 00:00:00 2001 From: Inex Code Date: Sun, 3 Mar 2024 14:41:27 +0000 Subject: [PATCH 37/75] Translated using Weblate (German) Currently translated at 85.1% (465 of 546 strings) Translation: SelfPrivacy/SelfPrivacy App Translate-URL: http://weblate.selfprivacy.org/projects/selfprivacy/selfprivacy-app/de/ --- assets/translations/de.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/assets/translations/de.json b/assets/translations/de.json index c4593e06..1519d35a 100644 --- a/assets/translations/de.json +++ b/assets/translations/de.json @@ -50,8 +50,8 @@ }, "about_application_page": { "title": "Über", - "application_version_text": "Anwendungsversion {}", - "api_version_text": "Server API Version {}", + "application_version_text": "Anwendungsversion", + "api_version_text": "Server API Version", "privacy_policy": "Datenschutzerklärung" }, "application_settings": { From e7634df7c06c35650addc214ba3e58ebdeb061f1 Mon Sep 17 00:00:00 2001 From: Inex Code Date: Sun, 3 Mar 2024 14:40:38 +0000 Subject: [PATCH 38/75] Translated using Weblate (Polish) Currently translated at 86.8% (474 of 546 strings) Translation: SelfPrivacy/SelfPrivacy App Translate-URL: http://weblate.selfprivacy.org/projects/selfprivacy/selfprivacy-app/pl/ --- assets/translations/pl.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/assets/translations/pl.json b/assets/translations/pl.json index d80f15a8..ab0e3a44 100644 --- a/assets/translations/pl.json +++ b/assets/translations/pl.json @@ -50,8 +50,8 @@ }, "about_application_page": { "title": "O aplikacji", - "application_version_text": "Wersja aplikacji {}", - "api_version_text": "Wersja API serwera {}", + "application_version_text": "Wersja aplikacji", + "api_version_text": "Wersja API serwera", "privacy_policy": "Polityka prywatności" }, "application_settings": { From 6c7d3429116e949ba9a16a15be2162ec27dea9df Mon Sep 17 00:00:00 2001 From: Inex Code Date: Sun, 3 Mar 2024 14:41:20 +0000 Subject: [PATCH 39/75] Translated using Weblate (Czech) Currently translated at 76.7% (419 of 546 strings) Translation: SelfPrivacy/SelfPrivacy App Translate-URL: http://weblate.selfprivacy.org/projects/selfprivacy/selfprivacy-app/cs/ --- assets/translations/cs.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/assets/translations/cs.json b/assets/translations/cs.json index ca20cf60..85413e21 100644 --- a/assets/translations/cs.json +++ b/assets/translations/cs.json @@ -39,8 +39,8 @@ "about_application_page": { "title": "O příloze", "privacy_policy": "Zásady ochrany osobních údajů", - "api_version_text": "Verze API serveru {}", - "application_version_text": "Verze aplikace {}" + "api_version_text": "Verze API serveru", + "application_version_text": "Verze aplikace" }, "more_page": { "onboarding": "Pozdravy", From 58697d66d92a3c9d4c65d1a39a2dc08209537cfb Mon Sep 17 00:00:00 2001 From: Inex Code Date: Sun, 3 Mar 2024 14:40:45 +0000 Subject: [PATCH 40/75] Translated using Weblate (Spanish) Currently translated at 17.0% (93 of 546 strings) Translation: SelfPrivacy/SelfPrivacy App Translate-URL: http://weblate.selfprivacy.org/projects/selfprivacy/selfprivacy-app/es/ --- assets/translations/es.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/assets/translations/es.json b/assets/translations/es.json index 4d2b1d31..6927cc68 100644 --- a/assets/translations/es.json +++ b/assets/translations/es.json @@ -63,9 +63,9 @@ "input_label": "Clave pública ED25519, ECDSA o RSA" }, "about_application_page": { - "application_version_text": "Versión de la aplicación {}", + "application_version_text": "Versión de la aplicación", "title": "Sobre", - "api_version_text": "Versión API del servidor {}", + "api_version_text": "Versión API del servidor", "privacy_policy": "Política de privacidad" }, "onboarding": { From c93a98058ba822b72f4712111a992dcbc4933c2c Mon Sep 17 00:00:00 2001 From: Inex Code Date: Sun, 3 Mar 2024 14:40:51 +0000 Subject: [PATCH 41/75] Translated using Weblate (Ukrainian) Currently translated at 89.3% (488 of 546 strings) Translation: SelfPrivacy/SelfPrivacy App Translate-URL: http://weblate.selfprivacy.org/projects/selfprivacy/selfprivacy-app/uk/ --- assets/translations/uk.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/assets/translations/uk.json b/assets/translations/uk.json index 1d49c832..f0f6e6c3 100644 --- a/assets/translations/uk.json +++ b/assets/translations/uk.json @@ -74,8 +74,8 @@ "copy": "Copie" }, "about_application_page": { - "application_version_text": "Версія додатку {}", - "api_version_text": "Версія API сервера {}", + "application_version_text": "Версія додатку", + "api_version_text": "Версія API сервера", "privacy_policy": "Політика конфіденційності", "title": "Про нас" }, From 22323de1d6b267b6ae1fd3e1feb88644f9365eb8 Mon Sep 17 00:00:00 2001 From: Inex Code Date: Sun, 3 Mar 2024 14:40:06 +0000 Subject: [PATCH 42/75] Translated using Weblate (Belarusian) Currently translated at 76.7% (419 of 546 strings) Translation: SelfPrivacy/SelfPrivacy App Translate-URL: http://weblate.selfprivacy.org/projects/selfprivacy/selfprivacy-app/be/ --- assets/translations/be.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/assets/translations/be.json b/assets/translations/be.json index 1d46d250..bfe6d7f4 100644 --- a/assets/translations/be.json +++ b/assets/translations/be.json @@ -248,9 +248,9 @@ "create_ssh_key": "SSH ключы адміністратара" }, "about_application_page": { - "application_version_text": "Версія праграмы {}", + "application_version_text": "Версія праграмы", "title": "Аб праграме", - "api_version_text": "Версія API сервера {}", + "api_version_text": "Версія API сервера", "privacy_policy": "Палітыка прыватнасці" }, "application_settings": { From 261990acc83b4dfe652c53f4a2a2d224afc2772b Mon Sep 17 00:00:00 2001 From: Inex Code Date: Sun, 3 Mar 2024 14:40:16 +0000 Subject: [PATCH 43/75] Translated using Weblate (French) Currently translated at 41.2% (225 of 546 strings) Translation: SelfPrivacy/SelfPrivacy App Translate-URL: http://weblate.selfprivacy.org/projects/selfprivacy/selfprivacy-app/fr/ --- assets/translations/fr.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assets/translations/fr.json b/assets/translations/fr.json index 5c3d016a..5edbc320 100644 --- a/assets/translations/fr.json +++ b/assets/translations/fr.json @@ -51,7 +51,7 @@ "about_application_page": { "title": "À propos", "privacy_policy": "Politique de confidentialité", - "application_version_text": "Version de l'application {}" + "application_version_text": "Version de l'application" }, "application_settings": { "title": "Paramètres de l'application", From 4a99c9955a6453c8de859a789121c96c556a53b8 Mon Sep 17 00:00:00 2001 From: Inex Code Date: Sun, 3 Mar 2024 14:40:41 +0000 Subject: [PATCH 44/75] Translated using Weblate (Slovak) Currently translated at 74.5% (407 of 546 strings) Translation: SelfPrivacy/SelfPrivacy App Translate-URL: http://weblate.selfprivacy.org/projects/selfprivacy/selfprivacy-app/sk/ --- assets/translations/sk.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/assets/translations/sk.json b/assets/translations/sk.json index 25cd65ad..6cf6743f 100644 --- a/assets/translations/sk.json +++ b/assets/translations/sk.json @@ -98,8 +98,8 @@ }, "about_application_page": { "title": "O apke", - "application_version_text": "Verzia aplikácie {}", - "api_version_text": "Verzia servera {}", + "application_version_text": "Verzia aplikácie", + "api_version_text": "Verzia servera", "privacy_policy": "Zásady ochrany osobných údajov" }, "application_settings": { From 336193b531b61b4c81c22344a2de7706ef9e3046 Mon Sep 17 00:00:00 2001 From: Inex Code Date: Sun, 3 Mar 2024 14:41:55 +0000 Subject: [PATCH 45/75] Translated using Weblate (Thai) Currently translated at 41.9% (229 of 546 strings) Translation: SelfPrivacy/SelfPrivacy App Translate-URL: http://weblate.selfprivacy.org/projects/selfprivacy/selfprivacy-app/th/ --- assets/translations/th.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/assets/translations/th.json b/assets/translations/th.json index fda84eba..c5a2d76a 100644 --- a/assets/translations/th.json +++ b/assets/translations/th.json @@ -41,9 +41,9 @@ "onboarding": "ออนบอร์ด" }, "about_application_page": { - "api_version_text": "API เซิฟเวอร์เวอร์ชั้น {}", + "api_version_text": "API เซิฟเวอร์เวอร์ชั้น", "title": "เกี่ยวกับ", - "application_version_text": "แอปพลิเคชั่น เวอร์ชั่น {}", + "application_version_text": "แอปพลิเคชั่น เวอร์ชั่น", "privacy_policy": "นโยบายความเป็นส่วนตัว" }, "application_settings": { From 5394c06d4690a4ed0481307a794858e4ff3f4c47 Mon Sep 17 00:00:00 2001 From: Inex Code Date: Sun, 3 Mar 2024 14:41:14 +0000 Subject: [PATCH 46/75] Translated using Weblate (Azerbaijani) Currently translated at 74.5% (407 of 546 strings) Translation: SelfPrivacy/SelfPrivacy App Translate-URL: http://weblate.selfprivacy.org/projects/selfprivacy/selfprivacy-app/az/ --- assets/translations/az.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/assets/translations/az.json b/assets/translations/az.json index b688d121..07e66184 100644 --- a/assets/translations/az.json +++ b/assets/translations/az.json @@ -47,8 +47,8 @@ "copy": "Kopyalayın" }, "about_application_page": { - "application_version_text": "Tətbiq versiyası {}", - "api_version_text": "Server API versiyası {}", + "application_version_text": "Tətbiq versiyası", + "api_version_text": "Server API versiyası", "privacy_policy": "Gizlilik Siyasəti", "title": "Tətbiq haqqında" }, From 5b1e0a5ceae8b8f9a3e2e01926b8014890b1c080 Mon Sep 17 00:00:00 2001 From: Inex Code Date: Sun, 3 Mar 2024 14:41:48 +0000 Subject: [PATCH 47/75] Translated using Weblate (Slovenian) Currently translated at 35.5% (194 of 546 strings) Translation: SelfPrivacy/SelfPrivacy App Translate-URL: http://weblate.selfprivacy.org/projects/selfprivacy/selfprivacy-app/sl/ --- assets/translations/sl.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/assets/translations/sl.json b/assets/translations/sl.json index 7ddc7457..36933e7f 100644 --- a/assets/translations/sl.json +++ b/assets/translations/sl.json @@ -48,9 +48,9 @@ }, "about_application_page": { "title": "O dodatku", - "api_version_text": "Različica API strežnika {}", + "api_version_text": "Različica API strežnika", "privacy_policy": "Pravilnik o zasebnosti", - "application_version_text": "Različica aplikacije {}" + "application_version_text": "Različica aplikacije" }, "application_settings": { "dark_theme_title": "Temna tema", From 66a59b7a9db184464620c6c6dca70246e872b43a Mon Sep 17 00:00:00 2001 From: Inex Code Date: Sun, 3 Mar 2024 14:40:29 +0000 Subject: [PATCH 48/75] Translated using Weblate (Latvian) Currently translated at 31.1% (170 of 546 strings) Translation: SelfPrivacy/SelfPrivacy App Translate-URL: http://weblate.selfprivacy.org/projects/selfprivacy/selfprivacy-app/lv/ --- assets/translations/lv.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/assets/translations/lv.json b/assets/translations/lv.json index 2951a070..9c07ca8a 100644 --- a/assets/translations/lv.json +++ b/assets/translations/lv.json @@ -47,8 +47,8 @@ }, "about_application_page": { "title": "Par", - "application_version_text": "Aplikācijas versija {}", - "api_version_text": "Servera API versija {}", + "application_version_text": "Aplikācijas versija", + "api_version_text": "Servera API versija", "privacy_policy": "Privātuma politika" }, "application_settings": { From 6e2c2407a468234efb208f148efa90a9f682aaa3 Mon Sep 17 00:00:00 2001 From: Inex Code Date: Sun, 3 Mar 2024 14:40:26 +0000 Subject: [PATCH 49/75] Translated using Weblate (Hebrew) Currently translated at 97.8% (534 of 546 strings) Translation: SelfPrivacy/SelfPrivacy App Translate-URL: http://weblate.selfprivacy.org/projects/selfprivacy/selfprivacy-app/he/ --- assets/translations/he.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/assets/translations/he.json b/assets/translations/he.json index 3b49c778..1d905c80 100644 --- a/assets/translations/he.json +++ b/assets/translations/he.json @@ -46,8 +46,8 @@ "about_application_page": { "privacy_policy": "מדיניות פרטיות", "title": "על אודות", - "application_version_text": "היישום בגרסה {}", - "api_version_text": "גרסת ה־API של השרת היא {}" + "application_version_text": "היישום בגרסה", + "api_version_text": "גרסת ה־API של השרת היא" }, "ssh": { "root_subtitle": "בעלי המפתחות האלו יקבלו גישה מלאה לשרת ויוכלו לעשות איתו כל העולה על רוחם. יש להוסיף רק את המפתחות שלך לשרת.", From 3be041c4b54573cd89eea99f103faff36e95548c Mon Sep 17 00:00:00 2001 From: Inex Code Date: Sun, 3 Mar 2024 14:40:13 +0000 Subject: [PATCH 50/75] Translated using Weblate (Estonian) Currently translated at 100.0% (546 of 546 strings) Translation: SelfPrivacy/SelfPrivacy App Translate-URL: http://weblate.selfprivacy.org/projects/selfprivacy/selfprivacy-app/et/ --- assets/translations/et.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/assets/translations/et.json b/assets/translations/et.json index 0bd68f0d..461f0b9f 100644 --- a/assets/translations/et.json +++ b/assets/translations/et.json @@ -117,8 +117,8 @@ }, "about_application_page": { "title": "Teave", - "application_version_text": "Rakenduse versioon {}", - "api_version_text": "Serveri API versioon {}", + "application_version_text": "Rakenduse versioon", + "api_version_text": "Serveri API versioon", "privacy_policy": "Privaatsuspoliitika" }, "resource_chart": { From e0a3698a515602451694e13e9c60659931fbf0fc Mon Sep 17 00:00:00 2001 From: Deem Alosili Date: Thu, 7 Mar 2024 11:51:35 +0000 Subject: [PATCH 51/75] Translated using Weblate (Arabic) Currently translated at 96.6% (545 of 564 strings) Translation: SelfPrivacy/SelfPrivacy App Translate-URL: http://weblate.selfprivacy.org/projects/selfprivacy/selfprivacy-app/ar/ --- assets/translations/ar.json | 656 +++++++++++++++++++++++++++++++++++- 1 file changed, 655 insertions(+), 1 deletion(-) diff --git a/assets/translations/ar.json b/assets/translations/ar.json index 0967ef42..02d8bf59 100644 --- a/assets/translations/ar.json +++ b/assets/translations/ar.json @@ -1 +1,655 @@ -{} +{ + "vpn": { + "title": "خادم VPN", + "subtitle": "خادم VPN المغلق" + }, + "users": { + "login": "تسجيل الدخول", + "could_not_fetch_description": "من فضلك، قم بتفحُّص اتصال الإنترنت وحاول مرة أخرى", + "no_ssh_notice": "تم إنشاء الإيميل وحسابات SSH فقط لأجل هذا المستخدم. سيتوفر قريباً الدخول الموحد لجميع الخدمات.", + "new_user_info_note": "سيمنح المستخدم الجديد سلاسة للوصول لكافة الخدمات بشكل تلقائي", + "username_rule": "يجب أن يحتوي إسم المستخدم على حروف لاتينية صغيرة، كذلك عليه أن يحتوي على أرقام وشرطات على السطر. لا تبدأ اسم المستخدم بأرقام", + "email_login": "إيميل تسجيل ادخول", + "details_title": "تفاصيل المستخدم", + "add_new_user": "قم بإضافة أول مستخدم", + "new_user": "مستخدم جديد", + "delete_user": "قم بحذف المستخدم", + "nobody_here": "لا أحد هنا", + "delete_confirm_question": "هل أنت متأكد؟", + "reset_password": "تغيير كلمة المرور", + "account": "الحساب", + "send_registration_data": "قم بمشاركة بيانات اعتماد تسجيل الدخول", + "could_not_fetch_users": "لم نتمكن من إحضار قائمة المستخدمين", + "refresh_users": "قم بتحديث قائمة المستخدمين", + "could_not_create_user": "تعذر إنشاء المستخدم", + "could_not_delete_user": "تعذر حذف المستخدم", + "could_not_add_ssh_key": "تعذّر إضافة مفتاح SSH", + "user_already_exists": "يوجد مستخدم قد استخدم هذا الإسم بالفعل" + }, + "initializing": { + "select_provider_price_text_hetzner": "يتطلب ذلك ٨ يورو شهريًا لخادم يعد صغير نسبيًا ومساحة تخزين القرص تقدّر بـ٥٠ جيجابايت", + "select_provider_notice": "نعني بكلمة \"صغير نسبيًا\" جهازا يحتوي على ٢ من CPU (وحدة المعالجة المركزية)، و٢جيجابايت من RAM (ذاكرة الوصول العشوائي).", + "no_server_types_found": "لم يتم العثور على أنواع خوادم متاحة. تأكد من إمكانية الوصول إلى حسابك وحاول تغيير موقع الخادم الخاص بك.", + "connect_to_server_provider_text": "باستخدام رمز API الخاص، ستتمكن الخصوصية الشخصية (SelfPrivacy) من استئجار جهاز وإعداد الخادم الخاص بك عليها", + "choose_server_type_payment_storage": "{} لمساحة تخزين إضافية", + "choose_server_type_payment_ip": "{} لعنوان IPv4 العام", + "use_this_domain": "هل تريد استخدام هذا النطاق؟", + "select_provider": "اختر أي مزود من القائمة التالية. كل منهم يدعم الخصوصية الشخصية", + "connect_to_server_provider": "قم بتسجيل الدخول الآن ", + "multiple_domains_found": "لقد وجدت نطاقات عديدة", + "found_more_domains": "لقد وجد أكثر من نطاق واحد. من أجل سلامتك، نرجو منك حذف النطاقات غير الضرورية", + "steps": { + "master_account": "الحساب الرئيسي", + "server_reboot": "إعادة تشغيل الخادم", + "hosting": "استضافة", + "server_type": "نوع الخادم", + "dns_provider": "مزوّد DNS", + "backups_provider": "النسخ الاحتياطية", + "domain": "النطاق", + "server": "الخادم", + "dns_setup": "إعداد DNS", + "nixos_installation": "تثبيت NixOS", + "final_checks": "التحقق بشكل نهائي" + }, + "select_provider_price_text_do": "يكلف هذا ١٧ دولارا شهريًا لخادم يعد صغير نسبيًا ومساحة تخزين القرص تبلغ ٥٠ جيجابايت", + "select_provider_email_notice": "لن يكون الإيميل الخاص بالاستضافة متاحاً للعملاء الجدد. لكن سيتم فتحه بمجرد إتمام دفعتك الأولى.", + "choose_location_type_text": "تمنح مختلف المواقع الجغرافية خوادم ذات إعدادات مختلفة، وأسعار وسرعة اتصال مختلفة.", + "multiple_domains_found_text": "يتيح الرمز الخاص الذي اعطيتنا إياه الوصول للنطاقات التالية. نرجو منك اختيار النطاق الذي تريد استخدامه.و من أجل سلامة نطاقاتك الأخرى، يجب عليك تقييد الوصول لهذا الرمز الخاص للنطاق الذي تريد استخدامه في SelfPrivacy فقط.", + "server_rebooted": "تم إعادة تشغيل الخادم، انتظر حتى آخر عملية تحقق…", + "server_created": "تم إنشاء الخادم، يتم الآن إجراء عدة تحققات لـDNS وتمهيد الخادم…", + "enter_username_and_password": "قم بإدخال اسم المستخدم وكلمة مرور قوية", + "server_provider_description": "المكان الذي ستكون فيه بياناتك وخدمات الخصوصية الشخصية الخاصة بك موجودة:", + "dns_provider_description": "خدمة تتيح لعنوان IP الخاص بك بالإشارة إلى أسماء النطاقات:", + "connect_to_server": "لنبدأ بالخادم.", + "select_provider_countries_title": "الدول المتاح فيها", + "select_provider_countries_text_hetzner": "ألمانيا، فنلندا، الولايات المتحدة الأمريكية", + "select_provider_countries_text_do": "الولايات المتحدة الأمريكية، هولندا، سنغافورة، المملكة المتحدة، ألمانيا، كندا، الهند، أستراليا", + "select_provider_price_title": "متوسط السعر‬", + "select_provider_payment_title": "طريقة الدفع", + "select_provider_payment_text_hetzner": "بطاقات الائتمان، سويفت(SWIFT)، سيبا(SEPA)، باي بال(PayPal)", + "select_provider_payment_text_do": "بطاقات الائتمان، جوجل باي (Google Pay)، باي بال (PayPal)", + "select_provider_payment_text_cloudflare": "بطاقات الإئتمان", + "select_provider_site_button": "قم بزيارة الموقع", + "how": "كيف يمكنني الحصول على رمز API المميز", + "provider_bad_key_error": "مزوّد مفتاح API غير صالح", + "could_not_connect": "لم نتمكن من الارتباط بالمزود.", + "choose_location_type": "من أين تريد طلب الخادم الخاص بك؟", + "locations_not_found": "خطأ!", + "locations_not_found_text": "لا توجد خوادم متاحة للإيجار", + "back_to_locations": "اختر شيئاً آخر", + "no_locations_found": "لم يتم العثور على مواقع متاحة، تأكد من أن حسابك يمكن الوصول إليه", + "choose_server_type": "ما نوع الخادم الذي تريده؟", + "choose_server_type_text": "إن إمكانيات الموارد المختلفة تدعم مختلف الخدمات، لكن لا عليك القلق بشأن ذلك يمكنك زيادة سعة الخادم الخاص بك وقت ما تشاء", + "choose_server_type_notice": "أهم الأشياء اللتي يجب عليك الأخذ بها بعين الاعتبار هي وحدة المعالجة المركزية(CPU) وذاكرة الوصول العشوائي(RAM)، وسيتم تخزين بيانات خدماتك على وحدة تخزين مثبتة ويمكن توسيعها بسهولة ودفع مقابلها بشكل منفصل.", + "choose_server_type_ram": "{} جيجابايت من الرام RAM", + "choose_server_type_storage": "{} جيجا بايت من مساحة تخزين النظام", + "choose_server_type_payment_per_month": "{} كل شهر", + "choose_server_type_payment_server": "{} لكل خادم", + "dns_provider_bad_key_error": "مفتاح API غير صالح", + "backblaze_bad_key_error": "معلومات تخزين Backblaze غير صالحة", + "connect_to_dns": "قم بالارتباط بمزود DNS", + "connect_to_dns_provider_text": "من خلال رمز API الخاص فإن SelfPrivacy ستدير كل مدخلات DNS", + "select_dns": "دعنا الآن نختار مزود DNS", + "manage_domain_dns": "لإدارة DNS الخاص بنطاقك", + "use_this_domain_text": "الرمز الخاص اللذي اعطيتنا إياه سيمنحنا إمكانية الوصول للنطاقات التالية", + "connect_backblaze_storage": "قم بالارتباط بتخزين Blackblaze", + "no_connected_domains": "لا توجد نطاقات تم الارتباط بها في الوقت الحالي", + "loading_domain_list": "جاري تحميل قائمة النطاقات", + "save_domain": "احفظ النطاق", + "final": "الخطوة الأخيرة", + "create_server": "قم بإنشاء الخادم", + "what": "ماذا يعني هذا؟", + "server_started": "تم تشغيل الخادم، سيتم التحقق منه وإعادة تشغيله الآن…", + "domain_critical_error": "لم نتمكن من الوصول لهذا النطاق! انقر لمعرفة المزيد…", + "until_the_next_check": "حتى التحقق التالي: ", + "check": "تحقق", + "one_more_restart": "ستتم إعادة التشغيل مرة أخرى حتى يتم تطبيق شهادة الأمان الخاصة بك.", + "create_master_account": "إنشاء الحساب الرئيسي", + "finish": "كل شيء قد تم تهيئته", + "checks": "جميع إجراءات التحقق قد اكتملت.\n() من أصل ()" + }, + "cloud": { + "login_info": "تسجيل الدخول هو المشرف، أما كلمة المرور فهي نفس المستخدم الرئيسي الخاص بك. أنشئ حسابات جديدة على واجهة Nextcloud.", + "title": "تخزين السحابة", + "subtitle": "لا تسمح للخدمات السحابية بالإطلاع على بياناتك باستخدام Nextcloud." + }, + "git": { + "subtitle": "يوجد بديل خاص ومغلق عن منصة GitHub، اللتي بدورها تنتمي لك، لا لمايكروسوفت.", + "title": "خادم Git", + "login_info": "سيتوجب عليك إنشاء حساب على صفحة الويب، وأول مستخدم سيصبح مشرفاً." + }, + "recovering": { + "method_device_input_description": "أدخل رمز الموافقة الخاص", + "fallback_select_root_ssh": "صلاحية وصول لجذر SSH للخادم.", + "fallback_select_provider_console": "صلاحية وصول لوحدة تحكم الخادم للمزود خاصتي.", + "generic_error": "فشلت العملية،من فضلك حاول مرة أخرى.", + "domain_recover_error": "لم يتم العثور على خادم هذا النطاق", + "method_device_description": "افتح التطبيق على جهاز آخر، ثم اذهب إلى صفحة الأجهزة، اضغط على \"إضافة جهاز\" حتى تستلم رمزك الخاص.", + "confirm_server_description": "لقد عثرنا على الخادم الخاص بك! قم بتأكيد كونه الصحيح بينهم:", + "fallback_select_description": "ما اللذي تمتلكه بالضبط؟ اختر أول خيار متاح:", + "recovery_main_header": "ارتبط بخادم موجود", + "domain_recovery_description": "أدخل نطاق الخادم الّذي تريد الوصول إليه:", + "domain_recover_placeholder": "النطاق الخاص بك", + "method_select_description": "اختر طريقة الاسترجاع:", + "method_select_other_device": "أملك صلاحية الوصول على جهاز آخر", + "method_select_recovery_key": "لدي مفتاح استرجاع", + "method_select_nothing": "ليس لدي أي من ذلك", + "method_device_button": "لقد تلقيت رمزي الخاص", + "method_device_input_placeholder": "الرمز الخاص", + "method_recovery_input_description": "أدخل مفتاح الاسترجاع", + "fallback_select_token_copy": "نسخة من رمز الموافقة من إصدار آخر من التطبيق.", + "authorization_failed": "تعذر تسجيل الدخول بهذا المفتاح", + "fallback_select_provider_console_hint": "على سبيل المثال: هيتزنر/Hetzner.", + "provider_connected": "ارتبط بـ{}", + "provider_connected_description": "أدخل رمزك الخاص لتعطى صلاحية الوصول إلى {}:", + "provider_connected_placeholder": "{}الرمز الخاص", + "confirm_server": "قم بتأكيد الخادم", + "confirm_server_accept": "نعم! إنه ذلك", + "confirm_server_decline": "اختر خادماً مختلفاً", + "choose_server": "اختر الخادم الخاص بك", + "choose_server_description": "لم نتمكن من معرفة الخادم اللذي تحاول الارتباط به.", + "no_servers": "لا توجد خوادم متاحة في حسابك.", + "domain_not_available_on_token": "إن النطاق المختار ليس متاحاً على هذا الرمز الخاص.", + "modal_confirmation_title": "هل هذا الخادم الخاص بك حقاً؟", + "modal_confirmation_description": "إن قمت بالارتباط بالخادم الخطأ فقد تفقد بياناتك جميعها.", + "modal_confirmation_dns_valid": "نظام DNS العكسي جيد", + "modal_confirmation_dns_invalid": "يشير نظام DNS العكسي إلى نطاق آخر", + "modal_confirmation_ip_valid": "عنوان IP مماثل للذي في سجل DNS", + "modal_confirmation_ip_invalid": "عنوان IP ليس مماثلاً للذي في سجل DNS" + }, + "recovery_key": { + "key_receive_button": "تلقي المفتاح", + "key_connection_error": "لم نتمكن من الاتصال بالخادم.", + "key_main_description": "هذا مطلوب حتى تمنحك SelfPrivacy الموافقة في حال كانت كل أجهزتك الأخرى المخوّلة غير متاحة.", + "key_receiving_description": "قم بتدوين هذا المفتاح وقم بوضعه في مكان آمن. هذا المفتاح يستخدم لاستعادة الوصول الكامل إلى الخادم الخاص بك:", + "key_main_header": "مفتاح الاسترجاع", + "key_synchronizing": "جاري المزامنة…", + "key_amount_toggle": "الحد من عدد الاستخدامات", + "key_amount_field_title": "الحد الأعلى للاستخدامات", + "key_duedate_toggle": "حد الوقت", + "key_duedate_field_title": "تاريخ انتهاء الصلاحية", + "key_valid": "المفتاح صالح", + "key_invalid": "لم يعد مفتاحك صالحاً", + "key_valid_until": "صالح حتى {}", + "key_valid_for": "صالح حتى {} استخدامات", + "key_creation_date": "تم إنشاءه في {}", + "key_receiving_done": "تم!", + "key_replace_button": "قم بتوليد مفتاح جديد", + "key_receiving_info": "لن يتم إظهار المفتاح مرة أخرى، لكن ستتمكن من استبداله بواحد آخر.", + "generation_error": "لم نتمكن من توليد مفتاح الاسترجاع. {}" + }, + "modals": { + "server_deletion_error": "لم نتمكن من حذف الخادم النشط.", + "already_exists": "هذا الخادم موجود بالفعل.", + "purge_all_keys_confirm": "نعم، قم بمحو كل رموزي الخاصة", + "volume_creation_error": "لم نتمكن من إنشاء وحدة تخزين.", + "are_you_sure": "هل أنت متأكد؟", + "dns_removal_error": "لم نتمكن من حذف سجلات DNS.", + "server_validators_error": "لم نتمكن من جلب خوادم متاحة.", + "unexpected_error": "حدث خطأ غير متوقع خلال وضع جانب المزوّد.", + "destroy_server": "هل تريد إنهاء هذا الخادم وإنشاء واحد جديد؟", + "try_again": "هل تريد المحاولة مرة أخرى؟", + "purge_all_keys": "هل تريد محو جميع مفاتيح الّتي مُنحت الموافقة؟", + "delete_server_volume": "هل تريد حذف الخادم ووحدة التخزين؟", + "reboot": "قم بإعادة التشغيل", + "you_cant_use_this_api": "لن تتمكن من استخدام واجهة برمجة التطبيقات هذه (API) للنطاقات مثل TLD.", + "yes": "نعم", + "no": "لا" + }, + "devices": { + "add_new_device_screen": { + "description": "أدخل المفتاح على الجهاز الّذي تريد منحه الصلاحية:", + "header": "منح الصلاحية لجهاز جديد", + "please_wait": "انتظر من فضلك", + "tip": "المفتاح صالح لمدة عشر دقائق.", + "expired": "المفتاح منتهي الصلاحية.", + "get_new_key": "احصل على مفتاح جديد" + }, + "main_screen": { + "tip": "اضغط على الجهاز لسحب صلاحية الوصول.", + "description": "هذه الأجهزة لها الصلاحية الكاملة للوصول للخادم، وذلك من خلال تطبيق SelfPrivacy.", + "header": "الأجهزة", + "this_device": "هذا الجهاز", + "other_devices": "أجهزة أخرى", + "authorize_new_device": "أعطي الصلاحية لجهاز جديد", + "access_granted_on": "قد تم منح الوصول على {}" + }, + "revoke_device_alert": { + "description": "إن الجهاز {} لن تصبح لديه صلاحية الوصول مجدداً للخادم.", + "no": "إلغاء", + "header": "هل تريد سحب صلاحية الوصول؟", + "yes": "اسحب الصلاحية" + } + }, + "validations": { + "length_not_equal": "الطول []، يجب أن يكون {}", + "required": "مطلوب", + "already_exist": "موجود بالفعل", + "invalid_format": "الصياغة أو التركيبة ليست جيدة", + "invalid_format_password": "يجب ألّا تحتوي كلمة المرور على مسافات", + "invalid_format_ssh": "عليك اتباع صيغة مفتاح SSH", + "root_name": "لا يجب أن يكون \"جذر\" (root)", + "length_longer": "الطول []، يجب أن يكون أقصر من أو يساوي {}" + }, + "developer_settings": { + "subtitle": "هذه الإعدادات مخصصة لتصحيح الأخطاء فقط، فلا تقم بتغييرها إلا إذا كنت تعرف ما تفعله.", + "reset_onboarding_description": "قم بتحويل اتصال الجهاز مرة أخرى حتى تظهر الشاشة مجدداً", + "ignore_tls_description": "لن يقوم التطبيق بالتحقق من شهادات TLS خلال الاتصال بالخادم.", + "title": "إعدادات المطور", + "server_setup": "إعدادات الخادم", + "use_staging_acme": "استخدم خادم ACME الإنتقالي", + "use_staging_acme_description": "قم بتطبيقه حينما يتم إعداد خادم جديد.", + "ignore_tls": "لا تقم بالتحقق من شهادات TLS", + "allow_ssh_key_at_setup": "امنح الموافقة بتعيين بجذر مفتاح SSH أثناء الإعداد", + "allow_ssh_key_at_setup_description": "سيظهر زر لإضافة مفتاح على شاشة التأكيد.", + "add_root_ssh_key": "أضف جذر مفتاح SSH", + "root_ssh_key_added": "سيتم تطبيق مجموعة جذر مفاتيح SSH", + "routing": "يتم توجيه التطبيق", + "reset_onboarding": "إعادة تحويل اتصال الجهاز", + "cubit_statuses": "حالات حميل واجهة النظام" + }, + "jobs": { + "upgrade_failed": "فشلت ترقية الخادم", + "job_postponed": "تمت إضافة المهمة، ولكن لن تتمكن من تشغيلها إلا بعدما تنتهي المهام الحالية", + "start": "إبدأ", + "title": "قائمة المهام", + "create_user": "أنشئ مستخدم", + "delete_user": "قم بحذف المستخدم", + "service_turn_off": "إطفاء", + "service_turn_on": "تشغيل", + "empty": "لا توجد مهام", + "job_added": "تمت إضافة المهمة", + "job_removed": "تمت إزالة المهمة", + "run_jobs": "إدارة المهام", + "reboot_success": "يتم إعادة تشغيل الخادم", + "reboot_failed": "لم نتمكن من إعادة تشغيل الخادم. قم بالتحقق من سجلات التطبيق.", + "upgrade_success": "ترقية الخادم قد بدأت", + "upgrade_server": "ترقية الخادم", + "reboot_server": "إعادة تشغيل الخادم", + "create_ssh_key": "أنشئ مفتاح SSH من أجل {}", + "delete_ssh_key": "حذف مفتاح SSH لـ{}", + "server_jobs": "المهام موجودة في الخادم", + "reset_user_password": "إعادة ضبط كلمة مرور المستخدم", + "generic_error": "لم نتمكن من الارتباط بالخادم!", + "rebuild_system": "إصلاح وتجديد النظام", + "start_server_upgrade": "ابدأ بترقية الخادم", + "change_auto_upgrade_settings": "غيّر إعدادات الترقية التلقائية", + "change_server_timezone": "قم بتغيير النطاق الزمني للخادم" + }, + "basis": { + "app_name": "الخصوصية الشخصية", + "providers": "مزودو الخدمات", + "providers_title": "مركز بياناتك", + "select": "اختر", + "services": "الخدمات", + "connect": "اتصال", + "users": "المستخدمون", + "more": "المزيد", + "next": "التالي", + "password": "رمز المرور", + "confirmation": "التأكيد", + "cancel": "إلغاء", + "delete": "حذف", + "create": "قم بإضافة جديد", + "domain": "نطاق", + "saving": "يتم الحفظ …", + "username": "اسم المستخدم", + "loading": "يتم التحميل …", + "settings": "الإعدادت", + "services_title": "خدماتك الشخصية الخاصة المستقلة", + "reset": "إعادة ضبط", + "details": "التفاصيل", + "no_data": "لا توجد بيانات", + "wait": "انتظر", + "apply": "تطبيق", + "done": "تم", + "continue": "متابعة", + "connect_to_existing": "لقد حصلت على خادم للخصوصية الشخصية!", + "got_it": "فهمت", + "please_connect": "لطفاً، قم بوصل الخادم الخاص بك والمجال ومزوّد DNS للبدء!", + "network_error": "خطأ في الشبكة", + "close": "إغلاق", + "later": "انتقل إلى الإعداد لاحقاً", + "remove": "إزالة", + "alert": "تنبيه", + "copied_to_clipboard": "تم النسخ إلى الحافظة!" + }, + "more_page": { + "configuration_wizard": "معالج الإعداد", + "onboarding": "التهيئة", + "create_ssh_key": "مفاتيح SSH للمستخدم المميز" + }, + "console_page": { + "title": "لوحة التحكم", + "waiting": "جاري الإنتظار للتهيئة…", + "copy": "انسخ" + }, + "about_application_page": { + "versions": "الإصدارات", + "application_version_text": "إصدار التطبيق", + "title": "حول هذا التطبيق & احصل على الدعم", + "api_version_text": "إصدار خادم API", + "open_source_licenses": "تراخيص مفتوحة المصدر", + "links": "الروابط", + "website": "صفحتنا على الويب", + "documentation": "المستندات", + "telegram_channel": "قناة التيليجرام", + "telegram_support_chat": "محادثة الدعم على التيليجرام", + "matrix_support_chat": "محادثة الدعم من خلال ماتريكس", + "email_support": "إيميل الدعم", + "source_code": "الكود المصدر", + "contribute": "المساهمة", + "bug_report": "أبلغ عن خطأ", + "bug_report_subtitle": "بسبب الرسائل العشوائية، سيطلب منك تأكيد الحساب بشكل يدوي. عليك التواصل معنا من خلال محادثة الدعم لتفعيل حسابك.", + "help_translate": "ساعدنا في الترجمة", + "telegram_contributors_chat": "الدردشة مع مساهمي تيليجرام", + "matrix_contributors_chat": "الدردشة مع مساهمي ماتريكس", + "privacy_policy": "سياسة الخصوصية", + "matrix_channel": "قناة ماتركس", + "get_support": "احصل على الدعم" + }, + "application_settings": { + "title": "إعدادات التطبيق", + "system_dark_theme_title": "الوضع الافتراضي للنظام", + "system_dark_theme_description": "قم بتطبيق الوضع الفاتح أو الداكن حسب إعدادات النظام", + "dark_theme_title": "الوضع الداكن", + "dangerous_settings": "إعدادات خطرة", + "reset_config_title": "قم بإعادة ضبط إعدادات التطبيق", + "delete_server_title": "قم بحذف الخادم", + "delete_server_description": "سيزيل هذا الخادم الخاص بك، حيث أنه لن تتمكن من الوصول إليه بعد ذلك.", + "dark_theme_description": "قم بتبديل وضع التطبيق", + "reset_config_description": "قم بإعادة ضبط مفاتيح API والمستخدم المميز." + }, + "ssh": { + "title": "مفاتيح SSH", + "create": "قم بإنشاء مفتاح SSH", + "delete": "قم بحذف مفتاح SSH", + "subtitle_with_keys": "() مفاتيح", + "subtitle_without_keys": "لا توجد مفاتيح", + "no_key_name": "مفتاح لم تتم تسميته", + "root_title": "هذه مفاتيح المستخدم المميز", + "delete_confirm_question": "هل أنت متأكد من رغبتك بإزالة مفتاح SSH؟", + "root_subtitle": "ملّاك هذه المفاتيح لهم الإمكانية الكاملة للوصول لهذا الخادم حيث أنه يمكنك فعل ما تشاء فيه، ما عليك سوى إضافة المفاتيح الخاصة بك للخادم.", + "input_label": "مفتاح ED25519 العام أو ECDSA أو RSA" + }, + "onboarding": { + "page2_title": "خصوصيتك الشخصية ليست مرفوعة على السحابة، بل هي مركز بياناتك الشخصية.", + "page2_server_provider_title": "مزوّد السيرفر", + "page2_server_provider_text": "سيحافظ مزوّد السيرفر على السيرفر الخاص بك وبمركز البيانات. وستقوم الخصوصية الشخصية بشكل تلقائي بالارتباط بالمزوّد وتعد كل شيء ضروري.", + "page1_title": "الاستقلال الرقمي متاح لنا جميعاً", + "page2_dns_provider_title": "مزوّد DNS", + "page2_backup_provider_title": "مزوّد النسخ الإحتياطية", + "page1_text": "البريد، VPN، مسانجر، الشبكات الاجتماعية وأكثر من ذلك على السيرفر الخاص وتحت تحكمك.", + "page2_text": "تعمل خصوصيتك الشخصية تحت مزودي الخدمة ممن تختارهم أنت فقط. إذا لم تمتلك حساباً مطلوباً فيها، فسنساعدك لإنشائهم.", + "page2_dns_provider_text": "تحتاج إلى نطاق ليكون لك مكان على شبكة الإنترنت. تحتاج كذلك لمزوّد DNS موثوق ليتم اعتبار النطاق داخل السيرفر الخاص بك. نوصي بأن تختار مزوّد DNS مدعوم حتى يتم إعداد الشبكة تلقائياً.", + "page2_backup_provider_text": "ماذا لو حدث خطب للخادم الخاص بك؟ تصوّر أن مخترقاً - أو هاكر- هاجم بياناتك وبالخطأ تسبب بحذفها أو بالحرمان من الخدمة؟ ستبقى بياناتك بأمان وذلك عن طريق مزوّد النسخ الإحتياطية الخاص بك. سيتم تشفير بياناتك حيث أنه يمكنك استعادتها من الخادم الخاص بك وقت ما تشاء." + }, + "resource_chart": { + "month": "شهر", + "day": "يوم", + "hour": "الساعة", + "cpu_title": "استخدام معالج CPU", + "network_title": "استخدام الشبكة", + "in": "داخل", + "out": "خارج" + }, + "server": { + "card_title": "الخادم", + "description": "جميع خدماتك تعمل هنا", + "general_information": "معلومات عامة", + "resource_usage": "استخدام الموارد", + "allow_autoupgrade_hint": "قم بتمكين تحديثات الحِزَم التلقائية على الخادم", + "server_timezone": "نطاق الخادم الزمني", + "select_timezone": "اختر النطاق الزمني", + "timezone_search_bar": "اسم النطاق الزمني أو قيمة التفاوت الزمني", + "server_id": "ID الخاص بالخادم", + "status": "الحالة", + "cpu": "وحدة المعالجة المركزية CPU", + "ram": "الذاكرة", + "disk": "القرص المحلّي (Disk Local)", + "monthly_cost": "التكلفة الشهرية", + "location": "الموقع الجغرافي", + "pricing_error": "لم نتمكن من جلب أسعار مزودي الخدمة", + "server_provider": "مزوّد الخدمة", + "dns_provider": "مزوّد الخدمة DNS", + "core_count": { + "one": "() مركز", + "two": "() مراكز", + "few": "() مراكز", + "other": "() مراكز", + "many": "() مراكز" + }, + "allow_autoupgrade": "قم بتمكين التحديث التلقائي", + "reboot_after_upgrade_hint": "قم بإعادة التشغيل من دون طلب الإذن بعد أن تطبق التغييرات على الخادم", + "reboot_after_upgrade": "قم بإعادة التشغيل بعد التحديث" + }, + "record": { + "root": "جذر النطاق", + "social": "شبكة اجتماعية", + "api": "واجهة تطبيق الخصوصية الشخصية البرمجية", + "cloud": "الملف على السحابة", + "git": "خادم البوابة", + "meet": "اجتماع بالفيديو", + "password": "إدارة كلمة المرور", + "vpn": "VPN", + "dmarc": "سجل DMARC", + "spf": "سجل SPF", + "dkim": "مفتاح DKIM", + "mx": "سجل MX" + }, + "domain": { + "card_title": "نطاق", + "screen_title": "النطاق وDNS", + "ok": "السجلّات جيدة", + "error": "توجد مشاكل", + "domain_validation_failure": "لا يمكننا الوصول لنطاقك!", + "uninitialized": "لم يتم استرداد البيانات بعد", + "services_title": "الخدمات", + "refreshing": "جاري تحديث الحالة …", + "services_subtitle": "السجلات من نوع \"A\" مطلوبه لكل خادم.", + "email_subtitle": "السجلّات ضرورية لتبادل الإيميل الآمن.", + "update_list": "قم بتحديث القائمة", + "email_title": "الإيميل", + "error_subtitle": "اضغط هنا لإصلاحم، سيزيل هذا أيضاً السجل المخصص." + }, + "backup": { + "creating": "يتم الآن إنشاء نسخة احتياطية جديدة ()٪؜", + "restoring": "الاستعادة من النسخة الاحتياطية", + "card_title": "نسخة احتياطية", + "card_subtitle": "قم بإدارة النسخ الاحتياطية الخاصة بك", + "reupload_key": "مفتاح إعادة التحميل الاضطراري", + "reuploaded_key": "مفتاح إعادة التحميل", + "initialize": "البدء", + "waiting_for_rebuild": "ستتمكن من إنشاء نسختك الإحتياطية الأولى خلال بضع دقائق.", + "refresh": "قم بتحديث الحالة", + "refetch_backups": "قم بجلب قائمة النسخ الإحتياطي مرة أخرى", + "reupload_key_subtitle": "سيتم توجيه الخادم للبدء بتخزين النسخ الاحتياطي مرة ثانية. قم باستخدامه في حالة حصول عطل ما.", + "refetching_list": "سيتم تحديث القائمة خلال بضعة دقائق", + "create_new_select_heading": "اختر ما تريده للنسخة الإحتياطية", + "start": "ابدء بالتخزين الاحتياطي", + "latest_snapshots": "أحدث اللقطات", + "latest_snapshots_subtitle": "إظهار أحدث ١٨ لقطة", + "show_more": "أظهر المزيد", + "autobackup_period_title": "مدة النسخ الإحتياطي التلقائي", + "autobackup_period_subtitle": "تم إنشاء النسخ الإحتياطية كل (مدة)", + "autobackup_period_never": "النسخ الإحتياطي التلقائي غير نشط", + "autobackup_period_every": "كل (مدة)", + "autobackup_period_disable": "قم بإيقاف النسخ الإحتياطي التلقائي", + "autobackup_custom": "تخصيص", + "autobackup_custom_hint": "قم بإدخال مدة معينة تتكون من دقائق", + "autobackup_set_period": "ضع مدة زمنية", + "autobackup_period_set": "المدة المحددة", + "backups_encryption_key": "مفتاح التشفير", + "backups_encryption_key_subtitle": "احفظه في مكان آمن.", + "backups_encryption_key_copy": "قم بنسخ مفتاح التشفير", + "backups_encryption_key_show": "قم بإظهار مفتاح التشفير", + "backups_encryption_key_not_found": "لم يتم العثور على مفتاح التشفير، لطفاً حاول مرة أخرى في وقت لاحق.", + "pending_jobs": "جاري الآن تشغيل وظائف النسخ الإحتياطي", + "snapshots_title": "قائمة اللقطات", + "forget_snapshot": "احذف اللقطة", + "forget_snapshot_error": "لم نتمكن من حذف هذه اللقطة", + "snapshot_modal_heading": "تفاصيل اللقطة", + "snapshot_service_title": "الخدمة", + "snapshot_creation_time_title": "وقت الإنشاء", + "snapshot_id_title": "رمز ID الخاص باللقطة", + "snapshot_modal_inplace_option_title": "قم باستبدال مكانه", + "snapshot_modal_inplace_option_description": "نحتاج لمساحة خالية صغيرة، لكن سيكون هذا أكثر مخاطرة. قم باستبدال البيانات الحالية ببيانات اللقطة خلال التنزيل.", + "restore_started": "قد بدءت عملية الاستعادة، تفحّص قائمة الوظائف حتى تعرف وضعها الحالي", + "snapshot_reason_title": "سبب الإنشاء", + "snapshot_reasons": { + "auto": "تم إنشاؤه تلقائياً", + "explicit": "قد تم إنشاؤه بناءاً على طلب خاص منك", + "unknown": "غير معروف", + "pre_restore": "تم إنشاؤه بشكل احتياطي قبل القيام بعملية استعادة خطيرة" + }, + "rotation_quotas_title": "إعدادات دوران اللقطات (من نقطة البداية للنهاية)", + "set_rotation_quotas": "‏قم بتعيين أوقات جديدة للدوران", + "quotas_set": "وقت دوران النسخ الاحتياطي الجديد المخصص", + "quota_titles": { + "daily": "كم عدد النسخ الاحتياطية اليومية التي يجب حفظها", + "last": "كم عدد النسخ الاحتياطية الحديثة التي يجب حفظها", + "weekly": "كم عدد النسخ الاحتياطية الأسبوعية التي يجب حفظها", + "yearly": "كم عدد النسخ الاحتياطية السنوية التي يجب حفظها", + "monthly": "كم عدد النسخ الاحتياطية الشهرية التي يجب حفظها" + }, + "quota_subtitles": { + "last": { + "zero": "القاعدة غير نشطة", + "one": "آخر () نسخة احتياطية سيتم الاحتفظ بها بغض النظر لمدتها", + "two": "اخر () نُسخ احتياطية سيتم الاحتفاظ بها بغض النظر عن مدتها", + "many": "اخر () نُسخ احتياطية سيتم الاحتفاظ بها بغض النظر عن مدتها", + "other": "اخر () نُسخ احتياطية سيتم الاحتفاظ بها بغض النظر عن مدتها", + "few": "اخر () نُسخ احتياطية سيتم الاحتفاظ بها بغض النظر عن مدتها" + }, + "last_infinite": "جميع النُسخ الاحتياطية سيتم الاحتفاظ بها", + "daily": { + "zero": "القاعدة غير نشطة", + "two": "اخر () نُسخ احتياطية يومية سيتم الاحتفاظ بها", + "one": "اخر () نسخة احتياطية ليومية سيتم الاحتفاظ بها", + "few": "اخر () نُسخ احتياطية يومية سيتم الاحتفاظ بها", + "many": "اخر () نُسخ احتياطية يومية سيتم الاحتفاظ بها", + "other": "اخر () نُسخ احتياطية يومية سيتم الاحتفاظ بها" + }, + "weekly": { + "zero": "القاعدة غير نشطة", + "two": "اخر () نسخ احتياطية أسبوعية سيتم الاحتفاظ بها", + "few": "اخر () نسخ احتياطية أسبوعية سيتم الاحتفاظ بها", + "other": "اخر () نسخ احتياطية أسبوعية سيتم الاحتفاظ بها", + "one": "اخر () نسخة احتياطية أسبوعية سيتم الاحتفاظ بها", + "many": "اخر () نسخ احتياطية أسبوعية سيتم الاحتفاظ بها" + }, + "monthly": { + "zero": "القاعدة غير نشطة", + "one": "اخر () نسخة احتياطية شهرية سيتم الاحتفاظ بها", + "few": "اخر () نسخ احتياطية شهرية سيتم الاحتفاظ بها", + "two": "اخر () نسخ احتياطية شهرية سيتم الاحتفاظ بها", + "other": "اخر () نسخ احتياطية شهرية سيتم الاحتفاظ بها", + "many": "اخر () نسخ احتياطية شهرية سيتم الاحتفاظ بها" + }, + "weekly_infinite": "كل النسخ الاحتياطية الأسبوعية سيتم الاحتفاظ بها", + "monthly_infinite": "كل النسخ الاحتياطية الشهرية سيتم الاحتفاظ بها", + "yearly": { + "zero": "القاعدة غير نشطة", + "one": "اخر () نسخة احتياطية سنوية سيتم الاحتفاظ بها", + "two": "اخر () نسخ احتياطية سنوية سيتم الاحتفاظ بها", + "few": "اخر () نسخ احتياطية سنوية سيتم الاحتفاظ بها", + "many": "اخر () نسخ احتياطية سنوية سيتم الاحتفاظ بها", + "other": "اخر () نسخ احتياطية سنوية سيتم الاحتفاظ بها" + }, + "yearly_infinite": "كل النسخ الاحتياطية السنوية سيتم الاحتفاظ بها", + "daily_infinite": "كل النُسخ الاحتياطية اليومية سيتم الاحتفاظ بها", + "no_effect": "ليس لهذه القاعدة أي تأثير لأنه توجد قاعدة أخرى تحتفظ بمزيد من النسخ الإحتياطية" + }, + "restore": "قم بالاسترجاع من النسخة الاحتياطية", + "no_backups": "لا توجد نسخ احتياطية حتى الآن", + "create_new": "قم بإنشاء نسخة احتياطية جديدة", + "error_pending": "حدث خطأ أثناء إعادة السيرفر، قم بالفحص أدناه", + "restore_alert": "إنك على وشك استرجاع نسخة احتياطية أنشئت في (). حيث أن كل البيانات الحالية ستفقد، هل أنت متأكد من ذلك؟", + "service_busy": "توجد عملية نسخ احتياطي أخرى جارية الآن", + "quotas_only_applied_to_autobackups": "هذه الإعدادات قابلة للتطبيق فقط على النسخ الإحتياطية التلقائية، أما النسخ الإحتياطية اليدوية فلن يتم حذفها.", + "description": "سنحرص على حفاظ يومك في حال تعرّضت للهجوم من قِبل هاكر أو قد تم حذف الخادم وما إلى ذلك.", + "refetch_backups_subtitle": "قم بإيقاف ذاكرة التخزين المؤقتة، وقم بجلب البيانات من مزوّد التخزين الخاص بك مرة أخرى، هذا الإجراء قد يتطلب رسوماً إضافية.", + "forget_snapshot_alert": "إنك على وشك حذف هذه اللقطة، هل أنت متأكد من ذلك؟ فهذا الإجراء عادة لا يمكن التراجع عنه.", + "snapshot_modal_download_verify_option_description": "سيكون هذا أقل مخاطرة، لأنه هنالك حاجة لمساحة إضافية فارغة. قم بتنزيل اللقطة بأكملها على الذاكرة المؤقتة، قم بالتحقق من ذلك، ومن ثم استبدل البيانات الحالية.", + "snapshot_modal_service_not_found": "هذه لقطة من خدمة لم تعد موجودة على الخادم الخاص بك مجدداٍ. لا يحدث هذا في العادة، كما أنه لا يمكننا القيام بالاسترجاع أو الاستعادة التلقائية، إلا أنه يمكنك تنزيل اللقطة واستعادتها بشكل يدوي. اتصل بدعم SelfPrivacy إن كنت تحتاج لمساعدة.", + "select_all": "ارفع كل شيء للنسخة الإحتياطية", + "snapshot_modal_select_strategy": "اختر استراتيجية الاسترجاع", + "backups_encryption_key_description": "هذا المفتاح يستخدم لتشفير نسختك الإحتياطية، وفي حال فقدانه، لن تتمكن من إستعادة نسختك الإحتياطية، لذا عليك إبقاؤه في مكان آمن. كما أنه سيكون مفيداً أيضاً في حال احتجت للاستعادة النسخ الإحتياطية بشكل يدوي.", + "snapshot_modal_download_verify_option_title": "قم بالتنزيل، ثم قم بالتحقق بعد ذلك قم بالاستبدال" + }, + "storage": { + "card_title": "تخزين الخادم", + "status_error": "مساحة القرص قليلة", + "disk_usage": "() تم استخدامه", + "disk_total": "() المجموع. ()", + "mb": "() ميجا بايت", + "kb": "() كيلو بايت", + "bytes": "بايت", + "extend_volume_button": "سعة التخزين", + "extending_volume_title": "زيادة سعة التخزين", + "extending_volume_error": "لم نتمكن من تهيئة زيادة سعة وحدة التخزين.", + "extending_volume_started": "زيادة سعة وحدة التخزين قد بدءت", + "extending_volume_server_waiting": "تم تغيير وحدة تخزين الخادم، في انتظار ٢٠ ثانية…", + "extending_volume_rebooting": "يتم الآن إعادة التشغيل…", + "size": "الحجم", + "price": "السعر", + "data_migration_title": "ترحيل البيانات", + "data_migration_notice": "خلال القيام بترحيل البيانات سيتم إغلاق جميع الخدمات.", + "start_migration_button": "إبدأ بالترحيل", + "migration_process": "يتم الترحيل…", + "migration_done": "انتهى", + "status_ok": "استخدام القرص جيد", + "gb": "() جيجا بايت", + "extending_volume_description": "إن تغيير سعة التخزين سيسمح لك بحفظ المزيد من البيانات من دون القيام بزيادة سعة الخادم نفسه. من الممكن زيادة سعة التخزين لكن لا يمكن تقليصها.", + "extending_volume_price_info": "السعر شامل للضريبة VAT، ويتم تقديره من خلال تسعير البيانات المعطاة من مزوّد الخادم الخاص بك. سيتم إعادة تشغيل الخادم بعد تغيير سعة التخزين.", + "extending_volume_provider_waiting": "تم تغيير حجم وحدة التخزين، في انتظار ١٠ ثواني…" + }, + "video": { + "title": "فيديو ميت (لقاء عبر الفيديو)", + "subtitle": "يعد كلا من برنامجي زوم وجوجل مييت (Google Meet & Zoom) خيارين جيدين، لكن Jitsi Meet يعد تطبيقاً جديراً بالإختيار، لأنه تطبيق آمن حيث أنه لن يتم التنصُّت عليك.", + "login_info": "لا يوجد حساب مطلوب." + }, + "social_network": { + "title": "الشبكة الاجتماعية", + "subtitle": "قد يبدو من الصعب تصديق ما أقول، لكن أصبح الآن بإمكانك إنشاء الشبكة الإجتماعية الخاصة بك،‌ بقوانينها وجمهورها المستهدفين.", + "login_info": "سيتوجّب عليك أن تنشئ حساباً على صفحة الويب." + }, + "not_ready_card": { + "in_menu": "لم يتم إعداد الخادم بعد، من فضلك أنهي الإعداد باستخدام معالج الإعداد للعمل المقبل." + }, + "service_page": { + "nothing_here": "لا شيء هنا", + "open_in_browser": "افتح باستخدام المتصفح", + "restart": "قم بإعادة تشغيل الخدمة", + "disable": "لا تقم بتنشيط الخدمة", + "move": "انتقل إلى وحدة تخزين أخرى", + "uses": "استخدام {usage} على {volume}", + "snapshots": "لقطات منسوخة احتياطاً", + "status": { + "active": "تشغيل", + "inactive": "إيقاف", + "off": "غير نشط", + "activating": "تنشيط", + "deactivating": "إلغاء التنشيط", + "reloading": "إعادة التشغيل", + "failed": "فشل بالبدء" + }, + "enable": "قم بتنشيط الخدمة" + }, + "mail": { + "title": "البريد الإلكتروني", + "login_info": "استعمل اسم المستخدم وكلمة المرور من خلال علامة تبويب المستخدمين. منفذ IMAP هو 143 مع STARTTLS، ومنفذ SMTP هو 587 مع STARTTLS.", + "subtitle": "البريد الإلكتروني للشركة وللعائلة." + }, + "password_manager": { + "title": "مدير كلمة المرور", + "login_info": "سيتوجب عليك إنشاء حساب على صفحة الويب.", + "subtitle": "قاعدة الأمان الخاصة بك. سيساعدك Bitwarden بإنشاء كلمة المرور وتخزينها ونقلها بين الأجهزة، كذلك عند قيامك بإدخالهم حين يطلب منك إكمالهم بشكل تلقائي." + }, + "timer": { + "sec": "{} ثانية" + }, + "support": { + "title": "دعم SelfPrivacy" + } +} From f5ea94fd1b1ca4c5dad05144ee40388fb9d8cb5a Mon Sep 17 00:00:00 2001 From: Nil <594258774@qq.com> Date: Thu, 7 Mar 2024 05:39:25 +0000 Subject: [PATCH 52/75] Translated using Weblate (Chinese (Simplified)) Currently translated at 100.0% (564 of 564 strings) Translation: SelfPrivacy/SelfPrivacy App Translate-URL: http://weblate.selfprivacy.org/projects/selfprivacy/selfprivacy-app/zh_Hans/ --- assets/translations/zh_Hans.json | 661 ++++++++++++++++++++++++++++++- 1 file changed, 660 insertions(+), 1 deletion(-) diff --git a/assets/translations/zh_Hans.json b/assets/translations/zh_Hans.json index 0967ef42..b269e1da 100644 --- a/assets/translations/zh_Hans.json +++ b/assets/translations/zh_Hans.json @@ -1 +1,660 @@ -{} +{ + "backup": { + "quota_subtitles": { + "yearly": { + "other": "所有年度备份将被保留", + "zero": "规则已禁用", + "one": "所有年度备份将被保留", + "few": "所有年度备份将被保留", + "many": "所有年度备份将被保留", + "two": "所有年度备份将被保留" + }, + "yearly_infinite": "所有年度备份将被保留", + "no_effect": "此规则无效,因为另一个规则将保留更多的备份", + "last": { + "zero": "规则已禁用", + "one": "最后的 {} 个备份将被保留,不受其年龄的影响", + "few": "最近的{}个备份将被保留,不受它们的创建时间的影响", + "many": "最近的{}个备份将被保留,不受它们的年龄影响", + "other": "最近的{}个备份将被保留,无论它们的年龄如何", + "two": "最后的 {} 个备份将被保留,不考虑它们的年龄" + }, + "last_infinite": "所有备份将被保留", + "daily": { + "zero": "规则已禁用", + "two": "最后 {} 个每日备份将被保留", + "few": "最后 {} 个每日备份将被保留", + "many": "最后 {} 个每日备份将被保留", + "other": "最后 {} 个每日备份将被保留", + "one": "最后 {} 日备份将被保留" + }, + "weekly": { + "zero": "规则已禁用", + "one": "最近的 {} 周备份将被保留", + "two": "最近的 {} 周备份将被保留", + "few": "最近的 {} 周备份将被保留", + "many": "最近的 {} 周备份将被保留", + "other": "最近的 {} 周备份将被保留" + }, + "weekly_infinite": "所有周备份将被保留", + "monthly": { + "zero": "规则已禁用", + "one": "最近的{}个月备份将被保留", + "few": "最近的{}个月备份将被保留", + "many": "最近的{}个月备份将被保留", + "other": "最近的{}个月备份将被保留", + "two": "最近的{}个月备份将被保留" + }, + "monthly_infinite": "所有月度备份将被保留", + "daily_infinite": "所有每日备份都将被保留" + }, + "card_title": "备份", + "card_subtitle": "管理你的备份", + "reupload_key": "强制重新上传密钥", + "reuploaded_key": "密钥已重新上传", + "initialize": "初始化", + "waiting_for_rebuild": "您将能在几分钟内创建您的第一个备份。", + "restore": "从备份中恢复", + "no_backups": "还没有任何备份", + "create_new": "创建一个新的备份", + "creating": "创建一个新的备份:{}%", + "restoring": "正在从备份中恢复", + "restore_alert": "您即将恢复备份,该备份创建于{}。所有当前数据将会丢失。您确定吗?", + "refresh": "刷新状态", + "refetch_backups": "刷新备份列表", + "reupload_key_subtitle": "将指示服务器重新初始化备份存储。如果出现故障,请使用。", + "refetching_list": "列表将在几分钟内更新", + "select_all": "备份所有内容", + "create_new_select_heading": "选择需要备份的内容", + "start": "开始备份", + "service_busy": "另一个备份操作正在进行中", + "latest_snapshots": "最新快照", + "latest_snapshots_subtitle": "显示最近的15个快照", + "show_more": "显示更多", + "autobackup_period_title": "自动备份周期", + "autobackup_period_subtitle": "每{period}创建一次备份", + "autobackup_period_never": "自动备份已禁用", + "autobackup_period_every": "每{period}", + "autobackup_period_disable": "禁用自动备份", + "autobackup_custom": "自定义", + "autobackup_custom_hint": "输入自定义时间间隔(分钟)", + "autobackup_set_period": "设置周期", + "autobackup_period_set": "周期已设置", + "backups_encryption_key": "加密密钥", + "backups_encryption_key_subtitle": "请保管好。", + "backups_encryption_key_copy": "复制加密密钥", + "backups_encryption_key_show": "显示加密密钥", + "backups_encryption_key_not_found": "加密密钥尚未找到,请稍后再试。", + "pending_jobs": "当前正在运行的备份任务", + "snapshots_title": "快照列表", + "forget_snapshot_alert": "您即将删除此快照。您确定吗?此操作通常无法撤销。", + "forget_snapshot": "删除快照", + "forget_snapshot_error": "不能删除快照", + "snapshot_modal_heading": "快照详情", + "snapshot_service_title": "服务", + "snapshot_creation_time_title": "创建时间", + "snapshot_modal_select_strategy": "选择恢复策略", + "snapshot_modal_download_verify_option_title": "下载、验证,然后替换", + "snapshot_modal_inplace_option_title": "原地替换", + "snapshot_modal_inplace_option_description": "需要更少的可用空间,但风险更高。在下载期间用快照数据替换当前数据。", + "restore_started": "恢复已启动,请检查作业列表以获取当前状态", + "snapshot_reason_title": "创建原因", + "snapshot_reasons": { + "explicit": "由您明确的请求创建", + "pre_restore": "在风险恢复前作为预防措施创建", + "unknown": "未知", + "auto": "已自动生成" + }, + "set_rotation_quotas": "设置新的轮换配额", + "rotation_quotas_title": "快照轮换设置", + "quotas_set": "新的备份轮换配额已设置", + "quotas_only_applied_to_autobackups": "这些设置仅适用于自动备份。手动备份不会被删除。", + "quota_titles": { + "last": "保留最新备份数量", + "daily": "保留多少个每日备份", + "weekly": "保留多少个每周备份", + "monthly": "保留多少个每月备份", + "yearly": "保留多少个每年备份" + }, + "snapshot_id_title": "快照ID", + "refetch_backups_subtitle": "使缓存失效并从您的存储提供商重新获取数据。可能会产生额外费用。", + "description": "在发生意外的时候将节省你的时间:黑客攻击,服务器被删除等。", + "backups_encryption_key_description": "这个密钥用于加密您的备份。如果丢失了它,您将无法恢复您的备份。请将其放在安全的地方,因为如果您需要手动从备份中恢复时,它将会很有用。", + "snapshot_modal_download_verify_option_description": "风险较低,但需要更多的空间。将整个快照下载到临时存储中,验证后再替换当前数据。", + "snapshot_modal_service_not_found": "这是一个您的服务器上不再拥有的服务的快照。通常情况下,这不应该发生,我们无法进行自动恢复。您仍然可以下载快照并手动进行恢复。如果需要帮助,请联系SelfPrivacy支持团队。", + "error_pending": "服务器返回错误,请在下方检查" + }, + "service_page": { + "status": { + "reloading": "正在重启中", + "active": "运行正常", + "inactive": "已停止", + "failed": "启动失败", + "off": "已禁用", + "activating": "正在启动中", + "deactivating": "正在停用中" + }, + "nothing_here": "空白", + "open_in_browser": "在浏览器中打开", + "restart": "重新启动服务", + "disable": "禁用服务", + "enable": "启用服务", + "move": "移动到另一个卷", + "uses": "在{volume}上使用了 {usage}", + "snapshots": "备份快照" + }, + "storage": { + "extending_volume_description": "调整卷大小将允许您在服务器上存储更多数据,而无需扩展服务器本身。卷只能扩展:无法收缩。", + "extending_volume_modal_description": "升级到{},每月{}的套餐。", + "card_title": "服务器存储", + "status_ok": "磁盘使用情况正常", + "status_error": "磁盘空间不足", + "disk_usage": "已使用 {}", + "disk_total": "{} 总共 · {}", + "gb": "{} GB", + "mb": "{} MB", + "kb": "{} KB", + "bytes": "字节", + "extending_volume_title": "正在扩展卷大小", + "extend_volume_button": "扩展卷", + "extending_volume_price_info": "价格包含增值税,并根据您的服务器提供商提供的定价数据估算。在调整大小后,服务器将重新启动。", + "extending_volume_error": "无法初始化卷扩展。", + "extending_volume_started": "卷扩展已启动", + "extending_volume_provider_waiting": "提供商已调整卷大小,等待10秒钟…", + "extending_volume_server_waiting": "服务器卷已调整大小,等待20秒钟…", + "extending_volume_rebooting": "正在重新启动服务器…", + "size": "大小", + "price": "价格", + "data_migration_title": "数据迁移", + "data_migration_notice": "在迁移期间,所有服务将被关闭。", + "start_migration_button": "开始迁移", + "migration_process": "正在迁移…", + "migration_done": "完成" + }, + "cloud": { + "title": "云存储", + "subtitle": "使用 NextCloud时不允许云服务读取您的数据。", + "login_info": "登录名为 admin,密码与您的主用户相同。在 Nextcloud 界面中创建新账户。" + }, + "initializing": { + "select_provider_countries_text_hetzner": "德国、芬兰、美国", + "steps": { + "nixos_installation": "NixOS 安装", + "hosting": "托管", + "server_type": "服务器类型", + "dns_provider": "DNS 提供商", + "backups_provider": "备份", + "domain": "域名", + "master_account": "主账户", + "server": "服务器", + "dns_setup": "DNS 设置", + "server_reboot": "服务器重启", + "final_checks": "最终检查" + }, + "choose_location_type_text": "不同的位置提供不同的服务器配置、价格和连接速度。", + "select_provider_price_text_hetzner": "每月 €8,提供一个相对较小的服务器和50GB的磁盘存储空间", + "select_provider_email_notice": "新客户将无法使用电子邮件托管。然而,一旦完成首次付款,将解锁该功能。", + "what": "这意味着什么?", + "choose_server_type_text": "不同的资源大小支持不同的服务。别担心,您可以随时扩展您的服务器", + "no_server_types_found": "找不到可用的服务器类型。确保您的帐户可访问,并尝试更改服务器位置。", + "found_more_domains": "发现多于一个域名。出于安全考虑,请删除不必要的域名", + "server_started": "服务器已启动。现在将进行验证并重新启动…", + "one_more_restart": "还需一次重启以应用您的安全证书。", + "server_provider_description": "一个存放你的数据和 SelfPrivacy 服务的地方:", + "dns_provider_description": "一个让你的 IP 指向域名的服务:", + "connect_to_server": "让我们从一个服务器开始。", + "select_provider": "从以下列表中选择任何提供商,它们都支持 SelfPrivacy", + "select_provider_notice": "我们所说的“相对较小”是指一个拥有 2 个 CPU 核心和 2GB RAM 的机器。", + "select_provider_countries_title": "可用国家", + "select_provider_countries_text_do": "美国、荷兰、新加坡、英国、德国、加拿大、印度、澳大利亚", + "select_provider_price_title": "平均价格", + "select_provider_price_free": "免费", + "select_provider_price_text_do": "每月 $17,提供一个相对较小的服务器和50GB的磁盘存储空间", + "select_provider_payment_title": "付款方式", + "select_provider_payment_text_hetzner": "信用卡、SWIFT、SEPA、PayPal", + "select_provider_payment_text_do": "信用卡、Google Pay、PayPal", + "select_provider_payment_text_cloudflare": "信用卡", + "select_provider_site_button": "访问网站", + "connect_to_server_provider": "现在登录 ", + "connect_to_server_provider_text": "使用 API 令牌,SelfPrivacy 将能够租用一台机器并在其上设置您的服务器", + "how": "如何获取 API 令牌", + "provider_bad_key_error": "提供商 API 密钥无效", + "could_not_connect": "无法连接到提供商。", + "choose_location_type": "您想在哪里订购您的服务器?", + "locations_not_found": "抱歉!", + "locations_not_found_text": "没有可用的服务器可供租用", + "back_to_locations": "选择其他内容", + "no_locations_found": "找不到可用的位置,确保您的帐户可访问", + "choose_server_type": "您需要什么类型的服务器?", + "choose_server_type_notice": "重要的是要注意 CPU 和 RAM。您的服务数据将存储在一个可扩展的挂载卷上,需要单独付费。", + "choose_server_type_ram": "{}GB 内存", + "choose_server_type_storage": "{}GB 系统存储", + "choose_server_type_payment_per_month": "每月 {}", + "choose_server_type_payment_server": "服务器费用 {}", + "choose_server_type_payment_storage": "附加存储费用 {}", + "choose_server_type_payment_ip": "公共 IPv4 地址费用 {}", + "dns_provider_bad_key_error": "API 密钥无效", + "backblaze_bad_key_error": "Backblaze 存储信息无效", + "connect_to_dns": "连接 DNS 提供商", + "connect_to_dns_provider_text": "使用 API 令牌,SelfPrivacy 将管理所有 DNS 条目", + "select_dns": "现在让我们选择一个 DNS 提供商", + "manage_domain_dns": "管理您域名的 DNS", + "use_this_domain": "使用此域名?", + "use_this_domain_text": "您提供的令牌可以访问以下域名", + "multiple_domains_found": "找到多个域名", + "multiple_domains_found_text": "您提供的令牌可以访问以下域名。请选择要使用的域名。出于对其他域名安全性的考虑,您应该将此令牌的访问权限限制为仅限于您想要与 SelfPrivacy 使用的域名。", + "connect_backblaze_storage": "连接 Backblaze 存储", + "no_connected_domains": "目前没有连接的域名", + "loading_domain_list": "加载域名列表中", + "save_domain": "保存域名", + "final": "最后一步", + "create_server": "创建服务器", + "server_rebooted": "服务器已重新启动。等待最后的验证…", + "server_created": "服务器已创建。DNS 检查和服务器引导正在进行中…", + "domain_critical_error": "我们无法访问此域名!点击以了解更多…", + "until_the_next_check": "直到下次检查: ", + "check": "检查", + "create_master_account": "创建主账户", + "enter_username_and_password": "输入用户名和强密码", + "finish": "一切都初始化完成", + "checks": "检查已完成\n{} 个中的 {} 个" + }, + "recovering": { + "method_device_input_description": "输入您的授权令牌", + "method_device_button": "我已收到我的令牌", + "confirm_server_accept": "是的!就是这个", + "choose_server_description": "我们无法确定您要连接的是哪个服务器。", + "fallback_select_root_ssh": "对服务器的根 SSH 访问。", + "no_servers": "您的帐户中没有可用的服务器。", + "modal_confirmation_description": "如果连接到错误的服务器,您可能会丢失所有数据。", + "provider_connected_description": "请输入您访问 {} 的令牌:", + "generic_error": "操作失败,请重试。", + "recovery_main_header": "连接到现有服务器", + "domain_recovery_description": "输入您想要访问的服务器域名:", + "domain_recover_placeholder": "您的域名", + "domain_recover_error": "找不到具有此域名的服务器", + "method_select_description": "选择恢复方法:", + "method_select_other_device": "我可以在另一台设备上访问", + "method_select_recovery_key": "我有一个恢复密钥", + "method_select_nothing": "我没有这些东西", + "method_device_description": "在另一台设备上打开应用程序,然后转到设备页面。按“添加设备”以接收您的令牌。", + "method_device_input_placeholder": "令牌", + "method_recovery_input_description": "输入您的恢复密钥", + "fallback_select_description": "您具体有什么?选择第一个可用的选项:", + "fallback_select_token_copy": "从其他版本的应用程序复制授权令牌的副本。", + "fallback_select_provider_console": "访问提供商提供的服务器控制台。", + "authorization_failed": "无法使用此密钥登录", + "fallback_select_provider_console_hint": "例如:Hetzner。", + "provider_connected": "连接到{}", + "provider_connected_placeholder": "{} 令牌", + "confirm_server": "确认服务器", + "confirm_server_description": "找到您的服务器!确认它是你想找的服务器:", + "confirm_server_decline": "选择其他服务器", + "choose_server": "选择您的服务器", + "domain_not_available_on_token": "所选域在此令牌上不可用。", + "modal_confirmation_title": "这真的是您的服务器吗?", + "modal_confirmation_dns_valid": "反向 DNS 有效", + "modal_confirmation_dns_invalid": "反向 DNS 指向另一个域名", + "modal_confirmation_ip_valid": "IP 与 DNS 记录中的相同", + "modal_confirmation_ip_invalid": "IP 与 DNS 记录中的不同" + }, + "not_ready_card": { + "in_menu": "服务器尚未设置。请使用设置向导完成设置以进行进一步的工作。" + }, + "mail": { + "login_info": "使用用户选项卡中的用户名和密码。IMAP端口为143,启用STARTTLS;SMTP端口为587,启用STARTTLS。", + "subtitle": "公司和家庭的电子邮件。", + "title": "电子邮件" + }, + "password_manager": { + "subtitle": "安全的基本保障。Bitwarden 将帮助你创建、存储和在设备之间移动密码,并在请求时使用自动完成输入它们。", + "title": "密码管理器", + "login_info": "您将需要在网站上创建一个账户。" + }, + "users": { + "send_registration_data": "共享登录凭据", + "details_title": "用户详情", + "add_new_user": "添加第一个用户", + "new_user": "新用户", + "delete_user": "删除用户", + "nobody_here": "暂无用户", + "login": "登录", + "new_user_info_note": "新用户将自动获得对所有服务的访问权限", + "delete_confirm_question": "您确定吗?", + "reset_password": "重置密码", + "account": "账户", + "could_not_fetch_users": "无法获取用户列表", + "could_not_fetch_description": "请检查您的互联网连接并重试", + "refresh_users": "刷新用户列表", + "could_not_create_user": "无法创建用户", + "could_not_delete_user": "无法删除用户", + "could_not_add_ssh_key": "无法添加 SSH 密钥", + "username_rule": "用户名必须仅包含小写拉丁字母、数字和下划线,不能以数字开头", + "email_login": "电子邮件登录", + "no_ssh_notice": "仅为该用户创建电子邮件和 SSH 帐户。即将推出所有服务的单一登录。", + "user_already_exists": "已存在此用户名的用户" + }, + "social_network": { + "subtitle": "你可能不相信,现在你可以按照你自己的规则和目标受众,创建你自己的社交网络了。", + "title": "社交网络", + "login_info": "你需要在网站上创建一个账户。" + }, + "recovery_key": { + "key_main_description": "当您的所有其他已授权设备不可用时,SelfPrivacy 授权将需要此密钥。", + "key_receive_button": "接收密钥", + "key_receiving_description": "记下此密钥并放到安全的地方。用于恢复对服务器的完全访问:", + "key_connection_error": "无法连接到服务器。", + "key_synchronizing": "正在同步…", + "key_main_header": "恢复密钥", + "key_amount_field_title": "最大使用次数", + "key_amount_toggle": "通过使用次数来限制", + "key_duedate_toggle": "通过时间来限制", + "key_duedate_field_title": "到期日期", + "key_valid": "您的密钥有效", + "key_invalid": "您的密钥已失效", + "key_valid_until": "有效至 {}", + "key_valid_for": "还可以使用 {} 次", + "key_creation_date": "创建于 {}", + "key_replace_button": "生成新密钥", + "key_receiving_info": "密钥永远不会再次显示,但您可以将其替换为另一个密钥。", + "key_receiving_done": "完成!", + "generation_error": "无法生成恢复密钥。{}" + }, + "modals": { + "you_cant_use_this_api": "您不能使用此 API 来处理具有此 TLD 的域名。", + "volume_creation_error": "无法创建卷。", + "unexpected_error": "提供商端在安置过程中出现意外错误。", + "dns_removal_error": "无法移除 DNS 记录。", + "server_deletion_error": "无法删除活动服务器。", + "server_validators_error": "无法获取可用服务器。", + "already_exists": "已存在此服务器。", + "destroy_server": "销毁服务器并创建新服务器?", + "try_again": "重试?", + "are_you_sure": "您确定吗?", + "purge_all_keys": "清除所有身份验证密钥?", + "purge_all_keys_confirm": "是的,清除我的所有令牌", + "delete_server_volume": "删除服务器和卷?", + "reboot": "重启", + "yes": "是", + "no": "否" + }, + "validations": { + "invalid_format_password": "密码不能包含空格", + "required": "必填", + "already_exist": "已存在", + "invalid_format": "格式无效", + "invalid_format_ssh": "必须遵循 SSH 密钥格式", + "root_name": "不能是 'root'", + "length_not_equal": "长度为 [],应为 {}", + "length_longer": "长度为 [],应小于或等于 {}" + }, + "devices": { + "main_screen": { + "header": "设备", + "description": "这些设备通过 SelfPrivacy 应用程序完全访问服务器。", + "this_device": "此设备", + "other_devices": "其他设备", + "authorize_new_device": "授权新设备", + "access_granted_on": "已在 {} 上授权访问", + "tip": "点击设备以撤销访问权限。" + }, + "add_new_device_screen": { + "tip": "该密钥有效期为 10 分钟。", + "header": "授权新设备", + "description": "在您想要授权的设备上输入密钥:", + "please_wait": "请稍候", + "expired": "密钥已过期。", + "get_new_key": "获取新密钥" + }, + "revoke_device_alert": { + "header": "撤销访问权限?", + "description": "设备 {} 将不再访问服务器。", + "yes": "撤销", + "no": "取消" + } + }, + "developer_settings": { + "allow_ssh_key_at_setup_description": "在确认屏幕上会出现一个添加密钥的按钮。", + "subtitle": "这些设置仅用于调试。除非您知道自己在做什么,否则不要更改。", + "title": "开发者设置", + "server_setup": "服务器设置", + "use_staging_acme": "使用暂存 ACME 服务器", + "use_staging_acme_description": "在设置新服务器时适用。", + "ignore_tls": "不验证 TLS 证书", + "ignore_tls_description": "连接到服务器时,应用程序不会验证 TLS 证书。", + "allow_ssh_key_at_setup": "允许在设置期间设置根 SSH 密钥", + "add_root_ssh_key": "添加根 SSH 密钥", + "root_ssh_key_added": "根 SSH 密钥已设置并将被应用", + "routing": "应用程序路由", + "reset_onboarding_description": "重置新手引导开关以再次显示新手引导界面", + "reset_onboarding": "重置新手引导开关", + "cubit_statuses": "Cubit 加载状态" + }, + "test": "zh-test", + "basis": { + "users": "用户", + "settings": "设置", + "password": "密码", + "create": "创建", + "confirmation": "确认", + "cancel": "取消", + "delete": "删除", + "close": "关闭", + "connect": "连接", + "select": "选择", + "services": "服务", + "providers": "提供商", + "providers_title": "您的数据中心", + "more": "更多", + "next": "下一个", + "got_it": "知道了", + "saving": "正在保存…", + "username": "用户名", + "loading": "加载中…", + "connect_to_existing": "我已有SelfPrivacy服务器!", + "domain": "域名", + "reset": "重置", + "no_data": "没有数据", + "details": "详细信息", + "wait": "稍等", + "remove": "移除", + "apply": "应用", + "done": "完成", + "alert": "提醒", + "copied_to_clipboard": "已复制到粘贴板!", + "network_error": "网络错误", + "app_name": "SelfPrivacy", + "please_connect": "请连接您的服务器、域名和 DNS 供应商,以深入了解!", + "later": "稍后进行设置", + "continue": "继续", + "services_title": "您的个人、私密和独立服务。" + }, + "more_page": { + "configuration_wizard": "安装向导", + "onboarding": "新手引导", + "create_ssh_key": "超级用户 SSH 密钥" + }, + "console_page": { + "title": "控制台", + "copy": "复制", + "waiting": "等待初始化…" + }, + "about_application_page": { + "title": "关于与支持", + "versions": "版本", + "application_version_text": "应用版本", + "api_version_text": "服务器API版本", + "open_source_licenses": "开源协议", + "links": "链接", + "website": "关于我们", + "documentation": "文档", + "telegram_channel": "Telegram频道", + "get_support": "获取支持", + "email_support": "邮件支持", + "matrix_support_chat": "Matrix支持", + "contribute": "贡献", + "source_code": "源代码", + "help_translate": "帮助我们翻译", + "matrix_contributors_chat": "贡献者Matrix交流群", + "telegram_contributors_chat": "贡献者Telegram交流群", + "privacy_policy": "隐私政策", + "matrix_channel": "Matrix频道", + "telegram_support_chat": "Telegram支持", + "bug_report_subtitle": "由于垃圾邮件的原因,需要手动确认账户。请在支持聊天中联系我们以激活您的账户。", + "bug_report": "缺陷报告" + }, + "application_settings": { + "title": "应用设置", + "system_dark_theme_title": "系统默认主题", + "dark_theme_title": "暗色主题", + "system_dark_theme_description": "根据系统设置自动使用明亮或暗色主题", + "dark_theme_description": "切换应用主题", + "dangerous_settings": "危险设置", + "reset_config_title": "重置应用配置", + "delete_server_title": "删除服务器", + "delete_server_description": "这将移除您的服务器。它将不再可以访问。", + "reset_config_description": "重置API密钥和root用户。" + }, + "ssh": { + "title": "SSH密钥", + "delete": "删除SSH密钥", + "delete_confirm_question": "确定是否要删除SSH密钥?", + "subtitle_with_keys": "{} 密钥", + "subtitle_without_keys": "无密钥", + "no_key_name": "未命名密钥", + "root_title": "这些是超级用户密钥", + "root_subtitle": "这些密钥的所有者拥有对服务器的完全访问权限,并可以在其上执行任何操作。请只添加您自己的密钥到服务器上。", + "input_label": "ED25519、ECDSA或者RSA公钥", + "create": "创建SSH密钥" + }, + "onboarding": { + "page1_text": "邮件、VPN、即时通讯、社交网络等多项功能,全部在您掌控的私有服务器上。", + "page2_title": "SelfPrivacy不是云,而是你的私人数据中心", + "page2_server_provider_title": "服务提供商", + "page2_server_provider_text": "服务器提供商在其自己的数据中心维护您的服务器。SelfPrivacy 将自动连接到提供商并设置所有必要的内容。", + "page2_dns_provider_title": "DNS提供商", + "page2_backup_provider_title": "备份提供商", + "page2_dns_provider_text": "您需要一个域名才能在互联网上拥有位置。而且您还需要一个可靠的 DNS 提供商来将域名指向您的服务器。我们建议您选择一个支持的 DNS 提供商来自动设置网络。", + "page2_text": "SelfPrivacy 只与您选择的服务提供商配合使用。如果您在这些服务提供商中没有所需的账户,我们将帮助您创建。", + "page1_title": "我们每个人都应该享受数字自由", + "page2_backup_provider_text": "如果您的服务器出现了问题怎么办?想象一下黑客攻击、意外数据删除或服务拒绝等情况?您的数据将安全存储在备份提供商那里。它们将被安全加密,并随时可用于恢复您的服务器。" + }, + "resource_chart": { + "month": "月", + "day": "日", + "hour": "时", + "cpu_title": "CPU使用率", + "in": "接收", + "out": "发送", + "network_title": "网络使用情况" + }, + "server": { + "allow_autoupgrade_hint": "允许服务器自动升级软件包", + "card_title": "服务器", + "description": "你所有可用的服务都在这里", + "general_information": "通用信息", + "resource_usage": "资源使用情况", + "allow_autoupgrade": "允许自动升级", + "reboot_after_upgrade": "升级后重启", + "select_timezone": "选择时区", + "timezone_search_bar": "时区名称或时差值", + "server_id": "服务器ID", + "status": "状态", + "cpu": "CPU", + "ram": "内存", + "disk": "本地存储", + "monthly_cost": "每月费用", + "location": "位置", + "pricing_error": "无法获取服务提供商的价格", + "server_provider": "服务器提供商", + "dns_provider": "DNS提供商", + "core_count": { + "one": "{} 核心", + "two": "{} 核心", + "few": "{} 核心", + "many": "{} 核心", + "other": "{} 核心" + }, + "reboot_after_upgrade_hint": "在服务器应用更改后无需提示重新启动", + "server_timezone": "服务器时区" + }, + "record": { + "root": "根域名", + "api": "SelfPrivacy API", + "cloud": "文件云", + "meet": "视频会议", + "social": "社交网络", + "password": "密码管理器", + "vpn": "VPN", + "mx": "MX 记录", + "dmarc": "DMARC 记录", + "spf": "SPF 记录", + "dkim": "DKIM 密钥", + "git": "Git服务器" + }, + "domain": { + "card_title": "域名", + "ok": "DNS记录全部正常", + "error": "发现问题", + "refreshing": "刷新状态中…", + "uninitialized": "数据尚未检索到", + "services_title": "服务", + "services_subtitle": "每个服务都需要“A”记录。", + "email_title": "邮件", + "email_subtitle": "安全交换电子邮件所需的记录。", + "update_list": "升级列表", + "domain_validation_failure": "我们无法访问你的域名!", + "screen_title": "域名和DNS", + "error_subtitle": "点击此处以修复它们。这也将删除自定义记录。" + }, + "video": { + "title": "视频会议", + "subtitle": "Zoom 和 Google Meet 都很好,但 Jitsi Meet 是一个更加值得的替代品,它更能让你放心你的对话不会被监听。", + "login_info": "无需账户。" + }, + "git": { + "title": "Git 服务器", + "subtitle": "这是 Github 的私有替代品,属于你自己,而不是微软的。", + "login_info": "你需要在网站上创建一个账户。第一个用户将成为管理员。" + }, + "vpn": { + "title": "VPN 服务器", + "subtitle": "私人 VPN 服务器" + }, + "timer": { + "sec": "{} 秒" + }, + "jobs": { + "title": "作业列表", + "start": "开始", + "empty": "空白", + "create_user": "创建用户", + "delete_user": "删除用户", + "service_turn_off": "关闭", + "service_turn_on": "开启", + "job_added": "已添加作业", + "job_postponed": "已添加作业,但您只能够在当前作业完成后启动它", + "job_removed": "已移除作业", + "run_jobs": "运行作业", + "reboot_success": "服务器正在重启", + "reboot_failed": "无法重启服务器。请检查应用程序日志。", + "config_pull_failed": "拉取升级配置失败。忽略此错误,继续启动软件升级。", + "upgrade_success": "服务器升级已启动", + "upgrade_failed": "服务器升级失败", + "upgrade_server": "升级服务器", + "reboot_server": "重启服务器", + "create_ssh_key": "为 {} 创建 SSH 密钥", + "delete_ssh_key": "删除 {} 的 SSH 密钥", + "server_jobs": "服务器上的作业", + "reset_user_password": "重置用户密码", + "generic_error": "无法连接到服务器!", + "rebuild_system": "重建系统", + "start_server_upgrade": "开始服务器升级", + "change_auto_upgrade_settings": "更改自动升级设置", + "change_server_timezone": "更改服务器时区" + }, + "support": { + "title": "SelfPrivacy 支持" + }, + "locale": "zh_CN" +} From 55a2dd080c67da69d59ed63093e5afa6d6adce8a Mon Sep 17 00:00:00 2001 From: def Date: Fri, 8 Mar 2024 01:31:23 +0000 Subject: [PATCH 53/75] Translated using Weblate (German) Currently translated at 85.5% (467 of 546 strings) Translation: SelfPrivacy/SelfPrivacy App Translate-URL: http://weblate.selfprivacy.org/projects/selfprivacy/selfprivacy-app/de/ --- assets/translations/de.json | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/assets/translations/de.json b/assets/translations/de.json index 1519d35a..9b067323 100644 --- a/assets/translations/de.json +++ b/assets/translations/de.json @@ -23,7 +23,7 @@ "username": "Benutzername", "loading": "Laden…", "later": "Überspringen und später einstellen", - "connect_to_existing": "Verbinde mit einem existierenden SelfPrivacy Server", + "connect_to_existing": "Verbinde mit einem existierenden SelfPrivacy Server!", "reset": "Zurücksetzen", "details": "Einzelheiten", "no_data": "Keine Daten", @@ -36,7 +36,8 @@ "apply": "Anwenden", "app_name": "SelfPrivacy", "copied_to_clipboard": "Zur Zwischenablage kopiert!", - "please_connect": "Bitte stellen sie eine Verbindung zu ihrem Server, Domain und DNS Betreiber her um zu beginnen!" + "please_connect": "Bitte stellen sie eine Verbindung zu ihrem Server, Domain und DNS Betreiber her um zu beginnen!", + "network_error": "Netzwerkfehler" }, "more_page": { "configuration_wizard": "Setup-Assistent", From 18b496ea9b524c66c6618f8e4cb0182eb8647d44 Mon Sep 17 00:00:00 2001 From: def Date: Fri, 8 Mar 2024 01:28:31 +0000 Subject: [PATCH 54/75] Translated using Weblate (Spanish) Currently translated at 17.0% (93 of 546 strings) Translation: SelfPrivacy/SelfPrivacy App Translate-URL: http://weblate.selfprivacy.org/projects/selfprivacy/selfprivacy-app/es/ --- assets/translations/es.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assets/translations/es.json b/assets/translations/es.json index 6927cc68..794a2eee 100644 --- a/assets/translations/es.json +++ b/assets/translations/es.json @@ -34,7 +34,7 @@ "connect_to_existing": "¡Ya tengo un servidor de SelfPrivacy!", "app_name": "SelfPrivacy", "please_connect": "¡Conecta tu servidor y dominio para sumergirte!", - "copied_to_clipboard": "¡Copiado al portapapeles!" + "copied_to_clipboard": "Copiado al portapapeles!" }, "test": "es-test", "locale": "es", From 623e31fd2cb22e21e634af8e3964fb15068d1251 Mon Sep 17 00:00:00 2001 From: Meko Date: Fri, 8 Mar 2024 13:23:37 +0000 Subject: [PATCH 55/75] Translated using Weblate (Ukrainian) Currently translated at 90.2% (493 of 546 strings) Translation: SelfPrivacy/SelfPrivacy App Translate-URL: http://weblate.selfprivacy.org/projects/selfprivacy/selfprivacy-app/uk/ --- assets/translations/uk.json | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/assets/translations/uk.json b/assets/translations/uk.json index f0f6e6c3..f960ff6a 100644 --- a/assets/translations/uk.json +++ b/assets/translations/uk.json @@ -159,7 +159,9 @@ "server_reboot": "Перезапуск сервера", "final_checks": "Фінальні перевірки" }, - "select_provider_price_free": "Безкоштовно" + "select_provider_price_free": "Безкоштовно", + "multiple_domains_found_text": "Даний токен надає доступ до наступних доменних імен. Будь ласка виберіть той, який ви хочете використовувати. Для безпеки інших доменних імен варто обмежити доступ даного токену лише до домена, який ви хочете використовувати з SelfPrivacy.", + "domain_critical_error": "Домен недоступний! Натисніть щоб дізнатися більше…" }, "recovering": { "recovery_main_header": "З’ єднатися з існуючим сервером", @@ -401,7 +403,8 @@ "deactivating": "Деактивація", "reloading": "Перезапуск" }, - "uses": "Використовує {usage} на {volume}" + "uses": "Використовує {usage} на {volume}", + "nothing_here": "Тут нічого немає" }, "mail": { "subtitle": "E-Mail для компанії та сім'ї.", @@ -456,7 +459,8 @@ "email_login": "Увійти через Email", "could_not_fetch_description": "Перевірте підключення до Інтернету і спробуйте ще раз", "username_rule": "Ім'я користувача має містити лише малі латинські літери, цифри і підкреслення, не слід починати з цифри", - "no_ssh_notice": "Для цього користувача створюються тільки поштові та SSH-акаунти. Єдина реєстрація для всіх сервісів незабаром." + "no_ssh_notice": "Для цього користувача створюються тільки поштові та SSH-акаунти. Єдина реєстрація для всіх сервісів незабаром.", + "user_already_exists": "Користувач з таким іменем уже існує" }, "devices": { "main_screen": { @@ -548,7 +552,8 @@ "generic_error": "Не вдалося підключитись до сервера!", "start_server_upgrade": "Запуск оновлення сервера", "job_removed": "Завдання видалено", - "change_server_timezone": "Змінити часовий пояс сервера" + "change_server_timezone": "Змінити часовий пояс сервера", + "change_auto_upgrade_settings": "Зміна налаштувань автооновлення" }, "validations": { "required": "Потрібно", From 89f6288f885e252967f1bb0cffe5691c6b76f9d6 Mon Sep 17 00:00:00 2001 From: def Date: Fri, 8 Mar 2024 01:32:41 +0000 Subject: [PATCH 56/75] Translated using Weblate (French) Currently translated at 41.5% (227 of 546 strings) Translation: SelfPrivacy/SelfPrivacy App Translate-URL: http://weblate.selfprivacy.org/projects/selfprivacy/selfprivacy-app/fr/ --- assets/translations/fr.json | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/assets/translations/fr.json b/assets/translations/fr.json index 5edbc320..218f93ed 100644 --- a/assets/translations/fr.json +++ b/assets/translations/fr.json @@ -51,7 +51,8 @@ "about_application_page": { "title": "À propos", "privacy_policy": "Politique de confidentialité", - "application_version_text": "Version de l'application" + "application_version_text": "Version de l'application", + "api_version_text": "Version de l'API du serveur {}" }, "application_settings": { "title": "Paramètres de l'application", @@ -60,7 +61,8 @@ "delete_server_title": "Supprimer le serveur", "delete_server_description": "Cela va supprimer votre serveur. Celui-ci ne sera plus accessible.", "dark_theme_title": "Thème sombre", - "reset_config_description": "Réinitialiser les clés API et l'utilisateur root." + "reset_config_description": "Réinitialiser les clés API et l'utilisateur root.", + "system_dark_theme_title": "Thème par défaut du système" }, "ssh": { "title": "Clés SSH", From 3e70ff03a36ed5e7177a08261e25440a625adf1f Mon Sep 17 00:00:00 2001 From: def Date: Fri, 8 Mar 2024 01:27:41 +0000 Subject: [PATCH 57/75] Translated using Weblate (Indonesian) Currently translated at 0.1% (1 of 564 strings) Translation: SelfPrivacy/SelfPrivacy App Translate-URL: http://weblate.selfprivacy.org/projects/selfprivacy/selfprivacy-app/id/ --- assets/translations/id.json | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/assets/translations/id.json b/assets/translations/id.json index 0967ef42..e41aed56 100644 --- a/assets/translations/id.json +++ b/assets/translations/id.json @@ -1 +1,5 @@ -{} +{ + "basis": { + "copied_to_clipboard": "\n" + } +} From fff7bf98a5860980a5fc448ab1144cff0c4d6185 Mon Sep 17 00:00:00 2001 From: Deem Alosili Date: Fri, 8 Mar 2024 13:34:50 +0000 Subject: [PATCH 58/75] Translated using Weblate (Arabic) Currently translated at 99.6% (562 of 564 strings) Translation: SelfPrivacy/SelfPrivacy App Translate-URL: http://weblate.selfprivacy.org/projects/selfprivacy/selfprivacy-app/ar/ --- assets/translations/ar.json | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/assets/translations/ar.json b/assets/translations/ar.json index 02d8bf59..a1adcba9 100644 --- a/assets/translations/ar.json +++ b/assets/translations/ar.json @@ -106,7 +106,8 @@ "one_more_restart": "ستتم إعادة التشغيل مرة أخرى حتى يتم تطبيق شهادة الأمان الخاصة بك.", "create_master_account": "إنشاء الحساب الرئيسي", "finish": "كل شيء قد تم تهيئته", - "checks": "جميع إجراءات التحقق قد اكتملت.\n() من أصل ()" + "checks": "جميع إجراءات التحقق قد اكتملت.\n() من أصل ()", + "select_provider_price_free": "مجاني" }, "cloud": { "login_info": "تسجيل الدخول هو المشرف، أما كلمة المرور فهي نفس المستخدم الرئيسي الخاص بك. أنشئ حسابات جديدة على واجهة Nextcloud.", @@ -267,14 +268,15 @@ "upgrade_server": "ترقية الخادم", "reboot_server": "إعادة تشغيل الخادم", "create_ssh_key": "أنشئ مفتاح SSH من أجل {}", - "delete_ssh_key": "حذف مفتاح SSH لـ{}", + "delete_ssh_key": "قم بحذف مفتاح SSH من أجل {}", "server_jobs": "المهام موجودة في الخادم", "reset_user_password": "إعادة ضبط كلمة مرور المستخدم", "generic_error": "لم نتمكن من الارتباط بالخادم!", "rebuild_system": "إصلاح وتجديد النظام", "start_server_upgrade": "ابدأ بترقية الخادم", "change_auto_upgrade_settings": "غيّر إعدادات الترقية التلقائية", - "change_server_timezone": "قم بتغيير النطاق الزمني للخادم" + "change_server_timezone": "قم بتغيير النطاق الزمني للخادم", + "config_pull_failed": "تعذر سحب ترقية الشكل. بدأت ترقية البرنامج على أي حال." }, "basis": { "app_name": "الخصوصية الشخصية", @@ -296,7 +298,7 @@ "username": "اسم المستخدم", "loading": "يتم التحميل …", "settings": "الإعدادت", - "services_title": "خدماتك الشخصية الخاصة المستقلة", + "services_title": "خدماتك الشخصية الخاصة المستقلة.", "reset": "إعادة ضبط", "details": "التفاصيل", "no_data": "لا توجد بيانات", @@ -305,7 +307,7 @@ "done": "تم", "continue": "متابعة", "connect_to_existing": "لقد حصلت على خادم للخصوصية الشخصية!", - "got_it": "فهمت", + "got_it": "قم بالحصول عليه", "please_connect": "لطفاً، قم بوصل الخادم الخاص بك والمجال ومزوّد DNS للبدء!", "network_error": "خطأ في الشبكة", "close": "إغلاق", @@ -337,7 +339,7 @@ "telegram_support_chat": "محادثة الدعم على التيليجرام", "matrix_support_chat": "محادثة الدعم من خلال ماتريكس", "email_support": "إيميل الدعم", - "source_code": "الكود المصدر", + "source_code": "الكود الأصلي", "contribute": "المساهمة", "bug_report": "أبلغ عن خطأ", "bug_report_subtitle": "بسبب الرسائل العشوائية، سيطلب منك تأكيد الحساب بشكل يدوي. عليك التواصل معنا من خلال محادثة الدعم لتفعيل حسابك.", @@ -373,13 +375,13 @@ "input_label": "مفتاح ED25519 العام أو ECDSA أو RSA" }, "onboarding": { - "page2_title": "خصوصيتك الشخصية ليست مرفوعة على السحابة، بل هي مركز بياناتك الشخصية.", + "page2_title": "خصوصيتك الشخصية (SelfPrivacy) ليست مرفوعة على السحابة، بل هي على مركز بياناتك الشخصية", "page2_server_provider_title": "مزوّد السيرفر", - "page2_server_provider_text": "سيحافظ مزوّد السيرفر على السيرفر الخاص بك وبمركز البيانات. وستقوم الخصوصية الشخصية بشكل تلقائي بالارتباط بالمزوّد وتعد كل شيء ضروري.", + "page2_server_provider_text": "سيحافظ المزوّد على الخادم الخاص بك وبمركز بياناتك. وستقوم الخصوصية الشخصية بشكل تلقائي بالارتباط بالمزوّد وإعداد كل شيء ضروري.", "page1_title": "الاستقلال الرقمي متاح لنا جميعاً", "page2_dns_provider_title": "مزوّد DNS", "page2_backup_provider_title": "مزوّد النسخ الإحتياطية", - "page1_text": "البريد، VPN، مسانجر، الشبكات الاجتماعية وأكثر من ذلك على السيرفر الخاص وتحت تحكمك.", + "page1_text": "البريد، VPN، مسنجر، الشبكات الاجتماعية وأكثر من ذلك على الخادم المغلق الخاص بك وتحت تحكمك.", "page2_text": "تعمل خصوصيتك الشخصية تحت مزودي الخدمة ممن تختارهم أنت فقط. إذا لم تمتلك حساباً مطلوباً فيها، فسنساعدك لإنشائهم.", "page2_dns_provider_text": "تحتاج إلى نطاق ليكون لك مكان على شبكة الإنترنت. تحتاج كذلك لمزوّد DNS موثوق ليتم اعتبار النطاق داخل السيرفر الخاص بك. نوصي بأن تختار مزوّد DNS مدعوم حتى يتم إعداد الشبكة تلقائياً.", "page2_backup_provider_text": "ماذا لو حدث خطب للخادم الخاص بك؟ تصوّر أن مخترقاً - أو هاكر- هاجم بياناتك وبالخطأ تسبب بحذفها أو بالحرمان من الخدمة؟ ستبقى بياناتك بأمان وذلك عن طريق مزوّد النسخ الإحتياطية الخاص بك. سيتم تشفير بياناتك حيث أنه يمكنك استعادتها من الخادم الخاص بك وقت ما تشاء." @@ -564,7 +566,7 @@ "no_backups": "لا توجد نسخ احتياطية حتى الآن", "create_new": "قم بإنشاء نسخة احتياطية جديدة", "error_pending": "حدث خطأ أثناء إعادة السيرفر، قم بالفحص أدناه", - "restore_alert": "إنك على وشك استرجاع نسخة احتياطية أنشئت في (). حيث أن كل البيانات الحالية ستفقد، هل أنت متأكد من ذلك؟", + "restore_alert": "إنك على وشك استرجاع نسخة احتياطية أنشئت في {}، حيث أن كل البيانات الحالية ستفقد، هل أنت متأكد من ذلك؟", "service_busy": "توجد عملية نسخ احتياطي أخرى جارية الآن", "quotas_only_applied_to_autobackups": "هذه الإعدادات قابلة للتطبيق فقط على النسخ الإحتياطية التلقائية، أما النسخ الإحتياطية اليدوية فلن يتم حذفها.", "description": "سنحرص على حفاظ يومك في حال تعرّضت للهجوم من قِبل هاكر أو قد تم حذف الخادم وما إلى ذلك.", @@ -602,7 +604,8 @@ "gb": "() جيجا بايت", "extending_volume_description": "إن تغيير سعة التخزين سيسمح لك بحفظ المزيد من البيانات من دون القيام بزيادة سعة الخادم نفسه. من الممكن زيادة سعة التخزين لكن لا يمكن تقليصها.", "extending_volume_price_info": "السعر شامل للضريبة VAT، ويتم تقديره من خلال تسعير البيانات المعطاة من مزوّد الخادم الخاص بك. سيتم إعادة تشغيل الخادم بعد تغيير سعة التخزين.", - "extending_volume_provider_waiting": "تم تغيير حجم وحدة التخزين، في انتظار ١٠ ثواني…" + "extending_volume_provider_waiting": "تم تغيير حجم وحدة التخزين، في انتظار ١٠ ثواني…", + "extending_volume_modal_description": "الترقية إلى {} لأجل {} الخطة الشهرية." }, "video": { "title": "فيديو ميت (لقاء عبر الفيديو)", From 9993ec2c87ee9c72a66d9afb307d83fad4299256 Mon Sep 17 00:00:00 2001 From: def Date: Fri, 8 Mar 2024 13:27:55 +0000 Subject: [PATCH 59/75] Translated using Weblate (Arabic) Currently translated at 99.6% (562 of 564 strings) Translation: SelfPrivacy/SelfPrivacy App Translate-URL: http://weblate.selfprivacy.org/projects/selfprivacy/selfprivacy-app/ar/ --- assets/translations/ar.json | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/assets/translations/ar.json b/assets/translations/ar.json index a1adcba9..aa30a6be 100644 --- a/assets/translations/ar.json +++ b/assets/translations/ar.json @@ -279,7 +279,7 @@ "config_pull_failed": "تعذر سحب ترقية الشكل. بدأت ترقية البرنامج على أي حال." }, "basis": { - "app_name": "الخصوصية الشخصية", + "app_name": "SelfPrivacy", "providers": "مزودو الخدمات", "providers_title": "مركز بياناتك", "select": "اختر", @@ -654,5 +654,7 @@ }, "support": { "title": "دعم SelfPrivacy" - } + }, + "test": "ar-test", + "locale": "ar" } From edebd82ef0125a5bf30df4b6d4a77567e5f83c75 Mon Sep 17 00:00:00 2001 From: Meko Date: Fri, 8 Mar 2024 14:32:00 +0000 Subject: [PATCH 60/75] Translated using Weblate (Ukrainian) Currently translated at 99.6% (544 of 546 strings) Translation: SelfPrivacy/SelfPrivacy App Translate-URL: http://weblate.selfprivacy.org/projects/selfprivacy/selfprivacy-app/uk/ --- assets/translations/uk.json | 78 +++++++++++++++++++++++++++++++------ 1 file changed, 67 insertions(+), 11 deletions(-) diff --git a/assets/translations/uk.json b/assets/translations/uk.json index f960ff6a..ca40b46b 100644 --- a/assets/translations/uk.json +++ b/assets/translations/uk.json @@ -157,11 +157,22 @@ "server": "Сервер", "nixos_installation": "Встановлення NixOS", "server_reboot": "Перезапуск сервера", - "final_checks": "Фінальні перевірки" + "final_checks": "Фінальні перевірки", + "backups_provider": "Резервне копіювання", + "master_account": "Головний обліковий запис" }, "select_provider_price_free": "Безкоштовно", "multiple_domains_found_text": "Даний токен надає доступ до наступних доменних імен. Будь ласка виберіть той, який ви хочете використовувати. Для безпеки інших доменних імен варто обмежити доступ даного токену лише до домена, який ви хочете використовувати з SelfPrivacy.", - "domain_critical_error": "Домен недоступний! Натисніть щоб дізнатися більше…" + "domain_critical_error": "Домен недоступний! Натисніть щоб дізнатися більше…", + "choose_server_type_payment_storage": "{} за додаткове сховище", + "server_provider_description": "Місце, де будуть знаходитися ваші дані і сервіси SelfPrivacy:", + "select_provider_payment_text_cloudflare": "Банківські карти", + "dns_provider_description": "Це дозволить пов'язати ваш домен з IP адресою:", + "choose_server_type_payment_ip": "{} за публічну IPv4 адресу", + "connect_to_dns": "Підключіть DNS провайдера", + "choose_server_type_payment_server": "{} за сам сервер", + "connect_to_dns_provider_text": "За допомогою API токена програма SelfPrivacy налаштує записи DNS", + "multiple_domains_found": "Знайдено декілька доменів" }, "recovering": { "recovery_main_header": "З’ єднатися з існуючим сервером", @@ -336,9 +347,43 @@ "other": "Останні {} знімків будуть зберігатися незалежно від дати створення" }, "daily": { - "zero": "Правило вимкнено" + "zero": "Правило вимкнено", + "other": "Останні {} щоденних знімків будуть зберігатися", + "few": "Останні {} щоденних знімки будуть зберігатися", + "one": "Останній {} щоденний знімок буде зберігатися", + "two": "Останні {} щоденних знімки будуть зберігатися", + "many": "Останні {} щоденних знімків будуть зберігатися" }, - "no_effect": "Це правило не має ефекту, оскільки перекрите іншим правилом" + "no_effect": "Це правило не має ефекту, оскільки перекрите іншим правилом", + "monthly": { + "other": "Останні {} щомісячних знімків будуть зберігатися", + "zero": "Правило відключено", + "one": "Останній {} щомісячний знімок буде зберігатися", + "few": "Останні {} щомісячні знімки будуть зберігатися", + "two": "Останні {} щомісячні знімки будуть зберігатися", + "many": "Останні {} щомісячних знімків будуть зберігатися" + }, + "last_infinite": "Всі знімки будуть збережені", + "monthly_infinite": "Всі щомісячні знімки будуть зберігатися", + "daily_infinite": "Всі щоденні знімки будуть зберігатися", + "weekly": { + "zero": "Правило відключено", + "one": "Останній {} щотижневий знімок буде зберігатися", + "two": "Останні {} щотижневих знімки будуть зберігатися", + "few": "Останні {} щотижневих знімки будуть зберігатися", + "many": "Останні {} щотижневих знімків будуть зберігатися", + "other": "Останні {} щотижневих знімків будуть зберігатися" + }, + "weekly_infinite": "Всі щотижневі знімки будуть зберігатися", + "yearly_infinite": "Всі щорічні знімки будуть зберігатися", + "yearly": { + "two": "Останні {} щорічних знімки будуть зберігатися", + "many": "Останні {} щорічних знімків будуть зберігатися", + "other": "Останні {} щорічних знімків будуть зберігатися", + "zero": "Правило відключено", + "one": "Останній {} щорічний знімок буде зберігатися", + "few": "Останні {} щорічних знімки будуть зберігатися" + } }, "snapshot_modal_service_not_found": "Це знімок сервісу, якого більше немає на вашому сервері. Зазвичай цього не повинно відбуватися, і ми не зможемо виконати автоматичне відновлення. Ви можете завантажити знімок і відновити його вручну. Зверніться до служби підтримки SelfPrivacy, якщо вам потрібна допомога.", "quotas_set": "Нові квоти ротації резервних копій задано", @@ -371,7 +416,7 @@ "kb": "{} КБ", "bytes": "Байти", "extend_volume_button": "Збільшити обсяг", - "extending_volume_price_info": "Ціна включає ПДВ і оцінюється з даних ціноутворення, наданих Hetzner. Сервер буде перезавантажений після зміни розміру.", + "extending_volume_price_info": "Ціна включає ПДВ і оцінюється з даних ціноутворення, наданих сервіс-провайдером. Сервер буде перезавантажений після зміни розміру.", "extending_volume_error": "Не вдалося ініціалізувати розширення обсягу.", "size": "Розмір", "data_migration_title": "Перенесення даних", @@ -383,7 +428,11 @@ "extending_volume_description": "Зміна обсягу дозволить зберігати більше даних на вашому сервері без розширення сервера. Обсяг може бути тільки збільшеним: зменшення неможливе.", "data_migration_notice": "Під час переносу всі послуги будуть вимкнені.", "price": "Ціна", - "extending_volume_rebooting": "Перезапуск сервера…" + "extending_volume_rebooting": "Перезапуск сервера…", + "extending_volume_modal_description": "Сховище буде розширено до {}, нова вартість {} в місяць.", + "extending_volume_provider_waiting": "Сховище розширено зі сторони провайдера, очікуємо 10 секунд…", + "extending_volume_started": "Розширення сховища розпочато", + "extending_volume_server_waiting": "Сховище розширено зі сторони сервера, очікуємо 20 секунд…" }, "not_ready_card": { "in_menu": "Сервер ще не налаштовано. Будь ласка, завершіть налаштування за допомогою майстра налаштування для подальшої роботи." @@ -404,7 +453,8 @@ "reloading": "Перезапуск" }, "uses": "Використовує {usage} на {volume}", - "nothing_here": "Тут нічого немає" + "nothing_here": "Тут нічого немає", + "snapshots": "Знімки резервних копій" }, "mail": { "subtitle": "E-Mail для компанії та сім'ї.", @@ -460,7 +510,8 @@ "could_not_fetch_description": "Перевірте підключення до Інтернету і спробуйте ще раз", "username_rule": "Ім'я користувача має містити лише малі латинські літери, цифри і підкреслення, не слід починати з цифри", "no_ssh_notice": "Для цього користувача створюються тільки поштові та SSH-акаунти. Єдина реєстрація для всіх сервісів незабаром.", - "user_already_exists": "Користувач з таким іменем уже існує" + "user_already_exists": "Користувач з таким іменем уже існує", + "details_title": "Користувач" }, "devices": { "main_screen": { @@ -523,7 +574,8 @@ "reboot": "Перезавантажити", "you_cant_use_this_api": "Не можна використовувати цей API для доменів з таким TLD.", "yes": "Так", - "no": "Ні" + "no": "Ні", + "volume_creation_error": "Не вдалося створити сховище." }, "timer": { "sec": "{} сек" @@ -553,7 +605,9 @@ "start_server_upgrade": "Запуск оновлення сервера", "job_removed": "Завдання видалено", "change_server_timezone": "Змінити часовий пояс сервера", - "change_auto_upgrade_settings": "Зміна налаштувань автооновлення" + "change_auto_upgrade_settings": "Зміна налаштувань автооновлення", + "job_postponed": "Завдання додано, але ви не зможете його запустити після завершення поточних завдань", + "rebuild_system": "Перезібрати систему" }, "validations": { "required": "Потрібно", @@ -576,7 +630,9 @@ "server_setup": "Майстер встановлення сервера", "use_staging_acme": "Використання тестового ACME сервера", "use_staging_acme_description": "Використовується при налаштуванні нового сервера.", - "ignore_tls_description": "Програма не буде перевіряти TLS сертифікати при підключенні до сервера." + "ignore_tls_description": "Програма не буде перевіряти TLS сертифікати при підключенні до сервера.", + "routing": "Роутинг програми", + "reset_onboarding_description": "Повторно показати екран привітання" }, "support": { "title": "Підтримка SelfPrivacy" From e665a8e0e4092736473e11d5360eb3cd723ecf68 Mon Sep 17 00:00:00 2001 From: Deem Alosili Date: Fri, 8 Mar 2024 14:09:50 +0000 Subject: [PATCH 61/75] Translated using Weblate (Arabic) Currently translated at 100.0% (564 of 564 strings) Translation: SelfPrivacy/SelfPrivacy App Translate-URL: http://weblate.selfprivacy.org/projects/selfprivacy/selfprivacy-app/ar/ --- assets/translations/ar.json | 118 ++++++++++++++++++------------------ 1 file changed, 59 insertions(+), 59 deletions(-) diff --git a/assets/translations/ar.json b/assets/translations/ar.json index aa30a6be..6e8719a2 100644 --- a/assets/translations/ar.json +++ b/assets/translations/ar.json @@ -30,11 +30,11 @@ "select_provider_price_text_hetzner": "يتطلب ذلك ٨ يورو شهريًا لخادم يعد صغير نسبيًا ومساحة تخزين القرص تقدّر بـ٥٠ جيجابايت", "select_provider_notice": "نعني بكلمة \"صغير نسبيًا\" جهازا يحتوي على ٢ من CPU (وحدة المعالجة المركزية)، و٢جيجابايت من RAM (ذاكرة الوصول العشوائي).", "no_server_types_found": "لم يتم العثور على أنواع خوادم متاحة. تأكد من إمكانية الوصول إلى حسابك وحاول تغيير موقع الخادم الخاص بك.", - "connect_to_server_provider_text": "باستخدام رمز API الخاص، ستتمكن الخصوصية الشخصية (SelfPrivacy) من استئجار جهاز وإعداد الخادم الخاص بك عليها", + "connect_to_server_provider_text": "باستخدام رمز API الخاص، ستقوم بتمكين SelfPrivacy من استئجار جهاز وإعداد الخادم الخاص بك عليها", "choose_server_type_payment_storage": "{} لمساحة تخزين إضافية", "choose_server_type_payment_ip": "{} لعنوان IPv4 العام", "use_this_domain": "هل تريد استخدام هذا النطاق؟", - "select_provider": "اختر أي مزود من القائمة التالية. كل منهم يدعم الخصوصية الشخصية", + "select_provider": "اختر أي مزود من القائمة التالية. كل منهم يدعم SelfPrivacy", "connect_to_server_provider": "قم بتسجيل الدخول الآن ", "multiple_domains_found": "لقد وجدت نطاقات عديدة", "found_more_domains": "لقد وجد أكثر من نطاق واحد. من أجل سلامتك، نرجو منك حذف النطاقات غير الضرورية", @@ -53,12 +53,12 @@ }, "select_provider_price_text_do": "يكلف هذا ١٧ دولارا شهريًا لخادم يعد صغير نسبيًا ومساحة تخزين القرص تبلغ ٥٠ جيجابايت", "select_provider_email_notice": "لن يكون الإيميل الخاص بالاستضافة متاحاً للعملاء الجدد. لكن سيتم فتحه بمجرد إتمام دفعتك الأولى.", - "choose_location_type_text": "تمنح مختلف المواقع الجغرافية خوادم ذات إعدادات مختلفة، وأسعار وسرعة اتصال مختلفة.", + "choose_location_type_text": "تمنح مختلف المواقع الجغرافية خوادم ذات خصائص مختلفة، وأسعار وسرعة اتصال مختلفة.", "multiple_domains_found_text": "يتيح الرمز الخاص الذي اعطيتنا إياه الوصول للنطاقات التالية. نرجو منك اختيار النطاق الذي تريد استخدامه.و من أجل سلامة نطاقاتك الأخرى، يجب عليك تقييد الوصول لهذا الرمز الخاص للنطاق الذي تريد استخدامه في SelfPrivacy فقط.", "server_rebooted": "تم إعادة تشغيل الخادم، انتظر حتى آخر عملية تحقق…", "server_created": "تم إنشاء الخادم، يتم الآن إجراء عدة تحققات لـDNS وتمهيد الخادم…", "enter_username_and_password": "قم بإدخال اسم المستخدم وكلمة مرور قوية", - "server_provider_description": "المكان الذي ستكون فيه بياناتك وخدمات الخصوصية الشخصية الخاصة بك موجودة:", + "server_provider_description": "المكان الذي فيه بياناتك وخدمات SelfPrivacy الخاصة بك ستكون موجودة في:", "dns_provider_description": "خدمة تتيح لعنوان IP الخاص بك بالإشارة إلى أسماء النطاقات:", "connect_to_server": "لنبدأ بالخادم.", "select_provider_countries_title": "الدول المتاح فيها", @@ -106,7 +106,7 @@ "one_more_restart": "ستتم إعادة التشغيل مرة أخرى حتى يتم تطبيق شهادة الأمان الخاصة بك.", "create_master_account": "إنشاء الحساب الرئيسي", "finish": "كل شيء قد تم تهيئته", - "checks": "جميع إجراءات التحقق قد اكتملت.\n() من أصل ()", + "checks": "جميع إجراءات التحقق قد اكتملت.\n{} من أصل {}", "select_provider_price_free": "مجاني" }, "cloud": { @@ -143,7 +143,7 @@ "fallback_select_provider_console_hint": "على سبيل المثال: هيتزنر/Hetzner.", "provider_connected": "ارتبط بـ{}", "provider_connected_description": "أدخل رمزك الخاص لتعطى صلاحية الوصول إلى {}:", - "provider_connected_placeholder": "{}الرمز الخاص", + "provider_connected_placeholder": "{} الرمز الخاص", "confirm_server": "قم بتأكيد الخادم", "confirm_server_accept": "نعم! إنه ذلك", "confirm_server_decline": "اختر خادماً مختلفاً", @@ -247,7 +247,7 @@ "root_ssh_key_added": "سيتم تطبيق مجموعة جذر مفاتيح SSH", "routing": "يتم توجيه التطبيق", "reset_onboarding": "إعادة تحويل اتصال الجهاز", - "cubit_statuses": "حالات حميل واجهة النظام" + "cubit_statuses": "جاري تحميل حالة واجهة النظام" }, "jobs": { "upgrade_failed": "فشلت ترقية الخادم", @@ -266,7 +266,7 @@ "reboot_failed": "لم نتمكن من إعادة تشغيل الخادم. قم بالتحقق من سجلات التطبيق.", "upgrade_success": "ترقية الخادم قد بدأت", "upgrade_server": "ترقية الخادم", - "reboot_server": "إعادة تشغيل الخادم", + "reboot_server": "إعادةُ تشغيل الخادم", "create_ssh_key": "أنشئ مفتاح SSH من أجل {}", "delete_ssh_key": "قم بحذف مفتاح SSH من أجل {}", "server_jobs": "المهام موجودة في الخادم", @@ -276,7 +276,7 @@ "start_server_upgrade": "ابدأ بترقية الخادم", "change_auto_upgrade_settings": "غيّر إعدادات الترقية التلقائية", "change_server_timezone": "قم بتغيير النطاق الزمني للخادم", - "config_pull_failed": "تعذر سحب ترقية الشكل. بدأت ترقية البرنامج على أي حال." + "config_pull_failed": "تعذر تحديث إعدادات الخادم. بدأ تحديث البرنامج على أي حال." }, "basis": { "app_name": "SelfPrivacy", @@ -306,8 +306,8 @@ "apply": "تطبيق", "done": "تم", "continue": "متابعة", - "connect_to_existing": "لقد حصلت على خادم للخصوصية الشخصية!", - "got_it": "قم بالحصول عليه", + "connect_to_existing": "لقد حصلت على خادم SelfPrivacy!", + "got_it": "فهمت", "please_connect": "لطفاً، قم بوصل الخادم الخاص بك والمجال ومزوّد DNS للبدء!", "network_error": "خطأ في الشبكة", "close": "إغلاق", @@ -366,7 +366,7 @@ "title": "مفاتيح SSH", "create": "قم بإنشاء مفتاح SSH", "delete": "قم بحذف مفتاح SSH", - "subtitle_with_keys": "() مفاتيح", + "subtitle_with_keys": "{} مفاتيح", "subtitle_without_keys": "لا توجد مفاتيح", "no_key_name": "مفتاح لم تتم تسميته", "root_title": "هذه مفاتيح المستخدم المميز", @@ -375,15 +375,15 @@ "input_label": "مفتاح ED25519 العام أو ECDSA أو RSA" }, "onboarding": { - "page2_title": "خصوصيتك الشخصية (SelfPrivacy) ليست مرفوعة على السحابة، بل هي على مركز بياناتك الشخصية", - "page2_server_provider_title": "مزوّد السيرفر", - "page2_server_provider_text": "سيحافظ المزوّد على الخادم الخاص بك وبمركز بياناتك. وستقوم الخصوصية الشخصية بشكل تلقائي بالارتباط بالمزوّد وإعداد كل شيء ضروري.", + "page2_title": "SelfPrivacy ليس مرفوعاً على السحابة، بل هو على مركز بياناتك الشخصية", + "page2_server_provider_title": "مزوّد الخادم", + "page2_server_provider_text": "سيحافظ المزوّد على الخادم الخاص بك وبمركز بياناتك. وسيقوم SelfPrivacy بشكل تلقائي بالارتباط بالمزوّد وإعداد كل شيء ضروري.", "page1_title": "الاستقلال الرقمي متاح لنا جميعاً", "page2_dns_provider_title": "مزوّد DNS", "page2_backup_provider_title": "مزوّد النسخ الإحتياطية", "page1_text": "البريد، VPN، مسنجر، الشبكات الاجتماعية وأكثر من ذلك على الخادم المغلق الخاص بك وتحت تحكمك.", - "page2_text": "تعمل خصوصيتك الشخصية تحت مزودي الخدمة ممن تختارهم أنت فقط. إذا لم تمتلك حساباً مطلوباً فيها، فسنساعدك لإنشائهم.", - "page2_dns_provider_text": "تحتاج إلى نطاق ليكون لك مكان على شبكة الإنترنت. تحتاج كذلك لمزوّد DNS موثوق ليتم اعتبار النطاق داخل السيرفر الخاص بك. نوصي بأن تختار مزوّد DNS مدعوم حتى يتم إعداد الشبكة تلقائياً.", + "page2_text": "يعمل SelfPrivacy تحت مزودي الخدمة ممن تختارهم أنت فقط. إذا لم تمتلك حسابات مطلوبه فيه، فسنساعدك لإنشائها.", + "page2_dns_provider_text": "تحتاج إلى نطاق ليكون لك مكان على شبكة الإنترنت. تحتاج كذلك لمزوّد DNS موثوق ليتم اعتبار النطاق داخل الخادم الخاص بك. نوصي بأن تختار مزوّد DNS مدعوم حتى يتم إعداد الشبكة تلقائياً.", "page2_backup_provider_text": "ماذا لو حدث خطب للخادم الخاص بك؟ تصوّر أن مخترقاً - أو هاكر- هاجم بياناتك وبالخطأ تسبب بحذفها أو بالحرمان من الخدمة؟ ستبقى بياناتك بأمان وذلك عن طريق مزوّد النسخ الإحتياطية الخاص بك. سيتم تشفير بياناتك حيث أنه يمكنك استعادتها من الخادم الخاص بك وقت ما تشاء." }, "resource_chart": { @@ -415,11 +415,11 @@ "server_provider": "مزوّد الخدمة", "dns_provider": "مزوّد الخدمة DNS", "core_count": { - "one": "() مركز", - "two": "() مراكز", - "few": "() مراكز", - "other": "() مراكز", - "many": "() مراكز" + "one": "{} مركز", + "two": "{} مراكز", + "few": "{} مراكز", + "other": "{} مراكز", + "many": "{} مراكز" }, "allow_autoupgrade": "قم بتمكين التحديث التلقائي", "reboot_after_upgrade_hint": "قم بإعادة التشغيل من دون طلب الإذن بعد أن تطبق التغييرات على الخادم", @@ -428,7 +428,7 @@ "record": { "root": "جذر النطاق", "social": "شبكة اجتماعية", - "api": "واجهة تطبيق الخصوصية الشخصية البرمجية", + "api": "الواجهة البرمجية API لتطبيق SelfPrivacy", "cloud": "الملف على السحابة", "git": "خادم البوابة", "meet": "اجتماع بالفيديو", @@ -455,7 +455,7 @@ "error_subtitle": "اضغط هنا لإصلاحم، سيزيل هذا أيضاً السجل المخصص." }, "backup": { - "creating": "يتم الآن إنشاء نسخة احتياطية جديدة ()٪؜", + "creating": "يتم الآن إنشاء نسخة احتياطية جديدة {}%", "restoring": "الاستعادة من النسخة الاحتياطية", "card_title": "نسخة احتياطية", "card_subtitle": "قم بإدارة النسخ الاحتياطية الخاصة بك", @@ -473,9 +473,9 @@ "latest_snapshots_subtitle": "إظهار أحدث ١٨ لقطة", "show_more": "أظهر المزيد", "autobackup_period_title": "مدة النسخ الإحتياطي التلقائي", - "autobackup_period_subtitle": "تم إنشاء النسخ الإحتياطية كل (مدة)", + "autobackup_period_subtitle": "تم إنشاء النسخ الإحتياطية كل {period}", "autobackup_period_never": "النسخ الإحتياطي التلقائي غير نشط", - "autobackup_period_every": "كل (مدة)", + "autobackup_period_every": "كل {period}", "autobackup_period_disable": "قم بإيقاف النسخ الإحتياطي التلقائي", "autobackup_custom": "تخصيص", "autobackup_custom_hint": "قم بإدخال مدة معينة تتكون من دقائق", @@ -517,46 +517,46 @@ "quota_subtitles": { "last": { "zero": "القاعدة غير نشطة", - "one": "آخر () نسخة احتياطية سيتم الاحتفظ بها بغض النظر لمدتها", - "two": "اخر () نُسخ احتياطية سيتم الاحتفاظ بها بغض النظر عن مدتها", - "many": "اخر () نُسخ احتياطية سيتم الاحتفاظ بها بغض النظر عن مدتها", - "other": "اخر () نُسخ احتياطية سيتم الاحتفاظ بها بغض النظر عن مدتها", - "few": "اخر () نُسخ احتياطية سيتم الاحتفاظ بها بغض النظر عن مدتها" + "one": "آخر {} نسخة احتياطية سيتم الاحتفاظ بها بغض النظر لمدتها", + "two": "اخر {} نُسخ احتياطية سيتم الاحتفاظ بها بغض النظر عن مدتها", + "many": "اخر {} نُسخ احتياطية سيتم الاحتفاظ بها بغض النظر عن مدتها", + "other": "اخر {} نُسخ احتياطية سيتم الاحتفاظ بها بغض النظر عن مدتها", + "few": "اخر {} نُسخ احتياطية سيتم الاحتفاظ بها بغض النظر عن مدتها" }, "last_infinite": "جميع النُسخ الاحتياطية سيتم الاحتفاظ بها", "daily": { "zero": "القاعدة غير نشطة", - "two": "اخر () نُسخ احتياطية يومية سيتم الاحتفاظ بها", - "one": "اخر () نسخة احتياطية ليومية سيتم الاحتفاظ بها", - "few": "اخر () نُسخ احتياطية يومية سيتم الاحتفاظ بها", - "many": "اخر () نُسخ احتياطية يومية سيتم الاحتفاظ بها", - "other": "اخر () نُسخ احتياطية يومية سيتم الاحتفاظ بها" + "two": "اخر {} نُسخ احتياطية يومية سيتم الاحتفاظ بها", + "one": "اخر {} نسخة احتياطية ليومية سيتم الاحتفاظ بها", + "few": "اخر {} نُسخ احتياطية يومية سيتم الاحتفاظ بها", + "many": "اخر {} نُسخ احتياطية يومية سيتم الاحتفاظ بها", + "other": "اخر {} نُسخ احتياطية يومية سيتم الاحتفاظ بها" }, "weekly": { "zero": "القاعدة غير نشطة", - "two": "اخر () نسخ احتياطية أسبوعية سيتم الاحتفاظ بها", - "few": "اخر () نسخ احتياطية أسبوعية سيتم الاحتفاظ بها", - "other": "اخر () نسخ احتياطية أسبوعية سيتم الاحتفاظ بها", - "one": "اخر () نسخة احتياطية أسبوعية سيتم الاحتفاظ بها", - "many": "اخر () نسخ احتياطية أسبوعية سيتم الاحتفاظ بها" + "two": "اخر {} نسخ احتياطية أسبوعية سيتم الاحتفاظ بها", + "few": "اخر {} نسخ احتياطية أسبوعية سيتم الاحتفاظ بها", + "other": "اخر {} نسخ احتياطية أسبوعية سيتم الاحتفاظ بها", + "one": "اخر {} نسخة احتياطية أسبوعية سيتم الاحتفاظ بها", + "many": "اخر {} نسخ احتياطية أسبوعية سيتم الاحتفاظ بها" }, "monthly": { "zero": "القاعدة غير نشطة", - "one": "اخر () نسخة احتياطية شهرية سيتم الاحتفاظ بها", - "few": "اخر () نسخ احتياطية شهرية سيتم الاحتفاظ بها", - "two": "اخر () نسخ احتياطية شهرية سيتم الاحتفاظ بها", - "other": "اخر () نسخ احتياطية شهرية سيتم الاحتفاظ بها", - "many": "اخر () نسخ احتياطية شهرية سيتم الاحتفاظ بها" + "one": "اخر {} نسخة احتياطية شهرية سيتم الاحتفاظ بها", + "few": "اخر {} نسخ احتياطية شهرية سيتم الاحتفاظ بها", + "two": "اخر {} نسخ احتياطية شهرية سيتم الاحتفاظ بها", + "other": "اخر {} نسخ احتياطية شهرية سيتم الاحتفاظ بها", + "many": "اخر {} نسخ احتياطية شهرية سيتم الاحتفاظ بها" }, "weekly_infinite": "كل النسخ الاحتياطية الأسبوعية سيتم الاحتفاظ بها", "monthly_infinite": "كل النسخ الاحتياطية الشهرية سيتم الاحتفاظ بها", "yearly": { "zero": "القاعدة غير نشطة", - "one": "اخر () نسخة احتياطية سنوية سيتم الاحتفاظ بها", - "two": "اخر () نسخ احتياطية سنوية سيتم الاحتفاظ بها", - "few": "اخر () نسخ احتياطية سنوية سيتم الاحتفاظ بها", - "many": "اخر () نسخ احتياطية سنوية سيتم الاحتفاظ بها", - "other": "اخر () نسخ احتياطية سنوية سيتم الاحتفاظ بها" + "one": "اخر {} نسخة احتياطية سنوية سيتم الاحتفاظ بها", + "two": "اخر {} نسخ احتياطية سنوية سيتم الاحتفاظ بها", + "few": "اخر {} نسخ احتياطية سنوية سيتم الاحتفاظ بها", + "many": "اخر {} نسخ احتياطية سنوية سيتم الاحتفاظ بها", + "other": "اخر {} نسخ احتياطية سنوية سيتم الاحتفاظ بها" }, "yearly_infinite": "كل النسخ الاحتياطية السنوية سيتم الاحتفاظ بها", "daily_infinite": "كل النُسخ الاحتياطية اليومية سيتم الاحتفاظ بها", @@ -582,10 +582,10 @@ "storage": { "card_title": "تخزين الخادم", "status_error": "مساحة القرص قليلة", - "disk_usage": "() تم استخدامه", - "disk_total": "() المجموع. ()", - "mb": "() ميجا بايت", - "kb": "() كيلو بايت", + "disk_usage": "{} تم استخدامه", + "disk_total": "{} المجموع. {}", + "mb": "{} ميجا بايت", + "kb": "{} كيلو بايت", "bytes": "بايت", "extend_volume_button": "سعة التخزين", "extending_volume_title": "زيادة سعة التخزين", @@ -601,7 +601,7 @@ "migration_process": "يتم الترحيل…", "migration_done": "انتهى", "status_ok": "استخدام القرص جيد", - "gb": "() جيجا بايت", + "gb": "{} جيجا بايت", "extending_volume_description": "إن تغيير سعة التخزين سيسمح لك بحفظ المزيد من البيانات من دون القيام بزيادة سعة الخادم نفسه. من الممكن زيادة سعة التخزين لكن لا يمكن تقليصها.", "extending_volume_price_info": "السعر شامل للضريبة VAT، ويتم تقديره من خلال تسعير البيانات المعطاة من مزوّد الخادم الخاص بك. سيتم إعادة تشغيل الخادم بعد تغيير سعة التخزين.", "extending_volume_provider_waiting": "تم تغيير حجم وحدة التخزين، في انتظار ١٠ ثواني…", @@ -613,7 +613,7 @@ "login_info": "لا يوجد حساب مطلوب." }, "social_network": { - "title": "الشبكة الاجتماعية", + "title": "الشبكةُ الاجتماعية", "subtitle": "قد يبدو من الصعب تصديق ما أقول، لكن أصبح الآن بإمكانك إنشاء الشبكة الإجتماعية الخاصة بك،‌ بقوانينها وجمهورها المستهدفين.", "login_info": "سيتوجّب عليك أن تنشئ حساباً على صفحة الويب." }, @@ -655,6 +655,6 @@ "support": { "title": "دعم SelfPrivacy" }, - "test": "ar-test", - "locale": "ar" + "test": "en-test", + "locale": "en" } From b288230c3b2cac3b0bc9b2ab8b51f8dceec82d10 Mon Sep 17 00:00:00 2001 From: Meko Date: Sun, 10 Mar 2024 00:06:33 +0000 Subject: [PATCH 62/75] Translated using Weblate (Ukrainian) Currently translated at 100.0% (546 of 546 strings) Translation: SelfPrivacy/SelfPrivacy App Translate-URL: http://weblate.selfprivacy.org/projects/selfprivacy/selfprivacy-app/uk/ --- assets/translations/uk.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/assets/translations/uk.json b/assets/translations/uk.json index ca40b46b..11f8bb90 100644 --- a/assets/translations/uk.json +++ b/assets/translations/uk.json @@ -632,7 +632,9 @@ "use_staging_acme_description": "Використовується при налаштуванні нового сервера.", "ignore_tls_description": "Програма не буде перевіряти TLS сертифікати при підключенні до сервера.", "routing": "Роутинг програми", - "reset_onboarding_description": "Повторно показати екран привітання" + "reset_onboarding_description": "Повторно показати екран привітання", + "reset_onboarding": "Скинути прапорець перегляду привітання", + "cubit_statuses": "Поточний стан кубітів завантаження" }, "support": { "title": "Підтримка SelfPrivacy" From 577098193b7fa320e3b2b3bdd0e95b6ac6e82d3e Mon Sep 17 00:00:00 2001 From: def Date: Sun, 10 Mar 2024 00:07:29 +0000 Subject: [PATCH 63/75] Translated using Weblate (French) Currently translated at 41.9% (229 of 546 strings) Translation: SelfPrivacy/SelfPrivacy App Translate-URL: http://weblate.selfprivacy.org/projects/selfprivacy/selfprivacy-app/fr/ --- assets/translations/fr.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/assets/translations/fr.json b/assets/translations/fr.json index 218f93ed..ac4f806f 100644 --- a/assets/translations/fr.json +++ b/assets/translations/fr.json @@ -62,7 +62,9 @@ "delete_server_description": "Cela va supprimer votre serveur. Celui-ci ne sera plus accessible.", "dark_theme_title": "Thème sombre", "reset_config_description": "Réinitialiser les clés API et l'utilisateur root.", - "system_dark_theme_title": "Thème par défaut du système" + "system_dark_theme_title": "Thème par défaut du système", + "system_dark_theme_description": "Affichage de jour ou de nuit en fonction du paramétrage système", + "dangerous_settings": "Paramètres dangereux" }, "ssh": { "title": "Clés SSH", From 5144b0dcd923b8a66f73a52e1d643ff61fc98055 Mon Sep 17 00:00:00 2001 From: Yaron Date: Sun, 10 Mar 2024 09:33:58 +0000 Subject: [PATCH 64/75] Translated using Weblate (Hebrew) Currently translated at 100.0% (546 of 546 strings) Translation: SelfPrivacy/SelfPrivacy App Translate-URL: http://weblate.selfprivacy.org/projects/selfprivacy/selfprivacy-app/he/ --- assets/translations/he.json | 30 +++++++++++++++++++++--------- 1 file changed, 21 insertions(+), 9 deletions(-) diff --git a/assets/translations/he.json b/assets/translations/he.json index 1d905c80..b7265686 100644 --- a/assets/translations/he.json +++ b/assets/translations/he.json @@ -41,7 +41,8 @@ "continue": "להמשיך", "alert": "התראה", "copied_to_clipboard": "הועתק ללוח הגזירים!", - "please_connect": "נא לחבר את השרת, שם התחום וספק ה־DNS שלך לפני שצוללים פנימה!" + "please_connect": "נא לחבר את השרת, שם התחום וספק ה־DNS שלך לפני שצוללים פנימה!", + "network_error": "שגיאת רשת" }, "about_application_page": { "privacy_policy": "מדיניות פרטיות", @@ -305,7 +306,11 @@ "start_migration_button": "התחלת הסבה", "migration_process": "הסבה מתבצעת…", "migration_done": "הסתיימה", - "extending_volume_modal_description": "לשדרג ל־{} בתוכנית של {} לחודש." + "extending_volume_modal_description": "לשדרג ל־{} בתוכנית של {} לחודש.", + "extending_volume_started": "הרחבת כרך החלה", + "extending_volume_provider_waiting": "גודל כרך הספק השתנה, נמתין 10 שניות…", + "extending_volume_server_waiting": "גודל כרך השרת השתנה, נמתין 20 שניות…", + "extending_volume_rebooting": "השרת מופעל מחדש…" }, "service_page": { "enable": "הפעלת שירות", @@ -373,7 +378,8 @@ "could_not_delete_user": "לא ניתן למחוק משתמש", "could_not_add_ssh_key": "לא ניתן להוסיף מפתח SSH", "email_login": "כניסה עם דוא״ל", - "username_rule": "שם המשתמש חייב להכיל אותיות לטיניות קטנות, ספרות וקווים תחתיים ואסור לו להתחיל בספרה" + "username_rule": "שם המשתמש חייב להכיל אותיות לטיניות קטנות, ספרות וקווים תחתיים ואסור לו להתחיל בספרה", + "user_already_exists": "כבר קיים משתמש עם שם המשתמש הזה" }, "initializing": { "dns_provider_description": "שירות שמאפשר ל־IP שלך להצביע על שמות תחום:", @@ -418,7 +424,7 @@ "dns_setup": "הגדרת DNS", "nixos_installation": "התקנת NixOS", "final_checks": "בדיקות אחרונות", - "server_reboot": "השרת מופעל מחדש" + "server_reboot": "הפעלת השרת מחדש" }, "select_provider_email_notice": "אירוח דוא״ל לא יהיה זמין ללקוחות חדשים. עם זאת, אפשרות זו תיפתח לאחר השלמת התשלום הראשון שלך.", "choose_server_type_text": "קיבולות משאבים שונות תומכות בשירותים שונים. אל חשש, אפשר להגדיל את השרת שלך בכל עת", @@ -508,12 +514,12 @@ "access_granted_on": "הוענקה גישה דרך {}" }, "add_new_device_screen": { - "header": "אימות מכשיר חדש", + "header": "מכשיר חדש מאומת", "description": "נא לספק את המפתח במכשיר לאישור:", "please_wait": "נא להמתין", "tip": "המפתח תקף ל־10 דקות.", "expired": "תוקף המפתח פג.", - "get_new_key": "הנפקת מפתח חדש" + "get_new_key": "משיכת מפתח חדש" }, "revoke_device_alert": { "header": "לשלול גישה?", @@ -547,7 +553,7 @@ "purge_all_keys": "למחוק לחלוטין את כל מפתחות האימות?", "try_again": "לנסות שוב?", "unexpected_error": "שגיאת פתע במהלך הצבה מצד הספק.", - "are_you_sure": "לנסות שוב?", + "are_you_sure": "להמשיך?", "destroy_server": "להשמיד את השרת וליצור אחד חדש?", "purge_all_keys_confirm": "כן, למחוק לחלוטין את כל האסימונים שלי", "delete_server_volume": "למחוק את השרת והכרך?", @@ -562,7 +568,7 @@ "no": "לא" }, "jobs": { - "service_turn_off": "גיבוי", + "service_turn_off": "כיבוי", "service_turn_on": "הפעלה", "job_added": "נוספה משימה", "run_jobs": "הפעלת משימות", @@ -582,7 +588,13 @@ "server_jobs": "משימות בשרת", "reset_user_password": "איפוס סיסמת משתמש", "reboot_failed": "לא ניתן להפעיל את השרת מחדש. נא לעיין ביומני היישום.", - "config_pull_failed": "משיכת שדרוג ההגדרות נכשלה. שדרוג התוכנה החל בכל זאת." + "config_pull_failed": "משיכת שדרוג ההגדרות נכשלה. שדרוג התוכנה החל בכל זאת.", + "job_postponed": "נוספה משימה, אך לא תהיה לך אפשרות להפעיל אותה לאחר סיום המשימות הנוכחיות", + "job_removed": "משימה הוסרה", + "rebuild_system": "בניית המערכת מחדש", + "start_server_upgrade": "התחלת שדרוג השרת", + "change_auto_upgrade_settings": "שינוי הגדרות השדרוג האוטומטי", + "change_server_timezone": "שינוי אזור הזמן של השרת" }, "validations": { "required": "נחוץ", From d12ff88ab3e8f3aade1134f3cbe3d34cd6ede4fe Mon Sep 17 00:00:00 2001 From: Inex Code Date: Sun, 10 Mar 2024 17:07:59 +0000 Subject: [PATCH 65/75] Translated using Weblate (Russian) Currently translated at 100.0% (571 of 571 strings) Translation: SelfPrivacy/SelfPrivacy App Translate-URL: http://weblate.selfprivacy.org/projects/selfprivacy/selfprivacy-app/ru/ --- assets/translations/ru.json | 35 ++++++++++++++++++++++++++++++----- 1 file changed, 30 insertions(+), 5 deletions(-) diff --git a/assets/translations/ru.json b/assets/translations/ru.json index cb384ead..ee337491 100644 --- a/assets/translations/ru.json +++ b/assets/translations/ru.json @@ -50,10 +50,28 @@ "copy": "Копировать" }, "about_application_page": { - "title": "О приложении", + "title": "О приложении и поддержка", "application_version_text": "Версия приложения", "api_version_text": "Версия API сервера", - "privacy_policy": "Политика конфиденциальности" + "privacy_policy": "Политика конфиденциальности", + "versions": "Версии", + "matrix_channel": "Канал в Matrix", + "email_support": "Поддержка по электронной почте", + "bug_report_subtitle": "Из-за спама требуется ручное подтверждение аккаунта. Свяжитесь с нами в чате поддержки для активации аккаунта.", + "open_source_licenses": "Лицензии используемых библиотек", + "links": "Ссылки", + "website": "Наш сайт", + "documentation": "Документация", + "telegram_channel": "Канал в Telegram", + "get_support": "Получить помощь", + "matrix_support_chat": "Чат поддержки в Matrix", + "telegram_support_chat": "Чат поддержки в Telegram", + "contribute": "Внести вклад", + "source_code": "Исходный код", + "bug_report": "Сообщить о неполадке", + "help_translate": "Помочь с переводом", + "matrix_contributors_chat": "Чат разработчиков в Matrix", + "telegram_contributors_chat": "Чат разработчиков в Telegram" }, "application_settings": { "title": "Настройки приложения", @@ -77,7 +95,8 @@ "no_key_name": "Безымянный ключ", "root_title": "Это ключи суперпользователя", "root_subtitle": "Владельцы указанных здесь ключей получают полный доступ к данным и настройкам сервера. Добавляйте исключительно свои ключи.", - "input_label": "Публичный ED25519, ECDSA или RSA ключ" + "input_label": "Публичный ED25519, ECDSA или RSA ключ", + "ssh_disabled_warning": "SSH отключен. Его можно включить в настройках сервера." }, "onboarding": { "page1_title": "Цифровая независимость доступна каждому", @@ -128,7 +147,12 @@ "other": "{} ядер" }, "server_provider": "Провайдер сервера", - "dns_provider": "Провайдер DNS" + "dns_provider": "Провайдер DNS", + "allow_password_authentication_hint": "Позволяет пользователям подключаться к серверу по SSH используя свой пароль (не применяется к суперпользователю)", + "allow_password_authentication": "Разрешить вход по SSH с использованием пароля", + "settings": "Настройки сервера", + "enable_ssh": "Включить SSH", + "enable_ssh_hint": "Разрешить доступ к серверу через SSH" }, "record": { "root": "Корневой домен", @@ -607,7 +631,8 @@ "job_removed": "Задача удалена", "rebuild_system": "Пересобрать систему", "start_server_upgrade": "Начать обновление сервера", - "change_server_timezone": "Изменить часовой пояс сервера" + "change_server_timezone": "Изменить часовой пояс сервера", + "change_ssh_settings": "Изменить настройки SSH" }, "validations": { "required": "Обязательное поле", From c1a9906729bb99f23d213d10724eb8df024d5693 Mon Sep 17 00:00:00 2001 From: Inex Code Date: Sun, 10 Mar 2024 16:43:06 +0000 Subject: [PATCH 66/75] Translated using Weblate (German) Currently translated at 82.3% (470 of 571 strings) Translation: SelfPrivacy/SelfPrivacy App Translate-URL: http://weblate.selfprivacy.org/projects/selfprivacy/selfprivacy-app/de/ --- assets/translations/de.json | 29 ++++++++++++++++++----------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/assets/translations/de.json b/assets/translations/de.json index 9b067323..f8117623 100644 --- a/assets/translations/de.json +++ b/assets/translations/de.json @@ -146,7 +146,7 @@ }, "domain": { "screen_title": "Domäne und DNS", - "ok": "Aufnahmen sind in Ordnung", + "ok": "Einträge sind in Ordnung", "error": "Probleme gefunden", "error_subtitle": "Tippen sie hier, um sie zu beheben. Dadurch werden auch benutzerdefinierte DNS-Einträge entfernt.", "uninitialized": "Daten sind noch nicht vorhanden", @@ -155,13 +155,14 @@ "email_subtitle": "Für sicheren E-Mail-Austauch benötigte Einträge.", "update_list": "Liste aktualisieren", "card_title": "Domäne", - "refreshing": "Statusaktualisierung…", - "services_subtitle": "Einträge vom Typ \"A\", die für jeden Dienst erfordelich sind." + "refreshing": "Aktualisiere Status…", + "services_subtitle": "Einträge vom Typ \"A\", die für jeden Dienst erfordelich sind.", + "domain_validation_failure": "Wir können Ihre Domain nicht erreichen!" }, "backup": { "card_title": "Backup", "description": "Retten Sie im Falle eines Hackerangriffs, Serverlöschung usw.", - "reupload_key": "Erneute Hochladung des Schlüssels erzwingen", + "reupload_key": "Erneutes hochladen des Schlüssels erzwingen", "reuploaded_key": "Schlüssel auf dem Server wurde Aktualisiert", "initialize": "Initialisieren", "restore": "Von der Sicherungskopie wiederherstellen", @@ -172,12 +173,12 @@ "restore_alert": "Sie sind dabei die am {} erstellten Backup wiederherzutellen. Alle aktuelle Daten gehen dabei verloren. Sind Sie sicher?", "refresh": "Status Aktualisieren", "refetch_backups": "Backupliste neuladen", - "waiting_for_rebuild": "In wenigen Minuten können Sie Ihren ersten Backup erstellen.", + "waiting_for_rebuild": "In wenigen Minuten können Sie Ihr erstes Backup erstellen.", "error_pending": "Server hat einen Fehler zurückgegeben, überprüfen Sie es unten", "refetching_list": "In wenigen Minuten wird die Liste neugeladen", - "card_subtitle": "Verwalte deine Backups", + "card_subtitle": "Backups verwalten", "refetch_backups_subtitle": "Cache überprüfen und Daten vom Speicherprovider neu abrufen. Könnte zusätzliche Kosten verursachen.", - "reupload_key_subtitle": "Weist den Server an, Backupseicher zu initialisieren. Benutze diese Option, wenn etwas kaputt ist.", + "reupload_key_subtitle": "Weist den Server an den Backup-Speicher neu zu initialisieren. Falls etwas kaputt ist", "select_all": "Alles backupen", "create_new_select_heading": "Wähle aus, was zum Backup dazugehören soll", "show_more": "Mehr anzeigen", @@ -186,10 +187,10 @@ "latest_snapshots": "Neuster Snapshot", "latest_snapshots_subtitle": "Zeige die letzten 15 Snapshots", "autobackup_period_title": "Automatische Backup-Zeitspanne", - "autobackup_period_subtitle": "Backups werden erstellt, jede {period}", + "autobackup_period_subtitle": "Backups werden jede {period} angelegt", "autobackup_period_never": "Automatische Backups sind deaktiviert", "autobackup_period_every": "Jede {period}", - "autobackup_period_disable": "Deaktiviere automatische Backups", + "autobackup_period_disable": "Automatische Backups deaktivieren", "autobackup_custom": "Eigene", "autobackup_custom_hint": "Eigenen Zeitraum in Minuten eingeben", "autobackup_set_period": "Setze Zeitraum", @@ -206,7 +207,7 @@ "snapshot_service_title": "Service", "snapshot_creation_time_title": "Zeit der Erstellung", "snapshot_id_title": "Snapshot ID", - "snapshot_modal_select_strategy": "Wählen sie die Art der Wiederherstellung", + "snapshot_modal_select_strategy": "Wähle die Wiederherstellungsstrategie", "snapshot_modal_download_verify_option_title": "Herunterladen, verifizieren und dann ersetzen", "backups_encryption_key_not_found": "Verschlüsselungscode noch nicht gefunden, bitte versuchen sie es später noch einmal.", "forget_snapshot": "Vergiss diesen Snapshot", @@ -214,7 +215,13 @@ "forget_snapshot_error": "Dieser Snapshot konnte nicht vergessen werden", "snapshot_modal_heading": "Snapshot Details", "snapshot_modal_inplace_option_title": "An Ort und Stelle ersetzen", - "snapshot_modal_inplace_option_description": "Weniger freier Speicherplatz benötigt, aber höheres Risiko. Ersetzt die vorhanden Daten, während dem Herunterladen, mit den Daten des Snapshots." + "snapshot_modal_inplace_option_description": "Weniger freier Speicherplatz benötigt, aber höheres Risiko. Ersetzt die vorhanden Daten, während dem Herunterladen, mit den Daten des Snapshots.", + "snapshot_reason_title": "Erzeugungsgrund", + "restore_started": "Wiederherstellung gestartet, prüfe den aktuellen Status der Jobliste", + "snapshot_reasons": { + "auto": "Automatisch erzeugt", + "unknown": "Unbekannt" + } }, "storage": { "card_title": "Serverspeicher", From a9114fb3f4e6678ff31baa006690c5a837a29abd Mon Sep 17 00:00:00 2001 From: Inex Code Date: Sun, 10 Mar 2024 17:04:30 +0000 Subject: [PATCH 67/75] Translated using Weblate (Kazakh) Currently translated at 20.4% (117 of 571 strings) Translation: SelfPrivacy/SelfPrivacy App Translate-URL: http://weblate.selfprivacy.org/projects/selfprivacy/selfprivacy-app/kk/ --- assets/translations/kk.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assets/translations/kk.json b/assets/translations/kk.json index 60c7dfec..ae618189 100644 --- a/assets/translations/kk.json +++ b/assets/translations/kk.json @@ -90,7 +90,7 @@ "help_translate": "Аудармаға көмектесу", "telegram_contributors_chat": "Үлес қосушылардың Telegram чаты", "privacy_policy": "Құпиялылық саясаты", - "bug_report_subtitle": "Қате туралы егжей-тегжейлі." + "bug_report_subtitle": "Спамға байланысты есептік жазбаны қолмен растау қажет. Тіркелгіні белсендіру үшін Қолдау чатында бізге хабарласыңыз." }, "application_settings": { "dangerous_settings": "Қауіпті параметрлер", From 54ebaf34dbdc4e7a58ff4e6bc2b17dc5c8d18e7d Mon Sep 17 00:00:00 2001 From: Deem Alosili Date: Sun, 10 Mar 2024 20:14:18 +0000 Subject: [PATCH 68/75] Translated using Weblate (Arabic) Currently translated at 98.7% (564 of 571 strings) Translation: SelfPrivacy/SelfPrivacy App Translate-URL: http://weblate.selfprivacy.org/projects/selfprivacy/selfprivacy-app/ar/ --- assets/translations/ar.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/assets/translations/ar.json b/assets/translations/ar.json index 6e8719a2..4d085b26 100644 --- a/assets/translations/ar.json +++ b/assets/translations/ar.json @@ -318,7 +318,7 @@ }, "more_page": { "configuration_wizard": "معالج الإعداد", - "onboarding": "التهيئة", + "onboarding": "جاري الإعداد", "create_ssh_key": "مفاتيح SSH للمستخدم المميز" }, "console_page": { @@ -461,7 +461,7 @@ "card_subtitle": "قم بإدارة النسخ الاحتياطية الخاصة بك", "reupload_key": "مفتاح إعادة التحميل الاضطراري", "reuploaded_key": "مفتاح إعادة التحميل", - "initialize": "البدء", + "initialize": "التهيئة", "waiting_for_rebuild": "ستتمكن من إنشاء نسختك الإحتياطية الأولى خلال بضع دقائق.", "refresh": "قم بتحديث الحالة", "refetch_backups": "قم بجلب قائمة النسخ الإحتياطي مرة أخرى", @@ -629,7 +629,7 @@ "uses": "استخدام {usage} على {volume}", "snapshots": "لقطات منسوخة احتياطاً", "status": { - "active": "تشغيل", + "active": "قيد التشغيل", "inactive": "إيقاف", "off": "غير نشط", "activating": "تنشيط", From 61752c71f2efb5d5a188ebc7ff6974bc2811d8b2 Mon Sep 17 00:00:00 2001 From: Dmitri B Date: Wed, 13 Mar 2024 03:59:05 +0000 Subject: [PATCH 69/75] Translated using Weblate (Estonian) Currently translated at 100.0% (571 of 571 strings) Translation: SelfPrivacy/SelfPrivacy App Translate-URL: http://weblate.selfprivacy.org/projects/selfprivacy/selfprivacy-app/et/ --- assets/translations/et.json | 37 +++++++++++++++++++++++++++++++------ 1 file changed, 31 insertions(+), 6 deletions(-) diff --git a/assets/translations/et.json b/assets/translations/et.json index 461f0b9f..7814fa6c 100644 --- a/assets/translations/et.json +++ b/assets/translations/et.json @@ -39,7 +39,12 @@ "few": "{} tuumi", "many": "{} tuumi", "other": "{} tuumi" - } + }, + "settings": "Serveri seaded", + "enable_ssh": "SSH lubamine", + "allow_password_authentication": "Luba SSH-ga sisselogimine parooli kasutades", + "enable_ssh_hint": "Luba juurdepääs serverile SSH kaudu", + "allow_password_authentication_hint": "Võimaldab kasutajatel SSH kaudu serveriga ühenduda, kasutades oma parooli (ei kehti superkasutajale)" }, "ssh": { "root_subtitle": "Nende võtmete omanikud saavad serverisse täieliku juurdepääsu ja saavad sellega teha mida iganes. Lisage serverisse ainult omaenda võtmed.", @@ -51,7 +56,8 @@ "subtitle_without_keys": "Võtmeid pole", "no_key_name": "Nimetu võti", "root_title": "Need on superkasutaja võtmed", - "input_label": "Avalik ED25519, ECDSA või RSA võti" + "input_label": "Avalik ED25519, ECDSA või RSA võti", + "ssh_disabled_warning": "SSH on välja lülitatud. Seda saab lubada serveri seadetes." }, "onboarding": { "page2_dns_provider_text": "Teil on vaja domeeni, et olla Internetis olemas. Ja teil on vaja ka usaldusväärset DNS teenuse pakkujat, et domeen suunataks teie serverisse. Me soovitame teil valida toetatud DNS teenuse pakkuja, et võrguühenduse automaatselt seadistada.", @@ -116,10 +122,28 @@ "copy": "Kopeeri" }, "about_application_page": { - "title": "Teave", + "title": "Teave ja klienditugi", "application_version_text": "Rakenduse versioon", "api_version_text": "Serveri API versioon", - "privacy_policy": "Privaatsuspoliitika" + "privacy_policy": "Privaatsuspoliitika", + "versions": "Versioonid", + "open_source_licenses": "Avaallika litsentsid", + "links": "Lingid", + "website": "Meie veebisait", + "documentation": "Dokumentatsioon", + "matrix_channel": "Kanal Matrix", + "telegram_channel": "Telegram kanal", + "get_support": "Abi saamine", + "matrix_support_chat": "Matrixi toetuse vestlus", + "telegram_support_chat": "Toetuse vestlus Telegram", + "email_support": "Toetus e-posti teel", + "contribute": "Kaasa aitama", + "help_translate": "Aidake meil tõlkida", + "source_code": "Lähtekood", + "bug_report": "Raporteeri vead", + "bug_report_subtitle": "Rämpsposti tõttu on vajalik käsitsi konto kinnitamine. Võtke meiega ühendust toe vestlusel oma konto aktiveerimiseks.", + "matrix_contributors_chat": "Arendajate vestlusruum Matrix", + "telegram_contributors_chat": "Arendajate vestlusruum Telegram" }, "resource_chart": { "month": "Kuu", @@ -154,7 +178,7 @@ "uninitialized": "Andmeid pole veel kätte saadud", "services_title": "Teenused", "services_subtitle": "Iga teenuse jaoks on vajalikud \"A\" kirjed.", - "email_title": "E-post", + "email_title": "Elektrooniline post", "email_subtitle": "Kirjed turvaliseks e-kirja vahetamiseks vajalikud.", "update_list": "Värskenda nimekirja", "domain_validation_failure": "Me ei saa teie domeenile juurde!" @@ -584,7 +608,8 @@ "rebuild_system": "Süsteemi ümberkorraldamine", "start_server_upgrade": "Serveri värskenduse käivitamine", "change_auto_upgrade_settings": "Automaatse värskenduse seadete muutmine", - "change_server_timezone": "Serveri ajavööndi muutmine" + "change_server_timezone": "Serveri ajavööndi muutmine", + "change_ssh_settings": "Muuda SSH seadeid" }, "validations": { "required": "Nõutud", From 79b9f53fa613e6970e8daa4dd600190f7a951f62 Mon Sep 17 00:00:00 2001 From: Weblate Date: Thu, 14 Mar 2024 16:00:58 +0000 Subject: [PATCH 70/75] Update translation files Updated by "Cleanup translation files" hook in Weblate. Translation: SelfPrivacy/SelfPrivacy App Translate-URL: http://weblate.selfprivacy.org/projects/selfprivacy/selfprivacy-app/ --- assets/translations/ar.json | 60 ++----------------------------- assets/translations/az.json | 53 +++------------------------ assets/translations/be.json | 55 ++-------------------------- assets/translations/cs.json | 55 ++-------------------------- assets/translations/de.json | 59 ++---------------------------- assets/translations/es.json | 2 -- assets/translations/et.json | 60 ++----------------------------- assets/translations/fr.json | 40 +-------------------- assets/translations/he.json | 62 +++----------------------------- assets/translations/kk.json | 2 -- assets/translations/lv.json | 24 +------------ assets/translations/pl.json | 57 ++--------------------------- assets/translations/ru.json | 56 +---------------------------- assets/translations/sk.json | 45 ----------------------- assets/translations/sl.json | 42 ++-------------------- assets/translations/th.json | 41 +-------------------- assets/translations/uk.json | 60 ++----------------------------- assets/translations/zh_Hans.json | 60 ++----------------------------- 18 files changed, 37 insertions(+), 796 deletions(-) diff --git a/assets/translations/ar.json b/assets/translations/ar.json index 4d085b26..4c02806f 100644 --- a/assets/translations/ar.json +++ b/assets/translations/ar.json @@ -1,8 +1,4 @@ { - "vpn": { - "title": "خادم VPN", - "subtitle": "خادم VPN المغلق" - }, "users": { "login": "تسجيل الدخول", "could_not_fetch_description": "من فضلك، قم بتفحُّص اتصال الإنترنت وحاول مرة أخرى", @@ -18,7 +14,6 @@ "delete_confirm_question": "هل أنت متأكد؟", "reset_password": "تغيير كلمة المرور", "account": "الحساب", - "send_registration_data": "قم بمشاركة بيانات اعتماد تسجيل الدخول", "could_not_fetch_users": "لم نتمكن من إحضار قائمة المستخدمين", "refresh_users": "قم بتحديث قائمة المستخدمين", "could_not_create_user": "تعذر إنشاء المستخدم", @@ -29,7 +24,6 @@ "initializing": { "select_provider_price_text_hetzner": "يتطلب ذلك ٨ يورو شهريًا لخادم يعد صغير نسبيًا ومساحة تخزين القرص تقدّر بـ٥٠ جيجابايت", "select_provider_notice": "نعني بكلمة \"صغير نسبيًا\" جهازا يحتوي على ٢ من CPU (وحدة المعالجة المركزية)، و٢جيجابايت من RAM (ذاكرة الوصول العشوائي).", - "no_server_types_found": "لم يتم العثور على أنواع خوادم متاحة. تأكد من إمكانية الوصول إلى حسابك وحاول تغيير موقع الخادم الخاص بك.", "connect_to_server_provider_text": "باستخدام رمز API الخاص، ستقوم بتمكين SelfPrivacy من استئجار جهاز وإعداد الخادم الخاص بك عليها", "choose_server_type_payment_storage": "{} لمساحة تخزين إضافية", "choose_server_type_payment_ip": "{} لعنوان IPv4 العام", @@ -37,7 +31,6 @@ "select_provider": "اختر أي مزود من القائمة التالية. كل منهم يدعم SelfPrivacy", "connect_to_server_provider": "قم بتسجيل الدخول الآن ", "multiple_domains_found": "لقد وجدت نطاقات عديدة", - "found_more_domains": "لقد وجد أكثر من نطاق واحد. من أجل سلامتك، نرجو منك حذف النطاقات غير الضرورية", "steps": { "master_account": "الحساب الرئيسي", "server_reboot": "إعادة تشغيل الخادم", @@ -58,8 +51,6 @@ "server_rebooted": "تم إعادة تشغيل الخادم، انتظر حتى آخر عملية تحقق…", "server_created": "تم إنشاء الخادم، يتم الآن إجراء عدة تحققات لـDNS وتمهيد الخادم…", "enter_username_and_password": "قم بإدخال اسم المستخدم وكلمة مرور قوية", - "server_provider_description": "المكان الذي فيه بياناتك وخدمات SelfPrivacy الخاصة بك ستكون موجودة في:", - "dns_provider_description": "خدمة تتيح لعنوان IP الخاص بك بالإشارة إلى أسماء النطاقات:", "connect_to_server": "لنبدأ بالخادم.", "select_provider_countries_title": "الدول المتاح فيها", "select_provider_countries_text_hetzner": "ألمانيا، فنلندا، الولايات المتحدة الأمريكية", @@ -68,7 +59,6 @@ "select_provider_payment_title": "طريقة الدفع", "select_provider_payment_text_hetzner": "بطاقات الائتمان، سويفت(SWIFT)، سيبا(SEPA)، باي بال(PayPal)", "select_provider_payment_text_do": "بطاقات الائتمان، جوجل باي (Google Pay)، باي بال (PayPal)", - "select_provider_payment_text_cloudflare": "بطاقات الإئتمان", "select_provider_site_button": "قم بزيارة الموقع", "how": "كيف يمكنني الحصول على رمز API المميز", "provider_bad_key_error": "مزوّد مفتاح API غير صالح", @@ -88,11 +78,8 @@ "dns_provider_bad_key_error": "مفتاح API غير صالح", "backblaze_bad_key_error": "معلومات تخزين Backblaze غير صالحة", "connect_to_dns": "قم بالارتباط بمزود DNS", - "connect_to_dns_provider_text": "من خلال رمز API الخاص فإن SelfPrivacy ستدير كل مدخلات DNS", "select_dns": "دعنا الآن نختار مزود DNS", - "manage_domain_dns": "لإدارة DNS الخاص بنطاقك", "use_this_domain_text": "الرمز الخاص اللذي اعطيتنا إياه سيمنحنا إمكانية الوصول للنطاقات التالية", - "connect_backblaze_storage": "قم بالارتباط بتخزين Blackblaze", "no_connected_domains": "لا توجد نطاقات تم الارتباط بها في الوقت الحالي", "loading_domain_list": "جاري تحميل قائمة النطاقات", "save_domain": "احفظ النطاق", @@ -105,18 +92,13 @@ "check": "تحقق", "one_more_restart": "ستتم إعادة التشغيل مرة أخرى حتى يتم تطبيق شهادة الأمان الخاصة بك.", "create_master_account": "إنشاء الحساب الرئيسي", - "finish": "كل شيء قد تم تهيئته", "checks": "جميع إجراءات التحقق قد اكتملت.\n{} من أصل {}", "select_provider_price_free": "مجاني" }, "cloud": { - "login_info": "تسجيل الدخول هو المشرف، أما كلمة المرور فهي نفس المستخدم الرئيسي الخاص بك. أنشئ حسابات جديدة على واجهة Nextcloud.", - "title": "تخزين السحابة", - "subtitle": "لا تسمح للخدمات السحابية بالإطلاع على بياناتك باستخدام Nextcloud." + "login_info": "تسجيل الدخول هو المشرف، أما كلمة المرور فهي نفس المستخدم الرئيسي الخاص بك. أنشئ حسابات جديدة على واجهة Nextcloud." }, "git": { - "subtitle": "يوجد بديل خاص ومغلق عن منصة GitHub، اللتي بدورها تنتمي لك، لا لمايكروسوفت.", - "title": "خادم Git", "login_info": "سيتوجب عليك إنشاء حساب على صفحة الويب، وأول مستخدم سيصبح مشرفاً." }, "recovering": { @@ -193,7 +175,6 @@ "purge_all_keys": "هل تريد محو جميع مفاتيح الّتي مُنحت الموافقة؟", "delete_server_volume": "هل تريد حذف الخادم ووحدة التخزين؟", "reboot": "قم بإعادة التشغيل", - "you_cant_use_this_api": "لن تتمكن من استخدام واجهة برمجة التطبيقات هذه (API) للنطاقات مثل TLD.", "yes": "نعم", "no": "لا" }, @@ -366,8 +347,6 @@ "title": "مفاتيح SSH", "create": "قم بإنشاء مفتاح SSH", "delete": "قم بحذف مفتاح SSH", - "subtitle_with_keys": "{} مفاتيح", - "subtitle_without_keys": "لا توجد مفاتيح", "no_key_name": "مفتاح لم تتم تسميته", "root_title": "هذه مفاتيح المستخدم المميز", "delete_confirm_question": "هل أنت متأكد من رغبتك بإزالة مفتاح SSH؟", @@ -425,26 +404,11 @@ "reboot_after_upgrade_hint": "قم بإعادة التشغيل من دون طلب الإذن بعد أن تطبق التغييرات على الخادم", "reboot_after_upgrade": "قم بإعادة التشغيل بعد التحديث" }, - "record": { - "root": "جذر النطاق", - "social": "شبكة اجتماعية", - "api": "الواجهة البرمجية API لتطبيق SelfPrivacy", - "cloud": "الملف على السحابة", - "git": "خادم البوابة", - "meet": "اجتماع بالفيديو", - "password": "إدارة كلمة المرور", - "vpn": "VPN", - "dmarc": "سجل DMARC", - "spf": "سجل SPF", - "dkim": "مفتاح DKIM", - "mx": "سجل MX" - }, "domain": { "card_title": "نطاق", "screen_title": "النطاق وDNS", "ok": "السجلّات جيدة", "error": "توجد مشاكل", - "domain_validation_failure": "لا يمكننا الوصول لنطاقك!", "uninitialized": "لم يتم استرداد البيانات بعد", "services_title": "الخدمات", "refreshing": "جاري تحديث الحالة …", @@ -455,14 +419,11 @@ "error_subtitle": "اضغط هنا لإصلاحم، سيزيل هذا أيضاً السجل المخصص." }, "backup": { - "creating": "يتم الآن إنشاء نسخة احتياطية جديدة {}%", - "restoring": "الاستعادة من النسخة الاحتياطية", "card_title": "نسخة احتياطية", "card_subtitle": "قم بإدارة النسخ الاحتياطية الخاصة بك", "reupload_key": "مفتاح إعادة التحميل الاضطراري", "reuploaded_key": "مفتاح إعادة التحميل", "initialize": "التهيئة", - "waiting_for_rebuild": "ستتمكن من إنشاء نسختك الإحتياطية الأولى خلال بضع دقائق.", "refresh": "قم بتحديث الحالة", "refetch_backups": "قم بجلب قائمة النسخ الإحتياطي مرة أخرى", "reupload_key_subtitle": "سيتم توجيه الخادم للبدء بتخزين النسخ الاحتياطي مرة ثانية. قم باستخدامه في حالة حصول عطل ما.", @@ -477,10 +438,7 @@ "autobackup_period_never": "النسخ الإحتياطي التلقائي غير نشط", "autobackup_period_every": "كل {period}", "autobackup_period_disable": "قم بإيقاف النسخ الإحتياطي التلقائي", - "autobackup_custom": "تخصيص", - "autobackup_custom_hint": "قم بإدخال مدة معينة تتكون من دقائق", "autobackup_set_period": "ضع مدة زمنية", - "autobackup_period_set": "المدة المحددة", "backups_encryption_key": "مفتاح التشفير", "backups_encryption_key_subtitle": "احفظه في مكان آمن.", "backups_encryption_key_copy": "قم بنسخ مفتاح التشفير", @@ -506,7 +464,6 @@ }, "rotation_quotas_title": "إعدادات دوران اللقطات (من نقطة البداية للنهاية)", "set_rotation_quotas": "‏قم بتعيين أوقات جديدة للدوران", - "quotas_set": "وقت دوران النسخ الاحتياطي الجديد المخصص", "quota_titles": { "daily": "كم عدد النسخ الاحتياطية اليومية التي يجب حفظها", "last": "كم عدد النسخ الاحتياطية الحديثة التي يجب حفظها", @@ -565,7 +522,6 @@ "restore": "قم بالاسترجاع من النسخة الاحتياطية", "no_backups": "لا توجد نسخ احتياطية حتى الآن", "create_new": "قم بإنشاء نسخة احتياطية جديدة", - "error_pending": "حدث خطأ أثناء إعادة السيرفر، قم بالفحص أدناه", "restore_alert": "إنك على وشك استرجاع نسخة احتياطية أنشئت في {}، حيث أن كل البيانات الحالية ستفقد، هل أنت متأكد من ذلك؟", "service_busy": "توجد عملية نسخ احتياطي أخرى جارية الآن", "quotas_only_applied_to_autobackups": "هذه الإعدادات قابلة للتطبيق فقط على النسخ الإحتياطية التلقائية، أما النسخ الإحتياطية اليدوية فلن يتم حذفها.", @@ -598,8 +554,6 @@ "data_migration_title": "ترحيل البيانات", "data_migration_notice": "خلال القيام بترحيل البيانات سيتم إغلاق جميع الخدمات.", "start_migration_button": "إبدأ بالترحيل", - "migration_process": "يتم الترحيل…", - "migration_done": "انتهى", "status_ok": "استخدام القرص جيد", "gb": "{} جيجا بايت", "extending_volume_description": "إن تغيير سعة التخزين سيسمح لك بحفظ المزيد من البيانات من دون القيام بزيادة سعة الخادم نفسه. من الممكن زيادة سعة التخزين لكن لا يمكن تقليصها.", @@ -608,13 +562,9 @@ "extending_volume_modal_description": "الترقية إلى {} لأجل {} الخطة الشهرية." }, "video": { - "title": "فيديو ميت (لقاء عبر الفيديو)", - "subtitle": "يعد كلا من برنامجي زوم وجوجل مييت (Google Meet & Zoom) خيارين جيدين، لكن Jitsi Meet يعد تطبيقاً جديراً بالإختيار، لأنه تطبيق آمن حيث أنه لن يتم التنصُّت عليك.", "login_info": "لا يوجد حساب مطلوب." }, "social_network": { - "title": "الشبكةُ الاجتماعية", - "subtitle": "قد يبدو من الصعب تصديق ما أقول، لكن أصبح الآن بإمكانك إنشاء الشبكة الإجتماعية الخاصة بك،‌ بقوانينها وجمهورها المستهدفين.", "login_info": "سيتوجّب عليك أن تنشئ حساباً على صفحة الويب." }, "not_ready_card": { @@ -640,14 +590,10 @@ "enable": "قم بتنشيط الخدمة" }, "mail": { - "title": "البريد الإلكتروني", - "login_info": "استعمل اسم المستخدم وكلمة المرور من خلال علامة تبويب المستخدمين. منفذ IMAP هو 143 مع STARTTLS، ومنفذ SMTP هو 587 مع STARTTLS.", - "subtitle": "البريد الإلكتروني للشركة وللعائلة." + "login_info": "استعمل اسم المستخدم وكلمة المرور من خلال علامة تبويب المستخدمين. منفذ IMAP هو 143 مع STARTTLS، ومنفذ SMTP هو 587 مع STARTTLS." }, "password_manager": { - "title": "مدير كلمة المرور", - "login_info": "سيتوجب عليك إنشاء حساب على صفحة الويب.", - "subtitle": "قاعدة الأمان الخاصة بك. سيساعدك Bitwarden بإنشاء كلمة المرور وتخزينها ونقلها بين الأجهزة، كذلك عند قيامك بإدخالهم حين يطلب منك إكمالهم بشكل تلقائي." + "login_info": "سيتوجب عليك إنشاء حساب على صفحة الويب." }, "timer": { "sec": "{} ثانية" diff --git a/assets/translations/az.json b/assets/translations/az.json index 07e66184..db509e48 100644 --- a/assets/translations/az.json +++ b/assets/translations/az.json @@ -69,8 +69,6 @@ "create": "SSH açarı yaradın", "delete": "SSH açarını silin", "delete_confirm_question": "Növbəti SSH açarı silmək istədiyinizə əminsiniz?", - "subtitle_with_keys": "{} açarlar", - "subtitle_without_keys": "Açar yoxdur", "no_key_name": "Adsız açar", "root_title": "Bunlar super istifadəçi açarlarıdır", "input_label": "İctimai ED25519 və ya RSA açarı", @@ -124,20 +122,6 @@ "many": "{} nüvələr" } }, - "record": { - "root": "Kök domen", - "api": "SelfPrivacy APİ", - "cloud": "Fayl buludu", - "git": "Git Server", - "meet": "Video konfrans", - "social": "Sosial Mediya", - "password": "Parol meneceri", - "vpn": "VPN", - "mx": "MX rekordu", - "spf": "SPF rekordu", - "dkim": "DKIM açarı", - "dmarc": "DMARC rekordu" - }, "domain": { "card_title": "Domen", "screen_title": "Domain və DNS", @@ -157,13 +141,9 @@ "reupload_key": "Açar yeniləməsini məcbur edin", "reuploaded_key": "Server açarı yeniləndi", "initialize": "Qurunmaq", - "waiting_for_rebuild": "Bir neçə dəqiqədən sonra ilk nüsxəni yarada biləcəksiniz.", "restore": "Kopyadan bərpa edin", "no_backups": "Yedəkləmə hələ yoxdur", "create_new": "Yeni nüsxə yaradın", - "creating": "Surəti çıxarmaq: {}%", - "restoring": "Kopyadan bərpa edilir", - "error_pending": "Server xəta verdi: aşağıda yoxlayın", "restore_alert": "Siz {} tərəfindən yaradılmış nüsxədən bərpa etmək üzrəsiniz. Bütün cari məlumatlar itiriləcək. Sən əminsən?", "refresh": "Statusu yenilə", "refetch_backups": "Kopya siyahısını yeniləyin", @@ -188,9 +168,7 @@ "extending_volume_description": "Yaddaş ölçüsünün dəyişdirilməsi, serverin özünü genişləndirmədən serverinizdə daha çox məlumat saxlamağa imkan verəcəkdir. Həcmi yalnız artırmaq olar, onu azaltmaq olmaz.", "data_migration_title": "Məlumat miqrasiya", "data_migration_notice": "Məlumatların köçürülməsi zamanı bütün xidmətlər deaktiv ediləcək.", - "start_migration_button": "Miqrasiyaya başlayın", - "migration_process": "Köçür…", - "migration_done": "Tamamlayın" + "start_migration_button": "Miqrasiyaya başlayın" }, "service_page": { "move": "Başqa sürücüyə keçin", @@ -210,24 +188,16 @@ } }, "mail": { - "login_info": "İstifadəçilər sekmesinden istifadəçi adı və paroldan istifadə edin. IMAP portu: 143, STARTTLS. SMTP portu: 587, STARTTLS.", - "title": "E-poçt", - "subtitle": "Ailə və ya şirkət üçün e-poçt." + "login_info": "İstifadəçilər sekmesinden istifadəçi adı və paroldan istifadə edin. IMAP portu: 143, STARTTLS. SMTP portu: 587, STARTTLS." }, "video": { - "subtitle": "Jitsi meet Zoom və Google meet-in əla analoqudur və bu, rahatlıqla yanaşı, yüksək keyfiyyətli video konfransların təhlükəsizliyini təmin edir.", - "title": "video konfrans", "login_info": "Hesab tələb olunmur." }, "cloud": { - "login_info": "Administrator girişi: admin, parol əsas istifadəçi ilə eynidir. NextCloud admin interfeysində yeni istifadəçilər yaradın.", - "title": "Fayl bulud", - "subtitle": "Bulud xidmətlərinin məlumatlarınıza baxmasının qarşısını alın. NextCloud istifadə edin - bütün məlumatlarınız üçün təhlükəsiz ev." + "login_info": "Administrator girişi: admin, parol əsas istifadəçi ilə eynidir. NextCloud admin interfeysində yeni istifadəçilər yaradın." }, "git": { - "login_info": "Saytda hesab yaradılmalıdır. İlk qeydiyyatdan keçmiş istifadəçi administrator olur.", - "title": "Git Server", - "subtitle": "Microsoft-a deyil, sizə məxsus şəxsi Github alternativi." + "login_info": "Saytda hesab yaradılmalıdır. İlk qeydiyyatdan keçmiş istifadəçi administrator olur." }, "users": { "could_not_fetch_description": "İnternet bağlantısını yoxlayın və yenidən cəhd edin", @@ -241,7 +211,6 @@ "delete_confirm_question": "Hesabınızı silmək istədiyinizə əminsiniz?", "reset_password": "Parolu sıfırlayın", "account": "Hesab", - "send_registration_data": "Detalları paylaşın", "could_not_fetch_users": "İstifadəçiləri əldə etmək alınmadı", "refresh_users": "İstifadəçi siyahısını yeniləyin", "could_not_create_user": "İstifadəçi yaratmaq alınmadı", @@ -257,7 +226,6 @@ "connect_to_server_provider_text": "Token API-dən istifadə edərək SelfPrivacy proqramı sizin adınıza server sifariş edə və konfiqurasiya edə biləcək", "no_locations_found": "Heç bir məkan tapılmadı, lütfən, hesabınızın mövcud olduğundan əmin olun", "choose_server_type_text": "Server resursları hansı xidmətlərin başlaya biləcəyini müəyyənləşdirir. İstənilən vaxt serveri genişləndirə bilərsiniz", - "no_server_types_found": "Heç bir mövcud server növləri tapılmadı! Lütfən, server provayderinə girişinizin olduğundan əmin olun...", "server_rebooted": "Server yenidən başladıldı, son yoxlamanı gözləyirik…", "one_more_restart": "İndi təhlükəsizlik sertifikatlarını aktivləşdirmək üçün əlavə reboot olacaq.", "connect_to_server": "Serverdən başlayaq.", @@ -288,13 +256,10 @@ "choose_server_type_payment_per_month": "{} aylıq", "backblaze_bad_key_error": "Backblaze vault haqqında məlumat yanlışdır", "select_dns": "İndi DNS provayderini seçək", - "manage_domain_dns": "Domeninizin DNS-ni idarə etmək üçün", "use_this_domain": "Biz bu domendən istifadə edirik?", "use_this_domain_text": "Göstərdiyiniz token bu domen üzərində nəzarəti təmin edir", - "connect_backblaze_storage": "Backblaze bulud yaddaşınızı birləşdirin", "no_connected_domains": "Hazırda heç bir bağlı domen yoxdur", "loading_domain_list": "Domenlərin siyahısı yüklənir", - "found_more_domains": "Birdən çox domen tapıldı, təhlükəsizliyiniz üçün lazımsız domenləri silin", "save_domain": "Domeni yadda saxla", "final": "Son addım", "create_server": "Server yaradın", @@ -305,7 +270,6 @@ "check": "Yoxlanış", "create_master_account": "Əsas hesab yaradın", "enter_username_and_password": "İstifadəçi adı və mürəkkəb parol daxil edin", - "finish": "Hər şey işə salınıb", "checks": "Yoxlamalar aparıldı:. \n{} / {}", "steps": { "hosting": "Hostinq", @@ -419,7 +383,6 @@ "purge_all_keys_confirm": "Bəli, bütün düymələri silin", "delete_server_volume": "Server və yaddaş silinsin?", "reboot": "Yenidən yükləyin", - "you_cant_use_this_api": "Siz oxşar TLD ilə domen üçün bu API istifadə edə bilməzsiniz.", "yes": "Bəli", "no": "Yox" }, @@ -460,19 +423,11 @@ "in_menu": "Server hələ konfiqurasiya edilməyib, əlaqə sihirbazından istifadə edin." }, "password_manager": { - "title": "Parol Meneceri", - "subtitle": "Bu, təhlükəsizliyinizin əsasıdır. Bitwarden sizə cihazlar arasında parollar yaratmağa, saxlamağa, köçürməyə və onları formalara çevirməyə kömək edəcək.", "login_info": "Saytda hesab yaradılmalıdır." }, "social_network": { - "title": "sosial Mediya", - "subtitle": "İnanmaq çətindir, lakin öz qaydaları və auditoriyası olan öz sosial şəbəkənizi yaratmaq mümkün oldu.", "login_info": "Аккаунт нужно создать на сайте." }, - "vpn": { - "title": "VPN server", - "subtitle": "Bağlı VPN serveri" - }, "timer": { "sec": "{} san" }, diff --git a/assets/translations/be.json b/assets/translations/be.json index bfe6d7f4..1f1b0c86 100644 --- a/assets/translations/be.json +++ b/assets/translations/be.json @@ -11,7 +11,6 @@ "choose_server_type": "Які тып сервера выбраць?", "choose_server_type_ram": "{} GB RAM", "choose_server_type_payment_per_month": "{} у месяц", - "no_server_types_found": "Не знойдзена даступных тыпаў сервера! Калі ласка, пераканайцеся, што ў вас ёсць доступ да правайдэра сервера...", "backblaze_bad_key_error": "Інфармацыя аб Backblaze сховішча няслушная", "select_dns": "Цяпер давайце выберам DNS-правайдэра", "what": "Што гэта значыць?", @@ -21,7 +20,6 @@ "check": "Праверка", "create_master_account": "Стварыце галоўны ўліковы запіс", "enter_username_and_password": "Увядзіце імя карыстальніка і складаны пароль", - "finish": "Усё ініцыялізавана", "checks": "Праверак выканана: \n{} / {}", "choose_server_type_storage": "{} GB сістэмнага сховішча", "locations_not_found_text": "У гэтым месцы не аказалася даступных сервераў для арэнды", @@ -29,13 +27,10 @@ "choose_server_type_notice": "Галоўнае, на што варта звярнуць увагу - колькасць патокаў працэсара і аб'ём аператыўнай памяці. Дадзеныя сэрвісаў будуць размешчаны на асобным дыску, які аплачваецца асобна і лёгка пашыраем.", "server_started": "Сервер запушчаны. Цяпер ён будзе правераны і перагружаны…", "one_more_restart": "Цяпер будзе дадатковая перазагрузка для актывацыі сертыфікатаў бяспекі.", - "manage_domain_dns": "Для кіравання DNS вашага дамена", "use_this_domain": "Ужываем гэты дамен?", "use_this_domain_text": "Указаны вамі токен дае кантроль над гэтым даменам", - "connect_backblaze_storage": "Падлучыце хмарнае сховішча Backblaze", "no_connected_domains": "У дадзены момант падлучаных даменаў няма", "loading_domain_list": "Загружаем спіс даменаў", - "found_more_domains": "Знойдзена больш аднаго дамена, для вашай бяспекі, просім Вам выдаліць не патрэбныя дамены", "save_domain": "Захаваць дамен", "final": "Апошні крок", "create_server": "Стварыць сервер", @@ -68,13 +63,9 @@ "server_reboot": "Перазагрузка сервера", "final_checks": "Фінальныя праверкі" }, - "server_provider_description": "Месца, дзе будуць знаходзіцца вашыя дадзеныя і службы SelfPrivacy:", - "dns_provider_description": "Гэта дазволіць звязаць ваш дамен з IP адрасам:", "connect_to_dns": "Падлучыце DNS правайдэра", - "select_provider_payment_text_cloudflare": "Банкаўскія карты", "dns_provider_bad_key_error": "API ключ няслушны", - "select_provider_price_free": "Бясплатна", - "connect_to_dns_provider_text": "З дапамогай API токена прыкладанне SelfPrivacy наладзіць DNS запісы" + "select_provider_price_free": "Бясплатна" }, "recovering": { "generic_error": "Памылка правядзення аперацыі, паспрабуйце яшчэ раз.", @@ -207,7 +198,6 @@ "purge_all_keys": "Сцерці ўсе ключы аўтарызацыі?", "purge_all_keys_confirm": "Так, сцерці ўсе ключы", "reboot": "Перазагрузіць", - "you_cant_use_this_api": "Нельга выкарыстоўваць гэты API для дамен з падобным TLD.", "yes": "Да", "no": "Не", "dns_removal_error": "Немагчыма выдаліць запісы DNS.", @@ -271,8 +261,6 @@ "create": "Дадаць SSH ключ", "delete": "Выдаліць SSH ключ", "delete_confirm_question": "Вы ўпэўненыя, што хочаце выдаліць наступны ключ?", - "subtitle_with_keys": "Ключэй: {}", - "subtitle_without_keys": "Ключэй няма", "no_key_name": "Безназоўны ключ", "root_title": "Гэта ключы суперкарыстальніка", "input_label": "Публічны ED25519 або RSA ключ" @@ -289,20 +277,6 @@ "page2_dns_provider_title": "DNS-правайдэр", "page2_backup_provider_title": "Бэкап-правайдэр" }, - "record": { - "api": "SelfPrivacy API", - "social": "Сацыяльная сетка", - "password": "Менеджэр пароляў", - "root": "Каранёвы дамен", - "cloud": "Файлавае воблака", - "git": "Git сервер", - "meet": "Відэаканферэнцыі", - "vpn": "VPN", - "mx": "Запіс MX", - "dmarc": "Запіс DMARC", - "spf": "Запіс SPF", - "dkim": "DKIM ключ" - }, "domain": { "error": "Праблемы знойдзены", "uninitialized": "Дадзеныя яшчэ не атрыманы", @@ -320,17 +294,13 @@ "backup": { "description": "Выручыць Вас у любой сітуацыі: хакерская атака, выдаленне сервера і г.д.", "no_backups": "Рэзервовых копій пакуль няма", - "error_pending": "Сервер вярнуў памылку, праверце яе ніжэй", "restore_alert": "Вы збіраецеся аднавіць з рэзервовай копіі, створанай {}. Усе бягучыя даныя будуць страчаны. Вы ўпэўнены?", "card_title": "Рэзервовае капіраванне", "reupload_key": "Прымусова абнавіць ключ", "reuploaded_key": "Ключ на серверы абноўлены", "initialize": "Ініцыялізаваць", - "waiting_for_rebuild": "Вы зможаце стварыць першую рэзервовую копію праз некалькі хвілін.", "restore": "Аднавіць з рэзервовай копіі", "create_new": "Стварыць новую рэзервовую копію", - "creating": "Стварэнне новай рэзервовай копіі: {}%", - "restoring": "Аднаўленне з рэзервовай копіі", "refresh": "Абнавіць статус", "refetch_backups": "Абнавіць спіс копій", "refetching_list": "Праз некалькі хвілін спіс будзе абноўлены" @@ -363,9 +333,7 @@ "data_migration_title": "Міграцыя дадзеных", "card_title": "Сховішча", "data_migration_notice": "Падчас міграцыі ўсе службы будуць адключаны.", - "start_migration_button": "Пачаць міграцыю", - "migration_process": "Мігруем…", - "migration_done": "Скончыць" + "start_migration_button": "Пачаць міграцыю" }, "service_page": { "status": { @@ -429,39 +397,23 @@ "in_menu": "Сервер яшчэ не наладжаны. Калі ласка, завяршыце наладку з дапамогай майстра наладкі для далейшай працы." }, "mail": { - "login_info": "Выкарыстоўвайце лагін і пароль з укладкі ўжытоўнікаў. IMAP порт: 143, STARTTLS. SMTP порт: 587, STARTTLS.", - "title": "Пошта", - "subtitle": "Электронная пошта для сям'і або кампаніі." + "login_info": "Выкарыстоўвайце лагін і пароль з укладкі ўжытоўнікаў. IMAP порт: 143, STARTTLS. SMTP порт: 587, STARTTLS." }, "password_manager": { - "subtitle": "Гэта база вашай бяспекі. Bitwarden дапаможа вам ствараць, захоўваць і перамяшчаць паролі паміж прыладамі, а таксама ўводзіць іх па запыце з дапамогай аўтазапаўнення.", - "title": "Менеджэр пароляў", "login_info": "Акаўнт трэба стварыць на сайце." }, "cloud": { - "subtitle": "Не дазваляйце хмарным сэрвісам праглядаць вашыя дадзеныя. Выкарыстоўвайце NextCloud - надзейны дом для ўсіх Вашых дадзеных.", - "title": "Файлавае воблака", "login_info": "Лагін адміністратара: admin, пароль такі ж як у асноўнага карыстальніка. Стварайце новых карыстальнікаў у інтэрфейсе адміністратара NextCloud." }, "social_network": { - "subtitle": "Складана паверыць, але стала магчымым стварыць сваю ўласную сацыяльную сетку, са сваімі правіламі і аўдыторыяй.", - "title": "Сацыяльная сетка", "login_info": "Акаўнт трэба стварыць на сайце." }, "video": { - "title": "Відэаканферэнцыя", - "subtitle": "Zoom і Google Meet - гэта добра, але Jitsi Meet - вартая альтэрнатыва, якая таксама дае вам упэўненасць, што вас не слухаюць.", "login_info": "Акаўнт не патрабуецца." }, "git": { - "title": "Git-сервер", - "subtitle": "Прыватная альтэрнатыва Github, якая належыць вам, а не Microsoft.", "login_info": "Акаўнт трэба стварыць на сайце. Першы зарэгістраваны карыстач становіцца адміністратарам." }, - "vpn": { - "title": "VPN сервер", - "subtitle": "Закрыты VPN сервер" - }, "users": { "add_new_user": "Дадайце першага карыстальніка", "new_user": "Новы карыстальнік", @@ -472,7 +424,6 @@ "delete_confirm_question": "Вы напраўда хочаце выдаліць уліковы запіс?", "reset_password": "Скінуць пароль", "account": "Уліковы запіс", - "send_registration_data": "Падзяліцца рэквізітамі", "could_not_fetch_users": "Не ўдалося атрымаць карыстальнікаў", "could_not_fetch_description": "Праверце інтэрнэт злучэнне і паспрабуйце зноў", "refresh_users": "Абнавіць спіс карыстальнікаў", diff --git a/assets/translations/cs.json b/assets/translations/cs.json index 85413e21..b9206448 100644 --- a/assets/translations/cs.json +++ b/assets/translations/cs.json @@ -69,8 +69,6 @@ "create": "Vytvoření klíče SSH", "delete": "Odstranění klíče SSH", "delete_confirm_question": "Jste si jisti, že chcete odstranit klíč SSH?", - "subtitle_with_keys": "{} klíče", - "subtitle_without_keys": "Žádné klíče", "no_key_name": "Nejmenovaný klíč", "root_title": "Jedná se o klíče superuživatele", "input_label": "Veřejný klíč ED25519 nebo RSA", @@ -133,13 +131,10 @@ "select_provider_email_notice": "E-mailový hosting nebude pro nové klienty k dispozici. Nicméně bude odemčen, jakmile dokončíte první platbu.", "choose_location_type_text": "Různá místa poskytují různé konfigurace serverů, ceny a rychlosti připojení.", "choose_server_type_text": "Různé možnosti prostředků podporují různé služby. Nebojte se, svůj server můžete kdykoli rozšířit", - "manage_domain_dns": "Správa domény DNS", "use_this_domain_text": "Vámi zadaný token poskytuje přístup k následující doméně", "no_connected_domains": "V současné době nejsou připojeny žádné domény", - "found_more_domains": "Nalezeno více než jedna doména. V zájmu vlastní bezpečnosti vás prosíme o odstranění nepotřebných domén", "server_created": "Vytvořený server. Probíhá kontrola DNS a spouštění serveru…", "choose_server_type_notice": "Důležité je zaměřit se na procesor a paměť RAM. Data vašich služeb budou uložena na připojeném svazku, který lze snadno rozšířit a za který se platí zvlášť.", - "connect_backblaze_storage": "Připojení úložiště Backblaze", "save_domain": "Uložit doménu", "final": "Závěrečný krok", "create_server": "Vytvořit server", @@ -167,7 +162,6 @@ "choose_server_type_ram": "{} GB paměti RAM", "choose_server_type_storage": "{} GB systémového úložiště", "choose_server_type_payment_per_month": "{} měsíčně", - "no_server_types_found": "Nebyly nalezeny žádné dostupné typy serverů. Ujistěte se, že je váš účet přístupný, a zkuste změnit umístění serveru.", "backblaze_bad_key_error": "Informace o úložišti Backblaze jsou neplatné", "select_dns": "Nyní vybereme poskytovatele DNS", "use_this_domain": "Použít tuto doménu?", @@ -178,7 +172,6 @@ "create_master_account": "Vytvoření hlavního účtu", "loading_domain_list": "Načítání seznamu domén", "enter_username_and_password": "Zadejte uživatelské jméno a silné heslo", - "finish": "Vše je inicializováno", "checks": "Kontroly byly dokončeny\n{} z {}", "steps": { "server": "Server", @@ -193,13 +186,9 @@ "server_reboot": "Restartování serveru", "final_checks": "Závěrečné kontroly" }, - "server_provider_description": "Místo, kde budou umístěna vaše data a služby SelfPrivacy:", - "dns_provider_description": "Toto propojí vaši doménu s IP adresou:", "dns_provider_bad_key_error": "Klíč API je neplatný", "connect_to_dns": "Připojte poskytovatele DNS", - "select_provider_price_free": "Zdarma", - "select_provider_payment_text_cloudflare": "Bankovní karty", - "connect_to_dns_provider_text": "Pomocí rozhraní token API nakonfiguruje aplikace SelfPrivacy záznamy DNS" + "select_provider_price_free": "Zdarma" }, "users": { "no_ssh_notice": "Pro tohoto uživatele jsou vytvořeny pouze účty e-mailu a SSH. Jednotné přihlašování pro všechny služby se chystá brzy.", @@ -211,7 +200,6 @@ "delete_confirm_question": "Jste si jistý?", "reset_password": "Obnovení hesla", "account": "Účet", - "send_registration_data": "Sdílení přihlašovacích údajů", "could_not_fetch_users": "Nepodařilo se načíst seznam uživatelů", "could_not_fetch_description": "Zkontrolujte prosím své internetové připojení a zkuste to znovu", "refresh_users": "Obnovení seznamu uživatelů", @@ -223,20 +211,6 @@ "username_rule": "Uživatelské jméno musí obsahovat pouze malá písmena latinky, číslice a podtržítka, nesmí začínat číslicí", "details_title": "Údaje o uživateli" }, - "record": { - "root": "Kořenová doména", - "api": "API SelfPrivacy", - "cloud": "Oblak souborů", - "git": "Server Git", - "social": "Sociální síť", - "password": "Správce hesel", - "vpn": "VPN", - "mx": "Záznam MX", - "dmarc": "Záznam DMARC", - "spf": "Záznam SPF", - "dkim": "Klíč DKIM", - "meet": "Videokonference" - }, "domain": { "card_title": "Doména", "ok": "Záznamy jsou v pořádku", @@ -256,12 +230,8 @@ "reupload_key": "Vynutit klíč k opětovnému nahrání", "reuploaded_key": "Znovu nahraný klíč", "initialize": "Inicializace", - "waiting_for_rebuild": "První zálohu budete moci vytvořit během několika minut.", "restore": "Obnovení ze zálohy", "no_backups": "Zatím nejsou k dispozici žádné zálohy", - "creating": "Vytvoření nové zálohy: {}%", - "restoring": "Obnovení ze zálohy", - "error_pending": "Server vrátil chybu, zkontrolujte ji níže", "refresh": "Stav obnovení", "refetch_backups": "Opětovné načtení seznamu záloh", "description": "Zachrání vás v případě incidentu: útoku hackerů, vymazání serveru atd.", @@ -287,8 +257,6 @@ "data_migration_title": "Migrace dat", "data_migration_notice": "Během migrace budou všechny služby vypnuty.", "start_migration_button": "Zahájení migrace", - "migration_process": "Migrace…", - "migration_done": "Dokončení", "extending_volume_description": "Změna velikosti svazku vám umožní uložit na server více dat, aniž byste museli rozšiřovat samotný server. Svazek lze pouze rozšířit: zmenšení není možné." }, "service_page": { @@ -309,39 +277,23 @@ "uses": "Používá {usage} na {volume}" }, "mail": { - "title": "E-mail", - "subtitle": "E-mail pro společnost a rodinu.", "login_info": "Použijte uživatelské jméno a heslo z karty uživatelů. Port IMAP je 143 se STARTTLS, port SMTP je 587 se STARTTLS." }, "cloud": { - "title": "Cloudové úložiště", - "subtitle": "Nedovolte cloudovým službám číst vaše data pomocí služby NextCloud.", "login_info": "Přihlašovací jméno je admin, heslo je stejné jako u hlavního uživatele. Vytvoření nových účtů v rozhraní Nextcloud." }, "password_manager": { - "title": "Správce hesel", - "login_info": "Na webových stránkách si musíte vytvořit účet.", - "subtitle": "Základna vašeho zabezpečení. Bitwarden vám pomůže vytvářet, ukládat a přesouvat hesla mezi zařízeními a také je zadávat na vyžádání pomocí automatického doplňování." + "login_info": "Na webových stránkách si musíte vytvořit účet." }, "video": { - "title": "Video konference", - "subtitle": "Zoom a Google Meet jsou dobré, ale Jitsi Meet je hodnotná alternativa, která vám navíc dává jistotu, že vás nikdo neposlouchá.", "login_info": "Není potřeba žádný účet." }, "social_network": { - "title": "Sociální síť", - "login_info": "Na webových stránkách si musíte vytvořit účet.", - "subtitle": "Je těžké tomu uvěřit, ale je možné vytvořit si vlastní sociální síť s vlastními pravidly a cílovou skupinou." + "login_info": "Na webových stránkách si musíte vytvořit účet." }, "git": { - "title": "Server Git", - "subtitle": "Soukromá alternativa ke Githubu, která patří vám, ale ne Microsoftu.", "login_info": "Na webových stránkách si musíte vytvořit účet. První uživatel se stane administrátorem." }, - "vpn": { - "title": "Server VPN", - "subtitle": "Soukromý server VPN" - }, "recovering": { "recovery_main_header": "Připojení k existujícímu serveru", "domain_recover_placeholder": "Vaše doména", @@ -479,7 +431,6 @@ "purge_all_keys_confirm": "Ano, vyčistěte všechny mé žetony", "delete_server_volume": "Smazat server a svazek?", "reboot": "Restartovat", - "you_cant_use_this_api": "Toto rozhraní API nelze použít pro doménu s podobnou TLD.", "yes": "Ano", "no": "Ne", "volume_creation_error": "Svazek se nepodařilo vytvořit." diff --git a/assets/translations/de.json b/assets/translations/de.json index f8117623..fb75209a 100644 --- a/assets/translations/de.json +++ b/assets/translations/de.json @@ -72,8 +72,6 @@ "create": "SSH Schlüssel erstellen", "delete": "SSH Schlüssel entfernen", "delete_confirm_question": "Sind Sie sicher, dass Sie SSH SChlüssel entfernen wollen?", - "subtitle_with_keys": "{} Schlüssel", - "subtitle_without_keys": "Keine Slüssel", "no_key_name": "Unbennanter Schlüssel", "root_title": "Das sind superuser Schlüsseln", "root_subtitle": "Besitzer dieser Schlüssel erhalten vollen Zugriff auf den Server und können alles darauf tun. Fügen Sie dem Server nur Ihre eigenen Schlüssel hinzu.", @@ -130,20 +128,6 @@ "dns_provider": "DNS-Provider", "pricing_error": "Konnte Providerpreise nicht abrufen" }, - "record": { - "root": "Root Domain", - "api": "SelfPrivacy API", - "git": "Git Server", - "meet": "Videokonferenz", - "social": "Soziales Netzwerk", - "password": "Passwortmanager", - "vpn": "VPN", - "dkim": "DKIM Shlüssel", - "mx": "MX Eintrag", - "dmarc": "DMARC Eintrag", - "spf": "SPF Eintrag", - "cloud": "Datencloud" - }, "domain": { "screen_title": "Domäne und DNS", "ok": "Einträge sind in Ordnung", @@ -156,8 +140,7 @@ "update_list": "Liste aktualisieren", "card_title": "Domäne", "refreshing": "Aktualisiere Status…", - "services_subtitle": "Einträge vom Typ \"A\", die für jeden Dienst erfordelich sind.", - "domain_validation_failure": "Wir können Ihre Domain nicht erreichen!" + "services_subtitle": "Einträge vom Typ \"A\", die für jeden Dienst erfordelich sind." }, "backup": { "card_title": "Backup", @@ -168,13 +151,9 @@ "restore": "Von der Sicherungskopie wiederherstellen", "no_backups": "Backups sind noch nicht vorhanden", "create_new": "Neuen Backup erstellen", - "creating": "Erstellung eines neuen Backups: {}%", - "restoring": "Wiederherstellung aus Backups", "restore_alert": "Sie sind dabei die am {} erstellten Backup wiederherzutellen. Alle aktuelle Daten gehen dabei verloren. Sind Sie sicher?", "refresh": "Status Aktualisieren", "refetch_backups": "Backupliste neuladen", - "waiting_for_rebuild": "In wenigen Minuten können Sie Ihr erstes Backup erstellen.", - "error_pending": "Server hat einen Fehler zurückgegeben, überprüfen Sie es unten", "refetching_list": "In wenigen Minuten wird die Liste neugeladen", "card_subtitle": "Backups verwalten", "refetch_backups_subtitle": "Cache überprüfen und Daten vom Speicherprovider neu abrufen. Könnte zusätzliche Kosten verursachen.", @@ -191,10 +170,7 @@ "autobackup_period_never": "Automatische Backups sind deaktiviert", "autobackup_period_every": "Jede {period}", "autobackup_period_disable": "Automatische Backups deaktivieren", - "autobackup_custom": "Eigene", - "autobackup_custom_hint": "Eigenen Zeitraum in Minuten eingeben", "autobackup_set_period": "Setze Zeitraum", - "autobackup_period_set": "Zeitraum setzen", "backups_encryption_key": "Verschlüsselungsschlüssel", "backups_encryption_key_subtitle": "Bewahre es gut auf.", "backups_encryption_key_copy": "Kopiere den Verschlüselungsschlüssel", @@ -241,8 +217,6 @@ "data_migration_title": "Datenmigration", "data_migration_notice": "Während der Migration werden alle Dienste ausgeschaltet.", "start_migration_button": "Migration starten", - "migration_process": "Migrieren…", - "migration_done": "Beenden", "extending_volume_price_info": "Der Preis enthält die gesetzliche Mehrwertsteuer und wird geschätzt nach den Preisangaben die ihr Serverbetreiber bereitstellt. Der Server wird nach der Größenänderung neu gestartet." }, "not_ready_card": { @@ -266,13 +240,9 @@ "uses": "Belegt {usage} auf {volume}" }, "mail": { - "login_info": "Verwenden Sie den Benutzernamen und das Passwort von dem Benutzertab. IMAP-Port ist 143 mit STARTTLS, SMTP-Port ist 587 mit STARTTLS.", - "title": "E-Mail", - "subtitle": "E-Mail für Familie und Unternehmen." + "login_info": "Verwenden Sie den Benutzernamen und das Passwort von dem Benutzertab. IMAP-Port ist 143 mit STARTTLS, SMTP-Port ist 587 mit STARTTLS." }, "password_manager": { - "title": "Passwortmanager", - "subtitle": "Basis Ihrer Sicherheit. Bitwarden hilft Ihnen beim Erstellen, Speichern und Übertragung von Passwörtern zwischen Geräten sowie bei der Eingabe mithilfe der automatischen Vervollständigung.", "login_info": "Ihr Konto müssen Sie auf der Webseite erstellen." }, "modals": { @@ -288,7 +258,6 @@ "purge_all_keys": "Alle Authentifizierungsschlüssel löschen?", "purge_all_keys_confirm": "Ja, alle meine Token löschen", "reboot": "Neustarten", - "you_cant_use_this_api": "Sie können diese API nicht für Domains mit einer solchen TLD verwenden.", "yes": "Ja", "no": "Nein", "volume_creation_error": "Volume konnte nicht erstellt werden." @@ -320,13 +289,10 @@ "locations_not_found": "Oops!", "backblaze_bad_key_error": "Die Backblaze-Speicherinformationen sind ungültig", "select_dns": "Lassen Sie uns nun einen DNS-Provider auswählen", - "manage_domain_dns": "Zum Verwalten des DNS Ihrer Domain", "use_this_domain": "Diese Domäne verwenden?", "use_this_domain_text": "Das von Ihnen bereitgestellte Token gewährt Zugriff auf die folgende Domäne", - "connect_backblaze_storage": "Backblaze-Speicher verbinden", "no_connected_domains": "Derzeit keine verbundenen Domains", "loading_domain_list": "Domänenliste wird geladen", - "found_more_domains": "Mehr als eine Domain gefunden. Zu Ihrer eigenen Sicherheit bitten wir Sie, nicht benötigte Domains zu löschen", "save_domain": "Domäne speichern", "final": "Letzter Schritt", "create_server": "Server erstellen", @@ -335,7 +301,6 @@ "connect_to_server_provider_text": "Mit dem API-Token kann SelfPrivacy eine Maschine mieten und Ihren Server darauf einrichten", "choose_location_type_text": "Unterschiedliche Standorte bieten unterschiedliche Serverkonfigurationen, Preise und Verbindungsgeschwindigkeiten.", "choose_server_type_text": "Unterschiedliche Ressourcenfunktionen unterstützen unterschiedliche Dienste. Keine Sorge, Sie können Ihren Server jederzeit erweitern", - "no_server_types_found": "Keine verfügbaren Servertypen gefunden. Stellen Sie sicher, dass auf Ihr Konto zugegriffen werden kann und versuchen Sie Ihren Serverstandort zu ändern.", "one_more_restart": "Noch ein Neustart, um Ihre Sicherheitszertifikate anzuwenden.", "checks": "Überprüfungen sind abgeschlossen \n{} aus {}", "connect_to_server": "Beginnen wir mit einem Server.", @@ -371,7 +336,6 @@ "check": "Überprüfung", "create_master_account": "Hauptkonto erstellen", "enter_username_and_password": "Geben Sie den Benutzernamen und ein gutes Passwort ein", - "finish": "Alles initialisiert", "steps": { "hosting": "Hosting", "server_type": "Server-Typ", @@ -387,11 +351,7 @@ }, "dns_provider_bad_key_error": "Der API-Schlüssel ist ungültig", "connect_to_dns": "Verbinden Sie den DNS-Anbieter", - "connect_to_dns_provider_text": "Mithilfe der Token-API konfiguriert die SelfPrivacy-Anwendung DNS-Einträge", - "server_provider_description": "Der Ort, an dem sich Ihre Daten und SelfPrivacy-Dienste befinden:", - "dns_provider_description": "Dadurch wird Ihre Domain mit einer IP-Adresse verknüpft:", - "select_provider_price_free": "Kostenlos", - "select_provider_payment_text_cloudflare": "Bankkarten" + "select_provider_price_free": "Kostenlos" }, "validations": { "length_not_equal": "Länge ist [], sollte {} sein", @@ -418,7 +378,6 @@ "delete_confirm_question": "Sind Sie sicher?", "reset_password": "Passwort zurücksetzen", "account": "Konto", - "send_registration_data": "Anmeldedaten teilen", "could_not_fetch_users": "Benutzerliste konnte nicht abgerufen werden", "could_not_fetch_description": "Bitte überprüfen Sie Ihre Internetverbindung und versuchen Sie es erneut", "refresh_users": "Benutzerliste aktualisieren", @@ -511,29 +470,17 @@ "key_receiving_description": "Notieren Sie sich diesen Schlüssel und bewahren Sie ihn an einem sicheren Ort auf. Es wird verwendet, um den vollen Zugriff auf Ihren Server wiederherzustellen:" }, "video": { - "title": "Videokonferenz", - "subtitle": "Zoom und Google Meet sind gut, aber Jitsi Meet ist eine wertvolle Alternative, ber der Sie sicher sein können, das Ihre Gespräche nicht abgehört werden.", "login_info": "Kein Konto erforderlich." }, "cloud": { - "title": "Cloud-Speicher", - "subtitle": "Erlauben Sie Cloud-Diensten nicht, Ihre Daten zu lesen, indem Sie NextCloud verwenden.", "login_info": "Login für den Administrator ist admin, Passwort ist dasselbe wie bei Ihrem Hauptbenutzer. Erstellen Sie neue Konten in der Nextcloud-Oberfläche." }, "social_network": { - "title": "Soziales Netzwerk", - "subtitle": "Es ist schwer zu glauben, aber jetzt ist es möglich ein eigenes soziales Netzwerk mit Ihren eigenen Regeln und einer eigenen Zielgruppe zu erstellen.", "login_info": "Sie müssen ein Konto auf der Website erstellen." }, "git": { - "title": "Git-Server", - "subtitle": "Private Alternative zum Github, die Ihnen und nicht Microsoft gehört.", "login_info": "Sie müssen ein Konto auf der Website erstellen. Der erste Benutzer wird zum Administrator." }, - "vpn": { - "title": "VPN-Server", - "subtitle": "Privater VPN-Server" - }, "timer": { "sec": "{} Sek" }, diff --git a/assets/translations/es.json b/assets/translations/es.json index 794a2eee..ce76f0b7 100644 --- a/assets/translations/es.json +++ b/assets/translations/es.json @@ -56,8 +56,6 @@ "title": "SSH Claves", "create": "Crear clave SSH", "delete": "Eliminar clave SSH", - "subtitle_with_keys": "{} claves", - "subtitle_without_keys": "Sin llaves", "no_key_name": "Clave sin nombre", "root_title": "Estas son las claves de superusuario", "input_label": "Clave pública ED25519, ECDSA o RSA" diff --git a/assets/translations/et.json b/assets/translations/et.json index 7814fa6c..d2587053 100644 --- a/assets/translations/et.json +++ b/assets/translations/et.json @@ -52,8 +52,6 @@ "create": "Loo SSH võti", "delete": "Kustuta SSH võti", "delete_confirm_question": "Kas olete kindel, et soovite SSH võtme kustutada?", - "subtitle_with_keys": "{} võtmed", - "subtitle_without_keys": "Võtmeid pole", "no_key_name": "Nimetu võti", "root_title": "Need on superkasutaja võtmed", "input_label": "Avalik ED25519, ECDSA või RSA võti", @@ -154,20 +152,6 @@ "in": "Sisse", "out": "Välja" }, - "record": { - "root": "Juurdomeen", - "api": "SelfPrivacy API", - "cloud": "Failipilv", - "git": "Git server", - "meet": "Videokonverents", - "social": "Sotsiaalne võrgustik", - "password": "Paroolihaldur", - "vpn": "VPN", - "mx": "MX kirje", - "dmarc": "DMARC kirje", - "spf": "SPF kirje", - "dkim": "DKIM võti" - }, "domain": { "card_title": "Domeen", "screen_title": "Domeen ja DNS", @@ -180,8 +164,7 @@ "services_subtitle": "Iga teenuse jaoks on vajalikud \"A\" kirjed.", "email_title": "Elektrooniline post", "email_subtitle": "Kirjed turvaliseks e-kirja vahetamiseks vajalikud.", - "update_list": "Värskenda nimekirja", - "domain_validation_failure": "Me ei saa teie domeenile juurde!" + "update_list": "Värskenda nimekirja" }, "backup": { "quota_subtitles": { @@ -238,13 +221,9 @@ "reupload_key": "Võtme sunnitud lähtestamine", "reuploaded_key": "Võti laaditi uuesti", "initialize": "Initsialiseerimine", - "waiting_for_rebuild": "Mõne minuti pärast saate luua oma esimese varukoopia.", "restore": "Taasta varukoopiast", "no_backups": "Varukoopiaid pole veel olemas", "create_new": "Loo uus varukoopia", - "creating": "Uue varukoopia loomine: {}%", - "restoring": "Taastamine varukoopiast", - "error_pending": "Server tagastas vea, kontrollige seda allpool", "restore_alert": "Olete valmis taastama varukoopiast, mis loodi {} . Kõik praegused andmed lähevad kaotsi. Kas olete kindel?", "refresh": "Värskenda olekut", "refetch_backups": "Uuenda varukoopiate loendit", @@ -263,10 +242,7 @@ "autobackup_period_never": "Automaatne varundamine on keelatud", "autobackup_period_every": "iga {periood}", "autobackup_period_disable": "Keela automaatne varundamine", - "autobackup_custom": "Kohandatud", - "autobackup_custom_hint": "Sisestage kohandatud periood minutites", "autobackup_set_period": "Määra periood", - "autobackup_period_set": "Määratud periood", "backups_encryption_key": "Krüpteerimisvõti", "backups_encryption_key_subtitle": "Hoidke seda kindlas kohas.", "backups_encryption_key_copy": "Kopeerige krüpteerimisvõti", @@ -305,15 +281,12 @@ }, "rotation_quotas_title": "Hetktõmmise pööramise Seaded", "set_rotation_quotas": "Määrake uued rotatsioonikvoodid", - "quotas_set": "Määrati uued varukoopiate pöörlemiskvoodid", "quotas_only_applied_to_autobackups": "Neid sätteid rakendatakse ainult automaatse varundamise korral. Käsitsi tehtud varukoopiaid ei kustutata." }, "initializing": { "connect_to_server_provider_text": "API võtme abil saab SelfPrivacy rentida masina ja seadistada sellele oma serveri", "how": "Kuidas saada API võtit", - "connect_to_dns_provider_text": "API võtmega SelfPrivacy haldab kõiki DNS kirjeid", "select_dns": "Nüüd valime DNS teenusepakkuja", - "manage_domain_dns": "Oma domeeni DNS haldamiseks", "use_this_domain": "Kasutada seda domeeni?", "use_this_domain_text": "Esitatud võti annab juurdepääsu järgnevale domeenile", "select_provider_countries_title": "Saadaval olevad riigid", @@ -326,7 +299,6 @@ "select_provider_payment_title": "Maksemeetodid", "select_provider_payment_text_hetzner": "Krediitkaardid, SWIFT, SEPA, PayPal", "select_provider_payment_text_do": "Krediitkaardid, Google Pay, PayPal", - "select_provider_payment_text_cloudflare": "Krediitkaardid", "select_provider_email_notice": "E-posti majutust uutele klientidele ei pakuta. Siiski saab selle lukust avada niipea, kui teete oma esimese makse.", "select_provider_site_button": "Külasta saiti", "connect_to_server_provider": "Logi sisse ", @@ -347,16 +319,13 @@ "choose_server_type_payment_server": "{} serveri eest", "choose_server_type_payment_storage": "{} lisasalvestuse eest", "choose_server_type_payment_ip": "{} avaliku IPv4 aadressi eest", - "no_server_types_found": "Serveritüüpe ei leitud. Veenduge, et teie konto oleks ligipääsetav, ja proovige muuta oma serveri asukohta.", "dns_provider_bad_key_error": "API võti on kehtetu", "backblaze_bad_key_error": "Backblaze'i salvestusinfo on kehtetu", "connect_to_dns": "Ühendage DNS teenusepakkuja", "multiple_domains_found": "Leiti mitu domeeni", "multiple_domains_found_text": "Esitatud võti annab juurdepääsu järgmistele domeenidele. Palun valige see, mida soovite kasutada. Teiste domeenide turvalisuse tagamiseks peaksite piirama selle võtme juurdepääsu ainult domeeniga, mida soovite kasutada koos SelfPrivacy.", - "connect_backblaze_storage": "Ühendage Backblaze salvestusruum", "no_connected_domains": "Praegu pole ühtegi ühendatud domeeni", "loading_domain_list": "Laadib domeenide loendit", - "found_more_domains": "Leiti rohkem kui üks domeen. Teie enda turvalisuse tagamiseks palume kustutada mittevajalikud domeenid", "save_domain": "Salvesta domeen", "final": "Viimane samm", "create_server": "Looge server", @@ -380,10 +349,7 @@ }, "create_master_account": "Loo põhikonto", "enter_username_and_password": "Sisesta kasutajanimi ja tugev parool", - "finish": "Kõik on initsialiseeritud", "checks": "Kontrollid on lõpetatud\n{} otsas {}", - "server_provider_description": "Koht, kus asuvad teie andmed ja SelfPrivacy teenused:", - "dns_provider_description": "Teenus, mis võimaldab teie IP suunata domeeninimedele:", "connect_to_server": "Alustame serveriga.", "select_provider": "Valige järgmisest loendist mis tahes pakkuja, need kõik toetavad SelfPrivacy", "select_provider_notice": "\"Suhteliselt väikese\" all peame silmas masinat, millel on 2 tuuma CPU ja 2 gigabaiti muutmälu.", @@ -412,8 +378,6 @@ "in_menu": "Server pole veel seadistatud. Palun lõpetage seadistamine kasutades seadistusviisardit edasiseks tööks." }, "storage": { - "migration_process": "Migreerimine…", - "migration_done": "lõpetama", "start_migration_button": "Alusta migreerimist", "extending_volume_description": "Helitugevuse suuruse muutmine võimaldab teil salvestada serverisse rohkem andmeid ilma serverit ennast laiendamata. Helitugevust saab ainult pikendada: kokkutõmbumine pole võimalik.", "data_migration_notice": "Migratsiooni ajal lülitatakse kõik teenused välja.", @@ -459,14 +423,10 @@ } }, "mail": { - "title": "E-post", - "login_info": "Kasutage kasutajanime ja parooli kasutajate vahekaardilt. IMAP port on 143 koos STARTTLS, SMTP port on 587 koos STARTTLS.", - "subtitle": "E-post ettevõttele ja perele." + "login_info": "Kasutage kasutajanime ja parooli kasutajate vahekaardilt. IMAP port on 143 koos STARTTLS, SMTP port on 587 koos STARTTLS." }, "password_manager": { - "subtitle": "Teie turvalisuse alus. Bitwarden aitab teil luua, salvestada ja liigutada paroole seadmete vahel ning sisestada neid, kui neid küsitakse, kasutades automaatset täitmist.", - "login_info": "Teil tuleb luua konto veebisaidil.", - "title": "Paroolide haldur" + "login_info": "Teil tuleb luua konto veebisaidil." }, "recovering": { "method_device_description": "Avage rakendus teises seadmes ja minge seadmete lehele. Oma märgi saamiseks vajutage nuppu \"Lisa seade\".", @@ -508,8 +468,6 @@ "modal_confirmation_ip_invalid": "IP ei ole sama, mis DNS kirjes" }, "video": { - "subtitle": "Zoom ja Google Meet on head, kuid Jitsi Meet on väärt alternatiiv, mis annab teile kindlustunde, et teid ei kuulata.", - "title": "Videokoosolek", "login_info": "Konto pole vaja." }, "users": { @@ -525,7 +483,6 @@ "delete_confirm_question": "Kas oled kindel?", "reset_password": "Parooli lähtestamine", "account": "Konto", - "send_registration_data": "Jagage sisselogimisandmeid", "could_not_fetch_description": "Palun kontrollige oma internetiühendust ja proovige uuesti", "could_not_create_user": "Kasutaja loomine ebaõnnestus", "could_not_delete_user": "Kasutaja kustutamine ebaõnnestus", @@ -625,24 +582,14 @@ "title": "SelfPrivacy tugi" }, "cloud": { - "title": "Pilvesalvestus", - "subtitle": "Ärge lubage pilveteenustel teie andmeid lugeda, kasutades NextCloud.", "login_info": "Sisselogimine on admin, parool on sama mis teie põhikasutajal. Looge uusi kontosid Nextcloudi liideses." }, "social_network": { - "title": "Sotsiaalvõrgustik", - "subtitle": "On raske uskuda, kuid nüüd on võimalik luua oma sotsiaalvõrgustik oma reeglite ja sihtrühmaga.", "login_info": "Teil tuleb luua konto veebisaidil." }, "git": { - "title": "Git Server", - "subtitle": "Erakasutusel olev alternatiiv Github, mis kuulub teile, kuid mitte Microsoft.", "login_info": "Teil tuleb luua konto veebisaidil. Esimesest kasutajast saab administraator." }, - "vpn": { - "title": "VPN server", - "subtitle": "Eravõrgu VPN server" - }, "modals": { "dns_removal_error": "DNS kirjeid ei õnnestunud eemaldada.", "server_deletion_error": "Aktiivset serverit ei õnnestunud kustutada.", @@ -657,7 +604,6 @@ "purge_all_keys_confirm": "Jah, kustuta kõik minu võtmed", "delete_server_volume": "Kustutada server ja maht?", "reboot": "Taaskäivitage", - "you_cant_use_this_api": "Te ei saa seda API kasutada domeenide puhul sellise TLD.", "yes": "Jah", "no": "Ei" }, diff --git a/assets/translations/fr.json b/assets/translations/fr.json index ac4f806f..f1d1a42f 100644 --- a/assets/translations/fr.json +++ b/assets/translations/fr.json @@ -71,8 +71,6 @@ "create": "Créer une clé SSH", "delete": "Supprimer une clé SSH", "delete_confirm_question": "Êtes-vous sûr de vouloir supprimer la clé SSH ?", - "subtitle_with_keys": "{} clés", - "subtitle_without_keys": "Pas de clés SSH", "no_key_name": "Clé sans nom", "input_label": "Clé RSA ou ED25519 publique", "root_title": "Ce sont les clés SSH du superutilisateur", @@ -125,19 +123,6 @@ "select_timezone": "Sélectionner le fuseau horaire", "description": "Tous vos services en direct ici" }, - "record": { - "root": "Domaine racine", - "api": "API de SelfPrivacy", - "git": "Serveur Git", - "meet": "Conférence vidéo", - "social": "Réseau social", - "password": "Gestionnaire de mot de passe", - "vpn": "VPN", - "dmarc": "Enregistrement DMARC", - "spf": "Enregistrement SPF", - "dkim": "Clé DKIM", - "mx": "Enregistrement MX" - }, "domain": { "card_title": "Domaine", "screen_title": "Domaines et DNS", @@ -156,17 +141,13 @@ "card_title": "Sauvegarde", "reuploaded_key": "Clés republiées", "initialize": "Initialise", - "waiting_for_rebuild": "Vous serez capable de créer votre première sauvegarde dans quelques instants.", "restore": "Restaurer depuis la sauvegarde", "create_new": "Créer une nouvelle sauvegarde", - "creating": "Création d'une nouvelle sauvegarde: {}%", - "restoring": "Restauration depuis la sauvegarde", "restore_alert": "Vous allez restaurer depuis la sauvegarde créée le {}. Toutes les données existantes vont être perdues. Êtes-vous sûr ?", "refresh": "Statut d'avancement", "refetching_list": "Dans quelques minutes, la liste sera mise à jour", "reupload_key": "Forcer la republication de la clé", "no_backups": "Il n'y a pour l'instant aucune sauvegarde", - "error_pending": "Le serveur a retourné une erreur, vérifier plus bas", "refetch_backups": "Récupérer la liste des mise à jour" }, "storage": { @@ -185,8 +166,6 @@ "data_migration_title": "Migration de données", "data_migration_notice": "Durant la migration, tous les services ne seront plus accessibles.", "start_migration_button": "Démarrer la migration", - "migration_process": "Migration en cours…", - "migration_done": "Terminé", "extend_volume_button": "Étendre le volume", "extending_volume_description": "Redimensionner le volume va vous permettre de stocker davantage de données sur votre serveur sans étendre le serveur lui-même. Les volumes ne peuvent être qu'étendus, le shrinking n'est pas possible." }, @@ -208,9 +187,7 @@ "uses": "Utilise {usage} du {volume}" }, "mail": { - "title": "E-Mail", - "login_info": "Utiliser l'identifiant et le mot de passe de l'onglets utilisateurs. Le port IMAP est 143 avec STARTTLS, le port SMTP est 587 avec STARTTLS.", - "subtitle": "E-Mail pour des entreprises et la famille." + "login_info": "Utiliser l'identifiant et le mot de passe de l'onglets utilisateurs. Le port IMAP est 143 avec STARTTLS, le port SMTP est 587 avec STARTTLS." }, "not_ready_card": { "in_menu": "Le serveur n'est pas encore configuré. Veuillez finir le paramétrage en utilisant l'assistant d'installation pour aller plus loin." @@ -246,7 +223,6 @@ "title": "Liste des jobs" }, "modals": { - "you_cant_use_this_api": "Vous ne pouvez pas utiliser cette API pour un domaine avec cette extension.", "destroy_server": "Effacer le serveur et en créer un nouveau?", "no": "Non", "yes": "Oui", @@ -258,35 +234,21 @@ "try_again": "Essayer à nouveau?" }, "password_manager": { - "title": "Gestionnaire de mot de passe", - "subtitle": "La base de votre sécurité. Bitwarden vous aidera à créer, stocker et déplacer les mots de passe entre appareils, ainsi qu'à les saisir, lorsque cela est demandé, en utilisant l'autocomplétion.", "login_info": "Vous devrez créer un compte sur le site web." }, "timer": { "sec": "{} secondes" }, "cloud": { - "title": "Stockage cloud", - "subtitle": "Ne permettez pas aux services cloud de lire vos données en utilisant NextCloud.", "login_info": "Le login est admin, le mot de passe est le même que votre utilisateur principal. Créer de nouveaux comptes via l'interface Nextcloud." }, "video": { - "title": "Vidéoconférence", - "subtitle": "Zoom et Google Meet sont biens, mais Jitsi Meet est une alternative valable qui vous donne également l'assurance que vous n'êtes pas écouter.", "login_info": "Pas de compte nécessaire." }, "social_network": { - "title": "Réseaux sociaux", - "subtitle": "C'est difficile à croire mais il devient possible de créer votre propre réseau social, avec vos propres règles et votre propre public cible.", "login_info": "Vous devrez créer un compte sur le site web." }, "git": { - "title": "Serveur Git", - "subtitle": "Une alternative privée à Github, qui vous appartient et qui n'appartient pas à Microsoft.", "login_info": "Vous devrez créer un compte sur le site web. Le premier utilisateur deviendra admin." - }, - "vpn": { - "title": "Serveur VPN", - "subtitle": "Serveur VPN privé" } } diff --git a/assets/translations/he.json b/assets/translations/he.json index b7265686..750b3aa5 100644 --- a/assets/translations/he.json +++ b/assets/translations/he.json @@ -56,8 +56,6 @@ "create": "יצירת מפתח SSH", "delete": "מחיקת מפתח SSH", "delete_confirm_question": "למחוק את מפתח ה־SSH?", - "subtitle_with_keys": "{} מפתחות", - "subtitle_without_keys": "אין מפתחות", "no_key_name": "מפתח ללא שם", "root_title": "אלו מפתחות משתמש על", "input_label": "מפתח ED25519,‏ ECDSA או RSA ציבורי" @@ -74,8 +72,7 @@ "services_title": "שירותים", "services_subtitle": "רשומות מסוג „A” נחוצות לכל אחד מהשירותים.", "email_title": "דוא״ל", - "update_list": "עדכון הרשימה", - "domain_validation_failure": "לא הצלחנו להגיע לשם התחום שלך!" + "update_list": "עדכון הרשימה" }, "console_page": { "title": "מסוף", @@ -95,8 +92,6 @@ "delete_server_description": "מסיר את השרת שלך. הוא לא יהיה זמין עוד." }, "backup": { - "waiting_for_rebuild": "אפשר ליצור את הגיבוי הראשון שלך בעוד כמה דקות.", - "error_pending": "השרת החזיר שגיאה, היא מופיעה להלן", "create_new_select_heading": "לבחור מה לגבות", "autobackup_period_subtitle": "גיבויים נוצרים כל {period}", "autobackup_set_period": "הגדרת הפרש", @@ -109,8 +104,6 @@ "restore": "שחזור מגיבוי", "no_backups": "אין גיבויים עדיין", "create_new": "יצירת גיבוי חדש", - "creating": "גיבוי חדש נוצר: {}%", - "restoring": "גיבוי משוחזר", "refresh": "רענון מצב", "refetch_backups": "משיכת רשימת הגיבויים מחדש", "reupload_key": "אילוץ העלאת מפתח מחדש", @@ -123,10 +116,7 @@ "autobackup_period_never": "גיבויים אוטומטיים מושבתים", "autobackup_period_every": "כל {period}", "autobackup_period_disable": "השבתת גיבויים אוטומטיים", - "autobackup_custom": "התאמה אישית", - "autobackup_custom_hint": "נא למלא הפרשים מותאמים אישית בדקות", "backups_encryption_key": "מפתח הצפנה", - "autobackup_period_set": "הפרש הוגדר", "backups_encryption_key_subtitle": "יש לשמור עליו במקום בטוח.", "backups_encryption_key_copy": "העתקת מפתח ההצפנה", "reupload_key_subtitle": "ינחה את השרת להתחיל את אחסון הגיבוי שוב. כדאי להשתמש אם משהו לא תקין.", @@ -210,7 +200,6 @@ }, "rotation_quotas_title": "הגדרות מחזוריות תמונות מצב", "set_rotation_quotas": "הגדרת מכסות מחזוריות חדשות", - "quotas_set": "הוגדרו מכסות מחזוריות גיבוי חדשות", "backups_encryption_key_description": "המפתח הזה משמש להצפנת הגיבויים שלך. אם יאבד, לא יהיה לך איך לשחזר את הגיבויים שלך. רצוי לשמור אותו במקום בטוח כיוון שהוא יועיל לך מאוד במקרה שצריך לשחזר גיבויים ידנית.", "backups_encryption_key_not_found": "מפתח ההצפנה לא נמצא, נא לנסות שוב מאוחר יותר.", "snapshot_modal_download_verify_option_title": "להוריד, לאמת ואז להחליף", @@ -270,20 +259,6 @@ "other": "{} ליבות" } }, - "record": { - "root": "שם תחום על", - "api": "ה־API של SelfPrivacy", - "cloud": "ענן קבצים", - "git": "שרת Git", - "meet": "ועידת וידאו", - "social": "רשת חברתית", - "password": "מנהל סיסמאות", - "vpn": "VPN", - "mx": "רשומת MX", - "dmarc": "רשומת DMARC", - "spf": "רשומת SPF", - "dkim": "מפתח DKIM" - }, "storage": { "card_title": "אחסון בשרת", "status_ok": "ניצולת הכונן תקינה", @@ -304,8 +279,6 @@ "size": "גודל", "data_migration_notice": "במהלך ההסבה כל השירותים ייכבו.", "start_migration_button": "התחלת הסבה", - "migration_process": "הסבה מתבצעת…", - "migration_done": "הסתיימה", "extending_volume_modal_description": "לשדרג ל־{} בתוכנית של {} לחודש.", "extending_volume_started": "הרחבת כרך החלה", "extending_volume_provider_waiting": "גודל כרך הספק השתנה, נמתין 10 שניות…", @@ -335,28 +308,16 @@ "in_menu": "השרת לא מוגדר עדיין. נא לסיים את ההגדרה באמצעות אשף ההקמה כדי להמשיך בהקמה." }, "mail": { - "login_info": "להשתמש בשם המשתמש והסיסמה מלשונית המשתמשים. פתחת ה־IMAP היא 143 עם STARTTLS, פתחת ה־SMTP היא 587 עם STARTTLS.", - "subtitle": "דוא״ל לחברה ולמשפחה.", - "title": "דוא״ל" + "login_info": "להשתמש בשם המשתמש והסיסמה מלשונית המשתמשים. פתחת ה־IMAP היא 143 עם STARTTLS, פתחת ה־SMTP היא 587 עם STARTTLS." }, "password_manager": { - "title": "מנהל סיסמאות", - "subtitle": "בסיס האטבחה שלך. Bitwarden יסייע לך ליצור, לאחסן ולעביר סיסמאות בין מכשירים ואף למלא אותן כשיש צורך בזה עם השלמה אוטומטית.", "login_info": "צריך ליצור חשבון באתר." }, "video": { - "title": "ועידת וידאו", - "subtitle": "Zoom ו־Google Meet הם אחלה שירותים אבל Jitsi Meet הוא חלופה ראויה שגם מבטיחה שלא מאזינים לך.", "login_info": "לא צריך חשבון." }, - "vpn": { - "subtitle": "שרת VPN פרטי", - "title": "שרת VPN" - }, "git": { - "subtitle": "חלופה פרטית ל־GitHub ששייכת לך, אך לא ל־Microsoft.", - "login_info": "צריך ליצור חשבון באתר. המשתמש הראשון יהיה המנהל.", - "title": "שרת Git" + "login_info": "צריך ליצור חשבון באתר. המשתמש הראשון יהיה המנהל." }, "users": { "login": "כניסה", @@ -364,7 +325,6 @@ "delete_confirm_question": "להמשיך?", "reset_password": "איפוס סיסמה", "account": "חשבון", - "send_registration_data": "שיתוף פרטי גישה", "no_ssh_notice": "למשתמש זה נוצרים רק חשבונות דוא״ל ו־SSH. כניסה אחודה לכל השירותים מגיעה בקרוב.", "details_title": "פרטי משתמש", "add_new_user": "הוספת המשתמש הראשון", @@ -382,7 +342,6 @@ "user_already_exists": "כבר קיים משתמש עם שם המשתמש הזה" }, "initializing": { - "dns_provider_description": "שירות שמאפשר ל־IP שלך להצביע על שמות תחום:", "select_provider_countries_text_hetzner": "גרמניה, פינלנד, ארה״ב", "select_provider_countries_text_do": "ארה״ב, הולנד, סינגפור, אנגליה, גרמניה, קנדה, הודו, אוסטרליה", "select_provider": "יש לבחור ספק מהרשימה שלהלן, כולם תומכים ב־SelfPrivacy", @@ -390,7 +349,6 @@ "select_provider_countries_title": "מדינות זמינות", "select_provider_price_text_hetzner": "€‎8 לחודש לשרת קטן יחסית עם 50 ג״ב של כונן אחסון", "select_provider_payment_text_hetzner": "כרטיסי אשראי, העברה בנקאית, SEPA,‏ PayPal", - "select_provider_payment_text_cloudflare": "כרטיסי אשראי", "select_provider_price_text_do": "17$ לחודש לשרת קטן יחסית עם 50 ג״ב של כונן אחסון", "select_provider_payment_title": "שיטות תשלום", "select_provider_payment_text_do": "כרטיסי אשראי, Google Pay,‏ PayPal", @@ -400,11 +358,9 @@ "locations_not_found": "אופס!", "choose_location_type": "איפה להזמין את השרת שלך?", "connect_to_server_provider_text": "עם אסימון API יכול SelfPrivacy לשכור מכונה ולהקים את השרת שלך עליה", - "no_server_types_found": "לא נמצאו סוגי שרתים. נא לוודא שהחשבון שלך נגיש ולנסות לשנות את מקום השרת שלך.", "multiple_domains_found_text": "האסימון שסיפקת מעניק גישה לשמות התחום הבאים. נא לבחור את האחד לשימוש. כדי לשמור על אבטחת שאר שמות התחום שלך, כדאי להגביל את הגישה של האסימון הזה רק לשם התחום שמיועד לשימוש עם SelfPrivacy.", "use_this_domain_text": "האסימון שסיפקת מעניק גישה לשם התחום הבא", "multiple_domains_found": "נמצאו מגוון שמות תחום", - "connect_backblaze_storage": "חיבור אחסון של Backblaze", "no_connected_domains": "אין שמות תחום מחוברים כרגע", "one_more_restart": "הפעלה נוספת מחדש כדי להחיל את אישורי האבטחה שלך.", "what": "מה זה אומר?", @@ -428,8 +384,6 @@ }, "select_provider_email_notice": "אירוח דוא״ל לא יהיה זמין ללקוחות חדשים. עם זאת, אפשרות זו תיפתח לאחר השלמת התשלום הראשון שלך.", "choose_server_type_text": "קיבולות משאבים שונות תומכות בשירותים שונים. אל חשש, אפשר להגדיל את השרת שלך בכל עת", - "found_more_domains": "נמצא יותר משם תחום אחד. מטעמי אבטחה, נבקש ממך למחוק שמות תחום שאינם נחוצים", - "server_provider_description": "מקום בו הנתונים ושירותי ה־SelfPrivacy שלך יאוחסנו:", "connect_to_server": "הבה נתחיל עם שרת.", "select_provider_price_title": "מחיר ממוצע", "select_provider_price_free": "חינם", @@ -444,7 +398,6 @@ "dns_provider_bad_key_error": "מפתח ה־API שגוי", "connect_to_dns": "חיבור לספק ה־DNS", "select_dns": "עכשיו נבחר ספק DNS", - "manage_domain_dns": "כדי לנהל את ה־DNS של שם התחום שלך", "use_this_domain": "להשתמש בשם התחום הזה?", "loading_domain_list": "רשימת שמות התחום נטענת", "choose_server_type": "איזה סוג של שרת נחוץ לך?", @@ -454,12 +407,10 @@ "choose_server_type_payment_server": "{} לשרת", "backblaze_bad_key_error": "פרטי האחסון שלך ב־Backblaze שגויים", "choose_server_type_notice": "הדברים החשובים לעקוב אחריהם הם המעבד והזיכרון. הנתונים של השירותים שלך יאוחסנו בכונן מעוגן שאפשר להגדיל בקלות והתשלום עליו נפרד.", - "connect_to_dns_provider_text": "עם מפתח API ינהל SelfPrivacy את כל רשומות ה־DNS שלו", "save_domain": "שמירת שם התחום", "final": "צעד אחרון", "create_server": "יצירת שרת", "enter_username_and_password": "נא למלא שם משתמש וסיסמה חזקה", - "finish": "הכול מאותחל", "create_master_account": "יצירת חשבון ראשי", "checks": "בדיקות הושלמו \n{} מתוך {}", "domain_critical_error": "לא הצלחנו להגיע לשם התחום הזה! נגיעה למידע נוסף…" @@ -564,7 +515,6 @@ "volume_creation_error": "לא ניתן ליצור כרך.", "server_validators_error": "לא ניתן למשוך את השרתים הזמינים.", "already_exists": "כבר קיים שרת כזה.", - "you_cant_use_this_api": "אי אפשר להשתמש ב־API הזה לשמות תחום עם TLD (סיומת על) שכזאת.", "no": "לא" }, "jobs": { @@ -624,14 +574,10 @@ "root_ssh_key_added": "מפתח SSH למשתמש העל (root) הוגדר והוחל" }, "cloud": { - "title": "אחסון בענן", - "subtitle": "לא לאפשר לשירותי ענן לקרוא את הנתונים שלך באמצעות Nextcloud.", "login_info": "שם המשתמש הוא admin, הסיסמה זהה לזאת של המשתמש הראשי שלך. אפשר ליצור חשבונות חדשים דרך המנשק של ה־Nextcloud שלך." }, "social_network": { - "title": "רשת חברתית", - "login_info": "צריך ליצור חשבון באתר.", - "subtitle": "אומנם קשה להאמין אבל אפשר ליצור רשת חברתית משלך, עם כללים וקהל יעד משלך." + "login_info": "צריך ליצור חשבון באתר." }, "timer": { "sec": "{} שנ׳" diff --git a/assets/translations/kk.json b/assets/translations/kk.json index ae618189..e1f99d2b 100644 --- a/assets/translations/kk.json +++ b/assets/translations/kk.json @@ -50,8 +50,6 @@ "delete": "SSH кілтін жою", "delete_confirm_question": "Жоюды растау сұрағы?", "root_subtitle": "Root сипаттамасы.", - "subtitle_with_keys": "Кілттері бар", - "subtitle_without_keys": "Кілтсіз", "no_key_name": "Кілт атауы жоқ", "root_title": "Root атауы", "input_label": "Енгізу жолағы" diff --git a/assets/translations/lv.json b/assets/translations/lv.json index 9c07ca8a..7ac2fefa 100644 --- a/assets/translations/lv.json +++ b/assets/translations/lv.json @@ -68,8 +68,6 @@ "title": "SSH atslēgas", "create": "Izveidot SSH atslēgu", "delete": "Izdzēst SSH atslēgu", - "subtitle_with_keys": "{} atslēgas", - "subtitle_without_keys": "Nav atslēgu", "no_key_name": "Nenosaukta atslēga", "root_title": "Šīs ir superlietotāja atslēgas", "input_label": "Publiska ED25519 vai RSA atslēga", @@ -124,20 +122,6 @@ "server_timezone": "Servera laika josla", "ram": "Atmiņa" }, - "record": { - "root": "Saknes domēns", - "api": "SelfPrivacy API", - "cloud": "Failu mākonis", - "git": "Git serveris", - "meet": "Video konference", - "social": "Sociālais tīkls", - "password": "Paroļu pārvaldnieks", - "vpn": "VPN", - "mx": "MX ieraksts", - "spf": "SPF ieraksts", - "dkim": "DKIM atslēga", - "dmarc": "DMARC ieraksts" - }, "domain": { "card_title": "Domēns", "screen_title": "Domēns un DNS", @@ -160,13 +144,9 @@ "restore": "Atjaunono dublējuma", "no_backups": "Vēl nav dublējumu", "create_new": "Jauna dublējuma izveide", - "creating": "Veido jaunu dublējumu: {}%", - "error_pending": "Servera atgrieztā kļūda, pārbaudiet to zemāk", "refresh": "Atsvaidzināšanas statuss", "reuploaded_key": "Atslēga atkārtoti ielādēta", - "waiting_for_rebuild": "Pirmo dublējumu varēsit izveidot dažu minūšu laikā.", "restore_alert": "Jūs gatavojaties atjaunot no dublējuma, kas izveidots {}. Visi pašreizējie dati tiks zaudēti. Vai esi pārliecināts?", - "restoring": "Atjaunošana no dublējuma", "refetch_backups": "Atkārtoti ielādēt dublējumkopiju sarakstu", "refetching_list": "Pēc dažām minūtēm saraksts tiks atjaunināts" }, @@ -200,9 +180,7 @@ "extending_volume_error": "Nevarēja inicializēt skaļuma palielināšanu.", "size": "Lielums", "data_migration_title": "Datu migrācija", - "data_migration_notice": "Migrācijas laikā visi pakalpojumi tiks izslēgti.", - "migration_process": "Notiek migrēšana…", - "migration_done": "Pabeigt" + "data_migration_notice": "Migrācijas laikā visi pakalpojumi tiks izslēgti." }, "not_ready_card": { "in_menu": "Serveris vēl nav iestatīts. Lūdzu, pabeidziet iestatīšanu, izmantojot iestatīšanas vedni, lai turpinātu darbu." diff --git a/assets/translations/pl.json b/assets/translations/pl.json index ab0e3a44..7ed37915 100644 --- a/assets/translations/pl.json +++ b/assets/translations/pl.json @@ -69,8 +69,6 @@ "ssh": { "title": "klucze SSH", "delete": "Usuń klucz SSH", - "subtitle_with_keys": "Klucze: {}", - "subtitle_without_keys": "Brak kluczy", "no_key_name": "Bezimienny klucz", "root_title": "To są klucze superużytkownika", "input_label": "Publiczny klucz ED25519, ECDSA lub RSA", @@ -129,20 +127,6 @@ "dns_provider": "Dostawca DNS", "pricing_error": "Nie udało się uzyskać cen dostawców" }, - "record": { - "root": "Domena główna", - "cloud": "Chmura plików", - "git": "Git serwer", - "meet": "Wideokonferencje", - "social": "Serwis społecznościowy", - "password": "Menedżer haseł", - "vpn": "VPN", - "dmarc": "Zapisywanie rekord", - "spf": "Zapisywanie SPF", - "dkim": "DKIM klucz", - "api": "SelfPrivacy API", - "mx": "Zapisywanie MX" - }, "domain": { "card_title": "Domena", "screen_title": "Domena i DNS", @@ -155,8 +139,7 @@ "update_list": "Zaktualizuj listę", "ok": "Zapisy są w porządku", "error_subtitle": "Stuknij tutaj, aby je naprawić. Spowoduje to również usunięcie niestandardowych rekordów.", - "email_subtitle": "Zapisy wymagane do bezpiecznej wymiany poczty elektronicznej.", - "domain_validation_failure": "Nie możemy osiągnąć twojej domeny!" + "email_subtitle": "Zapisy wymagane do bezpiecznej wymiany poczty elektronicznej." }, "backup": { "card_title": "Utworzyć kopię zapasową", @@ -167,10 +150,6 @@ "restore": "Przywróć z kopii", "no_backups": "Nie ma jeszcze żadnych kopii zapasowych", "create_new": "Utwórz nową kopię", - "creating": "Tworzenie kopii: {}%", - "restoring": "Przywracanie z kopii", - "waiting_for_rebuild": "Po kilku minutach będziesz mógł utworzyć pierwszą kopię.", - "error_pending": "Serwer zwrócił błąd, sprawdź go poniżej", "refresh": "Odśwież status", "refetch_backups": "Ponownie pobierz listę kopii zapasowych", "refetching_list": "Za kilka minut lista zostanie zaktualizowana", @@ -219,10 +198,7 @@ "latest_snapshots": "Najnowsze zdjęcia", "autobackup_period_every": "Każdy {okres}", "autobackup_period_disable": "Wyłącz automatyczne tworzenie kopii zapasowych", - "autobackup_custom": "Niestandardowe", - "autobackup_custom_hint": "Wprowadź niestandardowy okres w minutach", "autobackup_set_period": "Ustawiony okres", - "autobackup_period_set": "Okres ustalony", "backups_encryption_key": "Klucz szyfrowania" }, "storage": { @@ -243,8 +219,6 @@ "data_migration_title": "Migracja danych", "data_migration_notice": "Na czas migracji danych wszystkie usługi zostaną wyłączone.", "start_migration_button": "Rozpocznij migrację", - "migration_process": "Migracja…", - "migration_done": "Zakończyć", "extending_volume_description": "Zmiana rozmiaru pamięci masowej pozwoli na przechowywanie większej ilości danych na serwerze bez rozszerzenia serwera. Objętość można tylko zwiększyć, nie można jej zmniejszyć." }, "service_page": { @@ -265,38 +239,22 @@ "uses": "Używa {usage} na {volume}" }, "mail": { - "title": "E-mail", - "subtitle": "E-Mail dla firmy i rodziny.", "login_info": "Użyj nazwy użytkownika i hasła z listy użytkowników. Port IMAP: 143, STARTTLS. Port SMTP: 587, STARTTLS." }, "password_manager": { - "title": "Menedżer haseł", - "subtitle": "To podstawa Twojego bezpieczeństwa. Bitwarden pomoże Ci tworzyć, przechowywać, kopiować hasła między urządzeniami i umieszczać je w formularzach.", "login_info": "Konto należy założyć na stronie internetowej." }, "video": { - "title": "Wideokonferencja", - "subtitle": "Zoom i Google Meet są świetne, ale Jitsi Meet to dobra alternatywa, która daje pewność, że nie jesteś słuchany.", "login_info": "Konto nie jest potrzebne." }, "cloud": { - "title": "Przechowywanie w chmurze", - "subtitle": "Nie zezwalaj usługom w chmurze na odczyt twoich danych, dla tego korzystaj z NextCloud.", "login_info": "Login jest admin, hasło jest takie samo jak w przypadku głównego użytkownika. Utwórz nowe konta w interfejsie Nextcloud." }, "social_network": { - "title": "Serwis społecznościowy", - "subtitle": "Trudno w to uwierzyć, ale stało możliwe stworzenie własnego serwisu społecznościowego, z własnymi zasadami i publicznością.", "login_info": "Konto należy założyć na stronie." }, "git": { - "login_info": "Konto należy założyć na stronie. Pierwszy zarejestrowany użytkownik zostaje administratorem.", - "title": "Git Serwer", - "subtitle": "Prywatna alternatywa dla Githuba, która należy do Ciebie, ale nie do Microsoftu." - }, - "vpn": { - "title": "VPN Serwer", - "subtitle": "Prywatny serwer VPN" + "login_info": "Konto należy założyć na stronie. Pierwszy zarejestrowany użytkownik zostaje administratorem." }, "users": { "add_new_user": "Dodaj pierwszego użytkownika", @@ -308,7 +266,6 @@ "delete_confirm_question": "Czy naprawdę chcesz usunąć konto?", "reset_password": "Zresetuj hasło", "account": "Konto", - "send_registration_data": "Udostępnij dane logowania", "could_not_fetch_users": "Nie udało się uzyskać użytkowników", "could_not_fetch_description": "Sprawdź połączenie internetowe i spróbuj ponownie", "refresh_users": "Odśwież listę użytkowników", @@ -365,18 +322,14 @@ "choose_location_type_text": "Wybór lokalizacji będzie determinował dostępne konfiguracje, ceny i prędkość połączenia z serwerem.", "choose_server_type_storage": "{} GB pamięci na diskie", "choose_server_type_payment_per_month": "{} miesięcznie", - "no_server_types_found": "Nie znaleziono dostępnych typów serwerów! Proszę upewnić się, że masz dostęp do dostawcy serwera...", "use_this_domain": "Kto używa ten domen?", - "connect_backblaze_storage": "Dodajcie Blackblaze", "no_connected_domains": "Niema podłączonych domenów", "what": "Co to znaczy?", "backblaze_bad_key_error": "Informacja o Blackbaze nieprawidłowa", "select_dns": "Teraz wybierz provajdera DNS", - "manage_domain_dns": "Aby zarządzać DNS domeny", "create_master_account": "Dodać konto administratora", "use_this_domain_text": "Podany token zapewnia kontrolę nad tą domeną", "loading_domain_list": "Ładowanie listy domen", - "found_more_domains": "Znaleziono więcej niż jedną domenę, dla własnego bezpieczeństwa usuń niepotrzebne domeny", "save_domain": "Zapisz domenę", "final": "Ostatni krok", "create_server": "Utwórz serwer", @@ -387,7 +340,6 @@ "check": "Sprawdź", "one_more_restart": "Teraz nastąpi dodatkowe ponowne uruchomienie komputera w celu aktywacji certyfikatów bezpieczeństwa.", "enter_username_and_password": "Wprowadź nazwę użytkownika i złożone hasło", - "finish": "Wszystko jest inicjalizowane", "checks": "Kontrole wykonane:\n{} / {}", "steps": { "hosting": "Hosting", @@ -403,11 +355,7 @@ "final_checks": "Kontrole końcowe" }, "dns_provider_bad_key_error": "Klucz API jest nieprawidłowy", - "connect_to_dns_provider_text": "Za pomocą interfejsu API tokena aplikacja SelfPrivacy skonfiguruje rekordy DNS", - "server_provider_description": "Lokalizacja, w której będą znajdować się Twoje dane i usługi SelfPrivacy:", - "dns_provider_description": "Spowoduje to połączenie Twojej domeny z adresem IP:", "select_provider_price_free": "Za darmo", - "select_provider_payment_text_cloudflare": "Karty bankowe", "connect_to_dns": "Połącz dostawcę DNS" }, "jobs": { @@ -448,7 +396,6 @@ "try_again": "Mam spróbować jeszcze raz?", "purge_all_keys_confirm": "Tak, wymazać wszystkie klucze", "delete_server_volume": "Usunąć serwer i pamięć masową?", - "you_cant_use_this_api": "Nie możesz użyć tego API dla domeny z podobnym TLD.", "volume_creation_error": "Nie udało się utworzyć woluminu." }, "recovery_key": { diff --git a/assets/translations/ru.json b/assets/translations/ru.json index ee337491..b983bde1 100644 --- a/assets/translations/ru.json +++ b/assets/translations/ru.json @@ -90,8 +90,6 @@ "create": "Добавить SSH ключ", "delete": "Удалить SSH ключ", "delete_confirm_question": "Вы уверены, что хотите удалить следующий ключ?", - "subtitle_with_keys": "Ключей: {}", - "subtitle_without_keys": "Ключей нет", "no_key_name": "Безымянный ключ", "root_title": "Это ключи суперпользователя", "root_subtitle": "Владельцы указанных здесь ключей получают полный доступ к данным и настройкам сервера. Добавляйте исключительно свои ключи.", @@ -154,20 +152,6 @@ "enable_ssh": "Включить SSH", "enable_ssh_hint": "Разрешить доступ к серверу через SSH" }, - "record": { - "root": "Корневой домен", - "api": "SelfPrivacy API", - "cloud": "Файловое облако", - "git": "Git сервер", - "meet": "Видеоконференции", - "social": "Социальная сеть", - "password": "Менеджер паролей", - "vpn": "VPN", - "mx": "MX запись", - "dmarc": "DMARC запись", - "spf": "SPF запись", - "dkim": "DKIM ключ" - }, "domain": { "card_title": "Домен", "screen_title": "Домен и DNS", @@ -180,8 +164,7 @@ "services_subtitle": "Записи типа “A” необходимые для работы сервисов.", "email_title": "Электронная почта", "email_subtitle": "Записи необходимые для безопасного обмена электронной почтой.", - "update_list": "Обновить список", - "domain_validation_failure": "Мы не можем установить соединение с вашим доменом!" + "update_list": "Обновить список" }, "backup": { "card_title": "Резервное копирование", @@ -189,13 +172,9 @@ "reupload_key": "Принудительно обновить ключ", "reuploaded_key": "Ключ на сервере обновлён", "initialize": "Настроить", - "waiting_for_rebuild": "Через несколько минут можно будет создать первую копию.", "restore": "Восстановить из копии", "no_backups": "Резервных копий пока нет", "create_new": "Создать новую копию", - "creating": "Создание копии: {}%", - "restoring": "Восстановление из копии", - "error_pending": "Сервер вернул ошибку: проверьте её ниже", "restore_alert": "Вы собираетесь восстановить из копии созданной {}. Все текущие данные будут потеряны. Вы уверены?", "refresh": "Обновить статус", "refetch_backups": "Обновить список копий", @@ -216,10 +195,7 @@ "autobackup_period_subtitle": "Создание копий раз в {period}", "autobackup_period_every": "Раз в {period}", "autobackup_period_disable": "Отключить автоматические копирование", - "autobackup_custom": "Другое", - "autobackup_custom_hint": "Введите период в минутах", "autobackup_set_period": "Установить период", - "autobackup_period_set": "Период установлен", "backups_encryption_key": "Ключ шифрования", "snapshots_title": "Список снимков", "forget_snapshot_error": "Не удалось забыть снимок", @@ -298,7 +274,6 @@ }, "rotation_quotas_title": "Настройки ротации снимков", "set_rotation_quotas": "Задать новые квоты ротации", - "quotas_set": "Новые квоты ротации резервных копий заданы", "quota_titles": { "last": "Сколько последних снимков сохранять", "daily": "Сколько ежедневных снимков сохранять", @@ -327,8 +302,6 @@ "data_migration_title": "Миграция данных", "data_migration_notice": "На время миграции данных все сервисы будут выключены.", "start_migration_button": "Начать миграцию", - "migration_process": "Мигрируем…", - "migration_done": "Завершить", "price": "Цена", "extending_volume_modal_description": "Хранилище будет расширено до {}, новая стоимость {} в месяц.", "extending_volume_started": "Расширение хранилища началось", @@ -359,39 +332,23 @@ "nothing_here": "Здесь ничего нет" }, "mail": { - "title": "Почта", - "subtitle": "Электронная почта для семьи или компании.", "login_info": "Используйте логин и пароль из вкладки пользователей. IMAP порт: 143, STARTTLS. SMTP порт: 587, STARTTLS." }, "password_manager": { - "title": "Менеджер паролей", - "subtitle": "Это фундамент Вашей безопасности. Создавать, хранить, копировать пароли между устройствами и вбивать их в формы поможет Bitwarden.", "login_info": "Аккаунт нужно создать на сайте." }, "video": { - "title": "Видеоконференция", - "subtitle": "Jitsi meet — отличный аналог Zoom и Google meet который помимо удобства ещё и гарантирует Вам защищённые высококачественные видеоконференции.", "login_info": "Аккаунт не требуется." }, "cloud": { - "title": "Файловое облако", - "subtitle": "Не позволяйте облачным сервисам просматривать ваши данные. Используйте NextCloud — надёжный дом для всех Ваших данных.", "login_info": "Логин администратора: admin, пароль такой же как у основного пользователя. Создавайте новых пользователей в интерфейсе администратора NextCloud." }, "social_network": { - "title": "Социальная сеть", - "subtitle": "Сложно поверить, но стало возможным создать свою собственную социальную сеть, со своими правилами и аудиторией.", "login_info": "Аккаунт нужно создать на сайте." }, "git": { - "title": "Git-сервер", - "subtitle": "Приватная альтернатива Github, которая принадлежит вам, а не Microsoft.", "login_info": "Аккаунт нужно создать на сайте. Первый зарегистрированный пользователь становится администратором." }, - "vpn": { - "title": "VPN сервер", - "subtitle": "Закрытый VPN сервер" - }, "users": { "add_new_user": "Добавьте первого пользователя", "new_user": "Новый пользователь", @@ -402,7 +359,6 @@ "delete_confirm_question": "Вы действительно хотите удалить учетную запись?", "reset_password": "Сбросить пароль", "account": "Учетная запись", - "send_registration_data": "Поделиться реквизитами", "could_not_fetch_users": "Не удалось получить пользователей", "could_not_fetch_description": "Проверьте интернет соединение и попробуйте снова", "refresh_users": "Обновить список пользователей", @@ -416,7 +372,6 @@ "user_already_exists": "Пользователь с таким именем уже существует" }, "initializing": { - "dns_provider_description": "Это позволит связать ваш домен с IP адресом:", "connect_to_server": "Начнём с сервера.", "select_provider": "Ниже подборка провайдеров, которых поддерживает SelfPrivacy", "select_provider_notice": "Под 'Небольшим сервером' имеется ввиду сервер с двумя потоками процессора и двумя гигабайтами оперативной памяти.", @@ -429,7 +384,6 @@ "select_provider_price_text_do": "$17 в месяц за небольшой сервер и 50GB места на диске", "select_provider_payment_title": "Методы оплаты", "select_provider_payment_text_hetzner": "Банковские карты, SWIFT, SEPA, PayPal", - "select_provider_payment_text_cloudflare": "Банковские карты", "select_provider_payment_text_do": "Банковские карты, Google Pay, PayPal", "select_provider_email_notice": "Хостинг электронной почты недоступен для новых клиентов. Разблокировать можно будет после первой оплаты.", "select_provider_site_button": "Посетить сайт", @@ -453,18 +407,13 @@ "choose_server_type_payment_server": "{} за сам сервер", "choose_server_type_payment_storage": "{} за расширяемое хранилище", "choose_server_type_payment_ip": "{} за публичный IPv4", - "no_server_types_found": "Не найдено доступных типов сервера! Пожалуйста, убедитесь, что у вас есть доступ к провайдеру сервера...", "dns_provider_bad_key_error": "API ключ неверен", "backblaze_bad_key_error": "Информация о Backblaze хранилище неверна", "connect_to_dns": "Подключите DNS провайдера", - "connect_to_dns_provider_text": "С помощью API токена приложение SelfPrivacy настроит DNS записи", - "manage_domain_dns": "Для управления DNS вашего домена", "use_this_domain": "Используем этот домен?", "use_this_domain_text": "Указанный вами токен даёт контроль над этим доменом", - "connect_backblaze_storage": "Подключите облачное хранилище Backblaze", "no_connected_domains": "На данный момент подлюченных доменов нет", "loading_domain_list": "Загружаем список доменов", - "found_more_domains": "Найдено больше одного домена, для вашей безопасности, просим Вам удалить ненужные домены", "save_domain": "Сохранить домен", "final": "Последний шаг", "create_server": "Создать сервер", @@ -477,7 +426,6 @@ "one_more_restart": "Сейчас будет дополнительная перезагрузка для активации сертификатов безопасности.", "create_master_account": "Создайте главную учетную запись", "enter_username_and_password": "Введите имя пользователя и сложный пароль", - "finish": "Всё инициализировано", "checks": "Проверок выполнено: \n{} / {}", "select_dns": "Сейчас выберите DNS провайдера", "steps": { @@ -493,7 +441,6 @@ "server_reboot": "Перезагрузка сервера", "final_checks": "Финальные проверки" }, - "server_provider_description": "Место, где будут находиться ваши данные и сервисы SelfPrivacy:", "multiple_domains_found": "Найдено несколько доменов", "multiple_domains_found_text": "Предоставленный токен дает доступ к следующим доменам. Пожалуйста, выберите тот, который вы хотите использовать. Для обеспечения безопасности других доменов следует ограничить доступ этого токена только тем доменом, который вы хотите использовать с SelfPrivacy.", "domain_critical_error": "Не получается подключиться к домену! Нажмите для подробностей…" @@ -596,7 +543,6 @@ "purge_all_keys_confirm": "Да, стереть все ключи", "delete_server_volume": "Удалить сервер и хранилище?", "reboot": "Перезагрузить", - "you_cant_use_this_api": "Нельзя использовать этот API для доменом с подобным TLD.", "yes": "Да", "no": "Нет", "volume_creation_error": "Не удалось создать хранилище." diff --git a/assets/translations/sk.json b/assets/translations/sk.json index 6cf6743f..62061c08 100644 --- a/assets/translations/sk.json +++ b/assets/translations/sk.json @@ -12,7 +12,6 @@ "modals": { "no": "Nie", "are_you_sure": "Ste si istý?", - "you_cant_use_this_api": "Toto API nemôžete použiť pre doménu s podobnou TLD.", "yes": "Áno", "dns_removal_error": "Nie je možné odstrániť zápisy DNS.", "server_deletion_error": "Server nie je možné vymazať.", @@ -119,8 +118,6 @@ "create": "Vytvoriť kľúč SSH", "delete": "Zmazať kľúč SSH", "delete_confirm_question": "Ste si istí že chcete vymazať kľúč SSH?", - "subtitle_with_keys": "{} kľúče", - "subtitle_without_keys": "Žiadne kľúče", "no_key_name": "Kľúč bez mena", "root_title": "Toto sú kľúče superužívateľa", "input_label": "Verejný kľúč ED25519 alebo RSA", @@ -174,20 +171,6 @@ "other": "{} jadier" } }, - "record": { - "root": "Koreňová doména", - "api": "SelfPrivacy API", - "cloud": "Súborový cloud", - "git": "Git server", - "meet": "Video konferencie", - "social": "Sociálna sieť", - "password": "Správca hesiel", - "vpn": "VPN", - "mx": "Zápis MX", - "dmarc": "Zápis DMARC", - "spf": "Zápis SPF", - "dkim": "Kľúč DKIM" - }, "domain": { "screen_title": "Doména a DNS", "ok": "Zápise sú v poriadku", @@ -228,13 +211,9 @@ "restore": "Obnoviť zo zálohy", "no_backups": "Zatiaľ nemáte žiadne záložné kópie", "create_new": "Vytvoriť novú zálohu", - "creating": "Vytvorenie zálohy: {}%", - "restoring": "Obnovenie zo zálohy", - "error_pending": "Server vrátil chybu, pozrite ju nižšie", "refresh": "Obnoviť stav", "refetch_backups": "Obnoviť zoznam záloh", "refetching_list": "O pár minút zoznam bude aktualizovaný", - "waiting_for_rebuild": "O pár minút budete môcť vytvoriť svoju prvú zálohu.", "restore_alert": "Chystáte sa obnoviť zo zálohy vytvorenej {}. Všetky aktuálne údaje sa stratia. Ste si istý?" }, "storage": { @@ -254,8 +233,6 @@ "data_migration_title": "Migrácia údajov", "data_migration_notice": "V čase migrácie údajov sa všetky služby vypnú.", "start_migration_button": "Spustiť migráciu", - "migration_process": "Migruje sa…", - "migration_done": "Dokončiť", "extending_volume_title": "Rozšírenie úložiska", "extending_volume_description": "Zmena veľkosti úložiska vám umožní uchovávať viac údajov na serveri bez rozšírenia samotného servera. Objem sa dá len zvýšiť: nemôžete znížiť." }, @@ -270,12 +247,9 @@ "choose_location_type_text": "Rôzne miesta poskytujú rôzne konfigurácie serverov, ceny a rýchlosť pripojenia.", "choose_server_type_text": "Rôzne možnosti zdrojov podporujú rôzne služby. Nebojte sa, svoj server môžete kedykoľvek rozšíriť", "enter_username_and_password": "Zadajte používateľské meno a zložité heslo", - "finish": "Všetko je inicializované", "use_this_domain_text": "Token, ktorý ste poskytli, poskytuje prístup k nasledujúcej doméne", - "connect_backblaze_storage": "Pripojte svoje cloudové úložisko Backblaze", "no_connected_domains": "Momentálne nie sú pripojené žiadne domény", "loading_domain_list": "Načítava sa zoznam domén", - "found_more_domains": "Našlo sa viac ako jedna doména. Pre vašu vlastnú bezpečnosť vás požiadame o odstránenie nepotrebných domén", "save_domain": "Uložiť doménu", "final": "Posledný krok", "create_server": "Vytvoriť server", @@ -311,10 +285,8 @@ "choose_server_type_ram": "{} GB RAM", "choose_server_type_storage": "{} GB systémového úložiska", "choose_server_type_payment_per_month": "{} mesačne", - "no_server_types_found": "Nenašli sa žiadne dostupné typy serverov. Uistite sa, že je váš účet prístupný a skúste zmeniť umiestnenie servera.", "backblaze_bad_key_error": "Informácie o úložisku Backblaze sú neplatné", "select_dns": "Teraz vyberme poskytovateľa DNS", - "manage_domain_dns": "Na správu DNS vašej domény", "use_this_domain": "Chcete použiť túto doménu?", "create_master_account": "Vytvorte hlavný účet", "checks": "Kontroly boli ukončené\n{} z {}", @@ -333,23 +305,15 @@ } }, "mail": { - "subtitle": "Email pre rodinu alebo spoločnosť.", - "title": "Email", "login_info": "Užívateľské meno a heslo z tabu používateľov. IMAP port je 143 so STARTTLS, SMTP port je 587 so STARTTLS." }, "password_manager": { - "subtitle": "Toto je základ vašej bezpečnosti. Bitwarden vám pomôže vytvárať, ukladať, kopírovať heslá medzi zariadeniami a vkladať ich do formulárov.", - "title": "Správca hesiel", "login_info": "Musíte vytvoriť účet na webovej stránke." }, "cloud": { - "subtitle": "Zabráňte cloudovým službám v prezeraní vašich údajov. Použite NextCloud – bezpečný domov pre všetky vaše dáta.", - "title": "Súborový cloud", "login_info": "Prihlásenie správcu: admin, heslo je rovnaké ako pre hlavného používateľa. Vytvorte nových používateľov v správcovskom rozhraní NextCloud." }, "social_network": { - "subtitle": "Je ťažké tomu uveriť, ale bolo možné vytvoriť si vlastnú sociálnu sieť s vlastnými pravidlami a publikom.", - "title": "Sociálna sieť", "login_info": "Musíte vytvoriť účet na webovej stránke." }, "users": { @@ -366,7 +330,6 @@ "delete_confirm_question": "Naozaj chcete odstrániť ten účet?", "reset_password": "Resetovať heslo", "account": "Účet", - "send_registration_data": "Zdieľať údaje účtu", "could_not_fetch_description": "Skontrolujte internetové pripojenie a skúste to znova", "refresh_users": "Aktualizovať zoznam používateľov", "could_not_create_user": "Nepodarilo sa vytvoriť účet", @@ -463,19 +426,11 @@ "sec": "{} sek" }, "video": { - "title": "Video konferencia", - "subtitle": "Jitsi meet je výborný analog Zoom a Google meet, ktorý vám okrem pohodlia zaručí aj bezpečné videokonferencie vo vysokej kvalite.", "login_info": "Účet sa nevyžaduje." }, "git": { - "title": "Git server", - "subtitle": "Súkromná alternatíva Github, ktorá patrí vám, nie spoločnosti Microsoft.", "login_info": "Na stránke musí byť vytvorený účet. Prvý registrovaný užívateľ sa stáva administrátorom." }, - "vpn": { - "title": "Server VPN", - "subtitle": "Súkromný server VPN" - }, "support": { "title": "Podpora SelfPrivacy" }, diff --git a/assets/translations/sl.json b/assets/translations/sl.json index 36933e7f..78e955d4 100644 --- a/assets/translations/sl.json +++ b/assets/translations/sl.json @@ -117,26 +117,10 @@ "create": "Dodajanje ključa SSH", "delete": "Odstranitev ključa SSH", "delete_confirm_question": "Ali ste prepričani, da želite izbrisati naslednjo tipko?", - "subtitle_with_keys": "Ključi: {}", - "subtitle_without_keys": "Brez ključev", "no_key_name": "Ključ brez imena", "root_title": "To so ključi superuporabnika", "input_label": "Javni ključ ED25519 ali RSA" }, - "record": { - "cloud": "Oblak datotek", - "root": "Korenska domena", - "api": "SelfPrivacy API", - "git": "Git Strežnik", - "meet": "Videokonferenca", - "social": "Družabno omrežje", - "password": "Upravitelj gesel", - "vpn": "VPN", - "mx": "Zapis MX", - "dmarc": "DMARC zapis", - "spf": "SPF zapis", - "dkim": "DKIM ključ" - }, "domain": { "screen_title": "Domena in DNS", "card_title": "Domena", @@ -159,29 +143,19 @@ "reupload_key": "Prisilna posodobitev ključa", "reuploaded_key": "Ključ v strežniku je bil posodobljen", "initialize": "Inicializacija", - "waiting_for_rebuild": "Prvo varnostno kopijo boste lahko ustvarili v nekaj minutah.", "create_new": "Ustvarite novo varnostno kopijo", - "creating": "Ustvarjanje nove varnostne kopije: {}%", - "restoring": "Obnovitev iz varnostne kopije", - "error_pending": "Strežnik je vrnil napako, preverite spodaj", "restore_alert": "Obnavljate iz varnostne kopije, ustvarjene dne {}. Vsi trenutni podatki bodo izgubljeni. Ste prepričani?", "refresh": "Osvežitev stanja", "refetch_backups": "Ponovno pridobivanje seznama varnostnih kopij", "refetching_list": "V nekaj minutah bo seznam posodobljen" }, "mail": { - "login_info": "Uporabite uporabniško ime in geslo iz zavihka uporabniki. Vrata IMAP: 143, STARTTLS. Vrata SMTP: 587, STARTTLS.", - "title": "E-naslov", - "subtitle": "E-pošta za družbo in družino." + "login_info": "Uporabite uporabniško ime in geslo iz zavihka uporabniki. Vrata IMAP: 143, STARTTLS. Vrata SMTP: 587, STARTTLS." }, "password_manager": { - "title": "Upravitelj gesel", - "subtitle": "Osnova vaše varnosti. Bitwarden vam bo pomagal ustvarjati, shranjevati in prenašati gesla med napravami ter jih na zahtevo vnašati z uporabo samodejnega dopolnjevanja.", "login_info": "Na spletnem mestu boste morali ustvariti račun." }, "video": { - "title": "Videokonferenca", - "subtitle": "Zoom in Google Meet sta dobra, vendar je Jitsi Meet vredna alternativa, ki vam daje tudi zagotovilo, da vam nihče ne prisluškuje.", "login_info": "Račun ni potreben." }, "storage": { @@ -202,9 +176,7 @@ "extending_volume_error": "Ni uspelo zagnati razširitve shrambe.", "size": "Velikost", "data_migration_title": "Migracija podatkov", - "start_migration_button": "Začetek migracije", - "migration_process": "Selitev…", - "migration_done": "Zaključek" + "start_migration_button": "Začetek migracije" }, "service_page": { "uses": "Uporablja {usage} na {volume}", @@ -224,25 +196,15 @@ "move": "Premik na drug zvezek" }, "social_network": { - "subtitle": "Težko je verjeti, vendar je mogoče ustvariti lastno družbeno omrežje z lastnimi pravili in občinstvom.", - "title": "Družbeno omrežje", "login_info": "Na spletišču morate ustvariti račun." }, "not_ready_card": { "in_menu": "Strežnik še ni bil nastavljen, uporabite čarovnika za povezavo." }, "cloud": { - "title": "Shranjevanje v oblaku", - "subtitle": "Storitvam v oblaku ne dovolite vpogleda v svoje podatke. Uporabite NextCloud - varen dom za vse svoje podatke.", "login_info": "Prijava skrbnika: admin, geslo je enako geslu glavnega uporabnika. Ustvarite nove uporabnike v skrbniškem vmesniku NextCloud." }, "git": { - "title": "Git Strežnik", - "subtitle": "Zasebna alternativa Githubu, ki pripada vam, ne pa Microsoftu.", "login_info": "Na spletnem mestu morate ustvariti račun. Prvi uporabnik bo postal administrator." - }, - "vpn": { - "title": "VPN Strežnik", - "subtitle": "Zasebni strežnik VPN" } } diff --git a/assets/translations/th.json b/assets/translations/th.json index c5a2d76a..351e85a6 100644 --- a/assets/translations/th.json +++ b/assets/translations/th.json @@ -61,8 +61,6 @@ "root_subtitle": "เจ้าของกุญแจเหล่านี้จะสามารถเข้าถึงเซิฟเวอร์และทำอะไรกับเซิฟเวอร์ก็ได้. โปรดเพิ่มกุญแจนี้ไปที่เซิฟเวอร์ของคุณเท่านั้น", "title": "กุญแจ SSH", "delete": "ลบกุญแจ SSH", - "subtitle_with_keys": "{} กุญแจ", - "subtitle_without_keys": "ไม่มีกุญแจ", "no_key_name": "กุญแจไม่มีชื่อ", "root_title": "นี่คือกุญแจของผู้ใช้สูงสุด", "input_label": "กุญแจสาธารณะของ ED25519 หรือ RSA" @@ -87,8 +85,6 @@ }, "backup": { "reuploaded_key": "กุญแจถูกอัปโหลดอีกครั้งเรียบร้อย", - "waiting_for_rebuild": "คุณจะสามารถสร้างข้อมูลสำรองของคุณได้ในไม่กี่นาที", - "restoring": "การกู้คืนจากการสำรองข้อมูง", "restore_alert": "คุณกำลังที่จะคืนค่าจากข้อมูลสำรองที่สร้างใน {}. ข้อมูลทั้งหมดตอนนี้จะหายไป คุณแน่ใจไหม?", "refetching_list": "ในไม่กี่นาทีรายการจะอัปเดต", "card_title": "สำรอง", @@ -98,8 +94,6 @@ "restore": "คืนค่าจากการสำรอง", "no_backups": "ยังไม่มีการสำรองข้อมูลในตอนนี้", "create_new": "สร้างข้อมูลสำรองใหม่", - "creating": "กำลังสร้างข้อมูลสำรอง: {}%", - "error_pending": "เซิร์ฟเวอร์ส่งคืนข้อผิดพลาดตรวจสอบด้านล่าง", "refresh": "สถานะการรีเฟรช", "refetch_backups": "ดึงข้อมูลรายการสํารองข้อมูลอีกครั้ง" }, @@ -151,20 +145,6 @@ }, "disk": "ดิสก์ภายในเครื่อง" }, - "record": { - "api": "API ของ SelfPrivacy", - "cloud": "ไฟล์คลาวด์", - "git": "Git server", - "meet": "การประชุมแบบใช้วิดีโอ", - "password": "จัดการกับรหัสผ่าน", - "vpn": "VPN", - "mx": "ระเบียน MX", - "dmarc": "ระเบียน DMARC", - "spf": "ระเบียน SPF", - "root": "โดเมนหลัก", - "social": "เครือข่ายสังคมออนไลน์", - "dkim": "กุญแจ DKIM" - }, "storage": { "card_title": "พื้นที่ของเซิฟร์เวอร์", "status_ok": "การใช้งานดิสก์ปกติ", @@ -183,9 +163,7 @@ "size": "ขนาด", "data_migration_title": "การโยกย้ายข้อมูล", "data_migration_notice": "ระหว่างการย้ายข้อมูล ทุกเซิร์ฟเวอร์จะถูกปิด", - "start_migration_button": "เริ่มการย้ายข้อมูล", - "migration_process": "กำลังย้ายข้อมูล…", - "migration_done": "เสร็จสิ้น" + "start_migration_button": "เริ่มการย้ายข้อมูล" }, "not_ready_card": { "in_menu": "เซิร์ฟเวอร์ยังไม่ถูกติดตั้งในตอนนี้. โปรดใช้การติดตั้งอย่างง่ายในการติดตั้ง" @@ -221,7 +199,6 @@ "new_user_info_note": "ผู้ใช้ใหม่จะได้รับสิทธิ์เข้าถึงบริการทั้งหมดโดยอัตโนมัติ", "reset_password": "รีเซ็ตรหัสผ่าน", "account": "บัญชี", - "send_registration_data": "แบ่งปันข้อมูลรับรองการเข้าสู่ระบบ", "could_not_fetch_description": "โปรดตรวจสอบการเชื่อมต่ออินเทอร์เน็ตของคุณแล้วลองอีกครั้ง", "could_not_create_user": "สร้างผู้ใช้ไม่ได้", "could_not_delete_user": "ลบผู้ใช้ไม่ได้", @@ -229,13 +206,9 @@ "email_login": "เข้าสู่ระบบอีเมล" }, "social_network": { - "subtitle": "มันยากที่จะเชื่อ แต่มันก็เป็นไปได้ที่จะสร้างโซเชียลเน็ตเวิร์กของคุณเอง โดยมีกฎและกลุ่มเป้าหมายของคุณเอง", - "title": "เครือข่ายสังคม", "login_info": "คุณจะต้องสร้างบัญชีบนเว็บไซต์" }, "git": { - "subtitle": "ทางเลือกส่วนตัวสำหรับ Github ที่เป็นของคุณ แต่ไม่ใช่ของ Microsoft", - "title": "Git Server", "login_info": "คุณจะต้องสร้างบัญชีบนเว็บไซต์ ผู้ใช้คนแรกจะกลายเป็นผู้ดูแลระบบ" }, "initializing": { @@ -261,27 +234,15 @@ "provider_bad_key_error": "คีย์ API ของผู้ให้บริการไม่ถูกต้อง" }, "mail": { - "title": "อีเมล", - "subtitle": "อีเมลสำหรับบริษัทและครอบครัว", "login_info": "ใช้ชื่อผู้ใช้และรหัสผ่านจากแท็บผู้ใช้ พอร์ต IMAP คือ 143 พร้อม STARTTLS, พอร์ต SMTP คือ 587 พร้อม STARTTLS." }, "password_manager": { - "title": "การจัดการรหัสผ่าน", - "subtitle": "ฐานความปลอดภัยของคุณ Bitwarden จะช่วยคุณสร้าง จัดเก็บ และย้ายรหัสผ่านระหว่างอุปกรณ์ ตลอดจนป้อนรหัสผ่าน เมื่อมีการร้องขอโดยใช้การเติมข้อความอัตโนมัติ", "login_info": "คุณจะต้องสร้างบัญชีบนเว็บไซต์" }, "video": { - "title": "การประชุมแบบวิดีโอ", - "subtitle": "Zoom และ Google Meet นั้นดี แต่ Jitsi Meet เป็นทางเลือกที่คุ้มค่าซึ่งยังช่วยให้คุณมั่นใจได้ว่าไม่มีใครฟังคุณ", "login_info": "ไม่จะเป็นต้องใช้บัญชี" }, "cloud": { - "title": "การจัดเก็บบนคลาวด์", - "subtitle": "ไม่อนุญาตให้บริการคลาวด์อ่านข้อมูลของคุณโดยใช้ NextCloud", "login_info": "การเข้าสู่ระบบคือผู้ดูแลระบบ รหัสผ่านเหมือนกับผู้ใช้หลักของคุณ สร้างบัญชีใหม่ในอินเทอร์เฟซ Nextcloud" - }, - "vpn": { - "title": "เซิฟเวอร์ VPN", - "subtitle": "เซิฟเวอร์ VPN ส่วนตัว" } } diff --git a/assets/translations/uk.json b/assets/translations/uk.json index 11f8bb90..ee370817 100644 --- a/assets/translations/uk.json +++ b/assets/translations/uk.json @@ -57,8 +57,6 @@ "title": "SSH-ключі", "create": "Створити SSH-ключ", "delete": "Видалити SSH-ключ", - "subtitle_with_keys": "{} ключів", - "subtitle_without_keys": "Ключів немає", "no_key_name": "Безіменний ключ", "root_title": "Це ключі суперкористувача", "input_label": "Публічний ED25519, ECDSA або RSA ключ" @@ -98,7 +96,6 @@ "choose_server_type_notice": "Важливими речами, на які слід дивитися, є процесор і оперативна пам'ять. Дані ваших послуг буде збережено.", "use_this_domain_text": "Токен, який ви надали, надає доступ до наступного домену", "loading_domain_list": "Завантаження списку доменів", - "found_more_domains": "Знайдено більше одного домену. Для власної безпеки просимо видалити непотрібні домени", "server_created": "Сервер створений. DNS перевірений і завантаження серверу у прогресі…", "enter_username_and_password": "Введіть ім’ я користувача і надійний пароль", "connect_to_server": "Почнемо з сервера.", @@ -128,12 +125,9 @@ "choose_server_type_ram": "{} ГБ ОЗУ", "choose_server_type_storage": "{} ГБ системного сховища", "choose_server_type_payment_per_month": "{} щомісячно", - "no_server_types_found": "Не знайдено доступних типів серверів. Переконайтеся, що ваш обліковий запис доступний і спробуйте змінити розташування вашого сервера.", "backblaze_bad_key_error": "Інформація про зберігання Backblaze є недійсною", "select_dns": "Тепер давайте оберемо DNS-провайдера", - "manage_domain_dns": "Для управління DNS домену", "use_this_domain": "Скористатися цим доменом?", - "connect_backblaze_storage": "Підключити Backblaze сховище", "no_connected_domains": "Наразі немає пов'язаних доменів", "save_domain": "Зберегти домен", "final": "Останній крок", @@ -145,7 +139,6 @@ "check": "Перевірка", "one_more_restart": "Ще один перезапуск, щоб застосувати сертифікати безпеки.", "create_master_account": "Створити внутрішній рахунок", - "finish": "Усе ініціалізовано", "checks": "Перевірка була завершена\n{} з {}", "dns_provider_bad_key_error": "Невірний ключ API", "steps": { @@ -165,13 +158,9 @@ "multiple_domains_found_text": "Даний токен надає доступ до наступних доменних імен. Будь ласка виберіть той, який ви хочете використовувати. Для безпеки інших доменних імен варто обмежити доступ даного токену лише до домена, який ви хочете використовувати з SelfPrivacy.", "domain_critical_error": "Домен недоступний! Натисніть щоб дізнатися більше…", "choose_server_type_payment_storage": "{} за додаткове сховище", - "server_provider_description": "Місце, де будуть знаходитися ваші дані і сервіси SelfPrivacy:", - "select_provider_payment_text_cloudflare": "Банківські карти", - "dns_provider_description": "Це дозволить пов'язати ваш домен з IP адресою:", "choose_server_type_payment_ip": "{} за публічну IPv4 адресу", "connect_to_dns": "Підключіть DNS провайдера", "choose_server_type_payment_server": "{} за сам сервер", - "connect_to_dns_provider_text": "За допомогою API токена програма SelfPrivacy налаштує записи DNS", "multiple_domains_found": "Знайдено декілька доменів" }, "recovering": { @@ -252,20 +241,6 @@ "dns_provider": "Провайдер DNS", "pricing_error": "Не вдалося отримати ціни постачальника" }, - "record": { - "api": "SelfPrivacy API", - "cloud": "Файлове сховище", - "git": "Git-сервер", - "social": "Соціальна мережа", - "password": "Менеджер паролів", - "vpn": "VPN", - "mx": "MX-запис", - "dmarc": "DMARC-запис", - "spf": "SPF-запис", - "meet": "Відео конференція", - "dkim": "DKIM ключі", - "root": "Кореневий домен" - }, "domain": { "card_title": "Домен", "screen_title": "Домен та DNS", @@ -278,8 +253,7 @@ "email_subtitle": "Записи, необхідні для безпечного обміну електронною поштою.", "update_list": "Лист оновлень", "error_subtitle": "Натисніть тут, щоб виправити їх. При цьому також буде видалено користувацькі записи.", - "services_subtitle": "Введіть \"А\" записи, необхідні для кожної служби.", - "domain_validation_failure": "Ми не можемо отримати доступ до вашого домену!" + "services_subtitle": "Введіть \"А\" записи, необхідні для кожної служби." }, "backup": { "card_title": "Резервне копіювання", @@ -289,14 +263,10 @@ "restore": "Відновити з резервної копії", "no_backups": "Ще немає резервних копій", "create_new": "Створити нову резервну копію", - "creating": "Створення нової резервної копії: {}%", - "error_pending": "Помилка відновлення сервера, перевірте це нижче", "refresh": "Оновити статус", "refetch_backups": "Повторно отримати список резервних копій", "refetching_list": "За кілька хвилин список буде оновлений", "description": "Врятує ваш день у разі аварії: хакерська атака, видаленя серверу, тощо.", - "waiting_for_rebuild": "Ви зможете створити свою першу резервну копію через кілька хвилин.", - "restoring": "Відновлення з резервної копії", "restore_alert": "Ви збираєтеся відновити з резервної копії. створеної на {}. Усі поточні дані будуть втрачені. Ви згодні?", "refetch_backups_subtitle": "Скинути кеш і запросити дані у провайдера. Може спричинити додаткові витрати.", "reupload_key_subtitle": "Ще раз проініціалізує сховище резервних копій. Використовуйте, якщо щось зламалося.", @@ -311,10 +281,7 @@ "autobackup_period_never": "Автоматичне копіювання вимкнено", "autobackup_period_every": "Раз у {period}", "autobackup_period_disable": "Вимкнути автоматичні копіювання", - "autobackup_custom": "Інше", - "autobackup_custom_hint": "Введіть період у хвилинах", "autobackup_set_period": "Встановити період", - "autobackup_period_set": "Період встановлено", "backups_encryption_key": "Ключ шифрування", "backups_encryption_key_subtitle": "Зберігайте його в безпечному місці.", "backups_encryption_key_copy": "Скопіюйте ключ шифрування", @@ -386,7 +353,6 @@ } }, "snapshot_modal_service_not_found": "Це знімок сервісу, якого більше немає на вашому сервері. Зазвичай цього не повинно відбуватися, і ми не зможемо виконати автоматичне відновлення. Ви можете завантажити знімок і відновити його вручну. Зверніться до служби підтримки SelfPrivacy, якщо вам потрібна допомога.", - "quotas_set": "Нові квоти ротації резервних копій задано", "rotation_quotas_title": "Налаштування ротації знімків", "quotas_only_applied_to_autobackups": "Ці налаштування застосовуються тільки до резервних копій, створених автоматично. Створені вручну резервні копії не будуть видалені цими правилами.", "quota_titles": { @@ -421,8 +387,6 @@ "size": "Розмір", "data_migration_title": "Перенесення даних", "start_migration_button": "Почати перенос", - "migration_process": "Перенос…", - "migration_done": "Закінчити", "status_ok": "Використання диска нормальне", "extending_volume_title": "Збільшення обсягу", "extending_volume_description": "Зміна обсягу дозволить зберігати більше даних на вашому сервері без розширення сервера. Обсяг може бути тільки збільшеним: зменшення неможливе.", @@ -457,39 +421,23 @@ "snapshots": "Знімки резервних копій" }, "mail": { - "subtitle": "E-Mail для компанії та сім'ї.", - "title": "E-Mail", "login_info": "Використовувати ім’ я користувача і пароль з вкладки « користувач ». Порт IMAP — 143 з STARTTLS, порт SMTP — 587." }, "password_manager": { - "title": "Менеджер паролів", - "login_info": "Вам доведеться створити обліковий запис на веб-сайті.", - "subtitle": "Основа вашої безпеки. Bitwarden допоможе вам створювати, зберігати і переміщати паролі між пристроями, а також вводити їх за запитом за допомогою автозаповнення." + "login_info": "Вам доведеться створити обліковий запис на веб-сайті." }, "video": { - "title": "Відеозустріч", - "subtitle": "Zoom і Google Meet хороші, але Jitsi meet є вартою альтернативи, яка також дає вам впевненість, що вас не слухають.", "login_info": "Обліковий запис не потрібен." }, "cloud": { - "title": "Хмарне сховище", - "subtitle": "Не дозволяйте хмарним службам читати ваші дані, за допомогою NextCloud.", "login_info": "Вхід адміністратора, пароль такий самий, як і у вашого головного користувача. Створити нові аккаунти у Nextcloud." }, "social_network": { - "title": "Соціальна мережа", - "login_info": "Вам доведеться створити обліковий запис на веб-сайті.", - "subtitle": "Важко повірити, але стало можливим створити власну соціальну мережу, з твоїми власними правилами та цільовою аудиторією." + "login_info": "Вам доведеться створити обліковий запис на веб-сайті." }, "git": { - "title": "Git-сервер", - "subtitle": "Приватна альтернатива Github, яка належить вам, а не Microsoft.", "login_info": "Вам доведеться створити обліковий запис на веб-сайті. Першим користувачем стане адміністратор." }, - "vpn": { - "title": "VPN-сервер", - "subtitle": "Приватний VPN-сервер" - }, "users": { "add_new_user": "Додати першого користувача", "new_user": "Новий користувач", @@ -500,7 +448,6 @@ "delete_confirm_question": "Ви згодні?", "reset_password": "Скинути пароль", "account": "Аккаунт", - "send_registration_data": "Поділитися реєстраційними даними", "could_not_fetch_users": "Не вдалося отримати список користувачів", "refresh_users": "Оновити список користувачів", "could_not_create_user": "Не зміг створити користувача", @@ -572,7 +519,6 @@ "purge_all_keys_confirm": "Так, очистити всі мої токени", "delete_server_volume": "Видалити сервер і сховище?", "reboot": "Перезавантажити", - "you_cant_use_this_api": "Не можна використовувати цей API для доменів з таким TLD.", "yes": "Так", "no": "Ні", "volume_creation_error": "Не вдалося створити сховище." diff --git a/assets/translations/zh_Hans.json b/assets/translations/zh_Hans.json index b269e1da..73c0628b 100644 --- a/assets/translations/zh_Hans.json +++ b/assets/translations/zh_Hans.json @@ -53,12 +53,9 @@ "reupload_key": "强制重新上传密钥", "reuploaded_key": "密钥已重新上传", "initialize": "初始化", - "waiting_for_rebuild": "您将能在几分钟内创建您的第一个备份。", "restore": "从备份中恢复", "no_backups": "还没有任何备份", "create_new": "创建一个新的备份", - "creating": "创建一个新的备份:{}%", - "restoring": "正在从备份中恢复", "restore_alert": "您即将恢复备份,该备份创建于{}。所有当前数据将会丢失。您确定吗?", "refresh": "刷新状态", "refetch_backups": "刷新备份列表", @@ -76,10 +73,7 @@ "autobackup_period_never": "自动备份已禁用", "autobackup_period_every": "每{period}", "autobackup_period_disable": "禁用自动备份", - "autobackup_custom": "自定义", - "autobackup_custom_hint": "输入自定义时间间隔(分钟)", "autobackup_set_period": "设置周期", - "autobackup_period_set": "周期已设置", "backups_encryption_key": "加密密钥", "backups_encryption_key_subtitle": "请保管好。", "backups_encryption_key_copy": "复制加密密钥", @@ -107,7 +101,6 @@ }, "set_rotation_quotas": "设置新的轮换配额", "rotation_quotas_title": "快照轮换设置", - "quotas_set": "新的备份轮换配额已设置", "quotas_only_applied_to_autobackups": "这些设置仅适用于自动备份。手动备份不会被删除。", "quota_titles": { "last": "保留最新备份数量", @@ -121,8 +114,7 @@ "description": "在发生意外的时候将节省你的时间:黑客攻击,服务器被删除等。", "backups_encryption_key_description": "这个密钥用于加密您的备份。如果丢失了它,您将无法恢复您的备份。请将其放在安全的地方,因为如果您需要手动从备份中恢复时,它将会很有用。", "snapshot_modal_download_verify_option_description": "风险较低,但需要更多的空间。将整个快照下载到临时存储中,验证后再替换当前数据。", - "snapshot_modal_service_not_found": "这是一个您的服务器上不再拥有的服务的快照。通常情况下,这不应该发生,我们无法进行自动恢复。您仍然可以下载快照并手动进行恢复。如果需要帮助,请联系SelfPrivacy支持团队。", - "error_pending": "服务器返回错误,请在下方检查" + "snapshot_modal_service_not_found": "这是一个您的服务器上不再拥有的服务的快照。通常情况下,这不应该发生,我们无法进行自动恢复。您仍然可以下载快照并手动进行恢复。如果需要帮助,请联系SelfPrivacy支持团队。" }, "service_page": { "status": { @@ -167,13 +159,9 @@ "price": "价格", "data_migration_title": "数据迁移", "data_migration_notice": "在迁移期间,所有服务将被关闭。", - "start_migration_button": "开始迁移", - "migration_process": "正在迁移…", - "migration_done": "完成" + "start_migration_button": "开始迁移" }, "cloud": { - "title": "云存储", - "subtitle": "使用 NextCloud时不允许云服务读取您的数据。", "login_info": "登录名为 admin,密码与您的主用户相同。在 Nextcloud 界面中创建新账户。" }, "initializing": { @@ -196,12 +184,8 @@ "select_provider_email_notice": "新客户将无法使用电子邮件托管。然而,一旦完成首次付款,将解锁该功能。", "what": "这意味着什么?", "choose_server_type_text": "不同的资源大小支持不同的服务。别担心,您可以随时扩展您的服务器", - "no_server_types_found": "找不到可用的服务器类型。确保您的帐户可访问,并尝试更改服务器位置。", - "found_more_domains": "发现多于一个域名。出于安全考虑,请删除不必要的域名", "server_started": "服务器已启动。现在将进行验证并重新启动…", "one_more_restart": "还需一次重启以应用您的安全证书。", - "server_provider_description": "一个存放你的数据和 SelfPrivacy 服务的地方:", - "dns_provider_description": "一个让你的 IP 指向域名的服务:", "connect_to_server": "让我们从一个服务器开始。", "select_provider": "从以下列表中选择任何提供商,它们都支持 SelfPrivacy", "select_provider_notice": "我们所说的“相对较小”是指一个拥有 2 个 CPU 核心和 2GB RAM 的机器。", @@ -213,7 +197,6 @@ "select_provider_payment_title": "付款方式", "select_provider_payment_text_hetzner": "信用卡、SWIFT、SEPA、PayPal", "select_provider_payment_text_do": "信用卡、Google Pay、PayPal", - "select_provider_payment_text_cloudflare": "信用卡", "select_provider_site_button": "访问网站", "connect_to_server_provider": "现在登录 ", "connect_to_server_provider_text": "使用 API 令牌,SelfPrivacy 将能够租用一台机器并在其上设置您的服务器", @@ -236,14 +219,11 @@ "dns_provider_bad_key_error": "API 密钥无效", "backblaze_bad_key_error": "Backblaze 存储信息无效", "connect_to_dns": "连接 DNS 提供商", - "connect_to_dns_provider_text": "使用 API 令牌,SelfPrivacy 将管理所有 DNS 条目", "select_dns": "现在让我们选择一个 DNS 提供商", - "manage_domain_dns": "管理您域名的 DNS", "use_this_domain": "使用此域名?", "use_this_domain_text": "您提供的令牌可以访问以下域名", "multiple_domains_found": "找到多个域名", "multiple_domains_found_text": "您提供的令牌可以访问以下域名。请选择要使用的域名。出于对其他域名安全性的考虑,您应该将此令牌的访问权限限制为仅限于您想要与 SelfPrivacy 使用的域名。", - "connect_backblaze_storage": "连接 Backblaze 存储", "no_connected_domains": "目前没有连接的域名", "loading_domain_list": "加载域名列表中", "save_domain": "保存域名", @@ -256,7 +236,6 @@ "check": "检查", "create_master_account": "创建主账户", "enter_username_and_password": "输入用户名和强密码", - "finish": "一切都初始化完成", "checks": "检查已完成\n{} 个中的 {} 个" }, "recovering": { @@ -302,17 +281,12 @@ "in_menu": "服务器尚未设置。请使用设置向导完成设置以进行进一步的工作。" }, "mail": { - "login_info": "使用用户选项卡中的用户名和密码。IMAP端口为143,启用STARTTLS;SMTP端口为587,启用STARTTLS。", - "subtitle": "公司和家庭的电子邮件。", - "title": "电子邮件" + "login_info": "使用用户选项卡中的用户名和密码。IMAP端口为143,启用STARTTLS;SMTP端口为587,启用STARTTLS。" }, "password_manager": { - "subtitle": "安全的基本保障。Bitwarden 将帮助你创建、存储和在设备之间移动密码,并在请求时使用自动完成输入它们。", - "title": "密码管理器", "login_info": "您将需要在网站上创建一个账户。" }, "users": { - "send_registration_data": "共享登录凭据", "details_title": "用户详情", "add_new_user": "添加第一个用户", "new_user": "新用户", @@ -335,8 +309,6 @@ "user_already_exists": "已存在此用户名的用户" }, "social_network": { - "subtitle": "你可能不相信,现在你可以按照你自己的规则和目标受众,创建你自己的社交网络了。", - "title": "社交网络", "login_info": "你需要在网站上创建一个账户。" }, "recovery_key": { @@ -361,7 +333,6 @@ "generation_error": "无法生成恢复密钥。{}" }, "modals": { - "you_cant_use_this_api": "您不能使用此 API 来处理具有此 TLD 的域名。", "volume_creation_error": "无法创建卷。", "unexpected_error": "提供商端在安置过程中出现意外错误。", "dns_removal_error": "无法移除 DNS 记录。", @@ -519,8 +490,6 @@ "title": "SSH密钥", "delete": "删除SSH密钥", "delete_confirm_question": "确定是否要删除SSH密钥?", - "subtitle_with_keys": "{} 密钥", - "subtitle_without_keys": "无密钥", "no_key_name": "未命名密钥", "root_title": "这些是超级用户密钥", "root_subtitle": "这些密钥的所有者拥有对服务器的完全访问权限,并可以在其上执行任何操作。请只添加您自己的密钥到服务器上。", @@ -578,20 +547,6 @@ "reboot_after_upgrade_hint": "在服务器应用更改后无需提示重新启动", "server_timezone": "服务器时区" }, - "record": { - "root": "根域名", - "api": "SelfPrivacy API", - "cloud": "文件云", - "meet": "视频会议", - "social": "社交网络", - "password": "密码管理器", - "vpn": "VPN", - "mx": "MX 记录", - "dmarc": "DMARC 记录", - "spf": "SPF 记录", - "dkim": "DKIM 密钥", - "git": "Git服务器" - }, "domain": { "card_title": "域名", "ok": "DNS记录全部正常", @@ -603,24 +558,15 @@ "email_title": "邮件", "email_subtitle": "安全交换电子邮件所需的记录。", "update_list": "升级列表", - "domain_validation_failure": "我们无法访问你的域名!", "screen_title": "域名和DNS", "error_subtitle": "点击此处以修复它们。这也将删除自定义记录。" }, "video": { - "title": "视频会议", - "subtitle": "Zoom 和 Google Meet 都很好,但 Jitsi Meet 是一个更加值得的替代品,它更能让你放心你的对话不会被监听。", "login_info": "无需账户。" }, "git": { - "title": "Git 服务器", - "subtitle": "这是 Github 的私有替代品,属于你自己,而不是微软的。", "login_info": "你需要在网站上创建一个账户。第一个用户将成为管理员。" }, - "vpn": { - "title": "VPN 服务器", - "subtitle": "私人 VPN 服务器" - }, "timer": { "sec": "{} 秒" }, From e874392a832afa148f16b99762a9c8a66b075273 Mon Sep 17 00:00:00 2001 From: Inex Code Date: Thu, 14 Mar 2024 19:06:35 +0300 Subject: [PATCH 71/75] refactor: Remove the server deletion function --- assets/translations/en.json | 5 +- .../server_installation_cubit.dart | 29 ---------- .../pages/more/app_settings/app_settings.dart | 54 ------------------- 3 files changed, 1 insertion(+), 87 deletions(-) diff --git a/assets/translations/en.json b/assets/translations/en.json index 40b1a85a..b862cba6 100644 --- a/assets/translations/en.json +++ b/assets/translations/en.json @@ -81,9 +81,7 @@ "dark_theme_description": "Switch your application theme", "dangerous_settings": "Dangerous settings", "reset_config_title": "Reset application config", - "reset_config_description": "Resets API keys and root user.", - "delete_server_title": "Delete server", - "delete_server_description": "This removes your server. It will be no longer accessible." + "reset_config_description": "Resets API keys and root user." }, "ssh": { "title": "SSH keys", @@ -542,7 +540,6 @@ "are_you_sure": "Are you sure?", "purge_all_keys": "Purge all authentication keys?", "purge_all_keys_confirm": "Yes, purge all my tokens", - "delete_server_volume": "Delete the server and volume?", "reboot": "Reboot", "yes": "Yes", "no": "No" diff --git a/lib/logic/cubit/server_installation/server_installation_cubit.dart b/lib/logic/cubit/server_installation/server_installation_cubit.dart index 5476a755..66e9e2f2 100644 --- a/lib/logic/cubit/server_installation/server_installation_cubit.dart +++ b/lib/logic/cubit/server_installation/server_installation_cubit.dart @@ -850,35 +850,6 @@ class ServerInstallationCubit extends Cubit { emit(const ServerInstallationEmpty()); } - Future serverDelete() async { - closeTimer(); - - if (state.serverDetails != null) { - final bool deletionResult = - await repository.deleteServer(state.serverDomain!); - if (!deletionResult) { - return; - } - } - await repository.deleteServerRelatedRecords(); - emit( - ServerInstallationNotFinished( - providerApiToken: state.providerApiToken, - serverDomain: state.serverDomain, - dnsApiToken: state.dnsApiToken, - backblazeCredential: state.backblazeCredential, - rootUser: state.rootUser, - customSshKey: null, - serverDetails: null, - isServerStarted: false, - isServerResetedFirstTime: false, - isServerResetedSecondTime: false, - isLoading: false, - dnsMatches: null, - ), - ); - } - @override Future close() { closeTimer(); diff --git a/lib/ui/pages/more/app_settings/app_settings.dart b/lib/ui/pages/more/app_settings/app_settings.dart index b41f1a74..7cce6715 100644 --- a/lib/ui/pages/more/app_settings/app_settings.dart +++ b/lib/ui/pages/more/app_settings/app_settings.dart @@ -1,5 +1,3 @@ -import 'dart:async'; - import 'package:auto_route/auto_route.dart'; import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; @@ -61,61 +59,9 @@ class _AppSettingsPageState extends State { ), ), const _ResetAppTile(), - // const Divider(height: 0), - _deleteServer(context), ], ); } - - Widget _deleteServer(final BuildContext context) { - final bool isDisabled = - context.watch().state.serverDetails == null; - return ListTile( - title: Text('application_settings.delete_server_title'.tr()), - subtitle: Text('application_settings.delete_server_description'.tr()), - textColor: isDisabled - ? Theme.of(context).colorScheme.onBackground.withOpacity(0.5) - : Theme.of(context).colorScheme.onBackground, - onTap: isDisabled - ? null - : () { - showDialog( - context: context, - builder: (final _) => AlertDialog( - title: Text('modals.are_you_sure'.tr()), - content: Text('modals.delete_server_volume'.tr()), - actions: [ - DialogActionButton( - text: 'modals.yes'.tr(), - isRed: true, - onPressed: () async { - unawaited( - showDialog( - context: context, - builder: (final context) => Container( - alignment: Alignment.center, - child: const CircularProgressIndicator(), - ), - ), - ); - await context - .read() - .serverDelete(); - if (!mounted) { - return; - } - Navigator.of(context).pop(); - }, - ), - DialogActionButton( - text: 'basis.cancel'.tr(), - ), - ], - ), - ); - }, - ); - } } class _ResetAppTile extends StatelessWidget { From 48c28261b8ebb2b835faa851accaf46c961a6082 Mon Sep 17 00:00:00 2001 From: Inex Code Date: Thu, 14 Mar 2024 20:22:03 +0300 Subject: [PATCH 72/75] chore: 0.11.0 release --- appimage.yml | 2 +- .../{zh_Hans.json => zh-Hans.json} | 0 .../{zh_Hant.json => zh-Hant.json} | 0 .../android/en-US/changelogs/0.11.0.txt | 84 +++++++++++++++++++ lib/config/localization.dart | 24 +++--- pubspec.yaml | 2 +- 6 files changed, 100 insertions(+), 12 deletions(-) rename assets/translations/{zh_Hans.json => zh-Hans.json} (100%) rename assets/translations/{zh_Hant.json => zh-Hant.json} (100%) create mode 100644 fastlane/metadata/android/en-US/changelogs/0.11.0.txt diff --git a/appimage.yml b/appimage.yml index d037b747..20989f13 100644 --- a/appimage.yml +++ b/appimage.yml @@ -10,7 +10,7 @@ AppDir: id: org.selfprivacy.app name: SelfPrivacy icon: org.selfprivacy.app - version: 0.10.1 + version: 0.11.0 exec: selfprivacy exec_args: $@ apt: diff --git a/assets/translations/zh_Hans.json b/assets/translations/zh-Hans.json similarity index 100% rename from assets/translations/zh_Hans.json rename to assets/translations/zh-Hans.json diff --git a/assets/translations/zh_Hant.json b/assets/translations/zh-Hant.json similarity index 100% rename from assets/translations/zh_Hant.json rename to assets/translations/zh-Hant.json diff --git a/fastlane/metadata/android/en-US/changelogs/0.11.0.txt b/fastlane/metadata/android/en-US/changelogs/0.11.0.txt new file mode 100644 index 00000000..8887eac2 --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/0.11.0.txt @@ -0,0 +1,84 @@ +### Features + +- Enabled the following languages: + - Arabic + - Estonian + - Kazakh + - Chinese (Simplified) + +- **Server management**: Add ssh settings ([#477](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/477)) +- **UI**: Server settings is now a separate screen ([#477](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/477)) +- **UI**: The new About page now contains links to our support channels ([#464](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/464), resolves [#339](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/339) and [#170](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/170)) +- **Jobs**: Now you can track the result of jobs, and the progress of the server rebuilds and upgrades ([#440](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/440), resolves [#254](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/254)) +- **UI**: On iOS, use the Curpentino bottom navbar ([#483](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/483)) +- **UI**: Use Curpentino widgets where possible on iOS ([#483](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/483)) +- **Jobs**: Block starting client-side jobs when the server is rebuilding or moving a service ([#477](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/477)) +- **UI**: On the bottom bar, show all labels, not only the selected one ([#458](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/458), resolves [#454](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/454)) +- **UI**: Move provider card titles to the top row ([#449](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/449), resolves [#448](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/448)) +- Unified management of API connection to the server: the app should be now more reactive to changes ([#440](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/440)) +- **UI**: Onboarding page now looks better on big screens ([#444](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/444)) + + +### Bug Fixes + +- **UI**: Card titles no longer overflow on small screens ([#483](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/483), resolves [#476](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/476)) +- **DNS**: Detect the situation when we have faulty link-local IPv6 records ([#473](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/473)) +- **DNS**: Do not include faulty link-local DNS records in the list of found records ([#475](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/475)) +- **UI**: Fix the empty server confirmation screen during recovery ([#474](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/474)) +- **UI**: Fix the misleading value of "Do not verify TLS" ([#468](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/468)) +- **Jobs**: When you return the server settings value back, the job to change the setting is deleted ([#440](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/440), resolves [#166](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/166)) +- **Jobs**: When removing all completed jobs, optimistically delete them in UI first ([#440](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/440), resolves [#277](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/277)) + + +### Other +- Binds migration screen is now in Developer settings, as it is no longer needed on API 3.0, but might still be helpful for stuck servers. +- Remove the server deletion function ([#484](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/484)) + + +### Translation contributions + + +* Kazakh + + * TabithiS (133) + +* Chinese (Simplified) + + * Nil (545) + +* Polish + + * TabithiS (52) + +* Russian + + * Inex Code (43) + +* Hebrew + + * Yaron (17) + +* Estonian + + * Dmitri B. (536) + +* Thai + + * Inex Code (2) + +* German + + * Inex Code (14) + * Based on anonymous suggestions + +* Ukrainian + + * Nagibator Nagibuchiy (18) + * TabithiS (26) + * Meko (93) + +* Arabic + + * Deem Alosili (656) + + diff --git a/lib/config/localization.dart b/lib/config/localization.dart index b73a252a..3f55fae2 100644 --- a/lib/config/localization.dart +++ b/lib/config/localization.dart @@ -11,28 +11,32 @@ class Localization extends StatelessWidget { @override Widget build(final BuildContext context) => EasyLocalization( supportedLocales: const [ - Locale('ru'), - Locale('en'), - Locale('uk'), - Locale('de'), - Locale('fr'), - Locale('es'), - Locale('cs'), - Locale('pl'), - Locale('th'), + Locale('ar'), Locale('az'), Locale('be'), + Locale('cs'), + Locale('de'), + Locale('en'), + Locale('es'), + Locale('et'), + Locale('fr'), Locale('he'), + Locale('kk'), Locale('lv'), Locale('mk'), + Locale('pl'), + Locale('ru'), Locale('sk'), Locale('sl'), + Locale('th'), + Locale('uk'), + Locale.fromSubtags(languageCode: 'zh', scriptCode: 'Hans'), ], path: 'assets/translations', fallbackLocale: const Locale('en'), useFallbackTranslations: true, saveLocale: false, - useOnlyLangCode: true, + useOnlyLangCode: false, child: child!, ); } diff --git a/pubspec.yaml b/pubspec.yaml index 09af8e4b..1d41cdce 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,7 +1,7 @@ name: selfprivacy description: selfprivacy.org publish_to: 'none' -version: 0.10.1+21 +version: 0.11.0+22 environment: sdk: '>=3.2.1 <4.0.0' From 04401e3c005880aec7ba143948318bb7c3df6828 Mon Sep 17 00:00:00 2001 From: Inex Code Date: Thu, 14 Mar 2024 20:51:14 +0300 Subject: [PATCH 73/75] hotfix: Backups unable to init --- lib/logic/bloc/backups/backups_state.dart | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lib/logic/bloc/backups/backups_state.dart b/lib/logic/bloc/backups/backups_state.dart index 7cdfe023..5c5c92ae 100644 --- a/lib/logic/bloc/backups/backups_state.dart +++ b/lib/logic/bloc/backups/backups_state.dart @@ -66,6 +66,9 @@ class BackupsUnititialized extends BackupsState { @override List get props => []; + @override + bool get preventActions => false; + @override BackupsUnititialized copyWith({ final BackblazeBucket? backblazeBucket, From c078dee25afa636fdfe1a9a605e9413571ae8287 Mon Sep 17 00:00:00 2001 From: Inex Code Date: Thu, 14 Mar 2024 21:03:32 +0300 Subject: [PATCH 74/75] chore: update iOS icons --- .../AppIcon.appiconset/AppIcon-20@2x.png | Bin 0 -> 565 bytes .../AppIcon.appiconset/AppIcon-20@2x~ipad.png | Bin 0 -> 565 bytes .../AppIcon.appiconset/AppIcon-20@3x.png | Bin 0 -> 946 bytes .../AppIcon.appiconset/AppIcon-20~ipad.png | Bin 0 -> 315 bytes .../AppIcon.appiconset/AppIcon-29.png | Bin 0 -> 490 bytes .../AppIcon.appiconset/AppIcon-29@2x.png | Bin 0 -> 869 bytes .../AppIcon.appiconset/AppIcon-29@2x~ipad.png | Bin 0 -> 869 bytes .../AppIcon.appiconset/AppIcon-29@3x.png | Bin 0 -> 1242 bytes .../AppIcon.appiconset/AppIcon-29~ipad.png | Bin 0 -> 490 bytes .../AppIcon.appiconset/AppIcon-40@2x.png | Bin 0 -> 1069 bytes .../AppIcon.appiconset/AppIcon-40@2x~ipad.png | Bin 0 -> 1069 bytes .../AppIcon.appiconset/AppIcon-40@3x.png | Bin 0 -> 1913 bytes .../AppIcon.appiconset/AppIcon-40~ipad.png | Bin 0 -> 565 bytes .../AppIcon.appiconset/AppIcon-60@2x~car.png | Bin 0 -> 1913 bytes .../AppIcon.appiconset/AppIcon-60@3x~car.png | Bin 0 -> 3048 bytes .../AppIcon-83.5@2x~ipad.png | Bin 0 -> 2772 bytes .../AppIcon.appiconset/AppIcon@2x.png | Bin 0 -> 1913 bytes .../AppIcon.appiconset/AppIcon@2x~ipad.png | Bin 0 -> 2953 bytes .../AppIcon.appiconset/AppIcon@3x.png | Bin 0 -> 3048 bytes .../AppIcon~ios-marketing.png | Bin 0 -> 47296 bytes .../AppIcon.appiconset/AppIcon~ipad.png | Bin 0 -> 1281 bytes .../AppIcon.appiconset/Contents.json | 174 ++++++++++-------- .../Icon-App-1024x1024@1x.png | Bin 17768 -> 0 bytes .../AppIcon.appiconset/Icon-App-20x20@1x.png | Bin 852 -> 0 bytes .../AppIcon.appiconset/Icon-App-20x20@2x.png | Bin 1129 -> 0 bytes .../AppIcon.appiconset/Icon-App-20x20@3x.png | Bin 1356 -> 0 bytes .../AppIcon.appiconset/Icon-App-29x29@1x.png | Bin 973 -> 0 bytes .../AppIcon.appiconset/Icon-App-29x29@2x.png | Bin 1326 -> 0 bytes .../AppIcon.appiconset/Icon-App-29x29@3x.png | Bin 1711 -> 0 bytes .../AppIcon.appiconset/Icon-App-40x40@1x.png | Bin 1129 -> 0 bytes .../AppIcon.appiconset/Icon-App-40x40@2x.png | Bin 1646 -> 0 bytes .../AppIcon.appiconset/Icon-App-40x40@3x.png | Bin 2185 -> 0 bytes .../AppIcon.appiconset/Icon-App-60x60@2x.png | Bin 2185 -> 0 bytes .../AppIcon.appiconset/Icon-App-60x60@3x.png | Bin 3043 -> 0 bytes .../AppIcon.appiconset/Icon-App-76x76@1x.png | Bin 1604 -> 0 bytes .../AppIcon.appiconset/Icon-App-76x76@2x.png | Bin 2664 -> 0 bytes .../Icon-App-83.5x83.5@2x.png | Bin 3131 -> 0 bytes 37 files changed, 93 insertions(+), 81 deletions(-) create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon-20@2x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon-20@2x~ipad.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon-20@3x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon-20~ipad.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon-29.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon-29@2x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon-29@2x~ipad.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon-29@3x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon-29~ipad.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon-40@2x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon-40@2x~ipad.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon-40@3x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon-40~ipad.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon-60@2x~car.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon-60@3x~car.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon-83.5@2x~ipad.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon@2x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon@2x~ipad.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon@3x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon~ios-marketing.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon~ipad.png delete mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png delete mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png delete mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png delete mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png delete mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png delete mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png delete mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png delete mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png delete mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png delete mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png delete mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png delete mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png delete mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png delete mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png delete mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon-20@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon-20@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..92321ace28e4d76b739bad40cf04e9d06119ef73 GIT binary patch literal 565 zcmV-50?Pe~P)*ZuC#5V|hCsDcT1NHf}(z z@>IJ41{^i7L6`6-+PZmA!PsmNT%x;n137w6H&B29hfSME)4kQ)*<~2YI|{^xkqw|O z@d-V3TYQ7Opk*i<2gi{jtZV=UTQimwgs5F8Z79OCQz0+FB#j+oU8^EgeP1qi52NG- zn4Nx&@{(f_YHn4Fm7O?w0e*EN|9TD1%+A5m+YhbA0R?}?`8!&x4v>*@?;(uPF~e~j zOl|EjSN0-2)a5VV?_YJo3M|V)c^Zpg#gjY%MXD3NE4jP>1L)@8gAS6PCg;@@IOi2n zgFz961izgG(fmo}`@h(qtOVy$K&djRL26K{0jcq?f2N9*ZuC#5V|hCsDcT1NHf}(z z@>IJ41{^i7L6`6-+PZmA!PsmNT%x;n137w6H&B29hfSME)4kQ)*<~2YI|{^xkqw|O z@d-V3TYQ7Opk*i<2gi{jtZV=UTQimwgs5F8Z79OCQz0+FB#j+oU8^EgeP1qi52NG- zn4Nx&@{(f_YHn4Fm7O?w0e*EN|9TD1%+A5m+YhbA0R?}?`8!&x4v>*@?;(uPF~e~j zOl|EjSN0-2)a5VV?_YJo3M|V)c^Zpg#gjY%MXD3NE4jP>1L)@8gAS6PCg;@@IOi2n zgFz961izgG(fmo}`@h(qtOVy$K&djRL26K{0jcq?f2N9yolo6dCy-WM~jlDJX#%YFa71ltD;@m~RnO1o{wRK|Mrd zzK9S?5`-^N5RsBe8LR6h-K@N<>$tb+%$kV=?abcX9nX2$hyCW9@Av-z5qdfxydz2^;Kas(XW^L}6-( zJtB`_U;#WmWsW%AiVx){%|LILC*_=ZcR{m^M0BFZ~LfTN>a zIF)ZAtMf3FtQ#FYdOYbeV8*KQfL9fMMOpqJSk_xb#JjZ?dK|(X{!cBb%(+HS+J^(e?(>Bh&+IA*1kv9 zuE|v}mR~U_xtil~SZJ~W&f5J0^;I7br?Y$DY@8DJ+cVJqD*3MnvH}+7XhF^xs*467 z?6e+trlIwP9-N((C$Lbq`Pt*BJ=sryU1(`H;#qepS-e)NTviUV3LZ7ZUr=(yL>4Ka z>va;EpYFuMqD&pulJ{`Kxn5-NSz5S04aKAJ-abrCYvftdaXJTXTzH4%#CZ?koK1}@ z&HFKGiIFF;O35Q5bq?(E#)DuEnsu1xWLnZ9HpyZ59=2FecKQq)PA8(&!bgC&eXkhI zm6-CQ11LY{?QlPYTT71PaO?IRJn!tp<%&VFi3sf7Qo7y-!!~cnMj-?iys!|L>l+$z zz2*@%CoD>{Fd)$(1{QLjn3#Ze%7|F)Y(NmCb+QJ)o&?QF(*OVf07*qoM6N<$f)p66z5oCK literal 0 HcmV?d00001 diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon-20~ipad.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon-20~ipad.png new file mode 100644 index 0000000000000000000000000000000000000000..ef2e701b7a7330bc15b064c9a134ea48d2600cd2 GIT binary patch literal 315 zcmV-B0mS}^P) zfsOSaLt&p8!?KnG3}11CGW#Wb)K zWFZKE=y2Ej42izC8CY46vlb03^|X2h^x<`eB|DTEHXo8@D2=_s;Arw3DO6}+>D=0* z3`)|U8Qy*3U%3v8PQ1u4eXRz=wxiMvVXk*+Z>g}rFNP&e zhZypE%^7YzHGXpQ{1%j4hDj*}vzzun33#?_1kY(v_U@gN! zPA&8AO%=oc@1*+_)V%!9X2!rG0<2G&xk#+q{(Wco{~ud{PK4(fnSm8JriI|*bF>Lc gL;#YlWaI=d0AZOwxlkACzyJUM07*qoM6N<$f)``u`v3p{ literal 0 HcmV?d00001 diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon-29@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon-29@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..776871c5239000128cf9b3473d22d948d778120a GIT binary patch literal 869 zcmV-r1DgDaP)OwC?;% z*L@2Zsw9gk3&qOiY5;UkVLz-TpI|Zu(eyL}4_>4b;7}RYS9hWy+c^i= z2nXG=eh8PVx?qS2ZAUyY+SrnXhcDAa(8R?7(y#4Ulj;ov8{wc=iLtFY(~UWY<8a{I zPO+4Y1|GE)o!GvK?60$q2nV&Dc#Gov{%Hu`1`}|^woNpu8_)(xm&EkFAw&L8a&-?WYQbMU-v1?kn0WZi%YFon5JTsYnfvx$ejB@>TY z)25EQx&kfR-G|E3kD|dRj#aqUoP`OFsMecNo3$6kc>^NYhrT4#G!(!;&gu(PI2F}a zyuKB5UIZQ?#Y}ok}0u{n^ zxmBe8l!&z-+h#ES%Sxe00000NkvXXu0mjfWHXIb literal 0 HcmV?d00001 diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon-29@2x~ipad.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon-29@2x~ipad.png new file mode 100644 index 0000000000000000000000000000000000000000..776871c5239000128cf9b3473d22d948d778120a GIT binary patch literal 869 zcmV-r1DgDaP)OwC?;% z*L@2Zsw9gk3&qOiY5;UkVLz-TpI|Zu(eyL}4_>4b;7}RYS9hWy+c^i= z2nXG=eh8PVx?qS2ZAUyY+SrnXhcDAa(8R?7(y#4Ulj;ov8{wc=iLtFY(~UWY<8a{I zPO+4Y1|GE)o!GvK?60$q2nV&Dc#Gov{%Hu`1`}|^woNpu8_)(xm&EkFAw&L8a&-?WYQbMU-v1?kn0WZi%YFon5JTsYnfvx$ejB@>TY z)25EQx&kfR-G|E3kD|dRj#aqUoP`OFsMecNo3$6kc>^NYhrT4#G!(!;&gu(PI2F}a zyuKB5UIZQ?#Y}ok}0u{n^ zxmBe8l!&z-+h#ES%Sxe00000NkvXXu0mjfWHXIb literal 0 HcmV?d00001 diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon-29@3x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon-29@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..5ff007f2ae54064a38bfe3ef3c5b28abb4fc0d4f GIT binary patch literal 1242 zcmV<01SR{4P)zTH+yWL&GbkCn`*>7H&bkF>E z<~QG-Gv{=+Mp$j&CL&-ESHyL&C~@U%i7RMJT;fU!2-aqwOI$$#!O~1FaRmhgOEbB| z6%-IG&EyhSP(ZLWlS^Dd0m0HtE^!3~1WU^$_n*D$ur0wu*Izmq%!X@91x(L0Eyd+< zFHHi%x3nDOy(-c_PzWRI4NRK8Rm)ovH-d2p_jQH4ow!;Ah^w11emy2v(3!ZzRRRrqqL}E0^?O*y6HMGVgyjo+uxa)Ar2F5r#&x;E2!#y9-sTzDu&M(UWj`mC-n7Ft)vZ^_<5y8# zaS<~LZs4!$J{RMnXnC`ywQ8Aj&J|nGgYu8=CvU%MJJ+9yM z;)R;Bs4j!JcRA!Nnd8TfSH4Mji`DXNA$A>@&E(#tXH>IHH9$4J*9`k->}H_y-G%7- z-52!|lj}e_=b?}q)K0?d9t94E4ZQWiJe>XEfvD8lWr^zm*KRs3FM!6~%}~>a!9DAn zp2YF5rpB#8T!*;J7yN;mwcn5I)qXx7+ukoGu0zMT&G&6Oho>L)kGyvEh8HW}TufXY zxJUQ2pde>--8Nvk@chQ-;!YIUEjSQ2)C}Q^`Y+-2+>Y4Gz`9+F&~wEbQ;E0^aAz0w zVt?)Fm_3fQ6k-37BH}u*jB0A%8*H!aKv~IeF(s^^8|7Q(t0l}11CGW#Wb)K zWFZKE=y2Ej42izC8CY46vlb03^|X2h^x<`eB|DTEHXo8@D2=_s;Arw3DO6}+>D=0* z3`)|U8Qy*3U%3v8PQ1u4eXRz=wxiMvVXk*+Z>g}rFNP&e zhZypE%^7YzHGXpQ{1%j4hDj*}vzzun33#?_1kY(v_U@gN! zPA&8AO%=oc@1*+_)V%!9X2!rG0<2G&xk#+q{(Wco{~ud{PK4(fnSm8JriI|*bF>Lc gL;#YlWaI=d0AZOwxlkACzyJUM07*qoM6N<$f)``u`v3p{ literal 0 HcmV?d00001 diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon-40@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon-40@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..4224b643dcd7f315c71ef0ee2e361baa1b67cc0d GIT binary patch literal 1069 zcmV+|1k(G7P) zTSydP7zW^XRxw*!D?5pV8j_M!s96S?S%zTVd7y%XB8(7EMIIti2r9@ZkkXuTG~O6IKVX}%Gr-S59q_MdMK&%QJN>>LEE*uYJ( zfWUx??QDe%Nb_Srq8|e?AXR`^&&NOpBnlAAIe`pF6d;y!0vV7fKrH73G9XcaSk4J# zK%xM#oD--yz^+ih@|n0=D_!o6U*icdgjSIkq<#WTfxu)ZdBs+C209E5hG1PpD|s;t zNF-!H22>)zyRZ_qSv3sEfJ6aeIVX?-i2}rOPM~uEmOpqnvq9G3$KuWAU&IakSH8t( z49RguK-EWhG?u`_@d>Jd&7F~etP^cWitSKw87>6~xaq98p4o(bp}i_0x)`9OwnjgN zd-)CU_Z?ON(FFk|HNQ>cs3@$5x0jiS=%RpeK(Hd(Um%Qt+vRHab}AfvP$>ki^(wax!!XMck|z2 zo8Ra%kB3eSIK69%zdRhYhEJPOP!=KEos(kQ#1n1D)6cK!#DHaa@3AZBr^9U@9rr+D zZXASJg9iiJQQgdL#NK&+ar_w4BRM~Y6S&X;D>1qomrgZ1oTTzi5bi$TF6-k2+EGcP zYe{+wV#2@4dfH7sxOis|M#tP3aIqm%I_E1q{R#0=UA9SEjT>;`b|fY&vXenuA181g z&C;9?h}_X<>+KuRRn?u>(69P?E-2t+(INEod(N4f0UZE_1diZ- z;ageHjVEEKt@mZX#g2bcf9g>aGE(FZ{#4ib_ebPOpXD=X$s zDlS3It6JNZM(rMkrw8SJ#quI~Bx(?e(eeRj@i}Pha+cX_Mn+~fJ~lU_s;tR&_e|SO zV}KIYz`y{`oJ~i0K{W#^O^?xN#Mpb_PJ0G7&d$Wy`J5VMwd5dX0U}g=MHl0b)5PkO7GT#Bxp`0}=&@<(xnUBnlAAIe`pF n6d;y!0vV7fKrH735&{1JDCzev_wni?00000NkvXXu0mjfJ*wwT literal 0 HcmV?d00001 diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon-40@2x~ipad.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon-40@2x~ipad.png new file mode 100644 index 0000000000000000000000000000000000000000..4224b643dcd7f315c71ef0ee2e361baa1b67cc0d GIT binary patch literal 1069 zcmV+|1k(G7P) zTSydP7zW^XRxw*!D?5pV8j_M!s96S?S%zTVd7y%XB8(7EMIIti2r9@ZkkXuTG~O6IKVX}%Gr-S59q_MdMK&%QJN>>LEE*uYJ( zfWUx??QDe%Nb_Srq8|e?AXR`^&&NOpBnlAAIe`pF6d;y!0vV7fKrH73G9XcaSk4J# zK%xM#oD--yz^+ih@|n0=D_!o6U*icdgjSIkq<#WTfxu)ZdBs+C209E5hG1PpD|s;t zNF-!H22>)zyRZ_qSv3sEfJ6aeIVX?-i2}rOPM~uEmOpqnvq9G3$KuWAU&IakSH8t( z49RguK-EWhG?u`_@d>Jd&7F~etP^cWitSKw87>6~xaq98p4o(bp}i_0x)`9OwnjgN zd-)CU_Z?ON(FFk|HNQ>cs3@$5x0jiS=%RpeK(Hd(Um%Qt+vRHab}AfvP$>ki^(wax!!XMck|z2 zo8Ra%kB3eSIK69%zdRhYhEJPOP!=KEos(kQ#1n1D)6cK!#DHaa@3AZBr^9U@9rr+D zZXASJg9iiJQQgdL#NK&+ar_w4BRM~Y6S&X;D>1qomrgZ1oTTzi5bi$TF6-k2+EGcP zYe{+wV#2@4dfH7sxOis|M#tP3aIqm%I_E1q{R#0=UA9SEjT>;`b|fY&vXenuA181g z&C;9?h}_X<>+KuRRn?u>(69P?E-2t+(INEod(N4f0UZE_1diZ- z;ageHjVEEKt@mZX#g2bcf9g>aGE(FZ{#4ib_ebPOpXD=X$s zDlS3It6JNZM(rMkrw8SJ#quI~Bx(?e(eeRj@i}Pha+cX_Mn+~fJ~lU_s;tR&_e|SO zV}KIYz`y{`oJ~i0K{W#^O^?xN#Mpb_PJ0G7&d$Wy`J5VMwd5dX0U}g=MHl0b)5PkO7GT#Bxp`0}=&@<(xnUBnlAAIe`pF n6d;y!0vV7fKrH735&{1JDCzev_wni?00000NkvXXu0mjfJ*wwT literal 0 HcmV?d00001 diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon-40@3x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon-40@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..1905bba39c1deaf3da3885f9f56a53f9b67fd570 GIT binary patch literal 1913 zcmbW2Sv=c`7RM8*=n%12Y_Th~Uwg%rD`>_RtprU=YA+evh^81#n;2V5J9agymYN|* z)b5r)Nl+c>bhNhEYOC5)#h9^N_dean`)|3UswfHqfy6PF(N|6{ ztW2XBi1#!r!MvOcl{ClG_K^z!nG`|}V3?Q>a*4}XtPWV{V0 zMan6;N4nP=H%mvlTd+o*M-(mod^TE?!nEAGm9I02&edsc#nm};_aWG1`**2J>KaTY z-xk3a4xPy0O-&$qN6zivy|Fo&Elb*(>M-*WWC|Gt%V7~Fey#5JOo@}p3MR4Lup;nP zA1Wmo1vMkii%Lr5m=%F#P9K!gURY7P5Qn`03k5iGYDi?52}Gv>B-pm5o#uqo(*_iN zrDo{cqfk5|)a^QW{zL5lR6MByXxGb+OEC{cqF?yapUq5*wel9Eq-Un%UFu)Y{rJ{? z||Xp{Xw`r z@5^h1?O{Q(6@sZetdd}Cxmd~pjzh3&EZdtv9HB@8Z zVNadDsSur@_fa3p<2GWrCj92O>VzJNwZ1t4N->EbFN}Fv$4WTX`?B&GpoAfqu_d*j z%8TY|L62k_!)DMu^b2%dWS+Gq>m=NG{Zc7)=r2pkHCV?gdBM4W=rtO`TE#_|I!3s{ z#u0Y7%X;5mU=fFKRpMBmx@(1z+Hc1{2VLMT4w#2DN3&AznCvbQijIat=!!O<0)c)| zHq$EbfU$$fPjQLo9*1&8jjnG!@a%R=doeXL6w^LTYdh~RC2>AV(dxhUO{EhMzd-e# z9U!Ag4%|IxFkeKv{id9&$#!KW1(hLs#5*sAp4OIqy{WV8(fxBBOKdFY@yn=o#8ZM# z7;sVRT_TdP&{R{~L|S%o8^m^v0@bxT%DDv(q^N}3OE7C@3R7si;+Bu8_D%_Wi<-2g z@@V%%c&r##f#J$5$Y+2`ANyxp>|{rVhPa-h}?lR3tBwF9@*StU4?)vyU^n6F5HYv;;9$}h#J z#R*Z8Z!$w+ZfZ7{xmy!#ZW$4_xv*wKBTKecWbKh7SBv=bep?5jWo6xpY5P{%vc!M$puUGvlBaR}@op9z0*?Shm)(p2n4lyRuV=7HKX{sL z@2DhW2vz1#9UbqvyLu3@amCLIm-aU((d@Ibvsv3p!Vq{MAecsG@+)Q1xA2vpsyoSH z8+*OhrDLgEG;+)r0ymSdMfO&)8B7g{{z+cnZ;~H{LJITu;Xp%x%uzRHNP$877mjL6 zCdn#&Ts?~F@Va{@B;PWxfRA9pvmNq#Jr^3cT1tB_<~3{3$nDj2qL5K_8OWYg#(wap zKe(3}eF_Z6_34gFL9a)@jp-7fK{v4XM(`OKwaYj1@1YI!zq|Q<^}Th%A*TlyFl^v- zol#ZT0I?bGKdHPZG}2$7W>CfD{c--=+(7yIh!1fcCbu0dGc%*iF+1-|vM#$eBwi^# z?iuqEW=QMl8gPbis+HyCkHA+^_yK)?P3!m-3C0mg#nRZWPr+?>s%oqI1Wa3KdOYcQ z)ah=kpVzfApldge>;7}?4f~n-tn-KwwoL?ZSIbJvtlaQu5qmy-KN#Q?n-QU;Dxq^o zk5@O$1tTsBCJ@V}M$v-S$v22n_0YGId_P)hs!hr`=c_r$imK$%cK<&pwR;&Vub_tW zPaN6Xc)R(B&W&Smm%b~poWI=I{OF1DkX%N8CqJf8RWga!60l)z7bhmJ`^<~Uec+OA z$cr~NfRGY{N#z(Y)a@`0p#C3#_}h$;5jm82W97KWUV689ic}EB$phW+PvZT515X@{ ARR910 literal 0 HcmV?d00001 diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon-40~ipad.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon-40~ipad.png new file mode 100644 index 0000000000000000000000000000000000000000..92321ace28e4d76b739bad40cf04e9d06119ef73 GIT binary patch literal 565 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 ARR910 literal 0 HcmV?d00001 diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon-60@3x~car.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon-60@3x~car.png new file mode 100644 index 0000000000000000000000000000000000000000..04637ac7feaf142bb0dee2eee0d62c2bf7662dda GIT binary patch literal 3048 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 literal 0 HcmV?d00001 diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..1905bba39c1deaf3da3885f9f56a53f9b67fd570 GIT binary patch literal 1913 zcmbW2Sv=c`7RM8*=n%12Y_Th~Uwg%rD`>_RtprU=YA+evh^81#n;2V5J9agymYN|* z)b5r)Nl+c>bhNhEYOC5)#h9^N_dean`)|3UswfHqfy6PF(N|6{ ztW2XBi1#!r!MvOcl{ClG_K^z!nG`|}V3?Q>a*4}XtPWV{V0 zMan6;N4nP=H%mvlTd+o*M-(mod^TE?!nEAGm9I02&edsc#nm};_aWG1`**2J>KaTY z-xk3a4xPy0O-&$qN6zivy|Fo&Elb*(>M-*WWC|Gt%V7~Fey#5JOo@}p3MR4Lup;nP zA1Wmo1vMkii%Lr5m=%F#P9K!gURY7P5Qn`03k5iGYDi?52}Gv>B-pm5o#uqo(*_iN zrDo{cqfk5|)a^QW{zL5lR6MByXxGb+OEC{cqF?yapUq5*wel9Eq-Un%UFu)Y{rJ{? z||Xp{Xw`r z@5^h1?O{Q(6@sZetdd}Cxmd~pjzh3&EZdtv9HB@8Z zVNadDsSur@_fa3p<2GWrCj92O>VzJNwZ1t4N->EbFN}Fv$4WTX`?B&GpoAfqu_d*j z%8TY|L62k_!)DMu^b2%dWS+Gq>m=NG{Zc7)=r2pkHCV?gdBM4W=rtO`TE#_|I!3s{ z#u0Y7%X;5mU=fFKRpMBmx@(1z+Hc1{2VLMT4w#2DN3&AznCvbQijIat=!!O<0)c)| zHq$EbfU$$fPjQLo9*1&8jjnG!@a%R=doeXL6w^LTYdh~RC2>AV(dxhUO{EhMzd-e# z9U!Ag4%|IxFkeKv{id9&$#!KW1(hLs#5*sAp4OIqy{WV8(fxBBOKdFY@yn=o#8ZM# z7;sVRT_TdP&{R{~L|S%o8^m^v0@bxT%DDv(q^N}3OE7C@3R7si;+Bu8_D%_Wi<-2g z@@V%%c&r##f#J$5$Y+2`ANyxp>|{rVhPa-h}?lR3tBwF9@*StU4?)vyU^n6F5HYv;;9$}h#J z#R*Z8Z!$w+ZfZ7{xmy!#ZW$4_xv*wKBTKecWbKh7SBv=bep?5jWo6xpY5P{%vc!M$puUGvlBaR}@op9z0*?Shm)(p2n4lyRuV=7HKX{sL z@2DhW2vz1#9UbqvyLu3@amCLIm-aU((d@Ibvsv3p!Vq{MAecsG@+)Q1xA2vpsyoSH z8+*OhrDLgEG;+)r0ymSdMfO&)8B7g{{z+cnZ;~H{LJITu;Xp%x%uzRHNP$877mjL6 zCdn#&Ts?~F@Va{@B;PWxfRA9pvmNq#Jr^3cT1tB_<~3{3$nDj2qL5K_8OWYg#(wap zKe(3}eF_Z6_34gFL9a)@jp-7fK{v4XM(`OKwaYj1@1YI!zq|Q<^}Th%A*TlyFl^v- zol#ZT0I?bGKdHPZG}2$7W>CfD{c--=+(7yIh!1fcCbu0dGc%*iF+1-|vM#$eBwi^# z?iuqEW=QMl8gPbis+HyCkHA+^_yK)?P3!m-3C0mg#nRZWPr+?>s%oqI1Wa3KdOYcQ z)ah=kpVzfApldge>;7}?4f~n-tn-KwwoL?ZSIbJvtlaQu5qmy-KN#Q?n-QU;Dxq^o zk5@O$1tTsBCJ@V}M$v-S$v22n_0YGId_P)hs!hr`=c_r$imK$%cK<&pwR;&Vub_tW zPaN6Xc)R(B&W&Smm%b~poWI=I{OF1DkX%N8CqJf8RWga!60l)z7bhmJ`^<~Uec+OA z$cr~NfRGY{N#z(Y)a@`0p#C3#_}h$;5jm82W97KWUV689ic}EB$phW+PvZT515X@{ ARR910 literal 0 HcmV?d00001 diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon@2x~ipad.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon@2x~ipad.png new file mode 100644 index 0000000000000000000000000000000000000000..91bdaf5e89ab20fbc4a4ea52164196339cb73e03 GIT binary patch literal 2953 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 literal 0 HcmV?d00001 diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon@3x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..04637ac7feaf142bb0dee2eee0d62c2bf7662dda GIT binary patch literal 3048 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 Lp2+*f=8yjY`XfJA literal 0 HcmV?d00001 diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon~ipad.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon~ipad.png new file mode 100644 index 0000000000000000000000000000000000000000..9fee8c0ee6b1b34ba85665f635a58cb6689023d0 GIT binary patch literal 1281 zcmV+c1^)VpP) zTWl0n7zgnG>~86H%eJ&l3$(yes$8;FQ#4`~D~O0#rE-x3FO4Xo6(9Owc<@0HG!0ga zXiR)o6D0A`AQ97qM1zs2kz3krYxhELLL;^9UT0@KGrLw+TeIKJE?IWJlQd1Y-vzt4b9O7KqJdk|0uqBIZKVe?7|n~ph+YiFU{nEOJg;F4Mid~1bA~Y(QGgiE8OC5l z0b)337=sZ7h~b=J3`P_nhNm~fMz;fz--wrRqrwZ}S2n}8vP) z0>p66u$vXk?eQWM3h9@xjwNzM3=PMS)W8pr z5W_Rt?8Oo6-qMHKh2usK6}z@ty#<}R@IJU@75mF*Zsj@ zn!x;uAhtC5(6D?AX0w8BcNxCya=yzX=$YjYn$hE#hxa~rV(3bd{+i7yV^iZGS|9BbH-t#iWH|?>Wmao*A1X?< z^5O3_N zumpSFzE@1j7^GvtI9_OR;r@oP{LQfTUESEY=CVHJu5XGWp~qW>wvM}}ZvYG?gc@(Z zidUb!gzCyb!jzntvf$XMTXF2irP-c&9LWUz| z96j#DiSMczY^E&RzQKpxkGW7>6szE)iU}vr)S&ZI=X6QIby!?ZD@mW)F&I&R7|t2SU_=38IA<7x r5e10hoM8+`6d;CkhA|jXfEfN4nyko5aSh?h00000NkvXXu0mjf8&qQ* literal 0 HcmV?d00001 diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json index d36b1fab..bd04914a 100644 --- a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json +++ b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -1,122 +1,134 @@ { - "images" : [ + "images": [ { - "size" : "20x20", - "idiom" : "iphone", - "filename" : "Icon-App-20x20@2x.png", - "scale" : "2x" + "filename": "AppIcon@2x.png", + "idiom": "iphone", + "scale": "2x", + "size": "60x60" }, { - "size" : "20x20", - "idiom" : "iphone", - "filename" : "Icon-App-20x20@3x.png", - "scale" : "3x" + "filename": "AppIcon@3x.png", + "idiom": "iphone", + "scale": "3x", + "size": "60x60" }, { - "size" : "29x29", - "idiom" : "iphone", - "filename" : "Icon-App-29x29@1x.png", - "scale" : "1x" + "filename": "AppIcon~ipad.png", + "idiom": "ipad", + "scale": "1x", + "size": "76x76" }, { - "size" : "29x29", - "idiom" : "iphone", - "filename" : "Icon-App-29x29@2x.png", - "scale" : "2x" + "filename": "AppIcon@2x~ipad.png", + "idiom": "ipad", + "scale": "2x", + "size": "76x76" }, { - "size" : "29x29", - "idiom" : "iphone", - "filename" : "Icon-App-29x29@3x.png", - "scale" : "3x" + "filename": "AppIcon-83.5@2x~ipad.png", + "idiom": "ipad", + "scale": "2x", + "size": "83.5x83.5" }, { - "size" : "40x40", - "idiom" : "iphone", - "filename" : "Icon-App-40x40@2x.png", - "scale" : "2x" + "filename": "AppIcon-40@2x.png", + "idiom": "iphone", + "scale": "2x", + "size": "40x40" }, { - "size" : "40x40", - "idiom" : "iphone", - "filename" : "Icon-App-40x40@3x.png", - "scale" : "3x" + "filename": "AppIcon-40@3x.png", + "idiom": "iphone", + "scale": "3x", + "size": "40x40" }, { - "size" : "60x60", - "idiom" : "iphone", - "filename" : "Icon-App-60x60@2x.png", - "scale" : "2x" + "filename": "AppIcon-40~ipad.png", + "idiom": "ipad", + "scale": "1x", + "size": "40x40" }, { - "size" : "60x60", - "idiom" : "iphone", - "filename" : "Icon-App-60x60@3x.png", - "scale" : "3x" + "filename": "AppIcon-40@2x~ipad.png", + "idiom": "ipad", + "scale": "2x", + "size": "40x40" }, { - "size" : "20x20", - "idiom" : "ipad", - "filename" : "Icon-App-20x20@1x.png", - "scale" : "1x" + "filename": "AppIcon-20@2x.png", + "idiom": "iphone", + "scale": "2x", + "size": "20x20" }, { - "size" : "20x20", - "idiom" : "ipad", - "filename" : "Icon-App-20x20@2x.png", - "scale" : "2x" + "filename": "AppIcon-20@3x.png", + "idiom": "iphone", + "scale": "3x", + "size": "20x20" }, { - "size" : "29x29", - "idiom" : "ipad", - "filename" : "Icon-App-29x29@1x.png", - "scale" : "1x" + "filename": "AppIcon-20~ipad.png", + "idiom": "ipad", + "scale": "1x", + "size": "20x20" }, { - "size" : "29x29", - "idiom" : "ipad", - "filename" : "Icon-App-29x29@2x.png", - "scale" : "2x" + "filename": "AppIcon-20@2x~ipad.png", + "idiom": "ipad", + "scale": "2x", + "size": "20x20" }, { - "size" : "40x40", - "idiom" : "ipad", - "filename" : "Icon-App-40x40@1x.png", - "scale" : "1x" + "filename": "AppIcon-29.png", + "idiom": "iphone", + "scale": "1x", + "size": "29x29" }, { - "size" : "40x40", - "idiom" : "ipad", - "filename" : "Icon-App-40x40@2x.png", - "scale" : "2x" + "filename": "AppIcon-29@2x.png", + "idiom": "iphone", + "scale": "2x", + "size": "29x29" }, { - "size" : "76x76", - "idiom" : "ipad", - "filename" : "Icon-App-76x76@1x.png", - "scale" : "1x" + "filename": "AppIcon-29@3x.png", + "idiom": "iphone", + "scale": "3x", + "size": "29x29" }, { - "size" : "76x76", - "idiom" : "ipad", - "filename" : "Icon-App-76x76@2x.png", - "scale" : "2x" + "filename": "AppIcon-29~ipad.png", + "idiom": "ipad", + "scale": "1x", + "size": "29x29" }, { - "size" : "83.5x83.5", - "idiom" : "ipad", - "filename" : "Icon-App-83.5x83.5@2x.png", - "scale" : "2x" + "filename": "AppIcon-29@2x~ipad.png", + "idiom": "ipad", + "scale": "2x", + "size": "29x29" }, { - "size" : "1024x1024", - "idiom" : "ios-marketing", - "filename" : "Icon-App-1024x1024@1x.png", - "scale" : "1x" + "filename": "AppIcon-60@2x~car.png", + "idiom": "car", + "scale": "2x", + "size": "60x60" + }, + { + "filename": "AppIcon-60@3x~car.png", + "idiom": "car", + "scale": "3x", + "size": "60x60" + }, + { + "filename": "AppIcon~ios-marketing.png", + "idiom": "ios-marketing", + "scale": "1x", + "size": "1024x1024" } ], - "info" : { - "version" : 1, - "author" : "xcode" + "info": { + "author": "iconkitchen", + "version": 1 } -} +} \ No newline at end of file diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png deleted file mode 100644 index 07d90fa494eff0a0401084065c89e937877ce75f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17768 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 U_#6yxn<4Q>QV-KbUi|fc0I{LD(f|Me diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png deleted file mode 100644 index ddbd8d82df997e4d3c4140ac8a24e3d21ba378af..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 852 zcmV-a1FQUrP)EX>4Tx04R}tkv&MmKpe$iTcs)$2a8B?$WV2$AS&XhRVYG*P%E_RU~=gfG-*gu zTpR`0f`cE6RR%KKJM7RdOZ+d;;+-(+!JwgLrz= z(mC%Fhgnflh|h_~47wokBiCh@-#8Z>_VdiJkxtDMhlzzk8_R9XiiS!&MI2RBjq?2& zmle)ioYiubHSft^7|LlY%Uq{9gaj6`1Q7ycR8c}17Gkt&q?kz2e%!+!ar`2=WO9|j z$gzM5R7j2={11M2Yvv~>+@w$(=zOv5k6|FV3p8rB{e5iPjT0d73|wg~f29u0e3D*k zY0)E~ZyUI{ZfWu!aJd5vKIxJnIZ}Y8Kc5HQ&*+=7K>sb!v*z~J+{ftykfyGZH^9Lm zFjAoGb&q#WRs69K!rR{_t@9VP;@p_(yRpv$6bpB_{NPg^S}4BOmv# z#}vEp_g_Xn_dM5U3=9kmzkf4}5j616uV05**#5DxGXBSz2mb$t+x~=sk%57W<0mUl z1Alz|)?O8TZ+@WjD{-piWd;TYh95VW?y$4|Q>N4~cwS~_{r8_*r40+jWVZAF8UOH5 eYS^DY+#di8#B=!==WJ2{0000t%|7t diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png deleted file mode 100644 index f307be484d8b735ea14dab8a9c0785fd946ef402..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1129 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 diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png deleted file mode 100644 index f3dd9cba37989cedd65e6f04488fd33c69814c8b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1711 zcmV;g22lBlP)EX>4Tx04R}tkv&MmKpe$iTcs)$2a8B?$WV2$AS&XhRVYG*P%E_RU~=gfG-*gu zTpR`0f`cE6RR%KKJM7RdOZ+d;;+-(+!JwgLrz= z(mC%Fhgnflh|h_~47wokBiCh@-#8Z>_VdiJkxtDMhlzzk8_R9XiiS!&MI2RBjq?2& zmle)ioYiubHSft^7|LlY%Uq{9gaj6`1Q7ycR8c}17Gkt&q?kz2e%!+!ar`2=WO9|j z$gzM5R7j2={11M2Yvv~>+@w$(=zOv5k6|FV3p8rB{e5iPjT0d73|wg~f29u0e3D*k zY0)E~ZyUI{ZfWu!aJd5vKIxJnIZ}Y8Kc5HQ&*+=7K>sb!v*z~J+{ftykfyGZH^9Lm zFjAoGb&q#(7a zpa`&Bi$|6{Q6Stgk_MNdleVH!cal;P;gCYF$eoC*V~C5mh>IaE;vz1FxQL6m7~&!> z;$n!4xQL4(F5+(cga-~Be00477k?TL0|R2T6D}`KnD@Arq^*EU9z1Yxt38NJz5U!s za<6-#(5NT)&jU)%v=yfX@r8F&w1fLB!Rm_s`ZB`zDH45Lc%aMAv&>H4rk^3LQAPp6jm(emhWWQB;!ldmEBT4V>xzq0(wjZQ51t#;%xQaUHhgwVtk_s&Yqy-)PKo zYzI4bqV11>Y;mUhSrsLT$M-g65?i>Ly5L0 z&V?q0L);9_hNbIT-X|{=q!2elgI7v5AzdCXl@T{Xa|@EoKVwbi@*YYFe13kng1A}S zl6UpA1{5{>ski5h#~;5g)FN&cEk;eQXWrU3nabiCb?W=wGhYwXxQw|sV$de0ZSKQe z`=`f$+qv$x;X=fuKJjYD#7AGdat+CEm{FUMcn_o#w|-GUT#Yq2mm}$p zw>QZ}h^w*A7CG(KV{1d$j<{Oq+lH_s-SHyp8YdMfvxuAPiScZywmc?g8rOW+QUY;v ztgbQ|&SulRvstzwZjQA#&zrLu*XjxHMBE%}YnpdtGp@WO!HXgd8Syg+M#cT&qSMdw zG|SP$+4LtMnoi-g!p*Pf z@4sGGUwPWUoNv6<74fRg{Cxxf!0Yvv11}B(z>SA}Dc`9f5&y8Y^`C!!9vvMGa!fr0 z01>3o;es|YGV%+d@E8Cn$fCn)!RH(L4hVZ5S#(;8jSdgLD~j|3q`5^Gw41y7O|jLz zCmcndTW~?UId^4PMIyXILtMng5EpSV#6{e^!?l4502FyN-Ih^GIdQ`~G{%6e{Op_( zgakpY+)@;?U8SZX00?e~w>(yV7#KOp0LqXo=YqiC=-+55j0)Vb_TvBm002ovPDHLk FV1gz7G}Hh9 diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png deleted file mode 100644 index 4c55ddf10b72313ae6c36387b792c11ecd1fc5ef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1129 zcmV-v1eW`WP)EX>4Tx04R}tkv&MmKpe$iTcs)$2a8B?$WV2$AS&XhRVYG*P%E_RU~=gfG-*gu zTpR`0f`cE6RR%KKJM7RdOZ+d;;+-(+!JwgLrz= z(mC%Fhgnflh|h_~47wokBiCh@-#8Z>_VdiJkxtDMhlzzk8_R9XiiS!&MI2RBjq?2& zmle)ioYiubHSft^7|LlY%Uq{9gaj6`1Q7ycR8c}17Gkt&q?kz2e%!+!ar`2=WO9|j z$gzM5R7j2={11M2Yvv~>+@w$(=zOv5k6|FV3p8rB{e5iPjT0d73|wg~f29u0e3D*k zY0)E~ZyUI{ZfWu!aJd5vKIxJnIZ}Y8Kc5HQ&*+=7K>sb!v*z~J+{ftykfyGZH^9Lm zFjAoGb&q#K~z}7?U+qy6G0Tm-^^?_ zCTYzFZHx&*Ow*w0p;TKmh(!;gH_w6xK`231GWKITMPH>JHVQmP!tX6e*CG==}`ar<*SuYvFR(Qs>DBX zA(qk&%x{VFOSbT-s{`-2{sv#Z?(V()D3sy4Nv@Aae9vaQC7!#Oj9uGC=Cd8@ngd!z zBfEDno7x|f794ghZQfweIU0`@%Cd$2NnW8DaD&le^5XI7Fu`9Hi&6yVZ}g|0O#4Cr z0CklFj>ThhH_uE)1j1Upf(R<-MiM3*0071e#*WT}tX4y6#4-hYVEnOnvE?Q9c|I@N z))_x1#ta5}m*nqb^*W&~2drzD{Bov{1-j-kQz~17vq`tSGXAM7(l_(&01rBdPFx-0sJM^PSJ zNrbtZixX2*5~Ap!C@_`B5)%LbNlNE#U6MEYy~;38aH{H-%_i9%Eq`qP`uMj22^hS= vQ3eDx9C@~96F~JL0P5rcjxkJB-Sy!M-Cxj#NN-Yf00000NkvXXu0mjf_96l3 diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png deleted file mode 100644 index 64ff1f20a7f1d1f1cf8258a3df9185c41c8b0796..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1646 zcmV-!29f!RP)EX>4Tx04R}tkv&MmKpe$iTcs)$2a8B?$WV2$AS&XhRVYG*P%E_RU~=gfG-*gu zTpR`0f`cE6RR%KKJM7RdOZ+d;;+-(+!JwgLrz= z(mC%Fhgnflh|h_~47wokBiCh@-#8Z>_VdiJkxtDMhlzzk8_R9XiiS!&MI2RBjq?2& zmle)ioYiubHSft^7|LlY%Uq{9gaj6`1Q7ycR8c}17Gkt&q?kz2e%!+!ar`2=WO9|j z$gzM5R7j2={11M2Yvv~>+@w$(=zOv5k6|FV3p8rB{e5iPjT0d73|wg~f29u0e3D*k zY0)E~ZyUI{ZfWu!aJd5vKIxJnIZ}Y8Kc5HQ&*+=7K>sb!v*z~J+{ftykfyGZH^9Lm zFjAoGb&q#DH%4 z20R>3Az-x$MpTaBldgFLtRYi>G@GYyk?`B#;AAfD9*c@dRyY{_v4vV8L5!-!F&`_`S zk_YxZB1i?Vb6aBJ_~9v=PE)*nm1Sudertzk=Ca8q{*7Se%&XtaJ6cy2|K(a!8OtJ@ zF|KYX2}4K4o%Pzf zW6w<6C|Zb$eV)$Hnx~I$zq)AvP5O+t%bJjHbiP`}!Tw$TlKsIzNTJv?fIEA`75@+4 z?+O_4UU)4QQ@Y|`OPe{RLcp~ovkX`1H7rZz5pXRtf0`<82+UqJMiFo=3qGAS98>U> zT=T&fjx++^bi^BZ*SWCK$>%4xF2`479SC?+ewj0No%*zAvE00$FPq}WKDqF)05N(2< zH$(e+LV5uJAMGfW{_SB=K%FK>G%9Wh0YxHX^1&8Ux@47gbw#oWD3aceSlMR)cRQC2 z2q=mZ)RmjFvp3v?fMWlDy&+S%In9O)t&rsdQdzTPPW1vn{*#FgA0g$BdV~l{1S~`W zpuW1)W`hO`z9)i!2#A22IZTdaFMc=+(fH#q)h9Y9O zZhejboI{c-0msM3d4-IA0sv-_rOIQ>_Nb|3;u6~p7@RF2a+03cfQ s$Q=9at|lSJeGUM7aGQ%J20)(w2Uh%CqpN`Wj{pDw07*qoM6N<$g1>s@fB*mh diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png deleted file mode 100644 index 6b1e6757e275bbf404dce9de21fca7f29205fac5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2185 zcmV;42zK|0P)EX>4Tx04R}tkv&MmKpe$iTcs)$2a8B?$WV2$AS&XhRVYG*P%E_RU~=gfG-*gu zTpR`0f`cE6RR%KKJM7RdOZ+d;;+-(+!JwgLrz= z(mC%Fhgnflh|h_~47wokBiCh@-#8Z>_VdiJkxtDMhlzzk8_R9XiiS!&MI2RBjq?2& zmle)ioYiubHSft^7|LlY%Uq{9gaj6`1Q7ycR8c}17Gkt&q?kz2e%!+!ar`2=WO9|j z$gzM5R7j2={11M2Yvv~>+@w$(=zOv5k6|FV3p8rB{e5iPjT0d73|wg~f29u0e3D*k zY0)E~ZyUI{ZfWu!aJd5vKIxJnIZ}Y8Kc5HQ&*+=7K>sb!v*z~J+{ftykfyGZH^9Lm zFjAoGb&q#X}P!;cH3^dyXWjVUHFuV`wiXlrm2xbVI%_K|2 z|8#e^gm4Ir8-fJ~f*}|{Fo0kH!2p5*1Oo_$U;x1Yf&l~r2nG-gAQ*xH1Oo^L5DXv~ zKrnz{0KpIp?2dBV!i5t@YS2IYl_nAAA`QAgHJC#+$A@4=Gp>x(V9B$03ODEp1xDW| z>-JW8T)Oc0uEymQolMKs%in0}${6Agf84IYp(_*WS8txv3Bdw$@OXK{j@GFcAXs3w ze%k2!?wB_Y!QvvXd4I0leW_4`U{T@ZS@~8=G(O}oAy`n-x>T{^jh1fFGHVF_8^6Vz zftTJ3c0#bg96C|fuzh#^1qc?HZM*9$+I|!xvxeZSz=)(*-=Cv&^?A||ENo)U3ZGox z9E%UyJF|x1kuz)G6YE;K^^63;q7u5|47~WReKTta&Vi0oWewXtYv_ewf!V$%P_^%f zF9yK^XVz=C+~nx$wO3{h!TDs?oZPE6G{<5C_Q|Z3@gTE4>~ z_Rs5;jKL=6+HpAM47~7e@bo*+9BQEo%;x-rsVeq{yxR>oQcJ znsj4B%)RuE^Uhqnly>JT{L@XPcgH_un48d_JGg`smBL>b)Hmmd>n&609gZvg!FB{G+LPmKdisj~%O- zT9xR|C$oNS>&*VHz6ogv{tsBO^jEXct&ct!5~mGMAF5@HhH{?{Nm{mgc64A!;ShX1 z2O{x-g}3#3ueG1DqO^41t$mSvo=I!0@@$_g3BlKqmf7L3v%naWz8<>wT%|Byd{G86 zuPNdgtG?9z5qvFy)Vl0rp?l~7f4OfQnTUAhUu7DCshG0kEVNrgeM zh3M)l8XU|1B5`LC1Y3x zq1NkmW=1r;V0NfjL)Hp_pM`X)>>SS1q$b6Cl_o%&3d!J>AZq87_lhyX=2&4CP%y z+gLl`WW*B?Yy)m?isbz^$`YsQ$;rzQZ1n-jJXTwgP)GCZ{FxyK1Y4Yjs(}a_Wx;Fn zEb-Q1;coaBdo*_Nmr0{KdQ9oENkp887zA6CgU8G34<0WkAaIfeAQ*xH1Oo^L5DXv~ zKrr|hltetXku&xTLNRJ;EG@XsU-MjdPj7$|ExKBR%JTG?(qheo$B~&>q}5sR|6)W$ z!C=tEWpytjy7`|CHotr_amx+;g-~c8(pp((a@gDO*Bac>(J{uWP|s?*|VLSM7H?!}Ex9yzMr?FdV70R@(6ApNXu3 z)2X6wv~EX>4Tx04R}tkv&MmKpe$iTcs)$2a8B?$WV2$AS&XhRVYG*P%E_RU~=gfG-*gu zTpR`0f`cE6RR%KKJM7RdOZ+d;;+-(+!JwgLrz= z(mC%Fhgnflh|h_~47wokBiCh@-#8Z>_VdiJkxtDMhlzzk8_R9XiiS!&MI2RBjq?2& zmle)ioYiubHSft^7|LlY%Uq{9gaj6`1Q7ycR8c}17Gkt&q?kz2e%!+!ar`2=WO9|j z$gzM5R7j2={11M2Yvv~>+@w$(=zOv5k6|FV3p8rB{e5iPjT0d73|wg~f29u0e3D*k zY0)E~ZyUI{ZfWu!aJd5vKIxJnIZ}Y8Kc5HQ&*+=7K>sb!v*z~J+{ftykfyGZH^9Lm zFjAoGb&q#X}P!;cH3^dyXWjVUHFuV`wiXlrm2xbVI%_K|2 z|8#e^gm4Ir8-fJ~f*}|{Fo0kH!2p5*1Oo_$U;x1Yf&l~r2nG-gAQ*xH1Oo^L5DXv~ zKrnz{0KpIp?2dBV!i5t@YS2IYl_nAAA`QAgHJC#+$A@4=Gp>x(V9B$03ODEp1xDW| z>-JW8T)Oc0uEymQolMKs%in0}${6Agf84IYp(_*WS8txv3Bdw$@OXK{j@GFcAXs3w ze%k2!?wB_Y!QvvXd4I0leW_4`U{T@ZS@~8=G(O}oAy`n-x>T{^jh1fFGHVF_8^6Vz zftTJ3c0#bg96C|fuzh#^1qc?HZM*9$+I|!xvxeZSz=)(*-=Cv&^?A||ENo)U3ZGox z9E%UyJF|x1kuz)G6YE;K^^63;q7u5|47~WReKTta&Vi0oWewXtYv_ewf!V$%P_^%f zF9yK^XVz=C+~nx$wO3{h!TDs?oZPE6G{<5C_Q|Z3@gTE4>~ z_Rs5;jKL=6+HpAM47~7e@bo*+9BQEo%;x-rsVeq{yxR>oQcJ znsj4B%)RuE^Uhqnly>JT{L@XPcgH_un48d_JGg`smBL>b)Hmmd>n&609gZvg!FB{G+LPmKdisj~%O- zT9xR|C$oNS>&*VHz6ogv{tsBO^jEXct&ct!5~mGMAF5@HhH{?{Nm{mgc64A!;ShX1 z2O{x-g}3#3ueG1DqO^41t$mSvo=I!0@@$_g3BlKqmf7L3v%naWz8<>wT%|Byd{G86 zuPNdgtG?9z5qvFy)Vl0rp?l~7f4OfQnTUAhUu7DCshG0kEVNrgeM zh3M)l8XU|1B5`LC1Y3x zq1NkmW=1r;V0NfjL)Hp_pM`X)>>SS1q$b6Cl_o%&3d!J>AZq87_lhyX=2&4CP%y z+gLl`WW*B?Yy)m?isbz^$`YsQ$;rzQZ1n-jJXTwgP)GCZ{FxyK1Y4Yjs(}a_Wx;Fn zEb-Q1;coaBdo*_Nmr0{KdQ9oENkp887zA6CgU8G34<0WkAaIfeAQ*xH1Oo^L5DXv~ zKrr|hltetXku&xTLNRJ;EG@XsU-MjdPj7$|ExKBR%JTG?(qheo$B~&>q}5sR|6)W$ z!C=tEWpytjy7`|CHotr_amx+;g-~c8(pp((a@gDO*Bac>(J{uWP|s?*|VLSM7H?!}Ex9yzMr?FdV70R@(6ApNXu3 z)2X6wv~;g|RP*u|&2JVeG@0?#LcR*~6qF*&<6>K4sq- z(g;IY2V-R9PL|0x?!D*!@tyOX_q@yRcb@0>Jn#Gd@jQtZW;b}aM7h}5*m#T#4Xjvu z?cwA&&RVqxkE^n=9eIG#*S9dz*Ov-F`+K5%J=oaf(y(dThV8oIoi4~%3If1n!@wSk zkZLJ~x!1OGda)LYwX3($D?$*Ip_QZfF%mvTGT9a=sHf2a2S+kdg#Q)qHc$;Q6 z2#QaP)f4OY8%T;Xz6KY!wMn5fMY05jkk7`^8R{FoF2a2%#eT<Y%5=?-pUz&gB2Ysfg@x5I{@lp%#6bfp(Zw=_1`O7>9Ct(9 zFkm}49E6sVCoG0Dz|cO3^@F6tc|=bxFPudJgN;n#z$H#Wpc2<>w(`p?vu{QQFq`nn zbu!NP>9)kj&0$6~gG8J?J^4bJ2}2+)KH)o$Wj$BPi5XzRmNJE7(*5|0MLr3?LoJ;y ziZhMLl|^{AX{eo46C!#j2uE`SkBgpuY~_P=FpgAinc2pKt&_K?d|87c`Aus<(A}TR zU4$X+!|qDn8Y7~TfqmLxw2>v6XdF*Tzo^?Nmk4izYd^PG(K~geT)tlhuK7&6WR7?2!N0U3cUkvpKJ+x8J7_ z^AWlm--wUL1d>%7J5Ddh`-SFpNu?W*(QE5kcMS7AY=2h@Nn)y;;-IfF1k<9jVW$IXe?QcNAK)j7(_Ssr z3U0-BVg^wt)1WV~J9)79h2Q zJkI4E2IO@x5twc$^OF;<`OD8$!F|g&(nr}&hhy>@CLX<3FhiPdXSqRsht@=`D8`q? zWdmS&U0Zu%Nmq5`xh}EfPweRrSElly598{M+5Z0GxH^3klkEP=WvM@xhhB>{sST6uI)z$DaJ&gzBEvYSky9qBOq+Jy}q zot!jH&54L8?xDRn{zjpYIz`VD}#I1Z=2 zW47(ap-(uaPGl^Jx)dbFd};sA-)Zz5rgA_9da)xns0!6`ccOd9HLE^DGx^~4n|VuW zbK$Mn5PQ^K_tqNgDZ!M=smSKAsQH>H%Dl!+^9kIRZe+a`zslUpgYV0BDE1ku2)@hC z;g;~~Y|V-rswQ>TaV^MqHtK?RM>WJr`TfD>;`*nN{fXrm0_c{{KD|5Nlsesza6nrkPty$y?vYE&wD-Ch5B7E!`W2yF01;5eo%si_&gAtI@_&iQf2JYP-WLgeht4Z-~E*<=x=;6#&2c>*|ET>B`=z3 z^00W9+>mF-ySyenW>QGtAx%PZ^H-OHwcM;8Yhq(pK(*iB2m#Tfo6U%RW>n~7LWnDUYcU!?tJCehrX z!!{Ge&@jRue&;!~b|!~~NRkma;;qr&M2a*Y6{Rhd>>#M>hc`>?#x;zNkGD$6lU@~K zKdiKMMu&l{&r?1tYX|r45G(7_-f16;o6-M~1J%gKt-tmX0iCBn3@Ydi+I3x_-`3ys zztg^XyRXu3XM9jnLTd@-UIWNCs}yoZ{g~eF+1(;DY44$>6)0ogGnLdmTB<)L@;DkP z42F331if9b#Hp$8Cx_M+-g(88GG1TWrP<4ZV;wg?r-Ey} zZXo*;@-|r#y~BBDdIpWD8Ye3TXY|e+j)*ModfcftkVIOF*4kI>su#1UJ5KmDue4ze z&vM2u&Rl|8cSwJi=k|xzdV%&UCTRpUy?QmRTMMZJKA9D!FMRt9M{-;}nBn2|-LJO+ z;(gLbij784qYAihn3`8`ny#5Z8m1J&Kcy&i2fwKxG2>~o;7d0 zS;OKu2oxuAxAbB^Vd}#v2)`4QPb@T{?%!Dj>i3 zyF9k2M#)=~o~@}KX@3J0jQNb&cYfjj@k0^Kp)%pEBm`FC%4{CJ`^)q}jiZWuz>Nt) z8o|0MBm$iYEEDSvE=G*Vzj_K-%l!2O4SJq;GkoXSSy)MC2_$^n({$*>3Qr+(=}grq z=k2h5!1kksr}rj8k+_=Fs$?6vQ}>pykH{AxoRxfxCb6yZIkLcii`)Oy#wD#hTpQ!A zEM4lwr8=?YLB*fI^^(wp*Q8$s?We0oq>EzTXSW%$blswYgsfywkwM zPM(vVPU8#;<6-VVgM*(@ZH#A?q*boRT#>9zFzj9#^H1n8yUuP6P?n}g@0Ds7Egb9m z3)KWCdNn094<+1ABJhb{J{k12A}p~-r0c<{XB`dLRqkl$F^NG_IhKOJYiC=t?FdKjBPDQxaw`WT0t=xs;8KkiQIw5MSy93 z+`&#yH)7&i6JDnb@QHMI)vey0bJkas#r%F{PCM;1d$tH;@E`;@iqbQXsJ-=a97_f} a9RP?f(-WL`CCRMzkIe{fW>Bej8~EX>4Tx04R}tkv&MmKpe$iTcs)$2a8B?$WV2$AS&XhRVYG*P%E_RU~=gfG-*gu zTpR`0f`cE6RR%KKJM7RdOZ+d;;+-(+!JwgLrz= z(mC%Fhgnflh|h_~47wokBiCh@-#8Z>_VdiJkxtDMhlzzk8_R9XiiS!&MI2RBjq?2& zmle)ioYiubHSft^7|LlY%Uq{9gaj6`1Q7ycR8c}17Gkt&q?kz2e%!+!ar`2=WO9|j z$gzM5R7j2={11M2Yvv~>+@w$(=zOv5k6|FV3p8rB{e5iPjT0d73|wg~f29u0e3D*k zY0)E~ZyUI{ZfWu!aJd5vKIxJnIZ}Y8Kc5HQ&*+=7K>sb!v*z~J+{ftykfyGZH^9Lm zFjAoGb&q#Vs2BFdCHycu*9giKqz={!5GxDlzlH z#3(XjV#JLhFTl(;+?ec+cHP$Y_TIL)_Z}bEre50a-Urz2`ujfKb8d3_Y0mlGbM7UO zCv*fZ0)hJgvq&OI4WrqN>jNflGXp_1`d$R3b(VnyGnmCA^xBc0(3bCMgYL+P>AKgxU4#(zqt2smn8<*v;XSU zzCGh>aY`D@`(JMK{PCw(L@?vi()QA+Hf1v6$RU`)Xez0C`go_1k~xZC1|!MbJv}En zMl_8en9+<0&d|xvH(x_A6Z!r(|N1lM)(Hq^A|HMguD&qjO(K}_@UOhrrrubl%2|?I zBaMZZb1c;_;1{_U4_=XrRnBLRZn~u8$jSzL>XG3_qkX#{ z`n#Ivv}mDrVTN}|X_l^7FrL$*4RtBQ>nO`m*t%hMu57nPZl{tkdrzQFw3RJbR$)w6 z>FIcdQnp~p6z`L>=GL66f4QM-!2p2o?F&pA?L0c+%0y=EP2~&*AAcLNM`tV4rTXPm z29BI=y$-kDz?CnUsu9nV$9CSh8M7BWu8}h=eg4Fbp{bZXwA|yh#O6Dd<{A$i*(Lwf zUq7vHn}|4+y@$J|hQ?QituR*WoK{e9C1qaIU$)ycR>?8-RvD(Hj(6Jco%ZOjRj)}i zt8A)(VESVdR*U&-q`c2%o15lD1k)uPh|d&idvI&SjbOTTZi_ezPt~Xw!F0Jl&-%5H zhFXc^SQm8P*+7JT(aB<-LHvsS&vY1%(2m8;z4FIQ+#7vb`l@}<1v&do)Y;bT;QF!i& zI!}foO_4?aw(>j*2>@^*Pk}`rgHQShhF}PWU>L(-6f~sKk*I_K6gbnDGIhUH@N=7x z=~gu0)O5xh1OPEFSXQcfH_Ldw0019yEk>k3U;PIPmtbLuSvp1l0000qIwAxB07R`U z(HP!J`E6hU-VAMnDFOfoV)3S?4pye7uz;Z3-grMR06;AzI^~>YJ4&wenp=T}Bq-i8 z@SQ_wB}`-Hg^QZW0|(8TC2Y{5v>x6P<1Tk__}+bmco&eg&y}O@2aUh;cMQC@8Zfiw zUc=mg%(ez1rzZcHc*D=#Jnqz&6o~qSP)a8WXRW*xi!wVcAl9J<7eBFS;Aqnp95vZa zA8vv&*hX6mESI2T{84=Ch(Xc#i2D(dgC7mnBpzLI#E=+qbdg5by3(*$=Cr=F9A~4q zBE_yx;!)fK6WJdBUh+fhvu1KG&WY?@nM}zKZn>X=(oe3vzXt8bYxcMo8N>pmDuEEb z>&}iQGE$y3zRxL^12Gfr3V~dB!}Xwa+PliTLe7>+3fx06;WwG8suRy03-b-U4i@ix@4YDjHz!79y#j zDF!R23bn7*U(Muvo}e%CKQ1g!Jxyy>)WPJfgeHfF*KTpvvb+h%fbyV1B`SK07Zw4} z^A>2p{_m0ZrYMc)5e%@r6wHg@@NYX{qLvfEbAm#wY|TJSK`D?HUkgq0JOBXpvO*g> zM~r=&jJA>8I!a$(TU)J2)a?-PG-*9cDFP@K-{2R#elycc!?!@Khhy={Ip<6($D$}~ zxez~Ch%dI*J6snsHsqh}>Q&%0h8Q!=smXRNzLc#;dRTnZI_+b2>?0JdO8`lYemlK) z@v{o#ar@7aFGkwx1lZ^!_Pqa2%z|M~iaFPG%uf7IMY!+*1XNI^9WoqhR@o=5f3JU;>h(TdGfZrrBDBvILe~@_W470K71;y7HvXNcW zsb#Kat?x)^W3La~dXm)*u#Ja$a)xY}yl;EWUOZu|GX5>-@+(Qt!x3>q{L2Q7onedQ za}OP1I?;c%=~tf}7(c@4yM&<#@C`ml^^`Si8mC{EX~KbRR5zZMcHfpCHR?6+CelKJ z7GJ*MG|X;3qX78^`{GXb^jsx0bv&|y=}fw2Jld(KLSuiuLMUA=ML;M?nmujhK4V?8 z7caqoZ+kd(rXl^0x*C{b-x({kKf60SYv3Z!EIe!ynQkAy8IBRd4k4EJ;zP zKYm`;;xhb146Ymj8PTv*FRdsUr)ZuB)>+?!{Ju(es#}~`#_SG4yyA@FL@$UzSF|^B4N^ z3ztx17o-cEGp09fc4{|kc#53X-@xIt<)eCBZX_4Id0u__a3sf#f1cX-MA3cNF zo;_#yaJYvjD`CKD{jIOV&JcV3)5O9K@UF0FxGh@tu{z}$`l(pvpz&r z^k&#zUr{#|)88~&w|k(>Mm3JJ{^(rX9hCjB4E9T`_ST#|w9?Fc_ap3EgW%`d+xiWu z{vrFH{i%QUU?3w$!t&ac1Z}9%OALbdkb2zGiqI(!L3+nwKDTH3DZj8gweUA}RF&c% zi_FEm6dykpja~X)uu1FbvIxhIia=upTwIQjmv;@9CO1w2y&ZCdejq(>y;gy$TEles zF&ICWBuae3Y@?-8YFhp(u{bxSJ4=)()Bl|Da!2>rey)KT8qRkjFGVoNX>IxN^sX8b zJ0~N%qYw27V?>mfF0B1r-foHl_tO3%)SACOw3gT{uF&kxGQkRbCIsT<6Q=Wf=5a0C zxNqQvC--RyTFZ}Gd^y*D1+Nx)m%eYwRo6WAD*yt8MC)f<*lH_Ys8gjcniQaXfIk_r>^ICQ zJ2BE~fgN+sJm@oeoH5f-)Ve^M6Qdk6%xUh4i7%>$9m`e@6&N(dhS%VFY>dxrm4q`u zy61p(%I0U?zX@dxUcPh6c3j68SogeYh81dTx%T)o$NbuXVFk{eU(9i~0iVC^Rk=f^*w>BW8-87OP`?mR5XrL3dHsqRl|`7&T3WhA&~_Tfbxh_` zWQYeKkO%pgP_^uM<1Z@W|C_@9oA8N5%dgwp*8<9o$c|j9M``F4V3$)|QT>zJtiZAR zEgILkfhOponwy#JPn@TY+2u$#ecfZ&UE5|)SxKAMHIjwIQbr9? z2_)9cXf-h-BLn25{6iuo_^BatJPi}))HN#oc*<^%Mx#jEOGMUr4JbLHeW>R`9S>4gEuYfs2aSn8)q&c^6Vaf(!0hlNG%Vd6tW^Uf<0pS;}56@)o)=3!s#q6m@-GcTOv zOz+t#*00rC4|bCcHqt=1#Q@B5-wSa|V74R7cyaR2l@}VpC${2fyjkgwkB?5tx2#*Xb6?P3aMz{3#uv1pO!Z%|qK>p)~A0Q}Lc) za(b$z0ZhWlF=OjMEMK_Ky?7`*_cE>9OZ2P1Vvk3q?%k6jgp&d%ydCXL#YB+x0nZD} z2a?7+!D0JS@4UlvKYStl$>V6A3Et;RiV0khl^uU>C$W@3Sj)O8*?dYfpz$CvXe>iW za^tjzzjAUpFF7IGGthrPx)dee+#KS+buRQB+i9ca?DM*aKP!w&I4Ap;ir!v1QvO%n z0)2SAYnkmqMQyhBhmP}Vh*D})R!mI8E}d5Bn`|6f8(tw@0^Mb{g#&4I70PmSd`ep@ zbC?wFP;=J^W(P-(fz?#5D3(d&jI^+UaV~I+a4L(By==v?u<+EwSzVy4M?d%0Rb8jJuF7d9IVWJTo-vll_v&s6#aPm5BKN(>}dgxcK3&s157 zH{MJxZCk4Q#R*-$oGFhgH&qb5h`{%5?6)Vlme#kFbn?5*7JAN^BGa7a1oUenygRwB zP+16UBwl{~zac3URwO3|BpLnZ-;jThWa|EtWLxTN@hO!_^<31i>EMoW+LN(~t|ecU z9#E9$``RXq#Ra+OS39)IEx>_vNZj_ja_hbet&l>)B9(*YI~Jj$IduG}gFD?8jm@&) zM~^y4HKOq@%X%xl+!_ER9PMT`+`w16!#JUm;?HE`purcfO*9?G>LC3@N%%uEHnAaX z!vx>TVe%b{@?W9XJSY0{SI`9~3GN^3P>%WS!_Io-3z!L>?`*`gby*TUr__0ltt#&B zw1eGF&;=)D_wxV|$RfIpQ z>RGS5E7Kp2%euKbBo-rl7TJX9!;iPD^(z^FW@aYn8P`%O<17D49fN0IXFc=-t z4ka)`4pjY`>vX*)Z`{hu6S}8xG8*c|so&g4+Uw~%d~s5HS!Wnyyg*z(&CQ#BNZfmy zAB3(ZtOAV>;TiK_9AMFllpIl4DyJHW9Q@oj4tU8CuHi97?d`3dl$c#^AKE@h^y*Hq z|LVWcAJHkCwx<=c;gc` z>GeQk#GK}GL+)%wBW!lDsW@`M`*Y2PoAOy+VPfoUy;Dh{lY|a*Qv3_@yyjx{pe5EL ztb?$ReyuBNZ<$7>_>SAL7t!3O0*9ED*Y0pt2y3WUqF>(6R`1TbkseJw z!#*h6Y6%X^blcR^BpE>p@h(%r*AngYiuQCC$%i#P{i|AQ(kxx^b@>L{T`RW8u1Dhy z%Ll0Uqv}HLDywqxUjQX)f$09W#!}y1_n&(h(3H8o=Thv?t*13mYEQ^u_--ELlS~LA z_yA(lh9dj(>$eS8WPlehgeTkJ62;0tf*f|+jFc)xM-6!zJAqtZt*VTmKH%a+j2Dfx=z4iq&^ZZG38>W z>AH9BT$GSLLDqJpyN2MsM%?q(vdSXibvX5T*t$n!Dq}p)Ww8)s$!IVc{x#r!jGBfZ zu1fIObb%ekb9g{Qbvi#iiN13-M8JZIZTk614<)q=%pBcWrR9cmL8#c6(y}*n7q1yl zB_jf{R?+tbQU*@#zHu}!?I!^z`8?w^GZ+9))wq24f;IH#Ff*_^m;5xzSyc#x{jr_r z^~$go=A#jYgjX+4)>MzzHAUXgY6NLN@;JKDbM-d&2vWv|YEcOd;#&_;NML}4TYW>c zeJR^RyRQ%4l=*o|JIK%-XDEl{x8KmwwFZLN-hD@H+7;&wqIU9LPT8b~sVx2bHvM*X zs#S>I$X?%V_CdWGZZqmohqo1 zPS_o-FfkIjLXAl20<9{O0dRDqp9)yPJDp@CTkO1AH1I^d8knIUtY!H10@iT8HgIB$cys8Z+v8N80vSSOy^m8;yVzLO zORnbJr7#&ws(eq44}@rA#kkYWdi;I)uKT@DXI_N~Q0OB4yF|se!>`%ggDSGE6=4NC z(MY&W!~7o*Eg{u);(K3B2k1xZJc>i+kDhyCwasUMC((sUgv#PPv!7E7C|51=A5dx) zOuo(P^l9ax*|BtZMTBz?|7N`*X@U2IY@D2wYIlG>t-BtlZHO2+HT63>@e@%_LT zye*$r)K*rX1_yunJ(F)_99Nb&HQ9CT^6M%GDea{BWOl7r5p~G%dtwnZwFO+V?i&;&`}Dz+tGUK(rGy#K+ovkI5a~T|3B-`_b{@0iDVF?)b<{RqC~x z%JW2OzwuGR_*%V}ycAeX{dp8sO6t|CSAV2-(n0y18<(`mFo%}4*!GdtsW4P*P*~iC zx>?#8ARsOM`e3~8Q3>wx)#g?8Z+mJS|GSW2K>xS8Fc*>nAlh;9x0pEM2|_`AmXeZF zZq)f^SKaox8i+^a$?q*7$YIjjF5~3=78vi|T Date: Thu, 14 Mar 2024 21:32:21 +0200 Subject: [PATCH 75/75] ci: Fix appimage builds (#488) Reviewed-on: https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/pulls/488 --- appimage.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/appimage.yml b/appimage.yml index 20989f13..42661108 100644 --- a/appimage.yml +++ b/appimage.yml @@ -51,3 +51,4 @@ AppDir: AppImage: arch: x86_64 update-information: guess + comp: xz