Japanese in the language picker: the full catalog, counters, unit words joined
to their numbers (5分前, 1時間5分), lower-case HUD units as in Chinese, and the
CJK label rules plus strict line breaking for Japanese. Based on translations
by @abiyeenzo (#913).
Co-authored-by: Enzo Abyie <[email protected]>
German in the language picker: the full catalog, neutral infinitive wording,
one/other plurals and the de style guide. Directions keep German nouns
capitalized, and layer names break at word hyphens but not inside codes.
Based on translations by @abiyeenzo (#908).
Co-authored-by: Enzo Abyie <[email protected]>
French in the language picker: the full catalog, French typography, one/many/
other plurals and the fr style guide. Voice plan steps join through a catalog
string so French spaces its colon, and with nine languages the picker shows
its search field. Based on the translation by @abiyeenzo (#907), checked
against @meirm's French catalog (#312).
Co-authored-by: Enzo Abyie <[email protected]>
Co-authored-by: Meir Michanie <[email protected]>
Brazilian Portuguese in the language picker: 2732 strings, Portuguese plural
forms and the pt style guide. The CCTV summary line names its calibration,
source and view in the page language, markup can give text a context with
data-i18n-context, and the cyclone source errors are translated. Based on
translations by @abiyeenzo (#909).
Co-authored-by: Enzo Abyie <[email protected]>
Italian in the language picker: 2730 strings, Italian plural forms, labels
shortened to fit the panels, and the it style guide. Based on the translation
by @abiyeenzo (#912).
Co-authored-by: Enzo Abyie <[email protected]>
Ukrainian in the language picker: 2730 strings, four plural forms, Cyrillic
HUD units and the uk style guide. Based on the Ukrainian translation by
@meirm (#312).
Co-authored-by: Meir Michanie <[email protected]>
Co-authored-by: Meir Michanie <[email protected]>
Localize a bootstrap shot title without a source pack only when the
Nepal pack marker binds that title to the shot's id, so an operator
shot renamed to a bootstrap title in the built-in scene stays as typed.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Localize a legacy Nepal base shot only when the applied pack marker binds
that title to this exact shot id, so a user shot renamed to a built-in
title stays as typed in every locale.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
A pack marker with shotBindings now vouches only for the shot bound to a
legacy bootstrap title, so a user shot typed with the same title keeps its
text instead of showing the localized built-in name.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Localize a pack shot title only for the shot the pack marker binds to that
title, so an operator's shot named like a pack shot shows as typed. Markers
saved without shotBindings keep the title-only check.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Japanese has no letter case, so the HUD summary keeps units as the
catalog writes them (13 km), matching the cockpit and the ja HUD CSS.
The ja '{value} KM', '{value} KM/H' and '{value} KM/S' strings are now
lower-case like zh-CN.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Conflicts in es, ru, zh-CN and zh-Hant catalogs: both sides appended keys
at the end (cyclone errors from this branch, routing refusals from main);
kept both.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Apply the accepted findings from the fourth three-model French review:
« Fermez d'abord cet outil » in the pointer-busy notices, the colon form
« Outil actif : {name} » for the directions notice, « FOV CONSTRUCTEUR »,
« RAPPORT » for the USGS trigger chip, « CONTEXTE GLOBAL DÉSACTIVÉ », and
wording fixes for the radio, recent imagery, bundle preview and draw label
strings. The guide gains glossary rows for the datasheet FOV and for
rapport versus relevé.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Apply the accepted findings from the third three-model French review:
tool-name agreement (« Outil actif : {name} »), elision before ADS-B,
« GORGE AVAL », « CLASSIQUES », « EN SURVOL », one name for the VIIRS
daily overview, U+202F thousands separator, and wording fixes for the
scene editor, directions, radio tuner and status strings.
The CCTV HUD summary now shows its CAL badge, source kind and view band
through existing catalog entries, so French reads « CAL ESTIM. INITIALE ·
SRC AMONT · CONTEXTE RUE »; English output and unknown codes are
unchanged. presentation.js matches the pt branch's round-3 version byte
for byte, so the two branches merge cleanly.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Catalog fixes from the third review round: booster flight count
({count}回目の飛行), 晴れ for PARTLY CLOUDY, 配信元 for upstream,
部分的 for the PARTIAL feed state, または between provider names,
POS kept as a HUD code, product names in their own case (YouTube,
Facebook, Radio Browser, ChatGPT OAuth, Googleストリートビュー), Esc,
bracketed button names, en-dash ranges, 土砂ダム湖 for both lake
labels and smaller wording fixes. Guide: range rule and new glossary
rows.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Three-model review (astra, sol, fable), round 3: 17 of 18 findings
applied (some in own wording, one in part); "Missões espac." rejected.
- pt: layer cards «{label}: camada ativada/desativada», pointer and
Directions toasts name «A ferramenta "{owner}"», counters after a
colon where the count can be 1, traffic «sem dados de fluxo» and
«Fluxo: {percent}% cob», «limite de requisições atingido», FECHAR,
ANT., PREDEF. VISUAIS, quoted "Nível da rua", infinitive tooltips,
and more (see docs/translations/pt.md).
- CCTV summary line localizes its CAL, SRC and CONTEXT values through
existing catalog keys (all locales); codes stay underneath.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Catalog fixes from the second review round (squawk 7600/7700 names,
transit occupancy, radio category, cyclone advisory wording, Orbital Watch,
validation and hint texts), cockpit distances keep "km" in Japanese as in
Chinese, the CCTV context line uses the translated view band, and the
Japanese layer status line no longer splits "1分以内".
Co-Authored-By: Claude Opus 5.5 <[email protected]>
- Meaning fixes: the radio link opens the broadcaster's website
(SENDER-WEBSITE), a straight lane is «geradeaus führend», not the middle
one, IDLE is INAKTIV (BEREIT is READY), the Gemini errors name the send
queue, traffic percent is live coverage (Live-Abdeckung), the voice radius
is measured from the Bildmitte, the AIS voice error names the Live-Schiffe
layer, and the Bhote landslide is «Erdrutsch» throughout (not «Abbruch»).
- Number-neutral status lines for feed and layer lists, and a payload count
line that also reads correctly for +1.
- Retry wording follows the glossary: «neue Versuche in größeren Abständen».
- Weather history lines are shorter and fit the collapsed row: «Frame fehlt;
letzter Stand bleibt erhalten», «Kein Frame in den {gap} min bis {time}»
(the gap only looks back from the target time).
- Shorter search placeholder «Ort suchen...», which was clipped.
- Smaller wording: Himmelsring, Lagebild-HUD, SCHLEPPVERBAND, Minimum Fuel
(Treibstoff knapp), Bloom / Leuchten, DOWNRANGE GESCHÄTZT, Places-Kontext,
MELDUNG, Rückflug zur Weltübersicht, REALE BILDDATEN and others.
- Glossary and routing notes updated.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Three-model review (astra, sol, fable), round 2: 29 of 30 findings
applied, one of them in part.
- pt: FIRMS «mais recente há», CCTV «cruzamentos», degraded radio
directory, «{layers}: ativação recente» for any layer list, «Sem
imagem», NIVELADO, AJUSTA-SE, quoted Provider Settings, V/S kept on
the ADS-B card, no-break space in «(24 h)» / «(30 d)», and more
(see docs/translations/pt.md).
- Malformed cyclone snapshot is now a catalog message (all locales).
- Markup supports data-i18n-context; the radio STATION TAG option uses
"radio tag|All", so it no longer flips gender when the list loads.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Three-model review (astra, sol, Fable), round 1:
- Meaning fixes: post-tropical cyclone, partly cloudy, upload-date basis,
ground track (対地針路), spec FOV, voice credentials, Activate → 押す,
bikeshare counts, NHC/CPHC empty state, absence caveat, regional-news
empty state, route steps (件の案内), minimum fuel, microphone access.
- Consistent terms: 範囲 for WINDOW, カバー範囲 for coverage, 封じ込め率
for fire containment, サイクロン for storms, 交通流 for TomTom flow,
シグナル tab, インポート / エクスポート for projects and presets,
射撃場 for the RANGE class, か所 for sites, full-width colons.
- Short forms where the re-shoot showed a wrap: エクスポート (Scenes),
提供元で操作 (embeds), 該当施設 (Contacts).
- cjk.css: the Recent Imagery slot line wraps at its separators in
Japanese, never inside プレビュー.
- Glossary in docs/translations/ja.md updated to match.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Three-model review (astra, sol, fable): 42 findings accepted, 3 deferred
(unmarked cyclone errors and the Chinese locale descriptors need new keys
in every catalog). The USGS callout now reads as an action (APRI LA FONTE)
because it opens the report. Layer, tool and card-title sentences agree with
any feature name («Il livello {layer} è attivo», «Lo strumento {name}»,
«{label}: attivato»). The store write error is grammatical for both
values. RADO/BILANCIATO agree with DENSO. Also fixes the meaning of
viewpoint, fire incident, trigger record, transit report, FIRMS cell age,
drizzle, widebody and fast-jet classes; Dissolvenza and CH replace the odd
abbreviations; cause/hint dashes become colons.
Fixes the Nepal scene showing shots 01-08 in English in every locale:
displayShotTitle() now also trusts the bootstrap keyframes of the append
recipe that upgrades a built-in scene (src/scenes/recipes.js, with a test).
Co-Authored-By: Claude Opus 5.5 <[email protected]>
- Meaning fixes: playback connects to the broadcaster when it starts, browser
keys are restricted at the provider, clearing data layers switches them off
(ausschalten, not löschen), cockpit inputs are Quellen, Electronic is
Elektronische Musik, AIS types name vessels (SEGLER, LOTSENBOOT,
SANITÄTSDIENST, SCHNELLSCHIFF), contiguous US excludes Alaska/Hawaii,
wind and weather readings are model values, nearest frames are nearest in
time, cloud imagery and the brightness filter say what they are.
- NHC/CPHC advisories are Lageberichte, not Warnungen; cyclone strings use
Wirbelsturm throughout. Glossary updated.
- Grammar: " oder " keeps its space as a join separator, "{x} konnte nicht
sauber beendet werden", Then: no longer doubles Dann, scene save reasons
continue the sentence in lower case, neutral "Warten auf".
- Spacing between numbers and units in the remaining nine readouts.
- Reroute tooltip: German mode nouns keep their capital (Auto, Fahrrad).
- Built-in Nepal shot titles localize in every language: the legacy scene
upgrade rebuilds its base shots without sourcePackId, so the pack's own
shots in the scene now vouch for them.
- Layout: the layer status column no longer shrinks under a wide chip, and
a mixed-case compound (ALPR-Kameras) may break at its hyphen; only capital
codes (ADS-B, RTL-SDR) stay unbroken. WIRD AKTIVIERT overlapped the name.
The Bhote step meta line may take a third line.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Three-model review (astra, sol, fable): 51 of 52 findings applied, two
of them in part.
- pt: AQHI bands as health risk, NAVIO-TANQUE, CANDIDATO DO GOOGLE
PLACES, Provider Settings agreement, retry/feed-down wording,
NOTÍCIAS DA ÁREA (fits the briefing kicker), detection modes in the
masculine, GS and REC kept on the HUD, EXPORTAR PREDEF., prepositions
before times, and more (see docs/translations/pt.md).
- Cyclone request timeout is now a catalog message (all locales).
- Built-in Nepal base shots written by the legacy pack bootstrap now
show their localized titles: displayShotTitle also trusts the legacy
keyframes of an append pack the scene has applied.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
- Fix meaning errors flagged by the three-model review: downed aircraft
(Аварія літака), fast jet, the straight-ahead lane, road traffic,
pilot vessel, nearby contact counts, the low-accuracy score.
- Terms: CRS/TRK → ШК (шляховий кут), ascent → виведення, booster
flight → ПОЛІТ, session → сеанс, sequence → послідовність, place
search → пошук місця, CCTV pitch → нахил, mapped sites →
нанесені обʼєкти everywhere; glossary updated.
- Grammar: case agreement in the radio aria label and the key-store
message, «прицілу», у/в euphony, payload count after a colon,
FIRES as ПОЖ. so any count reads correctly.
- The cockpit current-style button widens to fit ЗВИЧАЙНИЙ; other
languages keep the 58px minimum.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Three-model review (astra, sol, fable): 53 findings accepted, 14 rejected
or deferred. Fixes the meaning of "Downed aircraft", "Compilation", the
satellite ground-distance caveat and the browser-key restriction note;
agreement for Full, Provider Settings and Space Missions; fork directions
that compose with every modifier; a radio aria label that reads as a
phrase; imperative tooltips. Shortens the labels that clipped: ESP. A/B,
search placeholder, QUOTA · FT, PREC, Esri imagery note.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Apply the accepted findings from the three-model French review: ground
track reads « route », wildfire containment « circonscrit », downrange
« distance au sol », tankers « navire-citerne », plus wording fixes for
lanes, timestamps, wind sector, radio, CCTV and voice strings.
Shots rebuilt by a pack's legacy bootstrap carry no sourcePackId, so the
first Nepal shot titles stayed English; the scene's applied-pack marker
now vouches for the pack's required titles.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
- Layer rows read «не оновлювалося» for a feed that never updated, not
«ніколи».
- The dock voice toggle label fits on one line (ПЕРЕМК.), the cockpit
briefing title (НОВИНИ РЕГІОНУ) no longer truncates, Celestial is «Небо».
- No-break spaces keep «24 год», «30 дн» and coordinate abbreviations
(пн. ш., зх. д.) on one line.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
- Labels that ran out of their buttons: EXPORT / EXPORT A stay English
(EXPORTIEREN was cut to EXPORTI…), the imagery mode reads VGL. KARTE,
the scene run log PROTOKOLL (it broke as LAUFPROTOKOL/L), the dock voice
status SPRACHE N. V., and the Esri imagery note fits its line.
- The cyclone layer is Sturmwarnungen (no hyphenated break in the layer
list); Erdbeben (24 h) matches the other hour readouts; retry countdowns
get a space before s; the Mapillary hint names the Straßenebene layer.
- The cyclone source's timeout and malformed-snapshot errors were plain
English in every language: mark them like the wind source does and
translate them in de, es, ru, zh-CN and zh-Hant.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
- Shorter layer and segment labels that wrapped or broke mid-word in the
narrow panels: ALPRカメラ, 宇宙ミッション 30日, 地図と比較, 対象.
- Window readouts put the value after the label (空/海ウィンドウ 250 km),
so a unit never runs into Japanese text.
- 情勢図 for the GhostMaps intel picture; Googleストリートビュー joined like
any Latin product name in the guide.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
cjk.css now covers Japanese as well as Chinese: tight tracking, the 9px
floor on dock voice labels and layer buttons, whole travel-mode and preset
labels, catalog-case units in the HUD and the taller Recent Imagery cards.
Japanese also gets strict line breaking (no line starts with ー or a small
kana) and unbroken segment labels (すべて, 平面). Chinese rendering is
unchanged: :is(:lang(zh), :lang(ja)) keeps the :lang(zh) specificity.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
- The cockpit news kicker no longer cuts off: regional news reads «notícias
locais», the cycle button «CICLO DESLIG.», the subtitle «ÚLTIMAS NOTÍCIAS
DO LOCAL».
- Contact header fits in two lines («AR/MAR 250 KM · INSTALAÇÕES: ATÉ
100 KM»); ground speed reads KT like the rest of the HUD.
- A space between a number and s/h/d («nova tentativa em 30 s», «há 5 h»),
and «aproxime-se de uma rua» for zoom-to-street hints.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Shorter wording where the French text ran out of its button, chip or
collapsed card at 1600×1100: the DATA LAYERS launcher (COUCHES), Recent
Imagery buttons and hints (CETTE VUE, VS CARTE, EXP. A), the ENABLING /
DISABLING layer chip, the voice detail line and the location search
placeholder. Also the CCTV range readout gets a space before m, the radio
privacy note reads naturally, and the cockpit air/sea window is shorter.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
From the screenshot review: the Recent Imagery buttons (SELEZIONA, USA
VISTA, VS MAPPA BASE) no longer clip or wrap, the layer state chip reads
AVVIO / ARRESTO so a layer name keeps two lines, the cockpit contact header
fits two lines (ARIA/MARE, SITI), and the Bhote Koshi play buttons fit on one
line (AVVIA). The post-event year follows the label, as the reference one does.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
- Register fr: catalog in CATALOGS, LOCALES and LOCALE_NAMES (Français);
any fr-* browser tag (fr-CA, fr-BE, fr-CH) maps to it.
- package-boundaries.json lists fr.json next to the other catalogs.
- Picker and locale tests cover the new row and its local names.
- docs/translations/fr.md: style, typography, plurals and glossary;
TRANSLATORS.md and CURRENT-STATE.md list French as shipped.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
- Translate the remaining 1,865 strings: aviation, maritime (AIS), weather
and remote-sensing terms, radio, routing, scenes, voice and setup.
- Review the 862 entries from #907: LIVE becomes DIRECT / en direct, stale
becomes obsolète, FIRMS detections are feux actifs, replay is rejeu, the
AIS ship types use the French terms (PILOTINE, SERVITUDE, POLICE), keys
stay Space / Esc / Enter as docs/TRANSLATORS.md asks, and NEXT/PREVIOUS
chips match PREV (SUIV. / PRÉC.).
- French typography: narrow no-break space before : ; ? ! and %, inside
« », and … for ellipsis; plural entries get the many form (exact
millions, "de").
- same-as-english.json: codes, units, genre and product names that French
spells the same as English.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
- Register ja: CATALOGS, LOCALES, LOCALE_NAMES (日本語) and the package
boundaries; ja and ja-JP tags select it.
- Japanese unit words follow the number directly, as in the catalog:
formatQuantity writes 5分 and 1時間5分 (km and kt keep the space), and
formatRelativeTime drops the space CLDR puts in 5 分前.
- Tests: locale tags, picker order, Intl output, durations and the
ramp/exit/lane wording in Japanese.
- docs/translations/ja.md: style, units, plurals and glossary; ja added to
TRANSLATORS.md and CURRENT-STATE.md.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
- Translate the 1,875 strings #913 did not cover (2,727 in all), for a
tactical HUD: aviation, maritime, weather and imagery terms, counters
next to numbers (機, 隻, 基, 件), year-first dates.
- Review the contributor entries: full-width punctuation ():? and …,
no space between Japanese and Latin, one katakana form per term
(ブラウザー, ビューアー), and fixes where the meaning was off:
NO PLACE LEFT BEHIND, LEVEL (horizon), CURATED / RAW PRIOR (CCTV
calibration), STALE (更新遅延, not 古い), rocket stage (段), SAR vessels,
T minus, POWER UP.
- List the codes, units and product names that stay as in English.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
- Translate the remaining 1,895 strings for the current UI (Bhote Koshi
event, weather, imagery, street level, directions, SDR, voice, scenes,
import) and review meirm's 832 entries from #312: 134 edited for
Ukrainian HUD terms (КУРС/ПЕЛ./ШЛЯХ/ПРИЗН., Л/П, ОНЛАЙН for LIVE,
Cyrillic units КМ, ВУЗ, ФТ, МВт), vessel types, number agreement and
the ʼ apostrophe throughout.
- Register uk: catalog, LOCALES, LOCALE_NAMES (Українська), package
boundaries, same-as-English codes; picker and plural tests cover the
four Ukrainian forms.
- docs/translations/uk.md: style, plurals, units and glossary.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
- Translate the remaining 1,868 strings in a neutral infinitive style (no
Sie/du), with German compounds, decimal commas and CLDR one/other plurals.
- Review the #908 entries: knots are kn everywhere, the avionics codes BRG,
CRS and DEST stay English like HDG and SPD, expand/collapse is
ausklappen/einklappen, the radio toggle reads EIN/AUS, density SPARSE is
DÜNN, the Thermal style is Wärmebild, German quotes in the shot prompt.
- Register de: catalog, LOCALES, LOCALE_NAMES (Deutsch), package boundaries,
same-as-english (codes, product names, music genres, units).
- Tests: picker order and keyboard model with Deutsch, de/de-AT/de_CH
normalization, browser de-DE resolves to German.
- docs/translations/de.md: style, plurals, units and glossary; TRANSLATORS.md
and CURRENT-STATE.md list German.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
- Translate the remaining 1,868 strings (pt-BR, as in #909) and review the
contributor entries: HUD codes BRG/SPD/RANGE stay as in the other
languages, sentence-case layer and scene names, Space key named as on the
keyboard, short PREV/NEXT/ON/OFF chips, and the CLDR many form (exact
millions take «de») on every plural.
- Register pt: any pt tag (pt-BR, pt-PT) maps to it; the picker shows
«Português (Brasil)».
- Codes, units and product names identical to English go to
same-as-english.json.
- docs/translations/pt.md: style, plurals, units and glossary.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
- Register it: catalog in index.js, LOCALES and LOCALE_NAMES (Italiano);
it-IT, it-CH and other it tags select it.
- List it.json with the other catalogs in package-boundaries.json.
- docs/translations/it.md: style, plurals and glossary; Italian in the
shipped lists of TRANSLATORS.md and CURRENT-STATE.md.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
- Translate the 1,868 strings #912 does not cover: directions, weather and
wind, cyclones, Recent Imagery, Street Level, GNSS, the Bhote Koshi
reconstruction, scenes and sharing, local SDR, voice and key setup.
- Add the Italian `many` plural form (exact millions) to every plural entry.
- Review the #912 entries: fix RIMORCHIATORE, POWER UP (ACCENDI), DENSO,
minutes as "min", sentence case for layer and scene names, keyboard keys
kept in English (Space, Enter), and the SIG/NOTIZIE/LOCALE tab names.
- List codes, product names and words Italian spells as English in
same-as-english.json.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Correct 年曆史 → 年歷史, 下遊 → 下游, 並道 → 併道 and 發佈 → 發布,
and list these fixes for future reconversions from zh-CN.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Rebuild the zh-Hant catalog from zh-CN with OpenCC s2tw glyph
conversion, so wording and terminology match zh-CN and only the
script differs. Drop Taiwan-specific vocabulary and wording notes;
zh-TW/HK/MO browser tags still select zh-Hant.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Add a complete Taiwan Traditional Chinese catalog, locale selection,
Chinese readout formatting, translation notes and regression coverage.
Seed translations from #724 and #652 and adapt the zh-CN catalog.
Co-authored-by: caxer <[email protected]>
Co-authored-by: tbdavid2019 <[email protected]>
Co-authored-by: Enzo Abyie <[email protected]>
Co-authored-by: EDIT-Aeterna <[email protected]>
i18n: Simplified Chinese (zh-CN)
Add a complete Simplified Chinese translation and language picker support.
Improve Chinese typography, date formatting, and localized readouts.
Include translation guidelines and regression tests.
Based on translations by abiyeenzo (#914) and EDIT-Aeterna (#979).
Co-authored-by: German Khokhlov <[email protected]>
Co-authored-by: Enzo Abyie <[email protected]>
Co-authored-by: EDIT-Aeterna <[email protected]>