Compare commits

...

3 Commits

Author SHA1 Message Date
Dhruwang 335839aac2 feat: add Turkish translations and update language support
- Added new Turkish translations for various UI elements and error messages in the i18n files.
- Updated the language support in the iso639Languages utility to include Turkish (tr-TR).
- Removed outdated or unnecessary keys from the Turkish locale files to streamline translations.
2026-04-20 17:31:37 +05:30
Dhruwang 04574100e7 Merge branch 'main' of https://github.com/formbricks/formbricks into add-tr-translations 2026-04-20 17:11:10 +05:30
onwp abcf9f7c32 Add Turkish (tr) translations 2026-04-01 12:15:50 +03:00
14 changed files with 3697 additions and 14 deletions
+1
View File
@@ -19,6 +19,7 @@
"ro-RO",
"ru-RU",
"sv-SE",
"tr-TR",
"zh-Hans-CN",
"zh-Hant-TW"
]
-10
View File
@@ -315,7 +315,6 @@ checksums:
common/other: 79acaa6cd481262bea4e743a422529d2
common/other_filters: 20b09213c131db47eb8b23e72d0c4bea
common/other_placeholder: f3a0fa2eaaf75aa92b290449c928c081
common/others: 39160224ce0e35eb4eb252c997edf4d8
common/overlay_color: 4b72073285d13fff93d094aabffe05ac
common/overview: 30c54e4dc4ce599b87d94be34a8617f5
common/password: 223a61cf906ab9c40d22612c588dff48
@@ -333,7 +332,6 @@ checksums:
common/please_upgrade_your_plan: 03d54a21ecd27723c72a13644837e5ed
common/powered_by_formbricks: 1c3e19894583292bfaf686cac84a4960
common/preview: 3173ee1f0f1d4e50665ca4a84c38e15d
common/preview_survey: 7409e9c118e3e5d5f2a86201c2b354f2
common/privacy: 7459744a63ef8af4e517a09024bd7c08
common/product_manager: dfeadc96e6d3de22a884ee97974b505e
common/production: 226e0ce83b49700bc1b1c08c4c3ed23a
@@ -468,7 +466,6 @@ checksums:
common/workspace_name_placeholder: 8a9e30ab01666af13c44a73b82c37ec1
common/workspaces: 8ba082a84aa35cf851af1cf874b853e2
common/years: eb4f5fdd2b320bf13e200fd6a6c1abff
common/you: db2a4a796b70cc1430d1b21f6ffb6dcb
common/you_are_downgraded_to_the_community_edition: e3ae56502ff787109cae0997519f628e
common/you_are_not_authorized_to_perform_this_action: 1b3255ab740582ddff016a399f8bf302
common/you_have_reached_your_limit_of_workspace_limit: 54d754c3267036742f23fb05fd3fcc45
@@ -1239,12 +1236,7 @@ checksums:
environments/settings/teams/you_are_a_member: cf5af638d5371c8fbc337e92519e5150
environments/surveys/all_set_time_to_create_first_survey: 21d3bb74c3b9642b3195d17c17346399
environments/surveys/alphabetical: 5fcfeff9c5fd28714f0a390e0ddaaaee
environments/surveys/copy_survey: de8142b45e7bca61f2dca0069a62b417
environments/surveys/copy_survey_description: 66d0aadf192ad5790fbf3f55f3bb5485
environments/surveys/copy_survey_error: 74cab7d84ea8b669e106d4c326cac005
environments/surveys/copy_survey_link_to_clipboard: 77387e3d3de4be07a2a34963f73cd7e8
environments/surveys/copy_survey_partially_success: a436a5fb7167b95c2308794d35aab070
environments/surveys/copy_survey_success: a829e645fe034b3e712d0b8572a5edc4
environments/surveys/delete_survey_and_responses_warning: 3320c91c1fd27378b7f3d6abc003f2ae
environments/surveys/edit/activate_translations: af127c1bed2b47e2012e3a23e489ecb8
environments/surveys/edit/add: 5196f5cd4ba3a6ac8edef91345e17f66
@@ -1965,7 +1957,6 @@ checksums:
environments/surveys/summary/downloading_qr_code: 3c46bf636e617848a4fca9b6c5b51dac
environments/surveys/summary/drop_offs: 605ee950f82110132d6c5780926af109
environments/surveys/summary/drop_offs_tooltip: 2a01683380be45f17636365886cf3452
environments/surveys/summary/failed_to_copy_link: 4e891c757c80e770674e8e74d1c08487
environments/surveys/summary/filter_added_successfully: e247f65020cd87454bcec0da6f0fd034
environments/surveys/summary/filter_updated_successfully: 01146bc7e6394e271836be2f1b3a257b
environments/surveys/summary/filtered_responses_csv: aad66a98be6a09cac8bef9e4db4a75cf
@@ -2050,7 +2041,6 @@ checksums:
environments/surveys/summary/youre_not_plugged_in_yet: f19da3cd474b9a3cf28e956fd811fb00
environments/surveys/survey_deleted_successfully: a6b654cc914b344a4475fd2fd4a98cc5
environments/surveys/survey_duplicated_successfully: 91e244f1e7a33640bb4817166a01ff46
environments/surveys/survey_duplication_error: 35994330aed844ce37d8b4f09df24581
environments/surveys/templates/all_channels: 6be67a82fc7326dc2304b23ab3348b87
environments/surveys/templates/all_industries: c7354412fe34585526ff2232aadace41
environments/surveys/templates/all_roles: 6582ccd0a2349c162a7ae1574cdf76be
+1
View File
@@ -182,6 +182,7 @@ export const AVAILABLE_LOCALES: TUserLocale[] = [
"ro-RO",
"ru-RU",
"sv-SE",
"tr-TR",
"zh-Hans-CN",
"zh-Hant-TW",
];
+7
View File
@@ -213,6 +213,13 @@ export const appLanguages = [
native: "Svenska",
},
},
{
code: "tr-TR",
label: {
"en-US": "Turkish",
native: "Türkçe",
},
},
{
code: "zh-Hans-CN",
label: {
+2 -1
View File
@@ -1,5 +1,5 @@
import { type Locale, formatDistance } from "date-fns";
import { de, enUS, es, fr, hu, ja, nl, pt, ptBR, ro, ru, sv, zhCN, zhTW } from "date-fns/locale";
import { de, enUS, es, fr, hu, ja, nl, pt, ptBR, ro, ru, sv, tr, zhCN, zhTW } from "date-fns/locale";
import { TUserLocale } from "@formbricks/types/user";
import { formatDateForDisplay } from "./utils/datetime";
@@ -17,6 +17,7 @@ const TIME_SINCE_LOCALES: Record<TUserLocale, Locale> = {
"ro-RO": ro,
"ru-RU": ru,
"sv-SE": sv,
"tr-TR": tr,
"zh-Hans-CN": zhCN,
"zh-Hant-TW": zhTW,
};
File diff suppressed because it is too large Load Diff
@@ -17,9 +17,7 @@ export const ProjectLimitModal = ({ open, setOpen, projectLimit, buttons }: Proj
return (
<Dialog open={open} onOpenChange={setOpen}>
<DialogContent>
<DialogTitle className="sr-only">
{t("common.unlock_more_workspaces_with_a_higher_plan")}
</DialogTitle>
<DialogTitle className="sr-only">{t("common.unlock_more_workspaces_with_a_higher_plan")}</DialogTitle>
<UpgradePrompt
title={t("common.unlock_more_workspaces_with_a_higher_plan")}
description={t("common.you_have_reached_your_limit_of_workspace_limit", { projectLimit })}
@@ -79,6 +79,7 @@ export const getWebAppLocale = (languageCode: string, survey: TSurvey): string =
ja: "ja-JP",
es: "es-ES",
sv: "sv-SE",
tr: "tr-TR",
ru: "ru-RU",
};
+1
View File
@@ -222,6 +222,7 @@ vi.mock("@/lib/constants", () => ({
"ro-RO",
"ru-RU",
"sv-SE",
"tr-TR",
"zh-Hans-CN",
"zh-Hant-TW",
],
File diff suppressed because it is too large Load Diff
+1
View File
@@ -23,6 +23,7 @@
"ro",
"ru",
"sv",
"tr",
"uz",
"zh-Hans"
]
+87
View File
@@ -0,0 +1,87 @@
{
"common": {
"and": "ve",
"apply": "uygula",
"auto_close_wrapper": "Otomatik kapatma sarmalayıcısı",
"back": "Geri",
"close_survey": "Anketi kapat",
"company_logo": "Şirket Logosu",
"finish": "Bitir",
"language_switch": "Dil değiştirme",
"next": "Sonraki",
"no_results_found": "Sonuç bulunamadı",
"open_in_new_tab": "Yeni sekmede aç",
"people_responded": "{count, plural, one {1 kişi yanıtladı} other {{count} kişi yanıtladı}}",
"please_retry_now_or_try_again_later": "Lütfen şimdi tekrar deneyin veya daha sonra tekrar deneyin.",
"powered_by": "Destekleyen",
"privacy_policy": "Gizlilik Politikası",
"protected_by_reCAPTCHA_and_the_Google": "reCAPTCHA ve Google tarafından korunmaktadır",
"question": "Soru",
"question_video": "Soru Videosu",
"required": "Zorunlu",
"respondents_will_not_see_this_card": "Yanıtlayıcılar bu kartı görmeyecek",
"response_saved_offline": "Yanıtın henüz gönderilmedi. İnternete geri döndüğünde otomatik olarak iletilecek.",
"retry": "Yeniden dene",
"retrying": "Yeniden deneniyor…",
"search": "Ara...",
"select_option": "Bir seçenek seçin",
"select_options": "Seçenekleri seçin",
"sending_responses": "Yanıtlar gönderiliyor…",
"takes_less_than_x_minutes": "{count, plural, one {1 dakikadan az sürer} other {{count} dakikadan az sürer}}",
"takes_x_minutes": "{count, plural, one {1 dakika sürer} other {{count} dakika sürer}}",
"takes_x_plus_minutes": "{count}+ dakika sürer",
"terms_of_service": "Hizmet Şartları",
"the_servers_cannot_be_reached_at_the_moment": "Sunuculara şu anda ulaşılamıyor.",
"they_will_be_redirected_immediately": "Hemen yönlendirilecekler",
"welcome_video": "Karşılama Kartı videosu",
"your_feedback_is_stuck": "Geri bildiriminiz takıldı :("
},
"errors": {
"all_options_must_be_ranked": "Lütfen tüm seçenekleri sıralayın",
"all_rows_must_be_answered": "Lütfen tüm satırları yanıtlayın",
"file_extension_must_be": "Dosya uzantısı {extension} olmalıdır",
"file_extension_must_not_be": "Dosya uzantısı {extension} olmamalıdır",
"file_input": {
"duplicate_files": "Şu dosyalar zaten yüklendi: {duplicateNames}. Yinelenen dosyalara izin verilmez.",
"file_size_exceeded": "Şu dosya(lar) maksimum {maxSizeInMB} MB boyutunu aşıyor ve kaldırıldı: {fileNames}",
"file_size_exceeded_alert": "Dosya {maxSizeInMB} MB'den küçük olmalıdır",
"no_valid_file_types_selected": "Geçerli dosya türü seçilmedi. Lütfen geçerli bir dosya türü seçin.",
"only_one_file_can_be_uploaded_at_a_time": "Aynı anda yalnızca bir dosya yüklenebilir.",
"placeholder_text": "Dosyaları yüklemek için tıklayın veya sürükleyin",
"upload_failed": "Yükleme başarısız oldu! Lütfen tekrar deneyin.",
"uploading": "Yükleniyor...",
"you_can_only_upload_a_maximum_of_files": "En fazla {FILE_LIMIT} dosya yükleyebilirsiniz."
},
"invalid_device_error": {
"message": "Bu cihazı kullanmaya devam etmek için lütfen anket ayarlarından spam korumasını devre dışı bırakın.",
"title": "Bu cihaz spam korumasını desteklemiyor."
},
"invalid_format": "Lütfen geçerli bir biçim girin",
"is_between": "Lütfen {startDate} ile {endDate} arasında bir tarih seçin",
"is_earlier_than": "Lütfen {date} tarihinden önceki bir tarih seçin",
"is_greater_than": "Lütfen {min} değerinden büyük bir değer girin",
"is_later_than": "Lütfen {date} tarihinden sonraki bir tarih seçin",
"is_less_than": "Lütfen {max} değerinden küçük bir değer girin",
"is_not_between": "Lütfen {startDate} ile {endDate} arasında olmayan bir tarih seçin",
"max_length": "Lütfen en fazla {max} karakter girin",
"max_selections": "Lütfen en fazla {max} seçenek seçin",
"max_value": "Lütfen en fazla {max} değerinde bir değer girin",
"min_length": "Lütfen en az {min} karakter girin",
"min_selections": "Lütfen en az {min} seçenek seçin",
"min_value": "Lütfen en az {min} değerinde bir değer girin",
"minimum_options_ranked": "Lütfen en az {min} seçeneği sıralayın",
"minimum_rows_answered": "Lütfen en az {min} satırı yanıtlayın",
"please_enter_a_valid_email_address": "Lütfen geçerli bir e-posta adresi girin",
"please_enter_a_valid_phone_number": "Lütfen geçerli bir telefon numarası girin",
"please_enter_a_valid_url": "Lütfen geçerli bir URL girin",
"please_fill_out_this_field": "Lütfen bu alanı doldurun",
"recaptcha_error": {
"message": "Yanıtınız otomatik etkinlik olarak işaretlendiği için gönderilemedi. Bir insansanız, lütfen tekrar deneyin.",
"title": "İnsan olduğunuzu doğrulayamadık."
},
"value_must_contain": "Değer {value} içermelidir",
"value_must_equal": "Değer {value} olmalıdır",
"value_must_not_contain": "Değer {value} içermemelidir",
"value_must_not_equal": "Değer {value} olmamalıdır"
}
}
+3
View File
@@ -17,6 +17,7 @@ import ptTranslations from "../../locales/pt.json";
import roTranslations from "../../locales/ro.json";
import ruTranslations from "../../locales/ru.json";
import svTranslations from "../../locales/sv.json";
import trTranslations from "../../locales/tr.json";
import uzTranslations from "../../locales/uz.json";
import zhHansTranslations from "../../locales/zh-Hans.json";
@@ -42,6 +43,7 @@ i18n
"ro",
"ru",
"sv",
"tr",
"uz",
"zh-Hans",
],
@@ -63,6 +65,7 @@ i18n
ro: { translation: roTranslations },
ru: { translation: ruTranslations },
sv: { translation: svTranslations },
tr: { translation: trTranslations },
uz: { translation: uzTranslations },
"zh-Hans": { translation: zhHansTranslations },
},
+1
View File
@@ -13,6 +13,7 @@ export const ZUserLocale = z.enum([
"ro-RO",
"ru-RU",
"sv-SE",
"tr-TR",
"zh-Hans-CN",
"zh-Hant-TW",
]);