# Single source of truth for every user-facing control-console and OBS string. # Keys are stable API; add a value to every locale before using a new key. default_language = "zh-CN" [locales."zh-CN"] name = "简体中文" [locales."zh-CN".messages] "language.label" = "语言" "language.save_failed" = "语言偏好保存失败,请稍后重试。" "brand.name" = "直播组件控制台" "brand.tagline" = "OBS 组件工作室" "common.star" = "星" "common.cloud" = "云" "common.copy" = "复制" "common.copied" = "已复制" "common.cancel" = "取消" "common.revoke" = "撤销" "common.save" = "保存" "common.loading" = "正在加载…" "common.user" = "用户" "common.system_admin" = "系统管理员" "common.enabled" = "运行中" "common.disabled" = "已停用" "common.connected" = "已连接" "common.disconnected" = "未连接" "common.permanent" = "永久" "common.viewer" = "直播间观众" "common.not_provided" = "未提供" "common.gift" = "礼物" "common.guard" = "舰长" "common.failed" = "操作失败,请稍后再试" "api.offline" = "当前处于离线状态,操作没有提交;联网后请重试。" "api.http_error" = "请求失败(HTTP {status})" "api.error.invalid_input" = "输入内容无效,请检查后重试。" "api.error.invalid_credentials" = "用户名、动态验证码或会话无效。" "api.error.forbidden" = "当前账户没有执行此操作的权限。" "api.error.not_found" = "请求的资源不存在。" "api.error.room_unavailable" = "该直播间已经被其他账户使用。" "api.error.cookiecloud_invalid" = "CookieCloud 凭据无效或无法取得 Bilibili Cookie。" "api.error.cookiecloud_host_not_allowed" = "该 CookieCloud 地址不在部署白名单中。" "api.error.invalid_component_token" = "OBS 访问令牌无效或已经轮换。" "api.error.component_not_found" = "组件不存在或已经停用。" "api.error.offline" = "当前离线,操作尚未提交。" "api.error.setup_completed" = "系统初始化已经完成。" "api.error.rate_limited" = "尝试次数过多,请稍后重试。" "api.error.invalid_bootstrap_proof" = "一次性初始化口令无效。" "api.error.invalid_scope" = "请求的列表范围无效。" "api.error.song_component_not_found" = "点歌姬不存在或已停用。" "api.error.component_invalid" = "组件配置或类型无效。" "api.error.component_connection_limit" = "OBS 组件连接数已达上限。" "api.error.authentication_required" = "请先登录后再继续。" "api.error.system_admin_required" = "该操作需要系统管理员权限。" "api.error.cross_site_request" = "已拒绝跨站请求。" "api.error.origin_mismatch" = "请求来源与本站不匹配。" "api.error.enrollment_rate_limited" = "注册尝试过于频繁,请稍后重试。" "api.error.invitation_unavailable" = "邀请码无效、已过期或已使用。" "api.error.enrollment_unavailable" = "注册流程无效或已过期。" "api.error.totp_reset_unavailable" = "TOTP 重置流程无效或已过期,请重新开始。" "api.error.account_unavailable" = "账户不可用或用户名已被使用。" "api.error.song_request_not_found" = "点歌记录不存在。" "api.error.song_request_conflict" = "点歌队列已变化,请刷新后重试。" "api.error.invalid_song_request" = "点歌操作无效。" "api.error.internal_error" = "服务器暂时无法完成操作。" "main.obs_missing_credentials" = "OBS 地址缺少组件标识或访问令牌" "main.obs_invalid_token" = "OBS 访问令牌无效或已经轮换" "main.obs_connecting" = "正在连接组件…" "main.redirecting" = "正在前往控制台…" "main.not_found_title" = "这里没有组件" "main.not_found_description" = "地址可能已经失效,或者组件已被所属用户删除。" "main.back_to_console" = "返回控制台" "main.auth_unavailable" = "无法连接认证服务" "main.offline_title" = "控制台目前处于离线状态" "main.unavailable_title" = "控制台暂时无法连接" "main.offline_description" = "应用外壳已离线打开,但账户、直播源和组件数据不会缓存。联网后即可重新验证会话。" "main.retry" = "重新连接" "main.verifying_session" = "正在验证安全会话…" "main.not_found_eyebrow" = "404 · 迷失云间" "main.offline_eyebrow" = "离线应用" "main.connection_error_eyebrow" = "连接错误" "auth.totp_qr_alt" = "TOTP 验证器绑定二维码" "auth.qr_unavailable" = "二维码暂不可用,请使用右侧密钥手工添加。" "auth.bind_authenticator" = "绑定动态验证器" "auth.totp_step_scan" = "使用 1Password、Aegis、Microsoft Authenticator 等应用扫描二维码。" "auth.totp_step_manual" = "若无法扫码,选择“输入设置密钥”。" "auth.totp_step_confirm" = "输入应用中出现的 6 位动态码完成绑定。" "auth.manual_key" = "手工设置密钥" "auth.recovery_file_title" = "直播组件控制台恢复码" "auth.recovery_file_warning" = "每个恢复码只能使用一次,请离线妥善保存。" "auth.security_complete" = "安全设置完成" "auth.save_recovery_codes" = "保存账户恢复码" "auth.recovery_description" = "手机丢失或验证器不可用时,可用恢复码登录。服务端不会再次显示这些明文恢复码。" "auth.no_recovery_codes" = "服务端没有返回恢复码,请先联系管理员确认恢复策略。" "auth.copy_all" = "复制全部" "auth.download_text" = "下载文本" "auth.recovery_saved" = "我已妥善保存" "auth.login_blocker" = "完成或清空正在填写的登录表单" "auth.login_failed" = "用户名或动态验证码不正确" "auth.product_eyebrow" = "直播组件" "auth.login_title" = "回到你的控制台" "auth.first_deployment" = "首次部署?" "auth.create_admin" = "创建系统管理员" "auth.have_invitation" = "持有邀请码?" "auth.register_account" = "注册新账户" "auth.passwordless_description" = "这是无密码账户。输入用户名与验证器中的动态验证码即可登录。" "auth.username" = "用户名" "auth.recovery_code" = "账户恢复码" "auth.totp_code" = "6 位动态验证码" "auth.recovery_placeholder" = "输入一个尚未使用的恢复码" "auth.use_totp" = "改用动态验证码" "auth.use_recovery" = "验证器不可用?改用恢复码" "auth.verifying" = "正在验证…" "auth.login" = "安全登录" "auth.enrollment_blocker" = "完成 TOTP 绑定并保存一次性恢复码" "auth.registration_blocker" = "完成或清空正在填写的注册表单" "auth.registration_missing_id" = "服务端未返回注册流程标识" "auth.registration_start_failed" = "无法开始安全注册流程" "auth.registration_confirm_failed" = "动态验证码无效或注册流程已过期" "auth.setup_step_two" = "系统初始化 · 第二步" "auth.register_step_two" = "邀请码注册 · 第二步" "auth.require_totp" = "强制绑定 TOTP" "auth.authenticator_code" = "验证器中的 6 位动态码" "auth.confirming" = "正在确认…" "auth.confirm_create" = "确认绑定并创建账户" "auth.setup_only" = "仅首次部署可用" "auth.invited_only" = "仅限受邀用户" "auth.create_your_account" = "创建你的账户" "auth.already_account" = "已有账户?" "auth.back_to_login" = "返回登录" "auth.setup_description" = "首位账户将拥有邀请码管理权限。旧管理员口令只授权这一次初始化,不会成为账户密码。" "auth.register_description" = "邀请码只用于注册;这是无密码账户,创建后每次登录都必须验证 TOTP。" "auth.invitation" = "邀请码" "auth.bootstrap_password" = "一次性初始化口令" "auth.bootstrap_help" = "填写部署配置中的旧管理员口令;它仅验证初始化权限,不会保存为用户密码。" "auth.preparing_totp" = "正在准备 TOTP…" "auth.next_bind" = "下一步:绑定验证器" "nav.back_components" = "返回组件控制台" "nav.console" = "控制台导航" "nav.components" = "我的组件" "nav.account" = "直播账户" "nav.invitations" = "邀请码" "nav.logout" = "退出" "settings.theme" = "主题" "settings.font_family" = "中文字体" "settings.font_family_description" = "字体随服务提供并由 OBS 同域加载,不依赖设备已安装字体。" "settings.font_family.song" = "思源宋体 · 端正" "settings.font_family.fang_song" = "小薇体 · 清雅" "settings.font_family.kai" = "霞鹜文楷 · 书卷" "settings.font_family.liyu_shoushu" = "漓雨手书 · 毛笔手写" "settings.font_brightness" = "文字亮度" "settings.font_brightness_description" = "只提亮文字,不改变透明背景、礼物图片或直播画面。" "settings.viewer_color" = "用户昵称颜色" "settings.danmaku_color" = "弹幕内容颜色" "settings.use_theme_color" = "跟随主题" "settings.text_color_description" = "选择后覆盖主题颜色;恢复后会随主题自动变化。" "settings.font_size" = "字号" "settings.decoration_line_weight" = "装饰线粗细" "settings.decoration_line_weight_description" = "统一调整主题边框、分隔线和上下古风装饰边缘的视觉粗细。" "settings.max_visible" = "最大可见条数" "settings.auto_collapse" = "自动收缩" "settings.unfold_duration" = "卷轴展开时长" "settings.motion_intensity" = "动效强度" "settings.particle_count" = "每卡粒子数量" "settings.particle_speed" = "粒子动画速度" "settings.show_events" = "显示事件" "settings.event.danmaku" = "弹幕" "settings.event.enter" = "进房" "settings.event.gift" = "礼物" "settings.event.superchat" = "醒目留言" "settings.event.guard" = "舰长" "settings.event.like" = "点赞" "settings.event.share" = "分享" "settings.low_performance" = "低性能模式" "settings.high_gift" = "高价值礼物阈值(厘)" "settings.featured_gift" = "特别高价值阈值(厘)" "settings.saving" = "正在保存…" "settings.save_sync" = "保存并实时同步" "preview.adaptive" = "自适应预览" "preview.adaptive_description" = "预设只改变预览尺寸;OBS 浏览器源仍可使用任意宽高。" "preview.narrow" = "窄侧栏" "preview.portrait" = "竖屏" "preview.hd_portrait" = "高清竖栏" "preview.horizontal" = "横向条" "song.settings.scroll_speed" = "滚动速度" "song.settings.edge_pause" = "两端暂停" "song.settings.requester_color" = "点歌用户颜色" "song.settings.title_color" = "歌名颜色" "song.settings.limits" = "可选防刷限制(0 表示不限制)" "song.settings.queue_limit" = "队列上限" "song.settings.viewer_limit" = "每位观众上限" "song.settings.cooldown" = "点歌冷却(秒)" "song.preview.title" = "点歌姬预览" "song.preview.description" = "当前歌曲固定在顶部;待唱列表溢出后会往返滚动。" "source.blocker" = "保存或还原直播源与 CookieCloud 设置" "source.saved" = "账户直播源已保存,所有组件会共享这条事件流。" "source.save_failed" = "直播源保存失败" "source.title" = "Bilibili 直播源" "source.description" = "每个账户只有一条监听连接和一份 CookieCloud 凭据;监听事件会提供给本账户的所有组件。" "source.current_room" = "当前直播间 ID" "source.room_help" = "保存后会断开原直播间并立即切换监听;已配置的组件和 OBS 地址不变。" "source.cookiecloud_host" = "CookieCloud 地址" "source.host_placeholder" = "https://cookie.example.com" "source.cookiecloud_key" = "CookieCloud UUID / Key" "source.cookiecloud_password" = "CookieCloud 密码" "source.secret_keep" = "已设置;留空保持不变" "source.key_placeholder" = "请输入同步 UUID / Key" "source.password_placeholder" = "请输入同步密码" "source.validating" = "正在验证并保存…" "source.save" = "保存直播源" "obs.blocker" = "复制并妥善保存本次生成的 OBS 地址" "obs.status_failed" = "无法读取当前组件的 OBS 令牌状态" "obs.rotate_confirm" = "轮换后,所有使用旧地址的 OBS 浏览器源会立即失效。确定继续吗?" "obs.token_created" = "新 OBS 令牌已生成。请立即复制,离开本页后不会再次显示明文令牌。" "obs.rotate_failed" = "无法轮换 OBS 令牌" "obs.address_copied" = "OBS 浏览器源地址已复制。" "obs.copy_blocked" = "浏览器阻止了复制,请手工选择下方地址。" "obs.access_title" = "OBS 只读访问" "obs.access_description" = "令牌仅能订阅这一组件;轮换不会影响账户登录或其他组件。" "obs.access_status" = "访问状态" "obs.token_ready" = "已生成令牌" "obs.token_missing" = "尚未生成" "obs.public_id" = "组件公开标识" "obs.last_rotated" = "最近轮换" "obs.generated_address" = "本次生成的 OBS 地址" "obs.generating" = "正在生成…" "obs.rotate" = "轮换令牌" "obs.generate" = "生成 OBS 地址" "obs.copy_address" = "复制地址" "test.default_viewer" = "测试观众" "test.default_text" = "今天也要闪闪发光!" "test.default_gift" = "小花花" "test.default_guard" = "舰长" "test.sent" = "测试事件已发送到当前组件。" "test.failed" = "测试事件发送失败" "test.title" = "事件测试" "test.description" = "模拟事件只进入当前用户、当前组件,不会向 Bilibili 发送消息。" "test.event_type" = "事件类型" "test.enter" = "进入直播间" "test.uid" = "测试 UID" "test.nickname" = "测试昵称" "test.danmaku_text" = "弹幕内容" "test.gift_name" = "礼物名称" "test.gift_id" = "礼物 ID(可选)" "test.gift_id_placeholder" = "用于测试指定礼物菜单项" "test.quantity" = "数量" "test.battery" = "电池数" "test.guard" = "上舰" "test.guard_name" = "舰队身份" "test.price" = "价值(电池)" "test.sending" = "正在发送…" "test.trigger" = "触发测试事件" "components.title" = "我的组件" "components.eyebrow" = "直播组件" "components.empty_title" = "还没有组件" "components.empty_description" = "账户初始化完成后,服务会为每种内置组件创建一个初始实例。" "components.danmaku_mark" = "弹" "components.song_mark" = "歌" "components.gift_mark" = "礼" "components.gift_menu_mark" = "单" "components.generic_mark" = "件" "components.danmaku_type" = "直播弹幕姬" "components.song_type" = "直播点歌姬" "components.gift_type" = "全屏礼物星雨" "components.gift_menu_type" = "直播礼物菜单" "components.add_instance" = "添加组件实例" "components.add_instance_description" = "同一类型可以添加多个实例,每个实例单独保存样式和 OBS 地址。" "components.instance_type" = "组件类型" "components.instance_name" = "实例名称" "components.instance_name_placeholder" = "例如:竖屏场景" "components.create_instance" = "添加实例" "components.creating" = "正在添加…" "components.create_blocker" = "完成或清空正在填写的组件实例名称" "components.discard_changes_confirm" = "当前组件有尚未保存的设置。确定放弃这些修改吗?" "components.created" = "组件实例已添加,可以单独配置样式和 OBS 地址。" "components.create_failed" = "无法添加组件实例" "components.delete_instance" = "删除实例" "components.deleting" = "正在删除…" "components.delete_confirm" = "确定删除“{name}”吗?它的 OBS 地址、令牌和组件数据将同时失效。" "components.deleted" = "组件实例已删除。" "components.delete_failed" = "无法删除组件实例;每种类型至少需要保留一个实例。" "components.settings_blocker" = "保存或还原当前组件设置" "components.settings_load_failed" = "无法读取组件设置" "components.load_failed" = "控制台数据加载失败" "components.settings_saved" = "组件设置已保存,并实时同步到已连接的 OBS。" "components.settings_save_failed" = "组件设置保存失败" "components.loading" = "正在打开控制台…" "components.danmaku_settings" = "弹幕姬设置" "components.danmaku_description" = "每一项都独立保存在当前用户的组件下。" "components.song_settings" = "点歌姬设置" "components.song_description" = "观众发送「点歌 歌名」入队,发送「打分 1-5」评价当前歌曲。" "components.gift_settings" = "全屏礼物特效设置" "components.gift_description" = "礼物化作流星横跨透明画布;舰长、提督和总督触发全屏星光献礼。" "components.gift_menu_settings" = "礼物菜单设置" "components.gift_menu_description" = "把当前直播间的礼物、大航海身份或指定电池单价映射为主播提供的直播内容。" "components.open_song_stats" = "打开点歌统计" "components.generic_settings" = "组件设置" "components.no_editor" = "该组件类型的设置编辑器尚未安装。" "components.welcome" = "欢迎来到直播控制台" "components.none_configurable" = "当前账户还没有可配置的组件。" "account.load_failed" = "无法读取账户直播源" "account.title" = "直播账户" "account.eyebrow" = "账户直播源" "account.description" = "配置一次直播间与 CookieCloud,供当前账户下所有现有及未来组件使用。" "account.loading" = "正在读取账户直播源…" "security.title" = "账户安全" "security.description" = "为当前登录账户更换 TOTP 验证器;旧密钥会保持有效,直到新动态码确认成功。" "security.totp_reset_warning" = "需要使用当前动态验证码或一个未使用的恢复码再次验证身份。重置成功后,其他网页登录会话将被撤销。" "security.current_totp_code" = "当前 6 位动态验证码" "security.use_recovery_for_reset" = "验证器不可用?使用恢复码重置" "security.start_totp_reset" = "开始更换验证器" "security.preparing_totp" = "正在生成新 TOTP…" "security.totp_reset_start_failed" = "无法开始 TOTP 重置" "security.totp_reset_missing_id" = "服务端没有返回有效的 TOTP 重置标识" "security.old_totp_still_active" = "扫描并确认新二维码前,原有 TOTP 仍然有效;此时取消不会锁定账户。" "security.new_totp_code" = "新验证器中的 6 位动态验证码" "security.confirm_totp_reset" = "确认并启用新 TOTP" "security.cancel_totp_reset" = "取消本次重置" "security.totp_reset_cancelled" = "已取消;原有 TOTP 未被修改。" "security.totp_reset_confirm_failed" = "新动态验证码无效,或重置流程已经过期" "security.recovery_replaced" = "TOTP 已更换。原恢复码全部失效;以下新恢复码仅显示一次,请立即离线保存。" "security.totp_reset_complete" = "新 TOTP 和恢复码已启用。" "security.totp_reset_blocker" = "完成或取消 TOTP 重置,并保存新的一次性恢复码" "song.queue_changing" = "点歌队列正在频繁变化,请稍后重试" "song.queue_load_failed" = "点歌队列读取失败" "song.cancel_confirm" = "确定取消「{title}」吗?" "song.promoted" = "已移到下一首。" "song.completed" = "已完成并自动切换下一首。" "song.cancelled" = "已取消点歌。" "song.action_failed" = "队列操作失败" "song.clear_queue" = "一键清空队列" "song.clearing" = "正在清空…" "song.clear_confirm" = "确定清空当前歌曲和全部待唱歌曲吗?它们会被标记为已取消并保留在历史记录中。" "song.cleared" = "已清空点歌队列,共取消 {count} 首歌曲。" "song.clear_failed" = "清空点歌队列失败" "song.stats_title" = "点歌统计与队列" "song.stats_eyebrow" = "点歌队列管理" "song.back_settings" = "返回组件设置" "song.stat.active" = "活动点歌" "song.stat.completed" = "已经完成" "song.stat.cancelled" = "已经取消" "song.stat.ratings" = "累计评分" "song.current" = "当前歌曲" "song.current_description" = "完成或取消当前歌曲后,队首会自动接替。" "song.average_score" = "平均 {score} 分 · {count} 人评分" "song.no_rating" = "尚无评分" "song.complete_current" = "完成当前歌曲" "song.no_current" = "当前没有正在演唱的歌曲。" "song.queue_title" = "待唱队列({count})" "song.queue_description" = "置顶会把歌曲移动为下一首,不会打断当前歌曲。" "song.promote" = "移到下一首" "song.queue_empty" = "待唱队列为空。" "song.queue_loading" = "正在读取完整队列…" "song.history" = "近期历史" "song.history_description" = "长期历史保存在数据库中;此处显示最近 50 条。" "song.column.title" = "歌曲" "song.column.requester" = "点歌用户" "song.column.result" = "结果" "song.column.rating" = "评分" "song.column.finished" = "结束时间" "song.status.completed" = "已完成" "song.status.cancelled" = "已取消" "song.no_history" = "尚无历史记录。" "invitation.blocker" = "复制并妥善保存本次生成的一次性邀请码" "invitation.load_failed" = "邀请码读取失败" "invitation.created" = "邀请码已创建。明文只显示这一次。" "invitation.create_failed" = "邀请码创建失败" "invitation.revoke_confirm" = "确定撤销这个邀请码吗?尚未完成的注册会立即失效。" "invitation.revoked" = "邀请码已撤销。" "invitation.revoke_failed" = "邀请码撤销失败" "invitation.title" = "邀请码管理" "invitation.eyebrow" = "系统管理" "invitation.admin_only" = "仅系统管理员" "invitation.create" = "创建邀请码" "invitation.create_description" = "默认单次使用、24 小时有效;邀请码只用于注册,不能用于日常登录。" "invitation.initial_room" = "初始 Bilibili 直播间 ID" "invitation.valid_hours" = "有效小时数" "invitation.creating" = "正在创建…" "invitation.one_time" = "仅显示一次" "invitation.copy_code" = "复制邀请码" "invitation.copy_link" = "复制注册链接" "invitation.history" = "历史邀请码" "invitation.history_description" = "列表不包含邀请码明文,只显示可审计的状态和使用次数。" "invitation.column.room" = "直播间" "invitation.column.prefix" = "邀请码前缀" "invitation.column.created" = "创建时间" "invitation.column.expires" = "有效期" "invitation.column.status" = "状态" "invitation.status.revoked" = "已撤销" "invitation.status.expired" = "已过期" "invitation.status.used" = "已使用" "invitation.status.available" = "可使用" "invitation.empty" = "尚未创建邀请码。" "forbidden.title" = "没有访问权限" "forbidden.description" = "邀请码管理仅对系统管理员开放。" "forbidden.back" = "返回我的组件" "overlay.enter" = "进入了直播间" "overlay.guard" = "开通 {guard}" "overlay.like" = "点亮了一颗星" "overlay.share" = "分享了直播间" "overlay.gift" = "献上 {gift} ×{quantity}" "overlay.interaction" = "送来了一份互动" "overlay.preview_viewer" = "青玉观众" "overlay.preview_message" = "今天也要闪闪发光!" "overlay.preview_gift_viewer" = "星光旅人" "overlay.preview_gift" = "甜蜜告白" "song.overlay.preview_title" = "星河入梦" "song.overlay.preview_viewer" = "青玉观众" "song.overlay.preview_titles" = "晚风告白|月下花笺|云海来信|落星成诗" "song.overlay.preview_viewers" = "星光旅人|花间客|小瓷片|月桂" "song.overlay.score" = "{score} ★ · {count} 人" "song.overlay.current_aria" = "当前歌曲" "song.overlay.sing_mark" = "唱" "song.overlay.now_singing" = "正在演唱 · {viewer} 点歌" "song.overlay.waiting" = "等待弹幕点歌" "song.overlay.request_help" = "发送「点歌 歌名」加入队列" "song.overlay.rate_help" = "发送「打分 1-5」" "song.overlay.queue_aria" = "待唱队列" "song.overlay.queue_title" = "待唱列表" "song.overlay.queue_empty" = "下一首,会由谁来点呢?" "theme.jade_scroll.name" = "青玉花卷" "theme.jade_scroll.description" = "暗蓝青玉玻璃、古风花纹、星花粒子与横向卷轴展开。" "theme.moonlit_water.name" = "静夜曲水" "theme.moonlit_water.description" = "完全透明的月夜水色主题:青黛与米金衬线文字、细金分隔线和克制的花星微光。" "gift.theme.jade_starfall.name" = "青玉星落" "gift.theme.jade_starfall.description" = "青玉、流光花卷与金色星尘组成的古风礼物流星。" "gift.theme.moonlit_water.name" = "静夜曲水" "gift.theme.moonlit_water.description" = "50 元以下礼物以水纹短笺轻声出现;50 元及以上礼物与大航海触发透明全屏月下清供。" "gift.settings.thresholds" = "礼物价值分档(原始价格,1000 = 1 元)" "gift.settings.high_threshold" = "高价值阈值" "gift.settings.featured_threshold" = "特别高价值阈值" "gift.settings.tiers" = "分档流星参数" "gift.settings.tiers_description" = "流星大小以 1920×1080 为参考,其他 OBS 尺寸会按实际视口自适应。" "gift.settings.tier.normal" = "普通礼物" "gift.settings.tier.high" = "高价礼物" "gift.settings.tier.featured" = "特别高价礼物" "gift.settings.count" = "流星数量" "gift.settings.size" = "礼物主体大小" "gift.settings.speed" = "飞行速度" "gift.settings.trail" = "拖尾强度" "gift.settings.guard_stars" = "大航海星光数量" "gift.settings.guard_duration" = "大航海全屏时长" "gift.settings.concurrent" = "最大同时特效数" "gift.preview.title" = "全屏礼物特效预览" "gift.preview.description" = "预览按 16:9 缩放显示;OBS 浏览器源默认可用 1920×1080,也可使用任意分辨率。" "gift.preview.normal_button" = "预览普通礼物" "gift.preview.high_button" = "预览高价礼物" "gift.preview.featured_button" = "预览特别礼物" "gift.preview.guard_button" = "预览舰长特效" "gift.preview.viewer" = "星光观众" "gift.preview.normal" = "小花花" "gift.preview.high" = "青玉献礼" "gift.preview.featured" = "星河之梦" "gift.preview.guard" = "舰长" "gift.guard_aria" = "大航海全屏庆祝特效" "gift.guard_salute" = "星河为你闪耀" "gift.guard_title" = "{guard}·星光献礼" "gift.guard_viewer" = "感谢 {viewer} 的守护" "gift.moonlit.ceremony_label" = "月下清供" "gift_menu.theme.jade_banquet.name" = "青玉华宴" "gift_menu.theme.jade_banquet.description" = "青玉玻璃、流金花枝和星光高亮组成的古风礼物菜单。" "gift_menu.theme.moonlit_water.name" = "静夜曲水" "gift_menu.theme.moonlit_water.description" = "全透明的月夜礼物清单,以青黛、米金文字和细水纹高亮呈现。" "gift_menu.catalog.title" = "当前直播间礼物目录" "gift_menu.catalog.loading" = "正在读取礼物与图标…" "gift_menu.catalog.count" = "已加载 {count} 种礼物" "gift_menu.catalog.refresh" = "立即刷新礼物目录" "gift_menu.catalog.failed" = "礼物目录读取失败" "gift_menu.editor.add_title" = "添加菜单项" "gift_menu.editor.trigger_type" = "触发类型" "gift_menu.trigger.gift" = "指定普通礼物" "gift_menu.trigger.guard" = "指定大航海身份" "gift_menu.trigger.battery" = "指定礼物单价" "gift_menu.editor.gift" = "直播间礼物" "gift_menu.editor.gift_option" = "{name} · {battery} 电池" "gift_menu.editor.guard_level" = "大航海身份" "gift_menu.editor.battery_amount" = "单价电池数" "gift_menu.editor.description" = "对应直播内容" "gift_menu.editor.description_placeholder" = "例如:点歌一首 / 学唱一首歌" "gift_menu.editor.add" = "加入礼物菜单" "gift_menu.editor.description_required" = "请填写该礼物对应的直播内容。" "gift_menu.editor.gift_required" = "请先从当前直播间目录选择礼物。" "gift_menu.editor.duplicate" = "这个触发条件已经存在于菜单中。" "gift_menu.editor.empty" = "还没有菜单项,请从上方添加。" "gift_menu.editor.move_up" = "上移菜单项" "gift_menu.editor.move_down" = "下移菜单项" "gift_menu.editor.remove" = "移除" "gift_menu.guard.captain" = "舰长" "gift_menu.guard.admiral" = "提督" "gift_menu.guard.governor" = "总督" "gift_menu.guard_mark.captain" = "舰" "gift_menu.guard_mark.admiral" = "提" "gift_menu.guard_mark.governor" = "总" "gift_menu.battery_mark" = "电" "gift_menu.settings.visible_rows" = "最多展示行数" "gift_menu.settings.rows_per_page" = "每页展示行数" "gift_menu.settings.row_height" = "每行高度" "gift_menu.settings.scroll_speed" = "循环滚动速度" "gift_menu.settings.page_interval" = "换页间隔" "gift_menu.settings.highlight_duration" = "触发高亮时长" "gift_menu.settings.font_scale" = "文字缩放" "gift_menu.settings.motion" = "动效强度" "gift_menu.unit.pixels" = "{value} 像素" "gift_menu.unit.speed" = "{value} 像素/秒" "gift_menu.unit.seconds" = "{value} 秒" "gift_menu.preview.title" = "礼物菜单预览" "gift_menu.preview.description" = "点击任意菜单行可预览定位与渐变高亮动画。" "gift_menu.aria" = "直播间礼物菜单" "gift_menu.overlay.battery" = "电池 ×{amount}" "gift_menu.overlay.triggered_by" = "{viewer} 已触发" "gift_menu.overlay.empty" = "请先在控制台配置礼物菜单" "pwa.blocked" = "暂时不能更新,请先处理以下内容:\n\n{reasons}" "pwa.confirm_update" = "更新会刷新控制台。请先保存设置、邀请码、恢复码或刚轮换的 OBS 令牌,确定现在更新吗?" "pwa.offline" = "离线" "pwa.update" = "更新可用" "pwa.install" = "安装到设备" "pwa.manifest.name" = "直播组件控制台" "pwa.manifest.short_name" = "直播控制台" "pwa.manifest.description" = "直播组件与 OBS 浏览器源控制台" [locales."en-US"] name = "English" [locales."en-US".messages] "language.label" = "Language" "language.save_failed" = "Could not save the language preference. Try again later." "brand.name" = "Live Component Console" "brand.tagline" = "OBS COMPONENT STUDIO" "common.star" = "Star" "common.cloud" = "Cloud" "common.copy" = "Copy" "common.copied" = "Copied" "common.cancel" = "Cancel" "common.revoke" = "Revoke" "common.save" = "Save" "common.loading" = "Loading…" "common.user" = "User" "common.system_admin" = "System administrator" "common.enabled" = "Running" "common.disabled" = "Disabled" "common.connected" = "Connected" "common.disconnected" = "Disconnected" "common.permanent" = "Never" "common.viewer" = "Viewer" "common.not_provided" = "Not provided" "common.gift" = "Gift" "common.guard" = "Guard" "common.failed" = "The operation failed. Please try again later." "api.offline" = "You are offline. Nothing was submitted; reconnect and try again." "api.http_error" = "Request failed (HTTP {status})" "api.error.invalid_input" = "Check the entered values and try again." "api.error.invalid_credentials" = "The username, verification code, or session is invalid." "api.error.forbidden" = "This account is not allowed to perform that operation." "api.error.not_found" = "The requested resource does not exist." "api.error.room_unavailable" = "That live room is already used by another account." "api.error.cookiecloud_invalid" = "CookieCloud credentials are invalid or no Bilibili cookie could be fetched." "api.error.cookiecloud_host_not_allowed" = "That CookieCloud host is not allowed by this deployment." "api.error.invalid_component_token" = "The OBS access token is invalid or has been rotated." "api.error.component_not_found" = "The component does not exist or is disabled." "api.error.offline" = "You are offline. The operation was not submitted." "api.error.setup_completed" = "Initial system setup is already complete." "api.error.rate_limited" = "Too many attempts. Try again later." "api.error.invalid_bootstrap_proof" = "The one-time setup secret is invalid." "api.error.invalid_scope" = "The requested list scope is invalid." "api.error.song_component_not_found" = "The song request component does not exist or is disabled." "api.error.component_invalid" = "The component configuration or kind is invalid." "api.error.component_connection_limit" = "The OBS component connection limit has been reached." "api.error.authentication_required" = "Log in before continuing." "api.error.system_admin_required" = "This operation requires a system administrator." "api.error.cross_site_request" = "The cross-site request was rejected." "api.error.origin_mismatch" = "The request origin does not match this site." "api.error.enrollment_rate_limited" = "Too many registration attempts. Try again later." "api.error.invitation_unavailable" = "The invitation is invalid, expired, or already used." "api.error.enrollment_unavailable" = "The registration flow is invalid or expired." "api.error.totp_reset_unavailable" = "The TOTP reset is invalid or expired. Start again." "api.error.account_unavailable" = "The account is unavailable or the username is already used." "api.error.song_request_not_found" = "The song request does not exist." "api.error.song_request_conflict" = "The song queue changed. Refresh and try again." "api.error.invalid_song_request" = "The song request operation is invalid." "api.error.internal_error" = "The server could not complete the operation." "main.obs_missing_credentials" = "The OBS URL is missing a component ID or access token" "main.obs_invalid_token" = "The OBS access token is invalid or has been rotated" "main.obs_connecting" = "Connecting to component…" "main.redirecting" = "Opening the studio…" "main.not_found_title" = "Component not found" "main.not_found_description" = "The address may have expired, or the owner deleted the component." "main.back_to_console" = "Back to console" "main.auth_unavailable" = "Could not connect to the authentication service" "main.offline_title" = "The console is offline" "main.unavailable_title" = "The studio is temporarily unavailable" "main.offline_description" = "The app shell opened offline, but account, live-source, and component data is never cached. Reconnect to verify your session." "main.retry" = "Reconnect" "main.verifying_session" = "Verifying secure session…" "main.not_found_eyebrow" = "404 · LOST IN THE CLOUDS" "main.offline_eyebrow" = "OFFLINE APP" "main.connection_error_eyebrow" = "CONNECTION ERROR" "auth.totp_qr_alt" = "TOTP authenticator enrollment QR code" "auth.qr_unavailable" = "The QR code is unavailable. Add the key manually instead." "auth.bind_authenticator" = "Connect an authenticator" "auth.totp_step_scan" = "Scan the QR code with 1Password, Aegis, Microsoft Authenticator, or another TOTP app." "auth.totp_step_manual" = "If scanning fails, choose the option to enter a setup key." "auth.totp_step_confirm" = "Enter the six-digit code from the app to finish enrollment." "auth.manual_key" = "Manual setup key" "auth.recovery_file_title" = "Live Component Console recovery codes" "auth.recovery_file_warning" = "Each recovery code works once. Store this file securely offline." "auth.security_complete" = "Security setup complete" "auth.save_recovery_codes" = "Save account recovery codes" "auth.recovery_description" = "Use a recovery code if your phone or authenticator is unavailable. The server will never show these plaintext codes again." "auth.no_recovery_codes" = "The server returned no recovery codes. Contact the administrator before continuing." "auth.copy_all" = "Copy all" "auth.download_text" = "Download text" "auth.recovery_saved" = "I saved them securely" "auth.login_blocker" = "finish or clear the login form" "auth.login_failed" = "The username or verification code is incorrect" "auth.product_eyebrow" = "Live Components" "auth.login_title" = "Return to your studio" "auth.first_deployment" = "First deployment?" "auth.create_admin" = "Create system administrator" "auth.have_invitation" = "Have an invitation?" "auth.register_account" = "Register an account" "auth.passwordless_description" = "This account has no password. Enter your username and the current authenticator code." "auth.username" = "Username" "auth.recovery_code" = "Account recovery code" "auth.totp_code" = "Six-digit verification code" "auth.recovery_placeholder" = "Enter an unused recovery code" "auth.use_totp" = "Use a verification code" "auth.use_recovery" = "Authenticator unavailable? Use a recovery code" "auth.verifying" = "Verifying…" "auth.login" = "Secure login" "auth.enrollment_blocker" = "finish TOTP enrollment and save the one-time recovery codes" "auth.registration_blocker" = "finish or clear the registration form" "auth.registration_missing_id" = "The server did not return a registration flow ID" "auth.registration_start_failed" = "Could not start secure registration" "auth.registration_confirm_failed" = "The verification code is invalid or registration expired" "auth.setup_step_two" = "System setup · Step two" "auth.register_step_two" = "Invited registration · Step two" "auth.require_totp" = "TOTP is required" "auth.authenticator_code" = "Six-digit code from your authenticator" "auth.confirming" = "Confirming…" "auth.confirm_create" = "Confirm and create account" "auth.setup_only" = "Available only during first setup" "auth.invited_only" = "Invited users only" "auth.create_your_account" = "Create your account" "auth.already_account" = "Already have an account?" "auth.back_to_login" = "Back to login" "auth.setup_description" = "The first account can manage invitations. The legacy administrator secret authorizes this setup once and never becomes an account password." "auth.register_description" = "The invitation is only for registration. This passwordless account will require TOTP for every login." "auth.invitation" = "Invitation code" "auth.bootstrap_password" = "One-time setup secret" "auth.bootstrap_help" = "Enter the legacy administrator secret from deployment configuration. It only authorizes setup and is not stored as a user password." "auth.preparing_totp" = "Preparing TOTP…" "auth.next_bind" = "Next: connect authenticator" "nav.back_components" = "Back to component console" "nav.console" = "Console navigation" "nav.components" = "My components" "nav.account" = "Live account" "nav.invitations" = "Invitations" "nav.logout" = "Log out" "settings.theme" = "Theme" "settings.font_family" = "Chinese typeface" "settings.font_family_description" = "Fonts are served by this service and loaded from the same origin instead of relying on fonts installed on the OBS device." "settings.font_family.song" = "Noto Serif SC · Formal" "settings.font_family.fang_song" = "ZCOOL XiaoWei · Refined" "settings.font_family.kai" = "LXGW WenKai · Calligraphic" "settings.font_family.liyu_shoushu" = "Liyu Shoushu · Brush handwriting" "settings.font_brightness" = "Text brightness" "settings.font_brightness_description" = "Brightens text only; transparency, gift artwork, and the underlying scene are unchanged." "settings.viewer_color" = "Viewer name color" "settings.danmaku_color" = "Chat message color" "settings.use_theme_color" = "Use theme color" "settings.text_color_description" = "Overrides the theme when selected; reset to follow future theme changes." "settings.font_size" = "Font size" "settings.decoration_line_weight" = "Decoration line weight" "settings.decoration_line_weight_description" = "Adjusts theme borders, dividers, and the upper and lower ornamental edges together." "settings.max_visible" = "Maximum visible items" "settings.auto_collapse" = "Auto-collapse" "settings.unfold_duration" = "Scroll-open duration" "settings.motion_intensity" = "Motion intensity" "settings.particle_count" = "Particles per card" "settings.particle_speed" = "Particle speed" "settings.show_events" = "Visible events" "settings.event.danmaku" = "Chat" "settings.event.enter" = "Room entry" "settings.event.gift" = "Gift" "settings.event.superchat" = "Super Chat" "settings.event.guard" = "Guard" "settings.event.like" = "Like" "settings.event.share" = "Share" "settings.low_performance" = "Low-performance mode" "settings.high_gift" = "High-value gift threshold (milli-CNY)" "settings.featured_gift" = "Featured gift threshold (milli-CNY)" "settings.saving" = "Saving…" "settings.save_sync" = "Save and sync live" "preview.adaptive" = "Responsive preview" "preview.adaptive_description" = "Presets only resize the preview. OBS browser sources may use any dimensions." "preview.narrow" = "Narrow sidebar" "preview.portrait" = "Portrait" "preview.hd_portrait" = "HD portrait" "preview.horizontal" = "Horizontal bar" "song.settings.scroll_speed" = "Scroll speed" "song.settings.edge_pause" = "Edge pause" "song.settings.requester_color" = "Requester color" "song.settings.title_color" = "Song title color" "song.settings.limits" = "Optional anti-spam limits (0 means unlimited)" "song.settings.queue_limit" = "Queue limit" "song.settings.viewer_limit" = "Per-viewer limit" "song.settings.cooldown" = "Request cooldown (seconds)" "song.preview.title" = "Song request preview" "song.preview.description" = "The current song stays pinned while an overflowing queue scrolls back and forth." "source.blocker" = "save or revert live-source and CookieCloud settings" "source.saved" = "Account live source saved. Every component shares this event stream." "source.save_failed" = "Could not save the live source" "source.title" = "Bilibili live source" "source.description" = "Each account has one listener and one CookieCloud credential set. Every account component can consume its events." "source.current_room" = "Current live room ID" "source.room_help" = "Saving disconnects the old room and immediately starts the new listener. Components and OBS URLs do not change." "source.cookiecloud_host" = "CookieCloud host" "source.host_placeholder" = "https://cookie.example.com" "source.cookiecloud_key" = "CookieCloud UUID / key" "source.cookiecloud_password" = "CookieCloud password" "source.secret_keep" = "Already set; leave blank to keep it" "source.key_placeholder" = "Enter sync UUID / key" "source.password_placeholder" = "Enter sync password" "source.validating" = "Validating and saving…" "source.save" = "Save live source" "obs.blocker" = "copy and securely save the newly generated OBS URL" "obs.status_failed" = "Could not read this component's OBS token status" "obs.rotate_confirm" = "Rotating immediately invalidates every OBS browser source using the old URL. Continue?" "obs.token_created" = "A new OBS token was created. Copy it now; the plaintext token will not be shown again after leaving this page." "obs.rotate_failed" = "Could not rotate the OBS token" "obs.address_copied" = "OBS browser source URL copied." "obs.copy_blocked" = "The browser blocked copying. Select the URL below manually." "obs.access_title" = "Read-only OBS access" "obs.access_description" = "This token can only subscribe to this component. Rotation does not affect account login or other components." "obs.access_status" = "Access status" "obs.token_ready" = "Token generated" "obs.token_missing" = "Not generated" "obs.public_id" = "Public component ID" "obs.last_rotated" = "Last rotated" "obs.generated_address" = "New OBS URL" "obs.generating" = "Generating…" "obs.rotate" = "Rotate token" "obs.generate" = "Generate OBS URL" "obs.copy_address" = "Copy URL" "test.default_viewer" = "Test viewer" "test.default_text" = "Shine brightly today!" "test.default_gift" = "Little flower" "test.default_guard" = "Captain" "test.sent" = "The test event was sent to this component." "test.failed" = "Could not send the test event" "test.title" = "Event testing" "test.description" = "Simulated events only enter this user's selected component and never send anything to Bilibili." "test.event_type" = "Event type" "test.enter" = "Enter room" "test.uid" = "Test UID" "test.nickname" = "Test nickname" "test.danmaku_text" = "Chat message" "test.gift_name" = "Gift name" "test.gift_id" = "Gift ID (optional)" "test.gift_id_placeholder" = "Tests a specific gift-menu entry" "test.quantity" = "Quantity" "test.battery" = "Battery value" "test.guard" = "Guard purchase" "test.guard_name" = "Guard tier" "test.price" = "Value (battery)" "test.sending" = "Sending…" "test.trigger" = "Trigger test event" "components.title" = "My components" "components.eyebrow" = "LIVE COMPONENTS" "components.empty_title" = "No components yet" "components.empty_description" = "The service creates one initial instance of every built-in component after account initialization." "components.danmaku_mark" = "Chat" "components.song_mark" = "Song" "components.gift_mark" = "Gift" "components.gift_menu_mark" = "Menu" "components.generic_mark" = "App" "components.danmaku_type" = "Live chat overlay" "components.song_type" = "Song request overlay" "components.gift_type" = "Full-screen gift starfall" "components.gift_menu_type" = "Live gift menu" "components.add_instance" = "Add component instance" "components.add_instance_description" = "Add multiple instances of one type, each with its own style and OBS address." "components.instance_type" = "Component type" "components.instance_name" = "Instance name" "components.instance_name_placeholder" = "For example: Portrait scene" "components.create_instance" = "Add instance" "components.creating" = "Adding…" "components.create_blocker" = "finish or clear the component instance name being entered" "components.discard_changes_confirm" = "The current component has unsaved settings. Discard those changes?" "components.created" = "Component instance added. Its style and OBS address can be configured independently." "components.create_failed" = "Could not add the component instance" "components.delete_instance" = "Delete instance" "components.deleting" = "Deleting…" "components.delete_confirm" = "Delete “{name}”? Its OBS address, token, and component data will stop working." "components.deleted" = "Component instance deleted." "components.delete_failed" = "Could not delete the component instance; at least one instance of each type must remain." "components.settings_blocker" = "save or revert the current component settings" "components.settings_load_failed" = "Could not load component settings" "components.load_failed" = "Could not load console data" "components.settings_saved" = "Component settings saved and synced to connected OBS sources." "components.settings_save_failed" = "Could not save component settings" "components.loading" = "Opening the studio…" "components.danmaku_settings" = "Chat overlay settings" "components.danmaku_description" = "Every setting is stored independently on this user's component." "components.song_settings" = "Song request settings" "components.song_description" = "Viewers send “点歌 Song name” to queue a song and “打分 1-5” to rate the current song." "components.gift_settings" = "Full-screen gift effect settings" "components.gift_description" = "Gifts become meteors crossing a transparent canvas; Guard, Admiral, and Governor purchases trigger a full-screen starlight celebration." "components.gift_menu_settings" = "Gift menu settings" "components.gift_menu_description" = "Map gifts available in the current room, membership tiers, or a gift unit price to content the streamer will perform." "components.open_song_stats" = "Open song statistics" "components.generic_settings" = "Component settings" "components.no_editor" = "No settings editor is installed for this component kind." "components.welcome" = "Welcome to Live Studio" "components.none_configurable" = "This account has no configurable components." "account.load_failed" = "Could not load the account live source" "account.title" = "Live account" "account.eyebrow" = "ACCOUNT LIVE SOURCE" "account.description" = "Configure the room and CookieCloud once for every current and future component in this account." "account.loading" = "Loading account live source…" "security.title" = "Account security" "security.description" = "Replace the TOTP authenticator for the current account. The old secret remains active until the new code is confirmed." "security.totp_reset_warning" = "Verify again with the current TOTP or an unused recovery code. A successful reset revokes every other web login session." "security.current_totp_code" = "Current six-digit TOTP code" "security.use_recovery_for_reset" = "Authenticator unavailable? Reset with a recovery code" "security.start_totp_reset" = "Replace authenticator" "security.preparing_totp" = "Generating new TOTP…" "security.totp_reset_start_failed" = "Could not start the TOTP reset" "security.totp_reset_missing_id" = "The server did not return a valid TOTP reset identifier" "security.old_totp_still_active" = "Your old TOTP remains active until this QR code is confirmed. Cancelling now cannot lock the account." "security.new_totp_code" = "Six-digit code from the new authenticator" "security.confirm_totp_reset" = "Confirm and enable new TOTP" "security.cancel_totp_reset" = "Cancel this reset" "security.totp_reset_cancelled" = "Reset cancelled. The existing TOTP was not changed." "security.totp_reset_confirm_failed" = "The new code is invalid or the reset has expired" "security.recovery_replaced" = "TOTP was replaced and every old recovery code is invalid. Save these new one-time codes offline now; they are shown only once." "security.totp_reset_complete" = "The new TOTP and recovery codes are active." "security.totp_reset_blocker" = "finish or cancel TOTP reset and save the new one-time recovery codes" "song.queue_changing" = "The song queue is changing rapidly. Try again shortly." "song.queue_load_failed" = "Could not load the song queue" "song.cancel_confirm" = "Cancel “{title}”?" "song.promoted" = "Moved to next." "song.completed" = "Completed and advanced to the next song." "song.cancelled" = "Song request cancelled." "song.action_failed" = "Queue operation failed" "song.clear_queue" = "Clear entire queue" "song.clearing" = "Clearing…" "song.clear_confirm" = "Clear the current song and every upcoming request? They will be marked cancelled and retained in history." "song.cleared" = "Queue cleared. {count} requests were cancelled." "song.clear_failed" = "Could not clear the song queue" "song.stats_title" = "Song statistics and queue" "song.stats_eyebrow" = "SONG QUEUE MANAGER" "song.back_settings" = "Back to component settings" "song.stat.active" = "Active requests" "song.stat.completed" = "Completed" "song.stat.cancelled" = "Cancelled" "song.stat.ratings" = "Ratings" "song.current" = "Current song" "song.current_description" = "Completing or cancelling the current song automatically advances the queue." "song.average_score" = "Average {score} · {count} ratings" "song.no_rating" = "No ratings yet" "song.complete_current" = "Complete current song" "song.no_current" = "No song is currently being performed." "song.queue_title" = "Upcoming queue ({count})" "song.queue_description" = "Promoting makes a song next without interrupting the current song." "song.promote" = "Move to next" "song.queue_empty" = "The upcoming queue is empty." "song.queue_loading" = "Loading the full queue…" "song.history" = "Recent history" "song.history_description" = "Full history remains in the database; the latest 50 entries are shown here." "song.column.title" = "Song" "song.column.requester" = "Requested by" "song.column.result" = "Result" "song.column.rating" = "Rating" "song.column.finished" = "Finished" "song.status.completed" = "Completed" "song.status.cancelled" = "Cancelled" "song.no_history" = "No history yet." "invitation.blocker" = "copy and securely save the new one-time invitation" "invitation.load_failed" = "Could not load invitations" "invitation.created" = "Invitation created. Its plaintext is shown only once." "invitation.create_failed" = "Could not create invitation" "invitation.revoke_confirm" = "Revoke this invitation? Any unfinished registration will immediately fail." "invitation.revoked" = "Invitation revoked." "invitation.revoke_failed" = "Could not revoke invitation" "invitation.title" = "Invitation management" "invitation.eyebrow" = "SYSTEM ADMINISTRATION" "invitation.admin_only" = "System administrators only" "invitation.create" = "Create invitation" "invitation.create_description" = "Single-use and valid for 24 hours by default. Invitations are only for registration, never daily login." "invitation.initial_room" = "Initial Bilibili live room ID" "invitation.valid_hours" = "Valid hours" "invitation.creating" = "Creating…" "invitation.one_time" = "Shown once" "invitation.copy_code" = "Copy invitation" "invitation.copy_link" = "Copy registration link" "invitation.history" = "Invitation history" "invitation.history_description" = "Plaintext codes are omitted; only auditable state and usage are shown." "invitation.column.room" = "Live room" "invitation.column.prefix" = "Code prefix" "invitation.column.created" = "Created" "invitation.column.expires" = "Expires" "invitation.column.status" = "Status" "invitation.status.revoked" = "Revoked" "invitation.status.expired" = "Expired" "invitation.status.used" = "Used" "invitation.status.available" = "Available" "invitation.empty" = "No invitations have been created." "forbidden.title" = "Access denied" "forbidden.description" = "Only system administrators can manage invitations." "forbidden.back" = "Back to my components" "overlay.enter" = "entered the studio" "overlay.guard" = "activated {guard}" "overlay.like" = "lit up a star" "overlay.share" = "shared the live room" "overlay.gift" = "sent {gift} ×{quantity}" "overlay.interaction" = "sent an interaction" "overlay.preview_viewer" = "Jade Viewer" "overlay.preview_message" = "Shine brightly today!" "overlay.preview_gift_viewer" = "Starlight Traveler" "overlay.preview_gift" = "Sweet Confession" "song.overlay.preview_title" = "Dreaming in Starlight" "song.overlay.preview_viewer" = "Jade Viewer" "song.overlay.preview_titles" = "Evening Breeze|Moonlit Letter|Message from the Clouds|Poem of Falling Stars" "song.overlay.preview_viewers" = "Starlight Traveler|Garden Guest|Little Porcelain|Laurel" "song.overlay.score" = "{score} ★ · {count} viewers" "song.overlay.current_aria" = "Current song" "song.overlay.sing_mark" = "Sing" "song.overlay.now_singing" = "Now singing · requested by {viewer}" "song.overlay.waiting" = "Waiting for a chat request" "song.overlay.request_help" = "Send “点歌 Song name” to join the queue" "song.overlay.rate_help" = "Send “打分 1-5”" "song.overlay.queue_aria" = "Upcoming queue" "song.overlay.queue_title" = "Upcoming songs" "song.overlay.queue_empty" = "Who will request the next song?" "theme.jade_scroll.name" = "Jade Blossom Scroll" "theme.jade_scroll.description" = "Dark jade glass, classical floral patterns, starlight particles, and a horizontal scroll reveal." "theme.moonlit_water.name" = "Moonlit Stillwater" "theme.moonlit_water.description" = "A fully transparent moonlit theme with deep-jade and ivory-gold serif type, fine rules, and restrained floral starlight." "gift.theme.jade_starfall.name" = "Jade Starfall" "gift.theme.jade_starfall.description" = "Traditional jade, luminous floral scrollwork, and golden stardust shape each gift meteor." "gift.theme.moonlit_water.name" = "Moonlit Stillwater" "gift.theme.moonlit_water.description" = "Gifts below CNY 50 arrive as a quiet waterline note; CNY 50+ gifts and membership purchases receive a transparent full-scene moonlit offering." "gift.settings.thresholds" = "Gift value tiers (raw price, 1000 = CNY 1)" "gift.settings.high_threshold" = "High-value threshold" "gift.settings.featured_threshold" = "Featured-value threshold" "gift.settings.tiers" = "Meteor settings by tier" "gift.settings.tiers_description" = "Sizes use 1920×1080 as a reference; other OBS dimensions scale responsively to their actual viewport." "gift.settings.tier.normal" = "Normal gift" "gift.settings.tier.high" = "High-value gift" "gift.settings.tier.featured" = "Featured gift" "gift.settings.count" = "Meteor count" "gift.settings.size" = "Gift core size" "gift.settings.speed" = "Flight speed" "gift.settings.trail" = "Trail intensity" "gift.settings.guard_stars" = "Membership star count" "gift.settings.guard_duration" = "Membership full-screen duration" "gift.settings.concurrent" = "Maximum concurrent effects" "gift.preview.title" = "Full-screen gift effect preview" "gift.preview.description" = "The preview is scaled to 16:9. OBS browser sources may use the 1920×1080 default or any other resolution." "gift.preview.normal_button" = "Preview normal gift" "gift.preview.high_button" = "Preview high-value gift" "gift.preview.featured_button" = "Preview featured gift" "gift.preview.guard_button" = "Preview Guard effect" "gift.preview.viewer" = "Starlight viewer" "gift.preview.normal" = "Little flower" "gift.preview.high" = "Jade offering" "gift.preview.featured" = "Dream of the Stars" "gift.preview.guard" = "Guard" "gift.guard_aria" = "Full-screen membership celebration" "gift.guard_salute" = "THE STARS SHINE FOR YOU" "gift.guard_title" = "{guard} · STARLIGHT TRIBUTE" "gift.guard_viewer" = "Thank you, {viewer}, for your support" "gift.moonlit.ceremony_label" = "MOONLIT OFFERING" "gift_menu.theme.jade_banquet.name" = "Jade Banquet" "gift_menu.theme.jade_banquet.description" = "An ornate gift menu of jade glass, gilded blossoms, and starlight highlights." "gift_menu.theme.moonlit_water.name" = "Moonlit Stillwater" "gift_menu.theme.moonlit_water.description" = "A fully transparent moonlit gift list with deep-jade and ivory-gold type, fine rules, and waterline highlights." "gift_menu.catalog.title" = "Current room gift catalog" "gift_menu.catalog.loading" = "Loading gifts and icons…" "gift_menu.catalog.count" = "Loaded {count} gifts" "gift_menu.catalog.refresh" = "Refresh gift catalog" "gift_menu.catalog.failed" = "Could not load the gift catalog" "gift_menu.editor.add_title" = "Add menu item" "gift_menu.editor.trigger_type" = "Trigger type" "gift_menu.trigger.gift" = "Specific regular gift" "gift_menu.trigger.guard" = "Specific membership tier" "gift_menu.trigger.battery" = "Specific gift unit price" "gift_menu.editor.gift" = "Room gift" "gift_menu.editor.gift_option" = "{name} · {battery} battery" "gift_menu.editor.guard_level" = "Membership tier" "gift_menu.editor.battery_amount" = "Unit price in battery" "gift_menu.editor.description" = "Stream content" "gift_menu.editor.description_placeholder" = "For example: request a song / learn a song" "gift_menu.editor.add" = "Add to gift menu" "gift_menu.editor.description_required" = "Describe the content triggered by this gift." "gift_menu.editor.gift_required" = "Select a gift from the current room catalog first." "gift_menu.editor.duplicate" = "This trigger is already present in the menu." "gift_menu.editor.empty" = "No menu items yet. Add one above." "gift_menu.editor.move_up" = "Move menu item up" "gift_menu.editor.move_down" = "Move menu item down" "gift_menu.editor.remove" = "Remove" "gift_menu.guard.captain" = "Guard" "gift_menu.guard.admiral" = "Admiral" "gift_menu.guard.governor" = "Governor" "gift_menu.guard_mark.captain" = "G" "gift_menu.guard_mark.admiral" = "A" "gift_menu.guard_mark.governor" = "V" "gift_menu.battery_mark" = "B" "gift_menu.settings.visible_rows" = "Maximum visible rows" "gift_menu.settings.rows_per_page" = "Rows per page" "gift_menu.settings.row_height" = "Row height" "gift_menu.settings.scroll_speed" = "Loop scroll speed" "gift_menu.settings.page_interval" = "Page interval" "gift_menu.settings.highlight_duration" = "Trigger highlight duration" "gift_menu.settings.font_scale" = "Text scale" "gift_menu.settings.motion" = "Motion intensity" "gift_menu.unit.pixels" = "{value} px" "gift_menu.unit.speed" = "{value} px/s" "gift_menu.unit.seconds" = "{value} s" "gift_menu.preview.title" = "Gift menu preview" "gift_menu.preview.description" = "Click any row to preview targeting and the gradient highlight animation." "gift_menu.aria" = "Live room gift menu" "gift_menu.overlay.battery" = "Battery ×{amount}" "gift_menu.overlay.triggered_by" = "Triggered by {viewer}" "gift_menu.overlay.empty" = "Configure the gift menu in the control console" "pwa.blocked" = "The update is blocked. Finish these items first:\n\n{reasons}" "pwa.confirm_update" = "Updating refreshes the console. Save settings, invitations, recovery codes, and newly rotated OBS tokens first. Update now?" "pwa.offline" = "Offline" "pwa.update" = "Update available" "pwa.install" = "Install app" "pwa.manifest.name" = "Live Component Console" "pwa.manifest.short_name" = "Live Studio" "pwa.manifest.description" = "Live components and OBS browser-source console"