0

There is a free wargame army builder in English that I want to make available for Spanish talking communities, so I want people can see the content in Spanish, automatic translation is not reliable enough for translating rules because you can't use synonyms, 've tried the following But I'd like to know what is wrong because it doesn't work.

Help me please, thank you. The code is the following

translations.json, database with terms.

{
  "Shark Club": "Garrote de tiburón",
  "Fireball": "Bola de fuego",
  "Health Potion": "Poción de salud",
  "Hero": "Héroe", 
  "Tough": "Resistente",
  "Predator": "Depredador"
}

manifest.json

{
    "manifest_version": 3,
    "name": "Traductor de páginas web",
    "version": "1.0",
    "description": "Esta extensión traduce las páginas web al español usando una base de datos propia",
    "content_scripts": [
      {
        "matches": ["<all_urls>"],
        "js": ["content.js"]
      }
    ],
    "permissions": ["activeTab"]
  }

content.js

// content.js
// Este archivo se ejecuta en el contexto de la página web y reemplaza el texto con las traducciones

// Esta función carga el archivo JSON con la base de datos de las traducciones
function loadTranslations() {
  // Usa la función fetch para obtener el contenido del archivo JSON
  fetch("translations.json")
    .then(response => response.json()) // Convierte la respuesta en un objeto JSON
    .then(data => translateText(data)) // Llama a la función translateText con el objeto JSON como argumento
    .catch(error => console.error(error)); // Muestra un error si hay algún problema
}

// Esta función reemplaza el texto de la página web con las traducciones del objeto JSON
function translateText(data) {
  // Obtiene todos los elementos de texto de la página web
  let textElements = document.querySelectorAll("p, h1, h2, h3, h4, h5, h6, span, a, li, button");
  // Recorre cada elemento de texto
  for (let element of textElements) {
    // Obtiene el texto original del elemento
    let originalText = element.textContent;
    // Recorre cada propiedad del objeto JSON
    for (let key in data) {
      // Crea una expresión regular con la propiedad (que es la palabra o frase en inglés)
      let regex = new RegExp(key, "g");
      // Si el texto original coincide con la expresión regular
      if (regex.test(originalText)) {
        // Reemplaza la expresión regular por el valor (que es la traducción en español)
        let translatedText = originalText.replace(regex, data[key]);
        // Asigna el texto traducido al elemento
        element.textContent = translatedText;
      }
    }
  }
}

// Llama a la función loadTranslations cuando se carga la página web
window.addEventListener("load", loadTranslations);
Infoholico
  • 17
  • 5
  • 1
    Please post a [mcve] of your attempt, noting input and expected output using the [\[<>\]](https://meta.stackoverflow.com/questions/358992/ive-been-told-to-create-a-runnable-example-with-stack-snippets-how-do-i-do) snippet editor. – mplungjan Aug 07 '23 at 07:24

0 Answers0