console files: hold unmount while a game runs, hold eject during transfers, pinned in Go to path

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RxCGb8Asp1A1AQYiv1kbgS
This commit is contained in:
phantomptrandClaude Opus 5.5 committed 2026-10-17 11:31:45 -07:00
1 parent 5fa4afeb55
commit a1d1692ef0
57 files changed
+550 -116

No files matched your search

+8
View File
@@ -592,6 +592,14 @@ button {
text-overflow: ellipsis;
white-space: nowrap;
}
.cw-goto-pinned {
margin-top: 0.6rem;
max-height: 14rem;
overflow-y: auto;
}
.cw-goto-pinned > .cw-dim {
margin: 0 0 0.3rem;
}
.cw-row-action {
flex: none;
margin: 0 0.4rem;
+9 -1
View File
@@ -86,6 +86,7 @@ export function DriveList({
onUnmount,
onPlaceActions,
onGoTo,
unmountHeld,
}: {
volumes: Volume[] | null;
error: boolean;
@@ -98,6 +99,8 @@ export function DriveList({
onUnmount?: (path: string) => void;
onPlaceActions?: (path: string) => void;
onGoTo?: () => void;
/** Why Unmount is held now (a game is running), shown in its place. */
unmountHeld?: string | null;
}) {
const all = volumes ?? [];
const drives = all.filter(isDrive);
@@ -208,7 +211,12 @@ export function DriveList({
</span>
<span className="cw-file-meta cw-dim">{formatBytes(v.total_bytes)}</span>
</button>
{onUnmount ? (
{onUnmount && unmountHeld ? (
<span className="cw-dim cw-row-action" data-unmount-held={v.path}>
{unmountHeld}
</span>
) : null}
{onUnmount && !unmountHeld ? (
<button
type="button"
className="cw-focusable cw-button cw-row-action"
+81 -12
View File
@@ -20,6 +20,7 @@ import { InfoDialog } from "./InfoDialog";
import {
copyItems,
deleteItems,
isInside,
fixPermItems,
joinPath,
moveItems,
@@ -89,6 +90,18 @@ export function filesErrorText(err: unknown): string | null {
return errorText(err);
}
/**
* Why the USB drive at `vol` must not be ejected now, or null. The page's own
* batch says what it touches; the helper's job list does not say where a job
* writes, so any other running job (a PC upload, a job a stopped batch left
* running) holds every eject until it ends.
*/
export function ejectBlocker(vol: string, batch: Busy | null, jobs: Job[]): string | null {
if (batch?.paths?.some((p) => isInside(p, vol))) return t("cw_files_eject_blocked_batch");
if (jobs.some((j) => j.state === "running" && (!j.mine || !batch))) return t("cw_files_eject_blocked_jobs");
return null;
}
/** Why an eject, unmount or pin did not work, by the helper's error code. */
export function volumeErrorText(err: unknown): string | null {
if (err instanceof ApiError) {
@@ -98,6 +111,7 @@ export function volumeErrorText(err: unknown): string | null {
if (err.code === "fs_unmount_not_our_mount") return t("cw_files_unmount_not_ours");
if (err.code === "system_volume") return t("cw_files_unmount_system");
if (err.code === "prefs_full") return t("cw_files_pin_full");
if (err.code === "game_running") return t("cw_files_unmount_game");
}
return filesErrorText(err);
}
@@ -128,6 +142,8 @@ export interface FilesViewProps {
onEject?: (path: string, force: boolean) => void;
onUnmount?: (path: string) => void;
onGoTo?: (path: string) => void;
/** A game is running (Home's status): Unmount is held (it would take the game's image away). */
gameRunning?: boolean;
/** Stop the running batch before its next item. */
onStopBatch?: () => void;
onOpen: (path: string | null) => void;
@@ -169,6 +185,27 @@ function sheetActions(names: string[], entries: Entry[], pinned: boolean | null)
return out;
}
/** Go to path's pinned folders: one button each, ✕ opens it. */
export function PinnedChoices({ paths, onOpen }: { paths: string[]; onOpen: (path: string) => void }) {
return (
<div className="cw-goto-pinned">
<p className="cw-dim">{t("cw_files_goto_pinned")}</p>
<ul className="cw-files" data-nav-list aria-label={t("cw_files_goto_pinned")}>
{paths.map((x) => (
<li key={x} className="cw-file is-plain" data-nav-item>
<button type="button" className="cw-focusable cw-file-main" data-goto-pin={x} onClick={() => onOpen(x)}>
<Star className="cw-file-icon is-pinned" aria-hidden />
<span className="cw-file-text">
<span className="cw-dim cw-mono cw-file-sub">{x}</span>
</span>
</button>
</li>
))}
</ul>
</div>
);
}
/** The modals of the drive list level (and Go to path, at any level). */
function placeAskView(p: FilesViewProps) {
const a = p.ask;
@@ -211,8 +248,8 @@ function placeAskView(p: FilesViewProps) {
body={t("cw_files_unmount_body")}
confirmLabel={t("cw_files_unmount")}
danger
busy={p.askBusy}
error={p.askError}
busy={p.askBusy || p.gameRunning}
error={p.gameRunning ? t("cw_files_unmount_game") : p.askError}
onConfirm={() => p.onUnmount?.(a.path)}
onCancel={p.onDismiss}
/>
@@ -226,6 +263,7 @@ function placeAskView(p: FilesViewProps) {
check={checkFolder}
onSubmit={(v) => p.onGoTo?.(typedPath(v) ?? v)}
onCancel={p.onDismiss}
extra={p.prefs?.favorites.length ? <PinnedChoices paths={p.prefs.favorites} onOpen={(x) => p.onGoTo?.(x)} /> : null}
/>
);
default:
@@ -434,6 +472,7 @@ export function FilesView(p: FilesViewProps) {
onRetry={p.onRetryVolumes}
onEject={p.onEject ? (path) => p.onAsk({ kind: "eject", path, force: false }) : undefined}
onUnmount={p.onUnmount ? (path) => p.onAsk({ kind: "unmount", path }) : undefined}
unmountHeld={p.gameRunning ? t("cw_files_unmount_game") : null}
onPlaceActions={(path) => p.onAsk({ kind: "place", path })}
onGoTo={p.onGoTo ? () => p.onAsk({ kind: "goto" }) : undefined}
/>
@@ -719,7 +758,12 @@ export function Files({ ctx }: { ctx: SectionContext }) {
);
const runBatch = useCallback(
(op: Busy["op"], names: string[], work: (items: string[], opts: BatchOptions) => Promise<BatchResult>) => {
(
op: Busy["op"],
names: string[],
work: (items: string[], opts: BatchOptions) => Promise<BatchResult>,
destDir?: string,
) => {
if (path == null || currentBatch()) return;
const items = names.map((n) => joinPath(path, n));
// The dialog closes at once: the batch runs on (one item at a time) with its progress and Stop
@@ -728,8 +772,12 @@ export function Files({ ctx }: { ctx: SectionContext }) {
setMessage(null);
setSelecting(false);
setSelected([]);
const run = startBatch(op, items.length, (ctl) =>
work(items, { onProgress: ctl.onProgress, stopped: ctl.stopped, waitJob: (id) => waitJob(id, ctl.stopped) }),
const run = startBatch(
op,
items.length,
(ctl) =>
work(items, { onProgress: ctl.onProgress, stopped: ctl.stopped, waitJob: (id) => waitJob(id, ctl.stopped) }),
destDir != null ? items.concat(destDir) : items,
);
run?.then(
(r) => {
@@ -754,7 +802,7 @@ export function Files({ ctx }: { ctx: SectionContext }) {
const onPicked = useCallback(
(op: "copy" | "move", names: string[], destDir: string) => {
setAsk(null);
runBatch(op, names, (items, opts) => (op === "copy" ? copyItems : moveItems)(items, destDir, opts));
runBatch(op, names, (items, opts) => (op === "copy" ? copyItems : moveItems)(items, destDir, opts), destDir);
},
[runBatch],
);
@@ -831,7 +879,11 @@ export function Files({ ctx }: { ctx: SectionContext }) {
}
const vp = active.closest("[data-volume]")?.getAttribute("data-volume");
const v = vp ? (volumes ?? []).find((x) => x.path === vp) : undefined;
if (v && canEject(v)) setAsk({ kind: "eject", path: v.path, force: false });
if (v && canEject(v)) {
const held = ejectBlocker(v.path, currentBatch(), jobs);
if (held) setMessage({ tone: "error", text: held });
else setAsk({ kind: "eject", path: v.path, force: false });
}
else if (v && isImage(v)) setAsk({ kind: "unmount", path: v.path });
return true;
}
@@ -850,7 +902,7 @@ export function Files({ ctx }: { ctx: SectionContext }) {
}
return false;
}),
[path, volumes, selecting, selected, goUp, onToggleItem, onToggleSelecting, refresh],
[path, volumes, jobs, selecting, selected, goUp, onToggleItem, onToggleSelecting, refresh],
);
const onDismiss = useCallback(() => {
@@ -910,25 +962,36 @@ export function Files({ ctx }: { ctx: SectionContext }) {
);
const onEject = useCallback(
(p: string, force: boolean) =>
(p: string, force: boolean) => {
const held = ejectBlocker(p, currentBatch(), jobs);
if (held) {
setAskError(held);
return;
}
volumeCall("/api/volumes/eject", { path: p, force }, t("cw_files_eject_done", { path: p }), (e) => {
// The PS5's own services usually hold a USB drive open: ask once more, to eject anyway.
if (force || !(e instanceof ApiError) || e.code !== "usb_eject_busy") return false;
setAsk({ kind: "eject", path: p, force: true });
return true;
}),
[volumeCall],
});
},
[volumeCall, jobs],
);
const gameRunning = ctx.status?.running != null;
const onUnmount = useCallback(
(p: string) => {
if (isSystemVolume(p)) {
setAskError(t("cw_files_unmount_system"));
return;
}
if (gameRunning) {
setAskError(t("cw_files_unmount_game"));
return;
}
volumeCall("/api/volumes/unmount", { path: p }, t("cw_files_unmount_done", { path: p }));
},
[volumeCall],
[volumeCall, gameRunning],
);
const onGoTo = useCallback(
@@ -966,6 +1029,7 @@ export function Files({ ctx }: { ctx: SectionContext }) {
onEject={onEject}
onUnmount={onUnmount}
onGoTo={onGoTo}
gameRunning={gameRunning}
onStopBatch={stopBatch}
onOpen={(p) => go(p)}
onUp={goUp}
@@ -978,6 +1042,11 @@ export function Files({ ctx }: { ctx: SectionContext }) {
onAsk={(a) => {
setMessage(null);
setAskError(null);
const held = a.kind === "eject" ? ejectBlocker(a.path, currentBatch(), jobs) : null;
if (held) {
setMessage({ tone: "error", text: held });
return;
}
setAsk(a);
}}
onDismiss={onDismiss}
+17 -2
View File
@@ -1,4 +1,4 @@
import { useState } from "react";
import { useEffect, useRef, useState, type ReactNode } from "react";
import { t } from "../strings";
import { Modal } from "../ui/Modal";
import { validName } from "./move";
@@ -18,6 +18,7 @@ export function TextPrompt({
initial,
fieldLabel,
check = checkName,
extra,
onSubmit,
onCancel,
}: {
@@ -26,12 +27,22 @@ export function TextPrompt({
/** The box's label; default "Name". */
fieldLabel?: string;
check?: (value: string) => string | null | Promise<string | null>;
/** Shown under the box (Go to path's pinned folders). */
extra?: ReactNode;
onSubmit: (value: string) => void;
onCancel: () => void;
}) {
const [value, setValue] = useState(initial);
const [bad, setBad] = useState<string | null>(null);
const [checking, setChecking] = useState(false);
/** False once the prompt is gone: a check that answers late (after Cancel) does nothing. */
const mounted = useRef(true);
useEffect(() => {
mounted.current = true;
return () => {
mounted.current = false;
};
}, []);
const submit = () => {
if (checking) return;
const r = check(value);
@@ -43,11 +54,14 @@ export function TextPrompt({
setChecking(true);
r.then(
(why) => {
if (!mounted.current) return;
setChecking(false);
if (why != null) setBad(why);
else onSubmit(value);
},
() => setChecking(false),
() => {
if (mounted.current) setChecking(false);
},
);
};
return (
@@ -80,6 +94,7 @@ export function TextPrompt({
{bad}
</p>
) : null}
{extra}
<div className="cw-dialog-buttons">
<button type="button" className="cw-focusable cw-button" onClick={onCancel}>
<span>{t("cw_dialog_cancel")}</span>
+13
View File
@@ -88,6 +88,19 @@ describe("the page's one batch", () => {
expect(currentBatch()).toBeNull();
});
it("keeps what it touches while it runs (eject reads it)", async () => {
let release: () => void = () => undefined;
const gate = new Promise<void>((res) => (release = res));
const run = startBatch("copy", 1, async () => {
await gate;
return empty();
}, ["/data/a", "/mnt/usb0"]);
expect(currentBatch()?.paths).toEqual(["/data/a", "/mnt/usb0"]);
release();
await run;
expect(currentBatch()).toBeNull();
});
it("ends even when the work throws", async () => {
const run = startBatch("move", 2, async () => {
throw new Error("boom");
+4 -1
View File
@@ -25,6 +25,8 @@ export interface BatchProgress {
total: number;
/** Stop was asked: no further item is sent. */
stopping: boolean;
/** What it reads and writes: its items and (copy/move) the destination folder. */
paths?: string[];
}
/** How often a running job is checked. */
@@ -119,10 +121,11 @@ export function startBatch(
op: BatchOp,
total: number,
work: (ctl: BatchControl) => Promise<BatchResult>,
paths?: string[],
): Promise<BatchResult> | null {
if (progress) return null;
stopAsked = false;
progress = { op, at: 0, total, stopping: false };
progress = { op, at: 0, total, stopping: false, ...(paths ? { paths } : {}) };
emit();
const ctl: BatchControl = {
onProgress: (at, n) => {
+74 -1
View File
@@ -13,7 +13,9 @@ import { t } from "../strings";
import { ConfirmDialog } from "../ui/ConfirmDialog";
import { ActionsSheet } from "./ActionsSheet";
import { canEject, DriveList, isImage, isSystemVolume, placeLabel } from "./DriveList";
import { FilesView, volumeErrorText, type FilesViewProps } from "./Files";
import { ejectBlocker, FilesView, PinnedChoices, volumeErrorText, type FilesViewProps } from "./Files";
import { createPrefsApplier } from "./prefs";
import type { Job } from "../home/useJobs";
import { PathBar } from "./PathBar";
import { barItems, checkFolder, pathSegments, typedPath } from "./pathParts";
import { cleanPath, EMPTY_PREFS, isPinned, toPrefs, type FilesPrefs } from "./prefs";
@@ -183,6 +185,21 @@ describe("path bar", () => {
const q = props({ ask: { kind: "goto" } });
expect(elements(FilesView(q)).find((e) => e.type === TextPrompt)!.props.initial).toBe("/");
});
it("go to path lists the pinned folders as buttons; ✕ opens one", () => {
const p = props({ path: "/data", ask: { kind: "goto" } });
const prompt = elements(FilesView(p)).find((e) => e.type === TextPrompt)!;
const extra = prompt.props.extra as ReactElement<{ paths: string[]; onOpen: (x: string) => void }>;
expect(extra.type).toBe(PinnedChoices);
expect(extra.props.paths).toEqual(PREFS.favorites);
const buttons = elements(PinnedChoices(extra.props)).filter((e) => e.props["data-goto-pin"]);
expect(buttons.map((b) => b.props["data-goto-pin"])).toEqual(PREFS.favorites);
(buttons[1].props.onClick as () => void)();
expect(p.onGoTo).toHaveBeenCalledWith("/data");
// Nothing pinned: no list.
const none = props({ ask: { kind: "goto" }, prefs: EMPTY_PREFS });
expect(elements(FilesView(none)).find((e) => e.type === TextPrompt)!.props.extra).toBeNull();
});
});
describe("pinned and recent", () => {
@@ -314,6 +331,62 @@ describe("eject and unmount", () => {
expect(p.onUnmount).toHaveBeenCalledWith("/mnt/ps5upload/game.exfat");
});
it("unmount is held while a game runs", () => {
const html = renderToStaticMarkup(<FilesView {...props({ gameRunning: true })} />);
expect(html).not.toContain("data-unmount=");
expect(html).toContain('data-unmount-held="/mnt/ps5upload/game.exfat"');
expect(html).toContain(t("cw_files_unmount_game"));
const p = props({ gameRunning: true, ask: { kind: "unmount", path: "/mnt/ps5upload/game.exfat" } });
const d = elements(FilesView(p)).find((e) => e.type === ConfirmDialog)!;
expect(d.props.busy).toBe(true); // ✕ on Unmount does nothing
expect(d.props.error).toBe(t("cw_files_unmount_game"));
expect(volumeErrorText(new ApiError(409, "game_running"))).toBe(t("cw_files_unmount_game"));
});
it("eject is held while the page's batch or any transfer uses the drive", () => {
const job = (over: Partial<Job>): Job => ({
job: "a".repeat(32),
kind: "copy",
state: "running",
files_done: 0,
files_total: 1,
bytes_done: 0,
bytes_total: 1,
mine: true,
...over,
});
const batch = (paths: string[]) => ({ op: "copy" as const, at: 1, total: 2, stopping: false, paths });
expect(ejectBlocker("/mnt/usb0", null, [])).toBeNull();
// The page's batch copies onto the drive, or from it.
expect(ejectBlocker("/mnt/usb0", batch(["/data/a", "/mnt/usb0/games"]), [job({})])).toBe(
t("cw_files_eject_blocked_batch"),
);
expect(ejectBlocker("/mnt/usb0", batch(["/mnt/usb0/a", "/data"]), [])).toBe(t("cw_files_eject_blocked_batch"));
// A batch elsewhere: its own job does not hold this drive.
expect(ejectBlocker("/mnt/usb0", batch(["/data/a", "/mnt/ext1"]), [job({})])).toBeNull();
// A PC upload (where it writes is not listed), or a job a stopped batch left running, holds it.
expect(ejectBlocker("/mnt/usb0", null, [job({ kind: "upload", mine: false })])).toBe(t("cw_files_eject_blocked_jobs"));
expect(ejectBlocker("/mnt/usb0", null, [job({})])).toBe(t("cw_files_eject_blocked_jobs"));
expect(ejectBlocker("/mnt/usb0", null, [job({ state: "done", mine: false })])).toBeNull();
// "/mnt/usb0" is not inside "/mnt/usb01".
expect(ejectBlocker("/mnt/usb0", batch(["/mnt/usb01/x"]), [])).toBeNull();
});
it("prefs answers arriving out of order: the older one is dropped", async () => {
const seen: string[][] = [];
const apply = createPrefsApplier((p) => seen.push(p.recent));
let first: (v: unknown) => void = () => {};
mockCall.mockImplementationOnce(() => new Promise((res) => (first = res)) as never);
mockCall.mockResolvedValueOnce({ favorites: [], recent: ["/b", "/a"], last: "/b" } as never);
const a = apply("visit", "/a");
await apply("visit", "/b");
first({ favorites: [], recent: ["/a"], last: "/a" });
await a;
expect(seen).toEqual([["/b", "/a"]]);
mockCall.mockRejectedValueOnce(new ApiError(409, "prefs_full"));
await expect(apply("pin", "/c")).rejects.toThrow();
});
it("the helper's refusals read as what to do", () => {
expect(volumeErrorText(new ApiError(409, "usb_eject_busy"))).toBe(t("cw_files_eject_busy"));
expect(volumeErrorText(new ApiError(409, "fs_unmount_busy"))).toBe(t("cw_files_unmount_busy"));
+21 -2
View File
@@ -48,6 +48,23 @@ export function isPinned(prefs: FilesPrefs | null, path: string | null): boolean
return !!prefs && path != null && prefs.favorites.includes(cleanPath(path));
}
/**
* Changes as numbered requests: an answer older than the last one applied is
* dropped (two quick visits whose answers arrive out of order must not leave
* the older list showing). Rejects with the helper's error.
*/
export function createPrefsApplier(onPrefs: (p: FilesPrefs) => void) {
let sent = 0;
let applied = 0;
return async (op: PrefsOp, path: string): Promise<void> => {
const n = ++sent;
const p = await changePrefs(op, path);
if (n <= applied) return;
applied = n;
onPrefs(p);
};
}
export interface PrefsState {
/** null until the first answer (or when the helper has no prefs routes: then it stays null). */
prefs: FilesPrefs | null;
@@ -89,9 +106,11 @@ export function usePrefs(): PrefsState {
};
}, []);
/** One numbered sequence for this Files (set on mount). */
const applier = useRef<ReturnType<typeof createPrefsApplier> | null>(null);
const apply = useCallback(async (op: PrefsOp, path: string) => {
const p = await changePrefs(op, path);
if (live.current) setPrefs(p);
if (!applier.current) applier.current = createPrefsApplier((p) => live.current && setPrefs(p));
await applier.current(op, path);
}, []);
const pin = useCallback((path: string) => apply("pin", path), [apply]);
+6 -2
View File
@@ -51,11 +51,13 @@
"cw_files_done": "تم.",
"cw_files_drives": "محركات الأقراص",
"cw_files_eject": "إخراج",
"cw_files_eject_body": "يُلغى تركيب محرك الأقراص حتى تتمكن من فصله. أغلق أولًا أي لعبة أو تطبيق يستخدمه.",
"cw_files_eject_blocked_batch": "لا يزال تطبيق الملفات ينسخ أو ينقل أو يحذف على هذا المحرك. أخرجه عند الانتهاء.",
"cw_files_eject_blocked_jobs": "هناك عملية نقل جارية. أخرج محرك الأقراص بعد انتهائها.",
"cw_files_eject_body": "يُلغى تركيب محرك الأقراص حتى تتمكن من فصله. أغلق أولًا أي لعبة أو تطبيق يقرأ منه أو يكتب إليه.",
"cw_files_eject_busy": "محرك الأقراص لا يزال قيد الاستخدام.",
"cw_files_eject_done": "تم إخراج {path}. يمكنك فصل محرك الأقراص.",
"cw_files_eject_force": "إخراج على أي حال",
"cw_files_eject_force_body": "يُبقي PS5 محرك الأقراص مفتوحًا، وغالبًا ما تفعل ذلك خدماته الخاصة. الإخراج على أي حال يحفظ كل شيء على المحرك أولًا، لذا فهو آمن ما دامت لا توجد لعبة أو تطبيق يقرأ منه الآن.",
"cw_files_eject_force_body": "يُبقي PS5 محرك الأقراص مفتوحًا، وغالبًا ما تفعل ذلك خدماته الخاصة. الإخراج على أي حال يحفظ كل شيء على المحرك أولًا، لذا فهو آمن ما دامت لا توجد لعبة أو تطبيق يقرأ منه أو يكتب إليه الآن.",
"cw_files_eject_force_title": "{path} لا يزال قيد الاستخدام. هل تريد الإخراج على أي حال؟",
"cw_files_eject_gone": "لم يعد محرك الأقراص هذا متصلًا.",
"cw_files_eject_title": "إخراج {path}؟",
@@ -78,6 +80,7 @@
"cw_files_goto_label": "المسار (يبدأ بـ /)",
"cw_files_goto_missing": "لا يوجد مجلد في هذا المسار.",
"cw_files_goto_not_folder": "هذا ملف وليس مجلدًا.",
"cw_files_goto_pinned": "المجلدات المثبّتة",
"cw_files_here": "هنا",
"cw_files_images": "الصور المركّبة",
"cw_files_info": "معلومات",
@@ -120,6 +123,7 @@
"cw_files_unmount_body": "ستتوقف اللعبة التي تعمل من هذه الصورة، وستغيب ملفاتها حتى يُعاد تركيب الصورة.",
"cw_files_unmount_busy": "الصورة قيد الاستخدام. أغلق اللعبة التي تستخدمها أولًا.",
"cw_files_unmount_done": "تم إلغاء تركيب {path}.",
"cw_files_unmount_game": "أغلق اللعبة أولًا.",
"cw_files_unmount_not_ours": "لا يمكن هنا إلغاء تركيب إلا الصور التي ركّبها PS5Upload.",
"cw_files_unmount_system": "لا يمكن إلغاء تركيب وحدة التخزين الخاصة بالجهاز.",
"cw_files_unmount_title": "إلغاء تركيب {path}؟",
+6 -2
View File
@@ -51,11 +51,13 @@
"cw_files_done": "সম্পন্ন।",
"cw_files_drives": "ড্রাইভ",
"cw_files_eject": "বের করুন",
"cw_files_eject_body": "ড্রাইভটি আনমাউন্ট করা হয় যাতে আপনি এটি খুলে নিতে পারেন। আগে এটি ব্যবহার করা যেকোনো গেম বা অ্যাপ বন্ধ করুন।",
"cw_files_eject_blocked_batch": "ফাইলস এখনও এই ড্রাইভে কপি, সরানো বা মোছার কাজ করছে। শেষ হলে বের করুন।",
"cw_files_eject_blocked_jobs": "একটি ট্রান্সফার চলছে। শেষ হলে ড্রাইভটি বের করুন।",
"cw_files_eject_body": "ড্রাইভটি আনমাউন্ট করা হয় যাতে আপনি এটি খুলে নিতে পারেন। আগে যেকোনো গেম বা অ্যাপ বন্ধ করুন যা এটি থেকে পড়ছে বা এতে লিখছে।",
"cw_files_eject_busy": "ড্রাইভটি এখনও ব্যবহৃত হচ্ছে।",
"cw_files_eject_done": "{path} বের করা হয়েছে। এখন ড্রাইভটি খুলে নিতে পারেন।",
"cw_files_eject_force": "তবুও বের করুন",
"cw_files_eject_force_body": "PS5 ড্রাইভটি খোলা রাখে; সাধারণত এর নিজস্ব সার্ভিসগুলো এটা করে। তবুও বের করলে আগে সবকিছু ড্রাইভে সেভ হয়, তাই এই মুহূর্তে কোনো গেম বা অ্যাপ এটি থেকে না পড়লে এটি নিরাপদ।",
"cw_files_eject_force_body": "PS5 ড্রাইভটি খোলা রাখে; সাধারণত এর নিজস্ব সার্ভিসগুলো এটা করে। তবুও বের করলে আগে সবকিছু ড্রাইভে সেভ হয়, তাই এই মুহূর্তে কোনো গেম বা অ্যাপ এটি থেকে না পড়লে বা এতে না লিখলে এটি নিরাপদ।",
"cw_files_eject_force_title": "{path} এখনও ব্যবহৃত হচ্ছে। তবুও বের করবেন?",
"cw_files_eject_gone": "ওই ড্রাইভটি আর সংযুক্ত নেই।",
"cw_files_eject_title": "{path} বের করবেন?",
@@ -78,6 +80,7 @@
"cw_files_goto_label": "পাথ (/ দিয়ে শুরু)",
"cw_files_goto_missing": "ওই পাথে কোনো ফোল্ডার নেই।",
"cw_files_goto_not_folder": "এটি একটি ফাইল, ফোল্ডার নয়।",
"cw_files_goto_pinned": "পিন করা ফোল্ডার",
"cw_files_here": "এখানে",
"cw_files_images": "মাউন্ট করা ইমেজ",
"cw_files_info": "তথ্য",
@@ -120,6 +123,7 @@
"cw_files_unmount_body": "এই ইমেজ থেকে চলা গেম বন্ধ হয়ে যাবে, এবং ইমেজটি আবার মাউন্ট না হওয়া পর্যন্ত এর ফাইলগুলো থাকবে না।",
"cw_files_unmount_busy": "ইমেজটি ব্যবহৃত হচ্ছে। আগে যে গেমটি এটি ব্যবহার করছে সেটি বন্ধ করুন।",
"cw_files_unmount_done": "{path} আনমাউন্ট করা হয়েছে।",
"cw_files_unmount_game": "আগে গেমটি বন্ধ করুন।",
"cw_files_unmount_not_ours": "এখানে শুধু PS5Upload-এর মাউন্ট করা ইমেজই আনমাউন্ট করা যায়।",
"cw_files_unmount_system": "কনসোলের নিজস্ব স্টোরেজ আনমাউন্ট করা যায় না।",
"cw_files_unmount_title": "{path} আনমাউন্ট করবেন?",
+6 -2
View File
@@ -51,11 +51,13 @@
"cw_files_done": "Fertig.",
"cw_files_drives": "Laufwerke",
"cw_files_eject": "Auswerfen",
"cw_files_eject_body": "Das Laufwerk wird ausgehängt, damit du es abziehen kannst. Beende vorher jedes Spiel und jede App, die es nutzt.",
"cw_files_eject_blocked_batch": "Dateien kopiert, verschiebt oder löscht noch auf diesem Laufwerk. Wirf es aus, wenn das fertig ist.",
"cw_files_eject_blocked_jobs": "Eine Übertragung läuft. Wirf das Laufwerk aus, wenn sie fertig ist.",
"cw_files_eject_body": "Das Laufwerk wird ausgehängt, damit du es abziehen kannst. Beende vorher jedes Spiel und jede App, die davon liest oder darauf schreibt.",
"cw_files_eject_busy": "Das Laufwerk wird noch verwendet.",
"cw_files_eject_done": "{path} ausgeworfen. Du kannst das Laufwerk abziehen.",
"cw_files_eject_force": "Trotzdem auswerfen",
"cw_files_eject_force_body": "Die PS5 hält das Laufwerk offen; das tun meist ihre eigenen Dienste. Beim erzwungenen Auswerfen wird zuerst alles auf das Laufwerk geschrieben. Das ist sicher, solange gerade kein Spiel und keine App davon liest.",
"cw_files_eject_force_body": "Die PS5 hält das Laufwerk offen; das tun meist ihre eigenen Dienste. Beim erzwungenen Auswerfen wird zuerst alles auf das Laufwerk geschrieben. Das ist sicher, solange gerade kein Spiel und keine App davon liest oder darauf schreibt.",
"cw_files_eject_force_title": "{path} wird noch verwendet. Trotzdem auswerfen?",
"cw_files_eject_gone": "Dieses Laufwerk ist nicht mehr verbunden.",
"cw_files_eject_title": "{path} auswerfen?",
@@ -78,6 +80,7 @@
"cw_files_goto_label": "Pfad (beginnt mit /)",
"cw_files_goto_missing": "Unter diesem Pfad gibt es keinen Ordner.",
"cw_files_goto_not_folder": "Das ist eine Datei, kein Ordner.",
"cw_files_goto_pinned": "Angeheftete Ordner",
"cw_files_here": "Hierher",
"cw_files_images": "Eingebundene Images",
"cw_files_info": "Info",
@@ -120,6 +123,7 @@
"cw_files_unmount_body": "Ein Spiel, das von diesem Image läuft, wird beendet, und seine Dateien fehlen, bis das Image wieder eingebunden ist.",
"cw_files_unmount_busy": "Das Image wird verwendet. Beende zuerst das Spiel, das es nutzt.",
"cw_files_unmount_done": "{path} ausgehängt.",
"cw_files_unmount_game": "Beende zuerst das Spiel.",
"cw_files_unmount_not_ours": "Hier lassen sich nur Images aushängen, die PS5Upload eingebunden hat.",
"cw_files_unmount_system": "Der eigene Speicher der Konsole kann nicht ausgehängt werden.",
"cw_files_unmount_title": "{path} aushängen?",
+6 -2
View File
@@ -51,11 +51,13 @@
"cw_files_done": "Done.",
"cw_files_drives": "Drives",
"cw_files_eject": "Eject",
"cw_files_eject_body": "The drive is unmounted so you can unplug it. Close any game or app that uses it first.",
"cw_files_eject_blocked_batch": "Files is still copying, moving or deleting on this drive. Eject it when that is done.",
"cw_files_eject_blocked_jobs": "A transfer is running. Eject the drive after it finishes.",
"cw_files_eject_body": "The drive is unmounted so you can unplug it. First close any game or app that is reading from or writing to it.",
"cw_files_eject_busy": "The drive is still in use.",
"cw_files_eject_done": "{path} ejected. You can unplug the drive.",
"cw_files_eject_force": "Eject anyway",
"cw_files_eject_force_body": "The PS5 keeps the drive open; its own services usually do. Ejecting anyway saves everything to the drive first, so it is safe as long as no game or app is reading from it right now.",
"cw_files_eject_force_body": "The PS5 keeps the drive open; its own services usually do. Ejecting anyway saves everything to the drive first, so it is safe as long as no game or app is reading from or writing to it right now.",
"cw_files_eject_force_title": "{path} is still in use. Eject anyway?",
"cw_files_eject_gone": "That drive is no longer connected.",
"cw_files_eject_title": "Eject {path}?",
@@ -78,6 +80,7 @@
"cw_files_goto_label": "Path (starts with /)",
"cw_files_goto_missing": "There is no folder at that path.",
"cw_files_goto_not_folder": "That is a file, not a folder.",
"cw_files_goto_pinned": "Pinned folders",
"cw_files_here": "Here",
"cw_files_images": "Mounted images",
"cw_files_info": "Info",
@@ -120,6 +123,7 @@
"cw_files_unmount_body": "A game running from this image will stop, and its files are gone until the image is mounted again.",
"cw_files_unmount_busy": "The image is in use. Close the game that uses it first.",
"cw_files_unmount_done": "{path} unmounted.",
"cw_files_unmount_game": "Close the game first.",
"cw_files_unmount_not_ours": "Only images that PS5Upload mounted can be unmounted here.",
"cw_files_unmount_system": "The console's own storage can't be unmounted.",
"cw_files_unmount_title": "Unmount {path}?",
+6 -2
View File
@@ -51,11 +51,13 @@
"cw_files_done": "Hecho.",
"cw_files_drives": "Unidades",
"cw_files_eject": "Expulsar",
"cw_files_eject_body": "La unidad se desmonta para que puedas desconectarla. Cierra antes cualquier juego o app que la use.",
"cw_files_eject_blocked_batch": "Archivos todavía está copiando, moviendo o borrando en esta unidad. Expúlsala cuando termine.",
"cw_files_eject_blocked_jobs": "Hay una transferencia en curso. Expulsa la unidad cuando termine.",
"cw_files_eject_body": "La unidad se desmonta para que puedas desconectarla. Cierra antes cualquier juego o app que esté leyendo o escribiendo en ella.",
"cw_files_eject_busy": "La unidad sigue en uso.",
"cw_files_eject_done": "{path} expulsada. Ya puedes desconectar la unidad.",
"cw_files_eject_force": "Expulsar de todos modos",
"cw_files_eject_force_body": "La PS5 mantiene la unidad abierta; normalmente lo hacen sus propios servicios. Al expulsar de todos modos, primero se guarda todo en la unidad, así que es seguro mientras ningún juego ni app esté leyendo de ella ahora mismo.",
"cw_files_eject_force_body": "La PS5 mantiene la unidad abierta; normalmente lo hacen sus propios servicios. Al expulsar de todos modos, primero se guarda todo en la unidad, así que es seguro mientras ningún juego ni app esté leyendo o escribiendo en ella ahora mismo.",
"cw_files_eject_force_title": "{path} sigue en uso. ¿Expulsar de todos modos?",
"cw_files_eject_gone": "Esa unidad ya no está conectada.",
"cw_files_eject_title": "¿Expulsar {path}?",
@@ -78,6 +80,7 @@
"cw_files_goto_label": "Ruta (empieza por /)",
"cw_files_goto_missing": "No hay ninguna carpeta en esa ruta.",
"cw_files_goto_not_folder": "Eso es un archivo, no una carpeta.",
"cw_files_goto_pinned": "Carpetas fijadas",
"cw_files_here": "Aquí",
"cw_files_images": "Imágenes montadas",
"cw_files_info": "Información",
@@ -120,6 +123,7 @@
"cw_files_unmount_body": "Un juego que se ejecute desde esta imagen se detendrá, y sus archivos no estarán disponibles hasta que se vuelva a montar la imagen.",
"cw_files_unmount_busy": "La imagen está en uso. Cierra primero el juego que la usa.",
"cw_files_unmount_done": "{path} desmontada.",
"cw_files_unmount_game": "Cierra el juego primero.",
"cw_files_unmount_not_ours": "Aquí solo se pueden desmontar imágenes que montó PS5Upload.",
"cw_files_unmount_system": "El almacenamiento propio de la consola no se puede desmontar.",
"cw_files_unmount_title": "¿Desmontar {path}?",
+6 -2
View File
@@ -51,11 +51,13 @@
"cw_files_done": "انجام شد.",
"cw_files_drives": "درایوها",
"cw_files_eject": "بیرون دادن",
"cw_files_eject_body": "درایو پیاده می‌شود تا بتوانید آن را جدا کنید. اول هر بازی یا برنامه‌ای را که از آن استفاده می‌کند ببندید.",
"cw_files_eject_blocked_batch": "فایل‌ها هنوز روی این درایو در حال کپی، جابه‌جایی یا حذف است. وقتی تمام شد بیرونش بدهید.",
"cw_files_eject_blocked_jobs": "یک انتقال در حال اجراست. پس از پایان آن درایو را بیرون بدهید.",
"cw_files_eject_body": "درایو پیاده می‌شود تا بتوانید آن را جدا کنید. اول هر بازی یا برنامه‌ای را که از آن می‌خواند یا روی آن می‌نویسد ببندید.",
"cw_files_eject_busy": "درایو هنوز در حال استفاده است.",
"cw_files_eject_done": "{path} بیرون داده شد. می‌توانید درایو را جدا کنید.",
"cw_files_eject_force": "با این حال بیرون بده",
"cw_files_eject_force_body": "PS5 درایو را باز نگه داشته است؛ معمولاً سرویس‌های خودش این کار را می‌کنند. بیرون دادن اجباری اول همه چیز را روی درایو ذخیره می‌کند، پس تا وقتی هیچ بازی یا برنامه‌ای همین الان از آن نمی‌خواند امن است.",
"cw_files_eject_force_body": "PS5 درایو را باز نگه داشته است؛ معمولاً سرویس‌های خودش این کار را می‌کنند. بیرون دادن اجباری اول همه چیز را روی درایو ذخیره می‌کند، پس تا وقتی هیچ بازی یا برنامه‌ای همین الان از آن نمی‌خواند یا روی آن نمی‌نویسد امن است.",
"cw_files_eject_force_title": "{path} هنوز در حال استفاده است. با این حال بیرون داده شود؟",
"cw_files_eject_gone": "این درایو دیگر وصل نیست.",
"cw_files_eject_title": "{path} بیرون داده شود؟",
@@ -78,6 +80,7 @@
"cw_files_goto_label": "مسیر (با / شروع می‌شود)",
"cw_files_goto_missing": "در این مسیر پوشه‌ای وجود ندارد.",
"cw_files_goto_not_folder": "این یک فایل است، نه پوشه.",
"cw_files_goto_pinned": "پوشه‌های سنجاق‌شده",
"cw_files_here": "اینجا",
"cw_files_images": "ایمیج‌های سوارشده",
"cw_files_info": "اطلاعات",
@@ -120,6 +123,7 @@
"cw_files_unmount_body": "بازی‌ای که از این ایمیج اجرا می‌شود متوقف می‌شود و فایل‌هایش تا سوار شدن دوبارهٔ ایمیج در دسترس نیستند.",
"cw_files_unmount_busy": "ایمیج در حال استفاده است. اول بازی‌ای را که از آن استفاده می‌کند ببندید.",
"cw_files_unmount_done": "{path} پیاده شد.",
"cw_files_unmount_game": "اول بازی را ببندید.",
"cw_files_unmount_not_ours": "اینجا فقط ایمیج‌هایی را که PS5Upload سوار کرده می‌توان پیاده کرد.",
"cw_files_unmount_system": "فضای ذخیره‌سازی خود کنسول را نمی‌توان پیاده کرد.",
"cw_files_unmount_title": "{path} پیاده شود؟",
+6 -2
View File
@@ -51,11 +51,13 @@
"cw_files_done": "Terminé.",
"cw_files_drives": "Disques",
"cw_files_eject": "Éjecter",
"cw_files_eject_body": "Le disque est démonté pour que tu puisses le débrancher. Ferme d'abord tout jeu ou toute appli qui l'utilise.",
"cw_files_eject_blocked_batch": "Fichiers copie, déplace ou supprime encore sur ce disque. Éjecte-le quand ce sera fini.",
"cw_files_eject_blocked_jobs": "Un transfert est en cours. Éjecte le disque quand il sera terminé.",
"cw_files_eject_body": "Le disque est démonté pour que tu puisses le débrancher. Ferme d'abord tout jeu ou toute appli qui le lit ou y écrit.",
"cw_files_eject_busy": "Le disque est encore utilisé.",
"cw_files_eject_done": "{path} éjecté. Tu peux débrancher le disque.",
"cw_files_eject_force": "Éjecter quand même",
"cw_files_eject_force_body": "La PS5 garde le disque ouvert ; ses propres services le font souvent. Éjecter quand même enregistre d'abord tout sur le disque : c'est sans risque tant qu'aucun jeu ni appli ne le lit en ce moment.",
"cw_files_eject_force_body": "La PS5 garde le disque ouvert ; ses propres services le font souvent. Éjecter quand même enregistre d'abord tout sur le disque : c'est sans risque tant qu'aucun jeu ni appli ne le lit ou n'y écrit en ce moment.",
"cw_files_eject_force_title": "{path} est encore utilisé. Éjecter quand même ?",
"cw_files_eject_gone": "Ce disque n'est plus connecté.",
"cw_files_eject_title": "Éjecter {path} ?",
@@ -78,6 +80,7 @@
"cw_files_goto_label": "Chemin (commence par /)",
"cw_files_goto_missing": "Il n'y a aucun dossier à ce chemin.",
"cw_files_goto_not_folder": "C'est un fichier, pas un dossier.",
"cw_files_goto_pinned": "Dossiers épinglés",
"cw_files_here": "Ici",
"cw_files_images": "Images montées",
"cw_files_info": "Infos",
@@ -120,6 +123,7 @@
"cw_files_unmount_body": "Un jeu lancé depuis cette image s'arrêtera, et ses fichiers seront absents jusqu'à ce que l'image soit de nouveau montée.",
"cw_files_unmount_busy": "L'image est utilisée. Ferme d'abord le jeu qui l'utilise.",
"cw_files_unmount_done": "{path} démonté.",
"cw_files_unmount_game": "Ferme d'abord le jeu.",
"cw_files_unmount_not_ours": "Seules les images montées par PS5Upload peuvent être démontées ici.",
"cw_files_unmount_system": "Le stockage propre de la console ne peut pas être démonté.",
"cw_files_unmount_title": "Démonter {path} ?",
+6 -2
View File
@@ -51,11 +51,13 @@
"cw_files_done": "हो गया।",
"cw_files_drives": "ड्राइव",
"cw_files_eject": "निकालें",
"cw_files_eject_body": "ड्राइव अनमाउंट की जाती है ताकि आप उसे निकाल सकें। पहले उसे इस्तेमाल करने वाला हर गेम या ऐप बंद करें।",
"cw_files_eject_blocked_batch": "फ़ाइलें अभी भी इस ड्राइव पर कॉपी, मूव या डिलीट कर रही हैं। यह पूरा होने पर निकालें।",
"cw_files_eject_blocked_jobs": "एक ट्रांसफ़र चल रहा है। उसके पूरा होने के बाद ड्राइव निकालें।",
"cw_files_eject_body": "ड्राइव अनमाउंट की जाती है ताकि आप उसे निकाल सकें। पहले वह हर गेम या ऐप बंद करें जो उससे पढ़ रहा हो या उस पर लिख रहा हो।",
"cw_files_eject_busy": "ड्राइव अभी भी उपयोग में है।",
"cw_files_eject_done": "{path} निकाल दिया गया। अब आप ड्राइव निकाल सकते हैं।",
"cw_files_eject_force": "फिर भी निकालें",
"cw_files_eject_force_body": "PS5 ड्राइव को खुला रखता है; आमतौर पर उसकी अपनी सेवाएँ ऐसा करती हैं। फिर भी निकालने पर पहले सब कुछ ड्राइव पर सहेजा जाता है, इसलिए यह तब तक सुरक्षित है जब तक इस समय कोई गेम या ऐप उससे पढ़ नहीं रहा।",
"cw_files_eject_force_body": "PS5 ड्राइव को खुला रखता है; आमतौर पर उसकी अपनी सेवाएँ ऐसा करती हैं। फिर भी निकालने पर पहले सब कुछ ड्राइव पर सहेजा जाता है, इसलिए यह तब तक सुरक्षित है जब तक इस समय कोई गेम या ऐप उससे पढ़ या उस पर लिख नहीं रहा।",
"cw_files_eject_force_title": "{path} अभी भी उपयोग में है। फिर भी निकालें?",
"cw_files_eject_gone": "वह ड्राइव अब कनेक्ट नहीं है।",
"cw_files_eject_title": "{path} निकालें?",
@@ -78,6 +80,7 @@
"cw_files_goto_label": "पथ (/ से शुरू)",
"cw_files_goto_missing": "उस पथ पर कोई फ़ोल्डर नहीं है।",
"cw_files_goto_not_folder": "यह फ़ाइल है, फ़ोल्डर नहीं।",
"cw_files_goto_pinned": "पिन किए गए फ़ोल्डर",
"cw_files_here": "यहाँ",
"cw_files_images": "माउंट की गई इमेज",
"cw_files_info": "जानकारी",
@@ -120,6 +123,7 @@
"cw_files_unmount_body": "इस इमेज से चल रहा गेम रुक जाएगा, और इमेज दोबारा माउंट होने तक उसकी फ़ाइलें उपलब्ध नहीं रहेंगी।",
"cw_files_unmount_busy": "इमेज उपयोग में है। पहले उसे इस्तेमाल करने वाला गेम बंद करें।",
"cw_files_unmount_done": "{path} अनमाउंट किया गया।",
"cw_files_unmount_game": "पहले गेम बंद करें।",
"cw_files_unmount_not_ours": "यहाँ केवल वही इमेज अनमाउंट हो सकती हैं जिन्हें PS5Upload ने माउंट किया था।",
"cw_files_unmount_system": "कंसोल का अपना स्टोरेज अनमाउंट नहीं किया जा सकता।",
"cw_files_unmount_title": "{path} अनमाउंट करें?",
+6 -2
View File
@@ -51,11 +51,13 @@
"cw_files_done": "Kész.",
"cw_files_drives": "Meghajtók",
"cw_files_eject": "Kiadás",
"cw_files_eject_body": "A meghajtót leválasztjuk, hogy kihúzhasd. Előbb zárj be minden játékot és alkalmazást, amely használja.",
"cw_files_eject_blocked_batch": "A Fájlok még másol, áthelyez vagy töröl ezen a meghajtón. Ha végzett, add ki.",
"cw_files_eject_blocked_jobs": "Átvitel van folyamatban. Ha befejeződött, add ki a meghajtót.",
"cw_files_eject_body": "A meghajtót leválasztjuk, hogy kihúzhasd. Előbb zárj be minden játékot és alkalmazást, amely olvas róla vagy ír rá.",
"cw_files_eject_busy": "A meghajtó még használatban van.",
"cw_files_eject_done": "{path} kiadva. Kihúzhatod a meghajtót.",
"cw_files_eject_force": "Kiadás mégis",
"cw_files_eject_force_body": "A PS5 nyitva tartja a meghajtót; általában a saját szolgáltatásai. A kényszerített kiadás előbb mindent a meghajtóra ír, így biztonságos, amíg éppen egy játék vagy alkalmazás sem olvas róla.",
"cw_files_eject_force_body": "A PS5 nyitva tartja a meghajtót; általában a saját szolgáltatásai. A kényszerített kiadás előbb mindent a meghajtóra ír, így biztonságos, amíg éppen egy játék vagy alkalmazás sem olvas róla és nem ír rá.",
"cw_files_eject_force_title": "{path} még használatban van. Kiadod mégis?",
"cw_files_eject_gone": "Ez a meghajtó már nincs csatlakoztatva.",
"cw_files_eject_title": "Kiadod: {path}?",
@@ -78,6 +80,7 @@
"cw_files_goto_label": "Útvonal (/ jellel kezdődik)",
"cw_files_goto_missing": "Ezen az útvonalon nincs mappa.",
"cw_files_goto_not_folder": "Ez egy fájl, nem mappa.",
"cw_files_goto_pinned": "Kitűzött mappák",
"cw_files_here": "Ide",
"cw_files_images": "Csatolt képfájlok",
"cw_files_info": "Adatok",
@@ -120,6 +123,7 @@
"cw_files_unmount_body": "Az erről a képfájlról futó játék leáll, és a fájljai addig nem érhetők el, amíg a képfájlt újra nem csatolják.",
"cw_files_unmount_busy": "A képfájl használatban van. Előbb zárd be a játékot, amely használja.",
"cw_files_unmount_done": "{path} leválasztva.",
"cw_files_unmount_game": "Előbb zárd be a játékot.",
"cw_files_unmount_not_ours": "Itt csak a PS5Upload által csatolt képfájlok választhatók le.",
"cw_files_unmount_system": "A konzol saját tárhelye nem választható le.",
"cw_files_unmount_title": "Leválasztod: {path}?",
+6 -2
View File
@@ -51,11 +51,13 @@
"cw_files_done": "Selesai.",
"cw_files_drives": "Drive",
"cw_files_eject": "Keluarkan",
"cw_files_eject_body": "Drive dilepas agar bisa dicabut. Tutup dulu game atau aplikasi yang memakainya.",
"cw_files_eject_blocked_batch": "File masih menyalin, memindahkan, atau menghapus di drive ini. Keluarkan setelah selesai.",
"cw_files_eject_blocked_jobs": "Ada transfer yang berjalan. Keluarkan drive setelah selesai.",
"cw_files_eject_body": "Drive dilepas agar bisa dicabut. Tutup dulu game atau aplikasi yang sedang membaca atau menulis ke drive itu.",
"cw_files_eject_busy": "Drive masih digunakan.",
"cw_files_eject_done": "{path} dikeluarkan. Drive bisa dicabut.",
"cw_files_eject_force": "Tetap keluarkan",
"cw_files_eject_force_body": "PS5 membiarkan drive tetap terbuka; biasanya layanan bawaannya sendiri. Tetap mengeluarkan akan menyimpan semuanya ke drive terlebih dahulu, jadi aman selama tidak ada game atau aplikasi yang sedang membacanya.",
"cw_files_eject_force_body": "PS5 membiarkan drive tetap terbuka; biasanya layanan bawaannya sendiri. Tetap mengeluarkan akan menyimpan semuanya ke drive terlebih dahulu, jadi aman selama tidak ada game atau aplikasi yang sedang membaca atau menulis ke drive itu.",
"cw_files_eject_force_title": "{path} masih digunakan. Tetap keluarkan?",
"cw_files_eject_gone": "Drive itu sudah tidak terhubung.",
"cw_files_eject_title": "Keluarkan {path}?",
@@ -78,6 +80,7 @@
"cw_files_goto_label": "Jalur (diawali /)",
"cw_files_goto_missing": "Tidak ada folder di jalur itu.",
"cw_files_goto_not_folder": "Itu file, bukan folder.",
"cw_files_goto_pinned": "Folder yang disematkan",
"cw_files_here": "Di sini",
"cw_files_images": "Image yang terpasang",
"cw_files_info": "Info",
@@ -120,6 +123,7 @@
"cw_files_unmount_body": "Game yang berjalan dari image ini akan berhenti, dan filenya hilang sampai image dipasang lagi.",
"cw_files_unmount_busy": "Image sedang digunakan. Tutup dulu game yang memakainya.",
"cw_files_unmount_done": "{path} dilepas.",
"cw_files_unmount_game": "Tutup game-nya dulu.",
"cw_files_unmount_not_ours": "Di sini hanya image yang dipasang PS5Upload yang bisa dilepas.",
"cw_files_unmount_system": "Penyimpanan bawaan konsol tidak bisa dilepas.",
"cw_files_unmount_title": "Lepas {path}?",
+6 -2
View File
@@ -51,11 +51,13 @@
"cw_files_done": "Fatto.",
"cw_files_drives": "Unità",
"cw_files_eject": "Espelli",
"cw_files_eject_body": "L'unità viene smontata così puoi scollegarla. Chiudi prima qualsiasi gioco o app che la usa.",
"cw_files_eject_blocked_batch": "File sta ancora copiando, spostando o eliminando su questa unità. Espellila quando ha finito.",
"cw_files_eject_blocked_jobs": "È in corso un trasferimento. Espelli l'unità quando è finito.",
"cw_files_eject_body": "L'unità viene smontata così puoi scollegarla. Chiudi prima qualsiasi gioco o app che ci stia leggendo o scrivendo.",
"cw_files_eject_busy": "L'unità è ancora in uso.",
"cw_files_eject_done": "{path} espulsa. Puoi scollegare l'unità.",
"cw_files_eject_force": "Espelli comunque",
"cw_files_eject_force_body": "La PS5 tiene aperta l'unità; di solito lo fanno i suoi servizi. Espellendo comunque, prima viene salvato tutto sull'unità: è sicuro finché nessun gioco o app ci sta leggendo in questo momento.",
"cw_files_eject_force_body": "La PS5 tiene aperta l'unità; di solito lo fanno i suoi servizi. Espellendo comunque, prima viene salvato tutto sull'unità: è sicuro finché nessun gioco o app ci sta leggendo o scrivendo in questo momento.",
"cw_files_eject_force_title": "{path} è ancora in uso. Espellere comunque?",
"cw_files_eject_gone": "Quell'unità non è più collegata.",
"cw_files_eject_title": "Espellere {path}?",
@@ -78,6 +80,7 @@
"cw_files_goto_label": "Percorso (inizia con /)",
"cw_files_goto_missing": "Non esiste nessuna cartella in quel percorso.",
"cw_files_goto_not_folder": "Questo è un file, non una cartella.",
"cw_files_goto_pinned": "Cartelle fissate",
"cw_files_here": "Qui",
"cw_files_images": "Immagini montate",
"cw_files_info": "Info",
@@ -120,6 +123,7 @@
"cw_files_unmount_body": "Un gioco avviato da questa immagine si fermerà, e i suoi file non ci saranno finché l'immagine non verrà montata di nuovo.",
"cw_files_unmount_busy": "L'immagine è in uso. Chiudi prima il gioco che la usa.",
"cw_files_unmount_done": "{path} smontata.",
"cw_files_unmount_game": "Chiudi prima il gioco.",
"cw_files_unmount_not_ours": "Qui si possono smontare solo le immagini montate da PS5Upload.",
"cw_files_unmount_system": "La memoria interna della console non si può smontare.",
"cw_files_unmount_title": "Smontare {path}?",
+6 -2
View File
@@ -51,11 +51,13 @@
"cw_files_done": "完了しました。",
"cw_files_drives": "ドライブ",
"cw_files_eject": "取り出し",
"cw_files_eject_body": "ドライブを抜けるようにマウントを解除します。先に、使っているゲームやアプリを終了してください。",
"cw_files_eject_blocked_batch": "ファイルがこのドライブでコピー・移動・削除を続けています。終わってから取り出してください。",
"cw_files_eject_blocked_jobs": "転送が実行中です。終わってからドライブを取り出してください。",
"cw_files_eject_body": "ドライブを抜けるようにマウントを解除します。先に、ドライブを読み書きしているゲームやアプリを終了してください。",
"cw_files_eject_busy": "ドライブはまだ使用中です。",
"cw_files_eject_done": "{path} を取り出しました。ドライブを抜いてかまいません。",
"cw_files_eject_force": "それでも取り出す",
"cw_files_eject_force_body": "PS5 がドライブを開いたままにしています(たいてい本体のサービスです)。強制的に取り出すと先にすべてをドライブに書き込むので、今ゲームやアプリが読み込んでいなければ安全です。",
"cw_files_eject_force_body": "PS5 がドライブを開いたままにしています(たいてい本体のサービスです)。強制的に取り出すと先にすべてをドライブに書き込むので、今ゲームやアプリがドライブを読み書きしていなければ安全です。",
"cw_files_eject_force_title": "{path} はまだ使用中です。それでも取り出しますか?",
"cw_files_eject_gone": "そのドライブはもう接続されていません。",
"cw_files_eject_title": "{path} を取り出しますか?",
@@ -78,6 +80,7 @@
"cw_files_goto_label": "パス(/ で始まる)",
"cw_files_goto_missing": "そのパスにフォルダーはありません。",
"cw_files_goto_not_folder": "それはファイルで、フォルダーではありません。",
"cw_files_goto_pinned": "ピン留めしたフォルダー",
"cw_files_here": "ここ",
"cw_files_images": "マウント中のイメージ",
"cw_files_info": "情報",
@@ -120,6 +123,7 @@
"cw_files_unmount_body": "このイメージから起動しているゲームは停止し、イメージを再びマウントするまでそのファイルは使えなくなります。",
"cw_files_unmount_busy": "イメージは使用中です。先に使っているゲームを終了してください。",
"cw_files_unmount_done": "{path} のマウントを解除しました。",
"cw_files_unmount_game": "先にゲームを終了してください。",
"cw_files_unmount_not_ours": "ここでマウント解除できるのは PS5Upload がマウントしたイメージだけです。",
"cw_files_unmount_system": "本体のストレージはマウント解除できません。",
"cw_files_unmount_title": "{path} のマウントを解除しますか?",
+6 -2
View File
@@ -51,11 +51,13 @@
"cw_files_done": "완료했습니다.",
"cw_files_drives": "드라이브",
"cw_files_eject": "꺼내기",
"cw_files_eject_body": "드라이브를 뽑을 수 있도록 마운트를 해제합니다. 먼저 드라이브를 쓰는 게임이나 앱을 종료하세요.",
"cw_files_eject_blocked_batch": "파일이 아직 이 드라이브에서 복사, 이동 또는 삭제 중입니다. 끝난 뒤 꺼내세요.",
"cw_files_eject_blocked_jobs": "전송이 진행 중입니다. 끝난 뒤 드라이브를 꺼내세요.",
"cw_files_eject_body": "드라이브를 뽑을 수 있도록 마운트를 해제합니다. 먼저 드라이브를 읽거나 쓰고 있는 게임이나 앱을 종료하세요.",
"cw_files_eject_busy": "드라이브가 아직 사용 중입니다.",
"cw_files_eject_done": "{path}을(를) 꺼냈습니다. 드라이브를 뽑아도 됩니다.",
"cw_files_eject_force": "그래도 꺼내기",
"cw_files_eject_force_body": "PS5가 드라이브를 열어 두고 있습니다. 보통 본체 서비스 때문입니다. 그래도 꺼내면 먼저 모든 내용을 드라이브에 기록하므로, 지금 드라이브를 읽고 있는 게임이나 앱이 없다면 안전합니다.",
"cw_files_eject_force_body": "PS5가 드라이브를 열어 두고 있습니다. 보통 본체 서비스 때문입니다. 그래도 꺼내면 먼저 모든 내용을 드라이브에 기록하므로, 지금 드라이브를 읽거나 쓰고 있는 게임이나 앱이 없다면 안전합니다.",
"cw_files_eject_force_title": "{path}이(가) 아직 사용 중입니다. 그래도 꺼낼까요?",
"cw_files_eject_gone": "그 드라이브는 더 이상 연결되어 있지 않습니다.",
"cw_files_eject_title": "{path}을(를) 꺼낼까요?",
@@ -78,6 +80,7 @@
"cw_files_goto_label": "경로(/로 시작)",
"cw_files_goto_missing": "그 경로에 폴더가 없습니다.",
"cw_files_goto_not_folder": "폴더가 아니라 파일입니다.",
"cw_files_goto_pinned": "고정된 폴더",
"cw_files_here": "여기",
"cw_files_images": "마운트된 이미지",
"cw_files_info": "정보",
@@ -120,6 +123,7 @@
"cw_files_unmount_body": "이 이미지에서 실행 중인 게임은 멈추고, 이미지를 다시 마운트할 때까지 그 파일을 쓸 수 없습니다.",
"cw_files_unmount_busy": "이미지가 사용 중입니다. 사용 중인 게임을 먼저 종료하세요.",
"cw_files_unmount_done": "{path} 마운트를 해제했습니다.",
"cw_files_unmount_game": "먼저 게임을 종료하세요.",
"cw_files_unmount_not_ours": "여기서는 PS5Upload가 마운트한 이미지만 해제할 수 있습니다.",
"cw_files_unmount_system": "본체 자체 저장소는 마운트 해제할 수 없습니다.",
"cw_files_unmount_title": "{path} 마운트를 해제할까요?",
+6 -2
View File
@@ -51,11 +51,13 @@
"cw_files_done": "Gotowe.",
"cw_files_drives": "Dyski",
"cw_files_eject": "Wysuń",
"cw_files_eject_body": "Dysk zostanie odmontowany, aby można go było odłączyć. Najpierw zamknij gry i aplikacje, które z niego korzystają.",
"cw_files_eject_blocked_batch": "Pliki wciąż kopiują, przenoszą lub usuwają dane na tym dysku. Wysuń go, gdy to się skończy.",
"cw_files_eject_blocked_jobs": "Trwa przesyłanie. Wysuń dysk, gdy się zakończy.",
"cw_files_eject_body": "Dysk zostanie odmontowany, aby można go było odłączyć. Najpierw zamknij gry i aplikacje, które z niego czytają lub na nim zapisują.",
"cw_files_eject_busy": "Dysk jest nadal używany.",
"cw_files_eject_done": "Wysunięto {path}. Możesz odłączyć dysk.",
"cw_files_eject_force": "Wysuń mimo to",
"cw_files_eject_force_body": "PS5 trzyma dysk otwarty; zwykle robią to jej własne usługi. Wysunięcie mimo to najpierw zapisuje wszystko na dysku, więc jest bezpieczne, o ile żadna gra ani aplikacja właśnie z niego nie czyta.",
"cw_files_eject_force_body": "PS5 trzyma dysk otwarty; zwykle robią to jej własne usługi. Wysunięcie mimo to najpierw zapisuje wszystko na dysku, więc jest bezpieczne, o ile żadna gra ani aplikacja właśnie z niego nie czyta ani na nim nie zapisuje.",
"cw_files_eject_force_title": "{path} jest nadal używany. Wysunąć mimo to?",
"cw_files_eject_gone": "Ten dysk nie jest już podłączony.",
"cw_files_eject_title": "Wysunąć {path}?",
@@ -78,6 +80,7 @@
"cw_files_goto_label": "Ścieżka (zaczyna się od /)",
"cw_files_goto_missing": "Pod tą ścieżką nie ma folderu.",
"cw_files_goto_not_folder": "To jest plik, a nie folder.",
"cw_files_goto_pinned": "Przypięte foldery",
"cw_files_here": "Tutaj",
"cw_files_images": "Zamontowane obrazy",
"cw_files_info": "Informacje",
@@ -120,6 +123,7 @@
"cw_files_unmount_body": "Gra uruchomiona z tego obrazu zatrzyma się, a jej pliki znikną, dopóki obraz nie zostanie ponownie zamontowany.",
"cw_files_unmount_busy": "Obraz jest używany. Najpierw zamknij grę, która z niego korzysta.",
"cw_files_unmount_done": "Odmontowano {path}.",
"cw_files_unmount_game": "Najpierw zamknij grę.",
"cw_files_unmount_not_ours": "Tutaj można odmontować tylko obrazy zamontowane przez PS5Upload.",
"cw_files_unmount_system": "Nie można odmontować pamięci samej konsoli.",
"cw_files_unmount_title": "Odmontować {path}?",
+6 -2
View File
@@ -51,11 +51,13 @@
"cw_files_done": "Concluído.",
"cw_files_drives": "Unidades",
"cw_files_eject": "Ejetar",
"cw_files_eject_body": "A unidade é desmontada para você poder desconectá-la. Feche antes qualquer jogo ou app que a use.",
"cw_files_eject_blocked_batch": "Arquivos ainda está copiando, movendo ou excluindo nesta unidade. Ejete quando terminar.",
"cw_files_eject_blocked_jobs": "Há uma transferência em andamento. Ejete a unidade quando ela terminar.",
"cw_files_eject_body": "A unidade é desmontada para você poder desconectá-la. Feche antes qualquer jogo ou app que esteja lendo ou gravando nela.",
"cw_files_eject_busy": "A unidade ainda está em uso.",
"cw_files_eject_done": "{path} ejetada. Você já pode desconectar a unidade.",
"cw_files_eject_force": "Ejetar mesmo assim",
"cw_files_eject_force_body": "O PS5 mantém a unidade aberta; normalmente são os próprios serviços dele. Ejetar mesmo assim grava tudo na unidade primeiro, então é seguro enquanto nenhum jogo ou app estiver lendo dela agora.",
"cw_files_eject_force_body": "O PS5 mantém a unidade aberta; normalmente são os próprios serviços dele. Ejetar mesmo assim grava tudo na unidade primeiro, então é seguro enquanto nenhum jogo ou app estiver lendo ou gravando nela agora.",
"cw_files_eject_force_title": "{path} ainda está em uso. Ejetar mesmo assim?",
"cw_files_eject_gone": "Essa unidade não está mais conectada.",
"cw_files_eject_title": "Ejetar {path}?",
@@ -78,6 +80,7 @@
"cw_files_goto_label": "Caminho (começa com /)",
"cw_files_goto_missing": "Não há nenhuma pasta nesse caminho.",
"cw_files_goto_not_folder": "Isso é um arquivo, não uma pasta.",
"cw_files_goto_pinned": "Pastas fixadas",
"cw_files_here": "Aqui",
"cw_files_images": "Imagens montadas",
"cw_files_info": "Informações",
@@ -120,6 +123,7 @@
"cw_files_unmount_body": "Um jogo rodando a partir desta imagem vai parar, e os arquivos dele somem até a imagem ser montada de novo.",
"cw_files_unmount_busy": "A imagem está em uso. Feche primeiro o jogo que a usa.",
"cw_files_unmount_done": "{path} desmontada.",
"cw_files_unmount_game": "Feche o jogo primeiro.",
"cw_files_unmount_not_ours": "Aqui só é possível desmontar imagens que o PS5Upload montou.",
"cw_files_unmount_system": "O armazenamento do próprio console não pode ser desmontado.",
"cw_files_unmount_title": "Desmontar {path}?",
+6 -2
View File
@@ -51,11 +51,13 @@
"cw_files_done": "Готово.",
"cw_files_drives": "Накопители",
"cw_files_eject": "Извлечь",
"cw_files_eject_body": "Накопитель будет отключён, чтобы его можно было вынуть. Сначала закройте игры и приложения, которые его используют.",
"cw_files_eject_blocked_batch": "Файлы ещё копируются, перемещаются или удаляются на этом накопителе. Извлеките его, когда это закончится.",
"cw_files_eject_blocked_jobs": "Идёт передача. Извлеките накопитель, когда она закончится.",
"cw_files_eject_body": "Накопитель будет отключён, чтобы его можно было вынуть. Сначала закройте игры и приложения, которые читают с него или пишут на него.",
"cw_files_eject_busy": "Накопитель ещё используется.",
"cw_files_eject_done": "{path} извлечён. Накопитель можно вынуть.",
"cw_files_eject_force": "Всё равно извлечь",
"cw_files_eject_force_body": "PS5 держит накопитель открытым; обычно это делают её собственные службы. При принудительном извлечении всё сначала записывается на накопитель, так что это безопасно, если прямо сейчас с него не читает ни игра, ни приложение.",
"cw_files_eject_force_body": "PS5 держит накопитель открытым; обычно это делают её собственные службы. При принудительном извлечении всё сначала записывается на накопитель, так что это безопасно, если прямо сейчас ни игра, ни приложение не читает с него и не пишет на него.",
"cw_files_eject_force_title": "{path} ещё используется. Всё равно извлечь?",
"cw_files_eject_gone": "Этот накопитель больше не подключён.",
"cw_files_eject_title": "Извлечь {path}?",
@@ -78,6 +80,7 @@
"cw_files_goto_label": "Путь (начинается с /)",
"cw_files_goto_missing": "По этому пути нет папки.",
"cw_files_goto_not_folder": "Это файл, а не папка.",
"cw_files_goto_pinned": "Закреплённые папки",
"cw_files_here": "Сюда",
"cw_files_images": "Подключённые образы",
"cw_files_info": "Сведения",
@@ -120,6 +123,7 @@
"cw_files_unmount_body": "Игра, запущенная из этого образа, остановится, а её файлы будут недоступны, пока образ не подключат снова.",
"cw_files_unmount_busy": "Образ используется. Сначала закройте игру, которая его использует.",
"cw_files_unmount_done": "{path} отключён.",
"cw_files_unmount_game": "Сначала закройте игру.",
"cw_files_unmount_not_ours": "Здесь можно отключить только образы, подключённые PS5Upload.",
"cw_files_unmount_system": "Собственное хранилище консоли отключить нельзя.",
"cw_files_unmount_title": "Отключить {path}?",
+6 -2
View File
@@ -51,11 +51,13 @@
"cw_files_done": "เสร็จแล้ว",
"cw_files_drives": "ไดรฟ์",
"cw_files_eject": "นำออก",
"cw_files_eject_body": "ไดรฟ์จะถูกยกเลิกการเมานต์เพื่อให้ถอดออกได้ ปิดเกมหรือแอปที่ใช้ไดรฟ์นี้ก่อน",
"cw_files_eject_blocked_batch": "ไฟล์ยังคัดลอก ย้าย หรือลบอยู่บนไดรฟ์นี้ นำออกเมื่อเสร็จแล้ว",
"cw_files_eject_blocked_jobs": "มีการถ่ายโอนกำลังทำงานอยู่ นำไดรฟ์ออกเมื่อเสร็จแล้ว",
"cw_files_eject_body": "ไดรฟ์จะถูกยกเลิกการเมานต์เพื่อให้ถอดออกได้ ปิดเกมหรือแอปที่กำลังอ่านหรือเขียนไดรฟ์นี้ก่อน",
"cw_files_eject_busy": "ไดรฟ์ยังถูกใช้งานอยู่",
"cw_files_eject_done": "นำ {path} ออกแล้ว ถอดไดรฟ์ได้เลย",
"cw_files_eject_force": "นำออกเลย",
"cw_files_eject_force_body": "PS5 เปิดไดรฟ์ค้างไว้ ซึ่งมักเป็นบริการของเครื่องเอง การนำออกเลยจะบันทึกทุกอย่างลงไดรฟ์ก่อน จึงปลอดภัยตราบใดที่ตอนนี้ไม่มีเกมหรือแอปใดกำลังอ่านไดรฟ์อยู่",
"cw_files_eject_force_body": "PS5 เปิดไดรฟ์ค้างไว้ ซึ่งมักเป็นบริการของเครื่องเอง การนำออกเลยจะบันทึกทุกอย่างลงไดรฟ์ก่อน จึงปลอดภัยตราบใดที่ตอนนี้ไม่มีเกมหรือแอปใดกำลังอ่านหรือเขียนไดรฟ์อยู่",
"cw_files_eject_force_title": "{path} ยังถูกใช้งานอยู่ นำออกเลยไหม",
"cw_files_eject_gone": "ไดรฟ์นั้นไม่ได้เชื่อมต่ออยู่แล้ว",
"cw_files_eject_title": "นำ {path} ออกไหม",
@@ -78,6 +80,7 @@
"cw_files_goto_label": "พาธ (ขึ้นต้นด้วย /)",
"cw_files_goto_missing": "ไม่มีโฟลเดอร์ที่พาธนั้น",
"cw_files_goto_not_folder": "นั่นเป็นไฟล์ ไม่ใช่โฟลเดอร์",
"cw_files_goto_pinned": "โฟลเดอร์ที่ปักหมุด",
"cw_files_here": "ที่นี่",
"cw_files_images": "อิมเมจที่เมานต์อยู่",
"cw_files_info": "ข้อมูล",
@@ -120,6 +123,7 @@
"cw_files_unmount_body": "เกมที่รันจากอิมเมจนี้จะหยุดทำงาน และไฟล์ของเกมจะหายไปจนกว่าจะเมานต์อิมเมจอีกครั้ง",
"cw_files_unmount_busy": "อิมเมจกำลังถูกใช้งาน ปิดเกมที่ใช้อิมเมจนี้ก่อน",
"cw_files_unmount_done": "ยกเลิกการเมานต์ {path} แล้ว",
"cw_files_unmount_game": "ปิดเกมก่อน",
"cw_files_unmount_not_ours": "ที่นี่ยกเลิกการเมานต์ได้เฉพาะอิมเมจที่ PS5Upload เมานต์ไว้",
"cw_files_unmount_system": "ยกเลิกการเมานต์พื้นที่จัดเก็บของเครื่องเองไม่ได้",
"cw_files_unmount_title": "ยกเลิกการเมานต์ {path} ไหม",
+6 -2
View File
@@ -51,11 +51,13 @@
"cw_files_done": "Tamamlandı.",
"cw_files_drives": "Sürücüler",
"cw_files_eject": "Çıkar",
"cw_files_eject_body": "Sürücünün bağlantısı kesilir, böylece çıkarabilirsiniz. Önce onu kullanan tüm oyun ve uygulamaları kapatın.",
"cw_files_eject_blocked_batch": "Dosyalar bu sürücüde hâlâ kopyalama, taşıma veya silme yapıyor. Bitince çıkarın.",
"cw_files_eject_blocked_jobs": "Bir aktarım sürüyor. Bitince sürücüyü çıkarın.",
"cw_files_eject_body": "Sürücünün bağlantısı kesilir, böylece çıkarabilirsiniz. Önce ondan okuyan veya ona yazan tüm oyun ve uygulamaları kapatın.",
"cw_files_eject_busy": "Sürücü hâlâ kullanımda.",
"cw_files_eject_done": "{path} çıkarıldı. Sürücüyü çıkarabilirsiniz.",
"cw_files_eject_force": "Yine de çıkar",
"cw_files_eject_force_body": "PS5 sürücüyü açık tutuyor; genellikle kendi hizmetleri bunu yapar. Yine de çıkarmak önce her şeyi sürücüye kaydeder; şu anda hiçbir oyun veya uygulama ondan okumuyorsa güvenlidir.",
"cw_files_eject_force_body": "PS5 sürücüyü açık tutuyor; genellikle kendi hizmetleri bunu yapar. Yine de çıkarmak önce her şeyi sürücüye kaydeder; şu anda hiçbir oyun veya uygulama ondan okumuyor ya da ona yazmıyorsa güvenlidir.",
"cw_files_eject_force_title": "{path} hâlâ kullanımda. Yine de çıkarılsın mı?",
"cw_files_eject_gone": "Bu sürücü artık bağlı değil.",
"cw_files_eject_title": "{path} çıkarılsın mı?",
@@ -78,6 +80,7 @@
"cw_files_goto_label": "Yol (/ ile başlar)",
"cw_files_goto_missing": "Bu yolda klasör yok.",
"cw_files_goto_not_folder": "Bu bir dosya, klasör değil.",
"cw_files_goto_pinned": "Sabitlenmiş klasörler",
"cw_files_here": "Buraya",
"cw_files_images": "Bağlı imajlar",
"cw_files_info": "Bilgi",
@@ -120,6 +123,7 @@
"cw_files_unmount_body": "Bu imajdan çalışan bir oyun durur ve imaj yeniden bağlanana kadar dosyaları erişilemez olur.",
"cw_files_unmount_busy": "İmaj kullanımda. Önce onu kullanan oyunu kapatın.",
"cw_files_unmount_done": "{path} bağlantısı kesildi.",
"cw_files_unmount_game": "Önce oyunu kapatın.",
"cw_files_unmount_not_ours": "Burada yalnızca PS5Upload'un bağladığı imajların bağlantısı kesilebilir.",
"cw_files_unmount_system": "Konsolun kendi depolama alanının bağlantısı kesilemez.",
"cw_files_unmount_title": "{path} bağlantısı kesilsin mi?",
+6 -2
View File
@@ -51,11 +51,13 @@
"cw_files_done": "Xong.",
"cw_files_drives": "Ổ đĩa",
"cw_files_eject": "Đẩy ra",
"cw_files_eject_body": "Ổ đĩa được tháo gắn để bạn có thể rút ra. Hãy đóng mọi trò chơi hoặc ứng dụng đang dùng nó trước.",
"cw_files_eject_blocked_batch": "Tệp vẫn đang sao chép, di chuyển hoặc xóa trên ổ này. Hãy đẩy ổ ra khi xong.",
"cw_files_eject_blocked_jobs": "Đang có một lượt truyền. Hãy đẩy ổ ra khi nó xong.",
"cw_files_eject_body": "Ổ đĩa được tháo gắn để bạn có thể rút ra. Trước tiên hãy đóng mọi trò chơi hoặc ứng dụng đang đọc hoặc ghi vào ổ.",
"cw_files_eject_busy": "Ổ đĩa vẫn đang được dùng.",
"cw_files_eject_done": "Đã đẩy {path} ra. Bạn có thể rút ổ đĩa.",
"cw_files_eject_force": "Vẫn đẩy ra",
"cw_files_eject_force_body": "PS5 giữ ổ đĩa mở; thường là do các dịch vụ của chính máy. Vẫn đẩy ra sẽ lưu mọi thứ vào ổ trước, nên an toàn miễn là lúc này không có trò chơi hay ứng dụng nào đang đọc từ ổ.",
"cw_files_eject_force_body": "PS5 giữ ổ đĩa mở; thường là do các dịch vụ của chính máy. Vẫn đẩy ra sẽ lưu mọi thứ vào ổ trước, nên an toàn miễn là lúc này không có trò chơi hay ứng dụng nào đang đọc hoặc ghi vào ổ.",
"cw_files_eject_force_title": "{path} vẫn đang được dùng. Vẫn đẩy ra?",
"cw_files_eject_gone": "Ổ đĩa đó không còn được kết nối.",
"cw_files_eject_title": "Đẩy {path} ra?",
@@ -78,6 +80,7 @@
"cw_files_goto_label": "Đường dẫn (bắt đầu bằng /)",
"cw_files_goto_missing": "Không có thư mục nào ở đường dẫn đó.",
"cw_files_goto_not_folder": "Đó là tệp, không phải thư mục.",
"cw_files_goto_pinned": "Thư mục đã ghim",
"cw_files_here": "Tại đây",
"cw_files_images": "Ảnh đĩa đã gắn",
"cw_files_info": "Thông tin",
@@ -120,6 +123,7 @@
"cw_files_unmount_body": "Trò chơi đang chạy từ ảnh đĩa này sẽ dừng, và các tệp của nó sẽ không còn cho đến khi ảnh đĩa được gắn lại.",
"cw_files_unmount_busy": "Ảnh đĩa đang được dùng. Hãy đóng trò chơi đang dùng nó trước.",
"cw_files_unmount_done": "Đã tháo gắn {path}.",
"cw_files_unmount_game": "Hãy đóng trò chơi trước.",
"cw_files_unmount_not_ours": "Ở đây chỉ tháo gắn được các ảnh đĩa do PS5Upload gắn.",
"cw_files_unmount_system": "Không thể tháo gắn bộ nhớ của chính máy.",
"cw_files_unmount_title": "Tháo gắn {path}?",
+6 -2
View File
@@ -51,11 +51,13 @@
"cw_files_done": "完成。",
"cw_files_drives": "驱动器",
"cw_files_eject": "弹出",
"cw_files_eject_body": "驱动器将被卸载,之后即可拔出。请先关闭正在使用它的游戏或应用。",
"cw_files_eject_blocked_batch": "文件仍在此驱动器上复制、移动或删除。完成后再弹出。",
"cw_files_eject_blocked_jobs": "有传输正在进行。完成后再弹出驱动器。",
"cw_files_eject_body": "驱动器将被卸载,之后即可拔出。请先关闭正在读取或写入它的游戏或应用。",
"cw_files_eject_busy": "驱动器仍在使用中。",
"cw_files_eject_done": "已弹出 {path}。现在可以拔下驱动器。",
"cw_files_eject_force": "仍要弹出",
"cw_files_eject_force_body": "PS5 一直打开着该驱动器,通常是主机自身的服务。强制弹出会先把所有内容写入驱动器,只要此刻没有游戏或应用正在读取它,就是安全的。",
"cw_files_eject_force_body": "PS5 一直打开着该驱动器,通常是主机自身的服务。强制弹出会先把所有内容写入驱动器,只要此刻没有游戏或应用正在读取或写入它,就是安全的。",
"cw_files_eject_force_title": "{path} 仍在使用中。仍要弹出吗?",
"cw_files_eject_gone": "该驱动器已不再连接。",
"cw_files_eject_title": "弹出 {path}?",
@@ -78,6 +80,7 @@
"cw_files_goto_label": "路径(以 / 开头)",
"cw_files_goto_missing": "该路径下没有文件夹。",
"cw_files_goto_not_folder": "这是文件,不是文件夹。",
"cw_files_goto_pinned": "已固定的文件夹",
"cw_files_here": "这里",
"cw_files_images": "已挂载的镜像",
"cw_files_info": "信息",
@@ -120,6 +123,7 @@
"cw_files_unmount_body": "从此镜像运行的游戏会停止,在镜像重新挂载之前其文件将不可用。",
"cw_files_unmount_busy": "镜像正在使用中。请先关闭使用它的游戏。",
"cw_files_unmount_done": "已卸载 {path}。",
"cw_files_unmount_game": "请先关闭游戏。",
"cw_files_unmount_not_ours": "这里只能卸载 PS5Upload 挂载的镜像。",
"cw_files_unmount_system": "无法卸载主机自身的存储。",
"cw_files_unmount_title": "卸载 {path}?",
+6 -2
View File
@@ -51,11 +51,13 @@
"cw_files_done": "完成。",
"cw_files_drives": "磁碟機",
"cw_files_eject": "退出",
"cw_files_eject_body": "磁碟機將被卸載,之後即可拔除。請先關閉正在使用它的遊戲或應用程式。",
"cw_files_eject_blocked_batch": "檔案仍在此磁碟機上複製、移動或刪除。完成後再退出。",
"cw_files_eject_blocked_jobs": "有傳輸正在進行。完成後再退出磁碟機。",
"cw_files_eject_body": "磁碟機將被卸載,之後即可拔除。請先關閉正在讀取或寫入它的遊戲或應用程式。",
"cw_files_eject_busy": "磁碟機仍在使用中。",
"cw_files_eject_done": "已退出 {path}。現在可以拔除磁碟機。",
"cw_files_eject_force": "仍要退出",
"cw_files_eject_force_body": "PS5 一直開啟著該磁碟機,通常是主機本身的服務。強制退出會先把所有內容寫入磁碟機,只要此刻沒有遊戲或應用程式正在讀取它,就是安全的。",
"cw_files_eject_force_body": "PS5 一直開啟著該磁碟機,通常是主機本身的服務。強制退出會先把所有內容寫入磁碟機,只要此刻沒有遊戲或應用程式正在讀取或寫入它,就是安全的。",
"cw_files_eject_force_title": "{path} 仍在使用中。仍要退出嗎?",
"cw_files_eject_gone": "該磁碟機已不再連接。",
"cw_files_eject_title": "退出 {path}?",
@@ -78,6 +80,7 @@
"cw_files_goto_label": "路徑(以 / 開頭)",
"cw_files_goto_missing": "該路徑下沒有資料夾。",
"cw_files_goto_not_folder": "這是檔案,不是資料夾。",
"cw_files_goto_pinned": "已釘選的資料夾",
"cw_files_here": "這裡",
"cw_files_images": "已掛載的映像檔",
"cw_files_info": "資訊",
@@ -120,6 +123,7 @@
"cw_files_unmount_body": "從此映像檔執行的遊戲會停止,在映像檔重新掛載之前其檔案將無法使用。",
"cw_files_unmount_busy": "映像檔正在使用中。請先關閉使用它的遊戲。",
"cw_files_unmount_done": "已卸載 {path}。",
"cw_files_unmount_game": "請先關閉遊戲。",
"cw_files_unmount_not_ours": "這裡只能卸載 PS5Upload 掛載的映像檔。",
"cw_files_unmount_system": "無法卸載主機本身的儲存空間。",
"cw_files_unmount_title": "卸載 {path}?",
+6 -2
View File
@@ -4285,8 +4285,8 @@ c2c_test_deep_bad: "لم يصل الإرسال التجريبي بحجم 4 KiB:
"cw_files_pin_full": "لا مجال لتثبيت مجلدات أخرى. ألغِ تثبيت أحدها أولًا.",
"cw_files_eject_title": "إخراج {path}؟",
"cw_files_eject_force_title": "{path} لا يزال قيد الاستخدام. هل تريد الإخراج على أي حال؟",
"cw_files_eject_body": "يُلغى تركيب محرك الأقراص حتى تتمكن من فصله. أغلق أولًا أي لعبة أو تطبيق يستخدمه.",
"cw_files_eject_force_body": "يُبقي PS5 محرك الأقراص مفتوحًا، وغالبًا ما تفعل ذلك خدماته الخاصة. الإخراج على أي حال يحفظ كل شيء على المحرك أولًا، لذا فهو آمن ما دامت لا توجد لعبة أو تطبيق يقرأ منه الآن.",
"cw_files_eject_body": "يُلغى تركيب محرك الأقراص حتى تتمكن من فصله. أغلق أولًا أي لعبة أو تطبيق يقرأ منه أو يكتب إليه.",
"cw_files_eject_force_body": "يُبقي PS5 محرك الأقراص مفتوحًا، وغالبًا ما تفعل ذلك خدماته الخاصة. الإخراج على أي حال يحفظ كل شيء على المحرك أولًا، لذا فهو آمن ما دامت لا توجد لعبة أو تطبيق يقرأ منه أو يكتب إليه الآن.",
"cw_files_eject_force": "إخراج على أي حال",
"cw_files_unmount_title": "إلغاء تركيب {path}؟",
"cw_files_unmount_body": "ستتوقف اللعبة التي تعمل من هذه الصورة، وستغيب ملفاتها حتى يُعاد تركيب الصورة.",
@@ -4295,6 +4295,10 @@ c2c_test_deep_bad: "لم يصل الإرسال التجريبي بحجم 4 KiB:
"cw_files_eject_done": "تم إخراج {path}. يمكنك فصل محرك الأقراص.",
"cw_files_unmount_done": "تم إلغاء تركيب {path}.",
"cw_files_last_gone": "المجلد الذي فتحته آخر مرة ({path}) لم يعد موجودًا.",
"cw_files_unmount_game": "أغلق اللعبة أولًا.",
"cw_files_eject_blocked_batch": "لا يزال تطبيق الملفات ينسخ أو ينقل أو يحذف على هذا المحرك. أخرجه عند الانتهاء.",
"cw_files_eject_blocked_jobs": "هناك عملية نقل جارية. أخرج محرك الأقراص بعد انتهائها.",
"cw_files_goto_pinned": "المجلدات المثبّتة",
};
export default ar;
+6 -2
View File
@@ -4285,8 +4285,8 @@ c2c_test_deep_bad: "4 KiB-এর পরীক্ষামূলক পাঠা
"cw_files_pin_full": "আর কোনো ফোল্ডার পিন করার জায়গা নেই। আগে একটির পিন সরান।",
"cw_files_eject_title": "{path} বের করবেন?",
"cw_files_eject_force_title": "{path} এখনও ব্যবহৃত হচ্ছে। তবুও বের করবেন?",
"cw_files_eject_body": "ড্রাইভটি আনমাউন্ট করা হয় যাতে আপনি এটি খুলে নিতে পারেন। আগে এটি ব্যবহার করা যেকোনো গেম বা অ্যাপ বন্ধ করুন।",
"cw_files_eject_force_body": "PS5 ড্রাইভটি খোলা রাখে; সাধারণত এর নিজস্ব সার্ভিসগুলো এটা করে। তবুও বের করলে আগে সবকিছু ড্রাইভে সেভ হয়, তাই এই মুহূর্তে কোনো গেম বা অ্যাপ এটি থেকে না পড়লে এটি নিরাপদ।",
"cw_files_eject_body": "ড্রাইভটি আনমাউন্ট করা হয় যাতে আপনি এটি খুলে নিতে পারেন। আগে যেকোনো গেম বা অ্যাপ বন্ধ করুন যা এটি থেকে পড়ছে বা এতে লিখছে।",
"cw_files_eject_force_body": "PS5 ড্রাইভটি খোলা রাখে; সাধারণত এর নিজস্ব সার্ভিসগুলো এটা করে। তবুও বের করলে আগে সবকিছু ড্রাইভে সেভ হয়, তাই এই মুহূর্তে কোনো গেম বা অ্যাপ এটি থেকে না পড়লে বা এতে না লিখলে এটি নিরাপদ।",
"cw_files_eject_force": "তবুও বের করুন",
"cw_files_unmount_title": "{path} আনমাউন্ট করবেন?",
"cw_files_unmount_body": "এই ইমেজ থেকে চলা গেম বন্ধ হয়ে যাবে, এবং ইমেজটি আবার মাউন্ট না হওয়া পর্যন্ত এর ফাইলগুলো থাকবে না।",
@@ -4295,6 +4295,10 @@ c2c_test_deep_bad: "4 KiB-এর পরীক্ষামূলক পাঠা
"cw_files_eject_done": "{path} বের করা হয়েছে। এখন ড্রাইভটি খুলে নিতে পারেন।",
"cw_files_unmount_done": "{path} আনমাউন্ট করা হয়েছে।",
"cw_files_last_gone": "শেষবার খোলা ফোল্ডারটি ({path}) আর নেই।",
"cw_files_unmount_game": "আগে গেমটি বন্ধ করুন।",
"cw_files_eject_blocked_batch": "ফাইলস এখনও এই ড্রাইভে কপি, সরানো বা মোছার কাজ করছে। শেষ হলে বের করুন।",
"cw_files_eject_blocked_jobs": "একটি ট্রান্সফার চলছে। শেষ হলে ড্রাইভটি বের করুন।",
"cw_files_goto_pinned": "পিন করা ফোল্ডার",
};
export default bn;
+6 -2
View File
@@ -4293,8 +4293,8 @@ c2c_test_deep_bad: "Die 4-KiB-Testsendung ist nicht angekommen: {detail}",
"cw_files_pin_full": "Kein Platz für weitere angeheftete Ordner. Löse zuerst einen.",
"cw_files_eject_title": "{path} auswerfen?",
"cw_files_eject_force_title": "{path} wird noch verwendet. Trotzdem auswerfen?",
"cw_files_eject_body": "Das Laufwerk wird ausgehängt, damit du es abziehen kannst. Beende vorher jedes Spiel und jede App, die es nutzt.",
"cw_files_eject_force_body": "Die PS5 hält das Laufwerk offen; das tun meist ihre eigenen Dienste. Beim erzwungenen Auswerfen wird zuerst alles auf das Laufwerk geschrieben. Das ist sicher, solange gerade kein Spiel und keine App davon liest.",
"cw_files_eject_body": "Das Laufwerk wird ausgehängt, damit du es abziehen kannst. Beende vorher jedes Spiel und jede App, die davon liest oder darauf schreibt.",
"cw_files_eject_force_body": "Die PS5 hält das Laufwerk offen; das tun meist ihre eigenen Dienste. Beim erzwungenen Auswerfen wird zuerst alles auf das Laufwerk geschrieben. Das ist sicher, solange gerade kein Spiel und keine App davon liest oder darauf schreibt.",
"cw_files_eject_force": "Trotzdem auswerfen",
"cw_files_unmount_title": "{path} aushängen?",
"cw_files_unmount_body": "Ein Spiel, das von diesem Image läuft, wird beendet, und seine Dateien fehlen, bis das Image wieder eingebunden ist.",
@@ -4303,6 +4303,10 @@ c2c_test_deep_bad: "Die 4-KiB-Testsendung ist nicht angekommen: {detail}",
"cw_files_eject_done": "{path} ausgeworfen. Du kannst das Laufwerk abziehen.",
"cw_files_unmount_done": "{path} ausgehängt.",
"cw_files_last_gone": "Der zuletzt geöffnete Ordner ({path}) existiert nicht mehr.",
"cw_files_unmount_game": "Beende zuerst das Spiel.",
"cw_files_eject_blocked_batch": "Dateien kopiert, verschiebt oder löscht noch auf diesem Laufwerk. Wirf es aus, wenn das fertig ist.",
"cw_files_eject_blocked_jobs": "Eine Übertragung läuft. Wirf das Laufwerk aus, wenn sie fertig ist.",
"cw_files_goto_pinned": "Angeheftete Ordner",
};
export default de;
+6 -2
View File
@@ -4608,8 +4608,8 @@ c2c_test_deep_bad: "The 4 KiB test send did not arrive: {detail}",
"cw_files_pin_full": "No room for more pinned folders. Unpin one first.",
"cw_files_eject_title": "Eject {path}?",
"cw_files_eject_force_title": "{path} is still in use. Eject anyway?",
"cw_files_eject_body": "The drive is unmounted so you can unplug it. Close any game or app that uses it first.",
"cw_files_eject_force_body": "The PS5 keeps the drive open; its own services usually do. Ejecting anyway saves everything to the drive first, so it is safe as long as no game or app is reading from it right now.",
"cw_files_eject_body": "The drive is unmounted so you can unplug it. First close any game or app that is reading from or writing to it.",
"cw_files_eject_force_body": "The PS5 keeps the drive open; its own services usually do. Ejecting anyway saves everything to the drive first, so it is safe as long as no game or app is reading from or writing to it right now.",
"cw_files_eject_force": "Eject anyway",
"cw_files_unmount_title": "Unmount {path}?",
"cw_files_unmount_body": "A game running from this image will stop, and its files are gone until the image is mounted again.",
@@ -4618,6 +4618,10 @@ c2c_test_deep_bad: "The 4 KiB test send did not arrive: {detail}",
"cw_files_eject_done": "{path} ejected. You can unplug the drive.",
"cw_files_unmount_done": "{path} unmounted.",
"cw_files_last_gone": "The folder you had open last ({path}) is gone.",
"cw_files_unmount_game": "Close the game first.",
"cw_files_eject_blocked_batch": "Files is still copying, moving or deleting on this drive. Eject it when that is done.",
"cw_files_eject_blocked_jobs": "A transfer is running. Eject the drive after it finishes.",
"cw_files_goto_pinned": "Pinned folders",
};
export default en;
+6 -2
View File
@@ -4235,8 +4235,8 @@ c2c_test_deep_bad: "El envío de prueba de 4 KiB no llegó: {detail}",
"cw_files_pin_full": "No caben más carpetas fijadas. Quita una primero.",
"cw_files_eject_title": "¿Expulsar {path}?",
"cw_files_eject_force_title": "{path} sigue en uso. ¿Expulsar de todos modos?",
"cw_files_eject_body": "La unidad se desmonta para que puedas desconectarla. Cierra antes cualquier juego o app que la use.",
"cw_files_eject_force_body": "La PS5 mantiene la unidad abierta; normalmente lo hacen sus propios servicios. Al expulsar de todos modos, primero se guarda todo en la unidad, así que es seguro mientras ningún juego ni app esté leyendo de ella ahora mismo.",
"cw_files_eject_body": "La unidad se desmonta para que puedas desconectarla. Cierra antes cualquier juego o app que esté leyendo o escribiendo en ella.",
"cw_files_eject_force_body": "La PS5 mantiene la unidad abierta; normalmente lo hacen sus propios servicios. Al expulsar de todos modos, primero se guarda todo en la unidad, así que es seguro mientras ningún juego ni app esté leyendo o escribiendo en ella ahora mismo.",
"cw_files_eject_force": "Expulsar de todos modos",
"cw_files_unmount_title": "¿Desmontar {path}?",
"cw_files_unmount_body": "Un juego que se ejecute desde esta imagen se detendrá, y sus archivos no estarán disponibles hasta que se vuelva a montar la imagen.",
@@ -4245,6 +4245,10 @@ c2c_test_deep_bad: "El envío de prueba de 4 KiB no llegó: {detail}",
"cw_files_eject_done": "{path} expulsada. Ya puedes desconectar la unidad.",
"cw_files_unmount_done": "{path} desmontada.",
"cw_files_last_gone": "La última carpeta que tenías abierta ({path}) ya no existe.",
"cw_files_unmount_game": "Cierra el juego primero.",
"cw_files_eject_blocked_batch": "Archivos todavía está copiando, moviendo o borrando en esta unidad. Expúlsala cuando termine.",
"cw_files_eject_blocked_jobs": "Hay una transferencia en curso. Expulsa la unidad cuando termine.",
"cw_files_goto_pinned": "Carpetas fijadas",
};
export default es;
+6 -2
View File
@@ -4586,8 +4586,8 @@ c2c_test_deep_bad: "ارسال آزمایشی ۴ KiB نرسید: {detail}",
"cw_files_pin_full": "جایی برای سنجاق کردن پوشهٔ بیشتر نیست. اول سنجاق یکی را بردارید.",
"cw_files_eject_title": "{path} بیرون داده شود؟",
"cw_files_eject_force_title": "{path} هنوز در حال استفاده است. با این حال بیرون داده شود؟",
"cw_files_eject_body": "درایو پیاده می‌شود تا بتوانید آن را جدا کنید. اول هر بازی یا برنامه‌ای را که از آن استفاده می‌کند ببندید.",
"cw_files_eject_force_body": "PS5 درایو را باز نگه داشته است؛ معمولاً سرویس‌های خودش این کار را می‌کنند. بیرون دادن اجباری اول همه چیز را روی درایو ذخیره می‌کند، پس تا وقتی هیچ بازی یا برنامه‌ای همین الان از آن نمی‌خواند امن است.",
"cw_files_eject_body": "درایو پیاده می‌شود تا بتوانید آن را جدا کنید. اول هر بازی یا برنامه‌ای را که از آن می‌خواند یا روی آن می‌نویسد ببندید.",
"cw_files_eject_force_body": "PS5 درایو را باز نگه داشته است؛ معمولاً سرویس‌های خودش این کار را می‌کنند. بیرون دادن اجباری اول همه چیز را روی درایو ذخیره می‌کند، پس تا وقتی هیچ بازی یا برنامه‌ای همین الان از آن نمی‌خواند یا روی آن نمی‌نویسد امن است.",
"cw_files_eject_force": "با این حال بیرون بده",
"cw_files_unmount_title": "{path} پیاده شود؟",
"cw_files_unmount_body": "بازی‌ای که از این ایمیج اجرا می‌شود متوقف می‌شود و فایل‌هایش تا سوار شدن دوبارهٔ ایمیج در دسترس نیستند.",
@@ -4596,6 +4596,10 @@ c2c_test_deep_bad: "ارسال آزمایشی ۴ KiB نرسید: {detail}",
"cw_files_eject_done": "{path} بیرون داده شد. می‌توانید درایو را جدا کنید.",
"cw_files_unmount_done": "{path} پیاده شد.",
"cw_files_last_gone": "پوشه‌ای که آخرین بار باز کرده بودید ({path}) دیگر وجود ندارد.",
"cw_files_unmount_game": "اول بازی را ببندید.",
"cw_files_eject_blocked_batch": "فایل‌ها هنوز روی این درایو در حال کپی، جابه‌جایی یا حذف است. وقتی تمام شد بیرونش بدهید.",
"cw_files_eject_blocked_jobs": "یک انتقال در حال اجراست. پس از پایان آن درایو را بیرون بدهید.",
"cw_files_goto_pinned": "پوشه‌های سنجاق‌شده",
};
export default fa;
+6 -2
View File
@@ -4303,8 +4303,8 @@ c2c_test_deep_bad: "L’envoi test de 4 Kio n’est pas arrivé : {detail}",
"cw_files_pin_full": "Plus de place pour d'autres dossiers épinglés. Désépingles-en un d'abord.",
"cw_files_eject_title": "Éjecter {path} ?",
"cw_files_eject_force_title": "{path} est encore utilisé. Éjecter quand même ?",
"cw_files_eject_body": "Le disque est démonté pour que tu puisses le débrancher. Ferme d'abord tout jeu ou toute appli qui l'utilise.",
"cw_files_eject_force_body": "La PS5 garde le disque ouvert ; ses propres services le font souvent. Éjecter quand même enregistre d'abord tout sur le disque : c'est sans risque tant qu'aucun jeu ni appli ne le lit en ce moment.",
"cw_files_eject_body": "Le disque est démonté pour que tu puisses le débrancher. Ferme d'abord tout jeu ou toute appli qui le lit ou y écrit.",
"cw_files_eject_force_body": "La PS5 garde le disque ouvert ; ses propres services le font souvent. Éjecter quand même enregistre d'abord tout sur le disque : c'est sans risque tant qu'aucun jeu ni appli ne le lit ou n'y écrit en ce moment.",
"cw_files_eject_force": "Éjecter quand même",
"cw_files_unmount_title": "Démonter {path} ?",
"cw_files_unmount_body": "Un jeu lancé depuis cette image s'arrêtera, et ses fichiers seront absents jusqu'à ce que l'image soit de nouveau montée.",
@@ -4313,6 +4313,10 @@ c2c_test_deep_bad: "L’envoi test de 4 Kio n’est pas arrivé : {detail}",
"cw_files_eject_done": "{path} éjecté. Tu peux débrancher le disque.",
"cw_files_unmount_done": "{path} démonté.",
"cw_files_last_gone": "Le dernier dossier ouvert ({path}) n'existe plus.",
"cw_files_unmount_game": "Ferme d'abord le jeu.",
"cw_files_eject_blocked_batch": "Fichiers copie, déplace ou supprime encore sur ce disque. Éjecte-le quand ce sera fini.",
"cw_files_eject_blocked_jobs": "Un transfert est en cours. Éjecte le disque quand il sera terminé.",
"cw_files_goto_pinned": "Dossiers épinglés",
};
export default fr;
+6 -2
View File
@@ -4301,8 +4301,8 @@ c2c_test_deep_bad: "4 KiB का परीक्षण नहीं पहुँ
"cw_files_pin_full": "और फ़ोल्डर पिन करने की जगह नहीं है। पहले किसी एक का पिन हटाएँ।",
"cw_files_eject_title": "{path} निकालें?",
"cw_files_eject_force_title": "{path} अभी भी उपयोग में है। फिर भी निकालें?",
"cw_files_eject_body": "ड्राइव अनमाउंट की जाती है ताकि आप उसे निकाल सकें। पहले उसे इस्तेमाल करने वाला हर गेम या ऐप बंद करें।",
"cw_files_eject_force_body": "PS5 ड्राइव को खुला रखता है; आमतौर पर उसकी अपनी सेवाएँ ऐसा करती हैं। फिर भी निकालने पर पहले सब कुछ ड्राइव पर सहेजा जाता है, इसलिए यह तब तक सुरक्षित है जब तक इस समय कोई गेम या ऐप उससे पढ़ नहीं रहा।",
"cw_files_eject_body": "ड्राइव अनमाउंट की जाती है ताकि आप उसे निकाल सकें। पहले वह हर गेम या ऐप बंद करें जो उससे पढ़ रहा हो या उस पर लिख रहा हो।",
"cw_files_eject_force_body": "PS5 ड्राइव को खुला रखता है; आमतौर पर उसकी अपनी सेवाएँ ऐसा करती हैं। फिर भी निकालने पर पहले सब कुछ ड्राइव पर सहेजा जाता है, इसलिए यह तब तक सुरक्षित है जब तक इस समय कोई गेम या ऐप उससे पढ़ या उस पर लिख नहीं रहा।",
"cw_files_eject_force": "फिर भी निकालें",
"cw_files_unmount_title": "{path} अनमाउंट करें?",
"cw_files_unmount_body": "इस इमेज से चल रहा गेम रुक जाएगा, और इमेज दोबारा माउंट होने तक उसकी फ़ाइलें उपलब्ध नहीं रहेंगी।",
@@ -4311,6 +4311,10 @@ c2c_test_deep_bad: "4 KiB का परीक्षण नहीं पहुँ
"cw_files_eject_done": "{path} निकाल दिया गया। अब आप ड्राइव निकाल सकते हैं।",
"cw_files_unmount_done": "{path} अनमाउंट किया गया।",
"cw_files_last_gone": "पिछली बार खोला गया फ़ोल्डर ({path}) अब मौजूद नहीं है।",
"cw_files_unmount_game": "पहले गेम बंद करें।",
"cw_files_eject_blocked_batch": "फ़ाइलें अभी भी इस ड्राइव पर कॉपी, मूव या डिलीट कर रही हैं। यह पूरा होने पर निकालें।",
"cw_files_eject_blocked_jobs": "एक ट्रांसफ़र चल रहा है। उसके पूरा होने के बाद ड्राइव निकालें।",
"cw_files_goto_pinned": "पिन किए गए फ़ोल्डर",
};
export default hi;
+6 -2
View File
@@ -4600,8 +4600,8 @@ c2c_test_deep_bad: "A 4 KiB-os tesztküldés nem érkezett meg: {detail}",
"cw_files_pin_full": "Nincs hely több kitűzött mappának. Előbb szüntess meg egyet.",
"cw_files_eject_title": "Kiadod: {path}?",
"cw_files_eject_force_title": "{path} még használatban van. Kiadod mégis?",
"cw_files_eject_body": "A meghajtót leválasztjuk, hogy kihúzhasd. Előbb zárj be minden játékot és alkalmazást, amely használja.",
"cw_files_eject_force_body": "A PS5 nyitva tartja a meghajtót; általában a saját szolgáltatásai. A kényszerített kiadás előbb mindent a meghajtóra ír, így biztonságos, amíg éppen egy játék vagy alkalmazás sem olvas róla.",
"cw_files_eject_body": "A meghajtót leválasztjuk, hogy kihúzhasd. Előbb zárj be minden játékot és alkalmazást, amely olvas róla vagy ír rá.",
"cw_files_eject_force_body": "A PS5 nyitva tartja a meghajtót; általában a saját szolgáltatásai. A kényszerített kiadás előbb mindent a meghajtóra ír, így biztonságos, amíg éppen egy játék vagy alkalmazás sem olvas róla és nem ír rá.",
"cw_files_eject_force": "Kiadás mégis",
"cw_files_unmount_title": "Leválasztod: {path}?",
"cw_files_unmount_body": "Az erről a képfájlról futó játék leáll, és a fájljai addig nem érhetők el, amíg a képfájlt újra nem csatolják.",
@@ -4610,6 +4610,10 @@ c2c_test_deep_bad: "A 4 KiB-os tesztküldés nem érkezett meg: {detail}",
"cw_files_eject_done": "{path} kiadva. Kihúzhatod a meghajtót.",
"cw_files_unmount_done": "{path} leválasztva.",
"cw_files_last_gone": "A legutóbb megnyitott mappa ({path}) már nem létezik.",
"cw_files_unmount_game": "Előbb zárd be a játékot.",
"cw_files_eject_blocked_batch": "A Fájlok még másol, áthelyez vagy töröl ezen a meghajtón. Ha végzett, add ki.",
"cw_files_eject_blocked_jobs": "Átvitel van folyamatban. Ha befejeződött, add ki a meghajtót.",
"cw_files_goto_pinned": "Kitűzött mappák",
};
export default hu;
+6 -2
View File
@@ -4294,8 +4294,8 @@ c2c_test_deep_bad: "Kiriman uji 4 KiB tidak tiba: {detail}",
"cw_files_pin_full": "Tidak ada ruang untuk folder sematan lagi. Lepas sematan satu dulu.",
"cw_files_eject_title": "Keluarkan {path}?",
"cw_files_eject_force_title": "{path} masih digunakan. Tetap keluarkan?",
"cw_files_eject_body": "Drive dilepas agar bisa dicabut. Tutup dulu game atau aplikasi yang memakainya.",
"cw_files_eject_force_body": "PS5 membiarkan drive tetap terbuka; biasanya layanan bawaannya sendiri. Tetap mengeluarkan akan menyimpan semuanya ke drive terlebih dahulu, jadi aman selama tidak ada game atau aplikasi yang sedang membacanya.",
"cw_files_eject_body": "Drive dilepas agar bisa dicabut. Tutup dulu game atau aplikasi yang sedang membaca atau menulis ke drive itu.",
"cw_files_eject_force_body": "PS5 membiarkan drive tetap terbuka; biasanya layanan bawaannya sendiri. Tetap mengeluarkan akan menyimpan semuanya ke drive terlebih dahulu, jadi aman selama tidak ada game atau aplikasi yang sedang membaca atau menulis ke drive itu.",
"cw_files_eject_force": "Tetap keluarkan",
"cw_files_unmount_title": "Lepas {path}?",
"cw_files_unmount_body": "Game yang berjalan dari image ini akan berhenti, dan filenya hilang sampai image dipasang lagi.",
@@ -4304,6 +4304,10 @@ c2c_test_deep_bad: "Kiriman uji 4 KiB tidak tiba: {detail}",
"cw_files_eject_done": "{path} dikeluarkan. Drive bisa dicabut.",
"cw_files_unmount_done": "{path} dilepas.",
"cw_files_last_gone": "Folder yang terakhir dibuka ({path}) sudah tidak ada.",
"cw_files_unmount_game": "Tutup game-nya dulu.",
"cw_files_eject_blocked_batch": "File masih menyalin, memindahkan, atau menghapus di drive ini. Keluarkan setelah selesai.",
"cw_files_eject_blocked_jobs": "Ada transfer yang berjalan. Keluarkan drive setelah selesai.",
"cw_files_goto_pinned": "Folder yang disematkan",
};
export default id;
+6 -2
View File
@@ -4235,8 +4235,8 @@ c2c_test_deep_bad: "L’invio di prova di 4 KiB non è arrivato: {detail}",
"cw_files_pin_full": "Non c'è spazio per altre cartelle fissate. Rimuovine prima una.",
"cw_files_eject_title": "Espellere {path}?",
"cw_files_eject_force_title": "{path} è ancora in uso. Espellere comunque?",
"cw_files_eject_body": "L'unità viene smontata così puoi scollegarla. Chiudi prima qualsiasi gioco o app che la usa.",
"cw_files_eject_force_body": "La PS5 tiene aperta l'unità; di solito lo fanno i suoi servizi. Espellendo comunque, prima viene salvato tutto sull'unità: è sicuro finché nessun gioco o app ci sta leggendo in questo momento.",
"cw_files_eject_body": "L'unità viene smontata così puoi scollegarla. Chiudi prima qualsiasi gioco o app che ci stia leggendo o scrivendo.",
"cw_files_eject_force_body": "La PS5 tiene aperta l'unità; di solito lo fanno i suoi servizi. Espellendo comunque, prima viene salvato tutto sull'unità: è sicuro finché nessun gioco o app ci sta leggendo o scrivendo in questo momento.",
"cw_files_eject_force": "Espelli comunque",
"cw_files_unmount_title": "Smontare {path}?",
"cw_files_unmount_body": "Un gioco avviato da questa immagine si fermerà, e i suoi file non ci saranno finché l'immagine non verrà montata di nuovo.",
@@ -4245,6 +4245,10 @@ c2c_test_deep_bad: "L’invio di prova di 4 KiB non è arrivato: {detail}",
"cw_files_eject_done": "{path} espulsa. Puoi scollegare l'unità.",
"cw_files_unmount_done": "{path} smontata.",
"cw_files_last_gone": "L'ultima cartella aperta ({path}) non esiste più.",
"cw_files_unmount_game": "Chiudi prima il gioco.",
"cw_files_eject_blocked_batch": "File sta ancora copiando, spostando o eliminando su questa unità. Espellila quando ha finito.",
"cw_files_eject_blocked_jobs": "È in corso un trasferimento. Espelli l'unità quando è finito.",
"cw_files_goto_pinned": "Cartelle fissate",
};
export default it;
+6 -2
View File
@@ -4306,8 +4306,8 @@ c2c_test_deep_bad: "4 KiB のテスト送信が届きませんでした: {detail
"cw_files_pin_full": "これ以上フォルダーをピン留めできません。先にどれかを外してください。",
"cw_files_eject_title": "{path} を取り出しますか?",
"cw_files_eject_force_title": "{path} はまだ使用中です。それでも取り出しますか?",
"cw_files_eject_body": "ドライブを抜けるようにマウントを解除します。先に、使っているゲームやアプリを終了してください。",
"cw_files_eject_force_body": "PS5 がドライブを開いたままにしています(たいてい本体のサービスです)。強制的に取り出すと先にすべてをドライブに書き込むので、今ゲームやアプリが読み込んでいなければ安全です。",
"cw_files_eject_body": "ドライブを抜けるようにマウントを解除します。先に、ドライブを読み書きしているゲームやアプリを終了してください。",
"cw_files_eject_force_body": "PS5 がドライブを開いたままにしています(たいてい本体のサービスです)。強制的に取り出すと先にすべてをドライブに書き込むので、今ゲームやアプリがドライブを読み書きしていなければ安全です。",
"cw_files_eject_force": "それでも取り出す",
"cw_files_unmount_title": "{path} のマウントを解除しますか?",
"cw_files_unmount_body": "このイメージから起動しているゲームは停止し、イメージを再びマウントするまでそのファイルは使えなくなります。",
@@ -4316,6 +4316,10 @@ c2c_test_deep_bad: "4 KiB のテスト送信が届きませんでした: {detail
"cw_files_eject_done": "{path} を取り出しました。ドライブを抜いてかまいません。",
"cw_files_unmount_done": "{path} のマウントを解除しました。",
"cw_files_last_gone": "前回開いていたフォルダー({path})はもうありません。",
"cw_files_unmount_game": "先にゲームを終了してください。",
"cw_files_eject_blocked_batch": "ファイルがこのドライブでコピー・移動・削除を続けています。終わってから取り出してください。",
"cw_files_eject_blocked_jobs": "転送が実行中です。終わってからドライブを取り出してください。",
"cw_files_goto_pinned": "ピン留めしたフォルダー",
};
export default ja;
+6 -2
View File
@@ -4304,8 +4304,8 @@ c2c_test_deep_bad: "4 KiB 테스트 전송이 도착하지 않았습니다: {det
"cw_files_pin_full": "더 이상 폴더를 고정할 수 없습니다. 먼저 하나를 고정 해제하세요.",
"cw_files_eject_title": "{path}을(를) 꺼낼까요?",
"cw_files_eject_force_title": "{path}이(가) 아직 사용 중입니다. 그래도 꺼낼까요?",
"cw_files_eject_body": "드라이브를 뽑을 수 있도록 마운트를 해제합니다. 먼저 드라이브를 쓰는 게임이나 앱을 종료하세요.",
"cw_files_eject_force_body": "PS5가 드라이브를 열어 두고 있습니다. 보통 본체 서비스 때문입니다. 그래도 꺼내면 먼저 모든 내용을 드라이브에 기록하므로, 지금 드라이브를 읽고 있는 게임이나 앱이 없다면 안전합니다.",
"cw_files_eject_body": "드라이브를 뽑을 수 있도록 마운트를 해제합니다. 먼저 드라이브를 읽거나 쓰고 있는 게임이나 앱을 종료하세요.",
"cw_files_eject_force_body": "PS5가 드라이브를 열어 두고 있습니다. 보통 본체 서비스 때문입니다. 그래도 꺼내면 먼저 모든 내용을 드라이브에 기록하므로, 지금 드라이브를 읽거나 쓰고 있는 게임이나 앱이 없다면 안전합니다.",
"cw_files_eject_force": "그래도 꺼내기",
"cw_files_unmount_title": "{path} 마운트를 해제할까요?",
"cw_files_unmount_body": "이 이미지에서 실행 중인 게임은 멈추고, 이미지를 다시 마운트할 때까지 그 파일을 쓸 수 없습니다.",
@@ -4314,6 +4314,10 @@ c2c_test_deep_bad: "4 KiB 테스트 전송이 도착하지 않았습니다: {det
"cw_files_eject_done": "{path}을(를) 꺼냈습니다. 드라이브를 뽑아도 됩니다.",
"cw_files_unmount_done": "{path} 마운트를 해제했습니다.",
"cw_files_last_gone": "마지막으로 열었던 폴더({path})가 없습니다.",
"cw_files_unmount_game": "먼저 게임을 종료하세요.",
"cw_files_eject_blocked_batch": "파일이 아직 이 드라이브에서 복사, 이동 또는 삭제 중입니다. 끝난 뒤 꺼내세요.",
"cw_files_eject_blocked_jobs": "전송이 진행 중입니다. 끝난 뒤 드라이브를 꺼내세요.",
"cw_files_goto_pinned": "고정된 폴더",
};
export default ko;
+6 -2
View File
@@ -4540,8 +4540,8 @@ c2c_test_deep_bad: "Testowa wysyłka 4 KiB nie dotarła: {detail}",
"cw_files_pin_full": "Brak miejsca na kolejne przypięte foldery. Najpierw odepnij jeden.",
"cw_files_eject_title": "Wysunąć {path}?",
"cw_files_eject_force_title": "{path} jest nadal używany. Wysunąć mimo to?",
"cw_files_eject_body": "Dysk zostanie odmontowany, aby można go było odłączyć. Najpierw zamknij gry i aplikacje, które z niego korzystają.",
"cw_files_eject_force_body": "PS5 trzyma dysk otwarty; zwykle robią to jej własne usługi. Wysunięcie mimo to najpierw zapisuje wszystko na dysku, więc jest bezpieczne, o ile żadna gra ani aplikacja właśnie z niego nie czyta.",
"cw_files_eject_body": "Dysk zostanie odmontowany, aby można go było odłączyć. Najpierw zamknij gry i aplikacje, które z niego czytają lub na nim zapisują.",
"cw_files_eject_force_body": "PS5 trzyma dysk otwarty; zwykle robią to jej własne usługi. Wysunięcie mimo to najpierw zapisuje wszystko na dysku, więc jest bezpieczne, o ile żadna gra ani aplikacja właśnie z niego nie czyta ani na nim nie zapisuje.",
"cw_files_eject_force": "Wysuń mimo to",
"cw_files_unmount_title": "Odmontować {path}?",
"cw_files_unmount_body": "Gra uruchomiona z tego obrazu zatrzyma się, a jej pliki znikną, dopóki obraz nie zostanie ponownie zamontowany.",
@@ -4550,6 +4550,10 @@ c2c_test_deep_bad: "Testowa wysyłka 4 KiB nie dotarła: {detail}",
"cw_files_eject_done": "Wysunięto {path}. Możesz odłączyć dysk.",
"cw_files_unmount_done": "Odmontowano {path}.",
"cw_files_last_gone": "Ostatnio otwarty folder ({path}) już nie istnieje.",
"cw_files_unmount_game": "Najpierw zamknij grę.",
"cw_files_eject_blocked_batch": "Pliki wciąż kopiują, przenoszą lub usuwają dane na tym dysku. Wysuń go, gdy to się skończy.",
"cw_files_eject_blocked_jobs": "Trwa przesyłanie. Wysuń dysk, gdy się zakończy.",
"cw_files_goto_pinned": "Przypięte foldery",
};
export default pl;
+6 -2
View File
@@ -4302,8 +4302,8 @@ c2c_test_deep_bad: "O envio de teste de 4 KiB não chegou: {detail}",
"cw_files_pin_full": "Não há espaço para mais pastas fixadas. Desafixe uma primeiro.",
"cw_files_eject_title": "Ejetar {path}?",
"cw_files_eject_force_title": "{path} ainda está em uso. Ejetar mesmo assim?",
"cw_files_eject_body": "A unidade é desmontada para você poder desconectá-la. Feche antes qualquer jogo ou app que a use.",
"cw_files_eject_force_body": "O PS5 mantém a unidade aberta; normalmente são os próprios serviços dele. Ejetar mesmo assim grava tudo na unidade primeiro, então é seguro enquanto nenhum jogo ou app estiver lendo dela agora.",
"cw_files_eject_body": "A unidade é desmontada para você poder desconectá-la. Feche antes qualquer jogo ou app que esteja lendo ou gravando nela.",
"cw_files_eject_force_body": "O PS5 mantém a unidade aberta; normalmente são os próprios serviços dele. Ejetar mesmo assim grava tudo na unidade primeiro, então é seguro enquanto nenhum jogo ou app estiver lendo ou gravando nela agora.",
"cw_files_eject_force": "Ejetar mesmo assim",
"cw_files_unmount_title": "Desmontar {path}?",
"cw_files_unmount_body": "Um jogo rodando a partir desta imagem vai parar, e os arquivos dele somem até a imagem ser montada de novo.",
@@ -4312,6 +4312,10 @@ c2c_test_deep_bad: "O envio de teste de 4 KiB não chegou: {detail}",
"cw_files_eject_done": "{path} ejetada. Você já pode desconectar a unidade.",
"cw_files_unmount_done": "{path} desmontada.",
"cw_files_last_gone": "A última pasta que você abriu ({path}) não existe mais.",
"cw_files_unmount_game": "Feche o jogo primeiro.",
"cw_files_eject_blocked_batch": "Arquivos ainda está copiando, movendo ou excluindo nesta unidade. Ejete quando terminar.",
"cw_files_eject_blocked_jobs": "Há uma transferência em andamento. Ejete a unidade quando ela terminar.",
"cw_files_goto_pinned": "Pastas fixadas",
};
export default pt_BR;
+6 -2
View File
@@ -4235,8 +4235,8 @@ c2c_test_deep_bad: "Тестовая отправка 4 КиБ не дошла:
"cw_files_pin_full": "Больше нельзя закрепить папки. Сначала открепите одну.",
"cw_files_eject_title": "Извлечь {path}?",
"cw_files_eject_force_title": "{path} ещё используется. Всё равно извлечь?",
"cw_files_eject_body": "Накопитель будет отключён, чтобы его можно было вынуть. Сначала закройте игры и приложения, которые его используют.",
"cw_files_eject_force_body": "PS5 держит накопитель открытым; обычно это делают её собственные службы. При принудительном извлечении всё сначала записывается на накопитель, так что это безопасно, если прямо сейчас с него не читает ни игра, ни приложение.",
"cw_files_eject_body": "Накопитель будет отключён, чтобы его можно было вынуть. Сначала закройте игры и приложения, которые читают с него или пишут на него.",
"cw_files_eject_force_body": "PS5 держит накопитель открытым; обычно это делают её собственные службы. При принудительном извлечении всё сначала записывается на накопитель, так что это безопасно, если прямо сейчас ни игра, ни приложение не читает с него и не пишет на него.",
"cw_files_eject_force": "Всё равно извлечь",
"cw_files_unmount_title": "Отключить {path}?",
"cw_files_unmount_body": "Игра, запущенная из этого образа, остановится, а её файлы будут недоступны, пока образ не подключат снова.",
@@ -4245,6 +4245,10 @@ c2c_test_deep_bad: "Тестовая отправка 4 КиБ не дошла:
"cw_files_eject_done": "{path} извлечён. Накопитель можно вынуть.",
"cw_files_unmount_done": "{path} отключён.",
"cw_files_last_gone": "Последней открытой папки ({path}) больше нет.",
"cw_files_unmount_game": "Сначала закройте игру.",
"cw_files_eject_blocked_batch": "Файлы ещё копируются, перемещаются или удаляются на этом накопителе. Извлеките его, когда это закончится.",
"cw_files_eject_blocked_jobs": "Идёт передача. Извлеките накопитель, когда она закончится.",
"cw_files_goto_pinned": "Закреплённые папки",
};
export default ru;
+6 -2
View File
@@ -4294,8 +4294,8 @@ c2c_test_deep_bad: "การส่งทดสอบ 4 KiB ไปไม่ถ
"cw_files_pin_full": "ไม่มีที่ว่างสำหรับปักหมุดโฟลเดอร์เพิ่ม เลิกปักหมุดสักโฟลเดอร์ก่อน",
"cw_files_eject_title": "นำ {path} ออกไหม",
"cw_files_eject_force_title": "{path} ยังถูกใช้งานอยู่ นำออกเลยไหม",
"cw_files_eject_body": "ไดรฟ์จะถูกยกเลิกการเมานต์เพื่อให้ถอดออกได้ ปิดเกมหรือแอปที่ใช้ไดรฟ์นี้ก่อน",
"cw_files_eject_force_body": "PS5 เปิดไดรฟ์ค้างไว้ ซึ่งมักเป็นบริการของเครื่องเอง การนำออกเลยจะบันทึกทุกอย่างลงไดรฟ์ก่อน จึงปลอดภัยตราบใดที่ตอนนี้ไม่มีเกมหรือแอปใดกำลังอ่านไดรฟ์อยู่",
"cw_files_eject_body": "ไดรฟ์จะถูกยกเลิกการเมานต์เพื่อให้ถอดออกได้ ปิดเกมหรือแอปที่กำลังอ่านหรือเขียนไดรฟ์นี้ก่อน",
"cw_files_eject_force_body": "PS5 เปิดไดรฟ์ค้างไว้ ซึ่งมักเป็นบริการของเครื่องเอง การนำออกเลยจะบันทึกทุกอย่างลงไดรฟ์ก่อน จึงปลอดภัยตราบใดที่ตอนนี้ไม่มีเกมหรือแอปใดกำลังอ่านหรือเขียนไดรฟ์อยู่",
"cw_files_eject_force": "นำออกเลย",
"cw_files_unmount_title": "ยกเลิกการเมานต์ {path} ไหม",
"cw_files_unmount_body": "เกมที่รันจากอิมเมจนี้จะหยุดทำงาน และไฟล์ของเกมจะหายไปจนกว่าจะเมานต์อิมเมจอีกครั้ง",
@@ -4304,6 +4304,10 @@ c2c_test_deep_bad: "การส่งทดสอบ 4 KiB ไปไม่ถ
"cw_files_eject_done": "นำ {path} ออกแล้ว ถอดไดรฟ์ได้เลย",
"cw_files_unmount_done": "ยกเลิกการเมานต์ {path} แล้ว",
"cw_files_last_gone": "โฟลเดอร์ที่เปิดไว้ล่าสุด ({path}) ไม่มีอยู่แล้ว",
"cw_files_unmount_game": "ปิดเกมก่อน",
"cw_files_eject_blocked_batch": "ไฟล์ยังคัดลอก ย้าย หรือลบอยู่บนไดรฟ์นี้ นำออกเมื่อเสร็จแล้ว",
"cw_files_eject_blocked_jobs": "มีการถ่ายโอนกำลังทำงานอยู่ นำไดรฟ์ออกเมื่อเสร็จแล้ว",
"cw_files_goto_pinned": "โฟลเดอร์ที่ปักหมุด",
};
export default th;
+6 -2
View File
@@ -4292,8 +4292,8 @@ c2c_test_deep_bad: "4 KiB'lik test gönderimi ulaşmadı: {detail}",
"cw_files_pin_full": "Daha fazla sabitlenmiş klasöre yer yok. Önce birini kaldırın.",
"cw_files_eject_title": "{path} çıkarılsın mı?",
"cw_files_eject_force_title": "{path} hâlâ kullanımda. Yine de çıkarılsın mı?",
"cw_files_eject_body": "Sürücünün bağlantısı kesilir, böylece çıkarabilirsiniz. Önce onu kullanan tüm oyun ve uygulamaları kapatın.",
"cw_files_eject_force_body": "PS5 sürücüyü açık tutuyor; genellikle kendi hizmetleri bunu yapar. Yine de çıkarmak önce her şeyi sürücüye kaydeder; şu anda hiçbir oyun veya uygulama ondan okumuyorsa güvenlidir.",
"cw_files_eject_body": "Sürücünün bağlantısı kesilir, böylece çıkarabilirsiniz. Önce ondan okuyan veya ona yazan tüm oyun ve uygulamaları kapatın.",
"cw_files_eject_force_body": "PS5 sürücüyü açık tutuyor; genellikle kendi hizmetleri bunu yapar. Yine de çıkarmak önce her şeyi sürücüye kaydeder; şu anda hiçbir oyun veya uygulama ondan okumuyor ya da ona yazmıyorsa güvenlidir.",
"cw_files_eject_force": "Yine de çıkar",
"cw_files_unmount_title": "{path} bağlantısı kesilsin mi?",
"cw_files_unmount_body": "Bu imajdan çalışan bir oyun durur ve imaj yeniden bağlanana kadar dosyaları erişilemez olur.",
@@ -4302,6 +4302,10 @@ c2c_test_deep_bad: "4 KiB'lik test gönderimi ulaşmadı: {detail}",
"cw_files_eject_done": "{path} çıkarıldı. Sürücüyü çıkarabilirsiniz.",
"cw_files_unmount_done": "{path} bağlantısı kesildi.",
"cw_files_last_gone": "En son açtığınız klasör ({path}) artık yok.",
"cw_files_unmount_game": "Önce oyunu kapatın.",
"cw_files_eject_blocked_batch": "Dosyalar bu sürücüde hâlâ kopyalama, taşıma veya silme yapıyor. Bitince çıkarın.",
"cw_files_eject_blocked_jobs": "Bir aktarım sürüyor. Bitince sürücüyü çıkarın.",
"cw_files_goto_pinned": "Sabitlenmiş klasörler",
};
export default tr;
+6 -2
View File
@@ -4287,8 +4287,8 @@ c2c_test_deep_bad: "Lượt gửi thử 4 KiB không tới: {detail}",
"cw_files_pin_full": "Không còn chỗ để ghim thêm thư mục. Hãy bỏ ghim một thư mục trước.",
"cw_files_eject_title": "Đẩy {path} ra?",
"cw_files_eject_force_title": "{path} vẫn đang được dùng. Vẫn đẩy ra?",
"cw_files_eject_body": "Ổ đĩa được tháo gắn để bạn có thể rút ra. Hãy đóng mọi trò chơi hoặc ứng dụng đang dùng nó trước.",
"cw_files_eject_force_body": "PS5 giữ ổ đĩa mở; thường là do các dịch vụ của chính máy. Vẫn đẩy ra sẽ lưu mọi thứ vào ổ trước, nên an toàn miễn là lúc này không có trò chơi hay ứng dụng nào đang đọc từ ổ.",
"cw_files_eject_body": "Ổ đĩa được tháo gắn để bạn có thể rút ra. Trước tiên hãy đóng mọi trò chơi hoặc ứng dụng đang đọc hoặc ghi vào ổ.",
"cw_files_eject_force_body": "PS5 giữ ổ đĩa mở; thường là do các dịch vụ của chính máy. Vẫn đẩy ra sẽ lưu mọi thứ vào ổ trước, nên an toàn miễn là lúc này không có trò chơi hay ứng dụng nào đang đọc hoặc ghi vào ổ.",
"cw_files_eject_force": "Vẫn đẩy ra",
"cw_files_unmount_title": "Tháo gắn {path}?",
"cw_files_unmount_body": "Trò chơi đang chạy từ ảnh đĩa này sẽ dừng, và các tệp của nó sẽ không còn cho đến khi ảnh đĩa được gắn lại.",
@@ -4297,6 +4297,10 @@ c2c_test_deep_bad: "Lượt gửi thử 4 KiB không tới: {detail}",
"cw_files_eject_done": "Đã đẩy {path} ra. Bạn có thể rút ổ đĩa.",
"cw_files_unmount_done": "Đã tháo gắn {path}.",
"cw_files_last_gone": "Thư mục bạn mở lần trước ({path}) không còn nữa.",
"cw_files_unmount_game": "Hãy đóng trò chơi trước.",
"cw_files_eject_blocked_batch": "Tệp vẫn đang sao chép, di chuyển hoặc xóa trên ổ này. Hãy đẩy ổ ra khi xong.",
"cw_files_eject_blocked_jobs": "Đang có một lượt truyền. Hãy đẩy ổ ra khi nó xong.",
"cw_files_goto_pinned": "Thư mục đã ghim",
};
export default vi;
+6 -2
View File
@@ -4241,8 +4241,8 @@ c2c_test_deep_bad: "4 KiB 测试发送未到达:{detail}",
"cw_files_pin_full": "无法再固定更多文件夹。请先取消固定一个。",
"cw_files_eject_title": "弹出 {path}?",
"cw_files_eject_force_title": "{path} 仍在使用中。仍要弹出吗?",
"cw_files_eject_body": "驱动器将被卸载,之后即可拔出。请先关闭正在使用它的游戏或应用。",
"cw_files_eject_force_body": "PS5 一直打开着该驱动器,通常是主机自身的服务。强制弹出会先把所有内容写入驱动器,只要此刻没有游戏或应用正在读取它,就是安全的。",
"cw_files_eject_body": "驱动器将被卸载,之后即可拔出。请先关闭正在读取或写入它的游戏或应用。",
"cw_files_eject_force_body": "PS5 一直打开着该驱动器,通常是主机自身的服务。强制弹出会先把所有内容写入驱动器,只要此刻没有游戏或应用正在读取或写入它,就是安全的。",
"cw_files_eject_force": "仍要弹出",
"cw_files_unmount_title": "卸载 {path}?",
"cw_files_unmount_body": "从此镜像运行的游戏会停止,在镜像重新挂载之前其文件将不可用。",
@@ -4251,6 +4251,10 @@ c2c_test_deep_bad: "4 KiB 测试发送未到达:{detail}",
"cw_files_eject_done": "已弹出 {path}。现在可以拔下驱动器。",
"cw_files_unmount_done": "已卸载 {path}。",
"cw_files_last_gone": "上次打开的文件夹({path})已不存在。",
"cw_files_unmount_game": "请先关闭游戏。",
"cw_files_eject_blocked_batch": "文件仍在此驱动器上复制、移动或删除。完成后再弹出。",
"cw_files_eject_blocked_jobs": "有传输正在进行。完成后再弹出驱动器。",
"cw_files_goto_pinned": "已固定的文件夹",
};
export default zh_CN;
+6 -2
View File
@@ -4235,8 +4235,8 @@ c2c_test_deep_bad: "4 KiB 測試傳送未抵達:{detail}",
"cw_files_pin_full": "無法再釘選更多資料夾。請先取消釘選一個。",
"cw_files_eject_title": "退出 {path}?",
"cw_files_eject_force_title": "{path} 仍在使用中。仍要退出嗎?",
"cw_files_eject_body": "磁碟機將被卸載,之後即可拔除。請先關閉正在使用它的遊戲或應用程式。",
"cw_files_eject_force_body": "PS5 一直開啟著該磁碟機,通常是主機本身的服務。強制退出會先把所有內容寫入磁碟機,只要此刻沒有遊戲或應用程式正在讀取它,就是安全的。",
"cw_files_eject_body": "磁碟機將被卸載,之後即可拔除。請先關閉正在讀取或寫入它的遊戲或應用程式。",
"cw_files_eject_force_body": "PS5 一直開啟著該磁碟機,通常是主機本身的服務。強制退出會先把所有內容寫入磁碟機,只要此刻沒有遊戲或應用程式正在讀取或寫入它,就是安全的。",
"cw_files_eject_force": "仍要退出",
"cw_files_unmount_title": "卸載 {path}?",
"cw_files_unmount_body": "從此映像檔執行的遊戲會停止,在映像檔重新掛載之前其檔案將無法使用。",
@@ -4245,6 +4245,10 @@ c2c_test_deep_bad: "4 KiB 測試傳送未抵達:{detail}",
"cw_files_eject_done": "已退出 {path}。現在可以拔除磁碟機。",
"cw_files_unmount_done": "已卸載 {path}。",
"cw_files_last_gone": "上次開啟的資料夾({path})已不存在。",
"cw_files_unmount_game": "請先關閉遊戲。",
"cw_files_eject_blocked_batch": "檔案仍在此磁碟機上複製、移動或刪除。完成後再退出。",
"cw_files_eject_blocked_jobs": "有傳輸正在進行。完成後再退出磁碟機。",
"cw_files_goto_pinned": "已釘選的資料夾",
};
export default zh_TW;
+2 -1
View File
@@ -87,7 +87,8 @@ int files_prefs_get(const char *file, char *out, size_t cap);
/* Locked: load, apply op to path, save, and answer the new prefs as JSON into out (as above). A
* visit that would pass the file cap drops the oldest recent entries until it fits; a pin that
* would is refused (FILES_PREFS_E_FULL). On any error the file is unchanged. Length, or an error. */
* would is refused (FILES_PREFS_E_FULL). A visit of the folder that is already last and newest recent
* writes nothing. On any error the file is unchanged. Length, or an error. */
int files_prefs_update(const char *file, int op, const char *path, char *out, size_t cap);
#endif
+6
View File
@@ -118,4 +118,10 @@ int webui_cheats_mods_to_json(const char *json, size_t n, char *out, size_t cap,
* "bad_index", "module_missing", else "toggle_failed". */
const char *webui_cheats_toggle_error(const char *cause, size_t n);
/* Why /api/volumes/unmount refuses `p` before asking the helper, or NULL: "system_volume" for the console's
* own volumes (/, /data, /user, /system*, /preinst*, /dev*, /mnt/usbN, /mnt/extN), else "game_running" when
* a game runs (`game_running` != 0 also when that could not be read). The helper's FS_UNMOUNT forces a busy
* unmount, so a running game is never asked about: it would lose its image (ruling R20). */
const char *webui_unmount_refusal(const char *p, int game_running);
#endif
+13
View File
@@ -286,6 +286,13 @@ int files_prefs_get(const char *file, char *out, size_t cap) {
return len < 0 ? FILES_PREFS_E_FULL : len;
}
/* Already the newest recent folder and the last one: a visit would write the same file again. */
static int visit_is_noop(const files_prefs_t *p, const char *path) {
char clean[FILES_PREFS_PATH_MAX];
if (files_prefs_clean_path(path, clean) != FILES_PREFS_OK) return 0;
return p->has_last && strcmp(p->last, clean) == 0 && p->nrecent > 0 && strcmp(p->recent[0], clean) == 0;
}
int files_prefs_update(const char *file, int op, const char *path, char *out, size_t cap) {
files_prefs_t *p;
int rc, len;
@@ -294,6 +301,12 @@ int files_prefs_update(const char *file, int op, const char *path, char *out, si
if (!p) return FILES_PREFS_E_NOMEM;
pthread_mutex_lock(&g_prefs_mu);
(void)files_prefs_load(file, p); /* garbage reads as empty and is replaced below */
if (op == FILES_PREFS_VISIT && visit_is_noop(p, path)) {
pthread_mutex_unlock(&g_prefs_mu);
len = files_prefs_to_json(p, out, cap);
free(p);
return len < 0 ? FILES_PREFS_E_FULL : len;
}
rc = op == FILES_PREFS_PIN ? files_prefs_pin(p, path)
: op == FILES_PREFS_UNPIN ? files_prefs_unpin(p, path)
: files_prefs_visit(p, path);
+18 -12
View File
@@ -662,24 +662,30 @@ static void r_volumes_eject(const char *b, size_t n, uint8_t *out, int fd) {
else send_json(fd, 200, "{}", 2);
}
/* The console's own volumes are never unmounted from the page (the helper refuses anything it did not
* mount itself as well: fs_unmount_not_our_mount). */
static int is_system_volume(const char *p) {
return strcmp(p, "/") == 0 || strcmp(p, "/data") == 0 || strncmp(p, "/data/", 6) == 0 || strcmp(p, "/user") == 0 ||
strncmp(p, "/user/", 6) == 0 || strncmp(p, "/system", 7) == 0 || strncmp(p, "/preinst", 8) == 0 ||
strncmp(p, "/mnt/usb", 8) == 0 || strncmp(p, "/mnt/ext", 8) == 0 || strncmp(p, "/dev", 4) == 0;
}
/* FS_UNMOUNT {"mount_point":..} (fs_ops.rs fs_unmount): an image the helper mounted. A game running from
* it holds it open: 409 fs_unmount_busy. */
/* FS_UNMOUNT {"mount_point":..} (fs_ops.rs fs_unmount): an image the helper mounted. The helper does NOT
* refuse a busy mount: fs_mount_try_unmount (runtime.c) escalates to MNT_FORCE on EBUSY, so a game
* running from the image would lose it mid-play. Ruling R20: refused here while any game runs (the same
* PROC_FOCUS reading /api/status shows: 409 game_running), and the console's own volumes are never
* unmounted from the page (403 system_volume; webui_unmount_refusal). The helper itself still refuses
* mounts it did not make (fs_unmount_not_our_mount). */
static void r_volumes_unmount(const char *b, size_t n, uint8_t *out, int fd) {
char path[API_PATH], req[API_PATH * 2 + 32];
const uint8_t *t;
size_t ol, tl, at = 0;
int st;
const char *why;
char title[16];
uint32_t app_id = 0;
int running = 0;
if (need_path(fd, b, n, "path", path, sizeof path) != 0) return;
if (is_system_volume(path)) {
send_error(fd, 403, "system_volume", 13);
if (!webui_unmount_refusal(path, 0)) {
/* a failed focus read counts as running: never force an unmount on a guess */
running = call_text(AVA1_METHOD_PROC_FOCUS, NULL, 0, out, &ol, &t, &tl) != AVA1_STATUS_OK ||
webui_focus_running((const char *)t, tl, title, sizeof title, &app_id) != 0;
}
why = webui_unmount_refusal(path, running);
if (why) {
send_error(fd, strcmp(why, "game_running") == 0 ? 409 : 403, why, strlen(why));
return;
}
put_fmt(req, sizeof req, &at, "{");
+10
View File
@@ -774,3 +774,13 @@ const char *webui_cheats_toggle_error(const char *cause, size_t n) {
if (strstr(msg, "is not loaded in the target process")) return "module_missing";
return "toggle_failed";
}
static int starts(const char *p, const char *pre) { return strncmp(p, pre, strlen(pre)) == 0; }
const char *webui_unmount_refusal(const char *p, int game_running) {
if (!p || strcmp(p, "/") == 0 || strcmp(p, "/data") == 0 || starts(p, "/data/") || strcmp(p, "/user") == 0 ||
starts(p, "/user/") || starts(p, "/system") || starts(p, "/preinst") || starts(p, "/mnt/usb") ||
starts(p, "/mnt/ext") || starts(p, "/dev"))
return "system_volume";
return game_running ? "game_running" : NULL;
}
+7
View File
@@ -258,6 +258,13 @@ static void test_atomic_save(void) {
CHECK(files_prefs_update(g_file, FILES_PREFS_PIN, "/data/c", g_out, sizeof g_out) == FILES_PREFS_E_IO);
CHECK(files_prefs_load(g_file, q) == 0 && q->nfav == 1);
rmdir(tmp);
/* a visit that changes nothing writes nothing: it succeeds even while a save could not */
CHECK(files_prefs_update(g_file, FILES_PREFS_VISIT, "/data/v", g_out, sizeof g_out) > 0);
CHECK(mkdir(tmp, 0755) == 0);
CHECK(files_prefs_update(g_file, FILES_PREFS_VISIT, "/data/v/", g_out, sizeof g_out) > 0);
CHECK(strstr(g_out, "\"last\":\"/data/v\"") != NULL);
CHECK(files_prefs_update(g_file, FILES_PREFS_VISIT, "/data/w", g_out, sizeof g_out) == FILES_PREFS_E_IO);
rmdir(tmp);
/* a folder that does not exist: refused, nothing created */
snprintf(bad_file, sizeof bad_file, "%s/missing/prefs.json", g_dir);
CHECK(files_prefs_save(bad_file, p) == FILES_PREFS_E_IO);
+15
View File
@@ -536,6 +536,20 @@ static void array_span(void) {
CHECK(webui_json_array("{\"events\":[\"a\"", 13, "events", &v, &len) == -1); /* cut short */
}
static void unmount_refusal(void) {
static const char *sys[] = { "/", "/data", "/data/x", "/user", "/user/app", "/system", "/system_ex", "/preinst",
"/dev/lvd0", "/mnt/usb0", "/mnt/ext1" };
size_t i;
for (i = 0; i < sizeof sys / sizeof sys[0]; i++) {
CHECK(webui_unmount_refusal(sys[i], 0) && strcmp(webui_unmount_refusal(sys[i], 0), "system_volume") == 0);
CHECK(strcmp(webui_unmount_refusal(sys[i], 1), "system_volume") == 0);
}
CHECK(webui_unmount_refusal("/mnt/ps5upload/game.exfat", 0) == NULL);
CHECK(strcmp(webui_unmount_refusal("/mnt/ps5upload/game.exfat", 1), "game_running") == 0);
CHECK(webui_unmount_refusal("/mnt/shadowmnt/x", 0) == NULL); /* the helper's own consent rule decides */
CHECK(strcmp(webui_unmount_refusal(NULL, 0), "system_volume") == 0);
}
static void array_strings(void) {
const char *j = "{\"a\":[ \"/x\" , \"\\u5b8c \\\"q\\\"\" ],\"e\":[ ],\"m\":[\"ok\",3],\"z\":null,\"s\":\"null\"}";
const char *v = NULL;
@@ -651,6 +665,7 @@ int main(void) {
unicode_path_round_trips();
array_span();
array_strings();
unmount_refusal();
surrogate_pair_decodes();
missing_key_is_absent_not_empty();
list_result_to_json();