diff --git a/docs/I18N.md b/docs/I18N.md index bacfdc509..d0584920f 100644 --- a/docs/I18N.md +++ b/docs/I18N.md @@ -87,7 +87,8 @@ menu.onChoose = (code) => switchLocale(code); // switched in place and stored (i - **Pass literals.** `t('Close')`, not `t(label)` (unless `label` holds a `msg()` value) and never a template literal with `${…}`. - **Use placeholders, not concatenation.** `t('Flying to {place}…', { place })`, not `t('Flying to') + ' ' + place`. Word order differs between languages. -- **Use `tn()` for counts**, not `count === 1 ? … : …`. Russian has three forms. +- **A placeholder takes a name, not a phrase.** When code has no name to pass and would fall back to a phrase ("the view centre", "this spot"), give that case a message of its own: `t('{source} at the view centre', { source })`. Other languages put a phrase in a different case after a preposition, which a name in its nominative form cannot follow. +- **Use `tn()` for counts**, not `count === 1 ? … : …`. Russian has three forms. That includes a number the English writes with a symbol or abbreviation, so both English forms read the same (`tn(hours, 'Last {hours} h', 'Last {hours} h', { hours })`): other languages inflect the words around it («Última 1 h», «Últimas 24 h»). Fractions have a form of their own too (ru «0,75 МОР. МИЛИ»). - **Translate the label, not the value.** Layer ids, enums, share-link parameters, API fields, voice tool schemas and feed data (callsigns, vessel and place names) stay as they are; translate only the text shown for them. - **No `t()` at module top level.** Keep the English in `msg()` and call `t()` when rendering. - **Numbers and dates** go through `formatNumber`, `formatDate`, `formatRelativeTime` and `formatUtcDayMonth` from `src/i18n/index.js`, which follow the active language. diff --git a/docs/translations/ru.md b/docs/translations/ru.md index a44935b71..9073cec3d 100644 --- a/docs/translations/ru.md +++ b/docs/translations/ru.md @@ -8,7 +8,7 @@ Catalog: `src/i18n/locales/ru.json`. General rules: [TRANSLATORS.md](../TRANSLAT - Sentence case, not Title Case: "Live Flights" → «Рейсы в реальном времени». - Quotes inside Russian text are «ёлочки». Write ё where it belongs: её, ещё, всё. - In short labels, a standard abbreviation with a period beats a wrapped line: НЕОПРЕД., СЛЕД. -- Units: км, м, км/ч, м/с, уз (knots), фт (feet), ч, мин, с; in UPPERCASE text КМ, М, КМ/С, УЗ, ФТ. MW is МВт in any case. `°` and `%` stay. +- Units: км, м, км/ч, м/с, уз (knots), фт (feet), ч, мин, с; in UPPERCASE text КМ, М, КМ/С, УЗ, ФТ. MW is МВт in any case. `°` and `%` stay. Nautical miles on the bridge radar are «мор. миля», a noun that follows the count: «3 МОР. МИЛИ», «12 МОР. МИЛЬ», «0,75 МОР. МИЛИ». ## Plurals diff --git a/docs/translations/uk.md b/docs/translations/uk.md index 673748f42..cf2ab6373 100644 --- a/docs/translations/uk.md +++ b/docs/translations/uk.md @@ -12,7 +12,7 @@ Translation source: meirm (#312). - The apostrophe is always ʼ (U+02BC): обʼєкт, звʼязок, памʼять. Not ' or ’. - Quotes inside Ukrainian text are «ялинки»; a button or layer name inside a sentence goes in them: Увімкніть «Вуличні знімки». - In short labels, a standard abbreviation with a period beats a wrapped line: ПОПЕР., ДАЛЬН., КАЛІБР. -- Units: км, м, км/год, м/с, вуз (knots), фт (feet), год, хв, с, МГц, дБ, гПа; in UPPERCASE text КМ, М, КМ/С, ВУЗ, ФТ. MW is МВт in any case. `°` and `%` stay. Decimal comma in coordinates written as text: 28,2710° пн. ш. +- Units: км, м, км/год, м/с, вуз (knots), фт (feet), год, хв, с, МГц, дБ, гПа; in UPPERCASE text КМ, М, КМ/С, ВУЗ, ФТ. Nautical miles on the bridge radar are «мор. миля», a noun that follows the count: «3 МОР. МИЛІ», «12 МОР. МИЛЬ», «0,75 МОР. МИЛІ». MW is МВт in any case. `°` and `%` stay. Decimal comma in coordinates written as text: 28,2710° пн. ш. - Coordinates: пн. ш. / пд. ш. / сх. д. / зх. д.; the HUD hemisphere letters are Пн, Пд, Сх, Зх. ## Plurals diff --git a/src/i18n/locales/ar.json b/src/i18n/locales/ar.json index 46a29dc2f..bb52515ab 100644 --- a/src/i18n/locales/ar.json +++ b/src/i18n/locales/ar.json @@ -77,8 +77,22 @@ "{severity} only": "{severity} فقط", "All categories": "كل الفئات", "Reading the news…": "جارٍ قراءة الأخبار…", - "News, last {hours} hours": "الأخبار، الساعات الأخيرة: {hours}", - "Last {hours} h": "آخر {hours} س", + "News, last {hours} hours": { + "zero": "الأخبار، آخر {hours} ساعة", + "one": "الأخبار، آخر ساعة ({hours})", + "two": "الأخبار، آخر ساعتين ({hours})", + "few": "الأخبار، آخر {hours} ساعات", + "many": "الأخبار، آخر {hours} ساعة", + "other": "الأخبار، آخر {hours} ساعة" + }, + "Last {hours} h": { + "zero": "آخر {hours} ساعة", + "one": "آخر ساعة ({hours})", + "two": "آخر ساعتين ({hours})", + "few": "آخر {hours} ساعات", + "many": "آخر {hours} ساعة", + "other": "آخر {hours} ساعة" + }, "Time window": "الفترة الزمنية", "Conflicts": "النزاعات", "Local": "محلي", @@ -87,9 +101,23 @@ "Hotspots": "بؤر ساخنة", "Severity": "الخطورة", "Category": "الفئة", - "Nothing reported near here in the last {hours} h": "لم يُبلَّغ عن شيء قريب من هنا في آخر {hours} س", + "Nothing reported near here in the last {hours} h": { + "zero": "لم يُبلَّغ عن شيء قريب من هنا في آخر {hours} ساعة", + "one": "لم يُبلَّغ عن شيء قريب من هنا في آخر ساعة ({hours})", + "two": "لم يُبلَّغ عن شيء قريب من هنا في آخر ساعتين ({hours})", + "few": "لم يُبلَّغ عن شيء قريب من هنا في آخر {hours} ساعات", + "many": "لم يُبلَّغ عن شيء قريب من هنا في آخر {hours} ساعة", + "other": "لم يُبلَّغ عن شيء قريب من هنا في آخر {hours} ساعة" + }, "Latest news": "آخر الأخبار", - "No news matches these filters in the last {hours} h": "لا أخبار تطابق هذه المرشحات في آخر {hours} س", + "No news matches these filters in the last {hours} h": { + "zero": "لا أخبار تطابق هذه المرشحات في آخر {hours} ساعة", + "one": "لا أخبار تطابق هذه المرشحات في آخر ساعة ({hours})", + "two": "لا أخبار تطابق هذه المرشحات في آخر ساعتين ({hours})", + "few": "لا أخبار تطابق هذه المرشحات في آخر {hours} ساعات", + "many": "لا أخبار تطابق هذه المرشحات في آخر {hours} ساعة", + "other": "لا أخبار تطابق هذه المرشحات في آخر {hours} ساعة" + }, "Load older news": "تحميل أخبار أقدم", "How to read the map": "كيف تقرأ الخريطة", "Colour: severity · icon: type of event": "اللون: الخطورة · الرمز: نوع الحدث", @@ -259,7 +287,14 @@ "ALTITUDE": "الارتفاع", "CONTACT": "الهدف", "CONTACTS · 250 KM": "الأهداف · 250 كم", - "RINGS {spacing} NM": "الحلقات كل {spacing} ميل بحري", + "RINGS {spacing} NM": { + "zero": "الحلقات كل {spacing} ميل بحري", + "one": "الحلقات كل ميل بحري ({spacing})", + "two": "الحلقات كل ميلين بحريين ({spacing})", + "few": "الحلقات كل {spacing} أميال بحرية", + "many": "الحلقات كل {spacing} ميلًا بحريًا", + "other": "الحلقات كل {spacing} ميل بحري" + }, "{count} CONTACTS": { "zero": "لا أهداف ({count})", "one": "هدف واحد ({count})", @@ -388,7 +423,14 @@ "ROUTE DATA UNAVAILABLE": "بيانات المسار غير متاحة", "CONTACT NAVIGATION OFF": "التنقل بين الأهداف متوقف", "THE BRIDGE STAYS WITH THE SELECTED VESSEL": "تبقى غرفة القيادة مع السفينة المحددة", - "{range} NM": "{range} ميل بحري", + "{range} NM": { + "zero": "{range} ميل بحري", + "one": "ميل بحري واحد ({range})", + "two": "ميلان بحريان ({range})", + "few": "{range} أميال بحرية", + "many": "{range} ميلًا بحريًا", + "other": "{range} ميل بحري" + }, "AIS DESTINATION · CREW REPORTED": "وجهة AIS · أبلغ عنها الطاقم", "FROM": "من", "TO": "إلى", @@ -472,6 +514,7 @@ "Current style: {style} — click for next": "النمط الحالي: {style} — انقر للتالي", "TRACK ACQUIRED": "تم التقاط الهدف", "{label} · COURSE {heading}°": "{label} · المسار {heading}°", + "vessel|{label} · COURSE {heading}°": "{label} · المسار {heading}°", "{label} · HEADING {heading}°": "{label} · الاتجاه {heading}°", "{label} · NO HEADING": "{label} · لا اتجاه", "{label} · NADIR VIEW": "{label} · عرض باتجاه النظير", @@ -673,6 +716,7 @@ "NEAREST": "الأقرب", "CCTV camera": "كاميرا CCTV", "FOCUS": "تركيز", + "site status|FOCUS": "تركيز", "COVERAGE OFF": "التغطية متوقفة", "AUTO HOP OFF": "التنقل التلقائي متوقف", "PROJECTION ON": "الإسقاط مفعّل", @@ -1063,6 +1107,7 @@ "awaiting first AIS message…": "بانتظار أول رسالة AIS…", "EST. DOWNRANGE": "تقدير على امتداد المسار", "CONFIRMED": "مؤكَّد", + "sightings filter|CONFIRMED": "مؤكَّدة", "PAD / RTLS": "منصة الإطلاق / RTLS", "Pick a shape, then click the map.": "اختر شكلًا، ثم انقر على الخريطة.", "Enter to place the pin, Esc to cancel.": "Enter لوضع الدبوس، وEsc للإلغاء.", @@ -2544,6 +2589,7 @@ "Observed history": "سجل الأرصاد", "Later observation": "رصد لاحق", "Latest": "الأحدث", + "news list|Latest": "الأحدث", "Newest frame per product": "أحدث إطار لكل منتج", "Replay observed history": "إعادة تشغيل سجل الأرصاد", "Imagery on Esri · Google 3D returns when cleared": "الصور على Esri · تعود Google 3D عند المسح", @@ -3716,7 +3762,14 @@ "Photo of {name}": "صورة {name}", "Acartia": "Acartia", "CC BY 4.0": "CC BY 4.0", - "{count} sightings in view": "المشاهدات في نطاق العرض: {count}", + "{count} sightings in view": { + "zero": "{count} مشاهدة في نطاق العرض", + "one": "مشاهدة واحدة ({count}) في نطاق العرض", + "two": "مشاهدتان ({count}) في نطاق العرض", + "few": "{count} مشاهدات في نطاق العرض", + "many": "{count} مشاهدة في نطاق العرض", + "other": "{count} مشاهدة في نطاق العرض" + }, "Close sighting": "إغلاق المشاهدة", "Wildlife observed within 48 h (whales 7 d). Color and badge glyph show the taxon group. Sensitive species are shown only as 0.2° cells; Salish Sea marine mammal reports via Acartia are rounded to 0.01°. Not a census.": "حياة برية شوهدت خلال 48 ساعة (الحيتان 7 أيام). يوضح اللون ورمز الشارة المجموعة التصنيفية. تُعرض الأنواع الحساسة في خلايا بحجم 0.2° فقط؛ وتُقرّب مشاهدات الثدييات البحرية في بحر ساليش عبر Acartia إلى 0.01°. ليست إحصاءً شاملًا.", "Open {name} on iNaturalist": "فتح {name} على iNaturalist", @@ -3727,20 +3780,37 @@ "{days}d": "{days} ي", "All markers": "كل العلامات", "Show markers of every age": "عرض العلامات من جميع الأعمار", - "Maximum event age: {days}d; undated markers are kept": "الحد الأقصى لعمر الحدث: {days} ي؛ تبقى العلامات غير المؤرخة ظاهرة", + "Maximum event age: {days}d; undated markers are kept": { + "zero": "الحد الأقصى لعمر الحدث: {days} يوم؛ تبقى العلامات غير المؤرخة ظاهرة", + "one": "الحد الأقصى لعمر الحدث: يوم واحد ({days})؛ تبقى العلامات غير المؤرخة ظاهرة", + "two": "الحد الأقصى لعمر الحدث: يومان ({days})؛ تبقى العلامات غير المؤرخة ظاهرة", + "few": "الحد الأقصى لعمر الحدث: {days} أيام؛ تبقى العلامات غير المؤرخة ظاهرة", + "many": "الحد الأقصى لعمر الحدث: {days} يومًا؛ تبقى العلامات غير المؤرخة ظاهرة", + "other": "الحد الأقصى لعمر الحدث: {days} يوم؛ تبقى العلامات غير المؤرخة ظاهرة" + }, "event age filter|All": "الكل", "Event age": "عمر الحدث", - "Event age: {days}d · undated kept": "عمر الحدث: {days} ي · غير المؤرخة تبقى ظاهرة", + "Event age: {days}d · undated kept": { + "zero": "عمر الحدث: {days} يوم · غير المؤرخة تبقى ظاهرة", + "one": "عمر الحدث: يوم واحد ({days}) · غير المؤرخة تبقى ظاهرة", + "two": "عمر الحدث: يومان ({days}) · غير المؤرخة تبقى ظاهرة", + "few": "عمر الحدث: {days} أيام · غير المؤرخة تبقى ظاهرة", + "many": "عمر الحدث: {days} يومًا · غير المؤرخة تبقى ظاهرة", + "other": "عمر الحدث: {days} يوم · غير المؤرخة تبقى ظاهرة" + }, "Close camera preview": "إغلاق معاينة الكاميرا", "Refresh map still": "تحديث صورة الخريطة الثابتة", "The map still uses a separate request and may show a different moment.": "تستخدم صورة الخريطة طلبًا منفصلًا وقد تعرض لحظة مختلفة.", "Video plays from Québec 511, which sees your IP address.": "يُشغَّل الفيديو من Québec 511، الذي يرى عنوان IP الخاص بك.", "Press OPEN to load the photo": "اضغط «فتح» لتحميل الصورة", "Captured {month}": "التُقطت في {month}", - "this spot": "هذا الموضع", "the view centre": "مركز العرض", "{source} at {place}": "{source} في {place}", + "{source} at this spot": "{source} في هذا الموضع", + "{source} at the view centre": "{source} في مركز العرض", "Street level at {place}": "مستوى الشارع في {place}", + "Street level at this spot": "مستوى الشارع في هذا الموضع", + "Street level at the view centre": "مستوى الشارع في مركز العرض", "Switching map": "جارٍ تبديل الخريطة", "Opening imagery": "جارٍ فتح الصور", "Street View is ready: press {open} to load it": "Street View جاهز: اضغط «{open}» لتحميله", @@ -3832,6 +3902,7 @@ "{source} imagery could not be opened": "تعذّر فتح صور {source}", "{place} has no position to look for imagery at": "{place}: لا موضع للبحث عن الصور فيه", "No {source} imagery near {place}": "لا توجد صور {source} قرب {place}", + "No {source} imagery near the view centre": "لا توجد صور {source} قرب مركز العرض", "{reason} (filters on: {filters})": "{reason} (المرشحات المفعّلة: {filters})", "tiles unavailable": "البلاطات غير متاحة", "zoom in to load this layer": "قرّب لتحميل هذه الطبقة", @@ -3952,6 +4023,13 @@ "REMOVE ALL": "إزالة الكل", "Confirm: remove every added entry from Data Layers": "تأكيد: إزالة كل الإدخالات المُضافة من طبقات البيانات", "Remove every added entry from Data Layers": "إزالة كل الإدخالات المُضافة من طبقات البيانات", - "Showing {shown} of {total}": "عرض {shown} من {total}", + "Showing {shown} of {total}": { + "zero": "عرض {shown} من {total}", + "one": "عرض {shown} من {total}", + "two": "عرض {shown} من {total}", + "few": "عرض {shown} من {total}", + "many": "عرض {shown} من {total}", + "other": "عرض {shown} من {total}" + }, "BROWSE DATA LIBRARY": "تصفّح مكتبة البيانات" } diff --git a/src/i18n/locales/de.json b/src/i18n/locales/de.json index ca668a74e..ecf459209 100644 --- a/src/i18n/locales/de.json +++ b/src/i18n/locales/de.json @@ -65,8 +65,14 @@ "{severity} only": "Nur {severity}", "All categories": "Alle Kategorien", "Reading the news…": "Nachrichten werden gelesen…", - "News, last {hours} hours": "Nachrichten, letzte {hours} h", - "Last {hours} h": "Letzte {hours} h", + "News, last {hours} hours": { + "one": "Nachrichten der letzten {hours} Stunde", + "other": "Nachrichten der letzten {hours} Stunden" + }, + "Last {hours} h": { + "one": "Letzte {hours} h", + "other": "Letzte {hours} h" + }, "Time window": "Zeitraum", "Conflicts": "Konflikte", "Local": "Lokal", @@ -75,9 +81,15 @@ "Hotspots": "Brennpunkte", "Severity": "Schweregrad", "Category": "Kategorie", - "Nothing reported near here in the last {hours} h": "In den letzten {hours} h nichts in der Nähe gemeldet", + "Nothing reported near here in the last {hours} h": { + "one": "In der letzten {hours} h nichts in der Nähe gemeldet", + "other": "In den letzten {hours} h nichts in der Nähe gemeldet" + }, "Latest news": "Neueste Nachrichten", - "No news matches these filters in the last {hours} h": "Keine Nachrichten der letzten {hours} h passen zu diesen Filtern", + "No news matches these filters in the last {hours} h": { + "one": "Keine Nachrichten der letzten {hours} h passen zu diesen Filtern", + "other": "Keine Nachrichten der letzten {hours} h passen zu diesen Filtern" + }, "Load older news": "Ältere Nachrichten laden", "How to read the map": "So liest man die Karte", "Colour: severity · icon: type of event": "Farbe: Schweregrad · Symbol: Art des Ereignisses", @@ -198,6 +210,7 @@ "Previous — prior visited contact in the 250 km window": "Zurück: zuvor besuchter Kontakt im 250-km-Fenster", "PREVIOUS": "ZURÜCK", "FOCUS": "FOKUS", + "site status|FOCUS": "FOKUS", "Next — nearest unvisited contact in the 250 km window": "Weiter: nächstgelegener unbesuchter Kontakt im 250-km-Fenster", "NEXT": "WEITER", "Open-source mapped/observed context. Missing broadcasts, unloaded map areas, or unmapped sites are not evidence of absence.": "Kontext aus offenen Quellen, kartiert/beobachtet. Fehlende Funksignale, nicht geladene Kartenbereiche oder nicht kartierte Standorte sind kein Beleg für Abwesenheit.", @@ -302,7 +315,7 @@ "ORBITAL VELOCITY": "BAHNGESCHWINDIGKEIT", "SUB-SATELLITE POINT": "SUBSATELLITENPUNKT", "NORTH UP": "NORDEN OBEN", - "CURRENTLY OVER": "AKTUELL ÜBER", + "CURRENTLY OVER": "UNTER DEM SATELLITEN", "{division}, {country}": "{division}, {country}", "{region} · near {place}": "{region} · nahe {place}", "NORAD {id}": "NORAD {id}", @@ -559,7 +572,10 @@ "ROUTE DATA UNAVAILABLE": "ROUTENDATEN NICHT VERFÜGBAR", "CONTACT NAVIGATION OFF": "KONTAKTNAVIGATION AUS", "THE BRIDGE STAYS WITH THE SELECTED VESSEL": "DIE BRÜCKE BLEIBT BEIM GEWÄHLTEN SCHIFF", - "{range} NM": "{range} SM", + "{range} NM": { + "one": "{range} SM", + "other": "{range} SM" + }, "AIS DESTINATION · CREW REPORTED": "AIS-ZIEL · VON DER BESATZUNG GEMELDET", "DEST {bearing}": "DEST {bearing}", "Disable cockpit weather effects": "Cockpit-Wettereffekte deaktivieren", @@ -605,6 +621,7 @@ "Reclassify as TR-3B": "Als TR-3B umklassifizieren", "TRACK ACQUIRED": "TRACK ERFASST", "{label} · COURSE {heading}°": "{label} · KURS {heading}°", + "vessel|{label} · COURSE {heading}°": "{label} · KURS {heading}°", "{label} · HEADING {heading}°": "{label} · STEUERKURS {heading}°", "{label} · NO HEADING": "{label} · KEIN STEUERKURS", "{label} · NADIR VIEW": "{label} · NADIRANSICHT", @@ -836,7 +853,10 @@ "Contact cockpit summary": "Cockpit-Zusammenfassung des Kontakts", "CONTACT": "KONTAKT", "CONTACTS · 250 KM": "KONTAKTE · 250 KM", - "RINGS {spacing} NM": "RINGE {spacing} SM", + "RINGS {spacing} NM": { + "one": "RINGE {spacing} SM", + "other": "RINGE {spacing} SM" + }, "{count} CONTACTS": { "one": "{count} KONTAKT", "other": "{count} KONTAKTE" @@ -2404,6 +2424,7 @@ "Observed history": "Beobachteter Verlauf", "Later observation": "Spätere Beobachtung", "Latest": "Neueste", + "news list|Latest": "Neueste", "Newest frame per product": "Neuester Frame je Produkt", "Replay observed history": "Beobachteten Verlauf abspielen", "Imagery on Esri · Google 3D returns when cleared": "Bilder auf Esri · nach LÖSCHEN wieder Google 3D", @@ -3132,6 +3153,7 @@ "Left panels": "Linke Bereiche", "Right panels": "Rechte Bereiche", "CONFIRMED": "BESTÄTIGT", + "sightings filter|CONFIRMED": "BESTÄTIGT", "PAD / RTLS": "STARTPLATZ / RTLS", "fire confidence filter|All": "Alle", "fire confidence filter|Nominal+": "Mittel+", @@ -3392,7 +3414,10 @@ "Photo of {name}": "Foto von {name}", "Acartia": "Acartia", "CC BY 4.0": "CC BY 4.0", - "{count} sightings in view": "Beobachtungen im Bild: {count}", + "{count} sightings in view": { + "one": "{count} Beobachtung im Bild", + "other": "{count} Beobachtungen im Bild" + }, "Close sighting": "Beobachtung schließen", "Wildlife observed within 48 h (whales 7 d). Color and badge glyph show the taxon group. Sensitive species are shown only as 0.2° cells; Salish Sea marine mammal reports via Acartia are rounded to 0.01°. Not a census.": "In den letzten 48 h beobachtete Wildtiere (Wale 7 Tage). Farbe und Symbol der Markierung zeigen die Artengruppe. Empfindliche Arten erscheinen nur als 0,2°-Zellen; Acartia-Meldungen zu Meeressäugern aus der Salish-See werden auf 0,01° gerundet. Keine Bestandszählung.", "Open {name} on iNaturalist": "{name} auf iNaturalist öffnen", @@ -3403,20 +3428,29 @@ "{days}d": "{days} T", "All markers": "Alle Markierungen", "Show markers of every age": "Markierungen jeden Alters anzeigen", - "Maximum event age: {days}d; undated markers are kept": "Maximales Ereignisalter: {days} T; undatierte Markierungen bleiben erhalten", + "Maximum event age: {days}d; undated markers are kept": { + "one": "Maximales Ereignisalter: {days} Tag; undatierte Markierungen bleiben erhalten", + "other": "Maximales Ereignisalter: {days} Tage; undatierte Markierungen bleiben erhalten" + }, "event age filter|All": "Alle", "Event age": "Ereignisalter", - "Event age: {days}d · undated kept": "Ereignisalter: {days} T · undatierte bleiben", + "Event age: {days}d · undated kept": { + "one": "Ereignisalter: {days} Tag · undatierte bleiben", + "other": "Ereignisalter: {days} Tage · undatierte bleiben" + }, "Close camera preview": "Kameravorschau schließen", "Refresh map still": "Kartenstandbild aktualisieren", "The map still uses a separate request and may show a different moment.": "Das Kartenstandbild wird separat abgerufen und kann einen anderen Moment zeigen.", "Video plays from Québec 511, which sees your IP address.": "Das Video wird von Québec 511 abgespielt; die IP-Adresse ist für diesen Anbieter sichtbar.", "Press OPEN to load the photo": "Auf ÖFFNEN klicken, um das Foto zu laden", "Captured {month}": "Aufgenommen im {month}", - "this spot": "diese Stelle", "the view centre": "die Bildmitte", "{source} at {place}": "{source}: {place}", + "{source} at this spot": "{source} an dieser Stelle", + "{source} at the view centre": "{source} in der Bildmitte", "Street level at {place}": "Straßenebene: {place}", + "Street level at this spot": "Straßenebene an dieser Stelle", + "Street level at the view centre": "Straßenebene in der Bildmitte", "Switching map": "Karte wird gewechselt", "Opening imagery": "Bilder werden geöffnet", "Street View is ready: press {open} to load it": "Street View ist bereit: Auf {open} klicken, um es zu laden", @@ -3508,6 +3542,7 @@ "{source} imagery could not be opened": "Bilder von {source} konnten nicht geöffnet werden", "{place} has no position to look for imagery at": "{place} hat keine Position, an der nach Bildern gesucht werden kann", "No {source} imagery near {place}": "Keine Bilder von {source} in der Nähe von {place}", + "No {source} imagery near the view centre": "Keine Bilder von {source} in der Nähe der Bildmitte", "{reason} (filters on: {filters})": "{reason} (aktive Filter: {filters})", "tiles unavailable": "Kacheln nicht verfügbar", "zoom in to load this layer": "hineinzoomen, um diese Ebene zu laden", @@ -3604,6 +3639,9 @@ "REMOVE ALL": "ALLE ENTFERNEN", "Confirm: remove every added entry from Data Layers": "Bestätigen: alle hinzugefügten Einträge aus Datenebenen entfernen", "Remove every added entry from Data Layers": "Alle hinzugefügten Einträge aus Datenebenen entfernen", - "Showing {shown} of {total}": "{shown} von {total} angezeigt", + "Showing {shown} of {total}": { + "one": "{shown} von {total} angezeigt", + "other": "{shown} von {total} angezeigt" + }, "BROWSE DATA LIBRARY": "DATENBIBLIOTHEK DURCHSUCHEN" } diff --git a/src/i18n/locales/es.json b/src/i18n/locales/es.json index 2a374d7ec..c56f52f3a 100644 --- a/src/i18n/locales/es.json +++ b/src/i18n/locales/es.json @@ -68,8 +68,16 @@ "{severity} only": "Solo {severity}", "All categories": "Todas las categorías", "Reading the news…": "Leyendo las noticias…", - "News, last {hours} hours": "Noticias desde hace {hours} h", - "Last {hours} h": "Desde hace {hours} h", + "News, last {hours} hours": { + "one": "Noticias de la última {hours} hora", + "many": "Noticias de las últimas {hours} de horas", + "other": "Noticias de las últimas {hours} horas" + }, + "Last {hours} h": { + "one": "Última {hours} h", + "many": "Últimas {hours} h", + "other": "Últimas {hours} h" + }, "Time window": "Periodo", "Conflicts": "Conflictos", "Local": "Local", @@ -78,9 +86,17 @@ "Hotspots": "Focos", "Severity": "Gravedad", "Category": "Categoría", - "Nothing reported near here in the last {hours} h": "No hay noticias cerca de aquí desde hace {hours} h", + "Nothing reported near here in the last {hours} h": { + "one": "No hay noticias cerca de aquí en la última {hours} h", + "many": "No hay noticias cerca de aquí en las últimas {hours} h", + "other": "No hay noticias cerca de aquí en las últimas {hours} h" + }, "Latest news": "Últimas noticias", - "No news matches these filters in the last {hours} h": "Desde hace {hours} h no hay noticias que coincidan con estos filtros", + "No news matches these filters in the last {hours} h": { + "one": "En la última {hours} h no hay noticias que coincidan con estos filtros", + "many": "En las últimas {hours} h no hay noticias que coincidan con estos filtros", + "other": "En las últimas {hours} h no hay noticias que coincidan con estos filtros" + }, "Load older news": "Cargar noticias anteriores", "How to read the map": "Cómo leer el mapa", "Colour: severity · icon: type of event": "Color: gravedad · icono: tipo de suceso", @@ -139,7 +155,11 @@ "ALTITUDE": "ALTITUD", "CONTACT": "CONTACTO", "CONTACTS · 250 KM": "CONTACTOS · 250 KM", - "RINGS {spacing} NM": "ANILLOS {spacing} MN", + "RINGS {spacing} NM": { + "one": "ANILLOS {spacing} MN", + "many": "ANILLOS {spacing} MN", + "other": "ANILLOS {spacing} MN" + }, "{count} CONTACTS": { "one": "{count} CONTACTO", "many": "{count} DE CONTACTOS", @@ -266,7 +286,11 @@ "ROUTE DATA UNAVAILABLE": "DATOS DE RUTA NO DISPONIBLES", "CONTACT NAVIGATION OFF": "NAVEGACIÓN DE CONTACTOS DESACTIVADA", "THE BRIDGE STAYS WITH THE SELECTED VESSEL": "EL PUENTE PERMANECE EN EL BUQUE SELECCIONADO", - "{range} NM": "{range} MN", + "{range} NM": { + "one": "{range} MN", + "many": "{range} MN", + "other": "{range} MN" + }, "AIS DESTINATION · CREW REPORTED": "DESTINO AIS · NOTIFICADO POR LA TRIPULACIÓN", "FROM": "DESDE", "TO": "HACIA", @@ -352,6 +376,7 @@ "Current style: {style} — click for next": "Estilo actual: {style} — haz clic para el siguiente", "TRACK ACQUIRED": "RASTREO ADQUIRIDO", "{label} · COURSE {heading}°": "{label} · RUMBO {heading}°", + "vessel|{label} · COURSE {heading}°": "{label} · RUMBO {heading}°", "{label} · HEADING {heading}°": "{label} · PROA {heading}°", "{label} · NO HEADING": "{label} · PROA N/D", "{label} · NADIR VIEW": "{label} · VISTA AL NADIR", @@ -546,6 +571,7 @@ "NEAREST": "MÁS CERCANA", "CCTV camera": "Cámara CCTV", "FOCUS": "ENFOCAR", + "site status|FOCUS": "ENFOCADO", "COVERAGE OFF": "COBERTURA DESACTIVADA", "AUTO HOP OFF": "SALTO AUTO: NO", "PROJECTION ON": "PROYECCIÓN ACTIVADA", @@ -899,6 +925,7 @@ "awaiting first AIS message…": "esperando el primer mensaje AIS…", "EST. DOWNRANGE": "DIST. ESTIMADA", "CONFIRMED": "CONFIRMADA", + "sightings filter|CONFIRMED": "CONFIRMADAS", "PAD / RTLS": "PLATAFORMA / RTLS", "MISSION CONTROL · FIRST LAUNCH": "CENTRO DE MANDO · PRIMER INICIO", "Choose your first view": "Elige tu primera vista", @@ -1669,6 +1696,7 @@ "Observed history": "Historial observado", "Later observation": "Observación posterior", "Latest": "Último", + "news list|Latest": "Últimas", "Newest frame per product": "Fotograma más reciente por producto", "Replay observed history": "Reproducir el historial observado", "S on another day replaces it · × unpins": "S en otro día lo reemplaza · × quita la fijación", @@ -3473,7 +3501,11 @@ "Photo of {name}": "Foto de {name}", "Acartia": "Acartia", "CC BY 4.0": "CC BY 4.0", - "{count} sightings in view": "Avistamientos a la vista: {count}", + "{count} sightings in view": { + "one": "{count} avistamiento a la vista", + "many": "{count} de avistamientos a la vista", + "other": "{count} avistamientos a la vista" + }, "Close sighting": "Cerrar avistamiento", "Wildlife observed within 48 h (whales 7 d). Color and badge glyph show the taxon group. Sensitive species are shown only as 0.2° cells; Salish Sea marine mammal reports via Acartia are rounded to 0.01°. Not a census.": "Fauna y flora observadas en las últimas 48 h (cetáceos 7 días). El color y el símbolo de la insignia indican el grupo taxonómico. Las especies sensibles solo se muestran en celdas de 0,2°; los informes de mamíferos marinos de Acartia en el mar de Salish se redondean a 0,01°. No es un censo.", "Open {name} on iNaturalist": "Abrir {name} en iNaturalist", @@ -3484,20 +3516,31 @@ "{days}d": "{days} d", "All markers": "Todos los marcadores", "Show markers of every age": "Mostrar marcadores de cualquier antigüedad", - "Maximum event age: {days}d; undated markers are kept": "Antigüedad máxima: {days} d; se conservan los marcadores sin fecha", + "Maximum event age: {days}d; undated markers are kept": { + "one": "Antigüedad máxima: {days} día; se conservan los marcadores sin fecha", + "many": "Antigüedad máxima: {days} de días; se conservan los marcadores sin fecha", + "other": "Antigüedad máxima: {days} días; se conservan los marcadores sin fecha" + }, "event age filter|All": "Todos", "Event age": "Antigüedad", - "Event age: {days}d · undated kept": "Antigüedad: {days} d · se conservan los marcadores sin fecha", + "Event age: {days}d · undated kept": { + "one": "Antigüedad: {days} día · se conservan los marcadores sin fecha", + "many": "Antigüedad: {days} de días · se conservan los marcadores sin fecha", + "other": "Antigüedad: {days} días · se conservan los marcadores sin fecha" + }, "Close camera preview": "Cerrar vista previa de la cámara", "Refresh map still": "Actualizar imagen fija del mapa", "The map still uses a separate request and may show a different moment.": "La imagen del mapa usa una solicitud independiente y puede mostrar otro momento.", "Video plays from Québec 511, which sees your IP address.": "El vídeo se reproduce desde Québec 511, que ve tu dirección IP.", "Press OPEN to load the photo": "Pulsa ABRIR para cargar la foto", "Captured {month}": "Capturada en {month}", - "this spot": "este punto", "the view centre": "el centro de la vista", "{source} at {place}": "{source} en {place}", + "{source} at this spot": "{source} en este punto", + "{source} at the view centre": "{source} en el centro de la vista", "Street level at {place}": "A pie de calle en {place}", + "Street level at this spot": "A pie de calle en este punto", + "Street level at the view centre": "A pie de calle en el centro de la vista", "Switching map": "Cambiando de mapa", "Opening imagery": "Abriendo imágenes", "Street View is ready: press {open} to load it": "Street View está listo: pulsa {open} para cargarlo", @@ -3589,6 +3632,7 @@ "{source} imagery could not be opened": "No se pudieron abrir las imágenes de {source}", "{place} has no position to look for imagery at": "{place} no tiene una posición donde buscar imágenes", "No {source} imagery near {place}": "No hay imágenes de {source} cerca de {place}", + "No {source} imagery near the view centre": "No hay imágenes de {source} cerca del centro de la vista", "{reason} (filters on: {filters})": "{reason} (filtros activos: {filters})", "tiles unavailable": "teselas no disponibles", "Environment": "Medio ambiente", @@ -3671,7 +3715,11 @@ "switch on a dataset to load features": "activa un conjunto de datos para cargar elementos", "Data Library at a glance": "La biblioteca de datos de un vistazo", "Map features": "Elementos del mapa", - "Showing {shown} of {total}": "Mostrando {shown} de {total}", + "Showing {shown} of {total}": { + "one": "Mostrando {shown} de {total}", + "many": "Mostrando {shown} de {total}", + "other": "Mostrando {shown} de {total}" + }, "Datasets": "Conjuntos de datos", "Themes": "Temas", "zoom in to load this layer": "acércate para cargar esta capa", diff --git a/src/i18n/locales/fr.json b/src/i18n/locales/fr.json index 98633538b..4d68abcdd 100644 --- a/src/i18n/locales/fr.json +++ b/src/i18n/locales/fr.json @@ -68,8 +68,16 @@ "{severity} only": "{severity} uniquement", "All categories": "Toutes les catégories", "Reading the news…": "Lecture des actualités…", - "News, last {hours} hours": "Actualités sur {hours} h", - "Last {hours} h": "Sur {hours} h", + "News, last {hours} hours": { + "one": "Actualités de la dernière {hours} heure", + "many": "Actualités des dernières {hours} d'heures", + "other": "Actualités des dernières {hours} heures" + }, + "Last {hours} h": { + "one": "Dernière {hours} h", + "many": "Dernières {hours} h", + "other": "Dernières {hours} h" + }, "Time window": "Période", "Conflicts": "Conflits", "Local": "Local", @@ -78,9 +86,17 @@ "Hotspots": "Foyers", "Severity": "Gravité", "Category": "Catégorie", - "Nothing reported near here in the last {hours} h": "Rien de signalé près d'ici en {hours} h", + "Nothing reported near here in the last {hours} h": { + "one": "Rien de signalé près d'ici cette dernière {hours} h", + "many": "Rien de signalé près d'ici ces dernières {hours} h", + "other": "Rien de signalé près d'ici ces dernières {hours} h" + }, "Latest news": "Dernières actualités", - "No news matches these filters in the last {hours} h": "Aucune actualité ne correspond à ces filtres sur {hours} h", + "No news matches these filters in the last {hours} h": { + "one": "Aucune actualité de la dernière {hours} h ne correspond à ces filtres", + "many": "Aucune actualité des dernières {hours} h ne correspond à ces filtres", + "other": "Aucune actualité des dernières {hours} h ne correspond à ces filtres" + }, "Load older news": "Charger des actualités plus anciennes", "How to read the map": "Comment lire la carte", "Colour: severity · icon: type of event": "Couleur : gravité · icône : type d'événement", @@ -584,6 +600,7 @@ "Previous — prior visited contact in the 250 km window": "Précédent — contact visité précédemment dans la fenêtre de 250 km", "PREVIOUS": "PRÉC.", "FOCUS": "CENTRER", + "site status|FOCUS": "VISÉ", "Next — nearest unvisited contact in the 250 km window": "Suivant — contact non visité le plus proche dans la fenêtre de 250 km", "NEXT": "SUIV.", "Named areas ({n})": "Zones nommées ({n})", @@ -1832,7 +1849,11 @@ "ROUTE DATA UNAVAILABLE": "DONNÉES DE ROUTE INDISPONIBLES", "CONTACT NAVIGATION OFF": "NAVIGATION DES CONTACTS DÉSACTIVÉE", "THE BRIDGE STAYS WITH THE SELECTED VESSEL": "LA PASSERELLE RESTE SUR LE NAVIRE SÉLECTIONNÉ", - "{range} NM": "{range} NM", + "{range} NM": { + "one": "{range} NM", + "many": "{range} NM", + "other": "{range} NM" + }, "AIS DESTINATION · CREW REPORTED": "DESTINATION AIS · DÉCLARÉE PAR L'ÉQUIPAGE", "DEST {bearing}": "DEST {bearing}", "Disable cockpit weather effects": "Désactiver les effets météo du cockpit", @@ -1880,6 +1901,7 @@ "Reclassify as TR-3B": "Reclasser en TR-3B", "TRACK ACQUIRED": "PISTE ACQUISE", "{label} · COURSE {heading}°": "{label} · ROUTE {heading}°", + "vessel|{label} · COURSE {heading}°": "{label} · ROUTE {heading}°", "{label} · HEADING {heading}°": "{label} · CAP {heading}°", "{label} · NO HEADING": "{label} · SANS CAP", "{label} · NADIR VIEW": "{label} · VUE AU NADIR", @@ -2152,6 +2174,7 @@ "Observed history": "Historique des observations", "Later observation": "Observation suivante", "Latest": "Dernière", + "news list|Latest": "Dernières", "Newest frame per product": "Image la plus récente par produit", "Replay observed history": "Rejouer l'historique des observations", "Imagery on Esri · Google 3D returns when cleared": "Sur Esri · EFFACER rétablit Google 3D", @@ -2880,7 +2903,11 @@ "Contact cockpit summary": "Résumé cockpit du contact", "CONTACT": "CONTACT", "CONTACTS · 250 KM": "CONTACTS · 250 KM", - "RINGS {spacing} NM": "CERCLES {spacing} NM", + "RINGS {spacing} NM": { + "one": "CERCLES {spacing} NM", + "many": "CERCLES {spacing} NM", + "other": "CERCLES {spacing} NM" + }, "{count} CONTACTS": { "one": "{count} CONTACT", "many": "{count} DE CONTACTS", @@ -3207,6 +3234,7 @@ "Left panels": "Panneaux de gauche", "Right panels": "Panneaux de droite", "CONFIRMED": "CONFIRMÉE", + "sightings filter|CONFIRMED": "CONFIRMÉES", "PAD / RTLS": "PAS DE TIR / RTLS", "fire confidence filter|All": "Toutes", "fire confidence filter|Nominal+": "Nominale+", @@ -3473,7 +3501,11 @@ "Photo of {name}": "Photo : {name}", "Acartia": "Acartia", "CC BY 4.0": "CC BY 4.0", - "{count} sightings in view": "Observations dans la vue : {count}", + "{count} sightings in view": { + "one": "{count} observation dans la vue", + "many": "{count} d'observations dans la vue", + "other": "{count} observations dans la vue" + }, "Close sighting": "Fermer l'observation", "Wildlife observed within 48 h (whales 7 d). Color and badge glyph show the taxon group. Sensitive species are shown only as 0.2° cells; Salish Sea marine mammal reports via Acartia are rounded to 0.01°. Not a census.": "Faune observée au cours des dernières 48 h (cétacés 7 jours). La couleur et le pictogramme du badge indiquent le groupe taxonomique. Les espèces sensibles sont limitées à des cellules de 0,2° ; les signalements de mammifères marins en mer des Salish provenant d'Acartia sont arrondis à 0,01°. Pas un recensement.", "Open {name} on iNaturalist": "Ouvrir {name} sur iNaturalist", @@ -3484,20 +3516,31 @@ "{days}d": "{days} j", "All markers": "Tous les marqueurs", "Show markers of every age": "Afficher les marqueurs de tout âge", - "Maximum event age: {days}d; undated markers are kept": "Ancienneté maximale : {days} j ; marqueurs sans date conservés", + "Maximum event age: {days}d; undated markers are kept": { + "one": "Ancienneté maximale : {days} j ; marqueurs sans date conservés", + "many": "Ancienneté maximale : {days} j ; marqueurs sans date conservés", + "other": "Ancienneté maximale : {days} j ; marqueurs sans date conservés" + }, "event age filter|All": "Tous", "Event age": "Ancienneté", - "Event age: {days}d · undated kept": "Ancienneté : {days} j · marqueurs sans date conservés", + "Event age: {days}d · undated kept": { + "one": "Ancienneté : {days} j · marqueurs sans date conservés", + "many": "Ancienneté : {days} j · marqueurs sans date conservés", + "other": "Ancienneté : {days} j · marqueurs sans date conservés" + }, "Close camera preview": "Fermer l'aperçu de la caméra", "Refresh map still": "Actualiser l'image fixe sur la carte", "The map still uses a separate request and may show a different moment.": "L'image fixe de la carte utilise une requête distincte et peut montrer un autre moment.", "Video plays from Québec 511, which sees your IP address.": "La vidéo est lue depuis Québec 511, qui voit votre adresse IP.", "Press OPEN to load the photo": "Appuyez sur OUVRIR pour charger la photo", "Captured {month}": "Prise en {month}", - "this spot": "cet endroit", "the view centre": "le centre de la vue", "{source} at {place}": "{source} : {place}", + "{source} at this spot": "{source} à cet endroit", + "{source} at the view centre": "{source} au centre de la vue", "Street level at {place}": "Niveau rue : {place}", + "Street level at this spot": "Niveau rue à cet endroit", + "Street level at the view centre": "Niveau rue au centre de la vue", "Switching map": "Changement de carte", "Opening imagery": "Ouverture des images", "Street View is ready: press {open} to load it": "Street View est prêt : appuyez sur {open} pour le charger", @@ -3589,6 +3632,7 @@ "{source} imagery could not be opened": "Impossible d'ouvrir les images de {source}", "{place} has no position to look for imagery at": "{place} n'a pas de position où chercher des images", "No {source} imagery near {place}": "Aucune image {source} près de {place}", + "No {source} imagery near the view centre": "Aucune image {source} près du centre de la vue", "{reason} (filters on: {filters})": "{reason} (filtres actifs : {filters})", "tiles unavailable": "tuiles indisponibles", "zoom in to load this layer": "zoomez pour charger cette couche", @@ -3691,6 +3735,10 @@ "REMOVE ALL": "TOUT RETIRER", "Confirm: remove every added entry from Data Layers": "Confirmer : retirer du panneau Couches toutes les entrées ajoutées", "Remove every added entry from Data Layers": "Retirer du panneau Couches toutes les entrées ajoutées", - "Showing {shown} of {total}": "Affichées : {shown} sur {total}", + "Showing {shown} of {total}": { + "one": "{shown} sur {total} affichée", + "many": "{shown} sur {total} affichées", + "other": "{shown} sur {total} affichées" + }, "BROWSE DATA LIBRARY": "PARCOURIR LA BIBLIOTHÈQUE DE DONNÉES" } diff --git a/src/i18n/locales/he.json b/src/i18n/locales/he.json index 335515fb4..29c275d90 100644 --- a/src/i18n/locales/he.json +++ b/src/i18n/locales/he.json @@ -478,6 +478,7 @@ "PREVIOUS": "הקודם", "Previous — prior visited contact in the 250 km window": "הקודם — מגע שכבר ביקרת בו בחלון של 250 ק\"מ", "FOCUS": "התמקד", + "site status|FOCUS": "במוקד", "NEXT": "הבא", "Next — nearest unvisited contact in the 250 km window": "הבא — המגע הקרוב ביותר שלא ביקרת בו בחלון של 250 ק\"מ", "Named areas ({n})": "אזורים בעלי שם ({n})", @@ -832,6 +833,7 @@ "ORBIT REPLAY · {mission}": "שחזור מסלול · {mission}", "PAUSED · {title}": "מושהה · {title}", "CONFIRMED": "מאושר", + "sightings filter|CONFIRMED": "מאושרות", "PAD / RTLS": "כן שיגור / RTLS", "UNSPECIFIED": "לא צוין", "{value} KM DOWNRANGE": "{value} ק\"מ לאורך המסלול", @@ -1268,7 +1270,11 @@ "Wildlife observed within 48 h (whales 7 d). Color and badge glyph show the taxon group. Sensitive species are shown only as 0.2° cells; Salish Sea marine mammal reports via Acartia are rounded to 0.01°. Not a census.": "חיות בר נצפו ב-48 השעות האחרונות (לווייתנים · 7 ימים). הצבע וגליף התג מציגים את קבוצת הטקסון. מינים רגישים מוצגים כתאי 0.2° בלבד; דיווחי יונקי הים של Salish Sea דרך Acartia מעוגלים ל-0.01°. אינו מפקד אוכלוסין.", "iNaturalist contributors · Acartia {count} (Salish Sea) · licences per record": "תורמי iNaturalist · Acartia {count} (Salish Sea) · רישיונות לכל רשומה", "iNaturalist contributors · licences per record": "תורמי iNaturalist · רישיונות לכל רשומה", - "{count} sightings in view": "{count} תצפיות בתצוגה", + "{count} sightings in view": { + "one": "{count} תצפית בתצוגה", + "two": "{count} תצפיות בתצוגה", + "other": "{count} תצפיות בתצוגה" + }, "Zoom in for local sightings": "התקרב לתצפיות מקומיות", "No recent sightings in view": "אין תצפיות אחרונות בתצוגה", "Acartia feed unavailable": "פיד Acartia אינו זמין", @@ -1737,6 +1743,7 @@ "SOURCE STATUS UNAVAILABLE": "מצב המקור אינו זמין", "TRACK ACQUIRED": "המעקב ננעל", "{label} · COURSE {heading}°": "{label} · מהלך {heading}°", + "vessel|{label} · COURSE {heading}°": "{label} · מהלך {heading}°", "Context could not restore every layer; try again": "ההקשר לא שיחזר את כל השכבות; נסה שוב", "No selected data layers": "אין שכבות נתונים נבחרות", "{count} data layers could not be cleared": { @@ -1998,6 +2005,7 @@ "Later observation": "תצפית מאוחרת", "Newest frame per product": "השקופית החדשה לכל מוצר", "Latest": "האחרונה", + "news list|Latest": "האחרונות", "Replay observed history": "הצגת ההיסטוריה הנצפית שוב", "Imagery on Esri · Google 3D returns when cleared": "צילומים ב-Esri · Google 3D חוזר כשמנקים", "Point the camera at the ground to use the view": "כוון את המצלמה אל הקרקע כדי להשתמש בתצוגה", @@ -3238,9 +3246,17 @@ "event age filter|All": "הכול", "{days}d": "{days} ימ׳", "Show markers of every age": "הצגת סמנים בכל גיל", - "Maximum event age: {days}d; undated markers are kept": "גיל אירוע מרבי: {days} ימ׳; סמנים ללא תאריך נשמרים", + "Maximum event age: {days}d; undated markers are kept": { + "one": "גיל אירוע מרבי: {days} יום; סמנים ללא תאריך נשמרים", + "two": "גיל אירוע מרבי: {days} ימים; סמנים ללא תאריך נשמרים", + "other": "גיל אירוע מרבי: {days} ימים; סמנים ללא תאריך נשמרים" + }, "All markers": "כל הסמנים", - "Event age: {days}d · undated kept": "גיל האירוע: {days} ימ׳ · ללא תאריך נשמרים", + "Event age: {days}d · undated kept": { + "one": "גיל האירוע: {days} יום · ללא תאריך נשמרים", + "two": "גיל האירוע: {days} ימים · ללא תאריך נשמרים", + "other": "גיל האירוע: {days} ימים · ללא תאריך נשמרים" + }, "30-DAY MISSION INDEX UNAVAILABLE": "רשימת המשימות ל-30 יום אינה זמינה", "STATIONS": "תחנות", "Crewed stations and the craft that visit them": "תחנות מאוישות והחלליות המבקרות בהן", @@ -3276,7 +3292,11 @@ "LIVE AIS": "AIS חי", "CONTACT NAVIGATION OFF": "ניווט המגעים כבוי", "THE BRIDGE STAYS WITH THE SELECTED VESSEL": "הגשר נשאר עם האונייה הנבחרת", - "{range} NM": "{range} NM", + "{range} NM": { + "one": "{range} NM", + "two": "{range} NM", + "other": "{range} NM" + }, "AIS DESTINATION · CREW REPORTED": "יעד AIS · דווח על ידי הצוות", "FWD": "קדימה", "AFT": "אחורה", @@ -3295,10 +3315,13 @@ "Video plays from Québec 511, which sees your IP address.": "הווידאו זורם מ-Québec 511, שרואה את כתובת ה-IP שלך.", "Press OPEN to load the photo": "לחץ על \"פתח\" כדי לטעון את התמונה", "Captured {month}": "צולם ב-{month}", - "this spot": "המקום הזה", "the view centre": "מרכז התצוגה", "{source} at {place}": "{source}: {place}", + "{source} at this spot": "{source} במקום הזה", + "{source} at the view centre": "{source} במרכז התצוגה", "Street level at {place}": "צילומי רחוב: {place}", + "Street level at this spot": "צילומי רחוב במקום הזה", + "Street level at the view centre": "צילומי רחוב במרכז התצוגה", "Switching map": "מחליף מפה", "Opening imagery": "פותח צילומים", "Street View is ready: press {open} to load it": "Street View מוכן: לחץ על \"{open}\" כדי לטעון אותו", @@ -3358,7 +3381,11 @@ "Zoom in (+)": "התקרבות (+)", "Zoom to the imaging sensor swath": "זום אל רצועת הסריקה של חיישן הצילום", "SENSOR": "חיישן", - "RINGS {spacing} NM": "טבעות {spacing} NM", + "RINGS {spacing} NM": { + "one": "טבעות {spacing} NM", + "two": "טבעות {spacing} NM", + "other": "טבעות {spacing} NM" + }, "{count} CONTACTS": { "one": "{count} מגע", "two": "{count} מגעים", @@ -3504,20 +3531,36 @@ "{severity} and above": "{severity} ומעלה", "{severity} only": "{severity} בלבד", "All categories": "כל הקטגוריות", - "Last {hours} h": "{hours} שע׳ אחורה", + "Last {hours} h": { + "one": "השעה האחרונה ({hours})", + "two": "{hours} שע׳ אחרונות", + "other": "{hours} שע׳ אחרונות" + }, "News from {area}": "חדשות מ-{area}", "Within {km} km of the view centre": "בטווח {km} ק\"מ ממרכז התצוגה", "Reading the news…": "קורא את החדשות…", - "News, last {hours} hours": "חדשות, {hours} שע׳ אחורה", + "News, last {hours} hours": { + "one": "חדשות, השעה האחרונה ({hours})", + "two": "חדשות, {hours} השעות האחרונות", + "other": "חדשות, {hours} השעות האחרונות" + }, "Time window": "חלון זמן", "News sections": "מדורי חדשות", "Hotspots": "מוקדים", "Severity": "חומרה", "Category": "קטגוריה", "Zoom in to see local news": "התקרב כדי לראות חדשות מקומיות", - "Nothing reported near here in the last {hours} h": "לא דווח דבר בסביבה בחלון של {hours} שע׳", + "Nothing reported near here in the last {hours} h": { + "one": "לא דווח דבר בסביבה בשעה האחרונה ({hours})", + "two": "לא דווח דבר בסביבה ב־{hours} השעות האחרונות", + "other": "לא דווח דבר בסביבה ב־{hours} השעות האחרונות" + }, "Latest news": "חדשות אחרונות", - "No news matches these filters in the last {hours} h": "אין חדשות התואמות למסננים אלה בחלון של {hours} שע׳", + "No news matches these filters in the last {hours} h": { + "one": "אין חדשות התואמות למסננים אלה בשעה האחרונה ({hours})", + "two": "אין חדשות התואמות למסננים אלה ב־{hours} השעות האחרונות", + "other": "אין חדשות התואמות למסננים אלה ב־{hours} השעות האחרונות" + }, "Load older news": "טעינת חדשות ישנות יותר", "How to read the map": "איך לקרוא את המפה", "Colour: severity · icon: type of event": "צבע: חומרה · סמל: סוג האירוע", @@ -3589,6 +3632,7 @@ "{source} imagery could not be opened": "לא ניתן היה לפתוח את הצילומים של {source}", "{place} has no position to look for imagery at": "ל-{place} אין מיקום לחיפוש צילומים", "No {source} imagery near {place}": "אין צילומים של {source} ליד {place}", + "No {source} imagery near the view centre": "אין צילומים של {source} ליד מרכז התצוגה", "{reason} (filters on: {filters})": "{reason} (מסננים פעילים: {filters})", "tiles unavailable": "האריחים אינם זמינים", "zoom in to load this layer": "התקרב כדי לטעון את השכבה הזאת", @@ -3691,6 +3735,10 @@ "REMOVE ALL": "הסרת הכול", "Confirm: remove every added entry from Data Layers": "אישור: הסרת כל הפריטים שנוספו משכבות נתונים", "Remove every added entry from Data Layers": "הסרת כל הפריטים שנוספו משכבות נתונים", - "Showing {shown} of {total}": "מוצגים {shown} מתוך {total}", + "Showing {shown} of {total}": { + "one": "מוצג {shown} מתוך {total}", + "two": "מוצגים {shown} מתוך {total}", + "other": "מוצגים {shown} מתוך {total}" + }, "BROWSE DATA LIBRARY": "עיון בספריית הנתונים" } diff --git a/src/i18n/locales/it.json b/src/i18n/locales/it.json index c6127b3fb..10094a30e 100644 --- a/src/i18n/locales/it.json +++ b/src/i18n/locales/it.json @@ -68,8 +68,16 @@ "{severity} only": "Solo {severity}", "All categories": "Tutte le categorie", "Reading the news…": "Lettura delle notizie…", - "News, last {hours} hours": "Notizie, periodo in ore: {hours}", - "Last {hours} h": "Periodo: {hours} h", + "News, last {hours} hours": { + "one": "Notizie dell'ultima {hours} ora", + "many": "Notizie delle ultime {hours} di ore", + "other": "Notizie delle ultime {hours} ore" + }, + "Last {hours} h": { + "one": "Ultima {hours} h", + "many": "Ultime {hours} h", + "other": "Ultime {hours} h" + }, "Time window": "Periodo", "Conflicts": "Conflitti", "Local": "Locale", @@ -78,9 +86,17 @@ "Hotspots": "Focolai", "Severity": "Gravità", "Category": "Categoria", - "Nothing reported near here in the last {hours} h": "Nessuna segnalazione qui vicino · periodo: {hours} h", + "Nothing reported near here in the last {hours} h": { + "one": "Nessuna segnalazione qui vicino nell'ultima {hours} h", + "many": "Nessuna segnalazione qui vicino nelle ultime {hours} h", + "other": "Nessuna segnalazione qui vicino nelle ultime {hours} h" + }, "Latest news": "Ultime notizie", - "No news matches these filters in the last {hours} h": "Nessuna notizia corrisponde a questi filtri · periodo: {hours} h", + "No news matches these filters in the last {hours} h": { + "one": "Nessuna notizia dell'ultima {hours} h corrisponde a questi filtri", + "many": "Nessuna notizia delle ultime {hours} h corrisponde a questi filtri", + "other": "Nessuna notizia delle ultime {hours} h corrisponde a questi filtri" + }, "Load older news": "Carica notizie precedenti", "How to read the map": "Come leggere la mappa", "Colour: severity · icon: type of event": "Colore: gravità · icona: tipo di evento", @@ -584,6 +600,7 @@ "Previous — prior visited contact in the 250 km window": "Precedente — contatto visitato in precedenza nella finestra di 250 km", "PREVIOUS": "PREC", "FOCUS": "FOCUS", + "site status|FOCUS": "FOCUS", "Next — nearest unvisited contact in the 250 km window": "Successivo — contatto non visitato più vicino nella finestra di 250 km", "NEXT": "SUCC", "Named areas ({n})": "Aree con nome ({n})", @@ -941,7 +958,7 @@ "ORBITAL VELOCITY": "VELOCITÀ ORBITALE", "SUB-SATELLITE POINT": "PUNTO SUBSATELLITARE", "NORTH UP": "NORD IN ALTO", - "CURRENTLY OVER": "ATTUALMENTE SOPRA", + "CURRENTLY OVER": "SOTTO IL SATELLITE", "{division}, {country}": "{division}, {country}", "{region} · near {place}": "{region} · vicino a {place}", "NORAD {id}": "NORAD {id}", @@ -1832,7 +1849,11 @@ "ROUTE DATA UNAVAILABLE": "DATI ROTTA NON DISPONIBILI", "CONTACT NAVIGATION OFF": "NAVIGAZIONE CONTATTI DISATTIVATA", "THE BRIDGE STAYS WITH THE SELECTED VESSEL": "LA PLANCIA RESTA SULLA NAVE SELEZIONATA", - "{range} NM": "{range} MN", + "{range} NM": { + "one": "{range} MN", + "many": "{range} MN", + "other": "{range} MN" + }, "AIS DESTINATION · CREW REPORTED": "DESTINAZIONE AIS · DICHIARATA DALL'EQUIPAGGIO", "DEST {bearing}": "DEST {bearing}", "Disable cockpit weather effects": "Disattiva gli effetti meteo del cockpit", @@ -1880,6 +1901,7 @@ "Reclassify as TR-3B": "Riclassifica come TR-3B", "TRACK ACQUIRED": "TRACCIA ACQUISITA", "{label} · COURSE {heading}°": "{label} · ROTTA {heading}°", + "vessel|{label} · COURSE {heading}°": "{label} · ROTTA {heading}°", "{label} · HEADING {heading}°": "{label} · PRUA {heading}°", "{label} · NO HEADING": "{label} · PRUA N/D", "{label} · NADIR VIEW": "{label} · VISTA AL NADIR", @@ -2152,6 +2174,7 @@ "Observed history": "Storico osservato", "Later observation": "Osservazione successiva", "Latest": "Più recente", + "news list|Latest": "Più recenti", "Newest frame per product": "Fotogramma più recente per prodotto", "Replay observed history": "Rivedi lo storico osservato", "Imagery on Esri · Google 3D returns when cleared": "Immagini su Esri · Google 3D torna con CANCELLA", @@ -2880,7 +2903,11 @@ "Contact cockpit summary": "Riepilogo contatto del cockpit", "CONTACT": "CONTATTO", "CONTACTS · 250 KM": "CONTATTI · 250 KM", - "RINGS {spacing} NM": "CERCHI {spacing} MN", + "RINGS {spacing} NM": { + "one": "CERCHI {spacing} MN", + "many": "CERCHI {spacing} MN", + "other": "CERCHI {spacing} MN" + }, "{count} CONTACTS": { "one": "{count} CONTATTO", "many": "{count} DI CONTATTI", @@ -3207,6 +3234,7 @@ "Left panels": "Pannelli a sinistra", "Right panels": "Pannelli a destra", "CONFIRMED": "CONFERMATA", + "sightings filter|CONFIRMED": "CONFERMATE", "PAD / RTLS": "RAMPA / RTLS", "fire confidence filter|All": "Tutti", "fire confidence filter|Nominal+": "Nominale+", @@ -3473,7 +3501,11 @@ "Photo of {name}": "Foto di {name}", "Acartia": "Acartia", "CC BY 4.0": "CC BY 4.0", - "{count} sightings in view": "Avvistamenti nella vista: {count}", + "{count} sightings in view": { + "one": "{count} avvistamento nella vista", + "many": "{count} di avvistamenti nella vista", + "other": "{count} avvistamenti nella vista" + }, "Close sighting": "Chiudi avvistamento", "Wildlife observed within 48 h (whales 7 d). Color and badge glyph show the taxon group. Sensitive species are shown only as 0.2° cells; Salish Sea marine mammal reports via Acartia are rounded to 0.01°. Not a census.": "Fauna osservata nelle ultime 48 h (cetacei 7 giorni). Colore e simbolo del contrassegno indicano il gruppo tassonomico. Le specie sensibili sono mostrate solo in celle di 0,2°; le segnalazioni di mammiferi marini di Acartia nel mar dei Salish sono arrotondate a 0,01°. Non è un censimento.", "Open {name} on iNaturalist": "Apri {name} su iNaturalist", @@ -3484,20 +3516,31 @@ "{days}d": "{days} g", "All markers": "Tutti i marcatori", "Show markers of every age": "Mostra i marcatori di qualsiasi età", - "Maximum event age: {days}d; undated markers are kept": "Età massima degli eventi: {days} g; marcatori senza data mantenuti", + "Maximum event age: {days}d; undated markers are kept": { + "one": "Età massima degli eventi: {days} giorno; marcatori senza data mantenuti", + "many": "Età massima degli eventi: {days} di giorni; marcatori senza data mantenuti", + "other": "Età massima degli eventi: {days} giorni; marcatori senza data mantenuti" + }, "event age filter|All": "Tutti", "Event age": "Età degli eventi", - "Event age: {days}d · undated kept": "Età degli eventi: {days} g · senza data mantenuti", + "Event age: {days}d · undated kept": { + "one": "Età degli eventi: {days} giorno · senza data mantenuti", + "many": "Età degli eventi: {days} di giorni · senza data mantenuti", + "other": "Età degli eventi: {days} giorni · senza data mantenuti" + }, "Close camera preview": "Chiudi anteprima della telecamera", "Refresh map still": "Aggiorna immagine fissa sulla mappa", "The map still uses a separate request and may show a different moment.": "L'immagine sulla mappa usa una richiesta separata e può mostrare un momento diverso.", "Video plays from Québec 511, which sees your IP address.": "Il video viene riprodotto da Québec 511, che vede il tuo indirizzo IP.", "Press OPEN to load the photo": "Premi APRI per caricare la foto", "Captured {month}": "Scattata: {month}", - "this spot": "questo punto", "the view centre": "il centro della vista", "{source} at {place}": "{source}: {place}", + "{source} at this spot": "{source} in questo punto", + "{source} at the view centre": "{source} al centro della vista", "Street level at {place}": "Vista stradale: {place}", + "Street level at this spot": "Vista stradale in questo punto", + "Street level at the view centre": "Vista stradale al centro della vista", "Switching map": "Cambio mappa", "Opening imagery": "Apertura delle immagini", "Street View is ready: press {open} to load it": "Street View è pronto: premi {open} per caricarlo", @@ -3589,6 +3632,7 @@ "{source} imagery could not be opened": "Impossibile aprire le immagini di {source}", "{place} has no position to look for imagery at": "{place} non ha una posizione in cui cercare immagini", "No {source} imagery near {place}": "Nessuna immagine di {source} vicino a {place}", + "No {source} imagery near the view centre": "Nessuna immagine di {source} vicino al centro della vista", "{reason} (filters on: {filters})": "{reason} (filtri attivi: {filters})", "tiles unavailable": "tile non disponibili", "zoom in to load this layer": "ingrandisci per caricare questo livello", @@ -3691,6 +3735,10 @@ "REMOVE ALL": "RIMUOVI TUTTO", "Confirm: remove every added entry from Data Layers": "Conferma: rimuovi da Livelli dati tutte le voci aggiunte", "Remove every added entry from Data Layers": "Rimuovi da Livelli dati tutte le voci aggiunte", - "Showing {shown} of {total}": "Mostrati: {shown} su {total}", + "Showing {shown} of {total}": { + "one": "{shown} di {total} mostrata", + "many": "{shown} di {total} mostrate", + "other": "{shown} di {total} mostrate" + }, "BROWSE DATA LIBRARY": "ESPLORA LIBRERIA DATI" } diff --git a/src/i18n/locales/ja.json b/src/i18n/locales/ja.json index 62c517f21..c3bc088f8 100644 --- a/src/i18n/locales/ja.json +++ b/src/i18n/locales/ja.json @@ -62,8 +62,12 @@ "{severity} only": "{severity}のみ", "All categories": "すべてのカテゴリ", "Reading the news…": "ニュースを読み込み中…", - "News, last {hours} hours": "直近{hours}時間のニュース", - "Last {hours} h": "直近{hours}時間", + "News, last {hours} hours": { + "other": "直近{hours}時間のニュース" + }, + "Last {hours} h": { + "other": "直近{hours}時間" + }, "Time window": "期間", "Conflicts": "紛争", "Local": "ローカル", @@ -72,9 +76,13 @@ "Hotspots": "ホットスポット", "Severity": "深刻度", "Category": "カテゴリ", - "Nothing reported near here in the last {hours} h": "直近{hours}時間、この付近の報道はありません", + "Nothing reported near here in the last {hours} h": { + "other": "直近{hours}時間、この付近の報道はありません" + }, "Latest news": "最新ニュース", - "No news matches these filters in the last {hours} h": "直近{hours}時間で条件に合うニュースはありません", + "No news matches these filters in the last {hours} h": { + "other": "直近{hours}時間で条件に合うニュースはありません" + }, "Load older news": "以前のニュースを読み込む", "How to read the map": "地図の見方", "Colour: severity · icon: type of event": "色:深刻度 · アイコン:出来事の種類", @@ -564,6 +572,7 @@ "Previous — prior visited contact in the 250 km window": "前へ:250 km圏内で直前に訪れたコンタクト", "PREVIOUS": "前へ", "FOCUS": "フォーカス", + "site status|FOCUS": "フォーカス", "Next — nearest unvisited contact in the 250 km window": "次へ:250 km圏内で最も近い未訪問のコンタクト", "NEXT": "次へ", "Named areas ({n})": "名前付きエリア({n})", @@ -1776,7 +1785,9 @@ "ROUTE DATA UNAVAILABLE": "経路データなし", "CONTACT NAVIGATION OFF": "コンタクトナビゲーション オフ", "THE BRIDGE STAYS WITH THE SELECTED VESSEL": "ブリッジは選択中の船舶に固定", - "{range} NM": "{range}海里", + "{range} NM": { + "other": "{range}海里" + }, "AIS DESTINATION · CREW REPORTED": "AIS目的地 · 乗組員入力", "DEST {bearing}": "目的地 {bearing}", "Disable cockpit weather effects": "コックピットの天候エフェクトを無効にする", @@ -1822,6 +1833,7 @@ "Reclassify as TR-3B": "TR-3Bに再分類", "TRACK ACQUIRED": "追跡開始", "{label} · COURSE {heading}°": "{label} · 対地針路 {heading}°", + "vessel|{label} · COURSE {heading}°": "{label} · 対地針路 {heading}°", "{label} · HEADING {heading}°": "{label} · 船首方位 {heading}°", "{label} · NO HEADING": "{label} · 船首方位なし", "{label} · NADIR VIEW": "{label} · 直下視", @@ -2078,6 +2090,7 @@ "Observed history": "観測履歴", "Later observation": "次の観測", "Latest": "最新", + "news list|Latest": "最新", "Newest frame per product": "プロダクトごとの最新フレーム", "Replay observed history": "観測履歴を再生", "Imagery on Esri · Google 3D returns when cleared": "画像はEsri上に表示 · 消去するとGoogle 3Dに戻ります", @@ -2730,7 +2743,9 @@ "Contact cockpit summary": "コンタクトのコックピット概要", "CONTACT": "コンタクト", "CONTACTS · 250 KM": "コンタクト · 250 km", - "RINGS {spacing} NM": "距離環 {spacing}海里", + "RINGS {spacing} NM": { + "other": "距離環 {spacing}海里" + }, "{count} CONTACTS": { "other": "コンタクト {count}件" }, @@ -3057,6 +3072,7 @@ "Left panels": "左パネル", "Right panels": "右パネル", "CONFIRMED": "確認済み", + "sightings filter|CONFIRMED": "確認済み", "PAD / RTLS": "射場 / RTLS", "fire confidence filter|All": "すべて", "fire confidence filter|Nominal+": "中以上", @@ -3311,7 +3327,9 @@ "Photo of {name}": "{name}の写真", "Acartia": "Acartia", "CC BY 4.0": "CC BY 4.0", - "{count} sightings in view": "表示範囲に{count}件の目撃情報", + "{count} sightings in view": { + "other": "表示範囲に{count}件の目撃情報" + }, "Close sighting": "目撃情報を閉じる", "Wildlife observed within 48 h (whales 7 d). Color and badge glyph show the taxon group. Sensitive species are shown only as 0.2° cells; Salish Sea marine mammal reports via Acartia are rounded to 0.01°. Not a census.": "過去48時間以内に観察された野生生物(クジラ類は7日間)。色とバッジのアイコンは分類群を表します。保護が必要な種は0.2°のセルとしてのみ表示し、セイリッシュ海のAcartiaによる海生哺乳類の目撃情報は0.01°に丸めます。個体数調査ではありません。", "Open {name} on iNaturalist": "iNaturalistで{name}を開く", @@ -3322,20 +3340,27 @@ "{days}d": "{days}日", "All markers": "すべてのマーカー", "Show markers of every age": "日付にかかわらずすべてのマーカーを表示", - "Maximum event age: {days}d; undated markers are kept": "イベントの最大経過日数:{days}日。日付のないマーカーは保持", + "Maximum event age: {days}d; undated markers are kept": { + "other": "イベントの最大経過日数:{days}日。日付のないマーカーは保持" + }, "event age filter|All": "すべて", "Event age": "経過日数", - "Event age: {days}d · undated kept": "経過日数:{days}日以内 · 日付なしは保持", + "Event age: {days}d · undated kept": { + "other": "経過日数:{days}日以内 · 日付なしは保持" + }, "Close camera preview": "カメラのプレビューを閉じる", "Refresh map still": "地図上の静止画を更新", "The map still uses a separate request and may show a different moment.": "地図上の静止画は別のリクエストで取得されるため、異なる時点を表示する場合があります。", "Video plays from Québec 511, which sees your IP address.": "動画はQuébec 511から再生され、お使いのIPアドレスはQuébec 511側から見えます。", "Press OPEN to load the photo": "[開く]を押して写真を読み込む", "Captured {month}": "{month}撮影", - "this spot": "この地点", "the view centre": "表示中心", "{source} at {place}": "{place}の{source}", + "{source} at this spot": "この地点の{source}", + "{source} at the view centre": "表示中心の{source}", "Street level at {place}": "{place}のストリートレベル", + "Street level at this spot": "この地点のストリートレベル", + "Street level at the view centre": "表示中心のストリートレベル", "Switching map": "地図を切り替え中", "Opening imagery": "画像を開いています", "Street View is ready: press {open} to load it": "ストリートビューの準備ができました:[{open}]を押して読み込んでください", @@ -3427,6 +3452,7 @@ "{source} imagery could not be opened": "{source}の画像を開けませんでした", "{place} has no position to look for imagery at": "{place}には画像を探す位置がありません", "No {source} imagery near {place}": "{place}の近くに{source}の画像はありません", + "No {source} imagery near the view centre": "表示中心の近くに{source}の画像はありません", "{reason} (filters on: {filters})": "{reason}(有効なフィルター:{filters})", "tiles unavailable": "タイルを利用できません", "zoom in to load this layer": "ズームインしてこのレイヤーを読み込む", @@ -3517,6 +3543,8 @@ "REMOVE ALL": "すべて削除", "Confirm: remove every added entry from Data Layers": "確認:追加したすべての項目をデータレイヤーから削除", "Remove every added entry from Data Layers": "追加したすべての項目をデータレイヤーから削除", - "Showing {shown} of {total}": "{total}件中{shown}件を表示", + "Showing {shown} of {total}": { + "other": "{total}件中{shown}件を表示" + }, "BROWSE DATA LIBRARY": "データライブラリを見る" } diff --git a/src/i18n/locales/pt.json b/src/i18n/locales/pt.json index 5d3cfb253..fb8de411e 100644 --- a/src/i18n/locales/pt.json +++ b/src/i18n/locales/pt.json @@ -68,8 +68,16 @@ "{severity} only": "Apenas {severity}", "All categories": "Todas as categorias", "Reading the news…": "Lendo as notícias…", - "News, last {hours} hours": "Notícias de até {hours} h atrás", - "Last {hours} h": "Até {hours} h atrás", + "News, last {hours} hours": { + "one": "Notícias da última {hours} hora", + "many": "Notícias das últimas {hours} de horas", + "other": "Notícias das últimas {hours} horas" + }, + "Last {hours} h": { + "one": "Última {hours} h", + "many": "Últimas {hours} h", + "other": "Últimas {hours} h" + }, "Time window": "Período", "Conflicts": "Conflitos", "Local": "Local", @@ -78,9 +86,17 @@ "Hotspots": "Focos", "Severity": "Gravidade", "Category": "Categoria", - "Nothing reported near here in the last {hours} h": "Nada noticiado aqui perto desde {hours} h atrás", + "Nothing reported near here in the last {hours} h": { + "one": "Nada noticiado aqui perto na última {hours} h", + "many": "Nada noticiado aqui perto nas últimas {hours} h", + "other": "Nada noticiado aqui perto nas últimas {hours} h" + }, "Latest news": "Últimas notícias", - "No news matches these filters in the last {hours} h": "Nenhuma notícia de até {hours} h atrás corresponde a estes filtros", + "No news matches these filters in the last {hours} h": { + "one": "Nenhuma notícia da última {hours} h corresponde a estes filtros", + "many": "Nenhuma notícia das últimas {hours} h corresponde a estes filtros", + "other": "Nenhuma notícia das últimas {hours} h corresponde a estes filtros" + }, "Load older news": "Carregar notícias anteriores", "How to read the map": "Como ler o mapa", "Colour: severity · icon: type of event": "Cor: gravidade · ícone: tipo de evento", @@ -584,6 +600,7 @@ "Previous — prior visited contact in the 250 km window": "Anterior — contato visitado anteriormente na janela de 250 km", "PREVIOUS": "ANT.", "FOCUS": "FOCAR", + "site status|FOCUS": "EM FOCO", "Next — nearest unvisited contact in the 250 km window": "Próximo — contato não visitado mais próximo na janela de 250 km", "NEXT": "PRÓX.", "Named areas ({n})": "Áreas com nome ({n})", @@ -939,7 +956,7 @@ "ORBITAL VELOCITY": "VELOCIDADE ORBITAL", "SUB-SATELLITE POINT": "PONTO SUBSATÉLITE", "NORTH UP": "NORTE PARA CIMA", - "CURRENTLY OVER": "SOBREVOANDO AGORA", + "CURRENTLY OVER": "SOB O SATÉLITE", "{division}, {country}": "{division}, {country}", "{region} · near {place}": "{region} · perto de {place}", "NORAD {id}": "NORAD {id}", @@ -1832,7 +1849,11 @@ "ROUTE DATA UNAVAILABLE": "DADOS DE ROTA INDISPONÍVEIS", "CONTACT NAVIGATION OFF": "NAVEGAÇÃO DE CONTATOS DESLIGADA", "THE BRIDGE STAYS WITH THE SELECTED VESSEL": "O PASSADIÇO PERMANECE NA EMBARCAÇÃO SELECIONADA", - "{range} NM": "{range} MN", + "{range} NM": { + "one": "{range} MN", + "many": "{range} MN", + "other": "{range} MN" + }, "AIS DESTINATION · CREW REPORTED": "DESTINO AIS · INFORMADO PELA TRIPULAÇÃO", "DEST {bearing}": "DEST {bearing}", "Disable cockpit weather effects": "Desativar efeitos de clima na cabine", @@ -1879,7 +1900,8 @@ "Restore real aircraft": "Restaurar a aeronave real", "Reclassify as TR-3B": "Reclassificar como TR-3B", "TRACK ACQUIRED": "RASTRO ADQUIRIDO", - "{label} · COURSE {heading}°": "{label} · RUMO {heading}°", + "{label} · COURSE {heading}°": "{label} · CURSO {heading}°", + "vessel|{label} · COURSE {heading}°": "{label} · RUMO {heading}°", "{label} · HEADING {heading}°": "{label} · PROA {heading}°", "{label} · NO HEADING": "{label} · SEM PROA", "{label} · NADIR VIEW": "{label} · VISTA AO NADIR", @@ -2152,6 +2174,7 @@ "Observed history": "Histórico observado", "Later observation": "Observação posterior", "Latest": "Mais recente", + "news list|Latest": "Mais recentes", "Newest frame per product": "Quadro mais recente por produto", "Replay observed history": "Reproduzir o histórico observado", "Imagery on Esri · Google 3D returns when cleared": "Imagens sobre o Esri · LIMPAR restaura o Google 3D", @@ -2882,7 +2905,11 @@ "Contact cockpit summary": "Resumo do contato na cabine", "CONTACT": "CONTATO", "CONTACTS · 250 KM": "CONTATOS · 250 KM", - "RINGS {spacing} NM": "ANÉIS {spacing} MN", + "RINGS {spacing} NM": { + "one": "ANÉIS {spacing} MN", + "many": "ANÉIS {spacing} MN", + "other": "ANÉIS {spacing} MN" + }, "{count} CONTACTS": { "one": "{count} CONTATO", "many": "{count} DE CONTATOS", @@ -3207,6 +3234,7 @@ "Left panels": "Painéis à esquerda", "Right panels": "Painéis à direita", "CONFIRMED": "CONFIRMADA", + "sightings filter|CONFIRMED": "CONFIRMADOS", "PAD / RTLS": "PLATAFORMA / RTLS", "fire confidence filter|All": "Todas", "fire confidence filter|Nominal+": "Nominal+", @@ -3473,7 +3501,11 @@ "Photo of {name}": "Foto de {name}", "Acartia": "Acartia", "CC BY 4.0": "CC BY 4.0", - "{count} sightings in view": "Avistamentos na vista: {count}", + "{count} sightings in view": { + "one": "{count} avistamento na vista", + "many": "{count} de avistamentos na vista", + "other": "{count} avistamentos na vista" + }, "Close sighting": "Fechar avistamento", "Wildlife observed within 48 h (whales 7 d). Color and badge glyph show the taxon group. Sensitive species are shown only as 0.2° cells; Salish Sea marine mammal reports via Acartia are rounded to 0.01°. Not a census.": "Vida selvagem observada nas últimas 48 h (cetáceos 7 dias). A cor e o símbolo do emblema indicam o grupo taxonômico. Espécies sensíveis aparecem apenas em células de 0,2°; os relatos de mamíferos marinhos do mar de Salish via Acartia são arredondados para 0,01°. Não é um censo.", "Open {name} on iNaturalist": "Abrir {name} no iNaturalist", @@ -3484,20 +3516,31 @@ "{days}d": "{days} d", "All markers": "Todos os marcadores", "Show markers of every age": "Mostrar marcadores de qualquer idade", - "Maximum event age: {days}d; undated markers are kept": "Idade máxima do evento: {days} d; marcadores sem data são mantidos", + "Maximum event age: {days}d; undated markers are kept": { + "one": "Idade máxima do evento: {days} dia; marcadores sem data são mantidos", + "many": "Idade máxima do evento: {days} de dias; marcadores sem data são mantidos", + "other": "Idade máxima do evento: {days} dias; marcadores sem data são mantidos" + }, "event age filter|All": "Todos", "Event age": "Idade do evento", - "Event age: {days}d · undated kept": "Idade do evento: {days} d · sem data mantidos", + "Event age: {days}d · undated kept": { + "one": "Idade do evento: {days} dia · sem data mantidos", + "many": "Idade do evento: {days} de dias · sem data mantidos", + "other": "Idade do evento: {days} dias · sem data mantidos" + }, "Close camera preview": "Fechar prévia da câmera", "Refresh map still": "Atualizar imagem fixa no mapa", "The map still uses a separate request and may show a different moment.": "A imagem no mapa usa uma solicitação separada e pode mostrar outro momento.", "Video plays from Québec 511, which sees your IP address.": "O vídeo é reproduzido a partir do Québec 511, que vê o seu endereço IP.", "Press OPEN to load the photo": "Clique em ABRIR para carregar a foto", "Captured {month}": "Capturada em {month}", - "this spot": "este ponto", "the view centre": "o centro da vista", "{source} at {place}": "{source}: {place}", + "{source} at this spot": "{source} neste ponto", + "{source} at the view centre": "{source} no centro da vista", "Street level at {place}": "Nível da rua: {place}", + "Street level at this spot": "Nível da rua neste ponto", + "Street level at the view centre": "Nível da rua no centro da vista", "Switching map": "Mudando de mapa", "Opening imagery": "Abrindo imagens", "Street View is ready: press {open} to load it": "O Street View está pronto: clique em {open} para carregar", @@ -3589,6 +3632,7 @@ "{source} imagery could not be opened": "Não foi possível abrir as imagens de {source}", "{place} has no position to look for imagery at": "{place} não tem uma posição para buscar imagens", "No {source} imagery near {place}": "Nenhuma imagem de {source} perto de {place}", + "No {source} imagery near the view centre": "Nenhuma imagem de {source} perto do centro da vista", "{reason} (filters on: {filters})": "{reason} (filtros ativos: {filters})", "tiles unavailable": "blocos indisponíveis", "zoom in to load this layer": "aproxime o zoom para carregar esta camada", @@ -3691,6 +3735,10 @@ "REMOVE ALL": "REMOVER TUDO", "Confirm: remove every added entry from Data Layers": "Confirmar: remover de \"Camadas de dados\" todas as entradas adicionadas", "Remove every added entry from Data Layers": "Remover de \"Camadas de dados\" todas as entradas adicionadas", - "Showing {shown} of {total}": "Mostrando {shown} de {total}", + "Showing {shown} of {total}": { + "one": "Mostrando {shown} de {total}", + "many": "Mostrando {shown} de {total}", + "other": "Mostrando {shown} de {total}" + }, "BROWSE DATA LIBRARY": "EXPLORAR BIBLIOTECA DE DADOS" } diff --git a/src/i18n/locales/ru.json b/src/i18n/locales/ru.json index ef8b144e5..15934dd40 100644 --- a/src/i18n/locales/ru.json +++ b/src/i18n/locales/ru.json @@ -71,8 +71,18 @@ "{severity} only": "Только: {severity}", "All categories": "Все категории", "Reading the news…": "Читаем новости…", - "News, last {hours} hours": "Новости за последние {hours} ч", - "Last {hours} h": "За {hours} ч", + "News, last {hours} hours": { + "one": "Новости за последний {hours} час", + "few": "Новости за последние {hours} часа", + "many": "Новости за последние {hours} часов", + "other": "Новости за последние {hours} часа" + }, + "Last {hours} h": { + "one": "За {hours} ч", + "few": "За {hours} ч", + "many": "За {hours} ч", + "other": "За {hours} ч" + }, "Time window": "Период", "Conflicts": "Конфликты", "Local": "Местные", @@ -81,9 +91,19 @@ "Hotspots": "Горячие точки", "Severity": "Тяжесть", "Category": "Категория", - "Nothing reported near here in the last {hours} h": "За последние {hours} ч поблизости ничего не сообщалось", + "Nothing reported near here in the last {hours} h": { + "one": "За последний {hours} ч поблизости ничего не сообщалось", + "few": "За последние {hours} ч поблизости ничего не сообщалось", + "many": "За последние {hours} ч поблизости ничего не сообщалось", + "other": "За последние {hours} ч поблизости ничего не сообщалось" + }, "Latest news": "Последние новости", - "No news matches these filters in the last {hours} h": "За последние {hours} ч нет новостей по этим фильтрам", + "No news matches these filters in the last {hours} h": { + "one": "За последний {hours} ч нет новостей по этим фильтрам", + "few": "За последние {hours} ч нет новостей по этим фильтрам", + "many": "За последние {hours} ч нет новостей по этим фильтрам", + "other": "За последние {hours} ч нет новостей по этим фильтрам" + }, "Load older news": "Загрузить более ранние новости", "How to read the map": "Как читать карту", "Colour: severity · icon: type of event": "Цвет: тяжесть · значок: тип события", @@ -179,6 +199,7 @@ "Previous — prior visited contact in the 250 km window": "Назад — предыдущий посещённый контакт в радиусе 250 км", "PREVIOUS": "ПРЕД.", "FOCUS": "ФОКУС", + "site status|FOCUS": "ФОКУС", "Next — nearest unvisited contact in the 250 km window": "Далее — ближайший непосещённый контакт в радиусе 250 км", "NEXT": "СЛЕД.", "Open-source mapped/observed context. Missing broadcasts, unloaded map areas, or unmapped sites are not evidence of absence.": "Контекст из открытых источников. Отсутствие трансляций, незагруженные области карты или неотмеченные объекты — не доказательство отсутствия.", @@ -346,6 +367,7 @@ "Cancel replay": "Отменить повтор", "EST. DOWNRANGE": "РАСЧЁТ ПО ТРАССЕ", "CONFIRMED": "ПОДТВЕРЖДЕНО", + "sightings filter|CONFIRMED": "ПОДТВЕРЖДЕНО", "PAD / RTLS": "ПЛОЩАДКА / RTLS", "PLANNED · ": "ПЛАН · ", "SUPPLIED TRAJECTORY POINTS": "ПРЕДОСТАВЛЕННЫЕ ТОЧКИ ТРАЕКТОРИИ", @@ -545,7 +567,12 @@ "ROUTE DATA UNAVAILABLE": "ДАННЫЕ МАРШРУТА НЕДОСТУПНЫ", "CONTACT NAVIGATION OFF": "НАВИГАЦИЯ ПО КОНТАКТАМ ВЫКЛЮЧЕНА", "THE BRIDGE STAYS WITH THE SELECTED VESSEL": "МОСТИК ОСТАЁТСЯ НА ВЫБРАННОМ СУДНЕ", - "{range} NM": "{range} МОР. МИЛ.", + "{range} NM": { + "one": "{range} МОР. МИЛЯ", + "few": "{range} МОР. МИЛИ", + "many": "{range} МОР. МИЛЬ", + "other": "{range} МОР. МИЛИ" + }, "AIS DESTINATION · CREW REPORTED": "ПУНКТ НАЗНАЧЕНИЯ AIS · УКАЗАН ЭКИПАЖЕМ", "DEST {bearing}": "НАЗН. {bearing}", "Disable cockpit weather effects": "Выключить погодные эффекты кабины", @@ -591,6 +618,7 @@ "Select flight {title}": "Выбрать рейс {title}", "TRACK ACQUIRED": "ЦЕЛЬ ЗАХВАЧЕНА", "{label} · COURSE {heading}°": "{label} · ПУТЕВОЙ УГОЛ {heading}°", + "vessel|{label} · COURSE {heading}°": "{label} · ПУТЕВОЙ УГОЛ {heading}°", "{label} · HEADING {heading}°": "{label} · КУРС {heading}°", "{label} · NO HEADING": "{label} · НЕТ КУРСА", "{label} · NADIR VIEW": "{label} · ВИД В НАДИР", @@ -842,7 +870,12 @@ "EXIT BRIDGE": "ВЫЙТИ С МОСТИКА", "EXIT ORBIT": "ВЫЙТИ С ОРБИТЫ", "CONTACTS · 250 KM": "КОНТАКТЫ · 250 КМ", - "RINGS {spacing} NM": "КОЛЬЦА {spacing} МОР. МИЛ.", + "RINGS {spacing} NM": { + "one": "КОЛЬЦА {spacing} МОР. МИЛЯ", + "few": "КОЛЬЦА {spacing} МОР. МИЛИ", + "many": "КОЛЬЦА {spacing} МОР. МИЛЬ", + "other": "КОЛЬЦА {spacing} МОР. МИЛИ" + }, "{count} CONTACTS": { "one": "{count} КОНТАКТ", "few": "{count} КОНТАКТА", @@ -1699,6 +1732,7 @@ "Observed history": "История наблюдений", "Later observation": "Более позднее наблюдение", "Latest": "Последние", + "news list|Latest": "Последние", "Newest frame per product": "Самый свежий кадр каждого продукта", "Replay observed history": "Воспроизвести историю наблюдений", "S on another day replaces it · × unpins": "S в другой день заменяет его · × открепляет", @@ -3554,7 +3588,12 @@ "Photo of {name}": "Фото: {name}", "Acartia": "Acartia", "CC BY 4.0": "CC BY 4.0", - "{count} sightings in view": "Наблюдений в кадре: {count}", + "{count} sightings in view": { + "one": "{count} наблюдение в кадре", + "few": "{count} наблюдения в кадре", + "many": "{count} наблюдений в кадре", + "other": "{count} наблюдения в кадре" + }, "Close sighting": "Закрыть наблюдение", "Wildlife observed within 48 h (whales 7 d). Color and badge glyph show the taxon group. Sensitive species are shown only as 0.2° cells; Salish Sea marine mammal reports via Acartia are rounded to 0.01°. Not a census.": "Наблюдения живой природы за 48 ч (китообразные — 7 дней). Цвет и символ значка обозначают таксономическую группу. Уязвимые виды показаны только ячейками 0,2°; сообщения Acartia о морских млекопитающих моря Селиш округлены до 0,01°. Это не учёт численности.", "Open {name} on iNaturalist": "Открыть {name} в iNaturalist", @@ -3565,20 +3604,33 @@ "{days}d": "{days} дн.", "All markers": "Все метки", "Show markers of every age": "Показать метки любого возраста", - "Maximum event age: {days}d; undated markers are kept": "Максимальный возраст события: {days} дн.; метки без даты остаются", + "Maximum event age: {days}d; undated markers are kept": { + "one": "Максимальный возраст события: {days} дн.; метки без даты остаются", + "few": "Максимальный возраст события: {days} дн.; метки без даты остаются", + "many": "Максимальный возраст события: {days} дн.; метки без даты остаются", + "other": "Максимальный возраст события: {days} дн.; метки без даты остаются" + }, "event age filter|All": "Все", "Event age": "Возраст события", - "Event age: {days}d · undated kept": "Возраст события: {days} дн. · метки без даты остаются", + "Event age: {days}d · undated kept": { + "one": "Возраст события: {days} дн. · метки без даты остаются", + "few": "Возраст события: {days} дн. · метки без даты остаются", + "many": "Возраст события: {days} дн. · метки без даты остаются", + "other": "Возраст события: {days} дн. · метки без даты остаются" + }, "Close camera preview": "Закрыть просмотр камеры", "Refresh map still": "Обновить кадр на карте", "The map still uses a separate request and may show a different moment.": "Кадр на карте запрашивается отдельно и может показывать другой момент.", "Video plays from Québec 511, which sees your IP address.": "Видео воспроизводится с Québec 511, который видит ваш IP-адрес.", "Press OPEN to load the photo": "Нажмите ОТКРЫТЬ, чтобы загрузить снимок", "Captured {month}": "Снято: {month}", - "this spot": "эта точка", "the view centre": "центр вида", "{source} at {place}": "{source}: {place}", + "{source} at this spot": "{source} в этой точке", + "{source} at the view centre": "{source} в центре вида", "Street level at {place}": "Уличные снимки: {place}", + "Street level at this spot": "Уличные снимки в этой точке", + "Street level at the view centre": "Уличные снимки в центре вида", "Switching map": "Смена карты", "Opening imagery": "Открытие снимков", "Street View is ready: press {open} to load it": "Просмотр улиц готов: нажмите {open}, чтобы загрузить", @@ -3670,6 +3722,7 @@ "{source} imagery could not be opened": "Не удалось открыть снимки {source}", "{place} has no position to look for imagery at": "У места «{place}» нет координат для поиска снимков", "No {source} imagery near {place}": "Нет снимков {source} рядом с местом «{place}»", + "No {source} imagery near the view centre": "Нет снимков {source} рядом с центром вида", "{reason} (filters on: {filters})": "{reason} (включены фильтры: {filters})", "tiles unavailable": "тайлы недоступны", "Environment": "Окружающая среда", @@ -3758,7 +3811,12 @@ "switch on a dataset to load features": "включите набор данных, чтобы загрузить объекты", "Data Library at a glance": "Библиотека данных вкратце", "Map features": "Объекты на карте", - "Showing {shown} of {total}": "Показано {shown} из {total}", + "Showing {shown} of {total}": { + "one": "Показано {shown} из {total}", + "few": "Показано {shown} из {total}", + "many": "Показано {shown} из {total}", + "other": "Показано {shown} из {total}" + }, "Datasets": "Наборы данных", "Themes": "Темы", "zoom in to load this layer": "приблизьте, чтобы загрузить этот слой", diff --git a/src/i18n/locales/sv.json b/src/i18n/locales/sv.json index 87c66ef3f..e124eeae9 100644 --- a/src/i18n/locales/sv.json +++ b/src/i18n/locales/sv.json @@ -67,18 +67,30 @@ "{severity} and above": "{severity} och uppåt", "{severity} only": "Endast ”{severity}”", "All categories": "Alla kategorier", - "Last {hours} h": "Senaste {hours} h", + "Last {hours} h": { + "one": "Senaste {hours} h", + "other": "Senaste {hours} h" + }, "Reading the news…": "Läser in nyheterna …", - "News, last {hours} hours": "Nyheter, senaste {hours} h", + "News, last {hours} hours": { + "one": "Nyheter, senaste {hours} h", + "other": "Nyheter, senaste {hours} h" + }, "Time window": "Tidsfönster", "News sections": "Nyhetssektioner", "Hotspots": "Oroshärdar", "Severity": "Allvarlighetsgrad", "Category": "Kategori", "Zoom in to see local news": "Zooma in för att se lokala nyheter", - "Nothing reported near here in the last {hours} h": "Inget rapporterat i närheten senaste {hours} h", + "Nothing reported near here in the last {hours} h": { + "one": "Inget rapporterat i närheten senaste {hours} h", + "other": "Inget rapporterat i närheten senaste {hours} h" + }, "Latest news": "Senaste nyheterna", - "No news matches these filters in the last {hours} h": "Inga nyheter matchar filtren senaste {hours} h", + "No news matches these filters in the last {hours} h": { + "one": "Inga nyheter matchar filtren senaste {hours} h", + "other": "Inga nyheter matchar filtren senaste {hours} h" + }, "Load older news": "Ladda äldre nyheter", "How to read the map": "Så läses kartan", "Colour: severity · icon: type of event": "Färg: allvarlighetsgrad · ikon: typ av händelse", @@ -198,6 +210,7 @@ "Previous — prior visited contact in the 250 km window": "Förra – senast besökta kontakt inom 250 km", "PREVIOUS": "FÖRRA", "FOCUS": "FOKUS", + "site status|FOCUS": "FOKUS", "Next — nearest unvisited contact in the 250 km window": "Nästa – närmaste obesökta kontakt inom 250 km", "NEXT": "NÄSTA", "Open-source mapped/observed context. Missing broadcasts, unloaded map areas, or unmapped sites are not evidence of absence.": "Kartlagd/observerad kontext från öppna källor. Uteblivna sändningar, kartområden som inte har laddats eller platser som inte är kartlagda bevisar inte att något saknas.", @@ -565,6 +578,7 @@ "Reclassify as TR-3B": "Klassa om som TR-3B", "TRACK ACQUIRED": "SPÅR LÅST", "{label} · COURSE {heading}°": "{label} · FÄRDRIKTNING {heading}°", + "vessel|{label} · COURSE {heading}°": "{label} · FÄRDRIKTNING {heading}°", "Context could not restore every layer; try again": "Läget ”Kontext” kunde inte återställa alla lager – försök igen", "No selected data layers": "Inga valda datalager", "{count} data layers could not be cleared": { @@ -2326,6 +2340,7 @@ "Observed history": "Observerad historik", "Later observation": "Senare observation", "Latest": "Senaste", + "news list|Latest": "Senaste", "Newest frame per product": "Senaste bildruta per produkt", "Replay observed history": "Spela upp observerad historik", "Imagery on Esri · Google 3D returns when cleared": "Bilder på Esri · Google 3D återkommer när de rensas", @@ -3049,6 +3064,7 @@ "Left panels": "Vänstra paneler", "Right panels": "Högra paneler", "CONFIRMED": "BEKRÄFTAD", + "sightings filter|CONFIRMED": "BEKRÄFTADE", "PAD / RTLS": "RAMP / RTLS", "fire confidence filter|All": "Alla", "fire confidence filter|Nominal+": "Normal+", @@ -3309,7 +3325,10 @@ "Photo of {name}": "Foto av {name}", "Acartia": "Acartia", "CC BY 4.0": "CC BY 4.0", - "{count} sightings in view": "Observationer i vyn: {count}", + "{count} sightings in view": { + "one": "{count} observation i vyn", + "other": "{count} observationer i vyn" + }, "Close sighting": "Stäng observationen", "Wildlife observed within 48 h (whales 7 d). Color and badge glyph show the taxon group. Sensitive species are shown only as 0.2° cells; Salish Sea marine mammal reports via Acartia are rounded to 0.01°. Not a census.": "Djur, växter och svampar observerade de senaste 48 h (valar 7 d). Färg och symbol visar artgruppen. Känsliga arter visas bara som rutor på 0,2°; rapporter om marina däggdjur i Salish Sea via Acartia avrundas till 0,01°. Ingen inventering.", "Open {name} on iNaturalist": "Öppna {name} på iNaturalist", @@ -3320,20 +3339,29 @@ "{days}d": "{days} d", "All markers": "Alla markörer", "Show markers of every age": "Visa markörer oavsett ålder", - "Maximum event age: {days}d; undated markers are kept": "Högsta ålder på händelser: {days} d; markörer utan datum behålls", + "Maximum event age: {days}d; undated markers are kept": { + "one": "Högsta ålder på händelser: {days} d; markörer utan datum behålls", + "other": "Högsta ålder på händelser: {days} d; markörer utan datum behålls" + }, "event age filter|All": "Alla", "Event age": "Händelsernas ålder", - "Event age: {days}d · undated kept": "Händelsernas ålder: {days} d · utan datum behålls", + "Event age: {days}d · undated kept": { + "one": "Händelsernas ålder: {days} d · utan datum behålls", + "other": "Händelsernas ålder: {days} d · utan datum behålls" + }, "Close camera preview": "Stäng förhandsvisningen av kameran", "Refresh map still": "Uppdatera stillbilden på kartan", "The map still uses a separate request and may show a different moment.": "Stillbilden på kartan hämtas separat och kan visa ett annat ögonblick.", "Video plays from Québec 511, which sees your IP address.": "Videon spelas upp från Québec 511, som ser din IP-adress.", "Press OPEN to load the photo": "Tryck på ÖPPNA för att ladda fotot", "Captured {month}": "Tagen {month}", - "this spot": "den här platsen", "the view centre": "vyns mitt", "{source} at {place}": "{source} vid {place}", + "{source} at this spot": "{source} på den här platsen", + "{source} at the view centre": "{source} i vyns mitt", "Street level at {place}": "Gatunivå vid {place}", + "Street level at this spot": "Gatunivå på den här platsen", + "Street level at the view centre": "Gatunivå i vyns mitt", "Switching map": "Byter karta", "Opening imagery": "Öppnar bilder", "Street View is ready: press {open} to load it": "Street View är redo: tryck på {open} för att ladda den", @@ -3367,7 +3395,10 @@ "LIVE AIS": "LIVE-AIS", "CONTACT NAVIGATION OFF": "KONTAKTNAVIGERING AV", "THE BRIDGE STAYS WITH THE SELECTED VESSEL": "BRYGGAN STANNAR PÅ DET VALDA FARTYGET", - "{range} NM": "{range} NM", + "{range} NM": { + "one": "{range} NM", + "other": "{range} NM" + }, "AIS DESTINATION · CREW REPORTED": "AIS-DESTINATION · ANGIVEN AV BESÄTTNINGEN", "{label} · NADIR VIEW": "{label} · NADIRVY", "SITES STANDBY": "PLATSER I VÄNTLÄGE", @@ -3446,7 +3477,10 @@ "Zoom in (+)": "Zooma in (+)", "Zoom to the imaging sensor swath": "Zooma till sensorns avbildningsstråk", "SENSOR": "SENSOR", - "RINGS {spacing} NM": "RINGAR {spacing} NM", + "RINGS {spacing} NM": { + "one": "RINGAR {spacing} NM", + "other": "RINGAR {spacing} NM" + }, "{count} CONTACTS": { "one": "{count} KONTAKT", "other": "{count} KONTAKTER" @@ -3500,6 +3534,7 @@ "{source} imagery could not be opened": "Bilder från {source} kunde inte öppnas", "{place} has no position to look for imagery at": "{place} har ingen position att söka efter bilder vid", "No {source} imagery near {place}": "Inga bilder från {source} nära {place}", + "No {source} imagery near the view centre": "Inga bilder från {source} nära vyns mitt", "{reason} (filters on: {filters})": "{reason} (aktiva filter: {filters})", "1 h/s": "1 h/s", "1 d/s": "1 d/s", @@ -3604,6 +3639,9 @@ "REMOVE ALL": "TA BORT ALLA", "Confirm: remove every added entry from Data Layers": "Bekräfta: ta bort alla tillagda poster från Datalager", "Remove every added entry from Data Layers": "Ta bort alla tillagda poster från Datalager", - "Showing {shown} of {total}": "Visar {shown} av {total}", + "Showing {shown} of {total}": { + "one": "Visar {shown} av {total}", + "other": "Visar {shown} av {total}" + }, "BROWSE DATA LIBRARY": "BLÄDDRA I DATABIBLIOTEKET" } diff --git a/src/i18n/locales/uk.json b/src/i18n/locales/uk.json index 4b079ac0a..defb9bc7d 100644 --- a/src/i18n/locales/uk.json +++ b/src/i18n/locales/uk.json @@ -71,8 +71,18 @@ "{severity} only": "Лише {severity}", "All categories": "Усі категорії", "Reading the news…": "Читаємо новини…", - "News, last {hours} hours": "Новини за {hours} год", - "Last {hours} h": "За {hours} год", + "News, last {hours} hours": { + "one": "Новини за останню {hours} годину", + "few": "Новини за останні {hours} години", + "many": "Новини за останні {hours} годин", + "other": "Новини за останні {hours} години" + }, + "Last {hours} h": { + "one": "За {hours} год", + "few": "За {hours} год", + "many": "За {hours} год", + "other": "За {hours} год" + }, "Time window": "Період", "Conflicts": "Конфлікти", "Local": "Місцеві", @@ -81,9 +91,19 @@ "Hotspots": "Гарячі точки", "Severity": "Тяжкість", "Category": "Категорія", - "Nothing reported near here in the last {hours} h": "За {hours} год поблизу нічого не повідомлялося", + "Nothing reported near here in the last {hours} h": { + "one": "За останню {hours} год поблизу нічого не повідомлялося", + "few": "За останні {hours} год поблизу нічого не повідомлялося", + "many": "За останні {hours} год поблизу нічого не повідомлялося", + "other": "За останні {hours} год поблизу нічого не повідомлялося" + }, "Latest news": "Останні новини", - "No news matches these filters in the last {hours} h": "За {hours} год немає новин за цими фільтрами", + "No news matches these filters in the last {hours} h": { + "one": "За останню {hours} год немає новин за цими фільтрами", + "few": "За останні {hours} год немає новин за цими фільтрами", + "many": "За останні {hours} год немає новин за цими фільтрами", + "other": "За останні {hours} год немає новин за цими фільтрами" + }, "Load older news": "Завантажити давніші новини", "How to read the map": "Як читати карту", "Colour: severity · icon: type of event": "Колір: тяжкість · значок: тип події", @@ -594,6 +614,7 @@ "Previous — prior visited contact in the 250 km window": "Назад — попередній переглянутий контакт у радіусі 250 км", "PREVIOUS": "НАЗАД", "FOCUS": "ФОКУС", + "site status|FOCUS": "ФОКУС", "Next — nearest unvisited contact in the 250 km window": "Далі — найближчий ще не переглянутий контакт у радіусі 250 км", "NEXT": "ДАЛІ", "Named areas ({n})": "Іменовані зони ({n})", @@ -956,7 +977,7 @@ "ORBITAL VELOCITY": "ОРБІТАЛЬНА ШВИДКІСТЬ", "SUB-SATELLITE POINT": "ПІДСУПУТНИКОВА ТОЧКА", "NORTH UP": "ПІВНІЧ УГОРІ", - "CURRENTLY OVER": "ЗАРАЗ НАД", + "CURRENTLY OVER": "ПІД СУПУТНИКОМ", "{division}, {country}": "{division}, {country}", "{region} · near {place}": "{region} · поблизу: {place}", "NORAD {id}": "NORAD {id}", @@ -1859,7 +1880,12 @@ "ROUTE DATA UNAVAILABLE": "ДАНІ МАРШРУТУ НЕДОСТУПНІ", "CONTACT NAVIGATION OFF": "НАВІГАЦІЮ КОНТАКТАМИ ВИМКНЕНО", "THE BRIDGE STAYS WITH THE SELECTED VESSEL": "МІСТОК ЗАЛИШАЄТЬСЯ НА ВИБРАНОМУ СУДНІ", - "{range} NM": "{range} МОР. МИЛ.", + "{range} NM": { + "one": "{range} МОР. МИЛЯ", + "few": "{range} МОР. МИЛІ", + "many": "{range} МОР. МИЛЬ", + "other": "{range} МОР. МИЛІ" + }, "AIS DESTINATION · CREW REPORTED": "ПРИЗНАЧЕННЯ AIS · ВКАЗАНО ЕКІПАЖЕМ", "DEST {bearing}": "ПРИЗН. {bearing}", "Disable cockpit weather effects": "Вимкнути погодні ефекти кабіни", @@ -1908,6 +1934,7 @@ "Reclassify as TR-3B": "Перекласифікувати як TR-3B", "TRACK ACQUIRED": "ТРЕК ЗАХОПЛЕНО", "{label} · COURSE {heading}°": "{label} · ШЛЯХОВИЙ КУТ {heading}°", + "vessel|{label} · COURSE {heading}°": "{label} · ШЛЯХОВИЙ КУТ {heading}°", "{label} · HEADING {heading}°": "{label} · КУРС {heading}°", "{label} · NO HEADING": "{label} · НЕМАЄ КУРСУ", "{label} · NADIR VIEW": "{label} · ВИГЛЯД У НАДИР", @@ -2188,6 +2215,7 @@ "Observed history": "Історія спостережень", "Later observation": "Наступне спостереження", "Latest": "Останні", + "news list|Latest": "Останні", "Newest frame per product": "Найсвіжіший кадр кожного продукту", "Replay observed history": "Відтворити історію спостережень", "Imagery on Esri · Google 3D returns when cleared": "Підкладка: Esri · скидання поверне Google 3D", @@ -2954,7 +2982,12 @@ "Contact cockpit summary": "Зведення контакту в кабіні", "CONTACT": "КОНТАКТ", "CONTACTS · 250 KM": "КОНТАКТИ · 250 КМ", - "RINGS {spacing} NM": "КІЛЬЦЯ {spacing} МОР. МИЛ.", + "RINGS {spacing} NM": { + "one": "КІЛЬЦЯ {spacing} МОР. МИЛЯ", + "few": "КІЛЬЦЯ {spacing} МОР. МИЛІ", + "many": "КІЛЬЦЯ {spacing} МОР. МИЛЬ", + "other": "КІЛЬЦЯ {spacing} МОР. МИЛІ" + }, "{count} CONTACTS": { "one": "{count} КОНТАКТ", "few": "{count} КОНТАКТИ", @@ -3295,6 +3328,7 @@ "Left panels": "Ліві панелі", "Right panels": "Праві панелі", "CONFIRMED": "ПІДТВЕРДЖЕНО", + "sightings filter|CONFIRMED": "ПІДТВЕРДЖЕНО", "PAD / RTLS": "МІСЦЕ ЗАПУСКУ / RTLS", "Name of {name}": "Назва: {name}", "Change the colour of {name}": "Змінити колір: {name}", @@ -3554,7 +3588,12 @@ "Photo of {name}": "Фото {name}", "Acartia": "Acartia", "CC BY 4.0": "CC BY 4.0", - "{count} sightings in view": "Спостережень у кадрі: {count}", + "{count} sightings in view": { + "one": "{count} спостереження в кадрі", + "few": "{count} спостереження в кадрі", + "many": "{count} спостережень у кадрі", + "other": "{count} спостереження в кадрі" + }, "Close sighting": "Закрити спостереження", "Wildlife observed within 48 h (whales 7 d). Color and badge glyph show the taxon group. Sensitive species are shown only as 0.2° cells; Salish Sea marine mammal reports via Acartia are rounded to 0.01°. Not a census.": "Спостереження живої природи за 48 год (китоподібні — 7 днів). Колір і символ значка позначають таксономічну групу. Вразливі види показано лише комірками 0,2°; повідомлення Acartia про морських ссавців моря Селіш округлено до 0,01°. Не перепис.", "Open {name} on iNaturalist": "Відкрити {name} в iNaturalist", @@ -3565,20 +3604,33 @@ "{days}d": "{days} дн", "All markers": "Усі мітки", "Show markers of every age": "Показати мітки будь-якого віку", - "Maximum event age: {days}d; undated markers are kept": "Максимальний вік події: {days} дн; мітки без дати залишаються", + "Maximum event age: {days}d; undated markers are kept": { + "one": "Максимальний вік події: {days} дн; мітки без дати залишаються", + "few": "Максимальний вік події: {days} дн; мітки без дати залишаються", + "many": "Максимальний вік події: {days} дн; мітки без дати залишаються", + "other": "Максимальний вік події: {days} дн; мітки без дати залишаються" + }, "event age filter|All": "Усі", "Event age": "Вік події", - "Event age: {days}d · undated kept": "Вік події: {days} дн · мітки без дати залишаються", + "Event age: {days}d · undated kept": { + "one": "Вік події: {days} дн · мітки без дати залишаються", + "few": "Вік події: {days} дн · мітки без дати залишаються", + "many": "Вік події: {days} дн · мітки без дати залишаються", + "other": "Вік події: {days} дн · мітки без дати залишаються" + }, "Close camera preview": "Закрити перегляд камери", "Refresh map still": "Оновити кадр на карті", "The map still uses a separate request and may show a different moment.": "Кадр на карті запитується окремо та може показувати інший момент.", "Video plays from Québec 511, which sees your IP address.": "Відео відтворюється з Québec 511, який бачить вашу IP-адресу.", "Press OPEN to load the photo": "Натисніть «ВІДКРИТИ», щоб завантажити фото", "Captured {month}": "Знято: {month}", - "this spot": "це місце", "the view centre": "центр карти", "{source} at {place}": "{source}: {place}", + "{source} at this spot": "{source} у цьому місці", + "{source} at the view centre": "{source} у центрі карти", "Street level at {place}": "Вуличні знімки: {place}", + "Street level at this spot": "Вуличні знімки в цьому місці", + "Street level at the view centre": "Вуличні знімки в центрі карти", "Switching map": "Перемикання карти", "Opening imagery": "Відкриття знімків", "Street View is ready: press {open} to load it": "Перегляд вулиць готовий: натисніть «{open}», щоб завантажити", @@ -3670,6 +3722,7 @@ "{source} imagery could not be opened": "Не вдалося відкрити знімки {source}", "{place} has no position to look for imagery at": "Для місця «{place}» немає координат для пошуку знімків", "No {source} imagery near {place}": "Немає знімків {source} поблизу: {place}", + "No {source} imagery near the view centre": "Немає знімків {source} поблизу центру карти", "{reason} (filters on: {filters})": "{reason} (увімкнено фільтри: {filters})", "tiles unavailable": "тайли недоступні", "zoom in to load this layer": "наблизьте карту, щоб завантажити цей шар", @@ -3778,6 +3831,11 @@ "REMOVE ALL": "ВИДАЛИТИ ВСЕ", "Confirm: remove every added entry from Data Layers": "Підтвердити: видалити всі додані записи з «Шарів даних»", "Remove every added entry from Data Layers": "Видалити всі додані записи з «Шарів даних»", - "Showing {shown} of {total}": "Показано {shown} з {total}", + "Showing {shown} of {total}": { + "one": "Показано {shown} з {total}", + "few": "Показано {shown} з {total}", + "many": "Показано {shown} з {total}", + "other": "Показано {shown} з {total}" + }, "BROWSE DATA LIBRARY": "ВІДКРИТИ БІБЛІОТЕКУ ДАНИХ" } diff --git a/src/i18n/locales/zh-CN.json b/src/i18n/locales/zh-CN.json index 8311259cd..0ca6af0f4 100644 --- a/src/i18n/locales/zh-CN.json +++ b/src/i18n/locales/zh-CN.json @@ -62,8 +62,12 @@ "{severity} only": "仅{severity}", "All categories": "所有类别", "Reading the news…": "正在读取新闻…", - "News, last {hours} hours": "最近 {hours} 小时的新闻", - "Last {hours} h": "最近 {hours} 小时", + "News, last {hours} hours": { + "other": "最近 {hours} 小时的新闻" + }, + "Last {hours} h": { + "other": "最近 {hours} 小时" + }, "Time window": "时间范围", "Conflicts": "冲突", "Local": "本地", @@ -72,9 +76,13 @@ "Hotspots": "热点", "Severity": "严重程度", "Category": "类别", - "Nothing reported near here in the last {hours} h": "最近 {hours} 小时附近无报道", + "Nothing reported near here in the last {hours} h": { + "other": "最近 {hours} 小时附近无报道" + }, "Latest news": "最新新闻", - "No news matches these filters in the last {hours} h": "最近 {hours} 小时没有符合这些筛选条件的新闻", + "No news matches these filters in the last {hours} h": { + "other": "最近 {hours} 小时没有符合这些筛选条件的新闻" + }, "Load older news": "加载更早的新闻", "How to read the map": "如何解读地图", "Colour: severity · icon: type of event": "颜色:严重程度 · 图标:事件类型", @@ -563,6 +571,7 @@ "Previous — prior visited contact in the 250 km window": "上一个:250 km 范围内先前访问过的目标", "PREVIOUS": "上一个", "FOCUS": "聚焦", + "site status|FOCUS": "聚焦", "Next — nearest unvisited contact in the 250 km window": "下一个:250 km 范围内最近的未访问目标", "NEXT": "下一个", "Named areas ({n})": "已命名区域({n})", @@ -929,6 +938,7 @@ "Cancel replay": "取消回放", "EST. DOWNRANGE": "预估落点距离", "CONFIRMED": "已确认", + "sightings filter|CONFIRMED": "已确认", "PAD / RTLS": "发射台 / RTLS", "PLANNED · ": "计划 · ", "SUPPLIED TRAJECTORY POINTS": "提供的轨迹点", @@ -1750,7 +1760,9 @@ "ROUTE DATA UNAVAILABLE": "航线数据不可用", "CONTACT NAVIGATION OFF": "目标导航已关闭", "THE BRIDGE STAYS WITH THE SELECTED VESSEL": "驾驶台保持在所选船舶上", - "{range} NM": "{range} 海里", + "{range} NM": { + "other": "{range} 海里" + }, "AIS DESTINATION · CREW REPORTED": "AIS 目的地 · 船员申报", "DEST {bearing}": "目的地 {bearing}", "Disable cockpit weather effects": "停用座舱天气效果", @@ -1796,6 +1808,7 @@ "Reclassify as TR-3B": "重新归类为 TR-3B", "TRACK ACQUIRED": "已获取航迹", "{label} · COURSE {heading}°": "{label} · 对地航向 {heading}°", + "vessel|{label} · COURSE {heading}°": "{label} · 对地航向 {heading}°", "{label} · HEADING {heading}°": "{label} · 船首向 {heading}°", "{label} · NO HEADING": "{label} · 无船首向", "{label} · NADIR VIEW": "{label} · 天底视图", @@ -2048,6 +2061,7 @@ "Observed history": "观测历史", "Later observation": "较晚观测", "Latest": "最新", + "news list|Latest": "最新", "Newest frame per product": "每个产品的最新一帧", "Replay observed history": "回放观测历史", "Imagery on Esri · Google 3D returns when cleared": "影像显示在 Esri 底图上 · 清除后恢复 Google 3D", @@ -2629,7 +2643,9 @@ "Contact cockpit summary": "目标座舱摘要", "CONTACT": "目标", "CONTACTS · 250 KM": "目标 · 250 km", - "RINGS {spacing} NM": "距标圈 {spacing} 海里", + "RINGS {spacing} NM": { + "other": "距标圈 {spacing} 海里" + }, "{count} CONTACTS": { "other": "{count} 个目标" }, @@ -3311,7 +3327,9 @@ "Photo of {name}": "{name} 的照片", "Acartia": "Acartia", "CC BY 4.0": "CC BY 4.0", - "{count} sightings in view": "视野内有 {count} 次目击", + "{count} sightings in view": { + "other": "视野内有 {count} 次目击" + }, "Close sighting": "关闭目击记录", "Wildlife observed within 48 h (whales 7 d). Color and badge glyph show the taxon group. Sensitive species are shown only as 0.2° cells; Salish Sea marine mammal reports via Acartia are rounded to 0.01°. Not a census.": "近 48 小时内观察到的野生生物(鲸类为 7 天)。颜色与徽章图标表示分类群。敏感物种仅以 0.2° 网格显示;Acartia 提供的萨利希海海洋哺乳动物目击位置四舍五入到 0.01°。并非种群普查。", "Open {name} on iNaturalist": "在 iNaturalist 上打开 {name}", @@ -3322,20 +3340,27 @@ "{days}d": "{days} 天", "All markers": "所有标记", "Show markers of every age": "显示所有时间的标记", - "Maximum event age: {days}d; undated markers are kept": "仅显示 {days} 天内的事件;保留无日期标记", + "Maximum event age: {days}d; undated markers are kept": { + "other": "仅显示 {days} 天内的事件;保留无日期标记" + }, "event age filter|All": "全部", "Event age": "事件时间", - "Event age: {days}d · undated kept": "事件时间:{days} 天内 · 保留无日期标记", + "Event age: {days}d · undated kept": { + "other": "事件时间:{days} 天内 · 保留无日期标记" + }, "Close camera preview": "关闭摄像头预览", "Refresh map still": "刷新地图静止画面", "The map still uses a separate request and may show a different moment.": "地图静止画面通过单独的请求获取,可能显示不同的时刻。", "Video plays from Québec 511, which sees your IP address.": "视频从 Québec 511 播放,Québec 511 会看到你的 IP 地址。", "Press OPEN to load the photo": "点击“打开”加载照片", "Captured {month}": "拍摄于 {month}", - "this spot": "此处", "the view centre": "视野中心", "{source} at {place}": "{place} 的 {source}", + "{source} at this spot": "此处的 {source}", + "{source} at the view centre": "视图中心的 {source}", "Street level at {place}": "{place} 的街景", + "Street level at this spot": "此处的街景", + "Street level at the view centre": "视图中心的街景", "Switching map": "正在切换地图", "Opening imagery": "正在打开影像", "Street View is ready: press {open} to load it": "街景已就绪:点击“{open}”加载", @@ -3427,6 +3452,7 @@ "{source} imagery could not be opened": "无法打开 {source} 影像", "{place} has no position to look for imagery at": "{place} 没有可查找影像的位置", "No {source} imagery near {place}": "{place} 附近没有 {source} 影像", + "No {source} imagery near the view centre": "视图中心附近没有 {source} 影像", "{reason} (filters on: {filters})": "{reason}(已开启筛选:{filters})", "tiles unavailable": "瓦片不可用", "zoom in to load this layer": "放大以加载此图层", @@ -3517,6 +3543,8 @@ "REMOVE ALL": "全部移除", "Confirm: remove every added entry from Data Layers": "确认:从数据图层中移除所有已添加条目", "Remove every added entry from Data Layers": "从数据图层中移除所有已添加条目", - "Showing {shown} of {total}": "显示 {shown} / {total}", + "Showing {shown} of {total}": { + "other": "显示 {shown} / {total}" + }, "BROWSE DATA LIBRARY": "浏览数据资源库" } diff --git a/src/i18n/locales/zh-Hant.json b/src/i18n/locales/zh-Hant.json index fd201af36..543caa251 100644 --- a/src/i18n/locales/zh-Hant.json +++ b/src/i18n/locales/zh-Hant.json @@ -62,8 +62,12 @@ "{severity} only": "僅{severity}", "All categories": "所有類別", "Reading the news…": "正在讀取新聞…", - "News, last {hours} hours": "最近 {hours} 小時的新聞", - "Last {hours} h": "最近 {hours} 小時", + "News, last {hours} hours": { + "other": "最近 {hours} 小時的新聞" + }, + "Last {hours} h": { + "other": "最近 {hours} 小時" + }, "Time window": "時間範圍", "Conflicts": "衝突", "Local": "本地", @@ -72,9 +76,13 @@ "Hotspots": "熱點", "Severity": "嚴重程度", "Category": "類別", - "Nothing reported near here in the last {hours} h": "最近 {hours} 小時附近無報道", + "Nothing reported near here in the last {hours} h": { + "other": "最近 {hours} 小時附近無報道" + }, "Latest news": "最新新聞", - "No news matches these filters in the last {hours} h": "最近 {hours} 小時沒有符合這些篩選條件的新聞", + "No news matches these filters in the last {hours} h": { + "other": "最近 {hours} 小時沒有符合這些篩選條件的新聞" + }, "Load older news": "加載更早的新聞", "How to read the map": "如何解讀地圖", "Colour: severity · icon: type of event": "顏色:嚴重程度 · 圖標:事件類型", @@ -563,6 +571,7 @@ "Previous — prior visited contact in the 250 km window": "上一個:250 km 範圍內先前訪問過的目標", "PREVIOUS": "上一個", "FOCUS": "聚焦", + "site status|FOCUS": "聚焦", "Next — nearest unvisited contact in the 250 km window": "下一個:250 km 範圍內最近的未訪問目標", "NEXT": "下一個", "Named areas ({n})": "已命名區域({n})", @@ -924,6 +933,7 @@ "Cancel replay": "取消回放", "EST. DOWNRANGE": "預估落點距離", "CONFIRMED": "已確認", + "sightings filter|CONFIRMED": "已確認", "PAD / RTLS": "發射臺 / RTLS", "PLANNED · ": "計劃 · ", "SUPPLIED TRAJECTORY POINTS": "提供的軌跡點", @@ -1742,7 +1752,9 @@ "ROUTE DATA UNAVAILABLE": "航線數據不可用", "CONTACT NAVIGATION OFF": "目標導航已關閉", "THE BRIDGE STAYS WITH THE SELECTED VESSEL": "駕駛臺保持在所選船舶上", - "{range} NM": "{range} 海里", + "{range} NM": { + "other": "{range} 海里" + }, "AIS DESTINATION · CREW REPORTED": "AIS 目的地 · 船員申報", "DEST {bearing}": "目的地 {bearing}", "Disable cockpit weather effects": "停用座艙天氣效果", @@ -1788,6 +1800,7 @@ "Reclassify as TR-3B": "重新歸類為 TR-3B", "TRACK ACQUIRED": "已獲取航跡", "{label} · COURSE {heading}°": "{label} · 對地航向 {heading}°", + "vessel|{label} · COURSE {heading}°": "{label} · 對地航向 {heading}°", "{label} · HEADING {heading}°": "{label} · 船首向 {heading}°", "{label} · NO HEADING": "{label} · 無船首向", "{label} · NADIR VIEW": "{label} · 天底視圖", @@ -2038,6 +2051,7 @@ "Observed history": "觀測歷史", "Later observation": "較晚觀測", "Latest": "最新", + "news list|Latest": "最新", "Newest frame per product": "每個產品的最新一幀", "Replay observed history": "回放觀測歷史", "Imagery on Esri · Google 3D returns when cleared": "影像顯示在 Esri 底圖上 · 清除後恢復 Google 3D", @@ -2619,7 +2633,9 @@ "Contact cockpit summary": "目標座艙摘要", "CONTACT": "目標", "CONTACTS · 250 KM": "目標 · 250 km", - "RINGS {spacing} NM": "距標圈 {spacing} 海里", + "RINGS {spacing} NM": { + "other": "距標圈 {spacing} 海里" + }, "{count} CONTACTS": { "other": "{count} 個目標" }, @@ -3311,7 +3327,9 @@ "Photo of {name}": "{name} 的照片", "Acartia": "Acartia", "CC BY 4.0": "CC BY 4.0", - "{count} sightings in view": "視野內有 {count} 次目擊", + "{count} sightings in view": { + "other": "視野內有 {count} 次目擊" + }, "Close sighting": "關閉目擊記錄", "Wildlife observed within 48 h (whales 7 d). Color and badge glyph show the taxon group. Sensitive species are shown only as 0.2° cells; Salish Sea marine mammal reports via Acartia are rounded to 0.01°. Not a census.": "近 48 小時內觀察到的野生生物(鯨類為 7 天)。顏色與徽章圖標表示分類群。敏感物種僅以 0.2° 網格顯示;Acartia 提供的薩利希海海洋哺乳動物目擊位置四捨五入到 0.01°。並非種群普查。", "Open {name} on iNaturalist": "在 iNaturalist 上打開 {name}", @@ -3322,20 +3340,27 @@ "{days}d": "{days} 天", "All markers": "所有標記", "Show markers of every age": "顯示所有時間的標記", - "Maximum event age: {days}d; undated markers are kept": "僅顯示 {days} 天內的事件;保留無日期標記", + "Maximum event age: {days}d; undated markers are kept": { + "other": "僅顯示 {days} 天內的事件;保留無日期標記" + }, "event age filter|All": "全部", "Event age": "事件時間", - "Event age: {days}d · undated kept": "事件時間:{days} 天內 · 保留無日期標記", + "Event age: {days}d · undated kept": { + "other": "事件時間:{days} 天內 · 保留無日期標記" + }, "Close camera preview": "關閉攝像頭預覽", "Refresh map still": "刷新地圖靜止畫面", "The map still uses a separate request and may show a different moment.": "地圖靜止畫面通過單獨的請求獲取,可能顯示不同的時刻。", "Video plays from Québec 511, which sees your IP address.": "視頻從 Québec 511 播放,Québec 511 會看到你的 IP 地址。", "Press OPEN to load the photo": "點擊“打開”加載照片", "Captured {month}": "拍攝於 {month}", - "this spot": "此處", "the view centre": "視野中心", "{source} at {place}": "{place} 的 {source}", + "{source} at this spot": "此處的 {source}", + "{source} at the view centre": "視圖中心的 {source}", "Street level at {place}": "{place} 的街景", + "Street level at this spot": "此處的街景", + "Street level at the view centre": "視圖中心的街景", "Switching map": "正在切換地圖", "Opening imagery": "正在打開影像", "Street View is ready: press {open} to load it": "街景已就緒:點擊“{open}”加載", @@ -3427,6 +3452,7 @@ "{source} imagery could not be opened": "無法打開 {source} 影像", "{place} has no position to look for imagery at": "{place} 沒有可查找影像的位置", "No {source} imagery near {place}": "{place} 附近沒有 {source} 影像", + "No {source} imagery near the view centre": "視圖中心附近沒有 {source} 影像", "{reason} (filters on: {filters})": "{reason}(已開啟篩選:{filters})", "tiles unavailable": "瓦片不可用", "zoom in to load this layer": "放大以加載此圖層", @@ -3517,6 +3543,8 @@ "REMOVE ALL": "全部移除", "Confirm: remove every added entry from Data Layers": "確認:從數據圖層中移除所有已添加條目", "Remove every added entry from Data Layers": "從數據圖層中移除所有已添加條目", - "Showing {shown} of {total}": "顯示 {shown} / {total}", + "Showing {shown} of {total}": { + "other": "顯示 {shown} / {total}" + }, "BROWSE DATA LIBRARY": "瀏覽數據資源庫" } diff --git a/src/i18n/same-as-english.json b/src/i18n/same-as-english.json index 1ab9b364f..c975d3ccb 100644 --- a/src/i18n/same-as-english.json +++ b/src/i18n/same-as-english.json @@ -685,6 +685,7 @@ "FLIR", "FM MHZ", "FOCUS", + "site status|FOCUS", "FOV", "FOV {value}°", "FT", diff --git a/src/layers/ghostMaps/index.js b/src/layers/ghostMaps/index.js index 79971c715..1a2f35433 100644 --- a/src/layers/ghostMaps/index.js +++ b/src/layers/ghostMaps/index.js @@ -762,9 +762,12 @@ export function createGhostMapsLayer({ title: days === null ? t('Show markers of every age') - : t('Maximum event age: {days}d; undated markers are kept', { - days: formatNumber(days), - }), + : tn( + days, + 'Maximum event age: {days}d; undated markers are kept', + 'Maximum event age: {days}d; undated markers are kept', + { days: formatNumber(days) }, + ), active: days === _ageDays, onClick: () => setAgeDays(days), })), @@ -799,7 +802,7 @@ export function createGhostMapsLayer({ }; }), legend: [], - info: `${_ageDays === null ? t('All markers') : t('Event age: {days}d · undated kept', { days: formatNumber(_ageDays) })} · ${info}`, + info: `${_ageDays === null ? t('All markers') : tn(_ageDays, 'Event age: {days}d · undated kept', 'Event age: {days}d · undated kept', { days: formatNumber(_ageDays) })} · ${info}`, infoTitle: t( 'S2 Underground publishes these KMZ products to GitHub. New uploads are detected within seconds and replace the previous edition automatically. Click a marker for its report.', ), diff --git a/src/layers/ghostMaps/lifecycle.test.mjs b/src/layers/ghostMaps/lifecycle.test.mjs index ae9f63911..72ec48570 100644 --- a/src/layers/ghostMaps/lifecycle.test.mjs +++ b/src/layers/ghostMaps/lifecycle.test.mjs @@ -1,6 +1,7 @@ import assert from 'node:assert/strict'; import test from 'node:test'; import * as Cesium from 'cesium'; +import { setLocale } from '../../i18n/index.js'; import { createGhostMapsLayer } from './index.js'; import { GHOSTMAPS_PRODUCTS, GHOSTMAPS_LATEST_DROP } from './catalog.js'; @@ -248,6 +249,35 @@ test('age controls default to seven days and widening restores filtered and expi assert.equal(ageChip(layer, null).active, true); }); +test('the event age agrees with its number of days', async (t) => { + t.after(() => setLocale('en')); + const { layer, viewer } = fixture(t, { reports: [{ name: 'Undated' }] }); + await layer.update(viewer); + const info = () => + layer.getRowControls().info.split(' · ').slice(0, 2).join(' · '); + assert.equal( + ageChip(layer, 1).title, + 'Maximum event age: 1d; undated markers are kept', + ); + setLocale('de'); + assert.equal( + ageChip(layer, 1).title, + 'Maximales Ereignisalter: 1 Tag; undatierte Markierungen bleiben erhalten', + ); + assert.equal( + ageChip(layer, 7).title, + 'Maximales Ereignisalter: 7 Tage; undatierte Markierungen bleiben erhalten', + ); + assert.equal(info(), 'Ereignisalter: 7 Tage · undatierte bleiben'); + await ageChip(layer, 1).onClick(); + assert.equal(info(), 'Ereignisalter: 1 Tag · undatierte bleiben'); + setLocale('es'); + assert.equal( + info(), + 'Antigüedad: 1 día · se conservan los marcadores sin fecha', + ); +}); + test('age preferences persist independently of product choices and reject invalid storage', async (t) => { const values = new Map([['gev.ghostmaps.products', '["cip"]']]); const storage = { diff --git a/src/layers/launches/missionStatus.i18n.test.mjs b/src/layers/launches/missionStatus.i18n.test.mjs index 8826d0d36..7d3b2e572 100644 --- a/src/layers/launches/missionStatus.i18n.test.mjs +++ b/src/layers/launches/missionStatus.i18n.test.mjs @@ -69,3 +69,38 @@ test('the mission panel translates only the fallback status', (t) => { assert.equal(shownStatus(UNKNOWN_LAUNCH_STATUS), 'Desconocido'); assert.equal(shownStatus('Launch Successful'), 'Launch Successful'); }); + +test('a confirmed landing position is worded apart from the CONFIRMED sightings chip', (t) => { + t.after(() => setLocale('en')); + const position = () => + createPanel({ + state: { + _selectedLaunchId: 'mission-1', + _launches: [ + { + id: 'mission-1', + name: 'Example', + status: 'Launch Successful', + payloads: [], + recoveryStages: [ + { + name: 'B1080', + endpoint: { lat: 28.41, lon: -80.6, accuracy: 'CONFIRMED' }, + }, + ], + }, + ], + _replayTracks: new Map(), + }, + parts: { + overlays: { shortMissionLabel: (name) => name }, + policyHelpers: { missionPathPresentation: () => ({}) }, + replay: { presentReplay: () => ({}) }, + }, + }).presentMission().stages[0].position; + assert.match(position(), / · CONFIRMED$/); + // One landing, singular: sv BEKRÄFTAD, where the sightings chip says + // BEKRÄFTADE. + setLocale('sv'); + assert.match(position(), / · BEKRÄFTAD$/); +}); diff --git a/src/layers/wildlifeSightings/acquisition.test.mjs b/src/layers/wildlifeSightings/acquisition.test.mjs index b4ac47813..cbc02f04c 100644 --- a/src/layers/wildlifeSightings/acquisition.test.mjs +++ b/src/layers/wildlifeSightings/acquisition.test.mjs @@ -542,7 +542,7 @@ test('retention never revives an incumbent card after the observation window exp test('all heights and the sampled fallback use the same sightings-in-view count label', () => { const h = harness(); h.state.renderedRows = [sighting]; - assert.equal(h.layer.getStats().countLabel, '1 sightings in view'); + assert.equal(h.layer.getStats().countLabel, '1 sighting in view'); h.state.sightingCount = 2000; assert.equal(h.layer.getStats().count, 2000); assert.equal( @@ -560,6 +560,32 @@ test('all heights and the sampled fallback use the same sightings-in-view count } }); +test('the sightings count takes the plural form of its number', (t) => { + t.after(() => setLocale('en')); + const h = harness(); + const label = (count) => { + h.state.sightingCount = count; + return h.layer.getStats().countLabel; + }; + setLocale('ru'); + assert.equal(label(1), '1 наблюдение в кадре'); + assert.equal(label(3), '3 наблюдения в кадре'); + assert.equal(label(5), '5 наблюдений в кадре'); + setLocale('de'); + assert.equal(label(1), '1 Beobachtung im Bild'); + assert.equal(label(2000), '2.000 Beobachtungen im Bild'); +}); + +test('the CONFIRMED chip names the sightings, apart from a confirmed launch landing', (t) => { + t.after(() => setLocale('en')); + const h = harness(); + assert.equal(h.chip('quality-confirmed').label, 'CONFIRMED'); + setLocale('sv'); + assert.equal(h.chip('quality-confirmed').label, 'BEKRÄFTADE'); + setLocale('es'); + assert.equal(h.chip('quality-confirmed').label, 'CONFIRMADAS'); +}); + test('a stale fallback with a failed-refresh deadline remains DEGRADED, retryable and dated to the cached data', async () => { const h = harness({ getSnapshotDetail: async () => ({ diff --git a/src/layers/wildlifeSightings/controls.js b/src/layers/wildlifeSightings/controls.js index ced04364f..3c99c2e80 100644 --- a/src/layers/wildlifeSightings/controls.js +++ b/src/layers/wildlifeSightings/controls.js @@ -1,4 +1,4 @@ -import { t, formatNumber, translateKnown } from '../../i18n/index.js'; +import { t, tn, formatNumber, translateKnown } from '../../i18n/index.js'; import { msg } from '../../i18n/marker.js'; import { translateFeedError } from '../../ui/statusText.js'; import { wildlifeIconicGroup } from './model.js'; @@ -137,7 +137,8 @@ export function createControls({ state, services, parts }) { const chips = [ chip({ id: WILDLIFE_CONFIRMED_CHIP_ID, - label: t('CONFIRMED'), + // The sightings, plural; a launch landing is CONFIRMED alone. + label: t('CONFIRMED', { context: 'sightings filter' }), title: t('Show only community-confirmed (research-grade) sightings'), params: { confirmed: confirmedFailed ? state.confirmed : !state.confirmed, @@ -214,9 +215,12 @@ export function createControls({ state, services, parts }) { stale: state.stale, loading, refreshing, - countLabel: t('{count} sightings in view', { - count: formatNumber(count), - }), + countLabel: tn( + count, + '{count} sighting in view', + '{count} sightings in view', + { count: formatNumber(count) }, + ), loadingLabel: loading ? t('loading...') : refreshing diff --git a/src/layers/wildlifeSightings/ownership.test.mjs b/src/layers/wildlifeSightings/ownership.test.mjs index e118a87bc..cdc6e6148 100644 --- a/src/layers/wildlifeSightings/ownership.test.mjs +++ b/src/layers/wildlifeSightings/ownership.test.mjs @@ -1987,7 +1987,7 @@ test('unavailable grids fail closed to visible sampled sprites without a global assert.equal(h.clicks.collection.values[0].id, 'wildlife:inat:1'); assert.ok(h.clicks.collection.values[0].width * 0.5 >= 8); assert.equal(h.layer.getStats().count, 1); - assert.match(h.layer.getStats().countLabel, /sightings in view/); + assert.equal(h.layer.getStats().countLabel, '1 sighting in view'); assert.equal(h.layer.getStats().partial, undefined); assert.equal(layerFeedState(h.layer.getStats()), 'degraded'); assert.match(h.layer.getStats().error, /Malformed iNaturalist grid response/); @@ -2024,7 +2024,7 @@ test('an oversized view coarsens to a complete grid within the six-tile cap', as await h.update(); assert.equal(h.clicks.collection.values.length, 1); assert.equal(h.clicks.collection.values[0].id, 'wildlife:inat:1'); - assert.match(h.layer.getStats().countLabel, /sightings in view/); + assert.match(h.layer.getStats().countLabel, /sightings? in view/); assert.equal(layerFeedState(h.layer.getStats()), 'nominal'); h.layer.destroy(); }); diff --git a/src/ui/cockpitBridge.test.mjs b/src/ui/cockpitBridge.test.mjs index b58e53684..d327ef023 100644 --- a/src/ui/cockpitBridge.test.mjs +++ b/src/ui/cockpitBridge.test.mjs @@ -7,6 +7,7 @@ import assert from 'node:assert/strict'; import { createPinia } from 'pinia'; import { createApp, defineComponent, h, nextTick } from 'vue'; import { CockpitViewController } from './cockpitController.js'; +import { setLocale } from '../i18n/index.js'; import { useCockpitStore } from './stores/cockpit.js'; import CockpitView from './views/CockpitView.vue'; import ContextView from './views/ContextView.vue'; @@ -355,6 +356,33 @@ test('the bridge radar shows nearby ships without its own and steps its range', assert.ok(!$('#cockpit-radar') || $('#cockpit-radar').hidden); }); +test('the radar range and ring spacing agree with their distance (ru)', async (t) => { + const { $, cockpit } = fixture(t); + t.after(() => setLocale('en')); + setLocale('ru'); + cockpit.enter(); + await settle(); + const shown = () => [ + $('#cockpit-radar-range').textContent.trim(), + $('.cockpit-radar-rings').textContent.trim(), + ]; + // The ring spacing is a fraction at the short ranges: Intl.PluralRules + // gives 0.75 and 1.5 the form of their own. + const expected = [ + ['3 МОР. МИЛИ', 'КОЛЬЦА 0,75 МОР. МИЛИ'], + ['6 МОР. МИЛЬ', 'КОЛЬЦА 1,5 МОР. МИЛИ'], + ['12 МОР. МИЛЬ', 'КОЛЬЦА 3 МОР. МИЛИ'], + ['24 МОР. МИЛИ', 'КОЛЬЦА 6 МОР. МИЛЬ'], + ]; + for (const [index, labels] of expected.entries()) { + if (index) { + $('#cockpit-radar-range').click(); + await settle(); + } + assert.deepEqual(shown(), labels); + } +}); + test('contact navigation does not jump ship from the bridge', async (t) => { const { cockpit, navigations } = fixture(t); cockpit.enter(); @@ -1201,6 +1229,18 @@ test('a ship with no true heading is held, and labelled, on its course', async ( signals.some(([, , , detail]) => /COURSE 095°/.test(detail)), JSON.stringify(signals), ); + // A ship's course has a word of its own: pt RUMO, an aircraft's CURSO. + t.after(() => setLocale('en')); + setLocale('pt'); + signals.length = 0; + cockpit.exit(); + await settle(); + cockpit.enter(); + await settle(); + assert.ok( + signals.some(([, , , detail]) => /· RUMO 095°$/.test(detail)), + JSON.stringify(signals), + ); }); test('both entries name the subject the same way', async () => { diff --git a/src/ui/cockpitInstruments.js b/src/ui/cockpitInstruments.js index c5e9863cd..ed4d22f6c 100644 --- a/src/ui/cockpitInstruments.js +++ b/src/ui/cockpitInstruments.js @@ -1,5 +1,5 @@ /** Instrument values, routes and vision controls for the Cockpit controller. */ -import { formatNumber, t } from '../i18n/index.js'; +import { formatNumber, t, tn } from '../i18n/index.js'; import { COCKPIT_VISION_MODES, normalizeCockpitVisionMode, @@ -379,7 +379,10 @@ export function updateRadar(info) { ); this.publishRadar({ ...picture, - rangeLabel: t('{range} NM', { range: formatNumber(rangeNm) }), + // A plural, as the ring spacing is: ru «3 МОР. МИЛИ», «12 МОР. МИЛЬ». + rangeLabel: tn(rangeNm, '{range} NM', '{range} NM', { + range: formatNumber(rangeNm), + }), }); } diff --git a/src/ui/cockpitOrbitalFocus.test.mjs b/src/ui/cockpitOrbitalFocus.test.mjs index f7b18e22b..6a190363d 100644 --- a/src/ui/cockpitOrbitalFocus.test.mjs +++ b/src/ui/cockpitOrbitalFocus.test.mjs @@ -13,6 +13,7 @@ import { createPinia } from 'pinia'; import { createApp, defineComponent, h, nextTick } from 'vue'; import * as Cesium from 'cesium'; import { CockpitViewController } from './cockpitController.js'; +import { setLocale, t as translate } from '../i18n/index.js'; import { useCockpitStore } from './stores/cockpit.js'; import { useHudStore } from './stores/hud.js'; import CockpitView from './views/CockpitView.vue'; @@ -534,6 +535,13 @@ test('a site row turns the camera onto it, holds it, and reads its off-nadir ang assert.match(held.className, /^track actionable$/); assert.match(held.detail, /^FOCUS · BASE · OFF-NADIR/); assert.equal(siteRow(scene, 'alpha').getAttribute('aria-label'), 'Release the camera from Camp Alpha'); + // The held site's FOCUS is a status, worded apart from the FOCUS command. + t.after(() => setLocale('en')); + setLocale('es'); + await refreshRows(scene); + const heldEs = rows(scene).find((row) => row.target?.id === SITES.alpha.id); + assert.match(heldEs.detail, /^ENFOCADO · /); + assert.equal(translate('FOCUS'), 'ENFOCAR', 'the command keeps its verb'); }); test('another site row switches the focus; the held site row ends it', async (t) => { diff --git a/src/ui/cockpitOrbitalSignals.js b/src/ui/cockpitOrbitalSignals.js index c01bd56a2..04f3a1fc1 100644 --- a/src/ui/cockpitOrbitalSignals.js +++ b/src/ui/cockpitOrbitalSignals.js @@ -132,7 +132,8 @@ function siteRows(info, { settled = true } = {}) { }), }); const words = [installationClassLabel(site.class), angle]; - if (focused) words.unshift(t('FOCUS')); + // A status, not the FOCUS command: es «ENFOCADO», not «ENFOCAR». + if (focused) words.unshift(t('FOCUS', { context: 'site status' })); return { key: `site:${site.id}`, // The held site reads as the subject does. diff --git a/src/ui/cockpitPresence.test.mjs b/src/ui/cockpitPresence.test.mjs index f9ddcd24b..b20a9377f 100644 --- a/src/ui/cockpitPresence.test.mjs +++ b/src/ui/cockpitPresence.test.mjs @@ -7,6 +7,7 @@ import assert from 'node:assert/strict'; import { createPinia } from 'pinia'; import { createApp, defineComponent, h, nextTick } from 'vue'; import { CockpitViewController } from './cockpitController.js'; +import { setLocale } from '../i18n/index.js'; import { useCockpitStore } from './stores/cockpit.js'; import CockpitView from './views/CockpitView.vue'; import ContextView from './views/ContextView.vue'; @@ -255,3 +256,16 @@ test('entering asks for a panel layout before Vue shows the cards', async (t) => await new Promise((resolve) => setTimeout(resolve, 50)); assert.deepEqual(laid, ['context', 'signals']); }); + +test('an aircraft is acquired on its CURSO in Portuguese; a ship keeps RUMO', async (t) => { + const { cockpit } = fixture(t); + t.after(() => setLocale('en')); + setLocale('pt'); + const signals = []; + cockpit.pushCockpitSignal = (...args) => signals.push(args); + cockpit.enter(); + await nextTick(); + const acquired = signals.find(([key]) => key === 'track'); + assert.ok(acquired, JSON.stringify(signals)); + assert.equal(acquired[3], 'UAL123 · CURSO 092°'); +}); diff --git a/src/ui/cockpitTrackingController.js b/src/ui/cockpitTrackingController.js index 069441149..c3e680214 100644 --- a/src/ui/cockpitTrackingController.js +++ b/src/ui/cockpitTrackingController.js @@ -326,9 +326,11 @@ export function enter({ kind = null } = {}) { 'track', t('TRACK ACQUIRED'), // A ship with no true heading is held on its course over ground; one - // with neither is named without a direction. + // with neither is named without a direction. A ship's course has a + // word of its own: pt «RUMO», where an aircraft's is «CURSO». info.trackSource === 'course' ? t('{label} · COURSE {heading}°', { + context: 'vessel', label: info.name, heading: trackHeading, }) diff --git a/src/ui/news/NewsFeed.vue b/src/ui/news/NewsFeed.vue index 47e55c10f..4c608f0fb 100644 --- a/src/ui/news/NewsFeed.vue +++ b/src/ui/news/NewsFeed.vue @@ -1,6 +1,6 @@