This is an automated email from the ASF dual-hosted git repository.

juzhiyuan pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/apisix-dashboard.git


The following commit(s) were added to refs/heads/master by this push:
     new a0be631b feat: support Turkish Language (#2452)
a0be631b is described below

commit a0be631b82b8474546b8b6ede68de3c3716b5f1d
Author: Anil Baki Durmus <[email protected]>
AuthorDate: Thu May 26 06:41:51 2022 +0300

    feat: support Turkish Language (#2452)
---
 web/src/components/ActionBar/locales/tr-TR.ts     |  20 +++
 web/src/components/Plugin/locales/tr-TR.ts        | 155 +++++++++++++++++
 web/src/components/PluginFlow/locales/tr-TR.ts    |  45 +++++
 web/src/components/RawDataEditor/locales/tr-TR.ts |  19 ++
 web/src/components/Upstream/locales/tr-TR.ts      | 159 +++++++++++++++++
 web/src/locales/tr-TR.ts                          |  49 ++++++
 web/src/locales/tr-TR/component.ts                |  92 ++++++++++
 web/src/locales/tr-TR/globalHeader.ts             |  33 ++++
 web/src/locales/tr-TR/menu.ts                     |  78 +++++++++
 web/src/locales/tr-TR/other.ts                    |  19 ++
 web/src/locales/tr-TR/pwa.ts                      |  22 +++
 web/src/locales/tr-TR/setting.ts                  |  17 ++
 web/src/locales/tr-TR/settingDrawer.ts            |  47 +++++
 web/src/pages/Consumer/locales/tr-TR.ts           |  31 ++++
 web/src/pages/Dashboard/locales/tr-TR.ts          |  21 +++
 web/src/pages/Plugin/locales/tr-TR.ts             |  22 +++
 web/src/pages/Proto/locales/tr-TR.ts              |  40 +++++
 web/src/pages/Route/locales/tr-TR.ts              | 200 ++++++++++++++++++++++
 web/src/pages/SSL/locales/tr-TR.ts                |  47 +++++
 web/src/pages/ServerInfo/locales/tr-TR.ts         |  24 +++
 web/src/pages/Service/locales/tr-TR.ts            |  29 ++++
 web/src/pages/Setting/locales/tr-TR.ts            |  25 +++
 web/src/pages/Upstream/locales/tr-TR.ts           | 120 +++++++++++++
 web/src/pages/User/locales/tr-TR.ts               |  31 ++++
 24 files changed, 1345 insertions(+)

diff --git a/web/src/components/ActionBar/locales/tr-TR.ts 
b/web/src/components/ActionBar/locales/tr-TR.ts
new file mode 100644
index 00000000..d8980dab
--- /dev/null
+++ b/web/src/components/ActionBar/locales/tr-TR.ts
@@ -0,0 +1,20 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+export default {
+  'component.actionbar.button.preStep': 'Önceki',
+  'component.actionbar.button.nextStep': 'Sonraki',
+};
diff --git a/web/src/components/Plugin/locales/tr-TR.ts 
b/web/src/components/Plugin/locales/tr-TR.ts
new file mode 100644
index 00000000..86953a2a
--- /dev/null
+++ b/web/src/components/Plugin/locales/tr-TR.ts
@@ -0,0 +1,155 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+export default {
+  'component.plugin.tip1': 'NOT:Eklentilerinizi değiştirdikten sonra 
değişiklileri schema.json dosyasına uygulamalısınız.',
+  'component.plugin.tip2': 'Nasıl güncellenir?',
+  'component.select.pluginTemplate': 'Eklenti şablonlarını seçin',
+  'component.step.select.pluginTemplate.select.option': 'Özel',
+  'component.plugin.pluginTemplate.tip1':
+    '1. Bir routeda halihazırda yapılandırılmış eklentiler alanı varsa, 
eklenti şablonundaki eklentiler onunla birleştirilir..',
+  'component.plugin.pluginTemplate.tip2':
+    '2.Eklenti şablonundaki aynı eklenti, eklentilerdeki bir eklentiyi 
geçersiz kılar.',
+  'component.plugin.enable': 'Etkinleştir',
+  'component.plugin.disable': 'Devre dışı bırak',
+  'component.plugin.authentication': 'Kimlik doğrulama',
+  'component.plugin.security': 'Güvenlik',
+  'component.plugin.traffic': 'Trafik',
+  'component.plugin.serverless': 'Sunucusuz Mimari',
+  'component.plugin.observability': 'Gözlemlenebilirlik',
+  'component.plugin.other': 'Diğer',
+  // cors
+  'component.pluginForm.cors.allow_origins.tooltip':
+    'Originler CORSları aktif ettiğinde örn : :scheme://host:port, örn 
https://somehost.com:8081.Kullanılacak birden çok kaynak allow_credential false 
olduğunda, herhangi bir kaynağa izin verildiğini belirtmek için * işaretini 
kullanabilirsiniz. Ayrıca, ** kullanarak tüm kökenlere izin verebilirsiniz, 
allow_credentialı etkinleştirirseniz bazı güvenlik riskleri getirecektir.',
+  'component.pluginForm.cors.allow_methods.tooltip':
+    'Methodlar CORSları aktif ettiğinde, örn GET, POST vb. Ayırmak için çoklu 
method kullanılır. Allow_credential false duruma geldiğinde, Tüm yöntemlere 
izin ver belirtmek için * kullanabilirsiniz.Ayrıca, allow_credentialı zaten 
etkinleştirmiş olsanız bile, ** kullanarak herhangi bir yönteme zorla izin 
verebilirsiniz, ancak bu, bazı güvenlik riskleri getirecektir.',
+  'component.pluginForm.cors.allow_headers.tooltip':
+    'Kaynaklar arası kaynağa erişirken istekte hangi başlıkların ayarlanmasına 
izin verilir. Bölmek için çoklu değer kullanımı. allow_credential false 
olduğunda, tüm istek üstbilgilerine izin ver belirtmek için * 
kullanabilirsiniz. Ayrıca, ** kullanarak herhangi bir üstbilgiye zorla izin 
verebilirsiniz, hatta allow_credentialı hali hazırda etkinleştirdiyseniz bu 
bazı güvenlik riskleri getirecektir,',
+  'component.pluginForm.cors.expose_headers.tooltip':
+  'Başlangıçlar arası kaynağa erişildiğinde yanıt olarak hangi başlıkların 
ayarlanmasına izin verilir. Bölmek için çoklu değer kullanımı. allow_credential 
false olduğunda, herhangi bir başlığa izin ver belirtmek için * 
kullanabilirsiniz. Ayrıca, ** kullanarak herhangi bir üstbilgiye zorla izin 
verebilirsiniz, hatta allow_credentialı zaten etkinleştirin, ancak bu bazı 
güvenlik riskleri getirecektir.',
+  'component.pluginForm.cors.max_age.tooltip':
+  'Sonuçların önbelleğe alınabileceği maksimum saniye sayısı. Bu zaman 
aralığında tarayıcı son kontrol sonucunu yeniden kullanır. -1 önbellek yok 
demektir. Lütfen maksimum değerin tarayıcıya bağlı olduğunu unutmayın, 
ayrıntılar için lütfen MDNye bakınız.',
+  'component.pluginForm.cors.allow_credential.tooltip':
+  "Bu seçeneği true olarak ayarlarsanız, diğer seçenekler için '*' ı 
kullanamazsınız.",
+  'component.pluginForm.cors.allow_origins_by_metadata.tooltip':
+  'Eklenti meta verilerindeki allow_origins kümesine başvurarak CORSu 
etkinleştirmek için hangi Origine izin verildiğini eşleştirin.',
+  'component.pluginForm.cors.allow_origins_by_regex.tooltip':
+  'CORSu etkinleştirmek için hangi Origine izin verildiğini eşleştirmek için 
normal ifade ifadeleri kullanın, örneğin, [".*.test.com"], test.comun tüm alt 
alan adlarını eşleştirmek için kullanabilir.',
+  // referer-restriction
+  'component.pluginForm.referer-restriction.whitelist.tooltip':
+  'Whiteliste alınacak ana bilgisayar adı listesi. Ana bilgisayar adı, joker 
karakter olarak * ile başlatılabilir.',
+  'component.pluginForm.referer-restriction.blacklist.tooltip':
+'Kara listeye alınacak ana bilgisayar adı listesi. Ana bilgisayar adı, joker 
karakter olarak * ile başlatılabilir.',
+  'component.pluginForm.referer-restriction.listEmpty.tooltip': 'Boş Liste',
+  'component.pluginForm.referer-restriction.bypass_missing.tooltip':
+  'Yönlendiren başlığı eksik veya hatalı biçimlendirilmiş olduğunda kontrolün 
atlanıp atlanmayacağı.',
+  'component.pluginForm.referer-restriction.message.tooltip':
+  'Erişime izin verilmemesi durumunda mesaj döndürülür',
+  // api-breaker
+  'component.pluginForm.api-breaker.break_response_code.tooltip':
+  'Unhealthy durum oluştuğunda hata kodunu döndür.',
+  'component.pluginForm.api-breaker.max_breaker_sec.tooltip': 'Kesme 
Zamanı(Saniye)',
+  'component.pluginForm.api-breaker.unhealthy.http_statuses.tooltip':
+    'Durum Kodları (Unhealthy durumda).',
+  'component.pluginForm.api-breaker.unhealthy.failures.tooltip':
+  'Unhealthy bir durumu tetikleyen ardışık hata isteklerinin sayısı.',
+  'component.pluginForm.api-breaker.healthy.http_statuses.tooltip': 'Durum 
Kodları (Unhealthy durumda)',
+  'component.pluginForm.api-breaker.healthy.successes.tooltip':
+  'Healthy durumu tetikleyen ardışık normal isteklerin sayısı.',
+  // proxy-mirror
+  'component.pluginForm.proxy-mirror.host.tooltip':
+  'Bir mirror servis adresi belirtin, ör. http://127.0.0.1:9797 (adresin şema 
içermesi gerekir: URI kısmı değil, http veya https)',
+  'component.pluginForm.proxy-mirror.host.extra': 'örn. http://127.0.0.1:9797',
+  'component.pluginForm.proxy-mirror.host.ruletip':
+    'Adres şema içermelidir http veya https,  URI parçası olmamalı',
+  'component.pluginForm.proxy-mirror.path.tooltip':
+  "Yansıtma isteğinin yol bölümünü belirtin. O olmazsa mevcut yol 
kullanılacaktır.",
+  'component.pluginForm.proxy-mirror.path.ruletip': 'Lütfen doğru yolu girin, 
ör. /path',
+  'component.pluginForm.proxy-mirror.sample_ratio.tooltip':
+  'isteklerin mirror edileceği örnek oranı.',
+  // limit-conn
+  'component.pluginForm.limit-conn.conn.tooltip':
+  'izin verilen maksimum eşzamanlı istek sayısı. Bu oranı aşan (ve bağlantı + 
çoğuşmanın altındaki) istekler bu eşiğe uyacak şekilde ertelenir (gecikme 
saniyeleri default_conn_delay tarafından yapılandırılır).',
+  'component.pluginForm.limit-conn.burst.tooltip':
+  'Gecikmesine izin verilen aşırı eşzamanlı isteklerin (veya bağlantıların) 
sayısı.',
+  'component.pluginForm.limit-conn.default_conn_delay.tooltip':
+  'eşzamanlı istekler bağlantıyı aştığında ancak altında (conn + burst) 
olduğunda isteğin gecikme saniyeleri.',
+  'component.pluginForm.limit-conn.key_type.tooltip':
+    'Anahtar tipinin destekledikleri; "var" (single var) ve "var_combination" 
(combine var)',
+  'component.pluginForm.limit-conn.key.tooltip':
+    'Eşzamanlılık seviyesini sınırlamak için kullanılır. Örneğin ana 
bilgisayar adı başına eşzamanlılığı sınırlamamız için ana bilgisayar adı (veya 
sunucu bölgesi) anahtar olarak kullanılabilir Aksi takdirde tek bir istemcinin 
hizmetimizi çok fazla bağlantı veya istekle doldurmasını önlemek için istemci 
adresini anahtar olarak da kullanabiliriz.',
+  'component.pluginForm.limit-conn.rejected_code.tooltip':
+  'istek (conn + burst) aştığında döndürülen reddedilecektir.',
+  'component.pluginForm.limit-conn.rejected_msg.tooltip':
+  'istek (conn + burst) aştığında döndürülen yanıt gövdesi reddedilecektir.',
+  'component.pluginForm.limit-conn.only_use_default_delay.tooltip':
+  'gecikme saniyelerinin katı modunu etkinleştirin. Bu seçeneği true olarak 
ayarlarsanız, ek hesaplama mantığı olmadan kesinlikle belirlediğiniz gecikme 
saniyelerine göre çalışır.',
+  'component.pluginForm.limit-conn.allow_degradation.tooltip':
+  'Limit-bağlantı işlevi geçici olarak kullanılamadığında eklenti bozulmasını 
etkinleştirip etkinleştirmeme. Değer true, varsayılan false olarak 
ayarlandığında isteklerin devam etmesine izin verir.',
+  // limit-req
+  'component.pluginForm.limit-req.rate.tooltip':
+  'Belirtilen istek oranı (saniyedeki sayı) eşiği. Bu oranı aşan (ve 
patlamanın altındaki) istekler, orana uymak için gecikecektir.',
+  'component.pluginForm.limit-req.burst.tooltip':
+  'Saniyedeki aşırı istek sayısının ertelenmesine izin verildi. Bu katı sınırı 
aşan istekler hemen reddedilecektir.',
+  'component.pluginForm.limit-req.key_type.tooltip':
+  'Anahtar tipinin destekledikleri; "var" (single var) ve "var_combination" 
(combine var)',
+  'component.pluginForm.limit-req.key.tooltip': 'Hızı sınırlamak için 
kullanıcı tarafından belirlenen anahtar.',
+  'component.pluginForm.limit-req.rejected_code.tooltip':
+  'Talep eşiği aştığında döndürülen HTTP durum kodu reddedilir.',
+  'component.pluginForm.limit-req.rejected_msg.tooltip':
+  'Talep eşiği aştığında döndürülen yanıt body reddedilir.',
+  'component.pluginForm.limit-req.nodelay.tooltip':
+  'Gecikme bayrağı doğru değilse, engellenen istekler ertelenmez',
+  'component.plugin.form': 'Eklenti Formu',
+  'component.plugin.format-codes.disable': 'JSON veya YAML formatı',
+  'component.plugin.editor': 'Eklenti Düzenleyici',
+  'component.plugin.noConfigurationRequired': "Eklenti için yapılandırma 
gerekli değil",
+
+  // limit-count
+  'component.pluginForm.limit-count.count.tooltip': 'Belirtilen sayıda istek 
eşiği.',
+  'component.pluginForm.limit-count.time_window.tooltip':
+  'İstek sayısı sıfırlanmadan önceki saniye cinsinden zaman penceresi.',
+  'component.pluginForm.limit-count.key_type.tooltip':
+  'Anahtar tipinin destekledikleri; "var" (single var) ve "var_combination" 
(combine var)',
+  'component.pluginForm.limit-count.key.tooltip': 'Sayıyı sınırlamak için 
kullanıcı tarafından belirlenen anahtar.',
+  'component.pluginForm.limit-count.rejected_code.tooltip':
+  'Talep eşiği aştığında döndürülen HTTP durum kodu reddedilir, varsayılan kod 
503dür.',
+  'component.pluginForm.limit-count.rejected_msg.tooltip':
+  'Talep eşiği aştığında döndürülen yanıt gövdesi reddedilir.',
+  'component.pluginForm.limit-count.policy.tooltip':
+  'Sınırları almak ve artırmak için kullanılacak hız sınırlayıcı politikalar. 
Kullanılabilir değerler yereldir (sayaçlar düğümdeki bellekte yerel olarak 
depolanır) ve redis (sayaçlar bir Redis sunucusunda depolanır ve düğümler 
arasında paylaşılır, genellikle bunu küresel hız sınırını yapmak için kullanır) 
ve yeniden kümeleme (redis ile aynı işlev, yalnızca Redis küme desenini 
kullanın).',
+  'component.pluginForm.limit-count.allow_degradation.tooltip':
+  'Limit-count işlevi geçici olarak kullanılamadığında eklenti bozulmasının 
etkinleştirilip etkinleştirilmediği (ör. redis zaman aşımı). Değer true olarak 
ayarlandığında isteklerin devam etmesine izin verir',
+  'component.pluginForm.limit-count.show_limit_quota_header.tooltip':
+  'Yanıt başlığında X-RateLimit-Limit ve X-RateLimit-Remaining (yani toplam 
istek sayısı ve gönderilebilecek kalan istek sayısı anlamına gelir)',
+  'component.pluginForm.limit-count.group.tooltip':
+  'Aynı grupla yapılandırılan rota aynı sayacı paylaşacaktır',
+  'component.pluginForm.limit-count.redis_host.tooltip':
+  'Redis ilkesini kullanırken, bu özellik Redis sunucusunun adresini 
belirtir.',
+  'component.pluginForm.limit-count.redis_port.tooltip':
+  'Redis ilkesini kullanırken, bu özellik Redis sunucusunun bağlantı noktasını 
belirtir.',
+  'component.pluginForm.limit-count.redis_password.tooltip':
+  'Redis ilkesini kullanırken, bu özellik Redis sunucusunun parolasını 
belirtir.',
+  'component.pluginForm.limit-count.redis_database.tooltip':
+  'Redis ilkesini kullanırken, bu özellik, Redis sunucusundan seçtiğiniz 
veritabanını ve yalnızca Redis olmayan küme modu (tek örnek modu veya tek giriş 
sağlayan Redis genel bulut hizmeti) için belirtir.',
+  'component.pluginForm.limit-count.redis_timeout.tooltip':
+  'Redis ilkesini kullanırken, bu özellik Redis sunucusuna gönderilen herhangi 
bir komutun zaman aşımını milisaniye cinsinden belirtir.',
+  'component.pluginForm.limit-count.redis_cluster_nodes.tooltip':
+  'Redis-cluster ilkesi kullanılırken bu özellik, Redis küme hizmeti 
düğümlerinin (en az iki düğüm) adreslerinin bir listesidir.',
+  'component.pluginForm.limit-count.redis_cluster_name.tooltip':
+  'Redis-cluster ilkesi kullanılırken, bu özellik Redis küme hizmeti 
düğümlerinin adıdır.',
+  'component.pluginForm.limit-count.atLeast2Characters.rule': 'Please enter at 
least 2 characters',
+};
diff --git a/web/src/components/PluginFlow/locales/tr-TR.ts 
b/web/src/components/PluginFlow/locales/tr-TR.ts
new file mode 100644
index 00000000..2c8041f1
--- /dev/null
+++ b/web/src/components/PluginFlow/locales/tr-TR.ts
@@ -0,0 +1,45 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+export default {
+  'component.plugin-flow.text.condition.required': 'Konfigürasyon kontrolü',
+  'component.plugin-flow.text.condition': 'Kural',
+  'component.plugin-flow.text.condition2': 'Koşul',
+  'component.plugin-flow.text.condition.placeholder': 'Kuralı giriniz',
+  'component.plugin-flow.text.without-data': 'Konfigürasyonsuz node bulundu.',
+  'component.plugin-flow.text.plugin-without-data.description': 'Lütfen 
eklentiyi düzenleyin: ',
+  'component.plugin-flow.text.no-start-node': 'Lütfen node başlatmak için 
çalıştırın',
+  'component.plugin-flow.text.no-root-node': 'Root node bulunamadı',
+  'component.plugin-flow.text.start-node': 'Başlat',
+  'component.plugin-flow.text.general': 'Genel',
+  'component.plugin-flow.text.nodes-area': 'Uygun nodelar',
+  'component.plugin-flow.text.nodes.not-found': 'Bulunamadı',
+  'component.plugin-flow.text.search-nodes.placeholder': 'İsme göre eklenti 
ara',
+  'component.plugin-flow.text.condition-rule.tooltip':
+    'Nodeların karar durumu. örnek: code == 503',
+  'component.plugin-flow.text.line': 'Çizgi',
+  'component.plugin-flow.text.grid': 'Kare',
+  'component.plugin-flow.text.background': 'Arkaplan',
+  'component.plugin-flow.text.node': 'Node',
+  'component.plugin-flow.text.text': 'Metin',
+  'component.plugin-flow.text.condition-without-configuration':
+    "Lütfen tüm durum nodelarının verilerini kontrol edin",
+  'component.plugin-flow.text.preview.readonly':
+    'NOT: Aşağıdaki çekmecedeki işlemleriniz korunmayacak.',
+  'component.plugin-flow.text.both-modes-exist':
+    'Orkestrasyon modu yapılandırması normal mod yapılandırmasını geçersiz 
kılar, emin misiniz?',
+  'component.plugin-flow.text.both-modes-exist.title': 'Dikkat',
+};
diff --git a/web/src/components/RawDataEditor/locales/tr-TR.ts 
b/web/src/components/RawDataEditor/locales/tr-TR.ts
new file mode 100644
index 00000000..d4776b8c
--- /dev/null
+++ b/web/src/components/RawDataEditor/locales/tr-TR.ts
@@ -0,0 +1,19 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+export default {
+  'component.rawDataEditor.tip': "Şu anda düzenleme modunu desteklemiyor",
+};
diff --git a/web/src/components/Upstream/locales/tr-TR.ts 
b/web/src/components/Upstream/locales/tr-TR.ts
new file mode 100644
index 00000000..4cc31ed4
--- /dev/null
+++ b/web/src/components/Upstream/locales/tr-TR.ts
@@ -0,0 +1,159 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+export default {
+  'component.upstream.fields.tls.client_key': 'Kullanıcı Anahtarı',
+  'component.upstream.fields.tls.client_key.required': 'Kullanıcı Anahtarını 
girmelisiniz',
+  'component.upstream.fields.tls.client_cert': 'Kullanıcı Sertifikası',
+  'component.upstream.fields.tls.client_cert.required': 'Kullanıcı 
Sertifikasını girmelisiniz',
+
+  'component.upstream.fields.upstream_type': 'Upstream Tipi',
+  'component.upstream.fields.upstream_type.node': 'Node',
+  'component.upstream.fields.upstream_type.service_discovery': 'Servis Keşfi',
+
+  'component.upstream.fields.discovery_type': 'Keşif Tipi',
+  'component.upstream.fields.discovery_type.tooltip': 'Keşif Tipi',
+  'component.upstream.fields.discovery_type.placeholder': 'Keşif tipini 
seçiniz',
+  'component.upstream.fields.discovery_type.type.dns': 'DNS',
+  'component.upstream.fields.discovery_type.type.consul_kv': 'Consul KV',
+  'component.upstream.fields.discovery_type.type.nacos': 'Nacos',
+  'component.upstream.fields.discovery_type.type.eureka': 'Eureka',
+  'component.upstream.fields.discovery_type.type.kubernetes': 'Kubernetes',
+
+  'component.upstream.fields.discovery_args.group_name': 'Grup Adı',
+  'component.upstream.fields.discovery_args.group_name.tooltip': 'Grup Adı',
+  'component.upstream.fields.discovery_args.group_name.placeholder': 'Lütfen 
grup adını giriniz',
+  'component.upstream.fields.discovery_args.namespace_id': 'Alanadı kimliği',
+  'component.upstream.fields.discovery_args.namespace_id.tooltip': 'Alanadı 
kimliği',
+  'component.upstream.fields.discovery_args.namespace_id.placeholder':
+    'Lütfen alanadı kimliğini giriniz',
+
+  'component.upstream.fields.service_name': 'Servis Adı',
+  'component.upstream.fields.service_name.tooltip': 'Servis Adı',
+  'component.upstream.fields.service_name.placeholder': 'Lütfen servis adını 
giriniz',
+
+  'component.upstream.fields.tls': 'TLS',
+  'component.upstream.fields.tls.tooltip': 'TLS Sertifikası',
+
+  'component.upstream.fields.hash_on': 'Hash açık',
+  'component.upstream.fields.hash_on.tooltip': 'Hash girişi olarak ne 
kullanılır?',
+
+  'component.upstream.fields.key': 'Anahtar',
+  'component.upstream.fields.key.tooltip': 'Anahtar girdi olarak hashing',
+
+  'component.upstream.fields.retries': 'Deneme',
+  'component.upstream.fields.retries.tooltip':
+    'Yeniden deneme mekanizması, isteği bir sonraki yukarı akış düğümüne 
gönderir. 0 değeri, yeniden deneme mekanizmasını devre dışı bırakır ve 
kullanılabilir arka uç düğümlerinin sayısını kullanmak için tabloyu boş 
bırakır.',
+
+  'component.upstream.fields.retry_timeout': 'Deneme Zaman Aşımı',
+  'component.upstream.fields.retry_timeout.tooltip':
+    'Yeniden denemelerin sürdürülebileceği saniye miktarını sınırlamak için 
bir sayı yapılandırın ve önceki istek ve yeniden deneme istekleri çok uzun 
sürdüyse yeniden denemelere devam etmeyin. 0, yeniden deneme zaman aşımı 
mekanizmasını devre dışı bırakmak anlamına gelir.',
+
+  'component.upstream.fields.keepalive_pool': 'Keepalive Poolu',
+  'component.upstream.fields.keepalive_pool.tooltip': 'Upstream için bağımsız 
bir keepalive poolu ayarla',
+  'component.upstream.fields.keepalive_pool.size': 'Ölçü',
+  'component.upstream.fields.keepalive_pool.size.placeholder': 'Ölçüyü 
giriniz',
+  'component.upstream.fields.keepalive_pool.idle_timeout': 'Boşta kalma zaman 
aşımı',
+  'component.upstream.fields.keepalive_pool.idle_timeout.placeholder':
+    'Boşta kalma zaman aşımını giriniz',
+  'component.upstream.fields.keepalive_pool.requests': 'İstekler',
+  'component.upstream.fields.keepalive_pool.requests.placeholder': 'İstekleri 
giriniz',
+
+  'component.upstream.fields.checks.active.type': 'Aktif',
+  'component.upstream.fields.checks.active.type.tooltip':
+    'HTTP veya HTTPS kullanarak etkin healtcheck denetimleri gerçekleştirmeyi 
veya yalnızca TCP bağlantısı yapmayı denemeyi deneyin.',
+
+  'component.upstream.fields.checks.active.concurrency': 'Eşzamanlı',
+  'component.upstream.fields.checks.active.concurrency.tooltip':
+    'Aktif healthcheck kontrollerinde aynı anda kontrol etmek için hedef 
sayısı.',
+
+  'component.upstream.fields.checks.active.host': 'Host',
+  'component.upstream.fields.checks.active.host.required': 'Lütfen host adını 
giriniz.',
+  'component.upstream.fields.checks.active.host.tooltip':
+    'Etkin healthcheck kontrolünü gerçekleştirmek için kullanılan HTTP 
isteğinin ana bilgisayar adı',
+  'component.upstream.fields.checks.active.host.scope': 'Only letters, numbers 
and . are supported',
+
+  'component.upstream.fields.checks.active.port': 'Port',
+
+  'component.upstream.fields.checks.active.http_path': 'HTTP Yolu',
+  'component.upstream.fields.checks.active.http_path.tooltip':
+  'Hedefe HTTP GET isteği düzenlenirken kullanılması gereken yoldur. Öntanımlı 
değer /.',
+  'component.upstream.fields.checks.active.http_path.placeholder':
+    'Lütfen HTTP istek yolunu giriniz. ',
+
+  'component.upstream.fields.checks.active.https_verify_certificate': 'HTTP 
Sertifikasını doğrula',
+  'component.upstream.fields.checks.active.https_verify_certificate.tooltip':
+    'Etkin uygulama yaparken uzak ana bilgisayarın SSL sertifikasının 
geçerliliğini kontrol edip etmeyeceğini belirler.',
+
+  'component.upstream.fields.checks.active.req_headers': 'Request Headerları',
+  'component.upstream.fields.checks.active.req_headers.tooltip':
+    'Ek request header, örnek: User-Agent: curl/7.29.0',
+
+  'component.upstream.fields.checks.active.healthy.interval': 'Aralıklar',
+  'component.upstream.fields.checks.active.healthy.interval.tooltip':
+    'Sağlıklı hedefler için kontroller arasındaki aralık (saniye cinsinden) ',
+
+  'component.upstream.fields.checks.active.healthy.successes': 'Başarımlar',
+  'component.upstream.fields.checks.active.healthy.successes.tooltip':
+    'Bir hedefi sağlıklı olarak değerlendirilecek başarı sayısı  ',
+  'component.upstream.fields.checks.active.healthy.successes.required':
+    'Lütfen başarı sayısını giriniz.',
+
+  'component.upstream.fields.checks.active.healthy.http_statuses': 'HTTP 
Durumları',
+  'component.upstream.fields.checks.active.healthy.http_statuses.tooltip':
+    'Etkin durum denetimlerinde bir araştırma tarafından döndürüldüğünde, 
sağlıklı olduğunu belirten bir başarı olarak değerlendirilecek bir dizi HTTP 
durumu.',
+
+  'component.upstream.fields.checks.active.unhealthy.timeouts': 'Zaman Aşımı',
+  'component.upstream.fields.checks.active.unhealthy.timeouts.tooltip':
+    'Bir hedefi sağlıksız olarak değerlendirmek için etkin araştırmalarda 
zaman aşımı sayısı.',
+
+  'component.upstream.fields.checks.active.unhealthy.http_failures': 'HTTP 
Hataları',
+  'component.upstream.fields.checks.active.unhealthy.http_failures.tooltip':
+    'Bir hedefi sağlıksız olarak değerlendirmek için HTTP hatalarının sayısı',
+  'component.upstream.fields.checks.active.unhealthy.http_failures.required':
+    'Lütfen HTTP hatalarını girin',
+
+  'component.upstream.fields.checks.active.unhealthy.tcp_failures': 'TCP 
Hataları',
+  'component.upstream.fields.checks.active.unhealthy.tcp_failures.tooltip':
+    'Bir hedefi sağlıksız olarak değerlendirmek için TCP hatalarının sayısı',
+  'component.upstream.fields.checks.active.unhealthy.tcp_failures.required':
+    'Lütfen TCP Hatalarını girin',
+
+  'component.upstream.fields.checks.active.unhealthy.interval': 'Aralıklar',
+  'component.upstream.fields.checks.active.unhealthy.interval.tooltip':
+  'Sağlıksız hedefler için aktif sağlık kontrolleri arasındaki aralık (saniye 
cinsinden). Sıfır değeri, sağlıklı hedefler için aktif probların 
gerçekleştirilmemesi gerektiğini gösterir.',
+  'component.upstream.fields.checks.active.unhealthy.required':
+    'Lütfen sağlıksız aralığı girin ',
+
+  'component.upstream.fields.checks.passive.healthy.successes': 'Başarımlar',
+  'component.upstream.fields.checks.passive.healthy.successes.tooltip':
+    'Bir hedefi sağlıklı olarak değerlendirilecek başarı sayısı',
+  'component.upstream.fields.checks.passive.healthy.successes.required':
+    'Lütfen başarı sayısını giriniz.',
+
+  'component.upstream.fields.checks.passive.unhealthy.timeouts': 'Zaman Aşımı',
+  'component.upstream.fields.checks.passive.unhealthy.timeouts.tooltip':
+  'Pasif sağlık kontrollerinde gözlemlendiği gibi, bir hedefi sağlıksız olarak 
değerlendirmek için proxy trafiğindeki zaman aşımlarının sayısı.',
+
+  'component.upstream.other.none': 'Yok (Yalnızca hizmeti bağlarken 
kullanılabilir)',
+  'component.upstream.other.pass_host-with-multiple-nodes.title':
+    'Lütfen hedef düğüm yapılandırmasını kontrol ediniz',
+  'component.upstream.other.pass_host-with-multiple-nodes':
+    'Hedef düğüm listesinde bir ana bilgisayar adı veya IP kullanırken 
yalnızca bir hedef düğüm olduğundan emin olun',
+  'component.upstream.other.health-check.passive-only':
+  'Pasif sağlık denetimi etkinleştirildiğinde, aynı anda etkin sağlık 
denetiminin de etkinleştirilmesi gerekir.',
+  'component.upstream.other.health-check.invalid': 'Lütfen sağlık kontrolü 
yapılandırmasını kontrol edin',
+};
diff --git a/web/src/locales/tr-TR.ts b/web/src/locales/tr-TR.ts
new file mode 100644
index 00000000..7ef9c873
--- /dev/null
+++ b/web/src/locales/tr-TR.ts
@@ -0,0 +1,49 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+import { ActionBarEnUS } from '@/components/ActionBar';
+
+import component from './tr-TR/component';
+import globalHeader from './tr-TR/globalHeader';
+import menu from './tr-TR/menu';
+import pwa from './tr-TR/pwa';
+import settingDrawer from './tr-TR/settingDrawer';
+import settings from './tr-TR/setting';
+import other from './tr-TR/other';
+import Plugin from '../components/Plugin/locales/tr-TR';
+import PluginFlow from '../components/PluginFlow/locales/tr-TR';
+import RawDataEditor from '../components/RawDataEditor/locales/tr-TR';
+import UpstreamComponent from '../components/Upstream/locales/tr-TR';
+
+export default {
+  'navBar.lang': 'Dil Seçenekleri',
+  'layout.user.link.help': 'Yardım',
+  'layout.user.link.privacy': 'Gizlilik',
+  'layout.user.link.terms': 'Kurallar',
+  'app.preview.down.block': 'Sayfayı yerel projenize indirin',
+  ...globalHeader,
+  ...menu,
+  ...settingDrawer,
+  ...settings,
+  ...pwa,
+  ...component,
+  ...other,
+  ...ActionBarEnUS,
+  ...Plugin,
+  ...PluginFlow,
+  ...RawDataEditor,
+  ...UpstreamComponent,
+};
diff --git a/web/src/locales/tr-TR/component.ts 
b/web/src/locales/tr-TR/component.ts
new file mode 100644
index 00000000..f4df0435
--- /dev/null
+++ b/web/src/locales/tr-TR/component.ts
@@ -0,0 +1,92 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+export default {
+  'component.tagSelect.expand': 'Genişlet',
+  'component.tagSelect.collapse': 'Daralt',
+  'component.tagSelect.all': 'Tümü',
+  'component.global.search': 'Ara',
+  'component.global.reset': 'Sıfırla',
+  'component.global.confirm': 'Onayla',
+  'component.global.format': 'Biçimlendir',
+  'component.global.document': 'Doküman',
+  'component.global.enable': 'Aktifleştir',
+  'component.global.disable': 'Devre dışı bırak',
+  'component.global.scope': 'Kapsam',
+  'component.global.data.editor': 'Veri Editörü',
+  'component.global.delete': 'Sil',
+  'component.global.cancel': 'İptal',
+  'component.global.submit': 'Gönder',
+  'component.global.create': 'Oluştur',
+  'component.global.add': 'Ekle',
+  'component.global.save': 'Kaydet',
+  'component.global.edit': 'Düzenle',
+  'component.global.view': 'Görüntüle',
+  'component.global.duplicate': 'Çoğalt',
+  'component.global.manage': 'Yönet',
+  'component.global.update': 'Güncelle',
+  'component.global.get': 'Al',
+  'component.global.edit.plugin': 'Eklenti Düzenle',
+  'component.global.loading': 'Yükleniyor',
+  'component.global.list': 'Liste',
+  'component.global.description': 'Açıklama',
+  'component.global.description.required': 'Açıklama gerekli',
+  'component.global.labels': 'Etiketler',
+  'component.global.version': 'Sürüm',
+  'component.global.operation': 'İşlem',
+  'component.status.success': 'Başarılı',
+  'component.status.fail': 'Başarısız',
+  'component.global.popconfirm.title.delete': 'Silmek istediğinizden emin 
misiniz?',
+  'component.global.notification.success.message.deleteSuccess': 'Başarıyla 
silindi',
+  'component.global.create.consumer.success': 'Başarıyla oluşturuldu',
+  'component.global.delete.consumer.success': 'Başarıyla silindi',
+  'component.global.edit.consumer.success': 'Başarıyla güncellendi',
+
+  'component.global.steps.stepTitle.basicInformation': 'Temel Bilgiler',
+  'component.global.steps.stepTitle.preview': 'Önizleme',
+  'component.global.steps.stepTitle.pluginConfig': 'Eklenti Ayarları',
+
+  'component.global.pleaseEnter': 'Lütfen girin',
+  'component.global.pleaseChoose': 'Lütfen seçin',
+  'component.global.pleaseCheck': 'Lütfen kontrol edin',
+
+  'component.global.input.ruleMessage.name':
+    'Sadece harfler sayılar ve -,_ kullanılabilir. Ayrıca harf ile 
başlamalıdır.',
+
+  'component.global.connectionTimeout': 'Bağlantı zaman aşımı',
+  'component.global.sendTimeout': 'Zaman aşımı gönder',
+  'component.global.receiveTimeout': 'Zaman aşımı al',
+  'component.global.name': 'Ad',
+  'component.global.id': 'ID',
+  'component.global.updateTime': 'Zamanı Güncelle',
+  'component.global.form.itemExtraMessage.nameGloballyUnique': 'İsim global 
olarak benzersiz olmalıdır',
+  'component.global.input.placeholder.description':
+    'Açıklama girin, max 256 karakter',
+  // User component
+  'component.user.loginByPassword': 'Kullanıcı adı ve şifre',
+  'component.user.login': 'Giriş',
+
+  'component.document': 'Doküman',
+  'component.label-manager': 'Etiket Yöneticisi',
+
+  'component.global.noConfigurationRequired': 'Yapılandırma gerekli değil',
+  'component.global.copy': 'Kopyala',
+  'component.global.copySuccess': 'Başarıyla kopyalandı',
+  'component.global.copyFail': 'Kopyalama başarısız',
+
+  'component.global.invalidYaml': 'Geçersiz YAML',
+  'component.global.invalidJson': 'Geçersiz JSON',
+};
diff --git a/web/src/locales/tr-TR/globalHeader.ts 
b/web/src/locales/tr-TR/globalHeader.ts
new file mode 100644
index 00000000..dc371f63
--- /dev/null
+++ b/web/src/locales/tr-TR/globalHeader.ts
@@ -0,0 +1,33 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+export default {
+  'component.globalHeader.search': 'Arama',
+  'component.globalHeader.search.example1': 'Arama Örneği 1',
+  'component.globalHeader.search.example2': 'Arama Örneği 2',
+  'component.globalHeader.search.example3': 'Arama Örneği 3',
+  'component.globalHeader.help': 'Yardım',
+  'component.globalHeader.notification': 'Bildirim',
+  'component.globalHeader.notification.empty': 'Bildirim Yok',
+  'component.globalHeader.message': 'Mesaj',
+  'component.globalHeader.message.empty': 'Mesaj Yok',
+  'component.globalHeader.event': 'Olay',
+  'component.globalHeader.event.empty': 'Olay Yok',
+  'component.noticeIcon.clear': 'Temizle',
+  'component.noticeIcon.cleared': 'Temizlendi',
+  'component.noticeIcon.empty': 'Bildirim bulunamadı',
+  'component.noticeIcon.view-more': 'Daha fazla görüntüle',
+};
diff --git a/web/src/locales/tr-TR/menu.ts b/web/src/locales/tr-TR/menu.ts
new file mode 100644
index 00000000..a0bdfec2
--- /dev/null
+++ b/web/src/locales/tr-TR/menu.ts
@@ -0,0 +1,78 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+export default {
+  'menu.more-blocks': 'Daha Fazla Blok',
+  'menu.home': 'Anasayfa',
+  'menu.admin': 'Yönetici',
+  'menu.admin.sub-page': 'Alt Sayfa',
+  'menu.login': 'Giriş Yap',
+  'menu.register': 'Kayıt Ol',
+  'menu.register.result': 'Kayıt Sonucu',
+  'menu.dashboard': 'Kontrol Paneli',
+  'menu.dashboard.analysis': 'Analiz',
+  'menu.dashboard.monitor': 'Monitör',
+  'menu.dashboard.workplace': 'Çalışma Alanı',
+  'menu.exception.403': '403',
+  'menu.exception.404': '404',
+  'menu.exception.500': '500',
+  'menu.form': 'Form',
+  'menu.form.basic-form': 'Temel Form',
+  'menu.form.step-form': 'Adım Form',
+  'menu.form.step-form.info': 'Adım Formu(Transfer bilgisi yazın)',
+  'menu.form.step-form.confirm': 'Adım Formu(Transfer bilgisini onaylayın)',
+  'menu.form.step-form.result': 'Adım Formu(Transfer sonucu)',
+  'menu.form.advanced-form': 'Gelişmiş Form',
+  'menu.list': 'Liste',
+  'menu.list.table-list': 'Tablo Ara',
+  'menu.list.basic-list': 'Temel Liste',
+  'menu.list.card-list': 'Kart Listesi',
+  'menu.list.search-list': 'Arama Listesi',
+  'menu.list.search-list.articles': 'Arama Listesi(Maddeler)',
+  'menu.list.search-list.projects': 'Arama Listesi(Projeler)',
+  'menu.list.search-list.applications': 'Arama Listesi(Uygulamalar)',
+  'menu.profile': 'Profil',
+  'menu.profile.basic': 'Temel Profil',
+  'menu.profile.advanced': 'Gelişmiş Profil',
+  'menu.result': 'Sonuç',
+  'menu.result.success': 'Başarılı',
+  'menu.result.fail': 'Başarısız',
+  'menu.exception': 'Olağandışı durum',
+  'menu.exception.not-permission': '403',
+  'menu.exception.not-find': '404',
+  'menu.exception.server-error': '500',
+  'menu.exception.trigger': 'Harekete Geçir',
+  'menu.account': 'Hesap',
+  'menu.account.center': 'Hesap Merkezi',
+  'menu.account.trigger': 'Harekete Geçirme Hatası',
+  'menu.account.logout': 'Çıkış',
+  'menu.editor': 'Grafik Düzenleyici',
+  'menu.editor.flow': 'Akış Düzenleyici',
+  'menu.editor.mind': 'Bireysel Düzenleyici',
+  'menu.editor.koni': 'Koni Düzenleyici',
+  'menu.routes': 'Yöneltmeler',
+  'menu.pluginTemplate': 'Eklenti Şablonları',
+  'menu.ssl': 'SSL',
+  'menu.upstream': 'Upstream(Yukarı Akış)',
+  'menu.consumer': 'Consumer(Tüketici)',
+  'menu.plugin': 'Eklenti',
+  'menu.service': 'Servisler',
+  'menu.proto': 'Protokol',
+  'menu.setting': 'Ayarlar',
+  'menu.serverinfo': 'Sistem Bilgisi',
+  'menu.advanced-feature': 'Gelişmiş Özellikler',
+  'menu.more': 'Daha Fazla',
+};
diff --git a/web/src/locales/tr-TR/other.ts b/web/src/locales/tr-TR/other.ts
new file mode 100644
index 00000000..7cb72082
--- /dev/null
+++ b/web/src/locales/tr-TR/other.ts
@@ -0,0 +1,19 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+export default {
+  'other.global': 'Global',
+};
diff --git a/web/src/locales/tr-TR/pwa.ts b/web/src/locales/tr-TR/pwa.ts
new file mode 100644
index 00000000..38a2d2b8
--- /dev/null
+++ b/web/src/locales/tr-TR/pwa.ts
@@ -0,0 +1,22 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+export default {
+  'app.pwa.offline': 'Şu anda çevrimdışı moddasınız.',
+  'app.pwa.serviceworker.updated': 'Yeni içerikler kullanılabilir',
+  'app.pwa.serviceworker.updated.hint': 'Sayfayı görüntülemek için Yenile 
butonuna tıklayın.',
+  'app.pwa.serviceworker.updated.ok': 'Yenile',
+};
diff --git a/web/src/locales/tr-TR/setting.ts b/web/src/locales/tr-TR/setting.ts
new file mode 100644
index 00000000..86e90450
--- /dev/null
+++ b/web/src/locales/tr-TR/setting.ts
@@ -0,0 +1,17 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+export default {};
diff --git a/web/src/locales/tr-TR/settingDrawer.ts 
b/web/src/locales/tr-TR/settingDrawer.ts
new file mode 100644
index 00000000..b8526cfc
--- /dev/null
+++ b/web/src/locales/tr-TR/settingDrawer.ts
@@ -0,0 +1,47 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+export default {
+  'app.setting.pagestyle': 'Sayfa Stili',
+  'app.setting.pagestyle.dark': 'Karanlık',
+  'app.setting.pagestyle.light': 'Açık',
+  'app.setting.content-width': 'İçerik genişliği',
+  'app.setting.content-width.fixed': 'Sabit',
+  'app.setting.content-width.fluid': 'Sıcak',
+  'app.setting.themecolor': 'Tema rengi',
+  'app.setting.themecolor.dust': 'Kum',
+  'app.setting.themecolor.volcano': 'Volkan',
+  'app.setting.themecolor.sunset': 'Günbatımı',
+  'app.setting.themecolor.cyan': 'Açık Mavi',
+  'app.setting.themecolor.green': 'Yeşil',
+  'app.setting.themecolor.daybreak': 'Tan Yeri',
+  'app.setting.themecolor.geekblue': 'Gizemli Mavi',
+  'app.setting.themecolor.purple': 'Altın Moru',
+  'app.setting.navigationmode': 'Navigasyon modu',
+  'app.setting.sidemenu': 'Kenar menü',
+  'app.setting.topmenu': 'Üst menü',
+  'app.setting.fixedheader': 'Sabit başlık',
+  'app.setting.fixedsidebar': 'Sabit kenar menü',
+  'app.setting.fixedsidebar.hint': 'Kenar menüyü sabitlemeyi seçin',
+  'app.setting.hideheader': 'Başlığı gizle',
+  'app.setting.hideheader.hint': 'Başlığı gizlemeyi seçin',
+  'app.setting.othersettings': 'Diğer ayarlar',
+  'app.setting.weakmode': 'Zayıf mod',
+  'app.setting.copy': 'Ayarları Kopyala',
+  'app.setting.copyinfo': 'Kopyalama başarılı,Lütfen, defaultSettings 
ayalarını src/models/setting.js da değiştirin',
+  'app.setting.production.hint':
+    'Bu panel, sadece geliştirme modunda görüntülenebilir.',
+};
diff --git a/web/src/pages/Consumer/locales/tr-TR.ts 
b/web/src/pages/Consumer/locales/tr-TR.ts
new file mode 100644
index 00000000..3a5551b3
--- /dev/null
+++ b/web/src/pages/Consumer/locales/tr-TR.ts
@@ -0,0 +1,31 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+export default {
+  'page.consumer.form.itemRuleMessage.username':
+    'Maksimum uzunluk 100dür yalnızca harfler ve sayılar desteklenir.',
+  'page.consumer.form.itemExtraMessage.username': 'Adının tekil olması 
gerekir',
+  'page.consumer.notification.warning.enableAuthenticationPlugin':
+    'Lütfen aşağıdaki kimlik doğrulama eklentisinden en az birini 
etkinleştirin:',
+  'page.consumer.username': 'Ad',
+  'page.consumer.username.required': "Lütfen kullanıcının adını girin",
+  'page.consumer.updateTime': 'Güncelleme Zamanı',
+  'page.consumer.list': 'Kullanıcı Listesi',
+  'page.consumer.description':
+  'Tüketiciler, örneğin geliştiriciler, son kullanıcılar, API çağrıları vb. 
gibi Routesın tüketicileridir. Bir tüketici oluştururken, en az bir Kimlik 
Doğrulama eklentisi bağlamanız gerekir.',
+  'page.consumer.create': 'Kullanıcı Oluştur',
+  'page.consumer.configure': 'Kullanıcı Yapılandır',
+};
diff --git a/web/src/pages/Dashboard/locales/tr-TR.ts 
b/web/src/pages/Dashboard/locales/tr-TR.ts
new file mode 100644
index 00000000..28fa6c30
--- /dev/null
+++ b/web/src/pages/Dashboard/locales/tr-TR.ts
@@ -0,0 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+export default {
+  'page.dashboard.empty.description.grafanaNotConfig': 'Grafanayı 
yapılandımardınız.',
+  'page.dashboard.button.grafanaConfig': 'Yapılandır',
+  'page.dashboard.tip': 'Tarayıcı localStorage\'ında yönetim sayfası URL\'sini 
saklar, yalnızca yerel.',
+};
diff --git a/web/src/pages/Plugin/locales/tr-TR.ts 
b/web/src/pages/Plugin/locales/tr-TR.ts
new file mode 100644
index 00000000..3b38ff2b
--- /dev/null
+++ b/web/src/pages/Plugin/locales/tr-TR.ts
@@ -0,0 +1,22 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+export default {
+  'page.plugin.drawer.popconfirm.title.delete': 'Bunu silmek istediğinizden 
emin misiniz?',
+  'page.plugin.list': 'Eklenti Listesi',
+  'page.plugin.list.enabled': 'Aktif eklentilerin listesi',
+  'page.plugin.market.config': 'Genel Eklenti Listesi',
+};
diff --git a/web/src/pages/Proto/locales/tr-TR.ts 
b/web/src/pages/Proto/locales/tr-TR.ts
new file mode 100644
index 00000000..b9d25e4f
--- /dev/null
+++ b/web/src/pages/Proto/locales/tr-TR.ts
@@ -0,0 +1,40 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+export default {
+  'page.proto.list': 'Proto Listesi',
+  'page.proto.list.description':
+    "Protokol arabellekleri, Google'ın yapılandırılmış verileri seri hale 
getirmek için dilden bağımsız, platformdan bağımsız, genişletilebilir 
mekanizmasıdır. Verilerinizin nasıl yapılandırılmasını istediğinizi bir kez 
tanımlarsınız, ardından yapılandırılmış verilerinizi kolayca yazıp okumak için 
özel oluşturulmuş kaynak kodunu kullanabilirsiniz. çeşitli veri akışları ve 
çeşitli diller kullanır. Protokol arabellekleri listesi, oluşturulan proto 
dosyalarını içerir. grpc kod dönüştürme ek [...]
+  'page.proto.list.edit': 'Proto Düzenle',
+  'page.proto.list.confirm.delete': 'Silmek istediğinizden emin misiniz?',
+  'page.proto.list.confirm': 'Onay',
+  'page.proto.list.cancel': 'İptal',
+  'page.proto.list.delete.successfully': 'Proto başarıyla silindi',
+  'page.proto.list.delete': 'Sil',
+  'page.proto.id.tooltip': ".proto dosya türü",
+
+  'page.proto.desc': 'açıklama',
+  'page.proto.desc.tooltip': ".proto dosya açıklaması",
+
+  'page.proto.content': 'içerik',
+  'page.proto.content.tooltip': ".proto dosya içeriği",
+
+  'page.proto.drawer.create': 'Proto Oluştur',
+  'page.proto.drawer.edit': 'Proto Düzenle',
+  'page.proto.drawer.create.successfully': 'Proto başarıyla oluşturuldu',
+  'page.proto.drawer.edit.successfully': 'Proto başarıyla düzenlendi',
+  'page.proto.drawer.delete.successfully': 'Proto başarıyla silindi',
+};
diff --git a/web/src/pages/Route/locales/tr-TR.ts 
b/web/src/pages/Route/locales/tr-TR.ts
new file mode 100644
index 00000000..e73f2e88
--- /dev/null
+++ b/web/src/pages/Route/locales/tr-TR.ts
@@ -0,0 +1,200 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+export default {
+  'page.route.button.returnList': 'Listeye dön',
+  'page.route.button.send': 'Gönder',
+  'page.route.onlineDebug': 'Çevrimiçi Hata Ayıklama',
+  'page.route.pluginTemplateConfig': 'Eklenti Şablon Yapılandırma',
+
+  'page.route.parameterPosition': 'Parametre konumu',
+  'page.route.httpRequestHeader': 'HTTP isteği başlığı',
+  'page.route.requestParameter': 'İstek parametresi',
+  'page.route.postRequestParameter': 'POST isteği parametresi',
+  'page.route.builtinParameter': 'Dahili parametre',
+  'page.route.parameterName': 'Parametre adı',
+  'page.route.operationalCharacter': 'İşletim karakteri',
+  'page.route.equal': 'Eşit(==)',
+  'page.route.unequal': 'Eşit Değildir(~=)',
+  'page.route.greaterThan': 'Büyüktür(>)',
+  'page.route.lessThan': 'Küçüktür(<)',
+  'page.route.regexMatch': 'Regex eşleşmesi(=~)',
+  'page.route.caseInsensitiveRegexMatch': 'Büyük küçük harf duyarsız regex 
eşleşmesi(=~i)',
+  'page.route.in': 'İçinde(in)',
+  'page.route.has': 'Var(has)',
+  'page.route.reverse': 'Ters(reverse)',
+  'page.route.rule': 'Kural',
+  'page.route.httpHeaderName': 'HTTP isteği başlığı adı',
+  'page.route.service': 'Hizmet',
+  'page.route.instructions': 'Talimatlar',
+  'page.route.import': 'İçe aktar',
+  'page.route.createRoute': 'Yeni yönlendirme oluştur',
+  'page.route.editRoute': 'Yönlendirme düzenle',
+
+  'page.route.input.placeholder.parameterNameHttpHeader': 'Request header adı 
örn :HOST',
+  'page.route.input.placeholder.parameterNameRequestParameter': 'Parameter adı 
örn :userId',
+  'page.route.input.placeholder.requestUrl': 'Geçerli bir Request URL girin',
+  'page.route.input.placeholder.paramKey': 'Param Anahtarı',
+  'page.route.input.placeholder.paramValue': 'Param Değeri',
+  'page.route.input.placeholder.paramType': 'Param Tipi',
+
+  'page.route.form.itemRulesRequiredMessage.parameterName':
+    'Parametre adı gerekli ve geçerli bir değer içermelidir.',
+  'page.route.value': 'Parametre Değeri',
+  'page.route.panelSection.title.advancedMatchRule': 'Gelişmiş Eşleşme Kuralı',
+
+  'page.route.panelSection.title.nameDescription': 'Ad ve Açıklama',
+  'page.route.form.itemRulesPatternMessage.apiNameRule': 'Maksimum 100 
karakter olmalıdır.',
+
+  'page.route.panelSection.title.requestConfigBasicDefine': 'Basit Yönlendirme 
Tanımı',
+  'page.route.form.itemLabel.httpMethod': 'HTTP Methodu',
+  'page.route.form.itemLabel.scheme': 'Şema',
+  'page.route.form.itemLabel.priority': 'Öncelik',
+  'page.route.form.itemLabel.redirect': 'Yönlendirme',
+  'page.route.select.option.enableHttps': 'HTTPS etkinleştir',
+  'page.route.select.option.configCustom': 'Özel yapılandırma',
+  'page.route.select.option.forbidden': 'Yasaklılar',
+  'page.route.form.itemLabel.redirectCustom': 'Özel yönlendirme',
+  'page.route.input.placeholder.redirectCustom': 'Örn: /foo/index.html',
+  'page.route.select.option.redirect301': '301(Kalıcı Yönlendirme)',
+  'page.route.select.option.redirect302': '302(Geçici Yönlendirme)',
+  'page.route.form.itemLabel.username': 'Kullanıcı Adı',
+  'page.route.form.itemLabel.password': 'Parola',
+  'page.route.form.itemLabel.token': 'Token(Jeton)',
+  'page.route.form.itemLabel.apikey': 'Api Anahtarı',
+
+  'page.route.form.itemExtraMessage.domain':
+    'Domain adınızı girin. Örn: www.example.com',
+  'page.route.form.itemRulesPatternMessage.domain':
+    'Domain adı gerekli ve geçerli bir değer içermelidir.',
+  'page.route.form.itemExtraMessage1.path':
+    'Yönlendirme yolunu girin. Örn: /foo/index.html',
+  'page.route.form.itemRulesPatternMessage.remoteAddrs':
+    'Geçerli bir IP adresi girin. örn: 192.168.1.101, 192.168.1.0/24, ::1, 
fe80::1, fe80::1/64',
+  'page.route.form.itemExtraMessage1.remoteAddrs':
+    'Client IP girin, örn: 192.168.1.101, 192.168.1.0/24, ::1, fe80::1, 
fe80::1/64',
+
+  'page.route.httpAction': 'Aksiyon',
+  'page.route.httpOverrideOrCreate': 'Yönlendirme veya Oluştur',
+  'page.route.panelSection.title.httpOverrideRequestHeader': 'Yönlendirme 
İsteği Başlığı',
+  'page.route.status': 'Durum',
+  'page.route.groupName': 'Grup Adı',
+  'page.route.offline': 'Çevrimdışı',
+  'page.route.publish': 'Yayınla',
+  'page.route.published': 'Yayınlandı',
+  'page.route.unpublished': 'Yayınlanmamış',
+
+  'page.route.select.option.inputManually': 'Manuel giriş',
+  'page.route.select.option.methodRewriteNone': 'Yönlendirme yok',
+  'page.route.form.itemLabel.domainNameOrIp': 'Domain adı veya IP',
+  'page.route.form.itemExtraMessage.domainNameOrIp':
+    'Etki Alanı Adını kullanırken, varsayılan olarak yerel: /etc/resolv.conf 
dosyasını analiz eder.',
+  'page.route.portNumber': 'Port Numarası',
+  'page.route.weight': 'Ağırlık',
+  'page.route.radio.staySame': 'Aynısında kal',
+  'page.route.form.itemLabel.newPath': 'Yeni Yol',
+  'page.route.form.itemLabel.newHost': 'Yeni Host',
+  'page.route.form.itemLabel.regex': 'Regex',
+  'page.route.form.itemLabel.template': 'Şablon',
+  'page.route.form.itemLabel.URIRewriteType': 'URI Yönlendirme Tipi',
+  'page.route.form.itemLabel.hostRewriteType': 'Host Yönlendirme Tipi',
+  'page.route.form.itemLabel.methodRewrite': 'Method Yönlendirme',
+  'page.route.form.itemLabel.redirectURI': 'Yönlendirme URI',
+  'page.route.input.placeholder.newPath': 'örn: /foo/bar/index.html',
+
+  'page.route.steps.stepTitle.defineApiRequest': 'API Request tanımla',
+  'page.route.steps.stepTitle.defineApiBackendServe': 'API Backend Server 
tanımla',
+
+  'page.route.popconfirm.title.offline': 'Bu yönlendirmeyi çevrimdışı yapmak 
istediğinize emin misiniz?',
+  'page.route.radio.static': 'Statik',
+  'page.route.radio.regex': 'Regex',
+  'page.route.form.itemLabel.from': 'Kimden',
+  'page.route.form.itemHelp.status':
+    'Bir rota oluşturulduktan sonra kullanılıp kullanılamayacağı, varsayılan 
değer false şeklindedir.',
+
+  'page.route.host': 'İstemci',
+  'page.route.path': 'Yol',
+  'page.route.remoteAddrs': 'Uzak Adresler',
+  'page.route.PanelSection.title.defineRequestParams': 'Request Parametreleri 
Tanımla',
+  'page.route.PanelSection.title.responseResult': 'Response Sonuçları',
+  'page.route.debug.showResultAfterSendRequest': 'Request gönderdikten sonra 
sonuçları göster',
+  'page.route.TabPane.queryParams': 'Query Parametreleri',
+  'page.route.TabPane.bodyParams': 'Body Parametreleri',
+  'page.route.TabPane.headerParams': 'Header Parametreleri',
+  'page.route.TabPane.authentication': 'Kimlik Doğrulama',
+  'page.route.TabPane.response': 'Response',
+  'page.route.TabPane.header': 'Response Header',
+  'page.route.debugWithoutAuth': 'Bu istek herhangi bir yetkilendirme 
kullanmaz.',
+  'page.route.button.exportOpenApi': 'OpenAPI Dışarı Aktar',
+  'page.route.exportRoutesTips': 'Lütfen dışa aktarmak istediğiniz dosyanın 
türünü seçin',
+  'page.route.button.importOpenApi': 'OpenAPI İçeri Aktar',
+  'page.route.button.selectFile': 'Dosya Seç',
+  'page.route.list': 'Rotalar',
+  'page.route.panelSection.title.requestOverride': 'Yönlendirme İsteği',
+  'page.route.form.itemLabel.headerRewrite': 'Header Yönlendirme',
+  'page.route.tooltip.pluginOrchOnlySupportChrome': 'Eklenti düzenlemesi 
yalnızca Chromeu destekler.',
+  'page.route.tooltip.pluginOrchWithoutProxyRewrite':
+    'Adım 1de istek geçersiz kılma yapılandırıldığında eklenti düzenleme modu 
kullanılamaz.',
+  'page.route.tooltip.pluginOrchWithoutRedirect':
+    'HTTPSyi etkinleştirmek için Adım 1de Yeniden Yönlendir seçildiğinde 
eklenti düzenleme modu kullanılamaz.',
+
+  'page.route.tabs.normalMode': 'Normal',
+  'page.route.tabs.orchestration': 'Orkestrasyon',
+
+  'page.route.list.description':
+  'Rota, bir istemci isteği ile bir hizmet arasındaki eşleştirme kurallarını 
tanımlayan bir isteğin giriş noktasıdır. Bir yol bir hizmetle (Hizmet), bir 
yukarı akışla (Upstream) ilişkilendirilebilir, bir hizmet bir dizi rotaya 
karşılık gelebilir ve bir rota bir yukarı akış nesnesine (bir dizi arka uç 
hizmet düğümü) karşılık gelebilir, böylece her istek eşleşir. bir rotaya, ağ 
geçidi tarafından rotaya bağlı yukarı akış hizmetine vekalet edilecektir.',
+  'page.route.configuration.name.rules.required.description': 'Rota adı 
zorunlu bir alandır.',
+  'page.route.configuration.name.placeholder': 'Rota adı girin',
+  'page.route.configuration.desc.tooltip': 'Rota açıklaması girin',
+  'page.route.configuration.publish.tooltip':
+    'Bir rotanın oluşturulduktan hemen sonra ağ geçidine yayınlanıp 
yayınlanmayacağını kontrol etmek için kullanılır',
+  'page.route.configuration.version.placeholder': 'Rota sürümü girin',
+  'page.route.configuration.version.tooltip': 'Rota sürümü şu şekilde 
olabilir: 1.0.0, 1.0.1, 1.0.2',
+  'page.route.configuration.normal-labels.tooltip':
+    'Rota gruplaması için kullanılabilecek rotalara özel etiketler ekleyin.',
+
+  'page.route.configuration.path.rules.required.description':
+    'Lütfen geçerli bir HTTP istek yolu girin',
+  'page.route.configuration.path.placeholder': 'HTTP istek yolu girin',
+  'page.route.configuration.remote_addrs.placeholder': 'İstemci adresi girin',
+  'page.route.configuration.host.placeholder': 'HTTP request hostname girin',
+
+  'page.route.service.none': 'Hiçbiri',
+
+  'page.route.rule.create': 'Kural Oluştur',
+  'page.route.rule.edit': 'Kural Düzenle',
+
+  'page.route.advanced-match.operator.sample.IN': 'Lütfen bir dizi girin, ör. 
["1", "2"]',
+  'page.route.advanced-match.operator.sample.~~': 'Reqular Ex. girin ör 
[a-z]+',
+  'page.route.fields.service_id.invalid': 'Lütfen bağlama hizmetinin 
yapılandırmasını kontrol edin',
+  'page.route.fields.service_id.without-upstream':
+    'Hizmeti bağlamazsanız, Yukarı Akışı ayarlamanız gerekir (Adım 2)',
+  'page.route.advanced-match.tooltip':
+  'İstek üstbilgileri, istek parametreleri ve tanımlama bilgileri aracılığıyla 
rota eşleştirmeyi destekler ve gri tonlamalı yayınlama ve mavi-yeşil test gibi 
senaryolara uygulanabilir.',
+  'page.route.advanced-match.message': 'İpuçları',
+  'page.route.advanced-match.tips.requestParameter': 'İstek Parametresi:İstek 
URLsinin sorgulanması',
+  'page.route.advanced-match.tips.postRequestParameter':
+  'POST İstek Parametresi:Yalnızca x-www-form-urlencoding formunu destekler',
+  'page.route.advanced-match.tips.builtinParameter':
+    'Yerleşik Parametre: Nginx dahili parametreleri destekler',
+
+  'page.route.fields.custom.redirectOption.tooltip': 'Bu yönlendirme eklentisi 
ile ilgilidir',
+  'page.route.fields.service_id.tooltip': 'Yapılandırmalarını yeniden 
kullanmak için Hizmet nesnesini bağlayın.',
+
+  'page.route.fields.vars.invalid': 'Lütfen gelişmiş eşleşme koşulu 
yapılandırmasını kontrol edin',
+  'page.route.fields.vars.in.invalid':
+    'IN operatörünü kullanırken parametre değerlerini dizi formatında girin.',
+};
diff --git a/web/src/pages/SSL/locales/tr-TR.ts 
b/web/src/pages/SSL/locales/tr-TR.ts
new file mode 100644
index 00000000..e6611c63
--- /dev/null
+++ b/web/src/pages/SSL/locales/tr-TR.ts
@@ -0,0 +1,47 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+export default {
+  'page.ssl.form.itemLabel.expireTime': 'Geçerlilik Süresi',
+  'page.ssl.form.itemLabel.cert': 'Sertifika',
+  'page.ssl.form.itemRuleMessage.certValueLength':
+    'Sertifika dosyasının uzunluğu en az 128 karakter olmalıdır',
+  'page.ssl.form.itemLabel.privateKey': 'Özel Anahtar',
+  'page.ssl.form.itemRuleMessage.privateKeyLength':
+    'Özel anahtar dosyasının uzunluğu en az 128 karakter olmalıdır',
+
+  'page.ssl.button.uploadCert': 'Sertifika Yükle',
+
+  'page.ssl.form.itemLabel.way': 'Yöntem',
+  'page.ssl.select.placeholder.selectCreateWays': 'Yöntem seçin',
+  'page.ssl.selectOption.input': 'Giriş',
+  'page.ssl.upload': 'Yükle',
+
+  'page.ssl.notification.updateCertEnableStatusSuccessfully':
+    'Sertifika etkinleştirme durumu başarıyla güncellendi',
+  'page.ssl.list': 'SSL Listesi',
+  'page.ssl.list.expirationTime': 'Sertifika Geçerlilik Süresi',
+  'page.ssl.list.ifEnable': 'Aktif ise',
+  'page.ssl.list.periodOfValidity': 'Geçirlilik Periyodu',
+  'page.ssl.steps.stepTitle.completeCertInfo': 'Sertifika Bilgilerini Tamamla',
+  'component.ssl.removeSSLSuccess': 'Seçilen SSL başarıyla silindi',
+  'component.ssl.removeSSLItemModalContent': 'Bu öğeyi silmek üzeresiniz!',
+
+  'component.ssl.description':
+  'Sertifika, ağ geçidi tarafından SNI ile ilişkilendirilecek ve Rotadaki ana 
bilgisayar adına bağlı olacak şifreli istekleri işlemek için kullanılır.',
+  'component.ssl.fields.cert.required': 'Sertifika gerekli',
+  'component.ssl.fields.key.required': 'Özel anahtar gerekli',
+};
diff --git a/web/src/pages/ServerInfo/locales/tr-TR.ts 
b/web/src/pages/ServerInfo/locales/tr-TR.ts
new file mode 100644
index 00000000..22706071
--- /dev/null
+++ b/web/src/pages/ServerInfo/locales/tr-TR.ts
@@ -0,0 +1,24 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+export default {
+  'page.systemStatus.pageContainer.title': 'Sistem Bilgisi',
+  'page.systemStatus.select.placeholder': 'Lütfen apache apisix düğümü seçin',
+  'page.systemStatus.desc': 'İlgili eklenti sistem bilgisi göstermek için 
etkinleştirilmelidir.',
+  'page.systemStatus.link': 'Nasıl etkinleştirilir?',
+  'page.systemStatus.dashboardInfo': 'Gösterge Paneli',
+  'page.systemStatus.nodeInfo': 'APISIX Düğümleri',
+};
diff --git a/web/src/pages/Service/locales/tr-TR.ts 
b/web/src/pages/Service/locales/tr-TR.ts
new file mode 100644
index 00000000..3d76f4d8
--- /dev/null
+++ b/web/src/pages/Service/locales/tr-TR.ts
@@ -0,0 +1,29 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+export default {
+  'page.service.steps.stepTitle.basicInformation': 'Temel',
+  'page.service.steps.stepTitle.pluginConfig': 'Eklenti',
+  'page.service.steps.stepTitle.preview': 'Önizleme',
+  'page.service.list': 'Hizmet Listesi',
+  'page.service.description':
+  'Bir hizmet, bir rotadaki genel eklenti yapılandırması ve yukarı akış hedef 
bilgilerinin bir kombinasyonundan oluşur. Hizmetler, Yollar ve Yukarı Akışlar 
ile ilişkilidir ve bir hizmet, bir dizi yukarı akış düğümüne karşılık gelebilir 
ve birden çok yolla bağlanabilir.',
+  'page.service.fields.name.required': 'Lütfen hizmet adını girin',
+  'page.service.fields.hosts': 'Hostlar',
+  'page.service.fields.hosts.placeholder': 'Lütfen hizmet hostlarını girin',
+  'page.service.create': 'Hizmet oluştur',
+  'page.service.configure': 'Hizmeti yapılandır',
+};
diff --git a/web/src/pages/Setting/locales/tr-TR.ts 
b/web/src/pages/Setting/locales/tr-TR.ts
new file mode 100644
index 00000000..03d851e0
--- /dev/null
+++ b/web/src/pages/Setting/locales/tr-TR.ts
@@ -0,0 +1,25 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+export default {
+  'page.setting.notification.update.configuration.successfully':
+    'Yapılandırma başarıyla güncellendi',
+  'page.setting.pageContainer.title': 'Ayarlar',
+  'page.setting.form.item.grafanaURL': 'Grafana Adresi',
+  'page.setting.form.item.grafanaURL.inputHelpMessage':
+    'Grafana adresi HTTP veya HTTPS ile başlamalıdır',
+  'page.setting.form.item.grafanaURL.inputErrorMessage': 'Geçersiz adres',
+};
diff --git a/web/src/pages/Upstream/locales/tr-TR.ts 
b/web/src/pages/Upstream/locales/tr-TR.ts
new file mode 100644
index 00000000..a24c8466
--- /dev/null
+++ b/web/src/pages/Upstream/locales/tr-TR.ts
@@ -0,0 +1,120 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+export default {
+  'page.upstream.step.select.upstream': 'Upstream(Yukarı Akış)',
+  'page.upstream.step.select.upstream.select.option': 'Gelişmiş',
+  'page.upstream.step.select.upstream.select.option.serviceSelected':
+    'Özel (Geçerli yapılandırma, bağlı hizmeti geçersiz kılar)',
+  'page.upstream.step.select.upstream.select.none': 'Hiçbiri',
+  'page.upstream.step.backend.server.domain.or.ip': 'Backend Sunucu Host/IP',
+  'page.upstream.form.item-label.node.domain.or.ip': 'Hedef',
+  'page.upstream.step.input.domain.name.or.ip': 'Domain veya IP girin',
+  'page.upstream.step.valid.domain.name.or.ip': 'Geçerli bir domain veya IP 
adresi girin',
+  'page.upstream.step.domain.name.or.ip': 'Hostname veya IP',
+  'page.upstream.step.host': 'Host(istemci)',
+  'page.upstream.step.input.port': 'Port numarası girin',
+  'page.upstream.step.port': 'Port',
+  'page.upstream.step.input.weight': 'Ağırlık girin',
+  'page.upstream.step.weight': 'Ağırlık',
+  'page.upstream.step.create': 'Oluştur',
+  'page.upstream.step.name': 'Ad',
+  'page.upstream.step.name.should.unique': 'Adınız benzersiz olmalıdır',
+  'page.upstream.step.input.upstream.name': 'Upstream adı girin',
+  'page.upstream.step.description': 'Açıklama',
+  'page.upstream.step.input.description': "Upstream için açıklama girin",
+  'page.upstream.step.type': 'Algoritma',
+  'page.upstream.step.pass-host': 'Host adı',
+  'page.upstream.step.pass-host.pass': 'İstemci isteğinden gelen host adını 
bırak',
+  'page.upstream.step.pass-host.node': 'Düğüm Listesinden etki alanını veya 
IPyi kullanın',
+  'page.upstream.step.pass-host.rewrite': 'Gelişmiş Host (Gelecekte 
kullanımdan kaldırılacaktır)',
+  'page.upstream.step.pass-host.upstream_host': 'Gelişmiş Host',
+  'page.upstream.step.connect.timeout': 'Bağlantı zaman aşımı',
+  'page.upstream.step.connect.timeout.desc':
+    'İstekten yukarı akış sunucusuna bağlantı kurarken zaman aşımına uğradı.',
+  'page.upstream.step.input.connect.timeout': 'Bağlantı zaman aşımı girin',
+  'page.upstream.step.send.timeout': 'Gönderme zaman aşımı',
+  'page.upstream.step.send.timeout.desc': 'Yukarı akış sunucularına veri 
göndermek için zaman aşımı',
+  'page.upstream.step.input.send.timeout': 'Zaman aşımı gönnderme girin',
+  'page.upstream.step.read.timeout': 'Okuma zaman aşımı',
+  'page.upstream.step.read.timeout.desc': 'Upstream sunucularının okuma zaman 
aşımı',
+  'page.upstream.step.input.read.timeout': 'Okuma zaman aşımı girin',
+  'page.upstream.step.healthyCheck.healthy.check': 'Sağlık kontrolü',
+  'page.upstream.step.healthyCheck.healthy': 'Sağlıklı',
+  'page.upstream.step.healthyCheck.unhealthy': 'Sağlıksız',
+  'page.upstream.step.healthyCheck.healthy.status': 'Sağlık durumu',
+  'page.upstream.step.healthyCheck.unhealthyStatus': 'Sağlıklı olmama durumu',
+  'page.upstream.step.healthyCheck.active': 'Aktif',
+  'page.upstream.step.healthyCheck.active.timeout': 'Zaman aşımı',
+  'page.upstream.step.input.healthyCheck.active.timeout': 'Zaman aşımı girin',
+  'page.upstream.step.input.healthyCheck.activeInterval': 'Aktif aralığı 
girin',
+  'page.upstream.step.input.healthyCheck.active.req_headers': 'Request header 
girin',
+  'page.upstream.step.healthyCheck.passive': 'Pasif',
+  'page.upstream.step.healthyCheck.passive.http_statuses': 'HTTP durumları',
+  'page.upstream.step.input.healthyCheck.passive.http_statuses': 'HTTP 
durumları girin',
+  'page.upstream.step.healthyCheck.passive.tcp_failures': 'TCP hataları',
+  'page.upstream.step.input.healthyCheck.passive.tcp_failures': 'TCP hataları 
girin',
+  'page.upstream.step.keepalive_pool': 'Keepalive Pool',
+  'page.upstream.notificationMessage.enableHealthCheckFirst': 'Sağlık 
kontrolünü etkinleştirmek için önce bir upstream oluşturun',
+  'page.upstream.upstream_host.required': 'Upstream host gerekli',
+
+  'page.upstream.create': 'Yeni Upstream',
+  'page.upstream.configure': 'Upstream Yapılandırma',
+  'page.upstream.create.upstream.successfully': 'Upstream başarıyla 
oluşturuldu',
+  'page.upstream.edit.upstream.successfully': 'Upstream başarıyla düzenlendi',
+  'page.upstream.create.basic.info': 'Upstream Bilgileri',
+  'page.upstream.create.preview': 'Önizleme',
+
+  'page.upstream.list.id': 'ID',
+  'page.upstream.list.name': 'Ad',
+  'page.upstream.list.type': 'Tip',
+  'page.upstream.list.description': 'Açıklama',
+  'page.upstream.list.edit.time': 'Düzenleme zamanı',
+  'page.upstream.list.operation': 'İşlemler',
+  'page.upstream.list.edit': 'Düzenle',
+  'page.upstream.list.confirm.delete': 'Upstream silmek istediğinize emin 
misiniz?',
+  'page.upstream.list.confirm': 'Onay',
+  'page.upstream.list.cancel': 'İptal',
+  'page.upstream.list.delete.successfully': 'Upstream başarıyla silindi',
+  'page.upstream.list.delete': 'Sil',
+  'page.upstream.list': 'Upstream Listesi',
+  'page.upstream.list.input': 'Lütfen girin',
+  'page.upstream.list.create': 'Yarat',
+
+  'page.upstream.type.roundrobin': 'Round Robin',
+  'page.upstream.type.chash': 'CHash',
+  'page.upstream.type.ewma': 'EWMA',
+  'page.upstream.type.least_conn': 'Least conn',
+
+  'page.upstream.list.content':
+    'Yukarı akış listesi, oluşturulan yukarı akış hizmetlerini (yani arka uç 
hizmetleri) içerir ve yukarı akış hizmetlerinin birden çok hedef düğümünün yük 
dengelemesine ve sağlık denetimine izin verir.',
+
+  'page.upstream.checks.active.timeout.description':
+    'Aktif kontroller için soket zaman aşımı (saniye cinsinden)',
+  'page.upstream.checks.active.unhealthy.interval.description':
+    'Sağlıksız hedefler için kontroller arasındaki aralık (saniye cinsinden)',
+  'page.upstream.checks.passive.healthy.http_statuses.description':
+    'Hangi HTTP durumlarının başarılı olduğu düşünülmeli',
+  'page.upstream.checks.passive.unhealthy.http_statuses.description':
+    'Hangi HTTP durumları bir başarısızlık olarak kabul edilir?',
+  'page.upstream.checks.passive.unhealthy.http_failures.description':
+    'Bir hedefi sağlıksız olarak değerlendirmek için HTTP hatalarının sayısı',
+  'page.upstream.checks.passive.unhealthy.tcp_failures.description':
+    'Bir hedefi sağlıksız olarak değerlendirmek için TCP hatalarının sayısı',
+  'page.upstream.scheme': 'Şema',
+
+  'page.upstream.other.configuration.invalid': 'Lütfen upstream 
yapılandırmasını kontrol edin',
+};
diff --git a/web/src/pages/User/locales/tr-TR.ts 
b/web/src/pages/User/locales/tr-TR.ts
new file mode 100644
index 00000000..355ec72a
--- /dev/null
+++ b/web/src/pages/User/locales/tr-TR.ts
@@ -0,0 +1,31 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+export default {
+  'component.user.login': 'Giriş Yap',
+  'component.user.loginMethodPassword': 'Kullanıcı Adı & Şifre',
+  'component.user.loginMethodPassword.username': 'Kullanıcı Adı',
+  'component.user.loginMethodPassword.password': 'Şifre',
+  'component.user.loginMethodPassword.inputUsername': 'Lütfen kullanıcı adı 
girin',
+  'component.user.loginMethodPassword.inputPassword': 'Lütfen şifre girin',
+  'component.user.loginMethodPassword.incorrectPassword': 'Kullanıcı adı veya 
şifre yanlış',
+  'component.user.loginMethodPassword.fieldInvalid': 'Lütfen kullanıcı adı ve 
şifreyi kontrol edin',
+  'component.user.loginMethodPassword.success': 'Giriş Başarılı',
+  'component.user.loginMethodPassword.changeDefaultAccount': 'Kullanıcı adı ve 
şifreyi değiştirmek nasıl yapılır?',
+  'component.user.loginMethodPassword.modificationMethod':
+    'Lütfen /api/conf/conf.yaml dosyasındaki kullanıcılar alanını değiştirin',
+};

Reply via email to