Update Spanish locale, add missing CurseForge API Key translation, implement Turkish translation, and fix contributor links comma. (#135)

* Update Spanish locale and add missing CurseForge API Key translation

- Updated the Spanish locale name to distinguish between multiple locale types.
- Added missing translation for the page indicating the missing CurseForge API Key.

* Implemented Turkish locale support

* Add Turkish locale to available languages

* Add missing comma in contributor links

* Correct Portuguese language name in available languages

---------

Co-authored-by: Fazri Gading <fazrigading@gmail.com>
This commit is contained in:
xSamiVS
2026-01-24 23:01:42 +01:00
committed by GitHub
parent f974d9c767
commit 127c38f98b
7 changed files with 306 additions and 42 deletions

View File

@@ -602,38 +602,38 @@
</div>
</div>
<div id="progressOverlay" class="progress-overlay" style="display: none;">
<div class="progress-content">
<div class="progress-info">
<span id="progressText" data-i18n="progress.initializing">Initializing...</span>
<span id="progressPercent">0%</span>
</div>
<div class="progress-bar-container">
<div id="progressBarFill" class="progress-bar-fill"></div>
</div>
<div class="progress-details">
<span id="progressSpeed"></span>
<span id="progressSize"></span>
</div>
<div id="progressErrorContainer" class="progress-error-container" style="display: none;">
<div id="progressErrorMessage" class="progress-error-message"></div>
<div class="progress-retry-section">
<span id="progressRetryInfo" class="progress-retry-info"></span>
<div class="progress-retry-buttons">
<button id="progressJRRetryBtn" class="progress-retry-btn" style="display: none;">
Retry Java Download
</button>
<button id="progressPWRRetryBtn" class="progress-retry-btn" style="display: none;">
Retry Game Download
</button>
<button id="progressRetryBtn" class="progress-retry-btn" style="display: none;">
Retry Download
</button>
</div>
</div>
</div>
</div>
</div>
<div id="progressOverlay" class="progress-overlay" style="display: none;">
<div class="progress-content">
<div class="progress-info">
<span id="progressText" data-i18n="progress.initializing">Initializing...</span>
<span id="progressPercent">0%</span>
</div>
<div class="progress-bar-container">
<div id="progressBarFill" class="progress-bar-fill"></div>
</div>
<div class="progress-details">
<span id="progressSpeed"></span>
<span id="progressSize"></span>
</div>
<div id="progressErrorContainer" class="progress-error-container" style="display: none;">
<div id="progressErrorMessage" class="progress-error-message"></div>
<div class="progress-retry-section">
<span id="progressRetryInfo" class="progress-retry-info"></span>
<div class="progress-retry-buttons">
<button id="progressJRRetryBtn" class="progress-retry-btn" style="display: none;">
Retry Java Download
</button>
<button id="progressPWRRetryBtn" class="progress-retry-btn" style="display: none;">
Retry Game Download
</button>
<button id="progressRetryBtn" class="progress-retry-btn" style="display: none;">
Retry Download
</button>
</div>
</div>
</div>
</div>
</div>
<div id="chatUsernameModal" class="chat-username-modal" style="display: none;">
<div class="chat-username-modal-content">
@@ -785,7 +785,11 @@
<a href="https://github.com/ericiskoolbeans" target="_blank"
class="text-blue-400 hover:text-blue-300 transition-colors">@ericiskoolbeans</a>,
<a href="https://github.com/fazrigading" target="_blank"
class="text-blue-400 hover:text-blue-300 transition-colors">@fazrigading</a>
class="text-blue-400 hover:text-blue-300 transition-colors">@fazrigading</a>,
<a href="https://github.com/Rahul-Sahani04" target="_blank"
class="text-blue-400 hover:text-blue-300 transition-colors">@Rahul-Sahani04</a>,
<a href="https://github.com/xSamiVS" target="_blank"
class="text-blue-400 hover:text-blue-300 transition-colors">@xSamiVS</a>
</span>
</div>
</footer>

View File

@@ -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

View File

@@ -200,10 +200,15 @@ async function loadBrowseMods() {
browseContainer.innerHTML = `
<div class=\"empty-browse-mods\">
<i class=\"fas fa-key\"></i>
<h4>API Key Required</h4>
<p>CurseForge API key is needed to browse mods</p>
<h4 data-i18n="mods.apiKeyRequired">API Key Required</h4>
<p data-i18n="mods.apiKeyRequiredDesc">CurseForge API key is needed to browse mods</p>
</div>
`;
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;
}

View File

@@ -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",

View File

@@ -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",

View File

@@ -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",

246
GUI/locales/tr-TR.json Normal file
View File

@@ -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ı!"
}
}