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]>
This commit is contained in:
German KhokhlovandClaude Opus 5.5 committed 2026-10-28 17:42:24 +04:00
1 parent 91f1f80e60
commit 4f44a17b44
12 files changed
+226 -103

No files matched your search

+4 -1
View File
@@ -16,6 +16,7 @@ import {
} from './labels.js';
import {
formatUtcDayMonth,
isolate,
t,
tn,
msg,
@@ -25,9 +26,11 @@ import { formatQuantity } from '../../ui/unitLabels.js';
// "10-12 15:00 UTC" never breaks across lines: no-break spaces, and a word
// joiner after the hyphen (JetBrains Mono has no U+2011 non-breaking hyphen).
// The clock is isolated (a no-op outside RTL): a no-break space between two
// numbers joins them into one run, which in Arabic split the date around it.
const utc = (value) =>
value
? `${formatUtcDayMonth(value).replace('-', '-\u2060')}\u00a0${value.slice(11, 16)}\u00a0UTC`
? `${formatUtcDayMonth(value).replace('-', '-\u2060')}\u00a0${isolate(value.slice(11, 16))}\u00a0UTC`
: t('Unavailable');
const COVERAGE = msg(
'Atlantic and eastern/central North Pacific; not worldwide cyclone coverage.',
+2 -1
View File
@@ -365,8 +365,9 @@ export function createStreetLevelLayer({
/** The hint a ground-click provider shows, or the provider's own. */
function hintFor(entry, stats) {
if (entry.def.groundClick && stats.hint && !state.groundClickReady)
// No-break spaces keep a provider name (Google Street View) on one line.
return t('zoom in to a street to open {name}', {
name: translateKnown(entry.def.name),
name: translateKnown(entry.def.name).replace(/ /g, '\u00a0'),
});
return stats.hint || '';
}