Commit Graph
1252 Commits
Author SHA1 Message Date
Said Turksever db2744ca3b Merge remote-tracking branch 'upstream/main' into pr1405-fix 2026-10-28 15:39:16 +00:00
Said Turksever f5e65fbf9e Merge remote-tracking branch 'upstream/main' into pr871-fix 2026-10-28 15:32:26 +00:00
Said Turksever fec7ec07cb Merge branch 'main' into codex/fix-seek-layer-state 2026-10-28 15:31:24 +00:00
Said Turksever 6fa4235305 Merge branch 'main' into upstream/perimeters-stale 2026-10-28 15:18:40 +00:00
Said Turksever b6c9c48cf0 Merge branch 'main' into codex/fix-seek-layer-state 2026-10-28 15:18:02 +00:00
Said Turksever e6d2babea0 fix(vessels): pin the idle-render contract and move the entry to a fragment
- The trailing visibility frame uses the layer's injectable runtime timer and
  is cancelled by resetState as well as disable and destroy.
- An empty-feed regular pass records the camera pose, so later in-cadence
  frames do not keep scheduling trailing frames.
- New renderGovernor.test.mjs: a parked camera schedules nothing, a stopped
  camera gets exactly one trailing frame and no self-wake, a forced pass
  requests its frame, destroy cancels the timer.
- The CHANGELOG entry moves to changelog.d/871-vessels-idle-render.md; docs
  say the hold also covers vessels dimmed under a live target.
2026-10-28 15:15:57 +00:00
Said Turksever 87133e8dbf Merge remote-tracking branch 'upstream/main' into pr871-fix
# Conflicts:
#	CHANGELOG.md
2026-10-28 15:15:50 +00:00
Said Turksever f7c058b97d Merge branch 'main' into fix/i18n-layer-errors-in-data 2026-10-28 15:09:37 +00:00
German KhokhlovandClaude Opus 5.5 b521f6a1fa i18n(de): apply review round 2
- 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]>
2026-10-28 18:21:14 +04:00
Said Turksever 69c5b32598 fix(traffic): date the STALE row by the oldest cached tile; add zh-Hant string 2026-10-28 14:10:18 +00:00
Said Turksever 7788168d73 fix(geocode): prefer the settlement when a POI also fits the region
When several candidates fit a "place, region" query, take a settlement or
administrative area over a POI of the same name, so a cafe called "Paris"
in Lyon cannot win "Paris, France" from the nearby pass.

Tests: region queries without a camera bias, whole-word and every-word
region matching, city and county regions, the nearby whole-name answer when
the unbiased request fails, and the settlement preference. The new tests sit
with the other Paris, Texas tests. The station fixture uses its real city.
CURRENT-STATE now describes the order the code applies.
2026-10-28 14:09:56 +00:00
Said Turksever c1820aea49 fix(terrain): end retries early on a long Retry-After; cover the 429 pause
A Retry-After longer than the 10 s retry budget used to sleep the whole
budget out and then give up, so the proxy's 429 pause started 10 s late
and every new-point poll in that window still went upstream and logged.
The retry loop now stops at once in that case.

Tests: the retry loop no longer sleeps for an unreachable Retry-After;
fully cached points, including stale ones, are served during the pause
with no upstream call; a 503 does not pause; a shorter concurrent
Retry-After never cuts the pause short. CURRENT-STATE now says which
requests are still served and which log.
2026-10-28 14:09:12 +00:00
Said Turksever 5d5e6c6845 Merge remote-tracking branch 'upstream/main' into pr1014 2026-10-28 14:06:44 +00:00
Said Turksever 9659f38fe6 Merge remote-tracking branch 'upstream/main' into pr1405-fix 2026-10-28 14:06:40 +00:00
Said Turksever 11aad05dc9 Merge remote-tracking branch 'upstream/main' into pr1209-merge 2026-10-28 14:05:40 +00:00
Said Turksever d595e81edf Merge remote-tracking branch 'upstream/main' into pr1344 2026-10-28 14:04:56 +00:00
Said Turksever a75534e4d3 Merge remote-tracking branch 'upstream/main' into pr1402-merge 2026-10-28 14:01:42 +00:00
Said Turksever 81680c5a15 Merge remote-tracking branch 'upstream/main' into pr1401-review 2026-10-28 14:01:33 +00:00
German KhokhlovandClaude Opus 5.5 858ce827e5 i18n(pt): apply review round 2
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]>
2026-10-28 17:57:51 +04:00
German KhokhlovandClaude Opus 5.5 e87001d0db i18n(fr): apply review round 2
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-28 17:55:20 +04:00
German KhokhlovandClaude Opus 5.5 8ca7f52d19 i18n(ja): apply review round 1
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]>
2026-10-28 17:42:25 +04:00
German KhokhlovandClaude Opus 5.5 4f44a17b44 i18n(ar): apply review round 1
Findings from the astra, sol and fable reviews of the Arabic screenshots:

- Wording: forecast valid time is «عند», not an expiry; acres are آكر, not
  feddans; live layers are «تتبّع … المباشر» (not "direct flights"); the
  straight-ahead lane, turboprop, call sign, reconcile, proximity, retrying,
  count agreement (colon form, fixed counts, ي for compact day ages) and
  smaller fixes. Guide and glossary updated.
- Right to left: the scene editor's JSON fields are LTR; canvas map cards
  draw with LTR geometry and an Arabic face; whiteboard callouts anchor
  inside their cards; HDG/FOV keep their values; the cyclone timestamp no
  longer splits its date; bare-number counters read 01 / 25, translated
  ones say «من».
- Built-in shot titles of the Nepal shot pack's bootstrap shots localize
  (the applied pack vouches for them), in every language.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-28 17:42:24 +04:00
German KhokhlovandClaude Opus 5.5 b96c1dee15 i18n(it): apply review round 2
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]>
2026-10-28 17:41:29 +04:00
German KhokhlovandClaude Opus 5.5 1eb9e06c49 i18n(de): apply review round 1
- 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]>
2026-10-28 17:30:21 +04:00
German KhokhlovandClaude Opus 5.5 3c0c10d3b1 i18n(pt): apply review round 1
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]>
2026-10-28 17:17:23 +04:00
German KhokhlovandClaude Opus 5.5 7a18e0093b i18n(uk): apply review round 1
- 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]>
2026-10-28 17:08:36 +04:00
German KhokhlovandClaude Opus 5.5 5e47a2afbd i18n(it): apply review round 1
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]>
2026-10-28 17:02:55 +04:00
Aditya ac0e124a67 fix(flights): read a 359.6° track as 0° in the voice context, not 360°
The voice context records for a selected flight or military contact
rounded the track without wrapping, so a contact on 359.5° or more was
described to the assistant as heading "360°". Both now wrap after
rounding: 359.6° reads "0°", 359.4° still reads "359°".
2026-10-28 18:11:42 +05:30
German KhokhlovandClaude Opus 5.5 4adb9113bc i18n(fr): apply review round 1
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]>
2026-10-28 16:40:53 +04:00
German KhokhlovandClaude Opus 5.5 d6ecaca957 i18n(ja): fit labels found in the screenshot review
- 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]>
2026-10-28 15:13:52 +04:00
German KhokhlovandClaude Opus 5.5 d95bffb5fd i18n(fr): fit French labels found in the screenshot review
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]>
2026-10-28 15:09:45 +04:00
Aditya c6f437ed52 fix(traffic): stop a few matched roads reading as "no matches"
The live flow status derived its wording from the rounded coverage
percent, so 1 matched dot among 300 rounded to 0% and read
"SIMULATED ... (no matches)", and 1 simulated dot among 300 rounded to
100% and dropped "Unmatched: simulated". Coverage now stays within 1-99%
whenever both matched and simulated dots are shown.
2026-10-28 15:34:51 +05:30
Aditya e4a964375a fix(annotations): label a 996 m line or route as 1.0 km, not 1000 m
Placed route, arrow and drawn-line labels picked metres before rounding
to ten metres, so anything from 995 m to 1 km read "1000 m", even where
the draw hint for the same line read "1.0 km". The label now rounds
first, then picks the unit, and does the same at the 10 km cut, where
9,960 m read "10.0 km".
2026-10-28 15:34:28 +05:30
Aditya d1bbfdbca5 fix(draw): show a 9,999.6 m² area as 1.0 ha, not 10000 m²
The draw hint picked m², ha or km² from the raw area and then rounded,
so 9,999.5 m² up to a hectare read "10000 m²" and about 999,500 m² up
to a square kilometre read "100.0 ha". It now rounds first, as the line
measure already does.
2026-10-28 15:25:08 +05:30
Aditya c7377362a5 fix(local-adsb): show a decoder feed's GNSS-sourced vertical rate
dump1090-fa and readsb file an aircraft's vertical rate under geom_rate
instead of baro_rate when its source is GNSS. The decoder-feed adapter
read only baro_rate, so those aircraft showed "V/S —" on the Local ADS-B
card. It now falls back to geom_rate; a sent baro_rate still wins.
2026-10-28 15:18:37 +05:30
Aditya 6364817b5b fix(directions): show a 9.96 km route as 10 km, not 10.0 km
routeDistanceText picked one decimal while the raw kilometres were under
10, then rounded them for display, so 9.95 km or more read "10.0 km".
It now picks the unit from the rounded tenth, as it already does at the
metre/kilometre boundary.
2026-10-28 15:16:45 +05:30
Aditya 065d7f4f8b fix(alpr): show a 359.6° camera bearing as 0°, not 360°
The selected ALPR card rounded a mapped camera:direction without
wrapping, so a camera facing 359.5° or more read "DIRECTION 360°". The
rounded bearing now wraps to 0°.
2026-10-28 15:15:16 +05:30
Aditya 182e6ceddd fix(tools): list a split submarine cable once in find_submarine_cables
TeleGeography stores 17 cables (2Africa, Echo, Hawaiki...) as several
features under one id, and the tool made a row per feature, so "Echo"
read "3 submarine cables" and area counts ran high. Rows are now unique
by cable id, and a cable still matches when any of its parts does.
2026-10-28 15:13:15 +05:30
Aditya e244703f08 fix(bikeshare): re-derive a station's missing capacity on every poll
A station whose feed publishes no capacity froze its capacity at the
first status poll's bikes + docks, or at the placeholder 15 when that
poll had no row for it, so later cards read "10 avail · 20 docks · 15
cap" and coloured by the wrong ratio. Each poll now resolves it afresh.
2026-10-28 15:10:57 +05:30
Aditya 812cdf6be7 fix(transit): show a reported 359.6° bearing as hdg 0°, not hdg 360°
The selected-vehicle card rounded the operator's reported bearing without
wrapping, so a GTFS-Realtime vehicle heading 359.5° or more read
"reported hdg 360°". The card now wraps after rounding: 359.6° reads
"reported hdg 0°", 359.4° still reads "reported hdg 359°".
2026-10-28 15:09:27 +05:30
Aditya 940050d4e5 fix(cctv): show a camera facing 359.6° as HDG 0°, not HDG 360°
The CCTV HUD heading token and the camera panel's meta line rounded the
bearing without wrapping, so a camera facing 359.5° or more (a feed
bearing, or a heading calibrated just west of north) read "HDG 360°".
Both now wrap after rounding: 359.6° reads "HDG 0°", 359.4° "HDG 359°".
2026-10-28 15:06:07 +05:30
German KhokhlovandClaude Opus 5.5 33985138ef docs(i18n): Arabic language notes and right-to-left guidance
- docs/translations/ar.md: style, Western digits and direction, units,
  the six plural forms and the glossary.
- TRANSLATORS.md and CURRENT-STATE.md list Arabic and say how a
  right-to-left language mirrors the chrome.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-28 13:28:52 +04:00
German KhokhlovandClaude Opus 5.5 9f71a62d12 i18n(fr): ship French in the language picker
- 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]>
2026-10-28 13:00:14 +04:00
German KhokhlovandClaude Opus 5.5 ed40201481 i18n(ja): ship Japanese
- 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]>
2026-10-28 12:59:32 +04:00
German KhokhlovandClaude Opus 5.5 1146946207 i18n(uk): complete and ship Ukrainian
- 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]>
2026-10-28 12:57:54 +04:00
German KhokhlovandClaude Opus 5.5 dfa7ac98a7 i18n(de): complete and ship German
- 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]>
2026-10-28 12:53:49 +04:00
German KhokhlovandClaude Opus 5.5 8269f0e4e6 i18n(pt): complete and ship Brazilian Portuguese
- 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]>
2026-10-28 12:52:01 +04:00
German KhokhlovandClaude Opus 5.5 c4dfee6e5c i18n(it): ship Italian
- 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]>
2026-10-28 12:51:02 +04:00
German Khokhlov d1ba0a7b8a Merge remote-tracking branch 'origin/main' into codex/hal-646-zh-hant 2026-10-28 11:28:43 +04:00
German KhokhlovandClaude Opus 5.5 982edfd56d i18n: use 公布 in zh-Hant to match 發布
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-28 11:26:52 +04:00