From a797170881cb57f42d899098e9df8520b0344b6e Mon Sep 17 00:00:00 2001
From: queeup <queeup@zoho.com>
Date: Fri, 2 Dec 2022 15:32:49 +0300
Subject: [PATCH] Add Turkish language

---
 api/graphql/models/generated.go               |   4 +-
 api/graphql/schema.graphql                    |   3 +-
 ui/src/Pages/SettingsPage/UserPreferences.tsx |   6 +
 ui/src/__generated__/globalTypes.ts           |   1 +
 .../extractedTranslations/tr/translation.json | 359 ++++++++++++++++++
 ui/src/localization.ts                        |   6 +
 6 files changed, 377 insertions(+), 2 deletions(-)
 create mode 100644 ui/src/extractedTranslations/tr/translation.json

diff --git a/api/graphql/models/generated.go b/api/graphql/models/generated.go
index 23d4744..b7401e8 100644
--- a/api/graphql/models/generated.go
+++ b/api/graphql/models/generated.go
@@ -114,6 +114,7 @@ const (
 	LanguageTranslationSimplifiedChinese  LanguageTranslation = "SimplifiedChinese"
 	LanguageTranslationPortuguese         LanguageTranslation = "Portuguese"
 	LanguageTranslationBasque             LanguageTranslation = "Basque"
+	LanguageTranslationTurkish            LanguageTranslation = "Turkish"
 )
 
 var AllLanguageTranslation = []LanguageTranslation{
@@ -130,11 +131,12 @@ var AllLanguageTranslation = []LanguageTranslation{
 	LanguageTranslationSimplifiedChinese,
 	LanguageTranslationPortuguese,
 	LanguageTranslationBasque,
+	LanguageTranslationTurkish,
 }
 
 func (e LanguageTranslation) IsValid() bool {
 	switch e {
-	case LanguageTranslationEnglish, LanguageTranslationFrench, LanguageTranslationItalian, LanguageTranslationSwedish, LanguageTranslationDanish, LanguageTranslationSpanish, LanguageTranslationPolish, LanguageTranslationGerman, LanguageTranslationRussian, LanguageTranslationTraditionalChinese, LanguageTranslationSimplifiedChinese, LanguageTranslationPortuguese, LanguageTranslationBasque:
+	case LanguageTranslationEnglish, LanguageTranslationFrench, LanguageTranslationItalian, LanguageTranslationSwedish, LanguageTranslationDanish, LanguageTranslationSpanish, LanguageTranslationPolish, LanguageTranslationGerman, LanguageTranslationRussian, LanguageTranslationTraditionalChinese, LanguageTranslationSimplifiedChinese, LanguageTranslationPortuguese, LanguageTranslationBasque, LanguageTranslationTurkish:
 		return true
 	}
 	return false
diff --git a/api/graphql/schema.graphql b/api/graphql/schema.graphql
index 24fd737..2fed2e1 100644
--- a/api/graphql/schema.graphql
+++ b/api/graphql/schema.graphql
@@ -299,7 +299,8 @@ enum LanguageTranslation {
   TraditionalChinese,
   SimplifiedChinese,
   Portuguese,
-  Basque
+  Basque,
+  Turkish
 }
 
 "Preferences for regular users"
diff --git a/ui/src/Pages/SettingsPage/UserPreferences.tsx b/ui/src/Pages/SettingsPage/UserPreferences.tsx
index 6cf6795..2667fd3 100644
--- a/ui/src/Pages/SettingsPage/UserPreferences.tsx
+++ b/ui/src/Pages/SettingsPage/UserPreferences.tsx
@@ -53,6 +53,12 @@ const languagePreferences = [
     flag: 'eu',
     value: LanguageTranslation.Basque,
   },
+  {
+    key: 14,
+    label: 'Türkçe',
+    flag: 'tr',
+    value: LanguageTranslation.Turkish,
+  },
 ]
 
 const themePreferences = (t: TranslationFn) => [
diff --git a/ui/src/__generated__/globalTypes.ts b/ui/src/__generated__/globalTypes.ts
index 89eae65..3019a75 100644
--- a/ui/src/__generated__/globalTypes.ts
+++ b/ui/src/__generated__/globalTypes.ts
@@ -24,6 +24,7 @@ export enum LanguageTranslation {
   Spanish = 'Spanish',
   Swedish = 'Swedish',
   TraditionalChinese = 'TraditionalChinese',
+  Turkish = 'Turkish',
 }
 
 export enum MediaType {
diff --git a/ui/src/extractedTranslations/tr/translation.json b/ui/src/extractedTranslations/tr/translation.json
new file mode 100644
index 0000000..bd342a2
--- /dev/null
+++ b/ui/src/extractedTranslations/tr/translation.json
@@ -0,0 +1,359 @@
+{
+  "album_filter": {
+    "only_favorites": "Sadece favorileri göster",
+    "sort": "Sırala",
+    "sort_by": "Sırala:",
+    "sorting_options": {
+      "date_imported": "Alındığı tarih",
+      "date_shot": "Çekildiği tarih",
+      "title": "Başlık",
+      "type": "Tür"
+    }
+  },
+  "general": {
+    "action": {
+      "add": "Ekle",
+      "cancel": "İptal",
+      "remove": "Kaldır",
+      "save": "Kaydet"
+    },
+    "loading": {
+      "album": "Albüm yükleniyor",
+      "default": "Yükleniyor...",
+      "page": "Sayfa yükleniyor",
+      "paginate": {
+        "faces": "Daha fazla kişi yükleniyor",
+        "media": "Daha fazla medya yükleniyor"
+      },
+      "shares": "Paylaşımlar yükleniyor..."
+    }
+  },
+  "header": {
+    "search": {
+      "loading": "Sonuçlar yükleniyor...",
+      "no_results": "Sonuç bulunamadı",
+      "placeholder": "Ara",
+      "result_type": {
+        "albums": "Albümler",
+        "media": "Medya"
+      }
+    }
+  },
+  "login_page": {
+    "field": {
+      "password": "Parola",
+      "submit": "Oturum aç",
+      "username": "Kullanıcı adı"
+    },
+    "initial_setup": {
+      "field": {
+        "photo_path": {
+          "label": "Fotoğraf yolu",
+          "placeholder": "/path/to/photos"
+        },
+        "submit": "Photoview Kurulumu"
+      },
+      "title": "İlk Kurulum"
+    },
+    "welcome": "Photoview Uygulamasına Hoş Geldiniz"
+  },
+  "meta": {
+    "description": "Kişisel Sunucular için Basit ve Kullanıcı Dostu Fotoğraf Galerisi"
+  },
+  "people_page": {
+    "action_label": {
+      "change_label": "Etiketi değiştir",
+      "detach_images": "Yüzü ayır",
+      "merge_people": "Yüzü birleştir",
+      "move_faces": "Yüzleri taşı"
+    },
+    "face_group": {
+      "label_placeholder": "Etiket",
+      "unlabeled": "Etiketsiz",
+      "unlabeled_person": "Etiketsiz kişi"
+    },
+    "modal": {
+      "action": {
+        "merge": "Birleştir"
+      },
+      "detach_image_faces": {
+        "action": {
+          "detach": "Resimdeki yüzleri ayır",
+          "select_images": "Ayırılacak resimleri seçin"
+        },
+        "description": "Bu yüz grubunun seçili resimlerini ayırın ve bunları yeni bir yüz grubuna taşıyın",
+        "title": "Resimdeki Yüzleri Ayır"
+      },
+      "merge_face_groups": {
+        "description": "Bu yüz grubundaki tüm resimler seçilen yüz grubunda birleştirilecektir.",
+        "destination_table": {
+          "title": "Hedef yüzü seçin"
+        },
+        "title": "Yüz Gruplarını Birleştir"
+      },
+      "move_image_faces": {
+        "description": "Bu yüz grubunun seçili resimlerini başka bir yüz grubuna taşı",
+        "destination_face_group_table": {
+          "move_action": "Resimdeki yüzleri taşı",
+          "title": "Hedef yüz grubunu seçin"
+        },
+        "image_select_table": {
+          "next_action": "Sonraki",
+          "title": "Taşınacak resimleri seçin"
+        },
+        "title": "Resimdeki Yüzleri Taşı"
+      }
+    },
+    "recognize_unlabeled_faces_button": "Etiketlenmemiş yüzleri tanı",
+    "tableselect_face_group": {
+      "search_faces_placeholder": "Yüzlerde ara..."
+    },
+    "tableselect_image_faces": {
+      "search_images_placeholder": "Resimlerde ara..."
+    }
+  },
+  "photos_page": {
+    "title": "Zaman çizelgesi"
+  },
+  "places_page": {
+    "title": "Yerler"
+  },
+  "routes": {
+    "page_not_found": "Sayfa bulunamadı"
+  },
+  "settings": {
+    "concurrent_workers": {
+      "description": "Aynı anda çalışmasına izin verilen tarayıcı işi miktarı",
+      "title": "Eş zamanlı tarayıcı işlemleri"
+    },
+    "logout": "Oturumu kapat",
+    "periodic_scanner": {
+      "checkbox_label": "Düzenli tarayıcıyı etkinleştir",
+      "field": {
+        "description": "Tarayıcının tüm kullanıcılar için otomatik taramaları ne sıklıkla gerçekleştirmesi gerekir",
+        "label": "Düzenli tarama aralığı"
+      },
+      "interval_unit": {
+        "days": "Gün",
+        "hour": "Saat",
+        "minutes": "Dakika",
+        "months": "Ay",
+        "seconds": "Saniye"
+      },
+      "title": "Düzenli tarayıcı"
+    },
+    "scanner": {
+      "description": "Yeni veya güncellenmiş medya için tüm kullanıcıları tarar",
+      "scan_all_users": "Tüm kullanıcıları tara",
+      "title": "Tarayıcı"
+    },
+    "user_preferences": {
+      "change_language": {
+        "description": "Bu kullanıcıya özel web sitesi dilini değiştir",
+        "label": "Web sitesi dili"
+      },
+      "language_selector": {
+        "placeholder": "Dil seç"
+      },
+      "theme": {
+        "auto": {
+          "label": "Sistem ile aynı"
+        },
+        "dark": {
+          "label": "Koyu"
+        },
+        "description": "Web sitesinin görünümünü değiştirin",
+        "light": {
+          "label": "Açık"
+        },
+        "title": "Tema tercihleri"
+      },
+      "title": "Kullanıcı tercihleri"
+    },
+    "users": {
+      "add_user": {
+        "submit": "Kullanıcı ekle"
+      },
+      "confirm_delete_user": {
+        "action": "Sil: {{user}}",
+        "description": "<0>Silmek istediğinize emin misiniz <1></1>?</0><p>Bu işlem geri alınamaz</p>",
+        "title": "Kullanıcı sil"
+      },
+      "password_reset": {
+        "description": "<1>{{username}}</1> için parola değiştir",
+        "form": {
+          "label": "Yeni parola",
+          "placeholder": "parola",
+          "submit": "Parolayı değiştir"
+        },
+        "title": "Parola değiştir"
+      },
+      "table": {
+        "column_names": {
+          "action": "Eylem",
+          "capabilities": "Özellikler",
+          "photo_path": "Fotoğraf yolu",
+          "username": "Kullanıcı adı"
+        },
+        "new_user": "Yeni kullanıcı",
+        "row": {
+          "action": {
+            "change_password": "Parola değiştir",
+            "delete": "Sil",
+            "edit": "Düzenle",
+            "scan": "Tara"
+          }
+        }
+      },
+      "title": "Kullanıcılar"
+    },
+    "version_info": {
+      "build_date_title": "Yapı tarihi",
+      "title": "Photoview Sürümü",
+      "version_title": "Yayın Sürümü"
+    }
+  },
+  "share_page": {
+    "media": {
+      "title": "Paylaşılan medya"
+    },
+    "protected_share": {
+      "description": "Bu paylaşım şifre ile korunmaktadır.",
+      "password_required_error": "Parola gereklidir",
+      "title": "Korumalı paylaşım"
+    },
+    "share_not_found": "Paylaşım bulunamadı",
+    "share_not_found_description": "Paylaşımın süresi dolmuş veya silinmiş olabilir.",
+    "wrong_password": "Yanlış parola, lütfen tekrar deneyin."
+  },
+  "sidebar": {
+    "album": {
+      "album_cover": "Albüm kapağı",
+      "download": {
+        "high-resolutions": {
+          "description": "RAW resimlerin yüksek çözünürlüklü jpeg dosyaları",
+          "title": "Yüksek çözünürlükler"
+        },
+        "originals": {
+          "description": "Orijinal resimler ve videolar",
+          "title": "Orijinaller"
+        },
+        "thumbnails": {
+          "description": "Düşük çözünürlüklü resimler, video yok",
+          "title": "Küçük resimler"
+        },
+        "web-videos": {
+          "description": "Web için optimize edilmiş videolar",
+          "title": "Dönüştürülmüş videolar"
+        }
+      },
+      "reset_cover": "Kapak fotoğrafını sıfırla",
+      "set_cover": "Albüm kapak fotoğrafı olarak ayarla",
+      "title_placeholder": "Albüm başlığı"
+    },
+    "download": {
+      "filesize": {
+        "byte_one": "{{count}} Bayt",
+        "byte_other": "{{count}} Bayt",
+        "giga_byte_one": "{{count}} GB",
+        "giga_byte_other": "{{count}} GB",
+        "kilo_byte_one": "{{count}} KB",
+        "kilo_byte_other": "{{count}} KB",
+        "mega_byte_one": "{{count}} MB",
+        "mega_byte_other": "{{count}} MB",
+        "tera_byte_one": "{{count}} TB",
+        "tera_byte_other": "{{count}} TB"
+      },
+      "table_columns": {
+        "dimensions": "Boyutlar",
+        "file_size": "Boyut",
+        "file_type": "Tür",
+        "name": "Ad"
+      },
+      "title": "İndir"
+    },
+    "location": {
+      "title": "Konum"
+    },
+    "media": {
+      "album_path": "Albüm yolu",
+      "exif": {
+        "exposure_program": {
+          "action_program": "Action program",
+          "aperture_priority": "Diyafram önceliği",
+          "bulb": "Ampul",
+          "creative_program": "Yaratıcı izlence",
+          "landscape_mode": "Manzara modu",
+          "manual": "El ile",
+          "normal_program": "Normal izlence",
+          "not_defined": "Tanımlanmamış",
+          "portrait_mode": "Portre modu",
+          "shutter_priority": "Perde önceliği"
+        },
+        "flash": {
+          "auto": "Otomatik",
+          "did_not_fire": "Patlamadı",
+          "fired": "Patladı",
+          "no_flash": "Flaşsız",
+          "no_flash_function": "Flaş fonksiyonu yok",
+          "off": "Kapalı",
+          "on": "Açık",
+          "red_eye_reduction": "Kırmızı göz önleme",
+          "return_detected": "Dönüş algılandı",
+          "return_not_detected": "Dönüş algılanmadı"
+        },
+        "name": {
+          "aperture": "Diyafram",
+          "camera": "Kamera",
+          "coordinates": "Koordinatlar",
+          "date_shot": "Çekildiği tarih",
+          "exposure": "Pozlandırma",
+          "exposure_program": "Program",
+          "flash": "Flaş",
+          "focal_length": "Odak uzunluğu",
+          "iso": "ISO",
+          "lens": "Lens",
+          "maker": "Üretici"
+        }
+      }
+    },
+    "people": {
+      "action_label": {
+        "detach_image": "Resmi ayır",
+        "merge_face": "Yüzü birleştir",
+        "move_face": "Yüzü taşı"
+      },
+      "confirm_image_detach": "Bu resmi ayırmak istediğinizden emin misiniz?",
+      "title": "Kişiler"
+    },
+    "sharing": {
+      "add_share": "Paylaşımlara ekle",
+      "copy_link": "Bağlantıyı Kopyala",
+      "delete": "Sil",
+      "more": "Diğer",
+      "no_shares_found": "Paylaşım bulunamadı",
+      "public_link": "Genel bağlantı",
+      "title": "Paylaşım seçenekleri"
+    }
+  },
+  "sidemenu": {
+    "albums": "Albümler",
+    "people": "Kişiler",
+    "photos": "Zaman Çizelgesi",
+    "places": "Yerler",
+    "settings": "Ayarlar"
+  },
+  "timeline_filter": {
+    "date": {
+      "dropdown_all": "Bugün",
+      "dropdown_year": "{{year}} ve öncesi",
+      "label": "Tarih"
+    }
+  },
+  "title": {
+    "loading_album": "Albüm yükleniyor",
+    "login": "Oturum Aç",
+    "people": "Kişiler",
+    "settings": "Ayarlar"
+  }
+}
\ No newline at end of file
diff --git a/ui/src/localization.ts b/ui/src/localization.ts
index 35480e0..bb76e30 100644
--- a/ui/src/localization.ts
+++ b/ui/src/localization.ts
@@ -137,6 +137,12 @@ export const loadTranslations = () => {
           i18n.changeLanguage('eu')
         })
         return
+      case LanguageTranslation.Turkish:
+        import('./extractedTranslations/tr/translation.json').then(language => {
+          i18n.addResourceBundle('tr', 'translation', language)
+          i18n.changeLanguage('tr')
+        })
+        return
     }
 
     exhaustiveCheck(language)
