From 524399268bb77ba6819ffa7b5231dcfb6212360f Mon Sep 17 00:00:00 2001 From: Alexander Borsuk Date: Tue, 20 Aug 2024 19:18:09 +0200 Subject: [PATCH 1/5] [strings] Hebrew translations by MbTy1 Signed-off-by: Alexander Borsuk --- data/strings/types_strings.txt | 109 +++++++++++++++++++++++++-------- 1 file changed, 85 insertions(+), 24 deletions(-) diff --git a/data/strings/types_strings.txt b/data/strings/types_strings.txt index 3a9d04f2e0..3958403cb1 100644 --- a/data/strings/types_strings.txt +++ b/data/strings/types_strings.txt @@ -7223,7 +7223,7 @@ fa = آهنگر fi = Seppä fr = Forgeron - he = נַפָּח + he = נַפָּח hi = लोहार hu = Kovácsműhely id = Pandai Besi @@ -13162,7 +13162,7 @@ fa = پل fi = Silta fr = Pont - he = לְגַשֵׁר + he = לְגַשֵׁר hu = Híd id = Menjembatani it = Ponte @@ -14954,7 +14954,7 @@ fa = گردشگری fi = Veistos fr = Sculpture - he = פֶּסֶל + he = פֶּסֶל hu = Szobor id = Tugu peringatan it = Scultura @@ -18938,7 +18938,7 @@ fa = ﺮﯾﻮﮐ fi = Aavikko fr = Désert - he = רבָּדמִ + he = מדבר hi = मरुस्थल hu = Sivatag id = Gurun @@ -20699,7 +20699,7 @@ fa = روستا fi = Pieni kylä fr = Hameau - he = כְּפָר קָטָן + he = כְּפָר קָטָן hi = गांव hu = Falucska id = Dusun @@ -22053,7 +22053,7 @@ fa = فونیکولور fi = Köysirata fr = Funiculaire - he = רַכֶּבֶל + he = רַכֶּבֶל hi = रज्जुरेल hu = Sikló id = Kereta gantung @@ -24442,6 +24442,7 @@ fa = اپاراتی fi = Rengashuolto fr = Réparation de pneus + he = פנצ'ריה hi = पहियों की मरम्मत hu = Gumiszerviz id = Tambal ban @@ -24478,6 +24479,7 @@ et = Haagiselamute müük fi = Matkailu- ja retkeilyautokauppias fr = Concessionnaire de caravanes et camping-cars + he = סוחר בקראוונים hi = कैंपर डीलर nl = Caravan en camper verkoper pl = Sklep z karawanami i kamperami @@ -24585,6 +24587,7 @@ fa = فروشگاه fi = Suklaakauppa fr = Chocolatier + he = חנות שוקולדים hi = चॉकलेट की दुकान hu = Csokoládébolt id = Toko Cokelat @@ -24624,6 +24627,7 @@ fa = لباس فروشی fi = Vaatekauppa fr = Boutique de vêtements + he = חנות בגדים hi = कपड़े की दुकान hu = Ruhabolt id = Toko baju @@ -24663,6 +24667,7 @@ fa = فروشگاه fi = Kahvikauppa fr = Boutique de cafés + he = בית קפה hi = कॉफी की दुकान hu = Kávébolt id = Toko kopi @@ -24702,6 +24707,7 @@ fa = فروشگاه fi = Tietokonekauppa fr = Magasin d'informatique + he = חנות מחשבים hi = कंप्यूटर की दुकान hu = Számítógépüzlet id = Toko komputer @@ -24781,6 +24787,7 @@ fa = فروشگاه fi = Lähikauppa fr = Supérette + he = חנות נוחות hi = सुविधा की दुकान hu = Csemegebolt id = Mini market @@ -24819,6 +24826,7 @@ fa = فروشگاه چاپ و تکثیر fi = Painotalo fr = Boutique de photocopies + he = חנות דפוס ושעתוק hi = फ़ोटोकॉपी की दुकान hu = Fénymásoló id = Fotokopi @@ -24858,6 +24866,7 @@ fa = فروشگاه fi = Kosmetiikka fr = Produits de beauté + he = חנות קוסמטיקה hi = सौंदर्य प्रसाधन की दुकान hu = Kozmetikumok id = Kosmetik @@ -24940,7 +24949,7 @@ fa = ﯽﺷﻭﺮﻓ ﻪﯾﺬﻏﺍ ﻩﺎﮕﺷﻭﺮﻓ fi = Herkkukauppa fr = Épicerie fine - he = תוינדעמ תונח + he = מעדניה hi = मिठाई की दुकान hu = Csemegebolt id = Toko Kue @@ -24979,6 +24988,7 @@ fa = مرکز خرید fi = Tavaratalo fr = Grand magasin + he = חנות כל-בו גדולה hi = डिपार्टमेंट स्टोर hu = Áruház id = Toko serba ada @@ -25020,6 +25030,7 @@ fa = فروشگاه fi = Rautakauppa fr = Magasin de bricolage + he = חנות לשיפוץ הבית hi = लौह वस्तुओं की दुकान hu = Barkácsáruház id = Toko perangkat keras @@ -25058,6 +25069,7 @@ fa = خشک شویی fi = Kuivapesula fr = Nettoyage à sec + he = ניקוי יבש hi = ड्राय वॉश hu = Ruhatisztító id = Cuci Kering @@ -25096,6 +25108,7 @@ fa = فروشگاه fi = Elektroniikka fr = Magasin d'électroménager + he = חנות מוצרי חשמל hi = इलेक्ट्रॉनिक्स की दुकान hu = Elektronika id = Elektronik @@ -25134,6 +25147,7 @@ fa = فروشگاه fi = Erotiikkaliike fr = Boutique érotique + he = חנות אירוטיקה hi = कामुक दुकान hu = Erotikus bolt id = Toko Erotik @@ -25171,6 +25185,7 @@ fa = فروشگاه fi = Kangaskauppa fr = Magasin de tissus + he = חנות בדים hi = कपड़े की दुकान hu = Szövetbolt id = Toko Kain @@ -25292,6 +25307,7 @@ fa = فروشگاه fi = Floristi fr = Fleuriste + he = חנות פרחים hi = फूलवाले की दुकान hu = Virágos id = Tukang bunga @@ -25331,6 +25347,7 @@ fa = مسئول تشییع جنازه fi = Hautaustoimisto fr = Pompes funèbres + he = מנהלי הלוויות hi = अंतिम संस्कार के निदेशक hu = Temetkezési vállalkozó id = Direktur Pemakaman @@ -25370,6 +25387,7 @@ fa = فروشگاه fi = Huonekalukauppa fr = Magasin de meubles + he = חנות רהיטים hi = फर्नीचर की दुकान hu = Bútoráruház id = Toko mebel @@ -25450,7 +25468,7 @@ fa = فروشگاه گاز fi = Kaasukauppa fr = Vente de gaz - he = חנות דלק + he = חנות גז hu = Gázbolt id = Toko gas it = Deposito di gas @@ -25489,6 +25507,7 @@ fa = فروشگاه fi = Lahjatavaraliike fr = Boutique de souvenirs + he = חנות מתנות hi = उपहार की दुकान hu = Ajándékbolt id = Toko hadiah @@ -25527,6 +25546,7 @@ fa = فروشگاه fi = Vihanneskauppias fr = Primeur + he = ירקן hi = फल-सब्ज़ियों की दुकान hu = Zöldséges id = Penjual sayuran @@ -25607,6 +25627,7 @@ fa = ارایشگاه fi = Kampaamo fr = Coiffeur + he = מספרה hi = नाई hu = Fodrász id = Penata rambut @@ -25644,7 +25665,7 @@ fa = ﺭﺍﺰﻓﺍ ﺖﺨﺳ ﻩﺎﮕﺷﻭﺮﻓ fi = Rautakauppa fr = Quincaillerie - he = ןיינב ירמוחל תונח + he = חנות לחומרי בניין hi = लौह वस्तुओं की दुकान hu = Barkácsüzlet it = Ferramenta @@ -25681,7 +25702,7 @@ fa = ﯽﺘﺷﺍﺪﻬﺑ ﯽﯾﺍﺬﻏ ﺩﺍﻮﻣ ﻩﺎﮕﺷﻭﺮﻓ fi = Terveysruokakauppa fr = Magasin d'alimentation diététique - he = תואירב ןוזמ תונח + he = חנות מזון בריאות hi = स्वस्थ भोजन की दुकान hu = Egészséges élelmiszerek boltja id = Toko Makanan Kesehatan @@ -25807,7 +25828,7 @@ fa = ﯽﮕﻧﺎﺧ ﻡﺯﺍﻮﻟ ﻩﺎﮕﺷﻭﺮﻓ fi = Taloustavarakauppa fr = Magasin d'articles ménagers - he = תיב ילכל תונח + he = חנות כלי בית hi = घरेलू सामान की दुकान hu = Háztartási bolt id = Toko Peralatan Rumah Tangga @@ -25847,6 +25868,7 @@ fa = طلا فروشی fi = Korukauppa fr = Bijouterie + he = חנות תכשיטים hi = ज्वैलरी hu = Ékszerüzlet id = Perhiasan @@ -25882,6 +25904,7 @@ fa = دَکهِ fi = Kioski fr = Kiosque + he = קיוסק hi = गुमटी hu = Trafik id = Kios @@ -25922,7 +25945,7 @@ fa = ﻪﻧﺎﺧﺰﭙﺷﺁ ﻩﺎﮕﺷﻭﺮﻓ fi = Keittiökauppa fr = Magasin de cuisine - he = םיחבטמ תונח + he = חנות מטבחים hi = रसोई की दुकान hu = Konyhafelszerelési áruház id = Toko Dapur @@ -25962,6 +25985,7 @@ fa = لباس شویی fi = Pesula fr = Laverie + he = מכבסה hi = धोबी की दुकान hu = Mosoda id = Londri @@ -26001,6 +26025,7 @@ fa = فروشگاه fi = Ostoskeskus fr = Centre commercial + he = קניון hi = शॉपिंग मॉल hu = Bevásárlóközpont it = Centro commerciale @@ -26038,6 +26063,7 @@ fa = سالن ماساژ fi = Hierontahuone fr = Salon de massage + he = מכון עיסוי hi = मालिश घर hu = Masszázsszalon id = Tempat Pijat @@ -26077,6 +26103,7 @@ fa = فروشگاه fi = Elektroniikkakauppa fr = Magasin de téléphonie mobile + he = חנות מכשירי סלולר hi = सेल फोन की दुकान hu = Mobiltelefon üzlet id = Toko telepon @@ -26116,6 +26143,7 @@ fa = فروشگاه fi = Rahan lainaaja fr = Magasin + he = הלוואות כספים hi = हवलदार hu = Pénzkölcsönző id = Pemberi Pinjaman Uang @@ -26154,6 +26182,7 @@ fa = فروشگاه fi = Moottoripyöräliike fr = Magasin de motos + he = חנות אופנועים hi = मोटरसाइकिल की दुकान hu = Motorkerékpár üzlet id = Toko Sepeda Motor @@ -26236,6 +26265,7 @@ fa = فروشگاه fi = Levykauppa fr = Disquaire + he = חנות תקליטים hi = रिकॉर्ड की दुकान hu = Lemezbolt id = Toko musik @@ -26275,6 +26305,7 @@ fa = فروشگاه fi = Soittimien kauppa fr = Magasin d'instruments de musique + he = חנות כלי נגינה hi = संगीत वाद्ययंत्र hu = Hangszerbolt id = Toko Alat Musik @@ -26313,6 +26344,7 @@ fa = فروشگاه fi = Lehtikioski fr = Kiosque à journaux + he = דוכן עיתונים hi = अख़बार की दुकान hu = Újságárus id = Kios Surat Kabar @@ -26351,6 +26383,7 @@ fa = فروشگاه fi = Optikko fr = Opticien + he = אופטיקה hi = ऑप्टिशियन hu = Optika id = Toko kacamata @@ -26471,7 +26504,7 @@ fa = ﯽﻨﯾﺮﯿﺷ fi = Leivonnainen fr = Pâtisserie - he = הפאמ + he = מגדניה hi = पेस्ट्री का दुकान hu = Cukrászda id = Kue-kue @@ -26510,6 +26543,7 @@ fa = عتیقه فروشی fi = Panttilainaamo fr = Prêteur sur gages + he = משכנתאות hi = महाजन hu = Zálogház id = Rumah Gadai @@ -26548,6 +26582,7 @@ fa = فروشگاه fi = Eläinkauppa fr = Animalerie + he = חנות בעלי חיים hi = पालतू जानवर की दुकान hu = Házikedvenc-üzlet id = Toko hewan @@ -26628,6 +26663,7 @@ fa = فروشگاه fi = Valokuvakauppa fr = Matériel de photographie + he = חנות צילום hi = छायाचित्रण की दुकान hu = Fotóüzlet id = Studio Foto @@ -26750,6 +26786,7 @@ fa = فروشگاه fi = Kalakauppias fr = Poissonnier + he = חנות דגים hi = समुद्री भोजन की दुकान hu = Halkereskedő id = Penjual Ikan @@ -26906,6 +26943,7 @@ fa = لوازم التحریر fi = Kirjoitustarvikekauppa fr = Papeterie + he = חנות כלי כתיבה hi = लेखन सामग्री की दुकान hu = Papír-írószer bolt id = Toko Alat Tulis @@ -26943,6 +26981,7 @@ fa = فروشگاه fi = Supermarketti fr = Supermarché + he = סופרמרקט hi = सुपरमार्केट hu = Szupermarket it = Supermercato @@ -26978,6 +27017,7 @@ fa = سالن خالکوبی fi = Tatuointiliike fr = Salon de tatouage + he = מכון קעקועים hi = टैटू पार्लर hu = Tetoválószalon id = Tempat Tato @@ -27017,6 +27057,7 @@ fa = فروشگاه fi = Teekauppa fr = Boutique de thés + he = חנות תה hi = चाय की दुकान hu = Teabolt id = Toko teh @@ -27055,6 +27096,7 @@ fa = فروشگاه fi = Lippumyymälä fr = Billetterie + he = חנות כרטיסים hi = टिकट की दुकान hu = Jegyiroda id = Tempat penjualan karcis @@ -27094,6 +27136,7 @@ fa = فروشگاه fi = Lelukauppa fr = Magasin de jouets + he = חנות צעצועים hi = खिलौनों की दुकान hu = Játékbolt id = Toko mainan @@ -27132,6 +27175,7 @@ fa = اژانس مسافرتی fi = Matkatoimisto fr = Agence de voyages + he = סוכנות נסיעות hi = यात्रा एजेंसी hu = Utazási iroda id = Agen Perjalanan Wisata @@ -27170,6 +27214,7 @@ fa = فروشگاه fi = Rengasliike fr = Magasin de pneus + he = פנצ'ריה hi = पहियों की दुकान hu = Gumiszaküzlet id = Toko Ban @@ -27209,6 +27254,7 @@ fa = فروشگاه fi = Halpakauppa fr = Bazar + he = חנות חיסכון hi = छोटी वस्तुओं की सस्ती दूकान hu = Vegyeskereskedés id = Toko Kelontong @@ -27535,7 +27581,7 @@ fa = ﻥﺎﮐﺩﻮﮐ ﻩﺎﮕﺷﻭﺮﻓ fi = Lasten kauppa fr = Magasin de puériculture - he = םידליל תונח + he = חנות מוצרי תינוקות hi = बच्चों के सामान की दुकान hu = Bababolt id = Toko anak-anak @@ -28033,7 +28079,7 @@ fa = ﯽﮑﺷﺰﭘ ﻡﺯﺍﻮﻟ fi = Lääketieteellisiä tarvikkeita fr = Materiel médical - he = יאופר דויצ + he = חנות ציוד רפואי hi = चिकित्सा की आपूर्ति hu = Orvosi eszközök id = Suplai medis @@ -28075,7 +28121,7 @@ fa = ﯽﯾﺍﺬﻏ ﯼﺎﻫ ﻞﻤﮑﻣ fi = Ravintolisät fr = Suppléments nutritionnels - he = הנוזת יפסות + he = חנות תוספי תזונה hi = पोषण की खुराक hu = Táplálékkiegészítők id = Suplemen Nutrisi @@ -28116,7 +28162,7 @@ fa = ﺪﻨﮐ ﯽﻣ ﮓﻧﺭ fi = Maalit fr = Magasin de peinture - he = םיעבצ + he = חנות צבעים hi = पेंट की दुकान hu = Festékbolt id = Cat @@ -28157,7 +28203,7 @@ fa = ﯼﺯﺎﺳﺮﻄﻋ fi = Hajuvedet fr = Parfumerie - he = תמַשְׂבָּ + he = חנות בשמים hi = सुगंध सामग्री की दुकान hu = Illatszerbolt id = Wewangian @@ -28198,7 +28244,7 @@ fa = ﯽﻃﺎﯿﺧ ﻡﺯﺍﻮﻟ fi = Ompelutarvikkeet fr = Mercerie - he = הריפת דויצ + he = חנות לציוד תפירה hi = सिलाई आपूर्ति की दुकान hu = Varrókellékek boltja id = Perlengkapan Jahit @@ -28281,7 +28327,7 @@ fa = ﻮﮐﺎﺒﻨﺗ fi = Tupakka fr = Bureau de tabac - he = קבָּטַ + he = קבָּטַ hi = तंबाकू की दुकान hu = Dohánybolt id = Tembakau @@ -28364,7 +28410,7 @@ fa = ﺖﻋﺎﺳ fi = Kellot fr = Montres - he = םינועש + he = חנות שעונים hi = घड़ियाँ hu = Órabolt id = Jam tangan @@ -28573,6 +28619,7 @@ fa = ورزش fi = Yleisurheilu fr = Athlétisme + he = אתלטיקה hi = एथलेटिक्स hu = Atlétika id = Atletik @@ -28693,6 +28740,7 @@ fa = بسکتبال fi = Koripallo fr = Basket-ball + he = כדורסל hi = बास्केटबॉल hu = Kosárlabda id = Bola basket @@ -28921,7 +28969,7 @@ fa = ورزش های سوارکاری fi = Hevosurheilu fr = Sport hippique - he = רכיבה + he = רכיבת סוסים hu = Lovas sportok id = Olahraga Berkuda it = Equitazione @@ -29128,6 +29176,7 @@ fa = غواصی fi = Sukellus fr = Plongée sous-marine + he = אתר צלילה hu = Búvárkodás id = Selam scuba it = Immersioni in subacquea @@ -29499,7 +29548,7 @@ fa = بولینگ fi = Keilailu fr = Bowling - he = בָּאוּלִינְג + he = בָּאוּלִינְג hu = Bowling id = Boling it = Bowling @@ -29933,6 +29982,7 @@ fa = گردشگری fi = Taideteos fr = Œuvre + he = יצירת אומנות hi = कलाकृति hu = Szobor id = Pariwisata @@ -29971,6 +30021,7 @@ fa = گردشگری fi = Taideteos fr = Œuvre + he = יצירת אמנות אדריכלית hu = Műalkotás id = Pariwisata it = Opera d'arte @@ -30009,6 +30060,7 @@ fa = گردشگری fi = Taideteos fr = Œuvre + he = ציור hu = Műalkotás id = Pariwisata it = Dipinto @@ -30046,6 +30098,7 @@ fa = گردشگری fi = Taideteos fr = Œuvre + he = פסל אומנותי hu = Szobor id = Pariwisata it = Scultura @@ -30083,6 +30136,7 @@ fa = گردشگری fi = Taideteos fr = Œuvre + he = פסל hi = प्रतिमा hu = Szobor id = Pariwisata @@ -30120,6 +30174,7 @@ eu = Erakarpen turistikoa fa = گردشگری fi = Nähtävyys + he = אטרקציה תיירותית hi = पर्यटन स्थल hu = Látnivaló id = Atraksi @@ -30204,6 +30259,7 @@ fa = محل چادر زنی fi = Retkeily fr = Camping + he = אתר מחנאות hu = Kemping id = Perkemahan it = Campeggio @@ -30241,6 +30297,7 @@ eu = Karabana gunea fi = Asuntovaunupaikka fr = Aire de camping-car + he = חניון קרוואנים hi = कारवां स्थल hu = Karaván pihenő id = Lokasi perkemahan @@ -30324,6 +30381,7 @@ fa = گالری fi = Nähtävyydet fr = Galerie d'art + he = גלריה לאמנות hi = आर्ट गैलरी hu = Túrizmus id = Pemandangan @@ -30362,6 +30420,7 @@ fa = هتل fi = Majatalo fr = Maison d'hôtes + he = בית הארחה hi = अतिथि गृह hu = Vendégház id = Wisma tamu @@ -30398,6 +30457,7 @@ fa = هتل fi = Hostelli fr = Auberge de jeunesse + he = אכסניה hi = शयनागार it = Ostello ja = ホステル @@ -30428,6 +30488,7 @@ fa = هتل fi = Hotelli fr = Hôtel + he = מלון hi = होटल hu = Szálloda it = Hotel @@ -30548,7 +30609,7 @@ fa = تابلو راهنما fi = Tienviitta fr = Poteaux indicateurs - he = מנחה + he = מדריך hu = Útmutató id = Tongkat petunjuk jalan it = Guida -- 2.45.3 From 4cbf91433331c7e0d81a09e6e8051b45c39ab1b6 Mon Sep 17 00:00:00 2001 From: Alexander Borsuk Date: Tue, 20 Aug 2024 19:18:35 +0200 Subject: [PATCH 2/5] [strings] Regenerated Signed-off-by: Alexander Borsuk --- .../app/src/main/res/values-iw/strings.xml | 159 +++++++++---- .../he.lproj/Localizable.strings | 220 +++++++++--------- 2 files changed, 221 insertions(+), 158 deletions(-) diff --git a/android/app/src/main/res/values-iw/strings.xml b/android/app/src/main/res/values-iw/strings.xml index 6e9d27d59b..a944993704 100644 --- a/android/app/src/main/res/values-iw/strings.xml +++ b/android/app/src/main/res/values-iw/strings.xml @@ -993,7 +993,7 @@ רבק מְלָאכָה כוורן - נַפָּח + נַפָּח מבשלה קייטרינג נגר @@ -1120,20 +1120,20 @@ שביל סוסים - לְגַשֵׁר + לְגַשֵׁר שביל סוסים מִנהָרָה ידועיי סובוטוא שיבכ - לְגַשֵׁר + לְגַשֵׁר מִנהָרָה תחנת אוטובוס כביש בבניה שביל אופניים - לְגַשֵׁר + לְגַשֵׁר שביל אופניים מִנהָרָה @@ -1148,96 +1148,96 @@ מנהרה להולכי רגל רחוב מגורים - לְגַשֵׁר + לְגַשֵׁר מִנהָרָה כביש מהיר - לְגַשֵׁר + לְגַשֵׁר מִנהָרָה יציאה כביש מהיר - לְגַשֵׁר + לְגַשֵׁר מִנהָרָה - לְגַשֵׁר + לְגַשֵׁר מִנהָרָה מדרחוב מדרחוב - לְגַשֵׁר + לְגַשֵׁר מִנהָרָה כביש ראשי - לְגַשֵׁר + לְגַשֵׁר מִנהָרָה כביש ראשי - לְגַשֵׁר + לְגַשֵׁר מִנהָרָה מסלול מרוצים רחוב מגורים רחוב מגורים - לְגַשֵׁר + לְגַשֵׁר מִנהָרָה - לְגַשֵׁר + לְגַשֵׁר - לְגַשֵׁר + לְגַשֵׁר מִנהָרָה - לְגַשֵׁר + לְגַשֵׁר מִנהָרָה - לְגַשֵׁר + לְגַשֵׁר מִנהָרָה - לְגַשֵׁר + לְגַשֵׁר מִנהָרָה מצלמת מהירות מדרגות - לְגַשֵׁר + לְגַשֵׁר מִנהָרָה כביש שלישוני - לְגַשֵׁר + לְגַשֵׁר מִנהָרָה כביש שלישוני - לְגַשֵׁר + לְגַשֵׁר מִנהָרָה - לְגַשֵׁר + לְגַשֵׁר מִנהָרָה רמזור - לְגַשֵׁר + לְגַשֵׁר מִנהָרָה - לְגַשֵׁר + לְגַשֵׁר מִנהָרָה - לְגַשֵׁר + לְגַשֵׁר מִנהָרָה שביל אופניים @@ -1277,7 +1277,7 @@ אתר הנצחה צלב זיכרון לוחית זיכרון - פֶּסֶל + פֶּסֶל פסל אבן נגף אבן היסטורית @@ -1351,7 +1351,7 @@ צוּק סוֹלְלָה חוף - רבָּדמִ + מדבר גייזר קרחון ערבה @@ -1395,7 +1395,7 @@ ארץ נפה חווה חקלאית - כְּפָר קָטָן + כְּפָר קָטָן אי איון דירת מגורים מבודדת @@ -1420,7 +1420,7 @@ תחנת כוח הידרואלקטרית תחנת כוח סולארית תחנת כוח רוח - רַכֶּבֶל + רַכֶּבֶל רכבת מהירה רכבת תיירות מסילת רכבת @@ -1447,36 +1447,82 @@ מנהרת הרכבת מנהרת הרכבת מנהרת הרכבת - רַכֶּבֶל + רַכֶּבֶל ריהוט חדר רחצה חנות קנאביס + פנצ\'ריה + סוחר בקראוונים שטיחים + חנות שוקולדים + חנות בגדים + בית קפה + חנות מחשבים + חנות נוחות + חנות דפוס ושעתוק + חנות קוסמטיקה וילונות - תוינדעמ תונח + מעדניה + חנות כל-בו גדולה + חנות לשיפוץ הבית + ניקוי יבש + חנות מוצרי חשמל + חנות אירוטיקה + חנות בדים הווחל ןוזמ תונח אביזרי אופנה - חנות דלק + חנות פרחים + מנהלי הלוויות + חנות רהיטים + חנות גז + חנות מתנות + ירקן תלֶוֹכּמַ - ןיינב ירמוחל תונח - תואירב ןוזמ תונח + מספרה + חנות לחומרי בניין + חנות מזון בריאות חנות עשבי תיבול אודיו HiFi - תיב ילכל תונח - םיחבטמ תונח + חנות כלי בית + חנות תכשיטים + קיוסק + חנות מטבחים + מכבסה + קניון + מכון עיסוי + חנות מכשירי סלולר + הלוואות כספים + חנות אופנועים תיקון אופנועים + חנות תקליטים + חנות כלי נגינה + דוכן עיתונים + אופטיקה נקודת איסוף - הפאמ + מגדניה + משכנתאות + חנות בעלי חיים טיפוח חיות מחמד + חנות צילום חנות להשכרה חנות להשכרת אופניים + חנות דגים היינש די תונח חנות נעליים + חנות כלי כתיבה + סופרמרקט + מכון קעקועים + חנות תה + חנות כרטיסים + חנות צעצועים + סוכנות נסיעות + פנצ\'ריה + חנות חיסכון חנות חקלאית תוֹקיתִעַ חנות מוצרי חשמל תויונמוא תונח - םידליל תונח + חנות מוצרי תינוקות םיקית תונח חנות מיטות קיטוב @@ -1488,31 +1534,35 @@ גייד תונח םינפ יטושיק הלרגה יסיטרכ - יאופר דויצ - הנוזת יפסות - םיעבצ - תמַשְׂבָּ - הריפת דויצ + חנות ציוד רפואי + חנות תוספי תזונה + חנות צבעים + חנות בשמים + חנות לציוד תפירה ןוסחא תרכשה - קבָּטַ + קבָּטַ הקפסאב רחוס - םינועש + חנות שעונים תיאנוטיס תונח ספורט כדורגל אמריקאי קַשׁתוּת + אתלטיקה פוטבול אוסטרלי בייסבול + כדורסל כדורעף חופים כדורת דשא שחמט קריקט קרלינג - רכיבה + רכיבת סוסים גולף התעמלות כדוריד ענפי ספורט שונים + + אתר צלילה ירי ספורטיבי סקייטבורדינג סקי @@ -1521,8 +1571,8 @@ טניס שולחן טֶנִיס כדורעף - בָּאוּלִינְג - בָּאוּלִינְג + בָּאוּלִינְג + בָּאוּלִינְג לדאפ לסטופ חרק יקוה @@ -1534,12 +1584,25 @@ בקתת הרים דירת נופש + יצירת אומנות + יצירת אמנות אדריכלית + ציור + פסל אומנותי + פסל + אטרקציה תיירותית מתחם בעלי חיים + אטרקציה תיירותית + אתר מחנאות + חניון קרוואנים בית נופש + גלריה לאמנות + בית הארחה + אכסניה + מלון מידע לתייר לוח מידע - מנחה + מדריך מפת תיירות משרד תיירות מרכז מבקרים diff --git a/iphone/Maps/LocalizedStrings/he.lproj/Localizable.strings b/iphone/Maps/LocalizedStrings/he.lproj/Localizable.strings index 65f2b678b1..e9d6dbd741 100644 --- a/iphone/Maps/LocalizedStrings/he.lproj/Localizable.strings +++ b/iphone/Maps/LocalizedStrings/he.lproj/Localizable.strings @@ -1854,7 +1854,7 @@ "type.craft.beekeeper" = "כוורן"; -"type.craft.blacksmith" = "נַפָּח"; +"type.craft.blacksmith" = "נַפָּח"; "type.craft.brewery" = "מבשלה"; @@ -2121,7 +2121,7 @@ "type.highway.bridleway" = "שביל סוסים"; /* These translations are used for all type.highway.*.bridge. */ -"type.highway.bridleway.bridge" = "לְגַשֵׁר"; +"type.highway.bridleway.bridge" = "לְגַשֵׁר"; "type.highway.bridleway.permissive" = "שביל סוסים"; @@ -2131,7 +2131,7 @@ "type.highway.busway" = "ידועיי סובוטוא שיבכ"; /* These translations are used for all type.highway.*.bridge. */ -"type.highway.busway.bridge" = "לְגַשֵׁר"; +"type.highway.busway.bridge" = "לְגַשֵׁר"; /* These translations are used for all type.highway.*.tunnel. */ "type.highway.busway.tunnel" = "מִנהָרָה"; @@ -2143,7 +2143,7 @@ "type.highway.cycleway" = "שביל אופניים"; /* These translations are used for all type.highway.*.bridge. */ -"type.highway.cycleway.bridge" = "לְגַשֵׁר"; +"type.highway.cycleway.bridge" = "לְגַשֵׁר"; "type.highway.cycleway.permissive" = "שביל אופניים"; @@ -2171,7 +2171,7 @@ "type.highway.living_street" = "רחוב מגורים"; /* These translations are used for all type.highway.*.bridge. */ -"type.highway.living_street.bridge" = "לְגַשֵׁר"; +"type.highway.living_street.bridge" = "לְגַשֵׁר"; /* These translations are used for all type.highway.*.tunnel. */ "type.highway.living_street.tunnel" = "מִנהָרָה"; @@ -2179,7 +2179,7 @@ "type.highway.motorway" = "כביש מהיר"; /* These translations are used for all type.highway.*.bridge. */ -"type.highway.motorway.bridge" = "לְגַשֵׁר"; +"type.highway.motorway.bridge" = "לְגַשֵׁר"; /* These translations are used for all type.highway.*.tunnel. */ "type.highway.motorway.tunnel" = "מִנהָרָה"; @@ -2189,7 +2189,7 @@ "type.highway.motorway_link" = "כביש מהיר"; /* These translations are used for all type.highway.*.bridge. */ -"type.highway.motorway_link.bridge" = "לְגַשֵׁר"; +"type.highway.motorway_link.bridge" = "לְגַשֵׁר"; /* These translations are used for all type.highway.*.tunnel. */ "type.highway.motorway_link.tunnel" = "מִנהָרָה"; @@ -2207,7 +2207,7 @@ "type.highway.footway.bicycle" = "Path"; /* These translations are used for all type.highway.*.bridge. */ -"type.highway.path.bridge" = "לְגַשֵׁר"; +"type.highway.path.bridge" = "לְגַשֵׁר"; "type.highway.path.horse" = "Path"; @@ -2219,7 +2219,7 @@ "type.highway.pedestrian.area" = "מדרחוב"; /* These translations are used for all type.highway.*.bridge. */ -"type.highway.pedestrian.bridge" = "לְגַשֵׁר"; +"type.highway.pedestrian.bridge" = "לְגַשֵׁר"; /* These translations are used for all type.highway.*.tunnel. */ "type.highway.pedestrian.tunnel" = "מִנהָרָה"; @@ -2227,7 +2227,7 @@ "type.highway.primary" = "כביש ראשי"; /* These translations are used for all type.highway.*.bridge. */ -"type.highway.primary.bridge" = "לְגַשֵׁר"; +"type.highway.primary.bridge" = "לְגַשֵׁר"; /* These translations are used for all type.highway.*.tunnel. */ "type.highway.primary.tunnel" = "מִנהָרָה"; @@ -2235,7 +2235,7 @@ "type.highway.primary_link" = "כביש ראשי"; /* These translations are used for all type.highway.*.bridge. */ -"type.highway.primary_link.bridge" = "לְגַשֵׁר"; +"type.highway.primary_link.bridge" = "לְגַשֵׁר"; /* These translations are used for all type.highway.*.tunnel. */ "type.highway.primary_link.tunnel" = "מִנהָרָה"; @@ -2247,7 +2247,7 @@ "type.highway.residential.area" = "רחוב מגורים"; /* These translations are used for all type.highway.*.bridge. */ -"type.highway.residential.bridge" = "לְגַשֵׁר"; +"type.highway.residential.bridge" = "לְגַשֵׁר"; /* These translations are used for all type.highway.*.tunnel. */ "type.highway.residential.tunnel" = "מִנהָרָה"; @@ -2257,10 +2257,10 @@ "type.highway.road" = "Road"; /* These translations are used for all type.highway.*.bridge. */ -"type.highway.road.bridge" = "לְגַשֵׁר"; +"type.highway.road.bridge" = "לְגַשֵׁר"; /* A bridge structure outline. */ -"type.man_made.bridge" = "לְגַשֵׁר"; +"type.man_made.bridge" = "לְגַשֵׁר"; /* These translations are used for all type.highway.*.tunnel. */ "type.highway.road.tunnel" = "מִנהָרָה"; @@ -2268,7 +2268,7 @@ "type.highway.secondary" = "Secondary Road"; /* These translations are used for all type.highway.*.bridge. */ -"type.highway.secondary.bridge" = "לְגַשֵׁר"; +"type.highway.secondary.bridge" = "לְגַשֵׁר"; /* These translations are used for all type.highway.*.tunnel. */ "type.highway.secondary.tunnel" = "מִנהָרָה"; @@ -2276,7 +2276,7 @@ "type.highway.secondary_link" = "Secondary Road"; /* These translations are used for all type.highway.*.bridge. */ -"type.highway.secondary_link.bridge" = "לְגַשֵׁר"; +"type.highway.secondary_link.bridge" = "לְגַשֵׁר"; /* These translations are used for all type.highway.*.tunnel. */ "type.highway.secondary_link.tunnel" = "מִנהָרָה"; @@ -2286,7 +2286,7 @@ "type.highway.service.area" = "Service Road"; /* These translations are used for all type.highway.*.bridge. */ -"type.highway.service.bridge" = "לְגַשֵׁר"; +"type.highway.service.bridge" = "לְגַשֵׁר"; "type.highway.service.driveway" = "Service Road"; @@ -2302,7 +2302,7 @@ "type.highway.steps" = "מדרגות"; /* These translations are used for all type.highway.*.bridge. */ -"type.highway.steps.bridge" = "לְגַשֵׁר"; +"type.highway.steps.bridge" = "לְגַשֵׁר"; /* These translations are used for all type.highway.*.tunnel. */ "type.highway.steps.tunnel" = "מִנהָרָה"; @@ -2310,7 +2310,7 @@ "type.highway.tertiary" = "כביש שלישוני"; /* These translations are used for all type.highway.*.bridge. */ -"type.highway.tertiary.bridge" = "לְגַשֵׁר"; +"type.highway.tertiary.bridge" = "לְגַשֵׁר"; /* These translations are used for all type.highway.*.tunnel. */ "type.highway.tertiary.tunnel" = "מִנהָרָה"; @@ -2318,7 +2318,7 @@ "type.highway.tertiary_link" = "כביש שלישוני"; /* These translations are used for all type.highway.*.bridge. */ -"type.highway.tertiary_link.bridge" = "לְגַשֵׁר"; +"type.highway.tertiary_link.bridge" = "לְגַשֵׁר"; /* These translations are used for all type.highway.*.tunnel. */ "type.highway.tertiary_link.tunnel" = "מִנהָרָה"; @@ -2328,7 +2328,7 @@ "type.highway.track.area" = "Track"; /* These translations are used for all type.highway.*.bridge. */ -"type.highway.track.bridge" = "לְגַשֵׁר"; +"type.highway.track.bridge" = "לְגַשֵׁר"; "type.highway.track.grade1" = "Track"; @@ -2342,7 +2342,7 @@ "type.highway.trunk" = "Trunk Road"; /* These translations are used for all type.highway.*.bridge. */ -"type.highway.trunk.bridge" = "לְגַשֵׁר"; +"type.highway.trunk.bridge" = "לְגַשֵׁר"; /* These translations are used for all type.highway.*.tunnel. */ "type.highway.trunk.tunnel" = "מִנהָרָה"; @@ -2350,7 +2350,7 @@ "type.highway.trunk_link" = "Trunk Road"; /* These translations are used for all type.highway.*.bridge. */ -"type.highway.trunk_link.bridge" = "לְגַשֵׁר"; +"type.highway.trunk_link.bridge" = "לְגַשֵׁר"; /* These translations are used for all type.highway.*.tunnel. */ "type.highway.trunk_link.tunnel" = "מִנהָרָה"; @@ -2360,7 +2360,7 @@ "type.highway.unclassified.area" = "Minor Road"; /* These translations are used for all type.highway.*.bridge. */ -"type.highway.unclassified.bridge" = "לְגַשֵׁר"; +"type.highway.unclassified.bridge" = "לְגַשֵׁר"; /* These translations are used for all type.highway.*.tunnel. */ "type.highway.unclassified.tunnel" = "מִנהָרָה"; @@ -2454,7 +2454,7 @@ "type.historic.memorial.plaque" = "לוחית זיכרון"; -"type.historic.memorial.sculpture" = "פֶּסֶל"; +"type.historic.memorial.sculpture" = "פֶּסֶל"; "type.historic.memorial.statue" = "פסל"; @@ -2751,7 +2751,7 @@ "type.natural.coastline" = "חוף"; -"type.natural.desert" = "רבָּדמִ"; +"type.natural.desert" = "מדבר"; "type.natural.geyser" = "גייזר"; @@ -2861,7 +2861,7 @@ "type.place.farm" = "חווה חקלאית"; -"type.place.hamlet" = "כְּפָר קָטָן"; +"type.place.hamlet" = "כְּפָר קָטָן"; "type.place.island" = "אי"; @@ -2955,7 +2955,7 @@ "type.railway.disused" = "Disused Railway"; -"type.railway.funicular" = "רַכֶּבֶל"; +"type.railway.funicular" = "רַכֶּבֶל"; "type.railway.funicular.bridge" = "Funicular Bridge"; @@ -3044,7 +3044,7 @@ "type.railway.station" = "Train Station"; -"type.railway.station.funicular" = "רַכֶּבֶל"; +"type.railway.station.funicular" = "רַכֶּבֶל"; "type.railway.station.light_rail" = "Train Station"; @@ -3550,125 +3550,125 @@ "type.shop.car_repair" = "Car Repair Workshop"; -"type.shop.car_repair.tyres" = "Tyre Repair"; +"type.shop.car_repair.tyres" = "פנצ'ריה"; -"type.shop.caravan" = "RV Dealership"; +"type.shop.caravan" = "סוחר בקראוונים"; "type.shop.carpet" = "שטיחים"; "type.shop.chemist" = "Chemist"; -"type.shop.chocolate" = "Chocolate Shop"; +"type.shop.chocolate" = "חנות שוקולדים"; -"type.shop.clothes" = "Clothes Shop"; +"type.shop.clothes" = "חנות בגדים"; -"type.shop.coffee" = "Coffee Shop"; +"type.shop.coffee" = "בית קפה"; -"type.shop.computer" = "Computer Store"; +"type.shop.computer" = "חנות מחשבים"; "type.shop.confectionery" = "Candy Shop"; -"type.shop.convenience" = "Convenience Store"; +"type.shop.convenience" = "חנות נוחות"; -"type.shop.copyshop" = "Copyshop"; +"type.shop.copyshop" = "חנות דפוס ושעתוק"; -"type.shop.cosmetics" = "Cosmetics Shop"; +"type.shop.cosmetics" = "חנות קוסמטיקה"; "type.shop.curtain" = "וילונות"; -"type.shop.deli" = "תוינדעמ תונח"; +"type.shop.deli" = "מעדניה"; -"type.shop.department_store" = "Department Store"; +"type.shop.department_store" = "חנות כל-בו גדולה"; -"type.shop.doityourself" = "Home Improvement Store"; +"type.shop.doityourself" = "חנות לשיפוץ הבית"; -"type.shop.dry_cleaning" = "Dry Cleaner"; +"type.shop.dry_cleaning" = "ניקוי יבש"; -"type.shop.electronics" = "Electronics Shop"; +"type.shop.electronics" = "חנות מוצרי חשמל"; -"type.shop.erotic" = "Erotic Shop"; +"type.shop.erotic" = "חנות אירוטיקה"; -"type.shop.fabric" = "Fabric Shop"; +"type.shop.fabric" = "חנות בדים"; "type.shop.farm" = "הווחל ןוזמ תונח"; "type.shop.fashion_accessories" = "אביזרי אופנה"; -"type.shop.florist" = "Florist"; +"type.shop.florist" = "חנות פרחים"; -"type.shop.funeral_directors" = "Funeral Directors"; +"type.shop.funeral_directors" = "מנהלי הלוויות"; -"type.shop.furniture" = "Furniture Store"; +"type.shop.furniture" = "חנות רהיטים"; "type.shop.garden_centre" = "Garden Center"; -"type.shop.gas" = "חנות דלק"; +"type.shop.gas" = "חנות גז"; -"type.shop.gift" = "Gift Shop"; +"type.shop.gift" = "חנות מתנות"; -"type.shop.greengrocer" = "Greengrocer"; +"type.shop.greengrocer" = "ירקן"; "type.shop.grocery" = "תלֶוֹכּמַ"; -"type.shop.hairdresser" = "Hairdresser"; +"type.shop.hairdresser" = "מספרה"; -"type.shop.hardware" = "ןיינב ירמוחל תונח"; +"type.shop.hardware" = "חנות לחומרי בניין"; -"type.shop.health_food" = "תואירב ןוזמ תונח"; +"type.shop.health_food" = "חנות מזון בריאות"; "type.shop.herbalist" = "חנות עשבי תיבול"; "type.shop.hifi" = "אודיו HiFi"; -"type.shop.houseware" = "תיב ילכל תונח"; +"type.shop.houseware" = "חנות כלי בית"; -"type.shop.jewelry" = "Jewelry Store"; +"type.shop.jewelry" = "חנות תכשיטים"; -"type.shop.kiosk" = "Kiosk"; +"type.shop.kiosk" = "קיוסק"; -"type.shop.kitchen" = "םיחבטמ תונח"; +"type.shop.kitchen" = "חנות מטבחים"; -"type.shop.laundry" = "Laundry"; +"type.shop.laundry" = "מכבסה"; -"type.shop.mall" = "Mall"; +"type.shop.mall" = "קניון"; -"type.shop.massage" = "Massage Salon"; +"type.shop.massage" = "מכון עיסוי"; -"type.shop.mobile_phone" = "Cell Phone Store"; +"type.shop.mobile_phone" = "חנות מכשירי סלולר"; -"type.shop.money_lender" = "Money Lender"; +"type.shop.money_lender" = "הלוואות כספים"; -"type.shop.motorcycle" = "Motorcycle Shop"; +"type.shop.motorcycle" = "חנות אופנועים"; "type.shop.motorcycle_repair" = "תיקון אופנועים"; -"type.shop.music" = "Record Store"; +"type.shop.music" = "חנות תקליטים"; -"type.shop.musical_instrument" = "Musical Instrument Shop"; +"type.shop.musical_instrument" = "חנות כלי נגינה"; -"type.shop.newsagent" = "Newspaper Stand"; +"type.shop.newsagent" = "דוכן עיתונים"; -"type.shop.optician" = "Optician"; +"type.shop.optician" = "אופטיקה"; "type.shop.outdoor" = "Outdoor Equipment Shop"; "type.shop.outpost" = "נקודת איסוף"; -"type.shop.pastry" = "הפאמ"; +"type.shop.pastry" = "מגדניה"; -"type.shop.pawnbroker" = "Pawnbroker"; +"type.shop.pawnbroker" = "משכנתאות"; -"type.shop.pet" = "Pet Store"; +"type.shop.pet" = "חנות בעלי חיים"; "type.shop.pet_grooming" = "טיפוח חיות מחמד"; -"type.shop.photo" = "Photo Shop"; +"type.shop.photo" = "חנות צילום"; "type.shop.rental" = "חנות להשכרה"; "type.shop.rental.bicycle" = "חנות להשכרת אופניים"; -"type.shop.seafood" = "Fishmonger"; +"type.shop.seafood" = "חנות דגים"; "type.shop.second_hand" = "היינש די תונח"; @@ -3676,23 +3676,23 @@ "type.shop.sports" = "Sports Shop"; -"type.shop.stationery" = "Stationery Shop"; +"type.shop.stationery" = "חנות כלי כתיבה"; -"type.shop.supermarket" = "Supermarket"; +"type.shop.supermarket" = "סופרמרקט"; -"type.shop.tattoo" = "Tattoo Parlour"; +"type.shop.tattoo" = "מכון קעקועים"; -"type.shop.tea" = "Tea Shop"; +"type.shop.tea" = "חנות תה"; -"type.shop.ticket" = "Ticket Shop"; +"type.shop.ticket" = "חנות כרטיסים"; -"type.shop.toys" = "Toy Store"; +"type.shop.toys" = "חנות צעצועים"; -"type.shop.travel_agency" = "Travel Agency"; +"type.shop.travel_agency" = "סוכנות נסיעות"; -"type.shop.tyres" = "Tyre Shop"; +"type.shop.tyres" = "פנצ'ריה"; -"type.shop.variety_store" = "Variety Store"; +"type.shop.variety_store" = "חנות חיסכון"; "type.shop.video" = "Video Shop"; @@ -3709,7 +3709,7 @@ /* maybe change to Art Gallery for en-US when supported */ "type.shop.art" = "תויונמוא תונח"; -"type.shop.baby_goods" = "םידליל תונח"; +"type.shop.baby_goods" = "חנות מוצרי תינוקות"; "type.shop.bag" = "םיקית תונח"; @@ -3733,23 +3733,23 @@ "type.shop.lottery" = "הלרגה יסיטרכ"; -"type.shop.medical_supply" = "יאופר דויצ"; +"type.shop.medical_supply" = "חנות ציוד רפואי"; -"type.shop.nutrition_supplements" = "הנוזת יפסות"; +"type.shop.nutrition_supplements" = "חנות תוספי תזונה"; -"type.shop.paint" = "םיעבצ"; +"type.shop.paint" = "חנות צבעים"; -"type.shop.perfumery" = "תמַשְׂבָּ"; +"type.shop.perfumery" = "חנות בשמים"; -"type.shop.sewing" = "הריפת דויצ"; +"type.shop.sewing" = "חנות לציוד תפירה"; "type.shop.storage_rental" = "ןוסחא תרכשה"; -"type.shop.tobacco" = "קבָּטַ"; +"type.shop.tobacco" = "קבָּטַ"; "type.shop.trade" = "הקפסאב רחוס"; -"type.shop.watches" = "םינועש"; +"type.shop.watches" = "חנות שעונים"; "type.shop.wholesale" = "תיאנוטיס תונח"; @@ -3759,13 +3759,13 @@ "type.sport.archery" = "קַשׁתוּת"; -"type.sport.athletics" = "Athletics"; +"type.sport.athletics" = "אתלטיקה"; "type.sport.australian_football" = "פוטבול אוסטרלי"; "type.sport.baseball" = "בייסבול"; -"type.sport.basketball" = "Basketball"; +"type.sport.basketball" = "כדורסל"; "type.sport.beachvolleyball" = "כדורעף חופים"; @@ -3777,7 +3777,7 @@ "type.sport.curling" = "קרלינג"; -"type.sport.equestrian" = "רכיבה"; +"type.sport.equestrian" = "רכיבת סוסים"; "type.sport.golf" = "גולף"; @@ -3788,7 +3788,7 @@ "type.sport.multi" = "ענפי ספורט שונים"; /* Used to tag a scuba diving site. */ -"type.sport.scuba_diving" = "Scuba Diving Site"; +"type.sport.scuba_diving" = "אתר צלילה"; "type.sport.shooting" = "ירי ספורטיבי"; @@ -3806,9 +3806,9 @@ "type.sport.volleyball" = "כדורעף"; -"type.sport.10pin" = "בָּאוּלִינְג"; +"type.sport.10pin" = "בָּאוּלִינְג"; -"type.sport.9pin" = "בָּאוּלִינְג"; +"type.sport.9pin" = "בָּאוּלִינְג"; "type.sport.padel" = "לדאפ"; @@ -3831,42 +3831,42 @@ "type.tourism.apartment" = "דירת נופש"; -"type.tourism.artwork" = "Artwork"; +"type.tourism.artwork" = "יצירת אומנות"; -"type.tourism.artwork.architecture" = "Architectural Artwork"; +"type.tourism.artwork.architecture" = "יצירת אמנות אדריכלית"; -"type.tourism.artwork.painting" = "Painting"; +"type.tourism.artwork.painting" = "ציור"; -"type.tourism.artwork.sculpture" = "Sculpture"; +"type.tourism.artwork.sculpture" = "פסל אומנותי"; -"type.tourism.artwork.statue" = "Statue"; +"type.tourism.artwork.statue" = "פסל"; -"type.tourism.attraction" = "Attraction"; +"type.tourism.attraction" = "אטרקציה תיירותית"; "type.attraction.animal" = "מתחם בעלי חיים"; -"type.tourism.attraction.specified" = "Attraction"; +"type.tourism.attraction.specified" = "אטרקציה תיירותית"; -"type.tourism.camp_site" = "Campground"; +"type.tourism.camp_site" = "אתר מחנאות"; -"type.tourism.caravan_site" = "RV Park"; +"type.tourism.caravan_site" = "חניון קרוואנים"; /* A rentable countryside vacation house. */ "type.tourism.chalet" = "בית נופש"; -"type.tourism.gallery" = "Art Gallery"; +"type.tourism.gallery" = "גלריה לאמנות"; -"type.tourism.guest_house" = "Guest House"; +"type.tourism.guest_house" = "בית הארחה"; -"type.tourism.hostel" = "Hostel"; +"type.tourism.hostel" = "אכסניה"; -"type.tourism.hotel" = "Hotel"; +"type.tourism.hotel" = "מלון"; "type.tourism.information" = "מידע לתייר"; "type.tourism.information.board" = "לוח מידע"; -"type.tourism.information.guidepost" = "מנחה"; +"type.tourism.information.guidepost" = "מדריך"; "type.tourism.information.map" = "מפת תיירות"; -- 2.45.3 From 25537e33a95cad787074c5c2333edaeaf8848cd6 Mon Sep 17 00:00:00 2001 From: "S. Kozyr" Date: Wed, 21 Aug 2024 16:29:42 +0300 Subject: [PATCH 3/5] [Android] Implemented OAuth2 flow with browser Signed-off-by: S. Kozyr --- .../main/cpp/app/organicmaps/Framework.cpp | 7 +++ .../cpp/app/organicmaps/editor/OsmOAuth.cpp | 28 +++++++++ .../main/java/app/organicmaps/Framework.java | 1 + .../java/app/organicmaps/api/RequestType.java | 3 +- .../organicmaps/editor/OsmLoginActivity.java | 17 ++++++ .../organicmaps/editor/OsmLoginFragment.java | 61 ++++++++++++++++++- .../java/app/organicmaps/editor/OsmOAuth.java | 15 +++++ .../organicmaps/editor/ProfileActivity.java | 2 + .../organicmaps/editor/ProfileFragment.java | 2 +- .../java/app/organicmaps/intent/Factory.java | 11 ++++ .../main/res/layout/fragment_osm_login.xml | 2 + editor/osm_auth.cpp | 21 ++++--- editor/osm_auth.hpp | 9 ++- .../CoreApi/CoreApi/DeepLink/DeepLinkParser.h | 1 + .../CoreApi/DeepLink/DeepLinkParser.mm | 1 + .../Maps/Core/DeepLink/DeepLinkHandler.swift | 4 ++ map/framework.cpp | 5 ++ map/framework.hpp | 1 + map/map_tests/mwm_url_tests.cpp | 17 ++++++ map/mwm_url.cpp | 18 ++++++ map/mwm_url.hpp | 8 +++ 21 files changed, 221 insertions(+), 13 deletions(-) diff --git a/android/app/src/main/cpp/app/organicmaps/Framework.cpp b/android/app/src/main/cpp/app/organicmaps/Framework.cpp index 51f3bdaa6b..d29a67a69e 100644 --- a/android/app/src/main/cpp/app/organicmaps/Framework.cpp +++ b/android/app/src/main/cpp/app/organicmaps/Framework.cpp @@ -861,6 +861,13 @@ Java_app_organicmaps_Framework_nativeGetParsedAppName(JNIEnv * env, jclass) return (appName.empty()) ? nullptr : jni::ToJavaString(env, appName); } +JNIEXPORT jstring JNICALL +Java_app_organicmaps_Framework_nativeGetParsedOAuth2Code(JNIEnv * env, jclass) +{ + std::string const & code = frm()->GetParsedOAuth2Code(); + return jni::ToJavaString(env, code); +} + JNIEXPORT jstring JNICALL Java_app_organicmaps_Framework_nativeGetParsedBackUrl(JNIEnv * env, jclass) { diff --git a/android/app/src/main/cpp/app/organicmaps/editor/OsmOAuth.cpp b/android/app/src/main/cpp/app/organicmaps/editor/OsmOAuth.cpp index 90d320ef65..fc18cf19f8 100644 --- a/android/app/src/main/cpp/app/organicmaps/editor/OsmOAuth.cpp +++ b/android/app/src/main/cpp/app/organicmaps/editor/OsmOAuth.cpp @@ -34,6 +34,13 @@ bool LoadOsmUserPreferences(std::string const & oauthToken, UserPreferences & ou extern "C" { +JNIEXPORT jstring JNICALL +Java_app_organicmaps_editor_OsmOAuth_nativeGetOAuth2Url(JNIEnv * env, jclass) +{ + auto const auth = OsmOAuth::ServerAuth(); + return ToJavaString(env, auth.BuildOAuth2Url()); +} + JNIEXPORT jstring JNICALL Java_app_organicmaps_editor_OsmOAuth_nativeAuthWithPassword(JNIEnv * env, jclass clazz, jstring login, jstring password) @@ -52,6 +59,27 @@ Java_app_organicmaps_editor_OsmOAuth_nativeAuthWithPassword(JNIEnv * env, jclass return nullptr; } +JNIEXPORT jstring JNICALL +Java_app_organicmaps_editor_OsmOAuth_nativeAuthWithOAuth2Code(JNIEnv * env, jclass, jstring oauth2code) +{ + OsmOAuth auth = OsmOAuth::ServerAuth(); + try + { + auto token = auth.FinishAuthorization(ToNativeString(env, oauth2code)); + if (!token.empty()) + { + auth.SetAuthToken(token); + return ToJavaString(env, token); + } + LOG(LWARNING, ("nativeAuthWithOAuth2Code: invalid OAuth2 code", oauth2code)); + } + catch (std::exception const & ex) + { + LOG(LWARNING, ("nativeAuthWithOAuth2Code error ", ex.what())); + } + return nullptr; +} + JNIEXPORT jstring JNICALL Java_app_organicmaps_editor_OsmOAuth_nativeGetOsmUsername(JNIEnv * env, jclass, jstring oauthToken) { diff --git a/android/app/src/main/java/app/organicmaps/Framework.java b/android/app/src/main/java/app/organicmaps/Framework.java index ebc4a3a80a..b99bcaf85c 100644 --- a/android/app/src/main/java/app/organicmaps/Framework.java +++ b/android/app/src/main/java/app/organicmaps/Framework.java @@ -239,6 +239,7 @@ public class Framework public static native ParsedRoutingData nativeGetParsedRoutingData(); public static native ParsedSearchRequest nativeGetParsedSearchRequest(); public static native @Nullable String nativeGetParsedAppName(); + public static native @Nullable String nativeGetParsedOAuth2Code(); @Nullable @Size(2) public static native double[] nativeGetParsedCenterLatLon(); public static native @Nullable String nativeGetParsedBackUrl(); diff --git a/android/app/src/main/java/app/organicmaps/api/RequestType.java b/android/app/src/main/java/app/organicmaps/api/RequestType.java index e90743a5bb..0634d305cf 100644 --- a/android/app/src/main/java/app/organicmaps/api/RequestType.java +++ b/android/app/src/main/java/app/organicmaps/api/RequestType.java @@ -6,7 +6,7 @@ import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; @Retention(RetentionPolicy.SOURCE) -@IntDef({RequestType.INCORRECT, RequestType.MAP, RequestType.ROUTE, RequestType.SEARCH, RequestType.CROSSHAIR}) +@IntDef({RequestType.INCORRECT, RequestType.MAP, RequestType.ROUTE, RequestType.SEARCH, RequestType.CROSSHAIR, RequestType.OAUTH2}) public @interface RequestType { // Represents url_scheme::ParsedMapApi::UrlType from c++ part. @@ -15,4 +15,5 @@ public @interface RequestType public static final int ROUTE = 2; public static final int SEARCH = 3; public static final int CROSSHAIR = 4; + public static final int OAUTH2 = 5; } diff --git a/android/app/src/main/java/app/organicmaps/editor/OsmLoginActivity.java b/android/app/src/main/java/app/organicmaps/editor/OsmLoginActivity.java index 35894517bf..0e15133d16 100644 --- a/android/app/src/main/java/app/organicmaps/editor/OsmLoginActivity.java +++ b/android/app/src/main/java/app/organicmaps/editor/OsmLoginActivity.java @@ -1,14 +1,31 @@ package app.organicmaps.editor; +import android.app.Activity; +import android.content.Intent; +import android.os.Bundle; + +import androidx.annotation.NonNull; import androidx.fragment.app.Fragment; import app.organicmaps.base.BaseMwmFragmentActivity; public class OsmLoginActivity extends BaseMwmFragmentActivity { + public static final String EXTRA_OAUTH2CODE = "oauth2code"; + @Override protected Class getFragmentClass() { return OsmLoginFragment.class; } + + public static void OAuth2Callback(@NonNull Activity activity, String oauth2code) + { + final Intent i = new Intent(activity, OsmLoginActivity.class); + Bundle args = new Bundle(); + args.putString(EXTRA_OAUTH2CODE, oauth2code); + args.putBoolean(ProfileActivity.EXTRA_REDIRECT_TO_PROFILE, true); + i.putExtras(args); + activity.startActivity(i); + } } diff --git a/android/app/src/main/java/app/organicmaps/editor/OsmLoginFragment.java b/android/app/src/main/java/app/organicmaps/editor/OsmLoginFragment.java index 4e33db9e22..9e351f27a6 100644 --- a/android/app/src/main/java/app/organicmaps/editor/OsmLoginFragment.java +++ b/android/app/src/main/java/app/organicmaps/editor/OsmLoginFragment.java @@ -1,6 +1,7 @@ package app.organicmaps.editor; import android.content.Intent; +import android.net.Uri; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; @@ -12,6 +13,7 @@ import android.widget.TextView; import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import app.organicmaps.BuildConfig; import app.organicmaps.Framework; import app.organicmaps.R; import app.organicmaps.base.BaseMwmToolbarFragment; @@ -33,6 +35,8 @@ public class OsmLoginFragment extends BaseMwmToolbarFragment private TextInputEditText mLoginInput; private TextInputEditText mPasswordInput; + private String mArgOAuth2Code; + @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) @@ -48,15 +52,41 @@ public class OsmLoginFragment extends BaseMwmToolbarFragment mLoginInput = view.findViewById(R.id.osm_username); mPasswordInput = view.findViewById(R.id.osm_password); mLoginButton = view.findViewById(R.id.login); - mLoginButton.setOnClickListener((v) -> login()); mLostPasswordButton = view.findViewById(R.id.lost_password); - mLostPasswordButton.setOnClickListener((v) -> Utils.openUrl(requireActivity(), Constants.Url.OSM_RECOVER_PASSWORD)); Button registerButton = view.findViewById(R.id.register); registerButton.setOnClickListener((v) -> Utils.openUrl(requireActivity(), Constants.Url.OSM_REGISTER)); mProgress = view.findViewById(R.id.osm_login_progress); final String dataVersion = DateUtils.getShortDateFormatter().format(Framework.getDataVersion()); ((TextView) view.findViewById(R.id.osm_presentation)) .setText(getString(R.string.osm_presentation, dataVersion)); + + if (BuildConfig.FLAVOR.equals("google")) + { + // Hide login and password inputs and Forgot password button + UiUtils.hide(view.findViewById(R.id.osm_username_container), + view.findViewById(R.id.osm_password_container), + mLostPasswordButton); + + mLoginButton.setOnClickListener((v) -> loginWithBrowser()); + } + else + { + mLoginButton.setOnClickListener((v) -> login()); + mLostPasswordButton.setOnClickListener((v) -> Utils.openUrl(requireActivity(), Constants.Url.OSM_RECOVER_PASSWORD)); + } + + readArguments(); + if (mArgOAuth2Code != null && !mArgOAuth2Code.isEmpty()) + continueOAuth2Flow(mArgOAuth2Code); + } + + private void readArguments() + { + final Bundle arguments = getArguments(); + if (arguments == null) + return; + + mArgOAuth2Code = arguments.getString(OsmLoginActivity.EXTRA_OAUTH2CODE); } private void login() @@ -75,6 +105,12 @@ public class OsmLoginFragment extends BaseMwmToolbarFragment }); } + private void loginWithBrowser() + { + Utils.openUri(requireContext(), Uri.parse(OsmOAuth.nativeGetOAuth2Url())); + } + + private void enableInput(boolean enable) { mPasswordInput.setEnabled(enable); @@ -113,4 +149,25 @@ public class OsmLoginFragment extends BaseMwmToolbarFragment startActivity(new Intent(requireContext(), ProfileActivity.class)); requireActivity().finish(); } + + // This method is called by MwmActivity & UrlProcessor when "om://oauth2/osm/callback?code=XXX" is handled + private void continueOAuth2Flow(String oauth2code) + { + if (!isAdded()) + return; + + if (oauth2code == null || oauth2code.isEmpty()) + onAuthFail(); + else + { + ThreadPool.getWorker().execute(() -> { + // Finish OAuth2 auth flow and get username for UI. + final String oauthToken = OsmOAuth.nativeAuthWithOAuth2Code(oauth2code); + final String username = (oauthToken == null) ? null : OsmOAuth.nativeGetOsmUsername(oauthToken); + UiThread.run(() -> { + processAuth(oauthToken, username); + }); + }); + } + } } diff --git a/android/app/src/main/java/app/organicmaps/editor/OsmOAuth.java b/android/app/src/main/java/app/organicmaps/editor/OsmOAuth.java index d5d7dc8450..a8afa2f3b6 100644 --- a/android/app/src/main/java/app/organicmaps/editor/OsmOAuth.java +++ b/android/app/src/main/java/app/organicmaps/editor/OsmOAuth.java @@ -10,6 +10,8 @@ import androidx.annotation.Size; import androidx.annotation.WorkerThread; import androidx.fragment.app.FragmentManager; +import java.util.Map; + import app.organicmaps.MwmApplication; import app.organicmaps.util.NetworkPolicy; @@ -98,6 +100,12 @@ public final class OsmOAuth return nativeGetHistoryUrl(getUsername(context)); } + /* + Returns 5 strings: ServerURL, ClientId, ClientSecret, Scope, RedirectUri + */ + @NonNull + public static native String nativeGetOAuth2Url(); + /** * @return string with OAuth2 token */ @@ -106,6 +114,13 @@ public final class OsmOAuth @Nullable public static native String nativeAuthWithPassword(String login, String password); + /** + * @return string with OAuth2 token + */ + @WorkerThread + @Nullable + public static native String nativeAuthWithOAuth2Code(String oauth2code); + @WorkerThread @Nullable public static native String nativeGetOsmUsername(String oauthToken); diff --git a/android/app/src/main/java/app/organicmaps/editor/ProfileActivity.java b/android/app/src/main/java/app/organicmaps/editor/ProfileActivity.java index eb5a6076c3..625b54ef3a 100644 --- a/android/app/src/main/java/app/organicmaps/editor/ProfileActivity.java +++ b/android/app/src/main/java/app/organicmaps/editor/ProfileActivity.java @@ -6,6 +6,8 @@ import app.organicmaps.base.BaseMwmFragmentActivity; public class ProfileActivity extends BaseMwmFragmentActivity { + public static final String EXTRA_REDIRECT_TO_PROFILE = "redirectToProfile"; + @Override protected Class getFragmentClass() { diff --git a/android/app/src/main/java/app/organicmaps/editor/ProfileFragment.java b/android/app/src/main/java/app/organicmaps/editor/ProfileFragment.java index 95ff55c045..4f48fc11b0 100644 --- a/android/app/src/main/java/app/organicmaps/editor/ProfileFragment.java +++ b/android/app/src/main/java/app/organicmaps/editor/ProfileFragment.java @@ -93,7 +93,7 @@ public class ProfileFragment extends BaseMwmToolbarFragment else { Intent intent = new Intent(requireContext(), OsmLoginActivity.class); - intent.putExtra("redirectToProfile", true); + intent.putExtra(ProfileActivity.EXTRA_REDIRECT_TO_PROFILE, true); startActivity(intent); requireActivity().finish(); } diff --git a/android/app/src/main/java/app/organicmaps/intent/Factory.java b/android/app/src/main/java/app/organicmaps/intent/Factory.java index 2ddf4a28c6..c58a84e09e 100644 --- a/android/app/src/main/java/app/organicmaps/intent/Factory.java +++ b/android/app/src/main/java/app/organicmaps/intent/Factory.java @@ -3,6 +3,7 @@ package app.organicmaps.intent; import android.content.ContentResolver; import android.content.Intent; import android.net.Uri; +import android.util.Log; import androidx.annotation.NonNull; import androidx.core.content.IntentCompat; @@ -18,6 +19,7 @@ import app.organicmaps.api.RoutePoint; import app.organicmaps.bookmarks.data.BookmarkManager; import app.organicmaps.bookmarks.data.FeatureId; import app.organicmaps.bookmarks.data.MapObject; +import app.organicmaps.editor.OsmLoginActivity; import app.organicmaps.routing.RoutingController; import app.organicmaps.search.SearchActivity; import app.organicmaps.search.SearchEngine; @@ -128,6 +130,15 @@ public class Factory Framework.nativeSetViewportCenter(latlon[0], latlon[1], SEARCH_IN_VIEWPORT_ZOOM); } + return true; + } + case RequestType.OAUTH2: + { + SearchEngine.INSTANCE.cancelInteractiveSearch(); + + final String oauth2code = Framework.nativeGetParsedOAuth2Code(); + OsmLoginActivity.OAuth2Callback(target, oauth2code); + return true; } } diff --git a/android/app/src/main/res/layout/fragment_osm_login.xml b/android/app/src/main/res/layout/fragment_osm_login.xml index 3868214a12..975202f99c 100644 --- a/android/app/src/main/res/layout/fragment_osm_login.xml +++ b/android/app/src/main/res/layout/fragment_osm_login.xml @@ -61,6 +61,7 @@ android:textAppearance="@style/MwmTextAppearance.Body2" android:textColor="?android:textColorPrimary" /> Date: Wed, 21 Aug 2024 17:43:06 +0300 Subject: [PATCH 4/5] [Android] Small improvements Signed-off-by: S. Kozyr --- .../organicmaps/editor/OsmLoginFragment.java | 21 +++++++++---------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/android/app/src/main/java/app/organicmaps/editor/OsmLoginFragment.java b/android/app/src/main/java/app/organicmaps/editor/OsmLoginFragment.java index 9e351f27a6..150034721a 100644 --- a/android/app/src/main/java/app/organicmaps/editor/OsmLoginFragment.java +++ b/android/app/src/main/java/app/organicmaps/editor/OsmLoginFragment.java @@ -35,8 +35,6 @@ public class OsmLoginFragment extends BaseMwmToolbarFragment private TextInputEditText mLoginInput; private TextInputEditText mPasswordInput; - private String mArgOAuth2Code; - @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) @@ -75,18 +73,18 @@ public class OsmLoginFragment extends BaseMwmToolbarFragment mLostPasswordButton.setOnClickListener((v) -> Utils.openUrl(requireActivity(), Constants.Url.OSM_RECOVER_PASSWORD)); } - readArguments(); - if (mArgOAuth2Code != null && !mArgOAuth2Code.isEmpty()) - continueOAuth2Flow(mArgOAuth2Code); + String code = readOAuth2CodeFromArguments(); + if (code != null && !code.isEmpty()) + continueOAuth2Flow(code); } - private void readArguments() + private String readOAuth2CodeFromArguments() { final Bundle arguments = getArguments(); if (arguments == null) - return; + return null; - mArgOAuth2Code = arguments.getString(OsmLoginActivity.EXTRA_OAUTH2CODE); + return arguments.getString(OsmLoginActivity.EXTRA_OAUTH2CODE); } private void login() @@ -110,7 +108,6 @@ public class OsmLoginFragment extends BaseMwmToolbarFragment Utils.openUri(requireContext(), Uri.parse(OsmOAuth.nativeGetOAuth2Url())); } - private void enableInput(boolean enable) { mPasswordInput.setEnabled(enable); @@ -160,11 +157,13 @@ public class OsmLoginFragment extends BaseMwmToolbarFragment onAuthFail(); else { - ThreadPool.getWorker().execute(() -> { + ThreadPool.getWorker().execute(() -> + { // Finish OAuth2 auth flow and get username for UI. final String oauthToken = OsmOAuth.nativeAuthWithOAuth2Code(oauth2code); final String username = (oauthToken == null) ? null : OsmOAuth.nativeGetOsmUsername(oauthToken); - UiThread.run(() -> { + UiThread.run(() -> + { processAuth(oauthToken, username); }); }); -- 2.45.3 From ab2dd5eac70458a97dfebe5c0e60a57c97bfd0b5 Mon Sep 17 00:00:00 2001 From: "S. Kozyr" Date: Wed, 21 Aug 2024 17:47:32 +0300 Subject: [PATCH 5/5] Small changes according to PR comments. Signed-off-by: S. Kozyr --- editor/osm_auth.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/editor/osm_auth.cpp b/editor/osm_auth.cpp index 48c4808a00..571ec5ec87 100644 --- a/editor/osm_auth.cpp +++ b/editor/osm_auth.cpp @@ -275,8 +275,9 @@ string OsmOAuth::FetchRequestToken(SessionID const & sid) const string OsmOAuth::BuildOAuth2Url() const { - string requestTokenUrl = m_baseUrl + "/oauth2/authorize"; - string const requestTokenQuery = BuildPostRequest({ + auto requestTokenUrl = m_baseUrl + "/oauth2/authorize"; + auto const requestTokenQuery = BuildPostRequest( + { {"client_id", m_oauth2params.m_clientId}, {"redirect_uri", m_oauth2params.m_redirectUri}, {"scope", m_oauth2params.m_scope}, -- 2.45.3