Estoy usando JS para adaptar el texto en varios idiomas, según el idioma de los visitantes. ¿Hay alguna forma de acortar esto, combinando el código? Eso siempre sigue el mismo patrón, así que supongo que hay una manera (soy novato)
<script> var el = document.getElementById('mainphrase'); { if (italian || french || german) { el.innerHTML = ( (italian && '<strong><em>Buongiorno</em></strong>') || (french && '<strong><em>Bonjour</em></strong>') || (german && '<strong><em>Guten Morgen</em></strong>') ); } else { el.innerHTML = '<strong><em>Good morning</em></strong>';} } </script> <script> var el = document.getElementById('registerphrase'); { if (italian || french || german) { el.innerHTML = ( (italian && '<strong><em>clicca qui</em></strong>') || (french && '<strong><em>clicquer ici (german && '<strong><em>hier clicken else { el.innerHTML = '<strong><em>click here</em></strong>';} } </script> <script> var el = document.getElementById('textphrase'); { if (italian || french || german) { el.innerHTML = ( (italian && '<strong><em>Ciao a tutti</em></strong>') || (french && '<strong><em>Salut a tous</em></strong>') || (german && '<strong><em>Guten Tag</em></strong>') ); } else { el.innerHTML = '<strong><em>Hello World</em></strong>';} } </script> <script> let language = {italian:'Buongiorno',german:'Guten Morgen',french:'Bonjour'} let language1 = {italian:'clicca qui',german:'hier clicken',french:'clicquer ici'} function htmlById(elementId,languageText){ var el = document.getElementById(elementId); if (italian || french || german) { el.innerHTML = ( (italian && '<strong><em>'+languageText.italian+'</em></strong>') || (french && '<strong><em>'+languageText.french+'</em></strong>') || (german && '<strong><em>'+languageText.german+'</em></strong>') ); } else { el.innerHTML = '<strong><em>Good morning</em></strong>';} } htmlById('mainphrase',language) htmlById('registerphrase',language1) </script>usando la función puede agrupar la funcionalidad común sin tener que reescribir la lógica una y otra vez.
<script> // assuming your variables 'italian', 'french', 'german' already are declared and have values const modifyElHTML = (elID, phrases) => { const el = document.getElementById(elID); let phrase; if (italian) { phrase = phrases.italian; } else if (french) { phrase = phrases.french; } else if (german) { phrase = phrases.german; } else { phrase = phrases.english; } el.innerHTML = `<strong><em>${phrase}</em></strong>`; }; modifyElHTML('mainphrase', { italian: 'Buongiorno', french: 'Bonjour', german: 'Guten Morgen', english: 'Good morning' }); modifyElHTML('registerphrase', { italian: 'clicca qui', french: 'clicquer ici', german: 'hier clicken', english: 'click here' }); modifyElHTML('textphrase', { italian: 'Ciao a tutti', french: 'Salut a tous', german: 'Guten Tag', english: 'Hello World' }); </script>Puede acortar aún más esto combinando las 3 llamadas en 1 llamada, y todas las frases e identificaciones juntas, pero eso podría dificultar un poco el trabajo posterior.