diff --git a/_locales/en/messages.json b/_locales/en/messages.json index 94f23022..71bb7dcf 100644 --- a/_locales/en/messages.json +++ b/_locales/en/messages.json @@ -1,11 +1,14 @@ { - "extName": { - "message": "ScratchTools" - }, - "extDescription": { - "message": "ScratchTools is fully customizable with tons of features, all for making the Scratch website better and easier to use!" - }, - "search": { - "message": "search" - } -} \ No newline at end of file + "extName": { + "message": "ScratchTools" + }, + "extDescription": { + "message": "ScratchTools is fully customizable with tons of features, all for making the Scratch website better and easier to use!" + }, + "search": { + "message": "search" + }, + "feature_load_more_forum_posts_loadmore": { + "message": "Load more" + } +} diff --git a/_locales/es/messages.json b/_locales/es/messages.json index c86a6532..950caa92 100644 --- a/_locales/es/messages.json +++ b/_locales/es/messages.json @@ -8,100 +8,7 @@ "search": { "message": "buscar" }, - "unlisted_projects_title": { - "message": "Proyectos Ocultos" - }, - "unlisted_projects_description": { - "message": "Te permite generar enlaces para compartir proyectos no compartidos desde el editor." - }, - "scroll_project_titles_title": { - "message": "Desplazar Títulos de Proyectos" - }, - "scroll_project_titles_description": { - "message": "Te permite desplazar y ver el título completo de proyectos que no son tuyos." - }, - "search_context_menus_title": { - "message": "Buscar Menús Contextuales" - }, - "search_context_menus_description": { - "message": "Buscar fácilmente menús contextuales para seleccionar más eficiente una opción. También puedes presionar intro para seleccionar la opción superior." - }, - "hover_user_cards_title": { - "message": "Tarjetas Flotantes de Usuarios" - }, - "hover_user_cards_description": { - "message": "Pon el cursor encima de cualquier nombre de usuario en el sitio web para mostrar su foto de perfil, nombre de usuario y contador de seguidores." - }, - "exact_join_date_title": { - "message": "Fecha de Ingreso Exacta" - }, - "exact_join_date_description": { - "message": "Muestra en el perfil del usuario el tiempo exacto en el que se unió." - }, - "start_stop_hotkeys_title": { - "message": "Atajos para Iniciar y Detener Proyectos" - }, - "start_stop_hotkeys_description": { - "message": "Para iniciar y detener un proyecto puedes usar Control+G o Command+G (para usuarios de Mac)." - }, - "upload_img_directly_title": { - "message": "Subir imágenes directamente en los foros" - }, - "upload_img_directly_description": { - "message": "Te permite subir imagenes en los foros de Scratch para publicaciones y firmas sin tener que usar ningún servicio de subida de imágenes de terceros." - }, - "leave_studio_title": { - "message": "Botón de Salir de Estudio" - }, - "leave_studio_description": { - "message": "Añade un botón en la página de curadores de cualquier estudio que estés curando o administrando que te permite salir del estudio fácilmente. Primero se mostrará una confirmación." - }, - "user_stats_title": { - "message": "Mostrar Estadísticas de Usuario" - }, - "user_stats_description": { - "message": "Reemplaza la sección \"Lo que he estado haciendo\" en un página de perfil con las estadísticas del usuario." - }, - "frontpage_curator_title": { - "message": "Nombre de Curador en la Página Principal como Enlace" - }, - "frontpage_curator_description": { - "message": "Hace que el nombre del curador en la página principal sea un enlace clicable a su perfil." - }, - "minimized_remix_credits_title": { - "message": "Créditos por Reinventar Minimizados" - }, - "minimized_remix_credits_description": { - "message": "La caja de créditos por reinventar le quita espacio a las Instrucciones del proyecto, entonces esto hace la caja más pequeña." - }, - "follows_you_title": { - "message": "Mostrar si Te Sigue en Perfil" - }, - "follows_you_description": { - "message": "Si un usuario te está siguiendo, se mostrará al lado de su nombre de usuario cuando visites su perfil." - }, - "custom_studio_title": { - "message": "Sección de Estudio Personalizable" - }, - "custom_studio_description": { - "message": "En la página principal del sitio web de Scratch, los proyectos más nuevos del estudio que elijas se mostrarán arriba de los Proyectos Destacados." - }, - "highlight_unanswered_title": { - "message": "Destacar Temas de Foros Sin Responder" - }, - "highlight_unanswered_description": { - "message": "Destaca con azul los temas de foro que no tienen respuestas." - }, - "hide_project_tags_title": { - "message": "Esconder Etiquetas en Proyectos" - }, - "hide_project_tags_description": { - "message": "Esconde todas las etiquetas con enlaces en las Instrucciones/Notas y Créditos de los proyectos." - }, - "terrible_title": { - "message": "Función Terrible" - }, - "terrible_description": { - "message": "no activar" + "feature_load_more_forum_posts_loadmore": { + "message": "Cargar más" } } diff --git a/extras/background.js b/extras/background.js index f224b647..c2632cc1 100644 --- a/extras/background.js +++ b/extras/background.js @@ -95,55 +95,59 @@ chrome.tabs.onUpdated.addListener(function (tabId, info) { ScratchTools.console.log("STARTING."); var response = await fetch("/features/features.json"); var data = await response.json(); - chrome.scripting.executeScript({ + var uiLanguage = chrome.i18n.getUILanguage() || "en"; + if (uiLanguage.includes("-")) { + uiLanguage = uiLanguage.split("-")[0]; + } + await chrome.scripting.executeScript({ target: { tabId: tabId }, files: [`/api/main.js`], world: "MAIN", }); ScratchTools.console.log("Injected main API."); - chrome.scripting.executeScript({ + await chrome.scripting.executeScript({ target: { tabId: tabId }, files: [`/api/auth.js`], world: "MAIN", }); ScratchTools.console.log("Injected auth API."); - chrome.scripting.executeScript({ + await chrome.scripting.executeScript({ target: { tabId: tabId }, files: [`/api/logging.js`], world: "MAIN", }); ScratchTools.console.log("Injected logging API."); - chrome.scripting.executeScript({ + await chrome.scripting.executeScript({ target: { tabId: tabId }, files: [`/api/vm.js`], world: "MAIN", }); ScratchTools.console.log("Injected Scratch API."); - chrome.scripting.executeScript({ + await chrome.scripting.executeScript({ target: { tabId: tabId }, files: [`/api/cookies.js`], world: "MAIN", }); ScratchTools.console.log("Injected cookies API."); - chrome.scripting.executeScript({ + await chrome.scripting.executeScript({ target: { tabId: tabId }, files: [`/api/getScratch.js`], world: "MAIN", }); ScratchTools.console.log("Injected getScratch API."); - chrome.scripting.executeScript({ + await chrome.scripting.executeScript({ target: { tabId: tabId }, files: [`/api/spaces.js`], world: "MAIN", }); ScratchTools.console.log("Injected protect spaces API."); - chrome.scripting.executeScript({ + await chrome.scripting.executeScript({ target: { tabId: tabId }, files: [`/extras/protect-mention.js`], world: "MAIN", }); ScratchTools.console.log("Injected protect mention script."); - chrome.scripting.executeScript({ + await chrome.scripting.executeScript({ args: [data], target: { tabId: tabId }, func: getFeaturesForAPI, @@ -154,6 +158,32 @@ chrome.tabs.onUpdated.addListener(function (tabId, info) { ScratchTools.Features.data = dataFeatures; } addData(); + var langData = {}; + try { + var langDataFetched = await ( + await fetch(`/_locales/${uiLanguage}/messages.json`) + ).json(); + if (langDataFetched) { + langData = langDataFetched; + } else { + langData = {}; + } + } catch (err) { + langData = {}; + } + chrome.scripting.executeScript({ + args: [langData], + target: { tabId: tabId }, + func: function (langData) { + ScratchTools.languageData = langData; + ScratchTools.i18n = { + getString: function (string, feature) { + return ScratchTools.languageData["feature_"+feature.replaceAll("-", "_")+"_"+string]?.message || null; + }, + }; + }, + world: "MAIN", + }); async function addData() { var allStorage = {}; await data.forEach(async function (el) { @@ -229,7 +259,9 @@ chrome.alarms.onAlarm.addListener(async function () { delayInMinutes: 0.5, periodInMinutes: 0.5, }); - var response = await fetch("https://raw.githubusercontent.com/STForScratch/data/main/disabled.json"); + var response = await fetch( + "https://raw.githubusercontent.com/STForScratch/data/main/disabled.json" + ); var data = await response.json(); await chrome.storage.sync.set({ autoDisabled: data }); var obj = await chrome.storage.sync.get("features"); diff --git a/features/load-more-forum-posts.js b/features/load-more-forum-posts.js index fd0d8d6b..050612aa 100644 --- a/features/load-more-forum-posts.js +++ b/features/load-more-forum-posts.js @@ -13,7 +13,7 @@ if ( let page = Number(params.page || "1"); if (page !== lastPost) { var btn = document.createElement("button"); - btn.textContent = "Load More"; + btn.textContent = ScratchTools.i18n.getString("loadmore", "load-more-forum-posts") || "Load more"; btn.onclick = getNextPage; btn.className = "button scratchtoolsLoadMorePosts"; btn.style.paddingLeft = ".5rem";