From bf23107e7ae03e8fa08da01a39254fb05befaef6 Mon Sep 17 00:00:00 2001 From: Kerinlin Date: Thu, 23 Oct 2025 11:19:23 +0800 Subject: [PATCH] fix(i18n): Fix Chinese language issues and hyphenated locale persistence - Fix missing Chinese translations in main-zh-CN.json and main-zh-TW.json - Fix language selection not persisting for hyphenated locales (zh-CN, zh-TW, es-US, fr-CA, pt-BR) - Update normalizeCurrentLanguage to check exact match before normalization --- lang/main-zh-CN.json | 67 +++++++++++++++++++++++- lang/main-zh-TW.json | 67 +++++++++++++++++++++++- react/features/base/i18n/i18next.ts | 2 +- react/features/settings/functions.any.ts | 5 ++ 4 files changed, 138 insertions(+), 3 deletions(-) diff --git a/lang/main-zh-CN.json b/lang/main-zh-CN.json index d009093bd3..d624fc5f3b 100644 --- a/lang/main-zh-CN.json +++ b/lang/main-zh-CN.json @@ -112,7 +112,12 @@ "disabled": "聊天已禁用", "enter": "加入会议室", "error": "错误:你的消息未发送。原因:{{error}}", + "everyone": "所有人", "fieldPlaceHolder": "在这里输入你的信息", + "fileAccessibleTitle": "{{user}}上传了一个文件", + "fileAccessibleTitleMe": "我上传了一个文件", + "fileDeleted": "文件已被删除", + "guestsChatIndicator": "(访客)", "lobbyChatMessageTo": "等候室聊天消息发送至{{recipient}}", "message": "信息", "messageAccessibleTitle": "{{user}}:", @@ -300,6 +305,12 @@ "alreadySharedVideoTitle": "同一时间只允许一个视频分享", "applicationWindow": "应用程序窗口", "authenticationRequired": "需要身份验证", + "cameraCaptureDialog": { + "description": "使用手机摄像头拍照并发送", + "ok": "打开相机", + "reject": "暂不使用", + "title": "拍照" + }, "cameraConstraintFailedError": "你的摄像头未满足某些必要条件。", "cameraNotFoundError": "找不到摄像头", "cameraNotSendingData": "我们无法访问你的摄像头,请检查是否有其他应用程序正在使用此设备,从设置菜单中选择另一个设备,或尝试重新加载应用程序。", @@ -375,22 +386,34 @@ "micTimeoutError": "无法开启音频设备,发生超时!", "micUnknownError": "由于未知原因,无法使用麦克风。", "moderationAudioLabel": "允许参会者自己解除静音", + "moderationDesktopLabel": "允许非主持人共享屏幕", "moderationVideoLabel": "允许参会者自己开启视频", "muteEveryoneDialog": "参会者可以在任何时候解除自己的静音。", "muteEveryoneDialogModerationOn": "参会者可以在任何时候请求发言。", "muteEveryoneElseDialog": "静音后,你将无法为其解除静音,但是他们可以随时解除自己的静音。", "muteEveryoneElseTitle": "除了{{whom}}以外的将所有人静音?", + "muteEveryoneElsesDesktopDialog": "一旦停止共享,你将无法重新开启他们的屏幕共享,但他们可以随时重新开启。", + "muteEveryoneElsesDesktopTitle": "停止除了{{whom}}以外所有人的屏幕共享?", "muteEveryoneElsesVideoDialog": "一旦关闭,你将无法重新开启他们的摄像头,但他们随时可以重新开启。", "muteEveryoneElsesVideoTitle": "除了{{whom}}以外,关闭所有人的摄像头?", "muteEveryoneSelf": "你自己", "muteEveryoneStartMuted": "现在所有人都已静音", "muteEveryoneTitle": "静音所有人?", + "muteEveryonesDesktopDialog": "参会者可以随时共享他们的屏幕", + "muteEveryonesDesktopDialogModerationOn": "参会者可以随时请求共享他们的屏幕", + "muteEveryonesDesktopTitle": "停止所有人的屏幕共享?", "muteEveryonesVideoDialog": "参会者可以随时开启他们的摄像头", "muteEveryonesVideoDialogModerationOn": "参会者可以随时请求开启他们的摄像头", "muteEveryonesVideoDialogOk": "关闭", "muteEveryonesVideoTitle": "关闭所有人的摄像头?", "muteParticipantBody": "你将无法为他们解除静音,但是他们可以随时解除自己的静音。", "muteParticipantButton": "静音", + "muteParticipantsDesktopBody": "你无法重新开启他们的屏幕共享,但他们可以随时重新开启。", + "muteParticipantsDesktopBodyModerationOn": "你和他们都无法重新开启屏幕共享", + "muteParticipantsDesktopButton": "停止屏幕共享", + "muteParticipantsDesktopDialog": "你确定要停止这个参会者的屏幕共享吗?你将无法重新开启他们的屏幕共享,但他们可以随时重新开启。", + "muteParticipantsDesktopDialogModerationOn": "你确定要停止这个参会者的屏幕共享吗?你和他们都无法重新开启屏幕共享。", + "muteParticipantsDesktopTitle": "停止这个参会者的屏幕共享?", "muteParticipantsVideoBody": "你无法重新开启摄像头,但他们随时可以重新开启。", "muteParticipantsVideoBodyModerationOn": "你和他们都无法重新开启摄像头", "muteParticipantsVideoButton": "关闭摄像头", @@ -503,6 +526,7 @@ "tokenAuthFailedWithReasons": "抱歉,你无法加入此通话,原因:", "tokenAuthUnsupported": "Token地址不支持", "transcribing": "转录中", + "unauthenticatedAccessDisabled": "此会议需要身份验证,请先登录后继续。", "unlockRoom": "移除会议$t(lockRoomPassword)", "user": "用户", "userIdentifier": "用户ID", @@ -547,11 +571,17 @@ "downloadFailedDescription": "请稍后重试", "downloadFailedTitle": "下载失败", "downloadFile": "下载", + "downloadStarted": "文件下载已开始", "dragAndDrop": "拖拽文件到此处上传", "fileAlreadyUploaded": "文件已上传至本次会议", + "fileRemovedByOther": "你的文件{{fileName}}已被移除", "fileTooLargeDescription": "请确保文件不超过 {{ maxFileSize }}", "fileTooLargeTitle": "文件太大", + "fileUploadProgress": "文件上传进度", + "fileUploadedSuccessfully": "文件上传成功", + "newFileNotification": "{{participantName}}分享了{{fileName}}", "removeFile": "移除", + "removeFileSuccess": "文件移除成功", "uploadFailedDescription": "请稍后重试", "uploadFailedTitle": "上传失败", "uploadFile": "文件共享" @@ -724,7 +754,8 @@ "notificationTitle": "等候室", "passwordJoinButton": "加入", "title": "等候室", - "toggleLabel": "开启等候室模式" + "toggleLabel": "开启等候室模式", + "waitForModerator": "会议尚未开始,暂无主持人入会。如需成为主持人请先登录,或耐心等待会议开始。" }, "localRecording": { "clientState": { @@ -767,8 +798,10 @@ "me": "我", "notify": { "OldElectronAPPTitle": "安全漏洞!", + "allowAll": "允许全部", "allowAudio": "允许开启麦克风", "allowBoth": "允许音视频", + "allowDesktop": "允许屏幕共享", "allowVideo": "允许开启摄像头", "allowedUnmute": "你可以解除麦克风静音、启动摄像头或共享屏幕。", "audioUnmuteBlockedDescription": "由于系统限制,麦克风解除静音操作被暂时阻止。", @@ -782,6 +815,7 @@ "dataChannelClosedDescription": "桥接通道已断开,视频质量可能会被限制为最低设置", "dataChannelClosedDescriptionWithAudio": "桥接通道已断开,音视频可能会出现卡顿或中断", "dataChannelClosedWithAudio": "音视频质量可能受影响", + "desktopMutedRemotelyTitle": "你的屏幕共享已被{{participantDisplayName}}停止", "disabledIframe": "嵌入仅用于演示,本次通话将在{{timeout}}分钟后自动断开", "disabledIframeSecondaryNative": "嵌入{{domain}}仅用于演示,本次通话将在{{timeout}}分钟后自动断开", "disabledIframeSecondaryWeb": "嵌入{{domain}}仅用于演示,本次通话将在{{timeout}}分钟后自动断开。如需在正式环境嵌入,请使用Jitsi服务!", @@ -839,6 +873,7 @@ "oldElectronClientDescription1": "你似乎正在使用存在已知安全漏洞的旧版Jitsi Meet客户端,请确保您更新到我们的", "oldElectronClientDescription2": "最新版本", "oldElectronClientDescription3": "!", + "openChat": "打开聊天", "participantWantsToJoin": "想要加入会议", "participantsWantToJoin": "想要加入会议", "passwordRemovedRemotely": "其他参会者移除了$t(lockRoomPasswordUppercase)", @@ -862,6 +897,7 @@ "suggestRecordingDescription": "是否需要录制本次会议?", "suggestRecordingTitle": "录制会议", "unmute": "解除静音", + "unmuteScreen": "开始屏幕共享", "unmuteVideo": "开启摄像头", "videoMutedRemotelyDescription": "你可随时重新开启视频", "videoMutedRemotelyTitle": "{{participantDisplayName}}已关闭你的视频", @@ -881,11 +917,14 @@ "admit": "同意加入", "admitAll": "全部同意加入", "allow": "允许参会者:", + "allowDesktop": "允许屏幕共享", "allowVideo": "允许开启摄像头", + "askDesktop": "请求共享屏幕", "askUnmute": "请求取消静音", "audioModeration": "自行解除静音", "blockEveryoneMicCamera": "禁用所有人的麦克风和摄像头", "breakoutRooms": "分组讨论室", + "desktopModeration": "开始屏幕共享", "goLive": "开始直播", "invite": "邀请其他人", "lowerAllHands": "取消全部举手", @@ -897,6 +936,8 @@ "muteAll": "全体静音", "muteEveryoneElse": "静音其他人", "reject": "拒绝", + "stopDesktop": "停止屏幕共享", + "stopEveryonesDesktop": "停止所有人的屏幕共享", "stopEveryonesVideo": "关闭所有人摄像头", "stopVideo": "关闭摄像头", "unblockEveryoneMicCamera": "允许所有人开启麦克风和摄像头", @@ -906,9 +947,11 @@ "headings": { "lobby": "等候室(({{count}}人)", "participantsList": "会议参会者({{count}}人)", + "viewerRequests": "观众请求({{count}}人)", "visitorInQueue": "(排队中:{{count}}人)", "visitorRequests": "(请求加入:{{count}}人)", "visitors": "观众(({{count}}人)", + "visitorsList": "观众({{count}}人)", "waitingLobby": "在等候室等待({{count}}人)" }, "search": "搜索参会者", @@ -929,6 +972,9 @@ "by": "由{{ name }}发起", "closeButton": "结束投票", "create": { + "accessibilityLabel": { + "send": "发送投票" + }, "addOption": "添加选项", "answerPlaceholder": "选项{{index}}", "cancel": "取消", @@ -1345,6 +1391,20 @@ "videounmute": "打开摄像头" }, "addPeople": "添加成员到通话中", + "advancedAudioSettings": { + "aec": { + "label": "回声消除" + }, + "agc": { + "label": "自动增益控制" + }, + "ns": { + "label": "降噪" + }, + "stereo": { + "label": "立体声" + } + }, "audioOnlyOff": "关闭省流模式", "audioOnlyOn": "开启省流模式", "audioRoute": "选择音频设备", @@ -1416,6 +1476,7 @@ "reactionHeart": "发送爱心", "reactionLaugh": "发送大笑", "reactionLike": "发送点赞", + "reactionLove": "发送爱心", "reactionSilence": "发送沉默", "reactionSurprised": "发送惊讶", "reactions": "互动表情", @@ -1501,6 +1562,8 @@ "connectionInfo": "连接信息", "demote": "设为观众", "domute": "静音", + "domuteDesktop": "停止屏幕共享", + "domuteDesktopOfOthers": "停止屏幕共享给其他人", "domuteOthers": "静音其他人", "domuteVideo": "关闭摄像头", "domuteVideoOfOthers": "关闭其他人摄像头", @@ -1565,6 +1628,8 @@ "noMainParticipantsTitle": "会议尚未开始", "noVisitorLobby": "当前会议已开启等候室,暂无法加入", "notAllowedPromotion": "需由会议成员同意才能参与讨论", + "requestToJoin": "举手请求", + "requestToJoinDescription": "你的请求已发送给主持人,请稍候!", "title": "你当前为会议观众" }, "waitingMessage": "会议开始后将自动加入" diff --git a/lang/main-zh-TW.json b/lang/main-zh-TW.json index 3730d46ff6..048612d6dd 100644 --- a/lang/main-zh-TW.json +++ b/lang/main-zh-TW.json @@ -112,7 +112,12 @@ "disabled": "聊天訊息已停用", "enter": "加入聊天室", "error": "錯誤:您的訊息未被傳送。原因:{{error}}", + "everyone": "所有人", "fieldPlaceHolder": "在此輸入您的訊息", + "fileAccessibleTitle": "{{user}}上傳了一個檔案", + "fileAccessibleTitleMe": "我上傳了一個檔案", + "fileDeleted": "檔案已被刪除", + "guestsChatIndicator": "(訪客)", "lobbyChatMessageTo": "大廳聊天訊息傳送至 {{recipient}}", "message": "訊息", "messageAccessibleTitle": "{{user}}:", @@ -300,6 +305,12 @@ "alreadySharedVideoTitle": "同一時間只允許一位影像分享", "applicationWindow": "應用程式視窗", "authenticationRequired": "需要驗證", + "cameraCaptureDialog": { + "description": "使用手機攝影機拍照並傳送", + "ok": "開啟相機", + "reject": "暫不使用", + "title": "拍照" + }, "cameraConstraintFailedError": "您的網路攝影機不符合要求。", "cameraNotFoundError": "找不到網路攝影機。", "cameraNotSendingData": "我們無法存取您的網路攝影機,請檢查是否有其他應用程式正在使用這個裝置,並從裝置選單裡選擇其他設備或者重新載入。", @@ -375,22 +386,34 @@ "micTimeoutError": "無法啟動音訊裝置,連線逾時!", "micUnknownError": "不明原因造成麥克風無法使用。", "moderationAudioLabel": "允許與會者自我解除靜音", + "moderationDesktopLabel": "允許非主持人共享螢幕", "moderationVideoLabel": "允許與會者開啟視訊", "muteEveryoneDialog": "與會者可以隨時解除自己的靜音狀態。", "muteEveryoneDialogModerationOn": "與會者可以隨時請求發言。", "muteEveryoneElseDialog": "靜音後,您就不能再解除對方的靜音,但對方可以隨時解除自己的靜音狀態。", "muteEveryoneElseTitle": "是否要讓除了 {{whom}} 以外的人靜音?", + "muteEveryoneElsesDesktopDialog": "一旦停止共享,您將無法重新開啟他們的螢幕共享,但他們可以隨時重新開啟。", + "muteEveryoneElsesDesktopTitle": "停止除了{{whom}}以外所有人的螢幕共享?", "muteEveryoneElsesVideoDialog": "一旦停用,您就不能再重新開啟對方的網路攝影機,但對方隨時能重新開啟自己的網路攝影機。", "muteEveryoneElsesVideoTitle": "是否要關閉除了 {{whom}} 以外的人的網路攝影機?", "muteEveryoneSelf": "您自己", "muteEveryoneStartMuted": "現在所有人皆已靜音", "muteEveryoneTitle": "要將所有人靜音嗎?", + "muteEveryonesDesktopDialog": "與會者可以隨時共享他們的螢幕", + "muteEveryonesDesktopDialogModerationOn": "與會者可以隨時請求共享他們的螢幕", + "muteEveryonesDesktopTitle": "停止所有人的螢幕共享?", "muteEveryonesVideoDialog": "與會者隨時可以重新開啟自己的網路攝影機。", "muteEveryonesVideoDialogModerationOn": "與會者可以隨時傳送開啟視訊請求。", "muteEveryonesVideoDialogOk": "停用", "muteEveryonesVideoTitle": "要關閉所有人的網路攝影機嗎?", "muteParticipantBody": "您無法對他們解除靜音,但是他們自己隨時可以解除靜音。", "muteParticipantButton": "靜音", + "muteParticipantsDesktopBody": "您無法重新開啟他們的螢幕共享,但他們可以隨時重新開啟。", + "muteParticipantsDesktopBodyModerationOn": "您和他們都無法重新開啟螢幕共享", + "muteParticipantsDesktopButton": "停止螢幕分享", + "muteParticipantsDesktopDialog": "您確定要停止這位與會者的螢幕共享嗎?您將無法重新開啟他們的螢幕共享,但他們可以隨時重新開啟。", + "muteParticipantsDesktopDialogModerationOn": "您確定要停止這位與會者的螢幕共享嗎?您和他們都無法重新開啟螢幕共享。", + "muteParticipantsDesktopTitle": "停止這位與會者的螢幕共享?", "muteParticipantsVideoBody": "您無法重新開啟,只有對方能自己重新開啟。", "muteParticipantsVideoBodyModerationOn": "您和他都無法再將視訊重新開啟。", "muteParticipantsVideoButton": "停用網路攝影機", @@ -503,6 +526,7 @@ "tokenAuthFailedWithReasons": "抱歉,您無法參加這個通話,可能原因:{{reason}}", "tokenAuthUnsupported": "不支援權杖網址。", "transcribing": "轉錄中", + "unauthenticatedAccessDisabled": "此會議需要身份驗證,請先登入後繼續。", "unlockRoom": "移除會議 $t(lockRoomPassword)", "user": "使用者", "userIdentifier": "使用者 ID", @@ -547,11 +571,17 @@ "downloadFailedDescription": "請重試", "downloadFailedTitle": "下載失敗", "downloadFile": "下載", + "downloadStarted": "檔案下載已開始", "dragAndDrop": "將檔案拖曳至此或畫面任一處上傳", "fileAlreadyUploaded": "檔案已上傳至此會議", + "fileRemovedByOther": "您的檔案「{{fileName}}」已被移除", "fileTooLargeDescription": "請確認檔案未超過 {{ maxFileSize }}", "fileTooLargeTitle": "檔案過大", + "fileUploadProgress": "檔案上傳進度", + "fileUploadedSuccessfully": "檔案上傳成功", + "newFileNotification": "{{participantName}}分享了「{{fileName}}」", "removeFile": "移除", + "removeFileSuccess": "檔案移除成功", "uploadFailedDescription": "請重試", "uploadFailedTitle": "上傳失敗", "uploadFile": "分享檔案" @@ -724,7 +754,8 @@ "notificationTitle": "大廳", "passwordJoinButton": "加入", "title": "大廳", - "toggleLabel": "啟用大廳模式" + "toggleLabel": "啟用大廳模式", + "waitForModerator": "會議尚未開始,暫無主持人入會。如需成為主持人請先登入,或耐心等待會議開始。" }, "localRecording": { "clientState": { @@ -767,8 +798,10 @@ "me": "我", "notify": { "OldElectronAPPTitle": "安全漏洞!", + "allowAll": "允許全部", "allowAudio": "允許音訊", "allowBoth": "允許音訊與視訊", + "allowDesktop": "允許螢幕分享", "allowVideo": "允許視訊", "allowedUnmute": "您可以將麥克風解除靜音、開啟視訊,或是分享您的螢幕。", "audioUnmuteBlockedDescription": "麥克風解除靜音操作由於系統限制而被暫時封鎖。", @@ -782,6 +815,7 @@ "dataChannelClosedDescription": "橋接通道已斷開,視訊品質降至最低設定。", "dataChannelClosedDescriptionWithAudio": "橋接通道已斷開,音訊和視訊可能會受到影響。", "dataChannelClosedWithAudio": "音訊和視訊品質可能會降低。", + "desktopMutedRemotelyTitle": "您的螢幕分享已被{{participantDisplayName}}停止", "disabledIframe": "嵌入僅供示範使用,此通話將於 {{timeout}} 分鐘後中斷連線。", "disabledIframeSecondaryNative": "嵌入 {{domain}} 僅供示範,此通話將於 {{timeout}} 分鐘後中斷。", "disabledIframeSecondaryWeb": "嵌入 {{domain}} 僅供示範,此通話將於 {{timeout}} 分鐘後中斷,請使用 Jitsi 服務 來進行正式嵌入!", @@ -839,6 +873,7 @@ "oldElectronClientDescription1": "您似乎正在使用存在已知安全漏洞的過時 Jitsi Meet 用戶端,請盡快更新至我們的", "oldElectronClientDescription2": "最新版本", "oldElectronClientDescription3": "!", + "openChat": "開啟聊天", "participantWantsToJoin": "希望加入會議", "participantsWantToJoin": "希望加入會議", "passwordRemovedRemotely": "$t(lockRoomPasswordUppercase) 已被其他與會者移除", @@ -862,6 +897,7 @@ "suggestRecordingDescription": "是否要開始錄製這場會議?", "suggestRecordingTitle": "錄製此會議", "unmute": "取消靜音", + "unmuteScreen": "開始螢幕分享", "unmuteVideo": "啟用視訊", "videoMutedRemotelyDescription": "您隨時可以再次啟用。", "videoMutedRemotelyTitle": "您的視訊已被 {{participantDisplayName}} 停用", @@ -881,11 +917,14 @@ "admit": "準許", "admitAll": "準許所有人", "allow": "允許與會者能夠:", + "allowDesktop": "允許螢幕分享", "allowVideo": "允許視訊", + "askDesktop": "請求共享螢幕", "askUnmute": "要求解除靜音", "audioModeration": "自我解除靜音", "blockEveryoneMicCamera": "停用所有人的麥克風和網路攝影機", "breakoutRooms": "分組討論室", + "desktopModeration": "開始螢幕分享", "goLive": "開始直播", "invite": "邀請他人", "lowerAllHands": "全部取消舉手", @@ -897,6 +936,8 @@ "muteAll": "靜音所有人", "muteEveryoneElse": "靜音其他人", "reject": "拒絕", + "stopDesktop": "停止螢幕分享", + "stopEveryonesDesktop": "停止所有人的螢幕分享", "stopEveryonesVideo": "停用所有人的視訊", "stopVideo": "停用視訊", "unblockEveryoneMicCamera": "解除封鎖所有人的麥克風及網路攝影機", @@ -906,9 +947,11 @@ "headings": { "lobby": "大廳({{count}} 人)", "participantsList": "會議與會者({{count}} 人)", + "viewerRequests": "觀眾請求({{count}}人)", "visitorInQueue": "({{count}} 人等候中)", "visitorRequests": "{{count}} 人申請", "visitors": "訪客({{count}} 人)", + "visitorsList": "觀眾({{count}}人)", "waitingLobby": "於大廳等候({{count}} 人)" }, "search": "搜尋與會者", @@ -929,6 +972,9 @@ "by": "由 {{ name }}", "closeButton": "結束投票", "create": { + "accessibilityLabel": { + "send": "傳送投票" + }, "addOption": "新增選項", "answerPlaceholder": "選項 {{index}}", "cancel": "取消", @@ -1345,6 +1391,20 @@ "videounmute": "啟用網路攝影機" }, "addPeople": "新增人員到您的通話中", + "advancedAudioSettings": { + "aec": { + "label": "回聲消除" + }, + "agc": { + "label": "自動增益控制" + }, + "ns": { + "label": "降噪" + }, + "stereo": { + "label": "立體聲" + } + }, "audioOnlyOff": "停用低頻寬模式", "audioOnlyOn": "啟用低頻寬模式", "audioRoute": "選擇音訊裝置", @@ -1416,6 +1476,7 @@ "reactionHeart": "傳送愛心反應", "reactionLaugh": "傳送大笑反應", "reactionLike": "傳送比讚反應", + "reactionLove": "傳送愛心", "reactionSilence": "傳送沉默反應", "reactionSurprised": "傳送驚訝反應", "reactions": "反應", @@ -1501,6 +1562,8 @@ "connectionInfo": "連線資訊", "demote": "轉為訪客", "domute": "靜音", + "domuteDesktop": "停止螢幕分享", + "domuteDesktopOfOthers": "停止螢幕分享給其他人", "domuteOthers": "靜音其他人", "domuteVideo": "停用網路攝影機", "domuteVideoOfOthers": "停用其他人的網路攝影機", @@ -1565,6 +1628,8 @@ "noMainParticipantsTitle": "會議尚未開始", "noVisitorLobby": "此會議啟用大廳,暫時無法加入", "notAllowedPromotion": "需由與會者同意您的申請", + "requestToJoin": "舉手請求", + "requestToJoinDescription": "您的請求已傳送給主持人,請稍候!", "title": "您是會議中的訪客" }, "waitingMessage": "會議開始後您將自動加入!" diff --git a/react/features/base/i18n/i18next.ts b/react/features/base/i18n/i18next.ts index 2d266ee27e..c9b69d2264 100644 --- a/react/features/base/i18n/i18next.ts +++ b/react/features/base/i18n/i18next.ts @@ -80,7 +80,7 @@ const options: i18next.InitOptions = { interpolation: { escapeValue: false // not needed for react as it escapes by default }, - load: 'languageOnly', + load: 'all', ns: [ 'main', 'languages', 'countries', 'translation-languages' ], react: { // re-render when a new resource bundle is added diff --git a/react/features/settings/functions.any.ts b/react/features/settings/functions.any.ts index ae826cd281..e69d3a8a10 100644 --- a/react/features/settings/functions.any.ts +++ b/react/features/settings/functions.any.ts @@ -96,6 +96,11 @@ function normalizeCurrentLanguage(language: string) { return; } + // First check if the language code exists as-is (e.g., 'zh-CN', 'fr-CA') + if (LANGUAGES.includes(language)) { + return language; + } + const [ country, lang ] = language.split('-'); const jitsiNormalized = `${country}${lang ?? ''}`;