📖 How to Use DuoLines
Transform the way you read the web. DuoLines preserves the source language and places the translation directly beneath or alongside it, making it the perfect tool for language learners, expats, and researchers.
1. Install & Pin
Add the DuoLines extension to your Chromium browser and pin it to your toolbar for quick access to your translation settings.
2. Highlight & Click
Select any text on a webpage. Right-click to open the context menu and choose "Translate with DuoLines".
3. Read & Export
A clean popup will display the original lines followed by their translations. You can easily Select All (Ctrl+A) and copy to Anki, Word, or Notion.
🚀 Advanced Technical Features
Universal Compatibility
Works seamlessly across the web. Whether reading news, blog posts, or documentation, generate bilingual text instantly.
Real-Time Progress
For longer texts, watch the translation happen chunk by chunk with a live progress bar. Never wonder when the process will finish.
Manifest V3 Compliant
Built on the latest browser standards. Uses optimized background service workers to handle text without slowing down your browser.
🔧 Fix "PERSONAL_KEYS" & API Limits
If the community Google Translation API is overloaded, use your own Personal API Key for unlimited speed and high-volume translation:
- Sign in to script.google.com and start a + New Project.
- Replace existing code with the block below.
- Click Deploy > New deployment. Select Web app.
- Execute as: Me, Access: Anyone. Copy the Web App URL and paste it into the DuoLines extension settings.
function doPost(e) {
try {
var data = JSON.parse(e.postData.contents);
var targetLang = data.target || 'en';
var textToTranslate = data.q || '';
if (!textToTranslate) {
return createResponse({status: 'error', message: 'No text'});
}
var translated = LanguageApp.translate(textToTranslate, '', targetLang, {contentType: 'text'});
return createResponse({
status: 'success',
translatedText: translated
});
} catch (error) {
return createResponse({status: 'error', message: error.toString()});
}
}
function doGet(e) {
return createResponse({status: 'error', message: 'Ready to work. Use POST.'});
}
function createResponse(data) {
return ContentService.createTextOutput(JSON.stringify(data))
.setMimeType(ContentService.MimeType.JSON);
}
🌍 Supported Languages
Leverage the full power of translation. DuoLines supports all major global languages and rare dialects:
🔒 Privacy-First Architecture & Permissions
Your data belongs to you. DuoLines processes translations through secure channels, and your personal settings are stored locally or synced via your secure browser profile.
- Storage: Required to save your UI theme (light/dark), language preferences, and personal Google Apps Script API keys.
- script.google.com: Essential for connecting to Google Apps Script (both developer-provided and user-personal keys).
- translate.googleapis.com: Used as a critical fallback mechanism to ensure the extension remains functional.
- raw.githubusercontent.com: Required to fetch the latest configuration files and translation engine updates safely.
* The extension follows the principle of least privilege, requesting access only to the specific domains necessary for its operation.