Update PlainTab I18N
SkillDev toolsMaintain PlainTab runtime UI translations and i18n language packs. Use when adding, editing, formatting, validating, or reviewing UI text in js/i18n/*.js, js/languages.js, data-i18n markup, or t(key) calls; also use when onboarding/help copy or new settings need localized strings.
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use the Update PlainTab I18N skill
What this skill tells your AI
The instructions your AI receives, as published by kaininx/plaintab in .agents/skills/update-i18n/SKILL.md and read by ahel’s review.
Use this skill for PlainTab runtime UI copy. Keep the runtime contract unchanged:
js/languages.jsis the synchronous language bootstrap and must stay early inindex.html.js/i18n/*.jsare language packs that assign flat objects towindow.I18N["locale"].- Runtime code should call
t(key)or use existingdata-i18n; do not hard-code UI language branches. - Keep all language packs key-complete.
zh-CNandenneed carefully maintained copy, and every supported locale should receive localized UI text for newly added runtime keys. Do not use English as the default fallback for non-English packs; only leave a product name, protocol, shortcut, or technical token in English when that exact token is the UI concept.
Workflow
- Read
.claude/rules/30-language.mdand any touched runtime file. - Add or update flat keys in every
js/i18n/*.jsfile. New user-facing keys must be localized for all supported locales, not copied fromen. - Keep language packs multi-line, one key per line:
window.I18N["en"] = {
"someKey": "Some text",
"anotherKey": "Another text"
};
- In runtime code, reference keys through
t("someKey"). Avoid detecting language manually for UI strings. - For generated or mechanical updates, preserve UTF-8 text. Be careful with PowerShell pipelines that can turn non-ASCII text into
?; preferapply_patchor an ASCII-safe temporary script that is deleted after use. - If adding user-facing behavior, keep first-paint rules intact; do not move
js/languages.jsorjs/preload.js.
Validation
Run these checks before finishing:
Get-ChildItem js\i18n\*.js | ForEach-Object { node --check $_.FullName }
node --check js\languages.js
node --check js\newtab.js
@'
const fs = require('fs');
global.window = {};
global.document = { write() {} };
global.navigator = { language: 'en' };
global.localStorage = { getItem() { return ''; } };
require('./js/languages.js');
for (const file of fs.readdirSync('js/i18n').filter(f => f.endsWith('.js'))) require('./js/i18n/' + file);
const report = window.validatePlainTabI18N({ silent: true });
if (!report.ok) {
console.log(JSON.stringify(report, null, 2));
process.exit(1);
}
console.log('validatePlainTabI18N ok');
'@ | node -
If only specific runtime files changed, still run git diff --check on the touched files.
Also audit newly added keys for accidental English fallback in non-English packs. A value that is identical to window.I18N.en[key] should be treated as suspicious unless it is an intentional product name, protocol, shortcut, or technical token.
Signals
- GitHub stars
- 88
- Forks
- 5
- Last commit
- May 2026
Advanced
- Catalog kind
- skill
- Gateway key
update-i18n- Source
- github.com/kaininx/plaintab