Files
lxc-streamutils/resources/i18n.toml
T
2026-08-13 12:05:47 -07:00

1006 lines
57 KiB
TOML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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.coming_soon" = "即将支持"
"components.future" = "更多主题 · 互动组件"
"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 a default chat overlay 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.coming_soon" = "Coming soon"
"components.future" = "More themes · Interactive components"
"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"