diff --git a/app/client/public/locales/zh_TW/translation.json b/app/client/public/locales/zh_TW/translation.json
new file mode 100644
index 0000000..c1f55a9
--- /dev/null
+++ b/app/client/public/locales/zh_TW/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_TW/translation.missing.json b/app/client/public/locales/zh_TW/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 5a86867..75153f5 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', 'zh_CN'],
+ whitelist: ['en', 'ru', 'ua', 'zh_CN', 'zh_TW'],
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 bd7f363..74fc62c 100644
--- a/app/components/SettingsOverlay/__snapshots__/SettingsOverlay.spec.tsx.snap
+++ b/app/components/SettingsOverlay/__snapshots__/SettingsOverlay.spec.tsx.snap
@@ -434,6 +434,11 @@ exports[`should match exact snapshot 1`] = `
>
简体中文
+
简体中文
+
简体中文
+
{
expectedMap.set('Русский', 'ru');
expectedMap.set('Українська', 'ua');
expectedMap.set('简体中文', 'zh_CN');
+ expectedMap.set('繁體中文', 'zh_TW');
const res = getLangFullNameToLangISOKeyMap();
@@ -38,6 +39,7 @@ describe('i18next.config.client tests', () => {
expectedMap.set('ru', 'Русский');
expectedMap.set('ua', 'Українська');
expectedMap.set('zh_CN', '简体中文');
+ expectedMap.set('zh_TW', '繁體中文');
const res = getLangISOKeyToLangFullNameMap();
diff --git a/app/configs/i18next.config.client.ts b/app/configs/i18next.config.client.ts
index 543bebd..9a54f9b 100644
--- a/app/configs/i18next.config.client.ts
+++ b/app/configs/i18next.config.client.ts
@@ -14,6 +14,7 @@ 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';
+import translationZH_TW from '../locales/zh_TW/translation.json';
export const getLangFullNameToLangISOKeyMap = (): Map => {
const res = new Map();
@@ -51,6 +52,7 @@ export const getShuffledArrayOfHello = (): string[] => {
res.push(translationUA.Hello);
res.push(translationRU.Hello);
res.push(translationZH_CN.Hello);
+ res.push(translationZH_TW.Hello);
shuffleArray(res);
diff --git a/app/containers/__snapshots__/DeskreenStepper.spec.tsx.snap b/app/containers/__snapshots__/DeskreenStepper.spec.tsx.snap
index 2682d6c..0bb950b 100644
--- a/app/containers/__snapshots__/DeskreenStepper.spec.tsx.snap
+++ b/app/containers/__snapshots__/DeskreenStepper.spec.tsx.snap
@@ -1701,6 +1701,11 @@ exports[`should match exact snapshot 1`] = `
>
简体中文
+
简体中文
+
简体中文
+
简体中文
+
简体中文
+
简体中文
+
简体中文
+
简体中文
+