Files
Oxicloud/static/js/languageSelector.js
T

68 lines
1.9 KiB
JavaScript
Raw Normal View History

2025-03-17 21:28:08 +01:00
/**
* Language Selector Component for OxiCloud
*/
// Language codes and names
const languages = [
{ code: 'en', name: 'English' },
2025-04-14 19:54:34 +08:00
{ code: 'es', name: 'Español' },
{ code: 'zh', name: '中文' }
2025-03-17 21:28:08 +01:00
];
/**
* Creates and initializes a language selector component
* @param {string} containerId - ID of the container element
*/
function createLanguageSelector(containerId = 'language-selector') {
// Get or create container
let container = document.getElementById(containerId);
if (!container) {
console.warn(`Container with ID "${containerId}" not found, creating one.`);
container = document.createElement('div');
container.id = containerId;
document.body.appendChild(container);
}
// Create dropdown
const select = document.createElement('select');
select.className = 'language-select';
select.setAttribute('aria-label', 'Select language');
// Add options
languages.forEach(lang => {
const option = document.createElement('option');
option.value = lang.code;
option.textContent = lang.name;
select.appendChild(option);
});
// Set current language
const currentLocale = window.i18n ? window.i18n.getCurrentLocale() : 'en';
select.value = currentLocale;
// Add change event
select.addEventListener('change', async (e) => {
const locale = e.target.value;
if (window.i18n) {
await window.i18n.setLocale(locale);
}
});
// Add to container
container.innerHTML = '';
container.appendChild(select);
// Add event listener for locale changes
window.addEventListener('localeChanged', (e) => {
select.value = e.detail.locale;
});
return container;
}
// Create language selector when DOM is ready
document.addEventListener('DOMContentLoaded', () => {
// Create language selector
createLanguageSelector();
2025-04-14 19:54:34 +08:00
});