RealtimeKit 的 UI Kit 允许您自定义视频通话界面中的所有文本。您可以个性化文本以满足特定的区域设置需求。
可以自定义 RealtimeKit 的默认语言包以匹配您应用程序'区域设置要求。您可以覆盖 UI Kit 组件中使用的任何文本字符串。
Flutter UI Kit 从 ARB (Application Resource Bundle) JSON 文件中加载字符串覆盖。在构建 UI Kit 时,您需要提供资源路径,而 SDK 会将所有匹配的字符串键替换为您的自定义值。
React Native UI Kit 使用语言字典对象来存储所有 UI 字符串。您可以通过向 useLanguage() 函数传递部分字典来覆盖任何键,然后通过 t 属性将结果传递给 RtkMeeting 组件。
可以像这样导入 RealtimeKit 的默认语言包:
<script type="module">
import {
useLanguage,
defaultLanguage,
} from "https://cdn.jsdelivr.net/npm/@cloudflare/realtimekit-ui/dist/esm/index.js";
</script>可以像这样导入 RealtimeKit 的默认语言包:
import { defaultLanguage, useLanguage } from "@cloudflare/realtimekit-react-ui";可以像这样导入 RealtimeKit 的默认语言包:
import {
defaultLanguage,
useLanguage,
} from "@cloudflare/realtimekit-angular-ui";import 'package:realtimekit_ui/realtimekit_ui.dart';不需要额外的导入。arbPath 参数在 RealtimeKitUIBuilder.build() 上可用。
import {
defaultLanguage,
useLanguage,
} from "@cloudflare/realtimekit-react-native-ui";要用您自己的区域设置替换 RealtimeKit 的默认区域设置,请通过展开 defaultLanguage 对象并覆盖特定键来创建自定义语言包:
<body>
<rtk-meeting id="my-meeting"></rtk-meeting>
<script type="module">
import RealtimeKitClient from "https://cdn.jsdelivr.net/npm/@cloudflare/realtimekit@latest/dist/index.es.js";
import {
useLanguage,
defaultLanguage,
} from "https://cdn.jsdelivr.net/npm/@cloudflare/realtimekit-ui/dist/esm/index.js";
// 自定义 RealtimeKit 的默认区域设置对象
const myLanguagePack = useLanguage({
...defaultLanguage,
mute_all: "Mute All Users",
leave: "Exit Call",
join: "Join Now",
});
const init = async () => {
const meeting = await RealtimeKitClient.init({
authToken: "<participant_auth_token>",
});
const meetingEl = document.getElementById("my-meeting");
meetingEl.meeting = meeting;
meetingEl.showSetupScreen = true;
// 传递自定义 language 包
meetingEl.t = myLanguagePack;
};
init();
</script>
</body>useLanguage 函数接受您的自定义区域设置对象作为参数,并生成一个检索与所提供键相关联的值的函数。
import {
RealtimeKitProvider,
useRealtimeKitClient,
} from "@cloudflare/realtimekit-react";
import {
RtkMeeting,
defaultLanguage,
useLanguage,
} from "@cloudflare/realtimekit-react-ui";
import { useEffect, useState } from "react";
function App() {
const [meeting, initMeeting] = useRealtimeKitClient();
const [authToken, setAuthToken] = useState("<participant_auth_token>");
// 自定义 RealtimeKit 的默认区域设置对象
const myLanguagePack = useLanguage({
...defaultLanguage,
mute_all: "Mute All Users",
leave: "Exit Call",
join: "Join Now",
});
useEffect(() => {
if (authToken) {
initMeeting({
authToken: authToken,
});
}
}, [authToken]);
return (
<RealtimeKitProvider value={meeting}>
<RtkMeeting showSetupScreen={true} meeting={meeting} t={myLanguagePack} />
</RealtimeKitProvider>
);
}useLanguage Hook 接受您的自定义区域设置对象作为参数,并生成一个检索与所提供键相关联的值的函数。
import { Component, OnInit } from "@angular/core";
import RealtimeKitClient from "@cloudflare/realtimekit-angular";
import {
defaultLanguage,
useLanguage,
} from "@cloudflare/realtimekit-angular-ui";
@Component({
selector: "app-meeting",
template: `
<rtk-meeting [meeting]="meeting" [t]="myLanguagePack"></rtk-meeting>
`,
})
export class MeetingComponent implements OnInit {
meeting: any;
myLanguagePack: any;
async ngOnInit() {
// 自定义 RealtimeKit 的默认区域设置对象
this.myLanguagePack = useLanguage({
...defaultLanguage,
mute_all: "Mute All Users",
leave: "Exit Call",
join: "Join Now",
});
this.meeting = await RealtimeKitClient.init({
authToken: "<participant_auth_token>",
});
}
}useLanguage 函数接受您的自定义区域设置对象作为参数,并生成一个检索与所提供键相关联的值的函数。
创建一个带有 @locale 键和您想要覆盖的字符串键的 ARB JSON 文件。将该文件添加到您的 Flutter 资源中。
1. 在 assets/lang/es.arb 创建 ARB 文件:
{
"@locale": "es",
"join": "Unirse",
"leave": "Salir",
"cancel": "Cancelar",
"micOn": "Mic Encendido",
"micOff": "Mic Apagado",
"videoOn": "Video Encendido",
"videoOff": "Video Apagado",
"mute": "Silenciar",
"participants": "Participantes",
"chat": "Chat",
"settings": "Configuración"
}2. 在 pubspec.yaml 中注册资源:
flutter:
assets:
- assets/lang/3. 在构建 UI Kit 时传递 arbPath:
final rtkUI = RealtimeKitUIBuilder.build(
uiKitInfo: uiKitInfo,
arbPath: 'assets/lang/es.arb',
);
Navigator.push(context, MaterialPageRoute(builder: (_) => rtkUI));您只需包含想要覆盖的键。ARB 文件中不存在的任何键都将回退到其英文默认值。
展开 defaultLanguage 对象并覆盖特定键。通过 t 属性将结果传递给 RtkMeeting。
import {
RtkMeeting,
defaultLanguage,
useLanguage,
} from '@cloudflare/realtimekit-react-native-ui';
function App() {
const myLanguagePack = useLanguage({
...defaultLanguage,
mute_all: 'Silenciar todo',
leave: 'Salir',
join: 'Unirse',
participants: 'Participantes',
chat: 'Chat',
settings: 'Configuración',
});
return (
<RtkMeeting
meeting={meeting}
t={myLanguagePack}
showSetupScreen={true}
/>
);
}useLanguage 函数将您的覆盖与默认值合并。您未覆盖的任何键都将保持其英文默认值。
在构建自己的自定义 UI 时,您还可以将自定义语言包传递给 UI 提供商组件:
<body>
<rtk-ui-provider id="ui-provider">
<!-- Your custom UI components -->
</rtk-ui-provider>
<script type="module">
import RealtimeKitClient from "https://cdn.jsdelivr.net/npm/@cloudflare/realtimekit@latest/dist/index.es.js";
import {
useLanguage,
defaultLanguage,
} from "https://cdn.jsdelivr.net/npm/@cloudflare/realtimekit-ui/dist/esm/index.js";
const myLanguagePack = useLanguage({
...defaultLanguage,
mute_all: "Mute All Users",
});
const meeting = await RealtimeKitClient.init({
authToken: "<participant_auth_token>",
});
const uiProvider = document.getElementById("ui-provider");
uiProvider.meeting = meeting;
uiProvider.t = myLanguagePack;
</script>
</body>import {
RealtimeKitProvider,
useRealtimeKitClient,
} from "@cloudflare/realtimekit-react";
import {
RtkUIProvider,
defaultLanguage,
useLanguage,
} from "@cloudflare/realtimekit-react-ui";
import { useEffect, useState } from "react";
function App() {
const [meeting, initMeeting] = useRealtimeKitClient();
const [authToken, setAuthToken] = useState("<participant_auth_token>");
const myLanguagePack = useLanguage({
...defaultLanguage,
mute_all: "Mute All Users",
});
useEffect(() => {
if (authToken) {
initMeeting({
authToken: authToken,
});
}
}, [authToken]);
return (
<RealtimeKitProvider value={meeting}>
<RtkUIProvider meeting={meeting} t={myLanguagePack}>
{/* Your custom UI components */}
</RtkUIProvider>
</RealtimeKitProvider>
);
}import { Component, OnInit } from "@angular/core";
import RealtimeKitClient from "@cloudflare/realtimekit-angular";
import {
defaultLanguage,
useLanguage,
} from "@cloudflare/realtimekit-angular-ui";
@Component({
selector: "app-meeting",
template: `
<rtk-ui-provider [meeting]="meeting" [t]="myLanguagePack">
<!-- Your custom UI components -->
</rtk-ui-provider>
`,
})
export class MeetingComponent implements OnInit {
meeting: any;
myLanguagePack: any;
async ngOnInit() {
this.myLanguagePack = useLanguage({
...defaultLanguage,
mute_all: "Mute All Users",
});
this.meeting = await RealtimeKitClient.init({
authToken: "<participant_auth_token>",
});
}
}RealtimeKit 提供了一个包含整个 UI Kit 中使用的所有文本字符串的完整默认语言包。您可以覆盖这些键中的任何一个,以自定义会议界面中显示的文本。
以下是 RealtimeKit 提供的完整默认语言包:
{
"about_call": "关于通话",
"screen": "屏幕",
"camera": "摄像头",
"leave": "离开",
"dismiss": "关闭",
"logo": "徽标",
"page": "页面",
"more": "更多",
"page.prev": "上一页",
"page.next": "下一页",
"layout": "布局",
"layout.auto": "自动布局",
"settings": "设置",
"file": "文件",
"image": "图片",
"connection": "连接",
"leave_confirmation": "您确定要离开通话吗?",
"cancel": "取消",
"yes": "是",
"(you)": "(您)",
"you": "您",
"everyone": "所有人",
"to": "至",
"mute": "静音",
"kick": "踢出",
"pin": "置顶",
"pinned": "已置顶",
"accept": "接受",
"unpin": "取消置顶",
"pip_on": "显示画中画",
"pip_off": "隐藏画中画",
"viewers": "观众",
"join": "加入",
"joined": "已加入",
"create": "创建",
"close": "关闭",
"ask": "提问",
"type": "类型",
"activate": "激活",
"requests": "请求",
"mic_off": "麦克风已关闭",
"disable_mic": "禁用麦克风",
"mic_on": "麦克风已开启",
"enable_mic": "启用麦克风",
"audio": "音频",
"test": "测试",
"minimize": "隐藏小窗",
"maximize": "显示小窗",
"mute_all": "全体静音",
"mute_all.description": "会议中的其他所有人将被静音。",
"mute_all.header": "您确定吗?",
"mute_all.allow_unmute": "允许其他人自行取消静音",
"video_off": "视频已关闭",
"disable_video": "禁用视频",
"video_on": "视频已开启",
"enable_video": "启用视频",
"video": "视频",
"offline": "您已离线",
"offline.description": "请确保您已连接到互联网。",
"disconnected": "您尚未加入会议。",
"failed": "您的连接已断开",
"failed.description": "我们无法将您重新连接到会议室。请尝试重新加入会议。",
"disconnected.description": "请加入会议以便查看其他参与者并与之互动。",
"participants": "参与者",
"participants.errors.empty_results": "找不到指定名称或 ID 的参与者。",
"participants.empty_list": "似乎没有人在这里。",
"participants.no_pending_requests": "没有待处理的请求。",
"participants.turn_off_video": "关闭视频",
"polls": "投票",
"polls.by": "投票发起人",
"polls.question": "投票问题",
"polls.question.placeholder": "您要发起什么投票?",
"polls.answers": "答案",
"polls.option": "添加选项。",
"polls.option.placeholder": "输入选项",
"polls.results.anon": "匿名",
"polls.results.hide": "投票前隐藏结果",
"polls.create": "创建投票",
"polls.cancel": "取消创建投票",
"polls.empty": "没有可用的投票",
"polls.errors.question_required": "问题是必填项。",
"polls.errors.empty_option": "不允许空选项。",
"screenshare": "屏幕共享",
"screenshare.min_preview": "最小化预览",
"screenshare.max_preview": "展开预览",
"screenshare.shared": "您的屏幕正在共享中。",
"screenshare.start": "共享屏幕",
"screenshare.stop": "停止共享",
"screenshare.error.unknown": "启动屏幕共享时发生错误。",
"screenshare.error.max_count": "已达到最大屏幕共享限制。",
"plugins": "插件",
"plugins.empty": "没有可用的插件",
"perm_denied": "浏览器拒绝了权限。",
"perm_denied.audio": "浏览器拒绝了麦克风权限",
"perm_denied.video": "浏览器拒绝了摄像头权限",
"perm_denied.screenshare": "浏览器拒绝了屏幕共享权限",
"perm_denied.audio.chrome.message": "在顶部导航栏中,单击 URL 左侧的图标,并确保勾选了“麦克风”权限",
"perm_denied.video.chrome.message": "在顶部导航栏中,单击 URL 左侧的图标,并确保勾选了“摄像头”权限",
"perm_denied.screenshare.chrome.message": "在 Chrome 设置下,导航至“隐私和安全 > 网站设置 > 权限”。选择“屏幕共享”,授予权限并重新加载此应用程序。",
"perm_denied.audio.safari.message": "在 Safari 设置下,导航至“网站 > 麦克风”,授予权限并重新加载此应用程序。",
"perm_denied.video.safari.message": "在 Safari 设置下,导航至“网站 > 摄像头”,授予权限并重新加载此应用程序。",
"perm_denied.screenshare.safari.message": "在 Safari 设置下,导航至“网站 > 屏幕共享”,授予权限并重新加载此应用程序。",
"perm_denied.audio.edge.message": "在 Edge 设置下,导航至“网站权限 > 麦克风”,授予权限并重新加载此应用程序。",
"perm_denied.video.edge.message": "在 Edge 设置下,导航至“网站权限 > 摄像头”,授予权限并重新加载此应用程序。",
"perm_denied.screenshare.edge.message": "在 Edge 设置下,导航至“网站权限 > 屏幕共享”,授予权限并重新加载此应用程序。",
"perm_denied.audio.microsoft edge.message": "在 Edge 设置下,导航至“网站权限 > 麦克风”,授予权限并重新加载此应用程序。",
"perm_denied.video.microsoft edge.message": "在 Edge 设置下,导航至“网站权限 > 摄像头”,授予权限并重新加载此应用程序。",
"perm_denied.screenshare.microsoft edge.message": "在 Edge 设置下,导航至“网站权限 > 屏幕共享”,授予权限并重新加载此应用程序。",
"perm_denied.audio.firefox.message": "在 Firefox 设置下,导航至“隐私与安全 > 权限 > 麦克风”,授予权限并重新加载此应用程序。",
"perm_denied.video.firefox.message": "在 Firefox 设置下,导航至“隐私与安全 > 权限 > 摄像头”,授予权限并重新加载此应用程序。",
"perm_denied.screenshare.firefox.message": "在 Firefox 设置下,导航至“隐私与安全 > 权限 > 屏幕共享”,授予权限并重新加载此应用程序。",
"perm_denied.audio.others.message": "从您的浏览器设置中,启用“麦克风”权限并重新加载此应用程序。",
"perm_denied.video.others.message": "从您的浏览器设置中,启用“摄像头”权限并重新加载此应用程序。",
"perm_denied.screenshare.others.message": "从您的浏览器设置中,启用“屏幕共享”权限并重新加载此应用程序。",
"perm_sys_denied": "系统拒绝了权限",
"perm_sys_denied.audio": "系统拒绝了麦克风权限",
"perm_sys_denied.video": "系统拒绝了摄像头权限",
"perm_sys_denied.screenshare": "系统拒绝了屏幕共享权限",
"perm_sys_denied.audio.macos.message": "打开苹果菜单,导航至“系统设置 > 隐私与安全 > 麦克风”。允许您的浏览器访问并重新加载此应用程序。",
"perm_sys_denied.video.macos.message": "打开苹果菜单,导航至“系统设置 > 隐私与安全 > 摄像头”。允许您的浏览器访问并重新加载此应用程序。",
"perm_sys_denied.screenshare.macos.message": "打开苹果菜单,导航至“系统设置 > 隐私与安全 > 屏幕共享”。允许您的浏览器访问并重新加载此应用程序。",
"perm_sys_denied.audio.ios.message": "在您的 iPhone 上,导航至“设置 > 隐私 > 麦克风”,允许您的浏览器访问并重新加载此应用程序。",
"perm_sys_denied.video.ios.message": "在您的 iPhone 上,导航至“设置 > 隐私 > 摄像头”,允许您的浏览器访问并重新加载此应用程序。",
"perm_sys_denied.screenshare.ios.message": "在您的 iPhone 上,导航至“设置 > 隐私 > 屏幕共享”,允许您的浏览器访问并重新加载此应用程序。",
"perm_sys_denied.audio.windows.message": "转到 Windows 设置,选择“设置 > 隐私 > 麦克风”。为您的浏览器允许权限并重新加载此应用程序。",
"perm_sys_denied.video.windows.message": "转到 Windows 设置,选择“设置 > 隐私 > 摄像头”。为您的浏览器允许权限并重新加载此应用程序。",
"perm_sys_denied.screenshare.windows.message": "转到 Windows 设置,选择“设置 > 隐私 > 屏幕共享”。为您的浏览器允许权限并重新加载此应用程序。",
"perm_sys_denied.audio.android.message": "在您的设备上,导航至“设置 > 应用”。选择您的浏览器,允许麦克风权限并重新加载此应用程序。",
"perm_sys_denied.video.android.message": "在您的设备上,导航至“设置 > 应用”。选择您的浏览器,允许摄像头权限并重新加载此应用程序。",
"perm_sys_denied.screenshare.android.message": "在您的设备上,导航至“设置 > 应用”。选择您的浏览器,允许屏幕共享权限并重新加载此应用程序。",
"perm_sys_denied.audio.others.message": "导航至您的系统设置。为您的浏览器允许“麦克风”权限并重新加载此应用程序。",
"perm_sys_denied.video.others.message": "导航至您的系统设置。为您的浏览器允许“摄像头”权限并重新加载此应用程序。",
"perm_sys_denied.screenshare.others.message": "导航至您的系统设置。为您的浏览器允许“屏幕共享”权限并重新加载此应用程序。",
"perm_could_not_start": "无法捕获设备。",
"perm_could_not_start.audio": "无法启动您的麦克风",
"perm_could_not_start.video": "无法启动您的摄像头",
"perm_could_not_start.screenshare": "无法启动您的屏幕共享",
"perm_could_not_start.audio.message": "系统似乎无法捕获您的麦克风。请重新启动您的设备或升级您的浏览器以解决此问题。",
"perm_could_not_start.video.message": "系统似乎无法捕获您的摄像头。请重新启动您的设备或升级您的浏览器以解决此问题。",
"perm_could_not_start.screenshare.message": "系统似乎无法捕获您的屏幕共享。请重新启动您的设备或升级您的浏览器以解决此问题。",
"full_screen": "全屏",
"full_screen.exit": "退出全屏",
"waitlist.header_title": "等待中",
"waitlist.body_text": "您在等候室中,主持人很快会允许您加入。",
"waitlist.deny_request": "拒绝请求",
"waitlist.accept_request": "接受请求",
"waitlist.accept_all": "全部接受",
"stage_request.header_title": "加入舞台请求",
"stage_request.deny_request": "拒绝请求",
"stage_request.accept_request": "接受请求",
"stage_request.accept_all": "全部接受",
"stage_request.deny_all": "全部拒绝",
"stage_request.approval_pending": "待处理",
"stage_request.denied": "已拒绝",
"stage_request.request": "加入舞台",
"stage_request.requested": "已请求",
"stage_request.cancel_request": "取消请求",
"stage_request.leave_stage": "离开舞台",
"stage_request.request_tip": "请求加入讨论",
"stage_request.leave_tip": "离开舞台",
"stage_request.pending_tip": "请求待处理",
"stage_request.denied_tip": "已拒绝请求",
"stage.empty_host": "舞台是空的",
"stage.empty_host_summary": "您不在舞台上。您可以在参与者选项卡中管理舞台请求。",
"stage.empty_viewer": "舞台上没有人",
"stage.remove_from_stage": "从舞台上移除",
"stage.invited_notification": "已被邀请加入舞台。",
"stage.add_to_stage": "邀请上台",
"stage.join_title": "加入舞台",
"stage.join_summary": "您即将加入舞台,上面显示的您的视频和音频将对所有参与者可见。",
"stage.join_cancel": "取消",
"stage.join_confirm": "加入",
"setup_screen.join_in_as": "加入身份为",
"setup_screen.your_name": "您的名字",
"stage.reconnecting": "正在重新连接...",
"recording.label": "REC",
"recording.indicator": "此会议正在录制中。",
"recording.started": "此会议正在录制中。",
"recording.stopped": "此会议的录制已停止。",
"recording.paused": "此会议的录制已暂停。",
"recording.error.start": "启动录制时出错。",
"recording.error.stop": "停止录制时出错",
"recording.error.resume": "恢复录制时出错",
"recording.start": "开始录制",
"recording.stop": "停止录制",
"recording.resume": "恢复录制",
"recording.starting": "正在启动",
"recording.stopping": "正在停止",
"recording.loading": "正在加载",
"recording.idle": "录制",
"audio_playback": "播放音频",
"audio_playback.title": "允许音频播放",
"audio_playback.description": "为了在您的设备上正常播放音频,请单击下面的按钮。",
"breakout_rooms": "分组讨论室",
"breakout_rooms.room_config_header": "创建分组讨论室",
"breakout_rooms.join_breakout_header": "加入分组讨论室",
"breakout_rooms.empty": "还没有人。",
"breakout_rooms.delete": "删除讨论室",
"breakout_rooms.switch": "切换",
"breakout_rooms.main_room": "主会议室",
"breakout_rooms.shuffle_participants": "随机分配参与者",
"breakout_rooms.deselect": "取消选择",
"breakout_rooms.selected": "已选择",
"breakout_rooms.num_of_rooms": "讨论室数量",
"breakout_rooms.approx": "大约",
"breakout_rooms.participants_per_room": "参与者/讨论室",
"breakout_rooms.division_text": "平分时。",
"breakout_rooms.start_breakout": "开始分组讨论",
"breakout_rooms.close_breakout": "关闭分组讨论",
"breakout_rooms.update_breakout": "更新分组讨论",
"breakout_rooms.discard_changes": "放弃更改",
"breakout_rooms.room": "讨论室",
"breakout_rooms.rooms": "讨论室",
"breakout_rooms.room_name": "讨论室名称",
"breakout_rooms.edit_room_name": "编辑讨论室名称",
"breakout_rooms.save_room_name": "保存讨论室名称",
"breakout_rooms.add_room": "添加",
"breakout_rooms.add_room_brief": "添加讨论室",
"breakout_rooms.select_all": "全选",
"breakout_rooms.unassign_all": "全部取消分配",
"breakout_rooms.assign": "分配",
"breakout_rooms.assign_participants": "分配参与者",
"breakout_rooms.none_assigned": "尚未分配参与者",
"breakout_rooms.drag_drop_participants": "拖放参与者",
"breakout_rooms.click_drop_participants": "单击此处进行分配",
"breakout_rooms.status.assign_multiple": "通过单击并选择他们来一次性分配多名参与者",
"breakout_rooms.status.select_room": "选择一个讨论室以分配",
"breakout_rooms.ephemeral_status.participants_assigned": "参与者已分配",
"breakout_rooms.ephemeral_status.participants_assigned_randomly": "参与者随机分配",
"breakout_rooms.ephemeral_status.changes_discarded": "已放弃更改",
"breakout_rooms.confirm_modal.start_breakout.header": "开始分组讨论室?",
"breakout_rooms.confirm_modal.start_breakout.content": "一旦开始,所有参与者都将被移动到他们被分配的讨论室中。",
"breakout_rooms.confirm_modal.start_breakout.cancelText": "不,返回",
"breakout_rooms.confirm_modal.start_breakout.ctaText": "是,开始",
"breakout_rooms.confirm_modal.close_breakout.header": "关闭分组讨论室?",
"breakout_rooms.confirm_modal.close_breakout.content": "所有分组讨论室将被关闭,参与者将被移动回主会议室。",
"breakout_rooms.confirm_modal.close_breakout.ctaText": "是,关闭分组讨论室",
"breakout_rooms.move_reason.started_msg": "正在启动分组讨论室...",
"breakout_rooms.move_reason.started_desc": "您正在被移动到您分配的讨论室",
"breakout_rooms.move_reason.closed_msg": "正在关闭分组讨论室...",
"breakout_rooms.move_reason.closed_desc": "您正在被移动回主会议室",
"breakout_rooms.move_reason.switch_room": "正在加入分组讨论室...",
"breakout_rooms.move_reason.switch_main_room": "正在加入主会议室...",
"breakout_rooms.all_assigned": "所有参与者均已分配",
"breakout_rooms.empty_main_room": "主会议室中没有更多参与者。",
"breakout_rooms.leave_confirmation": "您确定要离开通话吗?您目前处于分组讨论室中,您也可以加入主会议室。",
"breakout_rooms.leave_confirmation.main_room_btn": "返回主会议室",
"ai": "AI",
"ai.meeting_ai": "会议AI",
"ai.home": "首页",
"ai.transcriptions": "转录",
"ai.personal": "个人",
"ai.caption_view": "字幕视图",
"ai.chat.tooltip": "此对话仅对您可见,通话中的其他人无法看到。",
"ai.transcriptions.search_placeholder": "按参与者姓名或转录内容搜索",
"ai.transcriptions.no_transcripts_found": "未找到转录内容。请尝试搜索其他参与者或转录内容。",
"ai.transcriptions.no_transcripts_yet": "暂无转录内容。",
"search": "搜索",
"search.could_not_find": "找不到指定名称或 ID 的参与者。",
"search.empty": "似乎没有人在这里。",
"end": "结束会议",
"end.all": "为所有人结束会议",
"ended": "会议已结束。",
"ended.rejected": "您加入会议的请求被拒绝。",
"ended.left": "您离开了会议。",
"ended.kicked": "您已被移出会议。",
"ended.disconnected": "由于连接丢失,通话已结束。",
"ended.network": "请检查您的网络连接并重试。",
"ended.unauthorized": "您无权加入此会议。",
"network": "网络",
"network.reconnecting": "连接丢失。正在尝试重新连接。",
"network.delay_extended": "重新连接耗时过长。请检查您的网络连接。",
"network.disconnected": "无法重新连接。请离开会议并尝试刷新窗口。",
"network.leaving": "将在 10 秒后自动离开会议。",
"network.restored": "连接已恢复",
"network.delay": "重新连接耗时过长。",
"network.lost": "连接丢失",
"network.lost_extended": "连接丢失。请检查您的网络连接。",
"network.troubleshoot": "排查您的连接故障",
"init.auth_error": "我们无法验证您对该会议的访问权限。该会议可能已结束,或者您可能没有加入的权限。",
"init.network_error": "我们无法连接到会议。请重试,如果问题仍然存在,请检查您的互联网连接。",
"init.browser_error": "不支持您的浏览器。请尝试使用其他或更新的浏览器。",
"init.default_error": "连接到会议时出错。请重试。",
"join.network_error": "我们无法连接到会议。请检查您的互联网连接并重试。",
"join.media_error": "我们无法连接到会议。请重试,如果问题仍然存在,请尝试使用其他网络。",
"join.media_firewall_error": "您的网络可能会阻止此连接。请尝试使用其他网络,或联系您的网络管理员以获得帮助。",
"join.default_error": "加入会议时出错。请重试。",
"join.error_code": "错误代码",
"livestream": "直播",
"livestream.indicator": "此会议正在直播中。",
"livestream.skip": "跳转到直播",
"livestream.idle": "正在等待开始直播。",
"livestream.starting": "直播正在启动...",
"livestream.stopping": "直播正在停止...",
"livestream.waiting_on_manual_ingestion": "请推流直播媒体。",
"livestream.error.not_supported": "不支持该播放器。",
"livestream.error.not_found": "未找到播放 URL。",
"livestream.error.unknown": "发生未知错误。",
"livestream.error.sync": "无法同步直播,请稍后重试。",
"livestream.error.start": "启动直播时出错。",
"livestream.error.stop": "停止直播时出错。",
"livestream.go_live": "开始直播",
"livestream.end_live": "结束直播",
"livestream.error": "错误",
"cta.help": "需要了解如何执行此操作的帮助吗?",
"cta.continue": "忽略",
"cta.reload": "重新加载",
"cta.confirmation": "您确定吗?",
"cta.system_settings": "打开设置",
"remote_access.empty": "暂无远程请求。",
"remote_access.requests": "以下人员请求远程控制您的屏幕共享。",
"remote_access.allow": "请选择您要授权给谁。",
"remote_access.grant": "授予访问权限",
"remote_access.indicator": "您切换到的任何插件或屏幕共享都将在整个会议中同步更改",
"chat": "聊天",
"chat.new": "新",
"chat.max_limit_warning": "最大字符数限制",
"chat.rate_limit_error": "请稍候再发送另一条消息",
"chat.member_name": "输入成员姓名",
"chat.add_members": "添加成员",
"chat.delete_msg": "删除",
"chat.edit_msg": "编辑",
"chat.send_msg": "发送消息",
"chat.send_attachment": "拖放文件/图片以发送",
"chat.send_img": "发送图片",
"chat.send_file": "发送文件",
"chat.send_emoji": "发送表情符号",
"chat.update_msg": "更新消息",
"chat.img.loading": "正在加载图片",
"chat.error.img_not_found": "未找到图片",
"chat.error.empty_results": "找不到指定名称的成员。",
"chat.img.shared_by": "分享者",
"chat.reply": "回复",
"chat.message_placeholder": "消息...",
"chat.click_to_send": "单击以作为消息发送",
"chat.search_msgs": "搜索消息",
"chat.search_conversations": "搜索对话",
"chat.start_conversation": "发起对话...",
"chat.empty_search": "未找到消息",
"chat.empty_chat": "发送消息以开始",
"chat.cancel_upload": "取消上传",
"chat.view_chats": "查看聊天",
"chat.everyone": "所有人",
"chat.pinned_msgs": "已置顶消息",
"chat.toggle_pinned_msgs": "切换置顶消息",
"date.today": "今天",
"date.yesterday": "昨天",
"date.sunday": "星期日",
"date.monday": "星期一",
"date.tuesday": "星期二",
"date.wednesday": "星期三",
"date.thursday": "星期四",
"date.friday": "星期五",
"date.saturday": "星期六",
"list.empty": "未找到项目",
"grid.listening": "正在倾听",
"transcript.off": "关闭转录",
"transcript.on": "开启转录",
"settings.notification_sound": "通知提示音",
"settings.microphone_input": "麦克风",
"settings.speaker_output": "扬声器",
"settings.mirror_video": "镜像我的视频",
"settings.camera_off": "摄像头已关闭",
"dialog.close": "关闭对话框",
"notifications.joined": "刚刚加入",
"notifications.left": "离开了",
"notifications.requesting_to_join_meeting": "正在请求加入会议",
"notifications.requested_to_join_stage": "已请求加入舞台",
"notifications.joined_stage": "已加入舞台",
"notifications.request_to_join_accepted": "加入请求已接受",
"notifications.request_to_join_rejected": "加入请求被拒绝",
"notifications.accept": "接受",
"notifications.new_poll_created_by": "新建的投票,发起人为",
"notifications.connected_to": "连接到",
"notifications.plugin_switched_to": "插件切换为",
"notifications.remote_control_requested": "已请求远程控制",
"notifications.remote_control_request_sent": "已将远程控制请求发送给",
"notifications.remote_control_request_accepted": "已授予远程控制",
"notifications.remote_control_granted": "已将远程控制授予",
"notifications.remote_control_terminated": "现有的远程控制已终止",
"debugger.troubleshooting.label": "疑难解答",
"debugger.quality.good": "良好",
"debugger.quality.average": "一般",
"debugger.quality.poor": "较差",
"debugger.stats.bitrate.label": "比特率",
"debugger.stats.bitrate.description": "每秒传输的数据量,会影响画质和文件大小。",
"debugger.stats.packet_loss.label": "丢包率",
"debugger.stats.packet_loss.description": "传输过程中丢失的数据量",
"debugger.stats.jitter.label": "抖动",
"debugger.stats.jitter.description": "延迟的变动或波动",
"debugger.stats.cpu_limitations.label": "CPU 限制",
"debugger.stats.cpu_limitations.description": "CPU 限制可能会影响 WebRTC 通话质量和性能。",
"debugger.stats.bandwidth_limitations.label": "带宽限制",
"debugger.stats.bandwidth_limitations.description": "网速慢可能会降低视频质量。",
"debugger.audio.label": "音频",
"debugger.audio.troubleshooting.label": "音频疑难解答",
"debugger.audio.messages.generating_report": "正在生成报告。请等待几秒钟。",
"debugger.audio.messages.enable_media": "请启用麦克风以查看报告。",
"debugger.audio.sections.network_media": "网络与媒体",
"debugger.video.label": "视频",
"debugger.video.troubleshooting.label": "视频疑难解答",
"debugger.video.messages.generating_report": "正在生成报告。请等待几秒钟。",
"debugger.video.messages.enable_media": "请启用摄像头以查看报告。",
"debugger.video.sections.network_media": "网络与媒体",
"debugger.screenshare.label": "屏幕共享",
"debugger.screenshare.troubleshooting.label": "屏幕共享疑难解答",
"debugger.screenshare.sections.network_media": "网络与媒体",
"debugger.screenshare.messages.generating_report": "正在生成报告。请等待几秒钟。",
"debugger.screenshare.messages.enable_media": "请共享屏幕以查看报告。",
"debugger.system.label": "系统",
"debugger.system.troubleshooting.label": "系统疑难解答",
"debugger.system.sections.battery": "电池",
"debugger.system.battery.level.label": "电量",
"debugger.system.battery.level.description": "电池电量低可能会导致性能下降。",
"debugger.system.battery.charging.label": "电池充电状态",
"debugger.system.battery.charging.description": "接通电源运行的设备性能最佳。",
"debugger.system.battery.charging.is_charging": "正在充电",
"debugger.system.battery.charging.is_not_charging": "未在充电"
}您可以在自定义语言包中覆盖这些键中的任何一个。例如,要将界面翻译为西班牙语:
const spanishLanguagePack = useLanguage({
...defaultLanguage,
leave: "Salir",
join: "Unirse",
mute: "Silenciar",
participants: "Participantes",
chat: "Chat",
settings: "Configuración",
});下表列出了 Flutter UI Kit 的所有可覆盖字符串键。在您的 ARB 文件中使用这些键来覆盖相应的 UI 文本。
| 键 | 默认值 |
|---|---|
join |
Join |
joinInAs |
Join in as |
enterYourName |
Enter your name |
micOn |
Mic On |
micOff |
Mic Off |
leave |
Leave |
cancel |
Cancel |
areYouSureYouWantToLeaveTheCall |
Are you sure you want to leave the call? |
more |
more |
selectAudioDevice |
Select Audio Device |
selectVideoDevice |
Select Video Device |
videoOn |
Video On |
videoOff |
Video Off |
mute |
Mute |
unmute |
Muted |
unpin |
Unpin |
pin |
Pin |
kick |
Kick |
removeFromStage |
Remove from stage |
inviteToStage |
Invite to stage |
screenShare |
Screen Share |
plugins |
Plugins |
createPoll |
Create Poll |
question |
Question |
askAQuestion |
Ask a question |
options |
Options |
enterAnOption |
Enter an option |
addOption |
Add an Option |
anonymous |
Anonymous |
hideResultsBeforeVoting |
Hide Results before voting |
questionAndOptionsCantBeEmpty |
Question and options can not be empty! |
polls |
Polls |
pollBy |
Poll by |
vote |
Vote |
voted |
Voted |
viewVoters |
View Voters |
stopRecording |
Stop Recording |
startRecording |
Start Recording |
muteAll |
Mute All |
disableAllVideos |
Disable all videos |
settings |
Settings |
rec |
REC |
camera |
Camera |
microphoneInput |
Microphone (input) |
chat |
Chat |
noMessages |
No messages |
chatMessagesWillAppearHere |
Chat messages will appear here |
file |
File |
image |
Image |
send |
Send |
participants |
Participants |
waitlisted |
Waitlisted |
inCall |
In Call |
you |
you |
turnOffVideo |
Turn off video |
videoAlreadyOff |
Video already off |
back |
Back |
waitingForTheHostToLetYouIn |
Wait for the host to let you in! |
shareScreen |
Share Screen |
stopSharing |
Stop Sharing |
endMeetingForAll |
End Meeting for All |
message |
Message |
newPollCreated |
New Poll created |
waitingToGoLive |
Waiting to go live |
frontCamera |
Front Camera |
rearCamera |
Rear Camera |
externalCamera |
External Camera |
headset |
Headset |
speaker |
Speaker |
bluetooth |
Bluetooth |
earpiece |
Earpiece |
React Native UI Kit 通过 defaultLanguage 对象公开了大约 195 个可覆盖的字符串键。下表列出了常用键。有关完整列表,请参阅 @cloudflare/realtimekit-react-native-ui 中的 defaultLanguage 导出。
| 键 | 默认值 |
|---|---|
join |
Join |
leave |
Leave |
cancel |
Cancel |
leave_confirmation |
Are you sure you want to leave the call? |
mic_on |
Mic On |
mic_off |
Mic Off |
video_on |
Video On |
video_off |
Video Off |
mute |
Mute |
mute_all |
Mute all |
participants |
Participants |
chat |
Chat |
settings |
Settings |
polls |
Polls |
screenshare |
Screen Share |
screenshare.start |
Share Screen |
screenshare.stop |
Stop Sharing |
recording.start |
Start Recording |
recording.stop |
Stop Recording |
end |
End Meeting |
end.all |
End meeting for all |
setup_screen.join_in_as |
Join in as |
setup_screen.your_name |
Your name |
network.reconnecting |
Connection lost. Trying to reconnect... |
network.restored |
Connection restored |
ended |
The meeting ended. |
ended.left |
You left the meeting. |
ended.kicked |
You were removed from the meeting. |