Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
18 commits
Select commit Hold shift + click to select a range
67928ac
Add Slovenian app localization and online help
MrCodeLabs Oct 16, 2026
f4d71da
Add per-scan probe options for profiles, GUI and CLI
MrCodeLabs Oct 16, 2026
043e8c3
Add explicit IPv4 interface selection and bound scan probes
MrCodeLabs Oct 17, 2026
213dea2
Add explicit locations with isolated device data and history
MrCodeLabs Oct 17, 2026
0df04de
Complete location translations and verify profile persistence
MrCodeLabs Oct 18, 2026
429a4b5
Add device recognition evidence and confidence
MrCodeLabs Oct 18, 2026
8ea337d
Integrate contribution prerequisites with current upstream main
MrCodeLabs Oct 20, 2026
00f49ec
Add verified device access methods
MrCodeLabs Oct 20, 2026
d13eec3
Merge current upstream main into scan options contribution
MrCodeLabs Oct 23, 2026
bdfbc5a
Integrate current upstream and updated scan options into interface co…
MrCodeLabs Oct 23, 2026
57acc5c
Integrate current upstream and updated interface contribution into lo…
MrCodeLabs Oct 23, 2026
4d1c998
Integrate current upstream and updated locations into evidence contri…
MrCodeLabs Oct 23, 2026
a11671f
Merge updated prerequisite contribution history into verified access
MrCodeLabs Oct 23, 2026
cacb83b
Merge current upstream and refresh Slovenian help and update labels
MrCodeLabs Oct 23, 2026
08c0cbc
Keep localization UI checks composable with feature contributions
MrCodeLabs Oct 23, 2026
6df39f8
Record aligned contribution ancestry while preserving fork implementa…
MrCodeLabs Oct 23, 2026
e5f2b9b
Integrate Slovenian website help and aligned localization contribution
MrCodeLabs Oct 23, 2026
3672ce5
Preserve newly merged fork release-sync guard in integration base
MrCodeLabs Oct 23, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 21 additions & 0 deletions TRANSLATING.md
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,27 @@ Each language is a single XAML `ResourceDictionary` in the `Strings/` folder, na
- Missing keys always fall back to `Strings/en-US.xaml`, so you never have to keep a file fully in sync.
- The Chinese and Bengali files are a machine-assisted first pass - native corrections are very welcome.

## Website help

The `scan-landing/` website has its own language picker and dictionaries. Translating the
desktop XAML resources does not automatically translate the website.

- Website translations live in `scan-landing/ks-i18n.js`; CLI help also reuses descriptions
through `scan-landing/cli-help-i18n.js`.
- A new website language needs a `LANGS`/flag entry in `scan-landing/ks.js` and a language
button in each page. Slovenian currently covers the help page and shared controls;
untranslated content on other pages uses the existing English fallback.
- The help page maps website language codes to XAML tags in `shortcutLocale()`.
Regenerate shortcut labels after adding or changing a desktop translation:
`python build/shortcut-catalog.py > scan-landing/shortcuts.generated.js` (write UTF-8).
- Verify with `python build/shortcut-catalog.py --check` and
`node build/shortcut-catalog.test.js`. Preview `scan-landing/help.html` in a browser and
check the language menu, shortcut list, keyboard layers and language switching.

Keep the upstream site addresses and project attribution when preparing a contribution.
Changes in a fork become visible on the official site only after the maintainer accepts
and deploys them.

## Questions

Open a GitHub issue or comment on your pull request.
4 changes: 2 additions & 2 deletions build/shortcut-catalog.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ const physicalKeys = new Set(context.KBROWS.flat().map(key => key[0]));
const bindings = Object.values(context.KBL).flatMap(layer => Object.entries(layer));
assert.equal(bindings.reduce((count, entry) => count + entry[1][1].length, 0), context.KS_SHORTCUTS.length);
for (const [key] of bindings) assert(physicalKeys.has(key), `Website map is missing ${key}`);
for (const [site, app] of Object.entries({en:'en-US',es:'es',pt:'pt-BR',fr:'fr-FR',de:'de-DE',nb:'nb-NO',uk:'uk-UA',ru:'ru-RU',it:'it-IT',cs:'cs-CZ',pl:'pl-PL',hu:'hu-HU',tr:'tr-TR',kk:'kk-KZ',bn:'bn',ja:'ja-JP','zh-Hans':'zh-CN','zh-Hant':'zh-TW',vi:'vi-VN'})) {
for (const [site, app] of Object.entries({en:'en-US',es:'es',pt:'pt-BR',fr:'fr-FR',de:'de-DE',sl:'sl-SI',nb:'nb-NO',uk:'uk-UA',ru:'ru-RU',it:'it-IT',cs:'cs-CZ',pl:'pl-PL',hu:'hu-HU',tr:'tr-TR',kk:'kk-KZ',bn:'bn',ja:'ja-JP','zh-Hans':'zh-CN','zh-Hant':'zh-TW',vi:'vi-VN'})) {
context.language = site;
context.paintCatalog();
assert.equal(context.shortcutLocale(), app);
Expand All @@ -36,4 +36,4 @@ assert(context.KBL.ctrlshift.G && context.KBL.ctrlalt.H && context.KBL.base.Menu
assert(context.KBL.ctrlalt.R && context.KBL.ctrlalt.R[1].some(index =>
context.KS_SHORTCUTS[index].labels['en-US'] === 'History settings'),
'The history settings shortcut reaches the online keyboard map.');
console.log(`PASS: website scripts parse, all ${context.KS_SHORTCUTS.length} bindings reach list/map, and 19 locale mappings display their app labels.`);
console.log(`PASS: website scripts parse, all ${context.KS_SHORTCUTS.length} bindings reach list/map, and 20 locale mappings display their app labels.`);
6 changes: 3 additions & 3 deletions scan-landing/about.html
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,7 @@
<button class="lang-item" data-lang="hu">Magyar</button>
<button class="lang-item" data-lang="it">Italiano</button>
<button class="lang-item" data-lang="pt">Portugu&#234;s (Brasil)</button><button class="lang-item" data-lang="ru">&#1056;&#1091;&#1089;&#1089;&#1082;&#1080;&#1081;</button>
<button class="lang-item" data-lang="tr">Türkçe</button>
<button class="lang-item" data-lang="sl">Slovenščina</button><button class="lang-item" data-lang="tr">Türkçe</button>
<button class="lang-item" data-lang="uk">&#1059;&#1082;&#1088;&#1072;&#1111;&#1085;&#1089;&#1100;&#1082;&#1072;</button><button class="lang-item" data-lang="vi">Ti&#7871;ng Vi&#7879;t</button>
<button class="lang-item" data-lang="zh-cn">&#20013;&#25991; (&#31616;&#20307;)</button>
<button class="lang-item" data-lang="zh">&#20013;&#25991; (&#32321;&#39636;)</button>
Expand Down Expand Up @@ -216,8 +216,8 @@ <h2 data-i18n="ak_2">Also try...</h2>
<span class="right"><span id="verEgg" title="click me">v1.8.3</span> &middot; &copy; 2026 <b><a href="https://thekiller.net" target="_blank" rel="noopener">Steve the Killer</a></b></span>
</footer>
<div class="egg-toast" id="eggToast"></div>
<script src="ks-i18n.js?v=24"></script>
<script src="ks.js?v=20261017-contrast"></script>
<script src="ks-i18n.js?v=20261023-sl"></script>
<script src="ks.js?v=20261023-contrast-sl"></script>
<script>
(function(){
var links=[].slice.call(document.querySelectorAll('.outline a'));
Expand Down
8 changes: 4 additions & 4 deletions scan-landing/help.html
Original file line number Diff line number Diff line change
Expand Up @@ -111,7 +111,7 @@
<button class="lang-item" data-lang="hu">Magyar</button>
<button class="lang-item" data-lang="it">Italiano</button>
<button class="lang-item" data-lang="pt">Portugu&#234;s (Brasil)</button><button class="lang-item" data-lang="ru">&#1056;&#1091;&#1089;&#1089;&#1082;&#1080;&#1081;</button>
<button class="lang-item" data-lang="tr">Türkçe</button>
<button class="lang-item" data-lang="sl">Slovenščina</button><button class="lang-item" data-lang="tr">Türkçe</button>
<button class="lang-item" data-lang="uk">&#1059;&#1082;&#1088;&#1072;&#1111;&#1085;&#1089;&#1100;&#1082;&#1072;</button><button class="lang-item" data-lang="vi">Ti&#7871;ng Vi&#7879;t</button>
<button class="lang-item" data-lang="zh-cn">&#20013;&#25991; (&#31616;&#20307;)</button>
<button class="lang-item" data-lang="zh">&#20013;&#25991; (&#32321;&#39636;)</button>
Expand Down Expand Up @@ -439,7 +439,7 @@ <h2 class="help-cat" id="shortcuts" data-i18n="tk_182">Keyboard shortcuts</h2>
}
function shortcutLocale(){
var lang=document.documentElement.getAttribute('lang')||'en';
var aliases={en:'en-US',pt:'pt-BR',fr:'fr-FR',de:'de-DE',no:'nb-NO',nb:'nb-NO',uk:'uk-UA',ru:'ru-RU',it:'it-IT',cs:'cs-CZ',pl:'pl-PL',hu:'hu-HU',tr:'tr-TR',kk:'kk-KZ',ja:'ja-JP',vi:'vi-VN'};
var aliases={en:'en-US',pt:'pt-BR',fr:'fr-FR',de:'de-DE',sl:'sl-SI',no:'nb-NO',nb:'nb-NO',uk:'uk-UA',ru:'ru-RU',it:'it-IT',cs:'cs-CZ',pl:'pl-PL',hu:'hu-HU',tr:'tr-TR',kk:'kk-KZ',ja:'ja-JP',vi:'vi-VN'};
if(/^zh-Hant/i.test(lang)||lang==='zh'||lang==='zh-TW') return 'zh-TW';
if(/^zh-Hans/i.test(lang)||/^zh-CN/i.test(lang)) return 'zh-CN';
return aliases[lang.split('-')[0]]||lang.split('-')[0];
Expand Down Expand Up @@ -570,9 +570,9 @@ <h3 data-i18n="help_terminal_keys">When the terminal has focus</h3>
</footer>
<div class="egg-toast" id="eggToast"></div>
<div class="egg-toast" id="eggToast"></div>
<script src="ks-i18n.js?v=24"></script>
<script src="ks-i18n.js?v=20261023-sl"></script>
<script src="cli-help-i18n.js?v=1"></script>
<script src="ks.js?v=20261017-contrast"></script>
<script src="ks.js?v=20261023-contrast-sl"></script>
<script>
(function(){
var items=[].slice.call(document.querySelectorAll('.acc-item'));
Expand Down
6 changes: 3 additions & 3 deletions scan-landing/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -158,7 +158,7 @@
<button class="lang-item" data-lang="hu">Magyar</button>
<button class="lang-item" data-lang="it">Italiano</button>
<button class="lang-item" data-lang="pt">Portugu&#234;s (Brasil)</button><button class="lang-item" data-lang="ru">&#1056;&#1091;&#1089;&#1089;&#1082;&#1080;&#1081;</button>
<button class="lang-item" data-lang="tr">Türkçe</button>
<button class="lang-item" data-lang="sl">Slovenščina</button><button class="lang-item" data-lang="tr">Türkçe</button>
<button class="lang-item" data-lang="uk">&#1059;&#1082;&#1088;&#1072;&#1111;&#1085;&#1089;&#1100;&#1082;&#1072;</button><button class="lang-item" data-lang="vi">Ti&#7871;ng Vi&#7879;t</button>
<button class="lang-item" data-lang="zh-cn">&#20013;&#25991; (&#31616;&#20307;)</button>
<button class="lang-item" data-lang="zh">&#20013;&#25991; (&#32321;&#39636;)</button>
Expand Down Expand Up @@ -268,8 +268,8 @@ <h2 data-i18n="features_h">What it does</h2>
</div>
<div class="egg-toast" id="eggToast"></div>

<script src="ks-i18n.js?v=24"></script>
<script src="ks.js?v=20261017-contrast"></script>
<script src="ks-i18n.js?v=20261023-sl"></script>
<script src="ks.js?v=20261023-contrast-sl"></script>
<script src="feature-carousel.js?v=3"></script>
<script>
(function () {
Expand Down
Loading
Loading