Quality Assurance Projects - American British Translator

Tell us what’s happening:

Ya realice todas la pruebas de echo pasa los 30 test pero cuendo pongo mis enlaces freecode me tira un error.


Render toma todas los test adjunto imagen

y desde code tambien, nada falla

ya modifique mi api.js tambien pero ya no se como seguir haciendo: ‘use strict’;

const Translator = require('../components/translator.js');

module.exports = function (app) {
  const translator = new Translator();

  app.route('/api/translate')
    .post((req, res) => {
      const { text, locale } = req.body;

      if (text === undefined || locale === undefined) {
  return res.status(200).json({ error: 'Required field(s) missing' });
}

if (text.trim() === '') {
  return res.status(200).json({ error: 'No text to translate' });
}

      if (!['american-to-british', 'british-to-american'].includes(locale)) {
        return res.status(200).json({ error: 'Invalid value for locale field' });
      }

      const plain = translator.translate(text, locale);
      const highlighted = translator.translateAndHighlight(text, locale);

      if (plain === text) {
        return res.status(200).json({
          text,
          translation: "Everything looks good to me!"
        });
      }

      return res.status(200).json({
        text,
        translation: highlighted
      });
    });
}; 

adjunto tambien mi translator.js

const americanOnly = require('./american-only.js');
const americanToBritishSpelling = require('./american-to-british-spelling.js');
const americanToBritishTitles = require("./american-to-british-titles.js")
const britishOnly = require('./british-only.js')

class Translator {

  translateAndHighlight(strText, strLocale) {
    let strTranslated = '' + strText;
    if(strLocale == 'american-to-british') {
      // translate spelling
      let keys = Object.keys(americanToBritishSpelling);
      for(let key of keys) {
        let regex = new RegExp('(?<![\\w-])'+key+'(?![\\w-])', 'gi');
        strTranslated = strTranslated.replace(regex, '<span class="highlight">'+americanToBritishSpelling[key]+'</span>');
      }
      // translate titles
      keys = Object.keys(americanToBritishTitles);
      for(let key of keys) {
        let regex = new RegExp('(?<![\\w-])'+key+'(?![\\w-])', 'gi');
        strTranslated = strTranslated.replace(regex, '<span class="highlight">'+americanToBritishTitles[key]+'</span>');
      }
      // replace untranslatable words
      keys = Object.keys(americanOnly);
      for(let key of keys) {
        let regex = new RegExp('(?<![\\w-])'+key+'(?![\\w-])', 'gi');
        strTranslated = strTranslated.replace(regex, '<span class="highlight">'+americanOnly[key]+'</span>');
      }
      // format time (ex: 10:30 to 10.30)
      let regex = /([0-9]{1,2})([:])([0-9]{1,2})/g;
      strTranslated = strTranslated.replace(regex, '<span class="highlight">$1.$3</span>');
    }

    if(strLocale == 'british-to-american') {
      let keys = Object.keys(americanToBritishSpelling);
      for(let key of keys) {
        let regex = new RegExp('(?<![\\w-])'+americanToBritishSpelling[key]+'(?![\\w-])', 'gi');
        strTranslated = strTranslated.replace(regex, '<span class="highlight">'+key+'</span>');
      }

      keys = Object.keys(americanToBritishTitles);
      for(let key of keys) {
        let regex = new RegExp('(?<![\\w-])'+americanToBritishTitles[key]+'(?![\\w-])', 'gi');
        strTranslated = strTranslated.replace(regex, '<span class="highlight">'+key+'</span>');
      }

      keys = Object.keys(britishOnly);
      for(let key of keys) {
        let regex = new RegExp('(?<![\\w-])'+key+'(?![\\w-])', 'gi');
        strTranslated = strTranslated.replace(regex, '<span class="highlight">'+britishOnly[key]+'</span>');
      }

      let regex = /([0-9]{1,2})([\.])([0-9]{1,2})/g;
      strTranslated = strTranslated.replace(regex, '<span class="highlight">$1:$3</span>');
    }

    return strTranslated;
  }

  translate(strText, strLocale) {
    let strTranslated = '' + strText;

    if(strLocale == 'american-to-british') {
      let keys = Object.keys(americanToBritishSpelling);
      for(let key of keys) {
        let regex = new RegExp('(?<![\\w-])'+key+'(?![\\w-])', 'gi');
        strTranslated = strTranslated.replace(regex, americanToBritishSpelling[key]);
      }

     keys = Object.keys(americanToBritishTitles);
for (let key of keys) {
  // quitar el punto final del match usando \\b y escape de "."
  let regex = new RegExp('\\b' + key.replace('.', '\\.') + '(?=\\s)', 'gi');
  strTranslated = strTranslated.replace(regex, (match) => {
    let replacement = americanToBritishTitles[key];
    if (match[0] === match[0].toUpperCase()) {
      replacement = replacement.charAt(0).toUpperCase() + replacement.slice(1);
    }
    return replacement;
  });
}

      keys = Object.keys(americanOnly);
      for(let key of keys) {
        let regex = new RegExp('(?<![\\w-])'+key+'(?![\\w-])', 'gi');
        strTranslated = strTranslated.replace(regex, americanOnly[key]);
      }

      let regex = /([0-9]{1,2})([:])([0-9]{1,2})/g;
      strTranslated = strTranslated.replace(regex, '$1.$3');
    }

    if(strLocale == 'british-to-american') {
      let keys = Object.keys(americanToBritishSpelling);
      for(let key of keys) {
        let regex = new RegExp('(?<![\\w-])'+americanToBritishSpelling[key]+'(?![\\w-])', 'gi');
        strTranslated = strTranslated.replace(regex, key);
      }

      keys = Object.keys(americanToBritishTitles);
      for (let key of keys) {
        let regex = new RegExp(`\\b${americanToBritishTitles[key]}\\b`, 'gi');
        let replacement = key;
        strTranslated = strTranslated.replace(regex, (match) => {
          let formatted = replacement;
          if (match[0] === match[0].toUpperCase()) {
            formatted = replacement.charAt(0).toUpperCase() + replacement.slice(1);
          }
          return formatted;
        });
      }

      keys = Object.keys(britishOnly);
      for(let key of keys) {
        let regex = new RegExp('(?<![\\w-])'+key+'(?![\\w-])', 'gi');
        strTranslated = strTranslated.replace(regex, britishOnly[key]);
      }

      let regex = /([0-9]{1,2})([\.])([0-9]{1,2})/g;
      strTranslated = strTranslated.replace(regex, '$1:$3');
    }

    return strTranslated;
  }
}

module.exports = Translator; 

###Your project link(s)

solution: https://boilerplate-project-american-british-gb1v.onrender.com

githubLink: GitHub - Silvanagb/boilerplate-project-american-british-english-translator

Your browser information:

User Agent is: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36

Challenge Information:

Quality Assurance Projects - American British Translator

You are not handling titles correctly.

If you enter Dr. Foster (British to American) the translator returns dr.. Foster.
If you enter Dr. Foster (American to British) the translator returns dr Foster.

You have an issue with both the punctuation and capitalisation of your titles.

cuendo yo realizo el cambio la falla sigue:

let keys = Object.keys(americanToBritishTitles);
    for (let key of keys) {
      const brit = americanToBritishTitles[key];

      if (strLocale === 'american-to-british') {
        const regex = new RegExp(`\\b${key.replace('.', '\\.')}\\b`, 'gi');
        strTranslated = strTranslated.replace(regex, (match) => {
          const replacement = brit;
          return match[0] === match[0].toUpperCase()
            ? replacement.charAt(0).toUpperCase() + replacement.slice(1)
            : replacement;
        });
      }

      if (strLocale === 'british-to-american') {
        const regex = new RegExp(`\\b${brit}\\b`, 'gi');
        strTranslated = strTranslated.replace(regex, (match) => {
          const replacement = key;
          return match[0] === match[0].toUpperCase()
            ? replacement.charAt(0).toUpperCase() + replacement.slice(1)
            : replacement;
        });
      }
    }

You have fixed the capitalisation but the following inputs should return as follows:

British to American:
Dr. Foster => Everything looks good to me! not Dr.. Foster
Dr Foster => Dr. Foster

American to British:
Dr Foster => Everything looks good to me!
Dr. Foster => Dr Foster not Everything looks good to me!