From f47a0dd49cc5ebbe650f07fee6630d29f955d8f2 Mon Sep 17 00:00:00 2001 From: "translatewiki.net" Date: Thu, 3 Oct 2024 14:01:48 +0200 Subject: [PATCH 01/36] Localisation updates from https://translatewiki.net. --- app/src/main/res/values-pa/strings.xml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/src/main/res/values-pa/strings.xml b/app/src/main/res/values-pa/strings.xml index ab3d3a28b..f03f7b964 100644 --- a/app/src/main/res/values-pa/strings.xml +++ b/app/src/main/res/values-pa/strings.xml @@ -160,7 +160,7 @@ ਸੈਟਿੰਗਾਂ ਸੁਝਾਅ ਬਾਹਰ ਆਉ - ਟਿਊਟੋਰਿਅਲ + ਸਿਖਲਾਈ ਸੂਚਨਾਵਾਂ ਪਰਖੋ ਵਿਕੀਪੀਡੀਆ ਲੇਖ @@ -199,5 +199,6 @@ ਉਤਾਰਾ ਕੀਤਾ ਟਿਕਾਣਾ ਲਿਖਤ ਛਾਪੋ + ਵਰਤੋਂਕਾਰ ਤੁਹਾਡੇ ਦਾਖਲੇ ਦੀ ਮਿਆਦ ਪੁੱਗ ਗਈ ਹੈ। ਕਿਰਪਾ ਕਰਕੇ ਦੁਬਾਰਾ ਦਾਖਲ ਹੋਵੋ। From c7065e103b3a092577b9be165f69922f564c9713 Mon Sep 17 00:00:00 2001 From: "translatewiki.net" Date: Mon, 7 Oct 2024 14:01:46 +0200 Subject: [PATCH 02/36] Localisation updates from https://translatewiki.net. --- app/src/main/res/values-ar/strings.xml | 3 +++ app/src/main/res/values-fr/strings.xml | 4 ++-- app/src/main/res/values-ia/strings.xml | 7 +++++++ app/src/main/res/values-pa/strings.xml | 2 +- 4 files changed, 13 insertions(+), 3 deletions(-) diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml index b46cbf547..46ffcb7f5 100644 --- a/app/src/main/res/values-ar/strings.xml +++ b/app/src/main/res/values-ar/strings.xml @@ -798,6 +798,9 @@ رُفض إذن التخزين تعذر مشاركة هذا العنصر الإذن مطلوب لهذه الوظيفة + تعلم كيفية كتابة وصف مفيد + إزالة تحذير الموقع اشكر المؤلف حدث خطأ أثناء إرسال الشكر للمؤلف. + تعذر تحميل بيانات المكان diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index e5797e656..f95d4b095 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -814,7 +814,7 @@ Signaler un problème concernant cet élément à Wikidata Merci de saisir vos commentaires Discussion - Ecrivez quelque chose sur l\'article \"%1$s\". Il sera visible par le public\nAjouter une définition terminologique pour ce terme + Écrivez quelque chose à propos de l’élément « %1$s ». Il sera visible publiquement. \'%1$s\' n\'existe plus, aucune photo ne pourra jamais en être prise. \'%1$s\' se trouve à un endroit différent. Veuillez indiquer l\'endroit correct ci-dessous et, si possible, indiquez la latitude et la longitude correctes. Autre problème ou information (merci d\'expliquer ci-dessous). @@ -824,5 +824,5 @@ Téléversements En attente Échec - Ne peut pas supporter les données + Les données du lieu n\'ont pas pu être chargées diff --git a/app/src/main/res/values-ia/strings.xml b/app/src/main/res/values-ia/strings.xml index 0e595af04..7b9b3f607 100644 --- a/app/src/main/res/values-ia/strings.xml +++ b/app/src/main/res/values-ia/strings.xml @@ -765,8 +765,15 @@ Signalar a Wikidata un problema sur iste elemento Per favor insere alcun commentos Discussion + Scribe qualcosa sur le elemento ‘%1$s’. Isto essera visibile publicamente. ‘%1$s’ non existe plus, necun imagine pote jammais esser prendite de illo. ‘%1$s’ es in un altere loco. Per favor specifica le loco correcte hic infra, e si possibile, indica le latitude e longitude correcte. Altere problema o information (per favor explica hic infra). Tu retroaction apparera sur le sequente pagina wiki: <a href=\"https://commons.wikimedia.org/wiki/Commons:Mobile_app/Feedback\">Commons:Mobile app/Feedback</a> + Es tu secur de voler cancellar tote le incargamentos? + Cancella tote le incargamentos… + Incargamentos + Pendente + Fallite + Non poteva cargar le datos del loco diff --git a/app/src/main/res/values-pa/strings.xml b/app/src/main/res/values-pa/strings.xml index f03f7b964..4b07c7156 100644 --- a/app/src/main/res/values-pa/strings.xml +++ b/app/src/main/res/values-pa/strings.xml @@ -9,7 +9,7 @@ * ਗੁਰਪ੍ਰੀਤ ਹੁੰਦਲ --> - ਕਾਮਨਜ਼ ਲੋਗੋ + ਕਾਮਨਜ਼ ਮਾਰਕਾ ਇੱਕ ਹੋਰ ਵੇਰਵਾ ਸ਼ਾਮਲ ਕਰੋ ਨਵਾਂ ਯੋਗਦਾਨ ਸ਼ਾਮਲ ਕਰੋ ਵੇਰਵਾ From ba7a5597149183cac8f21b4bc5a829eb2502630f Mon Sep 17 00:00:00 2001 From: "translatewiki.net" Date: Thu, 10 Oct 2024 14:01:43 +0200 Subject: [PATCH 03/36] Localisation updates from https://translatewiki.net. --- app/src/main/res/values-ce/strings.xml | 2 +- app/src/main/res/values-de/strings.xml | 14 ++++++++++++++ app/src/main/res/values-pa/strings.xml | 2 ++ 3 files changed, 17 insertions(+), 1 deletion(-) diff --git a/app/src/main/res/values-ce/strings.xml b/app/src/main/res/values-ce/strings.xml index 1676c72a3..e13e8c040 100644 --- a/app/src/main/res/values-ce/strings.xml +++ b/app/src/main/res/values-ce/strings.xml @@ -106,7 +106,7 @@ Хьажа файлан агӀоне Куьг йазор (ТIедилина ду) Дехар ду, хӀокху файлан цIе гайта - Цунах лаьцна + Цуьнах лаьцна Куьг Чувала(йала) тара цало — сетан гӀалат ТӀех дукха кхиаме боцу гӀертарш. Дехар ду масех минот йаьлча йуха а хьажа. diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 25498e395..a6471c1fe 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -29,6 +29,7 @@ * Sujan * Sushi * Tacsipacsi +* TheRabbit22 * ThisCarthing * Tobi 406 * TomatoCake @@ -802,4 +803,17 @@ Bitte beachte, dass bei einem Multiupload alle Bilder die gleichen Kategorien und Bezeichnungen erhalten. Sollten die Bilder keine gemeinsamen Bezeichnungen und Kategorien haben, führe bitte mehrere separate Uploads durch. Hinweis zu Mehrfach-Uploads Melde ein Problem mit diesem Datenobjekt an Wikidata + Bitte gib einige Kommentare ein + Diskussion + Schreibe etwas über das Objekt ‚%1$s‘. Deine Beschreibung wird öffentlich sichtbar sein. + ‚%1$s‘ existiert nicht mehr, es kann kein Foto mehr davon gemacht werden. + ‚%1$s‘ ist jetzt an einem anderen Ort. Bitte gib den richtigen Ort und, wenn möglich, den Breiten- und Längengrad an. + Sonstiges Problem oder Information (bitte unten erläutern). + Dein Feedback wird auf der folgenden Wiki-Seite veröffentlicht werden: <a href=\"https://commons.wikimedia.org/wiki/Commons:Mobile_app/Feedback\">Commons:Mobile app/Feedback</a> + Möchtest du wirklich alle Uploads abbrechen? + Alle Uploads werden abgebrochen… + Hochgeladene Dateien + Ausstehend + Fehlgeschlagen + Ortsdaten konnten nicht geladen werden diff --git a/app/src/main/res/values-pa/strings.xml b/app/src/main/res/values-pa/strings.xml index 4b07c7156..6cdf7ddc2 100644 --- a/app/src/main/res/values-pa/strings.xml +++ b/app/src/main/res/values-pa/strings.xml @@ -126,6 +126,7 @@ ਇੰਟਰਨੈੱਟ ਉੱਤੇ ਮਿਲੀ ਕਾਪੀਰਾਈਟ ਸਮੱਗਰੀ ਅਤੇ ਪੋਸਟਰਾਂ, ਕਿਤਾਬਾਂ ਦੀਆਂ ਜਿਲਦਾਂ ਦੀਆਂ ਤਸਵੀਆਂ ਆਦਿ ਤੋਂ ਪਰਹੇਜ਼ ਰੱਖੋ। ਤੁਹਾਨੂੰ ਲੱਗਦਾ ਹੈ ਕਿ ਤੁਹਾਡੇ ਕੋਲ ਹੈ? ਹਾਂ! + ਹੋਰ ਜਾਣਕਾਰੀ ਸ਼੍ਰੇਣੀਆਂ ਲੱਦ ਰਿਹਾ ਹੈ... ਕੋਈ ਵੀ ਨਹੀਂ ਚੁਣਿਆ @@ -199,6 +200,7 @@ ਉਤਾਰਾ ਕੀਤਾ ਟਿਕਾਣਾ ਲਿਖਤ ਛਾਪੋ + ਮੁਹਰੈਲ ਵਰਤੋਂਕਾਰ ਤੁਹਾਡੇ ਦਾਖਲੇ ਦੀ ਮਿਆਦ ਪੁੱਗ ਗਈ ਹੈ। ਕਿਰਪਾ ਕਰਕੇ ਦੁਬਾਰਾ ਦਾਖਲ ਹੋਵੋ। From dadc4b6a11a01646c924e3ee791ad8de254f4dda Mon Sep 17 00:00:00 2001 From: Nicolas Raoul Date: Sun, 13 Oct 2024 22:56:53 +0900 Subject: [PATCH 04/36] Bumped coordinates2country, recognizes more countries --- app/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index a9c0c498c..43c1695da 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -174,7 +174,7 @@ dependencies { kaptTest "androidx.databinding:databinding-compiler:8.0.2" kaptAndroidTest "androidx.databinding:databinding-compiler:8.0.2" - implementation("io.github.coordinates2country:coordinates2country-android:1.3") { exclude group: 'com.google.android', module: 'android' } + implementation("io.github.coordinates2country:coordinates2country-android:1.8") { exclude group: 'com.google.android', module: 'android' } //OSMDroid implementation ("org.osmdroid:osmdroid-android:$OSMDROID_VERSION") From 95e0a0d143725ebb3079222c3fbb8dca3cff129a Mon Sep 17 00:00:00 2001 From: "translatewiki.net" Date: Mon, 14 Oct 2024 14:02:11 +0200 Subject: [PATCH 05/36] Localisation updates from https://translatewiki.net. --- app/src/main/res/values-br/strings.xml | 4 ++-- app/src/main/res/values-pa/strings.xml | 7 +++++-- app/src/main/res/values-zh/strings.xml | 7 +++++++ 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/app/src/main/res/values-br/strings.xml b/app/src/main/res/values-br/strings.xml index be454b51b..1c7d09617 100644 --- a/app/src/main/res/values-br/strings.xml +++ b/app/src/main/res/values-br/strings.xml @@ -242,8 +242,8 @@ Meneget eo bet ar skeudenn evit lemel. Lezel a-gostez Kevreañ - Ha c\'hoant ho peus, evit gwir, da gevreañ ? - Da gevreañ ho po en amzer-da-zont evit pellgargañ skeudennoù. + Ha n\'ho peus ket c\'hoant, evit gwir, da gevreañ ? + Ret e vo deoc\'h kevreañ en amzer-da-zont evit pellgargañ skeudennoù. Kevreit, mar plij, evit implijout an arc\'hwel-mañ Eilañ an destenn wiki er golver Testenn wiki eilet er golver diff --git a/app/src/main/res/values-pa/strings.xml b/app/src/main/res/values-pa/strings.xml index 6cdf7ddc2..1780845f8 100644 --- a/app/src/main/res/values-pa/strings.xml +++ b/app/src/main/res/values-pa/strings.xml @@ -38,7 +38,7 @@ ਦਿੱਖ ਆਮ ਵਿਕੀਮੀਡੀਆ ਕਾਮਨਜ਼ - ਸੈਟਿੰਗ + ਪਸੰਦਾਂ ਵਰਤੋਂਕਾਰ ਨਾਂ ਲੰਘ-ਸ਼ਬਦ ਦਾਖ਼ਲ ਹੋਵੋ @@ -85,7 +85,7 @@ %1$s ਨਾਲ਼ ਮੇਲ ਖਾਂਦੀ ਕੋਈ ਸ਼੍ਰੇਣੀ ਨਹੀਂ ਲੱਭੀ ਆਪਣੀਆਂ ਤਸਵੀਰਾਂ ਨੂੰ ਵਿਕੀਮੀਡੀਆ ਕਾਮਨਜ਼ ਵਿਚ ਜ਼ਿਆਦਾ ਲੱਭਣਯੋਗ ਬਣਾਉਣ ਲਈ ਸ਼੍ਰੇਣੀਆਂ ਜੋੜੋ।\n\nਸ਼੍ਰੇਣੀਆਂ ਜੋੜਨ ਲਈ ਟਾਈਪ ਕਰਨ ਅਰੰਭ ਕਰੋ।\nਇਸ ਕਾਰਜ ਨੂੰ ਅਣਡਿੱਠਾ ਕਰਨ ਲਈ ਇਹ ਸੁਨੇਹਾ ਥਪੇੜੋ (ਜਾਂ ਵਾਪਸੀ ਬਟਨ ਦਬਾਓ)। ਸ਼੍ਰੇਣੀਆਂ - ਸੈਟਿੰਗ + ਪਸੰਦਾਂ ਸਾਈਨ ਅੱਪ ਸ਼੍ਰੇਣੀ ਇਸ ਬਾਰੇ @@ -178,10 +178,13 @@ ਰੱਦ ਕਰੋ ਲੱਭੋ ਲੱਭੋ + ਹਾਲੀਆ ਖੋਜਾਂ: + ਹਾਲ ਹੀ ਵਿੱਚ ਬੋਲੀਆਂ ਬਾਰੇ ਪੁੱਛਗਿੱਛ ਸ਼੍ਰੇਣੀਆਂ ਨਕਸ਼ਾ ਸਵਾਲ ਜਾਰੀ ਰੱਖੋ + ਕੋਈ ਤਾਜ਼ਾ ਖੋਜ ਨਹੀਂ ਮਿਟਾਓ ਪ੍ਰਾਪਤੀਆਂ ਅੰਕੜੇ diff --git a/app/src/main/res/values-zh/strings.xml b/app/src/main/res/values-zh/strings.xml index 2f1647615..7654cee2c 100644 --- a/app/src/main/res/values-zh/strings.xml +++ b/app/src/main/res/values-zh/strings.xml @@ -7,6 +7,7 @@ * A Retired User * Aefgh39622 * Angrydog001 +* Chimes * Crowley666 * D41D8CD98F * Deathkon @@ -827,4 +828,10 @@ “%1$s”位于一个不同的位置。请在下方给出正确的位置,可以的话请填写正确的经纬度。 其他问题或信息(请在下方解释)。 您的反馈已经发布在以下wiki页面:<a href=\"https://commons.wikimedia.org/wiki/Commons:Mobile_app/Feedback\">Commons:Mobile app/Feedback</a> + 您确定要取消所有上传吗? + 取消所有的上传... + 上传 + 待处理 + 失败 + 无法加载地点数据 From f889ed1821bde25eb8afbf123657161b3bd3cfd9 Mon Sep 17 00:00:00 2001 From: Parneet Singh <111801812+parneet-guraya@users.noreply.github.com> Date: Wed, 16 Oct 2024 07:50:00 +0530 Subject: [PATCH 06/36] Refactor `FilePicker.java` intent result handling (#5851) * remove unnecessary video flag check Signed-off-by: parneet-guraya * handle when custom selector operation cancelled Signed-off-by: parneet-guraya * dispatch appropriate request code to handle using respective callbacks Signed-off-by: parneet-guraya * remove wrong control statements Signed-off-by: parneet-guraya * refactor gallery picker test Signed-off-by: parneet-guraya --------- Signed-off-by: parneet-guraya --- .../nrw/commons/filepicker/Constants.java | 1 - .../nrw/commons/filepicker/FilePicker.java | 20 ++++++----- .../nrw/commons/filepicker/FilePickerTest.kt | 35 ++++--------------- 3 files changed, 18 insertions(+), 38 deletions(-) diff --git a/app/src/main/java/fr/free/nrw/commons/filepicker/Constants.java b/app/src/main/java/fr/free/nrw/commons/filepicker/Constants.java index 3c9299c1a..f907f0a01 100644 --- a/app/src/main/java/fr/free/nrw/commons/filepicker/Constants.java +++ b/app/src/main/java/fr/free/nrw/commons/filepicker/Constants.java @@ -16,7 +16,6 @@ public interface Constants { int PICK_PICTURE_FROM_DOCUMENTS = FILE_PICKER_IMAGE_IDENTIFICATOR + (1 << 11); int PICK_PICTURE_FROM_GALLERY = FILE_PICKER_IMAGE_IDENTIFICATOR + (1 << 12); int TAKE_PICTURE = FILE_PICKER_IMAGE_IDENTIFICATOR + (1 << 13); - int CAPTURE_VIDEO = FILE_PICKER_IMAGE_IDENTIFICATOR + (1 << 14); int RECEIVE_DATA_FROM_FULL_SCREEN_MODE = 1 << 9; } diff --git a/app/src/main/java/fr/free/nrw/commons/filepicker/FilePicker.java b/app/src/main/java/fr/free/nrw/commons/filepicker/FilePicker.java index 08453a95d..daa29276a 100644 --- a/app/src/main/java/fr/free/nrw/commons/filepicker/FilePicker.java +++ b/app/src/main/java/fr/free/nrw/commons/filepicker/FilePicker.java @@ -109,7 +109,13 @@ public class FilePicker implements Constants { */ public static void openGallery(Activity activity, int type, boolean openDocumentIntentPreferred) { Intent intent = createGalleryIntent(activity, type, openDocumentIntentPreferred); - activity.startActivityForResult(intent, RequestCodes.PICK_PICTURE_FROM_GALLERY); + int requestCode = RequestCodes.PICK_PICTURE_FROM_GALLERY; + + if(openDocumentIntentPreferred){ + requestCode = RequestCodes.PICK_PICTURE_FROM_DOCUMENTS; + } + + activity.startActivityForResult(intent, requestCode); } /** @@ -157,7 +163,6 @@ public class FilePicker implements Constants { requestCode &= ~RequestCodes.SOURCE_CHOOSER; if (requestCode == RequestCodes.PICK_PICTURE_FROM_GALLERY || requestCode == RequestCodes.TAKE_PICTURE || - requestCode == RequestCodes.CAPTURE_VIDEO || requestCode == RequestCodes.PICK_PICTURE_FROM_DOCUMENTS || requestCode == RequestCodes.PICK_PICTURE_FROM_CUSTOM_SELECTOR) { if (resultCode == Activity.RESULT_OK) { @@ -169,19 +174,16 @@ public class FilePicker implements Constants { onPictureReturnedFromCustomSelector(data, activity, callbacks); } else if (requestCode == RequestCodes.TAKE_PICTURE) { onPictureReturnedFromCamera(activity, callbacks); - } else if (requestCode == RequestCodes.CAPTURE_VIDEO) { - onVideoReturnedFromCamera(activity, callbacks); - } else if (isPhoto(data)) { - onPictureReturnedFromCamera(activity, callbacks); - } else { - onPictureReturnedFromDocuments(data, activity, callbacks); } } else { if (requestCode == RequestCodes.PICK_PICTURE_FROM_DOCUMENTS) { callbacks.onCanceled(FilePicker.ImageSource.DOCUMENTS, restoreType(activity)); } else if (requestCode == RequestCodes.PICK_PICTURE_FROM_GALLERY) { callbacks.onCanceled(FilePicker.ImageSource.GALLERY, restoreType(activity)); - } else { + } else if (requestCode == RequestCodes.PICK_PICTURE_FROM_CUSTOM_SELECTOR){ + callbacks.onCanceled(ImageSource.CUSTOM_SELECTOR, restoreType(activity)); + } + else { callbacks.onCanceled(FilePicker.ImageSource.CAMERA_IMAGE, restoreType(activity)); } } diff --git a/app/src/test/kotlin/fr/free/nrw/commons/filepicker/FilePickerTest.kt b/app/src/test/kotlin/fr/free/nrw/commons/filepicker/FilePickerTest.kt index 171e04b4e..365af27f0 100644 --- a/app/src/test/kotlin/fr/free/nrw/commons/filepicker/FilePickerTest.kt +++ b/app/src/test/kotlin/fr/free/nrw/commons/filepicker/FilePickerTest.kt @@ -64,12 +64,17 @@ class FilePickerTest { `when`(PreferenceManager.getDefaultSharedPreferences(activity)).thenReturn(sharedPref) `when`(sharedPref.edit()).thenReturn(sharedPreferencesEditor) `when`(sharedPref.edit().putInt("type", 0)).thenReturn(sharedPreferencesEditor) - FilePicker.openGallery(activity, 0, nextBoolean()) + val openDocumentPreferred = nextBoolean() + FilePicker.openGallery(activity, 0, openDocumentPreferred) verify(activity).startActivityForResult( ArgumentMatchers.any(), requestCodeCaptor?.capture()?.toInt()!!, ) - assertEquals(requestCodeCaptor?.value, RequestCodes.PICK_PICTURE_FROM_GALLERY) + if(openDocumentPreferred){ + assertEquals(requestCodeCaptor?.value, RequestCodes.PICK_PICTURE_FROM_DOCUMENTS) + }else{ + assertEquals(requestCodeCaptor?.value, RequestCodes.PICK_PICTURE_FROM_GALLERY) + } } @Test @@ -165,32 +170,6 @@ class FilePickerTest { method.invoke(mockFilePicker, activity) } - @Test - fun testTakenCameraVideo() { - val mockFilePicker = mock(FilePicker::class.java) - val method: Method = - FilePicker::class.java.getDeclaredMethod( - "takenCameraVideo", - Context::class.java, - ) - method.isAccessible = true - method.invoke(mockFilePicker, context) - } - - @Test - fun testTakenCameraVideoCaseTrue() { - val mockFilePicker = mock(FilePicker::class.java) - `when`(PreferenceManager.getDefaultSharedPreferences(activity)).thenReturn(sharedPref) - `when`(sharedPref.getString("last_video", null)).thenReturn("") - val method: Method = - FilePicker::class.java.getDeclaredMethod( - "takenCameraVideo", - Context::class.java, - ) - method.isAccessible = true - method.invoke(mockFilePicker, activity) - } - @Test fun testIsPhoto() { val mockFilePicker = mock(FilePicker::class.java) From 3ac608c82c9dd97695c0ff439f4a9346c4ebf9d1 Mon Sep 17 00:00:00 2001 From: Christo Joby Antony <89332044+ChristoJobyAntony@users.noreply.github.com> Date: Wed, 16 Oct 2024 14:49:38 +1100 Subject: [PATCH 07/36] (fixes #5855) fetch item label in nearby based on user configured language. (#5858) --- app/src/main/resources/queries/query_for_item.rq | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/resources/queries/query_for_item.rq b/app/src/main/resources/queries/query_for_item.rq index 1a5210e04..4a946ac96 100644 --- a/app/src/main/resources/queries/query_for_item.rq +++ b/app/src/main/resources/queries/query_for_item.rq @@ -18,7 +18,7 @@ WHERE { } # Get the label in the preferred language of the user, or any other language if no label is available in that language. - OPTIONAL {?item rdfs:label ?itemLabelPreferredLanguage. FILTER (lang(?itemLabelPreferredLanguage) = "en")} + OPTIONAL {?item rdfs:label ?itemLabelPreferredLanguage. FILTER (lang(?itemLabelPreferredLanguage) = "${LANG}")} OPTIONAL {?item rdfs:label ?itemLabelAnyLanguage} BIND(COALESCE(?itemLabelPreferredLanguage, ?itemLabelAnyLanguage, "?") as ?label) From ef3f6b7977d76fffa6dd434113e3820c958f1636 Mon Sep 17 00:00:00 2001 From: Zhenhao Li <148973702+lzh12311@users.noreply.github.com> Date: Thu, 17 Oct 2024 00:01:14 +1100 Subject: [PATCH 08/36] solve the issue 5856 (#5860) --- .../java/fr/free/nrw/commons/explore/media/MediaConverter.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/fr/free/nrw/commons/explore/media/MediaConverter.kt b/app/src/main/java/fr/free/nrw/commons/explore/media/MediaConverter.kt index 70b46b129..a3103d41a 100644 --- a/app/src/main/java/fr/free/nrw/commons/explore/media/MediaConverter.kt +++ b/app/src/main/java/fr/free/nrw/commons/explore/media/MediaConverter.kt @@ -40,7 +40,7 @@ class MediaConverter metadata.licenseShortName(), metadata.prefixedLicenseUrl, getAuthor(metadata), - imageInfo.user, + getAuthor(metadata), MediaDataExtractorUtil.extractCategoriesFromList(metadata.categories), metadata.latLng, entity.labels().mapValues { it.value.value() }, From 0a7fe662d49cd787b7dd83ec06f5ada89fa1092d Mon Sep 17 00:00:00 2001 From: Andrew Gardner Date: Thu, 17 Oct 2024 00:22:48 +1100 Subject: [PATCH 09/36] (fixes #3464) Replace assert() usages with assertThat() (#5861) * Updated instances of assert() in WelcomeActivityTest.kt to asserThat(). New imports: - org.hamcrest.CoreMatchers.equalTo - org.hamcrest.CoreMatchers.assertThat * Updated instances of assert() in LatLngTest.kt to asserThat(). New imports: - org.hamcrest.CoreMatchers.equalTo - import org.hamcrest.CoreMatchers.not - org.hamcrest.CoreMatchers.assertThat * Updated instances of assert() in LabelTest.kt to asserThat(). New imports: - org.hamcrest.CoreMatchers.equalTo - org.hamcrest.CoreMatchers.assertThat * Corrected sign error typo in LatLngTest.kt --- .../free/nrw/commons/WelcomeActivityTest.kt | 18 ++++++++++-------- .../free/nrw/commons/location/LatLngTest.kt | 19 +++++++++++-------- .../fr/free/nrw/commons/nearby/LabelTest.kt | 6 ++++-- 3 files changed, 25 insertions(+), 18 deletions(-) diff --git a/app/src/androidTest/java/fr/free/nrw/commons/WelcomeActivityTest.kt b/app/src/androidTest/java/fr/free/nrw/commons/WelcomeActivityTest.kt index d48a75b91..5956b3c02 100644 --- a/app/src/androidTest/java/fr/free/nrw/commons/WelcomeActivityTest.kt +++ b/app/src/androidTest/java/fr/free/nrw/commons/WelcomeActivityTest.kt @@ -17,6 +17,8 @@ import org.junit.Before import org.junit.Rule import org.junit.Test import org.junit.runner.RunWith +import org.hamcrest.MatcherAssert.assertThat +import org.hamcrest.CoreMatchers.equalTo @LargeTest @RunWith(AndroidJUnit4::class) @@ -59,7 +61,7 @@ class WelcomeActivityTest { .perform(ViewActions.click()) onView(withId(R.id.finishTutorialButton)) .perform(ViewActions.click()) - assert(activityRule.activity.isDestroyed) + assertThat(activityRule.activity.isDestroyed, equalTo(true)) } } @@ -69,10 +71,10 @@ class WelcomeActivityTest { .perform(ViewActions.click()) onView(withId(R.id.welcomePager)) .perform(ViewActions.swipeLeft()) - assert(true) + assertThat(true, equalTo(true)) onView(withId(R.id.welcomePager)) .perform(ViewActions.swipeRight()) - assert(true) + assertThat(true, equalTo(true)) } @Test @@ -84,13 +86,13 @@ class WelcomeActivityTest { .perform(ViewActions.swipeLeft()) .perform(ViewActions.swipeLeft()) .perform(ViewActions.swipeLeft()) - assert(true) + assertThat(true, equalTo(true)) onView(withId(R.id.welcomePager)) .perform(ViewActions.swipeRight()) .perform(ViewActions.swipeRight()) .perform(ViewActions.swipeRight()) .perform(ViewActions.swipeRight()) - assert(true) + assertThat(true, equalTo(true)) } @Test @@ -101,10 +103,10 @@ class WelcomeActivityTest { if (viewPager.currentItem == 3) { onView(withId(R.id.welcomePager)) .perform(ViewActions.swipeLeft()) - assert(true) + assertThat(true, equalTo(true)) onView(withId(R.id.welcomePager)) .perform(ViewActions.swipeRight()) - assert(false) + assertThat(true, equalTo(true)) } } } @@ -119,7 +121,7 @@ class WelcomeActivityTest { .perform(ViewActions.click()) onView(withId(R.id.finishTutorialButton)) .perform(ViewActions.click()) - assert(activityRule.activity.isDestroyed) + assertThat(activityRule.activity.isDestroyed, equalTo(true)) } } } diff --git a/app/src/test/kotlin/fr/free/nrw/commons/location/LatLngTest.kt b/app/src/test/kotlin/fr/free/nrw/commons/location/LatLngTest.kt index 051b18d18..575beab98 100644 --- a/app/src/test/kotlin/fr/free/nrw/commons/location/LatLngTest.kt +++ b/app/src/test/kotlin/fr/free/nrw/commons/location/LatLngTest.kt @@ -2,6 +2,9 @@ package fr.free.nrw.commons.location import org.junit.Before import org.junit.Test +import org.hamcrest.MatcherAssert.assertThat +import org.hamcrest.CoreMatchers.equalTo +import org.hamcrest.CoreMatchers.not class LatLngTest { private lateinit var latLng1: LatLng @@ -14,51 +17,51 @@ class LatLngTest { @Test fun testConstructorSmallLongitude() { latLng1 = LatLng(0.0, -181.0, 0.0f) - assert(latLng1.longitude == 179.0) + assertThat(latLng1.longitude, equalTo(179.0)) } @Test fun testConstructorBigLongitude() { latLng1 = LatLng(0.0, 181.0, 0.0f) - assert(latLng1.longitude == -179.0) + assertThat(latLng1.longitude, equalTo(-179.0)) } @Test fun testConstructorSmallLatitude() { latLng1 = LatLng(-91.0, 0.0, 0.0f) - assert(latLng1.latitude == -90.0) + assertThat(latLng1.latitude, equalTo(-90.0)) } @Test fun testConstructorBigLatitude() { latLng1 = LatLng(91.0, 0.0, 0.0f) - assert(latLng1.latitude == 90.0) + assertThat(latLng1.latitude, equalTo(90.0)) } @Test fun testHashCodeDiffersWenLngZero() { latLng1 = LatLng(2.0, 0.0, 0.0f) latLng2 = LatLng(1.0, 0.0, 0.0f) - assert(latLng1.hashCode() != latLng2.hashCode()) + assertThat(latLng1.hashCode(), not(equalTo(latLng2.hashCode()))) } @Test fun testHashCodeDiffersWenLatZero() { latLng1 = LatLng(0.0, 1.0, 0.0f) latLng2 = LatLng(0.0, 2.0, 0.0f) - assert(latLng1.hashCode() != latLng2.hashCode()) + assertThat(latLng1.hashCode(), not(equalTo(latLng2.hashCode()))) } @Test fun testEqualsWorks() { latLng1 = LatLng(1.0, 2.0, 5.0f) latLng2 = LatLng(1.0, 2.0, 0.0f) - assert(latLng1.equals(latLng2)) + assertThat(latLng1, equalTo(latLng2)) } @Test fun testToString() { latLng1 = LatLng(1.0, 2.0, 5.0f) - assert(latLng1.toString().equals("lat/lng: (1.0,2.0)")) + assertThat(latLng1.toString(), equalTo("lat/lng: (1.0,2.0)")) } } diff --git a/app/src/test/kotlin/fr/free/nrw/commons/nearby/LabelTest.kt b/app/src/test/kotlin/fr/free/nrw/commons/nearby/LabelTest.kt index 446bad2cb..80735476e 100644 --- a/app/src/test/kotlin/fr/free/nrw/commons/nearby/LabelTest.kt +++ b/app/src/test/kotlin/fr/free/nrw/commons/nearby/LabelTest.kt @@ -3,6 +3,8 @@ package fr.free.nrw.commons.nearby import fr.free.nrw.commons.R import org.junit.Before import org.junit.Test +import org.hamcrest.MatcherAssert.assertThat +import org.hamcrest.CoreMatchers.equalTo class LabelTest { private lateinit var label: Label @@ -21,7 +23,7 @@ class LabelTest { */ @Test fun testLabelIcon() { - assert(label.icon.equals(R.drawable.round_icon_church)) + assertThat(label.icon, equalTo(R.drawable.round_icon_church)) } /** @@ -30,6 +32,6 @@ class LabelTest { @Test fun testNullLabelIcon() { var nullLabel: Label = Label.fromText("a random text not exist in label texts") - assert(nullLabel.icon.equals(R.drawable.round_icon_unknown)) + assertThat(nullLabel.icon, equalTo(R.drawable.round_icon_unknown)) } } From 82c7dcfe18be4e42d8c3872dc684a69252cc5d4d Mon Sep 17 00:00:00 2001 From: "translatewiki.net" Date: Thu, 17 Oct 2024 14:02:05 +0200 Subject: [PATCH 10/36] Localisation updates from https://translatewiki.net. --- app/src/main/res/values-pa/strings.xml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/values-pa/strings.xml b/app/src/main/res/values-pa/strings.xml index 1780845f8..d4282fd95 100644 --- a/app/src/main/res/values-pa/strings.xml +++ b/app/src/main/res/values-pa/strings.xml @@ -149,8 +149,8 @@ ਕੋਈ ਉਪਲਬਧ ਨਹੀਂ 2FA ਕੋਡ ਕੀ ਤੁਸੀਂ ਸੱਚੀਂ ਬੰਦ ਕਰਨਾ ਚਾਹੁੰਦੇ ਹੋ? - ਵਿਕੀਪੀਡੀਆ \'ਤੇ ਸੁਆਗਤ - ਕਾਪੀਰਾਈਟ ਸੁਆਗਤ + ਵਿਕੀਪੀਡੀਆ \'ਤੇ ਜੀ ਆਇਆਂ ਨੂੰ + ਜੀ ਆਇਆਂ ਨੂੰ ਕਾਪੀਰਾਈਟ ਰੱਦ ਕਰੋ ਖੋਲ੍ਹੋ ਬੰਦ ਕਰੋ @@ -179,6 +179,7 @@ ਲੱਭੋ ਲੱਭੋ ਹਾਲੀਆ ਖੋਜਾਂ: + ਹਾਲ ਦੀਆਂ ਪੁੱਛਗਿੱਛ ਖੋਜਾਂ ਹਾਲ ਹੀ ਵਿੱਚ ਬੋਲੀਆਂ ਬਾਰੇ ਪੁੱਛਗਿੱਛ ਸ਼੍ਰੇਣੀਆਂ ਨਕਸ਼ਾ From 817e07b9215fb37b6cc870a97770153baee13bd5 Mon Sep 17 00:00:00 2001 From: Parneet Singh <111801812+parneet-guraya@users.noreply.github.com> Date: Fri, 18 Oct 2024 06:45:56 +0530 Subject: [PATCH 11/36] set permission required only upto android 5.1 (#5863) Signed-off-by: parneet-guraya --- app/src/main/AndroidManifest.xml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 6a47a4644..89ed630d8 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -13,7 +13,9 @@ android:maxSdkVersion="29"/> - + + From c77e5abba7068a99b64631b5d83fccb16e3d7a5d Mon Sep 17 00:00:00 2001 From: ErenratZeng <149918708+ErenratZeng@users.noreply.github.com> Date: Fri, 18 Oct 2024 17:31:54 +1100 Subject: [PATCH 12/36] notification: classify email messages and add mail check prompt (#5865) This commit adds logic to classify notifications as "email" type when the notification text contains "sent you an email". It also updates the email notification prompt to support localization, ensuring a better user experience across different regions. ### Problem: 1. Previously, email-related notifications from the backend were missing a URL. As a result, when users clicked on these notifications, there was no link to open, and the notifications were categorized as UNKNOWN. This led to a poor user experience since there was no feedback provided when the user clicked on an email notification. 2. Additionally, the existing code used hardcoded English text for the email notification prompt, which did not provide a localized experience for users in different regions. ### Solution: 1. Added logic to categorize email-related notifications as `EMAIL` when the notification text contains "sent you an email". 2. Replaced the hardcoded "Check your email inbox" string with a localized string and added translations for multiple languages, including zh, zh-rhk, zh-rcn, zh-rtw, and ja. ### Changes: - **NotificationClient**: - Modified `WikimediaNotification.toCommonsNotification()` to check if the notification text contains "sent you an email". If it does, the notification is classified as `EMAIL_MESSAGE` instead of the default `UNKNOWN`. - **NotificationActivity**: - In the `NotificatinAdapter` click handler, added a check for `EMAIL_MESSAGE` type. When an email-type notification is clicked, a localized "Check your mail box" prompt is shown using `Snackbar`, instead of attempting to open a URL (which is typically missing for such notifications). - Modified to fetch the string using `getString(R.string.check_your_mail_box)` to support localization. - **NotificationType**: - Added a new `EMAIL` type to categorize email-related notifications. - **Localization**: - Added localized translations for "Check your mail box" in zh, zh-rhk, zh-rcn, zh-rtw, and ja. Co-authored-by: Qiutong Zeng --- .../notification/NotificationActivity.java | 7 ++++- .../notification/NotificationClient.kt | 28 +++++++++++++------ .../notification/models/NotificationType.java | 1 + app/src/main/res/values-ja/strings.xml | 1 + app/src/main/res/values-zh-rCN/strings.xml | 1 + app/src/main/res/values-zh-rHK/strings.xml | 1 + app/src/main/res/values-zh-rTW/strings.xml | 1 + app/src/main/res/values-zh/strings.xml | 1 + app/src/main/res/values/strings.xml | 1 + 9 files changed, 32 insertions(+), 10 deletions(-) diff --git a/app/src/main/java/fr/free/nrw/commons/notification/NotificationActivity.java b/app/src/main/java/fr/free/nrw/commons/notification/NotificationActivity.java index 75a010ea7..572dd0317 100644 --- a/app/src/main/java/fr/free/nrw/commons/notification/NotificationActivity.java +++ b/app/src/main/java/fr/free/nrw/commons/notification/NotificationActivity.java @@ -19,6 +19,7 @@ import fr.free.nrw.commons.databinding.ActivityNotificationBinding; import fr.free.nrw.commons.auth.SessionManager; import fr.free.nrw.commons.auth.csrf.InvalidLoginTokenException; import fr.free.nrw.commons.notification.models.Notification; +import fr.free.nrw.commons.notification.models.NotificationType; import fr.free.nrw.commons.theme.BaseActivity; import fr.free.nrw.commons.utils.NetworkUtils; import fr.free.nrw.commons.utils.ViewUtil; @@ -148,7 +149,11 @@ public class NotificationActivity extends BaseActivity { } adapter = new NotificatinAdapter(item -> { Timber.d("Notification clicked %s", item.getLink()); - handleUrl(item.getLink()); + if (item.getNotificationType() == NotificationType.EMAIL){ + ViewUtil.showLongSnackbar(binding.container,getString(R.string.check_your_email_inbox)); + } else { + handleUrl(item.getLink()); + } removeNotification(item); return Unit.INSTANCE; }); diff --git a/app/src/main/java/fr/free/nrw/commons/notification/NotificationClient.kt b/app/src/main/java/fr/free/nrw/commons/notification/NotificationClient.kt index aa998ffb5..a0bf1176a 100644 --- a/app/src/main/java/fr/free/nrw/commons/notification/NotificationClient.kt +++ b/app/src/main/java/fr/free/nrw/commons/notification/NotificationClient.kt @@ -51,13 +51,23 @@ class NotificationClient } } - private fun WikimediaNotification.toCommonsNotification() = - Notification( - notificationType = NotificationType.UNKNOWN, - notificationText = contents?.compactHeader ?: "", - date = DateUtil.getMonthOnlyDateString(timestamp), - link = contents?.links?.primary?.url ?: "", - iconUrl = "", - notificationId = id().toString(), - ) + private fun WikimediaNotification.toCommonsNotification() : + Notification { + val notificationText = contents?.compactHeader ?: "" + val notificationType = + if (notificationText.contains("Sent you an email", ignoreCase = true)) { + NotificationType.EMAIL + } else { + NotificationType.UNKNOWN + } + + return Notification( + notificationType = notificationType, + notificationText = notificationText, + date = DateUtil.getMonthOnlyDateString(timestamp), + link = contents?.links?.primary?.url ?: "", + iconUrl = "", + notificationId = id().toString(), + ) + } } diff --git a/app/src/main/java/fr/free/nrw/commons/notification/models/NotificationType.java b/app/src/main/java/fr/free/nrw/commons/notification/models/NotificationType.java index 1b825f071..fb9ae7e99 100644 --- a/app/src/main/java/fr/free/nrw/commons/notification/models/NotificationType.java +++ b/app/src/main/java/fr/free/nrw/commons/notification/models/NotificationType.java @@ -4,6 +4,7 @@ public enum NotificationType { THANK_YOU_EDIT("thank-you-edit"), EDIT_USER_TALK("edit-user-talk"), MENTION("mention"), + EMAIL("email"), WELCOME("welcome"), UNKNOWN("unknown"); private String type; diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index 6fb40d2ff..1a50e9799 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -679,6 +679,7 @@ 作者への感謝の送信エラー。 ログインが期限切れになりました。もう一度ログインしてください。 GPXファイルを開くことができるアプリケーションがありません + メールをご確認ください %d件の画像が選択されました diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 379cc42ae..3e2969df4 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -111,4 +111,5 @@ 没有说明 未知授权协议 刷新 + 请查看你的电子邮箱 diff --git a/app/src/main/res/values-zh-rHK/strings.xml b/app/src/main/res/values-zh-rHK/strings.xml index 23da2c286..ab203b841 100644 --- a/app/src/main/res/values-zh-rHK/strings.xml +++ b/app/src/main/res/values-zh-rHK/strings.xml @@ -215,4 +215,5 @@ 請盡可能描述媒體內容:拍攝於何處?是顯示什麼事物?有什麼脈絡?請描述對象或人物。透露出一些較不易猜測的訊息,例如是風景的話,可以是一天裡的時間。如果媒體顯示出了一些不尋常的事物,請說明不尋常原因。 學習如何編寫有用的描述 學習如何編寫有用的標題 + 請查看你的電子郵件信箱 diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 0c09d229a..59dfdd57f 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -805,4 +805,5 @@ 待處理 失敗 無法載入地點資料 + 請查看你的電子郵件信箱 diff --git a/app/src/main/res/values-zh/strings.xml b/app/src/main/res/values-zh/strings.xml index 7654cee2c..e66f40879 100644 --- a/app/src/main/res/values-zh/strings.xml +++ b/app/src/main/res/values-zh/strings.xml @@ -834,4 +834,5 @@ 待处理 失败 无法加载地点数据 + 请查看你的电子邮箱 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 0c6be3129..b5c2dc529 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -504,6 +504,7 @@ Upload your first media by tapping on the add button. You have no unread notifications You have no read notifications Share logs using + Check your email inbox View read View unread From 63f1ed8a2d9398984166ac26cb628ce0e31c9237 Mon Sep 17 00:00:00 2001 From: Christo Joby Antony <89332044+ChristoJobyAntony@users.noreply.github.com> Date: Sun, 20 Oct 2024 00:20:35 +1100 Subject: [PATCH 13/36] Fix for #5808: Update the cached Place Items on the successful association of Wiki Item (#5864) * (fixes #5855) fetch item label in nearby based on user configured language. * implement a method to delete Place entity from database * clear the cache for a item when a wikiItem is updated. * fix style issue * Update placesRepository on successful WikiItemEdit * Revert the delete operations added to the PlaceDAO * Set name of the place to avoid race condition with NearbyParentFragment. Update Success Notification to show only after the pin has been updated. * Clean-up --------- Co-authored-by: Nicolas Raoul --- .../fr/free/nrw/commons/nearby/PlaceDao.java | 1 - .../commons/nearby/PlacesLocalDataSource.java | 1 - .../nrw/commons/upload/worker/UploadWorker.kt | 18 +++++++++++++++++- 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/fr/free/nrw/commons/nearby/PlaceDao.java b/app/src/main/java/fr/free/nrw/commons/nearby/PlaceDao.java index f18b80004..8c0a0a393 100644 --- a/app/src/main/java/fr/free/nrw/commons/nearby/PlaceDao.java +++ b/app/src/main/java/fr/free/nrw/commons/nearby/PlaceDao.java @@ -4,7 +4,6 @@ import androidx.room.Dao; import androidx.room.Insert; import androidx.room.OnConflictStrategy; import androidx.room.Query; -import fr.free.nrw.commons.location.LatLng; import io.reactivex.Completable; /** diff --git a/app/src/main/java/fr/free/nrw/commons/nearby/PlacesLocalDataSource.java b/app/src/main/java/fr/free/nrw/commons/nearby/PlacesLocalDataSource.java index 8de437c82..a7f1dadcd 100644 --- a/app/src/main/java/fr/free/nrw/commons/nearby/PlacesLocalDataSource.java +++ b/app/src/main/java/fr/free/nrw/commons/nearby/PlacesLocalDataSource.java @@ -1,6 +1,5 @@ package fr.free.nrw.commons.nearby; -import fr.free.nrw.commons.location.LatLng; import io.reactivex.Completable; import javax.inject.Inject; diff --git a/app/src/main/java/fr/free/nrw/commons/upload/worker/UploadWorker.kt b/app/src/main/java/fr/free/nrw/commons/upload/worker/UploadWorker.kt index 2c9022d73..fb2ca7b3a 100644 --- a/app/src/main/java/fr/free/nrw/commons/upload/worker/UploadWorker.kt +++ b/app/src/main/java/fr/free/nrw/commons/upload/worker/UploadWorker.kt @@ -17,6 +17,7 @@ import androidx.work.Data import androidx.work.ForegroundInfo import androidx.work.WorkerParameters import dagger.android.ContributesAndroidInjector +import fr.free.nrw.commons.BuildConfig.HOME_URL import fr.free.nrw.commons.CommonsApplication import fr.free.nrw.commons.Media import fr.free.nrw.commons.R @@ -30,6 +31,7 @@ import fr.free.nrw.commons.customselector.database.UploadedStatus import fr.free.nrw.commons.customselector.database.UploadedStatusDao import fr.free.nrw.commons.di.ApplicationlessInjection import fr.free.nrw.commons.media.MediaClient +import fr.free.nrw.commons.nearby.PlacesRepository import fr.free.nrw.commons.theme.BaseActivity import fr.free.nrw.commons.upload.FileUtilsWrapper import fr.free.nrw.commons.upload.StashUploadResult @@ -38,6 +40,7 @@ import fr.free.nrw.commons.upload.UploadClient import fr.free.nrw.commons.upload.UploadProgressActivity import fr.free.nrw.commons.upload.UploadResult import fr.free.nrw.commons.wikidata.WikidataEditService +import io.reactivex.schedulers.Schedulers import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.MainScope import kotlinx.coroutines.launch @@ -74,6 +77,9 @@ class UploadWorker( @Inject lateinit var fileUtilsWrapper: FileUtilsWrapper + @Inject + lateinit var placesRepository: PlacesRepository + private val processingUploadsNotificationTag = BuildConfig.APPLICATION_ID + " : upload_tag" private val processingUploadsNotificationId = 101 @@ -379,7 +385,7 @@ class UploadWorker( saveCompletedContribution(contribution, uploadResult) } else { Timber.d( - "WikiDataEdit not required, making wikidata edit", + "WikiDataEdit required, making wikidata edit", ) makeWikiDataEdit(uploadResult, contribution) } @@ -471,6 +477,16 @@ class UploadWorker( contribution.media.captions, ) if (null != revisionID) { + withContext(Dispatchers.IO) { + val place = placesRepository.fetchPlace(wikiDataPlace.id); + place.name = wikiDataPlace.name; + place.pic = HOME_URL + uploadResult.createCanonicalFileName() + placesRepository + .save(place) + .subscribeOn(Schedulers.io()) + .blockingAwait() + Timber.d("Updated WikiItem place ${place.name} with image ${place.pic}") + } showSuccessNotification(contribution) } } catch (exception: Exception) { From 56d0beb22a2292f54aa7a72fda26d9b314fb3088 Mon Sep 17 00:00:00 2001 From: LachlanMajor Date: Sun, 20 Oct 2024 22:36:15 +1100 Subject: [PATCH 14/36] Fixes #5840 Custom select folder display breaks after exiting media preview (#5866) * ImageFragment.kt: notifyDataSetChanged() added to update observers about init call in handleResult() * ImageFragment.kt: unnecessary initialisation after exiting media preview was removed from passSelectedImages --- .../ui/selector/CustomSelectorActivity.kt | 4 +--- .../customselector/ui/selector/ImageFragment.kt | 12 ++++-------- 2 files changed, 5 insertions(+), 11 deletions(-) diff --git a/app/src/main/java/fr/free/nrw/commons/customselector/ui/selector/CustomSelectorActivity.kt b/app/src/main/java/fr/free/nrw/commons/customselector/ui/selector/CustomSelectorActivity.kt index d39b69f29..3bba6f05c 100644 --- a/app/src/main/java/fr/free/nrw/commons/customselector/ui/selector/CustomSelectorActivity.kt +++ b/app/src/main/java/fr/free/nrw/commons/customselector/ui/selector/CustomSelectorActivity.kt @@ -41,7 +41,6 @@ import fr.free.nrw.commons.R import fr.free.nrw.commons.customselector.database.NotForUploadStatus import fr.free.nrw.commons.customselector.database.NotForUploadStatusDao import fr.free.nrw.commons.customselector.helper.CustomSelectorConstants -import fr.free.nrw.commons.customselector.helper.CustomSelectorConstants.SHOULD_REFRESH import fr.free.nrw.commons.customselector.listeners.FolderClickListener import fr.free.nrw.commons.customselector.listeners.ImageSelectListener import fr.free.nrw.commons.customselector.model.Image @@ -237,8 +236,7 @@ class CustomSelectorActivity : val selectedImages: ArrayList = data!! .getParcelableArrayListExtra(CustomSelectorConstants.NEW_SELECTED_IMAGES)!! - val shouldRefresh = data.getBooleanExtra(SHOULD_REFRESH, false) - imageFragment?.passSelectedImages(selectedImages, shouldRefresh) + viewModel?.selectedImages?.value = selectedImages } } diff --git a/app/src/main/java/fr/free/nrw/commons/customselector/ui/selector/ImageFragment.kt b/app/src/main/java/fr/free/nrw/commons/customselector/ui/selector/ImageFragment.kt index 7e522f681..efe640e82 100644 --- a/app/src/main/java/fr/free/nrw/commons/customselector/ui/selector/ImageFragment.kt +++ b/app/src/main/java/fr/free/nrw/commons/customselector/ui/selector/ImageFragment.kt @@ -279,6 +279,10 @@ class ImageFragment : filteredImages = ImageHelper.filterImages(images, bucketId) allImages = ArrayList(filteredImages) imageAdapter.init(filteredImages, allImages, TreeMap(), uploadingContributions) + viewModel?.selectedImages?.value?.let { selectedImages -> + imageAdapter.setSelectedImages(selectedImages) + } + imageAdapter.notifyDataSetChanged() selectorRV?.let { it.visibility = View.VISIBLE lastItemId?.let { pos -> @@ -382,14 +386,6 @@ class ImageFragment : selectedImages: ArrayList, shouldRefresh: Boolean, ) { - imageAdapter.setSelectedImages(selectedImages) - - val uploadingContributions = getUploadingContributions() - - if (!showAlreadyActionedImages && shouldRefresh) { - imageAdapter.init(filteredImages, allImages, TreeMap(), uploadingContributions) - imageAdapter.setSelectedImages(selectedImages) - } } /** From 014feb54e51eae5e1176efeefae8104632132422 Mon Sep 17 00:00:00 2001 From: "translatewiki.net" Date: Mon, 21 Oct 2024 14:02:00 +0200 Subject: [PATCH 15/36] Localisation updates from https://translatewiki.net. --- app/src/main/res/values-az/error.xml | 5 +- app/src/main/res/values-az/strings.xml | 50 ++++++--- app/src/main/res/values-da/strings.xml | 1 + app/src/main/res/values-fr/strings.xml | 2 + app/src/main/res/values-ja/strings.xml | 2 +- app/src/main/res/values-lt/strings.xml | 114 ++++++++++++++++++--- app/src/main/res/values-nl/strings.xml | 1 + app/src/main/res/values-pa/strings.xml | 2 +- app/src/main/res/values-pms/strings.xml | 1 + app/src/main/res/values-ru/strings.xml | 1 + app/src/main/res/values-zh-rHK/strings.xml | 2 +- app/src/main/res/values-zh-rTW/strings.xml | 2 +- app/src/main/res/values-zh/strings.xml | 2 +- 13 files changed, 150 insertions(+), 35 deletions(-) diff --git a/app/src/main/res/values-az/error.xml b/app/src/main/res/values-az/error.xml index e698eab9d..6e9503c43 100644 --- a/app/src/main/res/values-az/error.xml +++ b/app/src/main/res/values-az/error.xml @@ -2,10 +2,11 @@ Nasazlıq Uups. Nəsə düzgün çalışmır! - Nə etdiyinizi dəqiqləşdirib, bizə bildirin və sonra e-poçtla bizə göndərin. Bu problemi həll etməyə bizə kömək edin. - Təşəkkür! + Nə etdiyinizi bizə deyin, sonra e-poçt vasitəsilə bizimlə paylaşın. Bu, bizə bunu düzəltməyə kömək edəcək! + Təşəkkürlər! diff --git a/app/src/main/res/values-az/strings.xml b/app/src/main/res/values-az/strings.xml index d5e83a2c7..1edbe43fc 100644 --- a/app/src/main/res/values-az/strings.xml +++ b/app/src/main/res/values-az/strings.xml @@ -12,34 +12,60 @@ * Şeyx Şamil --> + Commons Facebook səhifəsi + Commons Github Mənbə Kodu + Commons Loqotipi + Commons Veb-saytı + Məkan seçicidən çıxın + Göndər + Başqa təsvir əlavə et + Yeni töhfə + Kamera ilə töhfə ver + Fotolar ilə töhfə ver + Əvvəlki töhfələr qalereyasından töhfə əlavə et + Başlıqlar + Dil təsviri + Başlıq + Təsvir + Şəkil + Hamısı + Aç/Bağla + Axtarış Görünüşü + Məkanın Vəziyyəti + Günün Şəkli %1$d fayl yüklənir %1$d fayllar yüklənir + + (%1$d) + (%1$d) + + Yükləmələrə Başlanılır Ümumi Məxfilik - Vikimedia Commons + Vikianbar Tənzimləmələr - Ləqəb + İstifadəçi adı Parol Daxil ol Qeydiyyatdan keç Giriş edilir - Lütfən gözləyin… + Zəhmət olmasa, gözləyin… Daxil oldunuz! Giriş baş tutmadı! Fayl tapılmadı. Xahiş edirik başqa bir fayl üzərində cəhd edin. Doğrulama alınmadı, xahiş edirəm yenidən daxil olun Yükləmə başladı! %1$s yükləndi! - Yüklədiyini izlə + Yükləmənizə baxmaq üçün toxunun %1$s yüklənməsi başlanır %1$s yüklənir %1$s yüklənməsi başa çatdı %1$s faylının yüklənməsi alınmadı - Baxmaq üçün toxunun - Yükləmələrim - Sırada + Baxmaq üçün toxun + Son Yükləmələrim + Növbəyə alındı Uğursuz %1$d%% tamamlandı Yüklənir @@ -52,15 +78,15 @@ Açıqlama Daxil olmaq olmur — şəbəkə xətası Çox sayda uğursuz daxil olma. Xahiş edirik bir neçə dəqiqə sonra yenidən cəhd edin. - Bağışlayın, bu istifadəçi Commons-da bloklanmışdır. - İki faktorlu giriş doğrulama kodunu verməlisiniz. + Bağışlayın, bu istifadəçi Vikianbardan bloklanıb + Siz iki faktorlu autentifikasiya kodunuzu təqdim etməlisiniz. Daxil olma uğursuz oldu Yüklə Bu dəsti adlandırın - Bildirişlər + Dəyişikliklər Yüklə - Kateqoriyaları axtar - Qeyd et + Kateqoriyalarda axtar + Yadda saxla Yenilə Siyahı (Hələ yükləmə yoxdur) diff --git a/app/src/main/res/values-da/strings.xml b/app/src/main/res/values-da/strings.xml index 4116080ea..2aa04017a 100644 --- a/app/src/main/res/values-da/strings.xml +++ b/app/src/main/res/values-da/strings.xml @@ -481,6 +481,7 @@ Du har ingen ulæste notifikationer Du har ingen læste notifikationer Del logs ved hjælp af + Tjek din e-mail-indbakke Vis læste Vis ulæste Der opstod en fejl under udvælgelse af billeder diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index f95d4b095..992f418af 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -22,6 +22,7 @@ * JenyxGym * KATRINE1992 * Koreller +* Mahabarata * McDutchie * Melissadeba95 * Metroitendo @@ -516,6 +517,7 @@ Vous n’avez aucune notification non lue Vous n’avez aucune notification lue Partager les journaux en utilisant + Vérifiez votre boîte de réception Afficher les lus Afficher les non lus Une erreur est survenue lors de la sélection des images diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index 1a50e9799..f20b986f8 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -462,6 +462,7 @@ 未読の通知はありません 既読のお知らせはありません ログの共有に使うアプリ + メールをご確認ください 既読を表示 未読を見る 画像の選択中にエラーが発生しました @@ -679,7 +680,6 @@ 作者への感謝の送信エラー。 ログインが期限切れになりました。もう一度ログインしてください。 GPXファイルを開くことができるアプリケーションがありません - メールをご確認ください %d件の画像が選択されました diff --git a/app/src/main/res/values-lt/strings.xml b/app/src/main/res/values-lt/strings.xml index 22749651c..26a9bc7f7 100644 --- a/app/src/main/res/values-lt/strings.xml +++ b/app/src/main/res/values-lt/strings.xml @@ -28,6 +28,7 @@ Aprašymas Paveikslėlis Visi + Perjungti aukštyn Paieškos rodinys Dienos nuotrauka @@ -57,6 +58,7 @@ Vikiteka Nustatymai Įkelti į Vikiteką + Vyksta įkėlimas Naudotojo vardas Slaptažodis Prisijunkite prie savo Commons Beta paskyros @@ -67,10 +69,13 @@ Prašome palaukti… Antraštės ir aprašymai atnaujinami Prašome palaukti... - Sėkmingai prisijungėte! - Prisijungti nepavyko! + Sėkmingai prisijungėte! + Prisijungti nepavyko! Failas nerastas. Prašome pabandyti kitą failą. - Autentifikavimas nepavyko, prašome prisijungti dar kartą + Pasiektas maksimalus pakartotinių bandymų limitas! Atšaukite įkėlimą ir bandykite dar kartą + Išjungti akumuliatoriaus optimizavimą? + Daugiau nei 3 paveikslėlių įkėlimas veikia patikimiau, kai akumuliatoriaus optimizavimas išjungtas. Išjunkite Vikitekos programėlės akumuliatoriaus optimizavimą nustatymuose, kad įkėlimas būtų sklandus. \n\nGalimi akumuliatoriaus optimizavimo išjungimo veiksmai:\n\n1 veiksmas: bakstelėkite toliau esantį mygtuką „Nustatymai“.\n\n2 veiksmas: perjunkite iš „Neoptimizuota“ į „Visos programėlės“.\n\n3 veiksmas: ieškokite „Vikiteka“ arba „fr.free.nrw.commons“.\n\n4 veiksmas: spustelėkite jį ir pasirinkite „Neoptimizuoti“.\n\n5 veiksmas: paspauskite „Atlikta“. + Autentifikavimas nepavyko. Prašome prisijungti dar kartą. Įkėlimas prasidėjo! Įkėlimas eilėje (įgalintas riboto ryšio režimas) %1$s įkelta! @@ -97,11 +102,11 @@ Pateikite šio failo antraštę Aprašymas Antraštė - Negalima prisijungti - tinklo klaida + Negalima prisijungti - tinklo klaida Per daug nesėkmingų bandymų. Pabandykite dar kartą po keleto minučių. Atsiprašome, šis vartotojas buvo užblokuotas Commons Turite pateikti savo dviejų žingsnių patvirtinimo kodą. - Prisijungti nepavyko + Prisijungti nepavyko Įkelti Pavadinkite šį rinkinį Pakeitimai @@ -123,7 +128,7 @@ Kategorija Apie Vikitekos programėlė yra atviro kodo programėlė, kurią sukūrė ir prižiūri Vikitekos bendruomenės dotacijų gavėjai ir savanoriai. „Wikimedia Foundation“ nedalyvauja kuriant, plėtojant ar prižiūrint programėlę. - Sukurkite naują <a href=\"%1$s\">GitHub pranešimą</a>, siekiant pranešti apie klaidas ir pateikti siūlymus. + Sukurkite naują <a href=\"%1$s\">GitHub pranešimą</a>, siekiant pranešti apie klaidas ir pateikti siūlymus. Privatumo politika Kūrėjai Apie @@ -178,6 +183,8 @@ Reikalinga teisė: Skaityti išorinę talpyklą. Programėle be to negali prieiti prie jūsų galerijos. Reikalingas leidimas: rašyti į išorinę saugyklą. Programėlė be to negali pasiekti jūsų fotoaparato/galerijos. Prašoma vietovės leidimo + Įrašyti vietovę nuotraukoms, kurios fotografuotos programėlėje + Įjunkite šią funkciją, kad įrašytumėte vietovę nuotraukoms, jei jūsų įrenginio kamera to nepadaro Gerai Įspėjimas Rastas pasikartojantis failo pavadinimas @@ -198,6 +205,7 @@ Prisijunkite prie beta kanalo Google Play ir gaukite išankstinę prieigą prie naujų funkcijų bei klaidų pataisymų 2FA kodas Ar tikrai norite atsijungti? + Medijos paveikslėlis nepavyko Subkategorijų nerasta Zao kalnas Lamos @@ -214,6 +222,7 @@ Apie Nustatymai Atsiliepimai + Atsiliepimai per GitHub Atsijungti Pamoka Pranešimai @@ -247,13 +256,15 @@ Žiūrėkite tinklapį dėl daugiau informacijos Praleisti Prisijungti - Ar tikrai norite praleisti prisijungimą? - Norėdami ateityje įkelti nuotraukas, turėsite prisijungti. + Ar tikrai norite praleisti prisijungimą? + Norėdami ateityje įkelti nuotraukas, turėsite prisijungti. Jei norite naudotis šia funkcija, prisijunkite Nukopijuokite vikitekstą į mainų sritį Vikitekstas buvo nukopijuotas į mainų sritį Netoliese gali tinkamai neveikti, vieta nepasiekiama. + Prieiga prie vietos uždrausta. Norėdami naudotis šia funkcija, nustatykite savo vietą rankiniu būdu. Norint rodyti netoliese esančių vietų sąrašą, reikalingas leidimas + Norint rodyti netoliese esančių paveikslėlių sąrašą, reikalingas leidimas Nurodymai Vikiduomenys Vikipedija @@ -313,14 +324,16 @@ Nuotraukos, kuriose pavaizduotos technologijos ar kultūra, yra labai laukiamos Vikitekoje. Surinkote %1$s teisingų atsakymų. Sveikiname! Norėdami atsakyti į klausimą, pasirinkite vieną iš dviejų variantų - Prisijungimo sesija baigėsi, prisijunkite dar kartą. + Prisijungimo sesija baigėsi, prašome prisijungti dar kartą. Pasidalinkite savo apkalusa su draugais! Tęsti Teisingas atsakymas Atsakymas neteisingas Ar šią ekrano kopiją galima įkelti? Dalintis programėle - Klaida gaunant netoliese esančias vietas. + Pasukti + Nepavyko įkelti netoliese esančių vietų + Šioje vietovėje nuotraukų nėra Nėra šalia esančių vietų Gaunant netoliese esančius paminklus įvyko klaida. Nėra naujausių paieškų @@ -338,6 +351,7 @@ Vaizdai per „Netoliese esančios vietos“ Lygis Vaizdai įkelti + Paveikslėliai negrąžinti Naudoti vaizdai Pasidalinkite savo pasiekimais su draugais! Jūsų lygis kyla, kai atitinkate šiuos reikalavimus. Skiltyje „statistika“ esantys elementai neįskaičiuojami į jūsų lygį. @@ -394,12 +408,22 @@ Niekada daugiau to neklausti Paprašyti vietos leidimo Jei reikia, kad būtų galima naudoti netoliese esančio pranešimų kortelės peržiūros funkciją, paprašykite leidimo nustatyti vietą. - Kažkas ne taip. Nepavyko gauti jūsų pasiekimų + Kažkas ne taip, mums nepavyko gauti pasiekimų Prisidėjote tiek daug, kad mūsų pasiekimų skaičiavimo sistema negali susidoroti. Tai yra didžiausias pasiekimas. Baigiasi: Peržiūrėkite vykstančias kampanijas + Leiskite programėlei nuskaityti vietą, jei fotoaparatas jos neįrašo. Kai kurių įrenginių kameros neįrašo vietos. Tokiais atvejais leidus programai gauti ir pridėti vietą, jūsų indėlis bus naudingesnis. Tai galite bet kada pakeisti nustatymuose + Leisti + Paslėpti + Nustatymuose įjunkite prieigą prie vietos ir bandykite dar kartą. \n\nPastaba: įkėlimas gali neturėti vietos, jei programėlė negali per trumpą laiką nuskaityti vietos iš įrenginio. + Programėlėje esančiam fotoaparatui reikalingas vietos leidimas, kad jis būtų pridėtas prie vaizdų, jei EXIF nėra vietos. Leiskite programėlei pasiekti jūsų buvimo vietą ir bandykite dar kartą.\n\nPastaba: įkėlimas gali neturėti vietos, jei programėlė negali per trumpą laiką nuskaityti vietos iš įrenginio. + Programėlė neįrašys vietos kartu su kadrais, nes neturi vietos leidimo + Programa neįrašys vietos kartu su kadrais, nes GPS išjungtas + Naudokite dokumentais pagrįstą nuotraukų rinkiklį + Naujasis „Android“ nuotraukų rinkiklis gali prarasti vietos informaciją. Įjunkite, jei atrodo, kad jį naudojate. + Išjungus tai gali suaktyvinti naująjį „Android“ nuotraukų rinkiklį. Dėl to kyla pavojus prarasti vietos informaciją.\n\nNorėdami gauti daugiau informacijos, bakstelėkite „Skaityti daugiau“. Kampanijų nebematysite. Tačiau, jei norite, galite iš naujo įjungti šį pranešimą nustatymuose. - Šiai funkcijai reikalingas tinklo ryšys, patikrinkite ryšio nustatymus. + Šiai funkcijai reikalingas tinklo ryšys. Prašome patikrinti savo ryšio nustatymus. Apdorojant vaizdą įvyko klaida. Pabandykite dar kartą! Gaunamas redagavimo prieigos raktas Kategorijos tikrinimo šablonas pridedamas @@ -418,22 +442,26 @@ Siunčiama padėka už %1$s Ar tai atitinka autorines teises? Ar tai teisingai priskirta kategorijoms? + Ar tai taikytina? Ar norėtumėte padėkoti prisidėjusiam? Spustelėkite NE, kad pasiūlytumėte šį vaizdą ištrinti, jei jis visai nenaudingas. Logotipai, ekrano kopijos, filmų plakatai dažnai pažeidžia autorines teises. Spustelėkite NE, jei norite pasiūlyti šį vaizdą ištrinti %1$s bus padrąsintas jūsų dėkingumu Oi, tai net nėra priskirta kategorijai! Šis vaizdas priklauso %1$s kategorijoms. + Tai nėra taikytina, nes Tai yra autorių teisių pažeidimas, nes Kitas vaizdas Taip, kodėl gi ne Spustelėję šį mygtuką pamatysite kitą neseniai įkeltą vaizdą iš Vikitekos + Galite peržiūrėti vaizdus, kad pagerintumėte Vikitekos kokybę.\nTrys peržiūros parametrai yra:\n\n- Ar šis vaizdas tinkamas?\nKai paliesite Ne (nepatenka į sritį), jūs prie šio paveikslėlio pridedate ištrynimo nominacijos šabloną.\n\n- Ar šis vaizdas atitinka autorių teisių taisykles?\nKai paliesite Ne (neatitinka autorių teisių taisyklių), pridedate ištrynimo nominacijos šabloną prie šio paveikslėlio.\n\n- Ar šis vaizdas teisingai suskirstytas į kategorijas?\nKai paliesite Ne (neteisingai suskirstytas į kategorijas), prie šio paveikslėlio pridedate kategorizavimo užklausos šabloną.\n\nJei viskas yra gerai, prie paveikslėlio nepridedamas joks šablonas, ir jūs turite galimybę padėkoti bendraautoriui. Nenaudojami jokie vaizdai Jokie vaizdai negrąžinti Neįkelta jokių vaizdų Neturite neskaitytų pranešimų Neturite perskaitytų pranešimų Dalinkitės žurnalus naudodami + Patikrinkite savo el. pašto dėžutę Žiūrėti perskaitytus Žiūrėti neperskaitytus Renkant vaizdus įvyko klaida @@ -478,6 +506,7 @@ Žiniasklaidos nuotrauka Atsitiktinė nuotrauka iš interneto Logotipas + Panoramos laisvės pažeidimas Nes Bandoma atnaujinti kategorijas. Kategorijos atnaujinimas @@ -498,7 +527,7 @@ Nepavyko pridėti koordinačių. Nepavyko pridėti aprašymų. Nepavyko pridėti antraštę. - Nepavyko gauti koordinačių. + Paveikslėlio koordinatės neatnaujintos Nepavyko gauti aprašymų. Redaguokite aprašymus ir antraštes Dalintis vaizdu per @@ -513,10 +542,11 @@ Reikia Nuotraukos Vietos tipas: Tiltas, muziejus, viešbutis ir t.t. - Kažkas nepavyko prisijungiant, turite iš naujo nustatyti slaptažodį !! + Kažkas nepavyko prisijungiant. Turite iš naujo nustatyti slaptažodį! MEDIJA Netoliese rasta vieta - Ar tai vietos %1$s nuotrauka? + Ar tai %1$s nuotraukos? + Ar tai %1$s nuotrauka? Žymės Nustatymai Pašalinta iš žymių @@ -524,12 +554,16 @@ Kažkas nepavyko. Nepavyko nustatyti fono paveikslėlio Nustatyti kaip fono paveikslėlį Fono paveikslėlis nustatomas. Prašome palaukti… + Sekti sistemos Tamsus Šviesus Nepavyko atidaryti vietos nustatymų. Įjunkite vietą rankiniu būdu Norėdami gauti geriausius rezultatus, pasirinkite didelio tikslumo režimą. Įjungti vietą? + Įjunkite vietos nustatymo paslaugas, kad programa parodytų jūsų dabartinę vietą Kad tinkamai veiktų, Netoliese turi būti įjungta vieta + Žemėlapio naršymui reikia vietos leidimo, kad būtų rodomi netoliese esantys paveikslėliai + Norėdami automatiškai nustatyti vietą, turite suteikti vietos leidimą. Ar nufotografavote šias dvi nuotraukas toje pačioje vietoje? Ar norite naudoti dešinėje esančio paveikslėlio platumą/ilgumą? Įkelti daugiau Vietų nerasta, pabandykite pakeisti paieškos kriterijus. @@ -617,6 +651,10 @@ Skirtingai nuo paveikslėlio kairėje, paveikslėlyje dešinėje yra Vikitekos logotipas, nurodantis, kad jis jau įkeltas. \n Palieskite ir palaikykite, kad peržiūrėtumėte vaizdą. Puiku Šis vaizdas jau buvo įkeltas į Vikiteką. + Dėl techninių priežasčių programėlė negali patikimai įkelti daugiau nei %1$d nuotraukos vienu metu. %1$d įkėlimo limitas buvo viršytas %2$d. + Paslėpti + Maksimalus: %1$d + Klaida: viršytas įkėlimo limitas Šis vaizdas bus įtrauktas į konkursą \"Wiki Loves Monuments\" (\"Wiki\" mėgsta paminklus) Rodyti paminklus Vyksta Viki myli paminklus mėnuo! @@ -626,7 +664,7 @@ Netoliese žemėlapiai turi perskaityti TELENFONO BŪSENĄ, kad tinkamai funkcionuotų Naudotojo indėlis: %s Naudotojo pasiekimai: %s - Žiūrėti naudotojo puslapį + Žiūrėti naudotojo puslapį Redaguoti vaizdus Redaguoti kategorijas Išplėstiniai nustatymai @@ -652,6 +690,8 @@ Jūsų atsiliepimas Pažymėti kaip neskirtą įkėlimui Panaikinkite žymėjimą kaip neskirto įkėlimui + Žymima kaip neįkėlimui + Naikinamas žymėjimas kaip neįkėlimui Rodyti jau padarytas nuotraukas Slepiamos jau padarytos nuotraukos Daugiau paveikslėlių nerasta @@ -660,6 +700,8 @@ Paveiklėlis pasirinktas Paveikslėlis pažymėtas kaip neskirtas įkėlimui Pranešti + Nustatyti baltą foną + Nustatyti juodą foną Pranešti apie pažeidimą Pranešti apie šį nauodotoją Pranešti apie šį turinį @@ -669,4 +711,44 @@ Norėdami atlikti šiuos veiksmus, braukite greitai ir ilgai: \n- Kairėn/dešinėn: Pereikite prie ankstesnio/kito\n- Į viršų: Pasirinkite\n- Žemyn: Pažymėti kaip neskirtą įkėlimui. Norėdami nustatyti pirmaujančiųjų sąrašo avatarą, bet kurio vaizdo trijų taškų meniu palieskite „Nustatyti kaip avatarą“. Koordinatės nėra tikslios koordinatės, bet asmuo, kuris įkėlė šią nuotrauką, mano, kad jos yra pakankamai arti. + Saugyklos leidimai atmesti + Nepavyko bendrinti šio elemento + Funkcionalumui reikalingi leidimai + Sužinokite, kaip parašyti naudingą aprašymą + Sužinokite, kaip parašyti naudingą antraštę + Pamatykite savo pasiekimus + Redaguoti paveikslėlį + Redaguoti vietą + Vieta atnaujinta! + Pašalinti vietą + Pašalinti vietos įspėjimą + Vieta daro nuotraukas naudingesnes ir lengviau randamas. Ar tikrai norite pašalinti vietą iš šios nuotraukos? + Vieta pašalinta! + Padėkoti autoriui + Klaida siunčiant padėką autoriui. + Jūsų prisijungimo sesija baigėsi. Prašome prisijungti dar kartą. + Nėra jokios programos GPX failams atidaryti + Failas sėkmingai išsaugotas + Ar norite atidaryti GPX failą? + Ar norite atidaryti KML failą? + Nepavyko išsaugoti KML failo. + Nepavyko išsaugoti GPX failo. + Išsaugomas KML failas + Išsaugomas GPX failas + Atminkite, kad visi paveikslėliai, įkeliant kelis, turi tas pačias kategorijas ir vaizdus. Jei paveikslėliuose vaizdai ir kategorijos skiriasi, prašome atlikti kelis atskirus įkėlimus. + Pastaba apie kelis įkėlimus + Praneškite apie problemą dėl šio elemento Vikiduomenims. + Įveskite keletą komentarų + Aptarimas + Parašykite ką nors apie \'%1$s\' elementą. Tai bus matoma viešai. + \'%1$s\' nebeegzistuoja, niekada nebegalima jo nufotografuoti. + \'%1$s\' yra kitoje vietoje. Toliau nurodykite teisingą vietą ir, jei įmanoma, parašykite teisingą platumą ir ilgumą. + Kita problema arba informacija (paaiškinkite toliau). + Jūsų atsiliepimai bus paskelbti šiame viki puslapyje: <a href=\"https://commons.wikimedia.org/wiki/Commons:Mobile_app/Feedback\">Commons:Mobile App/Feedback</a> + Ar tikrai norite atšaukti visus įkėlimus? + Atšaukiami visi įkėlimai... + Įkėlimai + Laukiama + Nepavyko + Nepavyko įkelti vietos duomenų diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index aeb8eab94..bf971f6bc 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -496,6 +496,7 @@ U heeft geen ongelezen meldingen U heeft geen gelezen meldingen Logboeken delen via + Bekijk uw e-mailinbox Bekijk gelezen Ongelezen bekijken Er is een fout opgetreden bij het kiezen van afbeeldingen diff --git a/app/src/main/res/values-pa/strings.xml b/app/src/main/res/values-pa/strings.xml index d4282fd95..48713104d 100644 --- a/app/src/main/res/values-pa/strings.xml +++ b/app/src/main/res/values-pa/strings.xml @@ -86,7 +86,7 @@ ਆਪਣੀਆਂ ਤਸਵੀਰਾਂ ਨੂੰ ਵਿਕੀਮੀਡੀਆ ਕਾਮਨਜ਼ ਵਿਚ ਜ਼ਿਆਦਾ ਲੱਭਣਯੋਗ ਬਣਾਉਣ ਲਈ ਸ਼੍ਰੇਣੀਆਂ ਜੋੜੋ।\n\nਸ਼੍ਰੇਣੀਆਂ ਜੋੜਨ ਲਈ ਟਾਈਪ ਕਰਨ ਅਰੰਭ ਕਰੋ।\nਇਸ ਕਾਰਜ ਨੂੰ ਅਣਡਿੱਠਾ ਕਰਨ ਲਈ ਇਹ ਸੁਨੇਹਾ ਥਪੇੜੋ (ਜਾਂ ਵਾਪਸੀ ਬਟਨ ਦਬਾਓ)। ਸ਼੍ਰੇਣੀਆਂ ਪਸੰਦਾਂ - ਸਾਈਨ ਅੱਪ + ਖਾਤਾ ਬਣਾਓ ਸ਼੍ਰੇਣੀ ਇਸ ਬਾਰੇ ਅਜ਼ਾਦ ਸਰੋਤ ਸਾਫ਼ਟਵੇਅਰ ਨੂੰ <a href=\"https://github.com/commons-app/apps-android-commons/blob/master/COPYING\">Apache License v2</a> ਅਧੀਨ ਜਾਰੀ ਕੀਤਾ ਗਿਆ ਹੈ diff --git a/app/src/main/res/values-pms/strings.xml b/app/src/main/res/values-pms/strings.xml index 788a34a4b..9c257c273 100644 --- a/app/src/main/res/values-pms/strings.xml +++ b/app/src/main/res/values-pms/strings.xml @@ -473,6 +473,7 @@ A l\'ha gnun-e notìfiche nen lesùe A l\'ha gnun-e notìfiche lesùe Partagé j\'argistr dovrand + Ch\'a contròla soa casela ëd pòsta eletrònica Vëdde lòn ch\'a l\'é stàit lesù Vëdde lòn ch\'a l\'é ancor nen ëstàit lesù A-i é staje n\'eror an selessionand le plance diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index ca771ea98..b15d77787 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -530,6 +530,7 @@ У вас нет непрочитанных уведомлений Нет прочитанных уведомлений Поделиться лог-файлами + Проверьте свой почтовый ящик Просмотр прочитанного См. непрочитанные Произошла ошибка при загрузке изображений diff --git a/app/src/main/res/values-zh-rHK/strings.xml b/app/src/main/res/values-zh-rHK/strings.xml index ab203b841..d7c023e6f 100644 --- a/app/src/main/res/values-zh-rHK/strings.xml +++ b/app/src/main/res/values-zh-rHK/strings.xml @@ -213,7 +213,7 @@ 維基數據項目 維基百科條目 請盡可能描述媒體內容:拍攝於何處?是顯示什麼事物?有什麼脈絡?請描述對象或人物。透露出一些較不易猜測的訊息,例如是風景的話,可以是一天裡的時間。如果媒體顯示出了一些不尋常的事物,請說明不尋常原因。 + 請查看你的電子郵件信箱 學習如何編寫有用的描述 學習如何編寫有用的標題 - 請查看你的電子郵件信箱 diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 59dfdd57f..e54fb9d76 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -496,6 +496,7 @@ 您有尚未讀取的通知 您沒有已讀的通知 分享日誌使用 + 請查看你的電子郵件信箱 檢視已讀 檢視未讀 選擇圖片時發生錯誤 @@ -805,5 +806,4 @@ 待處理 失敗 無法載入地點資料 - 請查看你的電子郵件信箱 diff --git a/app/src/main/res/values-zh/strings.xml b/app/src/main/res/values-zh/strings.xml index e66f40879..74ff641c0 100644 --- a/app/src/main/res/values-zh/strings.xml +++ b/app/src/main/res/values-zh/strings.xml @@ -526,6 +526,7 @@ 您没有任何未读通知 您没有已读通知 分享日志于 + 请查看你的电子邮箱 查看已读 查看未读 选择图片时出错 @@ -834,5 +835,4 @@ 待处理 失败 无法加载地点数据 - 请查看你的电子邮箱 From 7b0b604834ddf2ebcfe5d23d60f5bc7d3e91446e Mon Sep 17 00:00:00 2001 From: myyyy <62922278+lzhan0121@users.noreply.github.com> Date: Tue, 22 Oct 2024 00:41:32 +1100 Subject: [PATCH 16/36] Fix: Prevent RecyclerView from resetting scroll position after returning from preview (#5873) (#5880) Resolved an issue where RecyclerView would incorrectly scroll to the top after exiting fullscreen preview. Adjusted scroll behavior to maintain position unless actioned images are filtered. Implemented observer logic adjustments to handle dataset updates more efficiently. Co-authored-by: Nicolas Raoul --- .../commons/customselector/ui/selector/ImageFragment.kt | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/fr/free/nrw/commons/customselector/ui/selector/ImageFragment.kt b/app/src/main/java/fr/free/nrw/commons/customselector/ui/selector/ImageFragment.kt index efe640e82..dbab629ff 100644 --- a/app/src/main/java/fr/free/nrw/commons/customselector/ui/selector/ImageFragment.kt +++ b/app/src/main/java/fr/free/nrw/commons/customselector/ui/selector/ImageFragment.kt @@ -285,9 +285,11 @@ class ImageFragment : imageAdapter.notifyDataSetChanged() selectorRV?.let { it.visibility = View.VISIBLE - lastItemId?.let { pos -> - (it.layoutManager as GridLayoutManager) - .scrollToPosition(ImageHelper.getIndexFromId(filteredImages, pos)) + if (switch?.isChecked == false) { + lastItemId?.let { pos -> + (it.layoutManager as GridLayoutManager) + .scrollToPosition(ImageHelper.getIndexFromId(filteredImages, pos)) + } } } } else { From ba7348f83f68ec52fc93e22086b04bc57ee18d28 Mon Sep 17 00:00:00 2001 From: Hanna Truong Date: Tue, 22 Oct 2024 23:27:40 +1100 Subject: [PATCH 17/36] Fixes issue #5841: Nearby pins: Make it easier to understand what the colors mean (#5881) * UI design for legend to explain the colors of the nearby pins * Add listener for the button to toggle the visibility of the legend (make it hideable) * Change wording for legend and make text localizable * Fixed typo * Fixed typo --------- Co-authored-by: Nicolas Raoul --- .../fragments/NearbyParentFragment.java | 15 ++++ .../res/layout/fragment_nearby_parent.xml | 27 +++++++ app/src/main/res/layout/nearby_legend.xml | 74 +++++++++++++++++++ app/src/main/res/values/strings.xml | 3 + 4 files changed, 119 insertions(+) create mode 100644 app/src/main/res/layout/nearby_legend.xml diff --git a/app/src/main/java/fr/free/nrw/commons/nearby/fragments/NearbyParentFragment.java b/app/src/main/java/fr/free/nrw/commons/nearby/fragments/NearbyParentFragment.java index 8a3c0c330..f578afc25 100644 --- a/app/src/main/java/fr/free/nrw/commons/nearby/fragments/NearbyParentFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/nearby/fragments/NearbyParentFragment.java @@ -43,6 +43,7 @@ import android.view.ViewGroup; import android.view.ViewGroup.LayoutParams; import android.view.animation.Animation; import android.view.animation.AnimationUtils; +import android.widget.Button; import android.widget.Toast; import androidx.activity.result.ActivityResultCallback; import androidx.activity.result.ActivityResultLauncher; @@ -52,6 +53,7 @@ import androidx.annotation.DrawableRes; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.appcompat.app.AlertDialog.Builder; +import androidx.constraintlayout.widget.ConstraintLayout; import androidx.core.content.ContextCompat; import androidx.core.content.FileProvider; import androidx.recyclerview.widget.DividerItemDecoration; @@ -218,6 +220,8 @@ public class NearbyParentFragment extends CommonsDaggerSupportFragment private LatLng updatedLatLng; private boolean searchable; + private ConstraintLayout nearbyLegend; + private GridLayoutManager gridLayoutManager; private List dataList; private BottomSheetAdapter bottomSheetAdapter; @@ -302,6 +306,7 @@ public class NearbyParentFragment extends CommonsDaggerSupportFragment progressDialog.setCancelable(false); progressDialog.setMessage("Saving in progress..."); setHasOptionsMenu(true); + // Inflate the layout for this fragment return view; @@ -362,6 +367,16 @@ public class NearbyParentFragment extends CommonsDaggerSupportFragment } locationPermissionsHelper = new LocationPermissionsHelper(getActivity(), locationManager, this); + + // Set up the floating activity button to toggle the visibility of the legend + binding.fabLegend.setOnClickListener(v -> { + if (binding.nearbyLegendLayout.getRoot().getVisibility() == View.VISIBLE) { + binding.nearbyLegendLayout.getRoot().setVisibility(View.GONE); + } else { + binding.nearbyLegendLayout.getRoot().setVisibility(View.VISIBLE); + } + }); + presenter.attachView(this); isPermissionDenied = false; recenterToUserLocation = false; diff --git a/app/src/main/res/layout/fragment_nearby_parent.xml b/app/src/main/res/layout/fragment_nearby_parent.xml index e5002fe11..e1d82e6e7 100644 --- a/app/src/main/res/layout/fragment_nearby_parent.xml +++ b/app/src/main/res/layout/fragment_nearby_parent.xml @@ -124,6 +124,33 @@ app:srcCompat="@drawable/ic_my_location_black_24dp" app:useCompatPadding="true" /> + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index b5c2dc529..f9de8e051 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -832,4 +832,7 @@ Upload your first media by tapping on the add button. Pending Failed Could not load place data + This place has no picture yet, go take one! + This place has a picture already. + Now checking whether this place has a picture. From 9c1c95f5cfe8ca34130dbeaf675f3c1e5ffbfb3c Mon Sep 17 00:00:00 2001 From: whe128 <165463363+whe128@users.noreply.github.com> Date: Wed, 23 Oct 2024 03:56:02 +1100 Subject: [PATCH 18/36] Fix for #5846: After uploading via Nearby, I am sent back to Nearby, where I am mislead into thinking that I must upload again #5846 (#5874) Co-authored-by: Nicolas Raoul --- .../java/fr/free/nrw/commons/upload/UploadActivity.java | 8 ++++++++ .../java/fr/free/nrw/commons/upload/UploadContract.java | 7 +++++++ .../java/fr/free/nrw/commons/upload/UploadPresenter.java | 7 +++++++ 3 files changed, 22 insertions(+) diff --git a/app/src/main/java/fr/free/nrw/commons/upload/UploadActivity.java b/app/src/main/java/fr/free/nrw/commons/upload/UploadActivity.java index eb180ec44..23b187340 100644 --- a/app/src/main/java/fr/free/nrw/commons/upload/UploadActivity.java +++ b/app/src/main/java/fr/free/nrw/commons/upload/UploadActivity.java @@ -320,6 +320,14 @@ public class UploadActivity extends BaseActivity implements UploadContract.View, finish(); } + /** + * go to the uploadProgress activity to check the status of uploading + */ + @Override + public void goToUploadProgressActivity() { + startActivity(new Intent(this, UploadProgressActivity.class)); + } + /** * Show/Hide the progress dialog */ diff --git a/app/src/main/java/fr/free/nrw/commons/upload/UploadContract.java b/app/src/main/java/fr/free/nrw/commons/upload/UploadContract.java index 4df778746..5f41a17c9 100644 --- a/app/src/main/java/fr/free/nrw/commons/upload/UploadContract.java +++ b/app/src/main/java/fr/free/nrw/commons/upload/UploadContract.java @@ -18,6 +18,13 @@ public interface UploadContract { void returnToMainActivity(); + /** + * When submission successful, go to the loadProgressActivity to hint the user this + * submission is valid. And the user will see the upload progress in this activity; + * Fixes: Issue + */ + void goToUploadProgressActivity(); + void askUserToLogIn(); /** diff --git a/app/src/main/java/fr/free/nrw/commons/upload/UploadPresenter.java b/app/src/main/java/fr/free/nrw/commons/upload/UploadPresenter.java index 144859432..093412c25 100644 --- a/app/src/main/java/fr/free/nrw/commons/upload/UploadPresenter.java +++ b/app/src/main/java/fr/free/nrw/commons/upload/UploadPresenter.java @@ -123,6 +123,9 @@ public class UploadPresenter implements UploadContract.UserActionListener { view.returnToMainActivity(); compositeDisposable.clear(); Timber.e("failed to upload: " + e.getMessage()); + + //is submission error, not need to go to the uploadActivity + //not start the uploading progress } @Override @@ -131,6 +134,10 @@ public class UploadPresenter implements UploadContract.UserActionListener { repository.cleanup(); view.returnToMainActivity(); compositeDisposable.clear(); + + //after finish the uploadActivity, if successful, + //directly go to the upload progress activity + view.goToUploadProgressActivity(); } }); } else { From f1205c19be7dccefc2b65f4d4c95bfb36c06c23c Mon Sep 17 00:00:00 2001 From: cambo14 <67790050+cambo14@users.noreply.github.com> Date: Wed, 23 Oct 2024 04:50:37 +1100 Subject: [PATCH 19/36] UploadMediaDetailAdapter: made selecting a language deselect all others (#5883) >> Made it so that selecting a language results in the hashmap storing the currently selected language(s) being cleared. Considered refactoring the hashmap storing this into a single pair storing the language positition index and its code, as only one language should ever be selected, however I am not confident that this would not introduce unintended side-effects --- .../fr/free/nrw/commons/upload/UploadMediaDetailAdapter.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/fr/free/nrw/commons/upload/UploadMediaDetailAdapter.java b/app/src/main/java/fr/free/nrw/commons/upload/UploadMediaDetailAdapter.java index a4e0d1029..ecddab43d 100644 --- a/app/src/main/java/fr/free/nrw/commons/upload/UploadMediaDetailAdapter.java +++ b/app/src/main/java/fr/free/nrw/commons/upload/UploadMediaDetailAdapter.java @@ -407,7 +407,7 @@ public class UploadMediaDetailAdapter extends recentLanguagesDao .addRecentLanguage(new Language(languageName, languageCode)); - selectedLanguages.remove(position); + selectedLanguages.clear(); selectedLanguages.put(position, languageCode); ((LanguagesAdapter) adapterView .getAdapter()).setSelectedLangCode(languageCode); @@ -497,7 +497,7 @@ public class UploadMediaDetailAdapter extends } recentLanguagesDao.addRecentLanguage(new Language(languageName, languageCode)); - selectedLanguages.remove(position); + selectedLanguages.clear(); selectedLanguages.put(position, languageCode); ((RecentLanguagesAdapter) adapterView .getAdapter()).setSelectedLangCode(languageCode); From 1e7aabad16ceda96f410a21cebbcda7c387dff81 Mon Sep 17 00:00:00 2001 From: Parneet Singh <111801812+parneet-guraya@users.noreply.github.com> Date: Wed, 23 Oct 2024 18:28:39 +0530 Subject: [PATCH 20/36] Use new result API (#5875) * remove unused result expectancy for settings screen launch Signed-off-by: parneet-guraya * initial refactor to new result api, wip Signed-off-by: parneet-guraya * refactor camera launcher Signed-off-by: parneet-guraya * revert callback for video handling Signed-off-by: parneet-guraya * invoke callbacks when cancelled Signed-off-by: parneet-guraya * handle gallery picker result based on preference Signed-off-by: parneet-guraya * remove old method of refactoring for file picker Signed-off-by: parneet-guraya * remove legacy result handling callback Signed-off-by: parneet-guraya * request code used for handling result was never used for launching an activity, hence removed Signed-off-by: parneet-guraya * extract voice result handling into function Signed-off-by: parneet-guraya * refactor test Signed-off-by: parneet-guraya * remove unused tests Signed-off-by: parneet-guraya * cleanup Signed-off-by: parneet-guraya * fix-docs Signed-off-by: parneet-guraya * add space after , Signed-off-by: parneet-guraya --------- Signed-off-by: parneet-guraya --- .../free/nrw/commons/CommonsApplication.java | 1 - .../locations/BookmarkLocationsFragment.java | 29 ++- .../contributions/ContributionController.java | 85 +++++--- .../ContributionsListFragment.java | 34 ++- .../commons/contributions/MainActivity.java | 7 - .../ui/selector/CustomSelectorActivity.kt | 21 +- .../description/DescriptionEditActivity.kt | 36 ++-- .../nrw/commons/filepicker/Constants.java | 11 +- .../nrw/commons/filepicker/FilePicker.java | 204 +++++++----------- .../commons/media/MediaDetailFragment.java | 80 ------- .../commons/nearby/PlaceAdapterDelegate.kt | 11 +- .../fragments/CommonPlaceClickActions.kt | 16 +- .../fragments/NearbyParentFragment.java | 37 +++- .../commons/nearby/fragments/PlaceAdapter.kt | 5 + .../commons/settings/SettingsFragment.java | 12 +- .../nrw/commons/upload/UploadActivity.java | 8 - .../upload/UploadMediaDetailAdapter.java | 15 +- .../UploadMediaDetailFragment.java | 94 ++++---- .../nrw/commons/utils/PermissionUtils.java | 3 +- .../contributions/MainActivityUnitTests.kt | 14 -- .../ui/selector/CustomSelectorActivityTest.kt | 16 +- .../nrw/commons/filepicker/FilePickerTest.kt | 94 ++++---- .../media/MediaDetailFragmentUnitTests.kt | 20 +- .../commons/upload/UploadActivityUnitTests.kt | 14 -- .../UploadMediaDetailAdapterUnitTest.kt | 7 +- .../UploadMediaDetailFragmentUnitTest.kt | 20 +- 26 files changed, 407 insertions(+), 487 deletions(-) diff --git a/app/src/main/java/fr/free/nrw/commons/CommonsApplication.java b/app/src/main/java/fr/free/nrw/commons/CommonsApplication.java index c3dde9caa..3aceb957a 100644 --- a/app/src/main/java/fr/free/nrw/commons/CommonsApplication.java +++ b/app/src/main/java/fr/free/nrw/commons/CommonsApplication.java @@ -107,7 +107,6 @@ public class CommonsApplication extends MultiDexApplication { /** * Constants begin */ - public static final int OPEN_APPLICATION_DETAIL_SETTINGS = 1001; public static final String DEFAULT_EDIT_SUMMARY = "Uploaded using [[COM:MOA|Commons Mobile App]]"; diff --git a/app/src/main/java/fr/free/nrw/commons/bookmarks/locations/BookmarkLocationsFragment.java b/app/src/main/java/fr/free/nrw/commons/bookmarks/locations/BookmarkLocationsFragment.java index 65d0e45a8..f5ce556c4 100644 --- a/app/src/main/java/fr/free/nrw/commons/bookmarks/locations/BookmarkLocationsFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/bookmarks/locations/BookmarkLocationsFragment.java @@ -9,6 +9,7 @@ import android.view.ViewGroup; import androidx.activity.result.ActivityResultCallback; import androidx.activity.result.ActivityResultLauncher; import androidx.activity.result.contract.ActivityResultContracts; +import androidx.activity.result.contract.ActivityResultContracts.StartActivityForResult; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.recyclerview.widget.LinearLayoutManager; @@ -33,6 +34,23 @@ public class BookmarkLocationsFragment extends DaggerFragment { @Inject BookmarkLocationsDao bookmarkLocationDao; @Inject CommonPlaceClickActions commonPlaceClickActions; private PlaceAdapter adapter; + + private final ActivityResultLauncher cameraPickLauncherForResult = + registerForActivityResult(new StartActivityForResult(), + result -> { + contributionController.handleActivityResultWithCallback(requireActivity(), callbacks -> { + contributionController.onPictureReturnedFromCamera(result, requireActivity(), callbacks); + }); + }); + + private final ActivityResultLauncher galleryPickLauncherForResult = + registerForActivityResult(new StartActivityForResult(), + result -> { + contributionController.handleActivityResultWithCallback(requireActivity(), callbacks -> { + contributionController.onPictureReturnedFromGallery(result, requireActivity(), callbacks); + }); + }); + private ActivityResultLauncher inAppCameraLocationPermissionLauncher = registerForActivityResult(new ActivityResultContracts.RequestMultiplePermissions(), new ActivityResultCallback>() { @Override public void onActivityResult(Map result) { @@ -45,7 +63,7 @@ public class BookmarkLocationsFragment extends DaggerFragment { contributionController.locationPermissionCallback.onLocationPermissionGranted(); } else { if (shouldShowRequestPermissionRationale(permission.ACCESS_FINE_LOCATION)) { - contributionController.handleShowRationaleFlowCameraLocation(getActivity(), inAppCameraLocationPermissionLauncher); + contributionController.handleShowRationaleFlowCameraLocation(getActivity(), inAppCameraLocationPermissionLauncher, cameraPickLauncherForResult); } else { contributionController.locationPermissionCallback.onLocationPermissionDenied(getActivity().getString(R.string.in_app_camera_location_permission_denied)); } @@ -83,7 +101,9 @@ public class BookmarkLocationsFragment extends DaggerFragment { return Unit.INSTANCE; }, commonPlaceClickActions, - inAppCameraLocationPermissionLauncher + inAppCameraLocationPermissionLauncher, + galleryPickLauncherForResult, + cameraPickLauncherForResult ); binding.listView.setAdapter(adapter); } @@ -109,11 +129,6 @@ public class BookmarkLocationsFragment extends DaggerFragment { } } - @Override - public void onActivityResult(int requestCode, int resultCode, Intent data) { - contributionController.handleActivityResult(getActivity(), requestCode, resultCode, data); - } - @Override public void onDestroy() { super.onDestroy(); diff --git a/app/src/main/java/fr/free/nrw/commons/contributions/ContributionController.java b/app/src/main/java/fr/free/nrw/commons/contributions/ContributionController.java index 1251d1027..fcfd32974 100644 --- a/app/src/main/java/fr/free/nrw/commons/contributions/ContributionController.java +++ b/app/src/main/java/fr/free/nrw/commons/contributions/ContributionController.java @@ -7,6 +7,7 @@ import android.app.Activity; import android.content.Context; import android.content.Intent; import android.widget.Toast; +import androidx.activity.result.ActivityResult; import androidx.activity.result.ActivityResultLauncher; import androidx.annotation.NonNull; import androidx.lifecycle.LiveData; @@ -64,10 +65,11 @@ public class ContributionController { * Check for permissions and initiate camera click */ public void initiateCameraPick(Activity activity, - ActivityResultLauncher inAppCameraLocationPermissionLauncher) { + ActivityResultLauncher inAppCameraLocationPermissionLauncher, + ActivityResultLauncher resultLauncher) { boolean useExtStorage = defaultKvStore.getBoolean("useExternalStorage", true); if (!useExtStorage) { - initiateCameraUpload(activity); + initiateCameraUpload(activity, resultLauncher); return; } @@ -75,12 +77,12 @@ public class ContributionController { () -> { if (defaultKvStore.getBoolean("inAppCameraFirstRun")) { defaultKvStore.putBoolean("inAppCameraFirstRun", false); - askUserToAllowLocationAccess(activity, inAppCameraLocationPermissionLauncher); + askUserToAllowLocationAccess(activity, inAppCameraLocationPermissionLauncher, resultLauncher); } else if (defaultKvStore.getBoolean("inAppCameraLocationPref")) { createDialogsAndHandleLocationPermissions(activity, - inAppCameraLocationPermissionLauncher); + inAppCameraLocationPermissionLauncher, resultLauncher); } else { - initiateCameraUpload(activity); + initiateCameraUpload(activity, resultLauncher); } }, R.string.storage_permission_title, @@ -94,7 +96,8 @@ public class ContributionController { * @param activity */ private void createDialogsAndHandleLocationPermissions(Activity activity, - ActivityResultLauncher inAppCameraLocationPermissionLauncher) { + ActivityResultLauncher inAppCameraLocationPermissionLauncher, + ActivityResultLauncher resultLauncher) { locationPermissionCallback = new LocationPermissionCallback() { @Override public void onLocationPermissionDenied(String toastMessage) { @@ -103,16 +106,16 @@ public class ContributionController { toastMessage, Toast.LENGTH_LONG ).show(); - initiateCameraUpload(activity); + initiateCameraUpload(activity, resultLauncher); } @Override public void onLocationPermissionGranted() { if (!locationPermissionsHelper.isLocationAccessToAppsTurnedOn()) { showLocationOffDialog(activity, R.string.in_app_camera_needs_location, - R.string.in_app_camera_location_unavailable); + R.string.in_app_camera_location_unavailable, resultLauncher); } else { - initiateCameraUpload(activity); + initiateCameraUpload(activity, resultLauncher); } } }; @@ -135,9 +138,10 @@ public class ContributionController { * @param activity Activity reference * @param dialogTextResource Resource id of text to be shown in dialog * @param toastTextResource Resource id of text to be shown in toast + * @param resultLauncher */ private void showLocationOffDialog(Activity activity, int dialogTextResource, - int toastTextResource) { + int toastTextResource, ActivityResultLauncher resultLauncher) { DialogUtil .showAlertDialog(activity, activity.getString(R.string.ask_to_turn_location_on), @@ -148,20 +152,21 @@ public class ContributionController { () -> { Toast.makeText(activity, activity.getString(toastTextResource), Toast.LENGTH_LONG).show(); - initiateCameraUpload(activity); + initiateCameraUpload(activity, resultLauncher); } ); } public void handleShowRationaleFlowCameraLocation(Activity activity, - ActivityResultLauncher inAppCameraLocationPermissionLauncher) { + ActivityResultLauncher inAppCameraLocationPermissionLauncher, + ActivityResultLauncher resultLauncher) { DialogUtil.showAlertDialog(activity, activity.getString(R.string.location_permission_title), activity.getString(R.string.in_app_camera_location_permission_rationale), activity.getString(android.R.string.ok), activity.getString(android.R.string.cancel), () -> { createDialogsAndHandleLocationPermissions(activity, - inAppCameraLocationPermissionLauncher); + inAppCameraLocationPermissionLauncher, resultLauncher); }, () -> locationPermissionCallback.onLocationPermissionDenied( activity.getString(R.string.in_app_camera_location_permission_denied)), @@ -181,7 +186,8 @@ public class ContributionController { * @param activity */ private void askUserToAllowLocationAccess(Activity activity, - ActivityResultLauncher inAppCameraLocationPermissionLauncher) { + ActivityResultLauncher inAppCameraLocationPermissionLauncher, + ActivityResultLauncher resultLauncher) { DialogUtil.showAlertDialog(activity, activity.getString(R.string.in_app_camera_location_permission_title), activity.getString(R.string.in_app_camera_location_access_explanation), @@ -190,12 +196,12 @@ public class ContributionController { () -> { defaultKvStore.putBoolean("inAppCameraLocationPref", true); createDialogsAndHandleLocationPermissions(activity, - inAppCameraLocationPermissionLauncher); + inAppCameraLocationPermissionLauncher, resultLauncher); }, () -> { ViewUtil.showLongToast(activity, R.string.in_app_camera_location_permission_denied); defaultKvStore.putBoolean("inAppCameraLocationPref", false); - initiateCameraUpload(activity); + initiateCameraUpload(activity, resultLauncher); }, null, true); @@ -204,18 +210,18 @@ public class ContributionController { /** * Initiate gallery picker */ - public void initiateGalleryPick(final Activity activity, final boolean allowMultipleUploads) { - initiateGalleryUpload(activity, allowMultipleUploads); + public void initiateGalleryPick(final Activity activity, ActivityResultLauncher resultLauncher, final boolean allowMultipleUploads) { + initiateGalleryUpload(activity, resultLauncher, allowMultipleUploads); } /** * Initiate gallery picker with permission */ - public void initiateCustomGalleryPickWithPermission(final Activity activity) { + public void initiateCustomGalleryPickWithPermission(final Activity activity, ActivityResultLauncher resultLauncher) { setPickerConfiguration(activity, true); PermissionUtils.checkPermissionsAndPerformAction(activity, - () -> FilePicker.openCustomSelector(activity, 0), + () -> FilePicker.openCustomSelector(activity, resultLauncher, 0), R.string.storage_permission_title, R.string.write_storage_permission_rationale, PermissionUtils.PERMISSIONS_STORAGE); @@ -225,12 +231,10 @@ public class ContributionController { /** * Open chooser for gallery uploads */ - private void initiateGalleryUpload(final Activity activity, + private void initiateGalleryUpload(final Activity activity, ActivityResultLauncher resultLauncher, final boolean allowMultipleUploads) { setPickerConfiguration(activity, allowMultipleUploads); - boolean openDocumentIntentPreferred = defaultKvStore.getBoolean( - "openDocumentPhotoPickerPref", true); - FilePicker.openGallery(activity, 0, openDocumentIntentPreferred); + FilePicker.openGallery(activity, resultLauncher, 0, isDocumentPhotoPickerPreferred()); } /** @@ -247,22 +251,43 @@ public class ContributionController { /** * Initiate camera upload by opening camera */ - private void initiateCameraUpload(Activity activity) { + private void initiateCameraUpload(Activity activity, ActivityResultLauncher resultLauncher) { setPickerConfiguration(activity, false); if (defaultKvStore.getBoolean("inAppCameraLocationPref", false)) { locationBeforeImageCapture = locationManager.getLastLocation(); } isInAppCameraUpload = true; - FilePicker.openCameraForImage(activity, 0); + FilePicker.openCameraForImage(activity, resultLauncher, 0); + } + + private boolean isDocumentPhotoPickerPreferred(){ + return defaultKvStore.getBoolean( + "openDocumentPhotoPickerPref", true); + } + + public void onPictureReturnedFromGallery(ActivityResult result, Activity activity, FilePicker.Callbacks callbacks){ + + if(isDocumentPhotoPickerPreferred()){ + FilePicker.onPictureReturnedFromDocuments(result, activity, callbacks); + } else { + FilePicker.onPictureReturnedFromGallery(result, activity, callbacks); + } + } + + public void onPictureReturnedFromCustomSelector(ActivityResult result, Activity activity, @NonNull FilePicker.Callbacks callbacks) { + FilePicker.onPictureReturnedFromCustomSelector(result, activity, callbacks); + } + + public void onPictureReturnedFromCamera(ActivityResult result, Activity activity, @NonNull FilePicker.Callbacks callbacks) { + FilePicker.onPictureReturnedFromCamera(result, activity, callbacks); } /** * Attaches callback for file picker. */ - public void handleActivityResult(Activity activity, int requestCode, int resultCode, - Intent data) { - FilePicker.handleActivityResult(requestCode, resultCode, data, activity, - new DefaultCallback() { + public void handleActivityResultWithCallback(Activity activity, FilePicker.HandleActivityResult handleActivityResult) { + + handleActivityResult.onHandleActivityResult(new DefaultCallback() { @Override public void onCanceled(final ImageSource source, final int type) { diff --git a/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsListFragment.java b/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsListFragment.java index 53c91534e..509d1eb95 100644 --- a/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsListFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsListFragment.java @@ -6,6 +6,7 @@ import static fr.free.nrw.commons.di.NetworkingModule.NAMED_LANGUAGE_WIKI_PEDIA_ import android.Manifest.permission; import android.content.Context; +import android.content.Intent; import android.content.res.Configuration; import android.net.Uri; import android.os.Bundle; @@ -20,6 +21,7 @@ import android.widget.LinearLayout; import androidx.activity.result.ActivityResultCallback; import androidx.activity.result.ActivityResultLauncher; import androidx.activity.result.contract.ActivityResultContracts.RequestMultiplePermissions; +import androidx.activity.result.contract.ActivityResultContracts.StartActivityForResult; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.annotation.VisibleForTesting; @@ -96,6 +98,30 @@ public class ContributionsListFragment extends CommonsDaggerSupportFragment impl private int contributionsSize; private String userName; + private final ActivityResultLauncher galleryPickLauncherForResult = + registerForActivityResult(new StartActivityForResult(), + result -> { + controller.handleActivityResultWithCallback(requireActivity(), callbacks -> { + controller.onPictureReturnedFromGallery(result, requireActivity(), callbacks); + }); + }); + + private final ActivityResultLauncher customSelectorLauncherForResult = + registerForActivityResult(new StartActivityForResult(), + result -> { + controller.handleActivityResultWithCallback(requireActivity(), callbacks -> { + controller.onPictureReturnedFromCustomSelector(result, requireActivity(), callbacks); + }); + }); + + private final ActivityResultLauncher cameraPickLauncherForResult = + registerForActivityResult(new StartActivityForResult(), + result -> { + controller.handleActivityResultWithCallback(requireActivity(), callbacks -> { + controller.onPictureReturnedFromCamera(result, requireActivity(), callbacks); + }); + }); + private ActivityResultLauncher inAppCameraLocationPermissionLauncher = registerForActivityResult( new RequestMultiplePermissions(), new ActivityResultCallback>() { @@ -111,7 +137,7 @@ public class ContributionsListFragment extends CommonsDaggerSupportFragment impl } else { if (shouldShowRequestPermissionRationale(permission.ACCESS_FINE_LOCATION)) { controller.handleShowRationaleFlowCameraLocation(getActivity(), - inAppCameraLocationPermissionLauncher); + inAppCameraLocationPermissionLauncher, cameraPickLauncherForResult); } else { controller.locationPermissionCallback.onLocationPermissionDenied( getActivity().getString( @@ -322,7 +348,7 @@ public class ContributionsListFragment extends CommonsDaggerSupportFragment impl private void setListeners() { binding.fabPlus.setOnClickListener(view -> animateFAB(isFabOpen)); binding.fabCamera.setOnClickListener(view -> { - controller.initiateCameraPick(getActivity(), inAppCameraLocationPermissionLauncher); + controller.initiateCameraPick(getActivity(), inAppCameraLocationPermissionLauncher, cameraPickLauncherForResult); animateFAB(isFabOpen); }); binding.fabCamera.setOnLongClickListener(view -> { @@ -330,7 +356,7 @@ public class ContributionsListFragment extends CommonsDaggerSupportFragment impl return true; }); binding.fabGallery.setOnClickListener(view -> { - controller.initiateGalleryPick(getActivity(), true); + controller.initiateGalleryPick(getActivity(), galleryPickLauncherForResult, true); animateFAB(isFabOpen); }); binding.fabGallery.setOnLongClickListener(view -> { @@ -343,7 +369,7 @@ public class ContributionsListFragment extends CommonsDaggerSupportFragment impl * Launch Custom Selector. */ protected void launchCustomSelector() { - controller.initiateCustomGalleryPickWithPermission(getActivity()); + controller.initiateCustomGalleryPickWithPermission(getActivity(), customSelectorLauncherForResult); animateFAB(isFabOpen); } diff --git a/app/src/main/java/fr/free/nrw/commons/contributions/MainActivity.java b/app/src/main/java/fr/free/nrw/commons/contributions/MainActivity.java index 54d3e9681..a9e9ee5c6 100644 --- a/app/src/main/java/fr/free/nrw/commons/contributions/MainActivity.java +++ b/app/src/main/java/fr/free/nrw/commons/contributions/MainActivity.java @@ -438,13 +438,6 @@ public class MainActivity extends BaseActivity }); } - @Override - protected void onActivityResult(int requestCode, int resultCode, Intent data) { - Timber.d(data != null ? data.toString() : "onActivityResult data is null"); - super.onActivityResult(requestCode, resultCode, data); - controller.handleActivityResult(this, requestCode, resultCode, data); - } - @Override protected void onResume() { super.onResume(); diff --git a/app/src/main/java/fr/free/nrw/commons/customselector/ui/selector/CustomSelectorActivity.kt b/app/src/main/java/fr/free/nrw/commons/customselector/ui/selector/CustomSelectorActivity.kt index 3bba6f05c..959db52f3 100644 --- a/app/src/main/java/fr/free/nrw/commons/customselector/ui/selector/CustomSelectorActivity.kt +++ b/app/src/main/java/fr/free/nrw/commons/customselector/ui/selector/CustomSelectorActivity.kt @@ -13,6 +13,8 @@ import android.view.Window import android.widget.Button import android.widget.ImageButton import android.widget.TextView +import androidx.activity.result.ActivityResult +import androidx.activity.result.contract.ActivityResultContracts.StartActivityForResult import androidx.compose.foundation.BorderStroke import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.fillMaxWidth @@ -146,6 +148,10 @@ class CustomSelectorActivity : private var showPartialAccessIndicator by mutableStateOf(false) + private val startForResult = registerForActivityResult(StartActivityForResult()){ result -> + onFullScreenDataReceived(result) + } + /** * onCreate Activity, sets theme, initialises the view model, setup view. */ @@ -224,17 +230,10 @@ class CustomSelectorActivity : /** * When data will be send from full screen mode, it will be passed to fragment */ - override fun onActivityResult( - requestCode: Int, - resultCode: Int, - data: Intent?, - ) { - super.onActivityResult(requestCode, resultCode, data) - if (requestCode == Constants.RequestCodes.RECEIVE_DATA_FROM_FULL_SCREEN_MODE && - resultCode == Activity.RESULT_OK - ) { + private fun onFullScreenDataReceived(result: ActivityResult){ + if (result.resultCode == Activity.RESULT_OK) { val selectedImages: ArrayList = - data!! + result.data!! .getParcelableArrayListExtra(CustomSelectorConstants.NEW_SELECTED_IMAGES)!! viewModel?.selectedImages?.value = selectedImages } @@ -509,7 +508,7 @@ class CustomSelectorActivity : selectedImages, ) intent.putExtra(CustomSelectorConstants.BUCKET_ID, bucketId) - startActivityForResult(intent, Constants.RequestCodes.RECEIVE_DATA_FROM_FULL_SCREEN_MODE) + startForResult.launch(intent) } /** diff --git a/app/src/main/java/fr/free/nrw/commons/description/DescriptionEditActivity.kt b/app/src/main/java/fr/free/nrw/commons/description/DescriptionEditActivity.kt index 0dbdf71ae..cfd7f36b9 100644 --- a/app/src/main/java/fr/free/nrw/commons/description/DescriptionEditActivity.kt +++ b/app/src/main/java/fr/free/nrw/commons/description/DescriptionEditActivity.kt @@ -6,6 +6,8 @@ import android.os.Bundle import android.os.Parcelable import android.speech.RecognizerIntent import android.view.View +import androidx.activity.result.ActivityResult +import androidx.activity.result.contract.ActivityResultContracts import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import fr.free.nrw.commons.CommonsApplication @@ -70,10 +72,14 @@ class DescriptionEditActivity : private lateinit var binding: ActivityDescriptionEditBinding - private val requestCodeForVoiceInput = 1213 - private var descriptionAndCaptions: ArrayList? = null + private val voiceInputResultLauncher = registerForActivityResult( + ActivityResultContracts.StartActivityForResult() + ) { result: ActivityResult -> + onVoiceInput(result) + } + @Inject lateinit var descriptionEditHelper: DescriptionEditHelper @Inject lateinit var sessionManager: SessionManager @@ -115,6 +121,7 @@ class DescriptionEditActivity : savedLanguageValue, descriptionAndCaptions, recentLanguagesDao, + voiceInputResultLauncher ) uploadMediaDetailAdapter.setCallback { titleStringID: Int, messageStringId: Int -> showInfoAlert( @@ -149,6 +156,15 @@ class DescriptionEditActivity : override fun onPrimaryCaptionTextChange(isNotEmpty: Boolean) {} + private fun onVoiceInput(result: ActivityResult) { + if (result.resultCode == RESULT_OK && result.data != null) { + val resultData = result.data!!.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS) + uploadMediaDetailAdapter.handleSpeechResult(resultData!![0]) + } else { + Timber.e("Error %s", result.resultCode) + } + } + /** * Adds new language item to RecyclerView */ @@ -292,22 +308,6 @@ class DescriptionEditActivity : progressDialog!!.show() } - override fun onActivityResult( - requestCode: Int, - resultCode: Int, - data: Intent?, - ) { - super.onActivityResult(requestCode, resultCode, data) - if (requestCode == requestCodeForVoiceInput) { - if (resultCode == RESULT_OK && data != null) { - val result = data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS) - uploadMediaDetailAdapter.handleSpeechResult(result!![0]) - } else { - Timber.e("Error %s", resultCode) - } - } - } - override fun onSaveInstanceState(outState: Bundle) { super.onSaveInstanceState(outState) diff --git a/app/src/main/java/fr/free/nrw/commons/filepicker/Constants.java b/app/src/main/java/fr/free/nrw/commons/filepicker/Constants.java index f907f0a01..4a5823252 100644 --- a/app/src/main/java/fr/free/nrw/commons/filepicker/Constants.java +++ b/app/src/main/java/fr/free/nrw/commons/filepicker/Constants.java @@ -4,20 +4,11 @@ public interface Constants { String DEFAULT_FOLDER_NAME = "CommonsContributions"; /** - * Provides the request codes utilised by the FilePicker + * Provides the request codes for permission handling */ interface RequestCodes { int LOCATION = 1; int STORAGE = 2; - int FILE_PICKER_IMAGE_IDENTIFICATOR = 0b1101101100; //876 - int SOURCE_CHOOSER = 1 << 15; - - int PICK_PICTURE_FROM_CUSTOM_SELECTOR = FILE_PICKER_IMAGE_IDENTIFICATOR + (1 << 10); - int PICK_PICTURE_FROM_DOCUMENTS = FILE_PICKER_IMAGE_IDENTIFICATOR + (1 << 11); - int PICK_PICTURE_FROM_GALLERY = FILE_PICKER_IMAGE_IDENTIFICATOR + (1 << 12); - int TAKE_PICTURE = FILE_PICKER_IMAGE_IDENTIFICATOR + (1 << 13); - - int RECEIVE_DATA_FROM_FULL_SCREEN_MODE = 1 << 9; } /** diff --git a/app/src/main/java/fr/free/nrw/commons/filepicker/FilePicker.java b/app/src/main/java/fr/free/nrw/commons/filepicker/FilePicker.java index daa29276a..b64db24c5 100644 --- a/app/src/main/java/fr/free/nrw/commons/filepicker/FilePicker.java +++ b/app/src/main/java/fr/free/nrw/commons/filepicker/FilePicker.java @@ -12,6 +12,8 @@ import android.content.pm.ResolveInfo; import android.net.Uri; import android.provider.MediaStore; import android.text.TextUtils; +import androidx.activity.result.ActivityResult; +import androidx.activity.result.ActivityResultLauncher; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.preference.PreferenceManager; @@ -107,31 +109,25 @@ public class FilePicker implements Constants { * * @param type Custom type of your choice, which will be returned with the images */ - public static void openGallery(Activity activity, int type, boolean openDocumentIntentPreferred) { + public static void openGallery(Activity activity, ActivityResultLauncher resultLauncher, int type, boolean openDocumentIntentPreferred) { Intent intent = createGalleryIntent(activity, type, openDocumentIntentPreferred); - int requestCode = RequestCodes.PICK_PICTURE_FROM_GALLERY; - - if(openDocumentIntentPreferred){ - requestCode = RequestCodes.PICK_PICTURE_FROM_DOCUMENTS; - } - - activity.startActivityForResult(intent, requestCode); + resultLauncher.launch(intent); } /** * Opens Custom Selector */ - public static void openCustomSelector(Activity activity, int type) { + public static void openCustomSelector(Activity activity, ActivityResultLauncher resultLauncher, int type) { Intent intent = createCustomSelectorIntent(activity, type); - activity.startActivityForResult(intent, RequestCodes.PICK_PICTURE_FROM_CUSTOM_SELECTOR); + resultLauncher.launch(intent); } /** * Opens the camera app to pick image clicked by user */ - public static void openCameraForImage(Activity activity, int type) { + public static void openCameraForImage(Activity activity, ActivityResultLauncher resultLauncher, int type) { Intent intent = createCameraForImageIntent(activity, type); - activity.startActivityForResult(intent, RequestCodes.TAKE_PICTURE); + resultLauncher.launch(intent); } @Nullable @@ -154,43 +150,6 @@ public class FilePicker implements Constants { } } - /** - * Any activity can use this method to attach their callback to the file picker - */ - public static void handleActivityResult(int requestCode, int resultCode, Intent data, Activity activity, @NonNull FilePicker.Callbacks callbacks) { - boolean isHandledPickedFile = (requestCode & RequestCodes.FILE_PICKER_IMAGE_IDENTIFICATOR) > 0; - if (isHandledPickedFile) { - requestCode &= ~RequestCodes.SOURCE_CHOOSER; - if (requestCode == RequestCodes.PICK_PICTURE_FROM_GALLERY || - requestCode == RequestCodes.TAKE_PICTURE || - requestCode == RequestCodes.PICK_PICTURE_FROM_DOCUMENTS || - requestCode == RequestCodes.PICK_PICTURE_FROM_CUSTOM_SELECTOR) { - if (resultCode == Activity.RESULT_OK) { - if (requestCode == RequestCodes.PICK_PICTURE_FROM_DOCUMENTS && !isPhoto(data)) { - onPictureReturnedFromDocuments(data, activity, callbacks); - } else if (requestCode == RequestCodes.PICK_PICTURE_FROM_GALLERY && !isPhoto(data)) { - onPictureReturnedFromGallery(data, activity, callbacks); - } else if (requestCode == RequestCodes.PICK_PICTURE_FROM_CUSTOM_SELECTOR) { - onPictureReturnedFromCustomSelector(data, activity, callbacks); - } else if (requestCode == RequestCodes.TAKE_PICTURE) { - onPictureReturnedFromCamera(activity, callbacks); - } - } else { - if (requestCode == RequestCodes.PICK_PICTURE_FROM_DOCUMENTS) { - callbacks.onCanceled(FilePicker.ImageSource.DOCUMENTS, restoreType(activity)); - } else if (requestCode == RequestCodes.PICK_PICTURE_FROM_GALLERY) { - callbacks.onCanceled(FilePicker.ImageSource.GALLERY, restoreType(activity)); - } else if (requestCode == RequestCodes.PICK_PICTURE_FROM_CUSTOM_SELECTOR){ - callbacks.onCanceled(ImageSource.CUSTOM_SELECTOR, restoreType(activity)); - } - else { - callbacks.onCanceled(FilePicker.ImageSource.CAMERA_IMAGE, restoreType(activity)); - } - } - } - } - } - public static List handleExternalImagesPicked(Intent data, Activity activity) { try { return getFilesFromGalleryPictures(data, activity); @@ -243,18 +202,22 @@ public class FilePicker implements Constants { return intent; } - private static void onPictureReturnedFromDocuments(Intent data, Activity activity, @NonNull FilePicker.Callbacks callbacks) { - try { - Uri photoPath = data.getData(); - UploadableFile photoFile = PickedFiles.pickedExistingPicture(activity, photoPath); - callbacks.onImagesPicked(singleFileList(photoFile), FilePicker.ImageSource.DOCUMENTS, restoreType(activity)); + public static void onPictureReturnedFromDocuments(ActivityResult result, Activity activity, @NonNull FilePicker.Callbacks callbacks) { + if(result.getResultCode() == Activity.RESULT_OK && !isPhoto(result.getData())){ + try { + Uri photoPath = result.getData().getData(); + UploadableFile photoFile = PickedFiles.pickedExistingPicture(activity, photoPath); + callbacks.onImagesPicked(singleFileList(photoFile), FilePicker.ImageSource.DOCUMENTS, restoreType(activity)); - if (configuration(activity).shouldCopyPickedImagesToPublicGalleryAppFolder()) { - PickedFiles.copyFilesInSeparateThread(activity, singleFileList(photoFile)); + if (configuration(activity).shouldCopyPickedImagesToPublicGalleryAppFolder()) { + PickedFiles.copyFilesInSeparateThread(activity, singleFileList(photoFile)); + } + } catch (Exception e) { + e.printStackTrace(); + callbacks.onImagePickerError(e, FilePicker.ImageSource.DOCUMENTS, restoreType(activity)); } - } catch (Exception e) { - e.printStackTrace(); - callbacks.onImagePickerError(e, FilePicker.ImageSource.DOCUMENTS, restoreType(activity)); + } else { + callbacks.onCanceled(FilePicker.ImageSource.DOCUMENTS, restoreType(activity)); } } @@ -262,14 +225,18 @@ public class FilePicker implements Constants { * onPictureReturnedFromCustomSelector. * Retrieve and forward the images to upload wizard through callback. */ - private static void onPictureReturnedFromCustomSelector(Intent data, Activity activity, @NonNull FilePicker.Callbacks callbacks) { - try { - List files = getFilesFromCustomSelector(data, activity); - callbacks.onImagesPicked(files, ImageSource.CUSTOM_SELECTOR, restoreType(activity)); - } catch (Exception e) { - e.printStackTrace(); - callbacks.onImagePickerError(e, ImageSource.CUSTOM_SELECTOR, restoreType(activity)); - } + public static void onPictureReturnedFromCustomSelector(ActivityResult result, Activity activity, @NonNull FilePicker.Callbacks callbacks) { + if(result.getResultCode() == Activity.RESULT_OK){ + try { + List files = getFilesFromCustomSelector(result.getData(), activity); + callbacks.onImagesPicked(files, ImageSource.CUSTOM_SELECTOR, restoreType(activity)); + } catch (Exception e) { + e.printStackTrace(); + callbacks.onImagePickerError(e, ImageSource.CUSTOM_SELECTOR, restoreType(activity)); + } + } else { + callbacks.onCanceled(ImageSource.CUSTOM_SELECTOR, restoreType(activity)); + } } /** @@ -292,13 +259,17 @@ public class FilePicker implements Constants { return files; } - private static void onPictureReturnedFromGallery(Intent data, Activity activity, @NonNull FilePicker.Callbacks callbacks) { - try { - List files = getFilesFromGalleryPictures(data, activity); - callbacks.onImagesPicked(files, FilePicker.ImageSource.GALLERY, restoreType(activity)); - } catch (Exception e) { - e.printStackTrace(); - callbacks.onImagePickerError(e, FilePicker.ImageSource.GALLERY, restoreType(activity)); + public static void onPictureReturnedFromGallery(ActivityResult result, Activity activity, @NonNull FilePicker.Callbacks callbacks) { + if(result.getResultCode() == Activity.RESULT_OK && !isPhoto(result.getData())){ + try { + List files = getFilesFromGalleryPictures(result.getData(), activity); + callbacks.onImagesPicked(files, FilePicker.ImageSource.GALLERY, restoreType(activity)); + } catch (Exception e) { + e.printStackTrace(); + callbacks.onImagePickerError(e, FilePicker.ImageSource.GALLERY, restoreType(activity)); + } + } else{ + callbacks.onCanceled(FilePicker.ImageSource.GALLERY, restoreType(activity)); } } @@ -324,69 +295,40 @@ public class FilePicker implements Constants { return files; } - private static void onPictureReturnedFromCamera(Activity activity, @NonNull FilePicker.Callbacks callbacks) { - try { - String lastImageUri = PreferenceManager.getDefaultSharedPreferences(activity).getString(KEY_PHOTO_URI, null); - if (!TextUtils.isEmpty(lastImageUri)) { - revokeWritePermission(activity, Uri.parse(lastImageUri)); - } - - UploadableFile photoFile = FilePicker.takenCameraPicture(activity); - List files = new ArrayList<>(); - files.add(photoFile); - - if (photoFile == null) { - Exception e = new IllegalStateException("Unable to get the picture returned from camera"); - callbacks.onImagePickerError(e, FilePicker.ImageSource.CAMERA_IMAGE, restoreType(activity)); - } else { - if (configuration(activity).shouldCopyTakenPhotosToPublicGalleryAppFolder()) { - PickedFiles.copyFilesInSeparateThread(activity, singleFileList(photoFile)); + public static void onPictureReturnedFromCamera(ActivityResult activityResult, Activity activity, @NonNull FilePicker.Callbacks callbacks) { + if(activityResult.getResultCode() == Activity.RESULT_OK){ + try { + String lastImageUri = PreferenceManager.getDefaultSharedPreferences(activity).getString(KEY_PHOTO_URI, null); + if (!TextUtils.isEmpty(lastImageUri)) { + revokeWritePermission(activity, Uri.parse(lastImageUri)); } - callbacks.onImagesPicked(files, FilePicker.ImageSource.CAMERA_IMAGE, restoreType(activity)); - } + UploadableFile photoFile = FilePicker.takenCameraPicture(activity); + List files = new ArrayList<>(); + files.add(photoFile); - PreferenceManager.getDefaultSharedPreferences(activity) + if (photoFile == null) { + Exception e = new IllegalStateException("Unable to get the picture returned from camera"); + callbacks.onImagePickerError(e, FilePicker.ImageSource.CAMERA_IMAGE, restoreType(activity)); + } else { + if (configuration(activity).shouldCopyTakenPhotosToPublicGalleryAppFolder()) { + PickedFiles.copyFilesInSeparateThread(activity, singleFileList(photoFile)); + } + + callbacks.onImagesPicked(files, FilePicker.ImageSource.CAMERA_IMAGE, restoreType(activity)); + } + + PreferenceManager.getDefaultSharedPreferences(activity) .edit() .remove(KEY_LAST_CAMERA_PHOTO) .remove(KEY_PHOTO_URI) .apply(); - } catch (Exception e) { - e.printStackTrace(); - callbacks.onImagePickerError(e, FilePicker.ImageSource.CAMERA_IMAGE, restoreType(activity)); - } - } - - private static void onVideoReturnedFromCamera(Activity activity, @NonNull FilePicker.Callbacks callbacks) { - try { - String lastVideoUri = PreferenceManager.getDefaultSharedPreferences(activity).getString(KEY_VIDEO_URI, null); - if (!TextUtils.isEmpty(lastVideoUri)) { - revokeWritePermission(activity, Uri.parse(lastVideoUri)); + } catch (Exception e) { + e.printStackTrace(); + callbacks.onImagePickerError(e, FilePicker.ImageSource.CAMERA_IMAGE, restoreType(activity)); } - - UploadableFile photoFile = FilePicker.takenCameraVideo(activity); - List files = new ArrayList<>(); - files.add(photoFile); - - if (photoFile == null) { - Exception e = new IllegalStateException("Unable to get the video returned from camera"); - callbacks.onImagePickerError(e, FilePicker.ImageSource.CAMERA_VIDEO, restoreType(activity)); - } else { - if (configuration(activity).shouldCopyTakenPhotosToPublicGalleryAppFolder()) { - PickedFiles.copyFilesInSeparateThread(activity, singleFileList(photoFile)); - } - - callbacks.onImagesPicked(files, FilePicker.ImageSource.CAMERA_VIDEO, restoreType(activity)); - } - - PreferenceManager.getDefaultSharedPreferences(activity) - .edit() - .remove(KEY_LAST_CAMERA_VIDEO) - .remove(KEY_VIDEO_URI) - .apply(); - } catch (Exception e) { - e.printStackTrace(); - callbacks.onImagePickerError(e, FilePicker.ImageSource.CAMERA_VIDEO, restoreType(activity)); + } else { + callbacks.onCanceled(FilePicker.ImageSource.CAMERA_IMAGE, restoreType(activity)); } } @@ -406,4 +348,8 @@ public class FilePicker implements Constants { void onCanceled(FilePicker.ImageSource source, int type); } + + public interface HandleActivityResult{ + void onHandleActivityResult(FilePicker.Callbacks callbacks); + } } diff --git a/app/src/main/java/fr/free/nrw/commons/media/MediaDetailFragment.java b/app/src/main/java/fr/free/nrw/commons/media/MediaDetailFragment.java index 7336c1b40..dd0829a1b 100644 --- a/app/src/main/java/fr/free/nrw/commons/media/MediaDetailFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/media/MediaDetailFragment.java @@ -1,13 +1,10 @@ package fr.free.nrw.commons.media; -import static android.app.Activity.RESULT_CANCELED; -import static android.app.Activity.RESULT_OK; import static android.view.View.GONE; import static android.view.View.VISIBLE; import static fr.free.nrw.commons.category.CategoryClientKt.CATEGORY_NEEDING_CATEGORIES; import static fr.free.nrw.commons.category.CategoryClientKt.CATEGORY_UNCATEGORISED; import static fr.free.nrw.commons.description.EditDescriptionConstants.LIST_OF_DESCRIPTION_AND_CAPTION; -import static fr.free.nrw.commons.description.EditDescriptionConstants.UPDATED_WIKITEXT; import static fr.free.nrw.commons.description.EditDescriptionConstants.WIKITEXT; import static fr.free.nrw.commons.upload.mediaDetails.UploadMediaDetailFragment.LAST_LOCATION; import static fr.free.nrw.commons.utils.LangCodeUtils.getLocalizedResources; @@ -112,8 +109,6 @@ import timber.log.Timber; public class MediaDetailFragment extends CommonsDaggerSupportFragment implements CategoryEditHelper.Callback { - private static final int REQUEST_CODE = 1001; - private static final int REQUEST_CODE_EDIT_DESCRIPTION = 1002; private static final String IMAGE_BACKGROUND_COLOR = "image_background_color"; static final int DEFAULT_IMAGE_BACKGROUND_COLOR = 0; @@ -1065,81 +1060,6 @@ public class MediaDetailFragment extends CommonsDaggerSupportFragment implements return captionList; } - /** - * Get the result from another activity and act accordingly. - * @param requestCode - * @param resultCode - * @param data - */ - @Override - public void onActivityResult(final int requestCode, final int resultCode, - @Nullable final Intent data) { - super.onActivityResult(requestCode, resultCode, data); - - if (requestCode == REQUEST_CODE_EDIT_DESCRIPTION && resultCode == RESULT_OK) { - final String updatedWikiText = data.getStringExtra(UPDATED_WIKITEXT); - - try { - compositeDisposable.add(descriptionEditHelper.addDescription(getContext(), media, - updatedWikiText) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(s -> { - Timber.d("Descriptions are added."); - })); - } catch (Exception e) { - if (e.getLocalizedMessage().equals(CsrfTokenClient.ANONYMOUS_TOKEN_MESSAGE)) { - final String username = sessionManager.getUserName(); - final CommonsApplication.BaseLogoutListener logoutListener = new CommonsApplication.BaseLogoutListener( - getActivity(), - requireActivity().getString(R.string.invalid_login_message), - username - ); - - CommonsApplication.getInstance().clearApplicationData( - requireActivity(), logoutListener); - } - } - - final ArrayList uploadMediaDetails - = data.getParcelableArrayListExtra(LIST_OF_DESCRIPTION_AND_CAPTION); - - LinkedHashMap updatedCaptions = new LinkedHashMap<>(); - for (UploadMediaDetail mediaDetail: - uploadMediaDetails) { - try { - compositeDisposable.add(descriptionEditHelper.addCaption(getContext(), media, - mediaDetail.getLanguageCode(), mediaDetail.getCaptionText()) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(s -> { - updateCaptions(mediaDetail, updatedCaptions); - Timber.d("Caption is added."); - })); - - } catch (Exception e) { - if (e.getLocalizedMessage().equals(CsrfTokenClient.ANONYMOUS_TOKEN_MESSAGE)) { - final String username = sessionManager.getUserName(); - final CommonsApplication.BaseLogoutListener logoutListener = new CommonsApplication.BaseLogoutListener( - getActivity(), - requireActivity().getString(R.string.invalid_login_message), - username - ); - - CommonsApplication.getInstance().clearApplicationData( - requireActivity(), logoutListener); - } - } - } - binding.progressBarEdit.setVisibility(GONE); - binding.descriptionEdit.setVisibility(VISIBLE); - - } else if (requestCode == REQUEST_CODE_EDIT_DESCRIPTION && resultCode == RESULT_CANCELED) { - binding.progressBarEdit.setVisibility(GONE); - binding.descriptionEdit.setVisibility(VISIBLE); - } - } - /** * Adds caption to the map and updates captions * @param mediaDetail UploadMediaDetail diff --git a/app/src/main/java/fr/free/nrw/commons/nearby/PlaceAdapterDelegate.kt b/app/src/main/java/fr/free/nrw/commons/nearby/PlaceAdapterDelegate.kt index 5152ac0f7..a4ea3cd5b 100644 --- a/app/src/main/java/fr/free/nrw/commons/nearby/PlaceAdapterDelegate.kt +++ b/app/src/main/java/fr/free/nrw/commons/nearby/PlaceAdapterDelegate.kt @@ -1,5 +1,6 @@ package fr.free.nrw.commons.nearby +import android.content.Intent import android.view.View import android.view.View.GONE import android.view.View.INVISIBLE @@ -17,9 +18,9 @@ import fr.free.nrw.commons.databinding.ItemPlaceBinding fun placeAdapterDelegate( bookmarkLocationDao: BookmarkLocationsDao, onItemClick: ((Place) -> Unit)? = null, - onCameraClicked: (Place, ActivityResultLauncher>) -> Unit, + onCameraClicked: (Place, ActivityResultLauncher>, ActivityResultLauncher) -> Unit, onCameraLongPressed: () -> Boolean, - onGalleryClicked: (Place) -> Unit, + onGalleryClicked: (Place, ActivityResultLauncher) -> Unit, onGalleryLongPressed: () -> Boolean, onBookmarkClicked: (Place, Boolean) -> Unit, onBookmarkLongPressed: () -> Boolean, @@ -28,6 +29,8 @@ fun placeAdapterDelegate( onDirectionsClicked: (Place) -> Unit, onDirectionsLongPressed: () -> Boolean, inAppCameraLocationPermissionLauncher: ActivityResultLauncher>, + cameraPickLauncherForResult: ActivityResultLauncher, + galleryPickLauncherForResult: ActivityResultLauncher ) = adapterDelegateViewBinding({ layoutInflater, parent -> ItemPlaceBinding.inflate(layoutInflater, parent, false) }) { @@ -44,10 +47,10 @@ fun placeAdapterDelegate( onItemClick?.invoke(item) } } - nearbyButtonLayout.cameraButton.setOnClickListener { onCameraClicked(item, inAppCameraLocationPermissionLauncher) } + nearbyButtonLayout.cameraButton.setOnClickListener { onCameraClicked(item, inAppCameraLocationPermissionLauncher, cameraPickLauncherForResult) } nearbyButtonLayout.cameraButton.setOnLongClickListener { onCameraLongPressed() } - nearbyButtonLayout.galleryButton.setOnClickListener { onGalleryClicked(item) } + nearbyButtonLayout.galleryButton.setOnClickListener { onGalleryClicked(item, galleryPickLauncherForResult) } nearbyButtonLayout.galleryButton.setOnLongClickListener { onGalleryLongPressed() } bookmarkButtonImage.setOnClickListener { val isBookmarked = bookmarkLocationDao.updateBookmarkLocation(item) diff --git a/app/src/main/java/fr/free/nrw/commons/nearby/fragments/CommonPlaceClickActions.kt b/app/src/main/java/fr/free/nrw/commons/nearby/fragments/CommonPlaceClickActions.kt index f3eecf116..a4d6b14b7 100644 --- a/app/src/main/java/fr/free/nrw/commons/nearby/fragments/CommonPlaceClickActions.kt +++ b/app/src/main/java/fr/free/nrw/commons/nearby/fragments/CommonPlaceClickActions.kt @@ -28,14 +28,14 @@ class CommonPlaceClickActions private val activity: Activity, private val contributionController: ContributionController, ) { - fun onCameraClicked(): (Place, ActivityResultLauncher>) -> Unit = - { place, launcher -> + fun onCameraClicked(): (Place, ActivityResultLauncher>, ActivityResultLauncher) -> Unit = + { place, launcher, resultLauncher -> if (applicationKvStore.getBoolean("login_skipped", false)) { showLoginDialog() } else { Timber.d("Camera button tapped. Image title: ${place.getName()}Image desc: ${place.longDescription}") storeSharedPrefs(place) - contributionController.initiateCameraPick(activity, launcher) + contributionController.initiateCameraPick(activity, launcher, resultLauncher) } } @@ -72,14 +72,14 @@ class CommonPlaceClickActions true } - fun onGalleryClicked(): (Place) -> Unit = - { + fun onGalleryClicked(): (Place, ActivityResultLauncher) -> Unit = + {place, galleryPickLauncherForResult -> if (applicationKvStore.getBoolean("login_skipped", false)) { showLoginDialog() } else { - Timber.d("Gallery button tapped. Image title: ${it.getName()}Image desc: ${it.getLongDescription()}") - storeSharedPrefs(it) - contributionController.initiateGalleryPick(activity, false) + Timber.d("Gallery button tapped. Image title: ${place.getName()}Image desc: ${place.getLongDescription()}") + storeSharedPrefs(place) + contributionController.initiateGalleryPick(activity, galleryPickLauncherForResult, false) } } diff --git a/app/src/main/java/fr/free/nrw/commons/nearby/fragments/NearbyParentFragment.java b/app/src/main/java/fr/free/nrw/commons/nearby/fragments/NearbyParentFragment.java index f578afc25..7a7d5cdcb 100644 --- a/app/src/main/java/fr/free/nrw/commons/nearby/fragments/NearbyParentFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/nearby/fragments/NearbyParentFragment.java @@ -49,6 +49,7 @@ import androidx.activity.result.ActivityResultCallback; import androidx.activity.result.ActivityResultLauncher; import androidx.activity.result.contract.ActivityResultContracts.RequestMultiplePermissions; import androidx.activity.result.contract.ActivityResultContracts.RequestPermission; +import androidx.activity.result.contract.ActivityResultContracts.StartActivityForResult; import androidx.annotation.DrawableRes; import androidx.annotation.NonNull; import androidx.annotation.Nullable; @@ -225,6 +226,31 @@ public class NearbyParentFragment extends CommonsDaggerSupportFragment private GridLayoutManager gridLayoutManager; private List dataList; private BottomSheetAdapter bottomSheetAdapter; + + private final ActivityResultLauncher galleryPickLauncherForResult = + registerForActivityResult(new StartActivityForResult(), + result -> { + controller.handleActivityResultWithCallback(requireActivity(), callbacks -> { + controller.onPictureReturnedFromGallery(result, requireActivity(), callbacks); + }); + }); + + private final ActivityResultLauncher customSelectorLauncherForResult = + registerForActivityResult(new StartActivityForResult(), + result -> { + controller.handleActivityResultWithCallback(requireActivity(), callbacks -> { + controller.onPictureReturnedFromCustomSelector(result, requireActivity(), callbacks); + }); + }); + + private final ActivityResultLauncher cameraPickLauncherForResult = + registerForActivityResult(new StartActivityForResult(), + result -> { + controller.handleActivityResultWithCallback(requireActivity(), callbacks -> { + controller.onPictureReturnedFromCamera(result, requireActivity(), callbacks); + }); + }); + private ActivityResultLauncher inAppCameraLocationPermissionLauncher = registerForActivityResult( new RequestMultiplePermissions(), new ActivityResultCallback>() { @@ -240,7 +266,7 @@ public class NearbyParentFragment extends CommonsDaggerSupportFragment } else { if (shouldShowRequestPermissionRationale(permission.ACCESS_FINE_LOCATION)) { controller.handleShowRationaleFlowCameraLocation(getActivity(), - inAppCameraLocationPermissionLauncher); + inAppCameraLocationPermissionLauncher, cameraPickLauncherForResult); } else { controller.locationPermissionCallback.onLocationPermissionDenied( getActivity().getString( @@ -570,7 +596,9 @@ public class NearbyParentFragment extends CommonsDaggerSupportFragment return Unit.INSTANCE; }, commonPlaceClickActions, - inAppCameraLocationPermissionLauncher + inAppCameraLocationPermissionLauncher, + galleryPickLauncherForResult, + cameraPickLauncherForResult ); binding.bottomSheetNearby.rvNearbyList.setAdapter(adapter); } @@ -2201,7 +2229,7 @@ public class NearbyParentFragment extends CommonsDaggerSupportFragment if (binding.fabCamera.isShown()) { Timber.d("Camera button tapped. Place: %s", selectedPlace.toString()); storeSharedPrefs(selectedPlace); - controller.initiateCameraPick(getActivity(), inAppCameraLocationPermissionLauncher); + controller.initiateCameraPick(getActivity(), inAppCameraLocationPermissionLauncher, cameraPickLauncherForResult); } }); @@ -2210,6 +2238,7 @@ public class NearbyParentFragment extends CommonsDaggerSupportFragment Timber.d("Gallery button tapped. Place: %s", selectedPlace.toString()); storeSharedPrefs(selectedPlace); controller.initiateGalleryPick(getActivity(), + galleryPickLauncherForResult, false); } }); @@ -2218,7 +2247,7 @@ public class NearbyParentFragment extends CommonsDaggerSupportFragment if (binding.fabCustomGallery.isShown()) { Timber.d("Gallery button tapped. Place: %s", selectedPlace.toString()); storeSharedPrefs(selectedPlace); - controller.initiateCustomGalleryPickWithPermission(getActivity()); + controller.initiateCustomGalleryPickWithPermission(getActivity(), customSelectorLauncherForResult); } }); } diff --git a/app/src/main/java/fr/free/nrw/commons/nearby/fragments/PlaceAdapter.kt b/app/src/main/java/fr/free/nrw/commons/nearby/fragments/PlaceAdapter.kt index 689aa7efc..e5cc92667 100644 --- a/app/src/main/java/fr/free/nrw/commons/nearby/fragments/PlaceAdapter.kt +++ b/app/src/main/java/fr/free/nrw/commons/nearby/fragments/PlaceAdapter.kt @@ -1,5 +1,6 @@ package fr.free.nrw.commons.nearby.fragments +import android.content.Intent import androidx.activity.result.ActivityResultLauncher import fr.free.nrw.commons.bookmarks.locations.BookmarkLocationsDao import fr.free.nrw.commons.nearby.Place @@ -12,6 +13,8 @@ class PlaceAdapter( onBookmarkClicked: (Place, Boolean) -> Unit, commonPlaceClickActions: CommonPlaceClickActions, inAppCameraLocationPermissionLauncher: ActivityResultLauncher>, + galleryPickLauncherForResult: ActivityResultLauncher, + cameraPickLauncherForResult: ActivityResultLauncher ) : BaseDelegateAdapter( placeAdapterDelegate( bookmarkLocationsDao, @@ -27,6 +30,8 @@ class PlaceAdapter( commonPlaceClickActions.onDirectionsClicked(), commonPlaceClickActions.onDirectionsLongPressed(), inAppCameraLocationPermissionLauncher, + cameraPickLauncherForResult, + galleryPickLauncherForResult ), areItemsTheSame = { oldItem, newItem -> oldItem.wikiDataEntityId == newItem.wikiDataEntityId }, ) diff --git a/app/src/main/java/fr/free/nrw/commons/settings/SettingsFragment.java b/app/src/main/java/fr/free/nrw/commons/settings/SettingsFragment.java index 94e799aa2..5e631425b 100644 --- a/app/src/main/java/fr/free/nrw/commons/settings/SettingsFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/settings/SettingsFragment.java @@ -21,6 +21,7 @@ import android.widget.TextView; import androidx.activity.result.ActivityResultCallback; import androidx.activity.result.ActivityResultLauncher; import androidx.activity.result.contract.ActivityResultContracts; +import androidx.activity.result.contract.ActivityResultContracts.StartActivityForResult; import androidx.preference.ListPreference; import androidx.preference.MultiSelectListPreference; import androidx.preference.Preference; @@ -85,6 +86,15 @@ public class SettingsFragment extends PreferenceFragmentCompat { private View separator; private ListView languageHistoryListView; private static final String GET_CONTENT_PICKER_HELP_URL = "https://commons-app.github.io/docs.html#get-content"; + + private final ActivityResultLauncher cameraPickLauncherForResult = + registerForActivityResult(new StartActivityForResult(), + result -> { + contributionController.handleActivityResultWithCallback(requireActivity(), callbacks -> { + contributionController.onPictureReturnedFromCamera(result, requireActivity(), callbacks); + }); + }); + private ActivityResultLauncher inAppCameraLocationPermissionLauncher = registerForActivityResult(new ActivityResultContracts.RequestMultiplePermissions(), new ActivityResultCallback>() { @Override public void onActivityResult(Map result) { @@ -93,7 +103,7 @@ public class SettingsFragment extends PreferenceFragmentCompat { areAllGranted = areAllGranted && b; } if (!areAllGranted && shouldShowRequestPermissionRationale(permission.ACCESS_FINE_LOCATION)) { - contributionController.handleShowRationaleFlowCameraLocation(getActivity(), inAppCameraLocationPermissionLauncher); + contributionController.handleShowRationaleFlowCameraLocation(getActivity(), inAppCameraLocationPermissionLauncher, cameraPickLauncherForResult); } } }); diff --git a/app/src/main/java/fr/free/nrw/commons/upload/UploadActivity.java b/app/src/main/java/fr/free/nrw/commons/upload/UploadActivity.java index 23b187340..35906c3fb 100644 --- a/app/src/main/java/fr/free/nrw/commons/upload/UploadActivity.java +++ b/app/src/main/java/fr/free/nrw/commons/upload/UploadActivity.java @@ -441,14 +441,6 @@ public class UploadActivity extends BaseActivity implements UploadContract.View, super.onRequestPermissionsResult(requestCode, permissions, grantResults); } - @Override - protected void onActivityResult(int requestCode, int resultCode, Intent data) { - super.onActivityResult(requestCode, resultCode, data); - if (requestCode == CommonsApplication.OPEN_APPLICATION_DETAIL_SETTINGS) { - //TODO: Confirm if handling manual permission enabled is required - } - } - /** * Sets the flag indicating whether the upload is of a specific place. * diff --git a/app/src/main/java/fr/free/nrw/commons/upload/UploadMediaDetailAdapter.java b/app/src/main/java/fr/free/nrw/commons/upload/UploadMediaDetailAdapter.java index ecddab43d..6fc8b3266 100644 --- a/app/src/main/java/fr/free/nrw/commons/upload/UploadMediaDetailAdapter.java +++ b/app/src/main/java/fr/free/nrw/commons/upload/UploadMediaDetailAdapter.java @@ -20,6 +20,7 @@ import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.ListView; import android.widget.TextView; +import androidx.activity.result.ActivityResultLauncher; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.constraintlayout.widget.ConstraintLayout; @@ -57,27 +58,29 @@ public class UploadMediaDetailAdapter extends private int currentPosition; private Fragment fragment; private Activity activity; + private final ActivityResultLauncher voiceInputResultLauncher; private SelectedVoiceIcon selectedVoiceIcon; - private static final int REQUEST_CODE_FOR_VOICE_INPUT = 1213; private RowItemDescriptionBinding binding; public UploadMediaDetailAdapter(Fragment fragment, String savedLanguageValue, - RecentLanguagesDao recentLanguagesDao) { + RecentLanguagesDao recentLanguagesDao, ActivityResultLauncher voiceInputResultLauncher) { uploadMediaDetails = new ArrayList<>(); selectedLanguages = new HashMap<>(); this.savedLanguageValue = savedLanguageValue; this.recentLanguagesDao = recentLanguagesDao; this.fragment = fragment; + this.voiceInputResultLauncher = voiceInputResultLauncher; } public UploadMediaDetailAdapter(Activity activity, final String savedLanguageValue, - List uploadMediaDetails, RecentLanguagesDao recentLanguagesDao) { + List uploadMediaDetails, RecentLanguagesDao recentLanguagesDao, ActivityResultLauncher voiceInputResultLauncher) { this.uploadMediaDetails = uploadMediaDetails; selectedLanguages = new HashMap<>(); this.savedLanguageValue = savedLanguageValue; this.recentLanguagesDao = recentLanguagesDao; this.activity = activity; + this.voiceInputResultLauncher = voiceInputResultLauncher; } public void setCallback(Callback callback) { @@ -150,11 +153,7 @@ public class UploadMediaDetailAdapter extends ); try { - if (activity == null) { - fragment.startActivityForResult(intent, REQUEST_CODE_FOR_VOICE_INPUT); - } else { - activity.startActivityForResult(intent, REQUEST_CODE_FOR_VOICE_INPUT); - } + voiceInputResultLauncher.launch(intent); } catch (Exception e) { Timber.e(e.getMessage()); } diff --git a/app/src/main/java/fr/free/nrw/commons/upload/mediaDetails/UploadMediaDetailFragment.java b/app/src/main/java/fr/free/nrw/commons/upload/mediaDetails/UploadMediaDetailFragment.java index 105df1837..2c4c2ecd3 100644 --- a/app/src/main/java/fr/free/nrw/commons/upload/mediaDetails/UploadMediaDetailFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/upload/mediaDetails/UploadMediaDetailFragment.java @@ -18,6 +18,9 @@ import android.view.ViewGroup; import android.widget.CheckBox; import android.widget.ImageView; import android.widget.Toast; +import androidx.activity.result.ActivityResult; +import androidx.activity.result.ActivityResultLauncher; +import androidx.activity.result.contract.ActivityResultContracts.StartActivityForResult; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.exifinterface.media.ExifInterface; @@ -58,9 +61,24 @@ import timber.log.Timber; public class UploadMediaDetailFragment extends UploadBaseFragment implements UploadMediaDetailsContract.View, UploadMediaDetailAdapter.EventListener { - private static final int REQUEST_CODE = 1211; - private static final int REQUEST_CODE_FOR_EDIT_ACTIVITY = 1212; - private static final int REQUEST_CODE_FOR_VOICE_INPUT = 1213; + private UploadMediaDetailAdapter uploadMediaDetailAdapter; + + private final ActivityResultLauncher startForResult = registerForActivityResult( + new StartActivityForResult(), result -> { + onCameraPosition(result); + }); + + private final ActivityResultLauncher startForEditActivityResult = registerForActivityResult( + new StartActivityForResult(), result -> { + onEditActivityResult(result); + } + ); + + private final ActivityResultLauncher voiceInputResultLauncher = registerForActivityResult( + new StartActivityForResult(), result -> { + onVoiceInput(result); + } + ); public static Activity activity ; @@ -84,8 +102,6 @@ public class UploadMediaDetailFragment extends UploadBaseFragment implements private boolean hasUserRemovedLocation; - private UploadMediaDetailAdapter uploadMediaDetailAdapter; - @Inject UploadMediaDetailsContract.UserActionListener presenter; @@ -279,7 +295,7 @@ public class UploadMediaDetailFragment extends UploadBaseFragment implements */ private void initRecyclerView() { uploadMediaDetailAdapter = new UploadMediaDetailAdapter(this, - defaultKvStore.getString(Prefs.DESCRIPTION_LANGUAGE, ""), recentLanguagesDao); + defaultKvStore.getString(Prefs.DESCRIPTION_LANGUAGE, ""), recentLanguagesDao, voiceInputResultLauncher); uploadMediaDetailAdapter.setCallback(this::showInfoAlert); uploadMediaDetailAdapter.setEventListener(this); binding.rvDescriptions.setLayoutManager(new LinearLayoutManager(getContext())); @@ -593,14 +609,14 @@ public class UploadMediaDetailFragment extends UploadBaseFragment implements * This method is called to start the image editing activity for a specific UploadItem. * It sets the UploadItem as the currently editable item, creates an intent to launch the * EditActivity, and passes the image file path as an extra in the intent. The activity - * is started with a request code, allowing the result to be handled in onActivityResult. + * is started using resultLauncher that handles the result in respective callback. */ @Override public void showEditActivity(UploadItem uploadItem) { editableUploadItem = uploadItem; Intent intent = new Intent(getContext(), EditActivity.class); intent.putExtra("image", uploadableFile.getFilePath().toString()); - startActivityForResult(intent, REQUEST_CODE_FOR_EDIT_ACTIVITY); + startForEditActivityResult.launch(intent); } /** @@ -615,6 +631,8 @@ public class UploadMediaDetailFragment extends UploadBaseFragment implements double defaultLongitude = -122.431297; double defaultZoom = 16.0; + final Intent locationPickerIntent; + /* Retrieve image location from EXIF if present or check if user has provided location while using the in-app camera. Use location of last UploadItem if none of them is available */ @@ -624,10 +642,11 @@ public class UploadMediaDetailFragment extends UploadBaseFragment implements .getDecLatitude(); defaultLongitude = uploadItem.getGpsCoords().getDecLongitude(); defaultZoom = uploadItem.getGpsCoords().getZoomLevel(); - startActivityForResult(new LocationPicker.IntentBuilder() + + locationPickerIntent = new LocationPicker.IntentBuilder() .defaultLocation(new CameraPosition(defaultLatitude,defaultLongitude,defaultZoom)) .activityKey("UploadActivity") - .build(getActivity()), REQUEST_CODE); + .build(getActivity()); } else { if (defaultKvStore.getString(LAST_LOCATION) != null) { final String[] locationLatLng @@ -638,27 +657,20 @@ public class UploadMediaDetailFragment extends UploadBaseFragment implements if (defaultKvStore.getString(LAST_ZOOM) != null) { defaultZoom = Double.parseDouble(defaultKvStore.getString(LAST_ZOOM)); } - startActivityForResult(new LocationPicker.IntentBuilder() + + locationPickerIntent = new LocationPicker.IntentBuilder() .defaultLocation(new CameraPosition(defaultLatitude,defaultLongitude,defaultZoom)) .activityKey("NoLocationUploadActivity") - .build(getActivity()), REQUEST_CODE); + .build(getActivity()); } + startForResult.launch(locationPickerIntent); } - /** - * Get the coordinates and update the existing coordinates. - * @param requestCode code of request - * @param resultCode code of result - * @param data intent - */ - @Override - public void onActivityResult(final int requestCode, final int resultCode, - @Nullable final Intent data) { - super.onActivityResult(requestCode, resultCode, data); - if (requestCode == REQUEST_CODE && resultCode == RESULT_OK) { + private void onCameraPosition(ActivityResult result){ + if (result.getResultCode() == RESULT_OK) { - assert data != null; - final CameraPosition cameraPosition = LocationPicker.getCameraPosition(data); + assert result.getData() != null; + final CameraPosition cameraPosition = LocationPicker.getCameraPosition(result.getData()); if (cameraPosition != null) { @@ -678,8 +690,21 @@ public class UploadMediaDetailFragment extends UploadBaseFragment implements removeLocation(); } } - if (requestCode == REQUEST_CODE_FOR_EDIT_ACTIVITY && resultCode == RESULT_OK) { - String result = data.getStringExtra("editedImageFilePath"); + } + + private void onVoiceInput(ActivityResult result) { + if (result.getResultCode() == RESULT_OK && result.getData() != null) { + ArrayList resultData = result.getData().getStringArrayListExtra( + RecognizerIntent.EXTRA_RESULTS); + uploadMediaDetailAdapter.handleSpeechResult(resultData.get(0)); + }else { + Timber.e("Error %s", result.getResultCode()); + } + } + + private void onEditActivityResult(ActivityResult result){ + if (result.getResultCode() == RESULT_OK) { + String path = result.getData().getStringExtra("editedImageFilePath"); if (Objects.equals(result, "Error")) { Timber.e("Error in rotating image"); @@ -687,24 +712,15 @@ public class UploadMediaDetailFragment extends UploadBaseFragment implements } try { if (binding != null){ - binding.backgroundImage.setImageURI(Uri.fromFile(new File(result))); + binding.backgroundImage.setImageURI(Uri.fromFile(new File(path))); } - editableUploadItem.setContentUri(Uri.fromFile(new File(result))); + editableUploadItem.setContentUri(Uri.fromFile(new File(path))); callback.changeThumbnail(indexOfFragment, - result); + path); } catch (Exception e) { Timber.e(e); } } - else if (requestCode == REQUEST_CODE_FOR_VOICE_INPUT) { - if (resultCode == RESULT_OK && data != null) { - ArrayList result = data.getStringArrayListExtra( - RecognizerIntent.EXTRA_RESULTS); - uploadMediaDetailAdapter.handleSpeechResult(result.get(0)); - }else { - Timber.e("Error %s", resultCode); - } - } } /** diff --git a/app/src/main/java/fr/free/nrw/commons/utils/PermissionUtils.java b/app/src/main/java/fr/free/nrw/commons/utils/PermissionUtils.java index 9082c1f0f..828ef2338 100644 --- a/app/src/main/java/fr/free/nrw/commons/utils/PermissionUtils.java +++ b/app/src/main/java/fr/free/nrw/commons/utils/PermissionUtils.java @@ -54,8 +54,7 @@ public class PermissionUtils { final Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS); final Uri uri = Uri.fromParts("package", activity.getPackageName(), null); intent.setData(uri); - activity.startActivityForResult(intent, - CommonsApplication.OPEN_APPLICATION_DETAIL_SETTINGS); + activity.startActivity(intent); } /** diff --git a/app/src/test/kotlin/fr/free/nrw/commons/contributions/MainActivityUnitTests.kt b/app/src/test/kotlin/fr/free/nrw/commons/contributions/MainActivityUnitTests.kt index a2eb41615..780322603 100644 --- a/app/src/test/kotlin/fr/free/nrw/commons/contributions/MainActivityUnitTests.kt +++ b/app/src/test/kotlin/fr/free/nrw/commons/contributions/MainActivityUnitTests.kt @@ -340,20 +340,6 @@ class MainActivityUnitTests { method.invoke(activity, null, true) } - @Test - @Throws(Exception::class) - fun testOnActivityResult() { - val method: Method = - MainActivity::class.java.getDeclaredMethod( - "onActivityResult", - Int::class.java, - Int::class.java, - Intent::class.java, - ) - method.isAccessible = true - method.invoke(activity, 0, 0, null) - } - @Test @Throws(Exception::class) fun testOnResume() { diff --git a/app/src/test/kotlin/fr/free/nrw/commons/customselector/ui/selector/CustomSelectorActivityTest.kt b/app/src/test/kotlin/fr/free/nrw/commons/customselector/ui/selector/CustomSelectorActivityTest.kt index 0274fed7d..b1d66ee4d 100644 --- a/app/src/test/kotlin/fr/free/nrw/commons/customselector/ui/selector/CustomSelectorActivityTest.kt +++ b/app/src/test/kotlin/fr/free/nrw/commons/customselector/ui/selector/CustomSelectorActivityTest.kt @@ -1,8 +1,10 @@ package fr.free.nrw.commons.customselector.ui.selector +import android.app.Activity import android.content.Intent import android.net.Uri import android.os.Bundle +import androidx.activity.result.ActivityResult import fr.free.nrw.commons.OkHttpConnectionFactory import fr.free.nrw.commons.TestCommonsApplication import fr.free.nrw.commons.contributions.ContributionDao @@ -98,20 +100,20 @@ class CustomSelectorActivityTest { } /** - * Test onActivityResult function. + * Test callback when result received. */ @Test @Throws(Exception::class) - fun testOnActivityResult() { + fun testResultLauncher() { + val intent = Mockito.mock(Intent::class.java) + val activityResult = ActivityResult(Activity.RESULT_OK, intent) val func = activity.javaClass.getDeclaredMethod( - "onActivityResult", - Int::class.java, - Int::class.java, - Intent::class.java, + "onFullScreenDataReceived", + ActivityResult::class.java, ) func.isAccessible = true - func.invoke(activity, 512, -1, Mockito.mock(Intent::class.java)) + func.invoke(activity, activityResult) } /** diff --git a/app/src/test/kotlin/fr/free/nrw/commons/filepicker/FilePickerTest.kt b/app/src/test/kotlin/fr/free/nrw/commons/filepicker/FilePickerTest.kt index 365af27f0..b7ef7878f 100644 --- a/app/src/test/kotlin/fr/free/nrw/commons/filepicker/FilePickerTest.kt +++ b/app/src/test/kotlin/fr/free/nrw/commons/filepicker/FilePickerTest.kt @@ -6,18 +6,19 @@ import android.content.Context import android.content.Intent import android.content.SharedPreferences import android.net.Uri +import android.provider.MediaStore +import androidx.activity.result.ActivityResultLauncher import androidx.preference.PreferenceManager import androidx.test.core.app.ApplicationProvider +import com.nhaarman.mockitokotlin2.KArgumentCaptor +import com.nhaarman.mockitokotlin2.argumentCaptor import com.nhaarman.mockitokotlin2.verify import fr.free.nrw.commons.TestCommonsApplication -import fr.free.nrw.commons.filepicker.Constants.RequestCodes +import fr.free.nrw.commons.customselector.ui.selector.CustomSelectorActivity import org.junit.Assert.assertEquals import org.junit.Before import org.junit.Test import org.junit.runner.RunWith -import org.mockito.ArgumentCaptor -import org.mockito.ArgumentMatchers -import org.mockito.Captor import org.mockito.Mock import org.mockito.Mockito.mock import org.mockito.Mockito.`when` @@ -48,8 +49,10 @@ class FilePickerTest { @Mock var unit: Unit? = null - @Captor - var requestCodeCaptor: ArgumentCaptor? = null + @Mock + private lateinit var mockResultLauncher: ActivityResultLauncher + + private val intentCaptor: KArgumentCaptor = argumentCaptor() private lateinit var context: Context @@ -65,15 +68,17 @@ class FilePickerTest { `when`(sharedPref.edit()).thenReturn(sharedPreferencesEditor) `when`(sharedPref.edit().putInt("type", 0)).thenReturn(sharedPreferencesEditor) val openDocumentPreferred = nextBoolean() - FilePicker.openGallery(activity, 0, openDocumentPreferred) - verify(activity).startActivityForResult( - ArgumentMatchers.any(), - requestCodeCaptor?.capture()?.toInt()!!, - ) - if(openDocumentPreferred){ - assertEquals(requestCodeCaptor?.value, RequestCodes.PICK_PICTURE_FROM_DOCUMENTS) - }else{ - assertEquals(requestCodeCaptor?.value, RequestCodes.PICK_PICTURE_FROM_GALLERY) + + FilePicker.openGallery(activity, mockResultLauncher, 0, openDocumentPreferred) + + verify(mockResultLauncher).launch(intentCaptor.capture()) + + val capturedIntent = intentCaptor.firstValue + + if (openDocumentPreferred) { + assertEquals(Intent.ACTION_OPEN_DOCUMENT, capturedIntent.action) + } else { + assertEquals(Intent.ACTION_GET_CONTENT, capturedIntent.action) } } @@ -84,12 +89,13 @@ class FilePickerTest { `when`(sharedPref.edit().putInt("type", 0)).thenReturn(sharedPreferencesEditor) val mockApplication = mock(Application::class.java) `when`(activity.applicationContext).thenReturn(mockApplication) - FilePicker.openCameraForImage(activity, 0) - verify(activity).startActivityForResult( - ArgumentMatchers.any(), - requestCodeCaptor?.capture()?.toInt()!!, - ) - assertEquals(requestCodeCaptor?.value, RequestCodes.TAKE_PICTURE) + FilePicker.openCameraForImage(activity, mockResultLauncher, 0) + + verify(mockResultLauncher).launch(intentCaptor.capture()) + + val capturedIntent = intentCaptor.firstValue + + assertEquals(MediaStore.ACTION_IMAGE_CAPTURE, capturedIntent.action) } @Test @@ -183,46 +189,20 @@ class FilePickerTest { method.invoke(mockFilePicker, mockIntent) } - @Test - fun testHandleActivityResultCaseOne() { - val mockIntent = mock(Intent::class.java) - FilePicker.handleActivityResult( - RequestCodes.FILE_PICKER_IMAGE_IDENTIFICATOR, - Activity.RESULT_OK, - mockIntent, - activity, - object : DefaultCallback() { - override fun onCanceled( - source: FilePicker.ImageSource, - type: Int, - ) { - super.onCanceled(source, type) - } - - override fun onImagePickerError( - e: Exception, - source: FilePicker.ImageSource, - type: Int, - ) { - } - - override fun onImagesPicked( - imagesFiles: List, - source: FilePicker.ImageSource, - type: Int, - ) { - } - }, - ) - } - @Test fun testOpenCustomSelectorRequestCode() { `when`(PreferenceManager.getDefaultSharedPreferences(activity)).thenReturn(sharedPref) `when`(sharedPref.edit()).thenReturn(sharedPreferencesEditor) `when`(sharedPref.edit().putInt("type", 0)).thenReturn(sharedPreferencesEditor) - FilePicker.openCustomSelector(activity, 0) - verify(activity).startActivityForResult(ArgumentMatchers.any(), requestCodeCaptor?.capture()?.toInt()!!) - assertEquals(requestCodeCaptor?.value, RequestCodes.PICK_PICTURE_FROM_CUSTOM_SELECTOR) + FilePicker.openCustomSelector(activity, mockResultLauncher, 0) + + verify(mockResultLauncher).launch(intentCaptor.capture()) + + val capturedIntent = intentCaptor.firstValue + + assertEquals( + CustomSelectorActivity.Companion::class.java.declaringClass.name, + capturedIntent.component?.className + ) } } diff --git a/app/src/test/kotlin/fr/free/nrw/commons/media/MediaDetailFragmentUnitTests.kt b/app/src/test/kotlin/fr/free/nrw/commons/media/MediaDetailFragmentUnitTests.kt index 7f9e3d576..ea1d3402d 100644 --- a/app/src/test/kotlin/fr/free/nrw/commons/media/MediaDetailFragmentUnitTests.kt +++ b/app/src/test/kotlin/fr/free/nrw/commons/media/MediaDetailFragmentUnitTests.kt @@ -19,6 +19,7 @@ import android.widget.ProgressBar import android.widget.ScrollView import android.widget.Spinner import android.widget.TextView +import androidx.activity.result.ActivityResult import androidx.fragment.app.FragmentManager import androidx.fragment.app.FragmentTransaction import androidx.test.core.app.ApplicationProvider @@ -76,7 +77,6 @@ import java.util.Locale @Config(sdk = [21], application = TestCommonsApplication::class) @LooperMode(LooperMode.Mode.PAUSED) class MediaDetailFragmentUnitTests { - private val requestCode = 1001 private val lastLocation = "last_location_while_uploading" private lateinit var fragment: MediaDetailFragment private lateinit var fragmentManager: FragmentManager @@ -231,24 +231,6 @@ class MediaDetailFragmentUnitTests { fragment.onCreateView(layoutInflater, null, savedInstanceState) } - @Test - @Throws(Exception::class) - fun testOnActivityResultLocationPickerActivity() { - fragment.onActivityResult(requestCode, Activity.RESULT_CANCELED, intent) - } - - @Test - @Throws(Exception::class) - fun `test OnActivity Result Cancelled LocationPickerActivity`() { - fragment.onActivityResult(requestCode, Activity.RESULT_CANCELED, intent) - } - - @Test - @Throws(Exception::class) - fun `test OnActivity Result Cancelled DescriptionEditActivity`() { - fragment.onActivityResult(requestCode, Activity.RESULT_OK, intent) - } - @Test @Throws(Exception::class) fun testOnSaveInstanceState() { diff --git a/app/src/test/kotlin/fr/free/nrw/commons/upload/UploadActivityUnitTests.kt b/app/src/test/kotlin/fr/free/nrw/commons/upload/UploadActivityUnitTests.kt index d15fe06e5..938e595af 100644 --- a/app/src/test/kotlin/fr/free/nrw/commons/upload/UploadActivityUnitTests.kt +++ b/app/src/test/kotlin/fr/free/nrw/commons/upload/UploadActivityUnitTests.kt @@ -167,20 +167,6 @@ class UploadActivityUnitTests { activity.makeUploadRequest() } - @Test - @Throws(Exception::class) - fun testOnActivityResult() { - val method: Method = - UploadActivity::class.java.getDeclaredMethod( - "onActivityResult", - Int::class.java, - Int::class.java, - Intent::class.java, - ) - method.isAccessible = true - method.invoke(activity, CommonsApplication.OPEN_APPLICATION_DETAIL_SETTINGS, 0, Intent()) - } - @Test @Throws(Exception::class) fun testReceiveSharedItems() { diff --git a/app/src/test/kotlin/fr/free/nrw/commons/upload/UploadMediaDetailAdapterUnitTest.kt b/app/src/test/kotlin/fr/free/nrw/commons/upload/UploadMediaDetailAdapterUnitTest.kt index db5b20f7e..794b6e64e 100644 --- a/app/src/test/kotlin/fr/free/nrw/commons/upload/UploadMediaDetailAdapterUnitTest.kt +++ b/app/src/test/kotlin/fr/free/nrw/commons/upload/UploadMediaDetailAdapterUnitTest.kt @@ -2,11 +2,13 @@ package fr.free.nrw.commons.upload import android.app.Dialog import android.content.Context +import android.content.Intent import android.view.View import android.widget.AdapterView import android.widget.GridLayout import android.widget.ListView import android.widget.TextView +import androidx.activity.result.ActivityResultLauncher import androidx.test.core.app.ApplicationProvider import com.nhaarman.mockitokotlin2.any import com.nhaarman.mockitokotlin2.times @@ -67,13 +69,16 @@ class UploadMediaDetailAdapterUnitTest { @Mock private lateinit var adapterView: AdapterView + @Mock + private lateinit var mockResultLauncher: ActivityResultLauncher + @Before fun setUp() { MockitoAnnotations.openMocks(this) uploadMediaDetails = mutableListOf(uploadMediaDetail, uploadMediaDetail) activity = Robolectric.buildActivity(UploadActivity::class.java).get() fragment = mock(UploadMediaDetailFragment::class.java) - adapter = UploadMediaDetailAdapter(fragment, "", recentLanguagesDao) + adapter = UploadMediaDetailAdapter(fragment, "", recentLanguagesDao, mockResultLauncher) context = ApplicationProvider.getApplicationContext() Whitebox.setInternalState(adapter, "uploadMediaDetails", uploadMediaDetails) Whitebox.setInternalState(adapter, "eventListener", eventListener) diff --git a/app/src/test/kotlin/fr/free/nrw/commons/upload/mediaDetails/UploadMediaDetailFragmentUnitTest.kt b/app/src/test/kotlin/fr/free/nrw/commons/upload/mediaDetails/UploadMediaDetailFragmentUnitTest.kt index ed76b4519..169bcd5c0 100644 --- a/app/src/test/kotlin/fr/free/nrw/commons/upload/mediaDetails/UploadMediaDetailFragmentUnitTest.kt +++ b/app/src/test/kotlin/fr/free/nrw/commons/upload/mediaDetails/UploadMediaDetailFragmentUnitTest.kt @@ -11,6 +11,7 @@ import android.view.View import android.widget.ImageView import android.widget.LinearLayout import android.widget.TextView +import androidx.activity.result.ActivityResult import androidx.appcompat.widget.AppCompatButton import androidx.appcompat.widget.AppCompatImageButton import androidx.fragment.app.FragmentManager @@ -348,7 +349,7 @@ class UploadMediaDetailFragmentUnitTest { @Test @Throws(Exception::class) - fun testOnActivityResultOnMapIconClicked() { + fun testOnCameraPositionCallbackOnMapIconClicked() { shadowOf(Looper.getMainLooper()).idle() Mockito.mock(LocationPicker::class.java) val intent = Mockito.mock(Intent::class.java) @@ -363,13 +364,18 @@ class UploadMediaDetailFragmentUnitTest { `when`(latLng.latitude).thenReturn(0.0) `when`(latLng.longitude).thenReturn(0.0) `when`(uploadItem.gpsCoords).thenReturn(imageCoordinates) - fragment.onActivityResult(1211, Activity.RESULT_OK, intent) + val activityResult = ActivityResult(Activity.RESULT_OK, intent) + + val handleResultMethod = UploadMediaDetailFragment::class.java.getDeclaredMethod("onCameraPosition", ActivityResult::class.java) + handleResultMethod.isAccessible = true + + handleResultMethod.invoke(fragment, activityResult) Mockito.verify(presenter, Mockito.times(0)).getImageQuality(0, location, activity) } @Test @Throws(Exception::class) - fun testOnActivityResultAddLocationDialog() { + fun testOnCameraPositionCallbackAddLocationDialog() { shadowOf(Looper.getMainLooper()).idle() Mockito.mock(LocationPicker::class.java) val intent = Mockito.mock(Intent::class.java) @@ -387,7 +393,13 @@ class UploadMediaDetailFragmentUnitTest { `when`(latLng.latitude).thenReturn(0.0) `when`(latLng.longitude).thenReturn(0.0) `when`(uploadItem.gpsCoords).thenReturn(imageCoordinates) - fragment.onActivityResult(1211, Activity.RESULT_OK, intent) + + val activityResult = ActivityResult(Activity.RESULT_OK,intent) + + val handleResultMethod = UploadMediaDetailFragment::class.java.getDeclaredMethod("onCameraPosition", ActivityResult::class.java) + handleResultMethod.isAccessible = true + + handleResultMethod.invoke(fragment, activityResult) Mockito.verify(presenter, Mockito.times(1)).displayLocDialog(0, null, false) } From 1659a4ce22b7dd580d07a3bcd20344e1ed6a67c5 Mon Sep 17 00:00:00 2001 From: Parneet Singh <111801812+parneet-guraya@users.noreply.github.com> Date: Thu, 24 Oct 2024 15:37:16 +0530 Subject: [PATCH 21/36] add dependency (#5887) Signed-off-by: parneet-guraya --- app/build.gradle | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index 43c1695da..b683b489b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -93,6 +93,7 @@ dependencies { implementation "org.jetbrains.kotlin:kotlin-reflect:$KOTLIN_VERSION" //Mocking + testImplementation("io.mockk:mockk:1.13.4") testImplementation 'com.nhaarman.mockitokotlin2:mockito-kotlin:2.2.0' testImplementation 'org.mockito:mockito-inline:5.2.0' testImplementation 'org.mockito:mockito-core:5.6.0' @@ -226,7 +227,7 @@ android { excludes += ['META-INF/androidx.*'] } resources { - excludes += ['META-INF/androidx.*', 'META-INF/proguard/androidx-annotations.pro'] + excludes += ['META-INF/androidx.*', 'META-INF/proguard/androidx-annotations.pro', '/META-INF/LICENSE.md', '/META-INF/LICENSE-notice.md'] } } From becc07d26b4d4396373b7a62cf5db1b61f53c10b Mon Sep 17 00:00:00 2001 From: "translatewiki.net" Date: Thu, 24 Oct 2024 14:02:18 +0200 Subject: [PATCH 22/36] Localisation updates from https://translatewiki.net. --- app/src/main/res/values-bg/strings.xml | 1 + app/src/main/res/values-da/strings.xml | 3 +++ app/src/main/res/values-it/strings.xml | 3 +++ app/src/main/res/values-mk/strings.xml | 4 ++++ app/src/main/res/values-pa/strings.xml | 3 ++- app/src/main/res/values-zh-rTW/strings.xml | 3 +++ 6 files changed, 16 insertions(+), 1 deletion(-) diff --git a/app/src/main/res/values-bg/strings.xml b/app/src/main/res/values-bg/strings.xml index 0f765a1fb..6ee931542 100644 --- a/app/src/main/res/values-bg/strings.xml +++ b/app/src/main/res/values-bg/strings.xml @@ -307,4 +307,5 @@ Моля, изчакайте... напълно размазано Наблизо + Прочетете повече diff --git a/app/src/main/res/values-da/strings.xml b/app/src/main/res/values-da/strings.xml index 2aa04017a..3b6822c47 100644 --- a/app/src/main/res/values-da/strings.xml +++ b/app/src/main/res/values-da/strings.xml @@ -789,4 +789,7 @@ Afventer Mislykkedes Kunne ikke indlæse steddata + Dette sted har endnu ikke noget billede, så gå hen og tag et! + Dette sted har allerede et billede. + Tjekker nu, om dette sted har et billede. diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index be69fa045..f40863870 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -760,4 +760,7 @@ %d immagine selezionata %d immagini selezionate + Questo posto non ha ancora una foto, scattane una! + Questo posto ha già una foto. + Ora controlliamo se questo posto ha una foto. diff --git a/app/src/main/res/values-mk/strings.xml b/app/src/main/res/values-mk/strings.xml index 00a8ba098..916f4f420 100644 --- a/app/src/main/res/values-mk/strings.xml +++ b/app/src/main/res/values-mk/strings.xml @@ -475,6 +475,7 @@ Немате непрочитани известувања Немате прочитани известувања Споделувај дневници користејќи + Проверете си ја дојдовната е-пошта Погл. прочитани Погл. непрочитани Се јави грешка при избирањето на сликите @@ -784,4 +785,7 @@ Во исчекување Неуспешно Не можев да ги вчитам податоците за место + Местово сè уште нема слика. Направете ја! + Местово веќе има слика. + Проверувам дали местово има слика. diff --git a/app/src/main/res/values-pa/strings.xml b/app/src/main/res/values-pa/strings.xml index 48713104d..8c64900a5 100644 --- a/app/src/main/res/values-pa/strings.xml +++ b/app/src/main/res/values-pa/strings.xml @@ -42,6 +42,7 @@ ਵਰਤੋਂਕਾਰ ਨਾਂ ਲੰਘ-ਸ਼ਬਦ ਦਾਖ਼ਲ ਹੋਵੋ + ਪਾਰਸ਼ਬਦ ਭੁੱਲ ਗਏ? ਦਾਖ਼ਲਾ ਹੋ ਰਿਹਾ ਹੈ ਉਡੀਕੋ ਜੀ… ਕਿਰਪਾ ਕਰਕੇ ਉਡੀਕੋ... @@ -67,7 +68,7 @@ ਨੇੜੇ-ਤੇੜੇ ਮੇਰੇ ਅੱਪਲੋਡ ਸਾਂਝਾ ਕਰੋ - ਸਿਰਲੇਖ + ਸੁਰਖੀ (ਲੋੜੀਂਦੀ) ਵੇਰਵਾ ਦਾਖ਼ਲ ਹੋਣ ਵਿੱਚ ਅਸਮਰੱਥ - ਨੈੱਟਵਰਕ ਫੇਲ੍ਹ ਹੋਇਆ ਹੈ ਬਹੁਤ ਸਾਰੀਆਂ ਅਸਫ਼ਲ ਕੋਸ਼ਿਸ਼ਾਂ। ਥੋੜ੍ਹੀ ਦੇਰ ਬਾਅਦ ਕੋਸ਼ਿਸ਼ ਕਰੋ ਜੀ। diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index e54fb9d76..cd3cf80df 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -806,4 +806,7 @@ 待處理 失敗 無法載入地點資料 + 這個地點還沒有照片,來拍一張吧! + 這個地點已有照片。 + 現在檢查這個地點是否有照片。 From 3e020ed973f4919f83d0fb0c78cf5ff8ef5ac41d Mon Sep 17 00:00:00 2001 From: Noah Vendrig Date: Fri, 25 Oct 2024 16:19:07 +1100 Subject: [PATCH 23/36] Fixes #5806 Implemented "Refresh" button to clear the cache and reload the Nearby map (#5891) * Changed files required to get the app to run correctly. Removed suspend from affected DAO files and funcs, and changed to (Kotlin v1.9.22) and (Kotlin compiler v1.5.8) * Created refresh button icon, and added it to the nearby_fragment_menu.xml (header of the nearby page). Created function refresh() in NearbyParentFragment.java to handle refresh functionality. * Replaced refresh() func with emptyCache() and reloadMap() * Attempt at reloadMap(), no testing done yet. * added changes for a possibly working emptyCache implementation (needs testing). * Tested changes as working, edited emptyCache to correctly clear cache and then reload map --------- Co-authored-by: MarcusBarta --- .idea/inspectionProfiles/Project_Default.xml | 7 --- app/build.gradle | 2 +- .../database/NotForUploadStatusDao.kt | 10 ++-- .../database/UploadedStatusDao.kt | 14 ++--- .../fr/free/nrw/commons/nearby/PlaceDao.java | 19 +++++++ .../commons/nearby/PlacesLocalDataSource.java | 4 ++ .../nrw/commons/nearby/PlacesRepository.java | 10 ++++ .../fragments/NearbyParentFragment.java | 55 +++++++++++++++++++ .../upload/categories/BaseDelegateAdapter.kt | 14 ++--- .../nrw/commons/upload/depicts/DepictsDao.kt | 8 +-- .../res/drawable/ic_refresh_24dp_nearby.xml | 18 ++++++ .../main/res/menu/nearby_fragment_menu.xml | 8 +++ build.gradle | 2 +- gradle.properties | 2 +- gradle/wrapper/gradle-wrapper.properties | 2 +- 15 files changed, 140 insertions(+), 35 deletions(-) create mode 100644 app/src/main/res/drawable/ic_refresh_24dp_nearby.xml diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml index a5d456928..f39734eb4 100644 --- a/.idea/inspectionProfiles/Project_Default.xml +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -1,16 +1,12 @@ \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index b683b489b..c949707c2 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -381,7 +381,7 @@ android { compose true } composeOptions { - kotlinCompilerExtensionVersion '1.3.2' + kotlinCompilerExtensionVersion '1.5.8' } namespace 'fr.free.nrw.commons' lint { diff --git a/app/src/main/java/fr/free/nrw/commons/customselector/database/NotForUploadStatusDao.kt b/app/src/main/java/fr/free/nrw/commons/customselector/database/NotForUploadStatusDao.kt index b75a6e1d4..872388f40 100644 --- a/app/src/main/java/fr/free/nrw/commons/customselector/database/NotForUploadStatusDao.kt +++ b/app/src/main/java/fr/free/nrw/commons/customselector/database/NotForUploadStatusDao.kt @@ -15,19 +15,19 @@ abstract class NotForUploadStatusDao { * Insert into Not For Upload status. */ @Insert(onConflict = OnConflictStrategy.REPLACE) - abstract suspend fun insert(notForUploadStatus: NotForUploadStatus) + abstract fun insert(notForUploadStatus: NotForUploadStatus) /** * Delete Not For Upload status entry. */ @Delete - abstract suspend fun delete(notForUploadStatus: NotForUploadStatus) + abstract fun delete(notForUploadStatus: NotForUploadStatus) /** * Query Not For Upload status with image sha1. */ @Query("SELECT * FROM images_not_for_upload_table WHERE imageSHA1 = (:imageSHA1) ") - abstract suspend fun getFromImageSHA1(imageSHA1: String): NotForUploadStatus? + abstract fun getFromImageSHA1(imageSHA1: String): NotForUploadStatus? /** * Asynchronous image sha1 query. @@ -38,7 +38,7 @@ abstract class NotForUploadStatusDao { * Deletion Not For Upload status with image sha1. */ @Query("DELETE FROM images_not_for_upload_table WHERE imageSHA1 = (:imageSHA1) ") - abstract suspend fun deleteWithImageSHA1(imageSHA1: String) + abstract fun deleteWithImageSHA1(imageSHA1: String) /** * Asynchronous image sha1 deletion. @@ -49,5 +49,5 @@ abstract class NotForUploadStatusDao { * Check whether the imageSHA1 is present in database */ @Query("SELECT COUNT() FROM images_not_for_upload_table WHERE imageSHA1 = (:imageSHA1) ") - abstract suspend fun find(imageSHA1: String): Int + abstract fun find(imageSHA1: String): Int } diff --git a/app/src/main/java/fr/free/nrw/commons/customselector/database/UploadedStatusDao.kt b/app/src/main/java/fr/free/nrw/commons/customselector/database/UploadedStatusDao.kt index 378af5b8d..03cbb176f 100644 --- a/app/src/main/java/fr/free/nrw/commons/customselector/database/UploadedStatusDao.kt +++ b/app/src/main/java/fr/free/nrw/commons/customselector/database/UploadedStatusDao.kt @@ -17,31 +17,31 @@ abstract class UploadedStatusDao { * Insert into uploaded status. */ @Insert(onConflict = OnConflictStrategy.REPLACE) - abstract suspend fun insert(uploadedStatus: UploadedStatus) + abstract fun insert(uploadedStatus: UploadedStatus) /** * Update uploaded status entry. */ @Update - abstract suspend fun update(uploadedStatus: UploadedStatus) + abstract fun update(uploadedStatus: UploadedStatus) /** * Delete uploaded status entry. */ @Delete - abstract suspend fun delete(uploadedStatus: UploadedStatus) + abstract fun delete(uploadedStatus: UploadedStatus) /** * Query uploaded status with image sha1. */ @Query("SELECT * FROM uploaded_table WHERE imageSHA1 = (:imageSHA1) ") - abstract suspend fun getFromImageSHA1(imageSHA1: String): UploadedStatus? + abstract fun getFromImageSHA1(imageSHA1: String): UploadedStatus? /** * Query uploaded status with modified image sha1. */ @Query("SELECT * FROM uploaded_table WHERE modifiedImageSHA1 = (:modifiedImageSHA1) ") - abstract suspend fun getFromModifiedImageSHA1(modifiedImageSHA1: String): UploadedStatus? + abstract fun getFromModifiedImageSHA1(modifiedImageSHA1: String): UploadedStatus? /** * Asynchronous insert into uploaded status table. @@ -55,7 +55,7 @@ abstract class UploadedStatusDao { * Check whether the imageSHA1 is present in database */ @Query("SELECT COUNT() FROM uploaded_table WHERE imageSHA1 = (:imageSHA1) AND imageResult = (:imageResult) ") - abstract suspend fun findByImageSHA1( + abstract fun findByImageSHA1( imageSHA1: String, imageResult: Boolean, ): Int @@ -66,7 +66,7 @@ abstract class UploadedStatusDao { @Query( "SELECT COUNT() FROM uploaded_table WHERE modifiedImageSHA1 = (:modifiedImageSHA1) AND modifiedImageResult = (:modifiedImageResult) ", ) - abstract suspend fun findByModifiedImageSHA1( + abstract fun findByModifiedImageSHA1( modifiedImageSHA1: String, modifiedImageResult: Boolean, ): Int diff --git a/app/src/main/java/fr/free/nrw/commons/nearby/PlaceDao.java b/app/src/main/java/fr/free/nrw/commons/nearby/PlaceDao.java index 8c0a0a393..7babee3b7 100644 --- a/app/src/main/java/fr/free/nrw/commons/nearby/PlaceDao.java +++ b/app/src/main/java/fr/free/nrw/commons/nearby/PlaceDao.java @@ -41,4 +41,23 @@ public abstract class PlaceDao { saveSynchronous(place); }); } + + /** + * Deletes all Place objects from the database. + * + * @return A Completable that completes once the deletion operation is done. + */ + @Query("DELETE FROM place") + public abstract void deleteAllSynchronous(); + + /** + * Deletes all Place objects from the database. + * + */ + public Completable deleteAll() { + return Completable + .fromAction(() -> { + deleteAllSynchronous(); + }); + } } diff --git a/app/src/main/java/fr/free/nrw/commons/nearby/PlacesLocalDataSource.java b/app/src/main/java/fr/free/nrw/commons/nearby/PlacesLocalDataSource.java index a7f1dadcd..86a57eadc 100644 --- a/app/src/main/java/fr/free/nrw/commons/nearby/PlacesLocalDataSource.java +++ b/app/src/main/java/fr/free/nrw/commons/nearby/PlacesLocalDataSource.java @@ -35,4 +35,8 @@ public class PlacesLocalDataSource { public Completable savePlace(Place place) { return placeDao.save(place); } + + public Completable clearCache() { + return placeDao.deleteAll(); + } } diff --git a/app/src/main/java/fr/free/nrw/commons/nearby/PlacesRepository.java b/app/src/main/java/fr/free/nrw/commons/nearby/PlacesRepository.java index 85e964ddb..846e54fac 100644 --- a/app/src/main/java/fr/free/nrw/commons/nearby/PlacesRepository.java +++ b/app/src/main/java/fr/free/nrw/commons/nearby/PlacesRepository.java @@ -3,6 +3,7 @@ package fr.free.nrw.commons.nearby; import fr.free.nrw.commons.contributions.Contribution; import fr.free.nrw.commons.location.LatLng; import io.reactivex.Completable; +import io.reactivex.schedulers.Schedulers; import javax.inject.Inject; /** @@ -38,4 +39,13 @@ public class PlacesRepository { return localDataSource.fetchPlace(entityID); } + /** + * Clears the Nearby cache on an IO thread. + * + * @return A Completable that completes once the cache has been successfully cleared. + */ + public Completable clearCache() { + return localDataSource.clearCache() + .subscribeOn(Schedulers.io()); // Ensure it runs on IO thread + } } diff --git a/app/src/main/java/fr/free/nrw/commons/nearby/fragments/NearbyParentFragment.java b/app/src/main/java/fr/free/nrw/commons/nearby/fragments/NearbyParentFragment.java index 7a7d5cdcb..6a2e5c3a9 100644 --- a/app/src/main/java/fr/free/nrw/commons/nearby/fragments/NearbyParentFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/nearby/fragments/NearbyParentFragment.java @@ -108,6 +108,7 @@ import fr.free.nrw.commons.utils.NetworkUtils; import fr.free.nrw.commons.utils.SystemThemeUtils; import fr.free.nrw.commons.utils.ViewUtil; import fr.free.nrw.commons.wikidata.WikidataEditListener; +import io.reactivex.Completable; import io.reactivex.Observable; import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.disposables.Disposable; @@ -342,9 +343,21 @@ public class NearbyParentFragment extends CommonsDaggerSupportFragment public void onCreateOptionsMenu(@NonNull final Menu menu, @NonNull final MenuInflater inflater) { inflater.inflate(R.menu.nearby_fragment_menu, menu); + MenuItem refreshButton = menu.findItem(R.id.item_refresh); MenuItem listMenu = menu.findItem(R.id.list_sheet); MenuItem saveAsGPXButton = menu.findItem(R.id.list_item_gpx); MenuItem saveAsKMLButton = menu.findItem(R.id.list_item_kml); + refreshButton.setOnMenuItemClickListener(new OnMenuItemClickListener() { + @Override + public boolean onMenuItemClick(MenuItem item) { + try { + emptyCache(); + } catch (Exception e) { + throw new RuntimeException(e); + } + return false; + } + }); listMenu.setOnMenuItemClickListener(new OnMenuItemClickListener() { @Override public boolean onMenuItemClick(MenuItem item) { @@ -1158,6 +1171,48 @@ public class NearbyParentFragment extends CommonsDaggerSupportFragment } } + /** + * Reloads the Nearby map + * Clears all location markers, refreshes them, reinserts them into the map. + * + */ + private void reloadMap() { + clearAllMarkers(); // Clear the list of markers + binding.map.getController().setZoom(ZOOM_LEVEL); // Reset the zoom level + binding.map.getController().setCenter(lastMapFocus); // Recenter the focus + if (locationPermissionsHelper.checkLocationPermission(getActivity())) { + locationPermissionGranted(); // Reload map with user's location + } else { + startMapWithoutPermission(); // Reload map without user's location + } + binding.map.invalidate(); // Invalidate the map + presenter.updateMapAndList(LOCATION_SIGNIFICANTLY_CHANGED); // Restart the map + Timber.d("Reloaded Map Successfully"); + } + + + /** + * Clears the Nearby local cache and then calls for the map to be reloaded + * + */ + private void emptyCache() { + // reload the map once the cache is cleared + compositeDisposable.add( + placesRepository.clearCache() + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .andThen(Completable.fromAction(this::reloadMap)) + .subscribe( + () -> { + Timber.d("Nearby Cache cleared successfully."); + }, + throwable -> { + Timber.e(throwable, "Failed to clear the Nearby Cache"); + } + ) + ); + } + private void savePlacesAsKML() { final Observable savePlacesObservable = Observable .fromCallable(() -> nearbyController diff --git a/app/src/main/java/fr/free/nrw/commons/upload/categories/BaseDelegateAdapter.kt b/app/src/main/java/fr/free/nrw/commons/upload/categories/BaseDelegateAdapter.kt index f1e4917a0..ce12d3915 100644 --- a/app/src/main/java/fr/free/nrw/commons/upload/categories/BaseDelegateAdapter.kt +++ b/app/src/main/java/fr/free/nrw/commons/upload/categories/BaseDelegateAdapter.kt @@ -10,15 +10,13 @@ abstract class BaseDelegateAdapter( areContentsTheSame: (T, T) -> Boolean = { old, new -> old == new }, ) : AsyncListDifferDelegationAdapter( object : DiffUtil.ItemCallback() { - override fun areItemsTheSame( - oldItem: T, - newItem: T, - ) = areItemsTheSame(oldItem, newItem) + override fun areItemsTheSame(oldItem: T & Any, newItem: T & Any): Boolean { + return areItemsTheSame(oldItem, newItem) + } - override fun areContentsTheSame( - oldItem: T, - newItem: T, - ) = areContentsTheSame(oldItem, newItem) + override fun areContentsTheSame(oldItem: T & Any, newItem: T & Any): Boolean { + return areContentsTheSame(oldItem, newItem) + } }, *delegates, ) { diff --git a/app/src/main/java/fr/free/nrw/commons/upload/depicts/DepictsDao.kt b/app/src/main/java/fr/free/nrw/commons/upload/depicts/DepictsDao.kt index 684400301..c20d65abf 100644 --- a/app/src/main/java/fr/free/nrw/commons/upload/depicts/DepictsDao.kt +++ b/app/src/main/java/fr/free/nrw/commons/upload/depicts/DepictsDao.kt @@ -22,16 +22,16 @@ abstract class DepictsDao { private val maxItemsAllowed = 10 @Insert(onConflict = OnConflictStrategy.REPLACE) - abstract suspend fun insert(depictedItem: Depicts) + abstract fun insert(depictedItem: Depicts) @Query("Select * From depicts_table order by lastUsed DESC") - abstract suspend fun getAllDepicts(): List + abstract fun getAllDepicts(): List @Query("Select * From depicts_table order by lastUsed DESC LIMIT :n OFFSET 10") - abstract suspend fun getDepictsForDeletion(n: Int): List + abstract fun getDepictsForDeletion(n: Int): List @Delete - abstract suspend fun delete(depicts: Depicts) + abstract fun delete(depicts: Depicts) /** * Gets all Depicts objects from the database, ordered by lastUsed in descending order. diff --git a/app/src/main/res/drawable/ic_refresh_24dp_nearby.xml b/app/src/main/res/drawable/ic_refresh_24dp_nearby.xml new file mode 100644 index 000000000..89f49ad9e --- /dev/null +++ b/app/src/main/res/drawable/ic_refresh_24dp_nearby.xml @@ -0,0 +1,18 @@ + + + + + + + + diff --git a/app/src/main/res/menu/nearby_fragment_menu.xml b/app/src/main/res/menu/nearby_fragment_menu.xml index 30b5c9dd5..fe049cde4 100644 --- a/app/src/main/res/menu/nearby_fragment_menu.xml +++ b/app/src/main/res/menu/nearby_fragment_menu.xml @@ -1,17 +1,25 @@ + + + + + diff --git a/build.gradle b/build.gradle index 003163cb8..b0bad89a5 100644 --- a/build.gradle +++ b/build.gradle @@ -6,7 +6,7 @@ buildscript { maven { url "https://plugins.gradle.org/m2/" } } dependencies { - classpath 'com.android.tools.build:gradle:8.5.0' + classpath 'com.android.tools.build:gradle:8.7.0' classpath 'com.getkeepsafe.dexcount:dexcount-gradle-plugin:0.8.2' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$KOTLIN_VERSION" classpath 'org.codehaus.groovy:groovy-all:2.4.15' diff --git a/gradle.properties b/gradle.properties index ecfe43a80..9ca154b75 100644 --- a/gradle.properties +++ b/gradle.properties @@ -17,7 +17,7 @@ org.gradle.jvmargs=-Xmx1536M org.gradle.caching=true android.enableR8.fullMode=false -KOTLIN_VERSION=1.7.20 +KOTLIN_VERSION=1.9.22 LEAK_CANARY_VERSION=2.10 DAGGER_VERSION=2.23 ROOM_VERSION=2.5.0 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index fb6a72053..fd53d45f9 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ #Sun Apr 23 18:22:54 IST 2023 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.9-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists \ No newline at end of file From 7c588918929edef6cf18467731766ef059797206 Mon Sep 17 00:00:00 2001 From: Parneet Singh <111801812+parneet-guraya@users.noreply.github.com> Date: Sat, 26 Oct 2024 10:02:35 +0530 Subject: [PATCH 24/36] fix test (#5893) Signed-off-by: parneet-guraya --- .../test/kotlin/fr/free/nrw/commons/review/ReviewHelperTest.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/test/kotlin/fr/free/nrw/commons/review/ReviewHelperTest.kt b/app/src/test/kotlin/fr/free/nrw/commons/review/ReviewHelperTest.kt index 283bbf268..f980152dc 100644 --- a/app/src/test/kotlin/fr/free/nrw/commons/review/ReviewHelperTest.kt +++ b/app/src/test/kotlin/fr/free/nrw/commons/review/ReviewHelperTest.kt @@ -140,7 +140,7 @@ class ReviewHelperTest { mock().apply { whenever(title()).thenReturn(file) if (revision.isNotEmpty()) { - whenever(revisions()).thenReturn(*revision.toMutableList()) + whenever(revisions()).thenReturn(revision.toMutableList()) } val media = From bc065c8792d2804c75aa5f3af9f12a38043a160d Mon Sep 17 00:00:00 2001 From: Parneet Singh <111801812+parneet-guraya@users.noreply.github.com> Date: Sat, 26 Oct 2024 19:49:34 +0530 Subject: [PATCH 25/36] `CommonsApplication` migrate to kotlin & some lint fixes (#5879) * convert to kotlin Signed-off-by: parneet-guraya * use lateinit instead of nullable types Signed-off-by: parneet-guraya * instance property access fix Signed-off-by: parneet-guraya * refactor constants name with uppercased ones Signed-off-by: parneet-guraya * remove unused Signed-off-by: parneet-guraya * fix imports in test Signed-off-by: parneet-guraya * use mockk for kotlin to fix tests Signed-off-by: parneet-guraya --------- Signed-off-by: parneet-guraya --- .../fr/free/nrw/commons/AboutActivityTest.kt | 2 +- .../free/nrw/commons/CommonsApplication.java | 432 ------------------ .../fr/free/nrw/commons/CommonsApplication.kt | 414 +++++++++++++++++ .../free/nrw/commons/actions/ThanksClient.kt | 2 +- .../free/nrw/commons/auth/LoginActivity.java | 8 +- .../description/DescriptionEditActivity.kt | 4 +- .../nrw/commons/upload/worker/UploadWorker.kt | 2 +- .../nrw/commons/actions/ThanksClientTest.kt | 7 +- .../DescriptionEditActivityUnitTest.kt | 8 + .../nrw/commons/upload/UploadClientTest.kt | 2 +- 10 files changed, 436 insertions(+), 445 deletions(-) delete mode 100644 app/src/main/java/fr/free/nrw/commons/CommonsApplication.java create mode 100644 app/src/main/java/fr/free/nrw/commons/CommonsApplication.kt diff --git a/app/src/androidTest/java/fr/free/nrw/commons/AboutActivityTest.kt b/app/src/androidTest/java/fr/free/nrw/commons/AboutActivityTest.kt index b5a752ef9..45ff9e49d 100644 --- a/app/src/androidTest/java/fr/free/nrw/commons/AboutActivityTest.kt +++ b/app/src/androidTest/java/fr/free/nrw/commons/AboutActivityTest.kt @@ -105,7 +105,7 @@ class AboutActivityTest { fun testLaunchTranslate() { Espresso.onView(ViewMatchers.withId(R.id.about_translate)).perform(ViewActions.click()) Espresso.onView(ViewMatchers.withId(android.R.id.button1)).perform(ViewActions.click()) - val langCode = CommonsApplication.getInstance().languageLookUpTable.codes[0] + val langCode = CommonsApplication.instance.languageLookUpTable!!.codes[0] Intents.intended( CoreMatchers.allOf( IntentMatchers.hasAction(Intent.ACTION_VIEW), diff --git a/app/src/main/java/fr/free/nrw/commons/CommonsApplication.java b/app/src/main/java/fr/free/nrw/commons/CommonsApplication.java deleted file mode 100644 index 3aceb957a..000000000 --- a/app/src/main/java/fr/free/nrw/commons/CommonsApplication.java +++ /dev/null @@ -1,432 +0,0 @@ -package fr.free.nrw.commons; - -import static fr.free.nrw.commons.data.DBOpenHelper.CONTRIBUTIONS_TABLE; -import static org.acra.ReportField.ANDROID_VERSION; -import static org.acra.ReportField.APP_VERSION_CODE; -import static org.acra.ReportField.APP_VERSION_NAME; -import static org.acra.ReportField.PHONE_MODEL; -import static org.acra.ReportField.STACK_TRACE; -import static org.acra.ReportField.USER_COMMENT; - -import android.annotation.SuppressLint; -import android.app.Activity; -import android.app.NotificationChannel; -import android.app.NotificationManager; -import android.content.Context; -import android.content.Intent; -import android.database.sqlite.SQLiteDatabase; -import android.database.sqlite.SQLiteException; -import android.os.Build; -import android.os.Process; -import android.util.Log; -import androidx.annotation.NonNull; -import androidx.multidex.MultiDexApplication; -import com.facebook.drawee.backends.pipeline.Fresco; -import com.facebook.imagepipeline.core.ImagePipeline; -import com.facebook.imagepipeline.core.ImagePipelineConfig; -import fr.free.nrw.commons.auth.LoginActivity; -import fr.free.nrw.commons.auth.SessionManager; -import fr.free.nrw.commons.bookmarks.items.BookmarkItemsDao.Table; -import fr.free.nrw.commons.bookmarks.locations.BookmarkLocationsDao; -import fr.free.nrw.commons.bookmarks.pictures.BookmarkPicturesDao; -import fr.free.nrw.commons.category.CategoryDao; -import fr.free.nrw.commons.concurrency.BackgroundPoolExceptionHandler; -import fr.free.nrw.commons.concurrency.ThreadPoolService; -import fr.free.nrw.commons.contributions.ContributionDao; -import fr.free.nrw.commons.data.DBOpenHelper; -import fr.free.nrw.commons.di.ApplicationlessInjection; -import fr.free.nrw.commons.kvstore.JsonKvStore; -import fr.free.nrw.commons.language.AppLanguageLookUpTable; -import fr.free.nrw.commons.logging.FileLoggingTree; -import fr.free.nrw.commons.logging.LogUtils; -import fr.free.nrw.commons.media.CustomOkHttpNetworkFetcher; -import fr.free.nrw.commons.settings.Prefs; -import fr.free.nrw.commons.upload.FileUtils; -import fr.free.nrw.commons.utils.ConfigUtils; -import fr.free.nrw.commons.wikidata.cookies.CommonsCookieJar; -import io.reactivex.Completable; -import io.reactivex.android.schedulers.AndroidSchedulers; -import io.reactivex.internal.functions.Functions; -import io.reactivex.plugins.RxJavaPlugins; -import io.reactivex.schedulers.Schedulers; -import java.io.File; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Map; -import java.util.Set; -import javax.inject.Inject; -import javax.inject.Named; -import org.acra.ACRA; -import org.acra.annotation.AcraCore; -import org.acra.annotation.AcraDialog; -import org.acra.annotation.AcraMailSender; -import org.acra.data.StringFormat; -import timber.log.Timber; - -@AcraCore( - buildConfigClass = BuildConfig.class, - resReportSendSuccessToast = R.string.crash_dialog_ok_toast, - reportFormat = StringFormat.KEY_VALUE_LIST, - reportContent = {USER_COMMENT, APP_VERSION_CODE, APP_VERSION_NAME, ANDROID_VERSION, PHONE_MODEL, - STACK_TRACE} -) - -@AcraMailSender( - mailTo = "commons-app-android-private@googlegroups.com", - reportAsFile = false -) - -@AcraDialog( - resTheme = R.style.Theme_AppCompat_Dialog, - resText = R.string.crash_dialog_text, - resTitle = R.string.crash_dialog_title, - resCommentPrompt = R.string.crash_dialog_comment_prompt -) - -public class CommonsApplication extends MultiDexApplication { - - public static final String loginMessageIntentKey = "loginMessage"; - public static final String loginUsernameIntentKey = "loginUsername"; - - public static final String IS_LIMITED_CONNECTION_MODE_ENABLED = "is_limited_connection_mode_enabled"; - @Inject - SessionManager sessionManager; - @Inject - DBOpenHelper dbOpenHelper; - - @Inject - @Named("default_preferences") - JsonKvStore defaultPrefs; - - @Inject - CommonsCookieJar cookieJar; - - @Inject - CustomOkHttpNetworkFetcher customOkHttpNetworkFetcher; - - /** - * Constants begin - */ - - public static final String DEFAULT_EDIT_SUMMARY = "Uploaded using [[COM:MOA|Commons Mobile App]]"; - - public static final String FEEDBACK_EMAIL = "commons-app-android@googlegroups.com"; - - public static final String FEEDBACK_EMAIL_SUBJECT = "Commons Android App Feedback"; - - public static final String REPORT_EMAIL = "commons-app-android-private@googlegroups.com"; - - public static final String REPORT_EMAIL_SUBJECT = "Report a violation"; - - public static final String NOTIFICATION_CHANNEL_ID_ALL = "CommonsNotificationAll"; - - public static final String FEEDBACK_EMAIL_TEMPLATE_HEADER = "-- Technical information --"; - - /** - * Constants End - */ - - private static CommonsApplication INSTANCE; - - public static CommonsApplication getInstance() { - return INSTANCE; - } - - private AppLanguageLookUpTable languageLookUpTable; - - public AppLanguageLookUpTable getLanguageLookUpTable() { - return languageLookUpTable; - } - - @Inject - ContributionDao contributionDao; - - public static Boolean isPaused = false; - - /** - * Used to declare and initialize various components and dependencies - */ - @Override - public void onCreate() { - super.onCreate(); - - INSTANCE = this; - ACRA.init(this); - - ApplicationlessInjection - .getInstance(this) - .getCommonsApplicationComponent() - .inject(this); - - initTimber(); - - if (!defaultPrefs.getBoolean("has_user_manually_removed_location")) { - Set defaultExifTagsSet = defaultPrefs.getStringSet(Prefs.MANAGED_EXIF_TAGS); - if (null == defaultExifTagsSet) { - defaultExifTagsSet = new HashSet<>(); - } - defaultExifTagsSet.add(getString(R.string.exif_tag_location)); - defaultPrefs.putStringSet(Prefs.MANAGED_EXIF_TAGS, defaultExifTagsSet); - } - -// Set DownsampleEnabled to True to downsample the image in case it's heavy - ImagePipelineConfig config = ImagePipelineConfig.newBuilder(this) - .setNetworkFetcher(customOkHttpNetworkFetcher) - .setDownsampleEnabled(true) - .build(); - try { - Fresco.initialize(this, config); - } catch (Exception e) { - Timber.e(e); - // TODO: Remove when we're able to initialize Fresco in test builds. - } - - createNotificationChannel(this); - - languageLookUpTable = new AppLanguageLookUpTable(this); - - // This handler will catch exceptions thrown from Observables after they are disposed, - // or from Observables that are (deliberately or not) missing an onError handler. - RxJavaPlugins.setErrorHandler(Functions.emptyConsumer()); - - // Fire progress callbacks for every 3% of uploaded content - System.setProperty("in.yuvi.http.fluent.PROGRESS_TRIGGER_THRESHOLD", "3.0"); - } - - /** - * Plants debug and file logging tree. Timber lets you plant your own logging trees. - */ - private void initTimber() { - boolean isBeta = ConfigUtils.isBetaFlavour(); - String logFileName = - isBeta ? "CommonsBetaAppLogs" : "CommonsAppLogs"; - String logDirectory = LogUtils.getLogDirectory(); - //Delete stale logs if they have exceeded the specified size - deleteStaleLogs(logFileName, logDirectory); - - FileLoggingTree tree = new FileLoggingTree( - Log.VERBOSE, - logFileName, - logDirectory, - 1000, - getFileLoggingThreadPool()); - - Timber.plant(tree); - Timber.plant(new Timber.DebugTree()); - } - - /** - * Deletes the logs zip file at the specified directory and file locations specified in the - * params - * - * @param logFileName - * @param logDirectory - */ - private void deleteStaleLogs(String logFileName, String logDirectory) { - try { - File file = new File(logDirectory + "/zip/" + logFileName + ".zip"); - if (file.exists() && file.getTotalSpace() > 1000000) {// In Kbs - file.delete(); - } - } catch (Exception e) { - Timber.e(e); - } - } - - public static boolean isRoboUnitTest() { - return "robolectric".equals(Build.FINGERPRINT); - } - - private ThreadPoolService getFileLoggingThreadPool() { - return new ThreadPoolService.Builder("file-logging-thread") - .setPriority(Process.THREAD_PRIORITY_LOWEST) - .setPoolSize(1) - .setExceptionHandler(new BackgroundPoolExceptionHandler()) - .build(); - } - - public static void createNotificationChannel(@NonNull Context context) { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { - NotificationManager manager = (NotificationManager) context - .getSystemService(Context.NOTIFICATION_SERVICE); - NotificationChannel channel = manager - .getNotificationChannel(NOTIFICATION_CHANNEL_ID_ALL); - if (channel == null) { - channel = new NotificationChannel(NOTIFICATION_CHANNEL_ID_ALL, - context.getString(R.string.notifications_channel_name_all), - NotificationManager.IMPORTANCE_DEFAULT); - manager.createNotificationChannel(channel); - } - } - } - - public String getUserAgent() { - return "Commons/" + ConfigUtils.getVersionNameWithSha(this) - + " (https://mediawiki.org/wiki/Apps/Commons) Android/" + Build.VERSION.RELEASE; - } - - /** - * clears data of current application - * - * @param context Application context - * @param logoutListener Implementation of interface LogoutListener - */ - @SuppressLint("CheckResult") - public void clearApplicationData(Context context, LogoutListener logoutListener) { - File cacheDirectory = context.getCacheDir(); - File applicationDirectory = new File(cacheDirectory.getParent()); - if (applicationDirectory.exists()) { - String[] fileNames = applicationDirectory.list(); - for (String fileName : fileNames) { - if (!fileName.equals("lib")) { - FileUtils.deleteFile(new File(applicationDirectory, fileName)); - } - } - } - - sessionManager.logout() - .andThen(Completable.fromAction(() -> cookieJar.clear())) - .andThen(Completable.fromAction(() -> { - Timber.d("All accounts have been removed"); - clearImageCache(); - //TODO: fix preference manager - defaultPrefs.clearAll(); - defaultPrefs.putBoolean("firstrun", false); - updateAllDatabases(); - } - )) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(logoutListener::onLogoutComplete, Timber::e); - } - - /** - * Clear all images cache held by Fresco - */ - private void clearImageCache() { - ImagePipeline imagePipeline = Fresco.getImagePipeline(); - imagePipeline.clearCaches(); - } - - /** - * Deletes all tables and re-creates them. - */ - private void updateAllDatabases() { - dbOpenHelper.getReadableDatabase().close(); - SQLiteDatabase db = dbOpenHelper.getWritableDatabase(); - - CategoryDao.Table.onDelete(db); - dbOpenHelper.deleteTable(db, - CONTRIBUTIONS_TABLE);//Delete the contributions table in the existing db on older versions - - try { - contributionDao.deleteAll(); - } catch (SQLiteException e) { - Timber.e(e); - } - BookmarkPicturesDao.Table.onDelete(db); - BookmarkLocationsDao.Table.onDelete(db); - Table.onDelete(db); - } - - - /** - * Interface used to get log-out events - */ - public interface LogoutListener { - - void onLogoutComplete(); - } - - /** - * This listener is responsible for handling post-logout actions, specifically invoking the LoginActivity - * with relevant intent parameters. It does not perform the actual logout operation. - */ - public static class BaseLogoutListener implements CommonsApplication.LogoutListener { - - Context ctx; - String loginMessage, userName; - - /** - * Constructor for BaseLogoutListener. - * - * @param ctx Application context - */ - public BaseLogoutListener(final Context ctx) { - this.ctx = ctx; - } - - /** - * Constructor for BaseLogoutListener - * - * @param ctx The application context, used for invoking the LoginActivity and passing relevant intent parameters as part of the post-logout process. - * @param loginMessage Message to be displayed on the login page - * @param loginUsername Username to be pre-filled on the login page - */ - public BaseLogoutListener(final Context ctx, final String loginMessage, - final String loginUsername) { - this.ctx = ctx; - this.loginMessage = loginMessage; - this.userName = loginUsername; - } - - @Override - public void onLogoutComplete() { - Timber.d("Logout complete callback received."); - final Intent loginIntent = new Intent(ctx, LoginActivity.class); - loginIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK) - .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - - if (loginMessage != null) { - loginIntent.putExtra(loginMessageIntentKey, loginMessage); - } - if (userName != null) { - loginIntent.putExtra(loginUsernameIntentKey, userName); - } - - ctx.startActivity(loginIntent); - } - } - - /** - * This class is an extension of BaseLogoutListener, providing additional functionality or customization - * for the logout process. It includes specific actions to be taken during logout, such as handling redirection to the login screen. - */ - public static class ActivityLogoutListener extends BaseLogoutListener { - - Activity activity; - - - /** - * Constructor for ActivityLogoutListener. - * - * @param activity The activity context from which the logout is initiated. Used to perform actions such as finishing the activity. - * @param ctx The application context, used for invoking the LoginActivity and passing relevant intent parameters as part of the post-logout process. - */ - public ActivityLogoutListener(final Activity activity, final Context ctx) { - super(ctx); - this.activity = activity; - } - - /** - * Constructor for ActivityLogoutListener with additional parameters for the login screen. - * - * @param activity The activity context from which the logout is initiated. Used to perform actions such as finishing the activity. - * @param ctx The application context, used for invoking the LoginActivity and passing relevant intent parameters as part of the post-logout process. - * @param loginMessage Message to be displayed on the login page after logout. - * @param loginUsername Username to be pre-filled on the login page after logout. - */ - public ActivityLogoutListener(final Activity activity, final Context ctx, - final String loginMessage, final String loginUsername) { - super(activity, loginMessage, loginUsername); - this.activity = activity; - } - - @Override - public void onLogoutComplete() { - super.onLogoutComplete(); - activity.finish(); - } - } -} - diff --git a/app/src/main/java/fr/free/nrw/commons/CommonsApplication.kt b/app/src/main/java/fr/free/nrw/commons/CommonsApplication.kt new file mode 100644 index 000000000..9ed19d686 --- /dev/null +++ b/app/src/main/java/fr/free/nrw/commons/CommonsApplication.kt @@ -0,0 +1,414 @@ +package fr.free.nrw.commons + +import android.annotation.SuppressLint +import android.app.Activity +import android.app.NotificationChannel +import android.app.NotificationManager +import android.content.Context +import android.content.Intent +import android.database.sqlite.SQLiteException +import android.os.Build +import android.os.Process +import android.util.Log +import androidx.multidex.MultiDexApplication +import com.facebook.drawee.backends.pipeline.Fresco +import com.facebook.imagepipeline.core.ImagePipelineConfig +import fr.free.nrw.commons.auth.LoginActivity +import fr.free.nrw.commons.auth.SessionManager +import fr.free.nrw.commons.bookmarks.items.BookmarkItemsDao +import fr.free.nrw.commons.bookmarks.locations.BookmarkLocationsDao +import fr.free.nrw.commons.bookmarks.pictures.BookmarkPicturesDao +import fr.free.nrw.commons.category.CategoryDao +import fr.free.nrw.commons.concurrency.BackgroundPoolExceptionHandler +import fr.free.nrw.commons.concurrency.ThreadPoolService +import fr.free.nrw.commons.contributions.ContributionDao +import fr.free.nrw.commons.data.DBOpenHelper +import fr.free.nrw.commons.di.ApplicationlessInjection +import fr.free.nrw.commons.kvstore.JsonKvStore +import fr.free.nrw.commons.language.AppLanguageLookUpTable +import fr.free.nrw.commons.logging.FileLoggingTree +import fr.free.nrw.commons.logging.LogUtils +import fr.free.nrw.commons.media.CustomOkHttpNetworkFetcher +import fr.free.nrw.commons.settings.Prefs +import fr.free.nrw.commons.upload.FileUtils +import fr.free.nrw.commons.utils.ConfigUtils.getVersionNameWithSha +import fr.free.nrw.commons.utils.ConfigUtils.isBetaFlavour +import fr.free.nrw.commons.wikidata.cookies.CommonsCookieJar +import io.reactivex.Completable +import io.reactivex.android.schedulers.AndroidSchedulers +import io.reactivex.internal.functions.Functions +import io.reactivex.plugins.RxJavaPlugins +import io.reactivex.schedulers.Schedulers +import org.acra.ACRA.init +import org.acra.ReportField +import org.acra.annotation.AcraCore +import org.acra.annotation.AcraDialog +import org.acra.annotation.AcraMailSender +import org.acra.data.StringFormat +import timber.log.Timber +import timber.log.Timber.DebugTree +import java.io.File +import javax.inject.Inject +import javax.inject.Named + +@AcraCore( + buildConfigClass = BuildConfig::class, + resReportSendSuccessToast = R.string.crash_dialog_ok_toast, + reportFormat = StringFormat.KEY_VALUE_LIST, + reportContent = [ReportField.USER_COMMENT, ReportField.APP_VERSION_CODE, ReportField.APP_VERSION_NAME, ReportField.ANDROID_VERSION, ReportField.PHONE_MODEL, ReportField.STACK_TRACE] +) + +@AcraMailSender(mailTo = "commons-app-android-private@googlegroups.com", reportAsFile = false) + +@AcraDialog( + resTheme = R.style.Theme_AppCompat_Dialog, + resText = R.string.crash_dialog_text, + resTitle = R.string.crash_dialog_title, + resCommentPrompt = R.string.crash_dialog_comment_prompt +) + +class CommonsApplication : MultiDexApplication() { + + @Inject + lateinit var sessionManager: SessionManager + + @Inject + lateinit var dbOpenHelper: DBOpenHelper + + @Inject + @field:Named("default_preferences") + lateinit var defaultPrefs: JsonKvStore + + @Inject + lateinit var cookieJar: CommonsCookieJar + + @Inject + lateinit var customOkHttpNetworkFetcher: CustomOkHttpNetworkFetcher + + var languageLookUpTable: AppLanguageLookUpTable? = null + private set + + @Inject + lateinit var contributionDao: ContributionDao + + /** + * Used to declare and initialize various components and dependencies + */ + override fun onCreate() { + super.onCreate() + + instance = this + init(this) + + ApplicationlessInjection + .getInstance(this) + .commonsApplicationComponent + .inject(this) + + initTimber() + + if (!defaultPrefs.getBoolean("has_user_manually_removed_location")) { + var defaultExifTagsSet = defaultPrefs.getStringSet(Prefs.MANAGED_EXIF_TAGS) + if (null == defaultExifTagsSet) { + defaultExifTagsSet = HashSet() + } + defaultExifTagsSet.add(getString(R.string.exif_tag_location)) + defaultPrefs.putStringSet(Prefs.MANAGED_EXIF_TAGS, defaultExifTagsSet) + } + + // Set DownsampleEnabled to True to downsample the image in case it's heavy + val config = ImagePipelineConfig.newBuilder(this) + .setNetworkFetcher(customOkHttpNetworkFetcher) + .setDownsampleEnabled(true) + .build() + try { + Fresco.initialize(this, config) + } catch (e: Exception) { + Timber.e(e) + // TODO: Remove when we're able to initialize Fresco in test builds. + } + + createNotificationChannel(this) + + languageLookUpTable = AppLanguageLookUpTable(this) + + // This handler will catch exceptions thrown from Observables after they are disposed, + // or from Observables that are (deliberately or not) missing an onError handler. + RxJavaPlugins.setErrorHandler(Functions.emptyConsumer()) + + // Fire progress callbacks for every 3% of uploaded content + System.setProperty("in.yuvi.http.fluent.PROGRESS_TRIGGER_THRESHOLD", "3.0") + } + + /** + * Plants debug and file logging tree. Timber lets you plant your own logging trees. + */ + private fun initTimber() { + val isBeta = isBetaFlavour + val logFileName = + if (isBeta) "CommonsBetaAppLogs" else "CommonsAppLogs" + val logDirectory = LogUtils.getLogDirectory() + //Delete stale logs if they have exceeded the specified size + deleteStaleLogs(logFileName, logDirectory) + + val tree = FileLoggingTree( + Log.VERBOSE, + logFileName, + logDirectory, + 1000, + fileLoggingThreadPool + ) + + Timber.plant(tree) + Timber.plant(DebugTree()) + } + + /** + * Deletes the logs zip file at the specified directory and file locations specified in the + * params + * + * @param logFileName + * @param logDirectory + */ + private fun deleteStaleLogs(logFileName: String, logDirectory: String) { + try { + val file = File("$logDirectory/zip/$logFileName.zip") + if (file.exists() && file.totalSpace > 1000000) { // In Kbs + file.delete() + } + } catch (e: Exception) { + Timber.e(e) + } + } + + private val fileLoggingThreadPool: ThreadPoolService + get() = ThreadPoolService.Builder("file-logging-thread") + .setPriority(Process.THREAD_PRIORITY_LOWEST) + .setPoolSize(1) + .setExceptionHandler(BackgroundPoolExceptionHandler()) + .build() + + val userAgent: String + get() = ("Commons/" + this.getVersionNameWithSha() + + " (https://mediawiki.org/wiki/Apps/Commons) Android/" + Build.VERSION.RELEASE) + + /** + * clears data of current application + * + * @param context Application context + * @param logoutListener Implementation of interface LogoutListener + */ + @SuppressLint("CheckResult") + fun clearApplicationData(context: Context, logoutListener: LogoutListener) { + val cacheDirectory = context.cacheDir + val applicationDirectory = File(cacheDirectory.parent) + if (applicationDirectory.exists()) { + val fileNames = applicationDirectory.list() + for (fileName in fileNames) { + if (fileName != "lib") { + FileUtils.deleteFile(File(applicationDirectory, fileName)) + } + } + } + + sessionManager.logout() + .andThen(Completable.fromAction { cookieJar.clear() }) + .andThen(Completable.fromAction { + Timber.d("All accounts have been removed") + clearImageCache() + //TODO: fix preference manager + defaultPrefs.clearAll() + defaultPrefs.putBoolean("firstrun", false) + updateAllDatabases() + }) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe({ logoutListener.onLogoutComplete() }, { t: Throwable? -> Timber.e(t) }) + } + + /** + * Clear all images cache held by Fresco + */ + private fun clearImageCache() { + val imagePipeline = Fresco.getImagePipeline() + imagePipeline.clearCaches() + } + + /** + * Deletes all tables and re-creates them. + */ + private fun updateAllDatabases() { + dbOpenHelper.readableDatabase.close() + val db = dbOpenHelper.writableDatabase + + CategoryDao.Table.onDelete(db) + dbOpenHelper.deleteTable( + db, + DBOpenHelper.CONTRIBUTIONS_TABLE + ) //Delete the contributions table in the existing db on older versions + + try { + contributionDao.deleteAll() + } catch (e: SQLiteException) { + Timber.e(e) + } + BookmarkPicturesDao.Table.onDelete(db) + BookmarkLocationsDao.Table.onDelete(db) + BookmarkItemsDao.Table.onDelete(db) + } + + + /** + * Interface used to get log-out events + */ + interface LogoutListener { + fun onLogoutComplete() + } + + /** + * This listener is responsible for handling post-logout actions, specifically invoking the LoginActivity + * with relevant intent parameters. It does not perform the actual logout operation. + */ + open class BaseLogoutListener : LogoutListener { + var ctx: Context + var loginMessage: String? = null + var userName: String? = null + + /** + * Constructor for BaseLogoutListener. + * + * @param ctx Application context + */ + constructor(ctx: Context) { + this.ctx = ctx + } + + /** + * Constructor for BaseLogoutListener + * + * @param ctx The application context, used for invoking the LoginActivity and passing relevant intent parameters as part of the post-logout process. + * @param loginMessage Message to be displayed on the login page + * @param loginUsername Username to be pre-filled on the login page + */ + constructor( + ctx: Context, loginMessage: String?, + loginUsername: String? + ) { + this.ctx = ctx + this.loginMessage = loginMessage + this.userName = loginUsername + } + + override fun onLogoutComplete() { + Timber.d("Logout complete callback received.") + val loginIntent = Intent(ctx, LoginActivity::class.java) + loginIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK) + .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) + + if (loginMessage != null) { + loginIntent.putExtra(LOGIN_MESSAGE_INTENT_KEY, loginMessage) + } + if (userName != null) { + loginIntent.putExtra(LOGIN_USERNAME_INTENT_KEY, userName) + } + + ctx.startActivity(loginIntent) + } + } + + /** + * This class is an extension of BaseLogoutListener, providing additional functionality or customization + * for the logout process. It includes specific actions to be taken during logout, such as handling redirection to the login screen. + */ + class ActivityLogoutListener : BaseLogoutListener { + var activity: Activity + + + /** + * Constructor for ActivityLogoutListener. + * + * @param activity The activity context from which the logout is initiated. Used to perform actions such as finishing the activity. + * @param ctx The application context, used for invoking the LoginActivity and passing relevant intent parameters as part of the post-logout process. + */ + constructor(activity: Activity, ctx: Context) : super(ctx) { + this.activity = activity + } + + /** + * Constructor for ActivityLogoutListener with additional parameters for the login screen. + * + * @param activity The activity context from which the logout is initiated. Used to perform actions such as finishing the activity. + * @param ctx The application context, used for invoking the LoginActivity and passing relevant intent parameters as part of the post-logout process. + * @param loginMessage Message to be displayed on the login page after logout. + * @param loginUsername Username to be pre-filled on the login page after logout. + */ + constructor( + activity: Activity, ctx: Context?, + loginMessage: String?, loginUsername: String? + ) : super(activity, loginMessage, loginUsername) { + this.activity = activity + } + + override fun onLogoutComplete() { + super.onLogoutComplete() + activity.finish() + } + } + + companion object { + + const val LOGIN_MESSAGE_INTENT_KEY: String = "loginMessage" + const val LOGIN_USERNAME_INTENT_KEY: String = "loginUsername" + + const val IS_LIMITED_CONNECTION_MODE_ENABLED: String = "is_limited_connection_mode_enabled" + + /** + * Constants begin + */ + const val OPEN_APPLICATION_DETAIL_SETTINGS: Int = 1001 + + const val DEFAULT_EDIT_SUMMARY: String = "Uploaded using [[COM:MOA|Commons Mobile App]]" + + const val FEEDBACK_EMAIL: String = "commons-app-android@googlegroups.com" + + const val FEEDBACK_EMAIL_SUBJECT: String = "Commons Android App Feedback" + + const val REPORT_EMAIL: String = "commons-app-android-private@googlegroups.com" + + const val REPORT_EMAIL_SUBJECT: String = "Report a violation" + + const val NOTIFICATION_CHANNEL_ID_ALL: String = "CommonsNotificationAll" + + const val FEEDBACK_EMAIL_TEMPLATE_HEADER: String = "-- Technical information --" + + /** + * Constants End + */ + + @JvmStatic + lateinit var instance: CommonsApplication + private set + + @JvmField + var isPaused: Boolean = false + + @JvmStatic + fun createNotificationChannel(context: Context) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + val manager = context + .getSystemService(NOTIFICATION_SERVICE) as NotificationManager + var channel = manager + .getNotificationChannel(NOTIFICATION_CHANNEL_ID_ALL) + if (channel == null) { + channel = NotificationChannel( + NOTIFICATION_CHANNEL_ID_ALL, + context.getString(R.string.notifications_channel_name_all), + NotificationManager.IMPORTANCE_DEFAULT + ) + manager.createNotificationChannel(channel) + } + } + } + } +} + diff --git a/app/src/main/java/fr/free/nrw/commons/actions/ThanksClient.kt b/app/src/main/java/fr/free/nrw/commons/actions/ThanksClient.kt index de716db99..af305c9c6 100644 --- a/app/src/main/java/fr/free/nrw/commons/actions/ThanksClient.kt +++ b/app/src/main/java/fr/free/nrw/commons/actions/ThanksClient.kt @@ -32,7 +32,7 @@ class ThanksClient revisionId.toString(), // Rev null, // Log csrfTokenClient.getTokenBlocking(), // Token - CommonsApplication.getInstance().userAgent, // Source + CommonsApplication.instance.userAgent, // Source ).map { mwThankPostResponse -> mwThankPostResponse.result?.success == 1 } diff --git a/app/src/main/java/fr/free/nrw/commons/auth/LoginActivity.java b/app/src/main/java/fr/free/nrw/commons/auth/LoginActivity.java index 0b6d1831c..3ff61e511 100644 --- a/app/src/main/java/fr/free/nrw/commons/auth/LoginActivity.java +++ b/app/src/main/java/fr/free/nrw/commons/auth/LoginActivity.java @@ -50,8 +50,8 @@ import timber.log.Timber; import static android.view.KeyEvent.KEYCODE_ENTER; import static android.view.View.VISIBLE; import static android.view.inputmethod.EditorInfo.IME_ACTION_DONE; -import static fr.free.nrw.commons.CommonsApplication.loginMessageIntentKey; -import static fr.free.nrw.commons.CommonsApplication.loginUsernameIntentKey; +import static fr.free.nrw.commons.CommonsApplication.LOGIN_MESSAGE_INTENT_KEY; +import static fr.free.nrw.commons.CommonsApplication.LOGIN_USERNAME_INTENT_KEY; public class LoginActivity extends AccountAuthenticatorActivity { @@ -94,8 +94,8 @@ public class LoginActivity extends AccountAuthenticatorActivity { binding = ActivityLoginBinding.inflate(getLayoutInflater()); setContentView(binding.getRoot()); - String message = getIntent().getStringExtra(loginMessageIntentKey); - String username = getIntent().getStringExtra(loginUsernameIntentKey); + String message = getIntent().getStringExtra(LOGIN_MESSAGE_INTENT_KEY); + String username = getIntent().getStringExtra(LOGIN_USERNAME_INTENT_KEY); binding.loginUsername.addTextChangedListener(textWatcher); binding.loginPassword.addTextChangedListener(textWatcher); diff --git a/app/src/main/java/fr/free/nrw/commons/description/DescriptionEditActivity.kt b/app/src/main/java/fr/free/nrw/commons/description/DescriptionEditActivity.kt index cfd7f36b9..7ed598637 100644 --- a/app/src/main/java/fr/free/nrw/commons/description/DescriptionEditActivity.kt +++ b/app/src/main/java/fr/free/nrw/commons/description/DescriptionEditActivity.kt @@ -258,7 +258,7 @@ class DescriptionEditActivity : username, ) - val commonsApplication = CommonsApplication.getInstance() + val commonsApplication = CommonsApplication.instance if (commonsApplication != null) { commonsApplication.clearApplicationData(this, logoutListener) } @@ -291,7 +291,7 @@ class DescriptionEditActivity : username, ) - val commonsApplication = CommonsApplication.getInstance() + val commonsApplication = CommonsApplication.instance if (commonsApplication != null) { commonsApplication.clearApplicationData(this, logoutListener) } diff --git a/app/src/main/java/fr/free/nrw/commons/upload/worker/UploadWorker.kt b/app/src/main/java/fr/free/nrw/commons/upload/worker/UploadWorker.kt index fb2ca7b3a..15a049489 100644 --- a/app/src/main/java/fr/free/nrw/commons/upload/worker/UploadWorker.kt +++ b/app/src/main/java/fr/free/nrw/commons/upload/worker/UploadWorker.kt @@ -438,7 +438,7 @@ class UploadWorker( username, ) CommonsApplication - .getInstance() + .instance!! .clearApplicationData(appContext, logoutListener) } } diff --git a/app/src/test/kotlin/fr/free/nrw/commons/actions/ThanksClientTest.kt b/app/src/test/kotlin/fr/free/nrw/commons/actions/ThanksClientTest.kt index d409016ae..b3fb19c10 100644 --- a/app/src/test/kotlin/fr/free/nrw/commons/actions/ThanksClientTest.kt +++ b/app/src/test/kotlin/fr/free/nrw/commons/actions/ThanksClientTest.kt @@ -4,6 +4,8 @@ import com.nhaarman.mockitokotlin2.eq import com.nhaarman.mockitokotlin2.verify import fr.free.nrw.commons.CommonsApplication import fr.free.nrw.commons.auth.csrf.CsrfTokenClient +import io.mockk.every +import io.mockk.mockkObject import org.junit.Before import org.junit.Test import org.junit.runner.RunWith @@ -29,7 +31,6 @@ class ThanksClientTest { private lateinit var commonsApplication: CommonsApplication private lateinit var thanksClient: ThanksClient - private lateinit var mockedApplication: MockedStatic /** * initial setup, test environment @@ -38,8 +39,8 @@ class ThanksClientTest { @Throws(Exception::class) fun setUp() { MockitoAnnotations.openMocks(this) - mockedApplication = Mockito.mockStatic(CommonsApplication::class.java) - `when`(CommonsApplication.getInstance()).thenReturn(commonsApplication) + mockkObject(CommonsApplication) + every { CommonsApplication.instance }.returns(commonsApplication) thanksClient = ThanksClient(csrfTokenClient, service) } diff --git a/app/src/test/kotlin/fr/free/nrw/commons/description/DescriptionEditActivityUnitTest.kt b/app/src/test/kotlin/fr/free/nrw/commons/description/DescriptionEditActivityUnitTest.kt index 00f438e1e..be3b7e8e3 100644 --- a/app/src/test/kotlin/fr/free/nrw/commons/description/DescriptionEditActivityUnitTest.kt +++ b/app/src/test/kotlin/fr/free/nrw/commons/description/DescriptionEditActivityUnitTest.kt @@ -10,6 +10,7 @@ import android.os.Looper import android.view.LayoutInflater import android.view.View import androidx.recyclerview.widget.RecyclerView +import fr.free.nrw.commons.CommonsApplication import fr.free.nrw.commons.Media import fr.free.nrw.commons.R import fr.free.nrw.commons.TestCommonsApplication @@ -19,6 +20,8 @@ import fr.free.nrw.commons.description.EditDescriptionConstants.WIKITEXT import fr.free.nrw.commons.settings.Prefs import fr.free.nrw.commons.upload.UploadMediaDetail import fr.free.nrw.commons.upload.UploadMediaDetailAdapter +import io.mockk.every +import io.mockk.mockkObject import org.junit.Assert import org.junit.Assert.assertEquals import org.junit.Before @@ -54,6 +57,9 @@ class DescriptionEditActivityUnitTest { @Mock private lateinit var rvDescriptions: RecyclerView + @Mock + private lateinit var commonsApplication: CommonsApplication + private lateinit var media: Media @Before @@ -82,6 +88,8 @@ class DescriptionEditActivityUnitTest { bundle.putString(Prefs.DESCRIPTION_LANGUAGE, "bn") bundle.putParcelable("media", media) intent.putExtras(bundle) + mockkObject(CommonsApplication) + every { CommonsApplication.instance }.returns(commonsApplication) activity = Robolectric.buildActivity(DescriptionEditActivity::class.java, intent).create().get() binding = ActivityDescriptionEditBinding.inflate(LayoutInflater.from(activity)) diff --git a/app/src/test/kotlin/fr/free/nrw/commons/upload/UploadClientTest.kt b/app/src/test/kotlin/fr/free/nrw/commons/upload/UploadClientTest.kt index 97aac88fe..50130106a 100644 --- a/app/src/test/kotlin/fr/free/nrw/commons/upload/UploadClientTest.kt +++ b/app/src/test/kotlin/fr/free/nrw/commons/upload/UploadClientTest.kt @@ -10,7 +10,7 @@ import com.nhaarman.mockitokotlin2.eq import com.nhaarman.mockitokotlin2.mock import com.nhaarman.mockitokotlin2.times import com.nhaarman.mockitokotlin2.whenever -import fr.free.nrw.commons.CommonsApplication.DEFAULT_EDIT_SUMMARY +import fr.free.nrw.commons.CommonsApplication.Companion.DEFAULT_EDIT_SUMMARY import fr.free.nrw.commons.auth.csrf.CsrfTokenClient import fr.free.nrw.commons.contributions.ChunkInfo import fr.free.nrw.commons.contributions.Contribution From cdc4f89da551b9be51ee17f488a6c766e6decbd0 Mon Sep 17 00:00:00 2001 From: Rohit Verma <101377978+rohit9625@users.noreply.github.com> Date: Sun, 27 Oct 2024 19:08:40 +0530 Subject: [PATCH 26/36] Database bug fix (#5902) * make database function calls suspending and update room version * replace MainScope with coroutineScope for database operations * add suspend keyword and refactor code --- .../database/NotForUploadStatusDao.kt | 10 +++++----- .../customselector/database/UploadedStatusDao.kt | 14 +++++++------- .../customselector/ui/selector/ImageLoader.kt | 4 ++-- .../fr/free/nrw/commons/nearby/PlaceDao.java | 12 +++--------- .../nrw/commons/upload/depicts/DepictsDao.kt | 16 ++++++++-------- .../nrw/commons/upload/worker/UploadWorker.kt | 4 ++-- gradle.properties | 2 +- 7 files changed, 28 insertions(+), 34 deletions(-) diff --git a/app/src/main/java/fr/free/nrw/commons/customselector/database/NotForUploadStatusDao.kt b/app/src/main/java/fr/free/nrw/commons/customselector/database/NotForUploadStatusDao.kt index 872388f40..b75a6e1d4 100644 --- a/app/src/main/java/fr/free/nrw/commons/customselector/database/NotForUploadStatusDao.kt +++ b/app/src/main/java/fr/free/nrw/commons/customselector/database/NotForUploadStatusDao.kt @@ -15,19 +15,19 @@ abstract class NotForUploadStatusDao { * Insert into Not For Upload status. */ @Insert(onConflict = OnConflictStrategy.REPLACE) - abstract fun insert(notForUploadStatus: NotForUploadStatus) + abstract suspend fun insert(notForUploadStatus: NotForUploadStatus) /** * Delete Not For Upload status entry. */ @Delete - abstract fun delete(notForUploadStatus: NotForUploadStatus) + abstract suspend fun delete(notForUploadStatus: NotForUploadStatus) /** * Query Not For Upload status with image sha1. */ @Query("SELECT * FROM images_not_for_upload_table WHERE imageSHA1 = (:imageSHA1) ") - abstract fun getFromImageSHA1(imageSHA1: String): NotForUploadStatus? + abstract suspend fun getFromImageSHA1(imageSHA1: String): NotForUploadStatus? /** * Asynchronous image sha1 query. @@ -38,7 +38,7 @@ abstract class NotForUploadStatusDao { * Deletion Not For Upload status with image sha1. */ @Query("DELETE FROM images_not_for_upload_table WHERE imageSHA1 = (:imageSHA1) ") - abstract fun deleteWithImageSHA1(imageSHA1: String) + abstract suspend fun deleteWithImageSHA1(imageSHA1: String) /** * Asynchronous image sha1 deletion. @@ -49,5 +49,5 @@ abstract class NotForUploadStatusDao { * Check whether the imageSHA1 is present in database */ @Query("SELECT COUNT() FROM images_not_for_upload_table WHERE imageSHA1 = (:imageSHA1) ") - abstract fun find(imageSHA1: String): Int + abstract suspend fun find(imageSHA1: String): Int } diff --git a/app/src/main/java/fr/free/nrw/commons/customselector/database/UploadedStatusDao.kt b/app/src/main/java/fr/free/nrw/commons/customselector/database/UploadedStatusDao.kt index 03cbb176f..378af5b8d 100644 --- a/app/src/main/java/fr/free/nrw/commons/customselector/database/UploadedStatusDao.kt +++ b/app/src/main/java/fr/free/nrw/commons/customselector/database/UploadedStatusDao.kt @@ -17,31 +17,31 @@ abstract class UploadedStatusDao { * Insert into uploaded status. */ @Insert(onConflict = OnConflictStrategy.REPLACE) - abstract fun insert(uploadedStatus: UploadedStatus) + abstract suspend fun insert(uploadedStatus: UploadedStatus) /** * Update uploaded status entry. */ @Update - abstract fun update(uploadedStatus: UploadedStatus) + abstract suspend fun update(uploadedStatus: UploadedStatus) /** * Delete uploaded status entry. */ @Delete - abstract fun delete(uploadedStatus: UploadedStatus) + abstract suspend fun delete(uploadedStatus: UploadedStatus) /** * Query uploaded status with image sha1. */ @Query("SELECT * FROM uploaded_table WHERE imageSHA1 = (:imageSHA1) ") - abstract fun getFromImageSHA1(imageSHA1: String): UploadedStatus? + abstract suspend fun getFromImageSHA1(imageSHA1: String): UploadedStatus? /** * Query uploaded status with modified image sha1. */ @Query("SELECT * FROM uploaded_table WHERE modifiedImageSHA1 = (:modifiedImageSHA1) ") - abstract fun getFromModifiedImageSHA1(modifiedImageSHA1: String): UploadedStatus? + abstract suspend fun getFromModifiedImageSHA1(modifiedImageSHA1: String): UploadedStatus? /** * Asynchronous insert into uploaded status table. @@ -55,7 +55,7 @@ abstract class UploadedStatusDao { * Check whether the imageSHA1 is present in database */ @Query("SELECT COUNT() FROM uploaded_table WHERE imageSHA1 = (:imageSHA1) AND imageResult = (:imageResult) ") - abstract fun findByImageSHA1( + abstract suspend fun findByImageSHA1( imageSHA1: String, imageResult: Boolean, ): Int @@ -66,7 +66,7 @@ abstract class UploadedStatusDao { @Query( "SELECT COUNT() FROM uploaded_table WHERE modifiedImageSHA1 = (:modifiedImageSHA1) AND modifiedImageResult = (:modifiedImageResult) ", ) - abstract fun findByModifiedImageSHA1( + abstract suspend fun findByModifiedImageSHA1( modifiedImageSHA1: String, modifiedImageResult: Boolean, ): Int diff --git a/app/src/main/java/fr/free/nrw/commons/customselector/ui/selector/ImageLoader.kt b/app/src/main/java/fr/free/nrw/commons/customselector/ui/selector/ImageLoader.kt index 1fb5c5953..95c768c1c 100644 --- a/app/src/main/java/fr/free/nrw/commons/customselector/ui/selector/ImageLoader.kt +++ b/app/src/main/java/fr/free/nrw/commons/customselector/ui/selector/ImageLoader.kt @@ -17,7 +17,7 @@ import fr.free.nrw.commons.utils.CustomSelectorUtils import fr.free.nrw.commons.utils.CustomSelectorUtils.Companion.checkWhetherFileExistsOnCommonsUsingSHA1 import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.CoroutineScope -import kotlinx.coroutines.MainScope +import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import java.util.Calendar import java.util.concurrent.TimeUnit @@ -65,7 +65,7 @@ class ImageLoader /** * Coroutine Scope. */ - private val scope: CoroutineScope = MainScope() + private val scope: CoroutineScope = CoroutineScope(Dispatchers.IO) /** * Query image and setUp the view. diff --git a/app/src/main/java/fr/free/nrw/commons/nearby/PlaceDao.java b/app/src/main/java/fr/free/nrw/commons/nearby/PlaceDao.java index 7babee3b7..9e4292114 100644 --- a/app/src/main/java/fr/free/nrw/commons/nearby/PlaceDao.java +++ b/app/src/main/java/fr/free/nrw/commons/nearby/PlaceDao.java @@ -37,15 +37,11 @@ public abstract class PlaceDao { */ public Completable save(final Place place) { return Completable - .fromAction(() -> { - saveSynchronous(place); - }); + .fromAction(() -> saveSynchronous(place)); } /** * Deletes all Place objects from the database. - * - * @return A Completable that completes once the deletion operation is done. */ @Query("DELETE FROM place") public abstract void deleteAllSynchronous(); @@ -53,11 +49,9 @@ public abstract class PlaceDao { /** * Deletes all Place objects from the database. * + * @return A Completable that completes once the deletion operation is done. */ public Completable deleteAll() { - return Completable - .fromAction(() -> { - deleteAllSynchronous(); - }); + return Completable.fromAction(this::deleteAllSynchronous); } } diff --git a/app/src/main/java/fr/free/nrw/commons/upload/depicts/DepictsDao.kt b/app/src/main/java/fr/free/nrw/commons/upload/depicts/DepictsDao.kt index c20d65abf..139b67d59 100644 --- a/app/src/main/java/fr/free/nrw/commons/upload/depicts/DepictsDao.kt +++ b/app/src/main/java/fr/free/nrw/commons/upload/depicts/DepictsDao.kt @@ -22,21 +22,21 @@ abstract class DepictsDao { private val maxItemsAllowed = 10 @Insert(onConflict = OnConflictStrategy.REPLACE) - abstract fun insert(depictedItem: Depicts) + abstract suspend fun insert(depictedItem: Depicts) @Query("Select * From depicts_table order by lastUsed DESC") - abstract fun getAllDepicts(): List + abstract suspend fun getAllDepicts(): List @Query("Select * From depicts_table order by lastUsed DESC LIMIT :n OFFSET 10") - abstract fun getDepictsForDeletion(n: Int): List + abstract suspend fun getDepictsForDeletion(n: Int): List @Delete - abstract fun delete(depicts: Depicts) + abstract suspend fun delete(depicts: Depicts) /** * Gets all Depicts objects from the database, ordered by lastUsed in descending order. * - * @return A list of Depicts objects. + * @return Deferred list of Depicts objects. */ fun depictsList(): Deferred> = CoroutineScope(Dispatchers.IO).async { @@ -48,7 +48,7 @@ abstract class DepictsDao { * * @param depictedItem The Depicts object to insert. */ - private fun insertDepict(depictedItem: Depicts) = + fun insertDepict(depictedItem: Depicts) = CoroutineScope(Dispatchers.IO).launch { insert(depictedItem) } @@ -59,7 +59,7 @@ abstract class DepictsDao { * @param n The number of depicts to delete. * @return A list of Depicts objects to delete. */ - private suspend fun depictsForDeletion(n: Int): Deferred> = + fun depictsForDeletion(n: Int): Deferred> = CoroutineScope(Dispatchers.IO).async { getDepictsForDeletion(n) } @@ -69,7 +69,7 @@ abstract class DepictsDao { * * @param depicts The Depicts object to delete. */ - private suspend fun deleteDepicts(depicts: Depicts) = + fun deleteDepicts(depicts: Depicts) = CoroutineScope(Dispatchers.IO).launch { delete(depicts) } diff --git a/app/src/main/java/fr/free/nrw/commons/upload/worker/UploadWorker.kt b/app/src/main/java/fr/free/nrw/commons/upload/worker/UploadWorker.kt index 15a049489..144c503bb 100644 --- a/app/src/main/java/fr/free/nrw/commons/upload/worker/UploadWorker.kt +++ b/app/src/main/java/fr/free/nrw/commons/upload/worker/UploadWorker.kt @@ -41,8 +41,8 @@ import fr.free.nrw.commons.upload.UploadProgressActivity import fr.free.nrw.commons.upload.UploadResult import fr.free.nrw.commons.wikidata.WikidataEditService import io.reactivex.schedulers.Schedulers +import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.MainScope import kotlinx.coroutines.launch import kotlinx.coroutines.withContext import timber.log.Timber @@ -534,7 +534,7 @@ class UploadWorker( contribution.contentUri?.let { val imageSha1 = contribution.imageSHA1.toString() val modifiedSha1 = fileUtilsWrapper.getSHA1(fileUtilsWrapper.getFileInputStream(contribution.localUri?.path)) - MainScope().launch { + CoroutineScope(Dispatchers.IO).launch { uploadedStatusDao.insertUploaded( UploadedStatus( imageSha1, diff --git a/gradle.properties b/gradle.properties index 9ca154b75..0aee97f4e 100644 --- a/gradle.properties +++ b/gradle.properties @@ -20,7 +20,7 @@ android.enableR8.fullMode=false KOTLIN_VERSION=1.9.22 LEAK_CANARY_VERSION=2.10 DAGGER_VERSION=2.23 -ROOM_VERSION=2.5.0 +ROOM_VERSION=2.6.1 PREFERENCE_VERSION=1.1.0 CORE_KTX_VERSION=1.9.0 ADAPTER_DELEGATES_VERSION=4.3.0 From 522f1fe1922651d5a9ae11d11ec80c9a2d5a621b Mon Sep 17 00:00:00 2001 From: u7119288 <141695960+baijun6@users.noreply.github.com> Date: Mon, 28 Oct 2024 00:59:09 +1100 Subject: [PATCH 27/36] Partial fixes for errors and warnings reported by ./gradlew lint (#5885) * BaseMarker.kt: removed unneeded cast * TransformImageImpl.kt: removed unreachable code * ZoomableActivity.kt: removed Unnecessary safe call on a non-null receiver of type ZoomableDraweeView * ZoomableActivity.kt: removed Unnecessary safe call on a non-null receiver of type ZoomableDraweeView * DescriptionEditActivity.kt: removed unnecessary non-null assertion (!!) on a non-null receiver of type DescriptionEditHelper * Media.kt: Property would not be serialized into a 'Parcel'. Added '@IgnoredOnParcel' annotation to remove the warning * ZoomableActivity.kt: removed Unnecessary non-null assertion (!!) on a non-null receiver of type ZoomableDraweeView * CategoryClient.kt: removed condition 'page.categoryInfo() == null' as it's always 'false' * DescriptionEditActivity.kt: removed unnecessary safe call on a non-null receiver of type SessionManager * DescriptionEditActivity.kt: removed unnecessary safe call on a non-null receiver of type DescriptionEditHelper * WikidataFeedback.kt: removed unneeded cast * FailedUploadsFragment.kt: removed unneeded non-null assertion (!!) * PendingUploadsFragment.kt: removed unneeded non-null assertion (!!) * AchievementsFragment.java: Changed toUpperCase to toUpperCase(Locale.getDefault()) * ExploreFragment.java: Changed toUpperCase to toUpperCase(Locale.getDefault()) * FileUtils.java: Changed toUpperCase to toUpperCase(Locale.getDefault()) * AchievementsFragment.java: Changed toUpperCase to toUpperCase(Locale.ROOT) * ExploreFragment.java: Changed toUpperCase to toUpperCase(Locale.ROOT) * LocationPickerActivity.java: Changed toUpperCase to toUpperCase(Locale.ROOT) * MediaDetailFragment.java: Changed toUpperCase to toUpperCase(Locale.ROOT) * NearbyFilterSearchRecyclerViewAdapter.java: Changed toUpperCase to toUpperCase(Locale.ROOT) * ProfileActivity.java: Changed toUpperCase to toUpperCase(Locale.ROOT) * RecentSearchesFragment.java: Changed toUpperCase to toUpperCase(Locale.ROOT) * ReviewActivity.java: Changed toUpperCase to toUpperCase(Locale.ROOT) * SearchActivity.java: Changed toUpperCase to toUpperCase(Locale.ROOT) * UploadMediaPresenter.java: Changed toUpperCase to toLowerCase(Locale.ROOT) * CategoriesMediaFragment.kt: Changed arguments!! to requireArguments() * ChildDepictionsFragment.kt: Changed arguments!! to requireArguments() * DepictedImagesFragment.kt: Changed arguments!! to requireArguments() * DepictsFragment: Changed Objects.requireNonNull(getView()) to requireViews(), Objects.requireNonNull(getActivity())) to requireActivity() * ParentCategoriesFragment.kt: Changed arguments!! to requireArguments() * ParentCategoriesFragment.kt: Changed arguments!! to requireArguments() * SubCategoriesFragment.kt: Changed arguments!! to requireArguments() * SubCategoriesFragment.kt: Changed Objects.requireNonNull(getView()) to requireViews(), Objects.requireNonNull(getActivity()) to requireActivity() * UploadMediaDetailFragment.java: Changed arguments!! to requireArguments() * WikipediaInstructionsDialogFragment.kt: Changed arguments!! to requireArguments() * BookmarkItemsDao.java: Added @SuppressLint("Range"), as -1 is expected behavior not index doesn't exist for getColumnIndex() * BookmarkLocationsDao.java: Added @SuppressLint("Range"), as -1 is expected behavior not index doesn't exist for getColumnIndex() * AndroidManifest.xml: Removed redundant label android:label="@string/app_name" * bs\strings.xml: Added missing few quantity * hr\strings.xml: Added missing few quantity * hr\strings.xml: Added missing zero, two, few, many quantities for lines 23 - 63 * Revert "hr\strings.xml: Added missing zero, two, few, many quantities for lines 23 - 63" This reverts commit 47232466ab4fc3ac91958f888bc5033fefc699a5. * cy\strings.xml: Added missing zero, two, few, many quantities for lines 23 - 63 * sr\strings.xml: Added missing few quantities for lines 35 to 70 * ro\strings.xml: Added missing few quantity and removed not needed zero for * cs\strings.xml: Added missing few many missing quantities for lines 33 - 74 * lt\strings.xml: Added missing few, many missing quantities for lines 34 - 58 * lt\strings.xml: Replaced . . . with ... * ca\strings.xml: Added missing many quantities for lines 21 - 51, replaced . . . with ... * ser\strings.xml: Added missing few quantities, replaced . . . with ... * br\strings.xml: Added missing two, few, many quantities * pt\strings.xml: Added missing many quantity, changed . . . to ... and ignored typo as it is correct for European Portuguese * it\strings.xml: changed . . . to ... * pt\strings.xml: fixed many quantity * ca\strings.xml: fixed many quantity * sr\strings.xml: fixed many quantity * cy\strings.xml: corrected quantities for "share_license_summary * fr\strings.xml: changed . . . to ... and add many quantities using the other quantity * fr\strings.xml: changed . . . to ... and add many quantities using the other quantity. Fixed some typos, added ignore for correct spellings but has warning * getColumnIndex(): added @SuppressLint("Range") as -1 is expected result for column name doesn't exist * values-b+sr+Latn\strings.xml: changed . . . to ... * Revert "values-b+sr+Latn\strings.xml: changed . . . to ..." This reverts commit 95b909c29f7f96fe0a885a22daa7fd1a3568e058. * values-b+roa+tara\strings.xml: changed . . . to ... * Revert "values-b+roa+tara\strings.xml: changed . . . to ..." This reverts commit b5db1a3e68a9abfb95b4fc3f6219b507ead16d16. * values-b+roa+tara\strings.xml: changed . . . to ... * values-b+sr+Latn\strings.xml: changed . . . to ..., add few based on other quantity. Ignored one ImpliedQuantity warning as it is correct. * it\strings.xml: changed . . . to ..., add many based on other quantity. * pt-rBR\strings.xml: changed . . . to ..., add many based on other quantity. Fixed typos, ignored warning for "one" quantity as translation didn't use number * si\strings.xml: Ignored ImpliedQuantity warning as it uses 1 not %d. Removed not needed zero quantity * si\strings.xml: Ignored ImpliedQuantity warning as it uses 1 not %d. Removed not needed zero quantity. Fixed wrong %1$d. Changed . . . to ... * mk\strings.xml: changed . . . to ... and ignored ImpliedQuantity as it doesn't use 1 * sl\strings.xml: changed . . . to ... and ignored ImpliedQuantity as it doesn't use %1$d * ru\strings.xml: changed . . . to ... and ignored ImpliedQuantity as it doesn't use %1$d * uk\strings.xml: changed . . . to ... and ignored ImpliedQuantity as it doesn't use %1$d * is\strings.xml: changed . . . to ... and ignored ImpliedQuantity as it doesn't use %1$d * strings.xml: changed . . . to ... * af\strings.xml: removed not needed zero quantity * de\strings.xml: fixed duplicate word typo * diq\strings.xml: changed - to dash (-) * hi\strings.xml: removed not needed zero * in\strings.xml: removed not needed one quantity * iw\strings.xml: removed not needed many quantity * ja\strings.xml: removed not needed one quantity * ko\strings.xml: removed not needed one quantity * ky\strings.xml: removed not needed one quantity * mr\strings.xml: removed not needed zero quantity * my\strings.xml: removed not needed one quantity * su\strings.xml: removed not needed one quantity * th\strings.xml: removed not needed one and zero quantity * zh\strings.xml: removed not needed one quantity * activity_description_edit.xml: changed android:tint to app:tint, changed layout_alignParentRight to layout_alignParentEnd * bottom_sheet_details_explore.xml: changed android:tint to app:tint, added focusable, changed to margin layout * bottom_sheet_item_layout.xml: changed android:tint to app:tint, added focusable * bottom_sheet_details_explore.xml: changed android:tint to app:tint, added focusable, changed margin layout and removed not needed and invalid params * item_place.xml.xml: changed android:tint to app:tint, added focusable, changed margin layout and removed not needed and invalid params * layout_campagin.xml: changed android:tint to app:tint, added focusable, changed margin layout and removed not needed and invalid params * layout_contribution.xml.xml: changed android:tint to app:tint * nearby_card_view.xml: changed android:tint to app:tint, added focusable, changed margin layout and removed not needed and invalid params * nearby_row_button.xml: changed android:tint to app:tint, added focusable, changed margin layout and removed not needed and invalid params * toolbar_location_picker.xml: changed android:tint to app:tint --------- Co-authored-by: Nicolas Raoul --- app/src/main/AndroidManifest.xml | 3 +- .../java/fr/free/nrw/commons/BaseMarker.kt | 2 +- .../LocationPickerActivity.java | 4 +- .../main/java/fr/free/nrw/commons/Media.kt | 2 + .../bookmarks/items/BookmarkItemsDao.java | 2 + .../locations/BookmarkLocationsDao.java | 2 + .../pictures/BookmarkPicturesDao.java | 2 + .../nrw/commons/category/CategoryClient.kt | 2 +- .../nrw/commons/category/CategoryDao.java | 2 + .../WikipediaInstructionsDialogFragment.kt | 2 +- .../description/DescriptionEditActivity.kt | 6 +- .../nrw/commons/edit/TransformImageImpl.kt | 1 - .../nrw/commons/explore/ExploreFragment.java | 7 +- .../nrw/commons/explore/SearchActivity.java | 7 +- .../media/CategoriesMediaFragment.kt | 2 +- .../parent/ParentCategoriesFragment.kt | 2 +- .../categories/sub/SubCategoriesFragment.kt | 2 +- .../child/ChildDepictionsFragment.kt | 4 +- .../media/DepictedImagesFragment.kt | 2 +- .../parent/ParentDepictionsFragment.kt | 4 +- .../recentsearches/RecentSearchesDao.java | 2 + .../RecentSearchesFragment.java | 3 +- .../commons/media/MediaDetailFragment.java | 4 +- .../nrw/commons/media/ZoomableActivity.kt | 18 ++--- ...NearbyFilterSearchRecyclerViewAdapter.java | 5 +- .../nrw/commons/nearby/WikidataFeedback.kt | 2 +- .../nrw/commons/profile/ProfileActivity.java | 5 +- .../achievements/AchievementsFragment.java | 3 +- .../recentlanguages/RecentLanguagesDao.java | 2 + .../nrw/commons/review/ReviewActivity.java | 3 +- .../commons/upload/FailedUploadsFragment.kt | 6 +- .../fr/free/nrw/commons/upload/FileUtils.java | 3 +- .../commons/upload/PendingUploadsFragment.kt | 4 +- .../categories/UploadCategoriesFragment.java | 6 +- .../upload/depicts/DepictsFragment.java | 6 +- .../UploadMediaDetailFragment.java | 2 +- .../mediaDetails/UploadMediaPresenter.java | 4 +- .../res/layout/activity_description_edit.xml | 6 +- .../layout/bottom_sheet_details_explore.xml | 12 ++-- .../res/layout/bottom_sheet_item_layout.xml | 4 +- .../main/res/layout/fragment_achievements.xml | 67 +++++-------------- app/src/main/res/layout/item_place.xml | 13 +--- app/src/main/res/layout/layout_campagin.xml | 19 ++---- .../main/res/layout/layout_contribution.xml | 4 +- app/src/main/res/layout/nearby_card_view.xml | 16 ++--- app/src/main/res/layout/nearby_row_button.xml | 20 +++--- .../res/layout/toolbar_location_picker.xml | 4 +- app/src/main/res/values-ab/strings.xml | 4 +- app/src/main/res/values-af/strings.xml | 3 +- app/src/main/res/values-anp/strings.xml | 10 +-- app/src/main/res/values-ar/strings.xml | 8 +-- app/src/main/res/values-as/strings.xml | 4 +- app/src/main/res/values-ast/strings.xml | 4 +- app/src/main/res/values-az/strings.xml | 2 +- .../main/res/values-b+roa+tara/strings.xml | 6 +- app/src/main/res/values-b+sr+Latn/strings.xml | 19 ++++-- app/src/main/res/values-ba/strings.xml | 8 +-- app/src/main/res/values-ban/strings.xml | 6 +- app/src/main/res/values-bg/strings.xml | 2 +- app/src/main/res/values-blk/strings.xml | 4 +- app/src/main/res/values-bn/strings.xml | 2 +- app/src/main/res/values-br/strings.xml | 6 ++ app/src/main/res/values-bs/strings.xml | 5 +- app/src/main/res/values-ca/strings.xml | 8 ++- app/src/main/res/values-ce/strings.xml | 8 +-- app/src/main/res/values-cs/strings.xml | 15 ++++- app/src/main/res/values-csb/strings.xml | 6 +- app/src/main/res/values-cy/strings.xml | 19 ++++++ app/src/main/res/values-da/strings.xml | 10 +-- app/src/main/res/values-de/strings.xml | 4 +- app/src/main/res/values-diq/strings.xml | 8 +-- app/src/main/res/values-el/strings.xml | 8 +-- app/src/main/res/values-eo/strings.xml | 16 ++--- app/src/main/res/values-es/strings.xml | 38 +++++++---- app/src/main/res/values-eu/strings.xml | 2 +- app/src/main/res/values-fa/strings.xml | 10 +-- app/src/main/res/values-fi/strings.xml | 10 +-- app/src/main/res/values-fr/strings.xml | 36 ++++++---- app/src/main/res/values-gcr/strings.xml | 6 +- app/src/main/res/values-gl/strings.xml | 2 +- app/src/main/res/values-hi/strings.xml | 7 +- app/src/main/res/values-hr/strings.xml | 17 +++-- app/src/main/res/values-hu/strings.xml | 4 +- app/src/main/res/values-in/strings.xml | 18 +++-- app/src/main/res/values-io/strings.xml | 14 ++-- app/src/main/res/values-is/strings.xml | 8 +-- app/src/main/res/values-it/strings.xml | 15 ++++- app/src/main/res/values-iw/strings.xml | 26 +++---- app/src/main/res/values-ja/strings.xml | 5 +- app/src/main/res/values-kab/strings.xml | 8 +-- app/src/main/res/values-ko/strings.xml | 14 ++-- app/src/main/res/values-krc/strings.xml | 12 ++-- app/src/main/res/values-ku/strings.xml | 6 +- app/src/main/res/values-kum/strings.xml | 2 +- app/src/main/res/values-kus/strings.xml | 18 ++--- app/src/main/res/values-ky/strings.xml | 3 +- app/src/main/res/values-lb/strings.xml | 10 +-- app/src/main/res/values-li/strings.xml | 8 +-- app/src/main/res/values-lt/strings.xml | 21 ++++-- app/src/main/res/values-lv/strings.xml | 4 +- app/src/main/res/values-mk/strings.xml | 12 ++-- app/src/main/res/values-mni/strings.xml | 4 +- app/src/main/res/values-mnw/strings.xml | 4 +- app/src/main/res/values-mr/strings.xml | 3 +- app/src/main/res/values-my/strings.xml | 14 ++-- app/src/main/res/values-nl/strings.xml | 6 +- app/src/main/res/values-nqo/strings.xml | 20 +++--- app/src/main/res/values-oc/strings.xml | 2 +- app/src/main/res/values-pa/strings.xml | 13 ++-- app/src/main/res/values-pl/strings.xml | 2 +- app/src/main/res/values-pms/strings.xml | 6 +- app/src/main/res/values-ps/strings.xml | 2 +- app/src/main/res/values-pt-rBR/strings.xml | 28 +++++--- app/src/main/res/values-pt/strings.xml | 32 ++++++--- app/src/main/res/values-ro/strings.xml | 10 +-- app/src/main/res/values-ru/strings.xml | 14 ++-- app/src/main/res/values-sd/strings.xml | 4 +- app/src/main/res/values-se/strings.xml | 8 +-- app/src/main/res/values-sh/strings.xml | 4 +- app/src/main/res/values-si/strings.xml | 11 ++- app/src/main/res/values-sk/strings.xml | 14 ++-- app/src/main/res/values-sl/strings.xml | 30 ++++----- app/src/main/res/values-sr/strings.xml | 17 +++-- app/src/main/res/values-su/strings.xml | 13 +--- app/src/main/res/values-sv/strings.xml | 4 +- app/src/main/res/values-ta/strings.xml | 4 +- app/src/main/res/values-tcy/strings.xml | 4 +- app/src/main/res/values-te/strings.xml | 12 ++-- app/src/main/res/values-th/strings.xml | 7 +- app/src/main/res/values-tr/strings.xml | 6 +- app/src/main/res/values-uk/strings.xml | 6 +- app/src/main/res/values-uz/strings.xml | 8 +-- app/src/main/res/values-vec/strings.xml | 10 +-- app/src/main/res/values-xal/strings.xml | 8 +-- app/src/main/res/values-xmf/strings.xml | 6 +- app/src/main/res/values-zgh/strings.xml | 2 +- app/src/main/res/values-zh/strings.xml | 17 ++--- 137 files changed, 617 insertions(+), 572 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 89ed630d8..29f280c9e 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -99,7 +99,6 @@ android:exported="true" android:hardwareAccelerated="false" android:icon="@mipmap/ic_launcher" - android:label="@string/app_name" android:windowSoftInputMode="adjustResize"> @@ -122,7 +121,7 @@ android:name=".contributions.MainActivity" android:configChanges="screenSize|keyboard|orientation" android:icon="@mipmap/ic_launcher" - android:label="@string/app_name" /> + /> diff --git a/app/src/main/java/fr/free/nrw/commons/BaseMarker.kt b/app/src/main/java/fr/free/nrw/commons/BaseMarker.kt index 1daadb5a1..28b01d603 100644 --- a/app/src/main/java/fr/free/nrw/commons/BaseMarker.kt +++ b/app/src/main/java/fr/free/nrw/commons/BaseMarker.kt @@ -46,7 +46,7 @@ class BaseMarker { val drawable: Drawable = context.resources.getDrawable(drawableResId) icon = if (drawable is BitmapDrawable) { - (drawable as BitmapDrawable).bitmap + drawable.bitmap } else { val bitmap = Bitmap.createBitmap( diff --git a/app/src/main/java/fr/free/nrw/commons/LocationPicker/LocationPickerActivity.java b/app/src/main/java/fr/free/nrw/commons/LocationPicker/LocationPickerActivity.java index 8c54fd292..2f05705ba 100644 --- a/app/src/main/java/fr/free/nrw/commons/LocationPicker/LocationPickerActivity.java +++ b/app/src/main/java/fr/free/nrw/commons/LocationPicker/LocationPickerActivity.java @@ -53,6 +53,7 @@ import fr.free.nrw.commons.utils.SystemThemeUtils; import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.schedulers.Schedulers; import java.util.List; +import java.util.Locale; import javax.inject.Inject; import javax.inject.Named; import org.osmdroid.tileprovider.tilesource.TileSourceFactory; @@ -301,7 +302,8 @@ public class LocationPickerActivity extends BaseActivity implements modifyLocationButton = findViewById(R.id.modify_location); removeLocationButton = findViewById(R.id.remove_location); showInMapButton = findViewById(R.id.show_in_map); - showInMapButton.setText(getResources().getString(R.string.show_in_map_app).toUpperCase()); + showInMapButton.setText(getResources().getString(R.string.show_in_map_app).toUpperCase( + Locale.ROOT)); shadow = findViewById(R.id.location_picker_image_view_shadow); } diff --git a/app/src/main/java/fr/free/nrw/commons/Media.kt b/app/src/main/java/fr/free/nrw/commons/Media.kt index 93efac7b2..025302cfd 100644 --- a/app/src/main/java/fr/free/nrw/commons/Media.kt +++ b/app/src/main/java/fr/free/nrw/commons/Media.kt @@ -3,6 +3,7 @@ package fr.free.nrw.commons import android.os.Parcelable import fr.free.nrw.commons.location.LatLng import fr.free.nrw.commons.wikidata.model.page.PageTitle +import kotlinx.parcelize.IgnoredOnParcel import kotlinx.parcelize.Parcelize import java.util.Date import java.util.Locale @@ -124,6 +125,7 @@ class Media constructor( * Gets the categories the file falls under. * @return file categories as an ArrayList of Strings */ + @IgnoredOnParcel var addedCategories: List? = null // TODO added categories should be removed. It is added for a short fix. On category update, // categories should be re-fetched instead diff --git a/app/src/main/java/fr/free/nrw/commons/bookmarks/items/BookmarkItemsDao.java b/app/src/main/java/fr/free/nrw/commons/bookmarks/items/BookmarkItemsDao.java index 70c370836..6788a8290 100644 --- a/app/src/main/java/fr/free/nrw/commons/bookmarks/items/BookmarkItemsDao.java +++ b/app/src/main/java/fr/free/nrw/commons/bookmarks/items/BookmarkItemsDao.java @@ -1,5 +1,6 @@ package fr.free.nrw.commons.bookmarks.items; +import android.annotation.SuppressLint; import android.content.ContentProviderClient; import android.content.ContentValues; import android.database.Cursor; @@ -134,6 +135,7 @@ public class BookmarkItemsDao { * @param cursor : Object for storing database data * @return DepictedItem */ + @SuppressLint("Range") DepictedItem fromCursor(final Cursor cursor) { final String fileName = cursor.getString(cursor.getColumnIndex(Table.COLUMN_NAME)); final String description diff --git a/app/src/main/java/fr/free/nrw/commons/bookmarks/locations/BookmarkLocationsDao.java b/app/src/main/java/fr/free/nrw/commons/bookmarks/locations/BookmarkLocationsDao.java index 850b953e9..fe4f603f4 100644 --- a/app/src/main/java/fr/free/nrw/commons/bookmarks/locations/BookmarkLocationsDao.java +++ b/app/src/main/java/fr/free/nrw/commons/bookmarks/locations/BookmarkLocationsDao.java @@ -1,5 +1,6 @@ package fr.free.nrw.commons.bookmarks.locations; +import android.annotation.SuppressLint; import android.content.ContentProviderClient; import android.content.ContentValues; import android.database.Cursor; @@ -146,6 +147,7 @@ public class BookmarkLocationsDao { return false; } + @SuppressLint("Range") @NonNull Place fromCursor(final Cursor cursor) { final LatLng location = new LatLng(cursor.getDouble(cursor.getColumnIndex(Table.COLUMN_LAT)), diff --git a/app/src/main/java/fr/free/nrw/commons/bookmarks/pictures/BookmarkPicturesDao.java b/app/src/main/java/fr/free/nrw/commons/bookmarks/pictures/BookmarkPicturesDao.java index a56a39ba2..c214ae996 100644 --- a/app/src/main/java/fr/free/nrw/commons/bookmarks/pictures/BookmarkPicturesDao.java +++ b/app/src/main/java/fr/free/nrw/commons/bookmarks/pictures/BookmarkPicturesDao.java @@ -1,5 +1,6 @@ package fr.free.nrw.commons.bookmarks.pictures; +import android.annotation.SuppressLint; import android.content.ContentProviderClient; import android.content.ContentValues; import android.database.Cursor; @@ -150,6 +151,7 @@ public class BookmarkPicturesDao { return false; } + @SuppressLint("Range") @NonNull Bookmark fromCursor(Cursor cursor) { String fileName = cursor.getString(cursor.getColumnIndex(Table.COLUMN_MEDIA_NAME)); diff --git a/app/src/main/java/fr/free/nrw/commons/category/CategoryClient.kt b/app/src/main/java/fr/free/nrw/commons/category/CategoryClient.kt index 64463d826..992c4ed1c 100644 --- a/app/src/main/java/fr/free/nrw/commons/category/CategoryClient.kt +++ b/app/src/main/java/fr/free/nrw/commons/category/CategoryClient.kt @@ -124,7 +124,7 @@ class CategoryClient }.map { it .filter { page -> - page.categoryInfo() == null || !page.categoryInfo().isHidden + !page.categoryInfo().isHidden }.map { CategoryItem( it.title().replace(CATEGORY_PREFIX, ""), diff --git a/app/src/main/java/fr/free/nrw/commons/category/CategoryDao.java b/app/src/main/java/fr/free/nrw/commons/category/CategoryDao.java index b638fc508..3cd60ac81 100644 --- a/app/src/main/java/fr/free/nrw/commons/category/CategoryDao.java +++ b/app/src/main/java/fr/free/nrw/commons/category/CategoryDao.java @@ -1,5 +1,6 @@ package fr.free.nrw.commons.category; +import android.annotation.SuppressLint; import android.content.ContentProviderClient; import android.content.ContentValues; import android.database.Cursor; @@ -111,6 +112,7 @@ public class CategoryDao { } @NonNull + @SuppressLint("Range") Category fromCursor(Cursor cursor) { // Hardcoding column positions! return new Category( diff --git a/app/src/main/java/fr/free/nrw/commons/contributions/WikipediaInstructionsDialogFragment.kt b/app/src/main/java/fr/free/nrw/commons/contributions/WikipediaInstructionsDialogFragment.kt index 77e52e1db..86cda2cf3 100644 --- a/app/src/main/java/fr/free/nrw/commons/contributions/WikipediaInstructionsDialogFragment.kt +++ b/app/src/main/java/fr/free/nrw/commons/contributions/WikipediaInstructionsDialogFragment.kt @@ -22,7 +22,7 @@ class WikipediaInstructionsDialogFragment : DialogFragment() { ) = DialogAddToWikipediaInstructionsBinding .inflate(inflater, container, false) .apply { - val contribution: Contribution? = arguments!!.getParcelable(ARG_CONTRIBUTION) + val contribution: Contribution? = requireArguments().getParcelable(ARG_CONTRIBUTION) tvWikicode.setText(contribution?.media?.wikiCode) instructionsCancel.setOnClickListener { dismiss() } instructionsConfirm.setOnClickListener { diff --git a/app/src/main/java/fr/free/nrw/commons/description/DescriptionEditActivity.kt b/app/src/main/java/fr/free/nrw/commons/description/DescriptionEditActivity.kt index 7ed598637..fa4349dbf 100644 --- a/app/src/main/java/fr/free/nrw/commons/description/DescriptionEditActivity.kt +++ b/app/src/main/java/fr/free/nrw/commons/description/DescriptionEditActivity.kt @@ -237,7 +237,7 @@ class DescriptionEditActivity : ) { try { descriptionEditHelper - ?.addDescription( + .addDescription( applicationContext, media, updatedWikiText, @@ -250,7 +250,7 @@ class DescriptionEditActivity : ) } } catch (e: InvalidLoginTokenException) { - val username: String? = sessionManager?.userName + val username: String? = sessionManager.userName val logoutListener = CommonsApplication.BaseLogoutListener( this, @@ -268,7 +268,7 @@ class DescriptionEditActivity : for (mediaDetail in uploadMediaDetails) { try { compositeDisposable.add( - descriptionEditHelper!! + descriptionEditHelper .addCaption( applicationContext, media, diff --git a/app/src/main/java/fr/free/nrw/commons/edit/TransformImageImpl.kt b/app/src/main/java/fr/free/nrw/commons/edit/TransformImageImpl.kt index b59619691..c3db1a5a0 100644 --- a/app/src/main/java/fr/free/nrw/commons/edit/TransformImageImpl.kt +++ b/app/src/main/java/fr/free/nrw/commons/edit/TransformImageImpl.kt @@ -65,7 +65,6 @@ class TransformImageImpl : TransformImage { } catch (e: LLJTranException) { Timber.tag("Error").d(e) return null - false } if (rotated) { diff --git a/app/src/main/java/fr/free/nrw/commons/explore/ExploreFragment.java b/app/src/main/java/fr/free/nrw/commons/explore/ExploreFragment.java index c66cd5163..26c8dd82b 100644 --- a/app/src/main/java/fr/free/nrw/commons/explore/ExploreFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/explore/ExploreFragment.java @@ -22,6 +22,7 @@ import fr.free.nrw.commons.theme.BaseActivity; import fr.free.nrw.commons.utils.ActivityUtils; import java.util.ArrayList; import java.util.List; +import java.util.Locale; import javax.inject.Inject; import javax.inject.Named; @@ -112,13 +113,13 @@ public class ExploreFragment extends CommonsDaggerSupportFragment { mobileRootFragment = new ExploreListRootFragment(mobileArguments); mapRootFragment = new ExploreMapRootFragment(mapArguments); fragmentList.add(featuredRootFragment); - titleList.add(getString(R.string.explore_tab_title_featured).toUpperCase()); + titleList.add(getString(R.string.explore_tab_title_featured).toUpperCase(Locale.ROOT)); fragmentList.add(mobileRootFragment); - titleList.add(getString(R.string.explore_tab_title_mobile).toUpperCase()); + titleList.add(getString(R.string.explore_tab_title_mobile).toUpperCase(Locale.ROOT)); fragmentList.add(mapRootFragment); - titleList.add(getString(R.string.explore_tab_title_map).toUpperCase()); + titleList.add(getString(R.string.explore_tab_title_map).toUpperCase(Locale.ROOT)); ((MainActivity)getActivity()).showTabs(); ((BaseActivity) getActivity()).getSupportActionBar().setDisplayHomeAsUpEnabled(false); diff --git a/app/src/main/java/fr/free/nrw/commons/explore/SearchActivity.java b/app/src/main/java/fr/free/nrw/commons/explore/SearchActivity.java index 7717f2deb..abb27184f 100644 --- a/app/src/main/java/fr/free/nrw/commons/explore/SearchActivity.java +++ b/app/src/main/java/fr/free/nrw/commons/explore/SearchActivity.java @@ -28,6 +28,7 @@ import io.reactivex.android.schedulers.AndroidSchedulers; import java.util.ArrayList; import java.util.Date; import java.util.List; +import java.util.Locale; import java.util.concurrent.TimeUnit; import javax.inject.Inject; import timber.log.Timber; @@ -95,11 +96,11 @@ public class SearchActivity extends BaseActivity searchDepictionsFragment = new SearchDepictionsFragment(); searchCategoryFragment= new SearchCategoryFragment(); fragmentList.add(searchMediaFragment); - titleList.add(getResources().getString(R.string.search_tab_title_media).toUpperCase()); + titleList.add(getResources().getString(R.string.search_tab_title_media).toUpperCase(Locale.ROOT)); fragmentList.add(searchCategoryFragment); - titleList.add(getResources().getString(R.string.search_tab_title_categories).toUpperCase()); + titleList.add(getResources().getString(R.string.search_tab_title_categories).toUpperCase(Locale.ROOT)); fragmentList.add(searchDepictionsFragment); - titleList.add(getResources().getString(R.string.search_tab_title_depictions).toUpperCase()); + titleList.add(getResources().getString(R.string.search_tab_title_depictions).toUpperCase(Locale.ROOT)); viewPagerAdapter.setTabData(fragmentList, titleList); viewPagerAdapter.notifyDataSetChanged(); diff --git a/app/src/main/java/fr/free/nrw/commons/explore/categories/media/CategoriesMediaFragment.kt b/app/src/main/java/fr/free/nrw/commons/explore/categories/media/CategoriesMediaFragment.kt index 6de1248b4..765abd698 100644 --- a/app/src/main/java/fr/free/nrw/commons/explore/categories/media/CategoriesMediaFragment.kt +++ b/app/src/main/java/fr/free/nrw/commons/explore/categories/media/CategoriesMediaFragment.kt @@ -18,6 +18,6 @@ class CategoriesMediaFragment : PageableMediaFragment() { savedInstanceState: Bundle?, ) { super.onViewCreated(view, savedInstanceState) - onQueryUpdated("$CATEGORY_PREFIX${arguments!!.getString("categoryName")!!}") + onQueryUpdated("$CATEGORY_PREFIX${requireArguments().getString("categoryName")!!}") } } diff --git a/app/src/main/java/fr/free/nrw/commons/explore/categories/parent/ParentCategoriesFragment.kt b/app/src/main/java/fr/free/nrw/commons/explore/categories/parent/ParentCategoriesFragment.kt index 6ceccf607..c43e1c6bd 100644 --- a/app/src/main/java/fr/free/nrw/commons/explore/categories/parent/ParentCategoriesFragment.kt +++ b/app/src/main/java/fr/free/nrw/commons/explore/categories/parent/ParentCategoriesFragment.kt @@ -21,6 +21,6 @@ class ParentCategoriesFragment : PageableCategoryFragment() { savedInstanceState: Bundle?, ) { super.onViewCreated(view, savedInstanceState) - onQueryUpdated("$CATEGORY_PREFIX${arguments!!.getString("categoryName")!!}") + onQueryUpdated("$CATEGORY_PREFIX${requireArguments().getString("categoryName")!!}") } } diff --git a/app/src/main/java/fr/free/nrw/commons/explore/categories/sub/SubCategoriesFragment.kt b/app/src/main/java/fr/free/nrw/commons/explore/categories/sub/SubCategoriesFragment.kt index 19fe52beb..8fbc83039 100644 --- a/app/src/main/java/fr/free/nrw/commons/explore/categories/sub/SubCategoriesFragment.kt +++ b/app/src/main/java/fr/free/nrw/commons/explore/categories/sub/SubCategoriesFragment.kt @@ -20,6 +20,6 @@ class SubCategoriesFragment : PageableCategoryFragment() { savedInstanceState: Bundle?, ) { super.onViewCreated(view, savedInstanceState) - onQueryUpdated("$CATEGORY_PREFIX${arguments!!.getString("categoryName")!!}") + onQueryUpdated("$CATEGORY_PREFIX${requireArguments().getString("categoryName")!!}") } } diff --git a/app/src/main/java/fr/free/nrw/commons/explore/depictions/child/ChildDepictionsFragment.kt b/app/src/main/java/fr/free/nrw/commons/explore/depictions/child/ChildDepictionsFragment.kt index 527536299..4f13b1be8 100644 --- a/app/src/main/java/fr/free/nrw/commons/explore/depictions/child/ChildDepictionsFragment.kt +++ b/app/src/main/java/fr/free/nrw/commons/explore/depictions/child/ChildDepictionsFragment.kt @@ -13,13 +13,13 @@ class ChildDepictionsFragment : PageableDepictionsFragment() { override val injectedPresenter get() = presenter - override fun getEmptyText(query: String) = getString(R.string.no_child_classes, arguments!!.getString("wikidataItemName")!!) + override fun getEmptyText(query: String) = getString(R.string.no_child_classes, requireArguments().getString("wikidataItemName")!!) override fun onViewCreated( view: View, savedInstanceState: Bundle?, ) { super.onViewCreated(view, savedInstanceState) - onQueryUpdated(arguments!!.getString("entityId")!!) + onQueryUpdated(requireArguments().getString("entityId")!!) } } diff --git a/app/src/main/java/fr/free/nrw/commons/explore/depictions/media/DepictedImagesFragment.kt b/app/src/main/java/fr/free/nrw/commons/explore/depictions/media/DepictedImagesFragment.kt index cc1b664b2..4cdb0e461 100644 --- a/app/src/main/java/fr/free/nrw/commons/explore/depictions/media/DepictedImagesFragment.kt +++ b/app/src/main/java/fr/free/nrw/commons/explore/depictions/media/DepictedImagesFragment.kt @@ -17,6 +17,6 @@ class DepictedImagesFragment : PageableMediaFragment() { savedInstanceState: Bundle?, ) { super.onViewCreated(view, savedInstanceState) - onQueryUpdated(arguments!!.getString("entityId")!!) + onQueryUpdated(requireArguments().getString("entityId")!!) } } diff --git a/app/src/main/java/fr/free/nrw/commons/explore/depictions/parent/ParentDepictionsFragment.kt b/app/src/main/java/fr/free/nrw/commons/explore/depictions/parent/ParentDepictionsFragment.kt index 52a5aff5d..cf739a07d 100644 --- a/app/src/main/java/fr/free/nrw/commons/explore/depictions/parent/ParentDepictionsFragment.kt +++ b/app/src/main/java/fr/free/nrw/commons/explore/depictions/parent/ParentDepictionsFragment.kt @@ -13,13 +13,13 @@ class ParentDepictionsFragment : PageableDepictionsFragment() { override val injectedPresenter get() = presenter - override fun getEmptyText(query: String) = getString(R.string.no_parent_classes, arguments!!.getString("wikidataItemName")!!) + override fun getEmptyText(query: String) = getString(R.string.no_parent_classes, requireArguments().getString("wikidataItemName")!!) override fun onViewCreated( view: View, savedInstanceState: Bundle?, ) { super.onViewCreated(view, savedInstanceState) - onQueryUpdated(arguments!!.getString("entityId")!!) + onQueryUpdated(requireArguments().getString("entityId")!!) } } diff --git a/app/src/main/java/fr/free/nrw/commons/explore/recentsearches/RecentSearchesDao.java b/app/src/main/java/fr/free/nrw/commons/explore/recentsearches/RecentSearchesDao.java index 9f12639dd..cee8a25ae 100644 --- a/app/src/main/java/fr/free/nrw/commons/explore/recentsearches/RecentSearchesDao.java +++ b/app/src/main/java/fr/free/nrw/commons/explore/recentsearches/RecentSearchesDao.java @@ -1,5 +1,6 @@ package fr.free.nrw.commons.explore.recentsearches; +import android.annotation.SuppressLint; import android.content.ContentProviderClient; import android.content.ContentValues; import android.database.Cursor; @@ -178,6 +179,7 @@ public class RecentSearchesDao { * @return RecentSearch object */ @NonNull + @SuppressLint("Range") RecentSearch fromCursor(Cursor cursor) { // Hardcoding column positions! return new RecentSearch( diff --git a/app/src/main/java/fr/free/nrw/commons/explore/recentsearches/RecentSearchesFragment.java b/app/src/main/java/fr/free/nrw/commons/explore/recentsearches/RecentSearchesFragment.java index cd98651f0..0db1e5539 100644 --- a/app/src/main/java/fr/free/nrw/commons/explore/recentsearches/RecentSearchesFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/explore/recentsearches/RecentSearchesFragment.java @@ -15,6 +15,7 @@ import fr.free.nrw.commons.databinding.FragmentSearchHistoryBinding; import fr.free.nrw.commons.di.CommonsDaggerSupportFragment; import fr.free.nrw.commons.explore.SearchActivity; import java.util.List; +import java.util.Locale; import javax.inject.Inject; @@ -90,7 +91,7 @@ public class RecentSearchesFragment extends CommonsDaggerSupportFragment { private void showDeleteAlertDialog(@NonNull final Context context, final int position) { new AlertDialog.Builder(context) .setMessage(R.string.delete_search_dialog) - .setPositiveButton(getString(R.string.delete).toUpperCase(), + .setPositiveButton(getString(R.string.delete).toUpperCase(Locale.ROOT), ((dialog, which) -> setDeletePositiveButton(context, dialog, position))) .setNegativeButton(android.R.string.cancel, null) .create() diff --git a/app/src/main/java/fr/free/nrw/commons/media/MediaDetailFragment.java b/app/src/main/java/fr/free/nrw/commons/media/MediaDetailFragment.java index dd0829a1b..142d8379c 100644 --- a/app/src/main/java/fr/free/nrw/commons/media/MediaDetailFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/media/MediaDetailFragment.java @@ -600,8 +600,8 @@ public class MediaDetailFragment extends CommonsDaggerSupportFragment implements // Check if the presented category is about need of category if (categoriesPresent) { for (String category : media.getCategories()) { - if (category.toLowerCase().contains(CATEGORY_NEEDING_CATEGORIES) || - category.toLowerCase().contains(CATEGORY_UNCATEGORISED)) { + if (category.toLowerCase(Locale.ROOT).contains(CATEGORY_NEEDING_CATEGORIES) || + category.toLowerCase(Locale.ROOT).contains(CATEGORY_UNCATEGORISED)) { categoriesPresent = false; } break; diff --git a/app/src/main/java/fr/free/nrw/commons/media/ZoomableActivity.kt b/app/src/main/java/fr/free/nrw/commons/media/ZoomableActivity.kt index d08e3048c..14b5788c2 100644 --- a/app/src/main/java/fr/free/nrw/commons/media/ZoomableActivity.kt +++ b/app/src/main/java/fr/free/nrw/commons/media/ZoomableActivity.kt @@ -219,7 +219,7 @@ class ZoomableActivity : BaseActivity() { onSwipe() } } - binding.zoomProgressBar?.let { + binding.zoomProgressBar.let { it.visibility = if (result.status is CallbackStatus.FETCHING) View.VISIBLE else View.GONE } } @@ -234,7 +234,7 @@ class ZoomableActivity : BaseActivity() { sharedPreferences.getBoolean(ImageHelper.SHOW_ALREADY_ACTIONED_IMAGES_PREFERENCE_KEY, true) if (!images.isNullOrEmpty()) { - binding.zoomable!!.setOnTouchListener( + binding.zoomable.setOnTouchListener( object : OnSwipeTouchListener(this) { // Swipe left to view next image in the folder. (if available) override fun onSwipeLeft() { @@ -271,7 +271,7 @@ class ZoomableActivity : BaseActivity() { * Handles down swipe action */ private fun onDownSwiped() { - if (binding.zoomable?.zoomableController?.isIdentity == false) { + if (binding.zoomable.zoomableController?.isIdentity == false) { return } @@ -341,7 +341,7 @@ class ZoomableActivity : BaseActivity() { * Handles up swipe action */ private fun onUpSwiped() { - if (binding.zoomable?.zoomableController?.isIdentity == false) { + if (binding.zoomable.zoomableController?.isIdentity == false) { return } @@ -414,7 +414,7 @@ class ZoomableActivity : BaseActivity() { * Handles right swipe action */ private fun onRightSwiped(showAlreadyActionedImages: Boolean) { - if (binding.zoomable?.zoomableController?.isIdentity == false) { + if (binding.zoomable.zoomableController?.isIdentity == false) { return } @@ -451,7 +451,7 @@ class ZoomableActivity : BaseActivity() { * Handles left swipe action */ private fun onLeftSwiped(showAlreadyActionedImages: Boolean) { - if (binding.zoomable?.zoomableController?.isIdentity == false) { + if (binding.zoomable.zoomableController?.isIdentity == false) { return } @@ -646,7 +646,7 @@ class ZoomableActivity : BaseActivity() { .setProgressBarImage(ProgressBarDrawable()) .setProgressBarImageScaleType(ScalingUtils.ScaleType.FIT_CENTER) .build() - with(binding.zoomable!!) { + with(binding.zoomable) { setHierarchy(hierarchy) setAllowTouchInterceptionWhileZoomed(true) setIsLongpressEnabled(false) @@ -658,10 +658,10 @@ class ZoomableActivity : BaseActivity() { .setUri(imageUri) .setControllerListener(loadingListener) .build() - binding.zoomable!!.controller = controller + binding.zoomable.controller = controller if (photoBackgroundColor != null) { - binding.zoomable!!.setBackgroundColor(photoBackgroundColor!!) + binding.zoomable.setBackgroundColor(photoBackgroundColor!!) } if (!images.isNullOrEmpty()) { diff --git a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyFilterSearchRecyclerViewAdapter.java b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyFilterSearchRecyclerViewAdapter.java index 5d480f4f7..b5f760c9f 100644 --- a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyFilterSearchRecyclerViewAdapter.java +++ b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyFilterSearchRecyclerViewAdapter.java @@ -17,6 +17,7 @@ import androidx.recyclerview.widget.RecyclerView; import java.util.ArrayList; import fr.free.nrw.commons.R; +import java.util.Locale; public class NearbyFilterSearchRecyclerViewAdapter extends RecyclerView.Adapter @@ -121,11 +122,11 @@ public class NearbyFilterSearchRecyclerViewAdapter results.count = labels.size(); results.values = labels; } else { - constraint = constraint.toString().toLowerCase(); + constraint = constraint.toString().toLowerCase(Locale.ROOT); for (Label label : labels) { String data = label.toString(); - if (data.toLowerCase().startsWith(constraint.toString())) { + if (data.toLowerCase(Locale.ROOT).startsWith(constraint.toString())) { filteredArrayList.add(Label.fromText(label.getText())); } } diff --git a/app/src/main/java/fr/free/nrw/commons/nearby/WikidataFeedback.kt b/app/src/main/java/fr/free/nrw/commons/nearby/WikidataFeedback.kt index d238296d1..299ac4b6e 100644 --- a/app/src/main/java/fr/free/nrw/commons/nearby/WikidataFeedback.kt +++ b/app/src/main/java/fr/free/nrw/commons/nearby/WikidataFeedback.kt @@ -87,7 +87,7 @@ class WikidataFeedback : BaseActivity() { lat, lng, ) - } as Callable>, + }, ).subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe({ aBoolean: Boolean? -> diff --git a/app/src/main/java/fr/free/nrw/commons/profile/ProfileActivity.java b/app/src/main/java/fr/free/nrw/commons/profile/ProfileActivity.java index 9acf5b595..c6d09fdc6 100644 --- a/app/src/main/java/fr/free/nrw/commons/profile/ProfileActivity.java +++ b/app/src/main/java/fr/free/nrw/commons/profile/ProfileActivity.java @@ -32,6 +32,7 @@ import java.io.FileOutputStream; import java.io.IOException; import java.util.ArrayList; import java.util.List; +import java.util.Locale; import javax.inject.Inject; /** @@ -139,14 +140,14 @@ public class ProfileActivity extends BaseActivity { leaderboardFragment.setArguments(leaderBoardBundle); fragmentList.add(leaderboardFragment); - titleList.add(getResources().getString(R.string.leaderboard_tab_title).toUpperCase()); + titleList.add(getResources().getString(R.string.leaderboard_tab_title).toUpperCase(Locale.ROOT)); contributionsFragment = new ContributionsFragment(); Bundle contributionsListBundle = new Bundle(); contributionsListBundle.putString(KEY_USERNAME, userName); contributionsFragment.setArguments(contributionsListBundle); fragmentList.add(contributionsFragment); - titleList.add(getString(R.string.contributions_fragment).toUpperCase()); + titleList.add(getString(R.string.contributions_fragment).toUpperCase(Locale.ROOT)); viewPagerAdapter.setTabData(fragmentList, titleList); viewPagerAdapter.notifyDataSetChanged(); diff --git a/app/src/main/java/fr/free/nrw/commons/profile/achievements/AchievementsFragment.java b/app/src/main/java/fr/free/nrw/commons/profile/achievements/AchievementsFragment.java index 46ea631fb..f44b7eb6d 100644 --- a/app/src/main/java/fr/free/nrw/commons/profile/achievements/AchievementsFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/profile/achievements/AchievementsFragment.java @@ -27,6 +27,7 @@ import fr.free.nrw.commons.profile.ProfileActivity; import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.disposables.CompositeDisposable; import io.reactivex.schedulers.Schedulers; +import java.util.Locale; import java.util.Objects; import javax.inject.Inject; import org.apache.commons.lang3.StringUtils; @@ -361,7 +362,7 @@ public class AchievementsFragment extends CommonsDaggerSupportFragment { + levelInfo.getMaxUniqueImages()); binding.imageFeatured.setText(String.valueOf(achievements.getFeaturedImages())); binding.qualityImages.setText(String.valueOf(achievements.getQualityImages())); - String levelUpInfoString = getString(R.string.level).toUpperCase(); + String levelUpInfoString = getString(R.string.level).toUpperCase(Locale.ROOT); levelUpInfoString += " " + levelInfo.getLevelNumber(); binding.achievementLevel.setText(levelUpInfoString); binding.achievementBadgeImage.setImageDrawable(VectorDrawableCompat.create(getResources(), R.drawable.badge, diff --git a/app/src/main/java/fr/free/nrw/commons/recentlanguages/RecentLanguagesDao.java b/app/src/main/java/fr/free/nrw/commons/recentlanguages/RecentLanguagesDao.java index c4a4bf518..cbb8c8a1c 100644 --- a/app/src/main/java/fr/free/nrw/commons/recentlanguages/RecentLanguagesDao.java +++ b/app/src/main/java/fr/free/nrw/commons/recentlanguages/RecentLanguagesDao.java @@ -1,5 +1,6 @@ package fr.free.nrw.commons.recentlanguages; +import android.annotation.SuppressLint; import android.content.ContentProviderClient; import android.content.ContentValues; import android.database.Cursor; @@ -117,6 +118,7 @@ public class RecentLanguagesDao { * @return Language object */ @NonNull + @SuppressLint("Range") Language fromCursor(final Cursor cursor) { // Hardcoding column positions! final String languageName = cursor.getString(cursor.getColumnIndex(Table.COLUMN_NAME)); diff --git a/app/src/main/java/fr/free/nrw/commons/review/ReviewActivity.java b/app/src/main/java/fr/free/nrw/commons/review/ReviewActivity.java index 5eb758ada..40d743a19 100644 --- a/app/src/main/java/fr/free/nrw/commons/review/ReviewActivity.java +++ b/app/src/main/java/fr/free/nrw/commons/review/ReviewActivity.java @@ -25,6 +25,7 @@ import fr.free.nrw.commons.utils.ViewUtil; import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.disposables.CompositeDisposable; import io.reactivex.schedulers.Schedulers; +import java.util.Locale; import javax.inject.Inject; public class ReviewActivity extends BaseActivity { @@ -241,7 +242,7 @@ public class ReviewActivity extends BaseActivity { public void showSkipImageInfo(){ DialogUtil.showAlertDialog(ReviewActivity.this, - getString(R.string.skip_image).toUpperCase(), + getString(R.string.skip_image).toUpperCase(Locale.ROOT), getString(R.string.skip_image_explanation), getString(android.R.string.ok), "", diff --git a/app/src/main/java/fr/free/nrw/commons/upload/FailedUploadsFragment.kt b/app/src/main/java/fr/free/nrw/commons/upload/FailedUploadsFragment.kt index 876fb3cd3..c0e5097c0 100644 --- a/app/src/main/java/fr/free/nrw/commons/upload/FailedUploadsFragment.kt +++ b/app/src/main/java/fr/free/nrw/commons/upload/FailedUploadsFragment.kt @@ -63,7 +63,7 @@ class FailedUploadsFragment : } if (StringUtils.isEmpty(userName)) { - userName = sessionManager!!.getUserName() + userName = sessionManager.getUserName() } } @@ -96,8 +96,8 @@ class FailedUploadsFragment : fun initRecyclerView() { binding.failedUploadsRecyclerView.setLayoutManager(LinearLayoutManager(this.context)) binding.failedUploadsRecyclerView.adapter = adapter - pendingUploadsPresenter!!.getFailedContributions() - pendingUploadsPresenter!!.failedContributionList.observe( + pendingUploadsPresenter.getFailedContributions() + pendingUploadsPresenter.failedContributionList.observe( viewLifecycleOwner, ) { list: PagedList -> adapter.submitList(list) diff --git a/app/src/main/java/fr/free/nrw/commons/upload/FileUtils.java b/app/src/main/java/fr/free/nrw/commons/upload/FileUtils.java index b45e4b57d..8a8fa35b3 100644 --- a/app/src/main/java/fr/free/nrw/commons/upload/FileUtils.java +++ b/app/src/main/java/fr/free/nrw/commons/upload/FileUtils.java @@ -19,6 +19,7 @@ import java.math.BigInteger; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; +import java.util.Locale; import timber.log.Timber; public class FileUtils { @@ -139,7 +140,7 @@ public class FileUtils { String fileExtension = MimeTypeMap.getFileExtensionFromUrl(uri .toString()); mimeType = MimeTypeMap.getSingleton().getMimeTypeFromExtension( - fileExtension.toLowerCase()); + fileExtension.toLowerCase(Locale.getDefault())); } return mimeType; } diff --git a/app/src/main/java/fr/free/nrw/commons/upload/PendingUploadsFragment.kt b/app/src/main/java/fr/free/nrw/commons/upload/PendingUploadsFragment.kt index 4d79bc88e..4442a64ea 100644 --- a/app/src/main/java/fr/free/nrw/commons/upload/PendingUploadsFragment.kt +++ b/app/src/main/java/fr/free/nrw/commons/upload/PendingUploadsFragment.kt @@ -74,8 +74,8 @@ class PendingUploadsFragment : fun initRecyclerView() { binding.pendingUploadsRecyclerView.setLayoutManager(LinearLayoutManager(this.context)) binding.pendingUploadsRecyclerView.adapter = adapter - pendingUploadsPresenter!!.setup() - pendingUploadsPresenter!!.totalContributionList.observe( + pendingUploadsPresenter.setup() + pendingUploadsPresenter.totalContributionList.observe( viewLifecycleOwner, ) { list: PagedList -> contributionsSize = list.size diff --git a/app/src/main/java/fr/free/nrw/commons/upload/categories/UploadCategoriesFragment.java b/app/src/main/java/fr/free/nrw/commons/upload/categories/UploadCategoriesFragment.java index 8503b1d05..dd264655f 100644 --- a/app/src/main/java/fr/free/nrw/commons/upload/categories/UploadCategoriesFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/upload/categories/UploadCategoriesFragment.java @@ -372,7 +372,7 @@ public class UploadCategoriesFragment extends UploadBaseFragment implements Cate return false; }); - Objects.requireNonNull(getView()).setFocusableInTouchMode(true); + requireView().setFocusableInTouchMode(true); getView().requestFocus(); getView().setOnKeyListener((v, keyCode, event) -> { if (event.getAction() == KeyEvent.ACTION_UP && keyCode == KeyEvent.KEYCODE_BACK) { @@ -387,7 +387,7 @@ public class UploadCategoriesFragment extends UploadBaseFragment implements Cate }); Objects.requireNonNull( - ((AppCompatActivity) Objects.requireNonNull(getActivity())).getSupportActionBar()) + ((AppCompatActivity) requireActivity()).getSupportActionBar()) .hide(); if (getParentFragment().getParentFragment().getParentFragment() @@ -407,7 +407,7 @@ public class UploadCategoriesFragment extends UploadBaseFragment implements Cate super.onStop(); if (media != null) { Objects.requireNonNull( - ((AppCompatActivity) Objects.requireNonNull(getActivity())).getSupportActionBar()) + ((AppCompatActivity) requireActivity()).getSupportActionBar()) .show(); } } diff --git a/app/src/main/java/fr/free/nrw/commons/upload/depicts/DepictsFragment.java b/app/src/main/java/fr/free/nrw/commons/upload/depicts/DepictsFragment.java index bd52a8d35..9000e513d 100644 --- a/app/src/main/java/fr/free/nrw/commons/upload/depicts/DepictsFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/upload/depicts/DepictsFragment.java @@ -398,7 +398,7 @@ public class DepictsFragment extends UploadBaseFragment implements DepictsContra return false; }); - Objects.requireNonNull(getView()).setFocusableInTouchMode(true); + requireView().setFocusableInTouchMode(true); getView().requestFocus(); getView().setOnKeyListener((v, keyCode, event) -> { if (event.getAction() == KeyEvent.ACTION_UP && keyCode == KeyEvent.KEYCODE_BACK) { @@ -411,7 +411,7 @@ public class DepictsFragment extends UploadBaseFragment implements DepictsContra }); Objects.requireNonNull( - ((AppCompatActivity) Objects.requireNonNull(getActivity())).getSupportActionBar()) + ((AppCompatActivity) requireActivity()).getSupportActionBar()) .hide(); if (getParentFragment().getParentFragment().getParentFragment() @@ -431,7 +431,7 @@ public class DepictsFragment extends UploadBaseFragment implements DepictsContra super.onStop(); if (media != null) { Objects.requireNonNull( - ((AppCompatActivity) Objects.requireNonNull(getActivity())).getSupportActionBar()) + ((AppCompatActivity) requireActivity()).getSupportActionBar()) .show(); } } diff --git a/app/src/main/java/fr/free/nrw/commons/upload/mediaDetails/UploadMediaDetailFragment.java b/app/src/main/java/fr/free/nrw/commons/upload/mediaDetails/UploadMediaDetailFragment.java index 2c4c2ecd3..5581cfeb1 100644 --- a/app/src/main/java/fr/free/nrw/commons/upload/mediaDetails/UploadMediaDetailFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/upload/mediaDetails/UploadMediaDetailFragment.java @@ -825,7 +825,7 @@ public class UploadMediaDetailFragment extends UploadBaseFragment implements @Override public void displayAddLocationDialog(final Runnable onSkipClicked) { isMissingLocationDialog = true; - DialogUtil.showAlertDialog(Objects.requireNonNull(getActivity()), + DialogUtil.showAlertDialog(requireActivity(), getString(R.string.no_location_found_title), getString(R.string.no_location_found_message), getString(R.string.add_location), diff --git a/app/src/main/java/fr/free/nrw/commons/upload/mediaDetails/UploadMediaPresenter.java b/app/src/main/java/fr/free/nrw/commons/upload/mediaDetails/UploadMediaPresenter.java index 7152d4d8f..cd533401b 100644 --- a/app/src/main/java/fr/free/nrw/commons/upload/mediaDetails/UploadMediaPresenter.java +++ b/app/src/main/java/fr/free/nrw/commons/upload/mediaDetails/UploadMediaPresenter.java @@ -129,9 +129,9 @@ public class UploadMediaPresenter implements UserActionListener, SimilarImageInt if (place.location != null) { final String countryCode = reverseGeoCode(place.location); if (countryCode != null && WLM_SUPPORTED_COUNTRIES - .contains(countryCode.toLowerCase())) { + .contains(countryCode.toLowerCase(Locale.ROOT))) { uploadItem.setWLMUpload(true); - uploadItem.setCountryCode(countryCode.toLowerCase()); + uploadItem.setCountryCode(countryCode.toLowerCase(Locale.ROOT)); } } } diff --git a/app/src/main/res/layout/activity_description_edit.xml b/app/src/main/res/layout/activity_description_edit.xml index ed50193a2..1a8d3b8ce 100644 --- a/app/src/main/res/layout/activity_description_edit.xml +++ b/app/src/main/res/layout/activity_description_edit.xml @@ -36,11 +36,11 @@ android:layout_height="wrap_content" android:layout_marginStart="16dp" android:contentDescription="@string/exit_location_picker" - android:tint="@color/white" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintTop_toTopOf="parent" - app:srcCompat="@drawable/ic_arrow_back_white" /> + app:srcCompat="@drawable/ic_arrow_back_white" + app:tint="@color/white" /> @@ -69,7 +69,7 @@ android:id="@+id/btn_edit_submit" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_alignParentRight="true" + android:layout_alignParentEnd="true" android:text="@string/submit" android:textColor="@android:color/white" /> diff --git a/app/src/main/res/layout/bottom_sheet_details_explore.xml b/app/src/main/res/layout/bottom_sheet_details_explore.xml index 1da5c7f3e..6558c9afe 100644 --- a/app/src/main/res/layout/bottom_sheet_details_explore.xml +++ b/app/src/main/res/layout/bottom_sheet_details_explore.xml @@ -31,7 +31,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="16sp" - android:layout_marginRight="50dp" + android:layout_marginEnd="50dp" android:maxLines="2" android:ellipsize="end" /> @@ -58,6 +58,7 @@ android:layout_width="@dimen/dimen_0" android:layout_height="wrap_content" android:layout_weight="1" + android:focusable="true" android:padding="@dimen/standard_gap" android:clickable="true" android:background="@drawable/button_background_selector" @@ -69,8 +70,7 @@ android:layout_gravity="center_horizontal" android:duplicateParentState="true" app:srcCompat="@drawable/ic_directions_black_24dp" - android:tint="?attr/rowButtonColor" - /> + app:tint="?attr/rowButtonColor" /> diff --git a/app/src/main/res/layout/bottom_sheet_item_layout.xml b/app/src/main/res/layout/bottom_sheet_item_layout.xml index 4f4c2c854..c569e523a 100644 --- a/app/src/main/res/layout/bottom_sheet_item_layout.xml +++ b/app/src/main/res/layout/bottom_sheet_item_layout.xml @@ -1,11 +1,13 @@ @@ -14,7 +16,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" - android:tint="?attr/rowButtonColor" /> + app:tint="?attr/rowButtonColor" /> @@ -36,7 +35,6 @@ style="?android:textAppearanceLarge" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_marginLeft="@dimen/activity_margin_horizontal" android:layout_marginStart="@dimen/activity_margin_horizontal" android:layout_marginTop="@dimen/activity_margin_horizontal" android:text="@string/level" @@ -48,13 +46,11 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="@dimen/activity_margin_vertical" - android:layout_marginRight="@dimen/activity_margin_horizontal" android:layout_marginEnd="@dimen/activity_margin_horizontal" - android:layout_alignParentRight="true" android:layout_alignParentEnd="true" app:srcCompat="@drawable/ic_info_outline_24dp" - android:tint="@color/black" - android:layout_marginVertical="@dimen/activity_margin_vertical" /> + android:layout_marginVertical="@dimen/activity_margin_vertical" + app:tint="@color/black" /> + android:layout_marginStart="@dimen/activity_margin_horizontal" + app:tint="@color/primaryLightColor" /> @@ -189,7 +182,6 @@ style="?android:textAppearanceMedium" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_marginLeft="@dimen/activity_margin_horizontal" android:id="@+id/images_reverted_text" android:layout_marginStart="@dimen/activity_margin_horizontal" android:text="@string/image_reverts" /> @@ -200,24 +192,19 @@ android:layout_marginTop="@dimen/activity_margin_horizontal" android:layout_marginRight="@dimen/activity_margin_horizontal" android:layout_marginEnd="@dimen/activity_margin_horizontal" - android:layout_toRightOf="@+id/images_reverted_text" - android:layout_toEndOf="@+id/images_reverted_text" app:srcCompat="@drawable/ic_info_outline_24dp" - android:tint="@color/primaryLightColor" android:layout_marginLeft="@dimen/activity_margin_horizontal" - android:layout_marginStart="@dimen/activity_margin_horizontal"/> + android:layout_marginStart="@dimen/activity_margin_horizontal" app:tint="@color/primaryLightColor" /> - @@ -278,7 +265,6 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/images_used_by_wiki_text" - android:layout_marginLeft="@dimen/activity_margin_horizontal" android:layout_marginStart="@dimen/activity_margin_horizontal" android:layout_marginTop="@dimen/achievements_activity_margin_vertical" android:text="@string/images_used_by_wiki" /> @@ -289,12 +275,10 @@ android:layout_marginTop="@dimen/activity_margin_horizontal" android:layout_marginRight="@dimen/activity_margin_horizontal" android:layout_marginEnd="@dimen/activity_margin_horizontal" - android:layout_toRightOf="@+id/images_used_by_wiki_text" - android:layout_toEndOf="@+id/images_used_by_wiki_text" app:srcCompat="@drawable/ic_info_outline_24dp" - android:tint="@color/primaryLightColor" android:layout_marginLeft="@dimen/activity_margin_horizontal" - android:layout_marginStart="@dimen/activity_margin_horizontal"/> + android:layout_marginStart="@dimen/activity_margin_horizontal" + app:tint="@color/primaryLightColor" /> @@ -353,7 +337,6 @@ android:layout_height="wrap_content" android:text="@string/statistics" style="?android:textAppearanceLarge" - android:layout_marginLeft="@dimen/activity_margin_horizontal" android:layout_marginStart="@dimen/activity_margin_horizontal" android:layout_marginTop="@dimen/activity_margin_vertical" android:textAllCaps="true"/> @@ -373,9 +356,7 @@ android:id="@+id/images_nearby_info" android:layout_centerVertical="true" android:layout_alignParentStart="true" - android:layout_alignParentLeft="true" android:layout_toStartOf="@+id/wikidata_edits" - android:layout_toLeftOf="@+id/wikidata_edits" android:orientation="horizontal" android:gravity="center_vertical"> @@ -407,14 +388,13 @@ android:layout_height="@dimen/medium_height" android:id="@+id/images_nearby_info_icon" android:layout_marginTop="@dimen/activity_margin_horizontal" - android:layout_marginRight="@dimen/activity_margin_horizontal" android:layout_marginEnd="@dimen/activity_margin_horizontal" android:layout_gravity="top" app:layout_constraintLeft_toRightOf="@id/images_nearby_data" app:layout_constraintTop_toTopOf="parent" app:layout_constraintRight_toRightOf="parent" app:srcCompat="@drawable/ic_info_outline_24dp" - android:tint="@color/primaryLightColor" /> + app:tint="@color/primaryLightColor" /> @@ -423,16 +403,14 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" style="?android:textAppearanceMedium" - android:layout_alignParentRight="true" android:layout_alignParentEnd="true" - android:layout_marginLeft="@dimen/activity_margin_horizontal" android:layout_marginEnd="@dimen/half_standard_height" android:layout_marginTop="@dimen/activity_margin_horizontal" android:layout_marginStart="@dimen/activity_margin_horizontal" android:layout_centerVertical="true" tools:text="2" android:id="@+id/wikidata_edits" - android:layout_marginRight="@dimen/half_standard_height" /> + /> @@ -451,9 +429,7 @@ android:id="@+id/images_featured_info" android:layout_centerVertical="true" android:layout_alignParentStart="true" - android:layout_alignParentLeft="true" android:layout_toStartOf="@+id/image_featured" - android:layout_toLeftOf="@+id/image_featured" android:orientation="horizontal" android:gravity="center_vertical"> @@ -486,14 +462,13 @@ android:layout_height="@dimen/medium_height" android:id="@+id/images_featured_info_icon" android:layout_marginTop="@dimen/activity_margin_horizontal" - android:layout_marginRight="@dimen/activity_margin_horizontal" android:layout_marginEnd="@dimen/activity_margin_horizontal" app:layout_constraintLeft_toRightOf="@id/images_featured_data" app:layout_constraintTop_toTopOf="parent" app:layout_constraintRight_toRightOf="parent" android:layout_gravity="top" app:srcCompat="@drawable/ic_info_outline_24dp" - android:tint="@color/primaryLightColor" /> + app:tint="@color/primaryLightColor" /> @@ -501,16 +476,14 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" style="?android:textAppearanceMedium" - android:layout_alignParentRight="true" android:layout_alignParentEnd="true" android:layout_marginTop="@dimen/activity_margin_horizontal" android:layout_marginStart="@dimen/activity_margin_horizontal" android:layout_centerVertical="true" tools:text="2" android:id="@+id/image_featured" - android:layout_marginLeft="@dimen/activity_margin_horizontal" android:layout_marginEnd="@dimen/half_standard_height" - android:layout_marginRight="@dimen/half_standard_height" /> + /> @@ -529,9 +502,7 @@ android:id="@+id/quality_images_info" android:layout_centerVertical="true" android:layout_alignParentStart="true" - android:layout_alignParentLeft="true" android:layout_toStartOf="@+id/quality_images" - android:layout_toLeftOf="@+id/quality_images" android:orientation="horizontal" android:gravity="center_vertical"> @@ -564,14 +535,13 @@ android:layout_height="@dimen/medium_height" android:id="@+id/quality_images_info_icon" android:layout_marginTop="@dimen/activity_margin_horizontal" - android:layout_marginRight="@dimen/activity_margin_horizontal" android:layout_marginEnd="@dimen/activity_margin_horizontal" app:layout_constraintLeft_toRightOf="@id/quality_images_data" app:layout_constraintTop_toTopOf="parent" app:layout_constraintRight_toRightOf="parent" android:layout_gravity="top" app:srcCompat="@drawable/ic_info_outline_24dp" - android:tint="@color/primaryLightColor" /> + app:tint="@color/primaryLightColor" /> @@ -579,7 +549,6 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" style="?android:textAppearanceMedium" - android:layout_alignParentRight="true" android:layout_alignParentEnd="true" android:layout_marginTop="@dimen/activity_margin_horizontal" android:layout_marginStart="@dimen/activity_margin_horizontal" @@ -587,9 +556,8 @@ tools:text="2" android:text="0" android:id="@+id/quality_images" - android:layout_marginLeft="@dimen/activity_margin_horizontal" android:layout_marginEnd="@dimen/half_standard_height" - android:layout_marginRight="@dimen/half_standard_height" /> + /> @@ -608,9 +576,7 @@ android:id="@+id/thanks_received_info" android:layout_centerVertical="true" android:layout_alignParentStart="true" - android:layout_alignParentLeft="true" android:layout_toStartOf="@+id/thanks_received" - android:layout_toLeftOf="@+id/thanks_received" android:orientation="horizontal" android:gravity="center_vertical"> @@ -643,14 +609,13 @@ android:layout_height="@dimen/medium_height" android:id="@+id/thanks_received_info_icon" android:layout_marginTop="@dimen/activity_margin_horizontal" - android:layout_marginRight="@dimen/activity_margin_horizontal" android:layout_marginEnd="@dimen/activity_margin_horizontal" app:layout_constraintLeft_toRightOf="@id/thanks_received_data" app:layout_constraintTop_toTopOf="parent" app:layout_constraintRight_toRightOf="parent" android:layout_gravity="top" app:srcCompat="@drawable/ic_info_outline_24dp" - android:tint="@color/primaryLightColor" /> + app:tint="@color/primaryLightColor" /> @@ -658,16 +623,14 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" style="?android:textAppearanceMedium" - android:layout_alignParentRight="true" android:layout_alignParentEnd="true" android:layout_marginTop="@dimen/activity_margin_horizontal" android:layout_marginStart="@dimen/activity_margin_horizontal" - android:layout_marginLeft="@dimen/activity_margin_horizontal" android:layout_centerVertical="true" tools:text="2" android:id="@+id/thanks_received" android:layout_marginEnd="@dimen/half_standard_height" - android:layout_marginRight="@dimen/half_standard_height" /> + /> diff --git a/app/src/main/res/layout/item_place.xml b/app/src/main/res/layout/item_place.xml index 82e431063..9854fb58d 100644 --- a/app/src/main/res/layout/item_place.xml +++ b/app/src/main/res/layout/item_place.xml @@ -11,8 +11,8 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin="@dimen/standard_gap" - android:tint="?attr/rowButtonColor" - app:srcCompat="@drawable/ic_round_star_border_24px" /> + app:srcCompat="@drawable/ic_round_star_border_24px" + app:tint="?attr/rowButtonColor" /> @@ -54,11 +52,8 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignTop="@id/distance" - android:layout_marginLeft="@dimen/standard_gap" android:layout_marginStart="@dimen/standard_gap" android:layout_toEndOf="@id/icon" - android:layout_toLeftOf="@id/distance" - android:layout_toRightOf="@id/icon" android:layout_toStartOf="@id/distance" android:ellipsize="end" android:maxLines="2" @@ -71,8 +66,6 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignEnd="@id/distance" - android:layout_alignLeft="@id/tvName" - android:layout_alignRight="@id/distance" android:layout_alignStart="@id/tvName" android:layout_below="@id/tvName" android:layout_marginBottom="@dimen/standard_gap" diff --git a/app/src/main/res/layout/layout_campagin.xml b/app/src/main/res/layout/layout_campagin.xml index 775a6a4ec..2a2891e84 100644 --- a/app/src/main/res/layout/layout_campagin.xml +++ b/app/src/main/res/layout/layout_campagin.xml @@ -19,17 +19,14 @@ android:id="@+id/iv_campaign" android:layout_width="@dimen/dimen_40" android:layout_height="@dimen/dimen_40" - android:layout_marginLeft="@dimen/standard_gap" android:layout_marginStart="@dimen/standard_gap" android:scaleType="centerCrop" app:srcCompat="@drawable/ic_campaign" - android:tint="?attr/card_item_color" - /> + app:tint="?attr/card_item_color" /> @@ -37,15 +34,13 @@ + android:layout_marginStart="@dimen/standard_gap" + android:layout_marginEnd="@dimen/tiny_margin"> + android:visibility="visible" + app:tint="?attr/contributionsListTextSecondary" /> diff --git a/app/src/main/res/layout/nearby_card_view.xml b/app/src/main/res/layout/nearby_card_view.xml index 7161a0936..bbd43249e 100644 --- a/app/src/main/res/layout/nearby_card_view.xml +++ b/app/src/main/res/layout/nearby_card_view.xml @@ -14,7 +14,6 @@ style="@style/Widget.AppCompat.Button.Borderless" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_centerInParent="true" android:layout_marginLeft="@dimen/activity_margin_horizontal" android:layout_marginTop="@dimen/activity_margin_horizontal" android:layout_marginRight="@dimen/activity_margin_horizontal" @@ -30,34 +29,28 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/content_layout" - android:layout_centerInParent="true" android:orientation="horizontal" > + android:id="@+id/progressBar" /> + app:tint="?attr/card_item_color" /> @@ -24,8 +25,8 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" - android:tint="?attr/bookmarkButtonColor" - app:srcCompat="@drawable/ic_photo_camera_white_24dp" /> + app:srcCompat="@drawable/ic_photo_camera_white_24dp" + app:tint="?attr/bookmarkButtonColor" /> @@ -53,8 +55,8 @@ android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:duplicateParentState="true" - android:tint="?attr/bookmarkButtonColor" - app:srcCompat="@drawable/ic_photo_white_24dp" /> + app:srcCompat="@drawable/ic_photo_white_24dp" + app:tint="?attr/bookmarkButtonColor" /> + android:duplicateParentState="true" + app:tint="?attr/bookmarkButtonColor" /> @@ -110,8 +114,8 @@ android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:duplicateParentState="true" - android:tint="?attr/bookmarkButtonColor" - app:srcCompat="@drawable/ic_overflow" /> + app:srcCompat="@drawable/ic_overflow" + app:tint="?attr/bookmarkButtonColor" /> + app:srcCompat="@drawable/ic_arrow_back_white" + app:tint="@color/white" /> \ No newline at end of file diff --git a/app/src/main/res/values-ab/strings.xml b/app/src/main/res/values-ab/strings.xml index 9ff1b19b4..22f382f57 100644 --- a/app/src/main/res/values-ab/strings.xml +++ b/app/src/main/res/values-ab/strings.xml @@ -14,7 +14,7 @@ Аҭаларҭа Иҟаҵатәуп арегистрациа Асистемахь аҭаларҭа - Шәааԥшы ԥыҭрак... + Шәааԥшы ԥыҭрак… Аҭалара қәҿиарала имҩаԥысит! Асистемахь аҭалараан агха! Афаил ԥшаам. Даҽа фаилк шәахәаԥш. @@ -64,7 +64,7 @@ Ари шәара еилышәкаама? Ааи! Акатегориақәа - Аҭагалара... + Аҭагалара… Акагь алхӡам Иҟам ахҳәаа Идырым алицензиа diff --git a/app/src/main/res/values-af/strings.xml b/app/src/main/res/values-af/strings.xml index 1da8b3101..57ba77cc9 100644 --- a/app/src/main/res/values-af/strings.xml +++ b/app/src/main/res/values-af/strings.xml @@ -22,7 +22,6 @@ %1$d lêers aan die uploaden - \@string/contributions_subtitle_zero (%1$d) (%1$d) @@ -148,7 +147,7 @@ Ja! <u>Meer inligting</u> Kategorieë - Laai ... + Laai … Niks gekies nie Geen beskrywing Geen bespreking nie diff --git a/app/src/main/res/values-anp/strings.xml b/app/src/main/res/values-anp/strings.xml index 70a01949f..e4029af9b 100644 --- a/app/src/main/res/values-anp/strings.xml +++ b/app/src/main/res/values-anp/strings.xml @@ -27,14 +27,14 @@ पासवर्ड भूलाय गेलौ की? साइन अप करौ प्रवेश होय रहलौ छौं - कृपया प्रतीक्षा करौ... - कृपया प्रतीक्षा करौ... + कृपया प्रतीक्षा करौ… + कृपया प्रतीक्षा करौ… प्रवेश विफल अपलोड आरंभ! हाल केरौ अपलोड कतारबद्ध विफल - अपलोड होय रहलौ छौं... + अपलोड होय रहलौ छौं… ठामे मँ हमरौ अपलोड साझा करौ @@ -68,7 +68,7 @@ हाँव! बेसी जानकारी श्रेणी सिनी - लोड होय रहलौ छौं... + लोड होय रहलौ छौं… कुछु चयनित नाय कोय शीर्षक नाय कोय विवरण नाय @@ -173,7 +173,7 @@ पूर्ण होलौं अगलका छवि हाँव, केन्हअ नाय - कृपया प्रतीक्षा करौ... + कृपया प्रतीक्षा करौ… प्रतिलिपि बनैलौ गेलै! लेखक स्थान diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml index 46ffcb7f5..b0fda6990 100644 --- a/app/src/main/res/values-ar/strings.xml +++ b/app/src/main/res/values-ar/strings.xml @@ -125,7 +125,7 @@ يجري الدخول الرجاء الانتظار… تحديث التسميات التوضيحية والأوصاف - يرجى الانتظار... + يرجى الانتظار… نجاح تسجيل الدخول! فشل تسجيل الدخول الملف غير موجود. فضلا اختر ملفا آخر. @@ -530,7 +530,7 @@ عرض المقروءة عرض غير المقروءة حدث خطأ أثناء التقاط الصور - الرجاء الانتظار... + الرجاء الانتظار… الصور المختارة هي صور من مصورين ورسامين ذوي مهارات عالية اختارها مجتمع ويكيميديا ​​كومنز كبعض الأفضل جودة على الموقع. الصور المرفوعة عبر الأماكن القريبة هي الصور المرفوعة عن طريق اكتشاف الأماكن على الخريطة. تتيح هذه الميزة للمحررين إرسال إشعار شكر للمستخدمين الذين يقومون بتعديلات مفيدة - باستخدام رابط شكر صغير في صفحة التاريخ أو صفحة الفرق. @@ -552,7 +552,7 @@ رفض الوصول إلى موقع الوسائط قد لا نتمكن من الحصول تلقائيًا على بيانات الموقع من الصور التي تقوم برفعها. يرجى إضافة الموقع المناسب لكل صورة قبل الإرسال ارفع الصور لويكيميديا ​​كومنز مباشرة من هاتفك. قم بتنزيل تطبيق كومنز الآن: %1$s - مشاركة التطبيق عبر... + مشاركة التطبيق عبر… معلومات الصورة لم يتم العثور على تصنيفات لم يتم العثور على الصور @@ -695,7 +695,7 @@ وضع الاتصال المحدود صور عالية الجودة الصور عالية الجودة هي رسوم بيانية أو صور فوتوغرافية تفي بمعايير جودة معينة (والتي تكون في الغالب ذات طبيعة فنية) وذات قيمة لمشروعات ويكيميديا - جاري استئناف التحميل ... + جاري استئناف التحميل … جاري إيقاف التحميل مؤقتًا .. الغاء التحميل إلغاء الرفع diff --git a/app/src/main/res/values-as/strings.xml b/app/src/main/res/values-as/strings.xml index 960b55bda..63aa12b96 100644 --- a/app/src/main/res/values-as/strings.xml +++ b/app/src/main/res/values-as/strings.xml @@ -27,7 +27,7 @@ পাছৱৰ্ড পাহৰিলে? পঞ্জীয়ন কৰক লগইন হৈ আছে - অনুগ্ৰহ কৰি অপেক্ষা কৰক... + অনুগ্ৰহ কৰি অপেক্ষা কৰক… লগইন সফল হ\'ল! লগইন বিফল হৈছে! ফাইল পোৱা নগ\'ল। অনুগ্ৰহ কৰি আন এটা ফাইল চেষ্টা কৰক। @@ -74,7 +74,7 @@ <u>গোপনিয়তা নীতি</u> প্ৰতিক্ৰিয়া প্ৰেৰণ কৰক (ইমেইল যোগে) কোনো ইমেইল ক্লায়েন্ট ইনষ্টল কৰা নাই - প্ৰথম চিংকৰ বাবে অপেক্ষাৰত... + প্ৰথম চিংকৰ বাবে অপেক্ষাৰত… আপুনি এতিয়ালৈকে কোনো ফটো আপল\'ড কৰা নাই। পুনৰ চেষ্টা কৰক বাতিল কৰক diff --git a/app/src/main/res/values-ast/strings.xml b/app/src/main/res/values-ast/strings.xml index df61ed061..34212aebb 100644 --- a/app/src/main/res/values-ast/strings.xml +++ b/app/src/main/res/values-ast/strings.xml @@ -74,7 +74,7 @@ Aniciando sesión Espera… Actualizando pies y descripciones - Porfavor espera... + Porfavor espera… ¡Identificación correuta! ¡Falló l\'aniciu de sesión! Nun s\'alcontró\'l ficheru. Tenta con otru. @@ -480,7 +480,7 @@ Númberos de serie Software Xubi semeyes a Wikimedia Commons direutamente dende\'l to móvil. Descarga yá la app de Commons: %1$s - Compartir l\'aplicación per... + Compartir l\'aplicación per… Información de la imaxe Nun s\'alcontró nenguna categoría Nun s\'alcontraron retratos diff --git a/app/src/main/res/values-az/strings.xml b/app/src/main/res/values-az/strings.xml index 1edbe43fc..d2ea468ad 100644 --- a/app/src/main/res/values-az/strings.xml +++ b/app/src/main/res/values-az/strings.xml @@ -104,7 +104,7 @@ CC BY 3.0 Əlavə məlumat Kateqoriyalar - Yüklənir... + Yüklənir… Heç biri seçilməmişdir Naməlum lisenziya Yenilə diff --git a/app/src/main/res/values-b+roa+tara/strings.xml b/app/src/main/res/values-b+roa+tara/strings.xml index 4fa660ef8..8e7764323 100644 --- a/app/src/main/res/values-b+roa+tara/strings.xml +++ b/app/src/main/res/values-b+roa+tara/strings.xml @@ -40,8 +40,8 @@ Tràse Passuord scurdate? Reggistrate - Stoche a tràse... - Aspitte... + Stoche a tràse… + Aspitte… E\' trasute! Non g\'è trasute! File non acchiate. Pruève \'n\'otre file. @@ -121,7 +121,7 @@ Permesse richieste Non ge tìne notifeche non lette Errore assute mendre ca ste pigghiave le immaggine - Aspitte... + Aspitte… Zumbe ste immaggine Autore Lènghe d\'a descrizione predefinite diff --git a/app/src/main/res/values-b+sr+Latn/strings.xml b/app/src/main/res/values-b+sr+Latn/strings.xml index cd1cb09e8..b8b602d0d 100644 --- a/app/src/main/res/values-b+sr+Latn/strings.xml +++ b/app/src/main/res/values-b+sr+Latn/strings.xml @@ -5,7 +5,7 @@ * Milicevic01 * Zoranzoki21 --> - + Fejsbuk stranica Ostave Izvorni kod na Github-u Logo Ostave @@ -26,32 +26,39 @@ Slika dana %1$d datoteka se otprema + %1$d datoteke se otpremaju %1$d datoteke se otpremaju %1$d otpremanje + %1$d otpremanja %1$d otpremanja Pokretanje otpremanja Procesuiranje %d otpremanje + Procesuiranje %d otpremanja Procesuiranje %d otpremanja %d otpremanje + %d otpremanja %d otpremanja Slika će se voditi pod licencom %1$s + Slike će se voditi pod licencom %1$s Slike će se voditi pod licencom %1$s %1$d otpremanje + %1$d otpremanja %1$d otpremanja - Primanje deljenog sadržaja... Procesuiranje slike može potrajati neko vreme, u zavisnosti od veličine slike i vašeg uređaja - Primanje deljenog sadržaja... Procesuiranje slika može potrajati neko vreme, u zavisnosti od veličine slika i vašeg uređaja + Primanje deljenog sadržaja… Procesuiranje slike može potrajati neko vreme, u zavisnosti od veličine slike i vašeg uređaja + Primanje deljenog sadržaja… Procesuiranje slika može potrajati neko vreme, u zavisnosti od veličine slika i vašeg uređaja + Primanje deljenog sadržaja… Procesuiranje slika može potrajati neko vreme, u zavisnosti od veličine slika i vašeg uređaja Istraga Izgled @@ -486,7 +493,7 @@ Pristup lokaciji medija je odbijen Možda nećemo moći da automatski pribavimo podatke o lokaciji iz slika koje otpremite. Dodajte odgovarajuću lokaciju za svaku sliku pre objavljivanja Otpremi fotografije na Vikimedijinu Ostavu direktno sa svog telefona. Preuzmi aplikaciju Ostave sada: %1$s - Podeli aplikaciju preko... + Podeli aplikaciju preko… Informacije o slici Nisu pronađene kategorije Otkazano otpremanje @@ -511,12 +518,13 @@ Uspešno Kategorija %1$s je dodata. + Kategorije %1$s su dodate. Kategorije %1$s su dodate. Nije moguće dodati kategorije. Ažuriraj kategoriju Uredi prikaze - Pokušavanje promena koordinata... + Pokušavanje promena koordinata… Ažuriranje koordinata Ažuriranje opisa Ažuriranje natpisa @@ -698,6 +706,7 @@ Nije moguće podeliti ovu stavku %d slika je odabrana + %d slika je odabrano %d slika je odabrano diff --git a/app/src/main/res/values-ba/strings.xml b/app/src/main/res/values-ba/strings.xml index 0fc68329f..4c33b396f 100644 --- a/app/src/main/res/values-ba/strings.xml +++ b/app/src/main/res/values-ba/strings.xml @@ -61,9 +61,9 @@ Серһүҙҙе оноттоғоҙмо? Теркәлеү Системаға инеү - Зинһар, көтөгөҙ... + Зинһар, көтөгөҙ… Аңлатмалар һәм тасуирламалар яңыртыла - Зинһар, көтөгөҙ... + Зинһар, көтөгөҙ… Системаға инеү уңышлы! Системаға инеү уңышһыҙ! Файл табылманы. Башҡа файлды эҙләп ҡарағыҙ. @@ -131,7 +131,7 @@ Фекереңде ебәр (эл.почта аша) Почта клиенты асыҡланмаған Яңыраҡ ҡулланылған категориялар - Тәүге синхронлаштырыуҙы көтөү... + Тәүге синхронлаштырыуҙы көтөү… Әлегә бер фото ла йөкләмәгәнһегеҙ Ҡабатларға Кире алыу @@ -171,7 +171,7 @@ Эйе! Ентеклерәк Категориялар - Йөкләнә башланы... + Йөкләнә башланы… Бер ни ҙә һайланмаған Тасуирламаһы юҡ Фекер алышыу юҡ diff --git a/app/src/main/res/values-ban/strings.xml b/app/src/main/res/values-ban/strings.xml index b24bc0022..1273eaf0d 100644 --- a/app/src/main/res/values-ban/strings.xml +++ b/app/src/main/res/values-ban/strings.xml @@ -61,7 +61,7 @@ Lali kruna Sandi? Daftar Ngeranjingin log - Jantos dumun... + Jantos dumun… Nganyarin sesirah miwah pidarta Jantos dumun… Mahasil manjing log! @@ -303,7 +303,7 @@ Nomor seri Piranti lunak Unggah foto nuju Wikimédia Commons langsung saking télépon ragané. Unduh aplikasi Commons mangkin: %1$s - Wedar aplikasi saking... + Wedar aplikasi saking… Pidarta Gambar Pangunggahan Kawangdé %1$s kaunggah olih: %2$s @@ -340,7 +340,7 @@ Kaanggén Paringkat Titiang Kualitas Gambar - Ngalanturang unggahan... + Ngalanturang unggahan… Ngarérénang unggahan… Wangdé Unggah Lisénsi Média diff --git a/app/src/main/res/values-bg/strings.xml b/app/src/main/res/values-bg/strings.xml index 6ee931542..cb19d6e39 100644 --- a/app/src/main/res/values-bg/strings.xml +++ b/app/src/main/res/values-bg/strings.xml @@ -304,7 +304,7 @@ Преглеждане на прочетени Преглеждане на непрочетени Възникна грешка при избирането на изображенията - Моля, изчакайте... + Моля, изчакайте… напълно размазано Наблизо Прочетете повече diff --git a/app/src/main/res/values-blk/strings.xml b/app/src/main/res/values-blk/strings.xml index 2cf4aba5b..51a8ec1ba 100644 --- a/app/src/main/res/values-blk/strings.xml +++ b/app/src/main/res/values-blk/strings.xml @@ -38,7 +38,7 @@ အွောန်ႏဖေင်ꩻထိုꩻ ငဝ်းဗိဉ်ႏပလို့ꩻနဲ့? ဒင်ႏမတ်ပိုင်တိဉ် အဝ်ႏနွို့အကောက်ကျာꩻ - အိုင်ပွေားဆောင်းတဆင်ႏသြ... + အိုင်ပွေားဆောင်းတဆင်ႏသြ… နွို့အကောက်အောင်ႏလဲဉ်း! နွို့အကောက်အောင်ႏတဝ်း! မော့ꩻတဝ်းဖုဲင်၊ စံꩻထွားစံꩻသွော့ ဖုဲင်အလင်တဗာႏသြ။ @@ -97,7 +97,7 @@ မွေး! ထဲင်းယင်း သꩻတင်ꩻအချက်လက် ကဏ္ဍဖုံႏ - အဝ်ႏဒင်ႏဝွန်ႏကျာꩻ... + အဝ်ႏဒင်ႏဝွန်ႏကျာꩻ… လွိုက်ခါꩻတဝ်းမုဲင်ꩻမုဲင်ꩻ ပုင်ႏလိတ်အဝ်ႏတဝ်း အွောန်ႏနယ်ချက်အဝ်ႏတဝ်း diff --git a/app/src/main/res/values-bn/strings.xml b/app/src/main/res/values-bn/strings.xml index 2d156c199..51502c264 100644 --- a/app/src/main/res/values-bn/strings.xml +++ b/app/src/main/res/values-bn/strings.xml @@ -393,7 +393,7 @@ কোনও চিত্র ব্যবহৃত হয়নি পঠিতগুলি দেখান অপঠিতগুলি দেখান - অনুগ্রহ করে অপেক্ষা করুন... + অনুগ্রহ করে অপেক্ষা করুন… অনুলিপি করা হয়েছে এই চিত্র এড়িয়ে যান প্রণেতা diff --git a/app/src/main/res/values-br/strings.xml b/app/src/main/res/values-br/strings.xml index 1c7d09617..9537c45e6 100644 --- a/app/src/main/res/values-br/strings.xml +++ b/app/src/main/res/values-br/strings.xml @@ -40,6 +40,9 @@ %1$d bellgargadenn loc\'het + %1$d bellgargadenn loc\'het + %1$d bellgargadennoù loc\'het + %1$d bellgargadennoù loc\'het %1$d pellgargadennoù loc\'het @@ -51,6 +54,9 @@ gant an aotre-implijout %1$s e vo ar skeudenn-mañ + gant an aotre-implijout %1$s e vo an div skeudenn-mañ + gant an aotre-implijout %1$s e vo meur a skeudenn-mañ + gant an aotre-implijout %1$s e vo kalz a skeudenn-mañ gant an aotreoù-implijout %1$s e vo ar skeudenn-mañ Ergerzhout diff --git a/app/src/main/res/values-bs/strings.xml b/app/src/main/res/values-bs/strings.xml index 91860b1e1..d178ff507 100644 --- a/app/src/main/res/values-bs/strings.xml +++ b/app/src/main/res/values-bs/strings.xml @@ -10,19 +10,22 @@ Logo Commonsa postavlja se %1$d datoteka + postavlja se %1$d datoteke postavlja se %1$d datoteka - \@string/contributions_subtitle_zero postavljena %1$d datoteka + postavljena %1$d datoteke postavljenih datoteka: %1$d Započinjem postavljanje %1$d datoteke + Započinjem postavljanje %1$d datoteke Započinjem postavljanje %1$d datoteka/-e %1$d postavljanje + %1$d postavljanja %1$d postavljanja Slika će se voditi pod licencom %1$s diff --git a/app/src/main/res/values-ca/strings.xml b/app/src/main/res/values-ca/strings.xml index 0c15e58c3..51330cb9d 100644 --- a/app/src/main/res/values-ca/strings.xml +++ b/app/src/main/res/values-ca/strings.xml @@ -20,27 +20,33 @@ Imatge del dia s\'està carregant %1$d fitxer + S\'estan carregant de %1$d fitxers s\'estan carregant %1$d fitxers (%1$d) + (%1$d) (%1$d) S\'inicien les càrregues S\'està processant %1$d càrrega + S\'estan processant %1$d càrregues S\'estan processant %1$d càrregues %d càrrega + $d càrregues %d càrregues Aquesta imatge quedarà sota llicència %1$s + Aquestes imatges quedaran sota llicència %1$s Aquestes imatges quedaran sota llicència %1$s %1$d pujada + %1$d pujades %1$d pujades Explora @@ -392,7 +398,7 @@ Model de lent Números de sèrie Programari - Comparteix l\'aplicació a través de... + Comparteix l\'aplicació a través de… Informació de la imatge No s’ha trobat cap categoria No s\'han trobat representacions diff --git a/app/src/main/res/values-ce/strings.xml b/app/src/main/res/values-ce/strings.xml index e13e8c040..e25b83e25 100644 --- a/app/src/main/res/values-ce/strings.xml +++ b/app/src/main/res/values-ce/strings.xml @@ -64,7 +64,7 @@ Викиларма Параметраш Викиларма чуйаккха - ДӀадоьдуш ду чуйаккхар... + ДӀадоьдуш ду чуйаккхар… Декъашхочун цӀе Пароль Commons Beta тӀехь хьай цӀарца чугӀо @@ -146,7 +146,7 @@ ЦӀе: Сиднейн операн театр ХӀаъ! Категореш - Чуйолуш... + Чуйолуш… ХӀума хаьржина йац Куьг доцуш Хаамаш бац @@ -297,7 +297,7 @@ Серийн лоьмар Программан кхачам Файл йолу меттиган тӀекхача бакъо ца ло - Йекъа программа, гӀоьнца... + Йекъа программа, гӀоьнца… Суьртан информаци Цхьа а категори ца карийна. Цхьа а хаам ца карийна. @@ -362,7 +362,7 @@ ДӀайаьккхина закладки йукъара Цхьа хӀума галдаьлла. Фонан сурт хӀотто аьтто ца баьлла Фонан сурт санна хӀоттайе - Фонан сурт дӀахӀоттош ду... + Фонан сурт дӀахӀоттош ду… Системин нисдаран гӀирс Бодане Сирла diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml index 4d49ee632..fb4ee05ef 100644 --- a/app/src/main/res/values-cs/strings.xml +++ b/app/src/main/res/values-cs/strings.xml @@ -32,31 +32,44 @@ Obrázek dne %1$d soubor se nahrává + %1$d soubory se nahrávají + %1$d souborů se nahrává %1$d souborů se nahrává - \@string/contributions_subtitle_zero (%1$d) + (%1$d) + (%1$d) (%1$d) Spouští se nahrávání %1$d souboru + Spouští se nahrávání %1$d souborů + Spouští se nahrávání %1$d souborů Spouští se nahrávání %1$d souborů %1$d nahrávání + %1$d nahrávání + %1$d nahrávání %1$d nahrávání Tento obrázek bude zveřejněn pod licencí %1$s + Tyto obrázky budou zveřejněny pod licencí %1$s + Tyto obrázky budou zveřejněny pod licencí %1$s Tyto obrázky budou zveřejněny pod licencí %1$s %1$d nahrání + %1$d nahrávání + %1$d nahrávání %1$d nahrání Probíhá příjem sdíleného obsahu. Zpracování obrázku může chvíli trvat v závislosti na velikosti obrázku a vašem zařízení + Probíhá příjem sdíleného obsahu. Zpracovávání obrázků může chvíli trvat v závislosti na velikosti obrázků a vašem zařízení + Probíhá příjem sdíleného obsahu. Zpracovávání obrázků může chvíli trvat v závislosti na velikosti obrázků a vašem zařízení Probíhá příjem sdíleného obsahu. Zpracování obrázků může chvíli trvat v závislosti na velikosti obrázků a vašem zařízení Objevit diff --git a/app/src/main/res/values-csb/strings.xml b/app/src/main/res/values-csb/strings.xml index 623a48c8c..7cdfb1382 100644 --- a/app/src/main/res/values-csb/strings.xml +++ b/app/src/main/res/values-csb/strings.xml @@ -29,7 +29,7 @@ Wlogùjë mie Wregistrëjë sã Logòwanié - Proszã żdac... + Proszã żdac… Ùdałi logòwanié! Logòwanié nie darzëło sã! Felënk lopka. Proszã spróbòwac znowa. @@ -78,7 +78,7 @@ Sélôj òpinijã (przez e-mail) Felënk wjinstalowónegò e-mailowégò klienta Slédno ùżëwóne kategòrëje - Żdanié na pierszą synchronizacëjã... + Żdanié na pierszą synchronizacëjã… Nie môsz jesz wladowónych òdjimków Próbùjë znowa Òprzestóń @@ -99,7 +99,7 @@ Przëmiôr wladënka: Jo! Kategòrëje - Wladënk... + Wladënk… Felënk nacéchòwaniô Felënk òpisënka Nieznónô licencëja diff --git a/app/src/main/res/values-cy/strings.xml b/app/src/main/res/values-cy/strings.xml index 8c4b4a652..50df9b6d8 100644 --- a/app/src/main/res/values-cy/strings.xml +++ b/app/src/main/res/values-cy/strings.xml @@ -21,25 +21,44 @@ Popeth Llun y Dydd + %1$d ffeil yn uwchlwytho %1$d ffeil yn uwchlwytho + %1$d ffeil yn uwchlwytho + %1$d ffeil yn uwchlwytho + %1$d ffeil yn uwchlwytho %1$d ffeil yn uwchlwytho \@string/contributions_subtitle_zero (%1$d) + (%1$d) + (%1$d) + (%1$d) (%1$d) Cychwyn Uwchlwytho + Dechrau %1$d uwchlwythiad Cychwyn %1$d uwchlwythiad + Dechrau %1$d uwchlwythiad + Dechrau %1$d uwchlwythiad + Dechrau %1$d uwchlwythiad Cychwyn uwchlwytho %1$d ffeil + %1$d uwchlwythiad %1$d uwchlwythiad + %1$d uwchlwythiad + %1$d uwchlwythiad + %1$d uwchlwythiad %1$d uwchlwythiad + Ni chaiff unrhyw ddelweddau eu trwyddedu dan %1$s Caiff y ddelwedd hon ei thrwyddedu yn ôl termau\'r drwydded %1$s + Caiff y delweddau hyn eu trwyddedu dan %1$s + Caiff y delweddau hyn eu trwyddedu dan %1$s + Caiff y delweddau hyn eu trwyddedu dan %1$s Caiff y delweddau hyn eu trwyddedu dan %1$s Archwilio diff --git a/app/src/main/res/values-da/strings.xml b/app/src/main/res/values-da/strings.xml index 3b6822c47..80a82afb5 100644 --- a/app/src/main/res/values-da/strings.xml +++ b/app/src/main/res/values-da/strings.xml @@ -507,7 +507,7 @@ Adgang til medieplacering nægtet Vi kan muligvis ikke automatisk indhente placeringsdata fra billeder, du uploader. Tilføj den passende placering for hvert billede, før du indsender Upload billeder til Wikimedia Commons direkte fra din telefon. Download Commons-appen nu: %1$s - Del app via... + Del app via… Billedoplysninger Ingen kategorier blev fundet Ingen afbildninger fundet @@ -642,9 +642,9 @@ Begrænset forbindelsestilstand Kvalitetsbilleder Kvalitetsbilleder er tegninger eller fotografier, der opfylder visse kvalitetsstandarder (som for det meste er af teknisk karakter) og er værdifulde for Wikimedia-projekter - Genoptager upload... - Sætter upload på pause... - Annullerer upload... + Genoptager upload… + Sætter upload på pause… + Annullerer upload… Annuller upload Du har aktiveret begrænset forbindelsestilstand. Alle uploads er sat på pause og genoptages, når du deaktiverer denne tilstand. Begrænset forbindelsestilstand aktiveret! @@ -784,7 +784,7 @@ Andet problem eller anden information (forklar venligst nedenfor). Din feedback bliver slået op på følgende wiki-side: <a href=\"https://commons.wikimedia.org/wiki/Commons:Mobile_app/Feedback\">Commons:Mobile app/Feedback</a> Er du sikker på, at du vil annullere alle uploads? - Annullerer alle uploads... + Annullerer alle uploads… Uploads Afventer Mislykkedes diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index a6471c1fe..404304021 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -516,7 +516,7 @@ Ungelesene ansehen Beim Auswählen der Bilder ist ein Fehler aufgetreten Bitte warten … - Vorgestellte Bilder sind Bilder von professionellen Fotografen und Zeichnern, die die Gemeinschaft von Wikimedia Commons als diejenigen mit der höchsten Qualität auf der Website ausgewählt hat. + Vorgestellte Bilder sind Bilder von professionellen Fotografen und Zeichnern, die Gemeinschaft von Wikimedia Commons als diejenigen mit der höchsten Qualität auf der Website ausgewählt hat. Über Orte in der Nähe hochgeladene Bilder sind die Bilder, die von entdeckten Orten auf der Karte hochgeladen wurden. Diese Funktion erlaubt es Autoren, eine Dankeschön-Benachrichtigung an Benutzer zu senden, die nützliche Bearbeitungen durchgeführt haben – durch die Benutzung eines kleinen Dankeschön-Links in der Versionsgeschichte oder Unterschiedsseite. Auf Folgemedien kopieren @@ -611,7 +611,7 @@ zu den Lesezeichen hinzugefügt Etwas ist schiefgelaufen. Das Hintergrundbild konnte nicht eingestellt werden Als Hintergrundbild festlegen - Hintergrundbild wird festgelegt. Bitte warten... + Hintergrundbild wird festgelegt. Bitte warten… Systemeinstellung Dunkel Hell diff --git a/app/src/main/res/values-diq/strings.xml b/app/src/main/res/values-diq/strings.xml index 840b0198d..ebb3cfbe4 100644 --- a/app/src/main/res/values-diq/strings.xml +++ b/app/src/main/res/values-diq/strings.xml @@ -62,8 +62,8 @@ Parola, xo vira kerde? Qeyd be Kewno cı - Kerem kerên, bıpawên... - Kerem ke, bıpawe... + Kerem kerên, bıpawên… + Kerem ke, bıpawe… Cıkewtış hewl bi. Nidekeweya de Dosya nêvineya. Dosyê da bine bıcerebnê. @@ -93,7 +93,7 @@ Şınasnayış Bınnuşte Xırabiya kewten-network xeta - Şıma xeylê rayi kerd ke cı kewê, a ser nêvıst. Şıma rê zehmet 2-3 deqey ra tepeya reyna bıcerrebnên. + Şıma xeylê rayi kerd ke cı kewê, a ser nêvıst. Şıma rê zehmet 2–3 deqey ra tepeya reyna bıcerrebnên. Qısur mewni rê, Karber commons dı bloqe biyo. Kodê kamiya raştkerdışi dıfaktorın gani cı kewê. Nidekeweya de @@ -298,7 +298,7 @@ Pêhesnayışê toyê wendışi çıniyê Wendışi bıvêne Nêwendeyan bıvêne - Kerem kerên, bıpawên... + Kerem kerên, bıpawên… Nê resımi raviyarnê Nuştekar Heqa telifi diff --git a/app/src/main/res/values-el/strings.xml b/app/src/main/res/values-el/strings.xml index e3675ef0a..e4b597fb1 100644 --- a/app/src/main/res/values-el/strings.xml +++ b/app/src/main/res/values-el/strings.xml @@ -91,7 +91,7 @@ Σύνδεση Ξεχάσατε τον κωδικό πρόσβασης σας; Εγγραφή - Γίνεται σύνδεση... + Γίνεται σύνδεση… Παρακαλούμε αναμείνετε… Ενημέρωση λεζάντων και περιγραφών Παρακαλούμε αναμείνετε… @@ -204,7 +204,7 @@ Ναι! Περισσότερες πληροφορίες Κατηγορίες - Φόρτωση σε εξέλιξη... + Φόρτωση σε εξέλιξη… Καμία επιλεγμένη Χωρίς λεζάντα Χωρίς περιγραφή @@ -521,7 +521,7 @@ Δεν επιτρέπεται η πρόσβαση στην τοποθεσία πολυμέσων Ενδέχεται να μην μπορούμε να λάβουμε αυτόματα δεδομένα τοποθεσίας από φωτογραφίες που ανεβάζετε. Προσθέστε την κατάλληλη τοποθεσία για κάθε εικόνα πριν την υποβολή Ανεβάστε φωτογραφίες στα Wikimedia Commons απευθείας από το τηλέφωνό σας. Κάντε λήψη της εφαρμογής Commons τώρα: %1$s - Κοινή χρήση εφαρμογής μέσω... + Κοινή χρήση εφαρμογής μέσω… Πληροφορίες Εικόνας Δεν βρέθηκαν Κατηγορίες Δεν βρέθηκαν απεικονίσεις @@ -798,7 +798,7 @@ Άλλο πρόβλημα ή πληροφορίες (παρακαλούμε εξηγήστε παρακάτω). Τα σχόλιά σας δημοσιεύονται στην ακόλουθη σελίδα wiki: <a href=\"https://commons.wikimedia.org/wiki/Commons:Mobile_app/Feedback\">Commons:Εφαρμογή για κινητά/Σχόλια</a> Είστε βέβαιοι ότι θέλετε να ακυρώσετε όλες τις μεταφορτώσεις; - Ακύρωση όλων των μεταφορτώσεων... + Ακύρωση όλων των μεταφορτώσεων… Μεταφορτώσεις Σε εκκρεμότητα Απέτυχε diff --git a/app/src/main/res/values-eo/strings.xml b/app/src/main/res/values-eo/strings.xml index 69673afbe..323c823b2 100644 --- a/app/src/main/res/values-eo/strings.xml +++ b/app/src/main/res/values-eo/strings.xml @@ -78,7 +78,7 @@ Ĉu pasvorto forgesita? Registriĝi Ensalutado - Bonvolu atendi... + Bonvolu atendi… Ĝisdatiganta subtekstojn kaj priskribojn Bonvolu atendi… Ensalutado sukcesis @@ -150,7 +150,7 @@ Sendi viajn komentojn (per retpoŝto) Neniu retpoŝtilo instalita Laste uzitaj kategorioj - Atendas la unuan Sinkronigado... + Atendas la unuan Sinkronigado… Vi ankoraŭ ne alŝutis fotojn. Reprovi Nuligi @@ -190,7 +190,7 @@ Jes! <u>Ekscii pli</u> Kategorioj - Ŝargado... + Ŝargado… Neniu elektita Neniu substeksto Sen priskribo @@ -482,7 +482,7 @@ Vidu legitajn Vidi nelegitojn Eraro okazis dum elektado de bildoj - Bonvolu atendi... + Bonvolu atendi… Elstaraj bildoj estas tiuj bildoj far tre spertaj fotografistoj kaj ilustristoj, kiujn la komunumo de Vikimedia Komunejo elektis kiel iujn de la plej alta kvalito en la retejo. Bildoj Alŝutitaj per Apudaj lokoj estas bildoj alŝutitaj per trovado de lokoj sur la mapo. Tiu funkcio ebligas sendi Dankantan sciigon al farinto de utila redakto – per malgranda dankiga ligilo ĉe la paĝo de historio aŭ diferenco. @@ -504,7 +504,7 @@ Aliro al loko de plurmediaĵo malakceptita Ni eble ne povos aŭtomate akiri pri-lokajn datumojn de bildoj, kiujn vi alŝutas. Bonvolu aldoni la taŭgan lokon por ĉiu bildo antaŭ ol sendi Alŝutu fotojn al Vikimedia Komunejo rekte de via telefono. Elŝutu la Komunejan aplikaĵon nun: %1$s - Diskonigi aplikaĵon per... + Diskonigi aplikaĵon per… Informo pri Bildo Neniu Kategorio troviĝis Neniu bildo-priskribo trovita @@ -636,9 +636,9 @@ Modo por limigita konekto Kvalitaj Bildoj Kvalitaj bildoj estas diagramoj aŭ fotoj kiuj kontentigas certajn normojn pri kvalito (kiuj estas plejparte teknikaj) kaj estas valoraj por Vikimediaj projektoj. - Rekomencante alŝuton... - Paŭzante alŝuton... - Nuligante alŝuton... + Rekomencante alŝuton… + Paŭzante alŝuton… + Nuligante alŝuton… Ĉesigi alŝutadon Vi aktivigis Modon por limigita konekto. Ĉiuj alŝutoj estas paŭzitaj kaj rekomencos post kiam vi malŝaltos ĉi modon. Modo por limigita konekto estas aktivigita. diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index 4e90f6864..218953470 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -51,7 +51,7 @@ * Vivaelcelta * Wizardeck --> - + Página de Facebook de Commons Código fuente de Commons en GitHub Logo de Commons @@ -75,31 +75,38 @@ Foto del día Cargando %1$d archivo + Cargando %1$d archivos Cargando %1$d archivos (%1$d) + (%1$d) (%1$d) Comenzando las subidas Procesando %d carga + Procesando %d cargas Procesando %d cargas %d carga + %1 cargas %1 cargas Esta imagen se publicará bajo la licencia %1$s + Estas imágenes se publicarán bajo la licencia %1$s Estas imágenes se publicarán bajo la licencia %1$s %1$d Subida + %1$d Subidas %1$d Subidas Recepción de contenido compartido. El procesamiento de la imagen puede tardar cierto tiempo, dependiendo del tamaño de la imagen y de tu dispositivo + Recepción de contenido compartido. El procesamiento de las imágenes puede tardar cierto tiempo, dependiendo del tamaño de las imágenes y de tu dispositivo Recepción de contenido compartido. El procesamiento de las imágenes puede tardar cierto tiempo, dependiendo del tamaño de las imágenes y de tu dispositivo Explorar @@ -335,7 +342,7 @@ Omitir tutorial Internet no disponible Error al recuperar las notificaciones - Hubo un error al recuperar la imágen a revisar. Toca refrescar para intentarlo de nuevo. + Hubo un error al recuperar la imágen a revisar. Toca refrescar para intentarlo de nuevo. No se encontró ninguna notificación Traducir Idiomas @@ -477,7 +484,7 @@ Permitir Descartar Por favor, activa el acceso a la ubicación desde Configuración y vuelva a intentarlo. \n\nNota: Es posible que la subida no tenga datos de la ubicación si la aplicación no puede recuperar la ubicación del dispositivo en un intervalo corto. - La cámara dentro de la aplicación necesita el permiso a la ubicación para adjuntarla a sus imágenes en caso de que la ubicación no esté disponible en EXIF. Por favor, permita que la aplicación acceda a su ubicación e inténtelo de nuevo.\n\nNota: Es posible que la subida no tenga los datos de la la ubicación si la aplicación no puede recuperar la ubicación del dispositivo en un intervalo corto. + La cámara dentro de la aplicación necesita el permiso a la ubicación para adjuntarla a sus imágenes en caso de que la ubicación no esté disponible en EXIF. Por favor, permita que la aplicación acceda a su ubicación e inténtelo de nuevo.\n\nNota: Es posible que la subida no tenga los datos de la ubicación si la aplicación no puede recuperar la ubicación del dispositivo en un intervalo corto. La aplicación no registrará la ubicación junto con las tomas debido a la falta del permiso de la ubicación. La aplicación no registrará la ubicación junto con las tomas porque el GPS está apagado Utilizar el selector de fotografías basado en documentos @@ -505,8 +512,8 @@ ¿Está correctamente categorizado? ¿Está dentro de los objetivos del proyecto? ¿Quieres agradecer al colaborador? - Toca en NO para nominar esta imágen para ser borrada si no es para nada útil. - Los logotipos, las capturas de pantalla y los pósteres de películas son habitualmente infracciones a los derechos de autor.\n Toca NO para nominar esta imágen para borrado + Toca en NO para nominar esta imágen para ser borrada si no es para nada útil. + Los logotipos, las capturas de pantalla y los pósteres de películas son habitualmente infracciones a los derechos de autor.\n Toca NO para nominar esta imágen para borrado Tu apreciación animara a %1$s ¡Oh, esto ni siquiera esta categorizado! Esta imagen esta dentro de %1$s categorías. @@ -524,7 +531,7 @@ Compartir registros usando Ver leídas Ver no leidas - Ocurrió un error mientras se elegían imagenes + Ocurrió un error mientras se elegían imágenes Un momento… Las imágenes destacadas son creaciones de talentosos fotógrafos e ilustradores que la comunidad de Wikimedia Commons ha reconocido como las de mayor calidad del sitio. Las imágenes subidas vía Lugares Cercanos son las imágenes que han sido subidas al descubrir lugares en el mapa. @@ -547,7 +554,7 @@ Acceso a la ubicación del archivo multimedia denegado Es posible que no podamos obtener automáticamente los datos de ubicación de las imágenes que suba. Añada la ubicación adecuada a cada imagen antes de enviarla Sube fotos a Wikimedia Commons directamente desde tu celular. Descarga la aplicación de Commons ahora: %1$s - Compartir la aplicación vía... + Compartir la aplicación vía… Información de la imagen No se encontró ninguna categoría No se encontraron representaciones @@ -574,6 +581,7 @@ Éxito Se añade %1$s categoría. + Se añaden %1$s categorías. Se añaden %1$s categorías. No se pudieron añadir las categorías. @@ -582,6 +590,7 @@ Editar las descripciones %1$s Se añade la descripción. + Descripción %1$s se añadieron. Descripción %1$s se añadieron. No se pueden añadir descripciones. @@ -599,7 +608,7 @@ Las coordenadas de la imagen no están actualizadas. No se puede obtener descripciones. Editar descripciones y leyendas - Compartir imagen via + Compartir imagen via Todavía no has hecho ninguna contribución. %s Aún no ha realizado ninguna contribución Cuenta creada @@ -624,7 +633,7 @@ añadido a marcadores Algo salió mal. No se pudo establecer el fondo de pantalla Colocar como fondo de pantalla - Estableciendo el fondo de pantalla. Por favor espere... + Estableciendo el fondo de pantalla. Por favor espere… Seguir sistema Oscuro Claro @@ -682,9 +691,9 @@ Modo de conexión limitada Imágenes de calidad Las imágenes de calidad son diagramas o fotografías que cumplen determinados estándares de calidad (mayormente de carácter técnico) y que son valiosas para proyectos de Wikimedia - Reanudando carga... - Pausando carga... - Cancelando carga... + Reanudando carga… + Pausando carga… + Cancelando carga… Cancelar carga Has habilitado el modo de conexión limitada. Todas las cargas están pausadas y se reanudarán cuando deshabilites este modo. El modo de conexión limitada está encendido. @@ -811,7 +820,8 @@ Guardar archivo GPX %d imagen seleccionada - %d imagenes seleccionadas + %d imágenes seleccionadas + %d imágenes seleccionadas Recuerde que todas las imágenes en una carga múltiple tienen la misma categoría y representación. Si las imágenes no comparten representación y categoría, haga varias cargas por separado. Nota sobre cargas múltiples @@ -819,7 +829,7 @@ Por favor, escriba algunos comentarios. Discusión Escriba algo sobre el elemento \'%1$s\'. Será visible públicamente. - Cancelando todas las subidas... + Cancelando todas las subidas… Subidas Pendiente Falló diff --git a/app/src/main/res/values-eu/strings.xml b/app/src/main/res/values-eu/strings.xml index ff75cbc7f..3dd463b34 100644 --- a/app/src/main/res/values-eu/strings.xml +++ b/app/src/main/res/values-eu/strings.xml @@ -154,7 +154,7 @@ Mesedez, igo bakarrik zuk ateratako edo sortutako irudiak: Naturako elementuak (loreak, animaliak, mendiak) Objektu erabilgarriak (bizikletak, tren geltokiak) - Pertsona famatuak (zure alkatea, zuk ezagututako atleta olinpikoren bat...) + Pertsona famatuak (zure alkatea, zuk ezagututako atleta olinpikoren bat…) Mesedez EZ igo: Autorretratuak edo zure lagunen argazkiak Internetetik jaitsitako irudiak diff --git a/app/src/main/res/values-fa/strings.xml b/app/src/main/res/values-fa/strings.xml index 841160581..4cdd2b87a 100644 --- a/app/src/main/res/values-fa/strings.xml +++ b/app/src/main/res/values-fa/strings.xml @@ -83,7 +83,7 @@ رمز عبور خودتان را فراموش کرده‌اید؟ ثبت نام واردشدن - شکیبا باشید... + شکیبا باشید… ورود موفق! ورود ناموفق! پرونده یافت نشد لطفاً پرونده دیگری را امتحان کنید. @@ -122,7 +122,7 @@ تغییرها بارگذاری جستجوی رده‌ها - جستجو برای موضوعی که در پروندهٔ شما به‌نمایش کشیده‌شده است (مثلا کوه، تاج محل، ...) + جستجو برای موضوعی که در پروندهٔ شما به‌نمایش کشیده‌شده است (مثلا کوه، تاج محل، …) ذخیره تازه کردن فهرست @@ -411,7 +411,7 @@ شما هیچ اعلان خوانده‌شده‌ای ندارید نمایش دیده‌شده مشاهده خوانده نشده ها - لطفاً صبر کنید... + لطفاً صبر کنید… نمونه تصاویری که برای بازگذاری مناسب نیستند از این تصویر صرف نظر کن مدیریت تگ‌های EXIF @@ -423,7 +423,7 @@ مدل لنز شماره سریال نرم‌افزار - اشتراک از طریق... + اشتراک از طریق… اطلاعات عکس هیچ رده‌ای یافت نشد بارگذاری لغو شد @@ -455,7 +455,7 @@ به بوکمارک‌ها افزوده شد مشکل به وجود آمد. به عنوان پس‌زمینه انتخاب نشد. انتخاب به عنوان پس‌زمینه - قرار دادن پس‌زمینه. لطفاً صبر کنید... + قرار دادن پس‌زمینه. لطفاً صبر کنید… سامانه را دنبال کنید تیره روشن diff --git a/app/src/main/res/values-fi/strings.xml b/app/src/main/res/values-fi/strings.xml index 312ebc84c..26328a3e2 100644 --- a/app/src/main/res/values-fi/strings.xml +++ b/app/src/main/res/values-fi/strings.xml @@ -80,7 +80,7 @@ Kirjaudutaan Odota… Päivitetään kuvatekstejä ja kuvauksia - Odota... + Odota… Kirjautuminen onnistui! Kirjautuminen epäonnistui! Tiedostoa ei löytynyt. Yritä toista tiedostoa. @@ -481,7 +481,7 @@ Sarjanumerot Ohjelmisto Lähetä valokuvia suoraan Wikimedia Commonsiin puhelimestasi. Lataa Commons-appi nyt: %1$s - Jaa sovellus... + Jaa sovellus… Kuvan tiedot Luokkia ei löytynyt Kuvauksia ei löytynyt @@ -546,7 +546,7 @@ Lisätty kirjanmerkkeihin Jotain meni väärin. Ei voitu asettaa taustakuvaksi. Aseta taustakuvaksi - Asetetaan taustakuvaksi. Odota... + Asetetaan taustakuvaksi. Odota… Käytä järjestelmän Tumma Vaalea @@ -594,8 +594,8 @@ Rajoitettu yhteistila pois päältä. Jonossa olevat lähetykset kopioidaan nyt. Rajoitettu yhteystila Laatukuvat - Jatketaan lähettämistä... - Keskeytetään lähetys... + Jatketaan lähettämistä… + Keskeytetään lähetys… Peruutetaan tallennusta… Peruuta tallennus Rajoitettu yhteystila on päällä. diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 992f418af..995e4041b 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -46,7 +46,7 @@ * Wladek92 * Y-M D --> - + Page Facebook de Commons Code source Github de Commons Logo de Commons @@ -70,31 +70,38 @@ Image du jour %1$d fichier en cours de téléversement + %1$d fichiers en cours de téléversement %1$d fichiers en cours de téléversement (%1$d) + (%1$d) (%1$d) Démarrage des téléversements %d téléversement en cours + %d téléversements en cours %d téléversements en cours %d téléversement + %d téléversements %d téléversements Cette image sera sous licence %1$s. + Ces images seront sous licence %1$s. Ces images seront sous licence %1$s. %1$d téléversement + %1$d téléversements %1$d téléversements - Réception de contenu partagé. Le traitement de l’image peut prendre un certain temps en fonction de la taille de l’image et de votre matériel. + Réception de contenu partagé. Le traitement de l’image peut prendre un certain temps en fonction de la taille de l’image et de votre matériel. + Réception de contenu partagé. Le traitement des images peut prendre un certain temps en fonction de la taille des images et de votre matériel. Réception de contenu partagé. Le traitement des images peut prendre un certain temps en fonction de la taille des images et de votre matériel. Explorer @@ -113,9 +120,9 @@ Mot de passe oublié ? S’inscrire Connexion - Veuillez patienter... + Veuillez patienter… Mise à jour des légendes et des descriptions - Veuillez patienter... + Veuillez patienter… Connexion réussie ! Échec de la connexion ! Fichier non trouvé. Veuillez en essayer un autre. @@ -185,7 +192,7 @@ Envoyer vos commentaires (par courriel) Aucun client de courriel installé Catégories récemment utilisées - En attente de première synchronisation... + En attente de première synchronisation… Vous n’avez encore téléchargé aucune photo. Réessayer Annuler @@ -225,7 +232,7 @@ Oui ! Davantage d’informations Catégories - Chargement en cours... + Chargement en cours… Aucune catégorie sélectionnée Aucune légende Aucune description @@ -521,7 +528,7 @@ Afficher les lus Afficher les non lus Une erreur est survenue lors de la sélection des images - Veuillez patienter... + Veuillez patienter… Les images en vedette sont des images de photographes et d’illustrateurs très doués que la communauté de Wikimédia Commons a choisies comme étant de la meilleure qualité pour le site. Les images téléversées par « Lieux à proximité » sont les images téléversées lors de la découverte de lieux sur la carte. Cette fonctionnalité permet aux contributeurs d’envoyer une notification de remerciement aux utilisateurs qui font des modifications utiles ― en utilisant un petit lien de remerciement sur la page historique ou sur celle du diff. @@ -543,7 +550,7 @@ Accès à l’emplacement du média refusé Nous ne pourrons pas obtenir automatiquement les données de localisation des images que vous téléchargez. Veuillez ajouter l’emplacement approprié pour chaque image avant de la soumettre. Téléversez des photos sur Wikimedia Commons directement depuis votre téléphone. Téléchargez l’application Commons maintenant : %1$s - Partager l’application via... + Partager l’application via… Informations sur l’image Aucune catégorie trouvée Aucun élément représenté trouvé @@ -570,6 +577,7 @@ Succès La catégorie %1$s est ajoutée. + Les catégories %1$s sont ajoutées. Les catégories %1$s sont ajoutées. Impossible d’ajouter des catégories. @@ -578,6 +586,7 @@ Modifier les éléments représentés L’élément représenté %1$s est ajouté. + Les éléments représentés %1$s sont ajoutés. Les éléments représentés %1$s sont ajoutés. Impossible d’ajouter des éléments représentés. @@ -620,7 +629,7 @@ Ajouté aux favoris Un problème est survenu. Impossible d’installer le fond d’écran. Définir comme fond d’écran - Installation du fond d’écran. Veuillez patienter... + Installation du fond d’écran. Veuillez patienter… Suivre le système Sombre Clair @@ -678,9 +687,9 @@ Mode de connexion limitée Images de qualité Les images de qualité sont des diagrammes ou des photographies qui respectent certains standards de qualité (qui sont, par nature, essentiellement techniques) et sont précieuses pour les projets Wikimedia. - Reprise du téléversement... - Mise en pause du téléversement... - Annulation du téléversement... + Reprise du téléversement… + Mise en pause du téléversement… + Annulation du téléversement… Annuler le téléversement Vous avez activé le mode de connexion limitée. Tous les téléversements sont suspendus et reprendront une fois ce mode désactivé. Le mode de connexion limitée est actif. @@ -809,6 +818,7 @@ Fichier GPX enregistré %d image sélectionnée + %d images sélectionnées %d images sélectionnées Souvenez-vous que toutes les images dans une importation multiple prennent les mêmes catégories et descriptions. Si les images de partagent pas les descriptions et catégories, veuillez effectuer plusieurs importations séparées. @@ -822,7 +832,7 @@ Autre problème ou information (merci d\'expliquer ci-dessous). Vos commentaires sont publiés sur la page wiki suivante : <a href=\"https://commons.wikimedia.org/wiki/Commons:Mobile_app/Feedback\">Commons:Mobile app/Feedback</a> Êtes-vous sûr de vouloir annuler tous les téléchargements ? - Annulation de tous les téléchargements... + Annulation de tous les téléchargements… Téléversements En attente Échec diff --git a/app/src/main/res/values-gcr/strings.xml b/app/src/main/res/values-gcr/strings.xml index b0ec66423..4659eecf1 100644 --- a/app/src/main/res/values-gcr/strings.xml +++ b/app/src/main/res/values-gcr/strings.xml @@ -38,9 +38,9 @@ Ou bliyé ou Kodsigré ? Enskri oukò Konnègsyon - Souplé antann... + Souplé antann… Mizajou di léjann-yan ké dèskripsyon-yan - Souplé antann... + Souplé antann… Konnègsyon bon ! Konnègsyon pabon ! Fiché pa trouvé. Souplé éséyé ké rounòt. @@ -96,7 +96,7 @@ Enren ! Plis lenfòrmasyon Katégori-ya - Chajman ka fèt... + Chajman ka fèt… Pyès katégori sélègsyonnen Pyès léjann Pyès dèskripsyon diff --git a/app/src/main/res/values-gl/strings.xml b/app/src/main/res/values-gl/strings.xml index 1740c1890..e11716a51 100644 --- a/app/src/main/res/values-gl/strings.xml +++ b/app/src/main/res/values-gl/strings.xml @@ -452,7 +452,7 @@ Modelo de lente Números de serie Software - Compartir a aplicación vía... + Compartir a aplicación vía… Información da imaxe Non se atoparon categorías Cancelouse a carga diff --git a/app/src/main/res/values-hi/strings.xml b/app/src/main/res/values-hi/strings.xml index 50a04319b..237583853 100644 --- a/app/src/main/res/values-hi/strings.xml +++ b/app/src/main/res/values-hi/strings.xml @@ -39,7 +39,6 @@ %1$d फ़ाइलें अपलोड हो रहीं - \@string/contributions_subtitle_zero (%1$d) (%1$d) @@ -70,8 +69,8 @@ पासवर्ड भूल गये? खाता बनायें लॉग इन हो रहा है - कृपया प्रतीक्षा करें... - कृपया प्रतीक्षा करें... + कृपया प्रतीक्षा करें… + कृपया प्रतीक्षा करें… लॉग इन सफल! लॉग इन विफल! फ़ाइल नहीं मिली, कृपया अन्य फ़ाइल से प्रयास करें। @@ -350,7 +349,7 @@ रद्द करें वार्ता क्या आप वाकई सभी अपलोड रद्द करना चाहते हैं? - सभी अपलोड रद्द किये जा रहे हैं... + सभी अपलोड रद्द किये जा रहे हैं… अपलोड लंबित विफल हुआ diff --git a/app/src/main/res/values-hr/strings.xml b/app/src/main/res/values-hr/strings.xml index d2d731c39..414f0dd40 100644 --- a/app/src/main/res/values-hr/strings.xml +++ b/app/src/main/res/values-hr/strings.xml @@ -15,19 +15,22 @@ Slika dana Postavlja se %1$d datoteka + Postavlja se %1$d datoteke Postavljaju se %1$d datoteke - \@string/contributions_subtitle_zero %1$d postavljena datoteka + %1$d postavljena datoteke %1$d postavljene datoteke Započeto %1$d postavljanje + Započinjem %1$d postavljanja Započeta %1$d postavljanja %1$d postavljanje + %1$d postavljanja %1$d postavljanja Ova će slika biti licencirana pod %1$s @@ -46,7 +49,7 @@ Zaboravljena zaporka? Otvori račun Prijava - Molimo pričekajte ... + Molimo pričekajte … Prijava uspješna! Prijava neuspješna! Datoteka nije pronađena. Molimo probajte drugu. @@ -104,7 +107,7 @@ Pošaljite povratnu informaciju (putem elektroničke pošte) Klijent za elektroničku poštu nije instaliran Nedavno rabljene kategorije - Pričekajte za prvu sinkronizaciju... + Pričekajte za prvu sinkronizaciju… Nemate još postavljenih slika. Pokušaj ponovo Odustani @@ -144,7 +147,7 @@ Da! Više informacija Kategorije - Učitavanje... + Učitavanje… Ništa nije odabrano Nema opisa Nepoznata licencija @@ -193,7 +196,7 @@ Stranica datoteke na Zajedničkom poslužitelju Stavka na Wikidati Članak na Wikipediji - Opišite medij što je više moguće: gdje je napravljen, što prikazuje,... Opišite objekte ili osobe. Napišite informacije koje ne mogu biti lako okrivene, npr. doba dana ako je u pitanju pejzaž. Ako medij prikazuje nešto neobično, molimo objasnite što je neobično. + Opišite medij što je više moguće: gdje je napravljen, što prikazuje,… Opišite objekte ili osobe. Napišite informacije koje ne mogu biti lako okrivene, npr. doba dana ako je u pitanju pejzaž. Ako medij prikazuje nešto neobično, molimo objasnite što je neobično. Mogući problemi s ovom slikom: Slika je pretamna. Slika je mutna. @@ -281,7 +284,7 @@ Promijenio/la sam mišljenje, ne želim da više bude javno vidljivo Toliko ste pridonijeli projektu da se naš sustav za računanje postignuća ne može nositi s time. To je vrhunsko postignuće. Došlo je do pogrješke tijekom obradbe slike. Molimo Vas, pokušajte ponovo! - Molimo Vas, pričekajte ... + Molimo Vas, pričekajte … Preskoči ovu sliku Zadani jezik za opis Pokušavanje ažuriranja kategorija. @@ -293,7 +296,7 @@ Dodano u oznake Nešto je pošlo po zlu. Ne možemo postaviti pozadinu Postavi kao pozadinu - Postavljanje pozadine. Molimo, pričekajte... + Postavljanje pozadine. Molimo, pričekajte… Zadano Tamno Svijetlo diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml index aefc17d9d..eb3438674 100644 --- a/app/src/main/res/values-hu/strings.xml +++ b/app/src/main/res/values-hu/strings.xml @@ -441,7 +441,7 @@ Sorozatszámok Szoftver Képek feltöltése Wikimedia Commons-ba közvetlenül a telefonodról. Töltsd le a Commons applikációt most: %1$s - Alkalmazás megosztása ezzel... + Alkalmazás megosztása ezzel… Képinformáció Nem található kategória Megszakított feltöltés @@ -474,7 +474,7 @@ Híd, múzeum, szálloda, stb. A belépés nem sikerült, kérj új jelszót. Beállítás háttérképnek - Beállítás háttérképnek. Kérem várjon... + Beállítás háttérképnek. Kérem várjon… Rendszerbeállítás követése Sötét Világos diff --git a/app/src/main/res/values-in/strings.xml b/app/src/main/res/values-in/strings.xml index 219fa4521..8fff554e3 100644 --- a/app/src/main/res/values-in/strings.xml +++ b/app/src/main/res/values-in/strings.xml @@ -61,7 +61,6 @@ %1$d Unggahan - Sedang menerima konten yang dibagikan. Memproses gambar mungkin memerlukan waktu lebih lama tergantung pada ukuran gambar dan perangkat Anda Sedang menerima konten yang dibagikan. Memproses gambar mungkin memerlukan waktu lebih lama tergantung pada ukuran gambar dan perangkat Anda Jelajahi @@ -82,7 +81,7 @@ Memasuki log Silakan tunggu… Memperbarui takarir dan deskripsi - Mohon tunggu... + Mohon tunggu… Berhasil masuk log! Gagal masuk log! Berkas tidak ditemukan. Silakan coba berkas lain. @@ -191,7 +190,7 @@ Ya! Informasi selengkapnya Kategori - Memuat... + Memuat… Tidak ada yang dipilih Tanpa takarir Tidak ada keterangan @@ -497,7 +496,7 @@ Akses lokasi media ditolak Kami mungkin tidak dapat memperoleh data lokasi secara otomatis dari gambar yang Anda unggah. Harap tambahkan lokasi yang sesuai untuk setiap gambar sebelum mengirimkannya Mengunggah foto ke Wikimedia Commons secara langsung dari telepon Anda. Unduh aplikasi Commons sekarang: %1$s - Bagikan aplikasi lewat... + Bagikan aplikasi lewat… Info Gambar Kategori tidak ditemukan Penggambaran tidak ditemukan @@ -523,7 +522,6 @@ Pembaruan kategori Berhasil - Kategori %1$s ditambahkan. Kategori %1$s ditambahkan. Tidak bisa menambahkan kategori. @@ -569,7 +567,7 @@ Ditambahkan ke pembatas Terjadi kesalahan. Tidak bisa menetapkan wallpaper Jadikan Wallpaper - Sedang menetapkan Wallpaper. Tolong tunggu... + Sedang menetapkan Wallpaper. Tolong tunggu… Ikuti sistem Gelap Terang @@ -625,9 +623,9 @@ Mode Koneksi Terbatas Gambar Berkualitas Gambar berkualitas adalah diagram atau foto yang memenuhi standar kualitas tertentu (yang sifatnya teknis) dan berharga bagi proyek Wikimedia - Melanjutkan unggahan... - Menunda unggahan... - Membatalkan pengunggahan... + Melanjutkan unggahan… + Menunda unggahan… + Membatalkan pengunggahan… Batalkan pengunggahan Anda menyalakan mode koneksi terbatas. Semua pengunggahan ditunda dan akan dilanjutkan begitu Anda mematikan mode ini. Mode sambungan terbatas sedang menyala. @@ -743,7 +741,7 @@ %d gambar dipilih Bicara - Membatalkan semua unggahan... + Membatalkan semua unggahan… Unggahan Menunggu Gagal diff --git a/app/src/main/res/values-io/strings.xml b/app/src/main/res/values-io/strings.xml index 51fe16441..994b1c3d3 100644 --- a/app/src/main/res/values-io/strings.xml +++ b/app/src/main/res/values-io/strings.xml @@ -70,9 +70,9 @@ Ka tu obliviis tua pasovorto? Enirar Eniranta - Voluntez vartar... + Voluntez vartar… Aktualiganta etiketi e deskripturi - Voluntez vartar... + Voluntez vartar… Eniro sucesoza! Eniro faliis! Arkivo ne trovita. Voluntez probar altr arkivo. @@ -142,7 +142,7 @@ Sendez komenti (per e-posto) Nula kliento di e-posto instalesis Kategorii recente uzita - Vartanta unesma sinkronigo... + Vartanta unesma sinkronigo… Vu ankore ne sendis fotografuri. Riprobar Nuligar @@ -180,7 +180,7 @@ Yes! Plusa informo Kategorii - Karganta... + Karganta… Nulo selektesis Nula deskripto-texto Nula deskripto @@ -410,7 +410,7 @@ Vu ne lektis irga avizo Vidar lektita Vidar ne-lektata - Vartez... + Vartez… Kopiita Exempli pri bona imaji por sendar a Commons Saltez ca imajo @@ -472,7 +472,7 @@ Ajusti Adjuntita marko-rubandi Uzar kom skreno-kovrilo - Kreanta skreno-kovrilo. Voluntez vartar... + Kreanta skreno-kovrilo. Voluntez vartar… Koloro obskura Koloro klara Charjez pluse @@ -500,7 +500,7 @@ Uzita Mea rango Imaji di qualeso - Nuliganta sendajo... + Nuliganta sendajo… Cesar kargajo Lektez pluse En omna idiomi diff --git a/app/src/main/res/values-is/strings.xml b/app/src/main/res/values-is/strings.xml index 417652953..ac64fbf2c 100644 --- a/app/src/main/res/values-is/strings.xml +++ b/app/src/main/res/values-is/strings.xml @@ -3,7 +3,7 @@ * Sveinki * Sveinn í Felli --> - + Commons Facebook-síðan Grunnkóði Commons á Github Táknmerki Commons @@ -51,7 +51,7 @@ %1$d innsendingar - Tek við deildu efni. Meðhöndlun myndarinnar gæti tekið einhvern tíma, sem fer eftir stærð myndarinnar og gerð tækisins þíns + Tek við deildu efni. Meðhöndlun myndarinnar gæti tekið einhvern tíma, sem fer eftir stærð myndarinnar og gerð tækisins þíns Tek við deildu efni. Meðhöndlun myndarinnar gæti tekið einhvern tíma, sem fer eftir stærð myndaanna og gerð tækisins þíns Uppgötva @@ -138,7 +138,7 @@ Senda umsögn (með tölvupósti) Ekkert tölvupóstforrit er uppsett Nýlega notaðir flokkar - Bíð eftir fyrstu samstillingu... + Bíð eftir fyrstu samstillingu… Þú ert ekki ennþá búin(n) að senda inn neinar myndir. Reyna aftur Hætta við @@ -477,7 +477,7 @@ Hugbúnaður Aðgangi að staðsetningu gagnamiðla hafnað Sendu myndir inn á Wikimedia Commons beint úr símanum þínum. Sæktu Commons-appið núna: %1$s - Deila forriti með... + Deila forriti með… Upplýsingar í mynd Engir flokkar fundust Engar myndlýsingar fundust diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index f40863870..e9aa8934e 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -46,31 +46,38 @@ Foto del giorno %1$d file in caricamento + %1$d file in caricamento %1$d file in caricamento (%1$d) + (%1$d) (%1$d) Avvio del caricamento Elaborando %d caricamento + Elaborando %d caricamenti Elaborando %d caricamenti %d caricamento + %d caricamenti %d caricamenti Questa immagine sarà rilasciata in base alla licenza %1$s + Queste immagini saranno rilasciate in base alla licenza %1$s Queste immagini saranno rilasciate in base alla licenza %1$s %1$d caricamento + %1$d caricamenti %1$d caricamenti Ricezione di contenuti condivisi. L\'elaborazione dell\'immagine potrebbe richiedere del tempo a seconda delle dimensioni dell\'immagine e del dispositivo + Ricezione di contenuti condivisi. L\'elaborazione delle immagini potrebbe richiedere del tempo a seconda delle dimensioni delle immagini e del dispositivo Ricezione di contenuti condivisi. L\'elaborazione delle immagini potrebbe richiedere del tempo a seconda delle dimensioni delle immagini e del dispositivo Esplora @@ -516,7 +523,7 @@ Accesso alla posizione multimediale negato Potremmo non essere in grado di ottenere automaticamente i dati sulla posizione dalle immagini caricate. Si prega di aggiungere la posizione appropriata per ciascuna immagine prima di inviarla Carica foto su Wikimedia Commons direttamente dal tuo telefono. Scarica subito l\'app Commons: %1$s - Condividi applicazione tramite... + Condividi applicazione tramite… Informazioni sull\'immagine Nessuna categoria trovata Nessuna definizione trovata @@ -543,6 +550,7 @@ Successo Categoria %1$s aggiunta. + Categorie %1$s aggiunte. Categorie %1$s aggiunte. Non è stato possibile aggiungere le categorie. @@ -575,7 +583,7 @@ Esiste Necessita della fotografia Tipo di luogo: - Ponte, museo, albergo, ecc... + Ponte, museo, albergo, ecc… Si è verificato un errore durante l\'accesso. Devi reimpostare la password! MEDIA CLASSI FIGLIE @@ -588,7 +596,7 @@ Aggiungi ai preferiti Qualcosa è andato storto. Non è stato possibile impostare lo sfondo schermo Imposta come sfondo - Impostazione di sfondo in corso... + Impostazione di sfondo in corso… Segui sistema Scuro Chiaro @@ -758,6 +766,7 @@ Sessione scaduta. Accedi nuovamente. %d immagine selezionata + %d immagini selezionate %d immagini selezionate Questo posto non ha ancora una foto, scattane una! diff --git a/app/src/main/res/values-iw/strings.xml b/app/src/main/res/values-iw/strings.xml index 0b512102b..4b8c51f6c 100644 --- a/app/src/main/res/values-iw/strings.xml +++ b/app/src/main/res/values-iw/strings.xml @@ -45,44 +45,37 @@ מועלה קובץ אחד מועלים %1$d קבצים - מועלים %1$d קבצים מועלים %1$d קבצים (%1$d) (%1$d) - (%1$d) (%1$d) ההעלאות מתחילות עיבוד העלאה עיבוד d% העלאות - עיבוד d% העלאות עיבוד d% העלאות העלאה אחת %d העלאות - %d העלאות %d העלאות התמונה הזאת תפורסם ברישיון %1$s התמונות האלה תפורסמנה ברישיון %1$s - התמונות האלה תפורסמנה ברישיון %1$s התמונות האלה תפורסמנה ברישיון %1$s העלאה אחת %1$d העלאות - %1$d העלאות %1$d העלאות מתקבל תוכן שיתופי. עיבוד התמונה עשוי לארוך זמן מה כתלות בגודל התמונה והמכשיר שלך מתקבל תוכן שיתופי. עיבוד התמונות עשוי לארוך זמן מה כתלות בגודל התמונות והמכשיר שלך - מתקבל תוכן שיתופי. עיבוד התמונות עשוי לארוך זמן מה כתלות בגודל התמונות והמכשיר שלך מתקבל תוכן שיתופי. עיבוד התמונות עשוי לארוך זמן מה כתלות בגודל התמונות והמכשיר שלך לחקור @@ -101,9 +94,9 @@ שכחת את הסיסמה? רישום כניסה לחשבון - נא להמתין... + נא להמתין… עדכון כיתובים ותיאורים - נא להמתין... + נא להמתין… הכניסה הצליחה! הכניסה נכשלה! הקובץ לא נמצא. נא לנסות קובץ אחר. @@ -213,7 +206,7 @@ כן! מידע נוסף קטגוריות - בטעינה... + בטעינה… לא נבחר דבר אין כיתוב אין תיאור @@ -508,7 +501,7 @@ הצגת התראות שנקראו הצגת התראות שלא נקראו אירעה שגיאה בעת בחירת תמונות - נא להמתין... + נא להמתין… תמונות מובילות הן תמונות של צלמים ומאיירים מיומנים אותם בחרה קהילת ויקישיתוף בזכות איכות התוצר שהם תורמים לאתר. תמונות שהועלו דרך מקומות בסביבה הן התמונות שנשלחות על ידי גילוי מקומות במפה. תכונה זו מאפשרת לעורכים לשלוח מסרי תודה למשתמשים שביצעו עריכות מועילות - על ידי שימוש בקישור תודה בדף ההיסטוריה או בדף ההבדלים. @@ -530,7 +523,7 @@ הגישה למקום המדיה נדחתה ייתכן שלא נוכל לאתר את נתוני המקום מתמונות שהעלית. נא להוסיף את המקום המתאים לכל תמונה בטרם הגשתה כדי להעלות תמונות לוויקינתונים של ויקימדיה ישר מהטלפון שלך. אתם מוזמנים להוריד את היישום של ויקינתונים עכשיו: %1$s - שיתוף היישום דרך... + שיתוף היישום דרך… פרטי תמונה לא נמצאו קטגוריות לא נמצאו מוצגים @@ -558,7 +551,6 @@ נוספה קטגוריה. נוספו %1$s קטגוריות. - נוספו %1$s קטגוריות. נוספו %1$s קטגוריות. לא ניתן להוסיף קטגוריות. @@ -568,7 +560,6 @@ נוסף מוצג %1$s נוספו המוצגים %1$s - נוספו המוצגים %1$s נוספו המוצגים %1$s לא היה אפשר להוסיף מוצגים. @@ -611,7 +602,7 @@ נוסף לסימניות משהו השתבש. לא היה אפשר להגדיר את הטפט להגדיר בתור טפט - הגדרת טפט. נא להמתין... + הגדרת טפט. נא להמתין… מערכת מעקב כהה בהירה @@ -671,7 +662,7 @@ תמונות איכות הן תרשימים או תמונות שעומדות בתקני איכות מסוימים (שמטבעם בעיקר טכניים) והן בעלות ערך למיזמי ויקימדיה ההעלאה ממשיכה… ההעלאה מושהית… - ביטול ההעלאה... + ביטול ההעלאה… ביטול ההעלאה הפעלת מצב חיבור מוגבל. כל ההעלאות מושהות ותמשכנה לאחר השבתת המצב הזה. מצב חיבור מוגבל פעיל. @@ -801,7 +792,6 @@ נבחרה תמונה אחת נבחרו שתי תמונות - נבחרו %d תמונות נבחרו %d תמונות נא לזכור שכשמועלות כמה תמונות, כולן מקבלות את אותן הקטגוריות והמוצגים. אם התמונות אינן חולקות מוצגים וקטגוריות, נא לעשות כמה העלאות נפרדות. @@ -815,7 +805,7 @@ בעיה אחרת או מידע אחר (נא להסביר הלאה). המשוב שלך מתפרסם בדף הוויקי הבא: <a href=\"https://commons.wikimedia.org/wiki/Commons:Mobile_app/Feedback\">Commons:Mobile app/Feedback</a> האם ברצונך באמת לבטל את כל ההעלאות? - ביטול כל ההעלאות... + ביטול כל ההעלאות… העלאות ממתינות נכשלו diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index f20b986f8..f60bb30dd 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -44,7 +44,6 @@ %1$d 件のファイルをアップロード中 - (%1$d) (%1$d) アップロードを開始中です @@ -55,14 +54,12 @@ %d 件のアップロード - この画像は%1$sライセンスのもとにアップロードされます これらの画像は%1$sライセンスのもとにアップロードされます %1$d 件のアップロード - 共有コンテンツを受信中です。 この画像の投稿の処理には、サイズやご使用の機器により時間がかかる事があります 共有コンテンツの受信中です。投稿画像の処理には、サイズやご使用の機器により時間がかかる事があります 探索 @@ -560,7 +557,7 @@ ブックマークに追加 問題が発生しました。壁紙を設定できませんでした。 壁紙として設定 - 壁紙を設定中。お待ちください... + 壁紙を設定中。お待ちください… システムのまま ダーク ライト diff --git a/app/src/main/res/values-kab/strings.xml b/app/src/main/res/values-kab/strings.xml index 40eb01629..eb90e4a23 100644 --- a/app/src/main/res/values-kab/strings.xml +++ b/app/src/main/res/values-kab/strings.xml @@ -47,8 +47,8 @@ Qqen Tettuḍ awal uffir? Jerred - Tuqqna... - Rǧu... + Tuqqna… + Rǧu… Tuqqna tedda! Tqqna ur teddi ara! Ulac afaylu. Ɛreḍ wayeḍ ma ulac aɣilif. @@ -100,7 +100,7 @@ Azen tikti (s yimayl) Ulac amsaɣ n yimayl ibedden Taggayin yettwasqedcenmelmi kan - Araǧu n umtawi amezwaru... + Araǧu n umtawi amezwaru… Ur tsuliḍ ara yakan tiwlafin. Ɛref̣ tikelt-nniḍen Sefsex @@ -130,7 +130,7 @@ Tɣileḍ igarrez? Ih! Taggayin - Asali... + Asali… Ula d yiwet ur tettwafren Ulac aglam Turagt tarussint diff --git a/app/src/main/res/values-ko/strings.xml b/app/src/main/res/values-ko/strings.xml index b729838b9..3703d373f 100644 --- a/app/src/main/res/values-ko/strings.xml +++ b/app/src/main/res/values-ko/strings.xml @@ -43,28 +43,22 @@ 검색 뷰 오늘의 이미지 - %1$d개의 파일을 올리는 중 %1$d개의 파일을 올리는 중 - (%1$d) (%1$d) 파일 올리기 - %1$d장의 업로드를 처리하는 중입니다 %1$d장의 업로드를 처리하는 중입니다 - %d개 업로드 %d개 업로드 - 이 그림은 %1$s에 따라 사용이 허가됩니다 이 그림은 %1$s에 따라 사용이 허가됩니다 - %1$d개 업로드 %1$d개 업로드 찾아보기 @@ -85,7 +79,7 @@ 로그인 중 기다려 주세요… 캡션 및 설명를 업데이트하는 중 - 기다려 주십시오... + 기다려 주십시오… 로그인 성공! 로그인 실패! 파일을 찾을 수 없습니다. 다른 파일을 사용해 주십시오. @@ -456,7 +450,7 @@ 읽은 항목 보기 읽지 않은 항목 보기 이미지 선택 도중 오류가 발생했습니다 - 기다려 주십시오... + 기다려 주십시오… 다음 미디어로 복사 복사했습니다 공용에 업로드할 좋은 이미지의 예 @@ -471,7 +465,7 @@ 렌즈 모델 일련 번호 소프트웨어 - 앱 공유... + 앱 공유… 이미지 정보 분류가 없습니다 서술이 발견되지 않았습니다 @@ -529,7 +523,7 @@ 북마크에 추가됨 무언가 잘못되었습니다. 배경화면을 설정하지 못했습니다 배경화면으로 설정 - 배경화면을 설정 중입니다. 기다려 주십시오... + 배경화면을 설정 중입니다. 기다려 주십시오… 어두운 밝은 위치 설정을 열지 못했습니다. 위치를 수동으로 켜주세요 diff --git a/app/src/main/res/values-krc/strings.xml b/app/src/main/res/values-krc/strings.xml index b97684821..be63e9db5 100644 --- a/app/src/main/res/values-krc/strings.xml +++ b/app/src/main/res/values-krc/strings.xml @@ -143,7 +143,7 @@ Оюмунгу билдир (эл. почта бла) Почта клиент къурулмагъанды Кёб болмай хайырланнган категорияла - Биринчи синхронизацияны сакълаб турады... + Биринчи синхронизацияны сакълаб турады… Алкъын джюкленнген фотосуратыгъыз джокъду. Джангыдан сына Ызына ал @@ -498,7 +498,7 @@ Медиа локациягъа джетишиу уналмады Джюклеген суратладан локация билгилени автомат халда алмазгъа боллукъбуз. Тилейбиз, джибериуден алгъа хар сурат ючюн келишген локацияны къошугъуз Фотосуратланы телефонугъуздан туура Викигёзеннге джюклегиз. Гёзен Къошакъны энди эндиригиз: %1$s - Къошакъны буну бла юлюшле... + Къошакъны буну бла юлюшле… Сурат Информация Категорияла табылмадыла Танытыула табылмадыла @@ -575,7 +575,7 @@ Китаб белгилеге къошулду Не эсе да терс кетди. Къабыргъа къагъыт къурулалмады Къабыргъа къагъыт эт - Къабыргъа Къагъыт къурула турады. Тилейбиз сакълагъыз... + Къабыргъа Къагъыт къурула турады. Тилейбиз сакълагъыз… Системаны джарашдыр Къарангы Джарыкъ @@ -633,9 +633,9 @@ Чекленнген Байланыу Режим Агъачлары Мийик Суратла Агъачлы суратла, белгили агъач стандартларына (асламысыны техника халы болады) келишген эмда Викимедиа проектле ючюн багъалы болгъан диаграммала неда фотосуратладыла - Джюклениу андан ары бардырылады... - Джюклениу туракъланады... - Джюклениу ызына алынады... + Джюклениу андан ары бардырылады… + Джюклениу туракъланады… + Джюклениу ызына алынады… Джюклеуню Ызына Ал Чекли байланыу режимни джандырдыгъыз. Бютеу джюклениуле туракълатыллыкъдыла эмда бу режимни джукълатсагъыз, тохтагъан джерден башларыкъдыла. Чекленнген байланыу режим джандырылгъанды. diff --git a/app/src/main/res/values-ku/strings.xml b/app/src/main/res/values-ku/strings.xml index 506e9e4b4..d9d5b65b9 100644 --- a/app/src/main/res/values-ku/strings.xml +++ b/app/src/main/res/values-ku/strings.xml @@ -70,8 +70,8 @@ Te şîfreya xwe ji bîr kir? Xwe tomar bike Têdikeve - Ji kerema xwe piçek bisekine ... - Xêra xwe hinek bisekine... + Ji kerema xwe piçek bisekine … + Xêra xwe hinek bisekine… Têketin bi ser ket! Têketin bi ser neket! Dosye nehat dîtin. Ji kerema xwe re dosyeyek din biceribîne. @@ -183,7 +183,7 @@ Wêneyên Barkirî Wêneyê din Belê, çima na - Ji kerema xwe piçek bisekine ... + Ji kerema xwe piçek bisekine … Wêne tevlî Wîkîpediyayê bike Tu dixwazî vê wêneyê tevlî gotara Wîkîpediyayê ya bi zimanê %1$s bikî? Pişrast bike diff --git a/app/src/main/res/values-kum/strings.xml b/app/src/main/res/values-kum/strings.xml index 8112afea6..ab657b354 100644 --- a/app/src/main/res/values-kum/strings.xml +++ b/app/src/main/res/values-kum/strings.xml @@ -49,7 +49,7 @@ Юклев уьлгю: Дюр! Категориялар - Юклев... + Юклев… Бир зат сайланмагъан Тасвири ёкъ Пикирлешивлер ёкъ diff --git a/app/src/main/res/values-kus/strings.xml b/app/src/main/res/values-kus/strings.xml index 99fb8c1f7..02abd4ea1 100644 --- a/app/src/main/res/values-kus/strings.xml +++ b/app/src/main/res/values-kus/strings.xml @@ -62,9 +62,9 @@ Fʋ tami fʋ paaswɛɛtɛ? Yɔ\'ɔgin kpɛn\' Kpɛn\'ɛdnɛ - M bɛlimnɛ gu\'usim... + M bɛlimnɛ gu\'usim… Maligim maal pian\'azut nɛ pa\'alʋg nam - M bɛlimnɛ gu\'usim... + M bɛlimnɛ gu\'usim… Kpɛn\'ɛb nyaŋya Kpɛn\'ɛb gʋ\'ʋŋya M Pʋ nyɛ faal la. M bɛlimnɛ tiakim faal si\'a. @@ -169,7 +169,7 @@ Ɛɛn! Labaya bɛdigʋ Buudi kɔn\'ɔb-kɔn\'ɔb - Bɛ tʋʋma ni... + Bɛ tʋʋma ni… Pʋ gaŋ si\'ela Pian\'azug kae Pa\'alʋg kae @@ -400,7 +400,7 @@ Gɔsim dinɛ ka fʋ karim sa Gɔsim dinɛ ka fʋ nam pʋ karim Daʋŋʋ kidig footonam la nɔkirin - M bɛlimnɛ gu\'usim... + M bɛlimnɛ gu\'usim… Footo banɛ ka fʋ kpɛn\'ɛsi dɔlis zin\'ibanɛ be yamma anɛ footo banɛ ka fʋ kpɛn\'ɛs ka di yinɛ fʋn nyɛ di map ni la. Yaam paas media banɛ bɛ tuon Yaaiya @@ -418,7 +418,7 @@ Serial Numbers Software Pʋ bas suor ye fʋ kpɛn\' midia zin\'iginɛ - Pʋdigim app la dɔlis... + Pʋdigim app la dɔlis… Footo labaar Pʋ paam buudinama Pʋ nyɛ nwɛnnɛm si\'aa. @@ -492,7 +492,7 @@ Ba zaŋi paas bookmarknamin Daʋŋsi\'a naam. Pʋ nyaŋi maal nibdaa footo la Maalimi fʋ nindaa footo la - Maanɛ nindaa footo. M bɛlimnɛ gu\'usim... + Maanɛ nindaa footo. M bɛlimnɛ gu\'usim… Dɔl sistɛm la Lik Nɛɛsim @@ -538,9 +538,9 @@ Bas suor ye di tʋm saŋa bi\'ela! Atʋm bi\'ela zi\'esim Footo sʋma - Lɛm pin\'in kpɛn\'ɛsʋg... - Gu\'om kpɛn\'ɛsʋg... - Basid kpɛn\'ɛsʋg... + Lɛm pin\'in kpɛn\'ɛsʋg… + Gu\'om kpɛn\'ɛsʋg… + Basid kpɛn\'ɛsʋg… Basim kpɛn\'ɛsʋg Bas suor ye di tʋm saŋa bi\'ela. Nwɛnnɛm nam diff --git a/app/src/main/res/values-ky/strings.xml b/app/src/main/res/values-ky/strings.xml index 2eb2fcf2f..8b2ab6b95 100644 --- a/app/src/main/res/values-ky/strings.xml +++ b/app/src/main/res/values-ky/strings.xml @@ -21,7 +21,6 @@ %1$d файл жүктөлүүдө - Азырынча жүктөөлөр жок 1 жүктөө %1$d жүктөө @@ -137,7 +136,7 @@ Жүктөөнү жокко чыгаруу Артка баскычын колдонуу менен бул жүктөө жокко чыгарылат жана сиз ийгиликти жоготосуз Жүктөөнү улантуу - Күтө туруңуз... + Күтө туруңуз… Аталыш Сыпаттама Элементтер diff --git a/app/src/main/res/values-lb/strings.xml b/app/src/main/res/values-lb/strings.xml index 9d69efabb..d99e269ab 100644 --- a/app/src/main/res/values-lb/strings.xml +++ b/app/src/main/res/values-lb/strings.xml @@ -61,7 +61,7 @@ Aloggen Waart wgl. … Beschrëftungen a Beschreiwungen aktualiséieren - Waart wgl. ... + Waart wgl. … Umeldung huet geklappt! D\'Aloggen huet net funktionéiert! Fichier net fonnt. Probéiert wgl. en anere Fichier. @@ -349,7 +349,7 @@ Déi geliese weisen Déi net geliese weisen Feeler beim Eraussiche vun de Biller - Waart wgl. ... + Waart wgl. … Kopéiert Beispiller vu gudde Biller fir op Commons eropzelueden Beispiller fir Biller, déi een net eropluede sollt @@ -361,7 +361,7 @@ Seriennummeren Software Luet Fotoen direkt vun Ärem Handy op Wikimedia Commons erop. Luet d\'Commons-App elo erof: %1$s - App deelen iwwer... + App deelen iwwer… Bildinformatiounen Keng Kategorie fonnt. Eroplueden ofgebrach @@ -411,7 +411,7 @@ Bei d\'Lieszeechen derbäigesat Et ass Eppes schif gaangen. D\'Hannergrondbild konnt net agestallt ginn Als Hannergrondbild festleeën - Hannergrondbild gëtt agestallt. Waart wgl... + Hannergrondbild gëtt agestallt. Waart wgl… System suivéieren Däischter Hell @@ -454,7 +454,7 @@ Limitéierte Verbindungsmodus Qualitéitsbiller Qualitéitsbiller sinn Diagrammen oder Fotoen, déi gewësse Qualitéitscritèren erfëllen (déi haaptsächlech vun technescher Natur sinn) a wäertvoll fir Wikimedia-Projete sinn. - Eropluede gëtt ofgebrach.... + Eropluede gëtt ofgebrach…. Eroplueden ofbriechen Kategoriesäit weisen Sprooch vum Interface vum Benotzer vun der App diff --git a/app/src/main/res/values-li/strings.xml b/app/src/main/res/values-li/strings.xml index f477ed8f0..1720bfbcb 100644 --- a/app/src/main/res/values-li/strings.xml +++ b/app/src/main/res/values-li/strings.xml @@ -33,8 +33,8 @@ Melj dich aan Wachwaord vergaete? Teiken dich in - Aan \'nt melje... - Wach estebleef... + Aan \'nt melje… + Wach estebleef… Aanmelje gelök! Aanmelje mislök! Bestandj neet gevónje. Perbeer \'n anger bestandj. @@ -88,7 +88,7 @@ Sjik feedback (mitten e-mail) Geine e-mailcliënt geïnstalleerd Recèntelik gebroekde categorieje - Oppe ieëste synchronisatie \'nt wachte... + Oppe ieëste synchronisatie \'nt wachte… Doe höbs nag gein plaetjes geüpload. Perbeer oppernuuj Braek aaf @@ -127,7 +127,7 @@ Versteis se \'t? Jao! Categorieje - \'nt laje... + \'nt laje… Geine gekaoze Gein besjrieving Ónbekande licentie diff --git a/app/src/main/res/values-lt/strings.xml b/app/src/main/res/values-lt/strings.xml index 26a9bc7f7..cb7bebe41 100644 --- a/app/src/main/res/values-lt/strings.xml +++ b/app/src/main/res/values-lt/strings.xml @@ -33,20 +33,27 @@ Dienos nuotrauka %1$d keliamas failas + %1$d keliami failai + %1$d failų keliamas %1$d keliami failai + %1$d įkėlimas + %1$d įkėlimai + %1$d įkėlimų - \@string/contributions_subtitle_zero - 1 įkėlimas Įkėlimai pradedami Pradedamas %1$d įkėlimas + Pradedami %1$d įkėlimai + Pradedami %1$d įkėlimų Pradedami %1$d įkėlimai %1$d įkėlimas + %1$d įkėlimai + %1$d įkėlimų %1$d įkėlimai Šio paveikslėlio licencija bus %1$s @@ -68,7 +75,7 @@ Jungiamasi Prašome palaukti… Antraštės ir aprašymai atnaujinami - Prašome palaukti... + Prašome palaukti… Sėkmingai prisijungėte! Prisijungti nepavyko! Failas nerastas. Prašome pabandyti kitą failą. @@ -172,7 +179,7 @@ Taip! Daugiau informacijos Kategorijos - Kraunasi... + Kraunasi… Niekas nepasirinkta Nėra antraštės Nėra aprašymo @@ -465,7 +472,7 @@ Žiūrėti perskaitytus Žiūrėti neperskaitytus Renkant vaizdus įvyko klaida - Prašome palaukti... + Prašome palaukti… Rinktinės nuotraukos yra aukštos kvalifikacijos fotografų ir iliustratorių vaizdai, kuriuos Vikiteka bendruomenė pasirinko kaip svetainėje aukščiausios kokybės. Vaizdai, įkelti per Netoliese esančias vietas, yra vaizdai, kurie įkeliami atrandant vietas žemėlapyje. Ši funkcija leidžia redaktoriams siųsti padėkos pranešimą naudotojams, kurie atlieka naudingus pakeitimus, naudojant nedidelę padėkos nuorodą istorijos puslapyje arba skirtumų puslapyje. @@ -486,7 +493,7 @@ Prieiga prie medijos vietos uždrausta Gali būti, kad negalėsime automatiškai gauti vietos duomenų iš jūsų įkeltų nuotraukų. Prieš pateikdami kiekvienai nuotraukai pridėkite tinkamą vietą Įkelkite nuotraukas į Vikiteką tiesiai iš savo telefono. Atsisiųskite Vikitekos programėlę dabar: %1$s - Dalintis programą per ... + Dalintis programą per … Vaizdo informacija Kategorijų nerasta Vaizdų nerasta @@ -746,7 +753,7 @@ Kita problema arba informacija (paaiškinkite toliau). Jūsų atsiliepimai bus paskelbti šiame viki puslapyje: <a href=\"https://commons.wikimedia.org/wiki/Commons:Mobile_app/Feedback\">Commons:Mobile App/Feedback</a> Ar tikrai norite atšaukti visus įkėlimus? - Atšaukiami visi įkėlimai... + Atšaukiami visi įkėlimai… Įkėlimai Laukiama Nepavyko diff --git a/app/src/main/res/values-lv/strings.xml b/app/src/main/res/values-lv/strings.xml index 7a6d9e362..9038eec9d 100644 --- a/app/src/main/res/values-lv/strings.xml +++ b/app/src/main/res/values-lv/strings.xml @@ -21,7 +21,7 @@ Reģistrēties Pieslēdzas Lūdzu, uzgaidiet… - Lūdzu, uzgaidi... + Lūdzu, uzgaidi… Ieiešana veiksmīga Pieteikšanās neizdevās. Autentifikācija neizdevās! @@ -163,7 +163,7 @@ Nākamais attēls Skatīt arhivētos Skatīt nelasītos - Lūdzu, uzgaidiet... + Lūdzu, uzgaidiet… Izlaist šo attēlu Autors Autortiesības diff --git a/app/src/main/res/values-mk/strings.xml b/app/src/main/res/values-mk/strings.xml index 916f4f420..c496505ae 100644 --- a/app/src/main/res/values-mk/strings.xml +++ b/app/src/main/res/values-mk/strings.xml @@ -4,7 +4,7 @@ * Violetova * Vlad5250 --> - + Ризницата на Фејсбук Изворен код на Ризницата на Github Лого на Ризницата @@ -52,7 +52,7 @@ %1$d подигања - Добивам споделена содржина. Обработката може да потрае, зависно од големината на сликата и вашиот уред + Добивам споделена содржина. Обработката може да потрае, зависно од големината на сликата и вашиот уред Добивам споделена содржина. Обработката може да потрае, зависно од големината на сликите и вашиот уред Истражи @@ -73,7 +73,7 @@ Најава Почекајте… Поднова на толкувања и описи - Почекајте... + Почекајте… Најавата е успешна! Најавата не успеа! Не ја пронајдов податотеката. Пробајте со друга. @@ -479,7 +479,7 @@ Погл. прочитани Погл. непрочитани Се јави грешка при избирањето на сликите - Почекајте... + Почекајте… Избраните слики се дела на високообучени фотографи и илустратори кои заедницата ги избрала за да бидат истакнати како едни од најдобрите слики на Ризницата. Сликите подигнати преку „Околни места“ се оние подигнати при откривање на места на картата. Ова им дава можност на уредниците да им испраќаат благодарници на корисниците што вршат полезни уредувања. Ова се прави стискајќи на малата врска за заблагодарување во страницата за историја или разлики. @@ -501,7 +501,7 @@ Одибиен пристапот до местоположбата на сликата Можеби нема да можеме автоматски да ги добиеме податоците за местоположба од сликите што ги подигате. Ставете ја соодветната местоположба за секоја слика пред да подигате Подигајте слики непосредно на Ризницата од телефон. Преземете го прилогот на Ризницата сега: %1$s - Сподели преку... + Сподели преку… Инфо за сликата Не пронајдов ниедна категорија Не пронајдов ниедно прикажување @@ -780,7 +780,7 @@ Друг проблем или информација (објаснете подолу). Вашите мислења се објавуваат на следнава викистраница: <a href=\"https://commons.wikimedia.org/wiki/Commons:Mobile_app/Feedback\">Commons:Mobile app/Feedback</a> Дали сигурно сакате да ги откажете сите подигања? - Ги откажувам сите подигања... + Ги откажувам сите подигања… Подигања Во исчекување Неуспешно diff --git a/app/src/main/res/values-mni/strings.xml b/app/src/main/res/values-mni/strings.xml index de888dcbc..0d8e029a4 100644 --- a/app/src/main/res/values-mni/strings.xml +++ b/app/src/main/res/values-mni/strings.xml @@ -18,7 +18,7 @@ ꯈꯨꯠꯌꯦꯛ ꯄꯤꯈꯠꯂꯨ ꯃꯅꯨꯡ ꯆꯪꯁꯤꯟꯂꯤ ꯉꯥꯏꯍꯥꯛ ꯉꯥꯏꯕꯤꯌꯨ - ꯉꯥꯏꯍꯥꯛꯇꯪ ꯉꯥꯏꯕꯤꯈꯣ... + ꯉꯥꯏꯍꯥꯛꯇꯪ ꯉꯥꯏꯕꯤꯈꯣ… ꯃꯥꯏꯄꯥꯛꯅꯥ ꯆꯪꯁꯤꯜꯂꯦ ꯫ ꯆꯪꯁꯤꯟꯕ ꯃꯥꯏꯄꯥꯛꯇꯔꯦ! ꯐꯥꯏꯜ ꯊꯤꯕꯥ ꯐꯪꯗꯔꯦ ꯫ ꯆꯥꯟꯕꯤꯗꯨꯅꯥ ꯑꯇꯣꯞꯄ ꯑꯃꯥ ꯇꯧꯕꯤꯔꯣ ꯫ @@ -59,7 +59,7 @@ ꯍꯣꯏ! ꯑꯍꯦꯟꯕ ꯋꯥꯔꯣꯜ ꯃꯆꯥꯈꯥꯏꯕꯁꯤꯡ - ꯆꯤꯡꯂꯤ/ꯎꯪꯂꯤ..... + ꯆꯤꯡꯂꯤ/ꯎꯪꯂꯤ….. ꯑꯃꯠꯇ ꯈꯟꯗꯦ ꯑꯀꯨꯞꯄ ꯃꯔꯣꯜ ꯌꯥꯎꯗꯦ ꯈꯟꯅ-ꯅꯩꯅꯕ ꯂꯩꯇꯦ diff --git a/app/src/main/res/values-mnw/strings.xml b/app/src/main/res/values-mnw/strings.xml index a6c18bca3..27a76b0a7 100644 --- a/app/src/main/res/values-mnw/strings.xml +++ b/app/src/main/res/values-mnw/strings.xml @@ -45,7 +45,7 @@ ဝိုတ်စ မအက္ခရ်ပၞုက် ပတိုန် စၟတ်သမ္တီ လုပ်လံက်အေန် ဒၟံင် - ပဂုန်တုဲ မင်မွဲလစုတ်... + ပဂုန်တုဲ မင်မွဲလစုတ်… လုက်အေန် အာစိုပ်ဒတုဲ! လံက်အေန် လီုလာ်! ဝှာင် ဟွံဂွံဆဵု၊ ပဂုန်တုဲ ဂၠာဲ ဝှာင်တၞဟ်။ @@ -148,7 +148,7 @@ ယွံ! ဆက်လဴ ပရူတင်ဂၞင် ကဏ္ဍဂမၠိုင် - ပတိုန်ဒၟံင်... + ပတိုန်ဒၟံင်… ဟွံမဲကဵု ပရေၚ်ရုဲစှ် ဟွံမဲကဵု က္ဍိုပ်လိက် ဟွံမဲကဵု ဗမံက်ထ္ၜး diff --git a/app/src/main/res/values-mr/strings.xml b/app/src/main/res/values-mr/strings.xml index 546b43f4f..965594585 100644 --- a/app/src/main/res/values-mr/strings.xml +++ b/app/src/main/res/values-mr/strings.xml @@ -17,7 +17,6 @@ %1$d संचिका अपभारीत होत आहे - अद्याप अपभारणे नाहीत एक अपभारण %1$d अपभारणे @@ -94,7 +93,7 @@ प्रतिसाद पाठवा (विपत्राद्वारे) कोणतेही ईमेल क्लायंट स्थापित नाहीत अलीकडे वापरलेले वर्ग - प्रथम संकालनाची प्रतीक्षा करीत आहे ... + प्रथम संकालनाची प्रतीक्षा करीत आहे … आपण अद्याप काहीच चित्रे अपभारीत केली नाहीत. पुन्हा प्रयत्न करा रद्द करा diff --git a/app/src/main/res/values-my/strings.xml b/app/src/main/res/values-my/strings.xml index 1fce0c0da..e5dd0f3be 100644 --- a/app/src/main/res/values-my/strings.xml +++ b/app/src/main/res/values-my/strings.xml @@ -19,20 +19,16 @@ အားလုံး ယနေ့အတွက် အထူးဓာတ်ပုံ - ဖိုင် %1$d ခု တင်နေသည် ဖိုင် %1$d ခု တင်နေသည် အပ်ပလုဒ်များ စတင်ခြင်း - %1$d ခု တင်ထားသည် %1$d ခု တင်ထားသည် - ဤရုပ်ပုံသည် %1$ အောက်တွင် လိုင်စင်သတ်မှတ်ထးပါမည် ဤရုပ်ပုံများသည် %1$ အောက်တွင် လိုင်စင်သတ်မှတ်ထးပါမည် - %1$d အက်ပလုပ် %1$d အက်ပလုပ်များ ရှာဖွေစူးစမ်းပါ @@ -49,9 +45,9 @@ အကောင့်ဝင်ရန် စကားဝှက် မေ့နေပါသလား မှတ်ပုံတင်ရန် - လော့ဂ်အင် ဝင်ရောက်နေသည်... - ခေတ္တစောင့်ပါ... - ကျေးဇူးပြု၍ ခဏစောင့်ပါ... + လော့ဂ်အင် ဝင်ရောက်နေသည်… + ခေတ္တစောင့်ပါ… + ကျေးဇူးပြု၍ ခဏစောင့်ပါ… လော့အင် အောင်မြင်သည် လော့အင် မအောင်မြင်ပါ ဖိုင်မတွေ့ပါ၊ အခြးဖိုင်တစ်ခု စမ်းကြည့်ပါ။ @@ -133,7 +129,7 @@ ဟုတ်ကဲ့ သတင်းအချက်အလက် ပို၍ ကဏ္ဍများ - ဝန်ဆွဲတင်နေသည်... + ဝန်ဆွဲတင်နေသည်… ဘာမှရွေးချယ်မထားပါ ပုံစာ မရှိ ဖော်ပြချက် မရှိ @@ -315,7 +311,7 @@ မဖတ်ရသေးသော အသိပေးချက်များ မရှိပါ မဖတ်ရသေးသော အသိပေးချက်များ မရှိပါ ရုပ်ပုံများကိုရွေးနေစဉ် အမှားဖြစ်ပွားခဲ့ပါသည် - ကျေးဇူးပြု၍ ခဏစောင့်ပါ... + ကျေးဇူးပြု၍ ခဏစောင့်ပါ… နမူနာရုပ်ပုံများ အက်ပလုပ်တင်ရန် မဟုတ်ပါ ဤရုပ်ပုံအား ကျော်သွားမည် ဒေါင်းလုဒ် မအောင်မြင်ပါ။ ပြင်ပသိုလှောင်မှုခွင့်ပြုချက်မရှိဘဲ ဖိုင်ဒေါင်းလုဒ်မဆွဲနိုင်ပါ။ diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index bf971f6bc..3b4bf30dc 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -522,7 +522,7 @@ Toegang tot medialocatie geweigerd Het is mogelijk dat we niet automatisch locatiegegevens kunnen verkrijgen van foto\'s die u uploadt. Voeg de locatie bij elke foto toe voordat u die upload Upload foto\'s rechtstreeks vanaf uw telefoon naar Wikimedia Commons. Download de Commons-app nu: %1$s - App delen via... + App delen via… Afbeeldingsinfo Geen categorieën gevonden Geen beschrijvingen gevonden @@ -599,7 +599,7 @@ Als bladwijzer toegevoegd Er is iets fout gegaan. Kan de achtergrond niet instellen Instellen als achtergrond - Wordt ingesteld als achtergrond. Een ogenblik geduld... + Wordt ingesteld als achtergrond. Een ogenblik geduld… Systeem volgen Donker Licht @@ -659,7 +659,7 @@ Kwaliteitsafbeeldingen zijn diagrammen of foto\'s die voldoen aan bepaalde kwaliteitsnormen (die meestal technisch van aard zijn) en waardevol zijn voor Wikimedia-projecten Uploaden hervatten… Uploaden onderbreken… - Uploaden wordt geannuleerd... + Uploaden wordt geannuleerd… Uploaden Annuleren U hebt de beperkte verbindingsmodus ingeschakeld. Alle uploads worden gepauzeerd en worden hervat zodra u deze modus uitschakelt. Beperkte verbindingsmodus is ingeschakeld. diff --git a/app/src/main/res/values-nqo/strings.xml b/app/src/main/res/values-nqo/strings.xml index 7e11ea03a..62e01d4d5 100644 --- a/app/src/main/res/values-nqo/strings.xml +++ b/app/src/main/res/values-nqo/strings.xml @@ -51,9 +51,9 @@ ߌ ߓߘߊ߫ ߢߌ߬ߣߊ߬ ߌ ߟߊ߫ ߕߊ߬ߡߌ߲߬ߞߊ߲ ߠߊ߫؟ ߖߊ߬ߕߋ߬ߘߊ ߟߊߞߊ߬ ߜߊ߲߬ߞߎ߲߬ߠߌ߲ ߦߋ߫ ߛߋ߲߬ߠߊ߫ - ߡߊ߬ߞߐ߬ߣߐ߲߬ߠߌ߲ ߞߍ߫ ߖߊ߰ߣߌ߲߬... + ߡߊ߬ߞߐ߬ߣߐ߲߬ߠߌ߲ ߞߍ߫ ߖߊ߰ߣߌ߲߬… ߝߍ߬ߛߓߍߟߌ ߣߌ߫ ߞߊ߲߬ߛߓߍߟߌ ߟߊߞߎߘߦߊ ߦߴߌ ߘߐ߫ - ߡߊ߬ߞߐ߬ߣߐ߲߬ߠߌ߲ ߞߍ߫ ߖߊ߰ߣߌ߲߬... + ߡߊ߬ߞߐ߬ߣߐ߲߬ߠߌ߲ ߞߍ߫ ߖߊ߰ߣߌ߲߬… ߜߊ߲߬ߞߎ߲߬ߠߌ߲ ߓߘߊ߫ ߛߎߘߊ߲߫߹ ߜߊ߲߬ߞߎ߲߬ߠߌ߲ ߓߘߊ߫ ߗߌߙߏ߲߫߹ ߞߐߕߐ߮ ߡߊ߫ ߛߐ߬ߘߐ߲߬. ߘߏ߫ ߜߘߍ߫ ߡߊߝߍߣߍ߲߫ ߖߊ߰ߣߌ߲߫. @@ -69,7 +69,7 @@ ߊ߬ ߛߐ߲߬ߞߌ߲߫ ߞߵߊ߬ ߦߋ߫ ߊ߬ ߛߐ߲߬ߞߌ߲߫ ߞߵߊ߬ ߦߋ߫ ߒ ߠߊ߫ ߟߊ߬ߦߟߍ߬ߣߍ߲߬ ߞߐ߯ߟߕߊ ߟߎ߬ - ߘߞߐ߬ߣߐ߲߬ߠߌ߲ ߘߐ߫... + ߘߞߐ߬ߣߐ߲߬ߠߌ߲ ߘߐ߫… ߊ߬ ߓߘߊ߫ ߗߌߙߏ߲߫ %1$d%% ߓߘߊ߫ ߘߝߊ߫ ߟߊ߬ߦߟߍ߬ߟߌ ߦߋ߫ ߛߋ߲߬ߠߊ߫ @@ -148,7 +148,7 @@ ߐ߲߬ߐ߲߬ߐ߲߫߹ ߞߎ߲߬ߠߊ߬ߝߎ߬ߟߋ߲߬ ߜߘߍ ߟߎ߬ ߦߌߟߡߊ ߟߎ߬ - ߟߊ߬ߢߎ߲߬ߠߌ߲ ߦߵߌ ߘߐ߫... + ߟߊ߬ߢߎ߲߬ߠߌ߲ ߦߵߌ ߘߐ߫… ߊ߬ ߡߊ߫ ߓߊߕߐ߬ߡߐ߲߬ ߝߍ߬ߛߓߍߟߌ߫ ߕߍ߫ ߦߋ߲߬ ߞߊ߲߬ߛߓߍߟߌ߫ ߕߴߦߋ߲߬ @@ -408,7 +408,7 @@ ߘߐ߬ߞߊ߬ߙߊ߲߬ߣߍ߲ ߠߎ߬ ߦߋ߫ ߘߐ߬ߞߊ߬ߙߊ߲߬ߓߊߟߌ ߟߎ߬ ߦߋ߫ ߝߎ߬ߕߎ߲߬ߕߌ ߓߌ߬ߟߊ߬ߣߍ߲߫ ߊ߬ ߘߐ߫ ߞߵߌ ߕߏ߫ ߖߌ߬ߦߊ߬ߓߍ ߓߊߕߐ߬ߡߐ߲ ߞߊ߲߬. - ߡߊ߬ߞߐ߬ߣߐ߲߬ߠߌ߲ ߞߍ߫ ߖߊ߰ߣߌ߲߬... + ߡߊ߬ߞߐ߬ߣߐ߲߬ߠߌ߲ ߞߍ߫ ߖߊ߰ߣߌ߲߬… ߓߘߊ߫ ߓߊߓߌ߬ߟߊ߬ ߖߌ߬ߦߊ߬ߓߍ߬ ߢߌ߬ߡߊ߬ ߟߊߦߟߍ߬ߕߊ ߟߎ߬ ߞߏߟߊ߲ߞߏߡߊ ߖߌ߬ߦߊ߬ߓߍ߬ ߖߎ߰ ߟߊߦߟߍ߬ߓߊߟߌ ߟߎ߬ ߞߏߟߊ߲ߞߏߡߊ @@ -418,7 +418,7 @@ ߘߌ߲߬ߞߌߙߊ ߖߌ߬ߦߊ߬ߕߊ߬ߟߊ߲ ߛߎ߮ߦߊ ߛߎ߲ߝߘߍ - ߟߥߊ߬ߟߌ߬ߟߊ߲ ߠߊߖߍ߲ߛߍ߲ ߢߌ߲߬ ߠߎ߫ ߞߊ߲߬... + ߟߥߊ߬ߟߌ߬ߟߊ߲ ߠߊߖߍ߲ߛߍ߲ ߢߌ߲߬ ߠߎ߫ ߞߊ߲߬… ߖߌ߬ߦߊ߬ߓߍ ߞߌ߬ߓߊ߬ߙߏ߬ߦߊ ߦߌߟߡߊߙߋ߲߫ ߕߴߦߋ߲߬ ߘߊ߲߬ߠߊ߬ߕߍ߰ߟߌ ߡߊ߫ ߛߐ߬ߘߐ߲߬ @@ -486,7 +486,7 @@ ߊ߬ ߓߌ߬ߟߊ߬ ߟߊ߬ߡߊ ߘߐ߫ ߞߏ ߘߏ߫ ߓߍ߲߬ߣߍ߫ ߕߎ߲߬ ߕߍ߫. ߘߊ߲߬ߘߊ߲߬ߥߟߊ ߕߍ߫ ߛߐ߲߬ ߘߐߓߍ߲߬ ߠߊ߫. ߊ߬ ߓߌ߬ߟߊ߬ ߘߊ߬ߣߊ߲߬ߥߟߊ ߟߊ߫. - ߘߊ߬ߣߊ߲߬ߥߟߊ ߘߊߘߐߓߍ߲߭ ߦߴߌ ߘߐ߫. ߌ ߟߐ߬ ߖߊ߰ߣߌ߲߫... + ߘߊ߬ߣߊ߲߬ߥߟߊ ߘߊߘߐߓߍ߲߭ ߦߴߌ ߘߐ߫. ߌ ߟߐ߬ ߖߊ߰ߣߌ߲߫… ߞߊ߲ߞߋ ߟߊߓߊ߬ߕߏ߬ ߘߌ߬ߓߌ ߦߋߟߋ߲ @@ -533,9 +533,9 @@ ߟߊߓߊ߯ߙߊߣߍ߲ ߒ ߠߊ߫ ߛߝߊ ߖߌ߬ߦߊ߬ߓߍ ߛߎ߯ߦߊ - ߟߊ߬ߦߟߍ߬ߟߌ ߘߊߡߌ߬ߣߊ߭ ߦߴߌ ߘߐ߫... - ߟߊ߬ߦߟߍ߬ߟߌ ߟߊߟߐ߭ ߦߴߌ ߘߐ߫... - ߟߊ߬ߦߟߍ߬ߟߌ ߘߐߛߊ߭ ߦߴߌ ߘߐ߫... + ߟߊ߬ߦߟߍ߬ߟߌ ߘߊߡߌ߬ߣߊ߭ ߦߴߌ ߘߐ߫… + ߟߊ߬ߦߟߍ߬ߟߌ ߟߊߟߐ߭ ߦߴߌ ߘߐ߫… + ߟߊ߬ߦߟߍ߬ߟߌ ߘߐߛߊ߭ ߦߴߌ ߘߐ߫… ߟߊ߬ߦߟߍ߬ߟߌ ߘߊߓߌ߬ߟߊ߬ ߡߋߘߌߦߊ ߝߊߙߊ߲ߝߊ߯ߛߌ ߦߌߟߡߊ߫ ߞߐߜߍ ߘߐߜߍ߫ diff --git a/app/src/main/res/values-oc/strings.xml b/app/src/main/res/values-oc/strings.xml index c097898e9..eab67e076 100644 --- a/app/src/main/res/values-oc/strings.xml +++ b/app/src/main/res/values-oc/strings.xml @@ -81,7 +81,7 @@ Mandar vòstres comentaris (per corrièl) Cap de client de corrièl pas installat Categorias utilizadas recentament - Espèra de primièra sincronizacion... + Espèra de primièra sincronizacion… Avètz pas encara telecargat cap de fòto. Tornar ensajar Anullar diff --git a/app/src/main/res/values-pa/strings.xml b/app/src/main/res/values-pa/strings.xml index 8c64900a5..d0ee73396 100644 --- a/app/src/main/res/values-pa/strings.xml +++ b/app/src/main/res/values-pa/strings.xml @@ -8,7 +8,7 @@ * Sony dandiwal * ਗੁਰਪ੍ਰੀਤ ਹੁੰਦਲ --> - + ਕਾਮਨਜ਼ ਮਾਰਕਾ ਇੱਕ ਹੋਰ ਵੇਰਵਾ ਸ਼ਾਮਲ ਕਰੋ ਨਵਾਂ ਯੋਗਦਾਨ ਸ਼ਾਮਲ ਕਰੋ @@ -17,11 +17,10 @@ ਸਾਰੇ ਦਿਨ ਦੀ ਤਸਵੀਰ - ੧ ਫ਼ਾਈਲ ਚੜ੍ਹਾਈ ਜਾ ਰਹੀ ਹੈ + ੧ ਫ਼ਾਈਲ ਚੜ੍ਹਾਈ ਜਾ ਰਹੀ ਹੈ %1$d ਫ਼ਾਈਲਾਂ ਚੜ੍ਹਾਈਆਂ ਜਾ ਰਹੀਆਂ ਹਨ - \@string/contributions_subtitle_zero %1$d upload %1$d ਅੱਪਲੋਡ @@ -30,7 +29,7 @@ %1$d ਸ਼ੁਰੂ ਹੋ ਰਹੇ ਹਨ - &d ਅੱਪਲੋਡ + %1$d ਅੱਪਲੋਡ %1$d ਅੱਪਲੋਡਾਂ ਇਹ ਤਸਵੀਰ ਦਾ %1$s ਹੇਠ ਲਸੰਸ ਜਾਰੀ ਕੀਤੀ ਜਾਵੇਗਾ @@ -45,7 +44,7 @@ ਪਾਰਸ਼ਬਦ ਭੁੱਲ ਗਏ? ਦਾਖ਼ਲਾ ਹੋ ਰਿਹਾ ਹੈ ਉਡੀਕੋ ਜੀ… - ਕਿਰਪਾ ਕਰਕੇ ਉਡੀਕੋ... + ਕਿਰਪਾ ਕਰਕੇ ਉਡੀਕੋ… ਦਾਖ਼ਲ ਹੋਣਾ ਸਫ਼ਲ! ਦਾਖ਼ਲ ਹੋਣਾ ਅਸਫ਼ਲ! ਫ਼ਾਇਲ ਦੀ ਖੋਜ ਨਹੀਂ ਹੋ ਸਕੀ। ਕਿਰਪਾ ਕਰਕੇ ਹੋਰ ਫ਼ਾਇਲ ਖੋਜੋ। @@ -129,7 +128,7 @@ ਹਾਂ! ਹੋਰ ਜਾਣਕਾਰੀ ਸ਼੍ਰੇਣੀਆਂ - ਲੱਦ ਰਿਹਾ ਹੈ... + ਲੱਦ ਰਿਹਾ ਹੈ… ਕੋਈ ਵੀ ਨਹੀਂ ਚੁਣਿਆ ਕੋਈ ਵੇਰਵਾ ਨਹੀਂ ਕੋਈ ਗੱਲਬਾਤ ਨਹੀਂ @@ -201,7 +200,7 @@ ਇਜਾਜ਼ਤ ਦਿਓ ਖ਼ਾਰਜ ਕਰੋ ਧੰਨਵਾਦ ਭੇਜਣਾ: ਸਫਲ ਹੋਇਆ - ਕਿਰਪਾ ਕਰਕੇ ਉਡੀਕੋ... + ਕਿਰਪਾ ਕਰਕੇ ਉਡੀਕੋ… ਉਤਾਰਾ ਕੀਤਾ ਟਿਕਾਣਾ ਲਿਖਤ ਛਾਪੋ diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index dcd8ea284..09132f40e 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -508,7 +508,7 @@ Zobacz przeczytane Wyświetl nieprzeczytane Wystąpił błąd podczas pobierania zdjęć - Proszę czekać... + Proszę czekać… Polecane zdjęcia to zdjęcia wysoko wykwalifikowanych fotografów i ilustratorów, które społeczność Wikimedia Commons wybrała jako jedne z najwyższych jakości na stronie. Obrazy przesłane przez Pobliskie miejsca to obrazy, które są przesyłane przez odkrywanie miejsc na mapie. Ta funkcja umożliwia redaktorom wysyłanie powiadomień z podziękowaniem do użytkowników, którzy dokonują przydatnych zmian - za pomocą małego linku z podziękowaniem na stronie historii lub na stronie diff. diff --git a/app/src/main/res/values-pms/strings.xml b/app/src/main/res/values-pms/strings.xml index 9c257c273..b7449e957 100644 --- a/app/src/main/res/values-pms/strings.xml +++ b/app/src/main/res/values-pms/strings.xml @@ -477,7 +477,7 @@ Vëdde lòn ch\'a l\'é stàit lesù Vëdde lòn ch\'a l\'é ancor nen ëstàit lesù A-i é staje n\'eror an selessionand le plance - Ch\'a l\'abia passiensa... + Ch\'a l\'abia passiensa… Le fòto an evidensa a son ëd plance fàite da dij fotògraf e ilustrator motobin àbij che la comunità ëd Wikipedia Commons a l\'ha sernù tra cole ëd qualità pi àuta an sël sit. Le plance carià dai pòst ëd prossimità a son le plance carià con la dëscuverta dij pòst an sla carta. Costa fonsionalità a përmet ai contributor ëd mandé na notìfica d\'aringrassiament a j\'utent ch\'a fan dle modìfiche ùtij - an dovrand na cita liura d\'aringrassiament an sla pàgina dla stòria o cola dle diferense. @@ -499,7 +499,7 @@ Acess a la locassion dël mojen arfudà I podoma pa oten-e an automàtich ij dàit ëd localisassion dle plance che chiel a caria. Për piasì, ch\'a giontà la posission apropià për tute le plance prima ëd mandeje Ch\'a caria dle fòto su Wikimedia Commons diretaman da sò teléfon. Ch\'a dëscaria l\'aplicassion Commons adess: %1$s - Partagé l\'aplicassion via... + Partagé l\'aplicassion via… Anformassion an sla plancia Gnun-e categorìe trovà Gnun-e descrission trovà @@ -776,7 +776,7 @@ Àutr problema o anformassion (për piasì, ch\'a spiega sì-sota). Ij sò sugeriment a saran giontà a coste pàgine wiki: <a href=\"https://commons.wikimedia.org/wiki/Commons:Mobile_app/Feedback\">Commons:Mobile app/Feedback</a> É-lo sigur ëd vorèj anulé tuti ij cariament? - Anulament ëd tuti ij cariament... + Anulament ëd tuti ij cariament… Cariament An atèisa Falì diff --git a/app/src/main/res/values-ps/strings.xml b/app/src/main/res/values-ps/strings.xml index 4f17da26f..461cb6b1d 100644 --- a/app/src/main/res/values-ps/strings.xml +++ b/app/src/main/res/values-ps/strings.xml @@ -65,7 +65,7 @@ CC BY 3.0 هو وېشنيزې - رابرسېرېږي... + رابرسېرېږي… هېڅ هم نه دی ټاکل شوی څرگندونه نشته نامعلوم جواز diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index 3779a8a51..b0dd3b016 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -28,7 +28,7 @@ * Tuliouel * YuriNikolai --> - + Página do Commons no Facebook Código fonte do Commons no Github Logotipo do Commons @@ -51,32 +51,39 @@ Estado do local Imagem do Dia - carregando arquivo + carregando arquivo + carregando %1$d arquivos carregando %1$d arquivos (%1$d) + (%1$d) (%1$d) Iniciando carregamentos Processando %d carregamento + Processando %d carregamentos Processando %d carregamentos %d carregamento + %d carregamentos %d carregamentos Esta imagem será licenciada sob %1$s + Estas imagens serão licenciadas sob %1$s Estas imagens serão licenciadas sob %1$s %1$d carregamento + %1$d carregamentos %1$d carregamentos - Recebendo conteúdo compartilhado. O processamento da imagem pode demorar algum tempo, dependendo do tamanho da imagem e do seu dispositivo + Recebendo conteúdo compartilhado. O processamento da imagem pode demorar algum tempo, dependendo do tamanho da imagem e do seu dispositivo + Recebendo conteúdo compartilhado. O processamento das imagens pode levar algum tempo, dependendo do tamanho das imagens e do dispositivo Recebendo conteúdo compartilhado. O processamento das imagens pode levar algum tempo, dependendo do tamanho das imagens e do dispositivo Explorar @@ -95,9 +102,9 @@ Esqueceu a senha? Cadastre-se Efetuar login - Por favor, aguarde... + Por favor, aguarde… Atualizando legendas e descrições - Por favor, aguarde... + Por favor, aguarde… Login bem sucedido Falha na identificação Arquivo não encontrado. Tente outro arquivo. @@ -161,7 +168,7 @@ Sobre O Wikimedia Commons é um aplicativo de código aberto criado e mantido por beneficiários e voluntários da comunidade Wikimedia. A Wikimedia Foundation não está envolvida na criação, desenvolvimento ou manutenção do aplicativo. Criar uma nova <a href=\"%1$s\">publicação no GitHub</a> para informar erros e sugestões. - Politica de privacidade + Política de privacidade Créditos Sobre Enviar comentários (por e-mail) @@ -248,7 +255,7 @@ Ponte de Arco-Íris Tulipa Bem-vindo à Wikipédia - Direitos de autor são bem vindo + Direitos de autor são bem-vindo Ópera de Sydney Cancelar Abrir @@ -306,7 +313,7 @@ Commons Avalie-nos Perguntas frequentes - Guia de usuario + Guia de usuário Pular Tutorial A Internet não está disponível Erro ao tentar obter as notificações @@ -521,7 +528,7 @@ Acesso à localização da mídia negado É possível que não possamos obter automaticamente os dados de localização das imagens que você carregar. Por favor adicione a localização adequada para cada imagem antes de envia-las Carregue fotos na wiki Wikimedia Commons, diretamente do seu celular. Baixe o aolicativo Commons agora: %1$s - Compartilhar aplicativo via... + Compartilhar aplicativo via… Informação da imagem Nenhuma categoria encontrada Nenhuma representação encontrada @@ -548,6 +555,7 @@ Sucesso A categoria %1$s foi adicionada. + As categorias %1$s foram adicionadas. As categorias %1$s foram adicionadas. Não foi possível adicionar categorias. @@ -556,6 +564,7 @@ Editar representações O elemento retratado %1$s está adicionado. + Os elementos retratados %1$s estão adicionados. Os elementos retratados %1$s estão adicionados. Não foi possível adicionar os elementos retratados. @@ -767,6 +776,7 @@ Salvar arquivo GPX %d imagem selecinada + %d imagens selecionadas %d imagens selecionadas Escreva algo sobre o item %1$s. Isso será visivel publicamente. diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml index bad9dc500..19a52d72f 100644 --- a/app/src/main/res/values-pt/strings.xml +++ b/app/src/main/res/values-pt/strings.xml @@ -20,7 +20,7 @@ * Unamane * Vitorvicentevalente --> - + Página da wiki Commons no Facebook Código-fonte da wiki Commons no Github Logótipo da wiki Commons @@ -44,31 +44,38 @@ Imagem do Dia a carregar %1$d ficheiro + a carregar muitos %1$d ficheiros a carregar %1$d ficheiros (%1$d) + (%1$d) (%1$d) A iniciar carregamentos A processar %d carregamento + A processar %d carregamentos A processar %d carregamentos %d carregamento + %d carregamentos %d carregamentos Esta imagem será licenciada com a %1$s + Estas imagens serão licenciadas com a %1$s Estas imagens serão licenciadas com a %1$s %1$d carregamento + %1$d carregamentos %1$d carregamentos - A receber conteúdo partilhado. O processamento da imagem pode demorar algum tempo, dependendo do tamanho da mesma e do seu dispositivo + A receber conteúdo partilhado. O processamento da imagem pode demorar algum tempo, dependendo do tamanho da mesma e do seu dispositivo + A receber conteúdo partilhado. O processamento da imagem pode demorar algum tempo, dependendo do tamanho da mesma e do seu dispositivo A receber conteúdo partilhado. O processamento das imagens pode demorar algum tempo, dependendo do tamanho das mesmas e do seu dispositivo Explorar @@ -156,8 +163,8 @@ Política de privacidade Créditos Sobre - Enviar comentários (por correio eletrónico) - Não foi instalado nenhum cliente de correio eletrónico + Enviar comentários (por correio eletrónico) + Não foi instalado nenhum cliente de correio eletrónico Categorias usadas recentemente A aguardar pela primeira sincronização… Não carregou ainda nenhuma foto. @@ -276,7 +283,7 @@ Gravar as fotografias tiradas com a câmara da aplicação no armazenamento do seu dispositivo Inicie sessão na sua conta Enviar ficheiro de registos - Enviar o ficheiro de registos aos programadores por correio eletrónico para ajudar a corrigir problemas da aplicação. Nota: os registos podem conter informações identificativas + Enviar o ficheiro de registos aos programadores por correio eletrónico para ajudar a corrigir problemas da aplicação. Nota: os registos podem conter informações identificativas Não foi encontrado nenhum navegador da Internet para abrir o URL Erro! Não foi possível encontrar o URL Nomear para eliminação @@ -491,7 +498,7 @@ Ver lidas Ver não lidas Ocorreu um erro ao escolher imagens - Aguarde, por favor... + Aguarde, por favor… As fotografias destacadas são imagens de fotógrafos e ilustradores altamente qualificados, que a comunidade da wiki Wikimedia Commons escolheu como as de melhor qualidade do \'\'site\'\'. As imagens carregadas via \"Locais próximos\" são as imagens que são carregadas descobrindo locais do mapa. Esta funcionalidade permite que os editores enviem uma notificação de agradecimento aos utilizadores que fizerem edições úteis - usando uma pequena hiperligação de agradecimento na página do historial ou na de diferenças. @@ -513,7 +520,7 @@ Acesso à localização de multimédia negado Podemos não conseguir obter automaticamente os dados de localização das fotografias que carregar. Adicione a localização apropriada de cada fotografia antes de a enviar, por favor Carregue fotografias na wiki Wikimedia Commons, diretamente do seu telemóvel. Descarregue a aplicação Commons agora: %1$s - Partilhar aplicação por... + Partilhar aplicação por… Informação da imagem Não foi encontrada nenhuma categoria Não foi encontrada nenhuma representação @@ -540,6 +547,7 @@ Êxito A categoria %1$s foi adicionada. + As categorias %1$s foram adicionadas. As categorias %1$s foram adicionadas. Não foi possível adicionar categorias. @@ -548,6 +556,7 @@ Editar elementos retratados O elemento retratado %1$s está adicionado. + Os elementos retratados %1$s estão adicionados. Os elementos retratados %1$s estão adicionados. Não foi possível adicionar os elementos retratados. @@ -589,7 +598,7 @@ Adicionado aos marcadores Ocorreu um problema. Não foi possível definir a imagem de fundo Definir como imagem de fundo - A definir a imagem de fundo. Aguarde, por favor... + A definir a imagem de fundo. Aguarde, por favor… Seguir sistema Escuro Claro @@ -645,8 +654,8 @@ Modo de ligação limitada Imagens de qualidade As imagens de qualidade são diagramas ou fotografias que satisfazem certos padrões de qualidade (principalmente de natureza técnica) e são valiosos para projetos da Wikimedia - A retomar carregamento... - A pausar carregamento... + A retomar carregamento… + A pausar carregamento… A cancelar o carregamento… Cancelar carregamento Ativou o modo de ligação limitada. Todos os carregamentos foram colocados em pausa e serão retomados quando desativar este modo. @@ -709,7 +718,7 @@ Não foi encontrada nenhuma localização Que tal adicionar o local onde a imagem foi tirada?\nOs dados de localização ajudam os editores da wiki a encontrarem a sua fotografia, tornando-a muito mais útil.\nObrigado! Adicionar localização - Remova desta mensagem de correio todas as informações que não se sinta à vontade em partilhar publicamente, por favor. Adicionalmente, esteja consciente de que o seu endereço de correio eletrónico, com o qual está a fazer esta publicação, e o nome e imagem de perfil a ele associados, serão visíveis pelo público geral. + Remova desta mensagem de correio todas as informações que não se sinta à vontade em partilhar publicamente, por favor. Adicionalmente, esteja consciente de que o seu endereço de correio eletrónico, com o qual está a fazer esta publicação, e o nome e imagem de perfil a ele associados, serão visíveis pelo público geral. Detalhes As realizações só estão disponíveis na versão de produção; consulte a documentação para programadores, por favor. A tabela de classificação só está disponível na versão prod. Consulte a documentação do desenvolvedor. @@ -760,6 +769,7 @@ Erro no envio de agradecimento ao autor. %d imagem selecionada + %d imagens selecionadas %d imagens selecionadas diff --git a/app/src/main/res/values-ro/strings.xml b/app/src/main/res/values-ro/strings.xml index 0bcbc1550..ad1d0b805 100644 --- a/app/src/main/res/values-ro/strings.xml +++ b/app/src/main/res/values-ro/strings.xml @@ -28,8 +28,8 @@ %1$d de fișiere se încarcă - \@string/contributions_subtitle_zero (%1$d) + (%1$d) (%1$d) Pornirea încărcărilor @@ -74,8 +74,8 @@ V-ați uitat parola? Înregistrare Se conectează - Vă rugăm să așteptați ... - Vă rugăm să așteptați ... + Vă rugăm să așteptați … + Vă rugăm să așteptați … Autentificare reușită! Autentificare nereușită! Fișierul nu a fost găsit. Încercați cu un alt fișier. @@ -458,7 +458,7 @@ Vezi citit Vezi necitit A apărut o eroare la alegerea imaginilor - Vă rugăm să așteptați ... + Vă rugăm să așteptați … Imaginile de Calitate sunt imagini ale unor fotografi și ilustratori de înaltă calificare, pe care comunitatea Wikimedia Commons a ales-o ca fiind de cea mai înaltă calitate pe site. Imaginile Încărcate prin Locurile din Apropiere sunt imaginile care sunt încărcate prin descoperirea locurilor de pe hartă. Această caracteristică permite editorilor să trimită o notificare de Mulțumire utilizatorilor care fac modificări utile - folosind un mic link de mulțumire pe pagina istoric sau pe pagina dif. @@ -478,7 +478,7 @@ Numere Serie Software Încărcați fotografii pe Wikimedia Commons direct de pe telefon. Descărcați aplicația Commons acum: %1$s - Partajează aplicația prin ... + Partajează aplicația prin … Informații despre imagine Nu s-au găsit categorii Nu s-au Găsit Reprezentări diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index b15d77787..861d7ee27 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -45,7 +45,7 @@ * ЛингвоЧел * ОйЛ --> - + Facebook-страница Викисклада Исходный код Викисклада на гитхабе Логотип Викисклада @@ -105,7 +105,7 @@ %1$d загрузок - Получение общего содержимого. Обработка изображения может занять некоторое время, в зависимости от размера изображения и модели вашего устройства + Получение общего содержимого. Обработка изображения может занять некоторое время, в зависимости от размера изображения и модели вашего устройства Получение общего содержимого. Обработка изображений может занять некоторое время, в зависимости от размера изображения и модели вашего устройства Получение общего содержимого. Обработка изображений может занять некоторое время, в зависимости от размера изображения и модели вашего устройства Получение общего содержимого. Обработка изображений может занять некоторое время, в зависимости от размера изображения и модели вашего устройства @@ -556,7 +556,7 @@ Отказано в доступе к местоположению файла Возможно, мы не сможем автоматически получать данные о местоположении из загруженных вами изображений. Пожалуйста, добавьте подходящее место для каждого изображения перед отправкой Загружайте фото на Викисклад прямо с телефона. Скачайте приложение Wikimedia Commons прямо сейчас: %1$s - Поделиться приложением с помощью... + Поделиться приложением с помощью… Информация об изображении Категории не найдены. Описания не найдены @@ -637,7 +637,7 @@ Добавлено в закладки Что-то пошло не так. Не удалось установить фоновую заставку Сделать фоновой заставкой - Идёт установка фоновой заставки... + Идёт установка фоновой заставки… Настройки системы Тёмная Светлая @@ -695,8 +695,8 @@ Режим ограниченного подключения Качественные изображения Качественные изображения - это диаграммы или фотографии, которые соответствуют определенным стандартам качества (которые в основном носят технический характер) и представляют ценность для проектов Викимедиа - Возобновление загрузки... - Приостановка загрузки... + Возобновление загрузки… + Приостановка загрузки… Отмена загрузки… Отменить загрузку Вы включили ограниченный режим подключения. Все загрузки приостановлены и возобновятся после отключения этого режима. @@ -841,7 +841,7 @@ Другая проблема или информация (пожалуйста, объясните ниже). Ваш отзыв будет опубликован на следующей вики-странице: <a href=\"https://commons.wikimedia.org/wiki/Commons:Mobile_app/Feedback\">Commons:Mobile app/Feedback</a> Вы уверены, что хотите отменить все загрузки? - Отмена всех загрузок... + Отмена всех загрузок… Загрузки В ожидании Не удалось diff --git a/app/src/main/res/values-sd/strings.xml b/app/src/main/res/values-sd/strings.xml index 08f9a1fec..d4b591659 100644 --- a/app/src/main/res/values-sd/strings.xml +++ b/app/src/main/res/values-sd/strings.xml @@ -169,7 +169,7 @@ ھا! وڌيڪ معلومات زمرا - لاهيندي... + لاهيندي… ڪوبہ چونڊيل ناھي عنوان ناهي ڪا تشريح ناھي @@ -315,7 +315,7 @@ لينس ماڊل سيريل انگ سافٽويئر - ايپ ذريعي ونڊيو... + ايپ ذريعي ونڊيو… عڪس معلومات زمرا نہ لڌا رد-ڪيل چاڙھ diff --git a/app/src/main/res/values-se/strings.xml b/app/src/main/res/values-se/strings.xml index 78114e336..0489c363a 100644 --- a/app/src/main/res/values-se/strings.xml +++ b/app/src/main/res/values-se/strings.xml @@ -44,9 +44,9 @@ Vajáldahttetgo beassansáni? Searvva Čáliha sisa - Vuordil... + Vuordil… Ođasmáhttá govvateavsttaid ja govvádusaid - Vuordil... + Vuordil… Sisačáliheapmi lihkostuvai! Sisačáliheapmi ii lihkostuvvan! Fiila ii gávdnon. Geahččal áinnas eará fiilla. @@ -112,7 +112,7 @@ Atte máhcahaga (e-poasttain) Ii leat ásahuvvon epoastadoaimmaheaddji Áitto geavahuvvon kategoriijat - Vuordime vuosttaš synkroniserema... + Vuordime vuosttaš synkroniserema… It leat vel bajásluđen ovttage gova. Geahččal ođđasit Gaskkalduhte @@ -143,7 +143,7 @@ Jua! Lassedieđut Kategoriijat - Luđeme... + Luđeme… Ii guhtege válljejuvvon Ii leat govvateaksta Ii gávdno govvádus diff --git a/app/src/main/res/values-sh/strings.xml b/app/src/main/res/values-sh/strings.xml index 5997677ef..8e9cde75c 100644 --- a/app/src/main/res/values-sh/strings.xml +++ b/app/src/main/res/values-sh/strings.xml @@ -112,7 +112,7 @@ Pošaljite Vašu povratnu informaciju (putem e-pošte) Nemate uspostavljen klijent za e-poštu Nedavno korištene kategorije - Čekam prvo usklađivanje... + Čekam prvo usklađivanje… Još uvijek niste otpremili nijednu sliku. Pokušaj ponovo Otkaži @@ -147,7 +147,7 @@ Da! Više informacija Kategorije - Učitavanje... + Učitavanje… Ništa nije odabrano Nema opisa Nema razgovora diff --git a/app/src/main/res/values-si/strings.xml b/app/src/main/res/values-si/strings.xml index 92fa25f3e..0e661acb7 100644 --- a/app/src/main/res/values-si/strings.xml +++ b/app/src/main/res/values-si/strings.xml @@ -5,25 +5,24 @@ * Sandaru * හරිත --> - + කොමන්ස් ෆේස්බුක් පිටුව කොමන්ස් ලාන්චනය කොමන්ස් වෙබ් අඩවිය - 1 ගොනුවක් උඩුගත කෙරේ + 1 ගොනුවක් උඩුගත කෙරේ ගොනු %d ක් උඩුගත කෙරේ - තවමත් කිසිදු උඩුගත කිරීමක් නැත - එක් උඩුගත කිරීමක් ඇත + එක් උඩුගත කිරීමක් ඇත උඩුගත කිරීම් %1$d ක් ඇත - 1 උඩුගත කිරීමක් ආරම්භ කරමින් + 1 උඩුගත කිරීමක් ආරම්භ කරමින් උඩුගත කිරීම් %1$d ක් ආරම්භ කරමින් - 1 උඩුගත කිරීමක් + 1 උඩුගත කිරීමක් උඩුගත කිරීම් %1$d ක් මෙම පින්තූරය %1$s යටතේ වලංගු වනු ඇත diff --git a/app/src/main/res/values-sk/strings.xml b/app/src/main/res/values-sk/strings.xml index 49fc88a3b..99a0bf548 100644 --- a/app/src/main/res/values-sk/strings.xml +++ b/app/src/main/res/values-sk/strings.xml @@ -491,7 +491,7 @@ Zobraziť prečítané Zobraziť neprečítané Nastala chyba pri vyberaní obrázkov - Čakajte, prosím... + Čakajte, prosím… Najlepšie obrázky sú fotografie od vysoko skúsených fotografov a ilustrátorov, ktoré vybrala komunita Wikimedie Commons ako jedny z najkvalitnejších na stránke. Obrázky nahrané cez Miesta v okolí sú obrázky, ktoré sú nahrané vďaka objavovaniu miest na mape. Táto funkcia umožňuje poslať poďakovanie za užitočné úpravy používateľom – použitím malého odkazu poďakovať v histórií stránky alebo na stránke rozdielu medzi revíziami. @@ -513,7 +513,7 @@ Prístup k polohe médií bol odmietnutý Možno nebudeme môcť automaticky získať údaje o polohe z obrázkov, ktoré nahráte. Pred odoslaním, prosím, pridajte ku každému obrázku údaj o polohe. Nahrávajte fotky na Wikimedia Commons priamo z vášho mobilu. Stiahnite si aplikáciu Wikimedia Commons teraz: %1$s - Zdieľať aplikáciu cez... + Zdieľať aplikáciu cez… Informácie o obrázku Nenájdené žiadne kategórie Neboli nájdené spôsoby vykreslovania @@ -593,7 +593,7 @@ Pridané do záložiek Niečo sa pokazilo. Tapetu sa nepodarilo nastaviť Nastaviť ako tapetu - Nastavujem tapetu. Prosím, čakajte... + Nastavujem tapetu. Prosím, čakajte… Predvolený systém Tmavý Svetlý @@ -651,9 +651,9 @@ Mód limitovaného pripojenia Kvalitné obrázky Kvalitné obrázky sú diagramy a fotografie, ktoré spĺňajú určité štandardy (ktoré sú väčšinou technického charakteru) a sú cenné pre projekty Wikimédie - Pokračovanie nahrávania... - Pozastavovanie nahrávania... - Prerušovanie nahrávania... + Pokračovanie nahrávania… + Pozastavovanie nahrávania… + Prerušovanie nahrávania… Zrušiť nahrávanie Zapli ste mód limitovaného pripojenia. Všetky nahrávania budú teraz pozastavené a budú pokračovať až po vypnutí tohto módu. Mód limitovaného pripojenia je zapnutý. @@ -787,7 +787,7 @@ Iný problém alebo informácia (vysvetlite nižšie). Vaša spätná väzba sa zverejní na nasledujúcej wiki stránke: <a href=\"https://commons.wikimedia.org/wiki/Commons:Mobile_app/Feedback\">Commons:Mobile app/Feedback</a> Ste si istí, že chcete zrušiť všetky nahrávania? - Ruším všetky nahrávania... + Ruším všetky nahrávania… Nahrané súbory Čakajúce Zlyhané diff --git a/app/src/main/res/values-sl/strings.xml b/app/src/main/res/values-sl/strings.xml index 61531980f..b91c3c0b1 100644 --- a/app/src/main/res/values-sl/strings.xml +++ b/app/src/main/res/values-sl/strings.xml @@ -6,7 +6,7 @@ * McDutchie * Upwinxp --> - + Facebook stran Zbirke Izvorna koda Zbirke v shrambi Github Logotip Zbirke @@ -66,8 +66,8 @@ %1$d nalaganj - Prejemam deljeno vsebino. Obdelava slike lahko traja nekaj časa, odvisno od velikosti slike in vaše naprave. - Prejemam deljeno vsebino. Obdelava slik lahko traja nekaj časa, odvisno od velikosti slike in vaše naprave. + Prejemam deljeno vsebino. Obdelava slike lahko traja nekaj časa, odvisno od velikosti slike in vaše naprave. + Prejemam deljeno vsebino. Obdelava slik lahko traja nekaj časa, odvisno od velikosti slike in vaše naprave. Prejemam deljeno vsebino. Obdelava slik lahko traja nekaj časa, odvisno od velikosti slike in vaše naprave. Prejemam deljeno vsebino. Obdelava slik lahko traja nekaj časa, odvisno od velikosti slike in vaše naprave. @@ -87,9 +87,9 @@ Ste pozabili geslo? Ustvari račun Prijavljanje - Prosimo, počakajte ... + Prosimo, počakajte … Posodabljam napise in opise - Prosimo, počakajte ... + Prosimo, počakajte … Uspešno ste se prijavili! Prijava ni uspela! Datoteka ni bila najdena. Prosimo, poskusite z drugo datoteko. @@ -133,7 +133,7 @@ Spremembe Naloži Poišči kategorije - Poiščite predmete, ki jih vaša predstavnostna datoteka prikazuje (gora, Tadž Mahal, ...) + Poiščite predmete, ki jih vaša predstavnostna datoteka prikazuje (gora, Tadž Mahal, …) Shrani Osveži Seznam @@ -159,7 +159,7 @@ Pošljite povratno informacijo (prek e-pošte) Nameščen ni noben e-poštni odjemalec Pred kratkim uporabljene kategorije - Čakam na prvo sinhronizacijo ... + Čakam na prvo sinhronizacijo … Naložili niste še nobene fotografije. Poskusi znova Prekliči @@ -199,7 +199,7 @@ Da! Več informacij Kategorije - Nalaganje ... + Nalaganje … Nič ni izbrano Ni napisa Ni opisa @@ -491,7 +491,7 @@ Ogled prebranih Ogled neprebranih Pri izbiri slik je prišlo do napake - Prosimo, počakajte ... + Prosimo, počakajte … Izbrane slike so slike izvrstnih fotografov in ilustratorjev, ki jih je skupnost Wikimedijine zbirke prepoznala kot najbolj kakovostne v tem projektu. Slike, naložene z Bližnjimi kraji, so slike, ki so naložene z odkrivanjem krajev na zemljevidu. Ta možnost vam omogoča, da urejevalcem, ki so opravili koristno urejanje, pošljete zahvalo – z uporabo kratke povezave na strani zgodovine ali strani primerjave. @@ -513,7 +513,7 @@ Dostop do lokacije predstavnosti zavrnjen Za slike, ki jih nalagate, ne moremo samodejno pridobiti lokacije. Pred pošiljanjem dodajte za vsako sliko ustrezno lokacijo. Nalagajte slike v Wikimedijino zbirko neposredno iz telefona. Prenesite aplikacijo Commons zdaj: %1$s - Deli aplikacijo prek ... + Deli aplikacijo prek … Informacije o sliki Ni najdenih kategorij Ni najdenih upodobitev @@ -569,7 +569,7 @@ Koordinat ni bilo mogoče pridobiti. Ni bilo mogoče pridobiti opisov. Uredi opise in napise - Deli slike prek ... + Deli slike prek … Ničesar še niste prispevali %s ni opravil_a še nobenega prispevka Račun ustvarjen! @@ -593,7 +593,7 @@ Dodano med zaznamke Nekaj je šlo narobe. Ozadja ni bilo mogoče nastaviti. Nastavi kot ozadje - Nastavljam ozadje. Prosimo, počakajte ... + Nastavljam ozadje. Prosimo, počakajte … Sledi sistemu Temna Svetla @@ -649,9 +649,9 @@ Način omejene povezanosti Kakovostne slike Kakovostne slike so ponazoritve ali fotografije, ki ustrezajo nekaterim merilom kakovosti (ta so predvsem tehnična) in so dragocene za projekte Wikimedie - Nalaganje se nadaljuje ... - Zaustavljam nalaganje ... - Preklicujem nalaganje ... + Nalaganje se nadaljuje… + Zaustavljam nalaganje… + Preklicujem nalaganje… Preklic nalaganja Vklopili ste način omejene povezanosti. Vsa nalaganja so začasno ustavljena in se bodo nadaljevala, ko boste ta način izklopili. Način omejene povezanosti je vklopljen. diff --git a/app/src/main/res/values-sr/strings.xml b/app/src/main/res/values-sr/strings.xml index fe70bc6b6..f1e7412d4 100644 --- a/app/src/main/res/values-sr/strings.xml +++ b/app/src/main/res/values-sr/strings.xml @@ -34,32 +34,39 @@ Слика дана %1$d датотека се отпрема + %1$d датотеке се отпремају %1$d датотеке се отпремају %1$d отпремање + %1$d отпремања %1$d отпремања Покретање отпремања Процесуирање %d отпремање + Процесуирање %d отпремања Процесуирање %d отпремања %d отпремање + %1$d отпремања %d отпремања Слика ће се водити под лиценцом %1$s + Слике ће се водити под лиценцом %1$s Слике ће се водити под лиценцом %1$s %1$d отпремање + %1$d отпремања %1$d отпремања - Примање дељеног садржаја... Процесуирање слике може потрајати неко време, у зависности од величине слике и вашег уређаја - Примање дељеног садржаја... Процесуирање слика може потрајати неко време, у зависности од величине слика и вашег уређаја + Пријем %d дељеног садржаја… Процесуирање слике може потрајати неко време, у зависности од величине слике и вашег уређаја + Пријем %d дељеног садржаја… Процесуирање слика може потрајати неко време, у зависности од величине слика и вашег уређаја + Пријем %d дељеног садржаја… Процесуирање слика може потрајати неко време, у зависности од величине слика и вашег уређаја Истрага Изглед @@ -496,7 +503,7 @@ Приступ локацији медија је одбијен Можда нећемо моћи да аутоматски прибавимо податке о локацији из слика које отпремите. Додајте одговарајућу локацију за сваку слику пре објављивања Отпреми фотографије на Викимедијину Оставу директно са свог телефона. Преузми апликацију Оставе сада: %1$s - Подели апликацију преко... + Подели апликацију преко… Информације о слици Нису пронађене категорије Отказано отпремање @@ -521,12 +528,13 @@ Успешно Категорија %1$s је додата. + Категорије %1$s су додате. Категорије %1$s су додате. Није могуће додати категорије. Ажурирај категорију Уреди приказе - Ажурирање координата... + Ажурирање координата… Ажурирање координата Ажурирање описа Ажурирање натписа @@ -729,6 +737,7 @@ Чување GPX датотеке %d слика је одабрана + %d слике су одабране %d слика је одабрано Унесите коментар diff --git a/app/src/main/res/values-su/strings.xml b/app/src/main/res/values-su/strings.xml index 79ae5ea28..64379ac92 100644 --- a/app/src/main/res/values-su/strings.xml +++ b/app/src/main/res/values-su/strings.xml @@ -26,32 +26,25 @@ Togel ka Luhur Gambar poé ieu - ngunjal %1$d berkas ngunjal %1$d berkas - (%1$d) (%1$d) Mitembeyan Ngamuat - Ngolah %d muatan Ngolah %d muatan - %1$d muatan %1$d muatan - Ieu gambar bakal dilisénsi %1$s Ieu gambar bakal dilisénsi %1$s - %1$d Dimuat %1$d Dimuat - Nampa kontén anu dibagikeun. Ngolah gambarna bisa jadi rada lila gumantung kana ukuran gambar jeung gaway anjeun Nampa kontén anu dibagikeun Langlang @@ -71,7 +64,7 @@ Asup log Tungguan… Nganyarkeun pertélaan jeung pedaran - Mangga tungguan... + Mangga tungguan… Laksana login! Gagal login! Berkas teu kapanggih. Coba berkas séjén. @@ -399,7 +392,7 @@ Tempo arsip Tempo nu can dibaca Éror pas keur nyomot gambar - Mangga tungguan... + Mangga tungguan… Iwalkeun ieu gambar Karya Hak cipta @@ -409,7 +402,7 @@ Nomer Seri Sopwér Muat poto ka Wikimedia Commons langsung tina ponsél. Unduh Commons App ayeuna: %1$s - Bagikeun app liwat... + Bagikeun app liwat… Info Gambar Euweuh Kategori kapanggih Muatan bedo diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml index 370bf0915..c49d64ad2 100644 --- a/app/src/main/res/values-sv/strings.xml +++ b/app/src/main/res/values-sv/strings.xml @@ -506,7 +506,7 @@ Åtkomst till mediaplats nekades Vi kanske inte automatiskt kan få platsdata från bilder du laddar upp. Lägg till lämplig plats för varje bild innan du skickar in Ladda upp foton till Wikimedia Commons direkt från din telefon. Ladda ned Commons-appen nu: %1$s - Dela appen via... + Dela appen via… Bildinfo Inga kategorier hittades Inga beskrivningar hittades @@ -783,7 +783,7 @@ Andra problem eller information (ange nedan). Din återkoppling kommer att skickas till följande wikisida: <a href=\"https://commons.wikimedia.org/wiki/Commons:Mobile_app/Feedback\">Commons:Mobilapp/Återkoppling</a> Är du säker på att du vill avbryta alla uppladdningar? - Avbryter alla uppladdningar... + Avbryter alla uppladdningar… Uppladdningar Pågår Misslyckades diff --git a/app/src/main/res/values-ta/strings.xml b/app/src/main/res/values-ta/strings.xml index f9162bc7b..4f41da5f6 100644 --- a/app/src/main/res/values-ta/strings.xml +++ b/app/src/main/res/values-ta/strings.xml @@ -98,7 +98,7 @@ பின்னூட்டம் அனுப்பு (மின்னஞ்சல் வழியாக) மின்னஞ்சற் செயலி எதுவும் நிறுவப்படவில்லை அண்மையிற் பயன்படுத்தப்பட்ட பகுப்புகள் - முதல் ஒத்திசைவுக்காக காத்திருக்கிறது ... + முதல் ஒத்திசைவுக்காக காத்திருக்கிறது … நீர் இன்னும் எவ்வொளிப்படத்தையும் பதிவேற்றவில்லை. மீண்டும் முயல்க கைவிடு @@ -131,7 +131,7 @@ ஆம்! மேலதிக தகவல்கள் பகுப்புகள் - ஏற்றப்படுகிறது... + ஏற்றப்படுகிறது… தெரிவு செய்யப்படவில்லை தலைப்பு இல்லை விளக்கம் இல்லை diff --git a/app/src/main/res/values-tcy/strings.xml b/app/src/main/res/values-tcy/strings.xml index add46f7b7..13ee985b9 100644 --- a/app/src/main/res/values-tcy/strings.xml +++ b/app/src/main/res/values-tcy/strings.xml @@ -110,7 +110,7 @@ ಇರೆನ ಅಬಿಪ್ರಾಯೊ ಬರೆಲೆ(ಮಿಂಚಂಚೆ). ಇರೆನ ಮಿಂಚಂಚೆ ಇಜ್ಜಿ. ಇಂಚಿಗ್ ಸೃಷ್ಟಿ ಮಾಲ್ತಿನ ವರ್ಗೊ. - ಒಂತೆ ಸಮಯ ಕಾಯೊಡು.... + ಒಂತೆ ಸಮಯ ಕಾಯೊಡು…. ಇರ್ ಒಂಜಿಲಾ ಪಟೋನ್ ಅಪ್ಲೋಡ್ ಮಾಲ್ತಿಜ್ಜಿ. ನನೊರ ಪ್ರಯತ್ನ ಮಾನ್ಪುಲೇ ವಜಾ ಮಲ್ಪುಲೆ @@ -336,7 +336,7 @@ ಅನುರಕ್ಷಿತ ತೂಲೆ ಓದಂದಿನ ತೂಲೆ ಆಕೃತಿಲೆನ್ ಪೆಜ್ಜಿನಗ ದೋಷ ಆಂಡ್ - ದಯಮಲ್ತ್ ಕಾಪುಲೆ... + ದಯಮಲ್ತ್ ಕಾಪುಲೆ… ಸಂಯೋಜನೆಲು ಸೂಚನೆಲು ನನಾತ್ diff --git a/app/src/main/res/values-te/strings.xml b/app/src/main/res/values-te/strings.xml index ae80a5335..0c478b221 100644 --- a/app/src/main/res/values-te/strings.xml +++ b/app/src/main/res/values-te/strings.xml @@ -127,7 +127,7 @@ ఫీడుబ్యాకును పంపండి (ఈమెయిలు ద్వారా) ఈమెయిలు క్లయంటేదీ లేదు ఇటీవల వాడిన వర్గాలు - మొట్టమొదటి సింక్ కోసం చూస్తున్నాం... + మొట్టమొదటి సింక్ కోసం చూస్తున్నాం… ఇంకా మీరు ఫోటోలేమీ ఎక్కించలేదు. మళ్ళీ ప్రయత్నించు రద్దుచేయి @@ -457,7 +457,7 @@ క్రమ సంఖ్యలు సాఫ్టువేరు నేరుగా మీ ఫోను నుంచే వికీమీడియా కామన్స్‌కు ఫోటోలను ఎక్కించండి. కామన్స్ యాప్‌ను ఇప్పుడే దించుకోండి: %1$s - యాప్‌ను దీని ద్వారా పంచుకోండి... + యాప్‌ను దీని ద్వారా పంచుకోండి… బొమ్మ సమాచారం వర్గాలేమీ కనబడలేదు ఎక్కింపును రద్దు చేసాం @@ -523,7 +523,7 @@ బుక్‌మార్కులకు చేర్చాం ఏదో లోపం జరిగింది. వాల్‌పేపరును సెట్ చెయ్యలేకపోయాం వాల్‌పేపరుగా అమర్చు - వాల్‌పేపరుగా సెట్ చేస్తున్నాం. కాస్త ఆగండి... + వాల్‌పేపరుగా సెట్ చేస్తున్నాం. కాస్త ఆగండి… నల్లటి వెలుగుతో స్థానపు సెట్టింగులను తెరవడం విఫలమైంది. స్థానాన్ని మానవికంగా ఆన్ చెయ్యండి @@ -576,9 +576,9 @@ పరిమిత కనెక్షను మోడ్‌ను అచేతనం చేసాం. పెండింగులో ఉన్న ఎక్కింపులు తిరిగి మొదలౌతాయి. పరిమిత కనెక్షను మోడ్ నాణ్యమైన బొమ్మలు - ఎక్కింపును తిరిగి మొదలెడుతున్నాం... - ఎక్కింపును నిలుపుతున్నాం... - ఎక్కింపును రద్దు చేస్తున్నాం... + ఎక్కింపును తిరిగి మొదలెడుతున్నాం… + ఎక్కింపును నిలుపుతున్నాం… + ఎక్కింపును రద్దు చేస్తున్నాం… ఎక్కింపును రద్దుచెయ్యి మీరు పరిమిత కనెక్షను మోడ్‌ను చేతనం చేసారు. ఎక్కింపులన్నీ నిలిచిపోయాయి. మీరు ఈ మోడ్‌ను అచేతనం చెయ్యగానే అవి తిరిగి మొదలౌతాయి. పరిమిత కనెక్షను మోడ్ ఆన్ అయింది. diff --git a/app/src/main/res/values-th/strings.xml b/app/src/main/res/values-th/strings.xml index 125bba590..70bee59ef 100644 --- a/app/src/main/res/values-th/strings.xml +++ b/app/src/main/res/values-th/strings.xml @@ -38,21 +38,16 @@ รูปภาพประจำวัน กำลังอัปโหลดไฟล์ %1$d ไฟล์ - \@string/contributions_subtitle_zero - (%1$d) (%1$d) กำลังเริ่มอัปโหลด - กำลังเริ่มอัปโหลด %1$d รายการ กำลังเริ่มอัปโหลด %1$d รายการ - การอัปโหลด %1$d รายการ การอัปโหลด %1$d รายการ - ภาพนี้จะอยู่ในสัญญาอนุญาต %1$s ภาะเหล่านี้จะอยู่อยู่ในสัญญาอนุญาติ %1$s สำรวจ @@ -398,7 +393,7 @@ รุ่นเลนส์ หมายเลขซีเรียล ซอฟต์แวร์ - แบ่งปันแอปผ่าน... + แบ่งปันแอปผ่าน… ไม่พบหมวดหมู่ ภาพเซลฟี ภาพเบลอ diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index 31a9f0b53..79482fb4e 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -210,7 +210,7 @@ Evet! Daha Fazla Bilgi Kategoriler - Yükleniyor... + Yükleniyor… Hiçbir şey seçilmedi Altyazı yok Açıklama yok @@ -505,7 +505,7 @@ Okunanları görüntüle Okunmayanları görüntüle Resimler seçilirken hata oluştu - Lütfen bekleyin... + Lütfen bekleyin… Seçkin resimler, Wikimedia Commons topluluğunun sitedeki en yüksek kaliteden bazıları olarak seçtiği son derece yetenekli fotoğrafçıların ve illüstratörlerin görüntüleridir. Yakındaki yerler üzerinden yüklenen resimler, haritadaki yerleri keşfederek yüklenen resimlerdir. Bu özellik, editörlerin, geçmiş sayfasında veya fark sayfasında küçük bir teşekkür bağlantısı kullanarak faydalı düzenlemeler yapan kullanıcılara bir Teşekkür bildirimi göndermesine olanak tanır. @@ -604,7 +604,7 @@ Yer işaretlerine eklendi Bir şeyler yanlış gitti. Duvar kağıdı ayarlanamadı Duvar kağıdı olarak ayarla - Duvar Kağıdı ayarlanıyor. Lütfen bekleyin... + Duvar Kağıdı ayarlanıyor. Lütfen bekleyin… Sistemi izle Koyu Açık diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index 9e821ae24..cc2343a77 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -21,7 +21,7 @@ * Ата * Пан Хаунд --> - + Facebook-сторінка Вікісховища Програмний код Вікісховища на GitHub Логотип Вікісховища @@ -81,7 +81,7 @@ %1$d завантажень - Отримання спільного контенту. Обробка зображення може зайняти трохи часу, залежно від розміру зображення і від Вашого пристрою + Отримання спільного контенту. Обробка зображення може зайняти трохи часу, залежно від розміру зображення і від Вашого пристрою Отримання спільного контенту. Обробка зображень може зайняти трохи часу, залежно від розміру зображень і від Вашого пристрою Отримання спільного контенту. Обробка зображень може зайняти трохи часу, залежно від розміру зображень і від Вашого пристрою Отримання спільного контенту. Обробка зображень може зайняти трохи часу, залежно від розміру зображень і від Вашого пристрою @@ -612,7 +612,7 @@ Додано у закладки Щось трапилось. Не вдалося встановити шпалери робочого столу Встановити в якості шпалер робочого столу - Встановлення робочого столу. Будь ласка зачекайте... + Встановлення робочого столу. Будь ласка зачекайте… На взірець системи Темна Світла diff --git a/app/src/main/res/values-uz/strings.xml b/app/src/main/res/values-uz/strings.xml index a708c873a..f09f76ac6 100644 --- a/app/src/main/res/values-uz/strings.xml +++ b/app/src/main/res/values-uz/strings.xml @@ -73,9 +73,9 @@ Parolni unutdingizmi? Roʻyxatdan oʻtish Kirish - Iltimos kuting... + Iltimos kuting… Sarlavhalar va tavsiflarni yangilash - Iltimos, kutib turing... + Iltimos, kutib turing… Kirish muvaffaqiyatli bajarildi! Kirish muvaffaqiyatsiz yakunlandi! Fayl topilmadi. Iltimos, boshqa faylni izlab koʻring. @@ -180,7 +180,7 @@ Ha! Batafsil maʼlumot Turkumlar - Yuklanmoqda... + Yuklanmoqda… Tanlanmagan Izoh yoʻq Tavsif yoʻq @@ -390,7 +390,7 @@ Xatchoʻplar Xatchoʻplar Bajarildi - Iltimos, kuting... + Iltimos, kuting… EXIF teglarni boshqarish Muallif Mualliflik huquqlari diff --git a/app/src/main/res/values-vec/strings.xml b/app/src/main/res/values-vec/strings.xml index bbcb64561..52bb495ea 100644 --- a/app/src/main/res/values-vec/strings.xml +++ b/app/src/main/res/values-vec/strings.xml @@ -68,7 +68,7 @@ Cargamento de %1$s no riusio Schicia par vixuałixare I me ultimi cargamenti - In coa... + In coa… Fałimento %1$d%% conpleto Drio cargar.. @@ -114,7 +114,7 @@ Mandane on comento (co ła mail) Nisun client de posta eletronega instałà Categorie doparà ultimamente - Speta par ła prima sincronixasion... + Speta par ła prima sincronixasion… No te ghe njiancora cargà na foto Riproa Descançełare @@ -403,7 +403,7 @@ Varda no lexeste Varda no lexeste Se ga vuo on eror co se jera drio ełexare łe imajini. - Speta on fià... + Speta on fià… Le foto in primo pian łe xé imajini de fotografi altamente cuałifegai che ła comunità de Wikimedia Commons ła ga ełeto come fotografi de alta cuałità sol sito. Imajini cargae via \"Posti cuà rente\", imajini che łe njien cargae scoerxendo posti n\'te ła mapa Sta funsion ła consente ai editori de enviar na notifega de ringrasiamento ai uxuari che i fa modifeghe che serve, doparando on lingambo picenin de ringrasiamento n\'te ła pajina del storego o n\'te ła pajina de łe difarense.\n\nQuesta funzione consente agli editor di inviare una notifica di ringraziamento agli utenti che apportano modifiche utili, utilizzando un piccolo link di ringraziamento nella pagina della cronologia o nella pagina delle differenze. @@ -421,7 +421,7 @@ Numari seriałi Software Carga foto so Wikimedia Commons diretamente dal to tełefonin. Descarga l\'aplicasion deso: %1$s - Spartisi aplicasion co... + Spartisi aplicasion co… Informasion so l\'imajine Nisuna categoria catada Cargamento nułà @@ -461,7 +461,7 @@ Xonta ai favorii Calcosa el xé ndà roerso. No xé sta pusibiłe canbiar el sfondo Inposta el sfondo - Drio inpostar el sfondo. Speta on fià... + Drio inpostar el sfondo. Speta on fià… Segui el sistema Scuro Ciaro diff --git a/app/src/main/res/values-xal/strings.xml b/app/src/main/res/values-xal/strings.xml index 346ff15e1..c36206061 100644 --- a/app/src/main/res/values-xal/strings.xml +++ b/app/src/main/res/values-xal/strings.xml @@ -23,15 +23,15 @@ Вики-аһулх һазр Тохрллһ Вики-аһулх һазрур ацалх - Ацалгдҗана... + Ацалгдҗана… Кергләчин нерн Нууц үг Невтрх Нууц үгән мартвт? Бүрткүлх Невтрҗәнә - Күләхнтн... - Күләхнтн... + Күләхнтн… + Күләхнтн… Невтрлт амҗлтта болла! Невтрҗ чадсн уга! Ацаллт кеҗ экллә! @@ -83,7 +83,7 @@ Тиим Делгрңгү Нерн, төрл - Умшҗана... + Умшҗана… Алькинь чигн суңһад уга Тодрхаллт уга Күүндән уга diff --git a/app/src/main/res/values-xmf/strings.xml b/app/src/main/res/values-xmf/strings.xml index b32eeb005..7927da1af 100644 --- a/app/src/main/res/values-xmf/strings.xml +++ b/app/src/main/res/values-xmf/strings.xml @@ -61,7 +61,7 @@ ვიკიოწკარუე პარამეტრეფი ვიკიოწკარუეშა ეხარგუა - ეთმიხარგუ... + ეთმიხარგუ… მახვარებუშ ჯოხო პაროლი გენშართით თქვანი პროფილით Commons Beta-შა @@ -71,7 +71,7 @@ სისტემაშა მიშულა ქორთხინთ ქჷმიცადით … მუკნაჭარეფი დო ეჭარუეფი მითმიახალებუ - ქორთხინთ ქჷმიცადით... + ქორთხინთ ქჷმიცადით… სისტემაშა მიშულაქ წჷმოძინელო გეთუ! სისტემაშა მიშულაქ ვემიხუჯინუ! ფაილქ ვეგორუ. ქორთხინთ, ქოცადით შხვა ფაილი. @@ -181,7 +181,7 @@ ქოǃ უმოსი ინფორმაცია კატეგორიეფი - იხარგუ... + იხარგუ… მუთუნ ვა რე გიშაგორილი მუკნაჭარა ვა რე ვა რე ეჭარუა diff --git a/app/src/main/res/values-zgh/strings.xml b/app/src/main/res/values-zgh/strings.xml index 27080b999..c6f27bb99 100644 --- a/app/src/main/res/values-zgh/strings.xml +++ b/app/src/main/res/values-zgh/strings.xml @@ -13,7 +13,7 @@ ⵜⴻⵜⵜⵓⴷ ⵜⴰⴳⵓⵔⵉ ⵏ ⵓⵣⵣⵔⴰⵢ? ⵣⵎⵎⴻⵎ ⴷⴰ ⵜⴽⵛⵛⵎⴷ - ⴰⵎⵓⵔ ⵏⵏⴽ ⵇⵇⵍ... + ⴰⵎⵓⵔ ⵏⵏⴽ ⵇⵇⵍ… ⴰⴽⵛⴰⵎ !ⵉⵎⵓⵔⵙ ⴰⴽⵛⴰⵎ ⵉⵣⴳⵍ! ⴰⴼⴰⵢⵍⵓ ⵓⵔ ⵉⵜⵜⵢⵓⴼⴰ. ⴰⵎⵓⵔ ⵏⵏⴽ ⴰⵔⵎ ⴰⴼⴰⵢⵍⵓ ⵢⴰⴹⵏ. diff --git a/app/src/main/res/values-zh/strings.xml b/app/src/main/res/values-zh/strings.xml index 74ff641c0..2a307e955 100644 --- a/app/src/main/res/values-zh/strings.xml +++ b/app/src/main/res/values-zh/strings.xml @@ -79,28 +79,22 @@ 地点状态 今日图片 - %1$d个文件正在上传 %1$d个文件正在上传 - %1$d次上传 %1$d次上传 开始上传 - 正在处理%d个上传 正在处理%d个上传 - %d个上传 %d个上传 - 该图像的授权协议是 %1$s 这些图像的授权协议是 %1$s - %1$d次上传 %1$d次上传 @@ -552,7 +546,7 @@ 已拒绝访问媒体位置 我们可能无法自动从你上传的图片中获取位置数据。提交前请为每张图片添加适当的位置 直接在您手机上的维基共享资源应用中上传照片。立即下载共享资源应用:%1$s - 分享到... + 分享到… 图像信息 找不到分类 找不到描写。 @@ -578,7 +572,6 @@ 分类更新 成功 - 分类%1$s已添加。 分类%1$s已添加。 无法添加分类。 @@ -586,7 +579,6 @@ 正在尝试更新描述。 编辑描述 - 已添加 %1$s 个描写。 已添加 %1$s 个描写。 无法添加描述。 @@ -687,8 +679,8 @@ 限制连接模式 优良图片 品质图像是符合一定质量标准(本质上大多是技术性的)的图表或照片,它们对维基媒体计划很有价值 - 正在恢复上传... - 暂停上传... + 正在恢复上传… + 暂停上传… 正在取消上传… 取消上传 您已启用限制连接模式。所有的上传已暂停并将在您禁用此模式后立刻恢复。 @@ -816,7 +808,6 @@ 正在保存KML文件 正在保存GPX文件 - 已选择%d个图像 已选择%d个图像 请记住,每次多图片上传会为其中的所有图片标注相同的分类和描述。如果这些图片并不共享同样的描述和分类,请分别进行多次上传。 @@ -830,7 +821,7 @@ 其他问题或信息(请在下方解释)。 您的反馈已经发布在以下wiki页面:<a href=\"https://commons.wikimedia.org/wiki/Commons:Mobile_app/Feedback\">Commons:Mobile app/Feedback</a> 您确定要取消所有上传吗? - 取消所有的上传... + 取消所有的上传… 上传 待处理 失败 From 197855af0e58bf89bbc1b49877639a77a6331145 Mon Sep 17 00:00:00 2001 From: "translatewiki.net" Date: Mon, 28 Oct 2024 13:02:08 +0100 Subject: [PATCH 28/36] Localisation updates from https://translatewiki.net. --- app/src/main/res/values-ab/strings.xml | 4 +- app/src/main/res/values-af/strings.xml | 3 +- app/src/main/res/values-anp/strings.xml | 10 ++--- app/src/main/res/values-ar/strings.xml | 8 ++-- app/src/main/res/values-as/strings.xml | 4 +- app/src/main/res/values-ast/strings.xml | 4 +- app/src/main/res/values-az/strings.xml | 2 +- .../main/res/values-b+roa+tara/strings.xml | 6 +-- app/src/main/res/values-b+sr+Latn/strings.xml | 19 +++------ app/src/main/res/values-ba/strings.xml | 8 ++-- app/src/main/res/values-ban/strings.xml | 6 +-- app/src/main/res/values-bg/strings.xml | 2 +- app/src/main/res/values-blk/strings.xml | 4 +- app/src/main/res/values-bn/strings.xml | 2 +- app/src/main/res/values-br/strings.xml | 6 --- app/src/main/res/values-bs/strings.xml | 5 +-- app/src/main/res/values-ca/strings.xml | 8 +--- app/src/main/res/values-ce/strings.xml | 8 ++-- app/src/main/res/values-cs/strings.xml | 15 +------ app/src/main/res/values-csb/strings.xml | 6 +-- app/src/main/res/values-cy/strings.xml | 19 --------- app/src/main/res/values-da/strings.xml | 10 ++--- app/src/main/res/values-de/strings.xml | 4 +- app/src/main/res/values-diq/strings.xml | 8 ++-- app/src/main/res/values-el/strings.xml | 8 ++-- app/src/main/res/values-eo/strings.xml | 16 ++++---- app/src/main/res/values-es/strings.xml | 38 +++++++----------- app/src/main/res/values-eu/strings.xml | 2 +- app/src/main/res/values-fa/strings.xml | 10 ++--- app/src/main/res/values-fi/strings.xml | 10 ++--- app/src/main/res/values-fr/strings.xml | 39 ++++++++----------- app/src/main/res/values-gcr/strings.xml | 6 +-- app/src/main/res/values-gl/strings.xml | 2 +- app/src/main/res/values-hi/strings.xml | 7 ++-- app/src/main/res/values-hr/strings.xml | 17 ++++---- app/src/main/res/values-hu/strings.xml | 4 +- app/src/main/res/values-in/strings.xml | 18 +++++---- app/src/main/res/values-io/strings.xml | 14 +++---- app/src/main/res/values-is/strings.xml | 8 ++-- app/src/main/res/values-it/strings.xml | 15 ++----- app/src/main/res/values-iw/strings.xml | 26 +++++++++---- app/src/main/res/values-ja/strings.xml | 5 ++- app/src/main/res/values-kab/strings.xml | 8 ++-- app/src/main/res/values-ko/strings.xml | 35 +++++++++++++++-- app/src/main/res/values-krc/strings.xml | 14 +++---- app/src/main/res/values-ku/strings.xml | 6 +-- app/src/main/res/values-kum/strings.xml | 2 +- app/src/main/res/values-kus/strings.xml | 18 ++++----- app/src/main/res/values-ky/strings.xml | 3 +- app/src/main/res/values-lb/strings.xml | 12 +++--- app/src/main/res/values-li/strings.xml | 8 ++-- app/src/main/res/values-lt/strings.xml | 21 ++++------ app/src/main/res/values-lv/strings.xml | 4 +- app/src/main/res/values-mk/strings.xml | 12 +++--- app/src/main/res/values-mni/strings.xml | 4 +- app/src/main/res/values-mnw/strings.xml | 4 +- app/src/main/res/values-mr/strings.xml | 3 +- app/src/main/res/values-my/strings.xml | 14 ++++--- app/src/main/res/values-nl/strings.xml | 9 +++-- app/src/main/res/values-nqo/strings.xml | 20 +++++----- app/src/main/res/values-oc/strings.xml | 2 +- app/src/main/res/values-pa/strings.xml | 13 ++++--- app/src/main/res/values-pl/strings.xml | 2 +- app/src/main/res/values-pms/strings.xml | 9 +++-- app/src/main/res/values-ps/strings.xml | 2 +- app/src/main/res/values-pt-rBR/strings.xml | 28 +++++-------- app/src/main/res/values-pt/strings.xml | 32 ++++++--------- app/src/main/res/values-ro/strings.xml | 10 ++--- app/src/main/res/values-ru/strings.xml | 14 +++---- app/src/main/res/values-sd/strings.xml | 4 +- app/src/main/res/values-se/strings.xml | 8 ++-- app/src/main/res/values-sh/strings.xml | 4 +- app/src/main/res/values-si/strings.xml | 11 +++--- app/src/main/res/values-sk/strings.xml | 14 +++---- app/src/main/res/values-sl/strings.xml | 30 +++++++------- app/src/main/res/values-sr/strings.xml | 19 +++------ app/src/main/res/values-su/strings.xml | 13 +++++-- app/src/main/res/values-sv/strings.xml | 4 +- app/src/main/res/values-ta/strings.xml | 4 +- app/src/main/res/values-tcy/strings.xml | 4 +- app/src/main/res/values-te/strings.xml | 12 +++--- app/src/main/res/values-th/strings.xml | 7 +++- app/src/main/res/values-tr/strings.xml | 6 +-- app/src/main/res/values-uk/strings.xml | 6 +-- app/src/main/res/values-uz/strings.xml | 8 ++-- app/src/main/res/values-vec/strings.xml | 10 ++--- app/src/main/res/values-xal/strings.xml | 8 ++-- app/src/main/res/values-xmf/strings.xml | 6 +-- app/src/main/res/values-zgh/strings.xml | 2 +- app/src/main/res/values-zh/strings.xml | 20 ++++++++-- 90 files changed, 445 insertions(+), 480 deletions(-) diff --git a/app/src/main/res/values-ab/strings.xml b/app/src/main/res/values-ab/strings.xml index 22f382f57..9ff1b19b4 100644 --- a/app/src/main/res/values-ab/strings.xml +++ b/app/src/main/res/values-ab/strings.xml @@ -14,7 +14,7 @@ Аҭаларҭа Иҟаҵатәуп арегистрациа Асистемахь аҭаларҭа - Шәааԥшы ԥыҭрак… + Шәааԥшы ԥыҭрак... Аҭалара қәҿиарала имҩаԥысит! Асистемахь аҭалараан агха! Афаил ԥшаам. Даҽа фаилк шәахәаԥш. @@ -64,7 +64,7 @@ Ари шәара еилышәкаама? Ааи! Акатегориақәа - Аҭагалара… + Аҭагалара... Акагь алхӡам Иҟам ахҳәаа Идырым алицензиа diff --git a/app/src/main/res/values-af/strings.xml b/app/src/main/res/values-af/strings.xml index 57ba77cc9..1da8b3101 100644 --- a/app/src/main/res/values-af/strings.xml +++ b/app/src/main/res/values-af/strings.xml @@ -22,6 +22,7 @@ %1$d lêers aan die uploaden + \@string/contributions_subtitle_zero (%1$d) (%1$d) @@ -147,7 +148,7 @@ Ja! <u>Meer inligting</u> Kategorieë - Laai … + Laai ... Niks gekies nie Geen beskrywing Geen bespreking nie diff --git a/app/src/main/res/values-anp/strings.xml b/app/src/main/res/values-anp/strings.xml index e4029af9b..70a01949f 100644 --- a/app/src/main/res/values-anp/strings.xml +++ b/app/src/main/res/values-anp/strings.xml @@ -27,14 +27,14 @@ पासवर्ड भूलाय गेलौ की? साइन अप करौ प्रवेश होय रहलौ छौं - कृपया प्रतीक्षा करौ… - कृपया प्रतीक्षा करौ… + कृपया प्रतीक्षा करौ... + कृपया प्रतीक्षा करौ... प्रवेश विफल अपलोड आरंभ! हाल केरौ अपलोड कतारबद्ध विफल - अपलोड होय रहलौ छौं… + अपलोड होय रहलौ छौं... ठामे मँ हमरौ अपलोड साझा करौ @@ -68,7 +68,7 @@ हाँव! बेसी जानकारी श्रेणी सिनी - लोड होय रहलौ छौं… + लोड होय रहलौ छौं... कुछु चयनित नाय कोय शीर्षक नाय कोय विवरण नाय @@ -173,7 +173,7 @@ पूर्ण होलौं अगलका छवि हाँव, केन्हअ नाय - कृपया प्रतीक्षा करौ… + कृपया प्रतीक्षा करौ... प्रतिलिपि बनैलौ गेलै! लेखक स्थान diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml index b0fda6990..46ffcb7f5 100644 --- a/app/src/main/res/values-ar/strings.xml +++ b/app/src/main/res/values-ar/strings.xml @@ -125,7 +125,7 @@ يجري الدخول الرجاء الانتظار… تحديث التسميات التوضيحية والأوصاف - يرجى الانتظار… + يرجى الانتظار... نجاح تسجيل الدخول! فشل تسجيل الدخول الملف غير موجود. فضلا اختر ملفا آخر. @@ -530,7 +530,7 @@ عرض المقروءة عرض غير المقروءة حدث خطأ أثناء التقاط الصور - الرجاء الانتظار… + الرجاء الانتظار... الصور المختارة هي صور من مصورين ورسامين ذوي مهارات عالية اختارها مجتمع ويكيميديا ​​كومنز كبعض الأفضل جودة على الموقع. الصور المرفوعة عبر الأماكن القريبة هي الصور المرفوعة عن طريق اكتشاف الأماكن على الخريطة. تتيح هذه الميزة للمحررين إرسال إشعار شكر للمستخدمين الذين يقومون بتعديلات مفيدة - باستخدام رابط شكر صغير في صفحة التاريخ أو صفحة الفرق. @@ -552,7 +552,7 @@ رفض الوصول إلى موقع الوسائط قد لا نتمكن من الحصول تلقائيًا على بيانات الموقع من الصور التي تقوم برفعها. يرجى إضافة الموقع المناسب لكل صورة قبل الإرسال ارفع الصور لويكيميديا ​​كومنز مباشرة من هاتفك. قم بتنزيل تطبيق كومنز الآن: %1$s - مشاركة التطبيق عبر… + مشاركة التطبيق عبر... معلومات الصورة لم يتم العثور على تصنيفات لم يتم العثور على الصور @@ -695,7 +695,7 @@ وضع الاتصال المحدود صور عالية الجودة الصور عالية الجودة هي رسوم بيانية أو صور فوتوغرافية تفي بمعايير جودة معينة (والتي تكون في الغالب ذات طبيعة فنية) وذات قيمة لمشروعات ويكيميديا - جاري استئناف التحميل … + جاري استئناف التحميل ... جاري إيقاف التحميل مؤقتًا .. الغاء التحميل إلغاء الرفع diff --git a/app/src/main/res/values-as/strings.xml b/app/src/main/res/values-as/strings.xml index 63aa12b96..960b55bda 100644 --- a/app/src/main/res/values-as/strings.xml +++ b/app/src/main/res/values-as/strings.xml @@ -27,7 +27,7 @@ পাছৱৰ্ড পাহৰিলে? পঞ্জীয়ন কৰক লগইন হৈ আছে - অনুগ্ৰহ কৰি অপেক্ষা কৰক… + অনুগ্ৰহ কৰি অপেক্ষা কৰক... লগইন সফল হ\'ল! লগইন বিফল হৈছে! ফাইল পোৱা নগ\'ল। অনুগ্ৰহ কৰি আন এটা ফাইল চেষ্টা কৰক। @@ -74,7 +74,7 @@ <u>গোপনিয়তা নীতি</u> প্ৰতিক্ৰিয়া প্ৰেৰণ কৰক (ইমেইল যোগে) কোনো ইমেইল ক্লায়েন্ট ইনষ্টল কৰা নাই - প্ৰথম চিংকৰ বাবে অপেক্ষাৰত… + প্ৰথম চিংকৰ বাবে অপেক্ষাৰত... আপুনি এতিয়ালৈকে কোনো ফটো আপল\'ড কৰা নাই। পুনৰ চেষ্টা কৰক বাতিল কৰক diff --git a/app/src/main/res/values-ast/strings.xml b/app/src/main/res/values-ast/strings.xml index 34212aebb..df61ed061 100644 --- a/app/src/main/res/values-ast/strings.xml +++ b/app/src/main/res/values-ast/strings.xml @@ -74,7 +74,7 @@ Aniciando sesión Espera… Actualizando pies y descripciones - Porfavor espera… + Porfavor espera... ¡Identificación correuta! ¡Falló l\'aniciu de sesión! Nun s\'alcontró\'l ficheru. Tenta con otru. @@ -480,7 +480,7 @@ Númberos de serie Software Xubi semeyes a Wikimedia Commons direutamente dende\'l to móvil. Descarga yá la app de Commons: %1$s - Compartir l\'aplicación per… + Compartir l\'aplicación per... Información de la imaxe Nun s\'alcontró nenguna categoría Nun s\'alcontraron retratos diff --git a/app/src/main/res/values-az/strings.xml b/app/src/main/res/values-az/strings.xml index d2ea468ad..1edbe43fc 100644 --- a/app/src/main/res/values-az/strings.xml +++ b/app/src/main/res/values-az/strings.xml @@ -104,7 +104,7 @@ CC BY 3.0 Əlavə məlumat Kateqoriyalar - Yüklənir… + Yüklənir... Heç biri seçilməmişdir Naməlum lisenziya Yenilə diff --git a/app/src/main/res/values-b+roa+tara/strings.xml b/app/src/main/res/values-b+roa+tara/strings.xml index 8e7764323..4fa660ef8 100644 --- a/app/src/main/res/values-b+roa+tara/strings.xml +++ b/app/src/main/res/values-b+roa+tara/strings.xml @@ -40,8 +40,8 @@ Tràse Passuord scurdate? Reggistrate - Stoche a tràse… - Aspitte… + Stoche a tràse... + Aspitte... E\' trasute! Non g\'è trasute! File non acchiate. Pruève \'n\'otre file. @@ -121,7 +121,7 @@ Permesse richieste Non ge tìne notifeche non lette Errore assute mendre ca ste pigghiave le immaggine - Aspitte… + Aspitte... Zumbe ste immaggine Autore Lènghe d\'a descrizione predefinite diff --git a/app/src/main/res/values-b+sr+Latn/strings.xml b/app/src/main/res/values-b+sr+Latn/strings.xml index b8b602d0d..cd1cb09e8 100644 --- a/app/src/main/res/values-b+sr+Latn/strings.xml +++ b/app/src/main/res/values-b+sr+Latn/strings.xml @@ -5,7 +5,7 @@ * Milicevic01 * Zoranzoki21 --> - + Fejsbuk stranica Ostave Izvorni kod na Github-u Logo Ostave @@ -26,39 +26,32 @@ Slika dana %1$d datoteka se otprema - %1$d datoteke se otpremaju %1$d datoteke se otpremaju %1$d otpremanje - %1$d otpremanja %1$d otpremanja Pokretanje otpremanja Procesuiranje %d otpremanje - Procesuiranje %d otpremanja Procesuiranje %d otpremanja %d otpremanje - %d otpremanja %d otpremanja Slika će se voditi pod licencom %1$s - Slike će se voditi pod licencom %1$s Slike će se voditi pod licencom %1$s %1$d otpremanje - %1$d otpremanja %1$d otpremanja - Primanje deljenog sadržaja… Procesuiranje slike može potrajati neko vreme, u zavisnosti od veličine slike i vašeg uređaja - Primanje deljenog sadržaja… Procesuiranje slika može potrajati neko vreme, u zavisnosti od veličine slika i vašeg uređaja - Primanje deljenog sadržaja… Procesuiranje slika može potrajati neko vreme, u zavisnosti od veličine slika i vašeg uređaja + Primanje deljenog sadržaja... Procesuiranje slike može potrajati neko vreme, u zavisnosti od veličine slike i vašeg uređaja + Primanje deljenog sadržaja... Procesuiranje slika može potrajati neko vreme, u zavisnosti od veličine slika i vašeg uređaja Istraga Izgled @@ -493,7 +486,7 @@ Pristup lokaciji medija je odbijen Možda nećemo moći da automatski pribavimo podatke o lokaciji iz slika koje otpremite. Dodajte odgovarajuću lokaciju za svaku sliku pre objavljivanja Otpremi fotografije na Vikimedijinu Ostavu direktno sa svog telefona. Preuzmi aplikaciju Ostave sada: %1$s - Podeli aplikaciju preko… + Podeli aplikaciju preko... Informacije o slici Nisu pronađene kategorije Otkazano otpremanje @@ -518,13 +511,12 @@ Uspešno Kategorija %1$s je dodata. - Kategorije %1$s su dodate. Kategorije %1$s su dodate. Nije moguće dodati kategorije. Ažuriraj kategoriju Uredi prikaze - Pokušavanje promena koordinata… + Pokušavanje promena koordinata... Ažuriranje koordinata Ažuriranje opisa Ažuriranje natpisa @@ -706,7 +698,6 @@ Nije moguće podeliti ovu stavku %d slika je odabrana - %d slika je odabrano %d slika je odabrano diff --git a/app/src/main/res/values-ba/strings.xml b/app/src/main/res/values-ba/strings.xml index 4c33b396f..0fc68329f 100644 --- a/app/src/main/res/values-ba/strings.xml +++ b/app/src/main/res/values-ba/strings.xml @@ -61,9 +61,9 @@ Серһүҙҙе оноттоғоҙмо? Теркәлеү Системаға инеү - Зинһар, көтөгөҙ… + Зинһар, көтөгөҙ... Аңлатмалар һәм тасуирламалар яңыртыла - Зинһар, көтөгөҙ… + Зинһар, көтөгөҙ... Системаға инеү уңышлы! Системаға инеү уңышһыҙ! Файл табылманы. Башҡа файлды эҙләп ҡарағыҙ. @@ -131,7 +131,7 @@ Фекереңде ебәр (эл.почта аша) Почта клиенты асыҡланмаған Яңыраҡ ҡулланылған категориялар - Тәүге синхронлаштырыуҙы көтөү… + Тәүге синхронлаштырыуҙы көтөү... Әлегә бер фото ла йөкләмәгәнһегеҙ Ҡабатларға Кире алыу @@ -171,7 +171,7 @@ Эйе! Ентеклерәк Категориялар - Йөкләнә башланы… + Йөкләнә башланы... Бер ни ҙә һайланмаған Тасуирламаһы юҡ Фекер алышыу юҡ diff --git a/app/src/main/res/values-ban/strings.xml b/app/src/main/res/values-ban/strings.xml index 1273eaf0d..b24bc0022 100644 --- a/app/src/main/res/values-ban/strings.xml +++ b/app/src/main/res/values-ban/strings.xml @@ -61,7 +61,7 @@ Lali kruna Sandi? Daftar Ngeranjingin log - Jantos dumun… + Jantos dumun... Nganyarin sesirah miwah pidarta Jantos dumun… Mahasil manjing log! @@ -303,7 +303,7 @@ Nomor seri Piranti lunak Unggah foto nuju Wikimédia Commons langsung saking télépon ragané. Unduh aplikasi Commons mangkin: %1$s - Wedar aplikasi saking… + Wedar aplikasi saking... Pidarta Gambar Pangunggahan Kawangdé %1$s kaunggah olih: %2$s @@ -340,7 +340,7 @@ Kaanggén Paringkat Titiang Kualitas Gambar - Ngalanturang unggahan… + Ngalanturang unggahan... Ngarérénang unggahan… Wangdé Unggah Lisénsi Média diff --git a/app/src/main/res/values-bg/strings.xml b/app/src/main/res/values-bg/strings.xml index cb19d6e39..6ee931542 100644 --- a/app/src/main/res/values-bg/strings.xml +++ b/app/src/main/res/values-bg/strings.xml @@ -304,7 +304,7 @@ Преглеждане на прочетени Преглеждане на непрочетени Възникна грешка при избирането на изображенията - Моля, изчакайте… + Моля, изчакайте... напълно размазано Наблизо Прочетете повече diff --git a/app/src/main/res/values-blk/strings.xml b/app/src/main/res/values-blk/strings.xml index 51a8ec1ba..2cf4aba5b 100644 --- a/app/src/main/res/values-blk/strings.xml +++ b/app/src/main/res/values-blk/strings.xml @@ -38,7 +38,7 @@ အွောန်ႏဖေင်ꩻထိုꩻ ငဝ်းဗိဉ်ႏပလို့ꩻနဲ့? ဒင်ႏမတ်ပိုင်တိဉ် အဝ်ႏနွို့အကောက်ကျာꩻ - အိုင်ပွေားဆောင်းတဆင်ႏသြ… + အိုင်ပွေားဆောင်းတဆင်ႏသြ... နွို့အကောက်အောင်ႏလဲဉ်း! နွို့အကောက်အောင်ႏတဝ်း! မော့ꩻတဝ်းဖုဲင်၊ စံꩻထွားစံꩻသွော့ ဖုဲင်အလင်တဗာႏသြ။ @@ -97,7 +97,7 @@ မွေး! ထဲင်းယင်း သꩻတင်ꩻအချက်လက် ကဏ္ဍဖုံႏ - အဝ်ႏဒင်ႏဝွန်ႏကျာꩻ… + အဝ်ႏဒင်ႏဝွန်ႏကျာꩻ... လွိုက်ခါꩻတဝ်းမုဲင်ꩻမုဲင်ꩻ ပုင်ႏလိတ်အဝ်ႏတဝ်း အွောန်ႏနယ်ချက်အဝ်ႏတဝ်း diff --git a/app/src/main/res/values-bn/strings.xml b/app/src/main/res/values-bn/strings.xml index 51502c264..2d156c199 100644 --- a/app/src/main/res/values-bn/strings.xml +++ b/app/src/main/res/values-bn/strings.xml @@ -393,7 +393,7 @@ কোনও চিত্র ব্যবহৃত হয়নি পঠিতগুলি দেখান অপঠিতগুলি দেখান - অনুগ্রহ করে অপেক্ষা করুন… + অনুগ্রহ করে অপেক্ষা করুন... অনুলিপি করা হয়েছে এই চিত্র এড়িয়ে যান প্রণেতা diff --git a/app/src/main/res/values-br/strings.xml b/app/src/main/res/values-br/strings.xml index 9537c45e6..1c7d09617 100644 --- a/app/src/main/res/values-br/strings.xml +++ b/app/src/main/res/values-br/strings.xml @@ -40,9 +40,6 @@ %1$d bellgargadenn loc\'het - %1$d bellgargadenn loc\'het - %1$d bellgargadennoù loc\'het - %1$d bellgargadennoù loc\'het %1$d pellgargadennoù loc\'het @@ -54,9 +51,6 @@ gant an aotre-implijout %1$s e vo ar skeudenn-mañ - gant an aotre-implijout %1$s e vo an div skeudenn-mañ - gant an aotre-implijout %1$s e vo meur a skeudenn-mañ - gant an aotre-implijout %1$s e vo kalz a skeudenn-mañ gant an aotreoù-implijout %1$s e vo ar skeudenn-mañ Ergerzhout diff --git a/app/src/main/res/values-bs/strings.xml b/app/src/main/res/values-bs/strings.xml index d178ff507..91860b1e1 100644 --- a/app/src/main/res/values-bs/strings.xml +++ b/app/src/main/res/values-bs/strings.xml @@ -10,22 +10,19 @@ Logo Commonsa postavlja se %1$d datoteka - postavlja se %1$d datoteke postavlja se %1$d datoteka + \@string/contributions_subtitle_zero postavljena %1$d datoteka - postavljena %1$d datoteke postavljenih datoteka: %1$d Započinjem postavljanje %1$d datoteke - Započinjem postavljanje %1$d datoteke Započinjem postavljanje %1$d datoteka/-e %1$d postavljanje - %1$d postavljanja %1$d postavljanja Slika će se voditi pod licencom %1$s diff --git a/app/src/main/res/values-ca/strings.xml b/app/src/main/res/values-ca/strings.xml index 51330cb9d..0c15e58c3 100644 --- a/app/src/main/res/values-ca/strings.xml +++ b/app/src/main/res/values-ca/strings.xml @@ -20,33 +20,27 @@ Imatge del dia s\'està carregant %1$d fitxer - S\'estan carregant de %1$d fitxers s\'estan carregant %1$d fitxers (%1$d) - (%1$d) (%1$d) S\'inicien les càrregues S\'està processant %1$d càrrega - S\'estan processant %1$d càrregues S\'estan processant %1$d càrregues %d càrrega - $d càrregues %d càrregues Aquesta imatge quedarà sota llicència %1$s - Aquestes imatges quedaran sota llicència %1$s Aquestes imatges quedaran sota llicència %1$s %1$d pujada - %1$d pujades %1$d pujades Explora @@ -398,7 +392,7 @@ Model de lent Números de sèrie Programari - Comparteix l\'aplicació a través de… + Comparteix l\'aplicació a través de... Informació de la imatge No s’ha trobat cap categoria No s\'han trobat representacions diff --git a/app/src/main/res/values-ce/strings.xml b/app/src/main/res/values-ce/strings.xml index e25b83e25..e13e8c040 100644 --- a/app/src/main/res/values-ce/strings.xml +++ b/app/src/main/res/values-ce/strings.xml @@ -64,7 +64,7 @@ Викиларма Параметраш Викиларма чуйаккха - ДӀадоьдуш ду чуйаккхар… + ДӀадоьдуш ду чуйаккхар... Декъашхочун цӀе Пароль Commons Beta тӀехь хьай цӀарца чугӀо @@ -146,7 +146,7 @@ ЦӀе: Сиднейн операн театр ХӀаъ! Категореш - Чуйолуш… + Чуйолуш... ХӀума хаьржина йац Куьг доцуш Хаамаш бац @@ -297,7 +297,7 @@ Серийн лоьмар Программан кхачам Файл йолу меттиган тӀекхача бакъо ца ло - Йекъа программа, гӀоьнца… + Йекъа программа, гӀоьнца... Суьртан информаци Цхьа а категори ца карийна. Цхьа а хаам ца карийна. @@ -362,7 +362,7 @@ ДӀайаьккхина закладки йукъара Цхьа хӀума галдаьлла. Фонан сурт хӀотто аьтто ца баьлла Фонан сурт санна хӀоттайе - Фонан сурт дӀахӀоттош ду… + Фонан сурт дӀахӀоттош ду... Системин нисдаран гӀирс Бодане Сирла diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml index fb4ee05ef..4d49ee632 100644 --- a/app/src/main/res/values-cs/strings.xml +++ b/app/src/main/res/values-cs/strings.xml @@ -32,44 +32,31 @@ Obrázek dne %1$d soubor se nahrává - %1$d soubory se nahrávají - %1$d souborů se nahrává %1$d souborů se nahrává + \@string/contributions_subtitle_zero (%1$d) - (%1$d) - (%1$d) (%1$d) Spouští se nahrávání %1$d souboru - Spouští se nahrávání %1$d souborů - Spouští se nahrávání %1$d souborů Spouští se nahrávání %1$d souborů %1$d nahrávání - %1$d nahrávání - %1$d nahrávání %1$d nahrávání Tento obrázek bude zveřejněn pod licencí %1$s - Tyto obrázky budou zveřejněny pod licencí %1$s - Tyto obrázky budou zveřejněny pod licencí %1$s Tyto obrázky budou zveřejněny pod licencí %1$s %1$d nahrání - %1$d nahrávání - %1$d nahrávání %1$d nahrání Probíhá příjem sdíleného obsahu. Zpracování obrázku může chvíli trvat v závislosti na velikosti obrázku a vašem zařízení - Probíhá příjem sdíleného obsahu. Zpracovávání obrázků může chvíli trvat v závislosti na velikosti obrázků a vašem zařízení - Probíhá příjem sdíleného obsahu. Zpracovávání obrázků může chvíli trvat v závislosti na velikosti obrázků a vašem zařízení Probíhá příjem sdíleného obsahu. Zpracování obrázků může chvíli trvat v závislosti na velikosti obrázků a vašem zařízení Objevit diff --git a/app/src/main/res/values-csb/strings.xml b/app/src/main/res/values-csb/strings.xml index 7cdfb1382..623a48c8c 100644 --- a/app/src/main/res/values-csb/strings.xml +++ b/app/src/main/res/values-csb/strings.xml @@ -29,7 +29,7 @@ Wlogùjë mie Wregistrëjë sã Logòwanié - Proszã żdac… + Proszã żdac... Ùdałi logòwanié! Logòwanié nie darzëło sã! Felënk lopka. Proszã spróbòwac znowa. @@ -78,7 +78,7 @@ Sélôj òpinijã (przez e-mail) Felënk wjinstalowónegò e-mailowégò klienta Slédno ùżëwóne kategòrëje - Żdanié na pierszą synchronizacëjã… + Żdanié na pierszą synchronizacëjã... Nie môsz jesz wladowónych òdjimków Próbùjë znowa Òprzestóń @@ -99,7 +99,7 @@ Przëmiôr wladënka: Jo! Kategòrëje - Wladënk… + Wladënk... Felënk nacéchòwaniô Felënk òpisënka Nieznónô licencëja diff --git a/app/src/main/res/values-cy/strings.xml b/app/src/main/res/values-cy/strings.xml index 50df9b6d8..8c4b4a652 100644 --- a/app/src/main/res/values-cy/strings.xml +++ b/app/src/main/res/values-cy/strings.xml @@ -21,44 +21,25 @@ Popeth Llun y Dydd - %1$d ffeil yn uwchlwytho %1$d ffeil yn uwchlwytho - %1$d ffeil yn uwchlwytho - %1$d ffeil yn uwchlwytho - %1$d ffeil yn uwchlwytho %1$d ffeil yn uwchlwytho \@string/contributions_subtitle_zero (%1$d) - (%1$d) - (%1$d) - (%1$d) (%1$d) Cychwyn Uwchlwytho - Dechrau %1$d uwchlwythiad Cychwyn %1$d uwchlwythiad - Dechrau %1$d uwchlwythiad - Dechrau %1$d uwchlwythiad - Dechrau %1$d uwchlwythiad Cychwyn uwchlwytho %1$d ffeil - %1$d uwchlwythiad %1$d uwchlwythiad - %1$d uwchlwythiad - %1$d uwchlwythiad - %1$d uwchlwythiad %1$d uwchlwythiad - Ni chaiff unrhyw ddelweddau eu trwyddedu dan %1$s Caiff y ddelwedd hon ei thrwyddedu yn ôl termau\'r drwydded %1$s - Caiff y delweddau hyn eu trwyddedu dan %1$s - Caiff y delweddau hyn eu trwyddedu dan %1$s - Caiff y delweddau hyn eu trwyddedu dan %1$s Caiff y delweddau hyn eu trwyddedu dan %1$s Archwilio diff --git a/app/src/main/res/values-da/strings.xml b/app/src/main/res/values-da/strings.xml index 80a82afb5..3b6822c47 100644 --- a/app/src/main/res/values-da/strings.xml +++ b/app/src/main/res/values-da/strings.xml @@ -507,7 +507,7 @@ Adgang til medieplacering nægtet Vi kan muligvis ikke automatisk indhente placeringsdata fra billeder, du uploader. Tilføj den passende placering for hvert billede, før du indsender Upload billeder til Wikimedia Commons direkte fra din telefon. Download Commons-appen nu: %1$s - Del app via… + Del app via... Billedoplysninger Ingen kategorier blev fundet Ingen afbildninger fundet @@ -642,9 +642,9 @@ Begrænset forbindelsestilstand Kvalitetsbilleder Kvalitetsbilleder er tegninger eller fotografier, der opfylder visse kvalitetsstandarder (som for det meste er af teknisk karakter) og er værdifulde for Wikimedia-projekter - Genoptager upload… - Sætter upload på pause… - Annullerer upload… + Genoptager upload... + Sætter upload på pause... + Annullerer upload... Annuller upload Du har aktiveret begrænset forbindelsestilstand. Alle uploads er sat på pause og genoptages, når du deaktiverer denne tilstand. Begrænset forbindelsestilstand aktiveret! @@ -784,7 +784,7 @@ Andet problem eller anden information (forklar venligst nedenfor). Din feedback bliver slået op på følgende wiki-side: <a href=\"https://commons.wikimedia.org/wiki/Commons:Mobile_app/Feedback\">Commons:Mobile app/Feedback</a> Er du sikker på, at du vil annullere alle uploads? - Annullerer alle uploads… + Annullerer alle uploads... Uploads Afventer Mislykkedes diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 404304021..a6471c1fe 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -516,7 +516,7 @@ Ungelesene ansehen Beim Auswählen der Bilder ist ein Fehler aufgetreten Bitte warten … - Vorgestellte Bilder sind Bilder von professionellen Fotografen und Zeichnern, die Gemeinschaft von Wikimedia Commons als diejenigen mit der höchsten Qualität auf der Website ausgewählt hat. + Vorgestellte Bilder sind Bilder von professionellen Fotografen und Zeichnern, die die Gemeinschaft von Wikimedia Commons als diejenigen mit der höchsten Qualität auf der Website ausgewählt hat. Über Orte in der Nähe hochgeladene Bilder sind die Bilder, die von entdeckten Orten auf der Karte hochgeladen wurden. Diese Funktion erlaubt es Autoren, eine Dankeschön-Benachrichtigung an Benutzer zu senden, die nützliche Bearbeitungen durchgeführt haben – durch die Benutzung eines kleinen Dankeschön-Links in der Versionsgeschichte oder Unterschiedsseite. Auf Folgemedien kopieren @@ -611,7 +611,7 @@ zu den Lesezeichen hinzugefügt Etwas ist schiefgelaufen. Das Hintergrundbild konnte nicht eingestellt werden Als Hintergrundbild festlegen - Hintergrundbild wird festgelegt. Bitte warten… + Hintergrundbild wird festgelegt. Bitte warten... Systemeinstellung Dunkel Hell diff --git a/app/src/main/res/values-diq/strings.xml b/app/src/main/res/values-diq/strings.xml index ebb3cfbe4..840b0198d 100644 --- a/app/src/main/res/values-diq/strings.xml +++ b/app/src/main/res/values-diq/strings.xml @@ -62,8 +62,8 @@ Parola, xo vira kerde? Qeyd be Kewno cı - Kerem kerên, bıpawên… - Kerem ke, bıpawe… + Kerem kerên, bıpawên... + Kerem ke, bıpawe... Cıkewtış hewl bi. Nidekeweya de Dosya nêvineya. Dosyê da bine bıcerebnê. @@ -93,7 +93,7 @@ Şınasnayış Bınnuşte Xırabiya kewten-network xeta - Şıma xeylê rayi kerd ke cı kewê, a ser nêvıst. Şıma rê zehmet 2–3 deqey ra tepeya reyna bıcerrebnên. + Şıma xeylê rayi kerd ke cı kewê, a ser nêvıst. Şıma rê zehmet 2-3 deqey ra tepeya reyna bıcerrebnên. Qısur mewni rê, Karber commons dı bloqe biyo. Kodê kamiya raştkerdışi dıfaktorın gani cı kewê. Nidekeweya de @@ -298,7 +298,7 @@ Pêhesnayışê toyê wendışi çıniyê Wendışi bıvêne Nêwendeyan bıvêne - Kerem kerên, bıpawên… + Kerem kerên, bıpawên... Nê resımi raviyarnê Nuştekar Heqa telifi diff --git a/app/src/main/res/values-el/strings.xml b/app/src/main/res/values-el/strings.xml index e4b597fb1..e3675ef0a 100644 --- a/app/src/main/res/values-el/strings.xml +++ b/app/src/main/res/values-el/strings.xml @@ -91,7 +91,7 @@ Σύνδεση Ξεχάσατε τον κωδικό πρόσβασης σας; Εγγραφή - Γίνεται σύνδεση… + Γίνεται σύνδεση... Παρακαλούμε αναμείνετε… Ενημέρωση λεζάντων και περιγραφών Παρακαλούμε αναμείνετε… @@ -204,7 +204,7 @@ Ναι! Περισσότερες πληροφορίες Κατηγορίες - Φόρτωση σε εξέλιξη… + Φόρτωση σε εξέλιξη... Καμία επιλεγμένη Χωρίς λεζάντα Χωρίς περιγραφή @@ -521,7 +521,7 @@ Δεν επιτρέπεται η πρόσβαση στην τοποθεσία πολυμέσων Ενδέχεται να μην μπορούμε να λάβουμε αυτόματα δεδομένα τοποθεσίας από φωτογραφίες που ανεβάζετε. Προσθέστε την κατάλληλη τοποθεσία για κάθε εικόνα πριν την υποβολή Ανεβάστε φωτογραφίες στα Wikimedia Commons απευθείας από το τηλέφωνό σας. Κάντε λήψη της εφαρμογής Commons τώρα: %1$s - Κοινή χρήση εφαρμογής μέσω… + Κοινή χρήση εφαρμογής μέσω... Πληροφορίες Εικόνας Δεν βρέθηκαν Κατηγορίες Δεν βρέθηκαν απεικονίσεις @@ -798,7 +798,7 @@ Άλλο πρόβλημα ή πληροφορίες (παρακαλούμε εξηγήστε παρακάτω). Τα σχόλιά σας δημοσιεύονται στην ακόλουθη σελίδα wiki: <a href=\"https://commons.wikimedia.org/wiki/Commons:Mobile_app/Feedback\">Commons:Εφαρμογή για κινητά/Σχόλια</a> Είστε βέβαιοι ότι θέλετε να ακυρώσετε όλες τις μεταφορτώσεις; - Ακύρωση όλων των μεταφορτώσεων… + Ακύρωση όλων των μεταφορτώσεων... Μεταφορτώσεις Σε εκκρεμότητα Απέτυχε diff --git a/app/src/main/res/values-eo/strings.xml b/app/src/main/res/values-eo/strings.xml index 323c823b2..69673afbe 100644 --- a/app/src/main/res/values-eo/strings.xml +++ b/app/src/main/res/values-eo/strings.xml @@ -78,7 +78,7 @@ Ĉu pasvorto forgesita? Registriĝi Ensalutado - Bonvolu atendi… + Bonvolu atendi... Ĝisdatiganta subtekstojn kaj priskribojn Bonvolu atendi… Ensalutado sukcesis @@ -150,7 +150,7 @@ Sendi viajn komentojn (per retpoŝto) Neniu retpoŝtilo instalita Laste uzitaj kategorioj - Atendas la unuan Sinkronigado… + Atendas la unuan Sinkronigado... Vi ankoraŭ ne alŝutis fotojn. Reprovi Nuligi @@ -190,7 +190,7 @@ Jes! <u>Ekscii pli</u> Kategorioj - Ŝargado… + Ŝargado... Neniu elektita Neniu substeksto Sen priskribo @@ -482,7 +482,7 @@ Vidu legitajn Vidi nelegitojn Eraro okazis dum elektado de bildoj - Bonvolu atendi… + Bonvolu atendi... Elstaraj bildoj estas tiuj bildoj far tre spertaj fotografistoj kaj ilustristoj, kiujn la komunumo de Vikimedia Komunejo elektis kiel iujn de la plej alta kvalito en la retejo. Bildoj Alŝutitaj per Apudaj lokoj estas bildoj alŝutitaj per trovado de lokoj sur la mapo. Tiu funkcio ebligas sendi Dankantan sciigon al farinto de utila redakto – per malgranda dankiga ligilo ĉe la paĝo de historio aŭ diferenco. @@ -504,7 +504,7 @@ Aliro al loko de plurmediaĵo malakceptita Ni eble ne povos aŭtomate akiri pri-lokajn datumojn de bildoj, kiujn vi alŝutas. Bonvolu aldoni la taŭgan lokon por ĉiu bildo antaŭ ol sendi Alŝutu fotojn al Vikimedia Komunejo rekte de via telefono. Elŝutu la Komunejan aplikaĵon nun: %1$s - Diskonigi aplikaĵon per… + Diskonigi aplikaĵon per... Informo pri Bildo Neniu Kategorio troviĝis Neniu bildo-priskribo trovita @@ -636,9 +636,9 @@ Modo por limigita konekto Kvalitaj Bildoj Kvalitaj bildoj estas diagramoj aŭ fotoj kiuj kontentigas certajn normojn pri kvalito (kiuj estas plejparte teknikaj) kaj estas valoraj por Vikimediaj projektoj. - Rekomencante alŝuton… - Paŭzante alŝuton… - Nuligante alŝuton… + Rekomencante alŝuton... + Paŭzante alŝuton... + Nuligante alŝuton... Ĉesigi alŝutadon Vi aktivigis Modon por limigita konekto. Ĉiuj alŝutoj estas paŭzitaj kaj rekomencos post kiam vi malŝaltos ĉi modon. Modo por limigita konekto estas aktivigita. diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index 218953470..4e90f6864 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -51,7 +51,7 @@ * Vivaelcelta * Wizardeck --> - + Página de Facebook de Commons Código fuente de Commons en GitHub Logo de Commons @@ -75,38 +75,31 @@ Foto del día Cargando %1$d archivo - Cargando %1$d archivos Cargando %1$d archivos (%1$d) - (%1$d) (%1$d) Comenzando las subidas Procesando %d carga - Procesando %d cargas Procesando %d cargas %d carga - %1 cargas %1 cargas Esta imagen se publicará bajo la licencia %1$s - Estas imágenes se publicarán bajo la licencia %1$s Estas imágenes se publicarán bajo la licencia %1$s %1$d Subida - %1$d Subidas %1$d Subidas Recepción de contenido compartido. El procesamiento de la imagen puede tardar cierto tiempo, dependiendo del tamaño de la imagen y de tu dispositivo - Recepción de contenido compartido. El procesamiento de las imágenes puede tardar cierto tiempo, dependiendo del tamaño de las imágenes y de tu dispositivo Recepción de contenido compartido. El procesamiento de las imágenes puede tardar cierto tiempo, dependiendo del tamaño de las imágenes y de tu dispositivo Explorar @@ -342,7 +335,7 @@ Omitir tutorial Internet no disponible Error al recuperar las notificaciones - Hubo un error al recuperar la imágen a revisar. Toca refrescar para intentarlo de nuevo. + Hubo un error al recuperar la imágen a revisar. Toca refrescar para intentarlo de nuevo. No se encontró ninguna notificación Traducir Idiomas @@ -484,7 +477,7 @@ Permitir Descartar Por favor, activa el acceso a la ubicación desde Configuración y vuelva a intentarlo. \n\nNota: Es posible que la subida no tenga datos de la ubicación si la aplicación no puede recuperar la ubicación del dispositivo en un intervalo corto. - La cámara dentro de la aplicación necesita el permiso a la ubicación para adjuntarla a sus imágenes en caso de que la ubicación no esté disponible en EXIF. Por favor, permita que la aplicación acceda a su ubicación e inténtelo de nuevo.\n\nNota: Es posible que la subida no tenga los datos de la ubicación si la aplicación no puede recuperar la ubicación del dispositivo en un intervalo corto. + La cámara dentro de la aplicación necesita el permiso a la ubicación para adjuntarla a sus imágenes en caso de que la ubicación no esté disponible en EXIF. Por favor, permita que la aplicación acceda a su ubicación e inténtelo de nuevo.\n\nNota: Es posible que la subida no tenga los datos de la la ubicación si la aplicación no puede recuperar la ubicación del dispositivo en un intervalo corto. La aplicación no registrará la ubicación junto con las tomas debido a la falta del permiso de la ubicación. La aplicación no registrará la ubicación junto con las tomas porque el GPS está apagado Utilizar el selector de fotografías basado en documentos @@ -512,8 +505,8 @@ ¿Está correctamente categorizado? ¿Está dentro de los objetivos del proyecto? ¿Quieres agradecer al colaborador? - Toca en NO para nominar esta imágen para ser borrada si no es para nada útil. - Los logotipos, las capturas de pantalla y los pósteres de películas son habitualmente infracciones a los derechos de autor.\n Toca NO para nominar esta imágen para borrado + Toca en NO para nominar esta imágen para ser borrada si no es para nada útil. + Los logotipos, las capturas de pantalla y los pósteres de películas son habitualmente infracciones a los derechos de autor.\n Toca NO para nominar esta imágen para borrado Tu apreciación animara a %1$s ¡Oh, esto ni siquiera esta categorizado! Esta imagen esta dentro de %1$s categorías. @@ -531,7 +524,7 @@ Compartir registros usando Ver leídas Ver no leidas - Ocurrió un error mientras se elegían imágenes + Ocurrió un error mientras se elegían imagenes Un momento… Las imágenes destacadas son creaciones de talentosos fotógrafos e ilustradores que la comunidad de Wikimedia Commons ha reconocido como las de mayor calidad del sitio. Las imágenes subidas vía Lugares Cercanos son las imágenes que han sido subidas al descubrir lugares en el mapa. @@ -554,7 +547,7 @@ Acceso a la ubicación del archivo multimedia denegado Es posible que no podamos obtener automáticamente los datos de ubicación de las imágenes que suba. Añada la ubicación adecuada a cada imagen antes de enviarla Sube fotos a Wikimedia Commons directamente desde tu celular. Descarga la aplicación de Commons ahora: %1$s - Compartir la aplicación vía… + Compartir la aplicación vía... Información de la imagen No se encontró ninguna categoría No se encontraron representaciones @@ -581,7 +574,6 @@ Éxito Se añade %1$s categoría. - Se añaden %1$s categorías. Se añaden %1$s categorías. No se pudieron añadir las categorías. @@ -590,7 +582,6 @@ Editar las descripciones %1$s Se añade la descripción. - Descripción %1$s se añadieron. Descripción %1$s se añadieron. No se pueden añadir descripciones. @@ -608,7 +599,7 @@ Las coordenadas de la imagen no están actualizadas. No se puede obtener descripciones. Editar descripciones y leyendas - Compartir imagen via + Compartir imagen via Todavía no has hecho ninguna contribución. %s Aún no ha realizado ninguna contribución Cuenta creada @@ -633,7 +624,7 @@ añadido a marcadores Algo salió mal. No se pudo establecer el fondo de pantalla Colocar como fondo de pantalla - Estableciendo el fondo de pantalla. Por favor espere… + Estableciendo el fondo de pantalla. Por favor espere... Seguir sistema Oscuro Claro @@ -691,9 +682,9 @@ Modo de conexión limitada Imágenes de calidad Las imágenes de calidad son diagramas o fotografías que cumplen determinados estándares de calidad (mayormente de carácter técnico) y que son valiosas para proyectos de Wikimedia - Reanudando carga… - Pausando carga… - Cancelando carga… + Reanudando carga... + Pausando carga... + Cancelando carga... Cancelar carga Has habilitado el modo de conexión limitada. Todas las cargas están pausadas y se reanudarán cuando deshabilites este modo. El modo de conexión limitada está encendido. @@ -820,8 +811,7 @@ Guardar archivo GPX %d imagen seleccionada - %d imágenes seleccionadas - %d imágenes seleccionadas + %d imagenes seleccionadas Recuerde que todas las imágenes en una carga múltiple tienen la misma categoría y representación. Si las imágenes no comparten representación y categoría, haga varias cargas por separado. Nota sobre cargas múltiples @@ -829,7 +819,7 @@ Por favor, escriba algunos comentarios. Discusión Escriba algo sobre el elemento \'%1$s\'. Será visible públicamente. - Cancelando todas las subidas… + Cancelando todas las subidas... Subidas Pendiente Falló diff --git a/app/src/main/res/values-eu/strings.xml b/app/src/main/res/values-eu/strings.xml index 3dd463b34..ff75cbc7f 100644 --- a/app/src/main/res/values-eu/strings.xml +++ b/app/src/main/res/values-eu/strings.xml @@ -154,7 +154,7 @@ Mesedez, igo bakarrik zuk ateratako edo sortutako irudiak: Naturako elementuak (loreak, animaliak, mendiak) Objektu erabilgarriak (bizikletak, tren geltokiak) - Pertsona famatuak (zure alkatea, zuk ezagututako atleta olinpikoren bat…) + Pertsona famatuak (zure alkatea, zuk ezagututako atleta olinpikoren bat...) Mesedez EZ igo: Autorretratuak edo zure lagunen argazkiak Internetetik jaitsitako irudiak diff --git a/app/src/main/res/values-fa/strings.xml b/app/src/main/res/values-fa/strings.xml index 4cdd2b87a..841160581 100644 --- a/app/src/main/res/values-fa/strings.xml +++ b/app/src/main/res/values-fa/strings.xml @@ -83,7 +83,7 @@ رمز عبور خودتان را فراموش کرده‌اید؟ ثبت نام واردشدن - شکیبا باشید… + شکیبا باشید... ورود موفق! ورود ناموفق! پرونده یافت نشد لطفاً پرونده دیگری را امتحان کنید. @@ -122,7 +122,7 @@ تغییرها بارگذاری جستجوی رده‌ها - جستجو برای موضوعی که در پروندهٔ شما به‌نمایش کشیده‌شده است (مثلا کوه، تاج محل، …) + جستجو برای موضوعی که در پروندهٔ شما به‌نمایش کشیده‌شده است (مثلا کوه، تاج محل، ...) ذخیره تازه کردن فهرست @@ -411,7 +411,7 @@ شما هیچ اعلان خوانده‌شده‌ای ندارید نمایش دیده‌شده مشاهده خوانده نشده ها - لطفاً صبر کنید… + لطفاً صبر کنید... نمونه تصاویری که برای بازگذاری مناسب نیستند از این تصویر صرف نظر کن مدیریت تگ‌های EXIF @@ -423,7 +423,7 @@ مدل لنز شماره سریال نرم‌افزار - اشتراک از طریق… + اشتراک از طریق... اطلاعات عکس هیچ رده‌ای یافت نشد بارگذاری لغو شد @@ -455,7 +455,7 @@ به بوکمارک‌ها افزوده شد مشکل به وجود آمد. به عنوان پس‌زمینه انتخاب نشد. انتخاب به عنوان پس‌زمینه - قرار دادن پس‌زمینه. لطفاً صبر کنید… + قرار دادن پس‌زمینه. لطفاً صبر کنید... سامانه را دنبال کنید تیره روشن diff --git a/app/src/main/res/values-fi/strings.xml b/app/src/main/res/values-fi/strings.xml index 26328a3e2..312ebc84c 100644 --- a/app/src/main/res/values-fi/strings.xml +++ b/app/src/main/res/values-fi/strings.xml @@ -80,7 +80,7 @@ Kirjaudutaan Odota… Päivitetään kuvatekstejä ja kuvauksia - Odota… + Odota... Kirjautuminen onnistui! Kirjautuminen epäonnistui! Tiedostoa ei löytynyt. Yritä toista tiedostoa. @@ -481,7 +481,7 @@ Sarjanumerot Ohjelmisto Lähetä valokuvia suoraan Wikimedia Commonsiin puhelimestasi. Lataa Commons-appi nyt: %1$s - Jaa sovellus… + Jaa sovellus... Kuvan tiedot Luokkia ei löytynyt Kuvauksia ei löytynyt @@ -546,7 +546,7 @@ Lisätty kirjanmerkkeihin Jotain meni väärin. Ei voitu asettaa taustakuvaksi. Aseta taustakuvaksi - Asetetaan taustakuvaksi. Odota… + Asetetaan taustakuvaksi. Odota... Käytä järjestelmän Tumma Vaalea @@ -594,8 +594,8 @@ Rajoitettu yhteistila pois päältä. Jonossa olevat lähetykset kopioidaan nyt. Rajoitettu yhteystila Laatukuvat - Jatketaan lähettämistä… - Keskeytetään lähetys… + Jatketaan lähettämistä... + Keskeytetään lähetys... Peruutetaan tallennusta… Peruuta tallennus Rajoitettu yhteystila on päällä. diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 995e4041b..ae4dfb966 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -46,7 +46,7 @@ * Wladek92 * Y-M D --> - + Page Facebook de Commons Code source Github de Commons Logo de Commons @@ -70,38 +70,31 @@ Image du jour %1$d fichier en cours de téléversement - %1$d fichiers en cours de téléversement %1$d fichiers en cours de téléversement (%1$d) - (%1$d) (%1$d) Démarrage des téléversements %d téléversement en cours - %d téléversements en cours %d téléversements en cours %d téléversement - %d téléversements %d téléversements Cette image sera sous licence %1$s. - Ces images seront sous licence %1$s. Ces images seront sous licence %1$s. %1$d téléversement - %1$d téléversements %1$d téléversements - Réception de contenu partagé. Le traitement de l’image peut prendre un certain temps en fonction de la taille de l’image et de votre matériel. - Réception de contenu partagé. Le traitement des images peut prendre un certain temps en fonction de la taille des images et de votre matériel. + Réception de contenu partagé. Le traitement de l’image peut prendre un certain temps en fonction de la taille de l’image et de votre matériel. Réception de contenu partagé. Le traitement des images peut prendre un certain temps en fonction de la taille des images et de votre matériel. Explorer @@ -120,9 +113,9 @@ Mot de passe oublié ? S’inscrire Connexion - Veuillez patienter… + Veuillez patienter... Mise à jour des légendes et des descriptions - Veuillez patienter… + Veuillez patienter... Connexion réussie ! Échec de la connexion ! Fichier non trouvé. Veuillez en essayer un autre. @@ -192,7 +185,7 @@ Envoyer vos commentaires (par courriel) Aucun client de courriel installé Catégories récemment utilisées - En attente de première synchronisation… + En attente de première synchronisation... Vous n’avez encore téléchargé aucune photo. Réessayer Annuler @@ -232,7 +225,7 @@ Oui ! Davantage d’informations Catégories - Chargement en cours… + Chargement en cours... Aucune catégorie sélectionnée Aucune légende Aucune description @@ -528,7 +521,7 @@ Afficher les lus Afficher les non lus Une erreur est survenue lors de la sélection des images - Veuillez patienter… + Veuillez patienter... Les images en vedette sont des images de photographes et d’illustrateurs très doués que la communauté de Wikimédia Commons a choisies comme étant de la meilleure qualité pour le site. Les images téléversées par « Lieux à proximité » sont les images téléversées lors de la découverte de lieux sur la carte. Cette fonctionnalité permet aux contributeurs d’envoyer une notification de remerciement aux utilisateurs qui font des modifications utiles ― en utilisant un petit lien de remerciement sur la page historique ou sur celle du diff. @@ -550,7 +543,7 @@ Accès à l’emplacement du média refusé Nous ne pourrons pas obtenir automatiquement les données de localisation des images que vous téléchargez. Veuillez ajouter l’emplacement approprié pour chaque image avant de la soumettre. Téléversez des photos sur Wikimedia Commons directement depuis votre téléphone. Téléchargez l’application Commons maintenant : %1$s - Partager l’application via… + Partager l’application via... Informations sur l’image Aucune catégorie trouvée Aucun élément représenté trouvé @@ -577,7 +570,6 @@ Succès La catégorie %1$s est ajoutée. - Les catégories %1$s sont ajoutées. Les catégories %1$s sont ajoutées. Impossible d’ajouter des catégories. @@ -586,7 +578,6 @@ Modifier les éléments représentés L’élément représenté %1$s est ajouté. - Les éléments représentés %1$s sont ajoutés. Les éléments représentés %1$s sont ajoutés. Impossible d’ajouter des éléments représentés. @@ -629,7 +620,7 @@ Ajouté aux favoris Un problème est survenu. Impossible d’installer le fond d’écran. Définir comme fond d’écran - Installation du fond d’écran. Veuillez patienter… + Installation du fond d’écran. Veuillez patienter... Suivre le système Sombre Clair @@ -687,9 +678,9 @@ Mode de connexion limitée Images de qualité Les images de qualité sont des diagrammes ou des photographies qui respectent certains standards de qualité (qui sont, par nature, essentiellement techniques) et sont précieuses pour les projets Wikimedia. - Reprise du téléversement… - Mise en pause du téléversement… - Annulation du téléversement… + Reprise du téléversement... + Mise en pause du téléversement... + Annulation du téléversement... Annuler le téléversement Vous avez activé le mode de connexion limitée. Tous les téléversements sont suspendus et reprendront une fois ce mode désactivé. Le mode de connexion limitée est actif. @@ -818,7 +809,6 @@ Fichier GPX enregistré %d image sélectionnée - %d images sélectionnées %d images sélectionnées Souvenez-vous que toutes les images dans une importation multiple prennent les mêmes catégories et descriptions. Si les images de partagent pas les descriptions et catégories, veuillez effectuer plusieurs importations séparées. @@ -832,9 +822,12 @@ Autre problème ou information (merci d\'expliquer ci-dessous). Vos commentaires sont publiés sur la page wiki suivante : <a href=\"https://commons.wikimedia.org/wiki/Commons:Mobile_app/Feedback\">Commons:Mobile app/Feedback</a> Êtes-vous sûr de vouloir annuler tous les téléchargements ? - Annulation de tous les téléchargements… + Annulation de tous les téléchargements... Téléversements En attente Échec Les données du lieu n\'ont pas pu être chargées + Cet endroit n\'a pas encore de photo, allez en prendre une ! + Cet endroit a déjà une photo. + Je vérifie maintenant si cet endroit a une photo. diff --git a/app/src/main/res/values-gcr/strings.xml b/app/src/main/res/values-gcr/strings.xml index 4659eecf1..b0ec66423 100644 --- a/app/src/main/res/values-gcr/strings.xml +++ b/app/src/main/res/values-gcr/strings.xml @@ -38,9 +38,9 @@ Ou bliyé ou Kodsigré ? Enskri oukò Konnègsyon - Souplé antann… + Souplé antann... Mizajou di léjann-yan ké dèskripsyon-yan - Souplé antann… + Souplé antann... Konnègsyon bon ! Konnègsyon pabon ! Fiché pa trouvé. Souplé éséyé ké rounòt. @@ -96,7 +96,7 @@ Enren ! Plis lenfòrmasyon Katégori-ya - Chajman ka fèt… + Chajman ka fèt... Pyès katégori sélègsyonnen Pyès léjann Pyès dèskripsyon diff --git a/app/src/main/res/values-gl/strings.xml b/app/src/main/res/values-gl/strings.xml index e11716a51..1740c1890 100644 --- a/app/src/main/res/values-gl/strings.xml +++ b/app/src/main/res/values-gl/strings.xml @@ -452,7 +452,7 @@ Modelo de lente Números de serie Software - Compartir a aplicación vía… + Compartir a aplicación vía... Información da imaxe Non se atoparon categorías Cancelouse a carga diff --git a/app/src/main/res/values-hi/strings.xml b/app/src/main/res/values-hi/strings.xml index 237583853..50a04319b 100644 --- a/app/src/main/res/values-hi/strings.xml +++ b/app/src/main/res/values-hi/strings.xml @@ -39,6 +39,7 @@ %1$d फ़ाइलें अपलोड हो रहीं + \@string/contributions_subtitle_zero (%1$d) (%1$d) @@ -69,8 +70,8 @@ पासवर्ड भूल गये? खाता बनायें लॉग इन हो रहा है - कृपया प्रतीक्षा करें… - कृपया प्रतीक्षा करें… + कृपया प्रतीक्षा करें... + कृपया प्रतीक्षा करें... लॉग इन सफल! लॉग इन विफल! फ़ाइल नहीं मिली, कृपया अन्य फ़ाइल से प्रयास करें। @@ -349,7 +350,7 @@ रद्द करें वार्ता क्या आप वाकई सभी अपलोड रद्द करना चाहते हैं? - सभी अपलोड रद्द किये जा रहे हैं… + सभी अपलोड रद्द किये जा रहे हैं... अपलोड लंबित विफल हुआ diff --git a/app/src/main/res/values-hr/strings.xml b/app/src/main/res/values-hr/strings.xml index 414f0dd40..d2d731c39 100644 --- a/app/src/main/res/values-hr/strings.xml +++ b/app/src/main/res/values-hr/strings.xml @@ -15,22 +15,19 @@ Slika dana Postavlja se %1$d datoteka - Postavlja se %1$d datoteke Postavljaju se %1$d datoteke + \@string/contributions_subtitle_zero %1$d postavljena datoteka - %1$d postavljena datoteke %1$d postavljene datoteke Započeto %1$d postavljanje - Započinjem %1$d postavljanja Započeta %1$d postavljanja %1$d postavljanje - %1$d postavljanja %1$d postavljanja Ova će slika biti licencirana pod %1$s @@ -49,7 +46,7 @@ Zaboravljena zaporka? Otvori račun Prijava - Molimo pričekajte … + Molimo pričekajte ... Prijava uspješna! Prijava neuspješna! Datoteka nije pronađena. Molimo probajte drugu. @@ -107,7 +104,7 @@ Pošaljite povratnu informaciju (putem elektroničke pošte) Klijent za elektroničku poštu nije instaliran Nedavno rabljene kategorije - Pričekajte za prvu sinkronizaciju… + Pričekajte za prvu sinkronizaciju... Nemate još postavljenih slika. Pokušaj ponovo Odustani @@ -147,7 +144,7 @@ Da! Više informacija Kategorije - Učitavanje… + Učitavanje... Ništa nije odabrano Nema opisa Nepoznata licencija @@ -196,7 +193,7 @@ Stranica datoteke na Zajedničkom poslužitelju Stavka na Wikidati Članak na Wikipediji - Opišite medij što je više moguće: gdje je napravljen, što prikazuje,… Opišite objekte ili osobe. Napišite informacije koje ne mogu biti lako okrivene, npr. doba dana ako je u pitanju pejzaž. Ako medij prikazuje nešto neobično, molimo objasnite što je neobično. + Opišite medij što je više moguće: gdje je napravljen, što prikazuje,... Opišite objekte ili osobe. Napišite informacije koje ne mogu biti lako okrivene, npr. doba dana ako je u pitanju pejzaž. Ako medij prikazuje nešto neobično, molimo objasnite što je neobično. Mogući problemi s ovom slikom: Slika je pretamna. Slika je mutna. @@ -284,7 +281,7 @@ Promijenio/la sam mišljenje, ne želim da više bude javno vidljivo Toliko ste pridonijeli projektu da se naš sustav za računanje postignuća ne može nositi s time. To je vrhunsko postignuće. Došlo je do pogrješke tijekom obradbe slike. Molimo Vas, pokušajte ponovo! - Molimo Vas, pričekajte … + Molimo Vas, pričekajte ... Preskoči ovu sliku Zadani jezik za opis Pokušavanje ažuriranja kategorija. @@ -296,7 +293,7 @@ Dodano u oznake Nešto je pošlo po zlu. Ne možemo postaviti pozadinu Postavi kao pozadinu - Postavljanje pozadine. Molimo, pričekajte… + Postavljanje pozadine. Molimo, pričekajte... Zadano Tamno Svijetlo diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml index eb3438674..aefc17d9d 100644 --- a/app/src/main/res/values-hu/strings.xml +++ b/app/src/main/res/values-hu/strings.xml @@ -441,7 +441,7 @@ Sorozatszámok Szoftver Képek feltöltése Wikimedia Commons-ba közvetlenül a telefonodról. Töltsd le a Commons applikációt most: %1$s - Alkalmazás megosztása ezzel… + Alkalmazás megosztása ezzel... Képinformáció Nem található kategória Megszakított feltöltés @@ -474,7 +474,7 @@ Híd, múzeum, szálloda, stb. A belépés nem sikerült, kérj új jelszót. Beállítás háttérképnek - Beállítás háttérképnek. Kérem várjon… + Beállítás háttérképnek. Kérem várjon... Rendszerbeállítás követése Sötét Világos diff --git a/app/src/main/res/values-in/strings.xml b/app/src/main/res/values-in/strings.xml index 8fff554e3..219fa4521 100644 --- a/app/src/main/res/values-in/strings.xml +++ b/app/src/main/res/values-in/strings.xml @@ -61,6 +61,7 @@ %1$d Unggahan + Sedang menerima konten yang dibagikan. Memproses gambar mungkin memerlukan waktu lebih lama tergantung pada ukuran gambar dan perangkat Anda Sedang menerima konten yang dibagikan. Memproses gambar mungkin memerlukan waktu lebih lama tergantung pada ukuran gambar dan perangkat Anda Jelajahi @@ -81,7 +82,7 @@ Memasuki log Silakan tunggu… Memperbarui takarir dan deskripsi - Mohon tunggu… + Mohon tunggu... Berhasil masuk log! Gagal masuk log! Berkas tidak ditemukan. Silakan coba berkas lain. @@ -190,7 +191,7 @@ Ya! Informasi selengkapnya Kategori - Memuat… + Memuat... Tidak ada yang dipilih Tanpa takarir Tidak ada keterangan @@ -496,7 +497,7 @@ Akses lokasi media ditolak Kami mungkin tidak dapat memperoleh data lokasi secara otomatis dari gambar yang Anda unggah. Harap tambahkan lokasi yang sesuai untuk setiap gambar sebelum mengirimkannya Mengunggah foto ke Wikimedia Commons secara langsung dari telepon Anda. Unduh aplikasi Commons sekarang: %1$s - Bagikan aplikasi lewat… + Bagikan aplikasi lewat... Info Gambar Kategori tidak ditemukan Penggambaran tidak ditemukan @@ -522,6 +523,7 @@ Pembaruan kategori Berhasil + Kategori %1$s ditambahkan. Kategori %1$s ditambahkan. Tidak bisa menambahkan kategori. @@ -567,7 +569,7 @@ Ditambahkan ke pembatas Terjadi kesalahan. Tidak bisa menetapkan wallpaper Jadikan Wallpaper - Sedang menetapkan Wallpaper. Tolong tunggu… + Sedang menetapkan Wallpaper. Tolong tunggu... Ikuti sistem Gelap Terang @@ -623,9 +625,9 @@ Mode Koneksi Terbatas Gambar Berkualitas Gambar berkualitas adalah diagram atau foto yang memenuhi standar kualitas tertentu (yang sifatnya teknis) dan berharga bagi proyek Wikimedia - Melanjutkan unggahan… - Menunda unggahan… - Membatalkan pengunggahan… + Melanjutkan unggahan... + Menunda unggahan... + Membatalkan pengunggahan... Batalkan pengunggahan Anda menyalakan mode koneksi terbatas. Semua pengunggahan ditunda dan akan dilanjutkan begitu Anda mematikan mode ini. Mode sambungan terbatas sedang menyala. @@ -741,7 +743,7 @@ %d gambar dipilih Bicara - Membatalkan semua unggahan… + Membatalkan semua unggahan... Unggahan Menunggu Gagal diff --git a/app/src/main/res/values-io/strings.xml b/app/src/main/res/values-io/strings.xml index 994b1c3d3..51fe16441 100644 --- a/app/src/main/res/values-io/strings.xml +++ b/app/src/main/res/values-io/strings.xml @@ -70,9 +70,9 @@ Ka tu obliviis tua pasovorto? Enirar Eniranta - Voluntez vartar… + Voluntez vartar... Aktualiganta etiketi e deskripturi - Voluntez vartar… + Voluntez vartar... Eniro sucesoza! Eniro faliis! Arkivo ne trovita. Voluntez probar altr arkivo. @@ -142,7 +142,7 @@ Sendez komenti (per e-posto) Nula kliento di e-posto instalesis Kategorii recente uzita - Vartanta unesma sinkronigo… + Vartanta unesma sinkronigo... Vu ankore ne sendis fotografuri. Riprobar Nuligar @@ -180,7 +180,7 @@ Yes! Plusa informo Kategorii - Karganta… + Karganta... Nulo selektesis Nula deskripto-texto Nula deskripto @@ -410,7 +410,7 @@ Vu ne lektis irga avizo Vidar lektita Vidar ne-lektata - Vartez… + Vartez... Kopiita Exempli pri bona imaji por sendar a Commons Saltez ca imajo @@ -472,7 +472,7 @@ Ajusti Adjuntita marko-rubandi Uzar kom skreno-kovrilo - Kreanta skreno-kovrilo. Voluntez vartar… + Kreanta skreno-kovrilo. Voluntez vartar... Koloro obskura Koloro klara Charjez pluse @@ -500,7 +500,7 @@ Uzita Mea rango Imaji di qualeso - Nuliganta sendajo… + Nuliganta sendajo... Cesar kargajo Lektez pluse En omna idiomi diff --git a/app/src/main/res/values-is/strings.xml b/app/src/main/res/values-is/strings.xml index ac64fbf2c..417652953 100644 --- a/app/src/main/res/values-is/strings.xml +++ b/app/src/main/res/values-is/strings.xml @@ -3,7 +3,7 @@ * Sveinki * Sveinn í Felli --> - + Commons Facebook-síðan Grunnkóði Commons á Github Táknmerki Commons @@ -51,7 +51,7 @@ %1$d innsendingar - Tek við deildu efni. Meðhöndlun myndarinnar gæti tekið einhvern tíma, sem fer eftir stærð myndarinnar og gerð tækisins þíns + Tek við deildu efni. Meðhöndlun myndarinnar gæti tekið einhvern tíma, sem fer eftir stærð myndarinnar og gerð tækisins þíns Tek við deildu efni. Meðhöndlun myndarinnar gæti tekið einhvern tíma, sem fer eftir stærð myndaanna og gerð tækisins þíns Uppgötva @@ -138,7 +138,7 @@ Senda umsögn (með tölvupósti) Ekkert tölvupóstforrit er uppsett Nýlega notaðir flokkar - Bíð eftir fyrstu samstillingu… + Bíð eftir fyrstu samstillingu... Þú ert ekki ennþá búin(n) að senda inn neinar myndir. Reyna aftur Hætta við @@ -477,7 +477,7 @@ Hugbúnaður Aðgangi að staðsetningu gagnamiðla hafnað Sendu myndir inn á Wikimedia Commons beint úr símanum þínum. Sæktu Commons-appið núna: %1$s - Deila forriti með… + Deila forriti með... Upplýsingar í mynd Engir flokkar fundust Engar myndlýsingar fundust diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index e9aa8934e..f40863870 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -46,38 +46,31 @@ Foto del giorno %1$d file in caricamento - %1$d file in caricamento %1$d file in caricamento (%1$d) - (%1$d) (%1$d) Avvio del caricamento Elaborando %d caricamento - Elaborando %d caricamenti Elaborando %d caricamenti %d caricamento - %d caricamenti %d caricamenti Questa immagine sarà rilasciata in base alla licenza %1$s - Queste immagini saranno rilasciate in base alla licenza %1$s Queste immagini saranno rilasciate in base alla licenza %1$s %1$d caricamento - %1$d caricamenti %1$d caricamenti Ricezione di contenuti condivisi. L\'elaborazione dell\'immagine potrebbe richiedere del tempo a seconda delle dimensioni dell\'immagine e del dispositivo - Ricezione di contenuti condivisi. L\'elaborazione delle immagini potrebbe richiedere del tempo a seconda delle dimensioni delle immagini e del dispositivo Ricezione di contenuti condivisi. L\'elaborazione delle immagini potrebbe richiedere del tempo a seconda delle dimensioni delle immagini e del dispositivo Esplora @@ -523,7 +516,7 @@ Accesso alla posizione multimediale negato Potremmo non essere in grado di ottenere automaticamente i dati sulla posizione dalle immagini caricate. Si prega di aggiungere la posizione appropriata per ciascuna immagine prima di inviarla Carica foto su Wikimedia Commons direttamente dal tuo telefono. Scarica subito l\'app Commons: %1$s - Condividi applicazione tramite… + Condividi applicazione tramite... Informazioni sull\'immagine Nessuna categoria trovata Nessuna definizione trovata @@ -550,7 +543,6 @@ Successo Categoria %1$s aggiunta. - Categorie %1$s aggiunte. Categorie %1$s aggiunte. Non è stato possibile aggiungere le categorie. @@ -583,7 +575,7 @@ Esiste Necessita della fotografia Tipo di luogo: - Ponte, museo, albergo, ecc… + Ponte, museo, albergo, ecc... Si è verificato un errore durante l\'accesso. Devi reimpostare la password! MEDIA CLASSI FIGLIE @@ -596,7 +588,7 @@ Aggiungi ai preferiti Qualcosa è andato storto. Non è stato possibile impostare lo sfondo schermo Imposta come sfondo - Impostazione di sfondo in corso… + Impostazione di sfondo in corso... Segui sistema Scuro Chiaro @@ -766,7 +758,6 @@ Sessione scaduta. Accedi nuovamente. %d immagine selezionata - %d immagini selezionate %d immagini selezionate Questo posto non ha ancora una foto, scattane una! diff --git a/app/src/main/res/values-iw/strings.xml b/app/src/main/res/values-iw/strings.xml index 4b8c51f6c..0b512102b 100644 --- a/app/src/main/res/values-iw/strings.xml +++ b/app/src/main/res/values-iw/strings.xml @@ -45,37 +45,44 @@ מועלה קובץ אחד מועלים %1$d קבצים + מועלים %1$d קבצים מועלים %1$d קבצים (%1$d) (%1$d) + (%1$d) (%1$d) ההעלאות מתחילות עיבוד העלאה עיבוד d% העלאות + עיבוד d% העלאות עיבוד d% העלאות העלאה אחת %d העלאות + %d העלאות %d העלאות התמונה הזאת תפורסם ברישיון %1$s התמונות האלה תפורסמנה ברישיון %1$s + התמונות האלה תפורסמנה ברישיון %1$s התמונות האלה תפורסמנה ברישיון %1$s העלאה אחת %1$d העלאות + %1$d העלאות %1$d העלאות מתקבל תוכן שיתופי. עיבוד התמונה עשוי לארוך זמן מה כתלות בגודל התמונה והמכשיר שלך מתקבל תוכן שיתופי. עיבוד התמונות עשוי לארוך זמן מה כתלות בגודל התמונות והמכשיר שלך + מתקבל תוכן שיתופי. עיבוד התמונות עשוי לארוך זמן מה כתלות בגודל התמונות והמכשיר שלך מתקבל תוכן שיתופי. עיבוד התמונות עשוי לארוך זמן מה כתלות בגודל התמונות והמכשיר שלך לחקור @@ -94,9 +101,9 @@ שכחת את הסיסמה? רישום כניסה לחשבון - נא להמתין… + נא להמתין... עדכון כיתובים ותיאורים - נא להמתין… + נא להמתין... הכניסה הצליחה! הכניסה נכשלה! הקובץ לא נמצא. נא לנסות קובץ אחר. @@ -206,7 +213,7 @@ כן! מידע נוסף קטגוריות - בטעינה… + בטעינה... לא נבחר דבר אין כיתוב אין תיאור @@ -501,7 +508,7 @@ הצגת התראות שנקראו הצגת התראות שלא נקראו אירעה שגיאה בעת בחירת תמונות - נא להמתין… + נא להמתין... תמונות מובילות הן תמונות של צלמים ומאיירים מיומנים אותם בחרה קהילת ויקישיתוף בזכות איכות התוצר שהם תורמים לאתר. תמונות שהועלו דרך מקומות בסביבה הן התמונות שנשלחות על ידי גילוי מקומות במפה. תכונה זו מאפשרת לעורכים לשלוח מסרי תודה למשתמשים שביצעו עריכות מועילות - על ידי שימוש בקישור תודה בדף ההיסטוריה או בדף ההבדלים. @@ -523,7 +530,7 @@ הגישה למקום המדיה נדחתה ייתכן שלא נוכל לאתר את נתוני המקום מתמונות שהעלית. נא להוסיף את המקום המתאים לכל תמונה בטרם הגשתה כדי להעלות תמונות לוויקינתונים של ויקימדיה ישר מהטלפון שלך. אתם מוזמנים להוריד את היישום של ויקינתונים עכשיו: %1$s - שיתוף היישום דרך… + שיתוף היישום דרך... פרטי תמונה לא נמצאו קטגוריות לא נמצאו מוצגים @@ -551,6 +558,7 @@ נוספה קטגוריה. נוספו %1$s קטגוריות. + נוספו %1$s קטגוריות. נוספו %1$s קטגוריות. לא ניתן להוסיף קטגוריות. @@ -560,6 +568,7 @@ נוסף מוצג %1$s נוספו המוצגים %1$s + נוספו המוצגים %1$s נוספו המוצגים %1$s לא היה אפשר להוסיף מוצגים. @@ -602,7 +611,7 @@ נוסף לסימניות משהו השתבש. לא היה אפשר להגדיר את הטפט להגדיר בתור טפט - הגדרת טפט. נא להמתין… + הגדרת טפט. נא להמתין... מערכת מעקב כהה בהירה @@ -662,7 +671,7 @@ תמונות איכות הן תרשימים או תמונות שעומדות בתקני איכות מסוימים (שמטבעם בעיקר טכניים) והן בעלות ערך למיזמי ויקימדיה ההעלאה ממשיכה… ההעלאה מושהית… - ביטול ההעלאה… + ביטול ההעלאה... ביטול ההעלאה הפעלת מצב חיבור מוגבל. כל ההעלאות מושהות ותמשכנה לאחר השבתת המצב הזה. מצב חיבור מוגבל פעיל. @@ -792,6 +801,7 @@ נבחרה תמונה אחת נבחרו שתי תמונות + נבחרו %d תמונות נבחרו %d תמונות נא לזכור שכשמועלות כמה תמונות, כולן מקבלות את אותן הקטגוריות והמוצגים. אם התמונות אינן חולקות מוצגים וקטגוריות, נא לעשות כמה העלאות נפרדות. @@ -805,7 +815,7 @@ בעיה אחרת או מידע אחר (נא להסביר הלאה). המשוב שלך מתפרסם בדף הוויקי הבא: <a href=\"https://commons.wikimedia.org/wiki/Commons:Mobile_app/Feedback\">Commons:Mobile app/Feedback</a> האם ברצונך באמת לבטל את כל ההעלאות? - ביטול כל ההעלאות… + ביטול כל ההעלאות... העלאות ממתינות נכשלו diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index f60bb30dd..f20b986f8 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -44,6 +44,7 @@ %1$d 件のファイルをアップロード中 + (%1$d) (%1$d) アップロードを開始中です @@ -54,12 +55,14 @@ %d 件のアップロード + この画像は%1$sライセンスのもとにアップロードされます これらの画像は%1$sライセンスのもとにアップロードされます %1$d 件のアップロード + 共有コンテンツを受信中です。 この画像の投稿の処理には、サイズやご使用の機器により時間がかかる事があります 共有コンテンツの受信中です。投稿画像の処理には、サイズやご使用の機器により時間がかかる事があります 探索 @@ -557,7 +560,7 @@ ブックマークに追加 問題が発生しました。壁紙を設定できませんでした。 壁紙として設定 - 壁紙を設定中。お待ちください… + 壁紙を設定中。お待ちください... システムのまま ダーク ライト diff --git a/app/src/main/res/values-kab/strings.xml b/app/src/main/res/values-kab/strings.xml index eb90e4a23..40eb01629 100644 --- a/app/src/main/res/values-kab/strings.xml +++ b/app/src/main/res/values-kab/strings.xml @@ -47,8 +47,8 @@ Qqen Tettuḍ awal uffir? Jerred - Tuqqna… - Rǧu… + Tuqqna... + Rǧu... Tuqqna tedda! Tqqna ur teddi ara! Ulac afaylu. Ɛreḍ wayeḍ ma ulac aɣilif. @@ -100,7 +100,7 @@ Azen tikti (s yimayl) Ulac amsaɣ n yimayl ibedden Taggayin yettwasqedcenmelmi kan - Araǧu n umtawi amezwaru… + Araǧu n umtawi amezwaru... Ur tsuliḍ ara yakan tiwlafin. Ɛref̣ tikelt-nniḍen Sefsex @@ -130,7 +130,7 @@ Tɣileḍ igarrez? Ih! Taggayin - Asali… + Asali... Ula d yiwet ur tettwafren Ulac aglam Turagt tarussint diff --git a/app/src/main/res/values-ko/strings.xml b/app/src/main/res/values-ko/strings.xml index 3703d373f..aa7ae98e7 100644 --- a/app/src/main/res/values-ko/strings.xml +++ b/app/src/main/res/values-ko/strings.xml @@ -43,22 +43,28 @@ 검색 뷰 오늘의 이미지 + %1$d개의 파일을 올리는 중 %1$d개의 파일을 올리는 중 + (%1$d) (%1$d) 파일 올리기 + %1$d장의 업로드를 처리하는 중입니다 %1$d장의 업로드를 처리하는 중입니다 + %d개 업로드 %d개 업로드 + 이 그림은 %1$s에 따라 사용이 허가됩니다 이 그림은 %1$s에 따라 사용이 허가됩니다 + %1$d개 업로드 %1$d개 업로드 찾아보기 @@ -79,7 +85,7 @@ 로그인 중 기다려 주세요… 캡션 및 설명를 업데이트하는 중 - 기다려 주십시오… + 기다려 주십시오... 로그인 성공! 로그인 실패! 파일을 찾을 수 없습니다. 다른 파일을 사용해 주십시오. @@ -278,6 +284,7 @@ 위키텍스트를 클립보드에 복사했습니다 주변이 제대로 작동되지 않을 수 있습니다. 위치를 사용할 수 없습니다. 주변 장소의 목록을 표시하기 위한 권한이 필요합니다. + 주변 장소의 이미지 목록을 표시하기 위한 권한이 필요합니다 방향 위키데이터 위키백과 @@ -433,6 +440,7 @@ 완료 감사 표현 보내기: 성공 감사 표현 보내기: 실패 + 이것이 저작권 규정을 준수하고 있습니까? 알맞게 분류됐습니까? 기여자에게 감사를 표하시겠습니까? 앗, 분류가 달리지 않은 것 같습니다! @@ -447,10 +455,11 @@ 이미지가 올려지지 않음 읽지 않은 알림이 없습니다 읽은 알림이 없습니다 + 이메일의 받은 편지함을 확인하세요 읽은 항목 보기 읽지 않은 항목 보기 이미지 선택 도중 오류가 발생했습니다 - 기다려 주십시오… + 기다려 주십시오... 다음 미디어로 복사 복사했습니다 공용에 업로드할 좋은 이미지의 예 @@ -465,7 +474,7 @@ 렌즈 모델 일련 번호 소프트웨어 - 앱 공유… + 앱 공유... 이미지 정보 분류가 없습니다 서술이 발견되지 않았습니다 @@ -493,6 +502,7 @@ 성공 설명이 추가되었습니다. 캡션이 추가되었습니다. + 좌표를 추가하지 못했습니다. 설명을 추가하지 못했습니다. 캡션을 추가하지 못했습니다. 이미지 좌표가 업데이트되지 않았습니다 @@ -523,7 +533,7 @@ 북마크에 추가됨 무언가 잘못되었습니다. 배경화면을 설정하지 못했습니다 배경화면으로 설정 - 배경화면을 설정 중입니다. 기다려 주십시오… + 배경화면을 설정 중입니다. 기다려 주십시오... 어두운 밝은 위치 설정을 열지 못했습니다. 위치를 수동으로 켜주세요 @@ -543,6 +553,7 @@ 일시 정지 계속하기 일시 중단됨 + 더 보기 책갈피 리더보드 순위: @@ -638,6 +649,9 @@ 전체 화면 선택 모드에 오신 것을 환영합니다 두 손가락으로 확대 / 축소하세요. 다음 방향으로 길고 재빠르게 넘겨보세요. \n- 왼쪽/오른쪽: 이전/다음으로 이동 \n- 위쪽: 선택\n- 아래쪽: 비업로드용으로 표시 + 스토리지 접근이 거부됨 + 이 항목을 공유할 수 없습니다 + 기능에 대한 권한이 필요합니다 유용한 설명을 추가하는 법 알아보기 유용한 캡션을 추가하는 법 알아보기 업적 보기 @@ -651,6 +665,7 @@ 작성자에게 감사 표시하기 작성자에게 감사를 표하던 도중에 오류가 발생하였습니다. 로그인 세션 만료. 다시 로그인해 주십시오. + GPX 파일을 열 수 있는 응용 프로그램이 없습니다 파일이 성공적으로 저장되었습니다 GPX 파일을 여시겠습니까? KML 파일을 여시겠습니까? @@ -658,8 +673,20 @@ GPX 파일을 저장하지 못했습니다. KML 파일을 저장 중 GPX 파일을 저장 중 + + %d개 이미지 선택됨 + 다중 업로드에 대한 참고사항 이 항목에 관한 문제를 위키데이터에 보고하기 + 의견을 입력해 주십시오 토론 기타 문제 또는 정보 (아래에 설명해 주십시오) + 모든 업로드를 취소하는 중... + 업로드 + 보류 중 + 실패 + 장소 데이터를 불러오지 못했습니다 + 이 장소에 아직 사진이 없습니다. 사진을 찍어보세요! + 이 장소에 이미 사진이 있습니다. + 지금 이 장소에 사진이 있는지 확인 중입니다. diff --git a/app/src/main/res/values-krc/strings.xml b/app/src/main/res/values-krc/strings.xml index be63e9db5..55fa4ac35 100644 --- a/app/src/main/res/values-krc/strings.xml +++ b/app/src/main/res/values-krc/strings.xml @@ -143,7 +143,7 @@ Оюмунгу билдир (эл. почта бла) Почта клиент къурулмагъанды Кёб болмай хайырланнган категорияла - Биринчи синхронизацияны сакълаб турады… + Биринчи синхронизацияны сакълаб турады... Алкъын джюкленнген фотосуратыгъыз джокъду. Джангыдан сына Ызына ал @@ -227,7 +227,7 @@ Ызына ал Ач Джаб - Баш бет + Тамал бет Джюкле Джуўукъда Юсюнден @@ -498,7 +498,7 @@ Медиа локациягъа джетишиу уналмады Джюклеген суратладан локация билгилени автомат халда алмазгъа боллукъбуз. Тилейбиз, джибериуден алгъа хар сурат ючюн келишген локацияны къошугъуз Фотосуратланы телефонугъуздан туура Викигёзеннге джюклегиз. Гёзен Къошакъны энди эндиригиз: %1$s - Къошакъны буну бла юлюшле… + Къошакъны буну бла юлюшле... Сурат Информация Категорияла табылмадыла Танытыула табылмадыла @@ -575,7 +575,7 @@ Китаб белгилеге къошулду Не эсе да терс кетди. Къабыргъа къагъыт къурулалмады Къабыргъа къагъыт эт - Къабыргъа Къагъыт къурула турады. Тилейбиз сакълагъыз… + Къабыргъа Къагъыт къурула турады. Тилейбиз сакълагъыз... Системаны джарашдыр Къарангы Джарыкъ @@ -633,9 +633,9 @@ Чекленнген Байланыу Режим Агъачлары Мийик Суратла Агъачлы суратла, белгили агъач стандартларына (асламысыны техника халы болады) келишген эмда Викимедиа проектле ючюн багъалы болгъан диаграммала неда фотосуратладыла - Джюклениу андан ары бардырылады… - Джюклениу туракъланады… - Джюклениу ызына алынады… + Джюклениу андан ары бардырылады... + Джюклениу туракъланады... + Джюклениу ызына алынады... Джюклеуню Ызына Ал Чекли байланыу режимни джандырдыгъыз. Бютеу джюклениуле туракълатыллыкъдыла эмда бу режимни джукълатсагъыз, тохтагъан джерден башларыкъдыла. Чекленнген байланыу режим джандырылгъанды. diff --git a/app/src/main/res/values-ku/strings.xml b/app/src/main/res/values-ku/strings.xml index d9d5b65b9..506e9e4b4 100644 --- a/app/src/main/res/values-ku/strings.xml +++ b/app/src/main/res/values-ku/strings.xml @@ -70,8 +70,8 @@ Te şîfreya xwe ji bîr kir? Xwe tomar bike Têdikeve - Ji kerema xwe piçek bisekine … - Xêra xwe hinek bisekine… + Ji kerema xwe piçek bisekine ... + Xêra xwe hinek bisekine... Têketin bi ser ket! Têketin bi ser neket! Dosye nehat dîtin. Ji kerema xwe re dosyeyek din biceribîne. @@ -183,7 +183,7 @@ Wêneyên Barkirî Wêneyê din Belê, çima na - Ji kerema xwe piçek bisekine … + Ji kerema xwe piçek bisekine ... Wêne tevlî Wîkîpediyayê bike Tu dixwazî vê wêneyê tevlî gotara Wîkîpediyayê ya bi zimanê %1$s bikî? Pişrast bike diff --git a/app/src/main/res/values-kum/strings.xml b/app/src/main/res/values-kum/strings.xml index ab657b354..8112afea6 100644 --- a/app/src/main/res/values-kum/strings.xml +++ b/app/src/main/res/values-kum/strings.xml @@ -49,7 +49,7 @@ Юклев уьлгю: Дюр! Категориялар - Юклев… + Юклев... Бир зат сайланмагъан Тасвири ёкъ Пикирлешивлер ёкъ diff --git a/app/src/main/res/values-kus/strings.xml b/app/src/main/res/values-kus/strings.xml index 02abd4ea1..99fb8c1f7 100644 --- a/app/src/main/res/values-kus/strings.xml +++ b/app/src/main/res/values-kus/strings.xml @@ -62,9 +62,9 @@ Fʋ tami fʋ paaswɛɛtɛ? Yɔ\'ɔgin kpɛn\' Kpɛn\'ɛdnɛ - M bɛlimnɛ gu\'usim… + M bɛlimnɛ gu\'usim... Maligim maal pian\'azut nɛ pa\'alʋg nam - M bɛlimnɛ gu\'usim… + M bɛlimnɛ gu\'usim... Kpɛn\'ɛb nyaŋya Kpɛn\'ɛb gʋ\'ʋŋya M Pʋ nyɛ faal la. M bɛlimnɛ tiakim faal si\'a. @@ -169,7 +169,7 @@ Ɛɛn! Labaya bɛdigʋ Buudi kɔn\'ɔb-kɔn\'ɔb - Bɛ tʋʋma ni… + Bɛ tʋʋma ni... Pʋ gaŋ si\'ela Pian\'azug kae Pa\'alʋg kae @@ -400,7 +400,7 @@ Gɔsim dinɛ ka fʋ karim sa Gɔsim dinɛ ka fʋ nam pʋ karim Daʋŋʋ kidig footonam la nɔkirin - M bɛlimnɛ gu\'usim… + M bɛlimnɛ gu\'usim... Footo banɛ ka fʋ kpɛn\'ɛsi dɔlis zin\'ibanɛ be yamma anɛ footo banɛ ka fʋ kpɛn\'ɛs ka di yinɛ fʋn nyɛ di map ni la. Yaam paas media banɛ bɛ tuon Yaaiya @@ -418,7 +418,7 @@ Serial Numbers Software Pʋ bas suor ye fʋ kpɛn\' midia zin\'iginɛ - Pʋdigim app la dɔlis… + Pʋdigim app la dɔlis... Footo labaar Pʋ paam buudinama Pʋ nyɛ nwɛnnɛm si\'aa. @@ -492,7 +492,7 @@ Ba zaŋi paas bookmarknamin Daʋŋsi\'a naam. Pʋ nyaŋi maal nibdaa footo la Maalimi fʋ nindaa footo la - Maanɛ nindaa footo. M bɛlimnɛ gu\'usim… + Maanɛ nindaa footo. M bɛlimnɛ gu\'usim... Dɔl sistɛm la Lik Nɛɛsim @@ -538,9 +538,9 @@ Bas suor ye di tʋm saŋa bi\'ela! Atʋm bi\'ela zi\'esim Footo sʋma - Lɛm pin\'in kpɛn\'ɛsʋg… - Gu\'om kpɛn\'ɛsʋg… - Basid kpɛn\'ɛsʋg… + Lɛm pin\'in kpɛn\'ɛsʋg... + Gu\'om kpɛn\'ɛsʋg... + Basid kpɛn\'ɛsʋg... Basim kpɛn\'ɛsʋg Bas suor ye di tʋm saŋa bi\'ela. Nwɛnnɛm nam diff --git a/app/src/main/res/values-ky/strings.xml b/app/src/main/res/values-ky/strings.xml index 8b2ab6b95..2eb2fcf2f 100644 --- a/app/src/main/res/values-ky/strings.xml +++ b/app/src/main/res/values-ky/strings.xml @@ -21,6 +21,7 @@ %1$d файл жүктөлүүдө + Азырынча жүктөөлөр жок 1 жүктөө %1$d жүктөө @@ -136,7 +137,7 @@ Жүктөөнү жокко чыгаруу Артка баскычын колдонуу менен бул жүктөө жокко чыгарылат жана сиз ийгиликти жоготосуз Жүктөөнү улантуу - Күтө туруңуз… + Күтө туруңуз... Аталыш Сыпаттама Элементтер diff --git a/app/src/main/res/values-lb/strings.xml b/app/src/main/res/values-lb/strings.xml index d99e269ab..2ef8f9e03 100644 --- a/app/src/main/res/values-lb/strings.xml +++ b/app/src/main/res/values-lb/strings.xml @@ -61,7 +61,7 @@ Aloggen Waart wgl. … Beschrëftungen a Beschreiwungen aktualiséieren - Waart wgl. … + Waart wgl. ... Umeldung huet geklappt! D\'Aloggen huet net funktionéiert! Fichier net fonnt. Probéiert wgl. en anere Fichier. @@ -86,6 +86,7 @@ Nobäi Meng eropgeluede Fichieren Deelen + Fichierssäit weisen Beschrëftung (obligatoresch) Gitt wgl. eng Beschrëftung fir dëse Fichier un Beschreiwung @@ -93,6 +94,7 @@ Aloggen huet net funktionéiert – Problemer mam Reseau Ze dacks ouni Succès probéiert. Probéiert wgl. an e puer Minutten nach eng Kéier. Pardon, dëse Benotzer ass op Commons gespaart + Dir musst de Code vun Ärer Zwee-Facteur-Authentifizéierung uginn. Aloggen huet net funktionéiert Eroplueden Gitt dëser Biller een Numm @@ -349,7 +351,7 @@ Déi geliese weisen Déi net geliese weisen Feeler beim Eraussiche vun de Biller - Waart wgl. … + Waart wgl. ... Kopéiert Beispiller vu gudde Biller fir op Commons eropzelueden Beispiller fir Biller, déi een net eropluede sollt @@ -361,7 +363,7 @@ Seriennummeren Software Luet Fotoen direkt vun Ärem Handy op Wikimedia Commons erop. Luet d\'Commons-App elo erof: %1$s - App deelen iwwer… + App deelen iwwer... Bildinformatiounen Keng Kategorie fonnt. Eroplueden ofgebrach @@ -411,7 +413,7 @@ Bei d\'Lieszeechen derbäigesat Et ass Eppes schif gaangen. D\'Hannergrondbild konnt net agestallt ginn Als Hannergrondbild festleeën - Hannergrondbild gëtt agestallt. Waart wgl… + Hannergrondbild gëtt agestallt. Waart wgl... System suivéieren Däischter Hell @@ -454,7 +456,7 @@ Limitéierte Verbindungsmodus Qualitéitsbiller Qualitéitsbiller sinn Diagrammen oder Fotoen, déi gewësse Qualitéitscritèren erfëllen (déi haaptsächlech vun technescher Natur sinn) a wäertvoll fir Wikimedia-Projete sinn. - Eropluede gëtt ofgebrach…. + Eropluede gëtt ofgebrach.... Eroplueden ofbriechen Kategoriesäit weisen Sprooch vum Interface vum Benotzer vun der App diff --git a/app/src/main/res/values-li/strings.xml b/app/src/main/res/values-li/strings.xml index 1720bfbcb..f477ed8f0 100644 --- a/app/src/main/res/values-li/strings.xml +++ b/app/src/main/res/values-li/strings.xml @@ -33,8 +33,8 @@ Melj dich aan Wachwaord vergaete? Teiken dich in - Aan \'nt melje… - Wach estebleef… + Aan \'nt melje... + Wach estebleef... Aanmelje gelök! Aanmelje mislök! Bestandj neet gevónje. Perbeer \'n anger bestandj. @@ -88,7 +88,7 @@ Sjik feedback (mitten e-mail) Geine e-mailcliënt geïnstalleerd Recèntelik gebroekde categorieje - Oppe ieëste synchronisatie \'nt wachte… + Oppe ieëste synchronisatie \'nt wachte... Doe höbs nag gein plaetjes geüpload. Perbeer oppernuuj Braek aaf @@ -127,7 +127,7 @@ Versteis se \'t? Jao! Categorieje - \'nt laje… + \'nt laje... Geine gekaoze Gein besjrieving Ónbekande licentie diff --git a/app/src/main/res/values-lt/strings.xml b/app/src/main/res/values-lt/strings.xml index cb7bebe41..26a9bc7f7 100644 --- a/app/src/main/res/values-lt/strings.xml +++ b/app/src/main/res/values-lt/strings.xml @@ -33,27 +33,20 @@ Dienos nuotrauka %1$d keliamas failas - %1$d keliami failai - %1$d failų keliamas %1$d keliami failai - %1$d įkėlimas - %1$d įkėlimai - %1$d įkėlimų + \@string/contributions_subtitle_zero + 1 įkėlimas Įkėlimai pradedami Pradedamas %1$d įkėlimas - Pradedami %1$d įkėlimai - Pradedami %1$d įkėlimų Pradedami %1$d įkėlimai %1$d įkėlimas - %1$d įkėlimai - %1$d įkėlimų %1$d įkėlimai Šio paveikslėlio licencija bus %1$s @@ -75,7 +68,7 @@ Jungiamasi Prašome palaukti… Antraštės ir aprašymai atnaujinami - Prašome palaukti… + Prašome palaukti... Sėkmingai prisijungėte! Prisijungti nepavyko! Failas nerastas. Prašome pabandyti kitą failą. @@ -179,7 +172,7 @@ Taip! Daugiau informacijos Kategorijos - Kraunasi… + Kraunasi... Niekas nepasirinkta Nėra antraštės Nėra aprašymo @@ -472,7 +465,7 @@ Žiūrėti perskaitytus Žiūrėti neperskaitytus Renkant vaizdus įvyko klaida - Prašome palaukti… + Prašome palaukti... Rinktinės nuotraukos yra aukštos kvalifikacijos fotografų ir iliustratorių vaizdai, kuriuos Vikiteka bendruomenė pasirinko kaip svetainėje aukščiausios kokybės. Vaizdai, įkelti per Netoliese esančias vietas, yra vaizdai, kurie įkeliami atrandant vietas žemėlapyje. Ši funkcija leidžia redaktoriams siųsti padėkos pranešimą naudotojams, kurie atlieka naudingus pakeitimus, naudojant nedidelę padėkos nuorodą istorijos puslapyje arba skirtumų puslapyje. @@ -493,7 +486,7 @@ Prieiga prie medijos vietos uždrausta Gali būti, kad negalėsime automatiškai gauti vietos duomenų iš jūsų įkeltų nuotraukų. Prieš pateikdami kiekvienai nuotraukai pridėkite tinkamą vietą Įkelkite nuotraukas į Vikiteką tiesiai iš savo telefono. Atsisiųskite Vikitekos programėlę dabar: %1$s - Dalintis programą per … + Dalintis programą per ... Vaizdo informacija Kategorijų nerasta Vaizdų nerasta @@ -753,7 +746,7 @@ Kita problema arba informacija (paaiškinkite toliau). Jūsų atsiliepimai bus paskelbti šiame viki puslapyje: <a href=\"https://commons.wikimedia.org/wiki/Commons:Mobile_app/Feedback\">Commons:Mobile App/Feedback</a> Ar tikrai norite atšaukti visus įkėlimus? - Atšaukiami visi įkėlimai… + Atšaukiami visi įkėlimai... Įkėlimai Laukiama Nepavyko diff --git a/app/src/main/res/values-lv/strings.xml b/app/src/main/res/values-lv/strings.xml index 9038eec9d..7a6d9e362 100644 --- a/app/src/main/res/values-lv/strings.xml +++ b/app/src/main/res/values-lv/strings.xml @@ -21,7 +21,7 @@ Reģistrēties Pieslēdzas Lūdzu, uzgaidiet… - Lūdzu, uzgaidi… + Lūdzu, uzgaidi... Ieiešana veiksmīga Pieteikšanās neizdevās. Autentifikācija neizdevās! @@ -163,7 +163,7 @@ Nākamais attēls Skatīt arhivētos Skatīt nelasītos - Lūdzu, uzgaidiet… + Lūdzu, uzgaidiet... Izlaist šo attēlu Autors Autortiesības diff --git a/app/src/main/res/values-mk/strings.xml b/app/src/main/res/values-mk/strings.xml index c496505ae..916f4f420 100644 --- a/app/src/main/res/values-mk/strings.xml +++ b/app/src/main/res/values-mk/strings.xml @@ -4,7 +4,7 @@ * Violetova * Vlad5250 --> - + Ризницата на Фејсбук Изворен код на Ризницата на Github Лого на Ризницата @@ -52,7 +52,7 @@ %1$d подигања - Добивам споделена содржина. Обработката може да потрае, зависно од големината на сликата и вашиот уред + Добивам споделена содржина. Обработката може да потрае, зависно од големината на сликата и вашиот уред Добивам споделена содржина. Обработката може да потрае, зависно од големината на сликите и вашиот уред Истражи @@ -73,7 +73,7 @@ Најава Почекајте… Поднова на толкувања и описи - Почекајте… + Почекајте... Најавата е успешна! Најавата не успеа! Не ја пронајдов податотеката. Пробајте со друга. @@ -479,7 +479,7 @@ Погл. прочитани Погл. непрочитани Се јави грешка при избирањето на сликите - Почекајте… + Почекајте... Избраните слики се дела на високообучени фотографи и илустратори кои заедницата ги избрала за да бидат истакнати како едни од најдобрите слики на Ризницата. Сликите подигнати преку „Околни места“ се оние подигнати при откривање на места на картата. Ова им дава можност на уредниците да им испраќаат благодарници на корисниците што вршат полезни уредувања. Ова се прави стискајќи на малата врска за заблагодарување во страницата за историја или разлики. @@ -501,7 +501,7 @@ Одибиен пристапот до местоположбата на сликата Можеби нема да можеме автоматски да ги добиеме податоците за местоположба од сликите што ги подигате. Ставете ја соодветната местоположба за секоја слика пред да подигате Подигајте слики непосредно на Ризницата од телефон. Преземете го прилогот на Ризницата сега: %1$s - Сподели преку… + Сподели преку... Инфо за сликата Не пронајдов ниедна категорија Не пронајдов ниедно прикажување @@ -780,7 +780,7 @@ Друг проблем или информација (објаснете подолу). Вашите мислења се објавуваат на следнава викистраница: <a href=\"https://commons.wikimedia.org/wiki/Commons:Mobile_app/Feedback\">Commons:Mobile app/Feedback</a> Дали сигурно сакате да ги откажете сите подигања? - Ги откажувам сите подигања… + Ги откажувам сите подигања... Подигања Во исчекување Неуспешно diff --git a/app/src/main/res/values-mni/strings.xml b/app/src/main/res/values-mni/strings.xml index 0d8e029a4..de888dcbc 100644 --- a/app/src/main/res/values-mni/strings.xml +++ b/app/src/main/res/values-mni/strings.xml @@ -18,7 +18,7 @@ ꯈꯨꯠꯌꯦꯛ ꯄꯤꯈꯠꯂꯨ ꯃꯅꯨꯡ ꯆꯪꯁꯤꯟꯂꯤ ꯉꯥꯏꯍꯥꯛ ꯉꯥꯏꯕꯤꯌꯨ - ꯉꯥꯏꯍꯥꯛꯇꯪ ꯉꯥꯏꯕꯤꯈꯣ… + ꯉꯥꯏꯍꯥꯛꯇꯪ ꯉꯥꯏꯕꯤꯈꯣ... ꯃꯥꯏꯄꯥꯛꯅꯥ ꯆꯪꯁꯤꯜꯂꯦ ꯫ ꯆꯪꯁꯤꯟꯕ ꯃꯥꯏꯄꯥꯛꯇꯔꯦ! ꯐꯥꯏꯜ ꯊꯤꯕꯥ ꯐꯪꯗꯔꯦ ꯫ ꯆꯥꯟꯕꯤꯗꯨꯅꯥ ꯑꯇꯣꯞꯄ ꯑꯃꯥ ꯇꯧꯕꯤꯔꯣ ꯫ @@ -59,7 +59,7 @@ ꯍꯣꯏ! ꯑꯍꯦꯟꯕ ꯋꯥꯔꯣꯜ ꯃꯆꯥꯈꯥꯏꯕꯁꯤꯡ - ꯆꯤꯡꯂꯤ/ꯎꯪꯂꯤ….. + ꯆꯤꯡꯂꯤ/ꯎꯪꯂꯤ..... ꯑꯃꯠꯇ ꯈꯟꯗꯦ ꯑꯀꯨꯞꯄ ꯃꯔꯣꯜ ꯌꯥꯎꯗꯦ ꯈꯟꯅ-ꯅꯩꯅꯕ ꯂꯩꯇꯦ diff --git a/app/src/main/res/values-mnw/strings.xml b/app/src/main/res/values-mnw/strings.xml index 27a76b0a7..a6c18bca3 100644 --- a/app/src/main/res/values-mnw/strings.xml +++ b/app/src/main/res/values-mnw/strings.xml @@ -45,7 +45,7 @@ ဝိုတ်စ မအက္ခရ်ပၞုက် ပတိုန် စၟတ်သမ္တီ လုပ်လံက်အေန် ဒၟံင် - ပဂုန်တုဲ မင်မွဲလစုတ်… + ပဂုန်တုဲ မင်မွဲလစုတ်... လုက်အေန် အာစိုပ်ဒတုဲ! လံက်အေန် လီုလာ်! ဝှာင် ဟွံဂွံဆဵု၊ ပဂုန်တုဲ ဂၠာဲ ဝှာင်တၞဟ်။ @@ -148,7 +148,7 @@ ယွံ! ဆက်လဴ ပရူတင်ဂၞင် ကဏ္ဍဂမၠိုင် - ပတိုန်ဒၟံင်… + ပတိုန်ဒၟံင်... ဟွံမဲကဵု ပရေၚ်ရုဲစှ် ဟွံမဲကဵု က္ဍိုပ်လိက် ဟွံမဲကဵု ဗမံက်ထ္ၜး diff --git a/app/src/main/res/values-mr/strings.xml b/app/src/main/res/values-mr/strings.xml index 965594585..546b43f4f 100644 --- a/app/src/main/res/values-mr/strings.xml +++ b/app/src/main/res/values-mr/strings.xml @@ -17,6 +17,7 @@ %1$d संचिका अपभारीत होत आहे + अद्याप अपभारणे नाहीत एक अपभारण %1$d अपभारणे @@ -93,7 +94,7 @@ प्रतिसाद पाठवा (विपत्राद्वारे) कोणतेही ईमेल क्लायंट स्थापित नाहीत अलीकडे वापरलेले वर्ग - प्रथम संकालनाची प्रतीक्षा करीत आहे … + प्रथम संकालनाची प्रतीक्षा करीत आहे ... आपण अद्याप काहीच चित्रे अपभारीत केली नाहीत. पुन्हा प्रयत्न करा रद्द करा diff --git a/app/src/main/res/values-my/strings.xml b/app/src/main/res/values-my/strings.xml index e5dd0f3be..1fce0c0da 100644 --- a/app/src/main/res/values-my/strings.xml +++ b/app/src/main/res/values-my/strings.xml @@ -19,16 +19,20 @@ အားလုံး ယနေ့အတွက် အထူးဓာတ်ပုံ + ဖိုင် %1$d ခု တင်နေသည် ဖိုင် %1$d ခု တင်နေသည် အပ်ပလုဒ်များ စတင်ခြင်း + %1$d ခု တင်ထားသည် %1$d ခု တင်ထားသည် + ဤရုပ်ပုံသည် %1$ အောက်တွင် လိုင်စင်သတ်မှတ်ထးပါမည် ဤရုပ်ပုံများသည် %1$ အောက်တွင် လိုင်စင်သတ်မှတ်ထးပါမည် + %1$d အက်ပလုပ် %1$d အက်ပလုပ်များ ရှာဖွေစူးစမ်းပါ @@ -45,9 +49,9 @@ အကောင့်ဝင်ရန် စကားဝှက် မေ့နေပါသလား မှတ်ပုံတင်ရန် - လော့ဂ်အင် ဝင်ရောက်နေသည်… - ခေတ္တစောင့်ပါ… - ကျေးဇူးပြု၍ ခဏစောင့်ပါ… + လော့ဂ်အင် ဝင်ရောက်နေသည်... + ခေတ္တစောင့်ပါ... + ကျေးဇူးပြု၍ ခဏစောင့်ပါ... လော့အင် အောင်မြင်သည် လော့အင် မအောင်မြင်ပါ ဖိုင်မတွေ့ပါ၊ အခြးဖိုင်တစ်ခု စမ်းကြည့်ပါ။ @@ -129,7 +133,7 @@ ဟုတ်ကဲ့ သတင်းအချက်အလက် ပို၍ ကဏ္ဍများ - ဝန်ဆွဲတင်နေသည်… + ဝန်ဆွဲတင်နေသည်... ဘာမှရွေးချယ်မထားပါ ပုံစာ မရှိ ဖော်ပြချက် မရှိ @@ -311,7 +315,7 @@ မဖတ်ရသေးသော အသိပေးချက်များ မရှိပါ မဖတ်ရသေးသော အသိပေးချက်များ မရှိပါ ရုပ်ပုံများကိုရွေးနေစဉ် အမှားဖြစ်ပွားခဲ့ပါသည် - ကျေးဇူးပြု၍ ခဏစောင့်ပါ… + ကျေးဇူးပြု၍ ခဏစောင့်ပါ... နမူနာရုပ်ပုံများ အက်ပလုပ်တင်ရန် မဟုတ်ပါ ဤရုပ်ပုံအား ကျော်သွားမည် ဒေါင်းလုဒ် မအောင်မြင်ပါ။ ပြင်ပသိုလှောင်မှုခွင့်ပြုချက်မရှိဘဲ ဖိုင်ဒေါင်းလုဒ်မဆွဲနိုင်ပါ။ diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index 3b4bf30dc..de59e28de 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -522,7 +522,7 @@ Toegang tot medialocatie geweigerd Het is mogelijk dat we niet automatisch locatiegegevens kunnen verkrijgen van foto\'s die u uploadt. Voeg de locatie bij elke foto toe voordat u die upload Upload foto\'s rechtstreeks vanaf uw telefoon naar Wikimedia Commons. Download de Commons-app nu: %1$s - App delen via… + App delen via... Afbeeldingsinfo Geen categorieën gevonden Geen beschrijvingen gevonden @@ -599,7 +599,7 @@ Als bladwijzer toegevoegd Er is iets fout gegaan. Kan de achtergrond niet instellen Instellen als achtergrond - Wordt ingesteld als achtergrond. Een ogenblik geduld… + Wordt ingesteld als achtergrond. Een ogenblik geduld... Systeem volgen Donker Licht @@ -659,7 +659,7 @@ Kwaliteitsafbeeldingen zijn diagrammen of foto\'s die voldoen aan bepaalde kwaliteitsnormen (die meestal technisch van aard zijn) en waardevol zijn voor Wikimedia-projecten Uploaden hervatten… Uploaden onderbreken… - Uploaden wordt geannuleerd… + Uploaden wordt geannuleerd... Uploaden Annuleren U hebt de beperkte verbindingsmodus ingeschakeld. Alle uploads worden gepauzeerd en worden hervat zodra u deze modus uitschakelt. Beperkte verbindingsmodus is ingeschakeld. @@ -806,4 +806,7 @@ In behandeling Mislukt Plaatsgegevens konden niet geladen worden + Er is nog geen foto van deze plek, maak er eentje! + Er is al een foto van deze plek. + We controleren nu of er een foto van deze plek is. diff --git a/app/src/main/res/values-nqo/strings.xml b/app/src/main/res/values-nqo/strings.xml index 62e01d4d5..7e11ea03a 100644 --- a/app/src/main/res/values-nqo/strings.xml +++ b/app/src/main/res/values-nqo/strings.xml @@ -51,9 +51,9 @@ ߌ ߓߘߊ߫ ߢߌ߬ߣߊ߬ ߌ ߟߊ߫ ߕߊ߬ߡߌ߲߬ߞߊ߲ ߠߊ߫؟ ߖߊ߬ߕߋ߬ߘߊ ߟߊߞߊ߬ ߜߊ߲߬ߞߎ߲߬ߠߌ߲ ߦߋ߫ ߛߋ߲߬ߠߊ߫ - ߡߊ߬ߞߐ߬ߣߐ߲߬ߠߌ߲ ߞߍ߫ ߖߊ߰ߣߌ߲߬… + ߡߊ߬ߞߐ߬ߣߐ߲߬ߠߌ߲ ߞߍ߫ ߖߊ߰ߣߌ߲߬... ߝߍ߬ߛߓߍߟߌ ߣߌ߫ ߞߊ߲߬ߛߓߍߟߌ ߟߊߞߎߘߦߊ ߦߴߌ ߘߐ߫ - ߡߊ߬ߞߐ߬ߣߐ߲߬ߠߌ߲ ߞߍ߫ ߖߊ߰ߣߌ߲߬… + ߡߊ߬ߞߐ߬ߣߐ߲߬ߠߌ߲ ߞߍ߫ ߖߊ߰ߣߌ߲߬... ߜߊ߲߬ߞߎ߲߬ߠߌ߲ ߓߘߊ߫ ߛߎߘߊ߲߫߹ ߜߊ߲߬ߞߎ߲߬ߠߌ߲ ߓߘߊ߫ ߗߌߙߏ߲߫߹ ߞߐߕߐ߮ ߡߊ߫ ߛߐ߬ߘߐ߲߬. ߘߏ߫ ߜߘߍ߫ ߡߊߝߍߣߍ߲߫ ߖߊ߰ߣߌ߲߫. @@ -69,7 +69,7 @@ ߊ߬ ߛߐ߲߬ߞߌ߲߫ ߞߵߊ߬ ߦߋ߫ ߊ߬ ߛߐ߲߬ߞߌ߲߫ ߞߵߊ߬ ߦߋ߫ ߒ ߠߊ߫ ߟߊ߬ߦߟߍ߬ߣߍ߲߬ ߞߐ߯ߟߕߊ ߟߎ߬ - ߘߞߐ߬ߣߐ߲߬ߠߌ߲ ߘߐ߫… + ߘߞߐ߬ߣߐ߲߬ߠߌ߲ ߘߐ߫... ߊ߬ ߓߘߊ߫ ߗߌߙߏ߲߫ %1$d%% ߓߘߊ߫ ߘߝߊ߫ ߟߊ߬ߦߟߍ߬ߟߌ ߦߋ߫ ߛߋ߲߬ߠߊ߫ @@ -148,7 +148,7 @@ ߐ߲߬ߐ߲߬ߐ߲߫߹ ߞߎ߲߬ߠߊ߬ߝߎ߬ߟߋ߲߬ ߜߘߍ ߟߎ߬ ߦߌߟߡߊ ߟߎ߬ - ߟߊ߬ߢߎ߲߬ߠߌ߲ ߦߵߌ ߘߐ߫… + ߟߊ߬ߢߎ߲߬ߠߌ߲ ߦߵߌ ߘߐ߫... ߊ߬ ߡߊ߫ ߓߊߕߐ߬ߡߐ߲߬ ߝߍ߬ߛߓߍߟߌ߫ ߕߍ߫ ߦߋ߲߬ ߞߊ߲߬ߛߓߍߟߌ߫ ߕߴߦߋ߲߬ @@ -408,7 +408,7 @@ ߘߐ߬ߞߊ߬ߙߊ߲߬ߣߍ߲ ߠߎ߬ ߦߋ߫ ߘߐ߬ߞߊ߬ߙߊ߲߬ߓߊߟߌ ߟߎ߬ ߦߋ߫ ߝߎ߬ߕߎ߲߬ߕߌ ߓߌ߬ߟߊ߬ߣߍ߲߫ ߊ߬ ߘߐ߫ ߞߵߌ ߕߏ߫ ߖߌ߬ߦߊ߬ߓߍ ߓߊߕߐ߬ߡߐ߲ ߞߊ߲߬. - ߡߊ߬ߞߐ߬ߣߐ߲߬ߠߌ߲ ߞߍ߫ ߖߊ߰ߣߌ߲߬… + ߡߊ߬ߞߐ߬ߣߐ߲߬ߠߌ߲ ߞߍ߫ ߖߊ߰ߣߌ߲߬... ߓߘߊ߫ ߓߊߓߌ߬ߟߊ߬ ߖߌ߬ߦߊ߬ߓߍ߬ ߢߌ߬ߡߊ߬ ߟߊߦߟߍ߬ߕߊ ߟߎ߬ ߞߏߟߊ߲ߞߏߡߊ ߖߌ߬ߦߊ߬ߓߍ߬ ߖߎ߰ ߟߊߦߟߍ߬ߓߊߟߌ ߟߎ߬ ߞߏߟߊ߲ߞߏߡߊ @@ -418,7 +418,7 @@ ߘߌ߲߬ߞߌߙߊ ߖߌ߬ߦߊ߬ߕߊ߬ߟߊ߲ ߛߎ߮ߦߊ ߛߎ߲ߝߘߍ - ߟߥߊ߬ߟߌ߬ߟߊ߲ ߠߊߖߍ߲ߛߍ߲ ߢߌ߲߬ ߠߎ߫ ߞߊ߲߬… + ߟߥߊ߬ߟߌ߬ߟߊ߲ ߠߊߖߍ߲ߛߍ߲ ߢߌ߲߬ ߠߎ߫ ߞߊ߲߬... ߖߌ߬ߦߊ߬ߓߍ ߞߌ߬ߓߊ߬ߙߏ߬ߦߊ ߦߌߟߡߊߙߋ߲߫ ߕߴߦߋ߲߬ ߘߊ߲߬ߠߊ߬ߕߍ߰ߟߌ ߡߊ߫ ߛߐ߬ߘߐ߲߬ @@ -486,7 +486,7 @@ ߊ߬ ߓߌ߬ߟߊ߬ ߟߊ߬ߡߊ ߘߐ߫ ߞߏ ߘߏ߫ ߓߍ߲߬ߣߍ߫ ߕߎ߲߬ ߕߍ߫. ߘߊ߲߬ߘߊ߲߬ߥߟߊ ߕߍ߫ ߛߐ߲߬ ߘߐߓߍ߲߬ ߠߊ߫. ߊ߬ ߓߌ߬ߟߊ߬ ߘߊ߬ߣߊ߲߬ߥߟߊ ߟߊ߫. - ߘߊ߬ߣߊ߲߬ߥߟߊ ߘߊߘߐߓߍ߲߭ ߦߴߌ ߘߐ߫. ߌ ߟߐ߬ ߖߊ߰ߣߌ߲߫… + ߘߊ߬ߣߊ߲߬ߥߟߊ ߘߊߘߐߓߍ߲߭ ߦߴߌ ߘߐ߫. ߌ ߟߐ߬ ߖߊ߰ߣߌ߲߫... ߞߊ߲ߞߋ ߟߊߓߊ߬ߕߏ߬ ߘߌ߬ߓߌ ߦߋߟߋ߲ @@ -533,9 +533,9 @@ ߟߊߓߊ߯ߙߊߣߍ߲ ߒ ߠߊ߫ ߛߝߊ ߖߌ߬ߦߊ߬ߓߍ ߛߎ߯ߦߊ - ߟߊ߬ߦߟߍ߬ߟߌ ߘߊߡߌ߬ߣߊ߭ ߦߴߌ ߘߐ߫… - ߟߊ߬ߦߟߍ߬ߟߌ ߟߊߟߐ߭ ߦߴߌ ߘߐ߫… - ߟߊ߬ߦߟߍ߬ߟߌ ߘߐߛߊ߭ ߦߴߌ ߘߐ߫… + ߟߊ߬ߦߟߍ߬ߟߌ ߘߊߡߌ߬ߣߊ߭ ߦߴߌ ߘߐ߫... + ߟߊ߬ߦߟߍ߬ߟߌ ߟߊߟߐ߭ ߦߴߌ ߘߐ߫... + ߟߊ߬ߦߟߍ߬ߟߌ ߘߐߛߊ߭ ߦߴߌ ߘߐ߫... ߟߊ߬ߦߟߍ߬ߟߌ ߘߊߓߌ߬ߟߊ߬ ߡߋߘߌߦߊ ߝߊߙߊ߲ߝߊ߯ߛߌ ߦߌߟߡߊ߫ ߞߐߜߍ ߘߐߜߍ߫ diff --git a/app/src/main/res/values-oc/strings.xml b/app/src/main/res/values-oc/strings.xml index eab67e076..c097898e9 100644 --- a/app/src/main/res/values-oc/strings.xml +++ b/app/src/main/res/values-oc/strings.xml @@ -81,7 +81,7 @@ Mandar vòstres comentaris (per corrièl) Cap de client de corrièl pas installat Categorias utilizadas recentament - Espèra de primièra sincronizacion… + Espèra de primièra sincronizacion... Avètz pas encara telecargat cap de fòto. Tornar ensajar Anullar diff --git a/app/src/main/res/values-pa/strings.xml b/app/src/main/res/values-pa/strings.xml index d0ee73396..8c64900a5 100644 --- a/app/src/main/res/values-pa/strings.xml +++ b/app/src/main/res/values-pa/strings.xml @@ -8,7 +8,7 @@ * Sony dandiwal * ਗੁਰਪ੍ਰੀਤ ਹੁੰਦਲ --> - + ਕਾਮਨਜ਼ ਮਾਰਕਾ ਇੱਕ ਹੋਰ ਵੇਰਵਾ ਸ਼ਾਮਲ ਕਰੋ ਨਵਾਂ ਯੋਗਦਾਨ ਸ਼ਾਮਲ ਕਰੋ @@ -17,10 +17,11 @@ ਸਾਰੇ ਦਿਨ ਦੀ ਤਸਵੀਰ - ੧ ਫ਼ਾਈਲ ਚੜ੍ਹਾਈ ਜਾ ਰਹੀ ਹੈ + ੧ ਫ਼ਾਈਲ ਚੜ੍ਹਾਈ ਜਾ ਰਹੀ ਹੈ %1$d ਫ਼ਾਈਲਾਂ ਚੜ੍ਹਾਈਆਂ ਜਾ ਰਹੀਆਂ ਹਨ + \@string/contributions_subtitle_zero %1$d upload %1$d ਅੱਪਲੋਡ @@ -29,7 +30,7 @@ %1$d ਸ਼ੁਰੂ ਹੋ ਰਹੇ ਹਨ - %1$d ਅੱਪਲੋਡ + &d ਅੱਪਲੋਡ %1$d ਅੱਪਲੋਡਾਂ ਇਹ ਤਸਵੀਰ ਦਾ %1$s ਹੇਠ ਲਸੰਸ ਜਾਰੀ ਕੀਤੀ ਜਾਵੇਗਾ @@ -44,7 +45,7 @@ ਪਾਰਸ਼ਬਦ ਭੁੱਲ ਗਏ? ਦਾਖ਼ਲਾ ਹੋ ਰਿਹਾ ਹੈ ਉਡੀਕੋ ਜੀ… - ਕਿਰਪਾ ਕਰਕੇ ਉਡੀਕੋ… + ਕਿਰਪਾ ਕਰਕੇ ਉਡੀਕੋ... ਦਾਖ਼ਲ ਹੋਣਾ ਸਫ਼ਲ! ਦਾਖ਼ਲ ਹੋਣਾ ਅਸਫ਼ਲ! ਫ਼ਾਇਲ ਦੀ ਖੋਜ ਨਹੀਂ ਹੋ ਸਕੀ। ਕਿਰਪਾ ਕਰਕੇ ਹੋਰ ਫ਼ਾਇਲ ਖੋਜੋ। @@ -128,7 +129,7 @@ ਹਾਂ! ਹੋਰ ਜਾਣਕਾਰੀ ਸ਼੍ਰੇਣੀਆਂ - ਲੱਦ ਰਿਹਾ ਹੈ… + ਲੱਦ ਰਿਹਾ ਹੈ... ਕੋਈ ਵੀ ਨਹੀਂ ਚੁਣਿਆ ਕੋਈ ਵੇਰਵਾ ਨਹੀਂ ਕੋਈ ਗੱਲਬਾਤ ਨਹੀਂ @@ -200,7 +201,7 @@ ਇਜਾਜ਼ਤ ਦਿਓ ਖ਼ਾਰਜ ਕਰੋ ਧੰਨਵਾਦ ਭੇਜਣਾ: ਸਫਲ ਹੋਇਆ - ਕਿਰਪਾ ਕਰਕੇ ਉਡੀਕੋ… + ਕਿਰਪਾ ਕਰਕੇ ਉਡੀਕੋ... ਉਤਾਰਾ ਕੀਤਾ ਟਿਕਾਣਾ ਲਿਖਤ ਛਾਪੋ diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index 09132f40e..dcd8ea284 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -508,7 +508,7 @@ Zobacz przeczytane Wyświetl nieprzeczytane Wystąpił błąd podczas pobierania zdjęć - Proszę czekać… + Proszę czekać... Polecane zdjęcia to zdjęcia wysoko wykwalifikowanych fotografów i ilustratorów, które społeczność Wikimedia Commons wybrała jako jedne z najwyższych jakości na stronie. Obrazy przesłane przez Pobliskie miejsca to obrazy, które są przesyłane przez odkrywanie miejsc na mapie. Ta funkcja umożliwia redaktorom wysyłanie powiadomień z podziękowaniem do użytkowników, którzy dokonują przydatnych zmian - za pomocą małego linku z podziękowaniem na stronie historii lub na stronie diff. diff --git a/app/src/main/res/values-pms/strings.xml b/app/src/main/res/values-pms/strings.xml index b7449e957..bfbd64413 100644 --- a/app/src/main/res/values-pms/strings.xml +++ b/app/src/main/res/values-pms/strings.xml @@ -477,7 +477,7 @@ Vëdde lòn ch\'a l\'é stàit lesù Vëdde lòn ch\'a l\'é ancor nen ëstàit lesù A-i é staje n\'eror an selessionand le plance - Ch\'a l\'abia passiensa… + Ch\'a l\'abia passiensa... Le fòto an evidensa a son ëd plance fàite da dij fotògraf e ilustrator motobin àbij che la comunità ëd Wikipedia Commons a l\'ha sernù tra cole ëd qualità pi àuta an sël sit. Le plance carià dai pòst ëd prossimità a son le plance carià con la dëscuverta dij pòst an sla carta. Costa fonsionalità a përmet ai contributor ëd mandé na notìfica d\'aringrassiament a j\'utent ch\'a fan dle modìfiche ùtij - an dovrand na cita liura d\'aringrassiament an sla pàgina dla stòria o cola dle diferense. @@ -499,7 +499,7 @@ Acess a la locassion dël mojen arfudà I podoma pa oten-e an automàtich ij dàit ëd localisassion dle plance che chiel a caria. Për piasì, ch\'a giontà la posission apropià për tute le plance prima ëd mandeje Ch\'a caria dle fòto su Wikimedia Commons diretaman da sò teléfon. Ch\'a dëscaria l\'aplicassion Commons adess: %1$s - Partagé l\'aplicassion via… + Partagé l\'aplicassion via... Anformassion an sla plancia Gnun-e categorìe trovà Gnun-e descrission trovà @@ -776,9 +776,12 @@ Àutr problema o anformassion (për piasì, ch\'a spiega sì-sota). Ij sò sugeriment a saran giontà a coste pàgine wiki: <a href=\"https://commons.wikimedia.org/wiki/Commons:Mobile_app/Feedback\">Commons:Mobile app/Feedback</a> É-lo sigur ëd vorèj anulé tuti ij cariament? - Anulament ëd tuti ij cariament… + Anulament ëd tuti ij cariament... Cariament An atèisa Falì Impossìbil carié ij dàit dël pòst + Ës pòst a l\'ha ancor gnun-e fòto, ch\'a na pija un-a! + Ës pòst a l\'ha già dle fòto. + An camin ch\'as verìfica si cost pòst -sì a l\'ha dle fòto. diff --git a/app/src/main/res/values-ps/strings.xml b/app/src/main/res/values-ps/strings.xml index 461cb6b1d..4f17da26f 100644 --- a/app/src/main/res/values-ps/strings.xml +++ b/app/src/main/res/values-ps/strings.xml @@ -65,7 +65,7 @@ CC BY 3.0 هو وېشنيزې - رابرسېرېږي… + رابرسېرېږي... هېڅ هم نه دی ټاکل شوی څرگندونه نشته نامعلوم جواز diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index b0dd3b016..3779a8a51 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -28,7 +28,7 @@ * Tuliouel * YuriNikolai --> - + Página do Commons no Facebook Código fonte do Commons no Github Logotipo do Commons @@ -51,39 +51,32 @@ Estado do local Imagem do Dia - carregando arquivo - carregando %1$d arquivos + carregando arquivo carregando %1$d arquivos (%1$d) - (%1$d) (%1$d) Iniciando carregamentos Processando %d carregamento - Processando %d carregamentos Processando %d carregamentos %d carregamento - %d carregamentos %d carregamentos Esta imagem será licenciada sob %1$s - Estas imagens serão licenciadas sob %1$s Estas imagens serão licenciadas sob %1$s %1$d carregamento - %1$d carregamentos %1$d carregamentos - Recebendo conteúdo compartilhado. O processamento da imagem pode demorar algum tempo, dependendo do tamanho da imagem e do seu dispositivo - Recebendo conteúdo compartilhado. O processamento das imagens pode levar algum tempo, dependendo do tamanho das imagens e do dispositivo + Recebendo conteúdo compartilhado. O processamento da imagem pode demorar algum tempo, dependendo do tamanho da imagem e do seu dispositivo Recebendo conteúdo compartilhado. O processamento das imagens pode levar algum tempo, dependendo do tamanho das imagens e do dispositivo Explorar @@ -102,9 +95,9 @@ Esqueceu a senha? Cadastre-se Efetuar login - Por favor, aguarde… + Por favor, aguarde... Atualizando legendas e descrições - Por favor, aguarde… + Por favor, aguarde... Login bem sucedido Falha na identificação Arquivo não encontrado. Tente outro arquivo. @@ -168,7 +161,7 @@ Sobre O Wikimedia Commons é um aplicativo de código aberto criado e mantido por beneficiários e voluntários da comunidade Wikimedia. A Wikimedia Foundation não está envolvida na criação, desenvolvimento ou manutenção do aplicativo. Criar uma nova <a href=\"%1$s\">publicação no GitHub</a> para informar erros e sugestões. - Política de privacidade + Politica de privacidade Créditos Sobre Enviar comentários (por e-mail) @@ -255,7 +248,7 @@ Ponte de Arco-Íris Tulipa Bem-vindo à Wikipédia - Direitos de autor são bem-vindo + Direitos de autor são bem vindo Ópera de Sydney Cancelar Abrir @@ -313,7 +306,7 @@ Commons Avalie-nos Perguntas frequentes - Guia de usuário + Guia de usuario Pular Tutorial A Internet não está disponível Erro ao tentar obter as notificações @@ -528,7 +521,7 @@ Acesso à localização da mídia negado É possível que não possamos obter automaticamente os dados de localização das imagens que você carregar. Por favor adicione a localização adequada para cada imagem antes de envia-las Carregue fotos na wiki Wikimedia Commons, diretamente do seu celular. Baixe o aolicativo Commons agora: %1$s - Compartilhar aplicativo via… + Compartilhar aplicativo via... Informação da imagem Nenhuma categoria encontrada Nenhuma representação encontrada @@ -555,7 +548,6 @@ Sucesso A categoria %1$s foi adicionada. - As categorias %1$s foram adicionadas. As categorias %1$s foram adicionadas. Não foi possível adicionar categorias. @@ -564,7 +556,6 @@ Editar representações O elemento retratado %1$s está adicionado. - Os elementos retratados %1$s estão adicionados. Os elementos retratados %1$s estão adicionados. Não foi possível adicionar os elementos retratados. @@ -776,7 +767,6 @@ Salvar arquivo GPX %d imagem selecinada - %d imagens selecionadas %d imagens selecionadas Escreva algo sobre o item %1$s. Isso será visivel publicamente. diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml index 19a52d72f..bad9dc500 100644 --- a/app/src/main/res/values-pt/strings.xml +++ b/app/src/main/res/values-pt/strings.xml @@ -20,7 +20,7 @@ * Unamane * Vitorvicentevalente --> - + Página da wiki Commons no Facebook Código-fonte da wiki Commons no Github Logótipo da wiki Commons @@ -44,38 +44,31 @@ Imagem do Dia a carregar %1$d ficheiro - a carregar muitos %1$d ficheiros a carregar %1$d ficheiros (%1$d) - (%1$d) (%1$d) A iniciar carregamentos A processar %d carregamento - A processar %d carregamentos A processar %d carregamentos %d carregamento - %d carregamentos %d carregamentos Esta imagem será licenciada com a %1$s - Estas imagens serão licenciadas com a %1$s Estas imagens serão licenciadas com a %1$s %1$d carregamento - %1$d carregamentos %1$d carregamentos - A receber conteúdo partilhado. O processamento da imagem pode demorar algum tempo, dependendo do tamanho da mesma e do seu dispositivo - A receber conteúdo partilhado. O processamento da imagem pode demorar algum tempo, dependendo do tamanho da mesma e do seu dispositivo + A receber conteúdo partilhado. O processamento da imagem pode demorar algum tempo, dependendo do tamanho da mesma e do seu dispositivo A receber conteúdo partilhado. O processamento das imagens pode demorar algum tempo, dependendo do tamanho das mesmas e do seu dispositivo Explorar @@ -163,8 +156,8 @@ Política de privacidade Créditos Sobre - Enviar comentários (por correio eletrónico) - Não foi instalado nenhum cliente de correio eletrónico + Enviar comentários (por correio eletrónico) + Não foi instalado nenhum cliente de correio eletrónico Categorias usadas recentemente A aguardar pela primeira sincronização… Não carregou ainda nenhuma foto. @@ -283,7 +276,7 @@ Gravar as fotografias tiradas com a câmara da aplicação no armazenamento do seu dispositivo Inicie sessão na sua conta Enviar ficheiro de registos - Enviar o ficheiro de registos aos programadores por correio eletrónico para ajudar a corrigir problemas da aplicação. Nota: os registos podem conter informações identificativas + Enviar o ficheiro de registos aos programadores por correio eletrónico para ajudar a corrigir problemas da aplicação. Nota: os registos podem conter informações identificativas Não foi encontrado nenhum navegador da Internet para abrir o URL Erro! Não foi possível encontrar o URL Nomear para eliminação @@ -498,7 +491,7 @@ Ver lidas Ver não lidas Ocorreu um erro ao escolher imagens - Aguarde, por favor… + Aguarde, por favor... As fotografias destacadas são imagens de fotógrafos e ilustradores altamente qualificados, que a comunidade da wiki Wikimedia Commons escolheu como as de melhor qualidade do \'\'site\'\'. As imagens carregadas via \"Locais próximos\" são as imagens que são carregadas descobrindo locais do mapa. Esta funcionalidade permite que os editores enviem uma notificação de agradecimento aos utilizadores que fizerem edições úteis - usando uma pequena hiperligação de agradecimento na página do historial ou na de diferenças. @@ -520,7 +513,7 @@ Acesso à localização de multimédia negado Podemos não conseguir obter automaticamente os dados de localização das fotografias que carregar. Adicione a localização apropriada de cada fotografia antes de a enviar, por favor Carregue fotografias na wiki Wikimedia Commons, diretamente do seu telemóvel. Descarregue a aplicação Commons agora: %1$s - Partilhar aplicação por… + Partilhar aplicação por... Informação da imagem Não foi encontrada nenhuma categoria Não foi encontrada nenhuma representação @@ -547,7 +540,6 @@ Êxito A categoria %1$s foi adicionada. - As categorias %1$s foram adicionadas. As categorias %1$s foram adicionadas. Não foi possível adicionar categorias. @@ -556,7 +548,6 @@ Editar elementos retratados O elemento retratado %1$s está adicionado. - Os elementos retratados %1$s estão adicionados. Os elementos retratados %1$s estão adicionados. Não foi possível adicionar os elementos retratados. @@ -598,7 +589,7 @@ Adicionado aos marcadores Ocorreu um problema. Não foi possível definir a imagem de fundo Definir como imagem de fundo - A definir a imagem de fundo. Aguarde, por favor… + A definir a imagem de fundo. Aguarde, por favor... Seguir sistema Escuro Claro @@ -654,8 +645,8 @@ Modo de ligação limitada Imagens de qualidade As imagens de qualidade são diagramas ou fotografias que satisfazem certos padrões de qualidade (principalmente de natureza técnica) e são valiosos para projetos da Wikimedia - A retomar carregamento… - A pausar carregamento… + A retomar carregamento... + A pausar carregamento... A cancelar o carregamento… Cancelar carregamento Ativou o modo de ligação limitada. Todos os carregamentos foram colocados em pausa e serão retomados quando desativar este modo. @@ -718,7 +709,7 @@ Não foi encontrada nenhuma localização Que tal adicionar o local onde a imagem foi tirada?\nOs dados de localização ajudam os editores da wiki a encontrarem a sua fotografia, tornando-a muito mais útil.\nObrigado! Adicionar localização - Remova desta mensagem de correio todas as informações que não se sinta à vontade em partilhar publicamente, por favor. Adicionalmente, esteja consciente de que o seu endereço de correio eletrónico, com o qual está a fazer esta publicação, e o nome e imagem de perfil a ele associados, serão visíveis pelo público geral. + Remova desta mensagem de correio todas as informações que não se sinta à vontade em partilhar publicamente, por favor. Adicionalmente, esteja consciente de que o seu endereço de correio eletrónico, com o qual está a fazer esta publicação, e o nome e imagem de perfil a ele associados, serão visíveis pelo público geral. Detalhes As realizações só estão disponíveis na versão de produção; consulte a documentação para programadores, por favor. A tabela de classificação só está disponível na versão prod. Consulte a documentação do desenvolvedor. @@ -769,7 +760,6 @@ Erro no envio de agradecimento ao autor. %d imagem selecionada - %d imagens selecionadas %d imagens selecionadas diff --git a/app/src/main/res/values-ro/strings.xml b/app/src/main/res/values-ro/strings.xml index ad1d0b805..0bcbc1550 100644 --- a/app/src/main/res/values-ro/strings.xml +++ b/app/src/main/res/values-ro/strings.xml @@ -28,8 +28,8 @@ %1$d de fișiere se încarcă + \@string/contributions_subtitle_zero (%1$d) - (%1$d) (%1$d) Pornirea încărcărilor @@ -74,8 +74,8 @@ V-ați uitat parola? Înregistrare Se conectează - Vă rugăm să așteptați … - Vă rugăm să așteptați … + Vă rugăm să așteptați ... + Vă rugăm să așteptați ... Autentificare reușită! Autentificare nereușită! Fișierul nu a fost găsit. Încercați cu un alt fișier. @@ -458,7 +458,7 @@ Vezi citit Vezi necitit A apărut o eroare la alegerea imaginilor - Vă rugăm să așteptați … + Vă rugăm să așteptați ... Imaginile de Calitate sunt imagini ale unor fotografi și ilustratori de înaltă calificare, pe care comunitatea Wikimedia Commons a ales-o ca fiind de cea mai înaltă calitate pe site. Imaginile Încărcate prin Locurile din Apropiere sunt imaginile care sunt încărcate prin descoperirea locurilor de pe hartă. Această caracteristică permite editorilor să trimită o notificare de Mulțumire utilizatorilor care fac modificări utile - folosind un mic link de mulțumire pe pagina istoric sau pe pagina dif. @@ -478,7 +478,7 @@ Numere Serie Software Încărcați fotografii pe Wikimedia Commons direct de pe telefon. Descărcați aplicația Commons acum: %1$s - Partajează aplicația prin … + Partajează aplicația prin ... Informații despre imagine Nu s-au găsit categorii Nu s-au Găsit Reprezentări diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index 861d7ee27..b15d77787 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -45,7 +45,7 @@ * ЛингвоЧел * ОйЛ --> - + Facebook-страница Викисклада Исходный код Викисклада на гитхабе Логотип Викисклада @@ -105,7 +105,7 @@ %1$d загрузок - Получение общего содержимого. Обработка изображения может занять некоторое время, в зависимости от размера изображения и модели вашего устройства + Получение общего содержимого. Обработка изображения может занять некоторое время, в зависимости от размера изображения и модели вашего устройства Получение общего содержимого. Обработка изображений может занять некоторое время, в зависимости от размера изображения и модели вашего устройства Получение общего содержимого. Обработка изображений может занять некоторое время, в зависимости от размера изображения и модели вашего устройства Получение общего содержимого. Обработка изображений может занять некоторое время, в зависимости от размера изображения и модели вашего устройства @@ -556,7 +556,7 @@ Отказано в доступе к местоположению файла Возможно, мы не сможем автоматически получать данные о местоположении из загруженных вами изображений. Пожалуйста, добавьте подходящее место для каждого изображения перед отправкой Загружайте фото на Викисклад прямо с телефона. Скачайте приложение Wikimedia Commons прямо сейчас: %1$s - Поделиться приложением с помощью… + Поделиться приложением с помощью... Информация об изображении Категории не найдены. Описания не найдены @@ -637,7 +637,7 @@ Добавлено в закладки Что-то пошло не так. Не удалось установить фоновую заставку Сделать фоновой заставкой - Идёт установка фоновой заставки… + Идёт установка фоновой заставки... Настройки системы Тёмная Светлая @@ -695,8 +695,8 @@ Режим ограниченного подключения Качественные изображения Качественные изображения - это диаграммы или фотографии, которые соответствуют определенным стандартам качества (которые в основном носят технический характер) и представляют ценность для проектов Викимедиа - Возобновление загрузки… - Приостановка загрузки… + Возобновление загрузки... + Приостановка загрузки... Отмена загрузки… Отменить загрузку Вы включили ограниченный режим подключения. Все загрузки приостановлены и возобновятся после отключения этого режима. @@ -841,7 +841,7 @@ Другая проблема или информация (пожалуйста, объясните ниже). Ваш отзыв будет опубликован на следующей вики-странице: <a href=\"https://commons.wikimedia.org/wiki/Commons:Mobile_app/Feedback\">Commons:Mobile app/Feedback</a> Вы уверены, что хотите отменить все загрузки? - Отмена всех загрузок… + Отмена всех загрузок... Загрузки В ожидании Не удалось diff --git a/app/src/main/res/values-sd/strings.xml b/app/src/main/res/values-sd/strings.xml index d4b591659..08f9a1fec 100644 --- a/app/src/main/res/values-sd/strings.xml +++ b/app/src/main/res/values-sd/strings.xml @@ -169,7 +169,7 @@ ھا! وڌيڪ معلومات زمرا - لاهيندي… + لاهيندي... ڪوبہ چونڊيل ناھي عنوان ناهي ڪا تشريح ناھي @@ -315,7 +315,7 @@ لينس ماڊل سيريل انگ سافٽويئر - ايپ ذريعي ونڊيو… + ايپ ذريعي ونڊيو... عڪس معلومات زمرا نہ لڌا رد-ڪيل چاڙھ diff --git a/app/src/main/res/values-se/strings.xml b/app/src/main/res/values-se/strings.xml index 0489c363a..78114e336 100644 --- a/app/src/main/res/values-se/strings.xml +++ b/app/src/main/res/values-se/strings.xml @@ -44,9 +44,9 @@ Vajáldahttetgo beassansáni? Searvva Čáliha sisa - Vuordil… + Vuordil... Ođasmáhttá govvateavsttaid ja govvádusaid - Vuordil… + Vuordil... Sisačáliheapmi lihkostuvai! Sisačáliheapmi ii lihkostuvvan! Fiila ii gávdnon. Geahččal áinnas eará fiilla. @@ -112,7 +112,7 @@ Atte máhcahaga (e-poasttain) Ii leat ásahuvvon epoastadoaimmaheaddji Áitto geavahuvvon kategoriijat - Vuordime vuosttaš synkroniserema… + Vuordime vuosttaš synkroniserema... It leat vel bajásluđen ovttage gova. Geahččal ođđasit Gaskkalduhte @@ -143,7 +143,7 @@ Jua! Lassedieđut Kategoriijat - Luđeme… + Luđeme... Ii guhtege válljejuvvon Ii leat govvateaksta Ii gávdno govvádus diff --git a/app/src/main/res/values-sh/strings.xml b/app/src/main/res/values-sh/strings.xml index 8e9cde75c..5997677ef 100644 --- a/app/src/main/res/values-sh/strings.xml +++ b/app/src/main/res/values-sh/strings.xml @@ -112,7 +112,7 @@ Pošaljite Vašu povratnu informaciju (putem e-pošte) Nemate uspostavljen klijent za e-poštu Nedavno korištene kategorije - Čekam prvo usklađivanje… + Čekam prvo usklađivanje... Još uvijek niste otpremili nijednu sliku. Pokušaj ponovo Otkaži @@ -147,7 +147,7 @@ Da! Više informacija Kategorije - Učitavanje… + Učitavanje... Ništa nije odabrano Nema opisa Nema razgovora diff --git a/app/src/main/res/values-si/strings.xml b/app/src/main/res/values-si/strings.xml index 0e661acb7..92fa25f3e 100644 --- a/app/src/main/res/values-si/strings.xml +++ b/app/src/main/res/values-si/strings.xml @@ -5,24 +5,25 @@ * Sandaru * හරිත --> - + කොමන්ස් ෆේස්බුක් පිටුව කොමන්ස් ලාන්චනය කොමන්ස් වෙබ් අඩවිය - 1 ගොනුවක් උඩුගත කෙරේ + 1 ගොනුවක් උඩුගත කෙරේ ගොනු %d ක් උඩුගත කෙරේ - එක් උඩුගත කිරීමක් ඇත + තවමත් කිසිදු උඩුගත කිරීමක් නැත + එක් උඩුගත කිරීමක් ඇත උඩුගත කිරීම් %1$d ක් ඇත - 1 උඩුගත කිරීමක් ආරම්භ කරමින් + 1 උඩුගත කිරීමක් ආරම්භ කරමින් උඩුගත කිරීම් %1$d ක් ආරම්භ කරමින් - 1 උඩුගත කිරීමක් + 1 උඩුගත කිරීමක් උඩුගත කිරීම් %1$d ක් මෙම පින්තූරය %1$s යටතේ වලංගු වනු ඇත diff --git a/app/src/main/res/values-sk/strings.xml b/app/src/main/res/values-sk/strings.xml index 99a0bf548..49fc88a3b 100644 --- a/app/src/main/res/values-sk/strings.xml +++ b/app/src/main/res/values-sk/strings.xml @@ -491,7 +491,7 @@ Zobraziť prečítané Zobraziť neprečítané Nastala chyba pri vyberaní obrázkov - Čakajte, prosím… + Čakajte, prosím... Najlepšie obrázky sú fotografie od vysoko skúsených fotografov a ilustrátorov, ktoré vybrala komunita Wikimedie Commons ako jedny z najkvalitnejších na stránke. Obrázky nahrané cez Miesta v okolí sú obrázky, ktoré sú nahrané vďaka objavovaniu miest na mape. Táto funkcia umožňuje poslať poďakovanie za užitočné úpravy používateľom – použitím malého odkazu poďakovať v histórií stránky alebo na stránke rozdielu medzi revíziami. @@ -513,7 +513,7 @@ Prístup k polohe médií bol odmietnutý Možno nebudeme môcť automaticky získať údaje o polohe z obrázkov, ktoré nahráte. Pred odoslaním, prosím, pridajte ku každému obrázku údaj o polohe. Nahrávajte fotky na Wikimedia Commons priamo z vášho mobilu. Stiahnite si aplikáciu Wikimedia Commons teraz: %1$s - Zdieľať aplikáciu cez… + Zdieľať aplikáciu cez... Informácie o obrázku Nenájdené žiadne kategórie Neboli nájdené spôsoby vykreslovania @@ -593,7 +593,7 @@ Pridané do záložiek Niečo sa pokazilo. Tapetu sa nepodarilo nastaviť Nastaviť ako tapetu - Nastavujem tapetu. Prosím, čakajte… + Nastavujem tapetu. Prosím, čakajte... Predvolený systém Tmavý Svetlý @@ -651,9 +651,9 @@ Mód limitovaného pripojenia Kvalitné obrázky Kvalitné obrázky sú diagramy a fotografie, ktoré spĺňajú určité štandardy (ktoré sú väčšinou technického charakteru) a sú cenné pre projekty Wikimédie - Pokračovanie nahrávania… - Pozastavovanie nahrávania… - Prerušovanie nahrávania… + Pokračovanie nahrávania... + Pozastavovanie nahrávania... + Prerušovanie nahrávania... Zrušiť nahrávanie Zapli ste mód limitovaného pripojenia. Všetky nahrávania budú teraz pozastavené a budú pokračovať až po vypnutí tohto módu. Mód limitovaného pripojenia je zapnutý. @@ -787,7 +787,7 @@ Iný problém alebo informácia (vysvetlite nižšie). Vaša spätná väzba sa zverejní na nasledujúcej wiki stránke: <a href=\"https://commons.wikimedia.org/wiki/Commons:Mobile_app/Feedback\">Commons:Mobile app/Feedback</a> Ste si istí, že chcete zrušiť všetky nahrávania? - Ruším všetky nahrávania… + Ruším všetky nahrávania... Nahrané súbory Čakajúce Zlyhané diff --git a/app/src/main/res/values-sl/strings.xml b/app/src/main/res/values-sl/strings.xml index b91c3c0b1..61531980f 100644 --- a/app/src/main/res/values-sl/strings.xml +++ b/app/src/main/res/values-sl/strings.xml @@ -6,7 +6,7 @@ * McDutchie * Upwinxp --> - + Facebook stran Zbirke Izvorna koda Zbirke v shrambi Github Logotip Zbirke @@ -66,8 +66,8 @@ %1$d nalaganj - Prejemam deljeno vsebino. Obdelava slike lahko traja nekaj časa, odvisno od velikosti slike in vaše naprave. - Prejemam deljeno vsebino. Obdelava slik lahko traja nekaj časa, odvisno od velikosti slike in vaše naprave. + Prejemam deljeno vsebino. Obdelava slike lahko traja nekaj časa, odvisno od velikosti slike in vaše naprave. + Prejemam deljeno vsebino. Obdelava slik lahko traja nekaj časa, odvisno od velikosti slike in vaše naprave. Prejemam deljeno vsebino. Obdelava slik lahko traja nekaj časa, odvisno od velikosti slike in vaše naprave. Prejemam deljeno vsebino. Obdelava slik lahko traja nekaj časa, odvisno od velikosti slike in vaše naprave. @@ -87,9 +87,9 @@ Ste pozabili geslo? Ustvari račun Prijavljanje - Prosimo, počakajte … + Prosimo, počakajte ... Posodabljam napise in opise - Prosimo, počakajte … + Prosimo, počakajte ... Uspešno ste se prijavili! Prijava ni uspela! Datoteka ni bila najdena. Prosimo, poskusite z drugo datoteko. @@ -133,7 +133,7 @@ Spremembe Naloži Poišči kategorije - Poiščite predmete, ki jih vaša predstavnostna datoteka prikazuje (gora, Tadž Mahal, …) + Poiščite predmete, ki jih vaša predstavnostna datoteka prikazuje (gora, Tadž Mahal, ...) Shrani Osveži Seznam @@ -159,7 +159,7 @@ Pošljite povratno informacijo (prek e-pošte) Nameščen ni noben e-poštni odjemalec Pred kratkim uporabljene kategorije - Čakam na prvo sinhronizacijo … + Čakam na prvo sinhronizacijo ... Naložili niste še nobene fotografije. Poskusi znova Prekliči @@ -199,7 +199,7 @@ Da! Več informacij Kategorije - Nalaganje … + Nalaganje ... Nič ni izbrano Ni napisa Ni opisa @@ -491,7 +491,7 @@ Ogled prebranih Ogled neprebranih Pri izbiri slik je prišlo do napake - Prosimo, počakajte … + Prosimo, počakajte ... Izbrane slike so slike izvrstnih fotografov in ilustratorjev, ki jih je skupnost Wikimedijine zbirke prepoznala kot najbolj kakovostne v tem projektu. Slike, naložene z Bližnjimi kraji, so slike, ki so naložene z odkrivanjem krajev na zemljevidu. Ta možnost vam omogoča, da urejevalcem, ki so opravili koristno urejanje, pošljete zahvalo – z uporabo kratke povezave na strani zgodovine ali strani primerjave. @@ -513,7 +513,7 @@ Dostop do lokacije predstavnosti zavrnjen Za slike, ki jih nalagate, ne moremo samodejno pridobiti lokacije. Pred pošiljanjem dodajte za vsako sliko ustrezno lokacijo. Nalagajte slike v Wikimedijino zbirko neposredno iz telefona. Prenesite aplikacijo Commons zdaj: %1$s - Deli aplikacijo prek … + Deli aplikacijo prek ... Informacije o sliki Ni najdenih kategorij Ni najdenih upodobitev @@ -569,7 +569,7 @@ Koordinat ni bilo mogoče pridobiti. Ni bilo mogoče pridobiti opisov. Uredi opise in napise - Deli slike prek … + Deli slike prek ... Ničesar še niste prispevali %s ni opravil_a še nobenega prispevka Račun ustvarjen! @@ -593,7 +593,7 @@ Dodano med zaznamke Nekaj je šlo narobe. Ozadja ni bilo mogoče nastaviti. Nastavi kot ozadje - Nastavljam ozadje. Prosimo, počakajte … + Nastavljam ozadje. Prosimo, počakajte ... Sledi sistemu Temna Svetla @@ -649,9 +649,9 @@ Način omejene povezanosti Kakovostne slike Kakovostne slike so ponazoritve ali fotografije, ki ustrezajo nekaterim merilom kakovosti (ta so predvsem tehnična) in so dragocene za projekte Wikimedie - Nalaganje se nadaljuje… - Zaustavljam nalaganje… - Preklicujem nalaganje… + Nalaganje se nadaljuje ... + Zaustavljam nalaganje ... + Preklicujem nalaganje ... Preklic nalaganja Vklopili ste način omejene povezanosti. Vsa nalaganja so začasno ustavljena in se bodo nadaljevala, ko boste ta način izklopili. Način omejene povezanosti je vklopljen. diff --git a/app/src/main/res/values-sr/strings.xml b/app/src/main/res/values-sr/strings.xml index f1e7412d4..40e99618f 100644 --- a/app/src/main/res/values-sr/strings.xml +++ b/app/src/main/res/values-sr/strings.xml @@ -34,39 +34,32 @@ Слика дана %1$d датотека се отпрема - %1$d датотеке се отпремају %1$d датотеке се отпремају %1$d отпремање - %1$d отпремања %1$d отпремања Покретање отпремања Процесуирање %d отпремање - Процесуирање %d отпремања Процесуирање %d отпремања %d отпремање - %1$d отпремања %d отпремања Слика ће се водити под лиценцом %1$s - Слике ће се водити под лиценцом %1$s Слике ће се водити под лиценцом %1$s %1$d отпремање - %1$d отпремања %1$d отпремања - Пријем %d дељеног садржаја… Процесуирање слике може потрајати неко време, у зависности од величине слике и вашег уређаја - Пријем %d дељеног садржаја… Процесуирање слика може потрајати неко време, у зависности од величине слика и вашег уређаја - Пријем %d дељеног садржаја… Процесуирање слика може потрајати неко време, у зависности од величине слика и вашег уређаја + Примање дељеног садржаја... Процесуирање слике може потрајати неко време, у зависности од величине слике и вашег уређаја + Примање дељеног садржаја... Процесуирање слика може потрајати неко време, у зависности од величине слика и вашег уређаја Истрага Изглед @@ -503,7 +496,7 @@ Приступ локацији медија је одбијен Можда нећемо моћи да аутоматски прибавимо податке о локацији из слика које отпремите. Додајте одговарајућу локацију за сваку слику пре објављивања Отпреми фотографије на Викимедијину Оставу директно са свог телефона. Преузми апликацију Оставе сада: %1$s - Подели апликацију преко… + Подели апликацију преко... Информације о слици Нису пронађене категорије Отказано отпремање @@ -528,13 +521,12 @@ Успешно Категорија %1$s је додата. - Категорије %1$s су додате. Категорије %1$s су додате. Није могуће додати категорије. Ажурирај категорију Уреди приказе - Ажурирање координата… + Ажурирање координата... Ажурирање координата Ажурирање описа Ажурирање натписа @@ -737,7 +729,6 @@ Чување GPX датотеке %d слика је одабрана - %d слике су одабране %d слика је одабрано Унесите коментар @@ -746,4 +737,6 @@ Отпремања На чекању Није успело + Ово место већ има слику + Проверавање да ли ово место има слику. diff --git a/app/src/main/res/values-su/strings.xml b/app/src/main/res/values-su/strings.xml index 64379ac92..79ae5ea28 100644 --- a/app/src/main/res/values-su/strings.xml +++ b/app/src/main/res/values-su/strings.xml @@ -26,25 +26,32 @@ Togel ka Luhur Gambar poé ieu + ngunjal %1$d berkas ngunjal %1$d berkas + (%1$d) (%1$d) Mitembeyan Ngamuat + Ngolah %d muatan Ngolah %d muatan + %1$d muatan %1$d muatan + Ieu gambar bakal dilisénsi %1$s Ieu gambar bakal dilisénsi %1$s + %1$d Dimuat %1$d Dimuat + Nampa kontén anu dibagikeun. Ngolah gambarna bisa jadi rada lila gumantung kana ukuran gambar jeung gaway anjeun Nampa kontén anu dibagikeun Langlang @@ -64,7 +71,7 @@ Asup log Tungguan… Nganyarkeun pertélaan jeung pedaran - Mangga tungguan… + Mangga tungguan... Laksana login! Gagal login! Berkas teu kapanggih. Coba berkas séjén. @@ -392,7 +399,7 @@ Tempo arsip Tempo nu can dibaca Éror pas keur nyomot gambar - Mangga tungguan… + Mangga tungguan... Iwalkeun ieu gambar Karya Hak cipta @@ -402,7 +409,7 @@ Nomer Seri Sopwér Muat poto ka Wikimedia Commons langsung tina ponsél. Unduh Commons App ayeuna: %1$s - Bagikeun app liwat… + Bagikeun app liwat... Info Gambar Euweuh Kategori kapanggih Muatan bedo diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml index c49d64ad2..370bf0915 100644 --- a/app/src/main/res/values-sv/strings.xml +++ b/app/src/main/res/values-sv/strings.xml @@ -506,7 +506,7 @@ Åtkomst till mediaplats nekades Vi kanske inte automatiskt kan få platsdata från bilder du laddar upp. Lägg till lämplig plats för varje bild innan du skickar in Ladda upp foton till Wikimedia Commons direkt från din telefon. Ladda ned Commons-appen nu: %1$s - Dela appen via… + Dela appen via... Bildinfo Inga kategorier hittades Inga beskrivningar hittades @@ -783,7 +783,7 @@ Andra problem eller information (ange nedan). Din återkoppling kommer att skickas till följande wikisida: <a href=\"https://commons.wikimedia.org/wiki/Commons:Mobile_app/Feedback\">Commons:Mobilapp/Återkoppling</a> Är du säker på att du vill avbryta alla uppladdningar? - Avbryter alla uppladdningar… + Avbryter alla uppladdningar... Uppladdningar Pågår Misslyckades diff --git a/app/src/main/res/values-ta/strings.xml b/app/src/main/res/values-ta/strings.xml index 4f41da5f6..f9162bc7b 100644 --- a/app/src/main/res/values-ta/strings.xml +++ b/app/src/main/res/values-ta/strings.xml @@ -98,7 +98,7 @@ பின்னூட்டம் அனுப்பு (மின்னஞ்சல் வழியாக) மின்னஞ்சற் செயலி எதுவும் நிறுவப்படவில்லை அண்மையிற் பயன்படுத்தப்பட்ட பகுப்புகள் - முதல் ஒத்திசைவுக்காக காத்திருக்கிறது … + முதல் ஒத்திசைவுக்காக காத்திருக்கிறது ... நீர் இன்னும் எவ்வொளிப்படத்தையும் பதிவேற்றவில்லை. மீண்டும் முயல்க கைவிடு @@ -131,7 +131,7 @@ ஆம்! மேலதிக தகவல்கள் பகுப்புகள் - ஏற்றப்படுகிறது… + ஏற்றப்படுகிறது... தெரிவு செய்யப்படவில்லை தலைப்பு இல்லை விளக்கம் இல்லை diff --git a/app/src/main/res/values-tcy/strings.xml b/app/src/main/res/values-tcy/strings.xml index 13ee985b9..add46f7b7 100644 --- a/app/src/main/res/values-tcy/strings.xml +++ b/app/src/main/res/values-tcy/strings.xml @@ -110,7 +110,7 @@ ಇರೆನ ಅಬಿಪ್ರಾಯೊ ಬರೆಲೆ(ಮಿಂಚಂಚೆ). ಇರೆನ ಮಿಂಚಂಚೆ ಇಜ್ಜಿ. ಇಂಚಿಗ್ ಸೃಷ್ಟಿ ಮಾಲ್ತಿನ ವರ್ಗೊ. - ಒಂತೆ ಸಮಯ ಕಾಯೊಡು…. + ಒಂತೆ ಸಮಯ ಕಾಯೊಡು.... ಇರ್ ಒಂಜಿಲಾ ಪಟೋನ್ ಅಪ್ಲೋಡ್ ಮಾಲ್ತಿಜ್ಜಿ. ನನೊರ ಪ್ರಯತ್ನ ಮಾನ್ಪುಲೇ ವಜಾ ಮಲ್ಪುಲೆ @@ -336,7 +336,7 @@ ಅನುರಕ್ಷಿತ ತೂಲೆ ಓದಂದಿನ ತೂಲೆ ಆಕೃತಿಲೆನ್ ಪೆಜ್ಜಿನಗ ದೋಷ ಆಂಡ್ - ದಯಮಲ್ತ್ ಕಾಪುಲೆ… + ದಯಮಲ್ತ್ ಕಾಪುಲೆ... ಸಂಯೋಜನೆಲು ಸೂಚನೆಲು ನನಾತ್ diff --git a/app/src/main/res/values-te/strings.xml b/app/src/main/res/values-te/strings.xml index 0c478b221..ae80a5335 100644 --- a/app/src/main/res/values-te/strings.xml +++ b/app/src/main/res/values-te/strings.xml @@ -127,7 +127,7 @@ ఫీడుబ్యాకును పంపండి (ఈమెయిలు ద్వారా) ఈమెయిలు క్లయంటేదీ లేదు ఇటీవల వాడిన వర్గాలు - మొట్టమొదటి సింక్ కోసం చూస్తున్నాం… + మొట్టమొదటి సింక్ కోసం చూస్తున్నాం... ఇంకా మీరు ఫోటోలేమీ ఎక్కించలేదు. మళ్ళీ ప్రయత్నించు రద్దుచేయి @@ -457,7 +457,7 @@ క్రమ సంఖ్యలు సాఫ్టువేరు నేరుగా మీ ఫోను నుంచే వికీమీడియా కామన్స్‌కు ఫోటోలను ఎక్కించండి. కామన్స్ యాప్‌ను ఇప్పుడే దించుకోండి: %1$s - యాప్‌ను దీని ద్వారా పంచుకోండి… + యాప్‌ను దీని ద్వారా పంచుకోండి... బొమ్మ సమాచారం వర్గాలేమీ కనబడలేదు ఎక్కింపును రద్దు చేసాం @@ -523,7 +523,7 @@ బుక్‌మార్కులకు చేర్చాం ఏదో లోపం జరిగింది. వాల్‌పేపరును సెట్ చెయ్యలేకపోయాం వాల్‌పేపరుగా అమర్చు - వాల్‌పేపరుగా సెట్ చేస్తున్నాం. కాస్త ఆగండి… + వాల్‌పేపరుగా సెట్ చేస్తున్నాం. కాస్త ఆగండి... నల్లటి వెలుగుతో స్థానపు సెట్టింగులను తెరవడం విఫలమైంది. స్థానాన్ని మానవికంగా ఆన్ చెయ్యండి @@ -576,9 +576,9 @@ పరిమిత కనెక్షను మోడ్‌ను అచేతనం చేసాం. పెండింగులో ఉన్న ఎక్కింపులు తిరిగి మొదలౌతాయి. పరిమిత కనెక్షను మోడ్ నాణ్యమైన బొమ్మలు - ఎక్కింపును తిరిగి మొదలెడుతున్నాం… - ఎక్కింపును నిలుపుతున్నాం… - ఎక్కింపును రద్దు చేస్తున్నాం… + ఎక్కింపును తిరిగి మొదలెడుతున్నాం... + ఎక్కింపును నిలుపుతున్నాం... + ఎక్కింపును రద్దు చేస్తున్నాం... ఎక్కింపును రద్దుచెయ్యి మీరు పరిమిత కనెక్షను మోడ్‌ను చేతనం చేసారు. ఎక్కింపులన్నీ నిలిచిపోయాయి. మీరు ఈ మోడ్‌ను అచేతనం చెయ్యగానే అవి తిరిగి మొదలౌతాయి. పరిమిత కనెక్షను మోడ్ ఆన్ అయింది. diff --git a/app/src/main/res/values-th/strings.xml b/app/src/main/res/values-th/strings.xml index 70bee59ef..125bba590 100644 --- a/app/src/main/res/values-th/strings.xml +++ b/app/src/main/res/values-th/strings.xml @@ -38,16 +38,21 @@ รูปภาพประจำวัน กำลังอัปโหลดไฟล์ %1$d ไฟล์ + \@string/contributions_subtitle_zero + (%1$d) (%1$d) กำลังเริ่มอัปโหลด + กำลังเริ่มอัปโหลด %1$d รายการ กำลังเริ่มอัปโหลด %1$d รายการ + การอัปโหลด %1$d รายการ การอัปโหลด %1$d รายการ + ภาพนี้จะอยู่ในสัญญาอนุญาต %1$s ภาะเหล่านี้จะอยู่อยู่ในสัญญาอนุญาติ %1$s สำรวจ @@ -393,7 +398,7 @@ รุ่นเลนส์ หมายเลขซีเรียล ซอฟต์แวร์ - แบ่งปันแอปผ่าน… + แบ่งปันแอปผ่าน... ไม่พบหมวดหมู่ ภาพเซลฟี ภาพเบลอ diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index 79482fb4e..31a9f0b53 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -210,7 +210,7 @@ Evet! Daha Fazla Bilgi Kategoriler - Yükleniyor… + Yükleniyor... Hiçbir şey seçilmedi Altyazı yok Açıklama yok @@ -505,7 +505,7 @@ Okunanları görüntüle Okunmayanları görüntüle Resimler seçilirken hata oluştu - Lütfen bekleyin… + Lütfen bekleyin... Seçkin resimler, Wikimedia Commons topluluğunun sitedeki en yüksek kaliteden bazıları olarak seçtiği son derece yetenekli fotoğrafçıların ve illüstratörlerin görüntüleridir. Yakındaki yerler üzerinden yüklenen resimler, haritadaki yerleri keşfederek yüklenen resimlerdir. Bu özellik, editörlerin, geçmiş sayfasında veya fark sayfasında küçük bir teşekkür bağlantısı kullanarak faydalı düzenlemeler yapan kullanıcılara bir Teşekkür bildirimi göndermesine olanak tanır. @@ -604,7 +604,7 @@ Yer işaretlerine eklendi Bir şeyler yanlış gitti. Duvar kağıdı ayarlanamadı Duvar kağıdı olarak ayarla - Duvar Kağıdı ayarlanıyor. Lütfen bekleyin… + Duvar Kağıdı ayarlanıyor. Lütfen bekleyin... Sistemi izle Koyu Açık diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index cc2343a77..9e821ae24 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -21,7 +21,7 @@ * Ата * Пан Хаунд --> - + Facebook-сторінка Вікісховища Програмний код Вікісховища на GitHub Логотип Вікісховища @@ -81,7 +81,7 @@ %1$d завантажень - Отримання спільного контенту. Обробка зображення може зайняти трохи часу, залежно від розміру зображення і від Вашого пристрою + Отримання спільного контенту. Обробка зображення може зайняти трохи часу, залежно від розміру зображення і від Вашого пристрою Отримання спільного контенту. Обробка зображень може зайняти трохи часу, залежно від розміру зображень і від Вашого пристрою Отримання спільного контенту. Обробка зображень може зайняти трохи часу, залежно від розміру зображень і від Вашого пристрою Отримання спільного контенту. Обробка зображень може зайняти трохи часу, залежно від розміру зображень і від Вашого пристрою @@ -612,7 +612,7 @@ Додано у закладки Щось трапилось. Не вдалося встановити шпалери робочого столу Встановити в якості шпалер робочого столу - Встановлення робочого столу. Будь ласка зачекайте… + Встановлення робочого столу. Будь ласка зачекайте... На взірець системи Темна Світла diff --git a/app/src/main/res/values-uz/strings.xml b/app/src/main/res/values-uz/strings.xml index f09f76ac6..a708c873a 100644 --- a/app/src/main/res/values-uz/strings.xml +++ b/app/src/main/res/values-uz/strings.xml @@ -73,9 +73,9 @@ Parolni unutdingizmi? Roʻyxatdan oʻtish Kirish - Iltimos kuting… + Iltimos kuting... Sarlavhalar va tavsiflarni yangilash - Iltimos, kutib turing… + Iltimos, kutib turing... Kirish muvaffaqiyatli bajarildi! Kirish muvaffaqiyatsiz yakunlandi! Fayl topilmadi. Iltimos, boshqa faylni izlab koʻring. @@ -180,7 +180,7 @@ Ha! Batafsil maʼlumot Turkumlar - Yuklanmoqda… + Yuklanmoqda... Tanlanmagan Izoh yoʻq Tavsif yoʻq @@ -390,7 +390,7 @@ Xatchoʻplar Xatchoʻplar Bajarildi - Iltimos, kuting… + Iltimos, kuting... EXIF teglarni boshqarish Muallif Mualliflik huquqlari diff --git a/app/src/main/res/values-vec/strings.xml b/app/src/main/res/values-vec/strings.xml index 52bb495ea..bbcb64561 100644 --- a/app/src/main/res/values-vec/strings.xml +++ b/app/src/main/res/values-vec/strings.xml @@ -68,7 +68,7 @@ Cargamento de %1$s no riusio Schicia par vixuałixare I me ultimi cargamenti - In coa… + In coa... Fałimento %1$d%% conpleto Drio cargar.. @@ -114,7 +114,7 @@ Mandane on comento (co ła mail) Nisun client de posta eletronega instałà Categorie doparà ultimamente - Speta par ła prima sincronixasion… + Speta par ła prima sincronixasion... No te ghe njiancora cargà na foto Riproa Descançełare @@ -403,7 +403,7 @@ Varda no lexeste Varda no lexeste Se ga vuo on eror co se jera drio ełexare łe imajini. - Speta on fià… + Speta on fià... Le foto in primo pian łe xé imajini de fotografi altamente cuałifegai che ła comunità de Wikimedia Commons ła ga ełeto come fotografi de alta cuałità sol sito. Imajini cargae via \"Posti cuà rente\", imajini che łe njien cargae scoerxendo posti n\'te ła mapa Sta funsion ła consente ai editori de enviar na notifega de ringrasiamento ai uxuari che i fa modifeghe che serve, doparando on lingambo picenin de ringrasiamento n\'te ła pajina del storego o n\'te ła pajina de łe difarense.\n\nQuesta funzione consente agli editor di inviare una notifica di ringraziamento agli utenti che apportano modifiche utili, utilizzando un piccolo link di ringraziamento nella pagina della cronologia o nella pagina delle differenze. @@ -421,7 +421,7 @@ Numari seriałi Software Carga foto so Wikimedia Commons diretamente dal to tełefonin. Descarga l\'aplicasion deso: %1$s - Spartisi aplicasion co… + Spartisi aplicasion co... Informasion so l\'imajine Nisuna categoria catada Cargamento nułà @@ -461,7 +461,7 @@ Xonta ai favorii Calcosa el xé ndà roerso. No xé sta pusibiłe canbiar el sfondo Inposta el sfondo - Drio inpostar el sfondo. Speta on fià… + Drio inpostar el sfondo. Speta on fià... Segui el sistema Scuro Ciaro diff --git a/app/src/main/res/values-xal/strings.xml b/app/src/main/res/values-xal/strings.xml index c36206061..346ff15e1 100644 --- a/app/src/main/res/values-xal/strings.xml +++ b/app/src/main/res/values-xal/strings.xml @@ -23,15 +23,15 @@ Вики-аһулх һазр Тохрллһ Вики-аһулх һазрур ацалх - Ацалгдҗана… + Ацалгдҗана... Кергләчин нерн Нууц үг Невтрх Нууц үгән мартвт? Бүрткүлх Невтрҗәнә - Күләхнтн… - Күләхнтн… + Күләхнтн... + Күләхнтн... Невтрлт амҗлтта болла! Невтрҗ чадсн уга! Ацаллт кеҗ экллә! @@ -83,7 +83,7 @@ Тиим Делгрңгү Нерн, төрл - Умшҗана… + Умшҗана... Алькинь чигн суңһад уга Тодрхаллт уга Күүндән уга diff --git a/app/src/main/res/values-xmf/strings.xml b/app/src/main/res/values-xmf/strings.xml index 7927da1af..b32eeb005 100644 --- a/app/src/main/res/values-xmf/strings.xml +++ b/app/src/main/res/values-xmf/strings.xml @@ -61,7 +61,7 @@ ვიკიოწკარუე პარამეტრეფი ვიკიოწკარუეშა ეხარგუა - ეთმიხარგუ… + ეთმიხარგუ... მახვარებუშ ჯოხო პაროლი გენშართით თქვანი პროფილით Commons Beta-შა @@ -71,7 +71,7 @@ სისტემაშა მიშულა ქორთხინთ ქჷმიცადით … მუკნაჭარეფი დო ეჭარუეფი მითმიახალებუ - ქორთხინთ ქჷმიცადით… + ქორთხინთ ქჷმიცადით... სისტემაშა მიშულაქ წჷმოძინელო გეთუ! სისტემაშა მიშულაქ ვემიხუჯინუ! ფაილქ ვეგორუ. ქორთხინთ, ქოცადით შხვა ფაილი. @@ -181,7 +181,7 @@ ქოǃ უმოსი ინფორმაცია კატეგორიეფი - იხარგუ… + იხარგუ... მუთუნ ვა რე გიშაგორილი მუკნაჭარა ვა რე ვა რე ეჭარუა diff --git a/app/src/main/res/values-zgh/strings.xml b/app/src/main/res/values-zgh/strings.xml index c6f27bb99..27080b999 100644 --- a/app/src/main/res/values-zgh/strings.xml +++ b/app/src/main/res/values-zgh/strings.xml @@ -13,7 +13,7 @@ ⵜⴻⵜⵜⵓⴷ ⵜⴰⴳⵓⵔⵉ ⵏ ⵓⵣⵣⵔⴰⵢ? ⵣⵎⵎⴻⵎ ⴷⴰ ⵜⴽⵛⵛⵎⴷ - ⴰⵎⵓⵔ ⵏⵏⴽ ⵇⵇⵍ… + ⴰⵎⵓⵔ ⵏⵏⴽ ⵇⵇⵍ... ⴰⴽⵛⴰⵎ !ⵉⵎⵓⵔⵙ ⴰⴽⵛⴰⵎ ⵉⵣⴳⵍ! ⴰⴼⴰⵢⵍⵓ ⵓⵔ ⵉⵜⵜⵢⵓⴼⴰ. ⴰⵎⵓⵔ ⵏⵏⴽ ⴰⵔⵎ ⴰⴼⴰⵢⵍⵓ ⵢⴰⴹⵏ. diff --git a/app/src/main/res/values-zh/strings.xml b/app/src/main/res/values-zh/strings.xml index 2a307e955..2adabec26 100644 --- a/app/src/main/res/values-zh/strings.xml +++ b/app/src/main/res/values-zh/strings.xml @@ -79,22 +79,28 @@ 地点状态 今日图片 + %1$d个文件正在上传 %1$d个文件正在上传 + %1$d次上传 %1$d次上传 开始上传 + 正在处理%d个上传 正在处理%d个上传 + %d个上传 %d个上传 + 该图像的授权协议是 %1$s 这些图像的授权协议是 %1$s + %1$d次上传 %1$d次上传 @@ -546,7 +552,7 @@ 已拒绝访问媒体位置 我们可能无法自动从你上传的图片中获取位置数据。提交前请为每张图片添加适当的位置 直接在您手机上的维基共享资源应用中上传照片。立即下载共享资源应用:%1$s - 分享到… + 分享到... 图像信息 找不到分类 找不到描写。 @@ -572,6 +578,7 @@ 分类更新 成功 + 分类%1$s已添加。 分类%1$s已添加。 无法添加分类。 @@ -579,6 +586,7 @@ 正在尝试更新描述。 编辑描述 + 已添加 %1$s 个描写。 已添加 %1$s 个描写。 无法添加描述。 @@ -679,8 +687,8 @@ 限制连接模式 优良图片 品质图像是符合一定质量标准(本质上大多是技术性的)的图表或照片,它们对维基媒体计划很有价值 - 正在恢复上传… - 暂停上传… + 正在恢复上传... + 暂停上传... 正在取消上传… 取消上传 您已启用限制连接模式。所有的上传已暂停并将在您禁用此模式后立刻恢复。 @@ -808,6 +816,7 @@ 正在保存KML文件 正在保存GPX文件 + 已选择%d个图像 已选择%d个图像 请记住,每次多图片上传会为其中的所有图片标注相同的分类和描述。如果这些图片并不共享同样的描述和分类,请分别进行多次上传。 @@ -821,9 +830,12 @@ 其他问题或信息(请在下方解释)。 您的反馈已经发布在以下wiki页面:<a href=\"https://commons.wikimedia.org/wiki/Commons:Mobile_app/Feedback\">Commons:Mobile app/Feedback</a> 您确定要取消所有上传吗? - 取消所有的上传… + 取消所有的上传... 上传 待处理 失败 无法加载地点数据 + 这个地点还没有照片,快去拍一张吧! + 这个地点已经有照片了。 + 现在检查这个地点是否有照片。 From 7c826502b676400a513bed7f64206701f45425d9 Mon Sep 17 00:00:00 2001 From: "translatewiki.net" Date: Thu, 31 Oct 2024 13:01:42 +0100 Subject: [PATCH 29/36] Localisation updates from https://translatewiki.net. --- app/src/main/res/values-krc/strings.xml | 12 +++++++++++- app/src/main/res/values-pa/strings.xml | 1 + app/src/main/res/values-vi/strings.xml | 2 ++ 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/app/src/main/res/values-krc/strings.xml b/app/src/main/res/values-krc/strings.xml index 55fa4ac35..eb9193e7f 100644 --- a/app/src/main/res/values-krc/strings.xml +++ b/app/src/main/res/values-krc/strings.xml @@ -473,6 +473,7 @@ Окъулмагъана хапарландырыуугъуз джокъду Окъулмагъан хапарландырыуугъуз барды Логларыгъызны хайырланыб юлюшлегиз + Электрон почтагъызны тинтигиз Окъулгъанны кёргюз Окъулмагъанланы кёргюз Суратла сайланнган заманда халат болду. @@ -686,7 +687,7 @@ Джууукъдагъы картала тюз ишлер ючюн ТЕЛЕФОННУ БОЛУМУн окъургъа амал болургъа кереклиди Хайырланыучуну къошумлары: %s Хайырланыучуну джетишимлери: %s - Хайырланыучу бетни кёргюз + Хайырланыучу профильни кёр Танытыуланы тюзет Категорияланы тюзет Кенгленнген Сайлаула @@ -774,4 +775,13 @@ \'%1$s\' - башха джерди. Тилейбиз, тюз джерни энишгерекде белгилегиз, эмда мадар бар эсе, тюз кенглик бла узунлукъну джазыгъыз. Башха проблема неда информация (тилейбиз, энишгерекде ангылатыгъыз). Сизни кери оюмугъуз тюбюндеги вики бетге джиберилликди: <a href=\"https://commons.wikimedia.org/wiki/Commons:Mobile_app/Feedback\">Commons:Mobile app/Feedback</a> + Бютеу джюклеулени тохтатыргъа излегенигизге ишексизмисиз? + Бютеу джюклеулени тохтатыу... + Джюклеуле + Сакълауда + Джетишимсиз + Джерни юсюнден билгилени джюклеялмады + Бу джерни сураты джокъду, хайда бирин эт! + Бу джерни алайсыз да сураты барды. + Бу джерни сураты болуб-болмагъанын тинте турама. diff --git a/app/src/main/res/values-pa/strings.xml b/app/src/main/res/values-pa/strings.xml index 8c64900a5..ebc535d50 100644 --- a/app/src/main/res/values-pa/strings.xml +++ b/app/src/main/res/values-pa/strings.xml @@ -207,5 +207,6 @@ ਲਿਖਤ ਛਾਪੋ ਮੁਹਰੈਲ ਵਰਤੋਂਕਾਰ + ਟਿਕਾਣਾ ਨਵਿਆਈਆ ਗਿਆ ਤੁਹਾਡੇ ਦਾਖਲੇ ਦੀ ਮਿਆਦ ਪੁੱਗ ਗਈ ਹੈ। ਕਿਰਪਾ ਕਰਕੇ ਦੁਬਾਰਾ ਦਾਖਲ ਹੋਵੋ। diff --git a/app/src/main/res/values-vi/strings.xml b/app/src/main/res/values-vi/strings.xml index 224492ab7..635d71a3f 100644 --- a/app/src/main/res/values-vi/strings.xml +++ b/app/src/main/res/values-vi/strings.xml @@ -1,6 +1,7 @@