From 560478410a678a3ff3a4979103799881c4742f47 Mon Sep 17 00:00:00 2001 From: Harel M Date: Sun, 27 Sep 2026 20:05:23 +0300 Subject: [PATCH] Add `font-faces`, `sky`, `roll` and `centerAltitude` (#2189) After: image ## Launch Checklist - [x] Briefly describe the changes in this PR. - [x] Include before/after visuals or gifs if this PR includes visual changes. - [x] Write tests for all new functionality. - [x] Add an entry to `CHANGELOG.md` under the `## main` section. --- CHANGELOG.md | 1 + e2e/maputnik-driver.ts | 7 +- e2e/modals.spec.ts | 36 ++++++++ e2e/playwright-helper.ts | 3 + src/components/InputJson.tsx | 22 ++++- src/components/modals/ModalSettings.tsx | 108 +++++++++++++++++++++++- src/libs/codemirror-editor-factory.ts | 28 ++++-- src/locales/az/translation.json | 14 ++- src/locales/de/translation.json | 16 +++- src/locales/fr/translation.json | 16 +++- src/locales/he/translation.json | 16 +++- src/locales/it/translation.json | 16 +++- src/locales/ja/translation.json | 16 +++- src/locales/ko/translation.json | 16 +++- src/locales/tr/translation.json | 12 ++- src/locales/zh/translation.json | 16 +++- 16 files changed, 304 insertions(+), 39 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 59ecdd36..a5f3d01c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,7 @@ - Upgrade to MapLibre GL JS 6 and Vite 8, and update the remaining dependencies - Serve the RTL text plugin from `@mapbox/mapbox-gl-rtl-text` instead of a pinned CDN URL, so its version is tracked in `package.json` - Exported HTML now loads MapLibre GL JS as an ES module, since v6 no longer ships a UMD bundle +- Add `font-faces`, `sky`, `roll` and `centerAltitude` to the style settings modal - The sidebar can now be resized, both as a whole and in the split between the layer list and the layer editor - _...Add new stuff here..._ diff --git a/e2e/maputnik-driver.ts b/e2e/maputnik-driver.ts index 6785fe11..cfced9e5 100644 --- a/e2e/maputnik-driver.ts +++ b/e2e/maputnik-driver.ts @@ -182,8 +182,9 @@ export class MaputnikDriver { await this.helper.when.typeText(text); }, - setTextInJsonEditor: async (text: string) => { - await this.helper.get.element(".cm-line").first().click(); + setTextInJsonEditor: async (text: string, selector?: string) => { + const scope = selector ? this.helper.get.elementByTestId(selector).locator(".cm-line") : this.helper.get.element(".cm-line"); + await scope.first().click(); await this.helper.when.typeKeys("{selectall}"); await this.helper.when.typeText(text); }, @@ -364,6 +365,8 @@ export class MaputnikDriver { skipTargetLayerEditor: () => this.helper.get.elementByTestId("skip-target-layer-editor"), + jsonEditorErrors: (selector: string) => this.helper.get.elementByTestId(selector).locator(".cm-lint-marker-error"), + styleFromLocalStorage: () => this.helper.query(() => this.readStoredStyle()), fixture: (name: string) => this.helper.readFixture(name), diff --git a/e2e/modals.spec.ts b/e2e/modals.spec.ts index e2d62dd7..ca60542a 100644 --- a/e2e/modals.spec.ts +++ b/e2e/modals.spec.ts @@ -338,6 +338,29 @@ describe("modals", () => { }); }); + test("font faces", async () => { + const fontFaces = { "Noto Sans Regular": [{ url: "http://example.com/font.ttf", "unicode-range": ["U+1780-17FF"] }] }; + await when.setTextInJsonEditor(JSON.stringify(fontFaces), "modal:settings.font-faces"); + await when.click("modal:settings.name"); + await then(get.styleFromLocalStorage()).shouldDeepNestedInclude({ + "font-faces": fontFaces, + }); + }); + + test("unset font faces show an empty editor without errors", async () => { + await when.wait(1000); + await then(get.jsonEditorErrors("modal:settings.font-faces")).shouldNotExist(); + + await when.setTextInJsonEditor(JSON.stringify({ Font: "http://example.com/font.ttf" }), "modal:settings.font-faces"); + await when.click("modal:settings.name"); + await when.setTextInJsonEditor("", "modal:settings.font-faces"); + await when.typeKeys("{backspace}"); + await when.click("modal:settings.name"); + await when.wait(1000); + await then(get.jsonEditorErrors("modal:settings.font-faces")).shouldNotExist(); + await then(get.styleFromLocalStorage()).shouldNotHaveProperty("font-faces"); + }); + test("maptiler access token", async () => { const apiKey = "testing123"; await when.setValue("modal:settings.maputnik:openmaptiles_access_token", apiKey); @@ -378,11 +401,24 @@ describe("modals", () => { await when.setValue("modal:settings.zoom", "4"); await when.setValue("modal:settings.bearing", "12"); await when.setValue("modal:settings.pitch", "30"); + await when.setValue("modal:settings.roll", "15"); + await when.setValue("modal:settings.center-altitude", "100"); await when.click("modal:settings.name"); await then(get.styleFromLocalStorage()).shouldDeepNestedInclude({ zoom: 4, bearing: 12, pitch: 30, + roll: 15, + centerAltitude: 100, + }); + }); + + test("sky and fog blends", async () => { + await when.setValue("modal:settings.sky-horizon-blend", "0.3"); + await when.setValue("modal:settings.fog-ground-blend", "0.2"); + await when.click("modal:settings.name"); + await then(get.styleFromLocalStorage()).shouldDeepNestedInclude({ + sky: { "sky-horizon-blend": 0.3, "fog-ground-blend": 0.2 }, }); }); diff --git a/e2e/playwright-helper.ts b/e2e/playwright-helper.ts index 2fca2c3e..e0d73c8d 100644 --- a/e2e/playwright-helper.ts +++ b/e2e/playwright-helper.ts @@ -135,6 +135,9 @@ export class Assertable { shouldDeepNestedInclude = (value: Record | unknown[]) => this.assertValue((actual) => assertDeepNestedInclude(actual, value)); + + shouldNotHaveProperty = (property: string) => + this.assertValue((actual) => expect(actual).not.toHaveProperty([property])); } async function typeSequence(page: Page, text: string): Promise { diff --git a/src/components/InputJson.tsx b/src/components/InputJson.tsx index be9f2305..eecdd538 100644 --- a/src/components/InputJson.tsx +++ b/src/components/InputJson.tsx @@ -10,12 +10,14 @@ import type { StylePropertySpecification } from "maplibre-gl"; import type { TransactionSpec } from "@codemirror/state"; export type InputJsonProps = { - value: object + value: object | undefined className?: string - onChange(object: object): void + onChange(object: object | undefined): void onFocus?(...args: unknown[]): unknown onBlur?(...args: unknown[]): unknown lintType: "layer" | "style" | "expression" | "json" + /** When set, an empty editor is valid and means the value is unset */ + optional?: boolean spec?: StylePropertySpecification | undefined /** * When setting this and using search and replace, the editor will scroll to the selected text @@ -49,6 +51,10 @@ class InputJsonInternal extends React.Component this.onChange(value), + onChange: (value: string) => this.onChange(value), onFocus: () => this.onFocus(), onBlur: () => this.onBlur(), - spec: this.props.spec + spec: this.props.spec, + optional: this.props.optional }); } @@ -107,6 +114,13 @@ class InputJsonInternal extends React.Component }); } + changeSkyProperty(property: keyof SkySpecification, value: any) { + const sky = { + ...this.props.mapStyle.sky, + }; + + if (value === undefined) { + delete sky[property]; + } + else { + sky[property] = value; + } + + this.props.onStyleChanged({ + ...this.props.mapStyle, + sky, + }); + } + changeProjectionType(value: any) { const projection = { ...this.props.mapStyle.projection, @@ -124,6 +142,7 @@ class ModalSettingsInternal extends React.Component const transition = this.props.mapStyle.transition || {}; const terrain = this.props.mapStyle.terrain || {} as TerrainSpecification; const projection = this.props.mapStyle.projection || {} as ProjectionSpecification; + const sky = this.props.mapStyle.sky || {}; return this.changeStyleProperty("sprite", value)} /> @@ -162,6 +182,15 @@ class ModalSettingsInternal extends React.Component onChange={(value) => this.changeStyleProperty("glyphs", value)} /> + + this.changeStyleProperty("font-faces", value)} + /> + + onChange={(value) => this.changeStyleProperty("pitch", value)} /> + this.changeStyleProperty("roll", value)} + /> + + this.changeStyleProperty("centerAltitude", value)} + /> + onChange={(value) => this.changeTerrainProperty("exaggeration", value)} /> + this.changeSkyProperty("sky-color", value)} + /> + + this.changeSkyProperty("horizon-color", value)} + /> + + this.changeSkyProperty("fog-color", value)} + /> + + this.changeSkyProperty("sky-horizon-blend", value)} + /> + + this.changeSkyProperty("horizon-fog-blend", value)} + /> + + this.changeSkyProperty("fog-ground-blend", value)} + /> + + this.changeSkyProperty("atmosphere-blend", value)} + /> + void, + onFocus: () => void, + onBlur: () => void, + spec?: StylePropertySpecification, + /** + * An empty optional editor means the value is unset, which is valid + */ + optional?: boolean, +}; + function getDiagnosticsFromExpressionErrors(errors: LinterError[], ast: ValueNode | PropertyNode) { const diagnostics: Diagnostic[] = []; for (const error of errors) { @@ -128,15 +143,7 @@ function createMaplibreExpressionLinter(spec?: StylePropertySpecification) { }; } -export function createEditor(props: { - parent: HTMLElement, - value: string, - lintType: LintType, - onChange: (value: string) => void, - onFocus: () => void, - onBlur: () => void, - spec?: StylePropertySpecification, -}): EditorView { +export function createEditor(props: EditorProps): EditorView { let specificLinter: (view: EditorView) => Diagnostic[] = () => []; switch (props.lintType) { case "style": @@ -181,6 +188,9 @@ export function createEditor(props: { }), lintGutter(), linter((view: EditorView) => { + if (props.optional && view.state.doc.toString().trim() === "") { + return []; + } const jsonErrors = jsonParseLinter()(view); if (jsonErrors.length > 0) { return jsonErrors; diff --git a/src/locales/az/translation.json b/src/locales/az/translation.json index 0de21f00..4fb2c425 100644 --- a/src/locales/az/translation.json +++ b/src/locales/az/translation.json @@ -13,10 +13,12 @@ "Add Variable": "Dəyişən Əlavə Et", "any filter matches": "istənilən süzgəc uyğun gəlirsə", "API key for Stadia Maps.": "Stadia Maps üçün API açarı.", + "Atmosphere blend": "Atmosfer qarışığı", "Base": "Baza", "Bearing": "İstiqamət", "Cancel": "Ləğv et", "Center": "Mərkəz", + "Center altitude": "Mərkəzin hündürlüyü", "Choose Public Source": "İctimai Mənbə Seç", "Choose the default Maputnik renderer for this style.": "Bu üslub üçün defolt Maputnik renderer-ini seçin.", "Click to close the editor": "Redaktoru bağlamaq üçün klikləyin", @@ -55,6 +57,8 @@ "Delete filter block": "Süzgəc blokunu sil", "Deuteranopia filter": "Deuteranopiya süzgəci", "Drag and drop a style JSON file here or click to browse": "Üslub JSON faylını buraya sürükləyib buraxın və ya seçmək üçün klikləyin", + "Drag to resize the layer list": "Qat siyahısının ölçüsünü dəyişmək üçün sürükləyin", + "Drag to resize the sidebar": "Yan panelin ölçüsünü dəyişmək üçün sürükləyin", "Duplicate": "Dublikat et", "Encoding": "Kodlaşdırma", "Enter URL...": "URL daxil edin...", @@ -63,6 +67,9 @@ "Export modal": "İxrac modalı", "Filter": "Süzgəc", "Focus map": "Xəritəyə fokuslan", + "Fog color": "Duman rəngi", + "Fog ground blend": "Duman-yer qarışığı", + "Font faces": "Şrift faylları", "Function": "Funksiya", "Gallery Styles": "Qalereya Üslubları", "General layout properties": "Ümumi düzülüş xassələri", @@ -75,6 +82,8 @@ "Glyphs URL": "Şriftlər URL-i", "Help": "Kömək", "Hide": "Gizlət", + "Horizon color": "Üfüq rəngi", + "Horizon fog blend": "Üfüq-duman qarışığı", "Icon layout properties": "İkon düzülüş xassələri", "Icon paint properties": "İkon boyama xassələri", "If the Map is in focused you can use the following shortcuts": "Xəritə fokusdadırsa aşağıdakı qısayollardan istifadə edə bilərsiniz", @@ -122,11 +131,11 @@ "No global state variables defined. Add variables to create reusable values in your style.": "Heç bir qlobal vəziyyət dəyişəni təyin edilməyib. Üslubunuzda təkrar istifadə oluna bilən dəyərlər yaratmaq üçün dəyişən əlavə edin.", "Open": "Aç", "Open a local JSON style from your computer.": "Kompüterinizdən yerli JSON üslubunu açın.", - "OpenLayers (experimental)": "OpenLayers (eksperimental)", "Open local Style": "Yerli Üslubu Aç", "Open modal": "Modalı aç", "Open one of the publicly available styles to start from.": "Başlamaq üçün ictimai üslublardan birini açın.", "Open Style": "Üslubu Aç", + "OpenLayers (experimental)": "OpenLayers (eksperimental)", "Options": "Seçimlər", "Output value": "Çıxış dəyəri", "Owner": "Sahib", @@ -153,6 +162,7 @@ "Remove variable": "Dəyişəni sil", "Remove zoom level from stop": "Dayanacaqdan yaxınlaşma səviyyəsini sil", "Revert from expression": "İfadədən geri qaytar", + "Roll": "Fırlanma", "Save": "Yadda saxla", "Save as": "Fərqli yadda saxla", "Save Style": "Üslubu Yadda Saxla", @@ -163,6 +173,8 @@ "Shortcuts": "Qısayollar", "Shortcuts menu": "Qısayollar menyusu", "Show": "Göstər", + "Sky color": "Səma rəngi", + "Sky horizon blend": "Səma-üfüq qarışığı", "Source": "Mənbə", "Source ID": "Mənbə ID", "Source Layer": "Mənbə Qatı", diff --git a/src/locales/de/translation.json b/src/locales/de/translation.json index 660fce86..7f1c4fbf 100644 --- a/src/locales/de/translation.json +++ b/src/locales/de/translation.json @@ -13,10 +13,12 @@ "Add Variable": "Variable hinzufügen", "any filter matches": "irgendein Filter passt", "API key for Stadia Maps.": "API-Schlüssel für Stadia Maps.", + "Atmosphere blend": "Atmosphärenüberblendung", "Base": "Basis", "Bearing": "Ausrichtung", "Cancel": "Abbrechen", "Center": "Mittelpunkt", + "Center altitude": "Höhe des Mittelpunkts", "Choose Public Source": "Öffentliche Quelle auswählen", "Choose the default Maputnik renderer for this style.": "Wähle den Standard-Renderer für diesen Stil aus.", "Click to close the editor": "Klicken Sie hier, um den Editor zu schließen", @@ -54,6 +56,7 @@ "Delete expression": "Ausdruck löschen", "Delete filter block": "Filterblock löschen", "Deuteranopia filter": "Deuteranopie-Filter", + "Drag and drop a style JSON file here or click to browse": "Ziehen Sie eine Style-JSON-Datei hierher oder klicken Sie, um zu durchsuchen", "Drag to resize the layer list": "Ziehen, um die Ebenenliste zu skalieren", "Drag to resize the sidebar": "Ziehen, um die Seitenleiste zu skalieren", "Duplicate": "Duplizieren", @@ -64,6 +67,9 @@ "Export modal": "Modale Fenster exportieren", "Filter": "Filter", "Focus map": "Karte fokussieren", + "Fog color": "Nebelfarbe", + "Fog ground blend": "Nebel-Boden-Überblendung", + "Font faces": "Schriftdateien", "Function": "Funktion", "Gallery Styles": "Galerie-Stile", "General layout properties": "Allgemeine Layouteigenschaften", @@ -76,6 +82,8 @@ "Glyphs URL": "Glyphen-URL", "Help": "Hilfe", "Hide": "Verstecken", + "Horizon color": "Horizontfarbe", + "Horizon fog blend": "Horizont-Nebel-Überblendung", "Icon layout properties": "Icon-Layouteigenschaften", "Icon paint properties": "Icon-Darstellungseigenschaften", "If the Map is in focused you can use the following shortcuts": "Wenn die Karte fokussiert ist, kannst du die folgenden Shortcuts benutzen", @@ -123,11 +131,11 @@ "No global state variables defined. Add variables to create reusable values in your style.": "Keine globalen Zustandsvariablen definiert. Füge Variablen hinzu, um wiederverwendbare Werte in deinem Stil zu erstellen.", "Open": "Öffnen", "Open a local JSON style from your computer.": "Öffne einen lokalen JSON Stil von deinem Computer.", - "OpenLayers (experimental)": "OpenLayers (experimentell)", "Open local Style": "Lokalen Stil öffnen", "Open modal": "Modale Fenster öffnen", "Open one of the publicly available styles to start from.": "Öffne einen der öffentlich verfügbaren Stile, um zu starten.", "Open Style": "Stil öffnen", + "OpenLayers (experimental)": "OpenLayers (experimentell)", "Options": "Optionen", "Output value": "Ausgabewert", "Owner": "Besitzer", @@ -154,6 +162,7 @@ "Remove variable": "Variable entfernen", "Remove zoom level from stop": "Zoom-Stufe vom Stopp entfernen", "Revert from expression": "Vom Ausdruck zurücksetzen", + "Roll": "Rollwinkel", "Save": "Speichern", "Save as": "Speichern unter", "Save Style": "Stil Speichern", @@ -164,6 +173,8 @@ "Shortcuts": "Shortcuts", "Shortcuts menu": "Shortcuts-Menü", "Show": "Anzeigen", + "Sky color": "Himmelsfarbe", + "Sky horizon blend": "Himmel-Horizont-Überblendung", "Source": "Quelle", "Source ID": "Quellen-ID", "Source Layer": "Quellenebene", @@ -201,6 +212,5 @@ "Video URL": "Video-URL", "View": "Ansicht", "You've entered an old style filter.": "Du hast einen alten Filter-Stil eingegeben.", - "Zoom": "Zoom", - "Drag and drop a style JSON file here or click to browse": "Ziehen Sie eine Style-JSON-Datei hierher oder klicken Sie, um zu durchsuchen" + "Zoom": "Zoom" } diff --git a/src/locales/fr/translation.json b/src/locales/fr/translation.json index ca9d753a..7ca8e22c 100644 --- a/src/locales/fr/translation.json +++ b/src/locales/fr/translation.json @@ -13,10 +13,12 @@ "Add Variable": "Ajouter une variable", "any filter matches": "l'un des filtres correspond", "API key for Stadia Maps.": "Clé d'API pour Stadia Maps.", + "Atmosphere blend": "Fondu de l'atmosphère", "Base": "Base", "Bearing": "Orientation", "Cancel": "Annuler", "Center": "Centre", + "Center altitude": "Altitude du centre", "Choose Public Source": "Choisir une source publique", "Choose the default Maputnik renderer for this style.": "Choisissez le moteur de rendu Maputnik par défaut pour ce style.", "Click to close the editor": "Cliquez pour fermer l'éditeur", @@ -54,6 +56,7 @@ "Delete expression": "Supprimer l'expression", "Delete filter block": "Supprimer le bloc de filtre", "Deuteranopia filter": "Filtre Deutéranopie", + "Drag and drop a style JSON file here or click to browse": "Faites glisser un fichier JSON de style ici ou cliquez pour parcourir", "Drag to resize the layer list": "Glisser pour redimensionner la liste des calques", "Drag to resize the sidebar": "Glisser pour redimensionner la barre latérale", "Duplicate": "Dupliquer", @@ -64,6 +67,9 @@ "Export modal": "Exporter (modale)", "Filter": "Filtre", "Focus map": "Focus sur la carte", + "Fog color": "Couleur du brouillard", + "Fog ground blend": "Fondu brouillard-sol", + "Font faces": "Fichiers de police", "Function": "Fonction", "Gallery Styles": "Styles de la galerie", "General layout properties": "Propriétés générales de mise en page", @@ -76,6 +82,8 @@ "Glyphs URL": "URL des glyphes", "Help": "Aide", "Hide": "Cacher", + "Horizon color": "Couleur de l'horizon", + "Horizon fog blend": "Fondu horizon-brouillard", "Icon layout properties": "Propriétés de mise en page de l'icône", "Icon paint properties": "Propriétés de peinture de l'icône", "If the Map is in focused you can use the following shortcuts": "Si la carte a le focus, vous pouvez utiliser les raccourcis suivants", @@ -123,11 +131,11 @@ "No global state variables defined. Add variables to create reusable values in your style.": "Aucune variable d'état global définie. Ajoutez des variables pour créer des valeurs réutilisables dans votre style.", "Open": "Ouvrir", "Open a local JSON style from your computer.": "Ouvrir un style JSON local depuis votre ordinateur.", - "OpenLayers (experimental)": "OpenLayers (expérimental)", "Open local Style": "Ouvrir un style local", "Open modal": "Ouvrir (modale)", "Open one of the publicly available styles to start from.": "Ouvrez l'un des styles publics disponibles pour commencer.", "Open Style": "Ouvrir le style", + "OpenLayers (experimental)": "OpenLayers (expérimental)", "Options": "Options", "Output value": "Valeur de sortie", "Owner": "Propriétaire", @@ -154,6 +162,7 @@ "Remove variable": "Supprimer la variable", "Remove zoom level from stop": "Supprimer le niveau de zoom de l'arrêt", "Revert from expression": "Annuler l'expression", + "Roll": "Roulis", "Save": "Enregistrer", "Save as": "Enregistrer sous", "Save Style": "Enregistrer le style", @@ -164,6 +173,8 @@ "Shortcuts": "Raccourcis", "Shortcuts menu": "Menu des raccourcis", "Show": "Afficher", + "Sky color": "Couleur du ciel", + "Sky horizon blend": "Fondu ciel-horizon", "Source": "Source", "Source ID": "ID de la source", "Source Layer": "Calque Source", @@ -201,6 +212,5 @@ "Video URL": "URL de la vidéo", "View": "Vue", "You've entered an old style filter.": "Vous avez entré un ancien style de filtre.", - "Zoom": "Zoom", - "Drag and drop a style JSON file here or click to browse": "Faites glisser un fichier JSON de style ici ou cliquez pour parcourir" + "Zoom": "Zoom" } diff --git a/src/locales/he/translation.json b/src/locales/he/translation.json index 9043da97..506d9d20 100644 --- a/src/locales/he/translation.json +++ b/src/locales/he/translation.json @@ -13,10 +13,12 @@ "Add Variable": "הוסף משתנה", "any filter matches": "אחד הסינוים מתאימים", "API key for Stadia Maps.": "API key for Stadia Maps", + "Atmosphere blend": "מיזוג אטמוספרה", "Base": "בסיס", "Bearing": "כיוון", "Cancel": "ביטול", "Center": "מרכז", + "Center altitude": "גובה המרכז", "Choose Public Source": "בחירת מקור ציבורי", "Choose the default Maputnik renderer for this style.": "בחירת צייר ברירת המחדל של מפוטניק עבור הסטייל הזה", "Click to close the editor": "לחץ לסגירת העורך", @@ -54,6 +56,7 @@ "Delete expression": "מחיקת ביטוי", "Delete filter block": "מחיקת גוש מסנן", "Deuteranopia filter": "Deuteranopia filter", + "Drag and drop a style JSON file here or click to browse": "גרור ושחרר כאן קובץ JSON של סגנון או לחץ כדי לעיין", "Drag to resize the layer list": "יש לגרור כדי לשנות את גודל רשימת השכבות", "Drag to resize the sidebar": "יש לגרור כדי לשנות את גודל סרגל הצד", "Duplicate": "שכפול", @@ -64,6 +67,9 @@ "Export modal": "חלונית ייצוא", "Filter": "סינון", "Focus map": "פיקוס המפה", + "Fog color": "צבע ערפל", + "Fog ground blend": "מיזוג ערפל עם הקרקע", + "Font faces": "קבצי גופנים", "Function": "פונקציה", "Gallery Styles": "גלריית סטיילים", "General layout properties": "תכונות פריסה כלליות", @@ -76,6 +82,8 @@ "Glyphs URL": "כתובת סמלילים", "Help": "עזרה", "Hide": "הסתרה", + "Horizon color": "צבע האופק", + "Horizon fog blend": "מיזוג ערפל באופק", "Icon layout properties": "תכונות פריסה של סמליל", "Icon paint properties": "תכונות ציור של סמליל", "If the Map is in focused you can use the following shortcuts": "אם המפה נמצאת בפוקוס תוכלו להשתמש בקיצורי הדרך", @@ -123,11 +131,11 @@ "No global state variables defined. Add variables to create reusable values in your style.": "לא הוגדרו משתני מצב גלובלי. הוסף משתנים כדי ליצור ערכים שניתן לעשות בהם שימוש חוזר בסטייל שלך.", "Open": "פתיחה", "Open a local JSON style from your computer.": "פתיחת סטייל JSON מקומי מהמחשב שלך.", - "OpenLayers (experimental)": "OpenLayers (experimental)", "Open local Style": "פתיחת סטייל מקומי", "Open modal": "פתיחת חלונית", "Open one of the publicly available styles to start from.": "פתיחת אחד הסטייליםפ הציבוריים על מנת להתחיל מהם.", "Open Style": "פתיחת סטייל", + "OpenLayers (experimental)": "OpenLayers (experimental)", "Options": "אפשרויות", "Output value": "ערך החזרה", "Owner": "שייך ל", @@ -154,6 +162,7 @@ "Remove variable": "הסר משתנה", "Remove zoom level from stop": "הסרת רמת זום מעצירה", "Revert from expression": "החזרה מביטוי", + "Roll": "גלגול", "Save": "שמור", "Save as": "שמירה בשם", "Save Style": "שמירת הסטייל", @@ -164,6 +173,8 @@ "Shortcuts": "קיצורי דרך", "Shortcuts menu": "תפריט קיצורי דרך", "Show": "הצגה", + "Sky color": "צבע השמיים", + "Sky horizon blend": "מיזוג שמיים ואופק", "Source": "מקור", "Source ID": "מזהה מקור", "Source Layer": "שכבת מקור", @@ -201,6 +212,5 @@ "Video URL": "כתובת וידאו", "View": "תצוגה", "You've entered an old style filter.": "הכנסתם סינון מסוג ישן,", - "Zoom": "זום", - "Drag and drop a style JSON file here or click to browse": "גרור ושחרר כאן קובץ JSON של סגנון או לחץ כדי לעיין" + "Zoom": "זום" } diff --git a/src/locales/it/translation.json b/src/locales/it/translation.json index 12123b9b..0d29cee1 100644 --- a/src/locales/it/translation.json +++ b/src/locales/it/translation.json @@ -13,10 +13,12 @@ "Add Variable": "Aggiungi variabile", "any filter matches": "qualsiasi filtro corrisponde", "API key for Stadia Maps.": "Chiave API per Stadia Maps.", + "Atmosphere blend": "Sfumatura dell'atmosfera", "Base": "Base", "Bearing": "Direzione", "Cancel": "Annulla", "Center": "Centro", + "Center altitude": "Altitudine del centro", "Choose Public Source": "Scegli una sorgente pubblica", "Choose the default Maputnik renderer for this style.": "Scegli il renderer predefinito di Maputnik per questo stile.", "Click to close the editor": "Clicca per chiudere l'editor", @@ -54,6 +56,7 @@ "Delete expression": "Elimina espressione", "Delete filter block": "Elimina blocco filtro", "Deuteranopia filter": "Filtro deuteranopia", + "Drag and drop a style JSON file here or click to browse": "Trascina e rilascia qui un file JSON dello stile o fai clic per sfogliare", "Drag to resize the layer list": "Trascina per ridimensionare l'elenco dei livelli", "Drag to resize the sidebar": "Trascina per ridimensionare la barra laterale", "Duplicate": "Duplica", @@ -64,6 +67,9 @@ "Export modal": "Esporta finestra modale", "Filter": "Filtro", "Focus map": "Metti a fuoco la mappa", + "Fog color": "Colore della nebbia", + "Fog ground blend": "Sfumatura nebbia-suolo", + "Font faces": "File dei font", "Function": "Funzione", "Gallery Styles": "Galleria degli stili", "General layout properties": "Proprietà generali del layout", @@ -76,6 +82,8 @@ "Glyphs URL": "URL Glyphs", "Help": "Aiuto", "Hide": "Nascondi", + "Horizon color": "Colore dell'orizzonte", + "Horizon fog blend": "Sfumatura orizzonte-nebbia", "Icon layout properties": "Proprietà di layout dell'icona", "Icon paint properties": "Proprietà di pittura dell'icona", "If the Map is in focused you can use the following shortcuts": "Se la mappa è attiva, puoi utilizzare le seguenti scorciatoie:", @@ -123,11 +131,11 @@ "No global state variables defined. Add variables to create reusable values in your style.": "Nessuna variabile di stato globale definita. Aggiungi variabili per creare valori riutilizzabili nel tuo stile.", "Open": "Apri", "Open a local JSON style from your computer.": "Apri uno stile JSON dal tuo computer.", - "OpenLayers (experimental)": "OpenLayers (sperimentale)", "Open local Style": "Apri stile locale", "Open modal": "Apri finestra modale", "Open one of the publicly available styles to start from.": "Apro uno degli stili pubblici a partire da.", "Open Style": "Apri stile", + "OpenLayers (experimental)": "OpenLayers (sperimentale)", "Options": "Opzioni", "Output value": "Valore di output", "Owner": "Proprietario", @@ -154,6 +162,7 @@ "Remove variable": "Rimuovi variabile", "Remove zoom level from stop": "Rimuovi il livello di zoom dalla fermata", "Revert from expression": "Ripristina dall'espressione", + "Roll": "Rollio", "Save": "Salva", "Save as": "Salva con nome", "Save Style": "Opzioni stile", @@ -164,6 +173,8 @@ "Shortcuts": "Scorciatoie", "Shortcuts menu": "Scorciatoie del menu", "Show": "Mostra", + "Sky color": "Colore del cielo", + "Sky horizon blend": "Sfumatura cielo-orizzonte", "Source": "Sorgente", "Source ID": "ID sorgente", "Source Layer": "Livello sorgente", @@ -201,6 +212,5 @@ "Video URL": "Indirizzo video", "View": "Vista", "You've entered an old style filter.": "Hai inserito uno stile filtro obsoleto.", - "Zoom": "Zoom", - "Drag and drop a style JSON file here or click to browse": "Trascina e rilascia qui un file JSON dello stile o fai clic per sfogliare" + "Zoom": "Zoom" } diff --git a/src/locales/ja/translation.json b/src/locales/ja/translation.json index 3d01b56b..458b0472 100644 --- a/src/locales/ja/translation.json +++ b/src/locales/ja/translation.json @@ -13,10 +13,12 @@ "Add Variable": "変数を追加", "any filter matches": "いずれかのフィルタが一致", "API key for Stadia Maps.": "Stadia Maps の API キー", + "Atmosphere blend": "大気のブレンド", "Base": "ベース", "Bearing": "方位", "Cancel": "キャンセル", "Center": "中央", + "Center altitude": "中央の高度", "Choose Public Source": "公開ソースから選択", "Choose the default Maputnik renderer for this style.": "このスタイルのデフォルトの Maputnik レンダラを選択してください", "Click to close the editor": "エディタを閉じるにはクリックしてください", @@ -54,6 +56,7 @@ "Delete expression": "式を削除", "Delete filter block": "フィルタブロックを削除", "Deuteranopia filter": "緑色盲フィルタ", + "Drag and drop a style JSON file here or click to browse": "ここにスタイルのJSONファイルをドラッグ&ドロップするか、クリックして参照してください", "Drag to resize the layer list": "ドラッグしてレイヤーリストのサイズを変更", "Drag to resize the sidebar": "ドラッグしてサイドバーのサイズを変更", "Duplicate": "複製", @@ -64,6 +67,9 @@ "Export modal": "書き出しのモーダル", "Filter": "フィルタ", "Focus map": "地図にフォーカス", + "Fog color": "霧の色", + "Fog ground blend": "霧と地面のブレンド", + "Font faces": "フォントファイル", "Function": "関数", "Gallery Styles": "ギャラリースタイル", "General layout properties": "一般レイアウトプロパティ", @@ -76,6 +82,8 @@ "Glyphs URL": "フォントグリフURL", "Help": "ヘルプ", "Hide": "非表示", + "Horizon color": "地平線の色", + "Horizon fog blend": "地平線と霧のブレンド", "Icon layout properties": "アイコンレイアウトプロパティ", "Icon paint properties": "アイコンペイントプロパティ", "If the Map is in focused you can use the following shortcuts": "地図がフォーカスされている場合、以下のショートカットを使用できます", @@ -123,11 +131,11 @@ "No global state variables defined. Add variables to create reusable values in your style.": "グローバルステート変数が定義されていません。スタイルで再利用可能な値を作成するには、変数を追加してください。", "Open": "開く", "Open a local JSON style from your computer.": "コンピュータからローカルJSONスタイルを開きます。", - "OpenLayers (experimental)": "OpenLayers (実験的)", "Open local Style": "ローカルスタイルを開く", "Open modal": "モーダルを開く", "Open one of the publicly available styles to start from.": "公開スタイルを選んで開始しましょう。", "Open Style": "スタイルを開く", + "OpenLayers (experimental)": "OpenLayers (実験的)", "Options": "設定", "Output value": "値", "Owner": "所有者", @@ -154,6 +162,7 @@ "Remove variable": "変数を削除", "Remove zoom level from stop": "ズームレベルをストップから削除", "Revert from expression": "式から戻す", + "Roll": "ロール", "Save": "保存", "Save as": "名前を付けて保存", "Save Style": "スタイルを保存", @@ -164,6 +173,8 @@ "Shortcuts": "ショートカット", "Shortcuts menu": "ショートカットメニュー", "Show": "表示", + "Sky color": "空の色", + "Sky horizon blend": "空と地平線のブレンド", "Source": "ソース", "Source ID": "ソースID", "Source Layer": "ソースレイヤ", @@ -201,6 +212,5 @@ "Video URL": "動画URL", "View": "表示", "You've entered an old style filter.": "旧型フィルタを使用しております。", - "Zoom": "ズーム", - "Drag and drop a style JSON file here or click to browse": "ここにスタイルのJSONファイルをドラッグ&ドロップするか、クリックして参照してください" + "Zoom": "ズーム" } diff --git a/src/locales/ko/translation.json b/src/locales/ko/translation.json index db68649e..8b5420f1 100644 --- a/src/locales/ko/translation.json +++ b/src/locales/ko/translation.json @@ -13,10 +13,12 @@ "Add Variable": "변수 추가", "any filter matches": "일부 필터 일치", "API key for Stadia Maps.": "Stadia Maps용 API 키 입니다.", + "Atmosphere blend": "대기 블렌드", "Base": "베이스", "Bearing": "방위각", "Cancel": "취소", "Center": "중심 좌표", + "Center altitude": "중심 고도", "Choose Public Source": "공개 소스 선택", "Choose the default Maputnik renderer for this style.": "이 스타일의 기본 Maputnik 렌더러를 선택하세요.", "Click to close the editor": "편집기를 닫으려면 클릭하세요", @@ -54,6 +56,7 @@ "Delete expression": "표현식 삭제", "Delete filter block": "필터 블록 삭제", "Deuteranopia filter": "녹색맹 필터", + "Drag and drop a style JSON file here or click to browse": "여기에 스타일 JSON 파일을 끌어다 놓거나 클릭하여 찾아보세요", "Drag to resize the layer list": "드래그하여 레이어 목록 크기 조정", "Drag to resize the sidebar": "드래그하여 사이드바 크기 조정", "Duplicate": "복제", @@ -64,6 +67,9 @@ "Export modal": "모달 내보내기", "Filter": "필터", "Focus map": "포커스 맵", + "Fog color": "안개 색상", + "Fog ground blend": "안개-지면 블렌드", + "Font faces": "폰트 파일", "Function": "함수", "Gallery Styles": "갤러리 스타일", "General layout properties": "일반 레이아웃 속성", @@ -76,6 +82,8 @@ "Glyphs URL": "글리프 URL", "Help": "도움말", "Hide": "숨기기", + "Horizon color": "지평선 색상", + "Horizon fog blend": "지평선-안개 블렌드", "Icon layout properties": "아이콘 레이아웃 속성", "Icon paint properties": "아이콘 페인트 속성", "If the Map is in focused you can use the following shortcuts": "맵에 포커스가 맞춰진 경우 다음 단축키를 사용할 수 있습니다", @@ -123,11 +131,11 @@ "No global state variables defined. Add variables to create reusable values in your style.": "전역 상태 변수가 정의되지 않았습니다. 스타일에서 재사용 가능한 값을 생성하려면 변수를 추가하세요.", "Open": "열기", "Open a local JSON style from your computer.": "컴퓨터에서 로컬 JSON 스타일을 엽니다.", - "OpenLayers (experimental)": "OpenLayers (실험적)", "Open local Style": "로컬 스타일 열기", "Open modal": "모달 열기", "Open one of the publicly available styles to start from.": "공개 스타일 중 하나를 선택하여 시작하세요.", "Open Style": "스타일 열기", + "OpenLayers (experimental)": "OpenLayers (실험적)", "Options": "옵션", "Output value": "값", "Owner": "소유자", @@ -154,6 +162,7 @@ "Remove variable": "변수 제거", "Remove zoom level from stop": "기준점에서 줌 레벨 제거", "Revert from expression": "표현식에서 되돌리기", + "Roll": "롤 각도", "Save": "저장", "Save as": "다른 이름으로 저장", "Save Style": "스타일 저장", @@ -164,6 +173,8 @@ "Shortcuts": "단축키", "Shortcuts menu": "단축키 메뉴", "Show": "표시", + "Sky color": "하늘 색상", + "Sky horizon blend": "하늘-지평선 블렌드", "Source": "소스", "Source ID": "소스 ID", "Source Layer": "소스 레이어", @@ -201,6 +212,5 @@ "Video URL": "비디오 URL", "View": "보기", "You've entered an old style filter.": "이전 스타일 필터를 입력했습니다.", - "Zoom": "줌", - "Drag and drop a style JSON file here or click to browse": "여기에 스타일 JSON 파일을 끌어다 놓거나 클릭하여 찾아보세요" + "Zoom": "줌" } diff --git a/src/locales/tr/translation.json b/src/locales/tr/translation.json index 815aa50f..f097e4b6 100644 --- a/src/locales/tr/translation.json +++ b/src/locales/tr/translation.json @@ -13,10 +13,12 @@ "Add Variable": "Değişken Ekle", "any filter matches": "herhangi bir filtre eşleşirse", "API key for Stadia Maps.": "Stadia Maps için API anahtarı.", + "Atmosphere blend": "Atmosfer karışımı", "Base": "Temel", "Bearing": "Yön", "Cancel": "İptal", "Center": "Merkez", + "Center altitude": "Merkez yüksekliği", "Choose Public Source": "Herkese Açık Kaynak Seç", "Choose the default Maputnik renderer for this style.": "Bu stil için varsayılan Maputnik işleyicisini seçin.", "Click to close the editor": "Düzenleyiciyi kapatmak için tıklayın", @@ -65,6 +67,9 @@ "Export modal": "Dışa aktarma modalı", "Filter": "Filtre", "Focus map": "Haritaya odaklan", + "Fog color": "Sis rengi", + "Fog ground blend": "Sis-zemin karışımı", + "Font faces": "Yazı tipi dosyaları", "Function": "Fonksiyon", "Gallery Styles": "Galeri Stilleri", "General layout properties": "Genel yerleşim özellikleri", @@ -77,6 +82,8 @@ "Glyphs URL": "Glif URL'si", "Help": "Yardım", "Hide": "Gizle", + "Horizon color": "Ufuk rengi", + "Horizon fog blend": "Ufuk-sis karışımı", "Icon layout properties": "Simge yerleşim özellikleri", "Icon paint properties": "Simge boyama özellikleri", "If the Map is in focused you can use the following shortcuts": "Harita odaktaysa aşağıdaki kısayolları kullanabilirsiniz", @@ -124,11 +131,11 @@ "No global state variables defined. Add variables to create reusable values in your style.": "Genel durum değişkeni tanımlanmadı. Stilinizde yeniden kullanılabilir değerler oluşturmak için değişken ekleyin.", "Open": "Aç", "Open a local JSON style from your computer.": "Bilgisayarınızdan yerel bir JSON stili açın.", - "OpenLayers (experimental)": "OpenLayers (deneysel)", "Open local Style": "Yerel Stili Aç", "Open modal": "Modalı aç", "Open one of the publicly available styles to start from.": "Başlamak için herkese açık stillerden birini açın.", "Open Style": "Stili Aç", + "OpenLayers (experimental)": "OpenLayers (deneysel)", "Options": "Seçenekler", "Output value": "Çıkış değeri", "Owner": "Sahip", @@ -155,6 +162,7 @@ "Remove variable": "Değişkeni kaldır", "Remove zoom level from stop": "Duraktan yakınlaştırma seviyesini kaldır", "Revert from expression": "İfadeden geri dön", + "Roll": "Yuvarlanma", "Save": "Kaydet", "Save as": "Farklı kaydet", "Save Style": "Stili Kaydet", @@ -165,6 +173,8 @@ "Shortcuts": "Kısayollar", "Shortcuts menu": "Kısayollar menüsü", "Show": "Göster", + "Sky color": "Gökyüzü rengi", + "Sky horizon blend": "Gökyüzü-ufuk karışımı", "Source": "Kaynak", "Source ID": "Kaynak Kimliği", "Source Layer": "Kaynak Katmanı", diff --git a/src/locales/zh/translation.json b/src/locales/zh/translation.json index 345725f6..c0c2b267 100644 --- a/src/locales/zh/translation.json +++ b/src/locales/zh/translation.json @@ -13,10 +13,12 @@ "Add Variable": "添加变量", "any filter matches": "任何过滤器匹配", "API key for Stadia Maps.": "Stadia Maps 的 API 密钥", + "Atmosphere blend": "大气混合", "Base": "基础", "Bearing": "方位", "Cancel": "取消", "Center": "中心", + "Center altitude": "中心海拔", "Choose Public Source": "选择公共源", "Choose the default Maputnik renderer for this style.": "为这种样式选择默认的Maputnik渲染器。", "Click to close the editor": "点击关闭编辑器", @@ -54,6 +56,7 @@ "Delete expression": "删除表达式", "Delete filter block": "删除过滤器块", "Deuteranopia filter": "绿色盲滤镜", + "Drag and drop a style JSON file here or click to browse": "将样式 JSON 文件拖放到此处或点击以浏览", "Drag to resize the layer list": "拖动以调整图层列表大小", "Drag to resize the sidebar": "拖动以调整侧边栏大小", "Duplicate": "复制", @@ -64,6 +67,9 @@ "Export modal": "导出模态框", "Filter": "过滤器", "Focus map": "聚焦地图", + "Fog color": "雾颜色", + "Fog ground blend": "雾与地面混合", + "Font faces": "字体文件", "Function": "函数", "Gallery Styles": "画廊样式", "General layout properties": "常规布局属性", @@ -76,6 +82,8 @@ "Glyphs URL": "字形URL", "Help": "帮助", "Hide": "隐藏", + "Horizon color": "地平线颜色", + "Horizon fog blend": "地平线与雾混合", "Icon layout properties": "图标布局属性", "Icon paint properties": "图标绘制属性", "If the Map is in focused you can use the following shortcuts": "如果地图处于焦点状态,您可以使用以下快捷键", @@ -123,11 +131,11 @@ "No global state variables defined. Add variables to create reusable values in your style.": "未定义全局状态变量。添加变量以在样式中创建可重用的值。", "Open": "打开", "Open a local JSON style from your computer.": "从您的计算机打开本地JSON样式。", - "OpenLayers (experimental)": "OpenLayers(实验性)", "Open local Style": "打开本地样式", "Open modal": "打开模态框", "Open one of the publicly available styles to start from.": "打开一个公开可用的样式开始。", "Open Style": "打开样式", + "OpenLayers (experimental)": "OpenLayers(实验性)", "Options": "选项", "Output value": "输出值", "Owner": "所有者", @@ -154,6 +162,7 @@ "Remove variable": "移除变量", "Remove zoom level from stop": "从停靠点移除缩放级别", "Revert from expression": "从表达式恢复", + "Roll": "翻滚角", "Save": "保存", "Save as": "另存为", "Save Style": "保存样式", @@ -164,6 +173,8 @@ "Shortcuts": "快捷键", "Shortcuts menu": "快捷方式菜单", "Show": "显示", + "Sky color": "天空颜色", + "Sky horizon blend": "天空与地平线混合", "Source": "源", "Source ID": "源ID", "Source Layer": "源图层", @@ -201,6 +212,5 @@ "Video URL": "视频URL", "View": "视图", "You've entered an old style filter.": "您输入了一个旧风格的过滤器。", - "Zoom": "缩放", - "Drag and drop a style JSON file here or click to browse": "将样式 JSON 文件拖放到此处或点击以浏览" + "Zoom": "缩放" }