2026-06-20 19:13:05 +03:00
{
"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" ,
2026-06-21 02:41:48 +03:00
"session_expired" : "Session expired, please sign in again." ,
"username_hint" : "Letters, numbers, and underscores only. No @ or other special characters." ,
2026-06-21 06:12:28 +03:00
"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"
2026-06-20 19:13:05 +03:00
} ,
"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" ,
2026-06-21 07:52:25 +03:00
"default_name" : "New World" ,
2026-06-20 19:13:05 +03:00
"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" ,
2026-06-21 02:41:48 +03:00
"status_archived" : "Archived" ,
"restore" : "Restore" ,
2026-06-21 04:11:38 +03:00
"continue_setup" : "Continue setup" ,
2026-06-21 02:41:48 +03:00
"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."
2026-06-20 19:13:05 +03:00
} ,
"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." ,
2026-06-21 07:52:25 +03:00
"setting" : "Setting" ,
"setting_help" : "Describe the world setting (e.g. 'post-apocalyptic underground bunker')." ,
"setting_placeholder" : "post-apocalyptic underground bunker" ,
2026-06-20 19:13:05 +03:00
"world_name" : "World name" ,
"player_name" : "Player character name" ,
2026-06-21 07:52:25 +03:00
"name_random_tip" : "Roll a random name" ,
"name_random_failed" : "Failed to fetch a random name." ,
2026-06-20 19:13:05 +03:00
"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" ,
2026-06-21 04:11:38 +03:00
"entities_generated" : "Entities generated" ,
"retry_disabled" : "Cannot retry — no world was created yet."
2026-06-20 19:13:05 +03:00
} ,
"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" ,
2026-06-21 07:52:25 +03:00
"assistant" : "Assistant" ,
2026-06-20 19:13:05 +03:00
"apply_changes" : "Apply changes" ,
"discard_changes" : "Discard changes" ,
"changes_applied" : "Changes applied." ,
"changes_discarded" : "Changes discarded." ,
"edit_world" : "Edit world" ,
"submit_instruction" : "Submitting…" ,
2026-06-21 04:11:38 +03:00
"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"
2026-06-20 19:13:05 +03:00
} ,
"play" : {
"title" : "Play" ,
"environment" : "Environment" ,
"location" : "Location" ,
"time_of_day" : "Time of day" ,
"weather" : "Weather" ,
"player" : "Player" ,
"hp" : "HP" ,
2026-06-21 07:52:25 +03:00
"health" : "Health" ,
"mana" : "Mana" ,
"strength" : "Strength" ,
2026-06-20 19:13:05 +03:00
"level" : "Level" ,
"inventory" : "Inventory" ,
"conditions" : "Conditions" ,
"npcs" : "NPCs" ,
"items" : "Items" ,
"plot_rails" : "Plot rails" ,
2026-06-21 07:52:25 +03:00
"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" ,
2026-06-20 19:13:05 +03:00
"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." ,
2026-06-21 04:11:38 +03:00
"not_ready" : "This world is not ready yet. Generate the intro scene first." ,
2026-06-21 02:41:48 +03:00
"no_steps_to_retry" : "No steps to retry yet." ,
"no_steps_to_rollback" : "No steps to rollback yet." ,
2026-06-20 19:13:05 +03:00
"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." ,
2026-06-21 07:52:25 +03:00
"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." ,
2026-06-21 02:41:48 +03:00
"group_llm" : "LLM Configuration" ,
2026-06-20 19:13:05 +03:00
"group_embeddings" : "Embeddings" ,
"group_qdrant" : "Qdrant" ,
2026-06-21 02:41:48 +03:00
"group_context" : "Context Manager" ,
"group_ui" : "UI Settings" ,
"group_game" : "Game Settings" ,
2026-06-20 19:13:05 +03:00
"logs_filter_world" : "World ID" ,
"logs_filter_stage" : "Stage" ,
"logs_filter_status" : "Status" ,
"logs_filter_apply" : "Apply filters" ,
"logs_stage" : "Stage" ,
"logs_status" : "Status" ,
2026-06-21 06:12:28 +03:00
"logs_world" : "World" ,
"logs_filtered" : "filtered" ,
2026-06-20 19:13:05 +03:00
"logs_latency" : "Latency" ,
"logs_tokens" : "Tokens" ,
"logs_created" : "Created" ,
"logs_detail" : "Log detail" ,
"logs_prompt" : "Prompt" ,
"logs_response" : "Response" ,
"logs_error" : "Error" ,
2026-06-21 07:52:25 +03:00
"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)." ,
2026-06-20 19:13:05 +03:00
"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" ,
2026-06-21 02:41:48 +03:00
"stats_active_worlds" : "Active Worlds" ,
"stats_archived" : "Archived" ,
"stats_total_worlds" : "Total Worlds" ,
2026-06-20 19:13:05 +03:00
"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" ,
2026-06-21 07:52:25 +03:00
"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." ,
2026-06-20 19:13:05 +03:00
"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." ,
2026-06-21 04:11:38 +03:00
"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." ,
2026-06-21 06:12:28 +03:00
"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" ,
2026-06-21 07:52:25 +03:00
"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."
}
2026-06-20 19:13:05 +03:00
} ,
"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"
}
}