king-translate / static /index.html
gleison
load model
d952940
<!DOCTYPE html>
<html lang="pt-br">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>TranslateWorld - Traduza para qualquer idioma</title>
<style>
:root {
--primary: #4361ee;
--secondary: #3f37c9;
--light: #f8f9fa;
--dark: #212529;
--success: #4cc9f0;
--warning: #f72585;
--info: #4895ef;
}
* {
margin: 0;
padding: 0;
box-sizing: border-box;
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
}
body {
background: linear-gradient(135deg, #f5f7fa 0%, #c3cfe2 100%);
min-height: 100vh;
display: flex;
flex-direction: column;
color: var(--dark);
}
header {
background: var(--primary);
color: white;
padding: 1rem;
text-align: center;
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
}
.container {
width: 100%;
max-width: 1200px;
margin: 0 auto;
padding: 2rem;
flex-grow: 1;
}
.app-card {
background: white;
border-radius: 12px;
padding: 2rem;
box-shadow: 0 10px 20px rgba(0, 0, 0, 0.1);
margin-bottom: 2rem;
}
h1 {
font-size: 2.5rem;
margin-bottom: 1rem;
}
h2 {
font-size: 1.8rem;
margin-bottom: 1rem;
color: var(--primary);
}
p {
margin-bottom: 1rem;
line-height: 1.6;
}
.grid {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 1.5rem;
}
@media (max-width: 768px) {
.grid {
grid-template-columns: 1fr;
}
}
textarea {
width: 100%;
height: 200px;
padding: 1rem;
border: 1px solid #ddd;
border-radius: 8px;
resize: vertical;
margin-bottom: 1rem;
font-size: 1rem;
}
.language-selector {
display: flex;
justify-content: space-between;
margin-bottom: 1rem;
gap: 1rem;
}
.language-selector select {
flex: 1;
padding: 0.8rem;
border: 1px solid #ddd;
border-radius: 8px;
font-size: 1rem;
background-color: white;
}
.model-selection {
margin-bottom: 1rem;
}
.model-selection label {
display: block;
margin-bottom: 0.5rem;
font-weight: bold;
}
.model-selection select {
width: 100%;
padding: 0.8rem;
border: 1px solid #ddd;
border-radius: 8px;
font-size: 1rem;
background-color: white;
}
.btn {
display: inline-block;
padding: 0.8rem 1.5rem;
background-color: var(--primary);
color: white;
border: none;
border-radius: 8px;
cursor: pointer;
font-size: 1rem;
transition: all 0.3s ease;
text-transform: uppercase;
letter-spacing: 1px;
font-weight: bold;
}
.btn:hover {
background-color: var(--secondary);
transform: translateY(-2px);
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2);
}
.btn:active {
transform: translateY(0);
}
.action-buttons {
display: flex;
justify-content: space-between;
gap: 1rem;
}
.loading {
display: none;
text-align: center;
margin: 1rem 0;
}
.loading-spinner {
width: 30px;
height: 30px;
border: 4px solid #f3f3f3;
border-top: 4px solid var(--primary);
border-radius: 50%;
animation: spin 1s linear infinite;
margin: 0 auto;
}
@keyframes spin {
0% { transform: rotate(0deg); }
100% { transform: rotate(360deg); }
}
.features {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(250px, 1fr));
gap: 1.5rem;
margin-top: 2rem;
}
.feature-card {
background: white;
border-radius: 12px;
padding: 1.5rem;
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
transition: all 0.3s ease;
}
.feature-card:hover {
transform: translateY(-5px);
box-shadow: 0 10px 20px rgba(0, 0, 0, 0.1);
}
.feature-card h3 {
color: var(--primary);
margin-bottom: 0.5rem;
}
.feature-icon {
font-size: 2rem;
color: var(--primary);
margin-bottom: 1rem;
}
footer {
background: var(--dark);
color: white;
text-align: center;
padding: 1rem;
}
.cta {
background: linear-gradient(135deg, var(--primary) 0%, var(--secondary) 100%);
color: white;
padding: 2rem;
text-align: center;
border-radius: 12px;
margin-top: 2rem;
}
.cta h2 {
color: white;
}
.cta .btn {
background: white;
color: var(--primary);
margin-top: 1rem;
}
.cta .btn:hover {
background: var(--light);
}
.badges {
display: flex;
flex-wrap: wrap;
gap: 0.5rem;
margin-bottom: 1rem;
}
.badge {
background: var(--info);
color: white;
padding: 0.2rem 0.5rem;
border-radius: 4px;
font-size: 0.8rem;
}
</style>
</head>
<body>
<header>
<h1>TranslateWorld</h1>
<p>Tradução avançada para mais de 100 idiomas</p>
</header>
<div class="container">
<div class="app-card">
<h2>Tradutor Universal</h2>
<p>Traduza qualquer texto para múltiplos idiomas com qualidade superior usando modelos de IA avançados.</p>
<div class="model-selection">
<label for="model">Selecione o modelo de tradução:</label>
<select id="model">
<option value="facebook/m2m100_418M">M2M100 Padrão (418M) - Mais rápido</option>
<option value="facebook/m2m100_1.2B">M2M100 Premium (1.2B) - Mais preciso</option>
</select>
</div>
<div class="grid">
<div>
<h3>Texto Original</h3>
<div class="language-selector">
<select id="sourceLanguage">
<!-- Adicione mais idiomas conforme necessário -->
</select>
</div>
<textarea id="sourceText" placeholder="Digite seu texto aqui..."></textarea>
</div>
<div>
<h3>Tradução</h3>
<div class="language-selector">
<select id="targetLanguage">
<!-- Adicione mais idiomas conforme necessário -->
</select>
</div>
<textarea id="targetText" placeholder="A tradução aparecerá aqui..." readonly></textarea>
</div>
</div>
<div class="loading">
<div class="loading-spinner"></div>
<p>Traduzindo...</p>
</div>
<div class="action-buttons">
<button id="translateBtn" class="btn">Traduzir</button>
<button id="copyBtn" class="btn">Copiar Tradução</button>
</div>
</div>
<div class="features">
<div class="feature-card">
<div class="feature-icon">🌍</div>
<h3>Mais de 100 Idiomas</h3>
<p>Traduza entre mais de 100 idiomas com precisão e naturalidade.</p>
</div>
<div class="feature-card">
<div class="feature-icon">🤖</div>
<h3>Modelos Premium</h3>
<p>Utilize modelos de IA avançados para traduções de alta qualidade.</p>
</div>
<div class="feature-card">
<div class="feature-icon"></div>
<h3>Rápido e Eficiente</h3>
<p>Traduções instantâneas para textos de qualquer tamanho.</p>
</div>
<div class="feature-card">
<div class="feature-icon">🔍</div>
<h3>Preserva o Contexto</h3>
<p>Mantém o significado e as nuances do texto original.</p>
</div>
</div>
<div class="cta">
<h2>Aprenda a Criar Seu Próprio Tradutor com IA</h2>
<p>Adquira nosso eBook e aprenda a desenvolver aplicações de tradução avançadas utilizando modelos de IA.</p>
<button class="btn">Saiba Mais</button>
</div>
</div>
<footer>
<p>&copy; 2025 TranslateWorld. Todos os direitos reservados.</p>
</footer>
<script>
document.addEventListener('DOMContentLoaded', function() {
const translateBtn = document.getElementById('translateBtn');
const copyBtn = document.getElementById('copyBtn');
const sourceText = document.getElementById('sourceText');
const targetText = document.getElementById('targetText');
const sourceLanguage = document.getElementById('sourceLanguage');
const targetLanguage = document.getElementById('targetLanguage');
const modelSelect = document.getElementById('model');
const loading = document.querySelector('.loading');
translateBtn.addEventListener('click', async function() {
if (!sourceText.value.trim()) {
alert('Por favor, digite algum texto para traduzir.');
return;
}
loading.style.display = 'block';
try {
const response = await fetch('https://gleisonnanet-king-translate.hf.space/translate', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
user_input: sourceText.value,
source_lang: sourceLanguage.value,
target_lang: targetLanguage.value,
model: modelSelect.value
}),
});
const data = await response.json();
if (data.error) {
alert('Erro na tradução: ' + data.error);
} else {
targetText.value = data.translation;
}
} catch (error) {
alert('Erro ao conectar com o servidor de tradução. Verifique se o servidor está em execução.');
console.error('Error:', error);
} finally {
loading.style.display = 'none';
}
});
copyBtn.addEventListener('click', function() {
if (!targetText.value.trim()) {
alert('Não há tradução para copiar.');
return;
}
targetText.select();
document.execCommand('copy');
alert('Tradução copiada para a área de transferência!');
});
});
const languages = [
{ code: 'af', name: 'Afrikaans' },
{ code: 'am', name: 'Amharic' },
{ code: 'ar', name: 'Arabic' },
{ code: 'ast', name: 'Asturian' },
{ code: 'az', name: 'Azerbaijani' },
{ code: 'ba', name: 'Bashkir' },
{ code: 'be', name: 'Belarusian' },
{ code: 'bg', name: 'Bulgarian' },
{ code: 'bn', name: 'Bengali' },
{ code: 'br', name: 'Breton' },
{ code: 'bs', name: 'Bosnian' },
{ code: 'ca', name: 'Catalan; Valencian' },
{ code: 'ceb', name: 'Cebuano' },
{ code: 'cs', name: 'Czech' },
{ code: 'cy', name: 'Welsh' },
{ code: 'da', name: 'Danish' },
{ code: 'de', name: 'German' },
{ code: 'el', name: 'Greeek' },
{ code: 'en', name: 'English' },
{ code: 'es', name: 'Spanish' },
{ code: 'et', name: 'Estonian' },
{ code: 'fa', name: 'Persian' },
{ code: 'ff', name: 'Fulah' },
{ code: 'fi', name: 'Finnish' },
{ code: 'fr', name: 'French' },
{ code: 'fy', name: 'Western Frisian' },
{ code: 'ga', name: 'Irish' },
{ code: 'gd', name: 'Gaelic; Scottish Gaelic' },
{ code: 'gl', name: 'Galician' },
{ code: 'gu', name: 'Gujarati' },
{ code: 'ha', name: 'Hausa' },
{ code: 'he', name: 'Hebrew' },
{ code: 'hi', name: 'Hindi' },
{ code: 'hr', name: 'Croatian' },
{ code: 'ht', name: 'Haitian; Haitian Creole' },
{ code: 'hu', name: 'Hungarian' },
{ code: 'hy', name: 'Armenian' },
{ code: 'id', name: 'Indonesian' },
{ code: 'ig', name: 'Igbo' },
{ code: 'ilo', name: 'Iloko' },
{ code: 'is', name: 'Icelandic' },
{ code: 'it', name: 'Italian' },
{ code: 'ja', name: 'Japanese' },
{ code: 'jv', name: 'Javanese' },
{ code: 'ka', name: 'Georgian' },
{ code: 'kk', name: 'Kazakh' },
{ code: 'km', name: 'Central Khmer' },
{ code: 'kn', name: 'Kannada' },
{ code: 'ko', name: 'Korean' },
{ code: 'lb', name: 'Luxembourgish; Letzeburgesch' },
{ code: 'lg', name: 'Ganda' },
{ code: 'ln', name: 'Lingala' },
{ code: 'lo', name: 'Lao' },
{ code: 'lt', name: 'Lithuanian' },
{ code: 'lv', name: 'Latvian' },
{ code: 'mg', name: 'Malagasy' },
{ code: 'mk', name: 'Macedonian' },
{ code: 'ml', name: 'Malayalam' },
{ code: 'mn', name: 'Mongolian' },
{ code: 'mr', name: 'Marathi' },
{ code: 'ms', name: 'Malay' },
{ code: 'my', name: 'Burmese' },
{ code: 'ne', name: 'Nepali' },
{ code: 'nl', name: 'Dutch; Flemish' },
{ code: 'no', name: 'Norwegian' },
{ code: 'ns', name: 'Northern Sotho' },
{ code: 'oc', name: 'Occitan (post 1500)' },
{ code: 'or', name: 'Oriya' },
{ code: 'pa', name: 'Panjabi; Punjabi' },
{ code: 'pl', name: 'Polish' },
{ code: 'ps', name: 'Pushto; Pashto' },
{ code: 'pt', name: 'Portuguese' },
{ code: 'ro', name: 'Romanian; Moldavian; Moldovan' },
{ code: 'ru', name: 'Russian' },
{ code: 'sd', name: 'Sindhi' },
{ code: 'si', name: 'Sinhala; Sinhalese' },
{ code: 'sk', name: 'Slovak' },
{ code: 'sl', name: 'Slovenian' },
{ code: 'so', name: 'Somali' },
{ code: 'sq', name: 'Albanian' },
{ code: 'sr', name: 'Serbian' },
{ code: 'ss', name: 'Swati' },
{ code: 'su', name: 'Sundanese' },
{ code: 'sv', name: 'Swedish' },
{ code: 'sw', name: 'Swahili' },
{ code: 'ta', name: 'Tamil' },
{ code: 'th', name: 'Thai' },
{ code: 'tl', name: 'Tagalog' },
{ code: 'tn', name: 'Tswana' },
{ code: 'tr', name: 'Turkish' },
{ code: 'uk', name: 'Ukrainian' },
{ code: 'ur', name: 'Urdu' },
{ code: 'uz', name: 'Uzbek' },
{ code: 'vi', name: 'Vietnamese' },
{ code: 'wo', name: 'Wolof' },
{ code: 'xh', name: 'Xhosa' },
{ code: 'yi', name: 'Yiddish' },
{ code: 'yo', name: 'Yoruba' },
{ code: 'zh', name: 'Chinese' },
{ code: 'zu', name: 'Zulu' }
];
// Seleciona os elementos select
const sourceSelect = document.getElementById("sourceLanguage");
const targetSelect = document.getElementById("targetLanguage");
// Função para criar options e adicioná-los ao select
const addOptions = (selectElement) => {
languages.forEach(lang => {
const option = document.createElement("option");
option.value = lang.code;
option.textContent = lang.name;
selectElement.appendChild(option);
});
};
// Carrega as options em ambos os selects
if (sourceSelect && targetSelect) {
addOptions(sourceSelect);
addOptions(targetSelect);
}
</script>
</body>
</html>