[ENG-1578] Missing localization & language detect and settings (#2037)

* i18n privacy screen

* more missing translations

* language detector

* Language Settings

* sort german

* bump version to 0.2.3
This commit is contained in:
Utku
2024-02-03 01:16:01 +03:00
committed by GitHub
parent ba3fc33335
commit a409cc9f23
24 changed files with 242 additions and 65 deletions

View File

@@ -1,6 +1,6 @@
[package]
name = "sd-desktop"
version = "0.2.2"
version = "0.2.3"
description = "The universal file manager."
authors = ["Spacedrive Technology Inc <support@spacedrive.com>"]
default-run = "sd-desktop"

View File

@@ -1,6 +1,6 @@
[package]
name = "sd-core"
version = "0.2.2"
version = "0.2.3"
description = "Virtual distributed filesystem engine that powers Spacedrive."
authors = ["Spacedrive Technology Inc."]
rust-version = "1.73.0"

View File

@@ -1,7 +1,6 @@
import { Link } from 'react-router-dom';
import { useBridgeQuery, useFeatureFlag } from '@sd/client';
import { useBridgeQuery } from '@sd/client';
import { Button, Tooltip } from '@sd/ui';
import { Icon, SubtleButton } from '~/components';
import { Icon } from '~/components';
import { useLocale } from '~/hooks';
import SidebarLink from '../../SidebarLayout/Link';
@@ -13,7 +12,7 @@ export default function DevicesSection() {
const { t } = useLocale();
return (
<Section name="Devices">
<Section name={t('devices')}>
{node && (
<SidebarLink className="group relative w-full" to={`node/${node.id}`} key={node.id}>
<Icon name="Laptop" className="mr-1 h-5 w-5" />

View File

@@ -1,5 +1,6 @@
import { Clock, Heart, Planet, Tag } from '@phosphor-icons/react';
import { useLibraryQuery } from '@sd/client';
import { useLocale } from '~/hooks';
import Icon from '../../SidebarLayout/Icon';
import SidebarLink from '../../SidebarLayout/Link';
@@ -9,25 +10,27 @@ export const COUNT_STYLE = `absolute right-1 min-w-[20px] top-1 flex h-[19px] px
export default function LibrarySection() {
const labelCount = useLibraryQuery(['labels.count']);
const { t } = useLocale();
return (
<div className="space-y-0.5">
<SidebarLink to="overview">
<Icon component={Planet} />
Overview
{t('overview')}
</SidebarLink>
<SidebarLink to="recents">
<Icon component={Clock} />
Recents
{t('recents')}
{/* <div className={COUNT_STYLE}>34</div> */}
</SidebarLink>
<SidebarLink to="favorites">
<Icon component={Heart} />
Favorites
{t('favorites')}
{/* <div className={COUNT_STYLE}>2</div> */}
</SidebarLink>
<SidebarLink to="labels">
<Icon component={Tag} />
Labels
{t('labels')}
<div className={COUNT_STYLE}>{labelCount.data || 0}</div>
</SidebarLink>
</div>

View File

@@ -4,6 +4,7 @@ import { PropsWithChildren, useMemo } from 'react';
import { useBridgeQuery, useCache, useLibraryQuery, useNodes } from '@sd/client';
import { Button, toast, tw } from '@sd/ui';
import { Icon, IconName } from '~/components';
import { useLocale } from '~/hooks';
import { useHomeDir } from '~/hooks/useHomeDir';
import { useExplorerDroppable } from '../../../../Explorer/useExplorerDroppable';
@@ -39,6 +40,8 @@ export default function LocalSection() {
useNodes(result.data?.nodes);
const volumes = useCache(result.data?.items);
const { t } = useLocale();
// this will return an array of location ids that are also volumes
// { "/Mount/Point": 1, "/Mount/Point2": 2"}
const locationIdsForVolumes = useMemo(() => {
@@ -74,11 +77,11 @@ export default function LocalSection() {
);
return (
<Section name="Local">
<Section name={t('local')}>
<SeeMore>
<SidebarLink className="group relative w-full" to="network">
<SidebarIcon name="Globe" />
<Name>Network</Name>
<Name>{t('network')}</Name>
</SidebarLink>
{homeDir.data && (
@@ -87,7 +90,7 @@ export default function LocalSection() {
path={homeDir.data ?? ''}
>
<SidebarIcon name="Home" />
<Name>Home</Name>
<Name>{t('home')}</Name>
</EphemeralLocation>
)}

View File

@@ -12,6 +12,7 @@ import { useExplorerDroppable } from '~/app/$libraryId/Explorer/useExplorerDropp
import { useExplorerSearchParams } from '~/app/$libraryId/Explorer/util';
import { AddLocationButton } from '~/app/$libraryId/settings/library/locations/AddLocationButton';
import { Icon, SubtleButton } from '~/components';
import { useLocale } from '~/hooks';
import SidebarLink from '../../SidebarLayout/Link';
import Section from '../../SidebarLayout/Section';
@@ -24,9 +25,11 @@ export default function Locations() {
const locations = useCache(locationsQuery.data?.items);
const onlineLocations = useOnlineLocations();
const { t } = useLocale();
return (
<Section
name="Locations"
name={t('locations')}
actionArea={
<Link to="settings/library/locations">
<SubtleButton />

View File

@@ -5,6 +5,7 @@ import { useLibraryMutation, useLibraryQuery, type SavedSearch } from '@sd/clien
import { Button } from '@sd/ui';
import { useExplorerDroppable } from '~/app/$libraryId/Explorer/useExplorerDroppable';
import { Folder } from '~/components';
import { useLocale } from '~/hooks';
import SidebarLink from '../../SidebarLayout/Link';
import Section from '../../SidebarLayout/Section';
@@ -23,6 +24,8 @@ export default function SavedSearches() {
const navigate = useNavigate();
const { t } = useLocale();
const deleteSavedSearch = useLibraryMutation(['search.saved.delete'], {
onSuccess() {
if (currentIndex !== undefined && savedSearches.data) {
@@ -40,7 +43,7 @@ export default function SavedSearches() {
return (
<Section
name="Saved Searches"
name={t('saved_searches')}
// actionArea={
// <Link to="settings/library/saved-searches">
// <SubtleButton />

View File

@@ -1,8 +1,10 @@
import clsx from 'clsx';
import { t } from 'i18next';
import { NavLink, useMatch } from 'react-router-dom';
import { useCache, useLibraryQuery, useNodes, type Tag } from '@sd/client';
import { useExplorerDroppable } from '~/app/$libraryId/Explorer/useExplorerDroppable';
import { SubtleButton } from '~/components';
import { useLocale } from '~/hooks';
import SidebarLink from '../../SidebarLayout/Link';
import Section from '../../SidebarLayout/Section';
@@ -14,11 +16,13 @@ export default function TagsSection() {
useNodes(result.data?.nodes);
const tags = useCache(result.data?.items);
const { t } = useLocale();
if (!tags?.length) return null;
return (
<Section
name="Tags"
name={t('tags')}
actionArea={
<NavLink to="settings/library/tags">
<SubtleButton />

View File

@@ -1,5 +1,6 @@
import { Link } from 'react-router-dom';
import { useBridgeQuery, useCache, useLibraryQuery, useNodes } from '@sd/client';
import { useLocale } from '~/hooks';
import { useRouteTitle } from '~/hooks/useRouteTitle';
import { hardwareModelToIcon } from '~/util/hardware';
@@ -15,6 +16,9 @@ import StatisticItem from './StatCard';
export const Component = () => {
useRouteTitle('Overview');
const { t } = useLocale();
const locationsQuery = useLibraryQuery(['locations.list'], { keepPreviousData: true });
useNodes(locationsQuery.data?.nodes);
const locations = useCache(locationsQuery.data?.items) ?? [];
@@ -31,7 +35,9 @@ export const Component = () => {
<TopBarPortal
left={
<div className="flex items-center gap-2">
<span className="text-sm font-medium truncate">Library Overview</span>
<span className="truncate text-sm font-medium">
{t('library_overview')}
</span>
</div>
}
center={<SearchBar redirectToSearch />}
@@ -65,7 +71,7 @@ export const Component = () => {
// />
// }
/>
<div className="flex flex-col gap-3 pt-3 mt-4">
<div className="mt-4 flex flex-col gap-3 pt-3">
<OverviewSection>
<LibraryStatistics />
</OverviewSection>
@@ -132,11 +138,11 @@ export const Component = () => {
{/**/}
</OverviewSection>
<OverviewSection count={locations.length} title="Locations">
<OverviewSection count={locations.length} title={t('locations')}>
{locations?.map((item) => (
<Link key={item.id} to={`../location/${item.id}`}>
<StatisticItem
name={item.name || 'Unnamed Location'}
name={item.name || t('unnamed_location')}
icon="Folder"
totalSpace={item.size_in_bytes || [0]}
color="#0362FF"

View File

@@ -8,6 +8,7 @@ import {
useZodForm
} from '@sd/client';
import { Button, Card, Input, Select, SelectOption, Slider, Switch, tw, z } from '@sd/ui';
import i18n from '~/app/I18n';
import { Icon } from '~/components';
import { useDebouncedFormWatch, useLocale } from '~/hooks';
import { usePlatform } from '~/util/Platform';
@@ -21,6 +22,16 @@ const NodeSettingLabel = tw.div`mb-1 text-xs font-medium`;
// https://doc.rust-lang.org/std/u16/index.html
const u16 = z.number().min(0).max(65_535);
const LANGUAGE_OPTIONS = [
{ value: 'en', label: 'English' },
{ value: 'de', label: 'Deutsch' },
{ value: 'es', label: 'Español' },
{ value: 'fr', label: 'Français' },
{ value: 'tr', label: 'Türkçe' },
{ value: 'zh-CN', label: '中文(简体)' },
{ value: 'zh-TW', label: '中文(繁體)' }
];
export const Component = () => {
const node = useBridgeQuery(['nodeState']);
const platform = usePlatform();
@@ -96,6 +107,7 @@ export const Component = () => {
title={t('general_settings')}
description={t('general_settings_description')}
/>
{/* Node Card */}
<Card className="px-5">
<div className="my-2 flex w-full flex-col">
<div className="flex flex-row items-center justify-between">
@@ -161,7 +173,7 @@ export const Component = () => {
}
}}
>
Open
{t('open')}
</Button>
{/* <Button size="sm" variant="outline">
Change
@@ -183,7 +195,27 @@ export const Component = () => {
</div> */}
</div>
</Card>
{/* Language Settings */}
<Setting mini title={t('language')} description={t('language_description')}>
<div className="flex h-[30px] gap-2">
<Select
value={i18n.language}
onChange={(e) => {
// add "i18nextLng" key to localStorage and set it to the selected language
i18n.changeLanguage(e);
localStorage.setItem('i18nextLng', e);
}}
containerClassName="h-[30px] whitespace-nowrap"
>
{LANGUAGE_OPTIONS.map((lang, key) => (
<SelectOption key={key} value={lang.value}>
{lang.label}
</SelectOption>
))}
</Select>
</div>
</Setting>
{/* Debug Mode */}
<Setting mini title={t('debug_mode')} description={t('debug_mode_description')}>
<Switch
size="md"
@@ -191,6 +223,7 @@ export const Component = () => {
onClick={() => (debugState.enabled = !debugState.enabled)}
/>
</Setting>
{/* Background Processing */}
<Setting
mini
registerName="background_processing_percentage"
@@ -223,13 +256,14 @@ export const Component = () => {
/>
</div>
</Setting>
{/* Image Labeler */}
<Setting
mini
title={t('image_labeler_ai_model')}
description={t('image_labeler_ai_model_description')}
registerName="image_labeler_version"
>
<div className="flex h-[30px] gap-2">
<div className="flex h-[30px]">
<Controller
name="image_labeler_version"
disabled={node.data?.image_labeler_version == null}

View File

@@ -1,6 +1,6 @@
import { t } from 'i18next';
import { useBridgeQuery, useCache, useLibraryContext, useNodes } from '@sd/client';
import { Button, dialogManager } from '@sd/ui';
import { useLocale } from '~/hooks';
import { Heading } from '../../Layout';
import CreateDialog from './CreateDialog';
@@ -13,11 +13,13 @@ export const Component = () => {
const { library } = useLibraryContext();
const { t } = useLocale();
return (
<>
<Heading
title={t('libraries')}
description={t("libraries_description")}
description={t('libraries_description')}
rightArea={
<div className="flex-row space-x-2">
<Button
@@ -27,7 +29,7 @@ export const Component = () => {
dialogManager.create((dp) => <CreateDialog {...dp} />);
}}
>
{t("add_library")}
{t('add_library')}
</Button>
</div>
}

View File

@@ -1,12 +1,12 @@
import i18n from 'i18next';
// import LanguageDetector from 'i18next-browser-languagedetector';
import LanguageDetector from 'i18next-browser-languagedetector';
import { initReactI18next } from 'react-i18next';
import * as resources from 'virtual:i18next-loader';
i18n
// // detect user language
// // learn more: https://github.com/i18next/i18next-browser-languageDetector
// .use(LanguageDetector)
// detect user language
// learn more: https://github.com/i18next/i18next-browser-languageDetector
.use(LanguageDetector)
// pass the i18n instance to react-i18next.
.use(initReactI18next)
// init i18next

View File

@@ -18,6 +18,8 @@ import {
import { RadioGroupField, z } from '@sd/ui';
import { usePlatform } from '~/util/Platform';
import i18n from '../I18n';
export const OnboardingContext = createContext<ReturnType<typeof useContextValue> | null>(null);
// Hook for generating the value to put into `OnboardingContext.Provider`,
@@ -41,13 +43,12 @@ export const shareTelemetry = RadioGroupField.options([
z.literal('minimal-telemetry')
]).details({
'share-telemetry': {
heading: 'Share anonymous usage',
description:
'Share completely anonymous telemetry data to help the developers improve the app'
heading: i18n.t('share_anonymous_usage'),
description: i18n.t('share_anonymous_usage_description')
},
'minimal-telemetry': {
heading: 'Share the bare minimum',
description: 'Only share that I am an active user of Spacedrive and a few technical bits'
heading: i18n.t('share_bare_minimum'),
description: i18n.t('share_bare_minimum_description')
}
});

View File

@@ -40,7 +40,7 @@ export default function OnboardingNewLibrary() {
<Button onClick={handleImport} variant="accent" size="sm">
{t('import')}
</Button>
<span className="px-2 text-xs font-bold text-ink-faint">OR</span>
<span className="px-2 text-xs font-bold text-ink-faint">{t('or')}</span>
<Button onClick={() => setImportMode(false)} variant="outline" size="sm">
{t('create_new_library')}
</Button>

View File

@@ -1,5 +1,4 @@
{
"meet_title": "Treffen Sie {{title}}",
"about": "Über",
"about_vision_text": "Viele von uns haben mehrere Cloud-Konten, Laufwerke, die nicht gesichert sind, und Daten, die von Verlust bedroht sind. Wir verlassen uns auf Cloud-Dienste wie Google Fotos und iCloud, sind aber mit begrenzter Kapazität eingesperrt und haben fast keine Interoperabilität zwischen Diensten und Betriebssystemen. Fotoalben sollten nicht in einem Geräte-Ökosystem feststecken oder für Werbedaten geerntet werden. Sie sollten betriebssystemunabhängig, dauerhaft und persönlich besessen sein. Daten, die wir erstellen, sind unser Erbe, das uns lange überleben wird - Open-Source-Technologie ist der einzige Weg, um sicherzustellen, dass wir absolute Kontrolle über die Daten behalten, die unser Leben definieren, in unbegrenztem Maßstab.",
"about_vision_title": "Vision",
@@ -91,6 +90,7 @@
"description": "Beschreibung",
"deselect": "Abwählen",
"details": "Details",
"devices": "Geräte",
"devices_coming_soon_tooltip": "Demnächst verfügbar! Diese Alpha-Version beinhaltet noch keinen Bibliothekssync, dieser wird aber sehr bald bereit sein.",
"direction": "Richtung",
"disabled": "Deaktiviert",
@@ -142,6 +142,7 @@
"failed_to_resume_job": "Aufgabe konnte nicht fortgesetzt werden.",
"failed_to_update_location_settings": "Standorteinstellungen konnten nicht aktualisiert werden",
"favorite": "Favorit",
"favorites": "Favoriten",
"file_indexing_rules": "Dateiindizierungsregeln",
"filters": "Filter",
"forward": "Vorwärts",
@@ -165,6 +166,7 @@
"hide_in_sidebar": "In der Seitenleiste verstecken",
"hide_in_sidebar_description": "Verhindern, dass dieser Tag in der Seitenleiste der App angezeigt wird.",
"hide_location_from_view": "Standort und Inhalte aus der Ansicht ausblenden",
"home": "Startseite",
"image_labeler_ai_model": "KI-Modell zur Bildetikettierung",
"image_labeler_ai_model_description": "Das Modell, das zur Erkennung von Objekten in Bildern verwendet wird. Größere Modelle sind genauer, aber langsamer.",
"import": "Importieren",
@@ -176,6 +178,8 @@
"install_update": "Update installieren",
"installed": "Installiert",
"item_size": "Elementgröße",
"item_with_count_one": "{{count}} artikel",
"item_with_count_other": "{{count}} artikel",
"job_has_been_canceled": "Der Job wurde abgebrochen.",
"job_has_been_paused": "Der Job wurde pausiert.",
"job_has_been_removed": "Der Job wurde entfernt.",
@@ -190,16 +194,21 @@
"keybinds_description": "Client-Tastenkombinationen anzeigen und verwalten",
"keys": "Schlüssel",
"kilometers": "Kilometer",
"labels": "Labels",
"language": "Sprache",
"language_description": "Ändern Sie die Sprache der Spacedrive-Benutzeroberfläche",
"learn_more_about_telemetry": "Mehr über Telemetrie erfahren",
"libraries": "Bibliotheken",
"libraries_description": "Die Datenbank enthält alle Bibliotheksdaten und Dateimetadaten.",
"library": "Bibliothek",
"library_name": "Bibliotheksname",
"library_overview": "Bibliotheksübersicht",
"library_settings": "Bibliothekseinstellungen",
"library_settings_description": "Allgemeine Einstellungen in Bezug auf die aktuell aktive Bibliothek.",
"list_view": "Listenansicht",
"list_view_notice_description": "Navigieren Sie einfach durch Ihre Dateien und Ordner mit der Listenansicht. Diese Ansicht zeigt Ihre Dateien in einem einfachen, organisierten Listenformat an, sodass Sie schnell die benötigten Dateien finden und darauf zugreifen können.",
"loading": "Laden",
"local": "Lokal",
"local_locations": "Lokale Standorte",
"local_node": "Lokaler Knoten",
"location_display_name_info": "Der Name dieses Standorts, so wird er in der Seitenleiste angezeigt. Wird den eigentlichen Ordner auf der Festplatte nicht umbenennen.",
@@ -221,6 +230,7 @@
"media_view_context": "Medienansichtskontext",
"media_view_notice_description": "Entdecken Sie Fotos und Videos leicht, die Medienansicht zeigt Resultate beginnend am aktuellen Standort einschließlich Unterordnern.",
"meet_contributors_behind_spacedrive": "Treffen Sie die Mitwirkenden hinter Spacedrive",
"meet_title": "Treffen Sie {{title}}",
"miles": "Meilen",
"mode": "Modus",
"modified": "Geändert",
@@ -231,6 +241,7 @@
"name": "Name",
"navigate_back": "Zurück navigieren",
"navigate_forward": "Vorwärts navigieren",
"network": "Netzwerk",
"network_page_description": "Andere Spacedrive-Knoten in Ihrem LAN werden hier angezeigt, zusammen mit Ihren standardmäßigen Betriebssystem-Netzwerklaufwerken.",
"networking": "Netzwerk",
"networking_port": "Netzwerk-Port",
@@ -261,6 +272,7 @@
"open_settings": "Einstellungen öffnen",
"open_with": "Öffnen mit",
"or": "ODER",
"overview": "Übersicht",
"pair": "Verbinden",
"pairing_with_node": "Koppeln mit {{node}}",
"paste": "Einfügen",
@@ -275,6 +287,7 @@
"quick_preview": "Schnellvorschau",
"quick_view": "Schnellansicht",
"recent_jobs": "Aktuelle Aufgaben",
"recents": "Zuletzt verwendet",
"regen_labels": "Labels erneuern",
"regen_thumbnails": "Vorschaubilder erneuern",
"regenerate_thumbs": "Vorschaubilder neu generieren",
@@ -296,6 +309,7 @@
"running": "Läuft",
"save": "Speichern",
"save_changes": "Änderungen speichern",
"saved_searches": "Gespeicherte Suchen",
"search_extensions": "Erweiterungen suchen",
"secure_delete": "Sicheres Löschen",
"security": "Sicherheit",
@@ -304,6 +318,10 @@
"settings": "Einstellungen",
"setup": "Einrichten",
"share": "Teilen",
"share_anonymous_usage": "Anonyme Nutzung teilen",
"share_anonymous_usage_description": "Teilen Sie völlig anonyme Telemetriedaten, um den Entwicklern bei der Verbesserung der App zu helfen",
"share_bare_minimum": "Mindestinformationen teilen",
"share_bare_minimum_description": "Nur teilen, dass ich ein aktiver Benutzer von Spacedrive bin und einige technische Details",
"sharing": "Teilen",
"sharing_description": "Verwalten Sie, wer Zugriff auf Ihre Bibliotheken hat.",
"show_details": "Details anzeigen",
@@ -336,6 +354,7 @@
"type": "Typ",
"ui_animations": "UI-Animationen",
"ui_animations_description": "Dialoge und andere UI-Elemente werden animiert, wenn sie geöffnet und geschlossen werden.",
"unnamed_location": "Unbenannter Standort",
"usage": "Verwendung",
"usage_description": "Ihre Bibliotheksnutzung und Hardwareinformationen",
"value": "Wert",
@@ -345,7 +364,5 @@
"your_account": "Ihr Konto",
"your_account_description": "Spacedrive-Konto und -Informationen.",
"your_local_network": "Ihr lokales Netzwerk",
"your_privacy": "Ihre Privatsphäre",
"item_with_count_one": "{{count}} artikel",
"item_with_count_other": "{{count}} artikel"
"your_privacy": "Ihre Privatsphäre"
}

View File

@@ -1,5 +1,4 @@
{
"meet_title": "Meet {{title}}",
"about": "About",
"about_vision_text": "Many of us have multiple cloud accounts, drives that arent backed up and data at risk of loss. We depend on cloud services like Google Photos and iCloud, but are locked in with limited capacity and almost zero interoperability between services and operating systems. Photo albums shouldnt be stuck in a device ecosystem, or harvested for advertising data. They should be OS agnostic, permanent and personally owned. Data we create is our legacy, that will long outlive us—open source technology is the only way to ensure we retain absolute control over the data that defines our lives, at unlimited scale.",
"about_vision_title": "Vision",
@@ -91,6 +90,7 @@
"description": "Description",
"deselect": "Deselect",
"details": "Details",
"devices": "Devices",
"devices_coming_soon_tooltip": "Coming soon! This alpha release doesn't include library sync, it will be ready very soon.",
"direction": "Direction",
"disabled": "Disabled",
@@ -165,6 +165,7 @@
"hide_in_sidebar": "Hide in sidebar",
"hide_in_sidebar_description": "Prevent this tag from showing in the sidebar of the app.",
"hide_location_from_view": "Hide location and contents from view",
"home": "Home",
"image_labeler_ai_model": "Image label recognition AI model",
"image_labeler_ai_model_description": "The model used to recognize objects in images. Larger models are more accurate but slower.",
"import": "Import",
@@ -176,6 +177,8 @@
"install_update": "Install Update",
"installed": "Installed",
"item_size": "Item size",
"item_with_count_one": "{{count}} item",
"item_with_count_other": "{{count}} items",
"job_has_been_canceled": "Job has been canceled.",
"job_has_been_paused": "Job has been paused.",
"job_has_been_removed": "Job has been removed.",
@@ -195,11 +198,13 @@
"libraries_description": "The database contains all library data and file metadata.",
"library": "Library",
"library_name": "Library name",
"library_overview": "Library Overview",
"library_settings": "Library Settings",
"library_settings_description": "General settings related to the currently active library.",
"list_view": "List View",
"list_view_notice_description": "Easily navigate through your files and folders with List View. This view displays your files in a simple, organized list format, allowing you to quickly locate and access the files you need.",
"loading": "Loading",
"local": "Local",
"local_locations": "Local Locations",
"local_node": "Local Node",
"location_display_name_info": "The name of this Location, this is what will be displayed in the sidebar. Will not rename the actual folder on disk.",
@@ -221,6 +226,7 @@
"media_view_context": "Media View Context",
"media_view_notice_description": "Discover photos and videos easily, Media View will show results starting at the current location including sub directories.",
"meet_contributors_behind_spacedrive": "Meet the contributors behind Spacedrive",
"meet_title": "Meet {{title}}",
"miles": "Miles",
"mode": "Mode",
"modified": "Modified",
@@ -231,6 +237,7 @@
"name": "Name",
"navigate_back": "Navigate back",
"navigate_forward": "Navigate forward",
"network": "Network",
"network_page_description": "Other Spacedrive nodes on your LAN will appear here, along with your default OS network mounts.",
"networking": "Networking",
"networking_port": "Networking Port",
@@ -261,6 +268,7 @@
"open_settings": "Open Settings",
"open_with": "Open with",
"or": "OR",
"overview": "Overview",
"pair": "Pair",
"pairing_with_node": "Pairing with {{node}}",
"paste": "Paste",
@@ -296,6 +304,7 @@
"running": "Running",
"save": "Save",
"save_changes": "Save Changes",
"saved_searches": "Saved Searches",
"search_extensions": "Search extensions",
"secure_delete": "Secure delete",
"security": "Security",
@@ -304,6 +313,10 @@
"settings": "Settings",
"setup": "Set up",
"share": "Share",
"share_anonymous_usage": "Share anonymous usage",
"share_anonymous_usage_description": "Share completely anonymous telemetry data to help the developers improve the app",
"share_bare_minimum": "Share the bare minimum",
"share_bare_minimum_description": "Only share that I am an active user of Spacedrive and a few technical bits",
"sharing": "Sharing",
"sharing_description": "Manage who has access to your libraries.",
"show_details": "Show details",
@@ -336,16 +349,20 @@
"type": "Type",
"ui_animations": "UI Animations",
"ui_animations_description": "Dialogs and other UI elements will animate when opening and closing.",
"unnamed_location": "Unnamed Location",
"usage": "Usage",
"usage_description": "Your library usage and hardware information",
"value": "Value",
"video_preview_not_supported": "Video preview is not supported.",
"want_to_do_this_later": "Want to do this later?",
"website": "Website",
"your_account": "Your account\"",
"your_account": "Your account",
"your_account_description": "Spacedrive account and information.",
"your_local_network": "Your Local Network",
"your_privacy": "Your Privacy",
"item_with_count_one": "{{count}} item",
"item_with_count_other": "{{count}} items"
"recents": "Recents",
"favorites": "Favorites",
"labels": "Labels",
"language": "Language",
"language_description": "Change the language of the Spacedrive interface"
}

View File

@@ -1,5 +1,4 @@
{
"meet_title": "Conoce a {{title}}",
"about": "Acerca de",
"about_vision_text": "Muchos de nosotros tenemos varias cuentas en la nube, discos que no tienen copias de seguridad y datos en riesgo de pérdida. Dependemos de servicios en la nube como Google Photos e iCloud, pero estamos limitados con una capacidad reducida y casi cero interoperabilidad entre servicios y sistemas operativos. Los álbumes de fotos no deberían estar atascados en un ecosistema de dispositivos o ser utilizados para datos publicitarios. Deberían ser independientes del SO, permanentes y de propiedad personal. Los datos que creamos son nuestro legado, que nos sobrevivirá mucho tiempo: la tecnología de código abierto es la única forma de asegurarnos de mantener el control absoluto sobre los datos que definen nuestras vidas, a una escala ilimitada.",
"about_vision_title": "Visión",
@@ -91,6 +90,7 @@
"description": "Descripción",
"deselect": "Deseleccionar",
"details": "Detalles",
"devices": "Dispositivos",
"devices_coming_soon_tooltip": "¡Próximamente! Esta versión alfa no incluye la sincronización de bibliotecas, estará lista muy pronto.",
"direction": "Dirección",
"disabled": "Deshabilitado",
@@ -142,6 +142,7 @@
"failed_to_resume_job": "Error al reanudar el trabajo.",
"failed_to_update_location_settings": "Error al actualizar configuraciones de ubicación",
"favorite": "Favorito",
"favorites": "Favoritos",
"file_indexing_rules": "Reglas de indexación de archivos",
"filters": "Filtros",
"forward": "Adelante",
@@ -165,6 +166,7 @@
"hide_in_sidebar": "Ocultar en la barra lateral",
"hide_in_sidebar_description": "Prevenir que esta etiqueta se muestre en la barra lateral de la aplicación.",
"hide_location_from_view": "Ocultar ubicación y contenido de la vista",
"home": "Inicio",
"image_labeler_ai_model": "Modelo AI de reconocimiento de etiquetas de imagen",
"image_labeler_ai_model_description": "El modelo utilizado para reconocer objetos en imágenes. Los modelos más grandes son más precisos pero más lentos.",
"import": "Importar",
@@ -176,6 +178,8 @@
"install_update": "Instalar Actualización",
"installed": "Instalado",
"item_size": "Tamaño de elemento",
"item_with_count_one": "{{count}} artículo",
"item_with_count_other": "{{count}} artículos",
"job_has_been_canceled": "El trabajo ha sido cancelado.",
"job_has_been_paused": "El trabajo ha sido pausado.",
"job_has_been_removed": "El trabajo ha sido eliminado.",
@@ -190,16 +194,21 @@
"keybinds_description": "Ver y administrar atajos de teclado del cliente",
"keys": "Claves",
"kilometers": "Kilómetros",
"labels": "Etiquetas",
"language": "Idioma",
"language_description": "Cambiar el idioma de la interfaz de Spacedrive",
"learn_more_about_telemetry": "Aprende más sobre la telemetría",
"libraries": "Bibliotecas",
"libraries_description": "La base de datos contiene todos los datos de la biblioteca y metadatos de archivos.",
"library": "Biblioteca",
"library_name": "Nombre de la Biblioteca",
"library_overview": "Resumen de la Biblioteca",
"library_settings": "Configuraciones de la Biblioteca",
"library_settings_description": "Configuraciones generales relacionadas con la biblioteca activa actualmente.",
"list_view": "Vista de Lista",
"list_view_notice_description": "Navega fácilmente a través de tus archivos y carpetas con la Vista de Lista. Esta vista muestra tus archivos en un formato de lista simple y organizado, permitiéndote localizar y acceder rápidamente a los archivos que necesitas.",
"loading": "Cargando",
"local": "Local",
"local_locations": "Ubicaciones Locales",
"local_node": "Nodo Local",
"location_display_name_info": "El nombre de esta Ubicación, esto es lo que se mostrará en la barra lateral. No renombrará la carpeta real en el disco.",
@@ -221,6 +230,7 @@
"media_view_context": "Contexto de Vista de Medios",
"media_view_notice_description": "Descubre fotos y videos fácilmente, la Vista de Medios mostrará resultados comenzando en la ubicación actual incluyendo subdirectorios.",
"meet_contributors_behind_spacedrive": "Conoce a los colaboradores detrás de Spacedrive",
"meet_title": "Conoce a {{title}}",
"miles": "Millas",
"mode": "Modo",
"modified": "Modificado",
@@ -231,6 +241,7 @@
"name": "Nombre",
"navigate_back": "Navegar hacia atrás",
"navigate_forward": "Navegar hacia adelante",
"network": "Red",
"network_page_description": "Otros nodos de Spacedrive en tu LAN aparecerán aquí, junto con tus montajes de red del sistema operativo por defecto.",
"networking": "Redes",
"networking_port": "Puerto de Redes",
@@ -261,6 +272,7 @@
"open_settings": "Abrir Configuraciones",
"open_with": "Abrir con",
"or": "O",
"overview": "Resumen",
"pair": "Emparejar",
"pairing_with_node": "Emparejando con {{node}}",
"paste": "Pegar",
@@ -275,6 +287,7 @@
"quick_preview": "Vista rápida",
"quick_view": "Vista rápida",
"recent_jobs": "Trabajos recientes",
"recents": "Recientes",
"regen_labels": "Regenerar Etiquetas",
"regen_thumbnails": "Regenerar Miniaturas",
"regenerate_thumbs": "Regenerar Miniaturas",
@@ -296,6 +309,7 @@
"running": "Ejecutando",
"save": "Guardar",
"save_changes": "Guardar Cambios",
"saved_searches": "Búsquedas Guardadas",
"search_extensions": "Buscar extensiones",
"secure_delete": "Borrado seguro",
"security": "Seguridad",
@@ -304,6 +318,10 @@
"settings": "Configuraciones",
"setup": "Configurar",
"share": "Compartir",
"share_anonymous_usage": "Compartir uso anónimo",
"share_anonymous_usage_description": "Compartir datos de telemetría completamente anónimos para ayudar a los desarrolladores a mejorar la aplicación",
"share_bare_minimum": "Compartir lo mínimo indispensable",
"share_bare_minimum_description": "Solo compartir que soy un usuario activo de Spacedrive y algunos detalles técnicos",
"sharing": "Compartiendo",
"sharing_description": "Administra quién tiene acceso a tus bibliotecas.",
"show_details": "Mostrar detalles",
@@ -336,6 +354,7 @@
"type": "Tipo",
"ui_animations": "Animaciones de la UI",
"ui_animations_description": "Los diálogos y otros elementos de la UI se animarán al abrirse y cerrarse.",
"unnamed_location": "Ubicación sin nombre",
"usage": "Uso",
"usage_description": "Tu uso de la biblioteca e información del hardware",
"value": "Valor",
@@ -345,7 +364,5 @@
"your_account": "Tu cuenta",
"your_account_description": "Cuenta de Spacedrive e información.",
"your_local_network": "Tu Red Local",
"your_privacy": "Tu Privacidad",
"item_with_count_one": "{{count}} artículo",
"item_with_count_other": "{{count}} artículos"
"your_privacy": "Tu Privacidad"
}

View File

@@ -1,5 +1,4 @@
{
"meet_title": "Rencontrer {{title}}",
"about": "À propos",
"about_vision_text": "Beaucoup d'entre nous ont plusieurs comptes cloud, des disques qui ne sont pas sauvegardés et des données à risque de perte. Nous dépendons de services cloud comme Google Photos et iCloud, mais sommes enfermés avec une capacité limitée et presque zéro interopérabilité entre les services et les systèmes d'exploitation. Les albums photo ne devraient pas être coincés dans un écosystème d'appareils, ou récoltés pour des données publicitaires. Ils devraient être indépendants du système d'exploitation, permanents et personnels. Les données que nous créons sont notre héritage, qui nous survivra longtemps - la technologie open source est le seul moyen d'assurer que nous conservons un contrôle absolu sur les données qui définissent nos vies, à une échelle illimitée.",
"about_vision_title": "Vision",
@@ -91,6 +90,7 @@
"description": "Description",
"deselect": "Désélectionner",
"details": "Détails",
"devices": "Appareils",
"devices_coming_soon_tooltip": "Bientôt disponible ! Cette version alpha n'inclut pas la synchronisation des bibliothèques, cela sera prêt très prochainement.",
"direction": "Direction",
"disabled": "Désactivé",
@@ -141,6 +141,7 @@
"failed_to_resume_job": "Échec de la reprise du travail.",
"failed_to_update_location_settings": "Échec de la mise à jour des paramètres de l'emplacement",
"favorite": "Favori",
"favorites": "Favoris",
"file_indexing_rules": "Règles d'indexation des fichiers",
"filters": "Filtres",
"forward": "Avancer",
@@ -164,6 +165,7 @@
"hide_in_sidebar": "Masquer dans la barre latérale",
"hide_in_sidebar_description": "Empêcher cette étiquette de s'afficher dans la barre latérale de l'application.",
"hide_location_from_view": "Masquer l'emplacement et le contenu de la vue",
"home": "Accueil",
"image_labeler_ai_model": "Modèle d'IA de reconnaissance d'étiquettes d'image",
"image_labeler_ai_model_description": "Le modèle utilisé pour reconnaître les objets dans les images. Les modèles plus grands sont plus précis mais plus lents.",
"import": "Importer",
@@ -175,6 +177,8 @@
"install_update": "Installer la mise à jour",
"installed": "Installé",
"item_size": "Taille de l'élément",
"item_with_count_one": "{{count}} article",
"item_with_count_other": "{{count}} articles",
"job_has_been_canceled": "Le travail a été annulé.",
"job_has_been_paused": "Le travail a été mis en pause.",
"job_has_been_removed": "Le travail a été supprimé.",
@@ -189,16 +193,21 @@
"keybinds_description": "Afficher et gérer les raccourcis clavier du client",
"keys": "Clés",
"kilometers": "Kilomètres",
"labels": "Étiquettes",
"language": "Langue",
"language_description": "Changer la langue de l'interface Spacedrive",
"learn_more_about_telemetry": "En savoir plus sur la télémesure",
"libraries": "Bibliothèques",
"libraries_description": "La base de données contient toutes les données de la bibliothèque et les métadonnées des fichiers.",
"library": "Bibliothèque",
"library_name": "Nom de la bibliothèque",
"library_overview": "Aperçu de la bibliothèque",
"library_settings": "Paramètres de la bibliothèque",
"library_settings_description": "Paramètres généraux liés à la bibliothèque actuellement active.",
"list_view": "Vue en liste",
"list_view_notice_description": "Naviguez facilement à travers vos fichiers et dossiers avec la vue en liste. Cette vue affiche vos fichiers dans un format de liste simple et organisé, vous permettant de localiser et d'accéder rapidement aux fichiers dont vous avez besoin.",
"loading": "Chargement",
"local": "Local",
"local_locations": "Emplacements locaux",
"local_node": "Nœud local",
"location_display_name_info": "Le nom de cet emplacement, c'est ce qui sera affiché dans la barre latérale. Ne renommera pas le dossier réel sur le disque.",
@@ -220,6 +229,7 @@
"media_view_context": "Contexte de vue média",
"media_view_notice_description": "Découvrez facilement les photos et vidéos, la vue média affichera les résultats en commençant par l'emplacement actuel, y compris les sous-répertoires.",
"meet_contributors_behind_spacedrive": "Rencontrez les contributeurs derrière Spacedrive",
"meet_title": "Rencontrer {{title}}",
"miles": "Miles",
"mode": "Mode",
"modified": "Modifié",
@@ -230,6 +240,7 @@
"name": "Nom",
"navigate_back": "Naviguer en arrière",
"navigate_forward": "Naviguer en avant",
"network": "Réseau",
"network_page_description": "Les autres nœuds Spacedrive de votre LAN apparaîtront ici, ainsi que vos montages réseau par défaut du système d'exploitation.",
"networking": "Réseautage",
"networking_port": "Port réseau",
@@ -260,6 +271,7 @@
"open_settings": "Ouvrir les paramètres",
"open_with": "Ouvrir avec",
"or": "OU",
"overview": "Aperçu",
"pair": "Associer",
"pairing_with_node": "Appairage avec {{node}}",
"paste": "Coller",
@@ -274,6 +286,7 @@
"quick_preview": "Aperçu rapide",
"quick_view": "Vue rapide",
"recent_jobs": "Travaux récents",
"recents": "Récents",
"regen_labels": "Régénérer les étiquettes",
"regen_thumbnails": "Régénérer les vignettes",
"regenerate_thumbs": "Régénérer les miniatures",
@@ -295,6 +308,7 @@
"running": "En cours",
"save": "Sauvegarder",
"save_changes": "Sauvegarder les modifications",
"saved_searches": "Recherches enregistrées",
"search_extensions": "Rechercher des extensions",
"secure_delete": "Suppression sécurisée",
"security": "Sécurité",
@@ -303,6 +317,10 @@
"settings": "Paramètres",
"setup": "Configuration",
"share": "Partager",
"share_anonymous_usage": "Partager l'utilisation anonyme",
"share_anonymous_usage_description": "Partager des données de télémétrie complètement anonymes pour aider les développeurs à améliorer l'application",
"share_bare_minimum": "Partager le strict minimum",
"share_bare_minimum_description": "Partager uniquement que je suis un utilisateur actif de Spacedrive et quelques détails techniques",
"sharing": "Partage",
"sharing_description": "Gérer qui a accès à vos bibliothèques.",
"show_details": "Afficher les détails",
@@ -335,6 +353,7 @@
"type": "Type",
"ui_animations": "Animations de l'interface",
"ui_animations_description": "Les dialogues et autres éléments d'interface animeront lors de l'ouverture et de la fermeture.",
"unnamed_location": "Emplacement sans nom",
"usage": "Utilisation",
"usage_description": "Votre utilisation de la bibliothèque et les informations matérielles",
"value": "Valeur",
@@ -344,7 +363,5 @@
"your_account": "Votre compte",
"your_account_description": "Compte et informations Spacedrive.",
"your_local_network": "Votre réseau local",
"your_privacy": "Votre confidentialité",
"item_with_count_one": "{{count}} article",
"item_with_count_other": "{{count}} articles"
"your_privacy": "Votre confidentialité"
}

View File

@@ -1,5 +1,4 @@
{
"meet_title": "{{title}} ile Tanışın",
"about": "Hakkında",
"about_vision_text": "Birçoğumuzun birden fazla bulut hesabı, yedeklenmemiş sürücüleri ve kaybolma riski taşıyan verileri var. Google Fotoğraflar ve iCloud gibi bulut hizmetlerine bağımlıyız, ancak sınırlı kapasiteyle ve hizmetler ile işletim sistemleri arasında neredeyse sıfır geçiş yapabilirlikle kısıtlanmış durumdayız. Fotoğraf albümleri bir cihaz ekosisteminde sıkışıp kalmamalı veya reklam verileri için kullanılmamalıdır. OS bağımsız, kalıcı ve kişisel olarak sahip olunmalıdır. Oluşturduğumuz veriler, bizden uzun süre yaşayacak mirasımızdır - verilerimiz üzerinde mutlak kontrol sağlamak için açık kaynak teknolojisi tek yoludur, sınırsız ölçekte.",
"about_vision_title": "Vizyon",
@@ -91,6 +90,7 @@
"description": "Açıklama",
"deselect": "Seçimi Kaldır",
"details": "Detaylar",
"devices": "Cihazlar",
"devices_coming_soon_tooltip": "Yakında geliyor! Bu alfa sürümü kütüphane senkronizasyonunu içermiyor, çok yakında hazır olacak.",
"direction": "Yön",
"disabled": "Devre Dışı",
@@ -142,6 +142,7 @@
"failed_to_resume_job": "İş devam ettirilemedi.",
"failed_to_update_location_settings": "Konum ayarları güncellenemedi",
"favorite": "Favori",
"favorites": "Favoriler",
"file_indexing_rules": "Dosya İndeksleme Kuralları",
"filters": "Filtreler",
"forward": "İleri",
@@ -165,6 +166,7 @@
"hide_in_sidebar": "Kenar çubuğunda gizle",
"hide_in_sidebar_description": "Bu etiketin uygulamanın kenar çubuğunda gösterilmesini engelle.",
"hide_location_from_view": "Konumu ve içeriğini görünümden gizle",
"home": "Ev",
"image_labeler_ai_model": "Resim etiket tanıma AI modeli",
"image_labeler_ai_model_description": "Resimlerdeki nesneleri tanımak için kullanılan model. Daha büyük modeller daha doğru ancak daha yavaştır.",
"import": "İçe Aktar",
@@ -176,6 +178,8 @@
"install_update": "Güncellemeyi Yükle",
"installed": "Yüklendi",
"item_size": "Öğe Boyutu",
"item_with_count_one": "{{count}} madde",
"item_with_count_other": "{{count}} maddeler",
"job_has_been_canceled": "İş iptal edildi.",
"job_has_been_paused": "İş duraklatıldı.",
"job_has_been_removed": "İş kaldırıldı.",
@@ -190,16 +194,21 @@
"keybinds_description": "İstemci tuş bağlamalarını görüntüleyin ve yönetin",
"keys": "Anahtarlar",
"kilometers": "Kilometreler",
"labels": "Etiketler",
"language": "Dil",
"language_description": "Spacedrive arayüzünün dilini değiştirin",
"learn_more_about_telemetry": "Telemetri hakkında daha fazla bilgi edinin",
"libraries": "Kütüphaneler",
"libraries_description": "Veritabanı tüm kütüphane verilerini ve dosya metaverilerini içerir.",
"library": "Kütüphane",
"library_name": "Kütüphane adı",
"library_overview": "Kütüphane Genel Bakışı",
"library_settings": "Kütüphane Ayarları",
"library_settings_description": "Şu anda aktif olan kütüphane ile ilgili genel ayarlar.",
"list_view": "Liste Görünümü",
"list_view_notice_description": "Dosyalarınızın ve klasörlerinizin arasında kolayca gezinmek için Liste Görünümünü kullanın. Bu görünüm dosyalarınızı basit, düzenli bir liste formatında gösterir, ihtiyacınız olan dosyalara hızla ulaşıp onlara erişmenizi sağlar.",
"loading": "Yükleniyor",
"local": "Yerel",
"local_locations": "Yerel Konumlar",
"local_node": "Yerel Düğüm",
"location_display_name_info": "Bu Konumun adı, kenar çubuğunda gösterilecek olan budur. Diskteki gerçek klasörü yeniden adlandırmaz.",
@@ -221,6 +230,7 @@
"media_view_context": "Medya Görünümü Bağlamı",
"media_view_notice_description": "Fotoğrafları ve videoları kolayca keşfedin, Medya Görünümü alt dizinler dahil olmak üzere mevcut konumdan itibaren sonuçları gösterecektir.",
"meet_contributors_behind_spacedrive": "Spacedrive'ın arkasındaki katkıda bulunanlarla tanışın",
"meet_title": "{{title}} ile Tanışın",
"miles": "Mil",
"mode": "Mod",
"modified": "Değiştirildi",
@@ -231,6 +241,7 @@
"name": "Ad",
"navigate_back": "Geri git",
"navigate_forward": "İleri git",
"network": "Ağ",
"network_page_description": "Yerel Ağınızda diğer Spacedrive düğümleri burada görünecek, varsayılan işletim sistemi ağ bağlantıları ile birlikte.",
"networking": "Ağ",
"networking_port": "Ağ Portu",
@@ -261,6 +272,7 @@
"open_settings": "Ayarları Aç",
"open_with": "İle aç",
"or": "VEYA",
"overview": "Genel Bakış",
"pair": "Eşle",
"pairing_with_node": "{{node}} ile eşleşiyor",
"paste": "Yapıştır",
@@ -275,6 +287,7 @@
"quick_preview": "Hızlı Önizleme",
"quick_view": "Hızlı bakış",
"recent_jobs": "Son İşler",
"recents": "Son Kullanılanlar",
"regen_labels": "Etiketleri Yeniden Oluştur",
"regen_thumbnails": "Küçük Resimleri Yeniden Oluştur",
"regenerate_thumbs": "Küçük Resimleri Yeniden Oluştur",
@@ -296,6 +309,7 @@
"running": "Çalışıyor",
"save": "Kaydet",
"save_changes": "Değişiklikleri Kaydet",
"saved_searches": "Kaydedilen Aramalar",
"search_extensions": "Arama uzantıları",
"secure_delete": "Güvenli sil",
"security": "Güvenlik",
@@ -304,6 +318,10 @@
"settings": "Ayarlar",
"setup": "Kurulum",
"share": "Paylaş",
"share_anonymous_usage": "Anonim kullanımı paylaş",
"share_anonymous_usage_description": "Geliştiricilere uygulamayı iyileştirmelerine yardımcı olmak için tamamen anonim telemetri verilerini paylaşın",
"share_bare_minimum": "Sadece en azını paylaş",
"share_bare_minimum_description": "Yalnızca Spacedrive'ın aktif bir kullanıcısı olduğumu ve birkaç teknik ayrıntıyı paylaşın",
"sharing": "Paylaşım",
"sharing_description": "Kütüphanelerinize kimlerin erişim sağlayabileceğini yönetin.",
"show_details": "Detayları Göster",
@@ -336,6 +354,7 @@
"type": "Tip",
"ui_animations": "UI Animasyonları",
"ui_animations_description": "Diyaloglar ve diğer UI elementleri açılırken ve kapanırken animasyon gösterecek.",
"unnamed_location": "İsimsiz Konum",
"usage": "Kullanım",
"usage_description": "Kütüphanenizi kullanımı ve donanım bilgileri",
"value": "Değer",
@@ -345,7 +364,5 @@
"your_account": "Hesabınız",
"your_account_description": "Spacedrive hesabınız ve bilgileri.",
"your_local_network": "Yerel Ağınız",
"your_privacy": "Gizliliğiniz",
"item_with_count_one": "{{count}} madde",
"item_with_count_other": "{{count}} maddeler"
"your_privacy": "Gizliliğiniz"
}

View File

@@ -1,5 +1,4 @@
{
"meet_title": "遇见 {{title}}",
"about": "关于",
"about_vision_text": "我们中的许多人拥有多个云账户磁盘没有备份数据有丢失的风险。我们依赖像Google照片和iCloud这样的云服务但却受限于有限的容量和几乎零互操作性服务和操作系统之间无法相互配合。相册不应该被困在一个设备生态系统中或者被用来收割广告数据。它们应该是与操作系统无关永久的个人拥有的。我们创造的数据是我们的遗产将比我们活得更久——开源技术是确保我们对定义我们生活的数据拥有绝对控制权的唯一方式没有限制。",
"about_vision_title": "愿景",
@@ -91,6 +90,7 @@
"description": "描述",
"deselect": "取消选择",
"details": "详情",
"devices": "设备",
"devices_coming_soon_tooltip": "即将推出这个Alpha版本不包括库同步很快就会准备好。",
"direction": "方向",
"disabled": "已禁用",
@@ -142,6 +142,7 @@
"failed_to_resume_job": "恢复任务失败。",
"failed_to_update_location_settings": "更新位置设置失败",
"favorite": "收藏",
"favorites": "收藏夹",
"file_indexing_rules": "文件索引规则",
"filters": "过滤器",
"forward": "前进",
@@ -165,6 +166,7 @@
"hide_in_sidebar": "在侧边栏中隐藏",
"hide_in_sidebar_description": "阻止此标签在应用的侧边栏中显示。",
"hide_location_from_view": "隐藏位置和内容的视图",
"home": "主页",
"image_labeler_ai_model": "图像标签识别AI模型",
"image_labeler_ai_model_description": "用于识别图像中对象的模型。较大的模型更准确但速度较慢。",
"import": "导入",
@@ -176,6 +178,8 @@
"install_update": "安装更新",
"installed": "已安装",
"item_size": "项目大小",
"item_with_count_one": "{{count}} 项目",
"item_with_count_other": "{{count}} 项目",
"job_has_been_canceled": "作业已取消。",
"job_has_been_paused": "作业已暂停。",
"job_has_been_removed": "作业已移除。",
@@ -190,16 +194,21 @@
"keybinds_description": "查看和管理客户端键绑定",
"keys": "密钥",
"kilometers": "千米",
"labels": "标签",
"language": "语言",
"language_description": "更改Spacedrive界面的语言",
"learn_more_about_telemetry": "了解更多有关遥测的信息",
"libraries": "库",
"libraries_description": "数据库包含所有库数据和文件元数据。",
"library": "库",
"library_name": "库名称",
"library_overview": "库概览",
"library_settings": "库设置",
"library_settings_description": "与当前活动库相关的一般设置。",
"list_view": "列表视图",
"list_view_notice_description": "通过列表视图轻松导航您的文件和文件夹。这种视图以简单、有组织的列表形式显示文件,让您能够快速定位和访问所需文件。",
"loading": "正在加载",
"local": "本地",
"local_locations": "本地位置",
"local_node": "本地节点",
"location_display_name_info": "此位置的名称,这是将显示在侧边栏的名称。不会重命名磁盘上的实际文件夹。",
@@ -221,6 +230,7 @@
"media_view_context": "媒体视图上下文",
"media_view_notice_description": "轻松发现照片和视频,媒体视图将从当前位置开始显示结果,包括子目录。",
"meet_contributors_behind_spacedrive": "结识Spacedrive背后的贡献者",
"meet_title": "遇见 {{title}}",
"miles": "英里",
"mode": "模式",
"modified": "已修改",
@@ -231,6 +241,7 @@
"name": "名称",
"navigate_back": "回退",
"navigate_forward": "前进",
"network": "网络",
"network_page_description": "您的局域网上的其他Spacedrive节点将显示在这里以及您的默认操作系统网络挂载。",
"networking": "网络",
"networking_port": "网络端口",
@@ -261,6 +272,7 @@
"open_settings": "打开设置",
"open_with": "打开方式",
"or": "或",
"overview": "概览",
"pair": "配对",
"pairing_with_node": "正在与{{node}}配对",
"paste": "粘贴",
@@ -275,6 +287,7 @@
"quick_preview": "快速预览",
"quick_view": "快速查看",
"recent_jobs": "最近的作业",
"recents": "最近使用",
"regen_labels": "重新生成标签",
"regen_thumbnails": "重新生成缩略图",
"regenerate_thumbs": "重新生成缩略图",
@@ -296,6 +309,7 @@
"running": "运行中",
"save": "保存",
"save_changes": "保存更改",
"saved_searches": "保存的搜索",
"search_extensions": "搜索扩展",
"secure_delete": "安全删除",
"security": "安全",
@@ -304,6 +318,10 @@
"settings": "设置",
"setup": "设置",
"share": "分享",
"share_anonymous_usage": "分享匿名使用情况",
"share_anonymous_usage_description": "分享完全匿名的遥测数据,帮助开发者改进应用程序",
"share_bare_minimum": "分享最基本信息",
"share_bare_minimum_description": "只分享我是Spacedrive的活跃用户和一些技术细节",
"sharing": "共享",
"sharing_description": "管理有权访问您的库的人。",
"show_details": "显示详情",
@@ -336,6 +354,7 @@
"type": "类型",
"ui_animations": "用户界面动画",
"ui_animations_description": "打开和关闭时对话框和其他用户界面元素将产生动画效果。",
"unnamed_location": "未命名位置",
"usage": "使用情况",
"usage_description": "您的库使用情况和硬件信息",
"value": "值",
@@ -345,7 +364,5 @@
"your_account": "您的账户",
"your_account_description": "Spacedrive账号和信息。",
"your_local_network": "您的本地网络",
"your_privacy": "您的隐私",
"item_with_count_one": "{{count}} 项目",
"item_with_count_other": "{{count}} 项目"
"your_privacy": "您的隐私"
}

View File

@@ -1,5 +1,4 @@
{
"meet_title": "會見 {{title}}",
"about": "關於",
"about_vision_text": "我們中的許多人都擁有數個雲帳戶這些雲帳戶中的硬碟未備份且資料面臨丟失的風險。我們依賴諸如Google照片和iCloud之類的雲服務但這些服務容量有限且幾乎不能在不同的服務及作業系統間進行互通。相簿不應僅限於某個裝置生態系統內或被用於收集廣告數據。它們應該是與作業系統無關永久且屬於個人所有的。我們創建的數據是我們的遺產它們將比我們存活得更久——開源技術是確保我們對定義我們生活的數據擁有絕對控制權的唯一方式並且無限規模地延伸。",
"about_vision_title": "遠景",
@@ -91,6 +90,7 @@
"description": "描述",
"deselect": "取消選擇",
"details": "詳情",
"devices": "設備",
"devices_coming_soon_tooltip": "即將推出這個alpha版本不包括圖書館同步它將很快準備好。",
"direction": "方向",
"disabled": "已禁用",
@@ -141,6 +141,7 @@
"failed_to_resume_job": "恢復工作失敗。",
"failed_to_update_location_settings": "更新位置設置失敗",
"favorite": "最愛",
"favorites": "收藏夾",
"file_indexing_rules": "文件索引規則",
"filters": "篩選器",
"forward": "前進",
@@ -164,6 +165,7 @@
"hide_in_sidebar": "在側邊欄中隱藏",
"hide_in_sidebar_description": "防止此標籤在應用的側欄中顯示。",
"hide_location_from_view": "從視圖中隱藏位置和內容",
"home": "主頁",
"image_labeler_ai_model": "圖像標籤識別AI模型",
"image_labeler_ai_model_description": "用於識別圖像中對象的模型。模型越大,準確性越高,但速度越慢。",
"import": "導入",
@@ -175,6 +177,8 @@
"install_update": "安裝更新",
"installed": "已安裝",
"item_size": "項目大小",
"item_with_count_one": "{{count}} 项目",
"item_with_count_other": "{{count}} 项目",
"job_has_been_canceled": "工作已取消。",
"job_has_been_paused": "工作已暫停。",
"job_has_been_removed": "工作已移除。",
@@ -189,16 +193,21 @@
"keybinds_description": "查看和管理客戶端鍵綁定",
"keys": "鍵",
"kilometers": "公里",
"labels": "標籤",
"language": "語言",
"language_description": "更改Spacedrive界面的語言",
"learn_more_about_telemetry": "了解更多關於遙測的信息",
"libraries": "圖書館",
"libraries_description": "數據庫包含所有圖書館數據和文件元數據。",
"library": "圖書館",
"library_name": "圖書館名稱",
"library_overview": "圖書館概覽",
"library_settings": "圖書館設置",
"library_settings_description": "與當前活躍圖書館相關的通用設置。",
"list_view": "列表視圖",
"list_view_notice_description": "使用列表視圖輕鬆導航您的文件和文件夾。這個視圖以簡單、有組織的列表格式顯示您的文件,幫助您快速定位和訪問所需文件。",
"loading": "加載中",
"local": "本地",
"local_locations": "本地位置",
"local_node": "本地節點",
"location_display_name_info": "這個位置的名稱,這是在側邊欄中顯示的內容。不會重命名磁碟上的實際文件夾。",
@@ -220,6 +229,7 @@
"media_view_context": "媒體視圖上下文",
"media_view_notice_description": "輕鬆發現照片和視頻,媒體視圖會從當前位置(包括子目錄)顯示結果。",
"meet_contributors_behind_spacedrive": "認識Spacedrive背後的貢獻者",
"meet_title": "會見 {{title}}",
"miles": "英里",
"mode": "模式",
"modified": "已修改",
@@ -230,6 +240,7 @@
"name": "名稱",
"navigate_back": "後退",
"navigate_forward": "前進",
"network": "網絡",
"network_page_description": "您局域網上的其他Spacedrive節點將顯示在這裡以及您預設的OS網絡掛載。",
"networking": "網絡",
"networking_port": "網絡端口",
@@ -260,6 +271,7 @@
"open_settings": "打開設置",
"open_with": "打開方式",
"or": "或者",
"overview": "概覽",
"pair": "配對",
"pairing_with_node": "正在與{{node}}配對",
"paste": "貼上",
@@ -274,6 +286,7 @@
"quick_preview": "快速預覽",
"quick_view": "快速查看",
"recent_jobs": "最近的工作",
"recents": "最近的文件",
"regen_labels": "重新生成標籤",
"regen_thumbnails": "重新生成縮略圖",
"regenerate_thumbs": "重新生成縮略圖",
@@ -295,6 +308,7 @@
"running": "運行",
"save": "保存",
"save_changes": "保存變更",
"saved_searches": "已保存的搜索",
"search_extensions": "搜索擴展",
"secure_delete": "安全刪除",
"security": "安全",
@@ -303,6 +317,10 @@
"settings": "設置",
"setup": "設定",
"share": "分享",
"share_anonymous_usage": "分享匿名使用情況",
"share_anonymous_usage_description": "分享完全匿名的遙測數據,以幫助開發人員改進應用程序",
"share_bare_minimum": "分享最低限度",
"share_bare_minimum_description": "僅分享我是Spacedrive的活躍用戶和一些技術細節",
"sharing": "共享",
"sharing_description": "管理誰可以訪問您的圖書館。",
"show_details": "顯示詳情",
@@ -335,6 +353,7 @@
"type": "類型",
"ui_animations": "UI動畫",
"ui_animations_description": "對話框和其它UI元素在打開和關閉時會有動畫效果。",
"unnamed_location": "未命名位置",
"usage": "使用情況",
"usage_description": "您的圖書館使用情況和硬體資訊。",
"value": "值",
@@ -344,7 +363,5 @@
"your_account": "您的帳戶",
"your_account_description": "Spacedrive帳戶和資訊。",
"your_local_network": "您的本地網路",
"your_privacy": "您的隱私",
"item_with_count_one": "{{count}} 项目",
"item_with_count_other": "{{count}} 项目"
"your_privacy": "您的隱私"
}

View File

@@ -39,6 +39,7 @@
"dayjs": "^1.11.10",
"framer-motion": "^10.16.4",
"i18next": "^23.7.10",
"i18next-browser-languagedetector": "^7.2.0",
"immer": "^10.0.3",
"prismjs": "^1.29.0",
"react": "^18.2.0",

BIN
pnpm-lock.yaml generated
View File

Binary file not shown.

View File

@@ -5,7 +5,6 @@
"modules": [
"https://cdn.jsdelivr.net/npm/@inlang/plugin-i18next@latest/dist/index.js",
"https://cdn.jsdelivr.net/npm/@inlang/message-lint-rule-empty-pattern@1/dist/index.js",
"https://cdn.jsdelivr.net/npm/@inlang/message-lint-rule-identical-pattern@1/dist/index.js",
"https://cdn.jsdelivr.net/npm/@inlang/message-lint-rule-without-source@1/dist/index.js",
"https://cdn.jsdelivr.net/npm/@inlang/message-lint-rule-missing-translation@1/dist/index.js"
],