mirror of
https://git.sanhost.net/sanasol/hytale-f2p
synced 2026-02-26 08:01:46 -03:00
Added internationalization support (i18n) (#74)
* - Implemented i18n. - Updated UI elements to use localized strings for various messages and confirmations. - Added language selection functionality in settings with appropriate event handling. - Created English localization file with translations for all new strings. - Updated backend to save and load user-selected language preferences. * Add Spanish localization for the GUI * Add Portuguese (Brazil) localization for the GUI * update main branch to release/v2.0.2b (#86) * add more linux pkgs, create auto-release and pre-release feature for Github Actions * removed package-lock from gitignore * update .gitignore for local build * add package-lock.json to maintain stability development * update version to 2.0.2b also add deps for rpm and arch * update 2.0.2b: add arm64 support, product and executable name, maintainers; remove snap; * update 2.0.2b: add latest.yml for win & linux, arm64 support; remove snap * fix release build naming * Prepare release v2.0.2b * Update localization for game repair and GPU settings Added new localization entries for game repair and GPU preferences. * Update spanish localization for game repair and GPU settings * Update portuguese (brazil) for game repair and GPU settings * Update localization for system logs in English, Spanish, and Portuguese --------- Co-authored-by: Fazri Gading <fazrigading@gmail.com>
This commit is contained in:
@@ -8,17 +8,55 @@ import './chat.js';
|
||||
import './settings.js';
|
||||
import './logs.js';
|
||||
|
||||
window.closeDiscordNotification = function () {
|
||||
const notification = document.getElementById('discordNotification');
|
||||
if (notification) {
|
||||
notification.classList.add('hidden');
|
||||
setTimeout(() => {
|
||||
notification.style.display = 'none';
|
||||
}, 300);
|
||||
// Initialize i18n immediately (before DOMContentLoaded)
|
||||
let i18nInitialized = false;
|
||||
(async () => {
|
||||
const savedLang = await window.electronAPI?.loadLanguage();
|
||||
await i18n.init(savedLang);
|
||||
i18nInitialized = true;
|
||||
|
||||
// Update language selector if DOM is already loaded
|
||||
if (document.readyState === 'complete' || document.readyState === 'interactive') {
|
||||
updateLanguageSelector();
|
||||
}
|
||||
};
|
||||
})();
|
||||
|
||||
function updateLanguageSelector() {
|
||||
const langSelect = document.getElementById('languageSelect');
|
||||
if (langSelect) {
|
||||
// Clear existing options
|
||||
langSelect.innerHTML = '';
|
||||
|
||||
const languages = i18n.getAvailableLanguages();
|
||||
const currentLang = i18n.getCurrentLanguage();
|
||||
|
||||
languages.forEach(lang => {
|
||||
const option = document.createElement('option');
|
||||
option.value = lang.code;
|
||||
option.textContent = lang.name;
|
||||
if (lang.code === currentLang) {
|
||||
option.selected = true;
|
||||
}
|
||||
langSelect.appendChild(option);
|
||||
});
|
||||
|
||||
// Handle language change (add listener only once)
|
||||
if (!langSelect.hasAttribute('data-listener-added')) {
|
||||
langSelect.addEventListener('change', async (e) => {
|
||||
await i18n.setLanguage(e.target.value);
|
||||
});
|
||||
langSelect.setAttribute('data-listener-added', 'true');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
document.addEventListener('DOMContentLoaded', () => {
|
||||
// Populate language selector (wait for i18n if needed)
|
||||
if (i18nInitialized) {
|
||||
updateLanguageSelector();
|
||||
}
|
||||
|
||||
// Discord notification
|
||||
const notification = document.getElementById('discordNotification');
|
||||
if (notification) {
|
||||
const dismissed = localStorage.getItem('discordNotificationDismissed');
|
||||
@@ -32,8 +70,13 @@ document.addEventListener('DOMContentLoaded', () => {
|
||||
}
|
||||
});
|
||||
|
||||
const originalClose = window.closeDiscordNotification;
|
||||
window.closeDiscordNotification = function () {
|
||||
window.closeDiscordNotification = function() {
|
||||
const notification = document.getElementById('discordNotification');
|
||||
if (notification) {
|
||||
notification.classList.add('hidden');
|
||||
setTimeout(() => {
|
||||
notification.style.display = 'none';
|
||||
}, 300);
|
||||
}
|
||||
localStorage.setItem('discordNotificationDismissed', 'true');
|
||||
originalClose();
|
||||
};
|
||||
Reference in New Issue
Block a user