mirror of
https://github.com/bilawalsidhu/gods-eye-view.git
synced 2026-11-04 10:24:02 +00:00
i18n(ja): apply review round 2
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]>
This commit is contained in:
1 parent
8ca7f52d19
commit
cd1f573647
7 files changed
+103
-42
No files matched your search
@@ -17,7 +17,7 @@ Translation source: abiyeenzo (#913).
|
||||
|
||||
## Numbers, units and dates
|
||||
|
||||
- Units: km, m, km/h, m/s, kt, ft, mph, hPa, MW, dB, °, % stay as written, with the English spacing (「250 km」, 「{frp} MW」, 「95 kt」).
|
||||
- Units: km, m, km/h, m/s, kt, ft, mph, hPa, MW, dB, °, % stay as written, with the English spacing (「250 km」, 「{frp} MW」, 「95 kt」). Code-built cockpit distances follow this too (`cockpitUnitCase` skips the HUD upper-casing for ja, as for zh). The cockpit's own speed caption is the HUD code KT, in 対地速度 · KT and under the readout.
|
||||
- Time units are words written straight after the number: 秒, 分, 時間, 日 (「5分前」, 「{count}時間」, 「1時間5分」). `formatQuantity` and `formatRelativeTime` drop the space for Japanese unit words, so code-built values match the catalog.
|
||||
- Counters follow the thing counted: 機 (aircraft), 隻 (ships), 基 (satellites), 台 (cameras, vehicles), 局 (stations), 件 (records, results, events), か所 (sites), 個 (generic). Prefer a counter to a bare number.
|
||||
- Dates come from `Intl` and read year first: 2026年8月26日. Coordinates in prose are 北緯 / 東経; HUD hemisphere letters stay N, S, E, W.
|
||||
@@ -62,12 +62,15 @@ Translation source: abiyeenzo (#913).
|
||||
| track (TRK, direction over the ground) | 対地針路 |
|
||||
| HDG / BRG / CRS / FOV | そのまま(HUDコード) |
|
||||
| squawk | スコーク |
|
||||
| radio failure / emergency (7600 / 7700) | 通信機故障 / 緊急事態 |
|
||||
| map heading / North up | 方位 / 北を上に |
|
||||
| Street Level / Street View (Google) | ストリートレベル / ストリートビュー |
|
||||
| Recent Imagery | 最近の衛星画像 |
|
||||
| Global Context / Context (panel) | グローバルコンテキスト / コンテキスト |
|
||||
| radio (station) / tune / seek | ラジオ(局)/ 選局・同調 / シーク |
|
||||
| Public Safety / SAFETY (radio category) | 警察・消防 |
|
||||
| transit / bikeshare | 公共交通 / シェアサイクル |
|
||||
| occupancy: empty / standing room only / crushed | 乗客なし / 立ち乗りのみ / 非常に混雑 |
|
||||
| traffic flow (TomTom) | 交通流 |
|
||||
| Previous / Next | 前へ / 次へ |
|
||||
| SIG / NEWS / LOCAL (briefing tabs) | シグナル / ニュース / ローカル |
|
||||
@@ -76,7 +79,8 @@ Translation source: abiyeenzo (#913).
|
||||
| weather model / forecast lead hours | モデル / 予報時間 |
|
||||
| valid (forecast time) / issued | 対象時刻 / 発表 |
|
||||
| radar reflectivity / lightning density | レーダー反射強度 / 雷密度 |
|
||||
| cyclone, storm (NHC/CPHC) / advisory | サイクロン / 情報(第N報) |
|
||||
| cyclone, storm (NHC/CPHC) / advisory | サイクロン / 情報(第N報); alone: サイクロン情報 |
|
||||
| potential tropical cyclone (NHC PC) | サイクロン化のおそれがある擾乱 |
|
||||
| forecast uncertainty cone | 予報円 |
|
||||
| tropical storm / tropical depression | 熱帯暴風雨 / 熱帯低気圧 |
|
||||
| scene cloud / mosaic / daily overview | シーン雲量 / モザイク / 日次概観 |
|
||||
@@ -97,3 +101,4 @@ Translation source: abiyeenzo (#913).
|
||||
| roundabout / ramp / exit | ロータリー / ランプ / 出口 |
|
||||
| reduced motion | 動きを減らす |
|
||||
| NOT AN ALL-CLEAR | 安全の保証ではありません |
|
||||
| … Watch (scene titles: Earth, Orbital) | 監視(地球監視, 軌道監視) |
|
||||
@@ -0,0 +1,21 @@
|
||||
import test from 'node:test';
|
||||
import assert from 'node:assert/strict';
|
||||
import { setLocale } from './index.js';
|
||||
import {
|
||||
cockpitUnitCase,
|
||||
formatCockpitDistance,
|
||||
} from '../ui/cockpitPresentation.js';
|
||||
|
||||
test('Japanese cockpit distances keep the unit in its own case', () => {
|
||||
try {
|
||||
setLocale('ja');
|
||||
assert.equal(formatCockpitDistance(14000), '14 km');
|
||||
assert.equal(formatCockpitDistance(9500), '9.5 km');
|
||||
assert.equal(cockpitUnitCase('km'), 'km');
|
||||
setLocale('en');
|
||||
assert.equal(formatCockpitDistance(14000), '14 KM');
|
||||
assert.equal(cockpitUnitCase('km'), 'KM');
|
||||
} finally {
|
||||
setLocale('en');
|
||||
}
|
||||
});
|
||||
+35
-35
@@ -38,9 +38,9 @@
|
||||
"Fast jet": "高速ジェット機",
|
||||
"Business jet": "ビジネスジェット",
|
||||
"Drone": "ドローン",
|
||||
"General emergency": "一般緊急事態",
|
||||
"General emergency": "緊急事態",
|
||||
"Unlawful interference": "不法妨害",
|
||||
"Radio failure": "無線故障",
|
||||
"Radio failure": "通信機故障",
|
||||
"Downed aircraft": "墜落機",
|
||||
"Minimum fuel": "ミニマムフューエル",
|
||||
"Lifeguard (medical priority)": "救急飛行(医療優先)",
|
||||
@@ -234,7 +234,7 @@
|
||||
"Overpass timed out": "Overpassがタイムアウトしました",
|
||||
"Overpass could not complete the query": "Overpassがクエリを完了できませんでした",
|
||||
"Map tiles temporarily unavailable": "地図タイルが一時的に利用できません",
|
||||
"Mapped names temporarily unavailable": "地名が一時的に利用できません",
|
||||
"Mapped names temporarily unavailable": "施設名を一時的に取得できません",
|
||||
"Overpass temporarily unavailable": "Overpassが一時的に利用できません",
|
||||
"Retrying mapped sites…": "マップ済み施設を再試行中…",
|
||||
"Fetching mapped sites…": "マップ済み施設を取得中…",
|
||||
@@ -267,7 +267,7 @@
|
||||
"GEO": "GEO",
|
||||
"Geostationary belt — comms and weather, fixed over the equator": "静止軌道帯:通信と気象、赤道上空に固定",
|
||||
"VISUAL": "可視",
|
||||
"Brightest naked-eye objects — CelesTrak visual group": "肉眼で見える最も明るい天体(CelesTrak visualグループ)",
|
||||
"Brightest naked-eye objects — CelesTrak visual group": "肉眼で見える特に明るい衛星(CelesTrak visualグループ)",
|
||||
"COMMS": "通信",
|
||||
"Broadband constellation shell — shown only in DENSE mode": "ブロードバンドコンステレーションのシェル:高密度モードでのみ表示",
|
||||
"FISHING": "漁船",
|
||||
@@ -336,7 +336,7 @@
|
||||
"Awaiting telemetry...": "テレメトリー待機中…",
|
||||
"REC": "REC",
|
||||
"AIS: --": "AIS: --",
|
||||
"N/A": "なし",
|
||||
"N/A": "不明",
|
||||
"{mode} {band} {locality} | {region} | ALT {alt} | WINDOW {window} | SUN {sun}° | ONA {ona}° | {zone}": "{mode} {band} {locality} | {region} | ALT {alt} | 範囲 {window} | SUN {sun}° | ONA {ona}° | {zone}",
|
||||
"NEAR {poi} ({city}) {distance}": "{poi}({city})付近 {distance}",
|
||||
"SECTOR {lat} {lon}": "セクター {lat} {lon}",
|
||||
@@ -502,7 +502,7 @@
|
||||
"AIS vessels": "AIS船舶",
|
||||
"Mapped installations": "マップ済み施設",
|
||||
"syncing {count} city feeds...": "{count}都市のフィードを同期中…",
|
||||
"scanning nearby systems...": "周辺のシステムをスキャン中…",
|
||||
"scanning nearby systems...": "周辺のシェアサイクルを検索中…",
|
||||
"GBFS fetch error": "GBFS取得エラー",
|
||||
"Station {id}": "ステーション {id}",
|
||||
"Station": "ステーション",
|
||||
@@ -519,7 +519,7 @@
|
||||
"SPEC FOV {span}° (CAPABILITY)": "仕様FOV {span}°(対応画角)",
|
||||
"COVERAGE {value}km²": "カバー範囲 {value}km²",
|
||||
"OVERLAP {count} cams": "重複 {count}台",
|
||||
"ISOLATED VIEW": "単独ビュー",
|
||||
"ISOLATED VIEW": "重複なし",
|
||||
"PROJ MONITOR": "投影 モニター",
|
||||
"PROJ OFF": "投影 オフ",
|
||||
"VIEWSHED": "可視域",
|
||||
@@ -530,7 +530,7 @@
|
||||
"Atlantic and eastern/central North Pacific; not worldwide cyclone coverage.": "大西洋と北太平洋東部・中部のみです。全世界のサイクロンを網羅するものではありません。",
|
||||
"Cyclone advisories unavailable": "サイクロン情報を取得できません",
|
||||
"Cyclone data unavailable": "サイクロンデータを取得できません",
|
||||
"Potential tropical cyclone": "潜在的熱帯サイクロン",
|
||||
"Potential tropical cyclone": "サイクロン化のおそれがある擾乱",
|
||||
"Post-tropical cyclone": "熱帯性を失ったサイクロン",
|
||||
"Hurricane": "ハリケーン",
|
||||
"Tropical storm": "熱帯暴風雨",
|
||||
@@ -540,8 +540,8 @@
|
||||
"Track and cone match this advisory": "進路と予報円はこの情報と一致しています",
|
||||
"Track/cone awaiting advisory {number}": "進路/予報円は第{number}報を待機中",
|
||||
"Track/cone unavailable": "進路/予報円を取得できません",
|
||||
"Cached advisory · stale source": "キャッシュの情報 · ソース更新遅延",
|
||||
"Loading advisories…": "情報を読み込み中…",
|
||||
"Cached advisory · stale source": "キャッシュのサイクロン情報 · ソース更新遅延",
|
||||
"Loading advisories…": "サイクロン情報を読み込み中…",
|
||||
"{count} active storms": {
|
||||
"other": "発生中のサイクロン {count}個"
|
||||
},
|
||||
@@ -549,7 +549,7 @@
|
||||
"Maximum sustained wind: {wind} · Pressure: {pressure}": "最大持続風速:{wind} · 気圧:{pressure}",
|
||||
"{name} · {classification} · Advisory {number} · issued {time}": "{name} · {classification} · 第{number}報 · {time}発表",
|
||||
"No active NHC/CPHC systems": "NHC/CPHCが監視中のサイクロンはありません",
|
||||
"Advisories unavailable": "情報を取得できません",
|
||||
"Advisories unavailable": "サイクロン情報を取得できません",
|
||||
"Cyclones · NHC / CPHC": "サイクロン · NHC / CPHC",
|
||||
"Atlantic · E/C Pacific": "大西洋 · 東部/中部太平洋",
|
||||
"{storms} · {name} selected": "{storms} · {name}を選択中",
|
||||
@@ -679,8 +679,8 @@
|
||||
"{distance} · {duration} · {mode} · first {count} turns": "{distance} · {duration} · {mode} · 最初の{count}件の案内",
|
||||
"{distance} · {duration} · {mode}": "{distance} · {duration} · {mode}",
|
||||
"Click the globe to place {endpoint}": "地球をクリックして{endpoint}を配置",
|
||||
"SET B, then click the globe": "Bを設定してから地球をクリック",
|
||||
"SET A, then click the globe": "Aを設定してから地球をクリック",
|
||||
"SET B, then click the globe": "[Bを設定]を押してから地球をクリック",
|
||||
"SET A, then click the globe": "[Aを設定]を押してから地球をクリック",
|
||||
"Step {step} of {total} · then {leg}": "ステップ {step}/{total} · 次に{leg}",
|
||||
"Step {step} of {total}": "ステップ {step}/{total}",
|
||||
"Then: {instruction}": "次:{instruction}",
|
||||
@@ -913,13 +913,13 @@
|
||||
"Under 50% contained": "封じ込め率50%未満",
|
||||
"50–99% contained": "封じ込め率50–99%",
|
||||
"Fully contained": "封じ込め率100%",
|
||||
"Colour shows reported containment. Perimeters are simplified to about 100 m.": "色は報告された封じ込め率を示します。延焼範囲は約100 mに簡略化されています。",
|
||||
"Colour shows reported containment. Perimeters are simplified to about 100 m.": "色は報告された封じ込め率を示します。延焼範囲の輪郭は約100 mの精度で簡略化されています。",
|
||||
"Malformed perimeter snapshot": "延焼範囲スナップショットの形式が不正です",
|
||||
"radio tag|All": "すべて",
|
||||
"News": "ニュース",
|
||||
"Talk": "トーク",
|
||||
"Weather / Emergency": "気象 / 緊急",
|
||||
"Public Safety": "公共安全",
|
||||
"Public Safety": "警察・消防",
|
||||
"Aviation / Marine": "航空 / 海事",
|
||||
"Traffic / Transit": "交通 / 公共交通",
|
||||
"Music": "音楽",
|
||||
@@ -931,7 +931,7 @@
|
||||
"radio|NEWS": "ニュース",
|
||||
"radio|TALK": "トーク",
|
||||
"radio|WEATHER": "気象",
|
||||
"radio|SAFETY": "安全",
|
||||
"radio|SAFETY": "警察・消防",
|
||||
"radio|AIR / SEA": "航空 / 海事",
|
||||
"radio|TRANSIT": "交通",
|
||||
"radio|MUSIC": "音楽",
|
||||
@@ -989,7 +989,7 @@
|
||||
"Box edges must be finite": "範囲の端は有限の値である必要があります",
|
||||
"Longitudes must be within ±180°": "経度は±180°以内である必要があります",
|
||||
"Select one side of the dateline": "日付変更線の片側を選択してください",
|
||||
"Box must enclose an area": "範囲は面積を囲む必要があります",
|
||||
"Box must enclose an area": "幅と高さのある範囲を選択してください",
|
||||
"Add the full Starlink broadband shell (thousands of extra points)": "Starlinkブロードバンドシェル全体を追加(数千の追加ポイント)",
|
||||
"Loading the Starlink shell…": "Starlinkシェルを読み込み中…",
|
||||
"Starlink {detail} — click to retry": "Starlink {detail}:クリックで再試行",
|
||||
@@ -1094,11 +1094,11 @@
|
||||
"OpenFreeMap tiles rate-limited": "OpenFreeMapタイルがレート制限中",
|
||||
"OpenFreeMap tiles timed out": "OpenFreeMapタイルがタイムアウトしました",
|
||||
"OpenFreeMap tiles unavailable": "OpenFreeMapタイルを利用できません",
|
||||
"occupancy|empty": "空車",
|
||||
"occupancy|empty": "乗客なし",
|
||||
"occupancy|many seats available": "空席多数",
|
||||
"occupancy|few seats available": "空席わずか",
|
||||
"occupancy|standing room only": "立ち席のみ",
|
||||
"occupancy|crushed standing room only": "満員に近い立ち席のみ",
|
||||
"occupancy|standing room only": "立ち乗りのみ",
|
||||
"occupancy|crushed standing room only": "非常に混雑",
|
||||
"occupancy|full": "満員",
|
||||
"occupancy|not accepting passengers": "乗車不可",
|
||||
"occupancy|not boardable": "乗車できません",
|
||||
@@ -1111,7 +1111,7 @@
|
||||
"reported {speed} km/h": "報告速度 {speed} km/h",
|
||||
"reported hdg {heading}°": "報告方位 {heading}°",
|
||||
"Last report: stopped at stop {stop}": "最終報告:停留所{stop}に停車中",
|
||||
"Last report: arriving at stop {stop}": "最終報告:停留所{stop}に到着中",
|
||||
"Last report: arriving at stop {stop}": "最終報告:停留所{stop}に接近中",
|
||||
"Last report: next stop {stop}": "最終報告:次の停留所{stop}",
|
||||
"Shown at street level · depth not in the feed": "地表の高さで表示 · フィードに深さ情報なし",
|
||||
"Reported {seconds} s ago": "{seconds}秒前に報告",
|
||||
@@ -1379,7 +1379,7 @@
|
||||
"Bhote Koshi Evidence Sequence": "Bhote Koshi証拠シーケンス",
|
||||
"Nepal Flood Incident": "ネパール洪水インシデント",
|
||||
"Global Flights Radar": "グローバル航空レーダー",
|
||||
"Orbital Watch": "軌道ウォッチ",
|
||||
"Orbital Watch": "軌道監視",
|
||||
"Thermal Threat Board": "熱源脅威ボード",
|
||||
"City Overload": "シティオーバーロード",
|
||||
"Omniscience Pullback": "オムニサイエンス・プルバック",
|
||||
@@ -1498,7 +1498,7 @@
|
||||
"WHOT/BHOT": "WHOT/BHOT",
|
||||
"Ironbow": "Ironbow",
|
||||
"unsaved CCTV calibration": "未保存のCCTVキャリブレーション",
|
||||
"the open cockpit": "開いているコックピット",
|
||||
"the open cockpit": "表示中のコックピット",
|
||||
"Switching language reloads the page. This will be lost: {items}. Switch anyway?": "言語を切り替えるとページが再読み込みされます。次の内容は失われます:{items}。切り替えますか?",
|
||||
"VISUAL PRESETS": "ビジュアルプリセット",
|
||||
"LOCATION": "位置",
|
||||
@@ -1653,7 +1653,7 @@
|
||||
"Noir": "ノワール",
|
||||
"Snow": "雪",
|
||||
"Current cockpit vision style: {style}. Activate for next style.": "現在のコックピットビジョンスタイル:{style}。押すと次のスタイルに切り替わります。",
|
||||
"Current style: {style} — click for next": "現在のスタイル:{style} — クリックで次へ",
|
||||
"Current style: {style} — click for next": "現在のスタイル:{style}。クリックで次へ",
|
||||
"Collapse Contact panel": "コンタクトパネルを折りたたむ",
|
||||
"Expand Contact panel": "コンタクトパネルを展開",
|
||||
"Collapse contact panel": "コンタクトパネルを折りたたむ",
|
||||
@@ -1730,10 +1730,10 @@
|
||||
"Some KML content was left out.": "KMLの一部の内容は読み込まれませんでした。",
|
||||
"Press on the ground, not the sky": "空ではなく地表を押してください",
|
||||
"Drag to size the box": "ドラッグして範囲の大きさを決めてください",
|
||||
"light {source} to use your {name} key": "{source}をオンにして{name}キーを使用",
|
||||
"light {source} to use your {name} key": "{source}をオンにして{name}キーを使う",
|
||||
"light {source}": "{source}をオンにする",
|
||||
", or ": "、または",
|
||||
"{requirement}, or {offer}": "{requirement}。または、{offer}",
|
||||
", or ": "か、",
|
||||
"{requirement}, or {offer}": "{requirement}。または{offer}",
|
||||
"Live Flights": "ライブフライト",
|
||||
"Military Flights": "軍用機",
|
||||
"Earthquakes (24h)": "地震(24時間)",
|
||||
@@ -1983,7 +1983,7 @@
|
||||
"Select a box or use the view": "範囲を選択するか、現在のビューを使用してください",
|
||||
"Searching the last 30 days": "過去30日間を検索中",
|
||||
"No days to show for this box": "この範囲で表示できる日がありません",
|
||||
"Drag the divider · SWAP trades sides": "境界線をドラッグ · 入れ替えで左右を交換",
|
||||
"Drag the divider · SWAP trades sides": "境界線をドラッグ · [入れ替え]で左右を交換",
|
||||
"← → preview · A or B pins the focused day": "← → でプレビュー · AまたはBで選択中の日を固定",
|
||||
"← → preview the other side · A or B pins it": "← → で反対側をプレビュー · AまたはBで固定",
|
||||
"S on another day replaces it · × unpins": "別の日でSを押すと置き換え · ×で固定を解除",
|
||||
@@ -2101,7 +2101,7 @@
|
||||
"OVERPASS TIMED OUT": "Overpassがタイムアウト",
|
||||
"OVERPASS COULD NOT COMPLETE THE QUERY": "Overpassがクエリを完了できません",
|
||||
"MAP TILES TEMPORARILY UNAVAILABLE": "地図タイルが一時的に利用不可",
|
||||
"MAPPED NAMES TEMPORARILY UNAVAILABLE": "地名が一時的に利用不可",
|
||||
"MAPPED NAMES TEMPORARILY UNAVAILABLE": "施設名が一時的に利用不可",
|
||||
"TURNING OFF LIVE DATA": "ライブデータをオフにしています",
|
||||
"REFRESHING LIVE DATA": "ライブデータを更新中",
|
||||
"syncing road network": "道路網を同期中",
|
||||
@@ -2314,7 +2314,7 @@
|
||||
"Automatic stop is unavailable for this voice connection.": "この音声接続では自動停止を利用できません。",
|
||||
"Preview is off.": "プレビューはオフです。",
|
||||
"Your choice applies now, but could not be saved.": "選択は適用されましたが、保存できませんでした。",
|
||||
"WebRTC microphone support unavailable": "WebRTCマイクに対応していません",
|
||||
"WebRTC microphone support unavailable": "このブラウザーではWebRTCでマイクを使用できません",
|
||||
"VOICE UNAVAILABLE": "音声利用不可",
|
||||
"VOICE ACTIVE": "音声 オン",
|
||||
"Voice session could not be started.": "音声セッションを開始できませんでした。",
|
||||
@@ -2421,7 +2421,7 @@
|
||||
"Activate to toggle voice": "押すと音声のオン/オフを切り替え",
|
||||
"Voice active": "音声 オン",
|
||||
"Voice could not be started.": "音声を開始できませんでした。",
|
||||
"the active voice session": "有効な音声セッション",
|
||||
"the active voice session": "進行中の音声セッション",
|
||||
"{value} feet": "{value}フィート",
|
||||
"Fire · FRP {frp} MW": "火災 · FRP {frp} MW",
|
||||
"The flights layer is not enabled": "フライトレイヤーが有効になっていません",
|
||||
@@ -2560,7 +2560,7 @@
|
||||
"DEST ---°": "目的地 ---°",
|
||||
"OPTICAL PLANE · 01": "光学面 · 01",
|
||||
"VISOR LOCK · ACTIVE": "バイザーロック · 有効",
|
||||
"GROUND SPEED · KTS": "対地速度 · KTS",
|
||||
"GROUND SPEED · KTS": "対地速度 · KT",
|
||||
"ALTITUDE · FT": "高度 · FT",
|
||||
"FIRST PERSON": "一人称視点",
|
||||
"LIVE TRACK · COURSE ALIGNED": "ライブ追跡 · 針路一致",
|
||||
@@ -2568,7 +2568,7 @@
|
||||
"Previous cockpit vision style": "前のコックピットビジョンスタイル",
|
||||
"Previous vision style": "前のビジョンスタイル",
|
||||
"Current cockpit vision style: NORMAL. Activate for next style.": "現在のコックピットビジョンスタイル:標準。押すと次のスタイルに切り替わります。",
|
||||
"Current style: NORMAL — click for next": "現在のスタイル:標準 — クリックで次へ",
|
||||
"Current style: NORMAL — click for next": "現在のスタイル:標準。クリックで次へ",
|
||||
"CURRENT": "現在",
|
||||
"Next cockpit vision style": "次のコックピットビジョンスタイル",
|
||||
"Next vision style": "次のビジョンスタイル",
|
||||
@@ -2730,7 +2730,7 @@
|
||||
"Sonar ring count": "ソナーのリング数",
|
||||
"Range": "範囲",
|
||||
"Sonar ring range": "ソナーのリング範囲",
|
||||
"Power": "強さ",
|
||||
"Power": "強度",
|
||||
"Sonar intensity": "ソナーの強度",
|
||||
"Opacity": "不透明度",
|
||||
"Cyber contact and label opacity": "サイバーのコンタクトとラベルの不透明度",
|
||||
@@ -2863,5 +2863,5 @@
|
||||
"Begin with a clean globe": "まっさらな地球儀から始める",
|
||||
"Don't show this again": "今後表示しない",
|
||||
"ESC to dismiss": "ESCで閉じる",
|
||||
"Tip: the GEV MIC button in the dock lets you talk to the map.": "ヒント:ドックのGEV MICボタンで地図に話しかけられます。"
|
||||
"Tip: the GEV MIC button in the dock lets you talk to the map.": "ヒント:ドックの[マイク]ボタンで地図に話しかけられます。"
|
||||
}
|
||||
@@ -8,6 +8,22 @@ import {
|
||||
isDatasheetFov,
|
||||
} from './modelSpecs.js';
|
||||
|
||||
/** The camera's zoom bucket (cctv model) in the HUD's view-band words. */
|
||||
function viewBandLabel(band) {
|
||||
switch (band) {
|
||||
case 'street':
|
||||
return t('STREET', { context: 'view band' });
|
||||
case 'city':
|
||||
return t('CITY', { context: 'view band' });
|
||||
case 'regional':
|
||||
return t('REGIONAL', { context: 'view band' });
|
||||
case 'global':
|
||||
return t('GLOBAL', { context: 'view band' });
|
||||
default:
|
||||
return band.toUpperCase();
|
||||
}
|
||||
}
|
||||
|
||||
export function createPresentation({
|
||||
state: layerState,
|
||||
services,
|
||||
@@ -82,7 +98,7 @@ export function createPresentation({
|
||||
: t('SRC {value}', {
|
||||
value: String(active.camera.feedType || 'image').toUpperCase(),
|
||||
}),
|
||||
t('{value} CONTEXT', { value: viewBand.toUpperCase() }),
|
||||
t('{value} CONTEXT', { value: viewBandLabel(viewBand) }),
|
||||
// Identified hardware: append the model's datasheet specs + attribution.
|
||||
active.camera.spec
|
||||
? t('{spec} · SPECS: CCTV-DATABASE.COM', {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/** Contact readouts and nearby-signal presentation for the Cockpit controller. */
|
||||
import * as Cesium from 'cesium';
|
||||
import { formatNumber, getLocale, t, tn } from '../i18n/index.js';
|
||||
import { formatNumber, t, tn } from '../i18n/index.js';
|
||||
import { unitLabel } from './unitLabels.js';
|
||||
import {
|
||||
bearingBetweenCoordinates,
|
||||
@@ -8,14 +8,17 @@ import {
|
||||
relativeBearing,
|
||||
resolveCockpitContextReadout,
|
||||
} from '../cockpitMath.js';
|
||||
import { formatCockpitDistance } from './cockpitPresentation.js';
|
||||
import {
|
||||
cockpitUnitCase,
|
||||
formatCockpitDistance,
|
||||
} from './cockpitPresentation.js';
|
||||
|
||||
/** The Context scope line in the active language (see cockpitMath.js). */
|
||||
const LOCALIZED_CONTEXT_SCOPE = Object.freeze({
|
||||
window: ({ label, radiusKm }) =>
|
||||
t('{label} · {radius} AIR/SEA WINDOW', {
|
||||
label,
|
||||
radius: `${radiusKm === null ? '—' : formatNumber(radiusKm)}\u00a0${getLocale().startsWith('zh-') ? unitLabel('km') : unitLabel('km').toUpperCase()}`,
|
||||
radius: `${radiusKm === null ? '—' : formatNumber(radiusKm)}\u00a0${cockpitUnitCase(unitLabel('km'))}`,
|
||||
}),
|
||||
installations: ({ scope, coverage }) =>
|
||||
t('{scope} · INSTALLATIONS {coverage}', { scope, coverage }),
|
||||
|
||||
@@ -149,7 +149,15 @@ export function formatCockpitDistance(distanceM) {
|
||||
minimumFractionDigits: digits,
|
||||
maximumFractionDigits: digits,
|
||||
});
|
||||
return getLocale().startsWith('zh-') ? distance : distance.toUpperCase();
|
||||
return cockpitUnitCase(distance);
|
||||
}
|
||||
|
||||
/**
|
||||
* Upper-case a cockpit unit the HUD way (`9.5 KM`), except in Chinese and
|
||||
* Japanese, which have no case and keep units as the catalog writes them.
|
||||
*/
|
||||
export function cockpitUnitCase(text) {
|
||||
return /^(zh|ja)(-|$)/.test(getLocale()) ? text : text.toUpperCase();
|
||||
}
|
||||
|
||||
export function formatCockpitWindDirection(value) {
|
||||
|
||||
@@ -69,3 +69,11 @@ html:lang(ja) .recent-imagery-readout .ri-slot-value {
|
||||
word-break: keep-all;
|
||||
overflow-wrap: break-word;
|
||||
}
|
||||
|
||||
/* Japanese layer status lines wrap at their spaces and · separators, so an
|
||||
age such as 1分以内 stays whole (更新 1 / 分以内); a run too long for the
|
||||
line still breaks. */
|
||||
html:lang(ja) .data-toggle-meta {
|
||||
word-break: keep-all;
|
||||
overflow-wrap: break-word;
|
||||
}
|
||||
Reference in new issue
Block a user