33 * Add new languages by adding a locale map below.
44 */
55
6- export type LocaleId = 'en' | 'es' | 'fr' | 'de' | 'zh' | 'ja' | 'ko' | 'pt' | 'ru' | 'ar'
6+ export type LocaleId =
7+ | 'en'
8+ | 'es'
9+ | 'fr'
10+ | 'de'
11+ | 'zh'
12+ | 'zh-TW'
13+ | 'ja'
14+ | 'ko'
15+ | 'pt'
16+ | 'ru'
17+ | 'ar'
718
819const EN = {
920 // Nav
@@ -81,7 +92,8 @@ const ES: LocaleTranslations = {
8192 'jobs.newJob' : 'Nuevo Trabajo' ,
8293 'settings.title' : 'Configuración' ,
8394 'settings.language' : 'Idioma' ,
84- 'settings.languageDesc' : 'Elige el idioma de la interfaz del espacio de trabajo.' ,
95+ 'settings.languageDesc' :
96+ 'Elige el idioma de la interfaz del espacio de trabajo.' ,
8597 'common.save' : 'Guardar' ,
8698 'common.cancel' : 'Cancelar' ,
8799 'common.delete' : 'Eliminar' ,
@@ -119,7 +131,8 @@ const FR: LocaleTranslations = {
119131 'jobs.newJob' : 'Nouvelle tâche' ,
120132 'settings.title' : 'Paramètres' ,
121133 'settings.language' : 'Langue' ,
122- 'settings.languageDesc' : "Choisissez la langue d'affichage de l'espace de travail." ,
134+ 'settings.languageDesc' :
135+ "Choisissez la langue d'affichage de l'espace de travail." ,
123136 'common.save' : 'Enregistrer' ,
124137 'common.cancel' : 'Annuler' ,
125138 'common.delete' : 'Supprimer' ,
@@ -205,16 +218,65 @@ const RU: LocaleTranslations = {
205218 'common.noData' : 'Нет данных' ,
206219}
207220
221+ const ZH_TW : LocaleTranslations = {
222+ 'nav.dashboard' : '儀表板' ,
223+ 'nav.chat' : '聊天' ,
224+ 'nav.files' : '檔案' ,
225+ 'nav.terminal' : '終端機' ,
226+ 'nav.jobs' : '工作' ,
227+ 'nav.tasks' : '任務' ,
228+ 'nav.memory' : '記憶體' ,
229+ 'nav.skills' : '技能' ,
230+ 'nav.profiles' : '個人資料' ,
231+ 'nav.settings' : '設定' ,
232+ 'skills.installed' : '已安裝' ,
233+ 'skills.marketplace' : '市集' ,
234+ 'skills.search' : '依名稱、標籤或描述搜尋' ,
235+ 'skills.noResults' : '找不到技能' ,
236+ 'profiles.profiles' : '個人資料' ,
237+ 'profiles.monitoring' : '監控' ,
238+ 'tasks.title' : '任務' ,
239+ 'tasks.newTask' : '新增任務' ,
240+ 'tasks.backlog' : '待辦清單' ,
241+ 'tasks.todo' : '待處理' ,
242+ 'tasks.inProgress' : '進行中' ,
243+ 'tasks.review' : '審查' ,
244+ 'tasks.done' : '完成' ,
245+ 'jobs.title' : '工作' ,
246+ 'jobs.newJob' : '新增工作' ,
247+ 'settings.title' : '設定' ,
248+ 'settings.language' : '語言' ,
249+ 'settings.languageDesc' : '選擇工作區介面的顯示語言。' ,
250+ 'common.save' : '儲存' ,
251+ 'common.cancel' : '取消' ,
252+ 'common.delete' : '刪除' ,
253+ 'common.search' : '搜尋' ,
254+ 'common.loading' : '載入中...' ,
255+ 'common.error' : '錯誤' ,
256+ 'common.noData' : '無資料' ,
257+ }
258+
208259const LOCALES : Record < LocaleId , LocaleTranslations > = {
209- en : EN , es : ES , fr : FR , de : EN , zh : ZH , ja : EN , ko : EN , pt : EN , ru : RU , ar : EN ,
260+ en : EN ,
261+ es : ES ,
262+ fr : FR ,
263+ de : EN ,
264+ zh : ZH ,
265+ 'zh-TW' : ZH_TW ,
266+ ja : EN ,
267+ ko : EN ,
268+ pt : EN ,
269+ ru : RU ,
270+ ar : EN ,
210271}
211272
212273export const LOCALE_LABELS : Record < LocaleId , string > = {
213274 en : 'English' ,
214275 es : 'Español' ,
215276 fr : 'Français' ,
216277 de : 'Deutsch' ,
217- zh : '中文' ,
278+ zh : '中文(简体)' ,
279+ 'zh-TW' : '繁體中文' ,
218280 ja : '日本語' ,
219281 ko : '한국어' ,
220282 pt : 'Português' ,
@@ -228,8 +290,10 @@ export function getLocale(): LocaleId {
228290 if ( typeof window === 'undefined' ) return 'en'
229291 const stored = localStorage . getItem ( STORAGE_KEY )
230292 if ( stored && stored in LOCALES ) return stored as LocaleId
231- const browser = navigator . language . split ( '-' ) [ 0 ]
232- if ( browser in LOCALES ) return browser as LocaleId
293+ const full = navigator . language
294+ if ( full in LOCALES ) return full as LocaleId
295+ const lang = full . split ( '-' ) [ 0 ]
296+ if ( lang in LOCALES ) return lang as LocaleId
233297 return 'en'
234298}
235299
0 commit comments