feat(frontend): i18n expansion, admin/profile i18n, grid/list view fix, empty state

- Add 5 new locales (hi, ar, ru, ja, ko) — now 14 total
- Admin panel: 117 i18n keys, confirm modal, animated tabs, no inline handlers
- Profile page: 58 i18n keys with data-i18n attributes
- Fix i18n safeT() shadowing bug and translationsLoaded timing
- Fix grid/list view: list header no longer shows in grid mode on login
- Fix classList.toggle hidden sync for view switching across all nav functions
- Revert .hidden important that broke login page rendering
- Add files empty state (no_files + empty_hint) with translations
- Fix language selector dropdown scroll and styling
- Fix admin panel scroll with sticky tabs
This commit is contained in:
Diocrafts
2026-03-09 00:08:34 +01:00
parent f409a9edd7
commit df336da679
43 changed files with 6645 additions and 2043 deletions
+12 -3
View File
@@ -3,11 +3,20 @@
* Custom styled dropdown with flags
*/
// Locale files that actually exist (have full translations)
// Keep this list in sync when adding new locale JSON files
const AVAILABLE_LOCALES = new Set([
'en', 'es', 'zh', 'fa', 'fr', 'de', 'pt', 'it', 'nl',
'hi', 'ar', 'ru', 'ja', 'ko'
]);
// Language codes, names, and flag emojis
// Uses ALL_LANGUAGES from auth.js if available, otherwise fallback
// Only returns languages that have a real locale file
function getAvailableLanguages() {
if (typeof ALL_LANGUAGES !== 'undefined') {
return ALL_LANGUAGES.map(l => ({ code: l.code, name: l.nativeName, flag: l.flag }));
return ALL_LANGUAGES
.filter(l => AVAILABLE_LOCALES.has(l.code))
.map(l => ({ code: l.code, name: l.nativeName, flag: l.flag }));
}
return [
{ code: 'en', name: 'English', flag: '🇬🇧' },
@@ -23,7 +32,7 @@ function getAvailableLanguages() {
}
// RTL languages
const rtlLanguages = ['fa']; // ['fa', 'ar']
const rtlLanguages = ['fa', 'ar'];
// Update HTML lang attribute and dir for RTL languages
function updateHtmlAttributes(langCode) {