From 3b56cb449d8b00c4469c7301d3f7100257dbe0e0 Mon Sep 17 00:00:00 2001 From: Victor Shcherb Date: Mon, 8 Jun 2020 18:55:44 +0200 Subject: [PATCH 01/14] Add some comments --- .../src/main/java/net/osmand/Reshaper.java | 29 +++++++++++++------ 1 file changed, 20 insertions(+), 9 deletions(-) diff --git a/OsmAnd-java/src/main/java/net/osmand/Reshaper.java b/OsmAnd-java/src/main/java/net/osmand/Reshaper.java index 6efd414062..baba66d549 100644 --- a/OsmAnd-java/src/main/java/net/osmand/Reshaper.java +++ b/OsmAnd-java/src/main/java/net/osmand/Reshaper.java @@ -24,7 +24,8 @@ public class Reshaper { // return s; // } try { - ArabicShaping as = new ArabicShaping(ArabicShaping.LETTERS_SHAPE | ArabicShaping.LENGTH_GROW_SHRINK); + ArabicShaping as = new ArabicShaping(ArabicShaping.LETTERS_SHAPE | ArabicShaping.LENGTH_GROW_SHRINK + ); try { s = as.shape(s); } catch (ArabicShapingException e) { @@ -86,20 +87,30 @@ public class Reshaper { public static void main(String[] args) { // char[] c = new char[] {'א', 'ד','ם', ' ', '1', '2'} ; // String reshape = "אדם"; - char[] c = new char[] {'א', 'ד','ם'} ; - String reshape = reshape(new String(c)); - for(int i=0; i < reshape.length(); i++) { - System.out.println(reshape.charAt(i)); - } +// char[] c = new char[] {'א', 'ד','ם'} ; +// String reshape = reshape(new String(c)); +// for (int i = 0; i < reshape.length(); i++) { +// System.out.println(reshape.charAt(i)); +// } test2(); +// test3(); + } + + private static void test3() { + String s = "מרכז מסחרי/השלום (40050)"; + String reshape = reshape(s); + String expected = "(40050) םולשה/ירחסמ זכרמ"; + if (!reshape.equals(expected)) { + throw new IllegalArgumentException(String.format("Bug: expected '%s', reshaped '%s'", expected, reshape)); + } } private static void test2() { String s = "گچ پژ نمکی باللغة العربي"; String reshape = reshape(s); - - if (!reshape.equals("ﻲﺑﺮﻌﻟﺍ ﺔﻐﻠﻟﺎﺑ ﯽﮑﻤﻧ ﮋﭘ ﭻﮔ")) { - throw new IllegalArgumentException("BUG!!!"); + String expected = "ﻲﺑﺮﻌﻟﺍ ﺔﻐﻠﻟﺎﺑ ﯽﮑﻤﻧ ﮋﭘ ﭻﮔ"; + if (!reshape.equals(expected)) { + throw new IllegalArgumentException(String.format("Bug: expected '%s', reshaped '%s'", expected, reshape)); } } From 32bf8e7c35a2cb068a912d41c8de2f14dea9a637 Mon Sep 17 00:00:00 2001 From: Victor Shcherb Date: Mon, 8 Jun 2020 22:30:16 +0200 Subject: [PATCH 02/14] Fix https://github.com/osmandapp/Osmand/issues/6698 --- .../src/main/java/net/osmand/Reshaper.java | 118 ++++++++++++------ 1 file changed, 80 insertions(+), 38 deletions(-) diff --git a/OsmAnd-java/src/main/java/net/osmand/Reshaper.java b/OsmAnd-java/src/main/java/net/osmand/Reshaper.java index baba66d549..c6af6ada3a 100644 --- a/OsmAnd-java/src/main/java/net/osmand/Reshaper.java +++ b/OsmAnd-java/src/main/java/net/osmand/Reshaper.java @@ -1,6 +1,7 @@ package net.osmand; import java.io.UnsupportedEncodingException; +import java.util.Arrays; import org.apache.commons.logging.Log; @@ -20,61 +21,62 @@ public class Reshaper { } } public static String reshape(String s) { -// if(true) { -// return s; -// } try { - ArabicShaping as = new ArabicShaping(ArabicShaping.LETTERS_SHAPE | ArabicShaping.LENGTH_GROW_SHRINK - ); + ArabicShaping as = new ArabicShaping(ArabicShaping.LETTERS_SHAPE |ArabicShaping.LENGTH_GROW_SHRINK); try { s = as.shape(s); } catch (ArabicShapingException e) { LOG.error(e.getMessage(), e); } Bidi line = new Bidi(s.length(), s.length()); - line.setPara(s, Bidi.LEVEL_DEFAULT_LTR, null); + line.setPara(s, Bidi.LEVEL_DEFAULT_LTR, null); +// line.setPara(s, Bidi.LEVEL_DEFAULT_LTR, null); +// s = line.writeReordered(Bidi.DO_MIRRORING); +// s = reordered; byte direction = line.getDirection(); if (direction != Bidi.MIXED) { // unidirectional - if(line.isLeftToRight()) { - return s; - } else { + if (line.isLeftToRight()) { + return s; + } else { char[] chs = new char[s.length()]; for(int i = 0; i< chs.length ; i++) { - chs[i] = s.charAt(chs.length - i - 1); +// chs[i] = s.charAt(chs.length - i - 1); + chs[i] = mirror(s.charAt(chs.length - i - 1)); } return new String(chs); } } else { - // // mixed-directional + // mixed-directional +// System.out.println(s); +// printSplit("Split", s); int count = line.countRuns(); - // if (styleRunCount <= 1) { - // int style = styleRuns[0].style; - // // iterate over directional runs - // for (i = 0; i < count; ++i) { - // run = line.getVisualRun(i); - // renderRun(text, run.getStart(), run.getLimit(), - // run.getDirection(), style); - // } - // } StringBuilder res = new StringBuilder(); // iterate over both directional and style runs for (int i = 0; i < count; ++i) { + StringBuilder runs = new StringBuilder(); BidiRun run = line.getVisualRun(i); - - int st = run.getStart(); - int e = run.getLimit(); - int j = run.getDirection() == Bidi.LTR ? st : e - 1; - int l = run.getDirection() == Bidi.LTR ? e : st - 1; - boolean plus = run.getDirection() == Bidi.LTR; - while (j != l) { - res.append(s.charAt(j)); - if (plus) { - j++; - } else { - j--; + boolean ltr = run.getDirection() == Bidi.LTR; + int start = run.getStart(); + int limit = run.getLimit(); + int begin = ltr ? start : limit - 1; + int end = ltr ? limit : start - 1; + int ind = begin; + while (ind != end) { + char ch = s.charAt(ind); + if (!ltr) { + ch = mirror(ch); } + res.append(ch); + runs.append(ch); + if (ltr) { + ind++; + } else { + ind--; + } + } + printSplit(run.getDirection() + " " + run.getEmbeddingLevel(), runs.toString()); } return res.toString(); } @@ -84,6 +86,15 @@ public class Reshaper { } } + private static char mirror(char ch) { + switch (ch) { + case '(': ch = ')'; break; + case ')': ch = '('; break; + case '[': ch = ']'; break; + case ']': ch = '['; break; + } + return ch; + } public static void main(String[] args) { // char[] c = new char[] {'א', 'ד','ם', ' ', '1', '2'} ; // String reshape = "אדם"; @@ -93,25 +104,56 @@ public class Reshaper { // System.out.println(reshape.charAt(i)); // } test2(); -// test3(); + test3(); + test4(); + test5(); } private static void test3() { String s = "מרכז מסחרי/השלום (40050)"; String reshape = reshape(s); String expected = "(40050) םולשה/ירחסמ זכרמ"; + check(s, reshape, expected); + } + + private static void test5() { + String s = "מרכז מסחרי/השלום (מרז)"; + String reshape = reshape(s); + String expected = "(זרמ) םולשה/ירחסמ זכרמ"; + check(s, reshape, expected); + } + private static void check(String source, String reshape, String expected) { + printSplit("Source ", source); + printSplit("Expected", expected); + printSplit("Reshaped", reshape); + System.out.println(reshape); if (!reshape.equals(expected)) { throw new IllegalArgumentException(String.format("Bug: expected '%s', reshaped '%s'", expected, reshape)); } } + private static void printSplit(String p, String source) { + System.out.print(p); + System.out.print(": \u2066"); + for(int i = 0; i < source.length(); i++) { + System.out.print(source.charAt(i)); + System.out.print(" \u200e"); + } +// System.out.println(Arrays.toString(source.toCharArray())); + System.out.println(); + System.out.flush(); + } private static void test2() { String s = "گچ پژ نمکی باللغة العربي"; String reshape = reshape(s); - String expected = "ﻲﺑﺮﻌﻟﺍ ﺔﻐﻠﻟﺎﺑ ﯽﮑﻤﻧ ﮋﭘ ﭻﮔ"; - if (!reshape.equals(expected)) { - throw new IllegalArgumentException(String.format("Bug: expected '%s', reshaped '%s'", expected, reshape)); - } + String expected1 = "ﻲﺑﺮﻌﻟﺍ ﺔﻐﻠﻟﺎﺑ ﯽﮑﻤﻧ ﮋﭘ ﭻﮔ"; + String expected2 = "ﻲﺑﺮﻌﻟﺍ ﺔﻐﻠﻟﺎﺑ یکﻤﻧ ژپ چگ"; + check(s, reshape, expected1); + } + + private static void test4() { + String s = "Abc (123)"; + check(s, reshape(s), s); } -} +} \ No newline at end of file From 09dc047f6a072127ce21b91e20c8f6ab57cfffd0 Mon Sep 17 00:00:00 2001 From: ssantos Date: Mon, 8 Jun 2020 19:27:53 +0000 Subject: [PATCH 03/14] Translated using Weblate (Portuguese) Currently translated at 90.6% (3067 of 3382 strings) --- OsmAnd/res/values-pt/strings.xml | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/OsmAnd/res/values-pt/strings.xml b/OsmAnd/res/values-pt/strings.xml index e89591ee73..898063f44d 100644 --- a/OsmAnd/res/values-pt/strings.xml +++ b/OsmAnd/res/values-pt/strings.xml @@ -3717,7 +3717,7 @@ Selecione o tempo limite do ecrã após acordar. (\"%1$s\" não aplica tempo limite). Manter o ecrã ligado Manter o ecrã desligado - Limitado por \"%1$s\", se ativado. + Se a opção \"%1$s\" estiver ativada, o tempo de atividade dependerá disso. Projeção pseudo-Mercator Um ficheiro de imagem por quadrícula Ficheiro SQLiteDB @@ -3739,5 +3739,17 @@ \nUma semana são 10 080 minutos. \nUm mês são 43 829 minutos. Escolha como as quadrículas descarregadas serão armazenadas. - Tempo limite do ecrã do sistema + Padrão de tempo limite do ecrã + Forneça a largura do seu veículo, algumas restrições de rotas podem ser aplicadas a veículos largos. + Forneça a altura do seu veículo, algumas restrições de rotas podem ser aplicadas a veículos altos. + Forneça o peso do seu veículo, algumas restrições de rotas podem ser aplicadas a veículos pesados. + Pode Exportar ou Importar ações rápidas com perfis de aplicações. + Apagar tudo\? + Tem certeza de que deseja apagar de forma irrevogável %d de ações rápidas\? + Tempo limite do ecrã + tons + metros + Controla a visibilidade de detalhes adicionais mostrados no mapa + Mapa noturno + O tempo todo \ No newline at end of file From 82e58204b22575bbf3200f6c159640de604343de Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=C4=9Fuz=20Ersen?= Date: Mon, 8 Jun 2020 04:37:53 +0000 Subject: [PATCH 04/14] Translated using Weblate (Turkish) Currently translated at 100.0% (3382 of 3382 strings) --- OsmAnd/res/values-tr/strings.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/OsmAnd/res/values-tr/strings.xml b/OsmAnd/res/values-tr/strings.xml index 71a0d7b9ba..a5ff6e6f75 100644 --- a/OsmAnd/res/values-tr/strings.xml +++ b/OsmAnd/res/values-tr/strings.xml @@ -3729,4 +3729,5 @@ Haritada gösterilen ek ayrıntıların görünürlüğünü denetleyin Gece haritası Her zaman + ton \ No newline at end of file From 3821c24879c2fad5ada9a3eb0edd1c57b26cac5e Mon Sep 17 00:00:00 2001 From: Softmap Date: Mon, 8 Jun 2020 10:03:15 +0000 Subject: [PATCH 05/14] Translated using Weblate (Arabic) Currently translated at 99.9% (3381 of 3382 strings) --- OsmAnd/res/values-ar/strings.xml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/OsmAnd/res/values-ar/strings.xml b/OsmAnd/res/values-ar/strings.xml index 2dc4e0e042..4e4e67bdbb 100644 --- a/OsmAnd/res/values-ar/strings.xml +++ b/OsmAnd/res/values-ar/strings.xml @@ -3147,7 +3147,7 @@ رسالة البدء تحليل إظهار الخريطة على شاشة القفل أثناء التنقل. - مهلة شاشة مخصصة + المهلة بعد الاستيقاظ الوحدات والأشكال المظهر مظهر الخريطة @@ -3730,7 +3730,7 @@ حدد مهلة الشاشة بعد الاستيقاظ. (\"%1$s\" لا ينطبق أي مهلة.) إبقاء الشاشة قيد التشغيل إبقاء الشاشة مطفأة - محدد ب \"٪1$s\" ، إذا تم تمكينه. + إذا تم تفعيل الخيار \"%1$s\" ، فسوف يعتمد وقت النشاط عليه. إسقاط ميركاتور الوهمي ملف صورة واحد لكل إطار متجانب ملف SQLiteDB @@ -3752,7 +3752,7 @@ \nأسبوع واحد هو 10080 دقيقة. \nشهر واحد هو 43 829 دقيقة. اختر كيفية تخزين الطبقات التي تم تنزيلها. - مهلة شاشة النظام + مهلة الشاشة الافتراضية يمكنك تصدير أو استيراد إجراءات سريعة باستخدام ملفات تعريف بروفايل التطبيق. حذف الكل؟ هل أنت متأكد من رغبتك في حذف الإجراءات السريعة %d نهائيًا؟ @@ -3762,7 +3762,7 @@ أدل بارتفاع مركبتك ،قد يتم تطبيق بعض القيود على المركبات المرتفعة. أدل بوزن مركبتك ،قد يتم تطبيق بعض القيود على المركبات الثقيلة. أمتار - اظهار التحكم في رؤية التفاصيل الإضافية على الخريطة + التحكم في رؤية التفاصيل الإضافية الظاهرة على الخريطة خريطة ليلية كل الوقت \ No newline at end of file From c302884497f0c44ce06059a95048affdeb150cb3 Mon Sep 17 00:00:00 2001 From: nasr pen Date: Mon, 8 Jun 2020 11:45:03 +0000 Subject: [PATCH 06/14] Translated using Weblate (Arabic) Currently translated at 99.9% (3381 of 3382 strings) --- OsmAnd/res/values-ar/strings.xml | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/OsmAnd/res/values-ar/strings.xml b/OsmAnd/res/values-ar/strings.xml index 4e4e67bdbb..f88942fbf9 100644 --- a/OsmAnd/res/values-ar/strings.xml +++ b/OsmAnd/res/values-ar/strings.xml @@ -3179,7 +3179,7 @@ معلمات الطريق تم تغيير وضع التطبيق إلى \"%s\" سجل الاستخدام - إعدادات البرنامج المساعد + ضبط الملحقات بشكل افتراضي قم بتنزيل خريطة مفصلة%s لعرض هذه المنطقة. تخزين داخلي ، مخفي عن المستخدم والتطبيقات الأخرى ، يمكن الوصول إليه حصريا من أوسماند. @@ -3459,7 +3459,7 @@ الحد الأدنى للسرعة دقة الحد الأدنى الحد الأدنى للإزاحة - إعادة تعيين إعدادات البرنامج المساعد الافتراضي + إعادة ضبط الملحقات للافتراضي تقسيم المسجل استخدام تطبيق النظام صوت الكاميرا @@ -3470,7 +3470,7 @@ متاح إضافة فئة مخصصة اظهر في الليل فقط - استعادة جميع إعدادات البرنامج المساعد إلى الحالة الافتراضية. + استعادة ضبط الملحق للافتراضي. تمت استعادة جميع إعدادات الوضع إلى الحالة الافتراضية. %1$s/%2$s غروب الشمس على %1$s @@ -3486,19 +3486,19 @@ \n \n• إضافة رقم الخروج في الملاحة \n -\n• إعادة صياغة إعدادات البرنامج المساعد +\n• إعادة صياغة ضبط الملحقات \n -\n• إعادة صياغة شاشة الإعدادات للوصول السريع إلى جميع الأوضاع +\n• إعادة صياغة شاشة الإعدادات للوصول السريع إلى جميع الأوضاع \n -\n• إضافة خيار لنسخ الإعدادات من ملف شخصي آخر +\n• إضافة خيار لنسخ الإعدادات من وضع آخر \n \n• إضافة القدرة على تغيير أمر أو إخفاء فئات POI في البحث \n \n• رموز POI محاذاة بشكل صحيح على الخريطة \n -\n• إضافة بيانات غروب الشمس / شروق الشمس لتكوين الخريطة +\n• إضافة بيانات غروب/شروق الشمس لتكوين الخريطة \n -\n• إضافة رموز المنزل / العمل على الخريطة +\n• إضافة رموز المنزل/العمل على الخريطة \n \n• إضافة دعم للوصف متعدد الأسطر في الإعدادات \n From 11949d5afb741d4f47b49aecae372473fe43c375 Mon Sep 17 00:00:00 2001 From: iman Date: Mon, 8 Jun 2020 11:41:54 +0000 Subject: [PATCH 07/14] Translated using Weblate (Persian) Currently translated at 99.7% (3375 of 3382 strings) --- OsmAnd/res/values-fa/strings.xml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/OsmAnd/res/values-fa/strings.xml b/OsmAnd/res/values-fa/strings.xml index 9add34bc35..03a1324459 100644 --- a/OsmAnd/res/values-fa/strings.xml +++ b/OsmAnd/res/values-fa/strings.xml @@ -3802,4 +3802,7 @@ وزن وسیلهٔ نقلیهٔ خود را مشخص کنید. ممکن است محدودیت‌های مسیر برای وسایل نقلیهٔ سنگین اِعمال شود. تُن متر + نمایانی جزئیات اضافه‌تر روی نقشه را کنترل کنید + نقشهٔ شب + همیشه \ No newline at end of file From 273df0f6a366d6f26bea6840e34f1efe57f72f84 Mon Sep 17 00:00:00 2001 From: ccpr1l Date: Sun, 7 Jun 2020 22:19:05 +0000 Subject: [PATCH 08/14] Translated using Weblate (Galician) Currently translated at 100.0% (3382 of 3382 strings) --- OsmAnd/res/values-gl/strings.xml | 92 ++++++++++++++++---------------- 1 file changed, 47 insertions(+), 45 deletions(-) diff --git a/OsmAnd/res/values-gl/strings.xml b/OsmAnd/res/values-gl/strings.xml index add99b3921..e881bab19d 100644 --- a/OsmAnd/res/values-gl/strings.xml +++ b/OsmAnd/res/values-gl/strings.xml @@ -109,13 +109,13 @@ " \n \nMantén premido para opcións" - "Subpistas: %1$s " - "Puntos de pasaxe: %1$s " - "Distancia: %1$s (%2$s puntos) " - "Hora do comezo: %1$tF, %1$tT " - "Hora do remate: %1$tF, %1$tT " - "Velocidade media: %1$s " - "Velocidade máxima: %1$s " + Subpistas: %1$s + Puntos de pasaxe: %1$s + Distancia: %1$s (%2$s puntos) + Hora do comezo: %1$tF, %1$tT + Hora do remate: %1$tF, %1$tT + Velocidade media: %1$s + Velocidade máxima: %1$s Altitude media: %1$s Intre de altitudes: %1$s Descenso/ascenso: %1$s @@ -250,7 +250,7 @@ Eliminar %1$d modificación(s) no OSM\? Eliminar todo Calcular a ruta primeiro - "Simular empregando a rota calculada " + Simular empregando a rota calculada Simular empregando pista GPX Lembrar escolla e @@ -284,7 +284,7 @@ Xapón Estados Unidos Canadá - "Europa, Asia, Lationoamérica e semellantes" + Europa, Asia, Lationoamérica e semellantes Reino Unido, India e semellantes Anunciar… Configura os avisos para nomes de rúas, avisos de tráfico (detencións forzosas, bandas sonoras), avisos de radar e límites de velocidade. @@ -400,7 +400,7 @@ Empregar a aplicación do sistema para as imaxes. Empregar a aplicación da cámara Configurar os axustes de son e vídeo. - "Axustes do son/vídeo " + Axustes do son/vídeo Fallou a gravación A cámara non está dispoñíbel Estase a gravar son/vídeo. Para detelo preme o trebello S/V. @@ -421,8 +421,7 @@ Notas de son/vídeo Plugin do OsmAnd para curvas de nivel sen conexión Este plugin fornece unha capa de sobreposición de curvas do nivel e unha capa de sombras da altitude (relevo) que poden ser amosadas nos mapas sen conexión do OsmAnd. Esta funcionalidade pode ser moi apreciada por atletas, camiñantes, sendeiristas e calquera que teña interese pola estrutura do relevo da paisaxe. -\n -\n +\n \nOs datos globais (entre os 70 graos norte e os 70 graos sul) están baseados nas medicións do SRTM (Misión Topográfica con Radar da Lanzadeira Espacial) e ASTER (Radiómetro Espacial Avanzado de Emisión Térmica e Reflexión) e instrumentos de imaxes a bordo do Terra, o satélite máis importante do Sistema de Observación Terrestre da NASA. ASTER é un esforzo cooperativo entre a NASA, o Ministerio de Economía do Xapón, Comercio e Industria (METI) e Sistemas Espaciais Xaponeses (J-spaceystems). Medición de distancias Preme \'Empregar localización…\' para engadir unha nota á localización. @@ -507,28 +506,28 @@ Deter a música Mapas e navegación OsmAnd Visualización e navegación móbil de mapas globais do OSM con e sen conexión - "OsmAnd (Indicacións de navegación automatizadas do OSM) -\n -\n O OsmAnd é unha aplicación de navegación de código aberto con acceso a unha ampla variedade de datos globais do OSM. Tódolos mapas dos datos (mapas vectoriais ou teselas) poden seren almacenados no cartón de memoria do teléfono móbil para empregalos sen conexión. O OsmAnd tamen fornece a funcionalidade de cálculo de rotas sen conexión, incluíndo a guía por voz paso a paso. + OsmAnd (Indicacións de navegación automatizadas do OSM) +\n +\n O OsmAnd é unha aplicación de navegación de código aberto con acceso a unha ampla variedade de datos globais do OSM. Tódolos datos do mapa (mapas vectoriais ou teselas) poden ser almacenados no cartón de memoria do teléfono móbil para empregalos sen conexión. O OsmAnd tamen fornece a funcionalidade de cálculo de rotas sen conexión, incluíndo a guía por voz paso a paso. \n \n Algunhas das funcións principais: -\n - Funcionalidade completa sen conexión (os mapas vectoriais ou de teselas baixados almacénanse no cartafol que se escolla) -\n - Mapas vectoriais compactos sen conexión para todo o mundo -\n - Pódense baixar mapas de países ou rexións de xeito directo dende a aplicación -\n - É posíbel sobrepor varias capas de mapas, coma pistas de GPX ou de navegación, puntos de interese (PDI), favoritos, curvas do nivel, paraxes de transporte público ou mapas adicionais con transparencia regulábel -\n - Procura sen conexión dos enderezos e lugares (PDI) -\n - Cálculo de rotas sen conexión para distancias curtas (experimental) -\n - Modos para automóbil, bicicleta e peóns, con: -\n - Vistas de día e noite automatizadas opcionais -\n - Achegamento opcional do mapa dependendo da velocidade -\n - Aliñamento opcional do mapa dependendo do compás ou da dirección do movemento -\n - Guía opcional de faixas ou carrís da estrada, límites de velocidade, voces gravadas e TTS +\n - Funcionalidade completa sen conexión (os mapas vectoriais ou de teselas baixados almacénanse no cartafol que se escolla) +\n - Mapas vectoriais compactos sen conexión para todo o mundo +\n - Pódense baixar mapas de países ou rexións de xeito directo dende a aplicación +\n - É posíbel sobrepor varias capas de mapas, coma pistas de GPX ou de navegación, puntos de interese (PDI), favoritos, curvas do nivel, paraxes de transporte público ou mapas adicionais con transparencia regulábel +\n - Procura sen conexión dos enderezos e lugares (PDI) +\n - Cálculo de rotas sen conexión para distancias medias +\n - Modos para automóbil, bicicleta e peóns, opcionalmente con: +\n - Cambio de vista diurna e nocturna automática +\n - Achegamento do mapa dependendo da velocidade +\n - Aliñamento do mapa dependendo do compás ou da dirección do movemento +\n - Guía de faixas ou carrís da estrada, límites de velocidade, voces gravadas e TTS \n -\n Limitacións desta versión de balde do OsmAnd: -\n - O número de mapas a baixar está limitado -\n - Non hai acceso ós puntos de interese (PDI) da Wikipedia sen conexión -\n -\n O OsmAnd está a ser desenvolvido activamente e o noso proxecto e o seu progreso futuro depende da contribución financeira para financia-lo desenvolvemento e as probas das funcionalidades novas. Coida a posibilidade de mercar o OsmAnd+ ou de financiar funcións novas específicas ou de facer unha doazón xeral no osmand.net." +\n Limitacións desta versión de balde do OsmAnd: +\n - O número de mapas a baixar está limitado +\n - Non hai acceso ós puntos de interese (PDI) da Wikipedia sen conexión +\n +\n O OsmAnd está a ser desenvolvido activamente e o noso proxecto e o seu progreso futuro depende da contribución financeira para financia-lo desenvolvemento e as probas das funcionalidades novas. Coida a posibilidade de mercar o OsmAnd+ ou de financiar funcións novas específicas ou de facer unha doazón xeral no osmand.net. Mapas e navegación de OsmAnd+ Visualización e navegación móbil de mapas globais para mapas de OSM con e sen conexión O OsmAnd+ (Indicacións da navegación automatizadas do OSM) é un aplicativo de navegación de código aberto con acceso a unha ampla variedade de datos globais do OSM. Tódolos mapas dos datos (mapas vectoriais ou teselas) poden seren almacenados no cartón de memoria do teléfono para empregalos sen conexión. O OsmAnd tamén fornece funcionalidade de cálculo de rotas sen conexión, incluíndo a guía por voz paso a paso. @@ -1036,7 +1035,7 @@ Amosar renderizado continuo no canto dunha imaxe de cada vez. Non foi posíbel debuxar a área escollida. Empregar a localización… - "Carregouse a visualización " + Carregouse a visualización Non foi posíbel cargar o visualizador (renderizador). Renderizador vectorial Escolle a aparencia da visualización (renderizado) dos mapas @@ -1446,7 +1445,7 @@ Osetiano Esperanto Español da Arxentina - "Noruegués Bokmål " + Noruegués Bokmål Volapük Tailandés Telugu @@ -1795,7 +1794,7 @@ Lon %2$s Estase a procurar o enderezo Cor de GPX Largo do GPX - "Libre %1$s " + Libre %1$s Estilo das estradas Sen escadas Evitar escadas @@ -1969,7 +1968,7 @@ Lon %2$s Distrito Barrio Procurar - Aberto 24/7 + Aberto 24h Cartón de memoria Formato das coordenadas Formato das coordenadas xeográficas. @@ -2437,7 +2436,7 @@ Lon %2$s Cor por afiliación da rede Media %1$d de %2$d - "Subida/Descenso " + Subida/Descenso Máx/Mín Eliminar marcaxe do mapa \"%s\"\? Editar marcaxe do mapa @@ -2450,7 +2449,8 @@ Lon %2$s Para proseguer, permite acceder á localización ó OsmAnd. Grazas polos teus comentarios Non foi posíbel atopar o nó ou a vía. - Sen resultados de procura\? Mándanos a túa opinión + Sen resultados de procura\? +\nMándanos a túa opinión Estase a envíar camiño… Aumentar o raio de procura para %1$s Mundo @@ -3166,6 +3166,8 @@ Lon %2$s \n • Engade un trebello para amosar as coordenadas actuais \n \n • Engade a opción de amosar o compás no mapa cunha regra de raio +\n +\n • Arreglado o rexistro de pistas en segundo plano \n \n • Melloradas as descargas de mapas en segundo plano \n @@ -3480,10 +3482,10 @@ Lon %2$s Efecto secundario: No teu traxecto fallarán todos os treitos nos que non se cumprira o criterio de velocidade mínima (por exemplo, cando empurres a túa bicicleta por unha costa empinada). Ademais, non haberá información sobre os períodos de asueto, como as pausas. Isto ten efectos en calquera análise ou posprocesamento, como cando se trata de determinar a dura total da túa viaxe, o tempo en movemento ou a túa velocidade media. Recomendación: Proba primeiro a empregar a detección de movemento mediante o filtro de desprazamento mínimo de rexistro (B), pode producir mellores resultados e perderás menos datos. Se as pistas seguen a ser ruidosas a baixas velocidades, proba aquí con valores distintos de cero. Ten en conta que algunhas medicións poden non informar ningún valor de velocidade (algúns métodos baseados na rede), nese caso no se rexistraría ren. Observación: comprobacións de velocidade > 0: A meirande parte dos chipsets de GPS informan un valor de velocidade só se o algoritmo determina que está en movemento. Polo tanto, o uso do axuste > 0 neste filtro, en certo senso emprega a detección de movemento do conxunto de chips do GPS. Pero aínda se non se filtra aquí no intre da gravación, seguimos a empregar esta función no noso análise GPX para determinar a distancia corrixida, é dicir, o valor que se amosa nese campo é a distancia gravada en movemento. - Isto registrará só os puntos medidos cunha indicación de precisión mínima (en metros/pés, segundo o informado polo Android para o teu conxunto de chips). A precisión é a proximidade das medicións á posición real, e non está directamente relacionada coa precisión, que é a dispersión de medicións repetidas. + Isto rexistrará só os puntos medidos cunha indicación de precisión mínima (en metros/pés, segundo o informado polo Android para o teu conxunto de chips). A precisión é a proximidade das medicións á posición real, e non está directamente relacionada coa dispersión de medicións repetidas. Efecto secundario: Como resultado da filtraxe por precisión, poden fallar puntos por exemplo embaixo de pontes, baixo árbores, entre edificios altos ou con certas condicións climáticas. - Recomendación: É difícil predicir o que se gravará e o que non, pode ser mellor apagar este filtro. - Observación: Se o GPS houbese apagado de xeito inmediato antes dunha gravación, o primeiro punto medido podería ter unha precisión disminuída, polo que no noso código pode que queiramos agardar un segundo máis ou menos antes de gravar un punto (ou gravar o mellor de 3 puntos consecutivos, etc.), pero isto aínda non se implementou. + Recomendación: É difícil predicir o que se gravará e o que non, polo que pode ser mellor desactivar este filtro. + Observación: Se o GPS estiver apagado xusto antes dunha gravación, o primeiro punto medido podería ter unha precisión diminuída, polo que no noso código pode que queiramos agardar un segundo máis ou menos antes de gravar un punto (ou gravar o mellor de 3 puntos consecutivos, etc.), pero isto aínda non se implementou. Este filtro evita que se graven puntos duplicados nos que pode haber moi pouco movemento real, e dá unha aparencia espacial máis agradábel ás pistas que non se procesan de xeito posterior. Efectos secundarios: Os períodos de asueto non se rexistran en absoluto ou só nun punto cada un. Os pequenos movementos (do mundo real) (por exemplo, cara os lados, para marcar un posíbel desviamento na túa viaxe) poden ser filtrados. O teu ficheiro contén menos información para o posprocesamento, e ten piores estatísticas ó filtrar os puntos obviamente redundantes no tempo de gravación, mentres que de xeito potencial mantén os aparellos causados pola má recepción ou os efectos do chipset do GPS. Recomendación: Un axuste de 5 metros pode funcionar ben se non precisas capturar detalles máis finos que iso, e non desexas capturar de xeito explícito os datos mentres estás en asueto. @@ -3692,11 +3694,11 @@ Lon %2$s Estes elementos non se amosan no menú, mais as opcións ou plugins que representan seguirán a funcionar. Agochar configuracións que as restabelece ó seu estado orixinal. %1$s / %2$s - "O pagamento será cobrado na túa conta da Google Play na confirmación da compra. -\n -\n  A subscrición é renovada de xeito automático, a menos que sexa desbotada antes da data de renovación. A túa conta será cobrada polo período de renovación (més/trimestre/ano) soamente na data de renovación. -\n -\n  Podes xestionar e desbotar as túas subscricións entrando nos axustes da Google Play." + "O pagamento será cobrado na túa conta da Google Play na confirmación da compra. +\n +\n A subscrición é renovada de xeito automático, a menos que sexa desbotada antes da data de renovación. A túa conta será cobrada polo período de renovación (més/trimestre/ano) soamente na data de renovación. +\n +\n Podes xestionar e desbotar as túas subscricións entrando nos axustes da Google Play." Procurar tipos de PDI Combina tipos de PDI de diferentes categorías. Preme en \"trocar\" para marcar todo, preme o lado esquerdo para escoller unha categoría. Acción %1$s non admitida From 0bf78d277c8bd4814731d544781eb7deb5ec4812 Mon Sep 17 00:00:00 2001 From: syl Date: Mon, 8 Jun 2020 12:40:54 +0000 Subject: [PATCH 09/14] Translated using Weblate (French) Currently translated at 99.8% (3799 of 3804 strings) --- OsmAnd/res/values-fr/phrases.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OsmAnd/res/values-fr/phrases.xml b/OsmAnd/res/values-fr/phrases.xml index d56bdb62da..2bb47af800 100644 --- a/OsmAnd/res/values-fr/phrases.xml +++ b/OsmAnd/res/values-fr/phrases.xml @@ -2938,7 +2938,7 @@ Grille métallique Emplacement : souterrain Emplacement : sous l\'eau - Emplacement : au dessus du sol + Emplacement : en surface Emplacement : aérien Emplacement : toit Emplacement : dessus du toit From 7ce8296320f3a6ada8508d7bf598c006382d58b6 Mon Sep 17 00:00:00 2001 From: Franco Date: Sun, 7 Jun 2020 22:56:25 +0000 Subject: [PATCH 10/14] Translated using Weblate (Spanish (Argentina)) Currently translated at 100.0% (3382 of 3382 strings) --- OsmAnd/res/values-es-rAR/strings.xml | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/OsmAnd/res/values-es-rAR/strings.xml b/OsmAnd/res/values-es-rAR/strings.xml index 85ee6ec3d4..f044d1fe95 100644 --- a/OsmAnd/res/values-es-rAR/strings.xml +++ b/OsmAnd/res/values-es-rAR/strings.xml @@ -3249,7 +3249,7 @@ Análisis Mostrar el mapa en la pantalla de bloqueo durante la navegación. Ajustes para la navegación del perfil elegido «%1$s». - Duración del encendido + Tiempo de espera después del encendido Unidades y formatos Aspecto Apariencia del mapa @@ -3746,7 +3746,7 @@ Elige el tiempo de espera de la pantalla luego del encendido. («%1$s» no aplica ningún tiempo de espera.) Mantener la pantalla encendida Mantener la pantalla apagada - Limitado por «%1$s», si está activado. + Si la opción «%1$s» está activada, el tiempo de actividad dependerá de ello. Proyección de pseudo-Mercator Un archivo de imagen por tesela Archivo SQLiteDB @@ -3768,8 +3768,17 @@ \nUna semana son 10 080 minutos. \nUn mes son 43 829 minutos. Elige cómo se almacenarán las teselas descargadas. - Tiempo de espera de la pantalla del sistema + Tiempo predefinido de la espera de la pantalla Puedes exportar o importar acciones rápidas con perfiles de aplicación. ¿Borrar todo\? ¿Borrar irrevocablemente %d acciones rápidas\? + Proporciona el ancho del vehículo. Se pueden aplicar algunas restricciones de ruta para vehículos anchos. + Proporciona la altura del vehículo, se pueden aplicar algunas restricciones de ruta para vehículos altos. + Proporciona el peso del vehículo, se pueden aplicar algunas restricciones de ruta para vehículos pesados. + Tiempo de espera de la pantalla + tonos + metros + Controla la visibilidad de los detalles adicionales que se muestran en el mapa + Mapa nocturno + Todo el tiempo \ No newline at end of file From b7f7cdda0b892555d88f21fd778514447f0579fb Mon Sep 17 00:00:00 2001 From: Eduardo Addad de Oliveira Date: Mon, 8 Jun 2020 21:25:36 +0000 Subject: [PATCH 11/14] Translated using Weblate (Portuguese (Brazil)) Currently translated at 100.0% (3382 of 3382 strings) --- OsmAnd/res/values-pt-rBR/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OsmAnd/res/values-pt-rBR/strings.xml b/OsmAnd/res/values-pt-rBR/strings.xml index 5c706c7925..965c1cc574 100644 --- a/OsmAnd/res/values-pt-rBR/strings.xml +++ b/OsmAnd/res/values-pt-rBR/strings.xml @@ -3759,7 +3759,7 @@ Pôr do Sol: %2$s Forneça o peso do veículo, algumas restrições de rotas podem ser aplicadas a veículos pesados. tons metros - Controlar a visibilidade de detalhes adicionais mostrados no mapa + Controlar a visibilidade dos detalhes adicionais mostrados no mapa Mapa noturno Tempo todo \ No newline at end of file From 9b653afc50358ab1bced3b2959c5172f210180cd Mon Sep 17 00:00:00 2001 From: Hardy Date: Tue, 9 Jun 2020 10:28:35 +0200 Subject: [PATCH 12/14] fix small typo --- OsmAnd/src/net/osmand/plus/development/TestVoiceActivity.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OsmAnd/src/net/osmand/plus/development/TestVoiceActivity.java b/OsmAnd/src/net/osmand/plus/development/TestVoiceActivity.java index d59504450c..1c328f8343 100644 --- a/OsmAnd/src/net/osmand/plus/development/TestVoiceActivity.java +++ b/OsmAnd/src/net/osmand/plus/development/TestVoiceActivity.java @@ -164,7 +164,7 @@ public class TestVoiceActivity extends OsmandActionBarActivity { addButton(ll, "\u25BA (1.2) New route calculated, 1350m, 3680sec (01:01:20)", builder(p).newRouteCalculated(1350, 3680)); addButton(ll, "\u25BA (1.3) New route calculated 3700m, 7320sec (02:02)", builder(p).newRouteCalculated(3700, 7320)); addButton(ll, "\u25BA (1.4) New route calculated 9100m, 10980sec (03:03)", builder(p).newRouteCalculated(9100, 10980)); - addButton(ll, "\u25BA (1.5) New route calculated, 1500m, 4280sec (01:20:20)", builder(p).newRouteCalculated(1500, 4280)); + addButton(ll, "\u25BA (1.5) New route calculated, 1500m, 4280sec (01:20:20)", builder(p).newRouteCalculated(1500, 4820)); addButton(ll, "\u25BA (2.1) Route recalculated 11500m, 18600sec (05:10)", builder(p).routeRecalculated(11500, 18600)); addButton(ll, "\u25BA (2.2) Route recalculated 19633m, 26700sec (07:25)", builder(p).routeRecalculated(19633, 26700) ); addButton(ll, "\u25BA (2.3) Route recalculated 89750m, 55800sec (15:30)", builder(p).routeRecalculated(89750, 55800) ); From 0174a8f0c94698e820a9c70ec4c40dd61f3f5709 Mon Sep 17 00:00:00 2001 From: Vitaliy Date: Tue, 9 Jun 2020 14:06:12 +0300 Subject: [PATCH 13/14] try to fix possible npe --- .../src/net/osmand/plus/osmedit/EditPoiDialogFragment.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/OsmAnd/src/net/osmand/plus/osmedit/EditPoiDialogFragment.java b/OsmAnd/src/net/osmand/plus/osmedit/EditPoiDialogFragment.java index 66991de60e..0a93dc3419 100644 --- a/OsmAnd/src/net/osmand/plus/osmedit/EditPoiDialogFragment.java +++ b/OsmAnd/src/net/osmand/plus/osmedit/EditPoiDialogFragment.java @@ -67,7 +67,6 @@ import net.osmand.osm.edit.OSMSettings; import net.osmand.osm.edit.Way; import net.osmand.plus.OsmandApplication; import net.osmand.plus.OsmandPlugin; -import net.osmand.plus.settings.backend.OsmandSettings; import net.osmand.plus.R; import net.osmand.plus.UiUtilities; import net.osmand.plus.activities.MapActivity; @@ -75,6 +74,7 @@ import net.osmand.plus.base.BaseOsmAndDialogFragment; import net.osmand.plus.osmedit.OsmPoint.Action; import net.osmand.plus.osmedit.dialogs.PoiSubTypeDialogFragment; import net.osmand.plus.osmedit.dialogs.PoiTypeDialogFragment; +import net.osmand.plus.settings.backend.OsmandSettings; import net.osmand.util.Algorithms; import org.apache.commons.logging.Log; @@ -465,8 +465,8 @@ public class EditPoiDialogFragment extends BaseOsmAndDialogFragment { } private String isTextLengthInRange() { - for (Entry s: editPoiData.getTagValues().entrySet()) { - if (s.getValue().length() > AMENITY_TEXT_LENGTH) { + for (Entry s : editPoiData.getTagValues().entrySet()) { + if (!Algorithms.isEmpty(s.getValue()) && s.getValue().length() > AMENITY_TEXT_LENGTH) { return s.getKey(); } } From 5be0b145c8b41af07c67fbcdf79b67d5a43a8821 Mon Sep 17 00:00:00 2001 From: Vitaliy Date: Tue, 9 Jun 2020 14:11:58 +0300 Subject: [PATCH 14/14] Fix possible npe --- OsmAnd/src/net/osmand/plus/osmedit/EditPoiData.java | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/OsmAnd/src/net/osmand/plus/osmedit/EditPoiData.java b/OsmAnd/src/net/osmand/plus/osmedit/EditPoiData.java index 363e2a7876..6931dd8592 100644 --- a/OsmAnd/src/net/osmand/plus/osmedit/EditPoiData.java +++ b/OsmAnd/src/net/osmand/plus/osmedit/EditPoiData.java @@ -128,7 +128,8 @@ public class EditPoiData { if (oldValue == null || !oldValue.equals(value)) { changedTags.add(tag); } - tagValues.put(tag, value); + String tagVal = value != null ? value : ""; + tagValues.put(tag, tagVal); notifyDatasetChanged(tag); } finally { isInEdit = false; @@ -207,7 +208,8 @@ public class EditPoiData { public void updateTypeTag(String string, boolean userChanges) { checkNotInEdit(); try { - tagValues.put(POI_TYPE_TAG, string); + String val = string != null ? string : ""; + tagValues.put(POI_TYPE_TAG, val); if (userChanges) { changedTags.add(POI_TYPE_TAG); } @@ -216,7 +218,8 @@ public class EditPoiData { if (pt != null) { removeTypeTagWithPrefix(!tagValues.containsKey(REMOVE_TAG_PREFIX + pt.getEditOsmTag())); currentPoiType = pt; - tagValues.put(pt.getEditOsmTag(), pt.getEditOsmValue()); + String tagVal = pt.getEditOsmValue() != null ? pt.getEditOsmValue() : ""; + tagValues.put(pt.getEditOsmTag(), tagVal); if (userChanges) { changedTags.add(pt.getEditOsmTag()); }