Skip to content

[pull] main from jason5ng32:main - #122

Merged
pull[bot] merged 14 commits into
Cosr-Backup:mainfrom
jason5ng32:main
Aug 22, 2026
Merged

pull[bot] merged 14 commits into
Cosr-Backup:mainfrom
jason5ng32:main

Conversation

@pull

@pull pull Bot commented Aug 22, 2026 •

Copy link
Copy Markdown

See Commits and Changes for more details.


Created by pull[bot] (v2.0.0-alpha.4)

Can you help keep this open source service alive? 💖 Please sponsor : )

jason5ng32 and others added 14 commits August 22, 2026 19:50
…-first matching

One registry (common/locale-registry.js) now owns the locale list; the
lazy-load maps, picker options, <html lang>, zh->zh-CN mappings and test
locale lists all derive from it, so adding a language becomes one JSON
pack plus one registry line. Browser-language detection matches exact
tags before base languages, clearing the path for regional packs like
zh-TW. Pure refactor: behavior for the four shipped locales is unchanged
except the picker now renders in registry order.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…tatus dashboard

A locale can now ship partially translated: registry status drives a Beta
badge in the picker, missing keys walk variant -> base -> en (one chain
definition feeds vue-i18n, the privacy/checklist datasets and the
changelog), and matchLocale gained family matching so pt-PT finds a
pt-BR pack. Changelog history is only required of full locales, removing
the biggest barrier for new-language PRs. tests/locale-packs.test.js is
the hard gate a pack must pass; scripts/i18n-status.js (un-gitignored
for contributors) reports coverage without ever failing. Only visible
behavior change: ?hl= resolves regional tags (?hl=zh-CN -> zh) instead
of dropping to English.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
index.html can't import the registry, so its boot quips, JSON-LD and
inline language pick have always been synced by hand. A new spec now
holds them to it: full locales must cover the boot copy (beta ones are
exempt), JSON-LD inLanguage mirrors the full locales' htmlLang — fixing
the imprecise "zh" — and a sentinel evaluates the inline matcher against
matchLocale so the two can't drift apart silently. The inline pick
itself gains the same exact/base/family steps, closing the split where
?hl=zh-CN booted in one language and mounted in another.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ning

A beta pack is now en's full skeleton with untranslated values left as
"", so translation review is always a `"" -> text` diff and English left
in place can't masquerade as translated. pnpm i18n-new scaffolds a pack
and its registry line (--privacy / --checklist for the optional files,
which ship finished or not at all); pnpm i18n-sync realigns packs when
en changes. The gate flips accordingly (exact key parity everywhere, ""
legal only in beta main packs) and a Vite plugin prunes empty values at
build time, so shipped chunks carry only translated strings and ""
behaves exactly like an absent key at runtime.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ution path

TRANSLATING.md walks a contributor from pnpm i18n-new to a mergeable
partial pack: the skeleton convention, the registry line, what the gate
enforces, the fallback chain users see, and the beta-to-full promotion
bar. CONTRIBUTING flips its "adding a locale is heavier than it looks"
warning into an invitation, AGENTS.md restates the i18n rule in
full/beta terms, and the README points translators at the guide.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Pure reorder — key sets and values verified identical before and after.
The packs drifted under years of hand-maintenance; aligning them once
keeps every future pnpm i18n-sync diff free of position noise.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…e data

common/langs.js is gone. Its list conflated two unrelated things — the
UI's locales and the languages upstream data comes in. The MaxMind set
(verified against the shipped City database) now lives in
maxmind-service.js, where lookupMaxMind family-normalizes any raw tag
itself, so de/es/ja/pt-BR finally serve their real localized names and
zh-TW-class variants resolve into their family instead of English. The
dns-leak proxy forwards ?lang untouched — its upstream owns resolution —
retiring the odd zh-CN default for langless calls. Net effect: no ?lang
allow-list anywhere, and a new UI locale is a front-end-only change.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ight channels

SECURITY.md used to ask for vulnerability reports in public issues while
requesting no public disclosure in the same breath; it now points at
GitHub's private advisory form, states the latest-release-only support
policy and scopes out non-code findings. The Code of Conduct's
enforcement contact — a literal blank since the file landed — now uses
the same private form. New SUPPORT.md and an issue-chooser config send
questions to Discussions Q&A and docs before they become issues, and
CONTRIBUTING drops its stale "questions also go to Issues" line.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The contributor docs read as if the project and the hosted site were one
thing; a "(demo: …)" tag makes clear IPCheck.ing is one deployment of a
toolbox anyone can self-host.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@pull pull Bot locked and limited conversation to collaborators Aug 22, 2026
@pull pull Bot added the ⤵️ pull label Aug 22, 2026
@pull
pull Bot merged commit c92c136 into Cosr-Backup:main Aug 22, 2026
1 check passed
@4everland
4everland Bot requested a deployment to production August 22, 2026 18:27 Abandoned

This branch had an error being deployed

1 failed deployment
production — c92c1368 Deployed Aug 22, 2026 by pull[bot] via Push README to Docker Hub #13
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant