metalfrom.eu/apps/web/site/locales.js
Nicolas Fryder 6a1b2c3e44 feat: i18n front-end (11 langues), centre de commandes admin, remerciements légaux
- i18n front-end (fr/en/de/es/it/pl/nl/ro/pt/cs/sv) via locales.js + data-i18n attrs
- Sélecteur de langue avec drapeaux dans la topbar, persisté en localStorage
- Mentions légales et FAQ générées dynamiquement par locale (buildLegal/buildFaq)
- Section "Remerciements" : Geoapify, OSM, Leaflet, Metal Archives, HellBlazer
- Admin : centre de commandes (crawler jobs, géocodeur, maintenance, live log tail 10s)
- Admin : boutons reset-errors / requeue-all géocodeur avec confirmation
- Admin : toutes les actions admin loguées dans crawl_log pour audit
- Suppression anciens artefacts (worker, infra/, apps/api/src/index.js)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-01 20:41:41 +02:00

476 lines
38 KiB
JavaScript
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/* locales.js — 11 langues pour Metal from Europe */
(function () {
"use strict";
const H = "font-size:14px;color:rgba(231,226,218,0.95)";
const T = "color:rgba(162,176,194,0.90)";
const A = "color:rgba(198,26,26,0.85);text-decoration:none";
function lk(href, text) {
return `<a href="${href}" target="_blank" rel="noopener noreferrer" style="${A}">${text}</a>`;
}
const L = {
contact: `<a href="mailto:contact@metalfrom.eu" style="${A}">contact@metalfrom.eu</a>`,
ma: lk("https://www.metal-archives.com/", "Metal Archives"),
geoapify: lk("https://www.geoapify.com/", "Geoapify"),
osm: lk("https://www.openstreetmap.org/", "OpenStreetMap"),
leaflet: lk("https://leafletjs.com/", "Leaflet"),
gc: lk("https://www.goatcounter.com/", "GoatCounter"),
};
function lb(title, content) {
return `<div><b style="${H}">${title}</b><br/><span style="${T}">${content}</span></div>`;
}
function faqBlock(q, a) {
return `<div><b style="${H}">${q}</b><br/><span style="${T}">${a}</span></div>`;
}
function buildLegal(d) {
const blocks = [
lb(d.ed_title,
`${d.ed_name}<br/>${d.ed_status}<br/>${d.ed_contact} ${L.contact}`),
lb(d.host_title, d.host_text),
lb(d.ip_title, d.ip_text.replace("__MA__", L.ma)),
lb(d.prv_title, d.prv_text.replace("__GC__", L.gc)),
lb(d.pub_title, d.pub_name),
lb(d.thanks_title,
`${d.thanks_intro}<br/>
&bull; ${d.thanks_map} : ${L.osm} + ${L.leaflet}<br/>
&bull; ${d.thanks_geo} : Powered by ${L.geoapify}<br/>
&bull; ${d.thanks_data} : ${L.ma}<br/>
&bull; ${d.thanks_hb}`),
];
return `<div style="display:flex;flex-direction:column;gap:16px;">${blocks.join("")}</div>`;
}
function buildFaq(d) {
const blocks = d.faq.map(([q, a]) => faqBlock(q, a));
return `<div style="display:flex;flex-direction:column;gap:14px;">${blocks.join("")}</div>`;
}
/* ================================================================
Données par langue
================================================================ */
const RAW = {
fr: {
search_placeholder: "Rechercher (nom, genre, ville, pays)…",
displayed: "affichés", total_bands: "total", localities: "localités", located: "localisés",
view_section: "Vue", reset_view: "Reset vue", heatmap_label: "Heatmap",
filters_section: "Filtres", without_coords_btn: "Sans coords",
country_label: "Pays", all_label: "Tous", status_label: "Statut",
genres_label: "Genres", subgenres_label: "Sous-genres", selection_label: "Sélection",
themes_label: "Thèmes", timeline_label: "Timeline (année de formation)",
sort_label: "Tri de la liste", sort_az: "A → Z", sort_status: "Par statut",
sort_genre: "Par genre", sort_country: "Par pays", sort_year: "Par année (récent → ancien)",
list_section: "Liste", legal_link: "Mentions légales", faq_link: "FAQ",
visits_label: "Visites", this_month_label: "Ce mois", options_btn: "Options", close_btn: "Fermer",
all_years_label: "toutes", year_data_missing: "données manquantes",
year_data_unavailable: "Données dannée indisponibles", results_label: "résultat(s)",
loading_text: "Chargement…", without_coords_modal: "Groupes sans coordonnées",
group_s: "groupe", group_p: "groupes", location_fallback: "Localisation",
legal_title: "Mentions légales", faq_title: "FAQ",
// legal
ed_title: "Éditeur du site", ed_name: "Auteur : Nico", ed_status: "Statut : particulier", ed_contact: "Contact :",
host_title: "Hébergeur", host_text: "OVH SAS 2 rue Kellermann - 59100 Roubaix - France",
ip_title: "Propriété intellectuelle",
ip_text: "Les contenus (textes, visuels, données agrégées) sont proposés à titre informatif. Les logos et noms de groupes restent la propriété de leurs auteurs. Lensemble des données provient du site __MA__, avec lautorisation des webmasters.",
prv_title: "Données personnelles",
prv_text: "Ce site ne collecte pas dinformations personnelles ni ne dépose de cookies de suivi. Des logs techniques peuvent être conservés par lhébergeur. Le trafic est analysé via __GC__ (sans cookie).",
pub_title: "Responsable de publication", pub_name: "Nico",
thanks_title: "Remerciements",
thanks_intro: "Ce site repose sur des outils et services formidables :",
thanks_map: "Cartographie", thanks_geo: "Géocodage", thanks_data: "Données",
thanks_hb: "Remerciements spéciaux à HellBlazer (webmaster Metal Archives) pour lautorisation de scraping.",
faq: [
["Q : Doù viennent les données ?", "R : Metal Archives + enrichissement géographique automatisé. Quelques corrections manuelles, mais cest fastidieux."],
["Q : Puis-je corriger une erreur ?", "R : Oui, si elle concerne le site, contacte-moi via ladresse dans les mentions légales. Pour les données, corrige directement sur Metal Archives."],
["Q : Pourquoi certains groupes ne sont pas visibles ?", "R : Il y a des erreurs inhérentes au géocodage automatique. La correction manuelle des localisations est fastidieuse."],
["Q : Je viens de créer mon groupe sur Metal Archives mais il napparaît pas.", "R : Aucune synchronisation automatique nest implémentée pour linstant."],
["Q : Est-ce que le site me traque ?", "R : Uniquement pour lanalyse de trafic via GoatCounter (sans cookie). Les adblockers bloquent ces appels sans problème."],
],
},
en: {
search_placeholder: "Search (name, genre, city, country)…",
displayed: "displayed", total_bands: "total", localities: "localities", located: "located",
view_section: "View", reset_view: "Reset view", heatmap_label: "Heatmap",
filters_section: "Filters", without_coords_btn: "Without coords",
country_label: "Country", all_label: "All", status_label: "Status",
genres_label: "Genres", subgenres_label: "Subgenres", selection_label: "Selection",
themes_label: "Themes", timeline_label: "Timeline (formation year)",
sort_label: "Sort list", sort_az: "A → Z", sort_status: "By status",
sort_genre: "By genre", sort_country: "By country", sort_year: "By year (recent → oldest)",
list_section: "List", legal_link: "Legal notice", faq_link: "FAQ",
visits_label: "Visits", this_month_label: "This month", options_btn: "Options", close_btn: "Close",
all_years_label: "all", year_data_missing: "data missing",
year_data_unavailable: "Year data unavailable", results_label: "result(s)",
loading_text: "Loading…", without_coords_modal: "Bands without coordinates",
group_s: "band", group_p: "bands", location_fallback: "Location",
legal_title: "Legal notice", faq_title: "FAQ",
ed_title: "Site Editor", ed_name: "Author: Nico", ed_status: "Status: individual", ed_contact: "Contact:",
host_title: "Hosting", host_text: "OVH SAS 2 rue Kellermann - 59100 Roubaix - France",
ip_title: "Intellectual Property",
ip_text: "Content (texts, visuals, aggregated data) is provided for informational purposes. Band logos and names remain the property of their authors. All data originates from __MA__, with the webmasters permission.",
prv_title: "Personal Data",
prv_text: "This site does not collect personal information or set tracking cookies. Technical logs may be kept by the hosting provider. Traffic is analyzed via __GC__ (cookie-free).",
pub_title: "Publication Manager", pub_name: "Nico",
thanks_title: "Acknowledgments",
thanks_intro: "This site relies on outstanding tools and services:",
thanks_map: "Mapping", thanks_geo: "Geocoding", thanks_data: "Data",
thanks_hb: "Special thanks to HellBlazer (Metal Archives webmaster) for granting scraping permission.",
faq: [
["Q: Where does the data come from?", "A: Metal Archives + automated geographic enrichment. Some manual corrections, but its tedious."],
["Q: Can I correct an error?", "A: Yes, for site issues contact me via the email in the legal notice. For data issues, correct directly on Metal Archives."],
["Q: Why are some bands not visible?", "A: Automatic geocoding has inherent errors. Manual correction of locations is tedious, so some data may be inaccurate."],
["Q: I just created my band on Metal Archives but it doesnt appear.", "A: No automatic sync with Metal Archives is currently implemented."],
["Q: Does the site track me?", "A: Only for traffic analysis via GoatCounter (no cookies). Ad blockers block these requests without issue."],
],
},
de: {
search_placeholder: "Suchen (Name, Genre, Stadt, Land)…",
displayed: "angezeigt", total_bands: "gesamt", localities: "Orte", located: "geortet",
view_section: "Ansicht", reset_view: "Ansicht zurücksetzen", heatmap_label: "Heatmap",
filters_section: "Filter", without_coords_btn: "Ohne Koordinaten",
country_label: "Land", all_label: "Alle", status_label: "Status",
genres_label: "Genres", subgenres_label: "Subgenres", selection_label: "Auswahl",
themes_label: "Themen", timeline_label: "Zeitstrahl (Gründungsjahr)",
sort_label: "Liste sortieren", sort_az: "A → Z", sort_status: "Nach Status",
sort_genre: "Nach Genre", sort_country: "Nach Land", sort_year: "Nach Jahr (neueste → älteste)",
list_section: "Liste", legal_link: "Impressum", faq_link: "FAQ",
visits_label: "Besuche", this_month_label: "Diesen Monat", options_btn: "Optionen", close_btn: "Schließen",
all_years_label: "alle", year_data_missing: "Daten fehlen",
year_data_unavailable: "Jahresdaten nicht verfügbar", results_label: "Ergebnis(se)",
loading_text: "Laden…", without_coords_modal: "Bands ohne Koordinaten",
group_s: "Band", group_p: "Bands", location_fallback: "Standort",
legal_title: "Impressum", faq_title: "FAQ",
ed_title: "Websitebetreiber", ed_name: "Autor: Nico", ed_status: "Status: Privatperson", ed_contact: "Kontakt:",
host_title: "Hosting", host_text: "OVH SAS 2 rue Kellermann - 59100 Roubaix - Frankreich",
ip_title: "Geistiges Eigentum",
ip_text: "Inhalte (Texte, Grafiken, aggregierte Daten) dienen informativen Zwecken. Band-Logos und Namen bleiben Eigentum ihrer Urheber. Alle Daten stammen von __MA__, mit Genehmigung der Webmaster.",
prv_title: "Datenschutz",
prv_text: "Diese Website erhebt keine personenbezogenen Daten und setzt keine Tracking-Cookies. Technische Logs können vom Hosting-Anbieter gespeichert werden. Der Datenverkehr wird über __GC__ analysiert (ohne Cookie).",
pub_title: "Verantwortlicher", pub_name: "Nico",
thanks_title: "Danksagungen",
thanks_intro: "Diese Website nutzt herausragende Tools und Dienste:",
thanks_map: "Kartierung", thanks_geo: "Geocodierung", thanks_data: "Daten",
thanks_hb: "Besonderen Dank an HellBlazer (Metal Archives Webmaster) für die Scraping-Genehmigung.",
faq: [
["F: Woher kommen die Daten?", "A: Metal Archives + automatische geografische Anreicherung. Einige manuelle Korrekturen, aber das ist mühsam."],
["F: Kann ich einen Fehler korrigieren?", "A: Ja, bei Website-Problemen kontaktiere mich über die im Impressum angegebene E-Mail. Bei Datenproblemen bitte direkt auf Metal Archives korrigieren."],
["F: Warum sind manche Bands nicht sichtbar?", "A: Das automatische Geocoding ist fehleranfällig. Die manuelle Korrektur von Standorten ist aufwändig."],
["F: Ich habe meine Band auf Metal Archives erstellt, aber sie erscheint nicht.", "A: Derzeit ist keine automatische Synchronisierung mit Metal Archives implementiert."],
["F: Trackt mich die Website?", "A: Nur für Verkehrsanalysen via GoatCounter (ohne Cookie). Werbeblocker blockieren diese Anfragen problemlos."],
],
},
es: {
search_placeholder: "Buscar (nombre, género, ciudad, país)…",
displayed: "mostrados", total_bands: "total", localities: "localidades", located: "localizados",
view_section: "Vista", reset_view: "Restablecer vista", heatmap_label: "Mapa de calor",
filters_section: "Filtros", without_coords_btn: "Sin coordenadas",
country_label: "País", all_label: "Todos", status_label: "Estado",
genres_label: "Géneros", subgenres_label: "Subgéneros", selection_label: "Selección",
themes_label: "Temas", timeline_label: "Línea de tiempo (año de formación)",
sort_label: "Ordenar lista", sort_az: "A → Z", sort_status: "Por estado",
sort_genre: "Por género", sort_country: "Por país", sort_year: "Por año (reciente → antiguo)",
list_section: "Lista", legal_link: "Aviso legal", faq_link: "FAQ",
visits_label: "Visitas", this_month_label: "Este mes", options_btn: "Opciones", close_btn: "Cerrar",
all_years_label: "todos", year_data_missing: "datos no disponibles",
year_data_unavailable: "Datos de año no disponibles", results_label: "resultado(s)",
loading_text: "Cargando…", without_coords_modal: "Grupos sin coordenadas",
group_s: "grupo", group_p: "grupos", location_fallback: "Ubicación",
legal_title: "Aviso legal", faq_title: "FAQ",
ed_title: "Editor del sitio", ed_name: "Autor: Nico", ed_status: "Condición: particular", ed_contact: "Contacto:",
host_title: "Alojamiento", host_text: "OVH SAS 2 rue Kellermann - 59100 Roubaix - Francia",
ip_title: "Propiedad intelectual",
ip_text: "Los contenidos (textos, imágenes, datos agregados) se ofrecen con fines informativos. Los logotipos y nombres de grupos son propiedad de sus autores. Todos los datos provienen de __MA__, con permiso de los administradores.",
prv_title: "Datos personales",
prv_text: "Este sitio no recopila datos personales ni instala cookies de seguimiento. El proveedor de alojamiento puede conservar registros técnicos. El tráfico se analiza mediante __GC__ (sin cookies).",
pub_title: "Responsable de publicación", pub_name: "Nico",
thanks_title: "Agradecimientos",
thanks_intro: "Este sitio utiliza herramientas y servicios excepcionales:",
thanks_map: "Cartografía", thanks_geo: "Geocodificación", thanks_data: "Datos",
thanks_hb: "Agradecimiento especial a HellBlazer (webmaster de Metal Archives) por autorizar el scraping.",
faq: [
["P: ¿De dónde vienen los datos?", "R: Metal Archives + enriquecimiento geográfico automatizado. Algunas correcciones manuales, pero es tedioso."],
["P: ¿Puedo corregir un error?", "R: Sí, si es del sitio contáctame por el correo en el aviso legal. Para datos, corrígelo directamente en Metal Archives."],
["P: ¿Por qué algunos grupos no son visibles?", "R: El geocodificado automático tiene errores inherentes. La corrección manual de ubicaciones es tediosa."],
["P: Acabo de crear mi grupo en Metal Archives pero no aparece.", "R: Actualmente no hay sincronización automática con Metal Archives."],
["P: ¿El sitio me rastrea?", "R: Solo para análisis de tráfico via GoatCounter (sin cookies). Los bloqueadores de anuncios bloquean estas solicitudes sin problema."],
],
},
it: {
search_placeholder: "Cerca (nome, genere, città, paese)…",
displayed: "visualizzati", total_bands: "totale", localities: "località", located: "geolocalizzati",
view_section: "Vista", reset_view: "Reimposta vista", heatmap_label: "Mappa di calore",
filters_section: "Filtri", without_coords_btn: "Senza coordinate",
country_label: "Paese", all_label: "Tutti", status_label: "Stato",
genres_label: "Generi", subgenres_label: "Sottogeneri", selection_label: "Selezione",
themes_label: "Temi", timeline_label: "Timeline (anno di formazione)",
sort_label: "Ordina lista", sort_az: "A → Z", sort_status: "Per stato",
sort_genre: "Per genere", sort_country: "Per paese", sort_year: "Per anno (recente → antico)",
list_section: "Lista", legal_link: "Note legali", faq_link: "FAQ",
visits_label: "Visite", this_month_label: "Questo mese", options_btn: "Opzioni", close_btn: "Chiudi",
all_years_label: "tutti", year_data_missing: "dati mancanti",
year_data_unavailable: "Dati anno non disponibili", results_label: "risultato/i",
loading_text: "Caricamento…", without_coords_modal: "Band senza coordinate",
group_s: "band", group_p: "band", location_fallback: "Posizione",
legal_title: "Note legali", faq_title: "FAQ",
ed_title: "Editore del sito", ed_name: "Autore: Nico", ed_status: "Status: privato", ed_contact: "Contatto:",
host_title: "Hosting", host_text: "OVH SAS 2 rue Kellermann - 59100 Roubaix - Francia",
ip_title: "Proprietà intellettuale",
ip_text: "I contenuti (testi, immagini, dati aggregati) sono forniti a scopo informativo. Loghi e nomi delle band rimangono di proprietà dei rispettivi autori. Tutti i dati provengono da __MA__, con il permesso dei webmaster.",
prv_title: "Dati personali",
prv_text: "Questo sito non raccoglie dati personali né installa cookie di tracciamento. Il fornitore di hosting può conservare log tecnici. Il traffico è analizzato tramite __GC__ (senza cookie).",
pub_title: "Responsabile della pubblicazione", pub_name: "Nico",
thanks_title: "Ringraziamenti",
thanks_intro: "Questo sito si basa su strumenti e servizi eccezionali:",
thanks_map: "Cartografia", thanks_geo: "Geocodifica", thanks_data: "Dati",
thanks_hb: "Un ringraziamento speciale a HellBlazer (webmaster di Metal Archives) per lautorizzazione allo scraping.",
faq: [
["D: Da dove provengono i dati?", "R: Metal Archives + arricchimento geografico automatizzato. Alcune correzioni manuali, ma è laborioso."],
["D: Posso correggere un errore?", "R: Sì, per problemi del sito contattami tramite lemail nelle note legali. Per i dati, correggili direttamente su Metal Archives."],
["D: Perché alcune band non sono visibili?", "R: Il geocodifica automatico ha errori inerenti. La correzione manuale delle posizioni è laboriosa."],
["D: Ho appena creato la mia band su Metal Archives ma non appare.", "R: Al momento non è implementata la sincronizzazione automatica con Metal Archives."],
["D: Il sito mi traccia?", "R: Solo per lanalisi del traffico tramite GoatCounter (senza cookie). I blocchi degli annunci bloccano queste richieste senza problemi."],
],
},
pl: {
search_placeholder: "Szukaj (nazwa, gatunek, miasto, kraj)…",
displayed: "wyświetlono", total_bands: "łącznie", localities: "miejscowości", located: "zlokalizowano",
view_section: "Widok", reset_view: "Resetuj widok", heatmap_label: "Mapa cieplna",
filters_section: "Filtry", without_coords_btn: "Bez współrzędnych",
country_label: "Kraj", all_label: "Wszystkie", status_label: "Status",
genres_label: "Gatunki", subgenres_label: "Podgatunki", selection_label: "Wybór",
themes_label: "Tematy", timeline_label: "Oś czasu (rok założenia)",
sort_label: "Sortuj listę", sort_az: "A → Z", sort_status: "Według statusu",
sort_genre: "Według gatunku", sort_country: "Według kraju", sort_year: "Według roku (najnowsze → najstarsze)",
list_section: "Lista", legal_link: "Informacje prawne", faq_link: "FAQ",
visits_label: "Odwiedziny", this_month_label: "W tym miesiącu", options_btn: "Opcje", close_btn: "Zamknij",
all_years_label: "wszystkie", year_data_missing: "brak danych",
year_data_unavailable: "Dane roku niedostępne", results_label: "wynik(ów)",
loading_text: "Ładowanie…", without_coords_modal: "Zespóły bez współrzędnych",
group_s: "zespół", group_p: "zespóły", location_fallback: "Lokalizacja",
legal_title: "Informacje prawne", faq_title: "FAQ",
ed_title: "Wydawca serwisu", ed_name: "Autor: Nico", ed_status: "Status: osoba prywatna", ed_contact: "Kontakt:",
host_title: "Hosting", host_text: "OVH SAS 2 rue Kellermann - 59100 Roubaix - Francja",
ip_title: "Własność intelektualna",
ip_text: "Treści (teksty, grafiki, zagregowane dane) są udostępniane w celach informacyjnych. Logo i nazwy zespołów pozostają własnością ich autorów. Wszystkie dane pochodzą z __MA__, za zgodą webmasterów.",
prv_title: "Dane osobowe",
prv_text: "Serwis nie zbiera danych osobowych ani nie instaluje plików cookie śledzenia. Dostawca hostingu może przechowywać logi techniczne. Ruch jest analizowany przez __GC__ (bez cookies).",
pub_title: "Redaktor odpowiedzialny", pub_name: "Nico",
thanks_title: "Podziękowania",
thanks_intro: "Serwis korzysta z doskonałych narzędzi i usług:",
thanks_map: "Kartografia", thanks_geo: "Geokodowanie", thanks_data: "Dane",
thanks_hb: "Szczególne podziękowania dla HellBlazera (webmaster Metal Archives) za udzielenie zgody na scraping.",
faq: [
["P: Skąd pochodzą dane?", "O: Metal Archives + zautomatyzowane wzbogacanie geograficzne. Kilka ręcznych poprawek, ale to żmdne."],
["P: Czy mogę poprawić błąd?", "O: Tak, jeśli dotyczy serwisu, skontaktuj się przez e-mail podany w informacjach prawnych. Dla danych, popraw bezpośrednio na Metal Archives."],
["P: Dlaczego niektóre zespóły nie są widoczne?", "O: Automatyczne geokodowanie ma nieodłączne błędy. Ręczna korekta lokalizacji jest żmdna."],
["P: Właśnie założyłem zespół na Metal Archives, ale nie jest widoczny.", "O: Automatyczna synchronizacja z Metal Archives nie jest obecnie zaimplementowana."],
["P: Czy serwis mnie śledzi?", "O: Tylko do analizy ruchu przez GoatCounter (bez cookies). Blokery reklam blokują te żądania bez problemu."],
],
},
nl: {
search_placeholder: "Zoeken (naam, genre, stad, land)…",
displayed: "weergegeven", total_bands: "totaal", localities: "locaties", located: "gelokaliseerd",
view_section: "Weergave", reset_view: "Weergave herstellen", heatmap_label: "Warmtekaart",
filters_section: "Filters", without_coords_btn: "Zonder coördinaten",
country_label: "Land", all_label: "Alle", status_label: "Status",
genres_label: "Genres", subgenres_label: "Subgenres", selection_label: "Selectie",
themes_label: "Themas", timeline_label: "Tijdlijn (oprichtingsjaar)",
sort_label: "Lijst sorteren", sort_az: "A → Z", sort_status: "Op status",
sort_genre: "Op genre", sort_country: "Op land", sort_year: "Op jaar (nieuwste → oudste)",
list_section: "Lijst", legal_link: "Juridische informatie", faq_link: "FAQ",
visits_label: "Bezoeken", this_month_label: "Deze maand", options_btn: "Opties", close_btn: "Sluiten",
all_years_label: "alle", year_data_missing: "gegevens ontbreken",
year_data_unavailable: "Jaargegevens niet beschikbaar", results_label: "resultaat/en",
loading_text: "Laden…", without_coords_modal: "Bands zonder coördinaten",
group_s: "band", group_p: "bands", location_fallback: "Locatie",
legal_title: "Juridische informatie", faq_title: "FAQ",
ed_title: "Sitebeheerder", ed_name: "Auteur: Nico", ed_status: "Status: particulier", ed_contact: "Contact:",
host_title: "Hosting", host_text: "OVH SAS 2 rue Kellermann - 59100 Roubaix - Frankrijk",
ip_title: "Intellectueel eigendom",
ip_text: "Inhoud (teksten, afbeeldingen, geaggregeerde gegevens) wordt aangeboden voor informatieve doeleinden. Logos en bandnamen blijven eigendom van hun auteurs. Alle gegevens zijn afkomstig van __MA__, met toestemming van de webmasters.",
prv_title: "Persoonsgegevens",
prv_text: "Deze site verzamelt geen persoonlijke gegevens en plaatst geen trackingcookies. De hostingprovider kan technische logs bewaren. Verkeer wordt geanalyseerd via __GC__ (zonder cookies).",
pub_title: "Publicatieverantwoordelijke", pub_name: "Nico",
thanks_title: "Met dank aan",
thanks_intro: "Deze site maakt gebruik van uitstekende tools en diensten:",
thanks_map: "Cartografie", thanks_geo: "Geocodering", thanks_data: "Gegevens",
thanks_hb: "Speciale dank aan HellBlazer (webmaster Metal Archives) voor de toestemming tot scraping.",
faq: [
["V: Waar komen de gegevens vandaan?", "A: Metal Archives + geautomatiseerde geografische verrijking. Enkele handmatige correcties, maar dat is vervelend."],
["V: Kan ik een fout corrigeren?", "A: Ja, voor siteproblemen neem contact op via het e-mailadres in de juridische informatie. Voor dataproblemen, corrigeer direct op Metal Archives."],
["V: Waarom zijn sommige bands niet zichtbaar?", "A: Automatisch geocoderen heeft inherente fouten. Handmatige correctie van locaties is vervelend."],
["V: Ik heb mijn band net aangemaakt op Metal Archives maar hij verschijnt niet.", "A: Automatische synchronisatie met Metal Archives is momenteel niet geïmplementeerd."],
["V: Volgt de site mij?", "A: Alleen voor verkeersanalyse via GoatCounter (geen cookies). Adblockers blokkeren deze verzoeken zonder probleem."],
],
},
ro: {
search_placeholder: "Căutare (nume, gen, oraş, țară)…",
displayed: "afişate", total_bands: "total", localities: "localități", located: "localizate",
view_section: "Vedere", reset_view: "Resetare vedere", heatmap_label: "Hartă termică",
filters_section: "Filtre", without_coords_btn: "Fără coordonate",
country_label: "Ţară", all_label: "Toate", status_label: "Stare",
genres_label: "Genuri", subgenres_label: "Subgenuri", selection_label: "Selecție",
themes_label: "Teme", timeline_label: "Cronologie (an de formare)",
sort_label: "Sortare listă", sort_az: "A → Z", sort_status: "După stare",
sort_genre: "După gen", sort_country: "După țară", sort_year: "După an (recent → vechi)",
list_section: "Listă", legal_link: "Mențiuni legale", faq_link: "FAQ",
visits_label: "Vizite", this_month_label: "Luna aceasta", options_btn: "Opțiuni", close_btn: "Închide",
all_years_label: "toți", year_data_missing: "date lipsă",
year_data_unavailable: "Date de an indisponibile", results_label: "rezultat(e)",
loading_text: "Se încarcă…", without_coords_modal: "Trupe fără coordonate",
group_s: "trupă", group_p: "trupe", location_fallback: "Locație",
legal_title: "Mențiuni legale", faq_title: "FAQ",
ed_title: "Editorul site-ului", ed_name: "Autor: Nico", ed_status: "Statut: persoană fizică", ed_contact: "Contact:",
host_title: "Găzduire", host_text: "OVH SAS 2 rue Kellermann - 59100 Roubaix - Franța",
ip_title: "Proprietate intelectuală",
ip_text: "Conținuturile (texte, imagini, date agregate) sunt oferite cu scop informativ. Logo-urile şi numele trupelor rămân proprietatea autorilor lor. Toate datele provin de la __MA__, cu permisiunea administratorilor.",
prv_title: "Date personale",
prv_text: "Acest site nu colectează date personale şi nu instalează cookie-uri de urmărire. Furnizorul de găzduire poate păstra jurnale tehnice. Traficul este analizat prin __GC__ (fără cookie-uri).",
pub_title: "Responsabil publicație", pub_name: "Nico",
thanks_title: "Mulțumiri",
thanks_intro: "Acest site se bazează pe instrumente şi servicii remarcabile:",
thanks_map: "Cartografiere", thanks_geo: "Geocodificare", thanks_data: "Date",
thanks_hb: "Mulțumiri speciale lui HellBlazer (webmaster Metal Archives) pentru permisiunea de scraping.",
faq: [
["Î: De unde provin datele?", "R: Metal Archives + îmbogățire geografică automatizată. Câteva corecții manuale, dar este obositor."],
["Î: Pot corecta o eroare?", "R: Da, dacă priveşte site-ul, contactați-mă prin e-mailul din mențiunile legale. Pentru date, corectare direct pe Metal Archives."],
["Î: De ce unele trupe nu sunt vizibile?", "R: Geocodificarea automată are erori inerente. Corectarea manuală a locațiilor este obositoare."],
["Î: Am creat trupa mea pe Metal Archives dar nu apare.", "R: Momentan nu există sincronizare automată cu Metal Archives."],
["Î: Mă urmăreşte site-ul?", "R: Doar pentru analiza traficului prin GoatCounter (fără cookie-uri). Blocatoarele de reclame blochează aceste solicitări fără probleme."],
],
},
pt: {
search_placeholder: "Pesquisar (nome, género, cidade, país)…",
displayed: "exibidos", total_bands: "total", localities: "localidades", located: "localizados",
view_section: "Vista", reset_view: "Repor vista", heatmap_label: "Mapa de calor",
filters_section: "Filtros", without_coords_btn: "Sem coordenadas",
country_label: "País", all_label: "Todos", status_label: "Estado",
genres_label: "Géneros", subgenres_label: "Subgéneros", selection_label: "Seleção",
themes_label: "Temas", timeline_label: "Linha do tempo (ano de formação)",
sort_label: "Ordenar lista", sort_az: "A → Z", sort_status: "Por estado",
sort_genre: "Por género", sort_country: "Por país", sort_year: "Por ano (recente → antigo)",
list_section: "Lista", legal_link: "Aviso legal", faq_link: "FAQ",
visits_label: "Visitas", this_month_label: "Este mês", options_btn: "Opções", close_btn: "Fechar",
all_years_label: "todos", year_data_missing: "dados em falta",
year_data_unavailable: "Dados de ano indisponíveis", results_label: "resultado(s)",
loading_text: "A carregar…", without_coords_modal: "Bandas sem coordenadas",
group_s: "banda", group_p: "bandas", location_fallback: "Localização",
legal_title: "Aviso legal", faq_title: "FAQ",
ed_title: "Editor do site", ed_name: "Autor: Nico", ed_status: "Estatuto: particular", ed_contact: "Contacto:",
host_title: "Alojamento", host_text: "OVH SAS 2 rue Kellermann - 59100 Roubaix - França",
ip_title: "Propriedade intelectual",
ip_text: "Os conteúdos (textos, imagens, dados agregados) são disponibilizados para fins informativos. Logótipos e nomes de bandas pertencem aos respetivos autores. Todos os dados provêm de __MA__, com autorização dos webmasters.",
prv_title: "Dados pessoais",
prv_text: "Este site não recolhe dados pessoais nem instala cookies de rastreamento. O fornecedor de alojamento pode conservar registos técnicos. O tráfego é analisado via __GC__ (sem cookies).",
pub_title: "Responsável pela publicação", pub_name: "Nico",
thanks_title: "Agradecimentos",
thanks_intro: "Este site baseia-se em ferramentas e serviços excelentes:",
thanks_map: "Cartografia", thanks_geo: "Geocodificação", thanks_data: "Dados",
thanks_hb: "Agradecimento especial ao HellBlazer (webmaster Metal Archives) pela autorização de scraping.",
faq: [
["P: De onde vêm os dados?", "R: Metal Archives + enriquecimento geográfico automatizado. Algumas correções manuais, mas é fastidioso."],
["P: Posso corrigir um erro?", "R: Sim, se for do site contacte-me pelo e-mail no aviso legal. Para dados, corrija diretamente no Metal Archives."],
["P: Porque é que alguns grupos não são visíveis?", "R: A geocodificação automática tem erros inerentes. A correção manual de localizações é fastidiosa."],
["P: Acabei de criar o meu grupo no Metal Archives mas não aparece.", "R: Atualmente não existe sincronização automática com o Metal Archives."],
["P: O site rastreia-me?", "R: Apenas para análise de tráfego via GoatCounter (sem cookies). Os bloqueadores de anúncios bloqueiam estes pedidos sem problema."],
],
},
cs: {
search_placeholder: "Hledat (název, žánr, město, země)…",
displayed: "zobrazeno", total_bands: "celkem", localities: "míst", located: "lokalizováno",
view_section: "Zobrazení", reset_view: "Obnovit zobrazení", heatmap_label: "Tepelná mapa",
filters_section: "Filtry", without_coords_btn: "Bez souřadnic",
country_label: "Země", all_label: "Vše", status_label: "Stav",
genres_label: "Žánry", subgenres_label: "Subžánry", selection_label: "Výběr",
themes_label: "Témata", timeline_label: "Časová osa (rok vzniku)",
sort_label: "Seřadit seznam", sort_az: "A → Z", sort_status: "Podle stavu",
sort_genre: "Podle žánru", sort_country: "Podle země", sort_year: "Podle roku (nejnovější → nejstarší)",
list_section: "Seznam", legal_link: "Právní informace", faq_link: "FAQ",
visits_label: "Návštěvy", this_month_label: "Tento měsíc", options_btn: "Možnosti", close_btn: "Zavřít",
all_years_label: "vše", year_data_missing: "chybějící data",
year_data_unavailable: "Data roku nedostupná", results_label: "výsledek/ků",
loading_text: "Načítání…", without_coords_modal: "Kapely bez souřadnic",
group_s: "kapela", group_p: "kapely", location_fallback: "Poloha",
legal_title: "Právní informace", faq_title: "FAQ",
ed_title: "Provozovatel webu", ed_name: "Autor: Nico", ed_status: "Stav: soukromá osoba", ed_contact: "Kontakt:",
host_title: "Hosting", host_text: "OVH SAS 2 rue Kellermann - 59100 Roubaix - Francie",
ip_title: "Duševní vlastnictví",
ip_text: "Obsah (texty, obrázky, agregovaná data) je poskytován pro informační účely. Loga a názvy kapel zůstávají majetkem jejich autorů. Veškerá data pocházejí z __MA__, se souhlasem webmasterů.",
prv_title: "Osobní údaje",
prv_text: "Tento web neshromažďuje osobní údaje ani neinstaluje sledovací cookies. Poskytovatel hostingu může uchovávat technické záznamy. Provoz je analyzován prostřednictvím __GC__ (bez cookies).",
pub_title: "Odpovědný redaktor", pub_name: "Nico",
thanks_title: "Poděkování",
thanks_intro: "Tento web využívá vynikající nástroje a služby:",
thanks_map: "Kartografie", thanks_geo: "Geokódování", thanks_data: "Data",
thanks_hb: "Zvláštní poděkování HellBlazerovi (webmaster Metal Archives) za povolení scrapingu.",
faq: [
["O: Odkud pocházejí data?", "A: Metal Archives + automatické geografické obohacení. Několik manuálních oprav, ale je to únavné."],
["O: Mohu opravit chybu?", "A: Ano, pokud se týka webu, kontaktujte mě na e-mail v právních informacích. Pro data opravte přímo na Metal Archives."],
["O: Proč některé kapely nejsou viditelné?", "A: Automatické geokódování má inherentní chyby. Ruční oprava polohy je únavná."],
["O: Právě jsem vytvořil kapelu na Metal Archives, ale nezobrazuje se.", "A: Automatická synchronizace s Metal Archives momentálně není implementována."],
["O: Sleduje mě web?", "A: Pouze pro analýzu provozu přes GoatCounter (bez cookies). Blokátory reklam tyto požadavky bez problémů zablokují."],
],
},
sv: {
search_placeholder: "Sök (namn, genre, stad, land)…",
displayed: "visade", total_bands: "totalt", localities: "orter", located: "lokaliserade",
view_section: "Vy", reset_view: "Återställ vy", heatmap_label: "Värmekarta",
filters_section: "Filter", without_coords_btn: "Utan koordinater",
country_label: "Land", all_label: "Alla", status_label: "Status",
genres_label: "Genrer", subgenres_label: "Undergenrer", selection_label: "Val",
themes_label: "Teman", timeline_label: "Tidslinje (grundat år)",
sort_label: "Sortera lista", sort_az: "A → Z", sort_status: "Efter status",
sort_genre: "Efter genre", sort_country: "Efter land", sort_year: "Efter år (nyaste → äldsta)",
list_section: "Lista", legal_link: "Juridisk information", faq_link: "FAQ",
visits_label: "Besök", this_month_label: "Denna månad", options_btn: "Alternativ", close_btn: "Stäng",
all_years_label: "alla", year_data_missing: "data saknas",
year_data_unavailable: "Årsdata ej tillgänglig", results_label: "resultat",
loading_text: "Laddar…", without_coords_modal: "Band utan koordinater",
group_s: "band", group_p: "band", location_fallback: "Plats",
legal_title: "Juridisk information", faq_title: "FAQ",
ed_title: "Webbplatsredaktör", ed_name: "Författare: Nico", ed_status: "Status: privatperson", ed_contact: "Kontakt:",
host_title: "Hosting", host_text: "OVH SAS 2 rue Kellermann - 59100 Roubaix - Frankrike",
ip_title: "Immateriell egendom",
ip_text: "Innehåll (texter, bilder, aggregerade data) tillhandahålls för informationsändamål. Bandlogotyper och namn förblir upphovsrättshavarnas egendom. All data härstämmar från __MA__, med webmasternas tillåtelse.",
prv_title: "Personuppgifter",
prv_text: "Denna webbplats samlar inte in personuppgifter eller installerar spårningscookies. Hostingleverantören kan spara tekniska loggar. Trafiken analyseras via __GC__ (utan cookies).",
pub_title: "Publiceringsansvarig", pub_name: "Nico",
thanks_title: "Tack till",
thanks_intro: "Denna webbplats förlitar sig på utmärkta verktyg och tjänster:",
thanks_map: "Kartografi", thanks_geo: "Geokodning", thanks_data: "Data",
thanks_hb: "Särskilt tack till HellBlazer (webmaster Metal Archives) för tillståndet att scrapa.",
faq: [
["F: Varifån kommer data?", "S: Metal Archives + automatisk geografisk berikning. Några manuella korrigeringar, men det är tråkigt."],
["F: Kan jag korrigera ett fel?", "S: Ja, för sidproblem, kontakta mig via e-postadressen i juridisk information. För dataproblem, korrigera direkt på Metal Archives."],
["F: Varför är vissa band inte synliga?", "S: Automatisk geokodning har inneboënde fel. Manuell korrigering av platser är tråkig."],
["F: Jag skapade just mitt band på Metal Archives men det visas inte.", "S: Ingen automatisk synkronisering med Metal Archives är för närvarande implementerad."],
["F: Spårar webbplatsen mig?", "S: Endast för trafikanalys via GoatCounter (inga cookies). Annonsblockerare blockerar dessa förfrågningar utan problem."],
],
},
};
/* Build LOCALES — add legal_html + faq_html to each entry */
window.LOCALES = {};
for (const [code, d] of Object.entries(RAW)) {
window.LOCALES[code] = Object.assign({}, d, {
legal_html: buildLegal(d),
faq_html: buildFaq(d),
});
}
})();