diff --git a/src/messages/bg.json b/src/messages/bg.json index 7193af9a..49ac7802 100644 --- a/src/messages/bg.json +++ b/src/messages/bg.json @@ -3153,6 +3153,103 @@ "usersJoined": "Joined", "usersLastLogin": "Last login", "usersLastOnline": "Last online" + }, + "studio": { + "title": "Studio", + "sourceFurnidata": "{source} furnidata", + "searchPlaceholder": "Search furni, classnames, keywords… (/)", + "results": "{count} results", + "inDb": "in DB", + "inCatalog": "in catalog", + "missingNitro": "missing nitro", + "globalTranslation": "Translation (global)", + "catalogTree": "Catalog", + "source": "Furni source", + "officialSource": "(official)", + "type": "Type", + "allTypes": "All types", + "floorItems": "Floor items", + "wallItems": "Wall items", + "category": "Category", + "allCategories": "All categories", + "status": "Status", + "allStatuses": "All statuses", + "imported": "Imported", + "inCatalogStatus": "In catalog", + "missingNitroStatus": "Missing nitro", + "sort": "Sort", + "defaultOrder": "Default order", + "nameAZ": "Name A–Z", + "classnameAZ": "Classname A–Z", + "categorySort": "Category", + "importedFirst": "Imported first", + "notImportedFirst": "Not imported first", + "noNitro": "{count} no nitro", + "gridView": "Grid view", + "listView": "List view", + "selectAll": "Select all", + "selectedCount": "{count} selected", + "clear": "Clear", + "translate": "Translate", + "noLanguages": "No languages", + "allLanguages": "All languages", + "languagesCount": "{count} languages", + "languages": "Languages", + "all": "All", + "none": "None", + "languageLabel": "Language {lang}", + "translateAll": "Translate all", + "translateAllTitle": "Translate the whole catalog into all languages (afterwards)", + "importAuto": "Import {count} auto", + "maintenance": { + "title": "Catalog maintenance", + "description": "Force the furniture tables to 100% consistency with FurnitureData.json. Every action runs inside a database transaction and rolls back on error.", + "refresh": "Refresh", + "currentHealth": "Current health", + "itemsInBase": "{count} items in items_base", + "loading": "Loading…", + "statSpriteId": "sprite_id ≠ id", + "hintSpriteId": "items_base sprite drift", + "statOfferId": "offer_id ≠ id", + "hintOfferId": "catalog offer drift", + "statDuplicateClassnames": "Duplicate classnames", + "hintDuplicateClassnames": "items_base item_name repeats", + "statDuplicateCatalogRows": "Duplicate catalog rows", + "hintDuplicateCatalogRows": "same product listed twice on a page", + "statIdMismatch": "ID ≠ FurnitureData", + "hintIdMismatch": "items_base id differs from furnidata", + "statDuplicateBcCatalogRows": "Duplicate BC catalog rows", + "hintDuplicateBcCatalogRows": "same product listed twice in builder club", + "statDuplicateCatalogPages": "Duplicate catalog pages", + "hintDuplicateCatalogPages": "same caption under the same parent (double links)", + "optionSpriteId": "Fix sprite_id", + "optionOfferId": "Fix catalog offer_id", + "optionRemoveDuplicates": "Remove duplicates (items + catalog)", + "optionReconcile": "Reconcile FurnitureData ↔ DB", + "optionAlignIds": "Align items_base IDs to FurnitureData", + "alignDescription": "Moves every items_base.id to the FurnitureData sprite id (source of truth). Rewrites all referencing tables.", + "previewChanges": "Preview changes", + "plannedIdMoves": "Planned ID moves: {moves}", + "newItemsInsert": "New items to insert: {inserted}", + "skipped": "Skipped (id occupied): {list}", + "applyAlignment": "Apply alignment", + "fixEverythingTitle": "Fix everything", + "fixEverythingDescription": "Runs the selected repairs in order. Heavy operation — make a backup first.", + "alsoMergeDuplicatePages": "Also merge duplicate catalog pages (double links)", + "runSelected": "Run selected", + "selectAtLeastOne": "Select at least one repair to run", + "previewReady": "Preview ready", + "previewFailed": "Preview failed", + "toast": { + "spriteFixed": "sprite_id fixed", + "offerFixed": "catalog offer_id fixed", + "duplicatesRemoved": "Duplicates removed (items + catalog)", + "reconciled": "FurnitureData reconciled", + "aligned": "items_base IDs aligned to FurnitureData", + "allApplied": "All selected repairs applied", + "failed": "Failed" + } + } } }, "emails": { diff --git a/src/messages/cs.json b/src/messages/cs.json index b9b973d7..a0afe780 100644 --- a/src/messages/cs.json +++ b/src/messages/cs.json @@ -3153,6 +3153,103 @@ "usersJoined": "Joined", "usersLastLogin": "Last login", "usersLastOnline": "Last online" + }, + "studio": { + "title": "Studio", + "sourceFurnidata": "{source} furnidata", + "searchPlaceholder": "Search furni, classnames, keywords… (/)", + "results": "{count} results", + "inDb": "in DB", + "inCatalog": "in catalog", + "missingNitro": "missing nitro", + "globalTranslation": "Translation (global)", + "catalogTree": "Catalog", + "source": "Furni source", + "officialSource": "(official)", + "type": "Type", + "allTypes": "All types", + "floorItems": "Floor items", + "wallItems": "Wall items", + "category": "Category", + "allCategories": "All categories", + "status": "Status", + "allStatuses": "All statuses", + "imported": "Imported", + "inCatalogStatus": "In catalog", + "missingNitroStatus": "Missing nitro", + "sort": "Sort", + "defaultOrder": "Default order", + "nameAZ": "Name A–Z", + "classnameAZ": "Classname A–Z", + "categorySort": "Category", + "importedFirst": "Imported first", + "notImportedFirst": "Not imported first", + "noNitro": "{count} no nitro", + "gridView": "Grid view", + "listView": "List view", + "selectAll": "Select all", + "selectedCount": "{count} selected", + "clear": "Clear", + "translate": "Translate", + "noLanguages": "No languages", + "allLanguages": "All languages", + "languagesCount": "{count} languages", + "languages": "Languages", + "all": "All", + "none": "None", + "languageLabel": "Language {lang}", + "translateAll": "Translate all", + "translateAllTitle": "Translate the whole catalog into all languages (afterwards)", + "importAuto": "Import {count} auto", + "maintenance": { + "title": "Catalog maintenance", + "description": "Force the furniture tables to 100% consistency with FurnitureData.json. Every action runs inside a database transaction and rolls back on error.", + "refresh": "Refresh", + "currentHealth": "Current health", + "itemsInBase": "{count} items in items_base", + "loading": "Loading…", + "statSpriteId": "sprite_id ≠ id", + "hintSpriteId": "items_base sprite drift", + "statOfferId": "offer_id ≠ id", + "hintOfferId": "catalog offer drift", + "statDuplicateClassnames": "Duplicate classnames", + "hintDuplicateClassnames": "items_base item_name repeats", + "statDuplicateCatalogRows": "Duplicate catalog rows", + "hintDuplicateCatalogRows": "same product listed twice on a page", + "statIdMismatch": "ID ≠ FurnitureData", + "hintIdMismatch": "items_base id differs from furnidata", + "statDuplicateBcCatalogRows": "Duplicate BC catalog rows", + "hintDuplicateBcCatalogRows": "same product listed twice in builder club", + "statDuplicateCatalogPages": "Duplicate catalog pages", + "hintDuplicateCatalogPages": "same caption under the same parent (double links)", + "optionSpriteId": "Fix sprite_id", + "optionOfferId": "Fix catalog offer_id", + "optionRemoveDuplicates": "Remove duplicates (items + catalog)", + "optionReconcile": "Reconcile FurnitureData ↔ DB", + "optionAlignIds": "Align items_base IDs to FurnitureData", + "alignDescription": "Moves every items_base.id to the FurnitureData sprite id (source of truth). Rewrites all referencing tables.", + "previewChanges": "Preview changes", + "plannedIdMoves": "Planned ID moves: {moves}", + "newItemsInsert": "New items to insert: {inserted}", + "skipped": "Skipped (id occupied): {list}", + "applyAlignment": "Apply alignment", + "fixEverythingTitle": "Fix everything", + "fixEverythingDescription": "Runs the selected repairs in order. Heavy operation — make a backup first.", + "alsoMergeDuplicatePages": "Also merge duplicate catalog pages (double links)", + "runSelected": "Run selected", + "selectAtLeastOne": "Select at least one repair to run", + "previewReady": "Preview ready", + "previewFailed": "Preview failed", + "toast": { + "spriteFixed": "sprite_id fixed", + "offerFixed": "catalog offer_id fixed", + "duplicatesRemoved": "Duplicates removed (items + catalog)", + "reconciled": "FurnitureData reconciled", + "aligned": "items_base IDs aligned to FurnitureData", + "allApplied": "All selected repairs applied", + "failed": "Failed" + } + } } }, "emails": { diff --git a/src/messages/da.json b/src/messages/da.json index 2fee2f12..ac038ee5 100644 --- a/src/messages/da.json +++ b/src/messages/da.json @@ -3153,6 +3153,103 @@ "usersJoined": "Joined", "usersLastLogin": "Last login", "usersLastOnline": "Last online" + }, + "studio": { + "title": "Studio", + "sourceFurnidata": "{source} furnidata", + "searchPlaceholder": "Search furni, classnames, keywords… (/)", + "results": "{count} results", + "inDb": "in DB", + "inCatalog": "in catalog", + "missingNitro": "missing nitro", + "globalTranslation": "Translation (global)", + "catalogTree": "Catalog", + "source": "Furni source", + "officialSource": "(official)", + "type": "Type", + "allTypes": "All types", + "floorItems": "Floor items", + "wallItems": "Wall items", + "category": "Category", + "allCategories": "All categories", + "status": "Status", + "allStatuses": "All statuses", + "imported": "Imported", + "inCatalogStatus": "In catalog", + "missingNitroStatus": "Missing nitro", + "sort": "Sort", + "defaultOrder": "Default order", + "nameAZ": "Name A–Z", + "classnameAZ": "Classname A–Z", + "categorySort": "Category", + "importedFirst": "Imported first", + "notImportedFirst": "Not imported first", + "noNitro": "{count} no nitro", + "gridView": "Grid view", + "listView": "List view", + "selectAll": "Select all", + "selectedCount": "{count} selected", + "clear": "Clear", + "translate": "Translate", + "noLanguages": "No languages", + "allLanguages": "All languages", + "languagesCount": "{count} languages", + "languages": "Languages", + "all": "All", + "none": "None", + "languageLabel": "Language {lang}", + "translateAll": "Translate all", + "translateAllTitle": "Translate the whole catalog into all languages (afterwards)", + "importAuto": "Import {count} auto", + "maintenance": { + "title": "Catalog maintenance", + "description": "Force the furniture tables to 100% consistency with FurnitureData.json. Every action runs inside a database transaction and rolls back on error.", + "refresh": "Refresh", + "currentHealth": "Current health", + "itemsInBase": "{count} items in items_base", + "loading": "Loading…", + "statSpriteId": "sprite_id ≠ id", + "hintSpriteId": "items_base sprite drift", + "statOfferId": "offer_id ≠ id", + "hintOfferId": "catalog offer drift", + "statDuplicateClassnames": "Duplicate classnames", + "hintDuplicateClassnames": "items_base item_name repeats", + "statDuplicateCatalogRows": "Duplicate catalog rows", + "hintDuplicateCatalogRows": "same product listed twice on a page", + "statIdMismatch": "ID ≠ FurnitureData", + "hintIdMismatch": "items_base id differs from furnidata", + "statDuplicateBcCatalogRows": "Duplicate BC catalog rows", + "hintDuplicateBcCatalogRows": "same product listed twice in builder club", + "statDuplicateCatalogPages": "Duplicate catalog pages", + "hintDuplicateCatalogPages": "same caption under the same parent (double links)", + "optionSpriteId": "Fix sprite_id", + "optionOfferId": "Fix catalog offer_id", + "optionRemoveDuplicates": "Remove duplicates (items + catalog)", + "optionReconcile": "Reconcile FurnitureData ↔ DB", + "optionAlignIds": "Align items_base IDs to FurnitureData", + "alignDescription": "Moves every items_base.id to the FurnitureData sprite id (source of truth). Rewrites all referencing tables.", + "previewChanges": "Preview changes", + "plannedIdMoves": "Planned ID moves: {moves}", + "newItemsInsert": "New items to insert: {inserted}", + "skipped": "Skipped (id occupied): {list}", + "applyAlignment": "Apply alignment", + "fixEverythingTitle": "Fix everything", + "fixEverythingDescription": "Runs the selected repairs in order. Heavy operation — make a backup first.", + "alsoMergeDuplicatePages": "Also merge duplicate catalog pages (double links)", + "runSelected": "Run selected", + "selectAtLeastOne": "Select at least one repair to run", + "previewReady": "Preview ready", + "previewFailed": "Preview failed", + "toast": { + "spriteFixed": "sprite_id fixed", + "offerFixed": "catalog offer_id fixed", + "duplicatesRemoved": "Duplicates removed (items + catalog)", + "reconciled": "FurnitureData reconciled", + "aligned": "items_base IDs aligned to FurnitureData", + "allApplied": "All selected repairs applied", + "failed": "Failed" + } + } } }, "emails": { diff --git a/src/messages/de.json b/src/messages/de.json index 1dd389f2..8bc679cb 100644 --- a/src/messages/de.json +++ b/src/messages/de.json @@ -3154,6 +3154,103 @@ "usersJoined": "Joined", "usersLastLogin": "Last login", "usersLastOnline": "Last online" + }, + "studio": { + "title": "Studio", + "sourceFurnidata": "{source} furnidata", + "searchPlaceholder": "Search furni, classnames, keywords… (/)", + "results": "{count} results", + "inDb": "in DB", + "inCatalog": "in catalog", + "missingNitro": "missing nitro", + "globalTranslation": "Translation (global)", + "catalogTree": "Catalog", + "source": "Furni source", + "officialSource": "(official)", + "type": "Type", + "allTypes": "All types", + "floorItems": "Floor items", + "wallItems": "Wall items", + "category": "Category", + "allCategories": "All categories", + "status": "Status", + "allStatuses": "All statuses", + "imported": "Imported", + "inCatalogStatus": "In catalog", + "missingNitroStatus": "Missing nitro", + "sort": "Sort", + "defaultOrder": "Default order", + "nameAZ": "Name A–Z", + "classnameAZ": "Classname A–Z", + "categorySort": "Category", + "importedFirst": "Imported first", + "notImportedFirst": "Not imported first", + "noNitro": "{count} no nitro", + "gridView": "Grid view", + "listView": "List view", + "selectAll": "Select all", + "selectedCount": "{count} selected", + "clear": "Clear", + "translate": "Translate", + "noLanguages": "No languages", + "allLanguages": "All languages", + "languagesCount": "{count} languages", + "languages": "Languages", + "all": "All", + "none": "None", + "languageLabel": "Language {lang}", + "translateAll": "Translate all", + "translateAllTitle": "Translate the whole catalog into all languages (afterwards)", + "importAuto": "Import {count} auto", + "maintenance": { + "title": "Catalog maintenance", + "description": "Force the furniture tables to 100% consistency with FurnitureData.json. Every action runs inside a database transaction and rolls back on error.", + "refresh": "Refresh", + "currentHealth": "Current health", + "itemsInBase": "{count} items in items_base", + "loading": "Loading…", + "statSpriteId": "sprite_id ≠ id", + "hintSpriteId": "items_base sprite drift", + "statOfferId": "offer_id ≠ id", + "hintOfferId": "catalog offer drift", + "statDuplicateClassnames": "Duplicate classnames", + "hintDuplicateClassnames": "items_base item_name repeats", + "statDuplicateCatalogRows": "Duplicate catalog rows", + "hintDuplicateCatalogRows": "same product listed twice on a page", + "statIdMismatch": "ID ≠ FurnitureData", + "hintIdMismatch": "items_base id differs from furnidata", + "statDuplicateBcCatalogRows": "Duplicate BC catalog rows", + "hintDuplicateBcCatalogRows": "same product listed twice in builder club", + "statDuplicateCatalogPages": "Duplicate catalog pages", + "hintDuplicateCatalogPages": "same caption under the same parent (double links)", + "optionSpriteId": "Fix sprite_id", + "optionOfferId": "Fix catalog offer_id", + "optionRemoveDuplicates": "Remove duplicates (items + catalog)", + "optionReconcile": "Reconcile FurnitureData ↔ DB", + "optionAlignIds": "Align items_base IDs to FurnitureData", + "alignDescription": "Moves every items_base.id to the FurnitureData sprite id (source of truth). Rewrites all referencing tables.", + "previewChanges": "Preview changes", + "plannedIdMoves": "Planned ID moves: {moves}", + "newItemsInsert": "New items to insert: {inserted}", + "skipped": "Skipped (id occupied): {list}", + "applyAlignment": "Apply alignment", + "fixEverythingTitle": "Fix everything", + "fixEverythingDescription": "Runs the selected repairs in order. Heavy operation — make a backup first.", + "alsoMergeDuplicatePages": "Also merge duplicate catalog pages (double links)", + "runSelected": "Run selected", + "selectAtLeastOne": "Select at least one repair to run", + "previewReady": "Preview ready", + "previewFailed": "Preview failed", + "toast": { + "spriteFixed": "sprite_id fixed", + "offerFixed": "catalog offer_id fixed", + "duplicatesRemoved": "Duplicates removed (items + catalog)", + "reconciled": "FurnitureData reconciled", + "aligned": "items_base IDs aligned to FurnitureData", + "allApplied": "All selected repairs applied", + "failed": "Failed" + } + } } }, "emails": { diff --git a/src/messages/el.json b/src/messages/el.json index fbbc4e3f..13c5ef68 100644 --- a/src/messages/el.json +++ b/src/messages/el.json @@ -3153,6 +3153,103 @@ "usersJoined": "Joined", "usersLastLogin": "Last login", "usersLastOnline": "Last online" + }, + "studio": { + "title": "Studio", + "sourceFurnidata": "{source} furnidata", + "searchPlaceholder": "Search furni, classnames, keywords… (/)", + "results": "{count} results", + "inDb": "in DB", + "inCatalog": "in catalog", + "missingNitro": "missing nitro", + "globalTranslation": "Translation (global)", + "catalogTree": "Catalog", + "source": "Furni source", + "officialSource": "(official)", + "type": "Type", + "allTypes": "All types", + "floorItems": "Floor items", + "wallItems": "Wall items", + "category": "Category", + "allCategories": "All categories", + "status": "Status", + "allStatuses": "All statuses", + "imported": "Imported", + "inCatalogStatus": "In catalog", + "missingNitroStatus": "Missing nitro", + "sort": "Sort", + "defaultOrder": "Default order", + "nameAZ": "Name A–Z", + "classnameAZ": "Classname A–Z", + "categorySort": "Category", + "importedFirst": "Imported first", + "notImportedFirst": "Not imported first", + "noNitro": "{count} no nitro", + "gridView": "Grid view", + "listView": "List view", + "selectAll": "Select all", + "selectedCount": "{count} selected", + "clear": "Clear", + "translate": "Translate", + "noLanguages": "No languages", + "allLanguages": "All languages", + "languagesCount": "{count} languages", + "languages": "Languages", + "all": "All", + "none": "None", + "languageLabel": "Language {lang}", + "translateAll": "Translate all", + "translateAllTitle": "Translate the whole catalog into all languages (afterwards)", + "importAuto": "Import {count} auto", + "maintenance": { + "title": "Catalog maintenance", + "description": "Force the furniture tables to 100% consistency with FurnitureData.json. Every action runs inside a database transaction and rolls back on error.", + "refresh": "Refresh", + "currentHealth": "Current health", + "itemsInBase": "{count} items in items_base", + "loading": "Loading…", + "statSpriteId": "sprite_id ≠ id", + "hintSpriteId": "items_base sprite drift", + "statOfferId": "offer_id ≠ id", + "hintOfferId": "catalog offer drift", + "statDuplicateClassnames": "Duplicate classnames", + "hintDuplicateClassnames": "items_base item_name repeats", + "statDuplicateCatalogRows": "Duplicate catalog rows", + "hintDuplicateCatalogRows": "same product listed twice on a page", + "statIdMismatch": "ID ≠ FurnitureData", + "hintIdMismatch": "items_base id differs from furnidata", + "statDuplicateBcCatalogRows": "Duplicate BC catalog rows", + "hintDuplicateBcCatalogRows": "same product listed twice in builder club", + "statDuplicateCatalogPages": "Duplicate catalog pages", + "hintDuplicateCatalogPages": "same caption under the same parent (double links)", + "optionSpriteId": "Fix sprite_id", + "optionOfferId": "Fix catalog offer_id", + "optionRemoveDuplicates": "Remove duplicates (items + catalog)", + "optionReconcile": "Reconcile FurnitureData ↔ DB", + "optionAlignIds": "Align items_base IDs to FurnitureData", + "alignDescription": "Moves every items_base.id to the FurnitureData sprite id (source of truth). Rewrites all referencing tables.", + "previewChanges": "Preview changes", + "plannedIdMoves": "Planned ID moves: {moves}", + "newItemsInsert": "New items to insert: {inserted}", + "skipped": "Skipped (id occupied): {list}", + "applyAlignment": "Apply alignment", + "fixEverythingTitle": "Fix everything", + "fixEverythingDescription": "Runs the selected repairs in order. Heavy operation — make a backup first.", + "alsoMergeDuplicatePages": "Also merge duplicate catalog pages (double links)", + "runSelected": "Run selected", + "selectAtLeastOne": "Select at least one repair to run", + "previewReady": "Preview ready", + "previewFailed": "Preview failed", + "toast": { + "spriteFixed": "sprite_id fixed", + "offerFixed": "catalog offer_id fixed", + "duplicatesRemoved": "Duplicates removed (items + catalog)", + "reconciled": "FurnitureData reconciled", + "aligned": "items_base IDs aligned to FurnitureData", + "allApplied": "All selected repairs applied", + "failed": "Failed" + } + } } }, "emails": { diff --git a/src/messages/en.json b/src/messages/en.json index c8fc9c61..825ca795 100644 --- a/src/messages/en.json +++ b/src/messages/en.json @@ -3158,6 +3158,103 @@ "team": "Mod team", "teamHint": "Online staff & workload" } + }, + "studio": { + "title": "Studio", + "sourceFurnidata": "{source} furnidata", + "searchPlaceholder": "Search furni, classnames, keywords… (/)", + "results": "{count} results", + "inDb": "in DB", + "inCatalog": "in catalog", + "missingNitro": "missing nitro", + "globalTranslation": "Translation (global)", + "catalogTree": "Catalog", + "source": "Furni source", + "officialSource": "(official)", + "type": "Type", + "allTypes": "All types", + "floorItems": "Floor items", + "wallItems": "Wall items", + "category": "Category", + "allCategories": "All categories", + "status": "Status", + "allStatuses": "All statuses", + "imported": "Imported", + "inCatalogStatus": "In catalog", + "missingNitroStatus": "Missing nitro", + "sort": "Sort", + "defaultOrder": "Default order", + "nameAZ": "Name A–Z", + "classnameAZ": "Classname A–Z", + "categorySort": "Category", + "importedFirst": "Imported first", + "notImportedFirst": "Not imported first", + "noNitro": "{count} no nitro", + "gridView": "Grid view", + "listView": "List view", + "selectAll": "Select all", + "selectedCount": "{count} selected", + "clear": "Clear", + "translate": "Translate", + "noLanguages": "No languages", + "allLanguages": "All languages", + "languagesCount": "{count} languages", + "languages": "Languages", + "all": "All", + "none": "None", + "languageLabel": "Language {lang}", + "translateAll": "Translate all", + "translateAllTitle": "Translate the whole catalog into all languages (afterwards)", + "importAuto": "Import {count} auto", + "maintenance": { + "title": "Catalog maintenance", + "description": "Force the furniture tables to 100% consistency with FurnitureData.json. Every action runs inside a database transaction and rolls back on error.", + "refresh": "Refresh", + "currentHealth": "Current health", + "itemsInBase": "{count} items in items_base", + "loading": "Loading…", + "statSpriteId": "sprite_id ≠ id", + "hintSpriteId": "items_base sprite drift", + "statOfferId": "offer_id ≠ id", + "hintOfferId": "catalog offer drift", + "statDuplicateClassnames": "Duplicate classnames", + "hintDuplicateClassnames": "items_base item_name repeats", + "statDuplicateCatalogRows": "Duplicate catalog rows", + "hintDuplicateCatalogRows": "same product listed twice on a page", + "statIdMismatch": "ID ≠ FurnitureData", + "hintIdMismatch": "items_base id differs from furnidata", + "statDuplicateBcCatalogRows": "Duplicate BC catalog rows", + "hintDuplicateBcCatalogRows": "same product listed twice in builder club", + "statDuplicateCatalogPages": "Duplicate catalog pages", + "hintDuplicateCatalogPages": "same caption under the same parent (double links)", + "optionSpriteId": "Fix sprite_id", + "optionOfferId": "Fix catalog offer_id", + "optionRemoveDuplicates": "Remove duplicates (items + catalog)", + "optionReconcile": "Reconcile FurnitureData ↔ DB", + "optionAlignIds": "Align items_base IDs to FurnitureData", + "alignDescription": "Moves every items_base.id to the FurnitureData sprite id (source of truth). Rewrites all referencing tables.", + "previewChanges": "Preview changes", + "plannedIdMoves": "Planned ID moves: {moves}", + "newItemsInsert": "New items to insert: {inserted}", + "skipped": "Skipped (id occupied): {list}", + "applyAlignment": "Apply alignment", + "fixEverythingTitle": "Fix everything", + "fixEverythingDescription": "Runs the selected repairs in order. Heavy operation — make a backup first.", + "alsoMergeDuplicatePages": "Also merge duplicate catalog pages (double links)", + "runSelected": "Run selected", + "selectAtLeastOne": "Select at least one repair to run", + "previewReady": "Preview ready", + "previewFailed": "Preview failed", + "toast": { + "spriteFixed": "sprite_id fixed", + "offerFixed": "catalog offer_id fixed", + "duplicatesRemoved": "Duplicates removed (items + catalog)", + "reconciled": "FurnitureData reconciled", + "aligned": "items_base IDs aligned to FurnitureData", + "allApplied": "All selected repairs applied", + "failed": "Failed" + } + } } } } diff --git a/src/messages/es.json b/src/messages/es.json index 6f900d63..a4178ef9 100644 --- a/src/messages/es.json +++ b/src/messages/es.json @@ -3154,6 +3154,103 @@ "usersJoined": "Joined", "usersLastLogin": "Last login", "usersLastOnline": "Last online" + }, + "studio": { + "title": "Studio", + "sourceFurnidata": "{source} furnidata", + "searchPlaceholder": "Search furni, classnames, keywords… (/)", + "results": "{count} results", + "inDb": "in DB", + "inCatalog": "in catalog", + "missingNitro": "missing nitro", + "globalTranslation": "Translation (global)", + "catalogTree": "Catalog", + "source": "Furni source", + "officialSource": "(official)", + "type": "Type", + "allTypes": "All types", + "floorItems": "Floor items", + "wallItems": "Wall items", + "category": "Category", + "allCategories": "All categories", + "status": "Status", + "allStatuses": "All statuses", + "imported": "Imported", + "inCatalogStatus": "In catalog", + "missingNitroStatus": "Missing nitro", + "sort": "Sort", + "defaultOrder": "Default order", + "nameAZ": "Name A–Z", + "classnameAZ": "Classname A–Z", + "categorySort": "Category", + "importedFirst": "Imported first", + "notImportedFirst": "Not imported first", + "noNitro": "{count} no nitro", + "gridView": "Grid view", + "listView": "List view", + "selectAll": "Select all", + "selectedCount": "{count} selected", + "clear": "Clear", + "translate": "Translate", + "noLanguages": "No languages", + "allLanguages": "All languages", + "languagesCount": "{count} languages", + "languages": "Languages", + "all": "All", + "none": "None", + "languageLabel": "Language {lang}", + "translateAll": "Translate all", + "translateAllTitle": "Translate the whole catalog into all languages (afterwards)", + "importAuto": "Import {count} auto", + "maintenance": { + "title": "Catalog maintenance", + "description": "Force the furniture tables to 100% consistency with FurnitureData.json. Every action runs inside a database transaction and rolls back on error.", + "refresh": "Refresh", + "currentHealth": "Current health", + "itemsInBase": "{count} items in items_base", + "loading": "Loading…", + "statSpriteId": "sprite_id ≠ id", + "hintSpriteId": "items_base sprite drift", + "statOfferId": "offer_id ≠ id", + "hintOfferId": "catalog offer drift", + "statDuplicateClassnames": "Duplicate classnames", + "hintDuplicateClassnames": "items_base item_name repeats", + "statDuplicateCatalogRows": "Duplicate catalog rows", + "hintDuplicateCatalogRows": "same product listed twice on a page", + "statIdMismatch": "ID ≠ FurnitureData", + "hintIdMismatch": "items_base id differs from furnidata", + "statDuplicateBcCatalogRows": "Duplicate BC catalog rows", + "hintDuplicateBcCatalogRows": "same product listed twice in builder club", + "statDuplicateCatalogPages": "Duplicate catalog pages", + "hintDuplicateCatalogPages": "same caption under the same parent (double links)", + "optionSpriteId": "Fix sprite_id", + "optionOfferId": "Fix catalog offer_id", + "optionRemoveDuplicates": "Remove duplicates (items + catalog)", + "optionReconcile": "Reconcile FurnitureData ↔ DB", + "optionAlignIds": "Align items_base IDs to FurnitureData", + "alignDescription": "Moves every items_base.id to the FurnitureData sprite id (source of truth). Rewrites all referencing tables.", + "previewChanges": "Preview changes", + "plannedIdMoves": "Planned ID moves: {moves}", + "newItemsInsert": "New items to insert: {inserted}", + "skipped": "Skipped (id occupied): {list}", + "applyAlignment": "Apply alignment", + "fixEverythingTitle": "Fix everything", + "fixEverythingDescription": "Runs the selected repairs in order. Heavy operation — make a backup first.", + "alsoMergeDuplicatePages": "Also merge duplicate catalog pages (double links)", + "runSelected": "Run selected", + "selectAtLeastOne": "Select at least one repair to run", + "previewReady": "Preview ready", + "previewFailed": "Preview failed", + "toast": { + "spriteFixed": "sprite_id fixed", + "offerFixed": "catalog offer_id fixed", + "duplicatesRemoved": "Duplicates removed (items + catalog)", + "reconciled": "FurnitureData reconciled", + "aligned": "items_base IDs aligned to FurnitureData", + "allApplied": "All selected repairs applied", + "failed": "Failed" + } + } } }, "emails": { diff --git a/src/messages/fr.json b/src/messages/fr.json index 9f464851..6baf9749 100644 --- a/src/messages/fr.json +++ b/src/messages/fr.json @@ -3154,6 +3154,103 @@ "usersJoined": "Joined", "usersLastLogin": "Last login", "usersLastOnline": "Last online" + }, + "studio": { + "title": "Studio", + "sourceFurnidata": "{source} furnidata", + "searchPlaceholder": "Search furni, classnames, keywords… (/)", + "results": "{count} results", + "inDb": "in DB", + "inCatalog": "in catalog", + "missingNitro": "missing nitro", + "globalTranslation": "Translation (global)", + "catalogTree": "Catalog", + "source": "Furni source", + "officialSource": "(official)", + "type": "Type", + "allTypes": "All types", + "floorItems": "Floor items", + "wallItems": "Wall items", + "category": "Category", + "allCategories": "All categories", + "status": "Status", + "allStatuses": "All statuses", + "imported": "Imported", + "inCatalogStatus": "In catalog", + "missingNitroStatus": "Missing nitro", + "sort": "Sort", + "defaultOrder": "Default order", + "nameAZ": "Name A–Z", + "classnameAZ": "Classname A–Z", + "categorySort": "Category", + "importedFirst": "Imported first", + "notImportedFirst": "Not imported first", + "noNitro": "{count} no nitro", + "gridView": "Grid view", + "listView": "List view", + "selectAll": "Select all", + "selectedCount": "{count} selected", + "clear": "Clear", + "translate": "Translate", + "noLanguages": "No languages", + "allLanguages": "All languages", + "languagesCount": "{count} languages", + "languages": "Languages", + "all": "All", + "none": "None", + "languageLabel": "Language {lang}", + "translateAll": "Translate all", + "translateAllTitle": "Translate the whole catalog into all languages (afterwards)", + "importAuto": "Import {count} auto", + "maintenance": { + "title": "Catalog maintenance", + "description": "Force the furniture tables to 100% consistency with FurnitureData.json. Every action runs inside a database transaction and rolls back on error.", + "refresh": "Refresh", + "currentHealth": "Current health", + "itemsInBase": "{count} items in items_base", + "loading": "Loading…", + "statSpriteId": "sprite_id ≠ id", + "hintSpriteId": "items_base sprite drift", + "statOfferId": "offer_id ≠ id", + "hintOfferId": "catalog offer drift", + "statDuplicateClassnames": "Duplicate classnames", + "hintDuplicateClassnames": "items_base item_name repeats", + "statDuplicateCatalogRows": "Duplicate catalog rows", + "hintDuplicateCatalogRows": "same product listed twice on a page", + "statIdMismatch": "ID ≠ FurnitureData", + "hintIdMismatch": "items_base id differs from furnidata", + "statDuplicateBcCatalogRows": "Duplicate BC catalog rows", + "hintDuplicateBcCatalogRows": "same product listed twice in builder club", + "statDuplicateCatalogPages": "Duplicate catalog pages", + "hintDuplicateCatalogPages": "same caption under the same parent (double links)", + "optionSpriteId": "Fix sprite_id", + "optionOfferId": "Fix catalog offer_id", + "optionRemoveDuplicates": "Remove duplicates (items + catalog)", + "optionReconcile": "Reconcile FurnitureData ↔ DB", + "optionAlignIds": "Align items_base IDs to FurnitureData", + "alignDescription": "Moves every items_base.id to the FurnitureData sprite id (source of truth). Rewrites all referencing tables.", + "previewChanges": "Preview changes", + "plannedIdMoves": "Planned ID moves: {moves}", + "newItemsInsert": "New items to insert: {inserted}", + "skipped": "Skipped (id occupied): {list}", + "applyAlignment": "Apply alignment", + "fixEverythingTitle": "Fix everything", + "fixEverythingDescription": "Runs the selected repairs in order. Heavy operation — make a backup first.", + "alsoMergeDuplicatePages": "Also merge duplicate catalog pages (double links)", + "runSelected": "Run selected", + "selectAtLeastOne": "Select at least one repair to run", + "previewReady": "Preview ready", + "previewFailed": "Preview failed", + "toast": { + "spriteFixed": "sprite_id fixed", + "offerFixed": "catalog offer_id fixed", + "duplicatesRemoved": "Duplicates removed (items + catalog)", + "reconciled": "FurnitureData reconciled", + "aligned": "items_base IDs aligned to FurnitureData", + "allApplied": "All selected repairs applied", + "failed": "Failed" + } + } } }, "emails": { diff --git a/src/messages/hr.json b/src/messages/hr.json index 25a0b9d9..514b376f 100644 --- a/src/messages/hr.json +++ b/src/messages/hr.json @@ -3153,6 +3153,103 @@ "usersJoined": "Joined", "usersLastLogin": "Last login", "usersLastOnline": "Last online" + }, + "studio": { + "title": "Studio", + "sourceFurnidata": "{source} furnidata", + "searchPlaceholder": "Search furni, classnames, keywords… (/)", + "results": "{count} results", + "inDb": "in DB", + "inCatalog": "in catalog", + "missingNitro": "missing nitro", + "globalTranslation": "Translation (global)", + "catalogTree": "Catalog", + "source": "Furni source", + "officialSource": "(official)", + "type": "Type", + "allTypes": "All types", + "floorItems": "Floor items", + "wallItems": "Wall items", + "category": "Category", + "allCategories": "All categories", + "status": "Status", + "allStatuses": "All statuses", + "imported": "Imported", + "inCatalogStatus": "In catalog", + "missingNitroStatus": "Missing nitro", + "sort": "Sort", + "defaultOrder": "Default order", + "nameAZ": "Name A–Z", + "classnameAZ": "Classname A–Z", + "categorySort": "Category", + "importedFirst": "Imported first", + "notImportedFirst": "Not imported first", + "noNitro": "{count} no nitro", + "gridView": "Grid view", + "listView": "List view", + "selectAll": "Select all", + "selectedCount": "{count} selected", + "clear": "Clear", + "translate": "Translate", + "noLanguages": "No languages", + "allLanguages": "All languages", + "languagesCount": "{count} languages", + "languages": "Languages", + "all": "All", + "none": "None", + "languageLabel": "Language {lang}", + "translateAll": "Translate all", + "translateAllTitle": "Translate the whole catalog into all languages (afterwards)", + "importAuto": "Import {count} auto", + "maintenance": { + "title": "Catalog maintenance", + "description": "Force the furniture tables to 100% consistency with FurnitureData.json. Every action runs inside a database transaction and rolls back on error.", + "refresh": "Refresh", + "currentHealth": "Current health", + "itemsInBase": "{count} items in items_base", + "loading": "Loading…", + "statSpriteId": "sprite_id ≠ id", + "hintSpriteId": "items_base sprite drift", + "statOfferId": "offer_id ≠ id", + "hintOfferId": "catalog offer drift", + "statDuplicateClassnames": "Duplicate classnames", + "hintDuplicateClassnames": "items_base item_name repeats", + "statDuplicateCatalogRows": "Duplicate catalog rows", + "hintDuplicateCatalogRows": "same product listed twice on a page", + "statIdMismatch": "ID ≠ FurnitureData", + "hintIdMismatch": "items_base id differs from furnidata", + "statDuplicateBcCatalogRows": "Duplicate BC catalog rows", + "hintDuplicateBcCatalogRows": "same product listed twice in builder club", + "statDuplicateCatalogPages": "Duplicate catalog pages", + "hintDuplicateCatalogPages": "same caption under the same parent (double links)", + "optionSpriteId": "Fix sprite_id", + "optionOfferId": "Fix catalog offer_id", + "optionRemoveDuplicates": "Remove duplicates (items + catalog)", + "optionReconcile": "Reconcile FurnitureData ↔ DB", + "optionAlignIds": "Align items_base IDs to FurnitureData", + "alignDescription": "Moves every items_base.id to the FurnitureData sprite id (source of truth). Rewrites all referencing tables.", + "previewChanges": "Preview changes", + "plannedIdMoves": "Planned ID moves: {moves}", + "newItemsInsert": "New items to insert: {inserted}", + "skipped": "Skipped (id occupied): {list}", + "applyAlignment": "Apply alignment", + "fixEverythingTitle": "Fix everything", + "fixEverythingDescription": "Runs the selected repairs in order. Heavy operation — make a backup first.", + "alsoMergeDuplicatePages": "Also merge duplicate catalog pages (double links)", + "runSelected": "Run selected", + "selectAtLeastOne": "Select at least one repair to run", + "previewReady": "Preview ready", + "previewFailed": "Preview failed", + "toast": { + "spriteFixed": "sprite_id fixed", + "offerFixed": "catalog offer_id fixed", + "duplicatesRemoved": "Duplicates removed (items + catalog)", + "reconciled": "FurnitureData reconciled", + "aligned": "items_base IDs aligned to FurnitureData", + "allApplied": "All selected repairs applied", + "failed": "Failed" + } + } } }, "emails": { diff --git a/src/messages/hu.json b/src/messages/hu.json index ff20fda1..d334f841 100644 --- a/src/messages/hu.json +++ b/src/messages/hu.json @@ -3153,6 +3153,103 @@ "usersJoined": "Joined", "usersLastLogin": "Last login", "usersLastOnline": "Last online" + }, + "studio": { + "title": "Studio", + "sourceFurnidata": "{source} furnidata", + "searchPlaceholder": "Search furni, classnames, keywords… (/)", + "results": "{count} results", + "inDb": "in DB", + "inCatalog": "in catalog", + "missingNitro": "missing nitro", + "globalTranslation": "Translation (global)", + "catalogTree": "Catalog", + "source": "Furni source", + "officialSource": "(official)", + "type": "Type", + "allTypes": "All types", + "floorItems": "Floor items", + "wallItems": "Wall items", + "category": "Category", + "allCategories": "All categories", + "status": "Status", + "allStatuses": "All statuses", + "imported": "Imported", + "inCatalogStatus": "In catalog", + "missingNitroStatus": "Missing nitro", + "sort": "Sort", + "defaultOrder": "Default order", + "nameAZ": "Name A–Z", + "classnameAZ": "Classname A–Z", + "categorySort": "Category", + "importedFirst": "Imported first", + "notImportedFirst": "Not imported first", + "noNitro": "{count} no nitro", + "gridView": "Grid view", + "listView": "List view", + "selectAll": "Select all", + "selectedCount": "{count} selected", + "clear": "Clear", + "translate": "Translate", + "noLanguages": "No languages", + "allLanguages": "All languages", + "languagesCount": "{count} languages", + "languages": "Languages", + "all": "All", + "none": "None", + "languageLabel": "Language {lang}", + "translateAll": "Translate all", + "translateAllTitle": "Translate the whole catalog into all languages (afterwards)", + "importAuto": "Import {count} auto", + "maintenance": { + "title": "Catalog maintenance", + "description": "Force the furniture tables to 100% consistency with FurnitureData.json. Every action runs inside a database transaction and rolls back on error.", + "refresh": "Refresh", + "currentHealth": "Current health", + "itemsInBase": "{count} items in items_base", + "loading": "Loading…", + "statSpriteId": "sprite_id ≠ id", + "hintSpriteId": "items_base sprite drift", + "statOfferId": "offer_id ≠ id", + "hintOfferId": "catalog offer drift", + "statDuplicateClassnames": "Duplicate classnames", + "hintDuplicateClassnames": "items_base item_name repeats", + "statDuplicateCatalogRows": "Duplicate catalog rows", + "hintDuplicateCatalogRows": "same product listed twice on a page", + "statIdMismatch": "ID ≠ FurnitureData", + "hintIdMismatch": "items_base id differs from furnidata", + "statDuplicateBcCatalogRows": "Duplicate BC catalog rows", + "hintDuplicateBcCatalogRows": "same product listed twice in builder club", + "statDuplicateCatalogPages": "Duplicate catalog pages", + "hintDuplicateCatalogPages": "same caption under the same parent (double links)", + "optionSpriteId": "Fix sprite_id", + "optionOfferId": "Fix catalog offer_id", + "optionRemoveDuplicates": "Remove duplicates (items + catalog)", + "optionReconcile": "Reconcile FurnitureData ↔ DB", + "optionAlignIds": "Align items_base IDs to FurnitureData", + "alignDescription": "Moves every items_base.id to the FurnitureData sprite id (source of truth). Rewrites all referencing tables.", + "previewChanges": "Preview changes", + "plannedIdMoves": "Planned ID moves: {moves}", + "newItemsInsert": "New items to insert: {inserted}", + "skipped": "Skipped (id occupied): {list}", + "applyAlignment": "Apply alignment", + "fixEverythingTitle": "Fix everything", + "fixEverythingDescription": "Runs the selected repairs in order. Heavy operation — make a backup first.", + "alsoMergeDuplicatePages": "Also merge duplicate catalog pages (double links)", + "runSelected": "Run selected", + "selectAtLeastOne": "Select at least one repair to run", + "previewReady": "Preview ready", + "previewFailed": "Preview failed", + "toast": { + "spriteFixed": "sprite_id fixed", + "offerFixed": "catalog offer_id fixed", + "duplicatesRemoved": "Duplicates removed (items + catalog)", + "reconciled": "FurnitureData reconciled", + "aligned": "items_base IDs aligned to FurnitureData", + "allApplied": "All selected repairs applied", + "failed": "Failed" + } + } } }, "emails": { diff --git a/src/messages/it.json b/src/messages/it.json index be0569d2..a53cbb4c 100644 --- a/src/messages/it.json +++ b/src/messages/it.json @@ -3163,6 +3163,103 @@ "team": "Team mod", "teamHint": "Staff online e carico" } + }, + "studio": { + "title": "Studio", + "sourceFurnidata": "{source} furnidata", + "searchPlaceholder": "Search furni, classnames, keywords… (/)", + "results": "{count} results", + "inDb": "in DB", + "inCatalog": "in catalog", + "missingNitro": "missing nitro", + "globalTranslation": "Translation (global)", + "catalogTree": "Catalog", + "source": "Furni source", + "officialSource": "(official)", + "type": "Type", + "allTypes": "All types", + "floorItems": "Floor items", + "wallItems": "Wall items", + "category": "Category", + "allCategories": "All categories", + "status": "Status", + "allStatuses": "All statuses", + "imported": "Imported", + "inCatalogStatus": "In catalog", + "missingNitroStatus": "Missing nitro", + "sort": "Sort", + "defaultOrder": "Default order", + "nameAZ": "Name A–Z", + "classnameAZ": "Classname A–Z", + "categorySort": "Category", + "importedFirst": "Imported first", + "notImportedFirst": "Not imported first", + "noNitro": "{count} no nitro", + "gridView": "Grid view", + "listView": "List view", + "selectAll": "Select all", + "selectedCount": "{count} selected", + "clear": "Clear", + "translate": "Translate", + "noLanguages": "No languages", + "allLanguages": "All languages", + "languagesCount": "{count} languages", + "languages": "Languages", + "all": "All", + "none": "None", + "languageLabel": "Language {lang}", + "translateAll": "Translate all", + "translateAllTitle": "Translate the whole catalog into all languages (afterwards)", + "importAuto": "Import {count} auto", + "maintenance": { + "title": "Catalog maintenance", + "description": "Force the furniture tables to 100% consistency with FurnitureData.json. Every action runs inside a database transaction and rolls back on error.", + "refresh": "Refresh", + "currentHealth": "Current health", + "itemsInBase": "{count} items in items_base", + "loading": "Loading…", + "statSpriteId": "sprite_id ≠ id", + "hintSpriteId": "items_base sprite drift", + "statOfferId": "offer_id ≠ id", + "hintOfferId": "catalog offer drift", + "statDuplicateClassnames": "Duplicate classnames", + "hintDuplicateClassnames": "items_base item_name repeats", + "statDuplicateCatalogRows": "Duplicate catalog rows", + "hintDuplicateCatalogRows": "same product listed twice on a page", + "statIdMismatch": "ID ≠ FurnitureData", + "hintIdMismatch": "items_base id differs from furnidata", + "statDuplicateBcCatalogRows": "Duplicate BC catalog rows", + "hintDuplicateBcCatalogRows": "same product listed twice in builder club", + "statDuplicateCatalogPages": "Duplicate catalog pages", + "hintDuplicateCatalogPages": "same caption under the same parent (double links)", + "optionSpriteId": "Fix sprite_id", + "optionOfferId": "Fix catalog offer_id", + "optionRemoveDuplicates": "Remove duplicates (items + catalog)", + "optionReconcile": "Reconcile FurnitureData ↔ DB", + "optionAlignIds": "Align items_base IDs to FurnitureData", + "alignDescription": "Moves every items_base.id to the FurnitureData sprite id (source of truth). Rewrites all referencing tables.", + "previewChanges": "Preview changes", + "plannedIdMoves": "Planned ID moves: {moves}", + "newItemsInsert": "New items to insert: {inserted}", + "skipped": "Skipped (id occupied): {list}", + "applyAlignment": "Apply alignment", + "fixEverythingTitle": "Fix everything", + "fixEverythingDescription": "Runs the selected repairs in order. Heavy operation — make a backup first.", + "alsoMergeDuplicatePages": "Also merge duplicate catalog pages (double links)", + "runSelected": "Run selected", + "selectAtLeastOne": "Select at least one repair to run", + "previewReady": "Preview ready", + "previewFailed": "Preview failed", + "toast": { + "spriteFixed": "sprite_id fixed", + "offerFixed": "catalog offer_id fixed", + "duplicatesRemoved": "Duplicates removed (items + catalog)", + "reconciled": "FurnitureData reconciled", + "aligned": "items_base IDs aligned to FurnitureData", + "allApplied": "All selected repairs applied", + "failed": "Failed" + } + } } } } diff --git a/src/messages/nl.json b/src/messages/nl.json index ef25a8ad..8df76cdf 100644 --- a/src/messages/nl.json +++ b/src/messages/nl.json @@ -3164,6 +3164,103 @@ "team": "Mod team", "teamHint": "Online staff & werklast" } + }, + "studio": { + "title": "Studio", + "sourceFurnidata": "{source} furnidata", + "searchPlaceholder": "Zoek furni, classnames, trefwoorden… (/)", + "results": "{count} resultaten", + "inDb": "in DB", + "inCatalog": "in catalogus", + "missingNitro": "ontbrekende nitro", + "globalTranslation": "Vertaling (globaal)", + "catalogTree": "Catalogus", + "source": "Furni-bron", + "officialSource": "(officieel)", + "type": "Type", + "allTypes": "Alle types", + "floorItems": "Vloeritems", + "wallItems": "Muuritems", + "category": "Categorie", + "allCategories": "Alle categorieën", + "status": "Status", + "allStatuses": "Alle statussen", + "imported": "Geïmporteerd", + "inCatalogStatus": "In catalogus", + "missingNitroStatus": "Ontbrekende nitro", + "sort": "Sorteer", + "defaultOrder": "Standaardvolgorde", + "nameAZ": "Naam A–Z", + "classnameAZ": "Classname A–Z", + "categorySort": "Categorie", + "importedFirst": "Eerst geïmporteerd", + "notImportedFirst": "Eerst niet-geïmporteerd", + "noNitro": "{count} geen nitro", + "gridView": "Rasterweergave", + "listView": "Lijstweergave", + "selectAll": "Alles selecteren", + "selectedCount": "{count} geselecteerd", + "clear": "Wissen", + "translate": "Vertalen", + "noLanguages": "Geen talen", + "allLanguages": "Alle talen", + "languagesCount": "{count} talen", + "languages": "Talen", + "all": "Alles", + "none": "Geen", + "languageLabel": "Taal {lang}", + "translateAll": "Alles vertalen", + "translateAllTitle": "Vertaal de hele catalogus in alle talen (achteraf)", + "importAuto": "Importeer {count} auto", + "maintenance": { + "title": "Catalogus-onderhoud", + "description": "Dwing de meubeltabellen tot 100% consistentie met FurnitureData.json. Elke actie draait in een database-transactie en rolt terug bij een fout.", + "refresh": "Verversen", + "currentHealth": "Huidige status", + "itemsInBase": "{count} items in items_base", + "loading": "Laden…", + "statSpriteId": "sprite_id ≠ id", + "hintSpriteId": "items_base sprite-afwijking", + "statOfferId": "offer_id ≠ id", + "hintOfferId": "catalogus offer-afwijking", + "statDuplicateClassnames": "Dubbele classnames", + "hintDuplicateClassnames": "items_base item_name dubbelen", + "statDuplicateCatalogRows": "Dubbele catalogusrijen", + "hintDuplicateCatalogRows": "zelfde product twee keer op een pagina", + "statIdMismatch": "ID ≠ FurnitureData", + "hintIdMismatch": "items_base id wijkt af van furnidata", + "statDuplicateBcCatalogRows": "Dubbele BC-catalogusrijen", + "hintDuplicateBcCatalogRows": "zelfde product twee keer in builder club", + "statDuplicateCatalogPages": "Dubbele cataloguspagina's", + "hintDuplicateCatalogPages": "zelfde bijschrift onder dezelfde ouder (dubbele links)", + "optionSpriteId": "Herstel sprite_id", + "optionOfferId": "Herstel catalogus offer_id", + "optionRemoveDuplicates": "Verwijder dubbele (items + catalogus)", + "optionReconcile": "Verzoen FurnitureData ↔ DB", + "optionAlignIds": "Aligneer items_base-ID's naar FurnitureData", + "alignDescription": "Verplaatst elke items_base.id naar de FurnitureData sprite-id (bron van waarheid). Overschrijft alle refererende tabellen.", + "previewChanges": "Bekijk wijzigingen", + "plannedIdMoves": "Geplande ID-verplaatsingen: {moves}", + "newItemsInsert": "Nieuwe items om in te voegen: {inserted}", + "skipped": "Overgeslagen (id bezet): {list}", + "applyAlignment": "Pas uitlijning toe", + "fixEverythingTitle": "Alles herstellen", + "fixEverythingDescription": "Voert de geselecteerde reparaties in volgorde uit. Zware bewerking — maak eerst een backup.", + "alsoMergeDuplicatePages": "Voeg ook dubbele cataloguspagina's samen (dubbele links)", + "runSelected": "Voer geselecteerde uit", + "selectAtLeastOne": "Selecteer minstens één reparatie om uit te voeren", + "previewReady": "Voorbeeld klaar", + "previewFailed": "Voorbeeld mislukt", + "toast": { + "spriteFixed": "sprite_id hersteld", + "offerFixed": "catalogus offer_id hersteld", + "duplicatesRemoved": "Dubbele verwijderd (items + catalogus)", + "reconciled": "FurnitureData verzoend", + "aligned": "items_base-ID's uitgelijnd naar FurnitureData", + "allApplied": "Alle geselecteerde reparaties uitgevoerd", + "failed": "Mislukt" + } + } } } } diff --git a/src/messages/no.json b/src/messages/no.json index 53f8589b..b05160e8 100644 --- a/src/messages/no.json +++ b/src/messages/no.json @@ -3153,6 +3153,103 @@ "usersJoined": "Joined", "usersLastLogin": "Last login", "usersLastOnline": "Last online" + }, + "studio": { + "title": "Studio", + "sourceFurnidata": "{source} furnidata", + "searchPlaceholder": "Search furni, classnames, keywords… (/)", + "results": "{count} results", + "inDb": "in DB", + "inCatalog": "in catalog", + "missingNitro": "missing nitro", + "globalTranslation": "Translation (global)", + "catalogTree": "Catalog", + "source": "Furni source", + "officialSource": "(official)", + "type": "Type", + "allTypes": "All types", + "floorItems": "Floor items", + "wallItems": "Wall items", + "category": "Category", + "allCategories": "All categories", + "status": "Status", + "allStatuses": "All statuses", + "imported": "Imported", + "inCatalogStatus": "In catalog", + "missingNitroStatus": "Missing nitro", + "sort": "Sort", + "defaultOrder": "Default order", + "nameAZ": "Name A–Z", + "classnameAZ": "Classname A–Z", + "categorySort": "Category", + "importedFirst": "Imported first", + "notImportedFirst": "Not imported first", + "noNitro": "{count} no nitro", + "gridView": "Grid view", + "listView": "List view", + "selectAll": "Select all", + "selectedCount": "{count} selected", + "clear": "Clear", + "translate": "Translate", + "noLanguages": "No languages", + "allLanguages": "All languages", + "languagesCount": "{count} languages", + "languages": "Languages", + "all": "All", + "none": "None", + "languageLabel": "Language {lang}", + "translateAll": "Translate all", + "translateAllTitle": "Translate the whole catalog into all languages (afterwards)", + "importAuto": "Import {count} auto", + "maintenance": { + "title": "Catalog maintenance", + "description": "Force the furniture tables to 100% consistency with FurnitureData.json. Every action runs inside a database transaction and rolls back on error.", + "refresh": "Refresh", + "currentHealth": "Current health", + "itemsInBase": "{count} items in items_base", + "loading": "Loading…", + "statSpriteId": "sprite_id ≠ id", + "hintSpriteId": "items_base sprite drift", + "statOfferId": "offer_id ≠ id", + "hintOfferId": "catalog offer drift", + "statDuplicateClassnames": "Duplicate classnames", + "hintDuplicateClassnames": "items_base item_name repeats", + "statDuplicateCatalogRows": "Duplicate catalog rows", + "hintDuplicateCatalogRows": "same product listed twice on a page", + "statIdMismatch": "ID ≠ FurnitureData", + "hintIdMismatch": "items_base id differs from furnidata", + "statDuplicateBcCatalogRows": "Duplicate BC catalog rows", + "hintDuplicateBcCatalogRows": "same product listed twice in builder club", + "statDuplicateCatalogPages": "Duplicate catalog pages", + "hintDuplicateCatalogPages": "same caption under the same parent (double links)", + "optionSpriteId": "Fix sprite_id", + "optionOfferId": "Fix catalog offer_id", + "optionRemoveDuplicates": "Remove duplicates (items + catalog)", + "optionReconcile": "Reconcile FurnitureData ↔ DB", + "optionAlignIds": "Align items_base IDs to FurnitureData", + "alignDescription": "Moves every items_base.id to the FurnitureData sprite id (source of truth). Rewrites all referencing tables.", + "previewChanges": "Preview changes", + "plannedIdMoves": "Planned ID moves: {moves}", + "newItemsInsert": "New items to insert: {inserted}", + "skipped": "Skipped (id occupied): {list}", + "applyAlignment": "Apply alignment", + "fixEverythingTitle": "Fix everything", + "fixEverythingDescription": "Runs the selected repairs in order. Heavy operation — make a backup first.", + "alsoMergeDuplicatePages": "Also merge duplicate catalog pages (double links)", + "runSelected": "Run selected", + "selectAtLeastOne": "Select at least one repair to run", + "previewReady": "Preview ready", + "previewFailed": "Preview failed", + "toast": { + "spriteFixed": "sprite_id fixed", + "offerFixed": "catalog offer_id fixed", + "duplicatesRemoved": "Duplicates removed (items + catalog)", + "reconciled": "FurnitureData reconciled", + "aligned": "items_base IDs aligned to FurnitureData", + "allApplied": "All selected repairs applied", + "failed": "Failed" + } + } } }, "emails": { diff --git a/src/messages/pl.json b/src/messages/pl.json index 73cf0a5f..3c7978f3 100644 --- a/src/messages/pl.json +++ b/src/messages/pl.json @@ -3154,6 +3154,103 @@ "usersJoined": "Joined", "usersLastLogin": "Last login", "usersLastOnline": "Last online" + }, + "studio": { + "title": "Studio", + "sourceFurnidata": "{source} furnidata", + "searchPlaceholder": "Search furni, classnames, keywords… (/)", + "results": "{count} results", + "inDb": "in DB", + "inCatalog": "in catalog", + "missingNitro": "missing nitro", + "globalTranslation": "Translation (global)", + "catalogTree": "Catalog", + "source": "Furni source", + "officialSource": "(official)", + "type": "Type", + "allTypes": "All types", + "floorItems": "Floor items", + "wallItems": "Wall items", + "category": "Category", + "allCategories": "All categories", + "status": "Status", + "allStatuses": "All statuses", + "imported": "Imported", + "inCatalogStatus": "In catalog", + "missingNitroStatus": "Missing nitro", + "sort": "Sort", + "defaultOrder": "Default order", + "nameAZ": "Name A–Z", + "classnameAZ": "Classname A–Z", + "categorySort": "Category", + "importedFirst": "Imported first", + "notImportedFirst": "Not imported first", + "noNitro": "{count} no nitro", + "gridView": "Grid view", + "listView": "List view", + "selectAll": "Select all", + "selectedCount": "{count} selected", + "clear": "Clear", + "translate": "Translate", + "noLanguages": "No languages", + "allLanguages": "All languages", + "languagesCount": "{count} languages", + "languages": "Languages", + "all": "All", + "none": "None", + "languageLabel": "Language {lang}", + "translateAll": "Translate all", + "translateAllTitle": "Translate the whole catalog into all languages (afterwards)", + "importAuto": "Import {count} auto", + "maintenance": { + "title": "Catalog maintenance", + "description": "Force the furniture tables to 100% consistency with FurnitureData.json. Every action runs inside a database transaction and rolls back on error.", + "refresh": "Refresh", + "currentHealth": "Current health", + "itemsInBase": "{count} items in items_base", + "loading": "Loading…", + "statSpriteId": "sprite_id ≠ id", + "hintSpriteId": "items_base sprite drift", + "statOfferId": "offer_id ≠ id", + "hintOfferId": "catalog offer drift", + "statDuplicateClassnames": "Duplicate classnames", + "hintDuplicateClassnames": "items_base item_name repeats", + "statDuplicateCatalogRows": "Duplicate catalog rows", + "hintDuplicateCatalogRows": "same product listed twice on a page", + "statIdMismatch": "ID ≠ FurnitureData", + "hintIdMismatch": "items_base id differs from furnidata", + "statDuplicateBcCatalogRows": "Duplicate BC catalog rows", + "hintDuplicateBcCatalogRows": "same product listed twice in builder club", + "statDuplicateCatalogPages": "Duplicate catalog pages", + "hintDuplicateCatalogPages": "same caption under the same parent (double links)", + "optionSpriteId": "Fix sprite_id", + "optionOfferId": "Fix catalog offer_id", + "optionRemoveDuplicates": "Remove duplicates (items + catalog)", + "optionReconcile": "Reconcile FurnitureData ↔ DB", + "optionAlignIds": "Align items_base IDs to FurnitureData", + "alignDescription": "Moves every items_base.id to the FurnitureData sprite id (source of truth). Rewrites all referencing tables.", + "previewChanges": "Preview changes", + "plannedIdMoves": "Planned ID moves: {moves}", + "newItemsInsert": "New items to insert: {inserted}", + "skipped": "Skipped (id occupied): {list}", + "applyAlignment": "Apply alignment", + "fixEverythingTitle": "Fix everything", + "fixEverythingDescription": "Runs the selected repairs in order. Heavy operation — make a backup first.", + "alsoMergeDuplicatePages": "Also merge duplicate catalog pages (double links)", + "runSelected": "Run selected", + "selectAtLeastOne": "Select at least one repair to run", + "previewReady": "Preview ready", + "previewFailed": "Preview failed", + "toast": { + "spriteFixed": "sprite_id fixed", + "offerFixed": "catalog offer_id fixed", + "duplicatesRemoved": "Duplicates removed (items + catalog)", + "reconciled": "FurnitureData reconciled", + "aligned": "items_base IDs aligned to FurnitureData", + "allApplied": "All selected repairs applied", + "failed": "Failed" + } + } } }, "emails": { diff --git a/src/messages/pt.json b/src/messages/pt.json index a03a536c..b11c8c8b 100644 --- a/src/messages/pt.json +++ b/src/messages/pt.json @@ -3154,6 +3154,103 @@ "usersJoined": "Joined", "usersLastLogin": "Last login", "usersLastOnline": "Last online" + }, + "studio": { + "title": "Studio", + "sourceFurnidata": "{source} furnidata", + "searchPlaceholder": "Search furni, classnames, keywords… (/)", + "results": "{count} results", + "inDb": "in DB", + "inCatalog": "in catalog", + "missingNitro": "missing nitro", + "globalTranslation": "Translation (global)", + "catalogTree": "Catalog", + "source": "Furni source", + "officialSource": "(official)", + "type": "Type", + "allTypes": "All types", + "floorItems": "Floor items", + "wallItems": "Wall items", + "category": "Category", + "allCategories": "All categories", + "status": "Status", + "allStatuses": "All statuses", + "imported": "Imported", + "inCatalogStatus": "In catalog", + "missingNitroStatus": "Missing nitro", + "sort": "Sort", + "defaultOrder": "Default order", + "nameAZ": "Name A–Z", + "classnameAZ": "Classname A–Z", + "categorySort": "Category", + "importedFirst": "Imported first", + "notImportedFirst": "Not imported first", + "noNitro": "{count} no nitro", + "gridView": "Grid view", + "listView": "List view", + "selectAll": "Select all", + "selectedCount": "{count} selected", + "clear": "Clear", + "translate": "Translate", + "noLanguages": "No languages", + "allLanguages": "All languages", + "languagesCount": "{count} languages", + "languages": "Languages", + "all": "All", + "none": "None", + "languageLabel": "Language {lang}", + "translateAll": "Translate all", + "translateAllTitle": "Translate the whole catalog into all languages (afterwards)", + "importAuto": "Import {count} auto", + "maintenance": { + "title": "Catalog maintenance", + "description": "Force the furniture tables to 100% consistency with FurnitureData.json. Every action runs inside a database transaction and rolls back on error.", + "refresh": "Refresh", + "currentHealth": "Current health", + "itemsInBase": "{count} items in items_base", + "loading": "Loading…", + "statSpriteId": "sprite_id ≠ id", + "hintSpriteId": "items_base sprite drift", + "statOfferId": "offer_id ≠ id", + "hintOfferId": "catalog offer drift", + "statDuplicateClassnames": "Duplicate classnames", + "hintDuplicateClassnames": "items_base item_name repeats", + "statDuplicateCatalogRows": "Duplicate catalog rows", + "hintDuplicateCatalogRows": "same product listed twice on a page", + "statIdMismatch": "ID ≠ FurnitureData", + "hintIdMismatch": "items_base id differs from furnidata", + "statDuplicateBcCatalogRows": "Duplicate BC catalog rows", + "hintDuplicateBcCatalogRows": "same product listed twice in builder club", + "statDuplicateCatalogPages": "Duplicate catalog pages", + "hintDuplicateCatalogPages": "same caption under the same parent (double links)", + "optionSpriteId": "Fix sprite_id", + "optionOfferId": "Fix catalog offer_id", + "optionRemoveDuplicates": "Remove duplicates (items + catalog)", + "optionReconcile": "Reconcile FurnitureData ↔ DB", + "optionAlignIds": "Align items_base IDs to FurnitureData", + "alignDescription": "Moves every items_base.id to the FurnitureData sprite id (source of truth). Rewrites all referencing tables.", + "previewChanges": "Preview changes", + "plannedIdMoves": "Planned ID moves: {moves}", + "newItemsInsert": "New items to insert: {inserted}", + "skipped": "Skipped (id occupied): {list}", + "applyAlignment": "Apply alignment", + "fixEverythingTitle": "Fix everything", + "fixEverythingDescription": "Runs the selected repairs in order. Heavy operation — make a backup first.", + "alsoMergeDuplicatePages": "Also merge duplicate catalog pages (double links)", + "runSelected": "Run selected", + "selectAtLeastOne": "Select at least one repair to run", + "previewReady": "Preview ready", + "previewFailed": "Preview failed", + "toast": { + "spriteFixed": "sprite_id fixed", + "offerFixed": "catalog offer_id fixed", + "duplicatesRemoved": "Duplicates removed (items + catalog)", + "reconciled": "FurnitureData reconciled", + "aligned": "items_base IDs aligned to FurnitureData", + "allApplied": "All selected repairs applied", + "failed": "Failed" + } + } } }, "emails": { diff --git a/src/messages/ro.json b/src/messages/ro.json index 7953ce62..f9a74b5c 100644 --- a/src/messages/ro.json +++ b/src/messages/ro.json @@ -3153,6 +3153,103 @@ "usersJoined": "Joined", "usersLastLogin": "Last login", "usersLastOnline": "Last online" + }, + "studio": { + "title": "Studio", + "sourceFurnidata": "{source} furnidata", + "searchPlaceholder": "Search furni, classnames, keywords… (/)", + "results": "{count} results", + "inDb": "in DB", + "inCatalog": "in catalog", + "missingNitro": "missing nitro", + "globalTranslation": "Translation (global)", + "catalogTree": "Catalog", + "source": "Furni source", + "officialSource": "(official)", + "type": "Type", + "allTypes": "All types", + "floorItems": "Floor items", + "wallItems": "Wall items", + "category": "Category", + "allCategories": "All categories", + "status": "Status", + "allStatuses": "All statuses", + "imported": "Imported", + "inCatalogStatus": "In catalog", + "missingNitroStatus": "Missing nitro", + "sort": "Sort", + "defaultOrder": "Default order", + "nameAZ": "Name A–Z", + "classnameAZ": "Classname A–Z", + "categorySort": "Category", + "importedFirst": "Imported first", + "notImportedFirst": "Not imported first", + "noNitro": "{count} no nitro", + "gridView": "Grid view", + "listView": "List view", + "selectAll": "Select all", + "selectedCount": "{count} selected", + "clear": "Clear", + "translate": "Translate", + "noLanguages": "No languages", + "allLanguages": "All languages", + "languagesCount": "{count} languages", + "languages": "Languages", + "all": "All", + "none": "None", + "languageLabel": "Language {lang}", + "translateAll": "Translate all", + "translateAllTitle": "Translate the whole catalog into all languages (afterwards)", + "importAuto": "Import {count} auto", + "maintenance": { + "title": "Catalog maintenance", + "description": "Force the furniture tables to 100% consistency with FurnitureData.json. Every action runs inside a database transaction and rolls back on error.", + "refresh": "Refresh", + "currentHealth": "Current health", + "itemsInBase": "{count} items in items_base", + "loading": "Loading…", + "statSpriteId": "sprite_id ≠ id", + "hintSpriteId": "items_base sprite drift", + "statOfferId": "offer_id ≠ id", + "hintOfferId": "catalog offer drift", + "statDuplicateClassnames": "Duplicate classnames", + "hintDuplicateClassnames": "items_base item_name repeats", + "statDuplicateCatalogRows": "Duplicate catalog rows", + "hintDuplicateCatalogRows": "same product listed twice on a page", + "statIdMismatch": "ID ≠ FurnitureData", + "hintIdMismatch": "items_base id differs from furnidata", + "statDuplicateBcCatalogRows": "Duplicate BC catalog rows", + "hintDuplicateBcCatalogRows": "same product listed twice in builder club", + "statDuplicateCatalogPages": "Duplicate catalog pages", + "hintDuplicateCatalogPages": "same caption under the same parent (double links)", + "optionSpriteId": "Fix sprite_id", + "optionOfferId": "Fix catalog offer_id", + "optionRemoveDuplicates": "Remove duplicates (items + catalog)", + "optionReconcile": "Reconcile FurnitureData ↔ DB", + "optionAlignIds": "Align items_base IDs to FurnitureData", + "alignDescription": "Moves every items_base.id to the FurnitureData sprite id (source of truth). Rewrites all referencing tables.", + "previewChanges": "Preview changes", + "plannedIdMoves": "Planned ID moves: {moves}", + "newItemsInsert": "New items to insert: {inserted}", + "skipped": "Skipped (id occupied): {list}", + "applyAlignment": "Apply alignment", + "fixEverythingTitle": "Fix everything", + "fixEverythingDescription": "Runs the selected repairs in order. Heavy operation — make a backup first.", + "alsoMergeDuplicatePages": "Also merge duplicate catalog pages (double links)", + "runSelected": "Run selected", + "selectAtLeastOne": "Select at least one repair to run", + "previewReady": "Preview ready", + "previewFailed": "Preview failed", + "toast": { + "spriteFixed": "sprite_id fixed", + "offerFixed": "catalog offer_id fixed", + "duplicatesRemoved": "Duplicates removed (items + catalog)", + "reconciled": "FurnitureData reconciled", + "aligned": "items_base IDs aligned to FurnitureData", + "allApplied": "All selected repairs applied", + "failed": "Failed" + } + } } }, "emails": { diff --git a/src/messages/ru.json b/src/messages/ru.json index 830ee59b..a14370d2 100644 --- a/src/messages/ru.json +++ b/src/messages/ru.json @@ -3152,6 +3152,103 @@ "usersJoined": "Joined", "usersLastLogin": "Last login", "usersLastOnline": "Last online" + }, + "studio": { + "title": "Studio", + "sourceFurnidata": "{source} furnidata", + "searchPlaceholder": "Search furni, classnames, keywords… (/)", + "results": "{count} results", + "inDb": "in DB", + "inCatalog": "in catalog", + "missingNitro": "missing nitro", + "globalTranslation": "Translation (global)", + "catalogTree": "Catalog", + "source": "Furni source", + "officialSource": "(official)", + "type": "Type", + "allTypes": "All types", + "floorItems": "Floor items", + "wallItems": "Wall items", + "category": "Category", + "allCategories": "All categories", + "status": "Status", + "allStatuses": "All statuses", + "imported": "Imported", + "inCatalogStatus": "In catalog", + "missingNitroStatus": "Missing nitro", + "sort": "Sort", + "defaultOrder": "Default order", + "nameAZ": "Name A–Z", + "classnameAZ": "Classname A–Z", + "categorySort": "Category", + "importedFirst": "Imported first", + "notImportedFirst": "Not imported first", + "noNitro": "{count} no nitro", + "gridView": "Grid view", + "listView": "List view", + "selectAll": "Select all", + "selectedCount": "{count} selected", + "clear": "Clear", + "translate": "Translate", + "noLanguages": "No languages", + "allLanguages": "All languages", + "languagesCount": "{count} languages", + "languages": "Languages", + "all": "All", + "none": "None", + "languageLabel": "Language {lang}", + "translateAll": "Translate all", + "translateAllTitle": "Translate the whole catalog into all languages (afterwards)", + "importAuto": "Import {count} auto", + "maintenance": { + "title": "Catalog maintenance", + "description": "Force the furniture tables to 100% consistency with FurnitureData.json. Every action runs inside a database transaction and rolls back on error.", + "refresh": "Refresh", + "currentHealth": "Current health", + "itemsInBase": "{count} items in items_base", + "loading": "Loading…", + "statSpriteId": "sprite_id ≠ id", + "hintSpriteId": "items_base sprite drift", + "statOfferId": "offer_id ≠ id", + "hintOfferId": "catalog offer drift", + "statDuplicateClassnames": "Duplicate classnames", + "hintDuplicateClassnames": "items_base item_name repeats", + "statDuplicateCatalogRows": "Duplicate catalog rows", + "hintDuplicateCatalogRows": "same product listed twice on a page", + "statIdMismatch": "ID ≠ FurnitureData", + "hintIdMismatch": "items_base id differs from furnidata", + "statDuplicateBcCatalogRows": "Duplicate BC catalog rows", + "hintDuplicateBcCatalogRows": "same product listed twice in builder club", + "statDuplicateCatalogPages": "Duplicate catalog pages", + "hintDuplicateCatalogPages": "same caption under the same parent (double links)", + "optionSpriteId": "Fix sprite_id", + "optionOfferId": "Fix catalog offer_id", + "optionRemoveDuplicates": "Remove duplicates (items + catalog)", + "optionReconcile": "Reconcile FurnitureData ↔ DB", + "optionAlignIds": "Align items_base IDs to FurnitureData", + "alignDescription": "Moves every items_base.id to the FurnitureData sprite id (source of truth). Rewrites all referencing tables.", + "previewChanges": "Preview changes", + "plannedIdMoves": "Planned ID moves: {moves}", + "newItemsInsert": "New items to insert: {inserted}", + "skipped": "Skipped (id occupied): {list}", + "applyAlignment": "Apply alignment", + "fixEverythingTitle": "Fix everything", + "fixEverythingDescription": "Runs the selected repairs in order. Heavy operation — make a backup first.", + "alsoMergeDuplicatePages": "Also merge duplicate catalog pages (double links)", + "runSelected": "Run selected", + "selectAtLeastOne": "Select at least one repair to run", + "previewReady": "Preview ready", + "previewFailed": "Preview failed", + "toast": { + "spriteFixed": "sprite_id fixed", + "offerFixed": "catalog offer_id fixed", + "duplicatesRemoved": "Duplicates removed (items + catalog)", + "reconciled": "FurnitureData reconciled", + "aligned": "items_base IDs aligned to FurnitureData", + "allApplied": "All selected repairs applied", + "failed": "Failed" + } + } } }, "emails": { diff --git a/src/messages/sk.json b/src/messages/sk.json index 48f615c5..6fa4d119 100644 --- a/src/messages/sk.json +++ b/src/messages/sk.json @@ -3153,6 +3153,103 @@ "usersJoined": "Joined", "usersLastLogin": "Last login", "usersLastOnline": "Last online" + }, + "studio": { + "title": "Studio", + "sourceFurnidata": "{source} furnidata", + "searchPlaceholder": "Search furni, classnames, keywords… (/)", + "results": "{count} results", + "inDb": "in DB", + "inCatalog": "in catalog", + "missingNitro": "missing nitro", + "globalTranslation": "Translation (global)", + "catalogTree": "Catalog", + "source": "Furni source", + "officialSource": "(official)", + "type": "Type", + "allTypes": "All types", + "floorItems": "Floor items", + "wallItems": "Wall items", + "category": "Category", + "allCategories": "All categories", + "status": "Status", + "allStatuses": "All statuses", + "imported": "Imported", + "inCatalogStatus": "In catalog", + "missingNitroStatus": "Missing nitro", + "sort": "Sort", + "defaultOrder": "Default order", + "nameAZ": "Name A–Z", + "classnameAZ": "Classname A–Z", + "categorySort": "Category", + "importedFirst": "Imported first", + "notImportedFirst": "Not imported first", + "noNitro": "{count} no nitro", + "gridView": "Grid view", + "listView": "List view", + "selectAll": "Select all", + "selectedCount": "{count} selected", + "clear": "Clear", + "translate": "Translate", + "noLanguages": "No languages", + "allLanguages": "All languages", + "languagesCount": "{count} languages", + "languages": "Languages", + "all": "All", + "none": "None", + "languageLabel": "Language {lang}", + "translateAll": "Translate all", + "translateAllTitle": "Translate the whole catalog into all languages (afterwards)", + "importAuto": "Import {count} auto", + "maintenance": { + "title": "Catalog maintenance", + "description": "Force the furniture tables to 100% consistency with FurnitureData.json. Every action runs inside a database transaction and rolls back on error.", + "refresh": "Refresh", + "currentHealth": "Current health", + "itemsInBase": "{count} items in items_base", + "loading": "Loading…", + "statSpriteId": "sprite_id ≠ id", + "hintSpriteId": "items_base sprite drift", + "statOfferId": "offer_id ≠ id", + "hintOfferId": "catalog offer drift", + "statDuplicateClassnames": "Duplicate classnames", + "hintDuplicateClassnames": "items_base item_name repeats", + "statDuplicateCatalogRows": "Duplicate catalog rows", + "hintDuplicateCatalogRows": "same product listed twice on a page", + "statIdMismatch": "ID ≠ FurnitureData", + "hintIdMismatch": "items_base id differs from furnidata", + "statDuplicateBcCatalogRows": "Duplicate BC catalog rows", + "hintDuplicateBcCatalogRows": "same product listed twice in builder club", + "statDuplicateCatalogPages": "Duplicate catalog pages", + "hintDuplicateCatalogPages": "same caption under the same parent (double links)", + "optionSpriteId": "Fix sprite_id", + "optionOfferId": "Fix catalog offer_id", + "optionRemoveDuplicates": "Remove duplicates (items + catalog)", + "optionReconcile": "Reconcile FurnitureData ↔ DB", + "optionAlignIds": "Align items_base IDs to FurnitureData", + "alignDescription": "Moves every items_base.id to the FurnitureData sprite id (source of truth). Rewrites all referencing tables.", + "previewChanges": "Preview changes", + "plannedIdMoves": "Planned ID moves: {moves}", + "newItemsInsert": "New items to insert: {inserted}", + "skipped": "Skipped (id occupied): {list}", + "applyAlignment": "Apply alignment", + "fixEverythingTitle": "Fix everything", + "fixEverythingDescription": "Runs the selected repairs in order. Heavy operation — make a backup first.", + "alsoMergeDuplicatePages": "Also merge duplicate catalog pages (double links)", + "runSelected": "Run selected", + "selectAtLeastOne": "Select at least one repair to run", + "previewReady": "Preview ready", + "previewFailed": "Preview failed", + "toast": { + "spriteFixed": "sprite_id fixed", + "offerFixed": "catalog offer_id fixed", + "duplicatesRemoved": "Duplicates removed (items + catalog)", + "reconciled": "FurnitureData reconciled", + "aligned": "items_base IDs aligned to FurnitureData", + "allApplied": "All selected repairs applied", + "failed": "Failed" + } + } } }, "emails": { diff --git a/src/messages/sr.json b/src/messages/sr.json index ebb9f99b..87324849 100644 --- a/src/messages/sr.json +++ b/src/messages/sr.json @@ -3153,6 +3153,103 @@ "usersJoined": "Joined", "usersLastLogin": "Last login", "usersLastOnline": "Last online" + }, + "studio": { + "title": "Studio", + "sourceFurnidata": "{source} furnidata", + "searchPlaceholder": "Search furni, classnames, keywords… (/)", + "results": "{count} results", + "inDb": "in DB", + "inCatalog": "in catalog", + "missingNitro": "missing nitro", + "globalTranslation": "Translation (global)", + "catalogTree": "Catalog", + "source": "Furni source", + "officialSource": "(official)", + "type": "Type", + "allTypes": "All types", + "floorItems": "Floor items", + "wallItems": "Wall items", + "category": "Category", + "allCategories": "All categories", + "status": "Status", + "allStatuses": "All statuses", + "imported": "Imported", + "inCatalogStatus": "In catalog", + "missingNitroStatus": "Missing nitro", + "sort": "Sort", + "defaultOrder": "Default order", + "nameAZ": "Name A–Z", + "classnameAZ": "Classname A–Z", + "categorySort": "Category", + "importedFirst": "Imported first", + "notImportedFirst": "Not imported first", + "noNitro": "{count} no nitro", + "gridView": "Grid view", + "listView": "List view", + "selectAll": "Select all", + "selectedCount": "{count} selected", + "clear": "Clear", + "translate": "Translate", + "noLanguages": "No languages", + "allLanguages": "All languages", + "languagesCount": "{count} languages", + "languages": "Languages", + "all": "All", + "none": "None", + "languageLabel": "Language {lang}", + "translateAll": "Translate all", + "translateAllTitle": "Translate the whole catalog into all languages (afterwards)", + "importAuto": "Import {count} auto", + "maintenance": { + "title": "Catalog maintenance", + "description": "Force the furniture tables to 100% consistency with FurnitureData.json. Every action runs inside a database transaction and rolls back on error.", + "refresh": "Refresh", + "currentHealth": "Current health", + "itemsInBase": "{count} items in items_base", + "loading": "Loading…", + "statSpriteId": "sprite_id ≠ id", + "hintSpriteId": "items_base sprite drift", + "statOfferId": "offer_id ≠ id", + "hintOfferId": "catalog offer drift", + "statDuplicateClassnames": "Duplicate classnames", + "hintDuplicateClassnames": "items_base item_name repeats", + "statDuplicateCatalogRows": "Duplicate catalog rows", + "hintDuplicateCatalogRows": "same product listed twice on a page", + "statIdMismatch": "ID ≠ FurnitureData", + "hintIdMismatch": "items_base id differs from furnidata", + "statDuplicateBcCatalogRows": "Duplicate BC catalog rows", + "hintDuplicateBcCatalogRows": "same product listed twice in builder club", + "statDuplicateCatalogPages": "Duplicate catalog pages", + "hintDuplicateCatalogPages": "same caption under the same parent (double links)", + "optionSpriteId": "Fix sprite_id", + "optionOfferId": "Fix catalog offer_id", + "optionRemoveDuplicates": "Remove duplicates (items + catalog)", + "optionReconcile": "Reconcile FurnitureData ↔ DB", + "optionAlignIds": "Align items_base IDs to FurnitureData", + "alignDescription": "Moves every items_base.id to the FurnitureData sprite id (source of truth). Rewrites all referencing tables.", + "previewChanges": "Preview changes", + "plannedIdMoves": "Planned ID moves: {moves}", + "newItemsInsert": "New items to insert: {inserted}", + "skipped": "Skipped (id occupied): {list}", + "applyAlignment": "Apply alignment", + "fixEverythingTitle": "Fix everything", + "fixEverythingDescription": "Runs the selected repairs in order. Heavy operation — make a backup first.", + "alsoMergeDuplicatePages": "Also merge duplicate catalog pages (double links)", + "runSelected": "Run selected", + "selectAtLeastOne": "Select at least one repair to run", + "previewReady": "Preview ready", + "previewFailed": "Preview failed", + "toast": { + "spriteFixed": "sprite_id fixed", + "offerFixed": "catalog offer_id fixed", + "duplicatesRemoved": "Duplicates removed (items + catalog)", + "reconciled": "FurnitureData reconciled", + "aligned": "items_base IDs aligned to FurnitureData", + "allApplied": "All selected repairs applied", + "failed": "Failed" + } + } } }, "emails": { diff --git a/src/messages/sv.json b/src/messages/sv.json index 88a70521..1a03b360 100644 --- a/src/messages/sv.json +++ b/src/messages/sv.json @@ -3153,6 +3153,103 @@ "usersJoined": "Joined", "usersLastLogin": "Last login", "usersLastOnline": "Last online" + }, + "studio": { + "title": "Studio", + "sourceFurnidata": "{source} furnidata", + "searchPlaceholder": "Search furni, classnames, keywords… (/)", + "results": "{count} results", + "inDb": "in DB", + "inCatalog": "in catalog", + "missingNitro": "missing nitro", + "globalTranslation": "Translation (global)", + "catalogTree": "Catalog", + "source": "Furni source", + "officialSource": "(official)", + "type": "Type", + "allTypes": "All types", + "floorItems": "Floor items", + "wallItems": "Wall items", + "category": "Category", + "allCategories": "All categories", + "status": "Status", + "allStatuses": "All statuses", + "imported": "Imported", + "inCatalogStatus": "In catalog", + "missingNitroStatus": "Missing nitro", + "sort": "Sort", + "defaultOrder": "Default order", + "nameAZ": "Name A–Z", + "classnameAZ": "Classname A–Z", + "categorySort": "Category", + "importedFirst": "Imported first", + "notImportedFirst": "Not imported first", + "noNitro": "{count} no nitro", + "gridView": "Grid view", + "listView": "List view", + "selectAll": "Select all", + "selectedCount": "{count} selected", + "clear": "Clear", + "translate": "Translate", + "noLanguages": "No languages", + "allLanguages": "All languages", + "languagesCount": "{count} languages", + "languages": "Languages", + "all": "All", + "none": "None", + "languageLabel": "Language {lang}", + "translateAll": "Translate all", + "translateAllTitle": "Translate the whole catalog into all languages (afterwards)", + "importAuto": "Import {count} auto", + "maintenance": { + "title": "Catalog maintenance", + "description": "Force the furniture tables to 100% consistency with FurnitureData.json. Every action runs inside a database transaction and rolls back on error.", + "refresh": "Refresh", + "currentHealth": "Current health", + "itemsInBase": "{count} items in items_base", + "loading": "Loading…", + "statSpriteId": "sprite_id ≠ id", + "hintSpriteId": "items_base sprite drift", + "statOfferId": "offer_id ≠ id", + "hintOfferId": "catalog offer drift", + "statDuplicateClassnames": "Duplicate classnames", + "hintDuplicateClassnames": "items_base item_name repeats", + "statDuplicateCatalogRows": "Duplicate catalog rows", + "hintDuplicateCatalogRows": "same product listed twice on a page", + "statIdMismatch": "ID ≠ FurnitureData", + "hintIdMismatch": "items_base id differs from furnidata", + "statDuplicateBcCatalogRows": "Duplicate BC catalog rows", + "hintDuplicateBcCatalogRows": "same product listed twice in builder club", + "statDuplicateCatalogPages": "Duplicate catalog pages", + "hintDuplicateCatalogPages": "same caption under the same parent (double links)", + "optionSpriteId": "Fix sprite_id", + "optionOfferId": "Fix catalog offer_id", + "optionRemoveDuplicates": "Remove duplicates (items + catalog)", + "optionReconcile": "Reconcile FurnitureData ↔ DB", + "optionAlignIds": "Align items_base IDs to FurnitureData", + "alignDescription": "Moves every items_base.id to the FurnitureData sprite id (source of truth). Rewrites all referencing tables.", + "previewChanges": "Preview changes", + "plannedIdMoves": "Planned ID moves: {moves}", + "newItemsInsert": "New items to insert: {inserted}", + "skipped": "Skipped (id occupied): {list}", + "applyAlignment": "Apply alignment", + "fixEverythingTitle": "Fix everything", + "fixEverythingDescription": "Runs the selected repairs in order. Heavy operation — make a backup first.", + "alsoMergeDuplicatePages": "Also merge duplicate catalog pages (double links)", + "runSelected": "Run selected", + "selectAtLeastOne": "Select at least one repair to run", + "previewReady": "Preview ready", + "previewFailed": "Preview failed", + "toast": { + "spriteFixed": "sprite_id fixed", + "offerFixed": "catalog offer_id fixed", + "duplicatesRemoved": "Duplicates removed (items + catalog)", + "reconciled": "FurnitureData reconciled", + "aligned": "items_base IDs aligned to FurnitureData", + "allApplied": "All selected repairs applied", + "failed": "Failed" + } + } } }, "emails": { diff --git a/src/messages/tr.json b/src/messages/tr.json index bc7f54f5..e29487a0 100644 --- a/src/messages/tr.json +++ b/src/messages/tr.json @@ -3154,6 +3154,103 @@ "usersJoined": "Joined", "usersLastLogin": "Last login", "usersLastOnline": "Last online" + }, + "studio": { + "title": "Studio", + "sourceFurnidata": "{source} furnidata", + "searchPlaceholder": "Search furni, classnames, keywords… (/)", + "results": "{count} results", + "inDb": "in DB", + "inCatalog": "in catalog", + "missingNitro": "missing nitro", + "globalTranslation": "Translation (global)", + "catalogTree": "Catalog", + "source": "Furni source", + "officialSource": "(official)", + "type": "Type", + "allTypes": "All types", + "floorItems": "Floor items", + "wallItems": "Wall items", + "category": "Category", + "allCategories": "All categories", + "status": "Status", + "allStatuses": "All statuses", + "imported": "Imported", + "inCatalogStatus": "In catalog", + "missingNitroStatus": "Missing nitro", + "sort": "Sort", + "defaultOrder": "Default order", + "nameAZ": "Name A–Z", + "classnameAZ": "Classname A–Z", + "categorySort": "Category", + "importedFirst": "Imported first", + "notImportedFirst": "Not imported first", + "noNitro": "{count} no nitro", + "gridView": "Grid view", + "listView": "List view", + "selectAll": "Select all", + "selectedCount": "{count} selected", + "clear": "Clear", + "translate": "Translate", + "noLanguages": "No languages", + "allLanguages": "All languages", + "languagesCount": "{count} languages", + "languages": "Languages", + "all": "All", + "none": "None", + "languageLabel": "Language {lang}", + "translateAll": "Translate all", + "translateAllTitle": "Translate the whole catalog into all languages (afterwards)", + "importAuto": "Import {count} auto", + "maintenance": { + "title": "Catalog maintenance", + "description": "Force the furniture tables to 100% consistency with FurnitureData.json. Every action runs inside a database transaction and rolls back on error.", + "refresh": "Refresh", + "currentHealth": "Current health", + "itemsInBase": "{count} items in items_base", + "loading": "Loading…", + "statSpriteId": "sprite_id ≠ id", + "hintSpriteId": "items_base sprite drift", + "statOfferId": "offer_id ≠ id", + "hintOfferId": "catalog offer drift", + "statDuplicateClassnames": "Duplicate classnames", + "hintDuplicateClassnames": "items_base item_name repeats", + "statDuplicateCatalogRows": "Duplicate catalog rows", + "hintDuplicateCatalogRows": "same product listed twice on a page", + "statIdMismatch": "ID ≠ FurnitureData", + "hintIdMismatch": "items_base id differs from furnidata", + "statDuplicateBcCatalogRows": "Duplicate BC catalog rows", + "hintDuplicateBcCatalogRows": "same product listed twice in builder club", + "statDuplicateCatalogPages": "Duplicate catalog pages", + "hintDuplicateCatalogPages": "same caption under the same parent (double links)", + "optionSpriteId": "Fix sprite_id", + "optionOfferId": "Fix catalog offer_id", + "optionRemoveDuplicates": "Remove duplicates (items + catalog)", + "optionReconcile": "Reconcile FurnitureData ↔ DB", + "optionAlignIds": "Align items_base IDs to FurnitureData", + "alignDescription": "Moves every items_base.id to the FurnitureData sprite id (source of truth). Rewrites all referencing tables.", + "previewChanges": "Preview changes", + "plannedIdMoves": "Planned ID moves: {moves}", + "newItemsInsert": "New items to insert: {inserted}", + "skipped": "Skipped (id occupied): {list}", + "applyAlignment": "Apply alignment", + "fixEverythingTitle": "Fix everything", + "fixEverythingDescription": "Runs the selected repairs in order. Heavy operation — make a backup first.", + "alsoMergeDuplicatePages": "Also merge duplicate catalog pages (double links)", + "runSelected": "Run selected", + "selectAtLeastOne": "Select at least one repair to run", + "previewReady": "Preview ready", + "previewFailed": "Preview failed", + "toast": { + "spriteFixed": "sprite_id fixed", + "offerFixed": "catalog offer_id fixed", + "duplicatesRemoved": "Duplicates removed (items + catalog)", + "reconciled": "FurnitureData reconciled", + "aligned": "items_base IDs aligned to FurnitureData", + "allApplied": "All selected repairs applied", + "failed": "Failed" + } + } } }, "emails": { diff --git a/src/messages/uk.json b/src/messages/uk.json index 1ce41ce6..5c501ca8 100644 --- a/src/messages/uk.json +++ b/src/messages/uk.json @@ -3153,6 +3153,103 @@ "usersJoined": "Joined", "usersLastLogin": "Last login", "usersLastOnline": "Last online" + }, + "studio": { + "title": "Studio", + "sourceFurnidata": "{source} furnidata", + "searchPlaceholder": "Search furni, classnames, keywords… (/)", + "results": "{count} results", + "inDb": "in DB", + "inCatalog": "in catalog", + "missingNitro": "missing nitro", + "globalTranslation": "Translation (global)", + "catalogTree": "Catalog", + "source": "Furni source", + "officialSource": "(official)", + "type": "Type", + "allTypes": "All types", + "floorItems": "Floor items", + "wallItems": "Wall items", + "category": "Category", + "allCategories": "All categories", + "status": "Status", + "allStatuses": "All statuses", + "imported": "Imported", + "inCatalogStatus": "In catalog", + "missingNitroStatus": "Missing nitro", + "sort": "Sort", + "defaultOrder": "Default order", + "nameAZ": "Name A–Z", + "classnameAZ": "Classname A–Z", + "categorySort": "Category", + "importedFirst": "Imported first", + "notImportedFirst": "Not imported first", + "noNitro": "{count} no nitro", + "gridView": "Grid view", + "listView": "List view", + "selectAll": "Select all", + "selectedCount": "{count} selected", + "clear": "Clear", + "translate": "Translate", + "noLanguages": "No languages", + "allLanguages": "All languages", + "languagesCount": "{count} languages", + "languages": "Languages", + "all": "All", + "none": "None", + "languageLabel": "Language {lang}", + "translateAll": "Translate all", + "translateAllTitle": "Translate the whole catalog into all languages (afterwards)", + "importAuto": "Import {count} auto", + "maintenance": { + "title": "Catalog maintenance", + "description": "Force the furniture tables to 100% consistency with FurnitureData.json. Every action runs inside a database transaction and rolls back on error.", + "refresh": "Refresh", + "currentHealth": "Current health", + "itemsInBase": "{count} items in items_base", + "loading": "Loading…", + "statSpriteId": "sprite_id ≠ id", + "hintSpriteId": "items_base sprite drift", + "statOfferId": "offer_id ≠ id", + "hintOfferId": "catalog offer drift", + "statDuplicateClassnames": "Duplicate classnames", + "hintDuplicateClassnames": "items_base item_name repeats", + "statDuplicateCatalogRows": "Duplicate catalog rows", + "hintDuplicateCatalogRows": "same product listed twice on a page", + "statIdMismatch": "ID ≠ FurnitureData", + "hintIdMismatch": "items_base id differs from furnidata", + "statDuplicateBcCatalogRows": "Duplicate BC catalog rows", + "hintDuplicateBcCatalogRows": "same product listed twice in builder club", + "statDuplicateCatalogPages": "Duplicate catalog pages", + "hintDuplicateCatalogPages": "same caption under the same parent (double links)", + "optionSpriteId": "Fix sprite_id", + "optionOfferId": "Fix catalog offer_id", + "optionRemoveDuplicates": "Remove duplicates (items + catalog)", + "optionReconcile": "Reconcile FurnitureData ↔ DB", + "optionAlignIds": "Align items_base IDs to FurnitureData", + "alignDescription": "Moves every items_base.id to the FurnitureData sprite id (source of truth). Rewrites all referencing tables.", + "previewChanges": "Preview changes", + "plannedIdMoves": "Planned ID moves: {moves}", + "newItemsInsert": "New items to insert: {inserted}", + "skipped": "Skipped (id occupied): {list}", + "applyAlignment": "Apply alignment", + "fixEverythingTitle": "Fix everything", + "fixEverythingDescription": "Runs the selected repairs in order. Heavy operation — make a backup first.", + "alsoMergeDuplicatePages": "Also merge duplicate catalog pages (double links)", + "runSelected": "Run selected", + "selectAtLeastOne": "Select at least one repair to run", + "previewReady": "Preview ready", + "previewFailed": "Preview failed", + "toast": { + "spriteFixed": "sprite_id fixed", + "offerFixed": "catalog offer_id fixed", + "duplicatesRemoved": "Duplicates removed (items + catalog)", + "reconciled": "FurnitureData reconciled", + "aligned": "items_base IDs aligned to FurnitureData", + "allApplied": "All selected repairs applied", + "failed": "Failed" + } + } } }, "emails": {