mirror of
https://github.com/infiniflow/ragflow.git
synced 2026-03-20 14:17:41 +08:00
feat: add Turkish language support (#13670)
### What problem does this PR solve? RAGFlow had no Turkish language support. This PR adds Turkish (tr) locale translations to the UI. ### Type of change - [x] New Feature (non-breaking change which adds functionality) ### What problem does this PR solve? Co-authored-by: Mustafa YILDIZ <mustafa.yildiz@cilek.com>
This commit is contained in:
@ -74,6 +74,7 @@ LANGUAGE_TO_MINERU_MAP = {
|
||||
'Greek': 'el',
|
||||
'Hindi': 'devanagari',
|
||||
'Bulgarian': 'cyrillic',
|
||||
'Turkish': 'latin',
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -9,11 +9,13 @@ import arEG from 'antd/locale/ar_EG';
|
||||
import deDE from 'antd/locale/de_DE';
|
||||
import enUS from 'antd/locale/en_US';
|
||||
import ru_RU from 'antd/locale/ru_RU';
|
||||
import trTR from 'antd/locale/tr_TR';
|
||||
import vi_VN from 'antd/locale/vi_VN';
|
||||
import zhCN from 'antd/locale/zh_CN';
|
||||
import zh_HK from 'antd/locale/zh_HK';
|
||||
import dayjs from 'dayjs';
|
||||
import 'dayjs/locale/ar';
|
||||
import 'dayjs/locale/tr';
|
||||
import 'dayjs/locale/zh-cn';
|
||||
import advancedFormat from 'dayjs/plugin/advancedFormat';
|
||||
import customParseFormat from 'dayjs/plugin/customParseFormat';
|
||||
@ -57,6 +59,7 @@ const AntLanguageMap = {
|
||||
'pt-BR': pt_BR,
|
||||
de: deDE,
|
||||
ar: arEG,
|
||||
tr: trTR,
|
||||
};
|
||||
|
||||
if (process.env.NODE_ENV === 'development') {
|
||||
|
||||
@ -21,6 +21,7 @@ const Languages = [
|
||||
'Korean',
|
||||
'Vietnamese',
|
||||
'Arabic',
|
||||
'Turkish',
|
||||
];
|
||||
|
||||
export const crossLanguageOptions = Languages.map((x) => ({
|
||||
|
||||
154
web/src/components/jsonjoy-builder/i18n/locales/tr.ts
Normal file
154
web/src/components/jsonjoy-builder/i18n/locales/tr.ts
Normal file
@ -0,0 +1,154 @@
|
||||
import type { Translation } from '../translation-keys.ts';
|
||||
|
||||
export const tr: Translation = {
|
||||
collapse: 'Daralt',
|
||||
expand: 'Genişlet',
|
||||
|
||||
fieldDescriptionPlaceholder: 'Bu alanın amacını açıklayın',
|
||||
fieldDelete: 'Alanı sil',
|
||||
fieldDescription: 'Açıklama',
|
||||
fieldDescriptionTooltip: 'Bu alanın ne temsil ettiğine dair bağlam ekleyin',
|
||||
fieldNameLabel: 'Alan Adı',
|
||||
fieldNamePlaceholder: 'örn. adSoyad, yaş, aktifMi',
|
||||
fieldNameTooltip:
|
||||
'Daha iyi okunabilirlik için camelCase kullanın (örn. adSoyad)',
|
||||
fieldRequiredLabel: 'Zorunlu Alan',
|
||||
fieldType: 'Alan Türü',
|
||||
fieldTypeExample: 'Örnek:',
|
||||
fieldTypeTooltipString: 'string: Metin',
|
||||
fieldTypeTooltipNumber: 'number: Sayısal',
|
||||
fieldTypeTooltipBoolean: 'boolean: Doğru/yanlış',
|
||||
fieldTypeTooltipObject: 'object: İç içe JSON',
|
||||
fieldTypeTooltipArray: 'array: Değer listeleri',
|
||||
fieldAddNewButton: 'Alan Ekle',
|
||||
fieldAddNewBadge: 'Şema Oluşturucu',
|
||||
fieldAddNewCancel: 'İptal',
|
||||
fieldAddNewConfirm: 'Alan Ekle',
|
||||
fieldAddNewDescription: 'JSON şemanız için yeni bir alan oluşturun',
|
||||
fieldAddNewLabel: 'Yeni Alan Ekle',
|
||||
|
||||
fieldTypeTextLabel: 'Metin',
|
||||
fieldTypeTextDescription: 'Adlar, açıklamalar vb. metin değerleri için',
|
||||
fieldTypeNumberLabel: 'Sayı',
|
||||
fieldTypeNumberDescription: 'Ondalıklı veya tam sayılar için',
|
||||
fieldTypeBooleanLabel: 'Evet/Hayır',
|
||||
fieldTypeBooleanDescription: 'Doğru/yanlış değerleri için',
|
||||
fieldTypeObjectLabel: 'Grup',
|
||||
fieldTypeObjectDescription: 'İlgili alanları bir araya getirmek için',
|
||||
fieldTypeArrayLabel: 'Liste',
|
||||
fieldTypeArrayDescription: 'Öğe koleksiyonları için',
|
||||
|
||||
propertyDescriptionPlaceholder: 'Açıklama ekle...',
|
||||
propertyDescriptionButton: 'Açıklama ekle...',
|
||||
propertyRequired: 'Zorunlu',
|
||||
propertyOptional: 'İsteğe bağlı',
|
||||
propertyDelete: 'Alanı sil',
|
||||
|
||||
schemaEditorTitle: 'JSON Şema Düzenleyici',
|
||||
schemaEditorToggleFullscreen: 'Tam ekranı aç/kapat',
|
||||
schemaEditorEditModeVisual: 'Görsel',
|
||||
schemaEditorEditModeJson: 'JSON',
|
||||
|
||||
arrayMinimumLabel: 'Minimum Öğe',
|
||||
arrayMinimumPlaceholder: 'Minimum yok',
|
||||
arrayMaximumLabel: 'Maksimum Öğe',
|
||||
arrayMaximumPlaceholder: 'Maksimum yok',
|
||||
arrayForceUniqueItemsLabel: 'Benzersiz öğeleri zorla',
|
||||
arrayItemTypeLabel: 'Öğe Türü',
|
||||
arrayValidationErrorMinMax: "'minItems' 'maxItems'ten büyük olamaz.",
|
||||
arrayValidationErrorContainsMinMax:
|
||||
"'minContains' 'maxContains'ten büyük olamaz.",
|
||||
|
||||
booleanAllowFalseLabel: 'Yanlış değere izin ver',
|
||||
booleanAllowTrueLabel: 'Doğru değere izin ver',
|
||||
booleanNeitherWarning: 'Uyarı: En az bir değere izin vermelisiniz.',
|
||||
|
||||
numberMinimumLabel: 'Minimum Değer',
|
||||
numberMinimumPlaceholder: 'Minimum yok',
|
||||
numberMaximumLabel: 'Maksimum Değer',
|
||||
numberMaximumPlaceholder: 'Maksimum yok',
|
||||
numberExclusiveMinimumLabel: 'Özel Minimum',
|
||||
numberExclusiveMinimumPlaceholder: 'Özel minimum yok',
|
||||
numberExclusiveMaximumLabel: 'Özel Maksimum',
|
||||
numberExclusiveMaximumPlaceholder: 'Özel maksimum yok',
|
||||
numberMultipleOfLabel: 'Katı',
|
||||
numberMultipleOfPlaceholder: 'Herhangi',
|
||||
numberAllowedValuesEnumLabel: 'İzin Verilen Değerler (enum)',
|
||||
numberAllowedValuesEnumNone: 'Kısıtlı değer ayarlanmadı',
|
||||
numberAllowedValuesEnumAddLabel: 'Ekle',
|
||||
numberAllowedValuesEnumAddPlaceholder: 'İzin verilen değer ekle...',
|
||||
numberValidationErrorMinMax:
|
||||
'Minimum ve maksimum değerler tutarlı olmalıdır.',
|
||||
numberValidationErrorBothExclusiveAndInclusiveMin:
|
||||
"'exclusiveMinimum' ve 'minimum' aynı anda ayarlanamaz.",
|
||||
numberValidationErrorBothExclusiveAndInclusiveMax:
|
||||
"'exclusiveMaximum' ve 'maximum' aynı anda ayarlanamaz.",
|
||||
numberValidationErrorEnumOutOfRange:
|
||||
'Enum değerleri tanımlı aralık içinde olmalıdır.',
|
||||
|
||||
objectPropertiesNone: 'Tanımlı özellik yok',
|
||||
objectValidationErrorMinMax:
|
||||
"'minProperties' 'maxProperties'ten büyük olamaz.",
|
||||
|
||||
stringMinimumLengthLabel: 'Minimum Uzunluk',
|
||||
stringMinimumLengthPlaceholder: 'Minimum yok',
|
||||
stringMaximumLengthLabel: 'Maksimum Uzunluk',
|
||||
stringMaximumLengthPlaceholder: 'Maksimum yok',
|
||||
stringPatternLabel: 'Desen (regex)',
|
||||
stringPatternPlaceholder: '^[a-zA-Z]+$',
|
||||
stringFormatLabel: 'Format',
|
||||
stringFormatNone: 'Yok',
|
||||
stringFormatDateTime: 'Tarih-Saat',
|
||||
stringFormatDate: 'Tarih',
|
||||
stringFormatTime: 'Saat',
|
||||
stringFormatEmail: 'E-posta',
|
||||
stringFormatUri: 'URI',
|
||||
stringFormatUuid: 'UUID',
|
||||
stringFormatHostname: 'Ana Bilgisayar Adı',
|
||||
stringFormatIpv4: 'IPv4 Adresi',
|
||||
stringFormatIpv6: 'IPv6 Adresi',
|
||||
stringAllowedValuesEnumLabel: 'İzin Verilen Değerler (enum)',
|
||||
stringAllowedValuesEnumNone: 'Kısıtlı değer ayarlanmadı',
|
||||
stringAllowedValuesEnumAddPlaceholder: 'İzin verilen değer ekle...',
|
||||
stringValidationErrorLengthRange:
|
||||
"'Minimum Uzunluk' 'Maksimum Uzunluk'tan büyük olamaz.",
|
||||
|
||||
schemaTypeArray: 'Liste',
|
||||
schemaTypeBoolean: 'Evet/Hayır',
|
||||
schemaTypeNumber: 'Sayı',
|
||||
schemaTypeObject: 'Nesne',
|
||||
schemaTypeString: 'Metin',
|
||||
schemaTypeNull: 'Boş',
|
||||
|
||||
inferrerTitle: 'JSON Şeması Çıkar',
|
||||
inferrerDescription:
|
||||
'Şema oluşturmak için JSON belgenizi aşağıya yapıştırın.',
|
||||
inferrerCancel: 'İptal',
|
||||
inferrerGenerate: 'Şema Oluştur',
|
||||
inferrerErrorInvalidJson:
|
||||
'Geçersiz JSON formatı. Lütfen girdinizi kontrol edin.',
|
||||
|
||||
validatorTitle: 'JSON Doğrula',
|
||||
validatorDescription:
|
||||
'JSON belgenizi geçerli şemaya göre doğrulamak için yapıştırın. Doğrulama siz yazarken otomatik olarak gerçekleşir.',
|
||||
validatorCurrentSchema: 'Geçerli Şema:',
|
||||
validatorContent: "JSON'unuz:",
|
||||
validatorValid: 'JSON şemaya göre geçerli!',
|
||||
validatorErrorInvalidSyntax: 'Geçersiz JSON sözdizimi',
|
||||
validatorErrorSchemaValidation: 'Şema doğrulama hatası',
|
||||
validatorErrorCount: '{count} doğrulama hatası tespit edildi',
|
||||
validatorErrorPathRoot: 'Kök',
|
||||
validatorErrorLocationLineAndColumn: 'Satır {line}, Sütun {column}',
|
||||
validatorErrorLocationLineOnly: 'Satır {line}',
|
||||
|
||||
visualizerDownloadTitle: 'Şemayı İndir',
|
||||
visualizerDownloadFileName: 'schema.json',
|
||||
visualizerSource: 'JSON Şema Kaynağı',
|
||||
|
||||
visualEditorNoFieldsHint1: 'Henüz alan tanımlanmadı',
|
||||
visualEditorNoFieldsHint2: 'Başlamak için ilk alanınızı ekleyin',
|
||||
|
||||
typeValidationErrorNegativeLength: 'Uzunluk değerleri negatif olamaz.',
|
||||
typeValidationErrorIntValue: 'Değer bir tam sayı olmalıdır.',
|
||||
typeValidationErrorPositive: 'Değer pozitif olmalıdır.',
|
||||
};
|
||||
@ -57,6 +57,7 @@ export const LanguageList = [
|
||||
'Italian',
|
||||
'Bulgarian',
|
||||
'Arabic',
|
||||
'Turkish',
|
||||
];
|
||||
export const LanguageMap = {
|
||||
English: 'English',
|
||||
@ -74,6 +75,7 @@ export const LanguageMap = {
|
||||
Italian: 'Italiano',
|
||||
Bulgarian: 'Български',
|
||||
Arabic: 'العربية',
|
||||
Turkish: 'Türkçe',
|
||||
};
|
||||
|
||||
export enum LanguageAbbreviation {
|
||||
@ -91,6 +93,7 @@ export enum LanguageAbbreviation {
|
||||
It = 'it',
|
||||
Bg = 'bg',
|
||||
Ar = 'ar',
|
||||
Tr = 'tr',
|
||||
}
|
||||
|
||||
export const LanguageAbbreviationMap = {
|
||||
@ -108,6 +111,7 @@ export const LanguageAbbreviationMap = {
|
||||
[LanguageAbbreviation.It]: 'Italiano',
|
||||
[LanguageAbbreviation.Bg]: 'Български',
|
||||
[LanguageAbbreviation.Ar]: 'العربية',
|
||||
[LanguageAbbreviation.Tr]: 'Türkçe',
|
||||
};
|
||||
|
||||
export const LanguageTranslationMap = {
|
||||
@ -136,6 +140,7 @@ export const LanguageTranslationMap = {
|
||||
Ukrainian: 'uk',
|
||||
Bulgarian: 'bg',
|
||||
Arabic: 'ar',
|
||||
Turkish: 'tr',
|
||||
};
|
||||
|
||||
export enum FileMimeType {
|
||||
|
||||
@ -2297,6 +2297,7 @@ export default {
|
||||
russian: 'الروسية',
|
||||
bulgarian: 'البلغارية',
|
||||
arabic: 'العربية',
|
||||
turkish: 'التركية',
|
||||
},
|
||||
pagination: {
|
||||
total: 'الإجمالي {{total}}',
|
||||
|
||||
@ -2382,6 +2382,7 @@ Important structured information may include: names, dates, locations, events, k
|
||||
russian: 'Руски',
|
||||
bulgarian: 'Български',
|
||||
arabic: 'Арабски',
|
||||
turkish: 'Турски',
|
||||
},
|
||||
pagination: {
|
||||
total: 'Общо {{total}}',
|
||||
|
||||
@ -22,6 +22,7 @@ const languageImports: Record<string, () => Promise<{ default: any }>> = {
|
||||
[LanguageAbbreviation.It]: () => import('./it'),
|
||||
[LanguageAbbreviation.Bg]: () => import('./bg'),
|
||||
[LanguageAbbreviation.Ar]: () => import('./ar'),
|
||||
[LanguageAbbreviation.Tr]: () => import('./tr'),
|
||||
};
|
||||
|
||||
const supportedLanguageCodes: Intl.UnicodeBCP47LocaleIdentifier[] =
|
||||
|
||||
@ -2441,6 +2441,7 @@ Wichtige strukturierte Informationen können sein: Namen, Daten, Orte, Ereigniss
|
||||
russian: 'Russisch',
|
||||
bulgarian: 'Bulgarisch',
|
||||
arabic: 'Arabisch',
|
||||
turkish: 'Türkisch',
|
||||
},
|
||||
pagination: {
|
||||
total: 'Gesamt {{total}}',
|
||||
|
||||
@ -37,6 +37,7 @@ export default {
|
||||
italian: 'Italian',
|
||||
bulgarian: 'Bulgarian',
|
||||
arabic: 'Arabic',
|
||||
turkish: 'Turkish',
|
||||
language: 'Language',
|
||||
languageMessage: 'Please input your language!',
|
||||
languagePlaceholder: 'select your language',
|
||||
@ -2500,6 +2501,7 @@ Important structured information may include: names, dates, locations, events, k
|
||||
russian: 'Russian',
|
||||
bulgarian: 'Bulgarian',
|
||||
arabic: 'Arabic',
|
||||
turkish: 'Turkish',
|
||||
},
|
||||
pagination: {
|
||||
total: 'Total {{total}}',
|
||||
|
||||
@ -943,6 +943,7 @@ export default {
|
||||
russian: 'Ruso',
|
||||
bulgarian: 'Búlgaro',
|
||||
arabic: 'Árabe',
|
||||
turkish: 'Turco',
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
@ -484,6 +484,7 @@ export default {
|
||||
russian: 'Russe',
|
||||
bulgarian: 'Bulgare',
|
||||
arabic: 'Arabe',
|
||||
turkish: 'Turc',
|
||||
},
|
||||
setting: {
|
||||
profile: 'Profil',
|
||||
|
||||
@ -1145,6 +1145,7 @@ export default {
|
||||
russian: 'Rusia',
|
||||
bulgarian: 'Bulgaria',
|
||||
arabic: 'Arab',
|
||||
turkish: 'Turki',
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
@ -1200,6 +1200,7 @@ Quanto sopra è il contenuto che devi riassumere.`,
|
||||
russian: 'Russo',
|
||||
bulgarian: 'Bulgaro',
|
||||
arabic: 'Arabo',
|
||||
turkish: 'Turco',
|
||||
},
|
||||
pagination: {
|
||||
total: 'Totale {{total}}',
|
||||
|
||||
@ -1207,6 +1207,7 @@ export default {
|
||||
russian: 'ロシア語',
|
||||
bulgarian: 'ブルガリア語',
|
||||
arabic: 'アラビア語',
|
||||
turkish: 'トルコ語',
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
@ -1207,6 +1207,7 @@ export default {
|
||||
russian: 'Russo',
|
||||
bulgarian: 'Búlgaro',
|
||||
arabic: 'Árabe',
|
||||
turkish: 'Turco',
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
@ -2046,6 +2046,7 @@ export default {
|
||||
russian: 'Русский',
|
||||
bulgarian: 'Болгарский',
|
||||
arabic: 'Арабский',
|
||||
turkish: 'Турецкий',
|
||||
},
|
||||
pagination: {
|
||||
total: 'Всего {{total}}',
|
||||
|
||||
2567
web/src/locales/tr.ts
Normal file
2567
web/src/locales/tr.ts
Normal file
File diff suppressed because it is too large
Load Diff
@ -1255,6 +1255,7 @@ export default {
|
||||
russian: 'Tiếng Nga',
|
||||
bulgarian: 'Tiếng Bulgaria',
|
||||
arabic: 'Tiếng Ả Rập',
|
||||
turkish: 'Tiếng Thổ Nhĩ Kỳ',
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
@ -1287,6 +1287,7 @@ export default {
|
||||
russian: '俄語',
|
||||
bulgarian: '保加利亞語',
|
||||
arabic: '阿拉伯語',
|
||||
turkish: '土耳其語',
|
||||
},
|
||||
modal: {
|
||||
okText: '確認',
|
||||
|
||||
@ -2167,6 +2167,7 @@ Tokenizer 会根据所选方式将内容存储为对应的数据结构。`,
|
||||
vietnamese: '越南语',
|
||||
bulgarian: '保加利亚语',
|
||||
arabic: '阿拉伯语',
|
||||
turkish: '土耳其语',
|
||||
},
|
||||
pagination: {
|
||||
total: '总共 {{total}} 条',
|
||||
|
||||
Reference in New Issue
Block a user