Compare commits

...

10 Commits

Author SHA1 Message Date
Dhruwang
f4512cc86e synced translations 2025-09-10 15:49:07 +05:30
Dhruwang
0c77da1456 Merge branch 'main' of https://github.com/formbricks/formbricks into feat/6511-chinese-simplified-translations 2025-09-10 15:48:19 +05:30
Dhruwang
2db309dd1f zh-CN -> zh-Hans-CN 2025-09-10 11:44:44 +05:30
Yuuenn
f0c4c7000c fix(i18n): correct zh-CN label for Traditional Chinese 2025-09-08 20:36:41 +03:00
Yuuenn
ccd401c0a5 add translation for fix#6512 2025-09-08 19:52:02 +03:00
Yuuenn
e9bf0b7dd9 Merge remote-tracking branch 'upstream/main' into feat/6511-chinese-simplified-translations
Merge upstream/main into feat/6511-chinese-simplified-translations to sync with latest changes
2025-09-08 19:43:17 +03:00
Yuuenn
9e322a4fff fix translation 2025-09-08 19:17:33 +03:00
Yuuenn
cf36b59fd6 fix translation 2025-09-08 18:31:53 +03:00
Yuuenn
83b6f71867 feat(i18n): add Simplified Chinese (zh-CN) translations 2025-09-07 17:17:02 +03:00
Yuuenn
26203640a4 feat: simplified chinese translations 2025-09-06 21:33:51 +03:00
17 changed files with 3107 additions and 49 deletions

View File

@@ -39,6 +39,10 @@
{
"language": "ja-JP",
"path": "./apps/web/locales/ja-JP.json"
},
{
"language": "zh-Hans-CN",
"path": "./apps/web/locales/zh-Hans-CN.json"
}
],
"forceMode": "OVERRIDE"

View File

@@ -183,6 +183,7 @@ export const AVAILABLE_LOCALES: TUserLocale[] = [
"pt-PT",
"ro-RO",
"ja-JP",
"zh-Hans-CN",
];
// Billing constants

View File

@@ -142,6 +142,7 @@ export const appLanguages = [
"pt-PT": "Inglês (EUA)",
"ro-RO": "Engleză (SUA)",
"ja-JP": "英語(米国)",
"zh-Hans-CN": "英语(美国)",
},
},
{
@@ -155,6 +156,7 @@ export const appLanguages = [
"pt-PT": "Alemão",
"ro-RO": "Germană",
"ja-JP": "ドイツ語",
"zh-Hans-CN": "德语",
},
},
{
@@ -168,6 +170,7 @@ export const appLanguages = [
"pt-PT": "Português (Brasil)",
"ro-RO": "Portugheză (Brazilia)",
"ja-JP": "ポルトガル語(ブラジル)",
"zh-Hans-CN": "葡萄牙语(巴西)",
},
},
{
@@ -181,6 +184,7 @@ export const appLanguages = [
"pt-PT": "Francês",
"ro-RO": "Franceză",
"ja-JP": "フランス語",
"zh-Hans-CN": "法语",
},
},
{
@@ -194,6 +198,7 @@ export const appLanguages = [
"pt-PT": "Chinês (Tradicional)",
"ro-RO": "Chineză (Tradicională)",
"ja-JP": "中国語(繁体字)",
"zh-Hans-CN": "繁体中文",
},
},
{
@@ -207,6 +212,7 @@ export const appLanguages = [
"pt-PT": "Português (Portugal)",
"ro-RO": "Portugheză (Portugalia)",
"ja-JP": "ポルトガル語(ポルトガル)",
"zh-Hans-CN": "葡萄牙语(葡萄牙)",
},
},
{
@@ -220,6 +226,7 @@ export const appLanguages = [
"pt-PT": "Romeno",
"ro-RO": "Română",
"ja-JP": "ルーマニア語",
"zh-Hans-CN": "罗马尼亚语",
},
},
{
@@ -233,6 +240,21 @@ export const appLanguages = [
"pt-PT": "Japonês",
"ro-RO": "Japoneză",
"ja-JP": "日本語",
"zh-Hans-CN": "日语",
},
},
{
code: "zh-Hans-CN",
label: {
"en-US": "Chinese (Simplified)",
"de-DE": "Chinesisch (Vereinfacht)",
"pt-BR": "Chinês (Simplificado)",
"fr-FR": "Chinois (Simplifié)",
"zh-Hant-TW": "簡體中文",
"pt-PT": "Chinês (Simplificado)",
"ro-RO": "Chineză (Simplificată)",
"ja-JP": "中国語(簡体字)",
"zh-Hans-CN": "简体中文",
},
},
];

View File

@@ -1,5 +1,5 @@
import { formatDistance, intlFormat } from "date-fns";
import { de, enUS, fr, ja, pt, ptBR, ro, zhTW } from "date-fns/locale";
import { de, enUS, fr, ja, pt, ptBR, ro, zhCN, zhTW } from "date-fns/locale";
import { TUserLocale } from "@formbricks/types/user";
export const convertDateString = (dateString: string | null) => {
@@ -99,6 +99,8 @@ const getLocaleForTimeSince = (locale: TUserLocale) => {
return ro;
case "ja-JP":
return ja;
case "zh-Hans-CN":
return zhCN;
}
};

View File

@@ -181,7 +181,6 @@
"created_at": "Erstellt am",
"created_by": "Erstellt von",
"customer_success": "Kundenerfolg",
"danger_zone": "Gefahrenzone",
"dark_overlay": "Dunkle Überlagerung",
"date": "Datum",
"default": "Standard",
@@ -240,11 +239,9 @@
"label": "Bezeichnung",
"language": "Sprache",
"learn_more": "Mehr erfahren",
"license": "Lizenz",
"light_overlay": "Helle Überlagerung",
"limits_reached": "Limits erreicht",
"link": "Link",
"link_and_email": "Link & E-Mail",
"link_survey": "Link-Umfrage",
"link_surveys": "Umfragen verknüpfen",
"load_more": "Mehr laden",
@@ -387,7 +384,6 @@
"survey_scheduled": "Umfrage geplant.",
"survey_type": "Umfragetyp",
"surveys": "Umfragen",
"switch_organization": "Organisation wechseln",
"switch_to": "Wechseln zu {environment}",
"table_items_deleted_successfully": "{type}s erfolgreich gelöscht",
"table_settings": "Tabelleinstellungen",
@@ -996,7 +992,6 @@
"free": "Kostenlos",
"free_description": "Unbegrenzte Umfragen, Teammitglieder und mehr.",
"get_2_months_free": "2 Monate gratis",
"get_in_touch": "Kontaktiere uns",
"hosted_in_frankfurt": "Gehostet in Frankfurt",
"ios_android_sdks": "iOS & Android SDK für mobile Umfragen",
"link_surveys": "Umfragen verlinken (teilbar)",
@@ -1849,7 +1844,7 @@
"this_quarter": "Dieses Quartal",
"this_year": "Dieses Jahr",
"time_to_complete": "Zeit zur Fertigstellung",
"ttc_tooltip": "Durchschnittliche Zeit bis zum Abschluss der Umfrage.",
"ttc_tooltip": "Durchschnittliche Zeit zum Beantworten der Frage.",
"unknown_question_type": "Unbekannter Fragetyp",
"use_personal_links": "Nutze persönliche Links",
"waiting_for_response": "Warte auf eine Antwort \uD83E\uDDD8",

View File

@@ -181,7 +181,6 @@
"created_at": "Created at",
"created_by": "Created by",
"customer_success": "Customer Success",
"danger_zone": "Danger Zone",
"dark_overlay": "Dark overlay",
"date": "Date",
"default": "Default",
@@ -240,11 +239,9 @@
"label": "Label",
"language": "Language",
"learn_more": "Learn more",
"license": "License",
"light_overlay": "Light overlay",
"limits_reached": "Limits Reached",
"link": "Link",
"link_and_email": "Link & Email",
"link_survey": "Link Survey",
"link_surveys": "Link Surveys",
"load_more": "Load more",
@@ -387,7 +384,6 @@
"survey_scheduled": "Survey scheduled.",
"survey_type": "Survey Type",
"surveys": "Surveys",
"switch_organization": "Switch organization",
"switch_to": "Switch to {environment}",
"table_items_deleted_successfully": "{type}s deleted successfully",
"table_settings": "Table settings",
@@ -996,7 +992,6 @@
"free": "Free",
"free_description": "Unlimited Surveys, Team Members, and more.",
"get_2_months_free": "Get 2 months free",
"get_in_touch": "Get in touch",
"hosted_in_frankfurt": "Hosted in Frankfurt",
"ios_android_sdks": "iOS & Android SDK for mobile surveys",
"link_surveys": "Link Surveys (Shareable)",
@@ -1849,7 +1844,7 @@
"this_quarter": "This quarter",
"this_year": "This year",
"time_to_complete": "Time to Complete",
"ttc_tooltip": "Average time to complete the survey.",
"ttc_tooltip": "Average time to complete the question.",
"unknown_question_type": "Unknown Question Type",
"use_personal_links": "Use personal links",
"waiting_for_response": "Waiting for a response \uD83E\uDDD8",

View File

@@ -181,7 +181,6 @@
"created_at": "Créé le",
"created_by": "Créé par",
"customer_success": "Succès Client",
"danger_zone": "Zone de danger",
"dark_overlay": "Superposition sombre",
"date": "Date",
"default": "Par défaut",
@@ -240,11 +239,9 @@
"label": "Étiquette",
"language": "Langue",
"learn_more": "En savoir plus",
"license": "Licence",
"light_overlay": "Superposition légère",
"limits_reached": "Limites atteints",
"link": "Lien",
"link_and_email": "Liens et e-mail",
"link_survey": "Enquête de lien",
"link_surveys": "Sondages de lien",
"load_more": "Charger plus",
@@ -387,7 +384,6 @@
"survey_scheduled": "Sondage programmé.",
"survey_type": "Type de sondage",
"surveys": "Enquêtes",
"switch_organization": "Changer d'organisation",
"switch_to": "Passer à {environment}",
"table_items_deleted_successfully": "{type}s supprimés avec succès",
"table_settings": "Réglages de table",
@@ -996,7 +992,6 @@
"free": "Gratuit",
"free_description": "Sondages illimités, membres d'équipe, et plus encore.",
"get_2_months_free": "Obtenez 2 mois gratuits",
"get_in_touch": "Prenez contact",
"hosted_in_frankfurt": "Hébergé à Francfort",
"ios_android_sdks": "SDK iOS et Android pour les sondages mobiles",
"link_surveys": "Sondages par lien (partageables)",
@@ -1849,7 +1844,7 @@
"this_quarter": "Ce trimestre",
"this_year": "Cette année",
"time_to_complete": "Temps à compléter",
"ttc_tooltip": "Temps moyen pour compléter l'enquête.",
"ttc_tooltip": "Temps moyen pour compléter la question.",
"unknown_question_type": "Type de question inconnu",
"use_personal_links": "Utilisez des liens personnels",
"waiting_for_response": "En attente d'une réponse \uD83E\uDDD8",

View File

@@ -181,7 +181,6 @@
"created_at": "作成日時",
"created_by": "作成者",
"customer_success": "カスタマーサクセス",
"danger_zone": "危険な操作",
"dark_overlay": "暗いオーバーレイ",
"date": "日付",
"default": "デフォルト",
@@ -240,11 +239,9 @@
"label": "ラベル",
"language": "言語",
"learn_more": "詳細を見る",
"license": "ライセンス",
"light_overlay": "明るいオーバーレイ",
"limits_reached": "上限に達しました",
"link": "リンク",
"link_and_email": "リンク&メール",
"link_survey": "リンクフォーム",
"link_surveys": "リンクフォーム",
"load_more": "さらに読み込む",
@@ -387,7 +384,6 @@
"survey_scheduled": "フォームはスケジュール済みです。",
"survey_type": "フォームの種類",
"surveys": "フォーム",
"switch_organization": "組織を切り替え",
"switch_to": "{environment}に切り替え",
"table_items_deleted_successfully": "{type}を正常に削除しました",
"table_settings": "テーブル設定",
@@ -996,7 +992,6 @@
"free": "無料",
"free_description": "無制限のフォーム、チームメンバー、その他多数。",
"get_2_months_free": "2ヶ月間無料",
"get_in_touch": "お問い合わせください",
"hosted_in_frankfurt": "フランクフルトでホスト",
"ios_android_sdks": "モバイルフォーム用iOS & Android SDK",
"link_surveys": "リンクフォーム(共有可能)",

View File

@@ -181,7 +181,6 @@
"created_at": "Data de criação",
"created_by": "Criado por",
"customer_success": "Sucesso do Cliente",
"danger_zone": "Zona de Perigo",
"dark_overlay": "sobreposição escura",
"date": "Encontro",
"default": "Padrão",
@@ -240,11 +239,9 @@
"label": "Etiqueta",
"language": "Língua",
"learn_more": "Saiba mais",
"license": "Licença",
"light_overlay": "sobreposição leve",
"limits_reached": "Limites Atingidos",
"link": "link",
"link_and_email": "Link & E-mail",
"link_survey": "Pesquisa de Link",
"link_surveys": "Link de Pesquisas",
"load_more": "Carregar mais",
@@ -387,7 +384,6 @@
"survey_scheduled": "Pesquisa agendada.",
"survey_type": "Tipo de Pesquisa",
"surveys": "Pesquisas",
"switch_organization": "Mudar organização",
"switch_to": "Mudar para {environment}",
"table_items_deleted_successfully": "{type}s deletados com sucesso",
"table_settings": "Arrumação da mesa",
@@ -996,7 +992,6 @@
"free": "grátis",
"free_description": "Pesquisas ilimitadas, membros da equipe e mais.",
"get_2_months_free": "Ganhe 2 meses grátis",
"get_in_touch": "Entre em contato",
"hosted_in_frankfurt": "Hospedado em Frankfurt",
"ios_android_sdks": "SDK para iOS e Android para pesquisas móveis",
"link_surveys": "Link de Pesquisas (Compartilhável)",
@@ -1849,7 +1844,7 @@
"this_quarter": "Este trimestre",
"this_year": "Este ano",
"time_to_complete": "Tempo para Concluir",
"ttc_tooltip": "Tempo médio para completar a pesquisa.",
"ttc_tooltip": "Tempo médio para completar a pergunta.",
"unknown_question_type": "Tipo de pergunta desconhecido",
"use_personal_links": "Use links pessoais",
"waiting_for_response": "Aguardando uma resposta \uD83E\uDDD8",

View File

@@ -181,7 +181,6 @@
"created_at": "Criado em",
"created_by": "Criado por",
"customer_success": "Sucesso do Cliente",
"danger_zone": "Zona de Perigo",
"dark_overlay": "Sobreposição escura",
"date": "Data",
"default": "Padrão",
@@ -240,11 +239,9 @@
"label": "Etiqueta",
"language": "Idioma",
"learn_more": "Saiba mais",
"license": "Licença",
"light_overlay": "Sobreposição leve",
"limits_reached": "Limites Atingidos",
"link": "Link",
"link_and_email": "Link e Email",
"link_survey": "Ligar Inquérito",
"link_surveys": "Ligar Inquéritos",
"load_more": "Carregar mais",
@@ -387,7 +384,6 @@
"survey_scheduled": "Inquérito agendado.",
"survey_type": "Tipo de Inquérito",
"surveys": "Inquéritos",
"switch_organization": "Mudar de organização",
"switch_to": "Mudar para {environment}",
"table_items_deleted_successfully": "{type}s eliminados com sucesso",
"table_settings": "Configurações da tabela",
@@ -996,7 +992,6 @@
"free": "Grátis",
"free_description": "Inquéritos ilimitados, membros da equipa e mais.",
"get_2_months_free": "Obtenha 2 meses grátis",
"get_in_touch": "Entre em contacto",
"hosted_in_frankfurt": "Hospedado em Frankfurt",
"ios_android_sdks": "SDK iOS e Android para inquéritos móveis",
"link_surveys": "Ligar Inquéritos (Partilhável)",
@@ -1849,7 +1844,7 @@
"this_quarter": "Este trimestre",
"this_year": "Este ano",
"time_to_complete": "Tempo para Concluir",
"ttc_tooltip": "Tempo médio para concluir o inquérito.",
"ttc_tooltip": "Tempo médio para concluir a pergunta.",
"unknown_question_type": "Tipo de Pergunta Desconhecido",
"use_personal_links": "Utilize links pessoais",
"waiting_for_response": "A aguardar uma resposta \uD83E\uDDD8",

View File

@@ -181,7 +181,6 @@
"created_at": "Creat la",
"created_by": "Creat de",
"customer_success": "Succesul Clientului",
"danger_zone": "Zonă periculoasă",
"dark_overlay": "Suprapunere întunecată",
"date": "Dată",
"default": "Implicit",
@@ -240,11 +239,9 @@
"label": "Etichetă",
"language": "Limba",
"learn_more": "Află mai multe",
"license": "Licență",
"light_overlay": "Suprapunere ușoară",
"limits_reached": "Limite atinse",
"link": "Legătura",
"link_and_email": "Link & email",
"link_survey": "Conectează chestionarul",
"link_surveys": "Conectează chestionarele",
"load_more": "Încarcă mai multe",
@@ -387,7 +384,6 @@
"survey_scheduled": "Chestionar programat.",
"survey_type": "Tip Chestionar",
"surveys": "Sondaje",
"switch_organization": "Comută organizația",
"switch_to": "Comută la {environment}",
"table_items_deleted_successfully": "\"{type} șterse cu succes\"",
"table_settings": "Setări tabel",
@@ -996,7 +992,6 @@
"free": "Gratuit",
"free_description": "Sondaje nelimitate, membri în echipă și altele.",
"get_2_months_free": "Primește 2 luni gratuite",
"get_in_touch": "Contactați-ne",
"hosted_in_frankfurt": "Găzduit în Frankfurt",
"ios_android_sdks": "SDK iOS & Android pentru sondaje mobile",
"link_surveys": "Sondaje Link (Distribuibil)",
@@ -1849,7 +1844,7 @@
"this_quarter": "Trimestrul acesta",
"this_year": "Anul acesta",
"time_to_complete": "Timp de finalizare",
"ttc_tooltip": "Timp mediu pentru a completa sondajul.",
"ttc_tooltip": "Timp mediu pentru a completa întrebarea.",
"unknown_question_type": "Tip de întrebare necunoscut",
"use_personal_links": "Folosește linkuri personale",
"waiting_for_response": "Așteptând un răspuns \uD83E\uDDD8",

File diff suppressed because it is too large Load Diff

View File

@@ -181,7 +181,6 @@
"created_at": "建立時間",
"created_by": "建立者",
"customer_success": "客戶成功",
"danger_zone": "危險區域",
"dark_overlay": "深色覆蓋",
"date": "日期",
"default": "預設",
@@ -240,11 +239,9 @@
"label": "標籤",
"language": "語言",
"learn_more": "瞭解更多",
"license": "授權",
"light_overlay": "淺色覆蓋",
"limits_reached": "已達上限",
"link": "連結",
"link_and_email": "連結與電子郵件",
"link_survey": "連結問卷",
"link_surveys": "連結問卷",
"load_more": "載入更多",
@@ -387,7 +384,6 @@
"survey_scheduled": "問卷已排程。",
"survey_type": "問卷類型",
"surveys": "問卷",
"switch_organization": "切換組織",
"switch_to": "切換至 '{'environment'}'",
"table_items_deleted_successfully": "'{'type'}' 已成功刪除",
"table_settings": "表格設定",
@@ -996,7 +992,6 @@
"free": "免費",
"free_description": "無限問卷、團隊成員等。",
"get_2_months_free": "免費獲得 2 個月",
"get_in_touch": "取得聯繫",
"hosted_in_frankfurt": "託管在 Frankfurt",
"ios_android_sdks": "iOS 和 Android SDK 用於行動問卷",
"link_surveys": "連結問卷(可分享)",
@@ -1849,7 +1844,7 @@
"this_quarter": "本季",
"this_year": "今年",
"time_to_complete": "完成時間",
"ttc_tooltip": "完成問卷的平均時間。",
"ttc_tooltip": "完成 問題 的 平均 時間。",
"unknown_question_type": "未知的問題類型",
"use_personal_links": "使用 個人 連結",
"waiting_for_response": "正在等待回應 \uD83E\uDDD8",

View File

@@ -12,6 +12,9 @@ vi.mock("@/locales/fr-FR.json", () => ({}));
vi.mock("@/locales/pt-BR.json", () => ({}));
vi.mock("@/locales/pt-PT.json", () => ({}));
vi.mock("@/locales/zh-Hant-TW.json", () => ({}));
vi.mock("@/locales/ro-RO.json", () => ({}));
vi.mock("@/locales/ja-JP.json", () => ({}));
vi.mock("@/locales/zh-Hans-CN.json", () => ({}));
describe("Tolgee Configuration", () => {
beforeEach(() => {
@@ -37,6 +40,7 @@ describe("Tolgee Configuration", () => {
"zh-Hant-TW",
"ro-RO",
"ja-JP",
"zh-Hans-CN",
]);
});
});

View File

@@ -4,7 +4,17 @@ import { DevTools, Tolgee } from "@tolgee/web";
const apiKey = process.env.NEXT_PUBLIC_TOLGEE_API_KEY;
const apiUrl = process.env.NEXT_PUBLIC_TOLGEE_API_URL;
export const ALL_LANGUAGES = ["en-US", "de-DE", "fr-FR", "pt-BR", "pt-PT", "zh-Hant-TW", "ro-RO", "ja-JP"];
export const ALL_LANGUAGES = [
"en-US",
"de-DE",
"fr-FR",
"pt-BR",
"pt-PT",
"zh-Hant-TW",
"ro-RO",
"ja-JP",
"zh-Hans-CN",
];
export const DEFAULT_LANGUAGE = "en-US";
@@ -24,6 +34,7 @@ export function TolgeeBase() {
"zh-Hant-TW": () => import("@/locales/zh-Hant-TW.json"),
"ro-RO": () => import("@/locales/ro-RO.json"),
"ja-JP": () => import("@/locales/ja-JP.json"),
"zh-Hans-CN": () => import("@/locales/zh-Hans-CN.json"),
},
});
}

File diff suppressed because it is too large Load Diff

View File

@@ -11,6 +11,7 @@ export const ZUserLocale = z.enum([
"pt-PT",
"ro-RO",
"ja-JP",
"zh-Hans-CN",
]);
export type TUserLocale = z.infer<typeof ZUserLocale>;