392 lines
16 KiB
JSON
392 lines
16 KiB
JSON
{
|
||
"common": {
|
||
"app_name": "AI-RPG",
|
||
"loading": "Loading…",
|
||
"save": "Save",
|
||
"cancel": "Cancel",
|
||
"delete": "Delete",
|
||
"edit": "Edit",
|
||
"create": "Create",
|
||
"back": "Back",
|
||
"next": "Next",
|
||
"previous": "Previous",
|
||
"submit": "Submit",
|
||
"retry": "Retry",
|
||
"close": "Close",
|
||
"yes": "Yes",
|
||
"no": "No",
|
||
"search": "Search",
|
||
"no_data": "No data",
|
||
"actions": "Actions",
|
||
"status": "Status",
|
||
"name": "Name",
|
||
"description": "Description",
|
||
"language": "Language",
|
||
"type": "Type",
|
||
"preview": "Preview",
|
||
"details": "Details"
|
||
},
|
||
"nav": {
|
||
"worlds": "Worlds",
|
||
"create_world": "Create World",
|
||
"admin": "Admin",
|
||
"play": "Play",
|
||
"logout": "Logout",
|
||
"profile": "Profile"
|
||
},
|
||
"theme": {
|
||
"toggle": "Toggle theme",
|
||
"dark": "Dark",
|
||
"light": "Light"
|
||
},
|
||
"lang": {
|
||
"switch": "Switch language",
|
||
"en": "English",
|
||
"ru": "Русский"
|
||
},
|
||
"auth": {
|
||
"login_title": "Sign in",
|
||
"register_title": "Create account",
|
||
"admin_register_title": "Create admin account",
|
||
"email": "Email",
|
||
"username": "Username",
|
||
"password": "Password",
|
||
"password_confirm": "Confirm password",
|
||
"login_field": "Email or username",
|
||
"login_button": "Sign in",
|
||
"register_button": "Register",
|
||
"admin_token": "Admin invitation token",
|
||
"have_account": "Already have an account? Sign in",
|
||
"no_account": "No account? Register",
|
||
"logged_out": "You have been signed out.",
|
||
"login_success": "Signed in.",
|
||
"register_success": "Account created. You can sign in now.",
|
||
"admin_register_success": "Admin account created. You can sign in now.",
|
||
"login_failed": "Sign-in failed",
|
||
"register_failed": "Registration failed",
|
||
"session_expired": "Session expired, please sign in again.",
|
||
"username_hint": "Letters, numbers, and underscores only. No @ or other special characters.",
|
||
"username_invalid_chars": "Username can only contain letters, numbers, and underscores (a-z, A-Z, 0-9, _). @ and other special characters are not allowed.",
|
||
"recover_title": "Recover admin access",
|
||
"recover_help": "Disaster-recovery: creates a new admin account using the setup token. Use this when all admins have lost access.",
|
||
"recover_token_hint": "The setup token from the server config (admin.setup_token).",
|
||
"recover_button": "Create admin",
|
||
"recover_success": "Admin created. You can now log in.",
|
||
"recover_failed": "Recovery failed",
|
||
"recover_link": "Lost admin access? Recover here"
|
||
},
|
||
"worlds": {
|
||
"title": "Your Worlds",
|
||
"create_new": "Create new world",
|
||
"empty": "No worlds yet. Create your first one!",
|
||
"last_played": "Last played",
|
||
"never_played": "Not played yet",
|
||
"current_time": "Current time",
|
||
"player": "Player",
|
||
"default_name": "New World",
|
||
"delete_confirm": "Delete this world? This cannot be undone.",
|
||
"deleted": "World deleted.",
|
||
"delete_failed": "Failed to delete world.",
|
||
"load_failed": "Failed to load worlds.",
|
||
"play": "Play",
|
||
"edit": "Edit",
|
||
"not_found": "World not found.",
|
||
"status_draft": "Draft",
|
||
"status_building": "Building",
|
||
"status_ready": "Ready",
|
||
"status_failed": "Failed",
|
||
"status_archived": "Archived",
|
||
"restore": "Restore",
|
||
"continue_setup": "Continue setup",
|
||
"restored": "World restored.",
|
||
"restore_failed": "Failed to restore world.",
|
||
"delete_permanent": "Delete permanently",
|
||
"delete_permanent_confirm": "Permanently delete this world? This action cannot be undone and removes all steps, entities, and logs."
|
||
},
|
||
"builder": {
|
||
"title": "World Builder",
|
||
"step_choose_mode": "Choose creation mode",
|
||
"step_preset": "Pick a preset",
|
||
"step_form": "Configure details",
|
||
"step_building": "Building world…",
|
||
"mode_preset": "From preset",
|
||
"mode_form": "Custom form",
|
||
"preset_help": "Start from a pre-configured world template.",
|
||
"form_help": "Configure the world yourself with custom rules.",
|
||
"setting": "Setting",
|
||
"setting_help": "Describe the world setting (e.g. 'post-apocalyptic underground bunker').",
|
||
"setting_placeholder": "post-apocalyptic underground bunker",
|
||
"world_name": "World name",
|
||
"player_name": "Player character name",
|
||
"name_random_tip": "Roll a random name",
|
||
"name_random_failed": "Failed to fetch a random name.",
|
||
"notes": "Notes (optional)",
|
||
"notes_help": "Additional instructions for the Game Master.",
|
||
"language_en": "English",
|
||
"language_ru": "Russian",
|
||
"create_button": "Create world",
|
||
"creating": "Creating…",
|
||
"build_progress": "Build progress",
|
||
"phase": "Phase",
|
||
"step": "Step",
|
||
"of": "of",
|
||
"intro_scene": "Intro scene",
|
||
"build_complete": "World built successfully!",
|
||
"build_failed": "World build failed.",
|
||
"tool_call": "Tool call",
|
||
"llm_call": "LLM call",
|
||
"schema_generated": "World schema generated",
|
||
"environment_generated": "Environment generated",
|
||
"entities_generated": "Entities generated",
|
||
"retry_disabled": "Cannot retry — no world was created yet."
|
||
},
|
||
"editor": {
|
||
"title": "World Editor",
|
||
"instruction": "Instruction",
|
||
"instruction_placeholder": "Describe what to change about the world…",
|
||
"send": "Send",
|
||
"world_json": "World JSON",
|
||
"json_saved": "World JSON updated.",
|
||
"json_invalid": "Invalid JSON.",
|
||
"clarification": "Clarification needed",
|
||
"change_proposed": "Change proposed",
|
||
"comment": "Comment",
|
||
"assistant": "Assistant",
|
||
"apply_changes": "Apply changes",
|
||
"discard_changes": "Discard changes",
|
||
"changes_applied": "Changes applied.",
|
||
"changes_discarded": "Changes discarded.",
|
||
"edit_world": "Edit world",
|
||
"submit_instruction": "Submitting…",
|
||
"streaming": "Streaming…",
|
||
"accept": "Accept",
|
||
"reject": "Reject",
|
||
"your_answer": "Your answer",
|
||
"answer_placeholder": "Type your answer…",
|
||
"apply_failed": "Failed to apply changes.",
|
||
"discard_failed": "Failed to discard changes.",
|
||
"answer_failed": "Failed to submit answer.",
|
||
"cannot_play_draft": "Generate the intro scene first.",
|
||
"generate_intro_title": "Generate Intro Scene",
|
||
"generate_intro_help": "This world is still a draft. Generate the intro scene to make it playable.",
|
||
"generate_intro_button": "Generate Intro Scene",
|
||
"intro_generating": "Generating intro scene…",
|
||
"intro_complete": "Intro scene generated.",
|
||
"intro_failed": "Failed to generate intro scene.",
|
||
"intro_scene": "Intro scene",
|
||
"world_ready": "World is ready! You can now play.",
|
||
"regenerate_intro": "Regenerate intro scene"
|
||
},
|
||
"play": {
|
||
"title": "Play",
|
||
"environment": "Environment",
|
||
"location": "Location",
|
||
"time_of_day": "Time of day",
|
||
"weather": "Weather",
|
||
"player": "Player",
|
||
"hp": "HP",
|
||
"health": "Health",
|
||
"mana": "Mana",
|
||
"strength": "Strength",
|
||
"level": "Level",
|
||
"inventory": "Inventory",
|
||
"conditions": "Conditions",
|
||
"npcs": "NPCs",
|
||
"items": "Items",
|
||
"plot_rails": "Plot rails",
|
||
"hooks": "Hooks",
|
||
"current_goals": "Current goals",
|
||
"completed_goals": "Completed goals",
|
||
"no_env_data": "No environment data yet.",
|
||
"no_intro_scene": "This world has no intro scene yet. Go to Edit to generate one.",
|
||
"go_to_edit": "Go to Edit",
|
||
"edit_world": "Edit world",
|
||
"chat": "Chat",
|
||
"scene": "Scene",
|
||
"you": "You",
|
||
"game_master": "Game Master",
|
||
"action_placeholder": "What do you do?",
|
||
"send_action": "Send",
|
||
"sending": "Sending…",
|
||
"suggested_actions": "Suggested actions",
|
||
"no_suggestions": "No suggestions yet.",
|
||
"retry_last": "Retry last step",
|
||
"rollback": "Rollback one step",
|
||
"rollback_confirm": "Rollback the last step?",
|
||
"rolled_back": "Rolled back one step.",
|
||
"not_ready": "This world is not ready yet. Generate the intro scene first.",
|
||
"no_steps_to_retry": "No steps to retry yet.",
|
||
"no_steps_to_rollback": "No steps to rollback yet.",
|
||
"streaming": "AI is responding…",
|
||
"scene_chunk": "Scene",
|
||
"iteration_complete": "Step complete",
|
||
"trigger_fired": "Trigger fired",
|
||
"summary_generated": "Summary generated",
|
||
"load_failed": "Failed to load session.",
|
||
"no_actions_yet": "Take an action to begin."
|
||
},
|
||
"sse": {
|
||
"connecting": "Connecting…",
|
||
"connected": "Connected",
|
||
"disconnected": "Disconnected",
|
||
"error": "Connection error",
|
||
"reconnecting": "Reconnecting…"
|
||
},
|
||
"admin": {
|
||
"title": "Admin Dashboard",
|
||
"tab_settings": "Settings",
|
||
"tab_logs": "LLM Logs",
|
||
"tab_users": "Users",
|
||
"tab_stats": "Stats",
|
||
"tab_test": "Diagnostics",
|
||
"tab_icons": "Icons",
|
||
"not_admin": "You do not have admin access.",
|
||
"settings_saved": "Settings saved.",
|
||
"settings_save_failed": "Failed to save settings.",
|
||
"settings_load_failed": "Failed to load settings.",
|
||
"settings_hint": "Each card saves independently. Secret values (api_key) are masked after save.",
|
||
"expand_all": "Expand all",
|
||
"collapse_all": "Collapse all",
|
||
"no_changes": "No changes to save.",
|
||
"group_llm": "LLM Configuration",
|
||
"group_embeddings": "Embeddings",
|
||
"group_qdrant": "Qdrant",
|
||
"group_context": "Context Manager",
|
||
"group_ui": "UI Settings",
|
||
"group_game": "Game Settings",
|
||
"logs_filter_world": "World ID",
|
||
"logs_filter_stage": "Stage",
|
||
"logs_filter_status": "Status",
|
||
"logs_filter_apply": "Apply filters",
|
||
"logs_stage": "Stage",
|
||
"logs_status": "Status",
|
||
"logs_world": "World",
|
||
"logs_filtered": "filtered",
|
||
"logs_latency": "Latency",
|
||
"logs_tokens": "Tokens",
|
||
"logs_created": "Created",
|
||
"logs_detail": "Log detail",
|
||
"logs_prompt": "Prompt",
|
||
"logs_response": "Response",
|
||
"logs_error": "Error",
|
||
"logs_new_count": "{{count}} new",
|
||
"logs_pause": "Pause",
|
||
"logs_resume": "Resume",
|
||
"logs_auto_refresh_on": "Auto-refresh active (page 1, 5s).",
|
||
"logs_auto_refresh_off": "Auto-refresh paused.",
|
||
"logs_auto_refresh_tip": "Toggle auto-refresh (5s polling on page 1).",
|
||
"users_email": "Email",
|
||
"users_username": "Username",
|
||
"users_admin": "Admin",
|
||
"users_active": "Active",
|
||
"users_created": "Created",
|
||
"users_last_login": "Last login",
|
||
"users_make_admin": "Make admin",
|
||
"users_remove_admin": "Remove admin",
|
||
"users_activate": "Activate",
|
||
"users_deactivate": "Deactivate",
|
||
"stats_users": "Users",
|
||
"stats_worlds": "Worlds",
|
||
"stats_active_worlds": "Active Worlds",
|
||
"stats_archived": "Archived",
|
||
"stats_total_worlds": "Total Worlds",
|
||
"stats_steps": "Steps",
|
||
"stats_avg_latency": "Avg LLM latency",
|
||
"test_llm": "Test LLM",
|
||
"test_llm_tools": "Test LLM tools",
|
||
"test_embeddings": "Test embeddings",
|
||
"probe_dimension": "Probe dimension",
|
||
"recreate_collections": "Recreate collections",
|
||
"recreate_collections_hint": "Drops and recreates Qdrant collections based on current embeddings dimension.",
|
||
"recreate_dropped": "Dropped",
|
||
"recreate_created": "Created",
|
||
"test_provider_hint": "If provider=openai and api_url is empty, the system falls back to llm.api_url.",
|
||
"api_url": "API URL",
|
||
"api_key": "API key",
|
||
"model": "Model",
|
||
"provider": "Provider",
|
||
"run_test": "Run test",
|
||
"running": "Running…",
|
||
"result": "Result",
|
||
"elapsed_ms": "Elapsed (ms)",
|
||
"dimension": "Dimension",
|
||
"ok": "OK",
|
||
"failed": "Failed",
|
||
"icons_favicon": "Favicon",
|
||
"icons_logo": "Logo",
|
||
"icons_og": "Open Graph image",
|
||
"icons_upload": "Upload",
|
||
"icons_uploaded": "Icon uploaded.",
|
||
"icons_upload_failed": "Failed to upload icon.",
|
||
"choose_file": "Choose file",
|
||
"tool_calls_detected": "Tool calls detected",
|
||
"no_tool_calls_warning_title": "No tool calls returned",
|
||
"no_tool_calls_warning": "Model did not return tool calls. This may mean the model doesn't support function calling, or uses a non-standard format.",
|
||
"raw_response": "Raw LLM response",
|
||
"fetch_models": "Fetch models",
|
||
"fetched_models": "Available models",
|
||
"pick_model": "Pick a model…",
|
||
"fetch_models_failed": "Could not fetch model list. Enter the model name manually.",
|
||
"text_replacements_title": "Text Replacements",
|
||
"text_replacements_help": "These replacements are applied to all LLM scene text output. Use empty 'To' to remove a word/phrase entirely.",
|
||
"text_replacements_empty": "No replacement rules yet. Click 'Add rule' to create one.",
|
||
"text_replacements_from": "From",
|
||
"text_replacements_to": "To",
|
||
"text_replacements_add": "Add rule",
|
||
"setting_desc": {
|
||
"llm.api_url": "Chat completions endpoint URL for the LLM provider.",
|
||
"llm.api_key": "API key for the LLM provider (stored as string).",
|
||
"llm.model": "Default model name used for all LLM calls.",
|
||
"llm.max_tokens": "Maximum number of tokens to generate per response.",
|
||
"llm.timeout_seconds": "Request timeout in seconds.",
|
||
"llm.temperature_orchestrator": "Sampling temperature for the orchestrator phase (0–2).",
|
||
"llm.temperature_writer": "Sampling temperature for the scene writer phase (0–2).",
|
||
"llm.text_replacements": "JSON list of {from, to} text replacements applied to all LLM scene output.",
|
||
"embeddings.provider": "Embeddings provider: 'offline_hash' (no API) or 'openai'.",
|
||
"embeddings.api_url": "Embeddings API URL. If empty, falls back to llm.api_url.",
|
||
"embeddings.api_key": "Embeddings API key. If empty, falls back to llm.api_key.",
|
||
"embeddings.model": "Embeddings model name (default: text-embedding-3-small).",
|
||
"embeddings.dimension": "Vector dimension used by the Qdrant collection.",
|
||
"embeddings.batch_size": "Number of texts to embed per API request.",
|
||
"embeddings.timeout_seconds": "Embeddings API request timeout in seconds.",
|
||
"embeddings.cache_ttl_seconds": "Time-to-live for the in-memory embeddings cache.",
|
||
"embeddings.max_text_chars": "Maximum characters of text passed to the embeddings API per call.",
|
||
"qdrant.url": "Qdrant server URL.",
|
||
"qdrant.api_key": "Qdrant API key (optional — only if the server requires auth).",
|
||
"qdrant.collection_name": "Name of the Qdrant collection used for entity vectors.",
|
||
"context.guaranteed_messages": "Number of recent chat messages always kept in the LLM context window.",
|
||
"context.compression_threshold_messages": "When recent message count exceeds this, older messages are summarized.",
|
||
"context.compression_threshold_tokens": "When estimated token count exceeds this, older messages are summarized.",
|
||
"context.scene_text_truncate_tokens": "Maximum tokens of scene_text retained per step.",
|
||
"context.safety_margin_tokens": "Reserved token budget kept between context and model max_tokens.",
|
||
"context.auto_rag_on_entity_mention": "If true, automatically retrieve entity context when an entity is mentioned.",
|
||
"game.max_substeps_per_iteration": "Maximum number of tool-call sub-steps per player iteration.",
|
||
"game.max_suggested_actions": "Maximum number of suggested actions returned to the player.",
|
||
"game.deferred_triggers_enabled": "If true, deferred triggers may fire on subsequent iterations.",
|
||
"ui.page_title": "Page <title> shown in the browser tab.",
|
||
"ui.header_title": "Title shown in the navbar (falls back to page_title).",
|
||
"ui.favicon_url": "URL of the favicon.",
|
||
"ui.logo_url": "URL of the navbar logo image.",
|
||
"ui.og_image_url": "URL of the Open Graph image used for social previews.",
|
||
"ui.character_names.en": "Comma-separated list of English character names for the random-name button.",
|
||
"ui.character_names.ru": "Comma-separated list of Russian character names for the random-name button.",
|
||
"admin.setup_token": "Token required to create the first admin account."
|
||
}
|
||
},
|
||
"errors": {
|
||
"generic": "Something went wrong.",
|
||
"network": "Network error. Check your connection.",
|
||
"unauthorized": "Unauthorized.",
|
||
"not_found": "Not found.",
|
||
"server_error": "Server error.",
|
||
"forbidden": "Forbidden.",
|
||
"validation": "Validation error."
|
||
},
|
||
"toast": {
|
||
"error_title": "Error",
|
||
"success_title": "Success",
|
||
"warning_title": "Warning",
|
||
"info_title": "Info"
|
||
}
|
||
}
|