diff --git a/app/config/locale/templates/zh-tw.email.auth.confirm.tpl b/app/config/locale/templates/zh-tw.email.auth.confirm.tpl
new file mode 100644
index 0000000000..9ba081bb91
--- /dev/null
+++ b/app/config/locale/templates/zh-tw.email.auth.confirm.tpl
@@ -0,0 +1,24 @@
+
+
+
+ {{name}} 你好,
+
+
+ 請點擊下方的鏈接驗證你的電子郵箱地址。
+
+
{{redirect}}
+
+
+ 如果你沒有請求驗證本郵箱,請忽略這份郵件。
+
+
+ 謝謝。
+
+ 來自 {{project}}
+
\ No newline at end of file
diff --git a/app/config/locale/templates/zh-tw.email.auth.invitation.tpl b/app/config/locale/templates/zh-tw.email.auth.invitation.tpl
new file mode 100644
index 0000000000..08fb921fd7
--- /dev/null
+++ b/app/config/locale/templates/zh-tw.email.auth.invitation.tpl
@@ -0,0 +1,27 @@
+
+
+
+ 你好,
+
+
+
{{owner}}邀請您加入{{project}}項目的
{{team}}小組。
+
+
+ 請點擊下方的鏈接加入{{team}}小組:
+
+
{{redirect}}
+
+
+ 如果您沒有加入該小組的計劃,請忽略本郵件。
+
+
+ 謝謝。
+
+ 來自 {{project}}
+
\ No newline at end of file
diff --git a/app/config/locale/templates/zh-tw.email.auth.recovery.tpl b/app/config/locale/templates/zh-tw.email.auth.recovery.tpl
new file mode 100644
index 0000000000..8a473b5537
--- /dev/null
+++ b/app/config/locale/templates/zh-tw.email.auth.recovery.tpl
@@ -0,0 +1,25 @@
+
+
+
+ {{name}} 你好,
+
+
+ 请点击下方的链接重新设置{{project}}的密码。
+ Follow this link to reset your {{project}} password.
+
+
{{redirect}}
+
+
+ 如果您未曾申请重设密码,请忽略本邮件。
+
+
+ 谢谢。
+
+ 来自 {{project}}
+
diff --git a/app/config/locale/zh-tw.continents.php b/app/config/locale/zh-tw.continents.php
new file mode 100644
index 0000000000..e2a47e4855
--- /dev/null
+++ b/app/config/locale/zh-tw.continents.php
@@ -0,0 +1,11 @@
+ '非洲',
+ 'AN' => '南極洲',
+ 'AS' => '亞洲',
+ 'EU' => '歐洲',
+ 'NA' => '北美洲',
+ 'OC' => '大洋洲',
+ 'SA' => '南美洲',
+];
diff --git a/app/config/locale/zh-tw.countries.php b/app/config/locale/zh-tw.countries.php
new file mode 100644
index 0000000000..348e8b8bf9
--- /dev/null
+++ b/app/config/locale/zh-tw.countries.php
@@ -0,0 +1,198 @@
+ '阿富汗',
+ 'AO' => '安哥拉',
+ 'AL' => '阿爾巴尼亞',
+ 'AD' => '安道爾',
+ 'AE' => '阿拉伯聯合酋長國',
+ 'AR' => '阿根廷',
+ 'AM' => '亞美尼亞',
+ 'AG' => '安提瓜和巴布達',
+ 'AU' => '澳大利亞',
+ 'AT' => '奧地利',
+ 'AZ' => '阿塞拜疆',
+ 'BI' => '布隆迪',
+ 'BE' => '比利時',
+ 'BJ' => '貝甯',
+ 'BF' => '布基納法索',
+ 'BD' => '孟加拉國',
+ 'BG' => '保加利亞',
+ 'BH' => '巴林',
+ 'BS' => '巴哈馬',
+ 'BA' => '波黑',
+ 'BY' => '白羅斯',
+ 'BZ' => '伯利茲',
+ 'BO' => '玻利維亞',
+ 'BR' => '巴西',
+ 'BB' => '巴巴多斯',
+ 'BN' => '文萊',
+ 'BT' => '不丹',
+ 'BW' => '博茨瓦納',
+ 'CF' => '中非共和國',
+ 'CA' => '加拿大',
+ 'CH' => '瑞士',
+ 'CL' => '智利',
+ 'CN' => '中國',
+ 'CI' => '象牙海岸',
+ 'CM' => '喀麥隆',
+ 'CD' => '剛果民主共和國',
+ 'CG' => '剛果共和國',
+ 'CO' => '哥倫比亞',
+ 'KM' => '科摩',
+ 'CV' => '佛得角',
+ 'CR' => '哥斯達黎加',
+ 'CU' => '古巴',
+ 'CY' => '塞浦路斯',
+ 'CZ' => '捷克',
+ 'DE' => '德國',
+ 'DJ' => '吉布提',
+ 'DM' => '多米尼克',
+ 'DK' => '丹麥',
+ 'DO' => '多明尼加共和國',
+ 'DZ' => '阿爾及利亞',
+ 'EC' => '厄瓜多爾',
+ 'EG' => '埃及',
+ 'ER' => '厄立特裏亞',
+ 'ES' => '西班牙',
+ 'EE' => '愛沙尼亞',
+ 'ET' => '埃塞俄比亞',
+ 'FI' => '芬蘭',
+ 'FJ' => '斐濟',
+ 'FR' => '法國',
+ 'FM' => '密克羅尼西亞',
+ 'GA' => '加蓬',
+ 'GB' => '英國',
+ 'GE' => '格魯吉亞',
+ 'GH' => '加納',
+ 'GN' => '幾內亞',
+ 'GM' => '岡比亞',
+ 'GW' => '幾內亞比紹',
+ 'GQ' => '赤道幾內亞',
+ 'GR' => '希臘',
+ 'GD' => '格林納達',
+ 'GT' => '危地馬拉',
+ 'GY' => '圭亞那',
+ 'HN' => '洪都拉斯',
+ 'HR' => '克羅地亞',
+ 'HT' => '海地',
+ 'HU' => '匈牙利',
+ 'ID' => '印度尼西亞',
+ 'IN' => '印度',
+ 'IE' => '愛爾蘭',
+ 'IR' => '伊朗',
+ 'IQ' => '伊拉克',
+ 'IS' => '冰島',
+ 'IL' => '以色列',
+ 'IT' => '意大利',
+ 'JM' => '牙買加',
+ 'JO' => '約旦',
+ 'JP' => '日本',
+ 'KZ' => '哈薩克斯坦',
+ 'KE' => '肯尼亞',
+ 'KG' => '吉爾吉斯斯坦',
+ 'KH' => '柬埔寨',
+ 'KI' => '基裏巴斯',
+ 'KN' => '聖基茨和尼維斯',
+ 'KR' => '韓國',
+ 'KW' => '科威特',
+ 'LA' => '老撾',
+ 'LB' => '黎巴嫩',
+ 'LR' => '利比裏亞',
+ 'LY' => '利比亞',
+ 'LC' => '聖盧西亞',
+ 'LI' => '列支敦士登',
+ 'LK' => '斯裏蘭卡',
+ 'LS' => '萊索托',
+ 'LT' => '立陶宛',
+ 'LU' => '盧森堡',
+ 'LV' => '拉脫維亞',
+ 'MA' => '摩洛哥',
+ 'MC' => '摩納哥',
+ 'MD' => '摩爾多瓦',
+ 'MG' => '馬達加斯加',
+ 'MV' => '馬爾代夫',
+ 'MX' => '墨西哥',
+ 'MH' => '馬紹爾群島',
+ 'MK' => '馬其頓共和國',
+ 'ML' => '馬裏',
+ 'MT' => '馬耳他',
+ 'MM' => '緬甸',
+ 'ME' => '黑山',
+ 'MN' => '蒙古',
+ 'MZ' => '莫桑比克',
+ 'MR' => '毛裏塔尼亞',
+ 'MU' => '毛裏求斯',
+ 'MW' => '馬拉維',
+ 'MY' => '馬來西亞',
+ 'NA' => '納米比亞',
+ 'NE' => '尼日爾',
+ 'NG' => '尼日利亞',
+ 'NI' => '尼加拉瓜',
+ 'NL' => '荷蘭',
+ 'NO' => '挪威',
+ 'NP' => '尼泊爾',
+ 'NR' => '瑙魯',
+ 'NZ' => '新西蘭',
+ 'OM' => '阿曼',
+ 'PK' => '巴基斯坦',
+ 'PA' => '巴拿馬',
+ 'PE' => '秘魯',
+ 'PH' => '菲律賓',
+ 'PW' => '帕勞',
+ 'PG' => '巴布亞新幾內亞',
+ 'PL' => '波蘭',
+ 'KP' => '北朝鮮',
+ 'PT' => '葡萄牙',
+ 'PY' => '巴拉圭',
+ 'QA' => '卡塔爾',
+ 'RO' => '羅馬尼亞',
+ 'RU' => '俄羅斯',
+ 'RW' => '盧旺達',
+ 'SA' => '沙特阿拉伯',
+ 'SD' => '蘇丹',
+ 'SN' => '塞內加爾',
+ 'SG' => '新加坡',
+ 'SB' => '所羅門群島',
+ 'SL' => '塞拉利昂',
+ 'SV' => '薩爾瓦多',
+ 'SM' => '聖馬力諾',
+ 'SO' => '索馬裏',
+ 'RS' => '塞爾維亞',
+ 'SS' => '南蘇丹',
+ 'ST' => '聖多美和普林西比',
+ 'SR' => '蘇裏南',
+ 'SK' => '斯洛伐克',
+ 'SI' => '斯洛文尼亞',
+ 'SE' => '瑞典',
+ 'SZ' => '斯威士蘭',
+ 'SC' => '塞舌爾',
+ 'SY' => '敘利亞',
+ 'TD' => '乍得',
+ 'TG' => '多哥',
+ 'TH' => '泰國',
+ 'TJ' => '塔吉克斯坦',
+ 'TM' => '土庫曼斯坦',
+ 'TL' => '東帝汶',
+ 'TO' => '湯加',
+ 'TT' => '特立尼達和多巴哥',
+ 'TN' => '突尼斯',
+ 'TR' => '土耳其',
+ 'TV' => '圖瓦盧',
+ 'TZ' => '坦桑尼亞',
+ 'UG' => '烏幹達',
+ 'UA' => '烏克蘭',
+ 'UY' => '烏拉圭',
+ 'US' => '美國',
+ 'UZ' => '烏茲別克斯',
+ 'VA' => '梵蒂岡',
+ 'VC' => '聖文森特和格林納丁斯',
+ 'VE' => '委內瑞拉',
+ 'VN' => '越南',
+ 'VU' => '瓦努阿圖',
+ 'WS' => '薩摩亞',
+ 'YE' => '也門',
+ 'ZA' => '南非',
+ 'ZM' => '贊比亞',
+ 'ZW' => '津巴布韋',
+];
\ No newline at end of file
diff --git a/app/config/locale/zh-tw.php b/app/config/locale/zh-tw.php
new file mode 100644
index 0000000000..6d4d83d461
--- /dev/null
+++ b/app/config/locale/zh-tw.php
@@ -0,0 +1,19 @@
+ '"懂得取舍,方顯睿智。"', // This is the line printed in the homepage and console 'view-source'
+ 'settings.locale' => 'zh-tw',
+ 'settings.direction' => 'ltr',
+
+ // Service - Users
+ 'auth.emails.team' => '%s 小組',
+ 'auth.emails.confirm.title' => '賬戶確認',
+ 'auth.emails.confirm.body' => 'zh-tw.email.auth.confirm.tpl',
+ 'auth.emails.recovery.title' => '重設密碼',
+ 'auth.emails.recovery.body' => 'zh.email.auth.recovery.tpl',
+ 'auth.emails.invitation.title' => '邀請加入%s小組(%s)',
+ 'auth.emails.invitation.body' => 'zh-tw.email.auth.invitation.tpl',
+ 'locale.country.unknown' => '未知',
+ 'countries' => include 'zh-tw.countries.php',
+ 'continents' => include 'zh-tw.continents.php',
+];
\ No newline at end of file
diff --git a/app/init.php b/app/init.php
index 30d45e602c..7734ed864b 100644
--- a/app/init.php
+++ b/app/init.php
@@ -24,7 +24,7 @@ const APP_EMAIL_TEAM = 'team@'.APP_DOMAIN;
const APP_EMAIL_SECURITY = 'security@'.APP_DOMAIN;
const APP_USERAGENT = APP_NAME.'-Server/%s Please report abuse at '.APP_EMAIL_SECURITY;
const APP_MODE_ADMIN = 'admin';
-const APP_LOCALES = ['cat', 'de', 'en', 'es', 'fi', 'fr', 'gr', 'he', 'hi', 'id', 'it', 'nl', /* 'no',*/ 'pt-br', 'pt-pt', 'ro', 'tr', 'ua', 'zh'];
+const APP_LOCALES = ['cat', 'de', 'en', 'es', 'fi', 'fr', 'gr', 'he', 'hi', 'id', 'it', 'nl', /* 'no',*/ 'pt-br', 'pt-pt', 'ro', 'tr', 'ua', 'zh', 'zh-tw'];
const APP_PAGING_LIMIT = 15;
$register = new Registry();
@@ -147,6 +147,7 @@ Locale::setLanguage('ru', include __DIR__ . '/config/locale/ru.php');
Locale::setLanguage('tr', include __DIR__.'/config/locale/tr.php');
Locale::setLanguage('ua', include __DIR__.'/config/locale/ua.php');
Locale::setLanguage('zh', include __DIR__.'/config/locale/zh.php');
+Locale::setLanguage('zh-tw', include __DIR__.'/config/locale/zh-tw.php');
if (in_array($locale, APP_LOCALES)) {
Locale::setDefault($locale);