PowerTranslator: translation inside PowerToys Run and Command Palette
一个 PowerToys Run 和 Cmdpal 的翻译插件/a translate plugin for PowerToys Run and Cmdpal
At a glance
- What is it?
- PowerTranslator is a C# translation plugin for Microsoft PowerToys Run and the newer Command Palette, offering a trigger-key workflow, clipboard translation, a target language suffix, pinyin output for Chinese, read-aloud and a history list. It suits a Windows power user who translates snippets from the launcher, and it is not a general purpose translation application.
- Who is it for?
- PowerTranslator fits a Windows user who already keeps PowerToys Run or Command Palette open and wants a short translation without opening a browser, since the trigger key, the clipboard shortcut and the language suffix cover the common cases in a few keystrokes.
- Can I use it commercially?
- Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
- Is it still maintained?
- Yes. The repository last received commits 5 days ago.
- What is it written in?
- Mainly C#, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on October 23, 2026, and from our analysis. They are not legal advice.
Editorial analysis
A launcher plugin, not a translation application
PowerTranslator is a plugin for PowerToys Run, and the project's own framing is that it now hooks into several platforms to provide fast and stable translation. The topics list names the scope: powertoys, powertoys-run, cmdpal, cmdpal-extension, translate-plugin, translator, along with chinese-translation and english-translation.
That shape matters for how you judge it. A launcher plugin has no window of its own to speak of. It wakes when you press a trigger key, takes what you type or what is on your clipboard, and puts the result somewhere you can take it from. There is no document to open, no file to save and no side-by-side view of source and target text. The value it offers over a browser tab is entirely about keystrokes.
The plugin targets two hosts. The original is the PowerToys Run plugin format, a .NET project built as Translater.csproj with a plugin.json manifest at the repository root. The newer host is Command Palette, Microsoft's replacement launcher, and the repository carries a separate cmdpal/ directory with its own solution, PowerTranslatorExtension.sln, its own project and its own test project. All the PowerToys Run features work in cmdpal as well, according to the readme, and there is a separate image showing the translation running there.
The repository layout shows the split clearly. At the top level there are src/ for the legacy plugin, cmdpal/ for the Command Palette extension, doc/ for documentation including an install and upgrade guide and a getting started guide for code, Images/ for the animated demonstrations, plus Changelog.md, install.bat, plugin.json, the justfile and both readmes, one in Chinese and one in English. The project is MIT licensed and the primary language is C#.
The trigger key, the suffix syntax and the clipboard shortcut
The interaction model is the interesting part, and it is built around a single trigger character.
The default trigger key is the pipe character, and the readme is explicit that this changed in v0.8, so users upgrading from an earlier version do not need to change it again. The demonstration GIFs use a custom trigger of caret, which suggests the key is configurable in practice.
The workflow is: open PowerToys Run with alt+space, type the trigger character followed by the text you want translated, and press Enter to copy the translation to the clipboard. There are GIFs for translating an English word and for translating Chinese.
The shortcut that gets the most attention is the clipboard one. When the clipboard holds text, typing the trigger character on its own translates whatever is already copied, with no typing at all. Combined with the setting to clear the previous query at startup, that turns the plugin into a one-key translate tool for a word you copied a moment earlier.
A target language is chosen with an arrow suffix in the query itself. The syntax is the trigger character, the text, an arrow, and a language code, and the readme gives the example that translating a Chinese word into Japanese is written with the ja code. The codes are listed in a table: zhs for Simplified Chinese, zht for Traditional Chinese, ja for Japanese, en for English, ko for Korean, fr for French and ru for Russian.
Separately, the default target language is set in the settings and defaults to auto. So the suffix is the per-query override, and the setting is the fallback when you do not use one.
Pinyin, read-aloud and the Youdao speech interface
Three features go beyond plain translation, and each has a detail worth knowing.
The first is pinyin for Chinese. The readme lists Chinese with pinyin as a capability, and the demonstration of translating a Chinese word shows the romanised form appearing alongside the translation. For a learner or for someone reading a Chinese name in a document, that pairing is more useful than the translation alone, and it is a deliberate addition rather than something the underlying service does by default.
The second is read-aloud. Chinese and English can be spoken, with ctrl+enter as the shortcut. The readme states that this is built on the Youdao TTS interface, which tells you two things: it is an online service call, so it needs a network connection and it depends on a third party, and it is not a local speech engine.
Automatic reading of the result is a separate setting, and it is off by default, under the name Automatic reading result. That default is sensible. Speaking every translation out loud is intrusive in a launcher that sits over whatever you were doing, and a user who wants it has to ask for it.
The third is the second target language. When enabled, every translation also shows a result in a second language, which is off by default as well. Two screenshots show the option in the settings and the two results appearing together.
Taken together, these features point at a particular kind of user: someone working across Chinese and English, who reads pinyin, who occasionally wants a translation spoken, and who sometimes needs a third language alongside. It is a personal workflow tool built around one machine's keyboard, not a service.
History, and the one setting the host will not let you change
There is a history list, and it comes with a documented limitation that is worth reading before you rely on it.
Typing h, or triggering the plugin while the clipboard contains no text to translate, shows the record of past translations. The default is 15 entries.
The readme asks a question and answers it: why is there no custom limit for the number of records? The answer is that the official integration only exposes boolean typed custom settings, so a numeric limit cannot be offered right now, and the author says they will update it when that support arrives. The alternative offered is to download the source and change it and compile it yourself.
That is a small thing, and it is also a clear illustration of where the plugin's boundaries sit. Several of its settings are constrained by what the host application allows a plugin to declare, which means a feature request against the plugin can be a feature request against PowerToys itself. It also explains the other settings in the list: Enable search suggest is a toggle for whether the plugin proposes search terms based on what you have typed, the trigger key is changeable, the smooth input option is recommended for a better typing experience, and clear the last query at startup is what makes the clipboard shortcut work immediately.
The readme also recommends changing the trigger key if it conflicts with something else, suggesting a backtick as the replacement. Since the pipe character is fairly common in shell-flavoured habits and in pasted text, a collision is plausible, and the plugin warns that you should check for conflicts when you move it.
Installing on both hosts
The two hosts have different installation routes, and the readme is explicit about each.
For Command Palette, the extension is installed through the Microsoft Store, and the store page is linked from the readme.
For PowerToys Run, the plugin is installed by hand. The steps are: close PowerToys, download Translator.zip from the releases page, extract it into the plugins directory, then start PowerToys again. The directory given is the local application data path for the PowerToys Run Plugins folder. The readme points at Microsoft's own third party plugin installation document as a reference, and there is a separate how to install and upgrade guide in the doc directory with more detail.
There is also a community installer tool called ptr, which takes the plugin name and the GitHub repository:
ptr add Translator N0I0C0K/PowerTranslatorThat one command handles the download and placement for the legacy plugin format, and it is the shortest route if you already use ptr.
So the choice is between two paths for the same functionality: the store package for Command Palette, and either a manual ZIP extraction or ptr for PowerToys Run. Since the features are the same in both hosts, the deciding factor is which launcher you actually use and whether it is already installed.
Building from source, and the two build pipelines
The repository standardises its commands in a justfile at the root, and the readme says that running just or just help lists everything available. The recipes split cleanly between the two hosts:
# 传统 PowerToys Run 插件
just legacy-build-all
just legacy-pack-all
# Command Palette 扩展
just test
just cmdpal-build-all
just cmdpal-install-local
just cmdpal-clean-local
just cmdpal-storeThe legacy recipes build and package the plugin as a ZIP for both architectures, x64 and ARM64, with the output path described in the justfile comments as bin/Translator_<platform>.zip. The underlying build is a dotnet build of Translater.csproj with a Platform property, and the pack step is a dotnet pack with a Release configuration.
The cmdpal recipes are the more interesting half, and their comments explain more than the names do. cmdpal-install-local builds, self-signs and installs a real local .msix, which is what makes end to end verification possible. The temporary certificate lives in a git-ignored cmdpal/.local-cert/ directory, and the password is encrypted with the current user's DPAPI. To satisfy the Windows MSIX installation rules, the first run asks for UAC confirmation and imports the public key into the LocalMachine\TrustedPeople store. If an older extension is already running, it shows the PID and waits for confirmation before stopping it. cmdpal-clean-local also goes through UAC to remove that trust entry and the certificate directory, and it does not uninstall the application.
cmdpal-store builds an x64 and ARM64 Microsoft Store .msixbundle into dist/, and the build still runs the existing manifest checks on the application before packaging.
The contribution notes ask for .NET SDK 8.0, and the steps are to fork, clone, optionally run dotnet restore, open the solution in any editor such as VS Code and start coding. The cmdpal side additionally needs Visual Studio 2022 with the MSBuild and Windows App SDK workloads, because the restore recipe looks for Visual Studio MSBuild through vswhere.exe and fails with a message telling you to install those workloads if it cannot find it.
Where PowerTranslator is the wrong tool
The first limitation is that translation happens online. The plugin calls a translation service and, for the read-aloud feature, the Youdao TTS interface, so both need a network connection and both send your text to a third party. That rules out confidential material, and it rules out an offline machine entirely. There is no local model and no caching of previously translated content described in the readme.
The second is the scope of the interaction. Everything happens through a trigger key in a launcher, so the input is a short string and the output is a short string copied to the clipboard. There is no document translation, no file input, no side-by-side editing, no saved glossary and no terminology management. A user who needs a professional translator with consistent terms needs a different tool entirely, and a user who wants an offline dictionary needs a different tool as well.
The third is that a plugin is hostage to its host's extension points. The history limit is the clearest example, since the limit cannot be raised because the official integration only exposes boolean typed custom settings. The same constraint shapes the settings screen: the trigger key, the smooth input toggle, the search suggest toggle, the automatic reading toggle and the default target language are the whole configurable surface, and what appears in it depends on what the host supports. When the host changes its plugin contract, the plugin has to follow.
The fourth is the maturity of the two lines. The traditional PowerToys Run plugin has reached v0.13.0, released on 2026-06-20, while the Cmdpal release is still labelled a beta, with v0.12.2 titled CmdpalPowerTranslator Beta from 2025-07-02 and v0.12.1 titled Test cmdpal from 2025-06-26 in the release list. The last push to the repository was on 2026-10-18, so the code is moving, but the two hosts are at different stages and the newer one is explicitly a beta.
The fifth is the platform. This is a Windows plugin for two Windows launchers, built on .NET and packaged as an MSIX or a ZIP of PowerToys Run plugin files, so there is no version for macOS or Linux and no way to run it outside the host.
Editorial conclusion
PowerTranslator fits a Windows user who already keeps PowerToys Run or Command Palette open and wants a short translation without opening a browser, since the trigger key, the clipboard shortcut and the language suffix cover the common cases in a few keystrokes. It is the wrong choice if you need offline translation, since the plugin calls an online translation service, and it is the wrong choice if you want to adjust the settings beyond what the plugin exposes, because several options are limited by what the host allows. Before installing, read the settings screen for the trigger key and the default target language, and note that the last push was on 2026-10-18 with the newest release v0.13.0 from 2026-06-20, while the Cmdpal extension is still labelled a beta.
Frequently asked questions
How do I install the PowerTranslator plugin for PowerToys Run?
Close PowerToys, download Translator.zip from the GitHub releases page, extract it into %LOCALAPPDATA%\Microsoft\PowerToys\PowerToys Run\Plugins, then start PowerToys again. If you use the ptr tool the shortcut is the command ptr add Translator N0I0C0K/PowerTranslator.
How do I translate a specific language instead of the default one?
Add an arrow and a language code after the text in the query, for example the trigger character followed by the text, then ->ja to translate into Japanese. The listed codes are zhs, zht, ja, en, ko, fr and ru, and the default target language in the settings is auto.
Can PowerTranslator translate my clipboard without me typing anything?
Yes. When the clipboard contains text, typing the trigger character alone translates that content. Enabling the setting to clear the previous query at startup makes the shortcut immediate on each invocation. The trigger character is | by default since v0.8, and the readme suggests changing it if it conflicts.
Does PowerTranslator work in Command Palette as well as PowerToys Run?
Yes, the readme states that all the PowerToys Run features also work in cmdpal. The Command Palette extension is installed through the Microsoft Store, while the legacy PowerToys Run plugin is distributed as a ZIP.
Why can I not change the number of history entries in PowerTranslator?
The readme explains that the official integration only exposes boolean typed custom settings, so a numeric limit for the history, which defaults to 15 records, is not supported yet. The alternative given is to download the source, change it and compile it yourself.
How is the translated text spoken aloud in PowerTranslator?
Chinese and English can be read aloud with ctrl+enter, and the readme states the feature is based on the Youdao TTS interface. Automatic reading of the result is a separate setting and is off by default.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/n0i0c0k-powertranslator)Was this useful?