diff --git a/app/client/public/locales/zh_CN/translation.json b/app/client/public/locales/zh_CN/translation.json
new file mode 100644
index 0000000..0168e9e
--- /dev/null
+++ b/app/client/public/locales/zh_CN/translation.json
@@ -0,0 +1,45 @@
+{
+ "Waiting for user to click ALLOW button on screen sharing device...": "正在等待用户单击屏幕共享设备上的允许按钮...",
+ "Waiting for user to select source to share from screen sharing device...": "正在等待用户从屏幕共享设备选择要共享的源...",
+ "My Device Info": "我的设备信息",
+ "Device Type": "设备类型",
+ "Your Device IP should match with Device IP in alert popup appeared on your computer, where Deskreen is running": "您的设备 IP 应该与运行 Deskreen 的计算机上出现的警报弹出窗口中的 \“设备 IP\”相匹配。",
+ "Device IP": "设备 IP",
+ "Device Browser": "设备浏览器",
+ "Device OS": "设备操作系统",
+ "These details should match with the ones that you see in alert popup on computer screen, where Deskreen is running": "这些详细信息应与您在屏幕共享设备上的警报弹出窗口中看到的信息相匹配。",
+ "Deskreen Screen Viewer": "Deskreen 屏幕查看器",
+ "Connected!": "已连接!",
+ "Error occurred": "出现错误",
+ "Deskreen Error Dialog": "Deskreen 错误对话框",
+ "Something went wrong": "出问题了",
+ "You may close this browser window then try to connect again": "您可以关闭此浏览器窗口,然后尝试重新连接",
+ "An unknown error occurred": "出现未知错误",
+ "You were not allowed to connect": "您不能连接",
+ "You were disconnected": "您将断开连接",
+ "WebRTC error occurred": "出现 WebRTC 错误",
+ "If you like Deskreen consider contributing financially Deskreen is open-source Your donations keep us motivated to make Deskreen even better": "如果你喜欢 Deskreen,可以考虑出钱。Deskreen 是开源的。您的捐赠使我们有动力让 Deskreen 变得更好。",
+ "Donate": "捐赠",
+ "Video stream is paused": "视频流暂停",
+ "Video stream is playing": "正在播放视频流",
+ "Pause": "暂停",
+ "Play": "播放",
+ "Video Settings": "视频设置",
+ "Flip": "翻转",
+ "Video quality has been changed to": "视频质量已更改为",
+ "Click to Open Video Settings": "单击以打开视频设置",
+ "Click to Enter Full Screen Mode": "单击以进入全屏模式",
+ "Default video player has been turned OFF": "默认视频播放器已关闭",
+ "Default video player has been turned ON": "默认视频播放器已开启",
+ "ON": "开启",
+ "OFF": "关闭",
+ "Default Video Player": "默认视频播放器",
+ "Click to visit our website": "点击访问我们的网站",
+ "Video is flipped horizontally": "视频水平翻转",
+ "TRANSLATIONS BELOW ARE NOT ADDED TO UI YET, BUT YOUR TRANSLATIONS ARE WELCOME! THE FEATURES WILL BE ADDED SOON SO YOUR TRANSLATIONS ARE NEEDED": "以下翻译尚未添加到 UI,但欢迎您的翻译!功能将很快添加,因此需要您的翻译",
+ "Click to see connection info": "单击以查看连接信息",
+ "Pair ID": "配对 ID",
+ "Unpair": "取消配对",
+ "Session ID": "会话 ID",
+ "Click to boost video stream if it is lagging": "如果视频流滞后,请单击以提高视频流"
+}
diff --git a/app/client/public/locales/zh_CN/translation.missing.json b/app/client/public/locales/zh_CN/translation.missing.json
new file mode 100644
index 0000000..e69de29
diff --git a/app/client/src/config/i18n.ts b/app/client/src/config/i18n.ts
index 71c14f3..5a86867 100644
--- a/app/client/src/config/i18n.ts
+++ b/app/client/src/config/i18n.ts
@@ -23,7 +23,7 @@ i18n
saveMissingTo: 'all',
fallbackLng: 'en', // TODO: to generate missing keys use false as value here, will be useful when custom nodejs server is created to store missing values
debug: false, // change to true to see debug message logs in browser console
- whitelist: ['en', 'ru', 'ua'],
+ whitelist: ['en', 'ru', 'ua', 'zh_CN'],
backend: {
// path where resources get loaded from
diff --git a/app/components/SettingsOverlay/__snapshots__/SettingsOverlay.spec.tsx.snap b/app/components/SettingsOverlay/__snapshots__/SettingsOverlay.spec.tsx.snap
index 1cc296d..bd7f363 100644
--- a/app/components/SettingsOverlay/__snapshots__/SettingsOverlay.spec.tsx.snap
+++ b/app/components/SettingsOverlay/__snapshots__/SettingsOverlay.spec.tsx.snap
@@ -429,6 +429,11 @@ exports[`should match exact snapshot 1`] = `
>
Українська
+
Українська
+
Українська
+
{
expectedMap.set('English', 'en');
expectedMap.set('Русский', 'ru');
expectedMap.set('Українська', 'ua');
+ expectedMap.set('简体中文', 'zh_CN');
const res = getLangFullNameToLangISOKeyMap();
@@ -36,6 +37,7 @@ describe('i18next.config.client tests', () => {
expectedMap.set('en', 'English');
expectedMap.set('ru', 'Русский');
expectedMap.set('ua', 'Українська');
+ expectedMap.set('zh_CN', '简体中文');
const res = getLangISOKeyToLangFullNameMap();
diff --git a/app/configs/i18next.config.client.ts b/app/configs/i18next.config.client.ts
index 4004f9b..543bebd 100644
--- a/app/configs/i18next.config.client.ts
+++ b/app/configs/i18next.config.client.ts
@@ -13,6 +13,7 @@ import isProduction from '../utils/isProduction';
import translationEN from '../locales/en/translation.json';
import translationUA from '../locales/ua/translation.json';
import translationRU from '../locales/ru/translation.json';
+import translationZH_CN from '../locales/zh_CN/translation.json';
export const getLangFullNameToLangISOKeyMap = (): Map => {
const res = new Map();
@@ -49,6 +50,7 @@ export const getShuffledArrayOfHello = (): string[] => {
res.push(translationUA.Hello);
res.push(translationRU.Hello);
+ res.push(translationZH_CN.Hello);
shuffleArray(res);
diff --git a/app/containers/__snapshots__/DeskreenStepper.spec.tsx.snap b/app/containers/__snapshots__/DeskreenStepper.spec.tsx.snap
index 215b8b0..2682d6c 100644
--- a/app/containers/__snapshots__/DeskreenStepper.spec.tsx.snap
+++ b/app/containers/__snapshots__/DeskreenStepper.spec.tsx.snap
@@ -1696,6 +1696,11 @@ exports[`should match exact snapshot 1`] = `
>
Українська
+
Українська
+
Українська
+
Українська
+
Українська
+
Українська
+
Українська
+
Українська
+