From 64b4e5a67c8f8cf897a086064df62f056d59db03 Mon Sep 17 00:00:00 2001 From: Jamal Ali Date: Sat, 5 Sep 2026 20:23:39 +0400 Subject: [PATCH] feat(i18n): add Azerbaijani language support and translations (#2134) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Launch Checklist - [x] Adds Azerbaijani (`az`) as a supported UI language, following the same pattern as the existing Turkish (`tr`) locale. - [x] `src/locales/az/translation.json` — full translation, 202 keys (matches `tr`/`de` key set exactly). - [x] Registered `az` in `i18next.config.ts` (`locales` array) and `src/i18n.ts` (`supportedLanguages`), alphabetically ordered. - [x] Added `az` row to the `src/locales/README.md` contributors table. - [ ] Link to related issues. - [ ] Include before/after visuals or gifs if this PR includes visual changes. (N/A — translation-only change, no UI layout changes.) - [ ] Write tests for all new functionality. (N/A — no new functionality, translation strings only.) - [ ] Add an entry to `CHANGELOG.md` under the `## main` section. (Not done — the prior Turkish locale PR (#1886) did not add a CHANGELOG entry either, so following existing precedent.) Terminology used consistently throughout: Layer → Qat, Style → Üslub, Source → Mənbə, Zoom → Yaxınlaşma, Filter → Süzgəc. --- i18next.config.ts | 2 +- src/i18n.ts | 1 + src/locales/README.md | 1 + src/locales/az/translation.json | 204 ++++++++++++++++++++++++++++++++ 4 files changed, 207 insertions(+), 1 deletion(-) create mode 100644 src/locales/az/translation.json diff --git a/i18next.config.ts b/i18next.config.ts index d71d175b..5c98c307 100644 --- a/i18next.config.ts +++ b/i18next.config.ts @@ -1,7 +1,7 @@ import { defineConfig } from "i18next-cli"; export default defineConfig({ - locales: ["de", "fr", "he", "it", "ja", "ko", "tr", "zh"], + locales: ["az", "de", "fr", "he", "it", "ja", "ko", "tr", "zh"], extract: { input: ["src/**/*.{js,jsx,ts,tsx}"], output: "src/locales/{{language}}/{{namespace}}.json", diff --git a/src/i18n.ts b/src/i18n.ts index 8d0030c1..3997763b 100644 --- a/src/i18n.ts +++ b/src/i18n.ts @@ -4,6 +4,7 @@ import resourcesToBackend from "i18next-resources-to-backend"; import { initReactI18next } from "react-i18next"; export const supportedLanguages = { + "az": "Azərbaycan", "de": "Deutsch", "en": "English", "fr": "Français", diff --git a/src/locales/README.md b/src/locales/README.md index 05542f0f..2a4d1a0b 100644 --- a/src/locales/README.md +++ b/src/locales/README.md @@ -46,6 +46,7 @@ The following users can help you with the relevant languages: | ISO Code | Language | User | |----------|--------------------|--------------------------------------------| +| az | Azerbaijani | [@jamalkamaladdin](https://github.com/jamalkamaladdin) | | de | German | [@josxha](https://github.com/josxha) | | en | English | [@HarelM](https://github.com/HarelM) | | fr | French | [@lhapaipai](https://github.com/lhapaipai) | diff --git a/src/locales/az/translation.json b/src/locales/az/translation.json new file mode 100644 index 00000000..0de21f00 --- /dev/null +++ b/src/locales/az/translation.json @@ -0,0 +1,204 @@ +{ + "<0>Open in OSM. Opens the current view on openstreetmap.org": "<0>OSM-də aç. Cari görünüşü openstreetmap.org saytında açır", + "Achromatopsia filter": "Axromatopsiya süzgəci", + "Active Sources": "Aktiv Mənbələr", + "Add a new source to your style. You can only choose the source type and id at creation time!": "Üslubunuza yeni mənbə əlavə edin. Mənbə növünü və ID-ni yalnız yaradılma zamanı seçə bilərsiniz!", + "Add filter": "Süzgəc əlavə et", + "Add Layer": "Qat Əlavə Et", + "Add New Source": "Yeni Mənbə Əlavə Et", + "Add one of the publicly available sources to your style.": "Üslubunuza ictimai mənbələrdən birini əlavə edin.", + "Add Source": "Mənbə Əlavə Et", + "Add stop": "Dayanacaq əlavə et", + "Add value": "Dəyər əlavə et", + "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ı.", + "Base": "Baza", + "Bearing": "İstiqamət", + "Cancel": "Ləğv et", + "Center": "Mərkəz", + "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", + "Close": "Bağla", + "Close modal": "Modalı bağla", + "Close popup": "Popapı bağla", + "Cluster": "Klaster", + "Code Editor": "Kod Redaktoru", + "Collapse": "Yığ", + "Color accessibility": "Rəng əlçatanlığı", + "Comment...": "Şərh...", + "Comments": "Şərhlər", + "Comments for the current layer. This is non-standard and not in the spec.": "Cari qat üçün şərhlər. Bu, standart deyil və spesifikasiyada yoxdur.", + "Convert property into a elevation function": "Xassəni hündürlük funksiyasına çevir", + "Convert property into a zoom function": "Xassəni yaxınlaşma funksiyasına çevir", + "Convert property to data function": "Xassəni məlumat funksiyasına çevir", + "Convert to expression": "İfadəyə çevir", + "Coord bottom left": "Koordinat aşağı sol", + "Coord bottom right": "Koordinat aşağı sağ", + "Coord top left": "Koordinat yuxarı sol", + "Coord top right": "Koordinat yuxarı sağ", + "CORS policy won't allow fetching resources served over http from https, use a <1>https:// domain": "CORS siyasəti https-dən http üzərindən verilən resursların alınmasına icazə vermir, <1>https:// domenindən istifadə edin", + "Create HTML": "HTML Yarat", + "Data Sources": "Məlumat Mənbələri", + "Data Sources modal": "Məlumat Mənbələri modalı", + "Data value": "Məlumat dəyəri", + "Debug": "Sazlama", + "Debug modal": "Sazlama modalı", + "Decrease the pitch by 10 degrees.": "Meyli 10 dərəcə azalt.", + "Decrease the rotation by 15 degrees.": "Fırlanmanı 15 dərəcə azalt.", + "Decrease the zoom level by 1.": "Yaxınlaşma səviyyəsini 1 azalt.", + "Decrease the zoom level by 2.": "Yaxınlaşma səviyyəsini 2 azalt.", + "Default": "Defolt", + "Delete": "Sil", + "Delete expression": "İfadəni sil", + "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", + "Duplicate": "Dublikat et", + "Encoding": "Kodlaşdırma", + "Enter URL...": "URL daxil edin...", + "every filter matches": "bütün süzgəclər uyğun gəlirsə", + "Expand": "Genişlət", + "Export modal": "İxrac modalı", + "Filter": "Süzgəc", + "Focus map": "Xəritəyə fokuslan", + "Function": "Funksiya", + "Gallery Styles": "Qalereya Üslubları", + "General layout properties": "Ümumi düzülüş xassələri", + "GeoJSON": "GeoJSON", + "GeoJSON (JSON)": "GeoJSON (JSON)", + "GeoJSON (URL)": "GeoJSON (URL)", + "GeoJSON URL": "GeoJSON URL", + "Global State": "Qlobal Vəziyyət", + "Global State Variables": "Qlobal Vəziyyət Dəyişənləri", + "Glyphs URL": "Şriftlər URL-i", + "Help": "Kömək", + "Hide": "Gizlət", + "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", + "Image": "Şəkil", + "Image URL": "Şəkil URL-i", + "Increase the pitch by 10 degrees.": "Meyli 10 dərəcə artır.", + "Increase the rotation by 15 degrees.": "Fırlanmanı 15 dərəcə artır.", + "Increase the zoom level by 1.": "Yaxınlaşma səviyyəsini 1 artır.", + "Increase the zoom level by 2.": "Yaxınlaşma səviyyəsini 2 artır.", + "Input a data property to base styles off of.": "Üslubların əsaslanacağı məlumat xassəsini daxil edin.", + "Input value": "Giriş dəyəri", + "Inspect": "Yoxla", + "JSON Editor": "JSON Redaktoru", + "Key": "Açar", + "Layer": "Qat", + "Layer editor": "Qat redaktoru", + "Layer ID already exists": "Qat ID artıq mövcuddur", + "Layers": "Qatlar", + "Layers list": "Qatlar siyahısı", + "Layout properties": "Düzülüş xassələri", + "Learn More": "Ətraflı Öyrən", + "Light anchor": "İşıq lövbəri", + "Light color": "İşıq rəngi", + "Light intensity": "İşıq intensivliyi", + "Light position": "İşıq mövqeyi", + "Links": "Keçidlər", + "Load from a URL. Note that the URL must have <1>CORS enabled.": "URL-dən yüklə. Qeyd edin ki, URL-də <1>CORS aktiv olmalıdır.", + "Load from URL": "URL-dən yüklə", + "Loading": "Yüklənir", + "Loading style": "Üslub yüklənir", + "LocationIQ Access Token": "LocationIQ Giriş Tokeni", + "Map": "Xəritə", + "Map view": "Xəritə görünüşü", + "MapTiler Access Token": "MapTiler Giriş Tokeni", + "Maputnik on GitHub": "GitHub-da Maputnik", + "Max Zoom": "Maks. Yaxınlaşma", + "Min Zoom": "Min. Yaxınlaşma", + "Move layer down": "Qatı aşağı köçür", + "Move layer up": "Qatı yuxarı köçür", + "Must provide protocol: <1>http:// or <3>https://": "Protokol göstərilməlidir: <1>http:// və ya <3>https://", + "Must provide protocol: <1>https://": "Protokol göstərilməlidir: <1>https://", + "Name": "Ad", + "Nested filters are not supported.": "İç-içə süzgəclər dəstəklənmir.", + "no filter matches": "heç bir süzgəc uyğun gəlmirsə", + "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ç", + "Options": "Seçimlər", + "Output value": "Çıxış dəyəri", + "Owner": "Sahib", + "Owner ID of the style. Used by Mapbox or future style APIs.": "Üslubun sahib ID-si. Mapbox və ya gələcək üslub API-ləri tərəfindən istifadə olunur.", + "Paint properties": "Boyama xassələri", + "Pan down by 100 pixels.": "100 piksel aşağı sürüşdür.", + "Pan left by 100 pixels.": "100 piksel sola sürüşdür.", + "Pan right by 100 pixels.": "100 piksel sağa sürüşdür.", + "Pan up by 100 pixels.": "100 piksel yuxarı sürüşdür.", + "Pitch": "Meyl", + "PMTiles URL": "PMTiles URL", + "Press <1>ESC to lose focus of any active elements, then press one of:": "İstənilən aktiv elementin fokusunu itirmək üçün <1>ESC düyməsini basın, sonra bunlardan birini basın:", + "Projection": "Proyeksiya", + "Protanopia filter": "Protanopiya süzgəci", + "Public access token for LocationIQ services.": "LocationIQ xidmətləri üçün ictimai giriş tokeni.", + "Public access token for MapTiler Cloud.": "MapTiler Cloud üçün ictimai giriş tokeni.", + "Public access token for Thunderforest services.": "Thunderforest xidmətləri üçün ictimai giriş tokeni.", + "Raster (Tile URLs)": "Rastr (Kafel URL-ləri)", + "Raster (TileJSON URL)": "Rastr (TileJSON URL)", + "Raster DEM (TileJSON URL)": "Rastr DEM (TileJSON URL)", + "Raster DEM (XYZ URLs)": "Rastr DEM (XYZ URL-ləri)", + "Remove '{{sourceId}}' source": "'{{sourceId}}' mənbəsini sil", + "Remove array item": "Massiv elementini sil", + "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", + "Save": "Yadda saxla", + "Save as": "Fərqli yadda saxla", + "Save Style": "Üslubu Yadda Saxla", + "Save the JSON style to your computer.": "JSON üslubunu kompüterinizə yadda saxlayın.", + "Scheme Type": "Sxem Növü", + "Search": "Axtar", + "Select a type of data scale (default is 'categorical').": "Məlumat şkalasının növünü seçin (defolt 'categorical'dır).", + "Shortcuts": "Qısayollar", + "Shortcuts menu": "Qısayollar menyusu", + "Show": "Göstər", + "Source": "Mənbə", + "Source ID": "Mənbə ID", + "Source Layer": "Mənbə Qatı", + "Source Type": "Mənbə Növü", + "Sources": "Mənbələr", + "Sprite URL": "Sprite URL-i", + "Stadia Maps API Key": "Stadia Maps API Açarı", + "Stops": "Dayanacaqlar", + "Style Renderer": "Üslub Renderer-i", + "Style Settings": "Üslub Parametrləri", + "Style Settings modal": "Üslub Parametrləri modalı", + "Style URL": "Üslub URL-i", + "Switch to filter editor.": "Süzgəc redaktoruna keç.", + "switch to layer": "qata keç", + "Terrain exaggeration": "Relyef şişirdilməsi", + "Terrain source": "Relyef mənbəyi", + "Text layout properties": "Mətn düzülüş xassələri", + "Text paint properties": "Mətn boyama xassələri", + "Thunderforest Access Token": "Thunderforest Giriş Tokeni", + "Tile Size": "Kafel Ölçüsü", + "Tile URL": "Kafel URL-i", + "TileJSON URL": "TileJSON URL", + "Toggle inspect": "Yoxlamanı aç/bağla", + "Transition delay": "Keçid gecikməsi", + "Transition duration": "Keçid müddəti", + "Tritanopia filter": "Tritanopiya süzgəci", + "Type": "Növ", + "Unique ID that identifies the source and is used in the layer to reference the source.": "Mənbəni müəyyən edən və qatda mənbəyə istinad üçün istifadə olunan unikal ID.", + "Upgrade to expression": "İfadəyə yüksəlt", + "Value": "Dəyər", + "Vector (PMTiles)": "Vektor (PMTiles)", + "Vector (Tile URLs)": "Vektor (Kafel URL-ləri)", + "Vector (TileJSON URL)": "Vektor (TileJSON URL)", + "Video": "Video", + "Video URL": "Video URL-i", + "View": "Görünüş", + "You've entered an old style filter.": "Köhnə üslub süzgəci daxil etmisiniz.", + "Zoom": "Yaxınlaşma" +}