448 lines
18 KiB
JSON
448 lines
18 KiB
JSON
{
|
||
"LoginPage": {
|
||
"title": "Login",
|
||
"apiKeyLabel": "API key",
|
||
"apiKeyPlaceholder": "Enter your API key",
|
||
"submit": "Login",
|
||
"hint": "Use the same key as RUSTYCMS_API_KEY on the server. Without a key you can only read; with a key you can edit."
|
||
},
|
||
"Sidebar": {
|
||
"dashboard": "Dashboard",
|
||
"types": "Types",
|
||
"assets": "Assets",
|
||
"settings": "Settings",
|
||
"login": "Login",
|
||
"logout": "Logout",
|
||
"searchPlaceholder": "Search collections…",
|
||
"searchAriaLabel": "Search collections",
|
||
"closeMenu": "Close menu",
|
||
"loading": "Loading…",
|
||
"errorLoading": "Error loading collections",
|
||
"noResults": "No results for \"{query}\""
|
||
},
|
||
"ContentForm": {
|
||
"copyCode": "Copy code",
|
||
"slugRequired": "Slug is required.",
|
||
"slugInUse": "Slug already in use.",
|
||
"slugMustStartWith": "Slug must start with \"{prefix}\".",
|
||
"slugPrefix": "prefix",
|
||
"slugSuffixPlaceholder": "e.g. my-campaign",
|
||
"slugSuffixAriaLabel": "Slug suffix (prefix is fixed)",
|
||
"slugPlaceholder": "e.g. my-post",
|
||
"slugHint": "Lowercase letters (a-z), digits (0-9), hyphens. Spaces become hyphens.",
|
||
"savedSuccessfully": "Saved successfully.",
|
||
"errorSaving": "Error saving",
|
||
"saving": "Saving…",
|
||
"save": "Save",
|
||
"backToList": "Back to list",
|
||
"pleaseSelect": "— Please select —",
|
||
"removeEntry": "Remove",
|
||
"addEntry": "+ Add entry",
|
||
"arrayAddItem": "Add item",
|
||
"arrayRemoveItem": "Remove item",
|
||
"arrayItemPlaceholder": "Value",
|
||
"arrayItemPlaceholderNumber": "Number",
|
||
"arrayHint": "List of values. Add or remove items below.",
|
||
"keyPlaceholder": "Key",
|
||
"valuePlaceholder": "Value",
|
||
"pickAsset": "Pick image",
|
||
"pickFromAssets": "Pick from assets",
|
||
"loadingAssets": "Loading assets…",
|
||
"noAssets": "No assets yet. Upload images in the Assets section.",
|
||
"status": "Status",
|
||
"statusDraft": "Draft",
|
||
"statusPublished": "Published",
|
||
"statusHint": "Draft entries are not visible in the public API."
|
||
},
|
||
"SearchableSelect": {
|
||
"placeholder": "— Please select —",
|
||
"clearLabel": "— Clear selection —",
|
||
"filterPlaceholder": "Filter…",
|
||
"emptyLabel": "No matches"
|
||
},
|
||
"ReferenceField": {
|
||
"typeLabel": "Type: {collection}",
|
||
"typesLabel": "Types: {collections}",
|
||
"selectType": "— Select type —",
|
||
"newEntry": "New entry",
|
||
"openEntry": "Open entry",
|
||
"noCollection": "No reference collection in schema. Set {collectionCode} or {collectionsCode} in the type, or start the API and reload the page."
|
||
},
|
||
"ReferenceArrayField": {
|
||
"typeLabel": "Type: {collection}",
|
||
"typesLabel": "Types: {collections}",
|
||
"componentType": "Component type",
|
||
"selectType": "— Select type —",
|
||
"selectFromExisting": "— Select from existing —",
|
||
"filterPlaceholder": "Filter…",
|
||
"emptyLabel": "No matches",
|
||
"selectExistingAriaLabel": "Select existing entry to add",
|
||
"moveUp": "Move up",
|
||
"moveDown": "Move down",
|
||
"remove": "Remove",
|
||
"newComponent": "New {collection} component",
|
||
"createNewComponent": "+ Create new component…",
|
||
"openInNewTab": "Open in new tab; then reload this page.",
|
||
"openEntry": "Open entry",
|
||
"noCollection": "No reference collection in schema. Set {collectionCode} or {collectionsCode} in the type, or start the API and reload the page."
|
||
},
|
||
"MarkdownEditor": {
|
||
"bold": "Bold",
|
||
"italic": "Italic",
|
||
"code": "Code",
|
||
"link": "Link",
|
||
"bulletList": "Bullet list",
|
||
"bulletListButton": "• List",
|
||
"placeholder": "Enter markdown… **bold**, *italic*, [link](url), - list",
|
||
"preview": "Preview",
|
||
"emptyPreview": "Empty — preview appears as you type."
|
||
},
|
||
"PaginationLinks": {
|
||
"back": "Back",
|
||
"next": "Next",
|
||
"pageInfo": "Page {page} of {totalPages} ({total} entries)"
|
||
},
|
||
"DataPreviewPanel": {
|
||
"hide": "Hide data preview",
|
||
"show": "Data preview",
|
||
"loading": "Loading…",
|
||
"errorLoading": "Error loading"
|
||
},
|
||
"SchemaPanel": {
|
||
"hide": "Hide schema",
|
||
"show": "Show schema"
|
||
},
|
||
"SchemaAndEditBar": {
|
||
"editSchema": "Edit schema"
|
||
},
|
||
"SchemaAndPreviewBar": {
|
||
"hideSchema": "Hide schema",
|
||
"showSchema": "Show schema",
|
||
"editSchema": "Edit schema",
|
||
"hidePreview": "Hide data preview",
|
||
"showPreview": "Data preview",
|
||
"sectionSchema": "Schema",
|
||
"sectionDataPreview": "Current data",
|
||
"copyCode": "Copy code",
|
||
"loading": "Loading…",
|
||
"errorLoading": "Error loading"
|
||
},
|
||
"ReferenceOrInlineField": {
|
||
"reference": "Reference",
|
||
"inline": "Inline",
|
||
"inlineObject": "Inline object (no reference)",
|
||
"noInlineSchema": "No inline schema. Reload or check API (useFields / collection)."
|
||
},
|
||
"LocaleSwitcher": {
|
||
"label": "Language"
|
||
},
|
||
"ContentLocaleSwitcher": {
|
||
"label": "Content language"
|
||
},
|
||
"Settings": {
|
||
"title": "Settings",
|
||
"connection": "Connection",
|
||
"apiUrl": "API URL",
|
||
"backendStatus": "Backend status",
|
||
"checking": "Checking…",
|
||
"apiReachable": "API reachable",
|
||
"apiUnreachable": "API unreachable",
|
||
"contentLocales": "Content locales",
|
||
"default": "default",
|
||
"thisDevice": "This device",
|
||
"uiLanguage": "UI language",
|
||
"itemsPerPage": "Items per page",
|
||
"itemsPerPageHint": "Applies to content list pages.",
|
||
"refreshData": "Refresh data",
|
||
"refreshDataSuccess": "Data refreshed.",
|
||
"clearSession": "Clear session",
|
||
"clearSessionHint": "Removes API key and all admin preferences (e.g. on shared devices).",
|
||
"clearSessionConfirmTitle": "Clear session?",
|
||
"clearSessionConfirmDescription": "This will log you out and remove all stored preferences (e.g. items per page). You can log in again afterwards.",
|
||
"clearSessionConfirmAction": "Clear",
|
||
"cancel": "Cancel",
|
||
"apiKeyStatus": "API key",
|
||
"apiKeyFromEnv": "Set from environment (read-only).",
|
||
"apiKeyManual": "Set manually (this session).",
|
||
"logout": "Log out",
|
||
"login": "Log in"
|
||
},
|
||
"Dashboard": {
|
||
"title": "Dashboard",
|
||
"subtitle": "Choose a collection to manage content.",
|
||
"newContentType": "New content type",
|
||
"searchPlaceholder": "Search content types…",
|
||
"filterByTag": "Tag:",
|
||
"tagAll": "All",
|
||
"noResults": "No content types match your search or filter.",
|
||
"noCollections": "No collections loaded. Check that the RustyCMS API is running at {url}."
|
||
},
|
||
"TypesPage": {
|
||
"title": "Types",
|
||
"newType": "New type",
|
||
"description": "Content types (collections). Edit the schema or delete a type. Deleting removes the type definition file; existing content entries are not removed.",
|
||
"searchPlaceholder": "Search content types…",
|
||
"filterByTag": "Tag:",
|
||
"tagAll": "All",
|
||
"noResults": "No content types match your search or filter.",
|
||
"loading": "Loading…",
|
||
"errorLoading": "Error loading types: {error}",
|
||
"noTypes": "No types yet. Create one with \"New type\".",
|
||
"colName": "Name",
|
||
"colDescription": "Description",
|
||
"colCategory": "Category",
|
||
"colActions": "Actions",
|
||
"confirmDelete": "Delete \"{name}\"?",
|
||
"confirmDeleteFinal": "Really delete \"{name}\"? This cannot be undone.",
|
||
"delete": "Delete",
|
||
"yesDelete": "Yes, delete",
|
||
"deleting": "…",
|
||
"cancel": "Cancel",
|
||
"edit": "Edit"
|
||
},
|
||
"NewTypePage": {
|
||
"title": "Add new type",
|
||
"description": "Creates a new content type (collection). The schema file is saved on the server at {path} and loaded via hot-reload.",
|
||
"nameRequired": "Name is required.",
|
||
"nameInvalid": "Name: only lowercase letters, digits and underscores.",
|
||
"fieldRequired": "At least one field required.",
|
||
"fieldNamesUnique": "Field names must be unique.",
|
||
"errorCreating": "Error creating type.",
|
||
"nameLabel": "Name",
|
||
"namePlaceholder": "e.g. product, blog_post",
|
||
"nameHint": "Lowercase letters, digits and underscores only.",
|
||
"descriptionLabel": "Description",
|
||
"categoryLabel": "Category",
|
||
"categoryPlaceholder": "e.g. content",
|
||
"tagsLabel": "Tags (comma-separated)",
|
||
"tagsPlaceholder": "e.g. content, blog",
|
||
"strictLabel": "Strict (reject unknown fields)",
|
||
"fieldsLabel": "Fields",
|
||
"addField": "Add field",
|
||
"fieldNamePlaceholder": "Field name",
|
||
"fieldTypeLabel": "Field type",
|
||
"required": "Required",
|
||
"removeField": "Remove field",
|
||
"collectionPlaceholder": "Collection (e.g. page)",
|
||
"allowedSlugsPlaceholder": "Allowed slugs (comma-separated, optional)",
|
||
"allowedCollectionsPlaceholder": "Allowed content types (comma-separated, optional)",
|
||
"arrayItemType": "Array item type",
|
||
"itemTypePlaceholder": "e.g. string, reference",
|
||
"arrayExplain": "This field is a list [ ] in JSON. Every position in the list has the same type—pick what one entry is below.",
|
||
"arrayEachEntry": "One list entry is",
|
||
"itemKindString": "Plain text (string)",
|
||
"itemKindNumber": "Number",
|
||
"itemKindObject": "Object (fixed sub-fields per entry)",
|
||
"itemKindReference": "Reference (slug to an entry in a collection)",
|
||
"objectItemFieldsLabel": "Fields on each list object",
|
||
"addObjectField": "Add sub-field",
|
||
"objectFieldNamePlaceholder": "Sub-field name",
|
||
"arrayReferenceHelp": "All slugs in the list must exist in this collection (unless you use allowed slugs).",
|
||
"multiSelectOptions": "Options",
|
||
"multiSelectOptionsPlaceholder": "e.g. option1, option2, option3",
|
||
"multiSelectOptionsHelp": "Comma- or newline-separated list of allowed values. User can select multiple.",
|
||
"stringWidgetLabel": "Input style",
|
||
"stringWidgetSingleline": "Single line",
|
||
"stringWidgetTextarea": "Multi-line (textarea)",
|
||
"stringWidgetCode": "Code (syntax highlighting)",
|
||
"stringWidgetImageUrl": "Image / asset URL (preview + picker)",
|
||
"codeLanguageLabel": "Code language",
|
||
"codeLanguageCss": "CSS",
|
||
"codeLanguageJavascript": "JavaScript",
|
||
"codeLanguageJson": "JSON",
|
||
"codeLanguageHtml": "HTML",
|
||
"defaultValueLabel": "Default value",
|
||
"defaultValuePlaceholder": "e.g. \"text\", 0, true, [\"a\",\"b\"]",
|
||
"defaultValueHelp": "JSON value; leave empty for none. Used when creating new entries.",
|
||
"defaultValueInvalid": "Invalid JSON for default value in field \"{field}\"",
|
||
"defaultValueBoolean": "Default: checked",
|
||
"defaultValueEmpty": "Leave empty for none",
|
||
"defaultValueMultiSelectSetOptions": "Set options above first, then choose defaults.",
|
||
"defaultValueArrayPlaceholder": "Comma-separated values",
|
||
"fieldDescriptionPlaceholder": "Field description (optional)",
|
||
"creating": "Creating…",
|
||
"createType": "Create type",
|
||
"cancel": "Cancel"
|
||
},
|
||
"EditTypePage": {
|
||
"fieldRequired": "At least one field required.",
|
||
"fieldNamesUnique": "Field names must be unique.",
|
||
"errorSaving": "Error saving type.",
|
||
"missingName": "Missing type name.",
|
||
"backToTypes": "Back to Types",
|
||
"loading": "Loading…",
|
||
"errorLoading": "Error loading type: {error}",
|
||
"title": "Edit type: {name}",
|
||
"description": "Change description, category, tags, and fields. The schema file is updated on the server.",
|
||
"nameLabel": "Name",
|
||
"descriptionLabel": "Description",
|
||
"categoryLabel": "Category",
|
||
"categoryPlaceholder": "e.g. content",
|
||
"tagsLabel": "Tags (comma-separated)",
|
||
"tagsPlaceholder": "e.g. content, blog",
|
||
"strictLabel": "Strict (reject unknown fields)",
|
||
"extendsLabel": "Extends",
|
||
"extendsDescription": "This type inherits fields from these types. Edit the type there to change inherited fields.",
|
||
"extendsPlaceholder": "Select type to extend",
|
||
"extendsNoneAvailable": "No other types to add",
|
||
"addExtend": "Add",
|
||
"removeExtend": "Remove from extends",
|
||
"fieldsLabel": "Fields",
|
||
"addField": "Add field",
|
||
"moveFieldUp": "Move field up",
|
||
"moveFieldDown": "Move field down",
|
||
"moveFieldToTop": "Move to top",
|
||
"moveFieldToBottom": "Move to bottom",
|
||
"fieldNamePlaceholder": "Field name",
|
||
"fieldTypeLabel": "Field type",
|
||
"required": "Required",
|
||
"removeField": "Remove field",
|
||
"collectionPlaceholder": "Collection (e.g. page)",
|
||
"allowedSlugsPlaceholder": "Allowed slugs (comma-separated, optional)",
|
||
"allowedCollectionsPlaceholder": "Allowed content types (comma-separated, optional)",
|
||
"patternLabel": "Pattern (regex)",
|
||
"patternPlaceholder": "e.g. ^[A-Z]{2,4}-\\d{3,6}$",
|
||
"minLengthLabel": "Min length",
|
||
"maxLengthLabel": "Max length",
|
||
"arrayItemType": "Array item type",
|
||
"itemTypePlaceholder": "e.g. string, reference",
|
||
"arrayExplain": "This field is a list [ ] in JSON. Every position in the list has the same type—pick what one entry is below.",
|
||
"arrayEachEntry": "One list entry is",
|
||
"itemKindString": "Plain text (string)",
|
||
"itemKindNumber": "Number",
|
||
"itemKindObject": "Object (fixed sub-fields per entry)",
|
||
"itemKindReference": "Reference (slug to an entry in a collection)",
|
||
"objectItemFieldsLabel": "Fields on each list object",
|
||
"addObjectField": "Add sub-field",
|
||
"objectFieldNamePlaceholder": "Sub-field name",
|
||
"arrayReferenceHelp": "All slugs in the list must exist in this collection (unless you use allowed slugs).",
|
||
"multiSelectOptions": "Options",
|
||
"multiSelectOptionsPlaceholder": "e.g. option1, option2, option3",
|
||
"multiSelectOptionsHelp": "Comma- or newline-separated list of allowed values. User can select multiple.",
|
||
"stringWidgetLabel": "Input style",
|
||
"stringWidgetSingleline": "Single line",
|
||
"stringWidgetTextarea": "Multi-line (textarea)",
|
||
"stringWidgetCode": "Code (syntax highlighting)",
|
||
"stringWidgetImageUrl": "Image / asset URL (preview + picker)",
|
||
"codeLanguageLabel": "Code language",
|
||
"codeLanguageCss": "CSS",
|
||
"codeLanguageJavascript": "JavaScript",
|
||
"codeLanguageJson": "JSON",
|
||
"codeLanguageHtml": "HTML",
|
||
"defaultValueLabel": "Default value",
|
||
"defaultValuePlaceholder": "e.g. \"text\", 0, true, [\"a\",\"b\"]",
|
||
"defaultValueHelp": "JSON value; leave empty for none. Used when creating new entries.",
|
||
"defaultValueInvalid": "Invalid JSON for default value in field \"{field}\"",
|
||
"defaultValueBoolean": "Default: checked",
|
||
"defaultValueEmpty": "Leave empty for none",
|
||
"defaultValueMultiSelectSetOptions": "Set options above first, then choose defaults.",
|
||
"defaultValueArrayPlaceholder": "Comma-separated values",
|
||
"fieldDescriptionPlaceholder": "Field description (optional)",
|
||
"saving": "Saving…",
|
||
"save": "Save",
|
||
"cancel": "Cancel"
|
||
},
|
||
"ErrorBoundary": {
|
||
"title": "Something went wrong",
|
||
"reload": "Reload page"
|
||
},
|
||
"Breadcrumbs": {
|
||
"ariaLabel": "Breadcrumb",
|
||
"content": "Content"
|
||
},
|
||
"ContentListPage": {
|
||
"title": "Entries",
|
||
"newEntry": "New entry",
|
||
"colActions": "Actions",
|
||
"colStatus": "Status",
|
||
"published": "Published",
|
||
"noEntries": "No entries.",
|
||
"noEntriesCreate": "No entries yet. Create the first one.",
|
||
"edit": "Edit",
|
||
"delete": "Delete",
|
||
"draft": "Draft",
|
||
"searchPlaceholder": "Search…",
|
||
"loading": "Loading…",
|
||
"sortBy": "Sort by {field}",
|
||
"sortAsc": "Ascending",
|
||
"sortDesc": "Descending",
|
||
"typeDependencies": "Type dependencies",
|
||
"confirmDelete": "Delete \"{slug}\"?",
|
||
"confirmDeleteDescription": "This cannot be undone.",
|
||
"cancel": "Cancel",
|
||
"deleting": "Deleting…",
|
||
"yesDelete": "Yes, delete",
|
||
"deleted": "Entry deleted.",
|
||
"errorDeleting": "Error deleting entry."
|
||
},
|
||
"ContentNewPage": {
|
||
"breadcrumbNew": "New",
|
||
"title": "Create new entry",
|
||
"sectionSchema": "Schema"
|
||
},
|
||
"ContentEditPage": {
|
||
"title": "Edit entry",
|
||
"apiLink": "API link (data preview):",
|
||
"referrersSection": "Referenced by",
|
||
"noReferrers": "No other entries reference this one.",
|
||
"openReferrer": "Open entry"
|
||
},
|
||
"AssetsPage": {
|
||
"titleAll": "All assets",
|
||
"titleRoot": "Root",
|
||
"assetCount": "{count} image(s)",
|
||
"assetCountFiltered": "{count} of {total} image(s)",
|
||
"searchPlaceholder": "Search by filename…",
|
||
"dateFrom": "From date",
|
||
"dateTo": "To date",
|
||
"mimeFilter": "Type",
|
||
"mimeFilterAll": "All types",
|
||
"upload": "Upload",
|
||
"uploading": "Uploading…",
|
||
"uploadedCount": "Uploaded {count} file(s).",
|
||
"dropZoneHintRoot": "Click or drag & drop to upload to root",
|
||
"dropZoneHintFolder": "Click or drag & drop to upload to \"{folder}\"",
|
||
"loading": "Loading…",
|
||
"errorLoading": "Error loading assets",
|
||
"noAssets": "No assets here yet.",
|
||
"urlCopied": "URL copied.",
|
||
"copyUrl": "Copy URL",
|
||
"confirmDelete": "Delete \"{filename}\"?",
|
||
"confirmDeleteDesc": "This cannot be undone.",
|
||
"yesDelete": "Yes, delete",
|
||
"deleting": "…",
|
||
"cancel": "Cancel",
|
||
"deleted": "\"{filename}\" deleted.",
|
||
"folders": "Folders",
|
||
"all": "All",
|
||
"root": "Root",
|
||
"newFolder": "New folder",
|
||
"folderNamePlaceholder": "e.g. blog",
|
||
"folderCreated": "Folder \"{name}\" created.",
|
||
"folderDeleted": "Folder \"{name}\" deleted.",
|
||
"confirmDeleteFolder": "Delete folder \"{name}\"?",
|
||
"confirmDeleteFolderDesc": "Only empty folders can be deleted.",
|
||
"renameTitle": "Rename image",
|
||
"renameFilenameLabel": "Filename",
|
||
"rename": "Rename",
|
||
"renaming": "Renaming…",
|
||
"renamed": "\"{filename}\" renamed.",
|
||
"copyWithTransformTitle": "Copy with transformation",
|
||
"copyWithTransformDesc": "Create a new asset from this image with resize/crop/format. Same folder.",
|
||
"copyWithTransformNewName": "New filename",
|
||
"copyWithTransformCreate": "Create copy",
|
||
"copyWithTransformDone": "Transformed copy created.",
|
||
"transformPresetThumb": "Thumb 300px",
|
||
"transformPresetSquare": "Square 1:1",
|
||
"transformPresetMedium": "Medium 800px",
|
||
"transformPresetJpeg": "JPEG 1200px",
|
||
"transformWidth": "Width",
|
||
"transformHeight": "Height",
|
||
"transformAspect": "Aspect ratio",
|
||
"transformFit": "Fit",
|
||
"transformFormat": "Format",
|
||
"transformQuality": "Quality (1–100)",
|
||
"creating": "Creating…"
|
||
}
|
||
}
|