Rebuild organize imports: move furniture between categories, 500-item cap
This commit is contained in:
1 parent
67430e7e9d
commit
644d53ca16
28 files changed
+578
-224
No files matched your search
@@ -349,7 +349,7 @@ export async function createAutoCategory(input: {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const MAX_ORGANIZE_GROUPS = 50;
|
const MAX_ORGANIZE_GROUPS = 50;
|
||||||
const MAX_ORGANIZE_ITEMS = 1000;
|
const MAX_ORGANIZE_ITEMS = 500;
|
||||||
|
|
||||||
export interface OrganizeImportGroup {
|
export interface OrganizeImportGroup {
|
||||||
caption: string;
|
caption: string;
|
||||||
|
|||||||
@@ -210,6 +210,7 @@ export const GET = withAdmin(
|
|||||||
// then we can use the extra fields in the returned groups.
|
// then we can use the extra fields in the returned groups.
|
||||||
const sugItems = items.map((it) => ({
|
const sugItems = items.map((it) => ({
|
||||||
id: it.itemId,
|
id: it.itemId,
|
||||||
|
itemId: it.itemId,
|
||||||
itemName: it.itemName,
|
itemName: it.itemName,
|
||||||
publicName: it.publicName,
|
publicName: it.publicName,
|
||||||
type: it.type,
|
type: it.type,
|
||||||
@@ -217,6 +218,7 @@ export const GET = withAdmin(
|
|||||||
interactionType: it.interactionType,
|
interactionType: it.interactionType,
|
||||||
alreadyPlaced: it.alreadyPlaced,
|
alreadyPlaced: it.alreadyPlaced,
|
||||||
catalogItemId: it.catalogItemId,
|
catalogItemId: it.catalogItemId,
|
||||||
|
sourcePageCaption: it.sourcePageCaption,
|
||||||
})) as SugFurniEntryExtra[];
|
})) as SugFurniEntryExtra[];
|
||||||
const groups = groupSuggestedCategories(sugItems).map((g) => {
|
const groups = groupSuggestedCategories(sugItems).map((g) => {
|
||||||
const moved = g.items.filter((i) => i.alreadyPlaced).length;
|
const moved = g.items.filter((i) => i.alreadyPlaced).length;
|
||||||
@@ -227,17 +229,16 @@ export const GET = withAdmin(
|
|||||||
total: g.items.length,
|
total: g.items.length,
|
||||||
moved,
|
moved,
|
||||||
added: g.items.length - moved,
|
added: g.items.length - moved,
|
||||||
thumbs: g.items.slice(0, 12).map((i) => ({
|
|
||||||
itemName: i.itemName,
|
|
||||||
publicName: i.publicName,
|
|
||||||
spriteId: i.spriteId,
|
|
||||||
alreadyPlaced: i.alreadyPlaced,
|
|
||||||
sourcePageCaption: i.sourcePageCaption,
|
|
||||||
})),
|
|
||||||
items: g.items.map((i) => ({
|
items: g.items.map((i) => ({
|
||||||
itemId: i.itemId,
|
itemId: i.itemId,
|
||||||
catalogItemId: i.catalogItemId,
|
catalogItemId: i.catalogItemId,
|
||||||
alreadyPlaced: i.alreadyPlaced,
|
alreadyPlaced: i.alreadyPlaced,
|
||||||
|
itemName: i.itemName,
|
||||||
|
publicName: i.publicName,
|
||||||
|
spriteId: i.spriteId,
|
||||||
|
type: i.type,
|
||||||
|
interactionType: i.interactionType,
|
||||||
|
sourcePageCaption: i.sourcePageCaption ?? null,
|
||||||
})),
|
})),
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ import {
|
|||||||
Plus,
|
Plus,
|
||||||
RefreshCw,
|
RefreshCw,
|
||||||
Search,
|
Search,
|
||||||
|
Trash2,
|
||||||
Wand2,
|
Wand2,
|
||||||
X,
|
X,
|
||||||
} from "lucide-react";
|
} from "lucide-react";
|
||||||
@@ -42,10 +43,13 @@ import {
|
|||||||
isValidCatalogLayout,
|
isValidCatalogLayout,
|
||||||
LAYOUT_DESCRIPTIONS,
|
LAYOUT_DESCRIPTIONS,
|
||||||
} from "@/lib/catalog-layouts";
|
} from "@/lib/catalog-layouts";
|
||||||
// import { CATALOG_LAYOUTS } from "@/lib/catalog-layouts";
|
|
||||||
import { getLocalIconUrl } from "@/lib/furni/classname";
|
import { getLocalIconUrl } from "@/lib/furni/classname";
|
||||||
import { cn } from "@/lib/utils";
|
import { cn } from "@/lib/utils";
|
||||||
|
|
||||||
|
const MAX_ITEMS_PER_RUN = 500;
|
||||||
|
const ITEMS_VISIBLE = 40;
|
||||||
|
const QUICK_PICKS = 40;
|
||||||
|
|
||||||
interface OrganizeGroupOverride {
|
interface OrganizeGroupOverride {
|
||||||
caption?: string;
|
caption?: string;
|
||||||
icon?: number;
|
icon?: number;
|
||||||
@@ -57,6 +61,18 @@ interface RootPage {
|
|||||||
caption: string;
|
caption: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
interface OrganizeImportItem {
|
||||||
|
itemId: number;
|
||||||
|
catalogItemId: number | null;
|
||||||
|
alreadyPlaced: boolean;
|
||||||
|
itemName: string;
|
||||||
|
publicName: string;
|
||||||
|
spriteId: number;
|
||||||
|
type: string;
|
||||||
|
interactionType: string;
|
||||||
|
sourcePageCaption: string | null;
|
||||||
|
}
|
||||||
|
|
||||||
interface OrganizeImportGroup {
|
interface OrganizeImportGroup {
|
||||||
name: string;
|
name: string;
|
||||||
icon: number;
|
icon: number;
|
||||||
@@ -64,18 +80,7 @@ interface OrganizeImportGroup {
|
|||||||
total: number;
|
total: number;
|
||||||
moved: number;
|
moved: number;
|
||||||
added: number;
|
added: number;
|
||||||
thumbs: {
|
items: OrganizeImportItem[];
|
||||||
itemName: string;
|
|
||||||
publicName: string;
|
|
||||||
spriteId: number;
|
|
||||||
alreadyPlaced: boolean;
|
|
||||||
sourcePageCaption: string | null;
|
|
||||||
}[];
|
|
||||||
items: {
|
|
||||||
itemId: number;
|
|
||||||
catalogItemId: number | null;
|
|
||||||
alreadyPlaced: boolean;
|
|
||||||
}[];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
interface OrganizeImportsDialogProps {
|
interface OrganizeImportsDialogProps {
|
||||||
@@ -129,6 +134,9 @@ export function OrganizeImportsDialog({
|
|||||||
const [batchLayout, setBatchLayout] = useState<CatalogLayout>("default_3x3");
|
const [batchLayout, setBatchLayout] = useState<CatalogLayout>("default_3x3");
|
||||||
const [batchPrefix, setBatchPrefix] = useState("");
|
const [batchPrefix, setBatchPrefix] = useState("");
|
||||||
|
|
||||||
|
const [expanded, setExpanded] = useState<Record<string, boolean>>({});
|
||||||
|
const [selection, setSelection] = useState<Set<number>>(new Set());
|
||||||
|
|
||||||
const load = useCallback(async () => {
|
const load = useCallback(async () => {
|
||||||
setLoading(true);
|
setLoading(true);
|
||||||
setLoadError(false);
|
setLoadError(false);
|
||||||
@@ -168,6 +176,8 @@ export function OrganizeImportsDialog({
|
|||||||
setGroups([]);
|
setGroups([]);
|
||||||
setApproved({});
|
setApproved({});
|
||||||
setOverrides({});
|
setOverrides({});
|
||||||
|
setExpanded({});
|
||||||
|
setSelection(new Set());
|
||||||
setParentId(-1);
|
setParentId(-1);
|
||||||
setMoveMode(false);
|
setMoveMode(false);
|
||||||
setDestinationPageId(null);
|
setDestinationPageId(null);
|
||||||
@@ -220,11 +230,11 @@ export function OrganizeImportsDialog({
|
|||||||
}, [moveMode, destDebounced]);
|
}, [moveMode, destDebounced]);
|
||||||
|
|
||||||
const allApproved =
|
const allApproved =
|
||||||
groups.length > 0 && groups.every((g) => approved[g.name]);
|
groups.length > 0 && groups.every((g) => approved[g.name] !== false);
|
||||||
const totalSelected = useMemo(
|
const totalSelected = useMemo(
|
||||||
() =>
|
() =>
|
||||||
groups.reduce(
|
groups.reduce(
|
||||||
(sum, g) => sum + (approved[g.name] ? g.items.length : 0),
|
(sum, g) => sum + (approved[g.name] !== false ? g.items.length : 0),
|
||||||
0,
|
0,
|
||||||
),
|
),
|
||||||
[groups, approved],
|
[groups, approved],
|
||||||
@@ -233,7 +243,7 @@ export function OrganizeImportsDialog({
|
|||||||
// One approved group becomes exactly one page, so the "Create … pages"
|
// One approved group becomes exactly one page, so the "Create … pages"
|
||||||
// label must count groups, not the furni items inside them.
|
// label must count groups, not the furni items inside them.
|
||||||
const selectedGroupsCount = useMemo(
|
const selectedGroupsCount = useMemo(
|
||||||
() => groups.filter((g) => approved[g.name]).length,
|
() => groups.filter((g) => approved[g.name] !== false).length,
|
||||||
[groups, approved],
|
[groups, approved],
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -294,27 +304,77 @@ export function OrganizeImportsDialog({
|
|||||||
const filteredGroups = useMemo(() => {
|
const filteredGroups = useMemo(() => {
|
||||||
const q = groupSearchQuery.trim().toLowerCase();
|
const q = groupSearchQuery.trim().toLowerCase();
|
||||||
return groups.filter((g) => {
|
return groups.filter((g) => {
|
||||||
if (onlyUnplaced && g.added === 0 && g.moved === 0) return false;
|
const movedCount = g.items.filter((i) => i.alreadyPlaced).length;
|
||||||
|
const addedCount = g.items.length - movedCount;
|
||||||
|
if (onlyUnplaced && addedCount === 0 && movedCount === 0) return false;
|
||||||
if (!q) return true;
|
if (!q) return true;
|
||||||
if (g.name.toLowerCase().includes(q)) return true;
|
if (g.name.toLowerCase().includes(q)) return true;
|
||||||
const caption = overrides[g.name]?.caption?.toLowerCase();
|
const caption = overrides[g.name]?.caption?.toLowerCase();
|
||||||
if (caption?.includes(q)) return true;
|
if (caption?.includes(q)) return true;
|
||||||
return g.thumbs.some((t) => t.itemName.toLowerCase().includes(q));
|
return g.items.some((i) => i.itemName.toLowerCase().includes(q));
|
||||||
});
|
});
|
||||||
}, [groups, groupSearchQuery, onlyUnplaced, overrides]);
|
}, [groups, groupSearchQuery, onlyUnplaced, overrides]);
|
||||||
|
|
||||||
|
const moveItemToGroup = (
|
||||||
|
item: OrganizeImportItem,
|
||||||
|
fromName: string,
|
||||||
|
toName: string,
|
||||||
|
) => {
|
||||||
|
if (!toName || toName === fromName) return;
|
||||||
|
setGroups((prev) =>
|
||||||
|
prev.map((g) => {
|
||||||
|
if (g.name === fromName) {
|
||||||
|
const items = g.items.filter((i) => i.itemId !== item.itemId);
|
||||||
|
return { ...g, items };
|
||||||
|
}
|
||||||
|
if (g.name === toName) {
|
||||||
|
const exists = g.items.some((i) => i.itemId === item.itemId);
|
||||||
|
return exists ? g : { ...g, items: [...g.items, item] };
|
||||||
|
}
|
||||||
|
return g;
|
||||||
|
}),
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
const moveSelectedToGroup = (toName: string) => {
|
||||||
|
if (selection.size === 0 || !toName) return;
|
||||||
|
setGroups((prev) => {
|
||||||
|
const moved: OrganizeImportItem[] = [];
|
||||||
|
const next = prev.map((g) => {
|
||||||
|
if (g.name === toName) return g;
|
||||||
|
const taken = g.items.filter((i) => selection.has(i.itemId));
|
||||||
|
const kept = g.items.filter((i) => !selection.has(i.itemId));
|
||||||
|
moved.push(...taken);
|
||||||
|
return taken.length === 0 ? g : { ...g, items: kept };
|
||||||
|
});
|
||||||
|
if (moved.length === 0) return prev;
|
||||||
|
return next.map((g) =>
|
||||||
|
g.name === toName ? { ...g, items: [...g.items, ...moved] } : g,
|
||||||
|
);
|
||||||
|
});
|
||||||
|
setSelection(new Set());
|
||||||
|
};
|
||||||
|
|
||||||
|
const moveItemOptions = (fromName: string) =>
|
||||||
|
groups.filter((g) => g.name !== fromName);
|
||||||
|
|
||||||
const handleCreate = async () => {
|
const handleCreate = async () => {
|
||||||
if (isCreating) return;
|
if (isCreating) return;
|
||||||
if (totalSelected > 1000) {
|
if (totalSelected === 0) {
|
||||||
toast.error(t("errorMaxItems"));
|
toast.error(t("errorNoName"));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if (totalSelected > MAX_ITEMS_PER_RUN) {
|
||||||
|
toast.error(t("errorMaxItems", { count: MAX_ITEMS_PER_RUN }));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (groups.length === 0) return;
|
||||||
if (moveMode && destinationPageId == null) {
|
if (moveMode && destinationPageId == null) {
|
||||||
toast.error(t("chooseDestination"));
|
toast.error(t("chooseDestination"));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const payload = groups
|
const payload = groups
|
||||||
.filter((g) => approved[g.name])
|
.filter((g) => approved[g.name] !== false)
|
||||||
.map((g) => {
|
.map((g) => {
|
||||||
const o = overrides[g.name] ?? {};
|
const o = overrides[g.name] ?? {};
|
||||||
return {
|
return {
|
||||||
@@ -342,7 +402,7 @@ export function OrganizeImportsDialog({
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (payload.length === 0 || payload.some((g) => !g.caption)) {
|
if (payload.some((g) => !g.caption)) {
|
||||||
toast.error(t("errorNoName"));
|
toast.error(t("errorNoName"));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -351,9 +411,9 @@ export function OrganizeImportsDialog({
|
|||||||
const result = await organizeImportFurni({ parentId, groups: payload });
|
const result = await organizeImportFurni({ parentId, groups: payload });
|
||||||
if (!result.ok) throw new Error(result.error ?? "Failed");
|
if (!result.ok) throw new Error(result.error ?? "Failed");
|
||||||
const created = result.data?.created ?? [];
|
const created = result.data?.created ?? [];
|
||||||
|
const moved = created.reduce((sum, c) => sum + c.moved, 0);
|
||||||
|
const added = created.reduce((sum, c) => sum + c.added, 0);
|
||||||
if (moveMode) {
|
if (moveMode) {
|
||||||
const moved = created.reduce((sum, c) => sum + c.moved, 0);
|
|
||||||
const added = created.reduce((sum, c) => sum + c.added, 0);
|
|
||||||
toast.success(
|
toast.success(
|
||||||
t("successMove", {
|
t("successMove", {
|
||||||
moved,
|
moved,
|
||||||
@@ -362,8 +422,6 @@ export function OrganizeImportsDialog({
|
|||||||
}),
|
}),
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
const moved = created.reduce((sum, c) => sum + c.moved, 0);
|
|
||||||
const added = created.reduce((sum, c) => sum + c.added, 0);
|
|
||||||
toast.success(
|
toast.success(
|
||||||
t("successCreate", {
|
t("successCreate", {
|
||||||
count: created.length,
|
count: created.length,
|
||||||
@@ -382,10 +440,12 @@ export function OrganizeImportsDialog({
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const quickPicks = rootPages.slice(0, QUICK_PICKS);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<Dialog open={open} onOpenChange={onOpenChange}>
|
<Dialog open={open} onOpenChange={onOpenChange}>
|
||||||
<DialogContent className="flex h-[90vh] max-h-[90vh] w-[800px] max-w-[95vw] flex-col overflow-hidden p-0">
|
<DialogContent className="flex h-[90vh] max-h-[90vh] w-[860px] max-w-[95vw] flex-col overflow-hidden p-0">
|
||||||
<DialogHeader className="flex-none border-b px-4 py-3">
|
<DialogHeader className="flex-none border-b px-4 py-3">
|
||||||
<DialogTitle className="flex items-center gap-2 text-sm font-semibold">
|
<DialogTitle className="flex items-center gap-2 text-sm font-semibold">
|
||||||
<FolderTree className="h-4 w-4" />
|
<FolderTree className="h-4 w-4" />
|
||||||
@@ -543,47 +603,70 @@ export function OrganizeImportsDialog({
|
|||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
) : (
|
) : (
|
||||||
<div className="relative">
|
<>
|
||||||
<Search className="absolute left-2.5 top-1/2 h-3.5 w-3.5 -translate-y-1/2 text-muted-foreground" />
|
<div className="relative">
|
||||||
<Input
|
<Search className="absolute left-2.5 top-1/2 h-3.5 w-3.5 -translate-y-1/2 text-muted-foreground" />
|
||||||
className="h-8 pl-8 text-xs"
|
<Input
|
||||||
placeholder={t("destinationSearchPlaceholder")}
|
className="h-8 pl-8 text-xs"
|
||||||
value={destQuery}
|
placeholder={t("destinationSearchPlaceholder")}
|
||||||
onChange={(e) => setDestQuery(e.target.value)}
|
value={destQuery}
|
||||||
/>
|
onChange={(e) => setDestQuery(e.target.value)}
|
||||||
{destSearchLoading && (
|
/>
|
||||||
<Loader2 className="absolute right-2.5 top-1/2 h-3.5 w-3.5 -translate-y-1/2 animate-spin text-muted-foreground" />
|
{destSearchLoading && (
|
||||||
|
<Loader2 className="absolute right-2.5 top-1/2 h-3.5 w-3.5 -translate-y-1/2 animate-spin text-muted-foreground" />
|
||||||
|
)}
|
||||||
|
</div>
|
||||||
|
{/* Quick pick: click a root page without typing */}
|
||||||
|
{destQuery.length < 2 && quickPicks.length > 0 && (
|
||||||
|
<div className="flex max-h-[140px] flex-wrap gap-1 overflow-y-auto rounded border bg-[var(--admin-canvas)] p-1.5">
|
||||||
|
{quickPicks.map((p) => (
|
||||||
|
<button
|
||||||
|
type="button"
|
||||||
|
key={p.id}
|
||||||
|
onClick={() => {
|
||||||
|
setDestinationPageId(p.id);
|
||||||
|
setDestinationCaption(p.caption);
|
||||||
|
}}
|
||||||
|
className="flex max-w-full items-center gap-1 rounded border border-[var(--admin-border)] bg-[var(--admin-surface)] px-2 py-1 text-[10px] text-[var(--admin-text)] hover:border-current"
|
||||||
|
>
|
||||||
|
<Folder className="h-3 w-3 shrink-0" />
|
||||||
|
<span className="min-w-0 truncate">
|
||||||
|
{p.caption}
|
||||||
|
</span>
|
||||||
|
</button>
|
||||||
|
))}
|
||||||
|
</div>
|
||||||
)}
|
)}
|
||||||
</div>
|
{destQuery.length >= 2 && (
|
||||||
)}
|
<div className="max-h-[160px] divide-y overflow-y-auto rounded border">
|
||||||
{destinationPageId == null && destDebounced.length >= 2 && (
|
{destResults.length === 0 && !destSearchLoading ? (
|
||||||
<div className="max-h-[160px] divide-y overflow-y-auto rounded border">
|
<p className="py-3 text-center text-[10px] text-muted-foreground">
|
||||||
{destResults.length === 0 && !destSearchLoading ? (
|
{t("noDestResults")}
|
||||||
<p className="py-3 text-center text-[10px] text-muted-foreground">
|
</p>
|
||||||
{t("noDestResults")}
|
) : (
|
||||||
</p>
|
destResults.map((p) => (
|
||||||
) : (
|
<button
|
||||||
destResults.map((p) => (
|
key={p.id}
|
||||||
<button
|
type="button"
|
||||||
key={p.id}
|
onClick={() => {
|
||||||
type="button"
|
setDestinationPageId(p.id);
|
||||||
onClick={() => {
|
setDestinationCaption(p.caption);
|
||||||
setDestinationPageId(p.id);
|
}}
|
||||||
setDestinationCaption(p.caption);
|
className="flex w-full items-center gap-2 px-2 py-1.5 text-left hover:bg-accent"
|
||||||
}}
|
>
|
||||||
className="flex w-full items-center gap-2 px-2 py-1.5 text-left hover:bg-accent"
|
<Folder className="h-3.5 w-3.5 shrink-0" />
|
||||||
>
|
<span className="min-w-0 flex-1 truncate text-xs">
|
||||||
<Folder className="h-3.5 w-3.5 shrink-0" />
|
{p.caption}
|
||||||
<span className="min-w-0 flex-1 truncate text-xs">
|
</span>
|
||||||
{p.caption}
|
<span className="font-mono text-[9px] text-muted-foreground">
|
||||||
</span>
|
#{p.id}
|
||||||
<span className="font-mono text-[9px] text-muted-foreground">
|
</span>
|
||||||
#{p.id}
|
</button>
|
||||||
</span>
|
))
|
||||||
</button>
|
)}
|
||||||
))
|
</div>
|
||||||
)}
|
)}
|
||||||
</div>
|
</>
|
||||||
)}
|
)}
|
||||||
<p className="text-[10px] text-muted-foreground">
|
<p className="text-[10px] text-muted-foreground">
|
||||||
{t("destinationHint")}
|
{t("destinationHint")}
|
||||||
@@ -748,6 +831,52 @@ export function OrganizeImportsDialog({
|
|||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
{/* Move selected to another category */}
|
||||||
|
{selection.size > 0 && (
|
||||||
|
<div className="flex flex-wrap items-center gap-2 rounded-md border border-[var(--admin-accent)]/40 bg-[var(--admin-accent-subtle)] px-2.5 py-2">
|
||||||
|
<span className="text-[10px] font-semibold text-[var(--admin-accent)]">
|
||||||
|
{t("selectedCount", { count: selection.size })}
|
||||||
|
</span>
|
||||||
|
<span className="text-[10px] text-muted-foreground">
|
||||||
|
{t("batchMoveTo")}
|
||||||
|
</span>
|
||||||
|
<Select
|
||||||
|
value=""
|
||||||
|
onValueChange={(v) => {
|
||||||
|
if (v) {
|
||||||
|
moveSelectedToGroup(v);
|
||||||
|
setExpanded((prev) => ({ ...prev, [v]: true }));
|
||||||
|
}
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
<SelectTrigger className="h-7 w-[180px] text-[10px]">
|
||||||
|
<SelectValue placeholder={t("batchMoveTo")} />
|
||||||
|
</SelectTrigger>
|
||||||
|
<SelectContent>
|
||||||
|
{groups.map((g) => (
|
||||||
|
<SelectItem
|
||||||
|
key={g.name}
|
||||||
|
value={g.name}
|
||||||
|
className="text-xs"
|
||||||
|
>
|
||||||
|
{g.name}
|
||||||
|
</SelectItem>
|
||||||
|
))}
|
||||||
|
</SelectContent>
|
||||||
|
</Select>
|
||||||
|
<Button
|
||||||
|
type="button"
|
||||||
|
variant="ghost"
|
||||||
|
size="sm"
|
||||||
|
className="h-7 px-2 text-[10px] text-muted-foreground hover:text-foreground"
|
||||||
|
onClick={() => setSelection(new Set())}
|
||||||
|
>
|
||||||
|
<Trash2 className="mr-1 h-3 w-3" />
|
||||||
|
{t("clearSelection")}
|
||||||
|
</Button>
|
||||||
|
</div>
|
||||||
|
)}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{filteredGroups.map((group) => {
|
{filteredGroups.map((group) => {
|
||||||
@@ -756,16 +885,23 @@ export function OrganizeImportsDialog({
|
|||||||
const icon = o.icon ?? group.icon;
|
const icon = o.icon ?? group.icon;
|
||||||
const layout = o.layout ?? group.layout ?? "default_3x3";
|
const layout = o.layout ?? group.layout ?? "default_3x3";
|
||||||
const isApproved = approved[group.name] !== false;
|
const isApproved = approved[group.name] !== false;
|
||||||
const moved = group.moved;
|
const movedCount = group.items.filter(
|
||||||
const added = group.added;
|
(i) => i.alreadyPlaced,
|
||||||
|
).length;
|
||||||
|
const addedCount = group.items.length - movedCount;
|
||||||
|
const isExpanded = expanded[group.name] ?? false;
|
||||||
|
const visibleItems = isExpanded
|
||||||
|
? group.items
|
||||||
|
: group.items.slice(0, ITEMS_VISIBLE);
|
||||||
|
const moveTargets = moveItemOptions(group.name);
|
||||||
return (
|
return (
|
||||||
<label
|
<div
|
||||||
key={group.name}
|
key={group.name}
|
||||||
className={cn(
|
className={cn(
|
||||||
"block rounded-md border bg-[var(--admin-surface)] p-3 transition-colors",
|
"block rounded-md border bg-[var(--admin-surface)] p-3 transition-colors",
|
||||||
isApproved
|
isApproved
|
||||||
? "border-[var(--admin-accent)]/40"
|
? "border-[var(--admin-accent)]/40"
|
||||||
: "opacity-60",
|
: "opacity-70",
|
||||||
)}
|
)}
|
||||||
>
|
>
|
||||||
<div className="flex items-center gap-2">
|
<div className="flex items-center gap-2">
|
||||||
@@ -788,32 +924,28 @@ export function OrganizeImportsDialog({
|
|||||||
variant="ghost"
|
variant="ghost"
|
||||||
size="sm"
|
size="sm"
|
||||||
className="h-5 gap-1 px-1.5 text-[10px]"
|
className="h-5 gap-1 px-1.5 text-[10px]"
|
||||||
onClick={(e) => {
|
onClick={() => setPreviewGroup(group)}
|
||||||
e.preventDefault();
|
|
||||||
e.stopPropagation();
|
|
||||||
setPreviewGroup(group);
|
|
||||||
}}
|
|
||||||
>
|
>
|
||||||
<Eye className="h-3 w-3" />
|
<Eye className="h-3 w-3" />
|
||||||
{t("visualPreview")}
|
{t("visualPreview")}
|
||||||
</Button>
|
</Button>
|
||||||
<Badge variant="secondary" className="h-4 text-[9px]">
|
<Badge variant="secondary" className="h-4 text-[9px]">
|
||||||
{group.total}
|
{group.items.length}
|
||||||
</Badge>
|
</Badge>
|
||||||
{moved > 0 && (
|
{movedCount > 0 && (
|
||||||
<Badge
|
<Badge
|
||||||
variant="outline"
|
variant="outline"
|
||||||
className="h-4 gap-1 text-[9px] text-muted-foreground"
|
className="h-4 gap-1 text-[9px] text-muted-foreground"
|
||||||
>
|
>
|
||||||
{t("movedLabel", { count: moved })}
|
{t("movedLabel", { count: movedCount })}
|
||||||
</Badge>
|
</Badge>
|
||||||
)}
|
)}
|
||||||
{added > 0 && (
|
{addedCount > 0 && (
|
||||||
<Badge
|
<Badge
|
||||||
variant="outline"
|
variant="outline"
|
||||||
className="h-4 gap-1 text-[9px] text-muted-foreground"
|
className="h-4 gap-1 text-[9px] text-muted-foreground"
|
||||||
>
|
>
|
||||||
{t("newLabel", { count: added })}
|
{t("newLabel", { count: addedCount })}
|
||||||
</Badge>
|
</Badge>
|
||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
@@ -827,7 +959,6 @@ export function OrganizeImportsDialog({
|
|||||||
<Input
|
<Input
|
||||||
className="h-7 text-xs"
|
className="h-7 text-xs"
|
||||||
value={caption}
|
value={caption}
|
||||||
onClick={(e) => e.stopPropagation()}
|
|
||||||
onChange={(e) =>
|
onChange={(e) =>
|
||||||
updateGroup(group.name, {
|
updateGroup(group.name, {
|
||||||
caption: e.target.value,
|
caption: e.target.value,
|
||||||
@@ -840,13 +971,11 @@ export function OrganizeImportsDialog({
|
|||||||
variant="outline"
|
variant="outline"
|
||||||
size="sm"
|
size="sm"
|
||||||
className="h-7 shrink-0 px-2 text-[10px]"
|
className="h-7 shrink-0 px-2 text-[10px]"
|
||||||
onClick={(e) => {
|
onClick={() =>
|
||||||
e.preventDefault();
|
|
||||||
e.stopPropagation();
|
|
||||||
updateGroup(group.name, {
|
updateGroup(group.name, {
|
||||||
caption: group.name,
|
caption: group.name,
|
||||||
});
|
})
|
||||||
}}
|
}
|
||||||
>
|
>
|
||||||
<Wand2 className="mr-0.5 h-2.5 w-2.5" />
|
<Wand2 className="mr-0.5 h-2.5 w-2.5" />
|
||||||
{t("resetSuggestion")}
|
{t("resetSuggestion")}
|
||||||
@@ -869,7 +998,6 @@ export function OrganizeImportsDialog({
|
|||||||
variant="outline"
|
variant="outline"
|
||||||
size="sm"
|
size="sm"
|
||||||
className="h-7 gap-1.5 px-2"
|
className="h-7 gap-1.5 px-2"
|
||||||
onClick={(e) => e.stopPropagation()}
|
|
||||||
>
|
>
|
||||||
<CatalogIcon iconImage={icon} size={16} />
|
<CatalogIcon iconImage={icon} size={16} />
|
||||||
<span className="font-mono text-[10px] text-muted-foreground">
|
<span className="font-mono text-[10px] text-muted-foreground">
|
||||||
@@ -883,11 +1011,9 @@ export function OrganizeImportsDialog({
|
|||||||
variant="outline"
|
variant="outline"
|
||||||
size="sm"
|
size="sm"
|
||||||
className="h-7 px-2 text-[10px]"
|
className="h-7 px-2 text-[10px]"
|
||||||
onClick={(e) => {
|
onClick={() =>
|
||||||
e.preventDefault();
|
updateGroup(group.name, { icon: group.icon })
|
||||||
e.stopPropagation();
|
}
|
||||||
updateGroup(group.name, { icon: group.icon });
|
|
||||||
}}
|
|
||||||
>
|
>
|
||||||
<Wand2 className="mr-0.5 h-2.5 w-2.5" />
|
<Wand2 className="mr-0.5 h-2.5 w-2.5" />
|
||||||
{group.icon}
|
{group.icon}
|
||||||
@@ -906,13 +1032,11 @@ export function OrganizeImportsDialog({
|
|||||||
"bg-muted text-muted-foreground";
|
"bg-muted text-muted-foreground";
|
||||||
return (
|
return (
|
||||||
<button
|
<button
|
||||||
key={l}
|
|
||||||
type="button"
|
type="button"
|
||||||
onClick={(e) => {
|
key={l}
|
||||||
e.preventDefault();
|
onClick={() =>
|
||||||
e.stopPropagation();
|
updateGroup(group.name, { layout: l })
|
||||||
updateGroup(group.name, { layout: l });
|
}
|
||||||
}}
|
|
||||||
className={cn(
|
className={cn(
|
||||||
"rounded border px-1.5 py-0.5 font-mono text-[10px] transition-colors",
|
"rounded border px-1.5 py-0.5 font-mono text-[10px] transition-colors",
|
||||||
layout === l
|
layout === l
|
||||||
@@ -936,9 +1060,7 @@ export function OrganizeImportsDialog({
|
|||||||
variant="ghost"
|
variant="ghost"
|
||||||
size="sm"
|
size="sm"
|
||||||
className="h-6 w-fit border border-[var(--admin-warning-border)] bg-[var(--admin-warning-subtle)] px-2 text-[10px] text-[var(--admin-warning)]"
|
className="h-6 w-fit border border-[var(--admin-warning-border)] bg-[var(--admin-warning-subtle)] px-2 text-[10px] text-[var(--admin-warning)]"
|
||||||
onClick={(e) => {
|
onClick={() =>
|
||||||
e.preventDefault();
|
|
||||||
e.stopPropagation();
|
|
||||||
updateGroup(group.name, {
|
updateGroup(group.name, {
|
||||||
layout:
|
layout:
|
||||||
group.layout === null
|
group.layout === null
|
||||||
@@ -946,8 +1068,8 @@ export function OrganizeImportsDialog({
|
|||||||
: isValidCatalogLayout(group.layout)
|
: isValidCatalogLayout(group.layout)
|
||||||
? group.layout
|
? group.layout
|
||||||
: undefined,
|
: undefined,
|
||||||
});
|
})
|
||||||
}}
|
}
|
||||||
>
|
>
|
||||||
<Wand2 className="mr-0.5 h-2.5 w-2.5" />
|
<Wand2 className="mr-0.5 h-2.5 w-2.5" />
|
||||||
{t("suggestedLayout", {
|
{t("suggestedLayout", {
|
||||||
@@ -959,41 +1081,113 @@ export function OrganizeImportsDialog({
|
|||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
|
|
||||||
<div className="mt-2 flex flex-wrap gap-1.5 border-t pt-2">
|
{/* Item rows: every furniture item in this category */}
|
||||||
{group.thumbs.slice(0, 12).map((thumb) => (
|
<div className="mt-2 border-t pt-2">
|
||||||
<div
|
{visibleItems.map((item) => {
|
||||||
key={thumb.itemName}
|
const checked = selection.has(item.itemId);
|
||||||
className="group flex flex-col items-center gap-0.5"
|
return (
|
||||||
>
|
|
||||||
<div
|
<div
|
||||||
className="relative"
|
key={item.itemId}
|
||||||
title={thumb.publicName || thumb.itemName}
|
className="flex items-center gap-2 rounded border border-[var(--admin-border)] bg-[var(--admin-canvas)] px-2 py-1"
|
||||||
>
|
>
|
||||||
<FurniThumb item={{ itemName: thumb.itemName }} />
|
<input
|
||||||
|
type="checkbox"
|
||||||
|
checked={checked}
|
||||||
|
onChange={(e) =>
|
||||||
|
setSelection((prev) => {
|
||||||
|
const next = new Set(prev);
|
||||||
|
if (e.target.checked) next.add(item.itemId);
|
||||||
|
else next.delete(item.itemId);
|
||||||
|
return next;
|
||||||
|
})
|
||||||
|
}
|
||||||
|
/>
|
||||||
|
<FurniThumb
|
||||||
|
item={{ itemName: item.itemName }}
|
||||||
|
size={28}
|
||||||
|
/>
|
||||||
|
<div className="min-w-0 flex-1">
|
||||||
|
<p className="truncate text-xs font-medium text-[var(--admin-text)]">
|
||||||
|
{item.publicName || item.itemName}
|
||||||
|
</p>
|
||||||
|
<p className="truncate font-mono text-[9px] text-muted-foreground">
|
||||||
|
{item.itemName}
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
{item.alreadyPlaced ? (
|
||||||
|
<span className="shrink-0 rounded bg-[var(--admin-success-subtle)] px-1.5 py-0.5 text-[9px] text-[var(--admin-text)]">
|
||||||
|
{item.sourcePageCaption
|
||||||
|
? item.sourcePageCaption.replace(
|
||||||
|
new RegExp(`^${t("impPrefix")}`),
|
||||||
|
"",
|
||||||
|
)
|
||||||
|
: t("isMoved")}
|
||||||
|
</span>
|
||||||
|
) : (
|
||||||
|
<span className="shrink-0 rounded bg-[var(--admin-info-subtle)] px-1.5 py-0.5 text-[9px] text-[var(--admin-text)]">
|
||||||
|
{t("isNew")}
|
||||||
|
</span>
|
||||||
|
)}
|
||||||
|
{moveTargets.length > 0 && (
|
||||||
|
<select
|
||||||
|
title={t("moveItemTo")}
|
||||||
|
value=""
|
||||||
|
onChange={(e) => {
|
||||||
|
moveItemToGroup(
|
||||||
|
item,
|
||||||
|
group.name,
|
||||||
|
e.target.value,
|
||||||
|
);
|
||||||
|
e.target.value = "";
|
||||||
|
}}
|
||||||
|
className="h-6 shrink-0 rounded border border-[var(--admin-border)] bg-[var(--admin-surface)] px-1 text-[9px] text-[var(--admin-text)]"
|
||||||
|
>
|
||||||
|
<option value="" disabled>
|
||||||
|
{t("moveItemTo")}
|
||||||
|
</option>
|
||||||
|
{moveTargets.map((g) => (
|
||||||
|
<option key={g.name} value={g.name}>
|
||||||
|
{g.name}
|
||||||
|
</option>
|
||||||
|
))}
|
||||||
|
</select>
|
||||||
|
)}
|
||||||
</div>
|
</div>
|
||||||
{thumb.alreadyPlaced ? (
|
);
|
||||||
<span className="max-w-14 truncate text-[8px] text-muted-foreground">
|
})}
|
||||||
{thumb.sourcePageCaption
|
|
||||||
? thumb.sourcePageCaption.replace(
|
{group.items.length > ITEMS_VISIBLE &&
|
||||||
new RegExp(`^${t("impPrefix")}`),
|
(isExpanded ? (
|
||||||
"",
|
<button
|
||||||
)
|
type="button"
|
||||||
: t("isMoved")}
|
onClick={() =>
|
||||||
</span>
|
setExpanded((prev) => ({
|
||||||
) : (
|
...prev,
|
||||||
<span className="max-w-14 truncate text-[8px] text-muted-foreground">
|
[group.name]: false,
|
||||||
{t("isNew")}
|
}))
|
||||||
</span>
|
}
|
||||||
)}
|
className="mt-1 w-full rounded border border-[var(--admin-border)] py-1 text-[10px] text-muted-foreground hover:text-foreground"
|
||||||
</div>
|
>
|
||||||
))}
|
{t("showLess")}
|
||||||
{group.total > 12 && (
|
</button>
|
||||||
<p className="self-center text-[10px] text-muted-foreground">
|
) : (
|
||||||
+{group.total - 12}
|
<button
|
||||||
</p>
|
type="button"
|
||||||
)}
|
onClick={() =>
|
||||||
|
setExpanded((prev) => ({
|
||||||
|
...prev,
|
||||||
|
[group.name]: true,
|
||||||
|
}))
|
||||||
|
}
|
||||||
|
className="mt-1 w-full rounded border border-[var(--admin-border)] py-1 text-[10px] text-muted-foreground hover:text-foreground"
|
||||||
|
>
|
||||||
|
{t("showAll", {
|
||||||
|
count: group.items.length,
|
||||||
|
})}
|
||||||
|
</button>
|
||||||
|
))}
|
||||||
</div>
|
</div>
|
||||||
</label>
|
</div>
|
||||||
);
|
);
|
||||||
})}
|
})}
|
||||||
</>
|
</>
|
||||||
@@ -1017,6 +1211,7 @@ export function OrganizeImportsDialog({
|
|||||||
loading ||
|
loading ||
|
||||||
isCreating ||
|
isCreating ||
|
||||||
totalSelected === 0 ||
|
totalSelected === 0 ||
|
||||||
|
totalSelected > MAX_ITEMS_PER_RUN ||
|
||||||
(moveMode && destinationPageId == null)
|
(moveMode && destinationPageId == null)
|
||||||
}
|
}
|
||||||
onClick={() => void handleCreate()}
|
onClick={() => void handleCreate()}
|
||||||
@@ -1039,7 +1234,7 @@ export function OrganizeImportsDialog({
|
|||||||
open={previewGroup != null}
|
open={previewGroup != null}
|
||||||
onOpenChange={(open) => !open && setPreviewGroup(null)}
|
onOpenChange={(open) => !open && setPreviewGroup(null)}
|
||||||
>
|
>
|
||||||
<DialogContent className="max-w-md">
|
<DialogContent className="max-w-lg">
|
||||||
<DialogHeader>
|
<DialogHeader>
|
||||||
<DialogTitle className="flex items-center gap-2 text-base">
|
<DialogTitle className="flex items-center gap-2 text-base">
|
||||||
<CatalogIcon iconImage={previewGroup?.icon ?? 1} size={24} />
|
<CatalogIcon iconImage={previewGroup?.icon ?? 1} size={24} />
|
||||||
@@ -1056,7 +1251,7 @@ export function OrganizeImportsDialog({
|
|||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
<Badge variant="outline" className="text-[10px]">
|
<Badge variant="outline" className="text-[10px]">
|
||||||
{previewGroup.total} items
|
{previewGroup.items.length} items
|
||||||
</Badge>
|
</Badge>
|
||||||
</div>
|
</div>
|
||||||
{previewGroup.layout &&
|
{previewGroup.layout &&
|
||||||
@@ -1065,20 +1260,28 @@ export function OrganizeImportsDialog({
|
|||||||
{LAYOUT_DESCRIPTIONS[previewGroup.layout]}
|
{LAYOUT_DESCRIPTIONS[previewGroup.layout]}
|
||||||
</p>
|
</p>
|
||||||
)}
|
)}
|
||||||
<div className="max-h-[220px] overflow-y-auto rounded border p-2">
|
<div className="max-h-[260px] overflow-y-auto rounded border p-2">
|
||||||
<div className="grid grid-cols-4 gap-1.5">
|
<div className="grid grid-cols-4 gap-1.5">
|
||||||
{previewGroup.thumbs.map((thumb) => (
|
{previewGroup.items.slice(0, 40).map((item) => (
|
||||||
<div
|
<div
|
||||||
key={thumb.itemName}
|
key={item.itemId}
|
||||||
className="flex flex-col items-center gap-1 rounded border bg-background p-1.5"
|
className="flex flex-col items-center gap-1 rounded border bg-background p-1.5"
|
||||||
>
|
>
|
||||||
<FurniThumb item={thumb} size={32} />
|
<FurniThumb
|
||||||
|
item={{ itemName: item.itemName }}
|
||||||
|
size={32}
|
||||||
|
/>
|
||||||
<span className="w-full truncate text-center text-[9px] text-muted-foreground">
|
<span className="w-full truncate text-center text-[9px] text-muted-foreground">
|
||||||
{thumb.itemName}
|
{item.itemName}
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
))}
|
))}
|
||||||
</div>
|
</div>
|
||||||
|
{previewGroup.items.length > 40 && (
|
||||||
|
<p className="py-2 text-center text-[10px] text-muted-foreground">
|
||||||
|
{t("showAll", { count: previewGroup.items.length })}
|
||||||
|
</p>
|
||||||
|
)}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
|
|||||||
@@ -907,12 +907,12 @@
|
|||||||
"visualPreview": "Preview",
|
"visualPreview": "Preview",
|
||||||
"resetAll": "Reset overrides",
|
"resetAll": "Reset overrides",
|
||||||
"onlyUnplaced": "Only show unplaced items",
|
"onlyUnplaced": "Only show unplaced items",
|
||||||
"errorMaxItems": "Max 1000 items per run. Reduce selection.",
|
"errorMaxItems": "Max 500 items per run. Reduce selection.",
|
||||||
"errorMaxGroups": "Max {count} groups per run. Reduce selection.",
|
"errorMaxGroups": "Max {count} groups per run. Reduce selection.",
|
||||||
"errorNoName": "Every approved page needs a name",
|
"errorNoName": "Every approved page needs a name",
|
||||||
"tipMove": "Tip: Pick a destination page below to move furniture.",
|
"tipMove": "Tip: Pick a destination page below to move furniture.",
|
||||||
"tipCreate": "Tip: Pick this mode to create new pages.",
|
"tipCreate": "Tip: Pick this mode to create new pages.",
|
||||||
"limitHint": "Max 1000 items and 50 groups per run.",
|
"limitHint": "Max 500 items and 50 groups per run.",
|
||||||
"errorFailed": "Failed to organize imports",
|
"errorFailed": "Failed to organize imports",
|
||||||
"successMove": "Moved {moved} offer{moved, plural, one {} other {s}}{added, plural, =0 {} other {, added {added} new}} to \"{destination}\"",
|
"successMove": "Moved {moved} offer{moved, plural, one {} other {s}}{added, plural, =0 {} other {, added {added} new}} to \"{destination}\"",
|
||||||
"successCreate": "Created {count, plural, one {1 page} other {# pages}} with {moved} moved and {added} added furniture",
|
"successCreate": "Created {count, plural, one {1 page} other {# pages}} with {moved} moved and {added} added furniture",
|
||||||
@@ -920,7 +920,13 @@
|
|||||||
"layoutFallbackDefault3x3": "3x3",
|
"layoutFallbackDefault3x3": "3x3",
|
||||||
"itemsUnit": "items",
|
"itemsUnit": "items",
|
||||||
"impPrefix": "Imp ",
|
"impPrefix": "Imp ",
|
||||||
"isMoved": "moved"
|
"isMoved": "moved",
|
||||||
|
"showAll": "Show all ({count})",
|
||||||
|
"showLess": "Show less",
|
||||||
|
"moveItemTo": "Move to…",
|
||||||
|
"batchMoveTo": "Move selected to…",
|
||||||
|
"selectedCount": "{count} selected",
|
||||||
|
"clearSelection": "Clear selection"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"discovery": {
|
"discovery": {
|
||||||
|
|||||||
@@ -2034,12 +2034,12 @@
|
|||||||
"visualPreview": "Preview",
|
"visualPreview": "Preview",
|
||||||
"resetAll": "Reset overrides",
|
"resetAll": "Reset overrides",
|
||||||
"onlyUnplaced": "Only show unplaced items",
|
"onlyUnplaced": "Only show unplaced items",
|
||||||
"errorMaxItems": "Max 1000 items per run. Reduce selection.",
|
"errorMaxItems": "Max 500 items per run. Reduce selection.",
|
||||||
"errorMaxGroups": "Max {count} groups per run. Reduce selection.",
|
"errorMaxGroups": "Max {count} groups per run. Reduce selection.",
|
||||||
"errorNoName": "Every approved page needs a name",
|
"errorNoName": "Every approved page needs a name",
|
||||||
"tipMove": "Tip: Pick a destination page below to move furniture.",
|
"tipMove": "Tip: Pick a destination page below to move furniture.",
|
||||||
"tipCreate": "Tip: Pick this mode to create new pages.",
|
"tipCreate": "Tip: Pick this mode to create new pages.",
|
||||||
"limitHint": "Max 1000 items and 50 groups per run.",
|
"limitHint": "Max 500 items and 50 groups per run.",
|
||||||
"errorFailed": "Failed to organize imports",
|
"errorFailed": "Failed to organize imports",
|
||||||
"successMove": "Moved {moved} offer{moved, plural, one {} other {s}}{added, plural, =0 {} other {, added {added} new}} to \"{destination}\"",
|
"successMove": "Moved {moved} offer{moved, plural, one {} other {s}}{added, plural, =0 {} other {, added {added} new}} to \"{destination}\"",
|
||||||
"successCreate": "Created {count, plural, one {1 page} other {# pages}} with {moved} moved and {added} added furniture",
|
"successCreate": "Created {count, plural, one {1 page} other {# pages}} with {moved} moved and {added} added furniture",
|
||||||
@@ -2047,7 +2047,13 @@
|
|||||||
"layoutFallbackDefault3x3": "3x3",
|
"layoutFallbackDefault3x3": "3x3",
|
||||||
"itemsUnit": "items",
|
"itemsUnit": "items",
|
||||||
"impPrefix": "Imp ",
|
"impPrefix": "Imp ",
|
||||||
"isMoved": "moved"
|
"isMoved": "moved",
|
||||||
|
"showAll": "Show all ({count})",
|
||||||
|
"showLess": "Show less",
|
||||||
|
"moveItemTo": "Move to…",
|
||||||
|
"batchMoveTo": "Move selected to…",
|
||||||
|
"selectedCount": "{count} selected",
|
||||||
|
"clearSelection": "Clear selection"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"discovery": {
|
"discovery": {
|
||||||
|
|||||||
@@ -2034,12 +2034,12 @@
|
|||||||
"visualPreview": "Preview",
|
"visualPreview": "Preview",
|
||||||
"resetAll": "Reset overrides",
|
"resetAll": "Reset overrides",
|
||||||
"onlyUnplaced": "Only show unplaced items",
|
"onlyUnplaced": "Only show unplaced items",
|
||||||
"errorMaxItems": "Max 1000 items per run. Reduce selection.",
|
"errorMaxItems": "Max 500 items per run. Reduce selection.",
|
||||||
"errorMaxGroups": "Max {count} groups per run. Reduce selection.",
|
"errorMaxGroups": "Max {count} groups per run. Reduce selection.",
|
||||||
"errorNoName": "Every approved page needs a name",
|
"errorNoName": "Every approved page needs a name",
|
||||||
"tipMove": "Tip: Pick a destination page below to move furniture.",
|
"tipMove": "Tip: Pick a destination page below to move furniture.",
|
||||||
"tipCreate": "Tip: Pick this mode to create new pages.",
|
"tipCreate": "Tip: Pick this mode to create new pages.",
|
||||||
"limitHint": "Max 1000 items and 50 groups per run.",
|
"limitHint": "Max 500 items and 50 groups per run.",
|
||||||
"errorFailed": "Failed to organize imports",
|
"errorFailed": "Failed to organize imports",
|
||||||
"successMove": "Moved {moved} offer{moved, plural, one {} other {s}}{added, plural, =0 {} other {, added {added} new}} to \"{destination}\"",
|
"successMove": "Moved {moved} offer{moved, plural, one {} other {s}}{added, plural, =0 {} other {, added {added} new}} to \"{destination}\"",
|
||||||
"successCreate": "Created {count, plural, one {1 page} other {# pages}} with {moved} moved and {added} added furniture",
|
"successCreate": "Created {count, plural, one {1 page} other {# pages}} with {moved} moved and {added} added furniture",
|
||||||
@@ -2047,7 +2047,13 @@
|
|||||||
"layoutFallbackDefault3x3": "3x3",
|
"layoutFallbackDefault3x3": "3x3",
|
||||||
"itemsUnit": "items",
|
"itemsUnit": "items",
|
||||||
"impPrefix": "Imp ",
|
"impPrefix": "Imp ",
|
||||||
"isMoved": "moved"
|
"isMoved": "moved",
|
||||||
|
"showAll": "Show all ({count})",
|
||||||
|
"showLess": "Show less",
|
||||||
|
"moveItemTo": "Move to…",
|
||||||
|
"batchMoveTo": "Move selected to…",
|
||||||
|
"selectedCount": "{count} selected",
|
||||||
|
"clearSelection": "Clear selection"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"discovery": {
|
"discovery": {
|
||||||
|
|||||||
@@ -2034,12 +2034,12 @@
|
|||||||
"visualPreview": "Preview",
|
"visualPreview": "Preview",
|
||||||
"resetAll": "Reset overrides",
|
"resetAll": "Reset overrides",
|
||||||
"onlyUnplaced": "Only show unplaced items",
|
"onlyUnplaced": "Only show unplaced items",
|
||||||
"errorMaxItems": "Max 1000 items per run. Reduce selection.",
|
"errorMaxItems": "Max 500 items per run. Reduce selection.",
|
||||||
"errorMaxGroups": "Max {count} groups per run. Reduce selection.",
|
"errorMaxGroups": "Max {count} groups per run. Reduce selection.",
|
||||||
"errorNoName": "Every approved page needs a name",
|
"errorNoName": "Every approved page needs a name",
|
||||||
"tipMove": "Tip: Pick a destination page below to move furniture.",
|
"tipMove": "Tip: Pick a destination page below to move furniture.",
|
||||||
"tipCreate": "Tip: Pick this mode to create new pages.",
|
"tipCreate": "Tip: Pick this mode to create new pages.",
|
||||||
"limitHint": "Max 1000 items and 50 groups per run.",
|
"limitHint": "Max 500 items and 50 groups per run.",
|
||||||
"errorFailed": "Failed to organize imports",
|
"errorFailed": "Failed to organize imports",
|
||||||
"successMove": "Moved {moved} offer{moved, plural, one {} other {s}}{added, plural, =0 {} other {, added {added} new}} to \"{destination}\"",
|
"successMove": "Moved {moved} offer{moved, plural, one {} other {s}}{added, plural, =0 {} other {, added {added} new}} to \"{destination}\"",
|
||||||
"successCreate": "Created {count, plural, one {1 page} other {# pages}} with {moved} moved and {added} added furniture",
|
"successCreate": "Created {count, plural, one {1 page} other {# pages}} with {moved} moved and {added} added furniture",
|
||||||
@@ -2047,7 +2047,13 @@
|
|||||||
"layoutFallbackDefault3x3": "3x3",
|
"layoutFallbackDefault3x3": "3x3",
|
||||||
"itemsUnit": "items",
|
"itemsUnit": "items",
|
||||||
"impPrefix": "Imp ",
|
"impPrefix": "Imp ",
|
||||||
"isMoved": "moved"
|
"isMoved": "moved",
|
||||||
|
"showAll": "Show all ({count})",
|
||||||
|
"showLess": "Show less",
|
||||||
|
"moveItemTo": "Move to…",
|
||||||
|
"batchMoveTo": "Move selected to…",
|
||||||
|
"selectedCount": "{count} selected",
|
||||||
|
"clearSelection": "Clear selection"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"discovery": {
|
"discovery": {
|
||||||
|
|||||||
@@ -2004,12 +2004,12 @@
|
|||||||
"visualPreview": "Preview",
|
"visualPreview": "Preview",
|
||||||
"resetAll": "Reset overrides",
|
"resetAll": "Reset overrides",
|
||||||
"onlyUnplaced": "Only show unplaced items",
|
"onlyUnplaced": "Only show unplaced items",
|
||||||
"errorMaxItems": "Max 1000 items per run. Reduce selection.",
|
"errorMaxItems": "Max 500 items per run. Reduce selection.",
|
||||||
"errorMaxGroups": "Max {count} groups per run. Reduce selection.",
|
"errorMaxGroups": "Max {count} groups per run. Reduce selection.",
|
||||||
"errorNoName": "Every approved page needs a name",
|
"errorNoName": "Every approved page needs a name",
|
||||||
"tipMove": "Tip: Pick a destination page below to move furniture.",
|
"tipMove": "Tip: Pick a destination page below to move furniture.",
|
||||||
"tipCreate": "Tip: Pick this mode to create new pages.",
|
"tipCreate": "Tip: Pick this mode to create new pages.",
|
||||||
"limitHint": "Max 1000 items and 50 groups per run.",
|
"limitHint": "Max 500 items and 50 groups per run.",
|
||||||
"errorFailed": "Failed to organize imports",
|
"errorFailed": "Failed to organize imports",
|
||||||
"successMove": "Moved {moved} offer{moved, plural, one {} other {s}}{added, plural, =0 {} other {, added {added} new}} to \"{destination}\"",
|
"successMove": "Moved {moved} offer{moved, plural, one {} other {s}}{added, plural, =0 {} other {, added {added} new}} to \"{destination}\"",
|
||||||
"successCreate": "Created {count, plural, one {1 page} other {# pages}} with {moved} moved and {added} added furniture",
|
"successCreate": "Created {count, plural, one {1 page} other {# pages}} with {moved} moved and {added} added furniture",
|
||||||
@@ -2017,7 +2017,13 @@
|
|||||||
"layoutFallbackDefault3x3": "3x3",
|
"layoutFallbackDefault3x3": "3x3",
|
||||||
"itemsUnit": "items",
|
"itemsUnit": "items",
|
||||||
"impPrefix": "Imp ",
|
"impPrefix": "Imp ",
|
||||||
"isMoved": "moved"
|
"isMoved": "moved",
|
||||||
|
"showAll": "Alle anzeigen ({count})",
|
||||||
|
"showLess": "Weniger anzeigen",
|
||||||
|
"moveItemTo": "Verschieben zu…",
|
||||||
|
"batchMoveTo": "Auswahl verschieben zu…",
|
||||||
|
"selectedCount": "{count} ausgewählt",
|
||||||
|
"clearSelection": "Auswahl aufheben"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"discovery": {
|
"discovery": {
|
||||||
|
|||||||
@@ -2034,12 +2034,12 @@
|
|||||||
"visualPreview": "Preview",
|
"visualPreview": "Preview",
|
||||||
"resetAll": "Reset overrides",
|
"resetAll": "Reset overrides",
|
||||||
"onlyUnplaced": "Only show unplaced items",
|
"onlyUnplaced": "Only show unplaced items",
|
||||||
"errorMaxItems": "Max 1000 items per run. Reduce selection.",
|
"errorMaxItems": "Max 500 items per run. Reduce selection.",
|
||||||
"errorMaxGroups": "Max {count} groups per run. Reduce selection.",
|
"errorMaxGroups": "Max {count} groups per run. Reduce selection.",
|
||||||
"errorNoName": "Every approved page needs a name",
|
"errorNoName": "Every approved page needs a name",
|
||||||
"tipMove": "Tip: Pick a destination page below to move furniture.",
|
"tipMove": "Tip: Pick a destination page below to move furniture.",
|
||||||
"tipCreate": "Tip: Pick this mode to create new pages.",
|
"tipCreate": "Tip: Pick this mode to create new pages.",
|
||||||
"limitHint": "Max 1000 items and 50 groups per run.",
|
"limitHint": "Max 500 items and 50 groups per run.",
|
||||||
"errorFailed": "Failed to organize imports",
|
"errorFailed": "Failed to organize imports",
|
||||||
"successMove": "Moved {moved} offer{moved, plural, one {} other {s}}{added, plural, =0 {} other {, added {added} new}} to \"{destination}\"",
|
"successMove": "Moved {moved} offer{moved, plural, one {} other {s}}{added, plural, =0 {} other {, added {added} new}} to \"{destination}\"",
|
||||||
"successCreate": "Created {count, plural, one {1 page} other {# pages}} with {moved} moved and {added} added furniture",
|
"successCreate": "Created {count, plural, one {1 page} other {# pages}} with {moved} moved and {added} added furniture",
|
||||||
@@ -2047,7 +2047,13 @@
|
|||||||
"layoutFallbackDefault3x3": "3x3",
|
"layoutFallbackDefault3x3": "3x3",
|
||||||
"itemsUnit": "items",
|
"itemsUnit": "items",
|
||||||
"impPrefix": "Imp ",
|
"impPrefix": "Imp ",
|
||||||
"isMoved": "moved"
|
"isMoved": "moved",
|
||||||
|
"showAll": "Show all ({count})",
|
||||||
|
"showLess": "Show less",
|
||||||
|
"moveItemTo": "Move to…",
|
||||||
|
"batchMoveTo": "Move selected to…",
|
||||||
|
"selectedCount": "{count} selected",
|
||||||
|
"clearSelection": "Clear selection"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"discovery": {
|
"discovery": {
|
||||||
|
|||||||
@@ -2260,12 +2260,12 @@
|
|||||||
"visualPreview": "Preview",
|
"visualPreview": "Preview",
|
||||||
"resetAll": "Reset overrides",
|
"resetAll": "Reset overrides",
|
||||||
"onlyUnplaced": "Only show unplaced items",
|
"onlyUnplaced": "Only show unplaced items",
|
||||||
"errorMaxItems": "Max 1000 items per run. Reduce selection.",
|
"errorMaxItems": "Max 500 items per run. Reduce selection.",
|
||||||
"errorMaxGroups": "Max {count} groups per run. Reduce selection.",
|
"errorMaxGroups": "Max {count} groups per run. Reduce selection.",
|
||||||
"errorNoName": "Every approved page needs a name",
|
"errorNoName": "Every approved page needs a name",
|
||||||
"tipMove": "Tip: Pick a destination page below to move furniture.",
|
"tipMove": "Tip: Pick a destination page below to move furniture.",
|
||||||
"tipCreate": "Tip: Pick this mode to create new pages.",
|
"tipCreate": "Tip: Pick this mode to create new pages.",
|
||||||
"limitHint": "Max 1000 items and 50 groups per run.",
|
"limitHint": "Max 500 items and 50 groups per run.",
|
||||||
"errorFailed": "Failed to organize imports",
|
"errorFailed": "Failed to organize imports",
|
||||||
"successMove": "Moved {moved} offer{moved, plural, one {} other {s}}{added, plural, =0 {} other {, added {added} new}} to \"{destination}\"",
|
"successMove": "Moved {moved} offer{moved, plural, one {} other {s}}{added, plural, =0 {} other {, added {added} new}} to \"{destination}\"",
|
||||||
"successCreate": "Created {count, plural, one {1 page} other {# pages}} with {moved} moved and {added} added furniture",
|
"successCreate": "Created {count, plural, one {1 page} other {# pages}} with {moved} moved and {added} added furniture",
|
||||||
@@ -2273,7 +2273,13 @@
|
|||||||
"layoutFallbackDefault3x3": "3x3",
|
"layoutFallbackDefault3x3": "3x3",
|
||||||
"itemsUnit": "items",
|
"itemsUnit": "items",
|
||||||
"impPrefix": "Imp ",
|
"impPrefix": "Imp ",
|
||||||
"isMoved": "moved"
|
"isMoved": "moved",
|
||||||
|
"showAll": "Show all ({count})",
|
||||||
|
"showLess": "Show less",
|
||||||
|
"moveItemTo": "Move to…",
|
||||||
|
"batchMoveTo": "Move selected to…",
|
||||||
|
"selectedCount": "{count} selected",
|
||||||
|
"clearSelection": "Clear selection"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"bulk": {
|
"bulk": {
|
||||||
|
|||||||
@@ -2004,12 +2004,12 @@
|
|||||||
"visualPreview": "Preview",
|
"visualPreview": "Preview",
|
||||||
"resetAll": "Reset overrides",
|
"resetAll": "Reset overrides",
|
||||||
"onlyUnplaced": "Only show unplaced items",
|
"onlyUnplaced": "Only show unplaced items",
|
||||||
"errorMaxItems": "Max 1000 items per run. Reduce selection.",
|
"errorMaxItems": "Max 500 items per run. Reduce selection.",
|
||||||
"errorMaxGroups": "Max {count} groups per run. Reduce selection.",
|
"errorMaxGroups": "Max {count} groups per run. Reduce selection.",
|
||||||
"errorNoName": "Every approved page needs a name",
|
"errorNoName": "Every approved page needs a name",
|
||||||
"tipMove": "Tip: Pick a destination page below to move furniture.",
|
"tipMove": "Tip: Pick a destination page below to move furniture.",
|
||||||
"tipCreate": "Tip: Pick this mode to create new pages.",
|
"tipCreate": "Tip: Pick this mode to create new pages.",
|
||||||
"limitHint": "Max 1000 items and 50 groups per run.",
|
"limitHint": "Max 500 items and 50 groups per run.",
|
||||||
"errorFailed": "Failed to organize imports",
|
"errorFailed": "Failed to organize imports",
|
||||||
"successMove": "Moved {moved} offer{moved, plural, one {} other {s}}{added, plural, =0 {} other {, added {added} new}} to \"{destination}\"",
|
"successMove": "Moved {moved} offer{moved, plural, one {} other {s}}{added, plural, =0 {} other {, added {added} new}} to \"{destination}\"",
|
||||||
"successCreate": "Created {count, plural, one {1 page} other {# pages}} with {moved} moved and {added} added furniture",
|
"successCreate": "Created {count, plural, one {1 page} other {# pages}} with {moved} moved and {added} added furniture",
|
||||||
@@ -2017,7 +2017,13 @@
|
|||||||
"layoutFallbackDefault3x3": "3x3",
|
"layoutFallbackDefault3x3": "3x3",
|
||||||
"itemsUnit": "items",
|
"itemsUnit": "items",
|
||||||
"impPrefix": "Imp ",
|
"impPrefix": "Imp ",
|
||||||
"isMoved": "moved"
|
"isMoved": "moved",
|
||||||
|
"showAll": "Mostrar todo ({count})",
|
||||||
|
"showLess": "Mostrar menos",
|
||||||
|
"moveItemTo": "Mover a…",
|
||||||
|
"batchMoveTo": "Mover seleccionados a…",
|
||||||
|
"selectedCount": "{count} seleccionados",
|
||||||
|
"clearSelection": "Limpiar selección"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"discovery": {
|
"discovery": {
|
||||||
|
|||||||
@@ -907,12 +907,12 @@
|
|||||||
"visualPreview": "Preview",
|
"visualPreview": "Preview",
|
||||||
"resetAll": "Reset overrides",
|
"resetAll": "Reset overrides",
|
||||||
"onlyUnplaced": "Only show unplaced items",
|
"onlyUnplaced": "Only show unplaced items",
|
||||||
"errorMaxItems": "Max 1000 items per run. Reduce selection.",
|
"errorMaxItems": "Max 500 items per run. Reduce selection.",
|
||||||
"errorMaxGroups": "Max {count} groups per run. Reduce selection.",
|
"errorMaxGroups": "Max {count} groups per run. Reduce selection.",
|
||||||
"errorNoName": "Every approved page needs a name",
|
"errorNoName": "Every approved page needs a name",
|
||||||
"tipMove": "Tip: Pick a destination page below to move furniture.",
|
"tipMove": "Tip: Pick a destination page below to move furniture.",
|
||||||
"tipCreate": "Tip: Pick this mode to create new pages.",
|
"tipCreate": "Tip: Pick this mode to create new pages.",
|
||||||
"limitHint": "Max 1000 items and 50 groups per run.",
|
"limitHint": "Max 500 items and 50 groups per run.",
|
||||||
"errorFailed": "Failed to organize imports",
|
"errorFailed": "Failed to organize imports",
|
||||||
"successMove": "Moved {moved} offer{moved, plural, one {} other {s}}{added, plural, =0 {} other {, added {added} new}} to \"{destination}\"",
|
"successMove": "Moved {moved} offer{moved, plural, one {} other {s}}{added, plural, =0 {} other {, added {added} new}} to \"{destination}\"",
|
||||||
"successCreate": "Created {count, plural, one {1 page} other {# pages}} with {moved} moved and {added} added furniture",
|
"successCreate": "Created {count, plural, one {1 page} other {# pages}} with {moved} moved and {added} added furniture",
|
||||||
@@ -920,7 +920,13 @@
|
|||||||
"layoutFallbackDefault3x3": "3x3",
|
"layoutFallbackDefault3x3": "3x3",
|
||||||
"itemsUnit": "items",
|
"itemsUnit": "items",
|
||||||
"impPrefix": "Imp ",
|
"impPrefix": "Imp ",
|
||||||
"isMoved": "moved"
|
"isMoved": "moved",
|
||||||
|
"showAll": "Show all ({count})",
|
||||||
|
"showLess": "Show less",
|
||||||
|
"moveItemTo": "Move to…",
|
||||||
|
"batchMoveTo": "Move selected to…",
|
||||||
|
"selectedCount": "{count} selected",
|
||||||
|
"clearSelection": "Clear selection"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"discovery": {
|
"discovery": {
|
||||||
|
|||||||
@@ -2004,12 +2004,12 @@
|
|||||||
"visualPreview": "Preview",
|
"visualPreview": "Preview",
|
||||||
"resetAll": "Reset overrides",
|
"resetAll": "Reset overrides",
|
||||||
"onlyUnplaced": "Only show unplaced items",
|
"onlyUnplaced": "Only show unplaced items",
|
||||||
"errorMaxItems": "Max 1000 items per run. Reduce selection.",
|
"errorMaxItems": "Max 500 items per run. Reduce selection.",
|
||||||
"errorMaxGroups": "Max {count} groups per run. Reduce selection.",
|
"errorMaxGroups": "Max {count} groups per run. Reduce selection.",
|
||||||
"errorNoName": "Every approved page needs a name",
|
"errorNoName": "Every approved page needs a name",
|
||||||
"tipMove": "Tip: Pick a destination page below to move furniture.",
|
"tipMove": "Tip: Pick a destination page below to move furniture.",
|
||||||
"tipCreate": "Tip: Pick this mode to create new pages.",
|
"tipCreate": "Tip: Pick this mode to create new pages.",
|
||||||
"limitHint": "Max 1000 items and 50 groups per run.",
|
"limitHint": "Max 500 items and 50 groups per run.",
|
||||||
"errorFailed": "Failed to organize imports",
|
"errorFailed": "Failed to organize imports",
|
||||||
"successMove": "Moved {moved} offer{moved, plural, one {} other {s}}{added, plural, =0 {} other {, added {added} new}} to \"{destination}\"",
|
"successMove": "Moved {moved} offer{moved, plural, one {} other {s}}{added, plural, =0 {} other {, added {added} new}} to \"{destination}\"",
|
||||||
"successCreate": "Created {count, plural, one {1 page} other {# pages}} with {moved} moved and {added} added furniture",
|
"successCreate": "Created {count, plural, one {1 page} other {# pages}} with {moved} moved and {added} added furniture",
|
||||||
@@ -2017,7 +2017,13 @@
|
|||||||
"layoutFallbackDefault3x3": "3x3",
|
"layoutFallbackDefault3x3": "3x3",
|
||||||
"itemsUnit": "items",
|
"itemsUnit": "items",
|
||||||
"impPrefix": "Imp ",
|
"impPrefix": "Imp ",
|
||||||
"isMoved": "moved"
|
"isMoved": "moved",
|
||||||
|
"showAll": "Tout afficher ({count})",
|
||||||
|
"showLess": "Afficher moins",
|
||||||
|
"moveItemTo": "Déplacer vers…",
|
||||||
|
"batchMoveTo": "Déplacer la sélection vers…",
|
||||||
|
"selectedCount": "{count} sélectionné(s)",
|
||||||
|
"clearSelection": "Effacer la sélection"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"discovery": {
|
"discovery": {
|
||||||
|
|||||||
@@ -2034,12 +2034,12 @@
|
|||||||
"visualPreview": "Preview",
|
"visualPreview": "Preview",
|
||||||
"resetAll": "Reset overrides",
|
"resetAll": "Reset overrides",
|
||||||
"onlyUnplaced": "Only show unplaced items",
|
"onlyUnplaced": "Only show unplaced items",
|
||||||
"errorMaxItems": "Max 1000 items per run. Reduce selection.",
|
"errorMaxItems": "Max 500 items per run. Reduce selection.",
|
||||||
"errorMaxGroups": "Max {count} groups per run. Reduce selection.",
|
"errorMaxGroups": "Max {count} groups per run. Reduce selection.",
|
||||||
"errorNoName": "Every approved page needs a name",
|
"errorNoName": "Every approved page needs a name",
|
||||||
"tipMove": "Tip: Pick a destination page below to move furniture.",
|
"tipMove": "Tip: Pick a destination page below to move furniture.",
|
||||||
"tipCreate": "Tip: Pick this mode to create new pages.",
|
"tipCreate": "Tip: Pick this mode to create new pages.",
|
||||||
"limitHint": "Max 1000 items and 50 groups per run.",
|
"limitHint": "Max 500 items and 50 groups per run.",
|
||||||
"errorFailed": "Failed to organize imports",
|
"errorFailed": "Failed to organize imports",
|
||||||
"successMove": "Moved {moved} offer{moved, plural, one {} other {s}}{added, plural, =0 {} other {, added {added} new}} to \"{destination}\"",
|
"successMove": "Moved {moved} offer{moved, plural, one {} other {s}}{added, plural, =0 {} other {, added {added} new}} to \"{destination}\"",
|
||||||
"successCreate": "Created {count, plural, one {1 page} other {# pages}} with {moved} moved and {added} added furniture",
|
"successCreate": "Created {count, plural, one {1 page} other {# pages}} with {moved} moved and {added} added furniture",
|
||||||
@@ -2047,7 +2047,13 @@
|
|||||||
"layoutFallbackDefault3x3": "3x3",
|
"layoutFallbackDefault3x3": "3x3",
|
||||||
"itemsUnit": "items",
|
"itemsUnit": "items",
|
||||||
"impPrefix": "Imp ",
|
"impPrefix": "Imp ",
|
||||||
"isMoved": "moved"
|
"isMoved": "moved",
|
||||||
|
"showAll": "Show all ({count})",
|
||||||
|
"showLess": "Show less",
|
||||||
|
"moveItemTo": "Move to…",
|
||||||
|
"batchMoveTo": "Move selected to…",
|
||||||
|
"selectedCount": "{count} selected",
|
||||||
|
"clearSelection": "Clear selection"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"discovery": {
|
"discovery": {
|
||||||
|
|||||||
@@ -2034,12 +2034,12 @@
|
|||||||
"visualPreview": "Preview",
|
"visualPreview": "Preview",
|
||||||
"resetAll": "Reset overrides",
|
"resetAll": "Reset overrides",
|
||||||
"onlyUnplaced": "Only show unplaced items",
|
"onlyUnplaced": "Only show unplaced items",
|
||||||
"errorMaxItems": "Max 1000 items per run. Reduce selection.",
|
"errorMaxItems": "Max 500 items per run. Reduce selection.",
|
||||||
"errorMaxGroups": "Max {count} groups per run. Reduce selection.",
|
"errorMaxGroups": "Max {count} groups per run. Reduce selection.",
|
||||||
"errorNoName": "Every approved page needs a name",
|
"errorNoName": "Every approved page needs a name",
|
||||||
"tipMove": "Tip: Pick a destination page below to move furniture.",
|
"tipMove": "Tip: Pick a destination page below to move furniture.",
|
||||||
"tipCreate": "Tip: Pick this mode to create new pages.",
|
"tipCreate": "Tip: Pick this mode to create new pages.",
|
||||||
"limitHint": "Max 1000 items and 50 groups per run.",
|
"limitHint": "Max 500 items and 50 groups per run.",
|
||||||
"errorFailed": "Failed to organize imports",
|
"errorFailed": "Failed to organize imports",
|
||||||
"successMove": "Moved {moved} offer{moved, plural, one {} other {s}}{added, plural, =0 {} other {, added {added} new}} to \"{destination}\"",
|
"successMove": "Moved {moved} offer{moved, plural, one {} other {s}}{added, plural, =0 {} other {, added {added} new}} to \"{destination}\"",
|
||||||
"successCreate": "Created {count, plural, one {1 page} other {# pages}} with {moved} moved and {added} added furniture",
|
"successCreate": "Created {count, plural, one {1 page} other {# pages}} with {moved} moved and {added} added furniture",
|
||||||
@@ -2047,7 +2047,13 @@
|
|||||||
"layoutFallbackDefault3x3": "3x3",
|
"layoutFallbackDefault3x3": "3x3",
|
||||||
"itemsUnit": "items",
|
"itemsUnit": "items",
|
||||||
"impPrefix": "Imp ",
|
"impPrefix": "Imp ",
|
||||||
"isMoved": "moved"
|
"isMoved": "moved",
|
||||||
|
"showAll": "Show all ({count})",
|
||||||
|
"showLess": "Show less",
|
||||||
|
"moveItemTo": "Move to…",
|
||||||
|
"batchMoveTo": "Move selected to…",
|
||||||
|
"selectedCount": "{count} selected",
|
||||||
|
"clearSelection": "Clear selection"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"discovery": {
|
"discovery": {
|
||||||
|
|||||||
@@ -2179,12 +2179,12 @@
|
|||||||
"visualPreview": "Preview",
|
"visualPreview": "Preview",
|
||||||
"resetAll": "Reset overrides",
|
"resetAll": "Reset overrides",
|
||||||
"onlyUnplaced": "Only show unplaced items",
|
"onlyUnplaced": "Only show unplaced items",
|
||||||
"errorMaxItems": "Max 1000 items per run. Reduce selection.",
|
"errorMaxItems": "Max 500 items per run. Reduce selection.",
|
||||||
"errorMaxGroups": "Max {count} groups per run. Reduce selection.",
|
"errorMaxGroups": "Max {count} groups per run. Reduce selection.",
|
||||||
"errorNoName": "Every approved page needs a name",
|
"errorNoName": "Every approved page needs a name",
|
||||||
"tipMove": "Tip: Pick a destination page below to move furniture.",
|
"tipMove": "Tip: Pick a destination page below to move furniture.",
|
||||||
"tipCreate": "Tip: Pick this mode to create new pages.",
|
"tipCreate": "Tip: Pick this mode to create new pages.",
|
||||||
"limitHint": "Max 1000 items and 50 groups per run.",
|
"limitHint": "Max 500 items and 50 groups per run.",
|
||||||
"errorFailed": "Failed to organize imports",
|
"errorFailed": "Failed to organize imports",
|
||||||
"successMove": "Moved {moved} offer{moved, plural, one {} other {s}}{added, plural, =0 {} other {, added {added} new}} to \"{destination}\"",
|
"successMove": "Moved {moved} offer{moved, plural, one {} other {s}}{added, plural, =0 {} other {, added {added} new}} to \"{destination}\"",
|
||||||
"successCreate": "Created {count, plural, one {1 page} other {# pages}} with {moved} moved and {added} added furniture",
|
"successCreate": "Created {count, plural, one {1 page} other {# pages}} with {moved} moved and {added} added furniture",
|
||||||
@@ -2192,7 +2192,13 @@
|
|||||||
"layoutFallbackDefault3x3": "3x3",
|
"layoutFallbackDefault3x3": "3x3",
|
||||||
"itemsUnit": "items",
|
"itemsUnit": "items",
|
||||||
"impPrefix": "Imp ",
|
"impPrefix": "Imp ",
|
||||||
"isMoved": "moved"
|
"isMoved": "moved",
|
||||||
|
"showAll": "Mostra tutto ({count})",
|
||||||
|
"showLess": "Mostra meno",
|
||||||
|
"moveItemTo": "Sposta verso…",
|
||||||
|
"batchMoveTo": "Sposta la selezione verso…",
|
||||||
|
"selectedCount": "{count} selezionati",
|
||||||
|
"clearSelection": "Azzera selezione"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"bulk": {
|
"bulk": {
|
||||||
|
|||||||
@@ -907,12 +907,12 @@
|
|||||||
"visualPreview": "Preview",
|
"visualPreview": "Preview",
|
||||||
"resetAll": "Reset overrides",
|
"resetAll": "Reset overrides",
|
||||||
"onlyUnplaced": "Only show unplaced items",
|
"onlyUnplaced": "Only show unplaced items",
|
||||||
"errorMaxItems": "Max 1000 items per run. Reduce selection.",
|
"errorMaxItems": "Max 500 items per run. Reduce selection.",
|
||||||
"errorMaxGroups": "Max {count} groups per run. Reduce selection.",
|
"errorMaxGroups": "Max {count} groups per run. Reduce selection.",
|
||||||
"errorNoName": "Every approved page needs a name",
|
"errorNoName": "Every approved page needs a name",
|
||||||
"tipMove": "Tip: Pick a destination page below to move furniture.",
|
"tipMove": "Tip: Pick a destination page below to move furniture.",
|
||||||
"tipCreate": "Tip: Pick this mode to create new pages.",
|
"tipCreate": "Tip: Pick this mode to create new pages.",
|
||||||
"limitHint": "Max 1000 items and 50 groups per run.",
|
"limitHint": "Max 500 items and 50 groups per run.",
|
||||||
"errorFailed": "Failed to organize imports",
|
"errorFailed": "Failed to organize imports",
|
||||||
"successMove": "Moved {moved} offer{moved, plural, one {} other {s}}{added, plural, =0 {} other {, added {added} new}} to \"{destination}\"",
|
"successMove": "Moved {moved} offer{moved, plural, one {} other {s}}{added, plural, =0 {} other {, added {added} new}} to \"{destination}\"",
|
||||||
"successCreate": "Created {count, plural, one {1 page} other {# pages}} with {moved} moved and {added} added furniture",
|
"successCreate": "Created {count, plural, one {1 page} other {# pages}} with {moved} moved and {added} added furniture",
|
||||||
@@ -920,7 +920,13 @@
|
|||||||
"layoutFallbackDefault3x3": "3x3",
|
"layoutFallbackDefault3x3": "3x3",
|
||||||
"itemsUnit": "items",
|
"itemsUnit": "items",
|
||||||
"impPrefix": "Imp ",
|
"impPrefix": "Imp ",
|
||||||
"isMoved": "moved"
|
"isMoved": "moved",
|
||||||
|
"showAll": "Show all ({count})",
|
||||||
|
"showLess": "Show less",
|
||||||
|
"moveItemTo": "Move to…",
|
||||||
|
"batchMoveTo": "Move selected to…",
|
||||||
|
"selectedCount": "{count} selected",
|
||||||
|
"clearSelection": "Clear selection"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"discovery": {
|
"discovery": {
|
||||||
|
|||||||
@@ -2124,12 +2124,12 @@
|
|||||||
"visualPreview": "Voorbeeld",
|
"visualPreview": "Voorbeeld",
|
||||||
"resetAll": "Wijzigingen herstellen",
|
"resetAll": "Wijzigingen herstellen",
|
||||||
"onlyUnplaced": "Toon alleen ongeplaatste items",
|
"onlyUnplaced": "Toon alleen ongeplaatste items",
|
||||||
"errorMaxItems": "Maximaal 1000 items per run. Verlaag de selectie.",
|
"errorMaxItems": "Maximaal 500 items per run. Verlaag de selectie.",
|
||||||
"errorMaxGroups": "Maximaal {count} groepen per run. Verlaag de selectie.",
|
"errorMaxGroups": "Maximaal {count} groepen per run. Verlaag de selectie.",
|
||||||
"errorNoName": "Elke goedgekeurde pagina heeft een naam nodig",
|
"errorNoName": "Elke goedgekeurde pagina heeft een naam nodig",
|
||||||
"tipMove": "Tip: Kies de doelpagina in het vak hieronder om meubels te verplaatsen.",
|
"tipMove": "Tip: Kies de doelpagina in het vak hieronder om meubels te verplaatsen.",
|
||||||
"tipCreate": "Tip: Kies deze modus om nieuwe pagina's aan te maken.",
|
"tipCreate": "Tip: Kies deze modus om nieuwe pagina's aan te maken.",
|
||||||
"limitHint": "Maximaal 1000 items en 50 groepen per run.",
|
"limitHint": "Maximaal 500 items en 50 groepen per run.",
|
||||||
"errorFailed": "Kon imports niet organiseren",
|
"errorFailed": "Kon imports niet organiseren",
|
||||||
"successMove": "{moved} item{moved, plural, one { verplaatst} other {s verplaatst}}{added, plural, =0 {} other {, {added} nieuw toegevoegd}} naar \"{destination}\"",
|
"successMove": "{moved} item{moved, plural, one { verplaatst} other {s verplaatst}}{added, plural, =0 {} other {, {added} nieuw toegevoegd}} naar \"{destination}\"",
|
||||||
"successCreate": "{count, plural, one {1 pagina} other {# pagina's}} aangemaakt met {moved} verplaatste en {added} toegevoegde meubels",
|
"successCreate": "{count, plural, one {1 pagina} other {# pagina's}} aangemaakt met {moved} verplaatste en {added} toegevoegde meubels",
|
||||||
@@ -2137,7 +2137,13 @@
|
|||||||
"layoutFallbackDefault3x3": "3x3",
|
"layoutFallbackDefault3x3": "3x3",
|
||||||
"itemsUnit": "items",
|
"itemsUnit": "items",
|
||||||
"impPrefix": "Imp ",
|
"impPrefix": "Imp ",
|
||||||
"isMoved": "verplaatst"
|
"isMoved": "verplaatst",
|
||||||
|
"showAll": "Alles tonen ({count})",
|
||||||
|
"showLess": "Minder tonen",
|
||||||
|
"moveItemTo": "Verplaatsen naar…",
|
||||||
|
"batchMoveTo": "Geselecteerde verplaatsen naar…",
|
||||||
|
"selectedCount": "{count} geselecteerd",
|
||||||
|
"clearSelection": "Selectie wissen"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"bulk": {
|
"bulk": {
|
||||||
|
|||||||
@@ -2034,12 +2034,12 @@
|
|||||||
"visualPreview": "Preview",
|
"visualPreview": "Preview",
|
||||||
"resetAll": "Reset overrides",
|
"resetAll": "Reset overrides",
|
||||||
"onlyUnplaced": "Only show unplaced items",
|
"onlyUnplaced": "Only show unplaced items",
|
||||||
"errorMaxItems": "Max 1000 items per run. Reduce selection.",
|
"errorMaxItems": "Max 500 items per run. Reduce selection.",
|
||||||
"errorMaxGroups": "Max {count} groups per run. Reduce selection.",
|
"errorMaxGroups": "Max {count} groups per run. Reduce selection.",
|
||||||
"errorNoName": "Every approved page needs a name",
|
"errorNoName": "Every approved page needs a name",
|
||||||
"tipMove": "Tip: Pick a destination page below to move furniture.",
|
"tipMove": "Tip: Pick a destination page below to move furniture.",
|
||||||
"tipCreate": "Tip: Pick this mode to create new pages.",
|
"tipCreate": "Tip: Pick this mode to create new pages.",
|
||||||
"limitHint": "Max 1000 items and 50 groups per run.",
|
"limitHint": "Max 500 items and 50 groups per run.",
|
||||||
"errorFailed": "Failed to organize imports",
|
"errorFailed": "Failed to organize imports",
|
||||||
"successMove": "Moved {moved} offer{moved, plural, one {} other {s}}{added, plural, =0 {} other {, added {added} new}} to \"{destination}\"",
|
"successMove": "Moved {moved} offer{moved, plural, one {} other {s}}{added, plural, =0 {} other {, added {added} new}} to \"{destination}\"",
|
||||||
"successCreate": "Created {count, plural, one {1 page} other {# pages}} with {moved} moved and {added} added furniture",
|
"successCreate": "Created {count, plural, one {1 page} other {# pages}} with {moved} moved and {added} added furniture",
|
||||||
@@ -2047,7 +2047,13 @@
|
|||||||
"layoutFallbackDefault3x3": "3x3",
|
"layoutFallbackDefault3x3": "3x3",
|
||||||
"itemsUnit": "items",
|
"itemsUnit": "items",
|
||||||
"impPrefix": "Imp ",
|
"impPrefix": "Imp ",
|
||||||
"isMoved": "moved"
|
"isMoved": "moved",
|
||||||
|
"showAll": "Show all ({count})",
|
||||||
|
"showLess": "Show less",
|
||||||
|
"moveItemTo": "Move to…",
|
||||||
|
"batchMoveTo": "Move selected to…",
|
||||||
|
"selectedCount": "{count} selected",
|
||||||
|
"clearSelection": "Clear selection"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"discovery": {
|
"discovery": {
|
||||||
|
|||||||
@@ -2034,12 +2034,12 @@
|
|||||||
"visualPreview": "Preview",
|
"visualPreview": "Preview",
|
||||||
"resetAll": "Reset overrides",
|
"resetAll": "Reset overrides",
|
||||||
"onlyUnplaced": "Only show unplaced items",
|
"onlyUnplaced": "Only show unplaced items",
|
||||||
"errorMaxItems": "Max 1000 items per run. Reduce selection.",
|
"errorMaxItems": "Max 500 items per run. Reduce selection.",
|
||||||
"errorMaxGroups": "Max {count} groups per run. Reduce selection.",
|
"errorMaxGroups": "Max {count} groups per run. Reduce selection.",
|
||||||
"errorNoName": "Every approved page needs a name",
|
"errorNoName": "Every approved page needs a name",
|
||||||
"tipMove": "Tip: Pick a destination page below to move furniture.",
|
"tipMove": "Tip: Pick a destination page below to move furniture.",
|
||||||
"tipCreate": "Tip: Pick this mode to create new pages.",
|
"tipCreate": "Tip: Pick this mode to create new pages.",
|
||||||
"limitHint": "Max 1000 items and 50 groups per run.",
|
"limitHint": "Max 500 items and 50 groups per run.",
|
||||||
"errorFailed": "Failed to organize imports",
|
"errorFailed": "Failed to organize imports",
|
||||||
"successMove": "Moved {moved} offer{moved, plural, one {} other {s}}{added, plural, =0 {} other {, added {added} new}} to \"{destination}\"",
|
"successMove": "Moved {moved} offer{moved, plural, one {} other {s}}{added, plural, =0 {} other {, added {added} new}} to \"{destination}\"",
|
||||||
"successCreate": "Created {count, plural, one {1 page} other {# pages}} with {moved} moved and {added} added furniture",
|
"successCreate": "Created {count, plural, one {1 page} other {# pages}} with {moved} moved and {added} added furniture",
|
||||||
@@ -2047,7 +2047,13 @@
|
|||||||
"layoutFallbackDefault3x3": "3x3",
|
"layoutFallbackDefault3x3": "3x3",
|
||||||
"itemsUnit": "items",
|
"itemsUnit": "items",
|
||||||
"impPrefix": "Imp ",
|
"impPrefix": "Imp ",
|
||||||
"isMoved": "moved"
|
"isMoved": "moved",
|
||||||
|
"showAll": "Show all ({count})",
|
||||||
|
"showLess": "Show less",
|
||||||
|
"moveItemTo": "Move to…",
|
||||||
|
"batchMoveTo": "Move selected to…",
|
||||||
|
"selectedCount": "{count} selected",
|
||||||
|
"clearSelection": "Clear selection"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"discovery": {
|
"discovery": {
|
||||||
|
|||||||
@@ -2034,12 +2034,12 @@
|
|||||||
"visualPreview": "Preview",
|
"visualPreview": "Preview",
|
||||||
"resetAll": "Reset overrides",
|
"resetAll": "Reset overrides",
|
||||||
"onlyUnplaced": "Only show unplaced items",
|
"onlyUnplaced": "Only show unplaced items",
|
||||||
"errorMaxItems": "Max 1000 items per run. Reduce selection.",
|
"errorMaxItems": "Max 500 items per run. Reduce selection.",
|
||||||
"errorMaxGroups": "Max {count} groups per run. Reduce selection.",
|
"errorMaxGroups": "Max {count} groups per run. Reduce selection.",
|
||||||
"errorNoName": "Every approved page needs a name",
|
"errorNoName": "Every approved page needs a name",
|
||||||
"tipMove": "Tip: Pick a destination page below to move furniture.",
|
"tipMove": "Tip: Pick a destination page below to move furniture.",
|
||||||
"tipCreate": "Tip: Pick this mode to create new pages.",
|
"tipCreate": "Tip: Pick this mode to create new pages.",
|
||||||
"limitHint": "Max 1000 items and 50 groups per run.",
|
"limitHint": "Max 500 items and 50 groups per run.",
|
||||||
"errorFailed": "Failed to organize imports",
|
"errorFailed": "Failed to organize imports",
|
||||||
"successMove": "Moved {moved} offer{moved, plural, one {} other {s}}{added, plural, =0 {} other {, added {added} new}} to \"{destination}\"",
|
"successMove": "Moved {moved} offer{moved, plural, one {} other {s}}{added, plural, =0 {} other {, added {added} new}} to \"{destination}\"",
|
||||||
"successCreate": "Created {count, plural, one {1 page} other {# pages}} with {moved} moved and {added} added furniture",
|
"successCreate": "Created {count, plural, one {1 page} other {# pages}} with {moved} moved and {added} added furniture",
|
||||||
@@ -2047,7 +2047,13 @@
|
|||||||
"layoutFallbackDefault3x3": "3x3",
|
"layoutFallbackDefault3x3": "3x3",
|
||||||
"itemsUnit": "items",
|
"itemsUnit": "items",
|
||||||
"impPrefix": "Imp ",
|
"impPrefix": "Imp ",
|
||||||
"isMoved": "moved"
|
"isMoved": "moved",
|
||||||
|
"showAll": "Mostrar tudo ({count})",
|
||||||
|
"showLess": "Mostrar menos",
|
||||||
|
"moveItemTo": "Mover para…",
|
||||||
|
"batchMoveTo": "Mover seleção para…",
|
||||||
|
"selectedCount": "{count} selecionados",
|
||||||
|
"clearSelection": "Limpar seleção"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"discovery": {
|
"discovery": {
|
||||||
|
|||||||
@@ -2034,12 +2034,12 @@
|
|||||||
"visualPreview": "Preview",
|
"visualPreview": "Preview",
|
||||||
"resetAll": "Reset overrides",
|
"resetAll": "Reset overrides",
|
||||||
"onlyUnplaced": "Only show unplaced items",
|
"onlyUnplaced": "Only show unplaced items",
|
||||||
"errorMaxItems": "Max 1000 items per run. Reduce selection.",
|
"errorMaxItems": "Max 500 items per run. Reduce selection.",
|
||||||
"errorMaxGroups": "Max {count} groups per run. Reduce selection.",
|
"errorMaxGroups": "Max {count} groups per run. Reduce selection.",
|
||||||
"errorNoName": "Every approved page needs a name",
|
"errorNoName": "Every approved page needs a name",
|
||||||
"tipMove": "Tip: Pick a destination page below to move furniture.",
|
"tipMove": "Tip: Pick a destination page below to move furniture.",
|
||||||
"tipCreate": "Tip: Pick this mode to create new pages.",
|
"tipCreate": "Tip: Pick this mode to create new pages.",
|
||||||
"limitHint": "Max 1000 items and 50 groups per run.",
|
"limitHint": "Max 500 items and 50 groups per run.",
|
||||||
"errorFailed": "Failed to organize imports",
|
"errorFailed": "Failed to organize imports",
|
||||||
"successMove": "Moved {moved} offer{moved, plural, one {} other {s}}{added, plural, =0 {} other {, added {added} new}} to \"{destination}\"",
|
"successMove": "Moved {moved} offer{moved, plural, one {} other {s}}{added, plural, =0 {} other {, added {added} new}} to \"{destination}\"",
|
||||||
"successCreate": "Created {count, plural, one {1 page} other {# pages}} with {moved} moved and {added} added furniture",
|
"successCreate": "Created {count, plural, one {1 page} other {# pages}} with {moved} moved and {added} added furniture",
|
||||||
@@ -2047,7 +2047,13 @@
|
|||||||
"layoutFallbackDefault3x3": "3x3",
|
"layoutFallbackDefault3x3": "3x3",
|
||||||
"itemsUnit": "items",
|
"itemsUnit": "items",
|
||||||
"impPrefix": "Imp ",
|
"impPrefix": "Imp ",
|
||||||
"isMoved": "moved"
|
"isMoved": "moved",
|
||||||
|
"showAll": "Show all ({count})",
|
||||||
|
"showLess": "Show less",
|
||||||
|
"moveItemTo": "Move to…",
|
||||||
|
"batchMoveTo": "Move selected to…",
|
||||||
|
"selectedCount": "{count} selected",
|
||||||
|
"clearSelection": "Clear selection"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"discovery": {
|
"discovery": {
|
||||||
|
|||||||
@@ -2032,12 +2032,12 @@
|
|||||||
"visualPreview": "Preview",
|
"visualPreview": "Preview",
|
||||||
"resetAll": "Reset overrides",
|
"resetAll": "Reset overrides",
|
||||||
"onlyUnplaced": "Only show unplaced items",
|
"onlyUnplaced": "Only show unplaced items",
|
||||||
"errorMaxItems": "Max 1000 items per run. Reduce selection.",
|
"errorMaxItems": "Max 500 items per run. Reduce selection.",
|
||||||
"errorMaxGroups": "Max {count} groups per run. Reduce selection.",
|
"errorMaxGroups": "Max {count} groups per run. Reduce selection.",
|
||||||
"errorNoName": "Every approved page needs a name",
|
"errorNoName": "Every approved page needs a name",
|
||||||
"tipMove": "Tip: Pick a destination page below to move furniture.",
|
"tipMove": "Tip: Pick a destination page below to move furniture.",
|
||||||
"tipCreate": "Tip: Pick this mode to create new pages.",
|
"tipCreate": "Tip: Pick this mode to create new pages.",
|
||||||
"limitHint": "Max 1000 items and 50 groups per run.",
|
"limitHint": "Max 500 items and 50 groups per run.",
|
||||||
"errorFailed": "Failed to organize imports",
|
"errorFailed": "Failed to organize imports",
|
||||||
"successMove": "Moved {moved} offer{moved, plural, one {} other {s}}{added, plural, =0 {} other {, added {added} new}} to \"{destination}\"",
|
"successMove": "Moved {moved} offer{moved, plural, one {} other {s}}{added, plural, =0 {} other {, added {added} new}} to \"{destination}\"",
|
||||||
"successCreate": "Created {count, plural, one {1 page} other {# pages}} with {moved} moved and {added} added furniture",
|
"successCreate": "Created {count, plural, one {1 page} other {# pages}} with {moved} moved and {added} added furniture",
|
||||||
@@ -2045,7 +2045,13 @@
|
|||||||
"layoutFallbackDefault3x3": "3x3",
|
"layoutFallbackDefault3x3": "3x3",
|
||||||
"itemsUnit": "items",
|
"itemsUnit": "items",
|
||||||
"impPrefix": "Imp ",
|
"impPrefix": "Imp ",
|
||||||
"isMoved": "moved"
|
"isMoved": "moved",
|
||||||
|
"showAll": "Show all ({count})",
|
||||||
|
"showLess": "Show less",
|
||||||
|
"moveItemTo": "Move to…",
|
||||||
|
"batchMoveTo": "Move selected to…",
|
||||||
|
"selectedCount": "{count} selected",
|
||||||
|
"clearSelection": "Clear selection"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"discovery": {
|
"discovery": {
|
||||||
|
|||||||
@@ -2034,12 +2034,12 @@
|
|||||||
"visualPreview": "Preview",
|
"visualPreview": "Preview",
|
||||||
"resetAll": "Reset overrides",
|
"resetAll": "Reset overrides",
|
||||||
"onlyUnplaced": "Only show unplaced items",
|
"onlyUnplaced": "Only show unplaced items",
|
||||||
"errorMaxItems": "Max 1000 items per run. Reduce selection.",
|
"errorMaxItems": "Max 500 items per run. Reduce selection.",
|
||||||
"errorMaxGroups": "Max {count} groups per run. Reduce selection.",
|
"errorMaxGroups": "Max {count} groups per run. Reduce selection.",
|
||||||
"errorNoName": "Every approved page needs a name",
|
"errorNoName": "Every approved page needs a name",
|
||||||
"tipMove": "Tip: Pick a destination page below to move furniture.",
|
"tipMove": "Tip: Pick a destination page below to move furniture.",
|
||||||
"tipCreate": "Tip: Pick this mode to create new pages.",
|
"tipCreate": "Tip: Pick this mode to create new pages.",
|
||||||
"limitHint": "Max 1000 items and 50 groups per run.",
|
"limitHint": "Max 500 items and 50 groups per run.",
|
||||||
"errorFailed": "Failed to organize imports",
|
"errorFailed": "Failed to organize imports",
|
||||||
"successMove": "Moved {moved} offer{moved, plural, one {} other {s}}{added, plural, =0 {} other {, added {added} new}} to \"{destination}\"",
|
"successMove": "Moved {moved} offer{moved, plural, one {} other {s}}{added, plural, =0 {} other {, added {added} new}} to \"{destination}\"",
|
||||||
"successCreate": "Created {count, plural, one {1 page} other {# pages}} with {moved} moved and {added} added furniture",
|
"successCreate": "Created {count, plural, one {1 page} other {# pages}} with {moved} moved and {added} added furniture",
|
||||||
@@ -2047,7 +2047,13 @@
|
|||||||
"layoutFallbackDefault3x3": "3x3",
|
"layoutFallbackDefault3x3": "3x3",
|
||||||
"itemsUnit": "items",
|
"itemsUnit": "items",
|
||||||
"impPrefix": "Imp ",
|
"impPrefix": "Imp ",
|
||||||
"isMoved": "moved"
|
"isMoved": "moved",
|
||||||
|
"showAll": "Show all ({count})",
|
||||||
|
"showLess": "Show less",
|
||||||
|
"moveItemTo": "Move to…",
|
||||||
|
"batchMoveTo": "Move selected to…",
|
||||||
|
"selectedCount": "{count} selected",
|
||||||
|
"clearSelection": "Clear selection"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"discovery": {
|
"discovery": {
|
||||||
|
|||||||
@@ -2034,12 +2034,12 @@
|
|||||||
"visualPreview": "Preview",
|
"visualPreview": "Preview",
|
||||||
"resetAll": "Reset overrides",
|
"resetAll": "Reset overrides",
|
||||||
"onlyUnplaced": "Only show unplaced items",
|
"onlyUnplaced": "Only show unplaced items",
|
||||||
"errorMaxItems": "Max 1000 items per run. Reduce selection.",
|
"errorMaxItems": "Max 500 items per run. Reduce selection.",
|
||||||
"errorMaxGroups": "Max {count} groups per run. Reduce selection.",
|
"errorMaxGroups": "Max {count} groups per run. Reduce selection.",
|
||||||
"errorNoName": "Every approved page needs a name",
|
"errorNoName": "Every approved page needs a name",
|
||||||
"tipMove": "Tip: Pick a destination page below to move furniture.",
|
"tipMove": "Tip: Pick a destination page below to move furniture.",
|
||||||
"tipCreate": "Tip: Pick this mode to create new pages.",
|
"tipCreate": "Tip: Pick this mode to create new pages.",
|
||||||
"limitHint": "Max 1000 items and 50 groups per run.",
|
"limitHint": "Max 500 items and 50 groups per run.",
|
||||||
"errorFailed": "Failed to organize imports",
|
"errorFailed": "Failed to organize imports",
|
||||||
"successMove": "Moved {moved} offer{moved, plural, one {} other {s}}{added, plural, =0 {} other {, added {added} new}} to \"{destination}\"",
|
"successMove": "Moved {moved} offer{moved, plural, one {} other {s}}{added, plural, =0 {} other {, added {added} new}} to \"{destination}\"",
|
||||||
"successCreate": "Created {count, plural, one {1 page} other {# pages}} with {moved} moved and {added} added furniture",
|
"successCreate": "Created {count, plural, one {1 page} other {# pages}} with {moved} moved and {added} added furniture",
|
||||||
@@ -2047,7 +2047,13 @@
|
|||||||
"layoutFallbackDefault3x3": "3x3",
|
"layoutFallbackDefault3x3": "3x3",
|
||||||
"itemsUnit": "items",
|
"itemsUnit": "items",
|
||||||
"impPrefix": "Imp ",
|
"impPrefix": "Imp ",
|
||||||
"isMoved": "moved"
|
"isMoved": "moved",
|
||||||
|
"showAll": "Show all ({count})",
|
||||||
|
"showLess": "Show less",
|
||||||
|
"moveItemTo": "Move to…",
|
||||||
|
"batchMoveTo": "Move selected to…",
|
||||||
|
"selectedCount": "{count} selected",
|
||||||
|
"clearSelection": "Clear selection"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"discovery": {
|
"discovery": {
|
||||||
|
|||||||
@@ -2034,12 +2034,12 @@
|
|||||||
"visualPreview": "Preview",
|
"visualPreview": "Preview",
|
||||||
"resetAll": "Reset overrides",
|
"resetAll": "Reset overrides",
|
||||||
"onlyUnplaced": "Only show unplaced items",
|
"onlyUnplaced": "Only show unplaced items",
|
||||||
"errorMaxItems": "Max 1000 items per run. Reduce selection.",
|
"errorMaxItems": "Max 500 items per run. Reduce selection.",
|
||||||
"errorMaxGroups": "Max {count} groups per run. Reduce selection.",
|
"errorMaxGroups": "Max {count} groups per run. Reduce selection.",
|
||||||
"errorNoName": "Every approved page needs a name",
|
"errorNoName": "Every approved page needs a name",
|
||||||
"tipMove": "Tip: Pick a destination page below to move furniture.",
|
"tipMove": "Tip: Pick a destination page below to move furniture.",
|
||||||
"tipCreate": "Tip: Pick this mode to create new pages.",
|
"tipCreate": "Tip: Pick this mode to create new pages.",
|
||||||
"limitHint": "Max 1000 items and 50 groups per run.",
|
"limitHint": "Max 500 items and 50 groups per run.",
|
||||||
"errorFailed": "Failed to organize imports",
|
"errorFailed": "Failed to organize imports",
|
||||||
"successMove": "Moved {moved} offer{moved, plural, one {} other {s}}{added, plural, =0 {} other {, added {added} new}} to \"{destination}\"",
|
"successMove": "Moved {moved} offer{moved, plural, one {} other {s}}{added, plural, =0 {} other {, added {added} new}} to \"{destination}\"",
|
||||||
"successCreate": "Created {count, plural, one {1 page} other {# pages}} with {moved} moved and {added} added furniture",
|
"successCreate": "Created {count, plural, one {1 page} other {# pages}} with {moved} moved and {added} added furniture",
|
||||||
@@ -2047,7 +2047,13 @@
|
|||||||
"layoutFallbackDefault3x3": "3x3",
|
"layoutFallbackDefault3x3": "3x3",
|
||||||
"itemsUnit": "items",
|
"itemsUnit": "items",
|
||||||
"impPrefix": "Imp ",
|
"impPrefix": "Imp ",
|
||||||
"isMoved": "moved"
|
"isMoved": "moved",
|
||||||
|
"showAll": "Show all ({count})",
|
||||||
|
"showLess": "Show less",
|
||||||
|
"moveItemTo": "Move to…",
|
||||||
|
"batchMoveTo": "Move selected to…",
|
||||||
|
"selectedCount": "{count} selected",
|
||||||
|
"clearSelection": "Clear selection"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"discovery": {
|
"discovery": {
|
||||||
|
|||||||
@@ -2034,12 +2034,12 @@
|
|||||||
"visualPreview": "Preview",
|
"visualPreview": "Preview",
|
||||||
"resetAll": "Reset overrides",
|
"resetAll": "Reset overrides",
|
||||||
"onlyUnplaced": "Only show unplaced items",
|
"onlyUnplaced": "Only show unplaced items",
|
||||||
"errorMaxItems": "Max 1000 items per run. Reduce selection.",
|
"errorMaxItems": "Max 500 items per run. Reduce selection.",
|
||||||
"errorMaxGroups": "Max {count} groups per run. Reduce selection.",
|
"errorMaxGroups": "Max {count} groups per run. Reduce selection.",
|
||||||
"errorNoName": "Every approved page needs a name",
|
"errorNoName": "Every approved page needs a name",
|
||||||
"tipMove": "Tip: Pick a destination page below to move furniture.",
|
"tipMove": "Tip: Pick a destination page below to move furniture.",
|
||||||
"tipCreate": "Tip: Pick this mode to create new pages.",
|
"tipCreate": "Tip: Pick this mode to create new pages.",
|
||||||
"limitHint": "Max 1000 items and 50 groups per run.",
|
"limitHint": "Max 500 items and 50 groups per run.",
|
||||||
"errorFailed": "Failed to organize imports",
|
"errorFailed": "Failed to organize imports",
|
||||||
"successMove": "Moved {moved} offer{moved, plural, one {} other {s}}{added, plural, =0 {} other {, added {added} new}} to \"{destination}\"",
|
"successMove": "Moved {moved} offer{moved, plural, one {} other {s}}{added, plural, =0 {} other {, added {added} new}} to \"{destination}\"",
|
||||||
"successCreate": "Created {count, plural, one {1 page} other {# pages}} with {moved} moved and {added} added furniture",
|
"successCreate": "Created {count, plural, one {1 page} other {# pages}} with {moved} moved and {added} added furniture",
|
||||||
@@ -2047,7 +2047,13 @@
|
|||||||
"layoutFallbackDefault3x3": "3x3",
|
"layoutFallbackDefault3x3": "3x3",
|
||||||
"itemsUnit": "items",
|
"itemsUnit": "items",
|
||||||
"impPrefix": "Imp ",
|
"impPrefix": "Imp ",
|
||||||
"isMoved": "moved"
|
"isMoved": "moved",
|
||||||
|
"showAll": "Tümünü göster ({count})",
|
||||||
|
"showLess": "Daha az göster",
|
||||||
|
"moveItemTo": "Taşı…",
|
||||||
|
"batchMoveTo": "Seçimi taşı…",
|
||||||
|
"selectedCount": "{count} seçildi",
|
||||||
|
"clearSelection": "Seçimi temizle"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"discovery": {
|
"discovery": {
|
||||||
|
|||||||
@@ -2034,12 +2034,12 @@
|
|||||||
"visualPreview": "Preview",
|
"visualPreview": "Preview",
|
||||||
"resetAll": "Reset overrides",
|
"resetAll": "Reset overrides",
|
||||||
"onlyUnplaced": "Only show unplaced items",
|
"onlyUnplaced": "Only show unplaced items",
|
||||||
"errorMaxItems": "Max 1000 items per run. Reduce selection.",
|
"errorMaxItems": "Max 500 items per run. Reduce selection.",
|
||||||
"errorMaxGroups": "Max {count} groups per run. Reduce selection.",
|
"errorMaxGroups": "Max {count} groups per run. Reduce selection.",
|
||||||
"errorNoName": "Every approved page needs a name",
|
"errorNoName": "Every approved page needs a name",
|
||||||
"tipMove": "Tip: Pick a destination page below to move furniture.",
|
"tipMove": "Tip: Pick a destination page below to move furniture.",
|
||||||
"tipCreate": "Tip: Pick this mode to create new pages.",
|
"tipCreate": "Tip: Pick this mode to create new pages.",
|
||||||
"limitHint": "Max 1000 items and 50 groups per run.",
|
"limitHint": "Max 500 items and 50 groups per run.",
|
||||||
"errorFailed": "Failed to organize imports",
|
"errorFailed": "Failed to organize imports",
|
||||||
"successMove": "Moved {moved} offer{moved, plural, one {} other {s}}{added, plural, =0 {} other {, added {added} new}} to \"{destination}\"",
|
"successMove": "Moved {moved} offer{moved, plural, one {} other {s}}{added, plural, =0 {} other {, added {added} new}} to \"{destination}\"",
|
||||||
"successCreate": "Created {count, plural, one {1 page} other {# pages}} with {moved} moved and {added} added furniture",
|
"successCreate": "Created {count, plural, one {1 page} other {# pages}} with {moved} moved and {added} added furniture",
|
||||||
@@ -2047,7 +2047,13 @@
|
|||||||
"layoutFallbackDefault3x3": "3x3",
|
"layoutFallbackDefault3x3": "3x3",
|
||||||
"itemsUnit": "items",
|
"itemsUnit": "items",
|
||||||
"impPrefix": "Imp ",
|
"impPrefix": "Imp ",
|
||||||
"isMoved": "moved"
|
"isMoved": "moved",
|
||||||
|
"showAll": "Show all ({count})",
|
||||||
|
"showLess": "Show less",
|
||||||
|
"moveItemTo": "Move to…",
|
||||||
|
"batchMoveTo": "Move selected to…",
|
||||||
|
"selectedCount": "{count} selected",
|
||||||
|
"clearSelection": "Clear selection"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"discovery": {
|
"discovery": {
|
||||||
|
|||||||
Reference in new issue
Block a user