Historie verzí
Každá vydaná verze, od nejnovější. Rozbalte ji a přečtěte si její poznámky nebo si stáhněte soubor, který se s ní dodává.
v1.0.7
A Windows desktop translation application for software teams. It translates words, sentences and whole documents, indexes the project you point it at so a term already used in that project keeps its established wording, and runs its models on your own machine rather than against a hosted service.
Up to 1.0.6 a translation was accepted or refused by the guard stack, and nothing read what came back. This release adds a layer of checks over every answer, in the window, on the command line and for an agent. It also fixes a defect that stopped translation entirely on a machine without the Microsoft Visual C++ runtime, which is what a clean Windows installation and Windows Sandbox both are.
Install
Download BetterTranslator.exe and run it, and put it where the old one was. There is nothing else to install: no .NET runtime, no Visual C++ redistributable. A native bootstrap carries the whole published application inside the executable, materializes it in a per user cache on first run, and starts the runtime in its own process, so there is one process and one taskbar entry.
Requires 64 bit Windows 10 version 2004 (build 19041) or later.
Translation models are not bundled. The first run offers them, and they are downloaded into your local application data folder. The embedding model the semantic checks read is offered the same way, in the same list, and is never installed for you.
What is new
Every answer is checked, and the window marks what it found. A gate of checks reads each translation before you see it. They cover structure, which is markup, placeholders, JSON keys and table shape; coverage, which is what came back untranslated and in which language; length ratios; terminology against the glossary; and how natural the target language reads. A defect is underlined under the words that carry it, and the reason names the check that found it and what it saw. A check that cannot run reports why it could not. It never reports a pass.
An agent and a script get the same result. bt translate --verify adds it to the envelope. The MCP tools carry it on every translation, and job_status and get_entry return it with the entry. Nothing is computed twice: both surfaces build the job through the one factory the window uses, so the same string is checked the same way whichever asked for it.
Semantic checks, behind a model you choose to install. Three checks compare meaning rather than shape. The first measures how similar the source and the translation are. The second translates the answer back into the source language. The third compares that reverse translation with the source. Each call on a model costs time, so they read only the spans an earlier check marked, and at most 24 of them in one answer.
They need a sentence embedding model, intfloat/multilingual-e5-small, published under the MIT licence and 465 MB with its tokenizer. It is one row in the download list. No install selects it for you, its length and SHA-256 are compared with the catalogue before either file is put in place, and a download that fails that comparison leaves nothing behind. Until you install it, the three checks report skipped and give the reason.
What the checks cost is visible and bounded. Each reverse translation is one call on the model already loaded. Settings > Downloads holds the limit, "Reverse translations per answer". The default is 24, and 0 stops the reverse translations while the similarity check keeps running. The tokens and the time go into the figures the entry already shows, so there is no second counter to reconcile with the first. The result carries a line such as "3 of 7 flagged spans re-checked, cap 24".
Pause and stop a translation that is running. Pause stops at the end of the piece being translated now and keeps the model loaded, so resuming starts at once. Stop ends the translation and leaves the message where it was. Both are on the message in the window. An agent still cancels a job with job_cancel.
An update download shows how far it has got. Settings and the window show the percentage complete while an update is fetched and checked against its published checksum, rather than only that a download is in progress.
Simple replaces Fast in the composer. The tier that runs EuroLLM is called Simple. When the model a tier needs is not installed, the composer names the model that is missing and uses the other tier, instead of failing when you send.
What is fixed
Translation could not start on a machine without the Microsoft Visual C++ runtime. The inference library imports msvcp140.dll, vcruntime140.dll, vcruntime140_1.dll and vcomp140.dll. Windows does not supply them. Most machines have them because some other application installed the redistributable, so this went unseen until the application was run on a clean Windows installation and in Windows Sandbox, where the runtime simply would not load. The four files now travel inside the executable and are unpacked beside the inference library. If they are absent anyway, the message names the missing file, gives the address of the redistributable, and says that installing the runtime again does not add it, which is the wrong conclusion the earlier message invited.
A one word translation was reported as a failure. Some words are the same in English and in Czech, and Test is one of them. The guard compared the answer with the source, found them equal, concluded the model had ignored the request, and refused a correct translation. The message was then reported as untranslated. The rule now applies only to text of two words or more. A single word that comes back unchanged is a translation. A longer line that comes back unchanged is still a defect.
A component shown as installed was downloaded anyway. The tick that said "installed" and the check that decided whether to transfer were two questions asked at two moments. They are one question now, asked before anything is queued, so a row that reads installed opens no socket.
Two requests for one component made two downloads. A second request now joins the transfer already running instead of starting its own, and one artifact is written once across processes.
The install folder was not remembered. A folder chosen on the first run is kept, and every surface that asks whether a component is present asks about that folder.
Newly installed files needed a manual restart to load. The application offers the restart when an install finishes, and asks first.
Everything else
Unchanged from 1.0.6: a download asked for by a copy the updater service was not registered against fetches for itself, at the same version the published SHA-256 settles whether a release is already installed, an update is judged against the build asking for it, automatic updates stay off until you ask for them, the application asks GitHub once when it starts, downloads you asked for are staged under your own profile, nothing is installed whose SHA-256 was not published with the release, and there is one window per machine.
The translation behaviour of 1.0.0 is unchanged: local models with Simple and Thinking, context free by default, whole file translation that keeps its line count, the guard stack that refuses rather than guesses, agents on the same path through MCP and bt, and the glossary, domain terms and translation memory.
Known limitations
- The executable is not code signed. Windows SmartScreen will warn on first run, and the updater can only reject a signature that fails to verify, not require one to be there. What an update is actually checked against is the SHA-256 published with the release.
- An installed copy has to be named
BetterTranslator.exe. A browser that saved it asBetterTranslator (1).exeleaves a build that checks for updates but refuses to replace itself, and says only that the installed build was not found. - Automatic updates need administrator rights once, to register and to remove the service. There is
Unchanged from 1.0.6: a download asked for by a copy the updater service was not registered against fetches for itself, at the same version the published SHA-256 settles whether a release is already installed, an update is judged against the build asking for it, automatic updates stay off until you ask for them, the application asks GitHub once when it starts, downloads you asked for are staged under your own profile, nothing is installed whose SHA-256 was not published with the release, and there is one window per machine.
The translation behaviour of 1.0.0 is unchanged: local models with Simple and Thinking, context free by default, whole file translation that keeps its line count, the guard stack that refuses rather than guesses, agents on the same path through MCP and bt, and the glossary, domain terms and translation memory.
Known limitations
- The executable is not code signed. Windows SmartScreen will warn on first run, and the updater can only reject a signature that fails to verify, not require one to be there. What an update is actually checked against is the SHA-256 published with the release.
- An installed copy has to be named
BetterTranslator.exe. A browser that saved it asBetterTranslator (1).exeleaves a build that checks for updates but refuses to replace itself, and says only that the installed build was not found. - Automatic updates need administrator rights once, to register and to remove the service. There is no per user install that avoids that.
- The semantic checks do nothing until you install the embedding model. They report skipped with the reason, and the naturalness rewrite pass, which reads the same model, rejects every rewrite while it is absent.
- The runtime checks cannot run against the inference host this build talks to. It returns the text and a token count, not a probability per token, so those checks report skipped rather than passing quietly.
- The terminology checks compare dictionary forms and need the morphology tool configured for the target language. They stay silent without it.
- The routing and staging of the checks are stored settings with no screen behind them. Only the semantic ones can be changed from Settings.
- Only the CPU runtime path has been run. All three flavours, CPU, Vulkan and CUDA, are built, measured and wired, and each can be installed from Settings, but neither GPU offload path has been exercised on real hardware, and CUDA has never been loaded at all.
- There is no source-language picker. Text is assumed to be English on the way in.
- The window's own Translate file button has not been watched with a model behind it. The same path has been run from the command line over four Markdown documents and audited before and after.
- The retrieval map is not built yet.
One thing worth deciding before you publish: the executable only carries the four Visual C++ files when build.ps1 finds them through vswhere on the build machine. If that step prints its yellow warning, the "no Visual C++ redistributable" promise in the Install section does not hold for that artifact.
v1.0.6
A Windows desktop translation application for software teams. It translates words, sentences and whole documents, indexes the project you point it at so a term already used in that project keeps its established wording, and runs its models on your own machine rather than against a hosted service.
In 1.0.3 through 1.0.5, pressing Download on an offered update could do nothing at all on a machine where automatic updates were switched on for a copy of the application installed somewhere else. This fixes that.
Install
Download BetterTranslator.exe and run it, and put it where the old one was. There is nothing else to install: no .NET runtime, no Visual C++ redistributable. A native bootstrap carries the whole published application inside the executable, materializes it in a per user cache on first run, and starts the runtime in its own process, so there is one process and one taskbar entry.
Requires 64 bit Windows 10 version 2004 (build 19041) or later.
Translation models are not bundled. The first run offers them, and they are downloaded into your local application data folder.
BetterTranslator.exe, 138237952 bytes, SHA-256 715e61fbb66dc45eef5f587b59aab72fa0c885af7f0bcc05260ddd70e310e4f8.
What is fixed
Download works for the copy you are running. The updater service installs for the one executable it was registered against. A download asked for by any other copy was handed to that service anyway, which answered about the build it keeps, found it current, fetched nothing, and returned at once. The button lit up and went out and the application stayed where it was. The service is now asked only when it was registered against the executable running, and every other copy fetches for itself.
Everything else
Unchanged from 1.0.5: at the same version the published SHA-256 settles whether a release is already installed, an update is judged against the build asking for it, automatic updates stay off until you ask for them, the application asks GitHub once when it starts, downloads you asked for are staged under your own profile, nothing is installed whose SHA-256 was not published with the release, and there is one window per machine.
The translation behaviour of 1.0.0 is unchanged: local models with Fast and Thinking, context free by default, whole file translation that keeps its line count, the guard stack that refuses rather than guesses, agents on the same path through MCP and bt, and the glossary, domain terms and translation memory.
Known limitations
- The executable is not code signed. Windows SmartScreen will warn on first run, and the updater can only reject a signature that fails to verify, not require one to be there. What an update is actually checked against is the SHA-256 published with the release.
- An installed copy has to be named
BetterTranslator.exe. A browser that saved it asBetterTranslator (1).exeleaves a build that checks for updates but refuses to replace itself, and says only that the installed build was not found. - Automatic updates need administrator rights once, to register and to remove the service. There is no per user install that avoids that.
- Only the CPU runtime path has been run. All three flavours, CPU, Vulkan and CUDA, are built, measured and wired, and each can be installed from Settings, but neither GPU offload path has been exercised on real hardware, and CUDA has never been loaded at all.
- There is no source-language picker. Text is assumed to be English on the way in.
- The window's own Translate file button has not been watched with a model behind it. The same path has been run from the command line over four Markdown documents and audited before and after.
- The retrieval map is not built yet.
v1.0.5
A Windows desktop translation application for software teams. It translates words, sentences and whole documents, indexes the project you point it at so a term already used in that project keeps its established wording, and runs its models on your own machine rather than against a hosted service.
1.0.4 could offer the same release over and over: it would fetch a build, install it, and go on saying an update was waiting. This settles that, and it is the last release that has to be taken by hand for anyone caught in it.
Install
If you are on 1.0.3 or 1.0.4 and the update offer works, take it. If it keeps coming back, that is the fault this release fixes: download BetterTranslator.exe from here and put it where the old one was, and it will not happen again.
For a fresh install, download BetterTranslator.exe and run it. There is nothing else to install: no .NET runtime, no Visual C++ redistributable. A native bootstrap carries the whole published application inside the executable, materializes it in a per user cache on first run, and starts the runtime in its own process, so there is one process and one taskbar entry.
Requires 64 bit Windows 10 version 2004 (build 19041) or later.
Translation models are not bundled. The first run offers them, and they are downloaded into your local application data folder.
BetterTranslator.exe, 138238976 bytes, SHA-256 a390c90c6312f936b634a0c85fe0e0b46ad4940262327ae119366667de45b9d6.
What is fixed
A release already installed is no longer offered again. Two builds carrying the same version were told apart by the commit each was built from, and an update was offered whenever those differed. That never has to settle: a release can be tagged at a commit no published binary was built from, and then the versions agree, the commits do not, and the same build is fetched, installed and offered again for ever. At the same version the published SHA-256 now decides. If the bytes on disk are the bytes the release publishes, this is that release, whatever either side reports about itself. A genuinely different build at the same version is still offered, and a newer version is still taken without reading the installed file at all.
An update is judged against the build asking for it. The service maintains one recorded executable and answers about that one. A copy of the application run from somewhere else used to be told about that other build instead of itself, which reported up to date and hid the update. What the service found is now judged again against the build that asked, unless the two are the same version, in which case its answer already covers both.
The application knows which executable it is. Running inside the window there is no record of an installed build, only the service keeps one, so the check could not tell whether a release was already installed and an install could not be applied in place. It now falls back to the running process.
The notification says less. It carries the two version numbers and the actions, and nothing else. Text written by whoever published a release no longer reaches it at all.
Everything else
Unchanged from 1.0.3: automatic updates that stay off until you ask for them, a check when the application starts, downloads you asked for staged under your own profile, the service that writes only inside ProgramData\BetterTranslator, refusal to install anything whose SHA-256 was not published with the release, installing while the application is closed, and one window per machine.
The translation behaviour of 1.0.0 is unchanged: local models with Fast and Thinking, context free by default, whole file translation that keeps its line count, the guard stack that refuses rather than guesses, agents on the same path through MCP and bt, and the glossary, domain terms and translation memory.
Known limitations
- The executable is not code signed. Windows SmartScreen will warn on first run, and the updater can only reject a signature that fails to verify, not require one to be there. What an update is actually checked against is the SHA-256 published with the release.
- An installed copy has to be named
BetterTranslator.exe. A browser that saved it asBetterTranslator (1).exeleaves a build that checks for updates but refuses to replace itself, and says only that the installed build was not found. - Automatic updates need administrator rights once, to register and to remove the service. There is no per user install that avoids that.
- Only the CPU runtime path has been run. All three flavours, CPU, Vulkan and CUDA, are built, measured and wired, and each can be installed from Settings, but neither GPU offload path has been exercised on real hardware, and CUDA has never been loaded at all.
- There is no source-language picker. Text is assumed to be English on the way in.
- The window's own Translate file button has not been watched with a model behind it. The same path has been run from the command line over four Markdown documents and audited before and after.
- The retrieval map is not built yet.
v1.0.4
Test - selfupdater
v1.0.3
Test
v1.0.2
Simple test...for auto updater
v1.0.1
A Windows desktop translation application for software teams. It translates words, sentences and whole documents, indexes the project you point it at so a term already used in that project keeps its established wording, and runs its models on your own machine rather than against a hosted service.
This release adds the update path. A build installed from here can tell you a newer one exists, fetch it, check it against the checksum published with the release and put it in place. Until you turn that on, nothing runs in the background and nothing reaches the network.
Install
Download BetterTranslator.exe and run it. There is nothing else to install: no .NET runtime, no Visual C++ redistributable. A native bootstrap carries the whole published application inside the executable, materializes it in a per user cache on first run, and starts the runtime in its own process, so there is one process and one taskbar entry.
Requires 64 bit Windows 10 version 2004 (build 19041) or later.
1.0.0 cannot update itself to this one. The updater ships here for the first time, so 1.0.0 has nothing in it to notice this release. Download it the same way you downloaded 1.0.0, and put it wherever the old one was. From 1.0.1 onward the application can do this for you.
Translation models are not bundled. The first run offers them, and they are downloaded into your local application data folder.
BetterTranslator.exe, 138235904 bytes, SHA-256 06e600820c0937736789233230516c5dd903569e640fe55d189ec3ce5995afe3.
What is new in this release
Updates are off until you ask for them. Settings > Updates carries one switch. With it off there is no service, no timer and no request to GitHub; the screen still has a Check for updates button that asks once, when you press it, and does nothing else. Turning the switch on or off asks for administrator rights once, and says so before it does.
What runs when you turn it on. A Windows service named BetterTranslator automatic updates. It looks for a new release a few times a day, writes only inside ProgramData\BetterTranslator, and raises no window. It is registered and started by that one elevated step, and removing it is the same switch again.
Nothing installs that was not verified. A release has to publish a SHA-256 for its asset. The download is checked against that digest and against the size the release declares before it is staged, and checked a second time before it replaces anything. A release without a published checksum is refused rather than installed. If the file carries an Authenticode signature that does not verify, it is refused as well.
It goes in while the application is closed. A verified build waits in the staging folder and is put into place the next time the application is not running, so nothing is swapped underneath an open window. If it cannot be replaced then, it goes in on the next restart of the machine. The previous executable is kept beside the new one and removed on the next successful start, so a build that fails to come up leaves you something to go back to.
Or you install it now. When a verified build is waiting, the window shows a card offering Restart now, which saves your work first, hands over to the new build and reopens on it. The same card, and the same button, is on Settings > Updates.
A notification when one is ready. A Windows toast naming the new version, what you are on now and when it was published, with Install now, Later and Release notes. Later means the release is not announced again. The notification needs a Start Menu entry to come from, which the application writes for itself on first run.
The build says which build it is. The version sits in the title bar, and Settings > Updates names the version and the commit it was built from. Comparison uses both: two builds carrying the same version number but different commits are not treated as the same build.
One window. Starting the application while it is already running brings the existing window forward instead of opening a second one, which is also how a notification reaches the copy you already have open.
Everything else
The translation behaviour of 1.0.0 is unchanged: local models with Fast and Thinking, context free by default, whole file translation that keeps its line count, the guard stack that refuses rather than guesses, agents on the same path through MCP and bt, and the glossary, domain terms and translation memory. The 1.0.0 notes describe all of it.
Known limitations
- The executable is not code signed. Windows SmartScreen will warn on first run, and the updater can only reject a signature that fails to verify, not require one to be there. What an update is actually checked against is the SHA-256 published with the release.
- Automatic updates need administrator rights once, to register and to remove the service. There is no per user install that avoids that.
- Only the CPU runtime path has been run. All three flavours, CPU, Vulkan and CUDA, are built, measured and wired, and each can be installed from Settings, but neither GPU offload path has been exercised on real hardware, and CUDA has never been loaded at all.
- There is no source-language picker. Text is assumed to be English on the way in.
- The window's own Translate file button has not been watched with a model behind it. The same path has been run from the command line over four Markdown documents and audited before and after.
- The retrieval map is not built yet.
v1.0.0
A Windows desktop translation application for software teams. It translates words, sentences and whole documents, indexes the project you point it at so a term already used in that project keeps its established wording, and runs its models on your own machine rather than against a hosted service.
Install
Download BetterTranslator.exe and run it. There is nothing else to install: no .NET runtime, no Visual C++ redistributable. A native bootstrap carries the whole published application inside the executable, materializes it in a per user cache on first run, and starts the runtime in its own process, so there is one process and one taskbar entry.
Requires 64 bit Windows 10 version 2004 (build 19041) or later.
First run extracts the payload in about 1.5 seconds. Later runs add a median of 11 milliseconds before the runtime loads.
Translation models are not bundled. The first run offers them, and they are downloaded into your local application data folder.
BetterTranslator.exe, 105625088 bytes, SHA-256 e0d09f32c572355b885890abf546e1b2d9ee2da2cda4fd1588a881e36ae5ed1a.
What is in this release
Translation with local models. Sending a message loads the chosen GGUF through the BetterRuntime CPU library and writes the result back. Fast and Thinking in the composer choose the model: Fast runs EuroLLM, Thinking runs TranslateGemma, and the choice is remembered.
Context is free by default. Every send builds its whole prompt from its own text, so a long chat costs no more than a new one. The plus menu's Memory chip is the only thing that changes that, adding this chat's earlier translations plus passages retrieved from the indexed project or folder.
Whole files, keeping their line count. The preview's Translate file button runs a document a paragraph at a time through the same guarded translator. Markdown, JSON, plain text, Word and PDF are read; Markdown and JSON come back as your original with translated ranges replaced, so headings, fences, tables, keys and escapes stay where they were.
A guard stack that refuses rather than guesses. Line parity, markup and emphasis integrity, placeholder and quoted-citation protection, casing restoration and byte hygiene all run on every send. When a gate declines an answer the entry keeps its source, names the gate and offers Retry. A refusal is reported, never hidden.
Agents take the same path. An in-process MCP server on loopback and the bt command line build their jobs through the same factory the window uses and cut text with the same router, so a string sent by an agent goes through the same guards and comes back with the same notes.
Terminology. A project glossary, domain terms and a translation memory, with an audit that re-tests stored memory against gates fixed since it was written.
Known limitations
- Only the CPU runtime path has been run. All three flavours, CPU, Vulkan and CUDA, are built, measured and wired, and each can be installed from Settings, but neither GPU offload path has been exercised on real hardware, and CUDA has never been loaded at all.
- There is no source-language picker. Text is assumed to be English on the way in.
- The window's own Translate file button has not been watched with a model behind it. The same path has been run from the command line over four Markdown documents and audited before and after.
- The retrieval map is not built yet.
Verification
1256 tests pass, 22 are skipped behind environment gates, none fail. The packed executable passes its own --bt-selftest, and the release directory is checked to hold exactly one file.
Licensing
BetterTranslator is MIT licensed. See LICENSE.
This executable bundles its dependencies. Their licenses are listed in THIRD-PARTY-NOTICES.md.
One of them, WeCantSpell.Hunspell, carries Hunspell's MPL 1.1 / GPL 2.0 / LGPL 2.1 tri-license. It is used unmodified and distributed under the MPL 1.1 terms of that tri-license. Its license text is reproduced at third-party/WeCantSpell.Hunspell/LICENSE.txt and its source is at https://github.com/aarondandy/WeCantSpell.Hunspell.
Hunspell dictionaries are not bundled. A .dic and .aff pair is supplied by whoever runs the application, and those dictionaries carry their own licenses.