mirror of
https://github.com/screentinker/screentinker.git
synced 2026-05-15 07:32:23 -06:00
- device-detail.js: tabs, draft banner, layout selector, info cards, uptime timeline, controls, remote tab, playlist items, copy/assign modals, all toasts and confirms - settings.js: account, change password, license, user management, white-label, server info, setup guide, your data export/import, language selector, about - es/fr/de/pt all at 425/425 key parity; hi skeleton untouched - Native review still recommended before publicizing as fully supported Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
471 lines
23 KiB
JavaScript
471 lines
23 KiB
JavaScript
// English translations. This file is the source of truth for keys —
|
|
// every other locale should mirror its keys (or fall back to en).
|
|
export default {
|
|
// Nav (sidebar)
|
|
'nav.displays': 'Displays',
|
|
'nav.content': 'Content',
|
|
'nav.playlists': 'Playlists',
|
|
'nav.layouts': 'Layouts',
|
|
'nav.widgets': 'Widgets',
|
|
'nav.schedule': 'Schedule',
|
|
'nav.walls': 'Video Walls',
|
|
'nav.reports': 'Reports',
|
|
'nav.kiosk': 'Kiosk',
|
|
'nav.designer': 'Designer',
|
|
'nav.activity': 'Activity',
|
|
'nav.teams': 'Teams',
|
|
'nav.help': 'Help',
|
|
'nav.settings': 'Settings',
|
|
'nav.subscription': 'Subscription',
|
|
'nav.admin': 'Admin',
|
|
|
|
// Common (shared across views)
|
|
'common.save': 'Save',
|
|
'common.cancel': 'Cancel',
|
|
'common.delete': 'Delete',
|
|
'common.edit': 'Edit',
|
|
'common.done': 'Done',
|
|
'common.loading': 'Loading...',
|
|
'common.connected': 'Connected',
|
|
'common.disconnected': 'Disconnected',
|
|
'common.never': 'Never',
|
|
'common.just_now': 'Just now',
|
|
'common.minutes_ago': '{n}m ago',
|
|
'common.hours_ago': '{n}h ago',
|
|
'common.days_ago': '{n}d ago',
|
|
'common.unknown': 'Unknown',
|
|
|
|
// Auth (login view)
|
|
'auth.sign_in': 'Sign In',
|
|
'auth.sign_out': 'Sign out',
|
|
'auth.create_account': 'Create Account',
|
|
'auth.create_admin_account': 'Create Admin Account',
|
|
'auth.email': 'Email',
|
|
'auth.password': 'Password',
|
|
'auth.name': 'Name',
|
|
'auth.placeholder_email': 'you@example.com',
|
|
'auth.placeholder_password': '••••••••',
|
|
'auth.placeholder_name': 'Your name',
|
|
'auth.placeholder_register_password': 'At least 6 characters',
|
|
'auth.subtitle_setup': 'Create your admin account to get started',
|
|
'auth.subtitle_signin': 'Sign in to manage your displays',
|
|
'auth.trial_notice': 'New accounts get a 14-day free Pro trial',
|
|
'auth.divider_or': 'OR',
|
|
'auth.signin_google': 'Sign in with Google',
|
|
'auth.signin_microsoft': 'Sign in with Microsoft',
|
|
'auth.back_to_signin': 'Back to Sign In',
|
|
'auth.support_access': 'Support Access',
|
|
'auth.support_token_placeholder': 'Paste support token',
|
|
'auth.support_authenticate': 'Authenticate with Support Token',
|
|
'auth.terms': 'Terms of Service',
|
|
'auth.privacy': 'Privacy Policy',
|
|
'auth.error_email_password_required': 'Email and password required',
|
|
'auth.error_password_min_6': 'Password must be at least 6 characters',
|
|
'auth.error_login_failed': 'Login failed',
|
|
'auth.error_registration_failed': 'Registration failed',
|
|
'auth.error_paste_support_token': 'Paste a support token',
|
|
'auth.error_support_failed': 'Support login failed',
|
|
'auth.error_google_failed': 'Google sign-in failed',
|
|
'auth.error_microsoft_failed': 'Microsoft sign-in failed',
|
|
|
|
// Dashboard
|
|
'dashboard.title': 'Displays',
|
|
'dashboard.subtitle': 'Manage your remote displays',
|
|
'dashboard.help_tip': 'Your paired display devices. Green = online, red = offline. Click a device to manage its playlist, view telemetry, or use remote control.',
|
|
'dashboard.add': 'Add Display',
|
|
'dashboard.create_group': '+ Group',
|
|
'dashboard.search': 'Search displays...',
|
|
'dashboard.all_status': 'All Status',
|
|
'dashboard.online': 'Online',
|
|
'dashboard.offline': 'Offline',
|
|
'dashboard.awaiting_pairing': 'Awaiting Pairing',
|
|
'dashboard.no_preview': 'No preview available',
|
|
'dashboard.total_displays': 'Total Displays',
|
|
'dashboard.ungrouped': 'Ungrouped',
|
|
'dashboard.no_displays': 'No displays yet',
|
|
'dashboard.no_displays_desc': 'Install the ScreenTinker app on your TV and pair it using the button above.',
|
|
'dashboard.failed_to_load': 'Failed to load displays',
|
|
'dashboard.unknown_playlist': 'Unknown playlist',
|
|
'dashboard.mixed_playlists': 'Mixed playlists',
|
|
'dashboard.playlist_label': 'Playlist: {name}',
|
|
'dashboard.devices_count_one': '{n} device',
|
|
'dashboard.devices_count_other': '{n} devices',
|
|
'dashboard.online_count': '{n} online',
|
|
'dashboard.set_playlist_placeholder': 'Set Playlist...',
|
|
'dashboard.send_command_placeholder': 'Send Command...',
|
|
'dashboard.manage': 'Manage',
|
|
'dashboard.manage_tooltip': 'Add/remove devices',
|
|
'dashboard.delete_group_tooltip': 'Delete group',
|
|
'dashboard.no_devices_in_group': 'No devices in this group. Click Manage to add some.',
|
|
'dashboard.manage_group_subtitle': 'Check devices to add them to this group',
|
|
'dashboard.draft_suffix': '(draft)',
|
|
// Group commands
|
|
'dashboard.cmd.screen_on': 'Screen On',
|
|
'dashboard.cmd.screen_off': 'Screen Off',
|
|
'dashboard.cmd.restart_app': 'Restart App',
|
|
'dashboard.cmd.check_update': 'Check Update',
|
|
'dashboard.cmd.reboot': 'Reboot',
|
|
'dashboard.cmd.shutdown': 'Shutdown',
|
|
// Dashboard prompts/confirms
|
|
'dashboard.prompt_group_name': 'Group name:',
|
|
'dashboard.error_pairing_code': 'Enter a valid 6-digit pairing code',
|
|
'dashboard.confirm_add_to_group': '{name} is already in: {groups}\n\nAdd it to "{target}" too?',
|
|
'dashboard.confirm_assign_playlist': 'Assign playlist "{playlist}" to all devices in "{group}"?',
|
|
'dashboard.confirm_destructive_command': '{cmd} all {n} devices in "{group}"?\n\nThis cannot be undone.',
|
|
'dashboard.confirm_delete_group': 'Delete this group? Devices will not be affected.',
|
|
// Dashboard toasts
|
|
'dashboard.toast.display_paired': 'Display paired successfully!',
|
|
'dashboard.toast.group_created': 'Group created',
|
|
'dashboard.toast.group_deleted': 'Group deleted',
|
|
'dashboard.toast.already_in_group': '{name} is already in {group}',
|
|
'dashboard.toast.moved_device': 'Moved {name} to {group}',
|
|
'dashboard.toast.removed_device_one': 'Removed {name} from 1 group',
|
|
'dashboard.toast.removed_device_other': 'Removed {name} from {n} groups',
|
|
'dashboard.toast.playlist_assigned_one': 'Playlist assigned to 1 device',
|
|
'dashboard.toast.playlist_assigned_other': 'Playlist assigned to {n} devices',
|
|
'dashboard.toast.command_sent': '{cmd} sent to {sent}/{total} devices',
|
|
'dashboard.toast.command_sent_with_offline': '{cmd} sent to {sent}/{total} devices ({offline} offline)',
|
|
|
|
// Content library
|
|
'content.title': 'Content Library',
|
|
'content.subtitle': 'Upload and manage your media files',
|
|
'content.help_tip': 'Upload videos and images here. Select multiple files for bulk upload. Use Remote URL to stream from external sources. Click a thumbnail to preview.',
|
|
'content.drop': 'Drop files here or click to upload',
|
|
'content.upload_hint': 'Supports MP4, WebM, AVI, MKV, JPEG, PNG, GIF, WebP',
|
|
'content.upload_progress': 'Uploading...',
|
|
'content.upload_progress_named': 'Uploading {name}...',
|
|
'content.upload_progress_named_pct': 'Uploading {name}... {pct}%',
|
|
// Remote URL panel
|
|
'content.remote_url': 'Remote URL',
|
|
'content.remote_desc': 'Stream directly from a URL. Saves local bandwidth.',
|
|
'content.remote_url_placeholder': 'https://example.com/video.mp4',
|
|
'content.remote_name_placeholder': 'Display name (optional)',
|
|
'content.remote_add_btn': 'Add Remote URL',
|
|
// YouTube panel
|
|
'content.youtube': 'YouTube',
|
|
'content.youtube_desc': 'Embed a YouTube video on your displays.',
|
|
'content.youtube_url_placeholder': 'https://youtube.com/watch?v=...',
|
|
'content.youtube_name_placeholder': 'Display name (optional)',
|
|
'content.youtube_add_btn': 'Add YouTube Video',
|
|
// Search / folders
|
|
'content.search_placeholder': 'Search content...',
|
|
'content.new_folder_btn': '+ New Folder',
|
|
'content.breadcrumb_root': 'All Content',
|
|
'content.rename_btn': 'Rename',
|
|
'content.delete_folder_btn': 'Delete folder',
|
|
'content.prompt_folder_name': 'Folder name:',
|
|
'content.prompt_rename_folder': 'Rename folder:',
|
|
'content.confirm_delete_folder': 'Delete this folder? Content inside moves back to the root level. Subfolders will also be deleted.',
|
|
// Empty states
|
|
'content.empty_folder_title': 'This folder is empty',
|
|
'content.empty_folder_desc': 'Drag content here, or use the Move action.',
|
|
'content.no_content': 'No content yet',
|
|
'content.no_content_desc': 'Upload videos and images to get started.',
|
|
'content.failed_to_load': 'Failed to load content',
|
|
// Item type labels
|
|
'content.type_youtube': 'YouTube',
|
|
'content.type_remote': 'Remote URL',
|
|
'content.type_remote_short': 'Remote',
|
|
'content.type_video': 'Video',
|
|
'content.type_image': 'Image',
|
|
// Item action buttons
|
|
'content.btn_edit': 'Edit',
|
|
'content.btn_delete': 'Delete',
|
|
'content.btn_confirm_delete': 'Confirm Delete?',
|
|
'content.btn_deleting': 'Deleting...',
|
|
// Edit modal
|
|
'content.edit_modal_title': 'Edit Content',
|
|
'content.label_filename': 'Filename / Display Name',
|
|
'content.label_remote_url_field': 'Remote URL',
|
|
'content.label_mime_type': 'MIME Type',
|
|
'content.label_folder': 'Folder',
|
|
'content.label_replace_file': 'Replace File',
|
|
'content.replace_file_hint': 'Leave empty to keep current file',
|
|
'content.folder_root_option': '— Root —',
|
|
'content.save_changes': 'Save Changes',
|
|
// MIME options
|
|
'content.mime.video_mp4': 'Video (MP4)',
|
|
'content.mime.video_webm': 'Video (WebM)',
|
|
'content.mime.image_jpeg': 'Image (JPEG)',
|
|
'content.mime.image_png': 'Image (PNG)',
|
|
'content.mime.image_gif': 'Image (GIF)',
|
|
'content.mime.image_webp': 'Image (WebP)',
|
|
// Content errors / toasts
|
|
'content.error_enter_url': 'Enter a URL',
|
|
'content.error_enter_youtube_url': 'Enter a YouTube URL',
|
|
'content.error_update_failed': 'Update failed',
|
|
'content.toast.remote_added': 'Remote content added',
|
|
'content.toast.youtube_added': 'YouTube video added',
|
|
'content.toast.deleted': 'Content deleted',
|
|
'content.toast.updated': 'Content updated',
|
|
'content.toast.uploaded_named': '{name} uploaded successfully',
|
|
'content.toast.upload_failed_named': 'Failed to upload {name}: {error}',
|
|
'content.toast.folder_created_named': 'Folder "{name}" created',
|
|
'content.toast.folder_renamed': 'Folder renamed',
|
|
'content.toast.folder_deleted': 'Folder deleted',
|
|
'content.toast.moved': 'Moved',
|
|
'content.toast.moved_to_root': 'Moved to root',
|
|
|
|
// Device detail
|
|
'device.back': 'Back to Displays',
|
|
'device.owner_label': 'Owner: {owner}',
|
|
'device.rename': 'Rename',
|
|
'device.screenshot_btn': 'Screenshot',
|
|
'device.remove': 'Remove',
|
|
'device.click_to_confirm': 'Click again to confirm',
|
|
'device.prompt_new_name': 'Enter new name:',
|
|
'device.confirm_discard_draft': 'Discard all unpublished changes and revert to the last published version?',
|
|
'device.failed_load': 'Failed to load device',
|
|
'device.no_screenshot': 'No screenshot available. Click "Screenshot" to capture one.',
|
|
'device.no_content_assigned': 'No content assigned',
|
|
'device.now_playing_id': 'Playing: {id}',
|
|
'device.playlist_count_one': '1 item in playlist',
|
|
'device.playlist_count_other': '{n} items in playlist',
|
|
// Tabs
|
|
'device.tab.now_playing': 'Now Playing',
|
|
'device.tab.now_playing_tip': "Live screenshot of what's currently displaying on this device.",
|
|
'device.tab.playlist': 'Playlist',
|
|
'device.tab.playlist_tip': 'Content assigned to this device. Drag items to reorder. Add media, widgets, or kiosk pages.',
|
|
'device.tab.info': 'Device Info',
|
|
'device.tab.info_tip': 'Hardware telemetry, orientation settings, notes, and device controls.',
|
|
'device.tab.remote': 'Remote Control',
|
|
'device.tab.remote_tip': 'View the device screen in real-time and send key presses. Works on Android APK and web player.',
|
|
// Draft banner
|
|
'device.draft.banner_title': 'Unpublished changes',
|
|
'device.draft.devices_showing_published': 'Devices are still showing the last published version.',
|
|
'device.draft.never_published': 'This playlist has never been published. Devices will show nothing until you publish.',
|
|
'device.draft.discard': 'Discard',
|
|
'device.draft.publish': 'Publish',
|
|
'device.draft.publishing': 'Publishing...',
|
|
// Layout selector
|
|
'device.layout.label': 'Screen Layout',
|
|
'device.layout.fullscreen_default': 'Fullscreen (default)',
|
|
'device.layout.zones_count': '{name} ({n} zones)',
|
|
'device.layout.template_zones_count': '[Template] {name} ({n} zones)',
|
|
'device.layout.apply': 'Apply',
|
|
// Playlist tab
|
|
'device.playlist.label': 'Playlist',
|
|
'device.playlist.no_playlist': 'No playlist',
|
|
'device.playlist.copy_to_btn': 'Copy To...',
|
|
'device.playlist.add_content_btn': 'Add Content',
|
|
'device.playlist.empty_title': 'No content assigned',
|
|
'device.playlist.empty_desc': "Add content from your library to this display's playlist.",
|
|
'device.playlist_picker.with_count': '{name} — {n} items',
|
|
'device.playlist_picker.with_auto': '{name} (auto) — {n} items',
|
|
// Info cards
|
|
'device.info.status': 'Status',
|
|
'device.info.ip_address': 'IP Address',
|
|
'device.info.battery': 'Battery',
|
|
'device.info.storage': 'Storage',
|
|
'device.info.size_free': '{size} free',
|
|
'device.info.player_type': 'Player Type',
|
|
'device.info.web_player': 'Web Player',
|
|
'device.info.wifi': 'WiFi',
|
|
'device.info.uptime': 'Uptime',
|
|
'device.info.android_version': 'Android Version',
|
|
'device.info.app_version': 'App Version',
|
|
'device.info.screen_resolution': 'Screen Resolution',
|
|
'device.info.ram': 'RAM',
|
|
'device.info.cpu_usage': 'CPU Usage',
|
|
// Uptime timeline
|
|
'device.timeline.title': 'Uptime Timeline (Last 24 Hours)',
|
|
'device.timeline.h24_ago': '24h ago',
|
|
'device.timeline.now': 'Now',
|
|
'device.timeline.online': 'Online',
|
|
'device.timeline.offline': 'Offline',
|
|
'device.timeline.no_data': 'No data',
|
|
'device.timeline.uptime_pct_tracked': '{pct}% uptime ({n}min tracked)',
|
|
'device.timeline.uptime_pct_no_data': '{pct}% uptime (no data)',
|
|
// Form
|
|
'device.form.orientation_label': 'Orientation / Rotation',
|
|
'device.form.orientation.landscape': 'Landscape (0°)',
|
|
'device.form.orientation.portrait': 'Portrait (90° CW)',
|
|
'device.form.orientation.landscape_flipped': 'Landscape Flipped (180°)',
|
|
'device.form.orientation.portrait_flipped': 'Portrait Flipped (270° CW)',
|
|
'device.form.default_content_label': 'Default Content',
|
|
'device.form.default_content_none': 'None (show "Waiting...")',
|
|
'device.form.notes_label': 'Notes',
|
|
'device.form.notes_placeholder': 'Location, setup details, etc.',
|
|
'device.form.save_settings': 'Save Settings',
|
|
// Control buttons
|
|
'device.ctl.reboot_device': 'Reboot Device',
|
|
'device.ctl.screen_off': 'Screen Off',
|
|
'device.ctl.screen_on': 'Screen On',
|
|
'device.ctl.launch_player': 'Launch Player',
|
|
'device.ctl.force_update': 'Force Update',
|
|
'device.ctl.shutdown': 'Shutdown',
|
|
// Remote tab
|
|
'device.remote.start_prompt': 'Click "Start Remote" to begin',
|
|
'device.remote.start': 'Start Remote',
|
|
'device.remote.stop': 'Stop Remote',
|
|
'device.remote.vol_up': 'Vol +',
|
|
'device.remote.vol_down': 'Vol -',
|
|
'device.remote.home': 'Home',
|
|
'device.remote.back': 'Back',
|
|
'device.remote.recents': 'Recents',
|
|
'device.remote.power': 'Power',
|
|
'device.remote.ok': 'OK',
|
|
'device.remote.settings': 'Settings',
|
|
'device.remote.scrn_off': 'Scrn Off',
|
|
'device.remote.scrn_on': 'Scrn On',
|
|
'device.remote.enable_system_view': 'Enable System View',
|
|
'device.remote.system_view_tooltip': 'Prompts the device user to allow full screen capture - enables remote view of home screen, settings, and other apps',
|
|
'device.remote.system_view_hint': 'Requires one-time approval on device',
|
|
'device.remote.waiting_for_approval': 'Waiting for device approval...',
|
|
'device.remote.system_view_enabled': 'System View Enabled',
|
|
'device.remote.unlocked_hint': 'Navigation and system controls unlocked',
|
|
// Playlist item
|
|
'device.pl_item.widget_with_type': 'Widget ({type})',
|
|
'device.pl_item.youtube': 'YouTube',
|
|
'device.pl_item.video': 'Video',
|
|
'device.pl_item.image': 'Image',
|
|
'device.pl_item.zone_label': 'Zone: {id}',
|
|
'device.pl_item.no_zone': 'No zone',
|
|
'device.pl_item.mute': 'Mute',
|
|
'device.pl_item.unmute': 'Unmute',
|
|
'device.pl_item.remove': 'Remove',
|
|
// Copy playlist
|
|
'device.copy.no_other_devices': 'No other devices to copy to',
|
|
'device.copy.prompt': 'Copy playlist to which device?\n\n{list}\n\nEnter number:',
|
|
'device.copy.invalid_selection': 'Invalid selection',
|
|
'device.copy.toast': 'Copied {n} items to {device}',
|
|
// Add-content modal
|
|
'device.assign.empty_all': 'No content, widgets, or kiosk pages yet. Create something first!',
|
|
'device.assign.modal_title': 'Add to Playlist',
|
|
'device.assign.zone_label': 'Zone',
|
|
'device.assign.zone_default': 'Default (fullscreen)',
|
|
'device.assign.duration_label': 'Display Duration (seconds, for images/widgets)',
|
|
'device.assign.tab.media': 'Media ({n})',
|
|
'device.assign.tab.widgets': 'Widgets ({n})',
|
|
'device.assign.tab.kiosk': 'Kiosk ({n})',
|
|
'device.assign.no_media': 'No media uploaded yet',
|
|
'device.assign.no_widgets': 'No widgets created yet.',
|
|
'device.assign.no_kiosk': 'No kiosk pages yet.',
|
|
'device.assign.create_one': 'Create one',
|
|
'device.assign.add_selected': 'Add Selected',
|
|
'device.assign.select_first': 'Select something first',
|
|
'device.assign.kiosk_widget_name': 'Kiosk: {name}',
|
|
// Toasts
|
|
'device.toast.screenshot_requested': 'Screenshot requested',
|
|
'device.toast.renamed': 'Display renamed',
|
|
'device.toast.removing': 'Removing...',
|
|
'device.toast.removed': 'Display removed',
|
|
'device.toast.settings_saved': 'Settings saved',
|
|
'device.toast.published': 'Playlist published — devices updated',
|
|
'device.toast.draft_discarded': 'Draft changes discarded',
|
|
'device.toast.playlist_changed': 'Playlist changed',
|
|
'device.toast.layout_applied': 'Layout applied',
|
|
'device.toast.switched_to_fullscreen': 'Switched to fullscreen',
|
|
'device.toast.added_to_playlist': 'Added to playlist',
|
|
'device.toast.unmuted': 'Unmuted',
|
|
'device.toast.muted': 'Muted',
|
|
'device.toast.zone_updated': 'Zone updated',
|
|
'device.toast.removed_from_playlist': 'Content removed from playlist',
|
|
'device.toast.playlist_reordered': 'Playlist reordered',
|
|
'device.toast.reboot_sent': 'Reboot command sent',
|
|
'device.toast.shutdown_sent': 'Shutdown command sent',
|
|
'device.toast.screen_off_sent': 'Screen off command sent',
|
|
'device.toast.screen_on_sent': 'Screen on command sent',
|
|
'device.toast.launch_sent': 'Launch command sent',
|
|
'device.toast.update_triggered': 'Update check triggered',
|
|
'device.toast.remote_started': 'Remote session started',
|
|
|
|
// Settings
|
|
'settings.title': 'Settings',
|
|
'settings.subtitle': 'Server configuration and setup information',
|
|
'settings.account': 'Account',
|
|
'settings.save_profile': 'Save Profile',
|
|
'settings.change_password': 'Change Password',
|
|
'settings.password_min_8': 'Must be at least 8 characters.',
|
|
'settings.current_password': 'Current Password',
|
|
'settings.new_password': 'New Password',
|
|
'settings.confirm_new_password': 'Confirm New Password',
|
|
'settings.sso_note': 'You sign in via {provider}. Manage your password there.',
|
|
'settings.license': 'License',
|
|
'settings.license_mit': 'MIT License - all features included.',
|
|
'settings.platform_admin_link': 'Platform admin tools are in the',
|
|
'settings.platform_admin_page_suffix': 'page.',
|
|
'settings.user_management': 'User Management',
|
|
'settings.loading_users': 'Loading users...',
|
|
'settings.white_label': 'White Label / Branding',
|
|
'settings.white_label_desc': 'Customize the look of your dashboard and player for your clients.',
|
|
'settings.brand_name': 'Brand Name',
|
|
'settings.logo_url': 'Logo URL',
|
|
'settings.primary_color': 'Primary Color',
|
|
'settings.bg_color': 'Background Color',
|
|
'settings.custom_domain': 'Custom Domain',
|
|
'settings.favicon_url': 'Favicon URL',
|
|
'settings.custom_css': 'Custom CSS (optional)',
|
|
'settings.hide_branding': 'Hide "ScreenTinker" branding',
|
|
'settings.save_branding': 'Save Branding',
|
|
'settings.preview': 'Preview',
|
|
'settings.white_label_enterprise_only': 'Custom branding is available on the Enterprise plan',
|
|
'settings.view_plans': 'View Plans',
|
|
'settings.server_info': 'Server Information',
|
|
'settings.server_url': 'Server URL',
|
|
'settings.api_endpoint': 'API Endpoint',
|
|
'settings.server_url_hint': 'Use this URL when setting up the Android app',
|
|
'settings.setup_guide': 'Setup Guide',
|
|
'settings.setup_step_1': 'Install the ScreenTinker APK on your TV via sideloading',
|
|
'settings.setup_step_2_prefix': 'Open the app and enter this server URL:',
|
|
'settings.setup_step_3': 'The app will display a 6-digit pairing code',
|
|
'settings.setup_step_4': 'Click "Add Display" on the dashboard and enter the pairing code',
|
|
'settings.setup_step_5': 'Upload content in the Content Library',
|
|
'settings.setup_step_6': "Assign content to the display's Playlist",
|
|
'settings.your_data': 'Your Data',
|
|
'settings.your_data_desc': 'Export or import your devices, content, layouts, schedules, and all settings. Use this to migrate between cloud and self-hosted instances.',
|
|
'settings.export_my_data': 'Export My Data',
|
|
'settings.include_media_zip': 'Include media files (ZIP)',
|
|
'settings.import_data': 'Import Data',
|
|
'settings.language': 'Language',
|
|
'settings.about': 'About',
|
|
'settings.about_tagline': 'Digital signage management system.',
|
|
'settings.third_party_licenses': 'Third-Party Licenses',
|
|
// Import flow
|
|
'settings.import.reading_file': 'Reading file...',
|
|
'settings.import.zip_detected': 'ZIP export detected: <strong>{name}</strong> ({size} MB)<br>Contains data + media files.',
|
|
'settings.import.confirm': 'Confirm Import',
|
|
'settings.import.invalid_file': 'Invalid file. Must be a ScreenTinker export JSON or ZIP.',
|
|
'settings.import.summary_devices': '{n} devices',
|
|
'settings.import.summary_content': '{n} content items',
|
|
'settings.import.summary_widgets': '{n} widgets',
|
|
'settings.import.summary_layouts': '{n} layouts',
|
|
'settings.import.summary_schedules': '{n} schedules',
|
|
'settings.import.summary_walls': '{n} video walls',
|
|
'settings.import.summary_kiosk': '{n} kiosk pages',
|
|
'settings.import.found_summary': 'Found: {summary}.<br>From: {email} (exported {date})',
|
|
'settings.import.empty_export': 'empty export',
|
|
'settings.import.uploading_zip': 'Uploading and importing... This may take a moment for large files.',
|
|
'settings.import.importing': 'Importing...',
|
|
'settings.import.complete': 'Import complete: {imported}.',
|
|
'settings.import.pairing_codes_title': 'Device Pairing Codes:',
|
|
'settings.import.pairing_codes_hint': 'Enter these codes on each device to re-link them. All assignments and schedules will be preserved.',
|
|
'settings.import.failed': 'Import failed',
|
|
'settings.import.failed_with_error': 'Import failed: {error}',
|
|
'settings.import.read_failed': 'Failed to read file: {error}',
|
|
// Settings toasts
|
|
'settings.toast.support_token_generated': 'Support token generated (valid {hours}h)',
|
|
'settings.toast.import_success': 'Data imported successfully',
|
|
'settings.toast.name_required': 'Name cannot be empty',
|
|
'settings.toast.profile_saved': 'Profile saved',
|
|
'settings.toast.current_password_required': 'Enter your current password',
|
|
'settings.toast.new_password_min_8': 'New password must be at least 8 characters',
|
|
'settings.toast.passwords_dont_match': 'New passwords do not match',
|
|
'settings.toast.password_changed': 'Password changed',
|
|
'settings.toast.branding_saved': 'Branding saved',
|
|
'settings.toast.preview_applied': 'Preview applied (refresh to reset)',
|
|
'settings.toast.plan_updated': 'Plan updated',
|
|
'settings.toast.user_removed': 'User removed',
|
|
// User management table
|
|
'settings.user.col_user': 'User',
|
|
'settings.user.col_auth': 'Auth',
|
|
'settings.user.col_role': 'Role',
|
|
'settings.user.col_plan': 'Plan',
|
|
'settings.user.col_actions': 'Actions',
|
|
'settings.user.remove': 'Remove',
|
|
'settings.user.you': 'You',
|
|
'settings.user.confirm': 'Confirm?',
|
|
'settings.user.count_one': '1 user registered',
|
|
'settings.user.count_other': '{n} users registered',
|
|
};
|