diff --git a/GUI/index.html b/GUI/index.html
index fa94706..57a883e 100644
--- a/GUI/index.html
+++ b/GUI/index.html
@@ -602,38 +602,38 @@
-
@@ -785,7 +785,11 @@
@ericiskoolbeans,
@fazrigading
+ class="text-blue-400 hover:text-blue-300 transition-colors">@fazrigading,
+
@Rahul-Sahani04,
+
@xSamiVS
diff --git a/GUI/js/i18n.js b/GUI/js/i18n.js
index 47199a3..faf6847 100644
--- a/GUI/js/i18n.js
+++ b/GUI/js/i18n.js
@@ -4,8 +4,9 @@ const i18n = (() => {
let translations = {};
const availableLanguages = [
{ code: 'en', name: 'English' },
- { code: 'es', name: 'Español' },
- { code: 'pt-BR', name: 'Português (Brasil)' }
+ { code: 'es-ES', name: 'Español (España)' },
+ { code: 'pt-BR', name: 'Portuguese (Brazil)' },
+ { code: 'tr-TR', name: 'Turkish (Turkey)' }
];
// Load single language file
diff --git a/GUI/js/mods.js b/GUI/js/mods.js
index f1eb4a2..0ebda25 100644
--- a/GUI/js/mods.js
+++ b/GUI/js/mods.js
@@ -200,10 +200,15 @@ async function loadBrowseMods() {
browseContainer.innerHTML = `
-
API Key Required
-
CurseForge API key is needed to browse mods
+
API Key Required
+
CurseForge API key is needed to browse mods
`;
+ if (window.i18n) {
+ const container = modsContainer.querySelector('.empty-browse-mods');
+ container.querySelector('h4').textContent = window.i18n.t('mods.apiKeyRequired');
+ container.querySelector('p').textContent = window.i18n.t('mods.apiKeyRequiredDesc');
+ }
return;
}
diff --git a/GUI/locales/en.json b/GUI/locales/en.json
index cb37f84..9fb30f5 100644
--- a/GUI/locales/en.json
+++ b/GUI/locales/en.json
@@ -57,7 +57,9 @@
"noDescription": "No description available",
"confirmDelete": "Are you sure you want to delete \"{name}\"?",
"confirmDeleteDesc": "This action cannot be undone.",
- "confirmDeletion": "Confirm Deletion"
+ "confirmDeletion": "Confirm Deletion",
+ "apiKeyRequired": "API Key Required",
+ "apiKeyRequiredDesc": "CurseForge API key is needed to browse mods"
},
"news": {
"title": "ALL NEWS",
diff --git a/GUI/locales/es.json b/GUI/locales/es-ES.json
similarity index 96%
rename from GUI/locales/es.json
rename to GUI/locales/es-ES.json
index 72f1c13..61c261b 100644
--- a/GUI/locales/es.json
+++ b/GUI/locales/es-ES.json
@@ -14,9 +14,11 @@
"install": {
"title": "LAUNCHER GRATUITO",
"playerName": "Nombre del Jugador",
- "playerNamePlaceholder": "Ingresa tu nombre", "gameBranch": "Versión del Juego",
+ "playerNamePlaceholder": "Ingresa tu nombre",
+ "gameBranch": "Versión del Juego",
"releaseVersion": "Lanzamiento (Estable)",
- "preReleaseVersion": "Pre-Lanzamiento (Experimental)", "customInstallation": "Instalación Personalizada",
+ "preReleaseVersion": "Pre-Lanzamiento (Experimental)",
+ "customInstallation": "Instalación Personalizada",
"installationFolder": "Carpeta de Instalación",
"pathPlaceholder": "Ubicación predeterminada",
"browse": "Examinar",
@@ -55,7 +57,9 @@
"noDescription": "Sin descripción disponible",
"confirmDelete": "¿Estás seguro de que quieres eliminar \"{name}\"?",
"confirmDeleteDesc": "Esta acción no se puede deshacer.",
- "confirmDeletion": "Confirmar eliminación"
+ "confirmDeletion": "Confirmar eliminación",
+ "apiKeyRequired": "Clave API Requerida",
+ "apiKeyRequiredDesc": "Se necesita una clave API de CurseForge para explorar mods"
},
"news": {
"title": "TODAS LAS NOTICIAS",
diff --git a/GUI/locales/pt-BR.json b/GUI/locales/pt-BR.json
index 12e31f7..4f83c55 100644
--- a/GUI/locales/pt-BR.json
+++ b/GUI/locales/pt-BR.json
@@ -55,7 +55,9 @@
"noDescription": "Nenhuma descrição disponível",
"confirmDelete": "Tem certeza de que deseja excluir \"{name}\"?",
"confirmDeleteDesc": "Esta ação não pode ser desfeita.",
- "confirmDeletion": "Confirmar exclusão"
+ "confirmDeletion": "Confirmar exclusão",
+ "apiKeyRequired": "Chave de API Necessária",
+ "apiKeyRequiredDesc": "Chave de API do CurseForge é necessária para procurar mods"
},
"news": {
"title": "TODAS AS NOTÍCIAS",
diff --git a/GUI/locales/tr-TR.json b/GUI/locales/tr-TR.json
new file mode 100644
index 0000000..41d15b9
--- /dev/null
+++ b/GUI/locales/tr-TR.json
@@ -0,0 +1,246 @@
+{
+ "nav": {
+ "play": "Oyna",
+ "mods": "Modlar",
+ "news": "Haberler",
+ "chat": "Oyuncu Sohbeti",
+ "settings": "Ayarlar"
+ },
+ "header": {
+ "playersLabel": "Oyuncular:",
+ "manageProfiles": "Profilleri Yönet",
+ "defaultProfile": "Varsayılan"
+ },
+ "install": {
+ "title": "ÜCRETSİZ OYNA BAŞLATICI",
+ "playerName": "Oyuncu Adı",
+ "playerNamePlaceholder": "Adınızı girin",
+ "gameBranch": "Oyun Sürümü",
+ "releaseVersion": "Yayın (Stabil)",
+ "preReleaseVersion": "Ön-Yayın (Deneysel)",
+ "customInstallation": "Özel Kurulum",
+ "installationFolder": "Kurulum Klasörü",
+ "pathPlaceholder": "Varsayılan konum",
+ "browse": "Gözat",
+ "installButton": "HYTALE KURU",
+ "installing": "KURULUYOR..."
+ },
+ "play": {
+ "ready": "OYNAMAYA HAZIR",
+ "subtitle": "Hytale'i başlat ve maceraya başla",
+ "playButton": "HYTALE'YI OYNA",
+ "latestNews": "SON HABERLER",
+ "viewAll": "HEPSINI GÖR",
+ "checking": "KONTROL EDİLİYOR...",
+ "play": "OYNA"
+ },
+ "mods": {
+ "searchPlaceholder": "Modları ara...",
+ "myMods": "BENİM MODLARIM",
+ "previous": "ÖNCEKİ",
+ "next": "SONRAKİ",
+ "page": "Sayfa",
+ "of": "nın",
+ "modalTitle": "BENİM MODLARIM",
+ "noModsFound": "Mod Bulunamadı",
+ "noModsFoundDesc": "Aramanızı ayarlamayı deneyin",
+ "noModsInstalled": "Hiçbir Mod Kurulu Değil",
+ "noModsInstalledDesc": "CurseForge'dan modlar ekleyin veya yerel dosyalar içe aktarın",
+ "view": "GÖR",
+ "install": "KURU",
+ "installed": "KURULU",
+ "enable": "ETKİNLEŞTİR",
+ "disable": "DEĞİ",
+ "active": "AKTİF",
+ "disabled": "DEĞİ",
+ "delete": "Modı sil",
+ "noDescription": "Açıklama yok",
+ "confirmDelete": "\"{name}\" öğesini silmek istediğinizden emin misiniz?",
+ "confirmDeleteDesc": "Bu işlem geri alınamaz.",
+ "confirmDeletion": "Silmeyi Onayla",
+ "apiKeyRequired": "API Anahtarı Gerekli",
+ "apiKeyRequiredDesc": "Modlara göz atmak için CurseForge API anahtarı gereklidir"
+ },
+ "news": {
+ "title": "TÜM HABERLER",
+ "readMore": "Daha Fazla Oku"
+ },
+ "chat": {
+ "title": "OYUNCU SOHBETI",
+ "pickColor": "Renk",
+ "inputPlaceholder": "Mesajınızı yazın...",
+ "send": "Gönder",
+ "online": "çevrimiçi",
+ "charCounter": "{current}/{max}",
+ "secureChat": "Güvenli sohbet - Bağlantılar sansürlenir",
+ "joinChat": "Sohbete Katıl",
+ "chooseUsername": "Oyuncu Sohbetine katılmak için bir kullanıcı adı seçin",
+ "username": "Kullanıcı Adı",
+ "usernamePlaceholder": "Kullanıcı adınızı girin...",
+ "usernameHint": "3-20 karakter, yalnızca harfler, sayılar, - ve _",
+ "joinButton": "Sohbete Katıl",
+ "colorModal": {
+ "title": "Kullanıcı Adı Rengini Özelleştir",
+ "chooseSolid": "Düz bir renk seçin:",
+ "customColor": "Özel renk:",
+ "preview": "Ön izleme:",
+ "previewUsername": "Kullanıcı Adı",
+ "apply": "Rengi Uygula"
+ }
+ },
+ "settings": {
+ "title": "AYARLAR",
+ "java": "Java Çalışma Zamanı",
+ "useCustomJava": "Özel Java Yolunu Kullan",
+ "javaDescription": "Yüklü Java çalışma zamanını kendi kurulumunuzla geçersiz kılın",
+ "javaPath": "Java Çalıştırılabilir Yolu",
+ "javaPathPlaceholder": "Java yolunu seçin...",
+ "javaBrowse": "Gözat",
+ "javaHint": "Java kurulum klasörünü seçin (Windows, Mac, Linux destekler)",
+ "discord": "Discord Entegrasyonu",
+ "enableRPC": "Discord Rich Presence'ı Etkinleştir",
+ "discordDescription": "Başlatıcı etkinliğinizi Discord'da gösterin",
+ "game": "Oyun Seçenekleri",
+ "playerName": "Oyuncu Adı",
+ "playerNamePlaceholder": "Oyuncu adınızı girin",
+ "playerNameHint": "Bu ad oyun içinde kullanılacak (1-16 karakter)",
+ "openGameLocation": "Oyun Konumunu Aç",
+ "openGameLocationDesc": "Oyun kurulum klasörünü açın",
+ "account": "Oyuncu UUID Yönetimi",
+ "currentUUID": "Geçerli UUID",
+ "uuidPlaceholder": "UUID yükleniyor...",
+ "copyUUID": "UUID'yi Kopyala",
+ "regenerateUUID": "UUID'yi Yeniden Oluştur",
+ "uuidHint": "Bu kullanıcı adı için benzersiz oyuncu tanımlayıcınız",
+ "manageUUIDs": "Tüm UUID'leri Yönet",
+ "manageUUIDsDesc": "Tüm oyuncu UUID'lerini görüntüleyin ve yönetin",
+ "language": "Dil",
+ "selectLanguage": "Dil Seçin",
+ "repairGame": "Oyunu Onarı",
+ "reinstallGame": "Oyun dosyalarını yeniden kur (veri korur)",
+ "gpuPreference": "GPU Tercihi",
+ "gpuHint": "Tercih ettiğiniz GPU'yu seçin (Linux: DRI_PRIME'ı etkiler)",
+ "gpuAuto": "Otomatik",
+ "gpuIntegrated": "Entegre",
+ "gpuDedicated": "Ayrılmış",
+ "logs": "SİSTEM KAYITLARI",
+ "logsCopy": "Kopyala",
+ "logsRefresh": "Yenile",
+ "logsFolder": "Klasörü Aç",
+ "logsLoading": "Loglar yükleniyor...",
+ "closeLauncher": "Başlatıcı Davranışı",
+ "closeOnStart": "Oyun başlatıldığında Başlatıcıyı Kapat",
+ "closeOnStartDescription": "Hytale başlatıldıktan sonra başlatıcıyı otomatik olarak kapatın",
+ "gameBranch": "Oyun Dalı",
+ "branchRelease": "Yayın",
+ "branchPreRelease": "Ön-Yayın",
+ "branchHint": "Stabil yayın ve deneysel ön-yayın sürümleri arasında geçiş yapın",
+ "branchWarning": "Dalı değiştirmek farklı bir oyun sürümünü indirecek ve kuracaktır",
+ "branchSwitching": "{branch} sürümüne geçiliyor...",
+ "branchSwitched": "{branch} sürümüne başarıyla geçildi!",
+ "installRequired": "Kurulum Gerekli",
+ "branchInstallConfirm": "Oyun {branch} dalı için kurulacak. Devam et?"
+ },
+ "uuid": {
+ "modalTitle": "UUID Yönetimi",
+ "currentUserUUID": "Geçerli Kullanıcı UUID",
+ "allPlayerUUIDs": "Tüm Oyuncu UUID'leri",
+ "generateNew": "Yeni UUID Oluştur",
+ "loadingUUIDs": "UUID'ler yükleniyor...",
+ "setCustomUUID": "Özel UUID Ayarla",
+ "customPlaceholder": "Özel UUID girin (format: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)",
+ "setUUID": "UUID Ayarla",
+ "warning": "Uyarı: Özel bir UUID ayarlamak geçerli oyuncu kimliğinizi değiştirecektir",
+ "copyTooltip": "UUID'yi Kopyala",
+ "regenerateTooltip": "Yeni UUID Oluştur"
+ },
+ "profiles": {
+ "modalTitle": "Profilleri Yönet",
+ "newProfilePlaceholder": "Yeni Profil Adı",
+ "createProfile": "Profil Oluştur"
+ },
+ "discord": {
+ "notificationText": "Discord topluluğumuza katılın!",
+ "joinButton": "Discord'a Katıl"
+ },
+ "common": {
+ "confirm": "Onayla",
+ "cancel": "İptal",
+ "save": "Kaydet",
+ "close": "Kapat",
+ "delete": "Sil",
+ "edit": "Düzenle",
+ "loading": "Yükleniyor...",
+ "apply": "Uygula",
+ "install": "Kur"
+ },
+ "notifications": {
+ "gameDataNotFound": "Hata: Oyun verileri bulunamadı",
+ "gameUpdatedSuccess": "Oyun başarıyla güncellendi! 🎉",
+ "updateFailed": "Güncelleme başarısız: {error}",
+ "updateError": "Güncelleme hatası: {error}",
+ "discordEnabled": "Discord Rich Presence etkinleştirildi",
+ "discordDisabled": "Discord Rich Presence devre dışı bırakıldı",
+ "discordSaveFailed": "Discord ayarı kaydedilemedi",
+ "playerNameRequired": "Lütfen geçerli bir oyuncu adı girin",
+ "playerNameSaved": "Oyuncu adı başarıyla kaydedildi",
+ "playerNameSaveFailed": "Oyuncu adı kaydedilemedi",
+ "uuidCopied": "UUID panoya kopyalandı!",
+ "uuidCopyFailed": "UUID kopyalanamadı",
+ "uuidRegenNotAvailable": "UUID yeniden oluşturma kullanılamıyor",
+ "uuidRegenFailed": "UUID yeniden oluşturulamadı",
+ "uuidGenerated": "Yeni UUID başarıyla oluşturuldu!",
+ "uuidGeneratedShort": "Yeni UUID oluşturuldu!",
+ "uuidGenerateFailed": "Yeni UUID oluşturulamadı",
+ "uuidRequired": "Lütfen bir UUID girin",
+ "uuidInvalidFormat": "Geçersiz UUID formatı",
+ "uuidSetFailed": "Özel UUID ayarlanamadı",
+ "uuidSetSuccess": "Özel UUID başarıyla ayarlandı!",
+ "uuidDeleteFailed": "UUID silinemedi",
+ "uuidDeleteSuccess": "UUID başarıyla silindi!",
+ "modsDownloading": "{name} indiriliyor...",
+ "modsTogglingMod": "Mod değiştiriliyor...",
+ "modsDeletingMod": "Mod siliniyor...",
+ "modsLoadingMods": "CurseForge'dan modlar yükleniyor...",
+ "modsInstalledSuccess": "{name} başarıyla kuruldu! 🎉",
+ "modsDeletedSuccess": "{name} başarıyla silindi",
+ "modsDownloadFailed": "Mod indirilemedi: {error}",
+ "modsToggleFailed": "Mod değiştirilemedi: {error}",
+ "modsDeleteFailed": "Mod silinemedi: {error}",
+ "modsModNotFound": "Mod bilgileri bulunamadı"
+ },
+ "confirm": {
+ "defaultTitle": "Eylemi onayla",
+ "regenerateUuidTitle": "Yeni UUID oluştur",
+ "regenerateUuidMessage": "Yeni bir UUID oluşturmak istediğinizden emin misiniz? Bu oyuncu kimliğinizi değiştirecektir.",
+ "regenerateUuidButton": "Oluştur",
+ "setCustomUuidTitle": "Özel UUID ayarla",
+ "setCustomUuidMessage": "Bu özel UUID'yi ayarlamak istediğinizden emin misiniz? Bu oyuncu kimliğinizi değiştirecektir.",
+ "setCustomUuidButton": "UUID Ayarla",
+ "deleteUuidTitle": "UUID'yi sil",
+ "deleteUuidMessage": "\"{username}\" için UUID'yi silmek istediğinizden emin misiniz? Bu işlem geri alınamaz.",
+ "deleteUuidButton": "Sil",
+ "uninstallGameTitle": "Oyunu kaldır",
+ "uninstallGameMessage": "Hytale'yi kaldırmak istediğinizden emin misiniz? Tüm oyun dosyaları silinecektir.",
+ "uninstallGameButton": "Kaldır"
+ },
+ "progress": {
+ "initializing": "Başlatılıyor...",
+ "downloading": "İndiriliyor...",
+ "installing": "Kuruluyur...",
+ "extracting": "Ayıklanıyor...",
+ "verifying": "Doğrulanıyor...",
+ "switchingProfile": "Profil değiştiriliyor...",
+ "profileSwitched": "Profil değiştirildi!",
+ "startingGame": "Oyun başlatılıyor...",
+ "launching": "BAŞLATILIYOR...",
+ "uninstallingGame": "Oyun kaldırılıyor...",
+ "gameUninstalled": "Oyun başarıyla kaldırıldı!",
+ "uninstallFailed": "Kaldırma başarısız: {error}",
+ "startingUpdate": "Zorunlu oyun güncellemesi başlatılıyor...",
+ "installationComplete": "Kurulum başarıyla tamamlandı!",
+ "installationFailed": "Kurulum başarısız: {error}",
+ "installingGameFiles": "Oyun dosyaları kuruluyor...",
+ "installComplete": "Kurulum tamamlandı!"
+ }
+}