Repository navigation
Releases: Norixor/NoriTrans
Release list
NoriTrans v0.2.0
A redesigned interface with one clear status model
- New interface. The floating control, toolbar popup, settings page, subtitle overlay and in-page marks now share one visual language and one status model, so the same situation reads the same everywhere.
- Clear status and one main action. Translating, partly failed, stopped, off and unavailable are shown distinctly, each with its reason. The main button keeps its place while a request is in flight instead of flipping between actions. Stop keeps what is already translated and can be resumed. Subtitle translation that is switched off now says it is off instead of reporting that no subtitle track was found, and a "Check subtitles again" action appears when none was found.
- Floating control. Page and Video tabs, image recognition (experimental) and image translation sections, and a collapsed button with a progress ring and short announcements that can be turned off in Settings → General. It stays clickable inside fullscreen containers; when the video element itself is fullscreen it shows status only, which is a Chrome limitation.
- Popup. Slimmed down to two status cards, a switch for translating the current site automatically, a switch for the floating control, and the update notice.
- Settings. Six sections; changes save automatically. Service credentials still need an explicit "Save and test", clearing the cache and clearing credentials stay separate actions with confirmations, and site profiles keep an explicit save. New options: show skipped marks (off by default) and announcements (on by default).
- Subtitle overlay and in-page marks. New "Live subtitles · Fast translation" and "Translation on the way" tags. A block that failed to translate shows a retry marker that is reachable with the keyboard.
- Fix: next episode on Netflix. Moving to the next episode without reloading the page no longer reuses the previous episode's subtitles.
Things that changed
- Selection-translation controls now live only in Settings → Web pages.
- The update notice appears in the popup and in Settings → General instead of the floating control.
- The floating control's hover quick actions were replaced by the progress ring and announcements.
Permissions and dependencies
No Chrome permissions were added or changed. The package now bundles two libraries, Lit and a custom-elements polyfill for content scripts (both BSD-3-Clause); their notices are included.
Notes
The new interface has been tested on self-made pages and in a real Chromium extension, but not on every streaming site. Please report anything that looks wrong.
Install
Extract noritrans-0.2.0-chrome.zip, load the extracted folder in Chrome extension developer mode, and confirm version 0.2.0. Reload open pages after updating. SHA-256: 20582b2a01cbd0d5fae12aa42093eeef66dac655a138dc1ef420a14b238a7c43.
全新界面与统一的状态表达
- 全新界面。 浮窗、工具栏弹窗、设置页、字幕层和网页内标记现在共用同一套视觉语言和状态模型,同一种情况在各处读起来一致。
- 状态清晰,主操作唯一。 翻译中、部分失败、已停止、已关闭、不可用各有明确的样子并给出原因。请求进行中时,主按钮留在原位,不再在不同操作之间来回翻转。"停止"会保留已翻译的内容,并且可以继续。字幕翻译被关闭时会明确显示"已关闭",而不再提示"未发现字幕轨道";没有发现字幕时会出现"重新检测字幕"操作。
- 浮窗。 网页和视频两个 Tab,图像识别(实验)与图片翻译区块,折叠按钮带进度环和简短播报,播报可在 设置 → 通用 中关闭。在全屏容器内浮窗保持可点击;视频元素本身全屏时只显示状态,这是 Chrome 的限制。
- 弹窗。 精简为两张状态卡、"自动翻译本站"开关、浮窗显示开关和更新提示。
- 设置。 分为六组,修改自动保存。翻译服务的凭据仍需显式"保存并测试",清除缓存与清除凭据仍是两个独立操作并有确认,站点 Profile 保持显式保存。新增选项:显示跳过标记(默认关)和胶囊播报(默认开)。
- 字幕层与网页内标记。 新增"实时字幕 · 快速翻译"和"译文准备中"标签。翻译失败的段落会显示可用键盘操作的重试标记。
- 修复:Netflix 换集。 不刷新页面直接进入下一集时,不再沿用上一集的字幕。
有变化的地方
- 划词翻译控件现在只在 设置 → 网页翻译 中。
- 更新提示显示在弹窗和 设置 → 通用 中,不再出现在浮窗里。
- 浮窗悬停时的快捷按钮被进度环和播报取代。
权限与依赖
没有新增或修改 Chrome 权限。安装包新增打包了两个库:Lit 和用于内容脚本的 custom elements polyfill(均为 BSD-3-Clause),其声明已随包提供。
说明
新界面已经在自建页面和真实的 Chromium 扩展中验证过,但没有在每个流媒体站点上验证。如果发现异常,请反馈。
安装
解压 noritrans-0.2.0-chrome.zip,在 Chrome 扩展开发者模式中加载解压后的目录,并确认版本为 0.2.0。更新后请刷新已打开的网页。SHA-256:20582b2a01cbd0d5fae12aa42093eeef66dac655a138dc1ef420a14b238a7c43。
NoriTrans v0.1.151
Long AI subtitle tracks no longer fail in whole batches
- Fixed AI subtitle translation staying slow and stuck on "Some subtitles failed to translate" for long tracks (hundreds of lines). When the AI response contained an ID that was not part of the request, for example a mistyped short ID, the whole batch of about 30 lines was thrown away and then split and retried, even though most of its translations were valid.
- Unknown IDs are now ignored apart from a short diagnostic. The valid translations in the same response are kept, and only the lines that were actually missing are requested again. Unknown IDs never reach the cache.
- The same fix applies to webpage AI translation.
Known limit: if translation is still slow after updating, the Provider's own response time or rate limits are the likely cause; open the subtitle status details and check the reported reason.
Install
Extract noritrans-0.1.151-chrome.zip, load the extracted folder in Chrome extension developer mode, and confirm version 0.1.151. After updating, refresh open pages. SHA-256: 9e8e4bec2b1ddf9decaf2ebb908cfe7e27ca700acfc668f1fbcd7654a5ca35f8.
较长的 AI 字幕轨道不再整批失败
- 修复较长字幕轨道(数百行)的 AI 翻译很慢、一直显示"部分字幕翻译失败"的问题。当 AI 返回的结果里出现不属于本次请求的 ID(例如抄错的短 ID)时,整批约 30 行会被全部丢弃,再被拆分重试,尽管其中大部分译文本来是有效的。
- 现在未知 ID 只会留下一条简短诊断,不再影响其他结果:同一响应里有效的译文会被保留,只有真正缺失的行才会再次请求。未知 ID 不会进入缓存。
- 网页 AI 翻译同样受益于这项修复。
已知限制:更新后如果仍然较慢,更可能是翻译服务本身的响应时间或限流所致;请打开字幕状态详情,查看报告的具体原因。
安装
解压 noritrans-0.1.151-chrome.zip,在 Chrome 扩展开发者模式中加载解压后的目录,并确认版本为 0.1.151。更新后请刷新已打开的网页。SHA-256:9e8e4bec2b1ddf9decaf2ebb908cfe7e27ca700acfc668f1fbcd7654a5ca35f8。
NoriTrans v0.1.150
Netflix complete subtitles are now recognized more reliably
- Fixed Netflix sometimes reporting "Full subtitles were not captured" and falling back to fast translation even though the whole subtitle track (hundreds of lines) had been captured. This happened when the Netflix page was opened before the extension was installed or reloaded: the subtitle document is then fetched only once, and the previous rule waited for a second identical response that never came.
- A single verified subtitle response is now accepted as the complete track as soon as its timeline covers the whole video, so AI pre-translation can start. A partial window that covers only part of the video is still treated as a live stream.
- When a Netflix track stays a live stream, the message now suggests refreshing the page after updating or reloading the extension.
Install
Extract noritrans-0.1.150-chrome.zip, load the extracted folder in Chrome extension developer mode, and confirm version 0.1.150. After updating, refresh open Netflix pages. SHA-256: ef454594b550af4549b0dc16d364a2b8e5550b60769eab81f2ae2692805bbc3a.
更可靠地识别 Netflix 完整字幕
- 修复 Netflix 有时提示"未获取完整字幕"并回退到快速翻译的问题,即使整条字幕轨道(数百行)实际已经抓到。这发生在 Netflix 页面早于扩展安装或重新加载打开的情况下:此时字幕文档只会被获取一次,而之前的规则要等待永远不会到来的第二次一致响应。
- 现在只要单次已验证的字幕响应的时间轴覆盖了整段视频,就会被接受为完整轨道,AI 预翻译即可开始。只覆盖视频一部分的片段仍然按实时字幕处理。
- 当 Netflix 轨道仍是实时字幕时,提示会建议在更新或重新加载扩展后刷新页面。
安装
解压 noritrans-0.1.150-chrome.zip,在 Chrome 扩展开发者模式中加载解压后的目录,并确认版本为 0.1.150。更新后请刷新已打开的 Netflix 页面。SHA-256:ef454594b550af4549b0dc16d364a2b8e5550b60769eab81f2ae2692805bbc3a。
NoriTrans v0.1.149
Fewer wasted requests, correct bilingual order, clearer video subtitle status
- Failed or cancelled page blocks are no longer re-sent to the translation Provider when you hover, focus or the page changes styles. Only an explicit "retry failed" sends them again, so a bad API key or a rate limit no longer causes a stream of repeated requests, and Cancel now actually stops.
- Long paragraphs shown in bilingual mode keep their translated parts in the right order instead of reversed, and the layout no longer moves them around on every sync.
- If an AI response contains duplicate or unknown result IDs, those results are no longer shown as successful or saved to the cache. Only the affected blocks are retried.
- Video subtitles now say why they are not translating. A switched-off subtitle feature reads "Video subtitle translation is off" instead of "no readable subtitle track", and a track in a language that does not match your source-language setting explains the mismatch.
- The "Cancelled" status no longer stays stuck after you navigate to another video or change the source language.
- Translated subtitle tracks resume from cache after a page reload on more sites, even when the page URL parameters or the player's blob address change, without restoring another video's track.
Known limits: with streaming AI responses a duplicated ID's first copy can still be cached before the duplicate is seen; bilingual chunks inside list items and table cells still follow arrival order.
Install
Extract noritrans-0.1.149-chrome.zip, load the extracted folder in Chrome extension developer mode, and confirm version 0.1.149. Reload open pages after updating. SHA-256: 7792130b16c63166d514249e3d3da86d170ab9c6effc93c7f166114de9310c00.
减少无效请求、双语顺序正确、视频字幕状态更清晰
- 翻译失败或被取消的网页段落,不再因为鼠标悬停、获得焦点或页面样式变化而重新发给翻译服务,只有明确点击"重试失败项"才会重发。API Key 无效或被限流时不再产生连续的重复请求,"取消"也真正生效。
- 双语模式下的长段落,译文各部分保持正确顺序,不再倒序,布局同步时也不会反复搬动节点。
- AI 返回的结果里出现重复或未知 ID 时,这些结果不再显示为成功,也不会写入缓存,只会重试受影响的段落。
- 视频字幕现在会说明为什么没有翻译。字幕翻译开关关闭时提示"视频字幕翻译已关闭",而不是"未发现字幕轨道";视频有字幕但语言与设置的源语言不匹配时,会说明不匹配的原因。
- 切换到另一个视频或修改源语言后,"已取消"状态不再卡住。
- 更多站点在页面刷新后可以从缓存继续已翻译的字幕轨道,页面 URL 参数或播放器 blob 地址变化不再导致缓存失效,同时不会把另一个视频的轨道恢复过来。
已知限制:流式 AI 响应中,重复 ID 的第一份结果可能在发现重复之前已写入缓存;列表项和表格单元格内的双语分块仍按到达顺序排列。
安装
解压 noritrans-0.1.149-chrome.zip,在 Chrome 扩展开发者模式中加载解压后的目录,并确认版本为 0.1.149。更新后请刷新已打开的网页。SHA-256:7792130b16c63166d514249e3d3da86d170ab9c6effc93c7f166114de9310c00。
NoriTrans v0.1.148
AI Providers behind strict gateways now connect
- Fixed HTTP 403 "Origin is not allowed for credentialed requests" from OpenAI-compatible gateways that refuse browser-origin requests carrying an API key. The same address, key and model already worked from a terminal but failed in the extension.
- NoriTrans now removes the browser's automatic
Originheader from its own requests to the configured translation Provider, so they are sent like any server client. This applies to the configured AI address and the built-in Google, Microsoft and DeepL endpoints, and updates automatically when you change the Provider address. - Web pages' own requests are never modified, and the header is only removed from requests the extension itself sends.
Permission change
- Adds
declarativeNetRequestWithHostAccess. Chrome shows no new install warning for it, and it only acts on Provider hosts already covered by the extension's existing host permissions.
Install
Extract noritrans-0.1.148-chrome.zip, load the extracted folder in Chrome extension developer mode, and confirm version 0.1.148. Reload open pages after updating. If a Provider previously failed with HTTP 403, run "Test connection" again in settings.
严格网关后的 AI Provider 现在可以连接
- 修复部分 OpenAI 兼容网关返回 HTTP 403 "Origin is not allowed for credentialed requests" 的问题。这类网关会拒绝同时带有浏览器来源和 API Key 的请求,因此同样的地址、密钥和模型在终端中可用,在扩展中却失败。
- NoriTrans 现在会在自己发往已配置翻译 Provider 的请求中移除浏览器自动附加的
Origin请求头,使请求与普通服务端客户端一致。此修复作用于已配置的 AI 地址及内置的 Google、Microsoft、DeepL 接口,修改 Provider 地址后会自动更新。 - 网页自身发出的请求不会被修改,只处理扩展自己发出的请求。
权限变更
- 新增
declarativeNetRequestWithHostAccess权限。Chrome 不会因此显示新的安装警告,该权限只作用于扩展现有主机权限已覆盖的 Provider 主机。
安装
解压 noritrans-0.1.148-chrome.zip,在 Chrome 扩展开发者模式中加载解压后的目录,并确认版本为 0.1.148。更新后请刷新已打开的网页。如果之前某个 Provider 报 HTTP 403,请在设置中重新点击"测试连接"。
NoriTrans v0.1.147
Smoother page translation
- Large and constantly changing pages no longer freeze while translating. On a 2,500-block stress page, the longest main-thread stall dropped from 27 seconds to under 1 second, and the page stays responsive after translation finishes.
- Translated text now stays in sync with page changes without re-checking the whole page on every update.
- Subtitle caption detection no longer scans the page on unrelated changes.
More reliable translation
- A failed cache read no longer fails the whole translation; the extension falls back to the Provider and reconnects the cache automatically.
- The background service is kept alive during long AI requests so they are not cut off midway.
- Subtitles and selection translation get priority over page batches, so current subtitles are not delayed by page translation.
- Local (Bergamot) translation no longer times out just because work is waiting in a queue, and one slow request no longer fails every other request.
- AI Providers that reject optional parameters (such as
temperatureon reasoning models) are handled automatically: the parameter is dropped and the request is retried, including when the error arrives inside a streamed response. - Error details are clearer: timeouts, network errors, rate limits (429), Provider server errors (5xx) and cancellation are reported separately, and diagnostics include the Provider's error code without exposing response text. A Provider that rejects browser-extension requests (HTTP 403 on the
Originheader) is now named explicitly.
Clearer loading and error states
- Blocks that fail to translate are marked in the page; click the mark to retry just that block. The floating control and popup offer "Retry failed" after a partial result.
- Cancelling now stops translation and keeps what is already translated; use Restore to return to the original page. New "Cancelled" and "Unavailable" states replace the misleading "Not started".
- The status line shows the state and its cause on two lines, the collapsed button shows progress on hover, and error details link directly to Provider settings.
- Loading indicators no longer cover neighbouring content, and bilingual translations align with the original block's spacing.
- The floating control uses the same status → actions → settings order on every tab, disabled buttons are easier to recognise, and Options warns about unsaved changes.
Install
Extract noritrans-0.1.147-chrome.zip, load the extracted folder in Chrome extension developer mode, and confirm version 0.1.147. Reload open pages after updating.
网页翻译更流畅
- 内容多、持续变化的网页在翻译时不再卡死。在 2500 段的压力测试页面上,主线程最长卡顿从 27 秒降到 1 秒以内,翻译完成后页面也能保持流畅。
- 译文随页面变化同步时,不再每次都重新检查整个页面。
- 字幕采集不再因页面上无关的变化而反复扫描整页。
翻译更稳定
- 缓存读取失败不再导致整次翻译失败,会自动改用 Provider,并自动重新连接缓存。
- 长时间的 AI 请求期间保持后台服务运行,避免请求中途被中断。
- 字幕和划词翻译优先于网页批量翻译,当前字幕不再被网页翻译拖慢。
- 本地(Bergamot)翻译不再因排队等待而超时,单个慢请求也不再导致其他请求一起失败。
- AI Provider 拒绝可选参数时(例如推理模型不支持
temperature),会自动去掉该参数并重试,包括错误出现在流式响应内部的情况。 - 错误信息更清楚:超时、网络错误、限流(429)、服务端错误(5xx)和取消分别报告,诊断中附带 Provider 的错误代码,但不显示响应原文。Provider 拒绝浏览器扩展请求(
Origin请求头导致的 HTTP 403)时会明确指出原因。
加载与错误状态更明确
- 翻译失败的段落会在页面中标出,点击标记即可只重试这一段;部分完成后,浮窗和弹窗提供"重试失败项"。
- 取消现在只停止翻译并保留已完成的译文,需要回到原文时请使用"还原"。新增"已取消"和"不可用"状态,不再误显示为"未开始"。
- 状态栏分两行显示状态和原因,收起的浮窗悬停即可查看进度,错误详情可直接跳转到翻译服务设置。
- 加载标记不再遮挡相邻内容,双语译文与原文段落的间距对齐。
- 浮窗各标签页统一为"状态 → 操作 → 设置"的顺序,禁用的按钮更易辨认,设置页会提示未保存的修改。
安装
解压 noritrans-0.1.147-chrome.zip,在 Chrome 扩展开发者模式中加载解压后的目录,并确认版本为 0.1.147。更新后请刷新已打开的网页。
NoriTrans v0.1.144
Built-in Norixor translation removed
- Removed the dedicated Norixor sign-in, model, usage, background messages, and managed translation Provider from the extension.
- Kept user-configured AI Providers and the existing fast translation choices.
- On upgrade, removes the saved Norixor session. Former Norixor choices for page, selection, subtitles, and site Profiles are disabled so text is not automatically redirected to another Provider. Previously exported site Profiles remain importable.
- New installations use the standard OpenAI API preset; existing user-configured API endpoints and keys are preserved.
Install
Extract noritrans-0.1.144-chrome.zip, load the extracted folder in Chrome extension developer mode, and confirm version 0.1.144. If you previously selected Norixor translation, choose your preferred translation method again in settings.
移除内置 Norixor 翻译
- 从扩展中移除了独立的 Norixor 登录、模型、用量、后台消息及托管翻译 Provider。
- 保留用户自行配置的 AI Provider 和现有快速翻译方式。
- 升级时删除已保存的 Norixor 会话。原先选择 Norixor 的网页、划词、字幕及站点 Profile 会停用自动行为,避免把文字自动转发给其他 Provider;旧版导出的站点 Profile 仍可导入。
- 新安装使用标准 OpenAI API 预设;已有用户自行配置的 API 地址和密钥予以保留。
安装
解压 noritrans-0.1.144-chrome.zip,在 Chrome 扩展开发者模式中加载解压后的目录,并确认版本为 0.1.144。如果此前选择了 Norixor 翻译,请在设置中重新选择翻译方式。
NoriTrans v0.1.143
Subtitle display
- Keep long subtitles inside the player width and scroll overflowing lines horizontally, without shrinking the font.
- Keep short lines centered, scroll bilingual lines independently, and reset scrolling when the subtitle changes.
- Respect reduced-motion preferences and recalculate the available width when resizing or entering fullscreen.
Install
Extract noritrans-0.1.143-chrome.zip, load the extracted folder in Chrome extension developer mode, and confirm version 0.1.143.
字幕显示
- 超长字幕限制在播放器宽度内横向滚动,不缩小字号。
- 短字幕居中,双语分别滚动,切换字幕时重置滚动位置。
- 遵循系统减少动态效果设置,在调整尺寸和进入全屏时重新计算可用宽度。
安装
解压 noritrans-0.1.143-chrome.zip,在 Chrome 扩展开发者模式中加载解压后的目录,并确认版本为 0.1.143。
NoriTrans v0.1.142
Translation reliability
- Distinguish invalid managed translation results from temporary service failures. Invalid results require an explicit retry, avoiding automatic repeat requests after a model has already generated a response.
- Coordinate with a server-side update that clarifies segment ID requirements and adds privacy-safe validation diagnostics while preserving strict result validation.
- Add regression coverage for the managed translation error boundary, including the extension background messaging path.
Install
Extract noritrans-0.1.142-chrome.zip and load the extracted folder in Chrome's extension developer mode. When updating an unpacked installation, select the new folder and confirm version 0.1.142.
翻译可靠性
- 区分托管翻译结果不合规与临时服务故障。不合规结果需要用户主动重试,避免模型已经生成响应后自动重复发送请求。
- 配合服务端更新,明确段落 ID 输出要求,增加保护隐私的校验诊断,并保留严格结果校验。
- 增加托管翻译错误边界回归覆盖,包括扩展后台消息传递链路。
安装
解压 noritrans-0.1.142-chrome.zip,在 Chrome 扩展开发者模式中加载解压后的目录。更新已解压安装时,请选择新目录并确认版本为 0.1.142。
NoriTrans v0.1.141 — Mixed-language detection fix / 混合语言识别修复
NoriTrans v0.1.141
Mixed-language detection fix
- Fixes automatic source-language selection on mixed-language pages. The language of navigation and surrounding interface text no longer determines the source language of every content segment.
- Norixor and configured AI translation now detect source languages per segment and group requests by language, using the existing bounded scheduler.
- Explicit source-language choices remain unchanged. Existing protected-content handling is retained.
Validation
- ESLint, TypeScript, production build, and 837 unit tests passed.
- 61 browser E2E tests passed; 2 tests requiring explicit local OCR fixtures were skipped.
- A live mixed-language listing page was checked in an isolated browser with controlled provider responses: all 30 titles were detected, requests were separated by source language, and results were rendered. Real-model translation quality after the change remains unverified.
- Package size: 12,023,160 bytes.
- SHA-256:
fc60b1b424bda9be78edc29e142b2b83a0e7c46c9db5cdb6fafc31ef36191c28.
Installation
After updating the loaded extension files, reload the extension in chrome://extensions and confirm version 0.1.141. Refresh existing webpages before retrying translation. Downloading the ZIP alone does not update an unpacked extension.
NoriTrans v0.1.141
混合语言识别修复
- 修复混合语言页面的自动源语言选择。导航栏及周边界面文字的语言不再决定所有内容段落的源语言。
- Norixor 翻译和自定义 AI 翻译现在逐段检测源语言,并通过现有有界调度按语言分批请求。
- 手动指定源语言的行为保持不变,保留已有的受保护内容处理。
验证
- ESLint、TypeScript、生产构建和 837 个单元测试通过。
- 61 个浏览器 E2E 测试通过;2 个需要明确提供本地 OCR 夹具的测试跳过。
- 在独立浏览器中使用可控 Provider 返回值检查了真实混合语言列表页面:30 个标题全部被识别,请求按源语言分流,结果成功写回。此次改动后的真实模型翻译质量尚未复测。
- 安装包大小:12,023,160 字节。
- SHA-256:
fc60b1b424bda9be78edc29e142b2b83a0e7c46c9db5cdb6fafc31ef36191c28。
安装
更新实际加载的扩展文件后,请在 chrome://extensions 重新加载,并确认版本为 0.1.141。刷新已有网页后再重试翻译。仅下载 ZIP 不会更新未打包扩展。