diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml index 7a1e7c030..958c13fda 100644 --- a/.github/workflows/android.yml +++ b/.github/workflows/android.yml @@ -89,7 +89,7 @@ jobs: run: bash ./gradlew assembleBetaDebug --stacktrace - name: Upload betaDebug APK - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: betaDebugAPK path: app/build/outputs/apk/beta/debug/app-*.apk @@ -98,7 +98,7 @@ jobs: run: bash ./gradlew assembleProdDebug --stacktrace - name: Upload prodDebug APK - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: prodDebugAPK path: app/build/outputs/apk/prod/debug/app-*.apk diff --git a/app/src/main/java/fr/free/nrw/commons/customselector/ui/adapter/ImageAdapter.kt b/app/src/main/java/fr/free/nrw/commons/customselector/ui/adapter/ImageAdapter.kt index 74b937f97..ff623d496 100644 --- a/app/src/main/java/fr/free/nrw/commons/customselector/ui/adapter/ImageAdapter.kt +++ b/app/src/main/java/fr/free/nrw/commons/customselector/ui/adapter/ImageAdapter.kt @@ -24,6 +24,7 @@ import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.MainScope import kotlinx.coroutines.cancel +import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.launch import java.util.TreeMap import kotlin.collections.ArrayList @@ -103,6 +104,18 @@ class ImageAdapter( */ private var imagePositionAsPerIncreasingOrder = 0 + /** + * Stores the number of images currently visible on the screen + */ + private val _currentImagesCount = MutableStateFlow(0) + val currentImagesCount = _currentImagesCount + + /** + * Stores whether images are being loaded or not + */ + private val _isLoadingImages = MutableStateFlow(false) + val isLoadingImages = _isLoadingImages + /** * Coroutine Dispatchers and Scope. */ @@ -184,8 +197,12 @@ class ImageAdapter( // If the position is not already visited, that means the position is new then // finds the next actionable image position from all images if (!alreadyAddedPositions.contains(position)) { - processThumbnailForActionedImage(holder, position, uploadingContributionList) - + processThumbnailForActionedImage( + holder, + position, + uploadingContributionList + ) + _isLoadingImages.value = false // If the position is already visited, that means the image is already present // inside map, so it will fetch the image from the map and load in the holder } else { @@ -231,6 +248,7 @@ class ImageAdapter( position: Int, uploadingContributionList: List, ) { + _isLoadingImages.value = true val next = imageLoader.nextActionableImage( allImages, @@ -252,6 +270,7 @@ class ImageAdapter( actionableImagesMap[next] = allImages[next] alreadyAddedPositions.add(imagePositionAsPerIncreasingOrder) imagePositionAsPerIncreasingOrder++ + _currentImagesCount.value = imagePositionAsPerIncreasingOrder Glide .with(holder.image) .load(allImages[next].uri) @@ -267,6 +286,7 @@ class ImageAdapter( reachedEndOfFolder = true notifyItemRemoved(position) } + _isLoadingImages.value = false } /** @@ -372,6 +392,7 @@ class ImageAdapter( emptyMap: TreeMap, uploadedImages: List = ArrayList(), ) { + _isLoadingImages.value = true allImages = fixedImages val oldImageList: ArrayList = images val newImageList: ArrayList = ArrayList(newImages) @@ -382,6 +403,7 @@ class ImageAdapter( reachedEndOfFolder = false selectedImages = ArrayList() imagePositionAsPerIncreasingOrder = 0 + _currentImagesCount.value = imagePositionAsPerIncreasingOrder val diffResult = DiffUtil.calculateDiff( ImagesDiffCallback(oldImageList, newImageList), @@ -441,6 +463,7 @@ class ImageAdapter( val entry = iterator.next() if (entry.value == image) { imagePositionAsPerIncreasingOrder -= 1 + _currentImagesCount.value = imagePositionAsPerIncreasingOrder iterator.remove() alreadyAddedPositions.removeAt(alreadyAddedPositions.size - 1) notifyItemRemoved(index) 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 3912a4d12..39d0d545a 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 @@ -12,8 +12,12 @@ import android.widget.ProgressBar import android.widget.Switch import androidx.appcompat.app.AlertDialog import androidx.constraintlayout.widget.ConstraintLayout +import androidx.core.view.isVisible +import androidx.lifecycle.Lifecycle import androidx.lifecycle.Observer import androidx.lifecycle.ViewModelProvider +import androidx.lifecycle.lifecycleScope +import androidx.lifecycle.repeatOnLifecycle import androidx.recyclerview.widget.GridLayoutManager import androidx.recyclerview.widget.RecyclerView import fr.free.nrw.commons.contributions.Contribution @@ -38,6 +42,10 @@ import fr.free.nrw.commons.theme.BaseActivity import fr.free.nrw.commons.upload.FileProcessor import fr.free.nrw.commons.upload.FileUtilsWrapper import io.reactivex.schedulers.Schedulers +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.asStateFlow +import kotlinx.coroutines.flow.combine +import kotlinx.coroutines.launch import java.util.TreeMap import javax.inject.Inject import kotlin.collections.ArrayList @@ -80,6 +88,12 @@ class ImageFragment : */ var allImages: ArrayList = ArrayList() + /** + * Keeps track of switch state + */ + private val _switchState = MutableStateFlow(false) + val switchState = _switchState.asStateFlow() + /** * View model Factory. */ @@ -214,7 +228,11 @@ class ImageFragment : switch = binding?.switchWidget switch?.visibility = View.VISIBLE - switch?.setOnCheckedChangeListener { _, isChecked -> onChangeSwitchState(isChecked) } + _switchState.value = switch?.isChecked ?: false + switch?.setOnCheckedChangeListener { _, isChecked -> + onChangeSwitchState(isChecked) + _switchState.value = isChecked + } selectorRV = binding?.selectorRv loader = binding?.loader progressLayout = binding?.progressLayout @@ -234,6 +252,28 @@ class ImageFragment : return binding?.root } + /** + * onViewCreated + * Updates empty text view visibility based on image count, switch state, and loading status. + */ + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + viewLifecycleOwner.lifecycleScope.launch { + repeatOnLifecycle(Lifecycle.State.STARTED) { + combine( + imageAdapter.currentImagesCount, + switchState, + imageAdapter.isLoadingImages + ) { imageCount, isChecked, isLoadingImages -> + Triple(imageCount, isChecked, isLoadingImages) + }.collect { (imageCount, isChecked, isLoadingImages) -> + binding?.allImagesUploadedOrMarked?.isVisible = + !isLoadingImages && !isChecked && imageCount == 0 && (switch?.isVisible == true) + } + } + } + } + private fun onChangeSwitchState(checked: Boolean) { if (checked) { showAlreadyActionedImages = true diff --git a/app/src/main/java/fr/free/nrw/commons/review/ReviewActivity.kt b/app/src/main/java/fr/free/nrw/commons/review/ReviewActivity.kt index 209f991fb..01a1005fe 100644 --- a/app/src/main/java/fr/free/nrw/commons/review/ReviewActivity.kt +++ b/app/src/main/java/fr/free/nrw/commons/review/ReviewActivity.kt @@ -188,7 +188,7 @@ class ReviewActivity : BaseActivity() { return } - binding.reviewImageView.setImageURI(media.imageUrl) + binding.reviewImageView.setImageURI(media.thumbUrl) reviewController.onImageRefreshed(media) // filename is updated compositeDisposable.add( diff --git a/app/src/main/java/fr/free/nrw/commons/settings/SettingsFragment.kt b/app/src/main/java/fr/free/nrw/commons/settings/SettingsFragment.kt index ee0b62b70..161927d03 100644 --- a/app/src/main/java/fr/free/nrw/commons/settings/SettingsFragment.kt +++ b/app/src/main/java/fr/free/nrw/commons/settings/SettingsFragment.kt @@ -271,6 +271,7 @@ class SettingsFragment : PreferenceFragmentCompat() { findPreference("managed_exif_tags")?.isEnabled = false findPreference("openDocumentPhotoPickerPref")?.isEnabled = false findPreference("inAppCameraLocationPref")?.isEnabled = false + findPreference("vanishAccount")?.isEnabled = false } } diff --git a/app/src/main/java/fr/free/nrw/commons/upload/UploadActivity.kt b/app/src/main/java/fr/free/nrw/commons/upload/UploadActivity.kt index 1ae7150e6..56ad9dd84 100644 --- a/app/src/main/java/fr/free/nrw/commons/upload/UploadActivity.kt +++ b/app/src/main/java/fr/free/nrw/commons/upload/UploadActivity.kt @@ -684,17 +684,64 @@ class UploadActivity : BaseActivity(), UploadContract.View, UploadBaseFragment.C private fun receiveInternalSharedItems() { val intent = intent + Timber.d("Intent has EXTRA_FILES: ${EXTRA_FILES}") + uploadableFiles = try { + // Check if intent has the extra before trying to read it + if (!intent.hasExtra(EXTRA_FILES)) { + Timber.w("No EXTRA_FILES found in intent") + mutableListOf() + } else { + // Try to get the files as Parcelable array + val files = if (VERSION.SDK_INT >= VERSION_CODES.TIRAMISU) { + intent.getParcelableArrayListExtra(EXTRA_FILES, UploadableFile::class.java) + } else { + @Suppress("DEPRECATION") + intent.getParcelableArrayListExtra(EXTRA_FILES) + } - Timber.d("Received intent %s with action %s", intent.toString(), intent.action) - - uploadableFiles = mutableListOf().apply { - addAll(intent.getParcelableArrayListExtra(EXTRA_FILES) ?: emptyList()) + // Convert to mutable list or return empty list if null + files?.toMutableList() ?: run { + Timber.w("Files array was null") + mutableListOf() + } + } + } catch (e: Exception) { + Timber.e(e, "Error reading files from intent") + mutableListOf() + } + + // Log the result for debugging + isMultipleFilesSelected = uploadableFiles.size > 1 + Timber.i("Received files count: ${uploadableFiles.size}") + uploadableFiles.forEachIndexed { index, file -> + Timber.d("File $index path: ${file.getFilePath()}") + } + + // Handle other extras with null safety + place = try { + if (VERSION.SDK_INT >= VERSION_CODES.TIRAMISU) { + intent.getParcelableExtra(PLACE_OBJECT, Place::class.java) + } else { + @Suppress("DEPRECATION") + intent.getParcelableExtra(PLACE_OBJECT) + } + } catch (e: Exception) { + Timber.e(e, "Error reading place") + null + } + + prevLocation = try { + if (VERSION.SDK_INT >= VERSION_CODES.TIRAMISU) { + intent.getParcelableExtra(LOCATION_BEFORE_IMAGE_CAPTURE, LatLng::class.java) + } else { + @Suppress("DEPRECATION") + intent.getParcelableExtra(LOCATION_BEFORE_IMAGE_CAPTURE) + } + } catch (e: Exception) { + Timber.e(e, "Error reading location") + null } - isMultipleFilesSelected = uploadableFiles!!.size > 1 - Timber.i("Received multiple upload %s", uploadableFiles!!.size) - place = intent.getParcelableExtra(PLACE_OBJECT) - prevLocation = intent.getParcelableExtra(LOCATION_BEFORE_IMAGE_CAPTURE) isInAppCameraUpload = intent.getBooleanExtra(IN_APP_CAMERA_UPLOAD, false) resetDirectPrefs() } @@ -803,6 +850,7 @@ class UploadActivity : BaseActivity(), UploadContract.View, UploadBaseFragment.C /** * Overrides the back button to make sure the user is prepared to lose their progress */ + @SuppressLint("MissingSuperCall") override fun onBackPressed() { showAlertDialog( this, @@ -920,7 +968,7 @@ class UploadActivity : BaseActivity(), UploadContract.View, UploadBaseFragment.C companion object { private var uploadIsOfAPlace = false - const val EXTRA_FILES: String = "commons_image_exta" + const val EXTRA_FILES: String = "commons_image_extra" const val LOCATION_BEFORE_IMAGE_CAPTURE: String = "user_location_before_image_capture" const val IN_APP_CAMERA_UPLOAD: String = "in_app_camera_upload" diff --git a/app/src/main/res/layout/fragment_custom_selector.xml b/app/src/main/res/layout/fragment_custom_selector.xml index bbc4c0a07..03381fd24 100644 --- a/app/src/main/res/layout/fragment_custom_selector.xml +++ b/app/src/main/res/layout/fragment_custom_selector.xml @@ -49,6 +49,20 @@ app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> + الاختفاء هو <b>الملاذ الأخير</b> ويجب <b>استخدامه فقط عندما ترغب في التوقف عن التحرير إلى الأبد</b> وأيضًا لإخفاء أكبر عدد ممكن من ارتباطاتك السابقة.<br/><br/> يتم حذف الحساب على ويكيميديا كومنز عن طريق تغيير اسم حسابك بحيث لا يتمكن الآخرون من التعرف على مساهماتك في عملية تسمى اختفاء الحساب. <b>لا يضمن الاختفاء عدم الكشف عن الهوية تمامًا أو إزالة المساهمات في المشاريع</b> . الشرح تم نسخ التسمية التوضيحية إلى الحافظة + مبروك، جميع الصور الموجودة في هذا الألبوم تم تحميلها أو تم وضع علامة عليها بأنها غير قابلة للتحميل. diff --git a/app/src/main/res/values-da/strings.xml b/app/src/main/res/values-da/strings.xml index 4b17a0fec..e7f66a69e 100644 --- a/app/src/main/res/values-da/strings.xml +++ b/app/src/main/res/values-da/strings.xml @@ -820,4 +820,5 @@ Forsvinding er en <b>sidste udvej</b> og bør <b>kun bruges, når du for altid ønsker at stoppe med at redigere</b> og også for at skjule så mange af dine tidligere tilknytninger som muligt.<br/><br/> Kontosletning på Wikipedia Commons sker ved at ændre dit kontonavn, således at andre ikke kan genkende dine bidrag i en proces, der kaldes kontoforsvinding (Vanishing). <b>Forsvinding garanterer ikke fuldstændig anonymitet eller fjerner bidrag til projekterne</b> . Billedtekst Billedtekst kopieret til udklipsholder + Tillykke, alle billeder i dette album er enten blevet uploadet eller markeret som ikke til upload. diff --git a/app/src/main/res/values-io/strings.xml b/app/src/main/res/values-io/strings.xml index 2efec0607..057e77e10 100644 --- a/app/src/main/res/values-io/strings.xml +++ b/app/src/main/res/values-io/strings.xml @@ -79,7 +79,7 @@ Vu atingis la maxim granda quanto di probi por sendar arkivo permisata! Voluntez interuptar la kargajo, e probez itere! Ka desmuntar l\'optimizo di la baterio? Sendar plu kam 3 imaji esas plu efikiva kande l\'optimizo di la baterio esas desmuntita. Voluntez desmuntar l\'optimizo di la baterio del ajusti dil utensilo de Commons, por plugrandigar l\'efikeso. \n\nQuale desmuntar l\'optimizo-sistemo di la baterio:\n\n#: Kliktez la butono \"ajusti\" (\'\'Settings\'\') adinfre.\n\n#: Selektez \"ne optimizita (\'\'Not optimized\'\') por omna utensili (\'\'All apps\'\').\n\n#: Serchez \"Commons\" o \"fr.free.nrw.commons\".\n\n#: Kliktez ol e selektez \"ne optimizar\" (\'\'Don\'t optimize\'\').\n\n#: Kliktez \"facita\" (\'\'Done\'\'). - L\'autentikigo faliis, voluntez itere enirar. + Autentikigo faliis. Voluntez itere enirar. Komencis sendar! Sendajo ajornata (modulo \"limitizita konekto\" aktiva) %1$s sendesis! @@ -100,17 +100,19 @@ Fotografar Proxime Mea sendaji + Kopiez ligilo + La ligilo kopiesis a \'\'clipboard\'\'. Partigar Vidar arkivo-pagino Titulo (Bezonata) Voluntez informar deskripto-texto por ca arkivo Deskripto Deskripto-texto - Ne esis posibla facar \'\'log - in\'\' - la reto faliis + Ne esas posibla enirar - la reto faliis Multa sensucesa probi pri konektar. Voluntez probar itere pos kelka minuti. Pardonez, ca uzero blokusesis che Commons Vu mustas uzar vua autentikigo en du etapi. - Eniro faliis + Eniro faliis Kargar Nomizes ca ajusto Modifikuri @@ -118,6 +120,7 @@ Serchar kategorii Serchez kozi quin vua \'\'media\'\' montras (monti, \'\'Taj Mahal\'\', edc.) Registragar + Menuo pri exterfluajo Rinovigar Listar (Nula arkivo sendita til nun) @@ -258,6 +261,7 @@ Konservar en vua enmagaziniguro la fotografuri obtenita uzanta fotografilo del utensilo (\'\'app\'\') Enirez en vua konto Sendez arkivo \'\'log\'\' + Sendez protokolo per e-posto a developeri, por helpar la solvo di problemi dil \'\'app\'\'. Atencez: protokoli povas kontenar informi por identifiko Nula retnavigilo trovita, por apertar la URL Eroro! URL ne trovita Propozar efaco @@ -266,11 +270,12 @@ Saltar Enirar Ka vu deziras ne enirar? - Vu mustus facar \'\'log in\'\' por sendor imaji future. + Future, vu mustus facar \'\'log in\'\' por sendar imaji. Voluntez enirar por uzar ca utensilo Kopiez Wiki-texto a \'clipboard\' Wiki-texto kopiesis a \'clipboard\' Proximeso povas ne funcionar korekte, nam Lokizo ne esas disponebla. + Interreto nedisponebla. Montranta nur elementi enmagazinigita lokale. Aceso a lokizo ne permisita. Voluntez informar manuale vua lokizo por uzar ca resurso*. Permiso bezonata por montrar listo pri vicina loki Permiso bezonata por montrar listo pri vicina imaji @@ -354,18 +359,22 @@ Efacar Sucesi Profilo + Insigni Statistiko Danki recevita Remarkinda imaji Imaji tra \"Loki Vicina\" - Nivelo + Nivelo %d + %s (Nivelo %s) Imaji sendita Imaji ne reversionita Imaji uzita Partigez vua sucesi kun vua amiki! + Vua nivelo augmentas kande vu atingas bezonata postuli. Elementi en la segmento \"statistiko\" ne augmentas vua nivelo. minima quanto bezonata: Quanto di imaji quin vu sendis a Commons, uzanta irga softwaro* por sendar li La procento di imaji quin vu sendis a Commons, qui ne efacesis pose + La quanto di imaji sendita da vu a Commons, qui uzesis en artikli de Wikimedia. Eventis eroro! Avizo de Commons Uzar personalizita autoro-nomo @@ -375,6 +384,7 @@ Vicina Avizi Avizi (lektita) + Montrez proxima avizo Listo Permiso pri enmagazinigo Etapo %1$d de %2$d: %3$s @@ -383,6 +393,8 @@ Arkivo kun la nomo %1$s ja existas. Ka vu deziras durigar?\n\nNoto: Sufixo adequata adjuntesos automatale a la nomo dil imajo. Imaji Loki + Kategorii + Adjuntez/Removez marko-rubandi (\'\'bookmark\'\'-i) Marko-rubandi Vu ne adjuntis marko-rubandi Marko-rubandi @@ -392,7 +404,11 @@ Me konstatis ke ol esas mala por mea privateso Me chanjis mea ideo: me ne pluse deziras ke ol esos publike videbla Pardonez! Ca imajo ne esas interesanta por ula enciklopedio + Adjuntita da me, che %1$s, uzita en %2$d artiklo/artikli. + Bonveno a Commons!\n\nSendez vua unesma arkivo kliktanta sur butono \"adjuntez\" (\'\'add\'\'). Nula kategorio selektita + Imaji sen kategorii rare esas uzebla. Ka vu fakte deziras sendar ol sen selektar irga kategorio? + Nula deskripturo selektita Cesar kargajo Durar kargajo Serchez ca areo @@ -401,15 +417,38 @@ Ne pluse demandez to Demandar lokala permiso Demandez lokala permiso, kande bezonata por uzar karto montranta proximeso. + Finas la: + Montrez kampanii + Videz la kampanii duranta Permisar Eskartar + Facita + Sendanta danko: Suceso + Danko sendita sucese a %1$s + Faliis pri sendar danko a %1$s + Sendanta danko: Falio + Sendanta danko a %1$s + Ka to obedias la reguli pri autoroyuro? + Ka lua kategorio esas korekta? + Ka vu deziras dankar la kontributero? + Kliktez NO por indikar ca imajo por efaco, se ol ne havas irga utileso. + Ho, to ne mem havas kategorio! + Ca imajo havas %1$s kategorii. + Ol esas kontre la skopo, nam ol esas + To esas violaco di autoroyuro, nam ol esas Sequanta imajo Yes, pro quo ne? + Kliktanta ca butono donos a vu altra imajo recente sendita a Wikimedia Commons Vu povas revizar imaji, por plubonigar la qualeso di Wikimedia Commons.\nLa tri revizo-parametri esas:\n\n- Kad ica imajo havas havas irga relato kun la kuntexto?\nKande tu kliktas NO, vu adjuntos indiko (shablono) por ke ol efacesos.\n\n- Kad ica imajo violacas autoroyuro?\nSe tu klitos YES, vu adjuntos indiko por ke ol efacesos.\n\n- Kad la kategorii di ica imajo esas korekta?\nSe tu kliktos NO, vu adjuntos demando pri adjuntar korekta kategorio ad ol.\n\nSe omno esas korekta, nula shablono adjuntesos al imajo, e vu povos dankar la persono qua sendis ol. + Nula imajo uzita + Nula imajo desfacita + Nula imajo sendita Vu havas nul avizi sen lektar Vu ne lektis irga avizo + Verifikez vua e-postal adreso Vidar lektita Vidar ne-lektata + Eventis eroro dum selekto di imaji Vartez... Kopiita Exempli pri bona imaji por sendar a Commons @@ -431,7 +470,9 @@ Ne povis demandar efaco. komplete neklara Fotografuro de komunikilaro + Hazarda imajo de Interreto Emblemo + Brecho di Libereso di Panoramo Pro ke ol esas Probanta aktualigar kategorii. Aktualigo di kategorio @@ -442,7 +483,14 @@ Ne povis adjuntar kategorii. Aktualigar kategorii + Probanta aktualigar deskripturi. Redaktar deskripturi + + Deskripturo %1$s adjuntesis. + Deskripturi %1$s adjuntesis. + + Ne povis adjuntar deskripturi. + Probanta aktualigar koordinati. Aktualigo di koordinati Aktualigo di deskripturo Aktualigo di surskriburo @@ -451,8 +499,14 @@ Adjuntesis deskripturi. Surskriburo adjuntesis. Ne povis adjuntar koordinati. + Ne povis adjuntar deskripturi. + Ne povis adjuntar deskripturo. + Koordinati dil imajo ne aktualigesis + Ne povis obtenar deskripturi. + Redaktar deskripturi ed informo-texti Partigar imajo uzanta Vu ankore ne facis kontributaji + %s ankore ne facis irga kontributado Konto kreesis! Texto kopiita a \'\'clipboard\'\' Mesajo indikita kom \'lektita\' @@ -462,17 +516,21 @@ Bezonas fotografuro Tipo di lokizo: Ponto, muzeo, hotelo, edc. - Irgu ne funcionis dum \'\'log in\'\'. Vu mustos ridefinar vua pasovorto!! + Irgu faliis dum \'\'log in\'\'. Vu mustos ridefinar vua pasovorto!! \'\'MEDIA\'\' SUBKLASI KLASI PLU ABSTRAKTA Loko proxima trovesis - Ka to esas fotografuro pri %1$s? + Ka ca imaji apartenas a %1$s? + Ka to esas imajo di %1$s? Marko-rubandi Ajusti + Efacita de la marko-rubandi Adjuntita marko-rubandi + Irgu faliis. Ne povis vidar la muropapero Uzar kom skreno-kovrilo Kreanta skreno-kovrilo. Voluntez vartar... + Sequar sistemo Koloro obskura Koloro klara Charjez pluse @@ -492,6 +550,9 @@ Uzero Quanteso Uzar kom \'\'avatar\'\' di la tabelo pri precipua kunlaboranti + Ajusto di avataro + Eroro dum ajusto di nov avataro, voluntez probar itere + Uzar kom avataro Yare Semanale Sempre @@ -502,9 +563,16 @@ Imaji di qualeso Nuliganta sendajo... Cesar kargajo + Montras + Licencizo di \'\'media\'\' + Detali pri \'\'media\'\' + Vidar kategorio-pagino + Vidar pagino dil arkivo Lektez pluse En omna idiomi Selektez lokizo + Selektar lokizo + Montrar en l\'utensilo \'\'app\'\' di mapo Aktualigar lokizo Lokizo dil imajo Verifikez se la lokizo esas korekta @@ -524,8 +592,33 @@ Montrez monumenti SAVEZ PLUSE Bezonas permiso - Vidar uzeropagino + Kontributadi dil uzero: %s + Sucesi dil uzero: %s + Vidar profilo dil uzero + Redaktar deskripturi + Redaktar kategorii + Progresiva selektaji (advanced options) + Aplikar + Restaurar + Nula lokizo trovita Ka vu deziras informar la loko de ube vu obtenis ca imajo?\nInformo pri la lokizo helpos editeri trovar vua imajo, do ol divenos plu utila.\nDanko! + Adjuntez lokizo + Detali + nivelo di API + versiono di Android + Fabrikanto dil aparato + Modelo dil aparato + Nomo dil aparato + Tipo di reto + Danko por sendar vua opiniono + Eroro dum sendo di respondo + Qual es vua opiniono (feedback)? + Vua opiniono (\'\'feedback\'\') + Indikez por ne sendar ol + Itere indikez por sendar ol + Indikanta ke ol ne sendesos + Ca imajo ja sendesis + Ne povis selektar ca imajo por sendar (\'\'upload\'\') Imajo selektita Ca imajo indikesis por ne sendesar Raporto @@ -535,13 +628,49 @@ Avizar ca uzero Informar ca kontenajo Demandar blokuso di ca uzero + Uzez du fingri por augmentar o diminutar \'\'zoom\'\'. Koordinati ne esas l\'exakta, tamen l\'individuo qua sendis ca imajo kredas ke la koordinati quin lu informis esas suficante proxima. Modifikar imajo Aktualigar lokizo + Lokizo aktualigita! + Removar lokizo + Removar avizo pri lokizo + Lokizo efacita! Dankar l\'autoro Eroro sendanta danki al autoro. + La tempo-quanto por vua \'\'log in\'\' finis. Voluntez itere enirar. + Konservo sucesoza di arkivo + Ka vu deziras apertar arkivo GPX? + Ka vu deziras apartar l\'arkivo KML? + Faliis pri konservar arkivo KML. + Faliis pri konservar arkivo GPX. + Konservanta arqkivo KML + Konservanta arkivo GPX %d imajo selektita %d imaji selektita + Diskuto + Dicez irgu pri l\'arkivo \'%1$s\'. Ol esos videbla publike. + Arkivi sendita + Vartanta + Faliis + Ne povis inkluzar datumi pri la loko + Efacar faldilo + Konfirmez efaco + Ka vu deziras efacar faldilo %1$s, kontenanta %2$d arkivi? + Efacez + Nuligez + Faldilo %1$s sucese efacita + Faliis pri efacar faldilo %1$s + Commons + Altra wiki + Uzi dil arkivo + SingleWebViewActivity + Konto + Efacar konto + Avizo pri efaco di konto + Deskripto-texto + Deskripto-texto kopiita a \'\'clipboard\'\' + Gratuli! Omna imaji en ca albumo sive sendesis, sive indikesis por ne sendar. diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index 37a90a327..8ef85d363 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -108,6 +108,8 @@ 写真を撮影 付近 自分のアップロード + リンクをコピー + リンクがクリップボードにコピーされました 共有 ファイルのページを表示 キャプション (必須) @@ -126,6 +128,7 @@ カテゴリを検索 アップロードする素材の被写体を検索(山岳、タージマハールなど) 保存 + オーバーフローメニュー 更新 一覧 (まだ何もアップロードされていません) @@ -313,6 +316,7 @@ 検索 最近の検索: 最近、検索したクエリ + 最近の言語クエリ カテゴリの読み込み中にエラーが発生しました。 描写の読み込み中にエラーが発生しました メデイア @@ -345,6 +349,7 @@ 不正解 このスクリーンショットをアップロードしてもよいですか? アプリをシェアする + 回転 付近の場所を読み込めません 最近の検索はまだありません 本当に検索履歴を消去しますか? @@ -355,11 +360,12 @@ 削除 貢献 プロフィール + バッジ 統計 受け取った感謝 秀逸な画像 「近くの場所」機能でアップロードした画像 - レベル + レベル %d アップロードした画像 却下されなかった画像 使用された画像 @@ -391,6 +397,7 @@ お使いの機器に適したアプリが見つかりませんでした。この機能を使用できる地図アプリをインストールしてください。 画像 位置 + カテゴリ ブックマークに追加/から削除 ブックマーク ブックマークは追加されていません @@ -642,7 +649,7 @@ 完了 戻る 権限が必要です - 利用者ページを表示 + 利用者プロフィールを表示 題材を編集する カテゴリを編集 適用 @@ -683,4 +690,17 @@ %d件の画像が選択されました + すべてのアップロードをキャンセルしています... + アップロード + 保留中 + 失敗しました + 削除 + キャンセル + コモンズ + その他のウィキ + アカウント + アカウント抹消 + アカウント抹消の警告 + キャプション + キャプションをクリップボードにコピーしました diff --git a/app/src/main/res/values-mk/strings.xml b/app/src/main/res/values-mk/strings.xml index 26abb3749..15d6789fd 100644 --- a/app/src/main/res/values-mk/strings.xml +++ b/app/src/main/res/values-mk/strings.xml @@ -817,4 +817,5 @@ Исчезнувањето е <b>крајна мерка</b> и треба да се користи само ако сакате да престанете да уредувате засекогаш/b> и да скриете што повеќе од вашите досегашни врски.<br/><br/>Бришењето сметки на Википедија се врши со менување на името на вашата сметка, така што другите не би можеле да ги препознаат вашите придонеси во постапка наречена „исчезнување“ на сметка.<b>Исчезнувањето не гарантира целосна анонимност и не ги отстранува придонесите на проектите</b>. Толкување Толкувањето е ставено во меѓускладот + Честитаме. Сите слики од овој албум се подигнати или обележани за неподигање. diff --git a/app/src/main/res/values-ml/strings.xml b/app/src/main/res/values-ml/strings.xml index 200ce0790..775a64bcc 100644 --- a/app/src/main/res/values-ml/strings.xml +++ b/app/src/main/res/values-ml/strings.xml @@ -3,13 +3,31 @@ * Adithyak1997 * Akhilan * Jacob.jose +* Jinoytommanjaly * Kiran Gopi * Praveenp * Santhosh.thottingal --> + കോമൺസ് ഫേസ്ബുക്ക് പേജ് + കോമൺസ് ജിത്ഹബ് സോഴ്സ് കോഡ് കോമൺസ് ലോഗോ കോമൺസ് വെബ്‌സൈറ്റ് + സമർപ്പിക്കുക + മറ്റൊരു വിവരണം ചേർക്കുക + പുതിയ സംഭാവന ചേർക്കുക + ക്യാമറയിൽ നിന്നുള്ള സംഭാവന ചേർക്കുക + ഫോട്ടോകളിൽ നിന്നുള്ള സംഭാവന ചേർക്കുക + മുമ്പത്തെ സംഭാവനകളുടെ ഗാലറിയിൽ നിന്നുള്ള സംഭാവന ചേർക്കുക + തലവാചകം + ഭാഷാ വിവരണം + തലവാചകം + വിവരണം + ചിത്രം + എല്ലാം + ടോഗിൾ അപ്പ് + തിരയൽ കാഴ്ച + ദിവസത്തെ ചിത്രം ഒരു പ്രമാണം അപ്‌ലോഡ് ചെയ്യുന്നു %1$d പ്രമാണങ്ങൾ അപ്‌ലോഡ് ചെയ്യുന്നു @@ -19,6 +37,7 @@ ഒരു അപ്‌ലോഡ് %1$d അപ്‌ലോഡുകൾ + അപ്‌ലോഡുകൾ ആരംഭിക്കുന്നു ഒരു അപ്‌ലോഡ് തുടങ്ങുന്നു %1$d അപ്‌ലോഡുകൾ തുടങ്ങുന്നു @@ -35,6 +54,8 @@ സ്വകാര്യത കോമൺസ് സജ്ജീകരണങ്ങൾ + കോമൺസിലേക്ക് അപ്‌ലോഡ് ചെയ്യുക + അപ്‌ലോഡ് പുരോഗമിക്കുന്നു ഉപയോക്തൃനാമം രഹസ്യവാക്ക് താങ്കളുടെ കോമൺസ് ബീറ്റ അംഗത്വത്തിൽ പ്രവേശിക്കുക @@ -43,9 +64,13 @@ അംഗത്വമെടുക്കുക പ്രവേശിക്കുന്നു ദയവായി കാത്തിരിക്കുക… - പ്രവേശനം വിജയകരം! - പ്രവേശനം പരാജയപ്പെട്ടു! + അടിക്കുറിപ്പുകളും വിവരണങ്ങളും അപ്ഡേറ്റ് ചെയ്യുന്നു + ദയവായി കാത്തിരിക്കുക… + പ്രവേശനം വിജയകരം! + പ്രവേശനം പരാജയപ്പെട്ടു! പ്രമാണം കണ്ടെത്താനായില്ല. ദയവായി മറ്റൊരു പ്രമാണം നോക്കുക. + പരമാവധി വീണ്ടും ശ്രമിക്കാനുള്ള പരിധി എത്തി! അപ്‌ലോഡ് റദ്ദാക്കി വീണ്ടും ശ്രമിക്കുക + ബാറ്ററി ഒപ്റ്റിമൈസേഷൻ ഓഫാക്കണോ? സാധുതാനിർണ്ണയം പരാജയപ്പെട്ടു, ദയവായി വീണ്ടും പ്രവേശിക്കുക അപ്‌ലോഡ് തുടങ്ങി! %1$s അപ്‌ലോഡ് ചെയ്തിരിക്കുന്നു! @@ -65,9 +90,14 @@ ചിത്രം എടുക്കുക സമീപസ്ഥം എന്റെ അപ്‌ലോഡുകൾ + ലിങ്ക് പകർത്തുക + ലിങ്ക് ക്ലിപ്പ്ബോർഡിലേക്ക് പകർത്തി പങ്ക് വെയ്ക്കുക + പ്രമാണ താൾ കാണുക അടിക്കുറിപ്പ് (നിർബന്ധം) + ദയവായി ഈ ഫയലിന് ഒരു അടിക്കുറിപ്പ് നൽകുക വിവരണം + തലവാചകം പ്രവേശിക്കാനായില്ല - നെറ്റ്‌വർക്ക് പരാജയപ്പെട്ടു നിരവധി വിജയകരമല്ലാത്ത ശ്രമങ്ങൾ നടന്നിരിക്കുന്നു. വീണ്ടും ശ്രമിക്കുന്നതിനു മുമ്പ് ഏതാനം മിനിറ്റുകൾ വിശ്രമിക്കുക. ക്ഷമിക്കുക, ഈ ഉപയോക്താവ് കോമൺസിൽ നിന്ന് തടയപ്പെട്ടിരിക്കുകയാണ് @@ -103,6 +133,7 @@ റദ്ദാക്കുക ഡൗൺലോഡ് സ്വതേയുള്ള ഉപയോഗാനുമതി + വിഷയം ആട്രിബ്യൂഷൻ-ഷെയർ‌എലൈക് 4.0 ആട്രിബ്യൂഷൻ 4.0 ആട്രിബ്യൂഷൻ-ഷെയർ‌എലൈക് 3.0 @@ -122,6 +153,7 @@ വർഗ്ഗങ്ങൾ ശേഖരിക്കുന്നു… ഒന്നും തിരഞ്ഞെടുത്തിട്ടില്ല + അടിക്കുറിപ്പില്ല വിവരണമൊന്നുമില്ല സംവാദങ്ങളില്ല അജ്ഞാതമായ അനുമതി diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index ae075e71a..11485b473 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -13,6 +13,7 @@ * Matma Rex * Mazab IZW * Olaf +* PanWor * Rail * Railfail536 * Rainbow P @@ -137,6 +138,8 @@ Zrób zdjęcie W pobliżu Wysłane przeze mnie pliki + Skopiuj link + Link został skopiowany do schowka Udostępnij Pokaż stronę pliku Podpis (wymagany) @@ -155,6 +158,7 @@ Szukaj kategorii Wyszukiwanie elementów, które przedstawiają twoje media (góra, Tadż Mahal itp.) Zapisz + Rozszerzone menu Odśwież Lista (Nie ma jeszcze przesłanych plików) @@ -311,6 +315,7 @@ Skopiuj wikitext do schowka Wikitext został skopiowany do schowka W pobliżu może nie działać poprawnie, Lokalizacja jest niedostępna. + Brak połączenia z internetem. Wyświetlane są tylko miejsca z pamięci podręcznej. Odmowa dostępu do lokalizacji. Aby skorzystać z tej funkcji, ustaw swoją lokalizację ręcznie. Uprawnienie wymagane do wyświetlania listy pobliskich miejsc Uprawnienie wymagane do wyświetlania listy pobliskich zdjęć @@ -394,11 +399,13 @@ Usuń Osiągnięcia Profil + Odznaki Statystyki Otrzymane Dzięki Wyróżnione ilustracje Obrazy za pośrednictwem \"Pobliskie miejsca\" - Poziom + Poziom %d + %s (Poziom %s) Przesłane obrazy Nie wycofane obrazy Wykorzystane obrazy @@ -465,6 +472,8 @@ Zezwól aplikacji na pobieranie lokalizacji, jeśli kamera jej nie rejestruje. Niektóre kamery urządzeń nie rejestrują lokalizacji. W takich przypadkach pozwolenie aplikacji na pobieranie i dołączanie do niej lokalizacji sprawia, że Twój wkład jest bardziej użyteczny. Możesz to zmienić w dowolnym momencie w Ustawieniach Zezwól Odrzuć + Zezwól na dostęp do lokalizacji w Ustawieniach, a następnie spróbuj ponownie.\n\nUwaga: Jeśli aplikacja nie będzie w stanie uzyskać danych o lokalizacji z urządzenia w krótkim czasie, przesłany plik może nie zawierać tych informacji. + Aparat w aplikacji potrzebuje uprawnień na dostęp do lokalizacji, aby dołączyć ją do zdjęć, jeśli nie jest dostępna w danych EXIF. Zezwól aplikacji na dostęp do lokalizacji, a następnie spróbuj ponownie.\n\nUwaga: Jeśli aplikacja nie będzie w stanie uzyskać danych o lokalizacji z urządzenia w krótkim czasie, przesłany plik może nie zawierać tych informacji. Upewnij się, że ten nowy selektor Androida nie usuwa lokalizacji ze zdjęć. Kampanie już nie będą widoczne. Jednak w razie potrzeby możesz ponownie włączyć to powiadomienie w ustawieniach. Ta funkcja wymaga połączenia sieciowego, sprawdź ustawienia połączenia. @@ -781,4 +790,6 @@ Chcesz otworzyć plik KML? Nie udało się zapisać pliku KML. Nie udało się zapisać pliku GPX. + Dyskusja + Usuń diff --git a/app/src/main/res/values-pms/strings.xml b/app/src/main/res/values-pms/strings.xml index 8c388d9ae..0e3063ac7 100644 --- a/app/src/main/res/values-pms/strings.xml +++ b/app/src/main/res/values-pms/strings.xml @@ -813,4 +813,5 @@ L\'eliminassion a l\'é <b>l\'ùltima arsorsa</b> e a dovrìa <b>esse dovrà mach si chiel a veul chité ëd modifiché për sempe</b> e ëdcò s\'a veul ëstërmé pi che possìbil soe assossiassion passà.<br/><br/>La dëscancelassion ëd cont su Wikimedia a l\'é fàita an modificand sò stranòm an manera che j\'àutri a peulo pa arconòsse soe contribussion ant un process ciamà dëscancelassion ëd cont. <b>La sparission a garantiss pa l\'anonimà complet ni a gava le contribussion dai proget</b>. Legenda Legenda copià an sla taulëtta + Congratulassion, tute le fòto ëd s\'àlbom a son ëstàita carià opura marcà coma da nen carié. diff --git a/app/src/main/res/values-zh/strings.xml b/app/src/main/res/values-zh/strings.xml index 1ae869ec6..93757701c 100644 --- a/app/src/main/res/values-zh/strings.xml +++ b/app/src/main/res/values-zh/strings.xml @@ -48,6 +48,7 @@ * Yfdyh000 * Zhang8569 * ZhaoGang +* 七八年再来一次 * 予弦 * 佛壁灯 * 列维劳德 @@ -61,7 +62,7 @@ 共享资源Facebook页面 共享资源Github源代码 - 共享资源标志 + 共享资源标识 共享资源网站 退出位置选择器 提交 @@ -345,7 +346,7 @@ 跳过教程 互联网不可用 检索通知时出错 - 获取审查图片错误。按刷新键重试。 + 获取审查用图片错误。按刷新键重试。 找不到通知 翻译 语言 @@ -378,13 +379,13 @@ 通过移动端上传 地图 图片已添加到维基数据上的%1$s! - 更新对应维基数据实体失败! + 更新对应维基数据项目失败! 设为壁纸 壁纸已成功设置! 测验 这个图片可以上传吗? 问题 - 成绩 + 结果 如果您继续上传需要删除的图片,您的帐户可能会被封禁。你确定要结束测验吗? 您上传的图片超过%1$s已被删除。如果您继续上传需要删除的图片,您的帐户可能会被封禁。\n\n您是否希望再次查看该教程,然后进行测验以帮助您了解应该或不应上传的图像类型? 自拍没有太多的百科全书价值。除非您已经有关于您的维基百科文章,否则请不要上传自己的照片。 @@ -467,7 +468,7 @@ 由我自己上传在%1$s,使用于%2$d个条目。 欢迎使用共享资源!\n\n通过点击添加按钮以上传您的首个媒体。 未提交分类 - 没有类别的图像很少可用。确实要继续而不选择类别吗? + 不带分类的图片很难有机会被利用到,您确定您要不选择分类来继续吗? 没有选择描写 带有描述的图像更容易被发现并且更可能被使用。您确定不选择描述继续吗? 取消上传 @@ -477,12 +478,12 @@ 搜索这个区域 权限申请 您希望我们获取您当前的位置来显示最近的需要图片的地方吗? - 无法显示没有位置权限的需要图片的最近位置 + 没有位置权限,无法显示需要图片的最近地点 不再询问 申请位置权限 申请附近通知卡查看功能所必需的位置权限。 出了点问题,我们无法获取成就 - 您做出了许多贡献,我们的计算系统无法应对。这是最终的成就。 + 您做出的贡献多到让我们的成就计算系统无法应对,此为最终成果。 结束时间: 显示活动 显示正在进行的活动 @@ -558,7 +559,7 @@ 镜头型号 序列号 软件 - 已拒绝访问媒体位置 + 被拒绝访问媒体位置 我们可能无法自动从你上传的图片中获取位置数据。提交前请为每张图片添加适当的位置 直接在您手机上的维基共享资源应用中上传照片。立即下载共享资源应用:%1$s 分享到... @@ -799,7 +800,7 @@ 用两根手指放大和缩小。 快速长距离滑动来执行以下操作:\n- 向左/右:前往上一个/下一个\n- 向上:选择\n- 向下:标记为不上传 要设置你的排行榜头像,请点击任意图片上三点式菜单中的\"设置为头像\" - 图片坐标并不是准确的坐标,但上传这张图片的人认为它们足够接近。 + 坐标虽不准确,但上传这张图片的人认为已经足够接近了。 存储权限被拒绝 无法分享此项目 功能需要权限 @@ -828,7 +829,7 @@ 已选择%d个图像 已选择%d个图像 - 请记住,每次多图片上传会为其中的所有图片标注相同的分类和描述。如果这些图片并不共享同样的描述和分类,请分别进行多次上传。 + 请记住,多重上传中的所有图片都会标注相同的分类和描述。如果这些图片并不共享同样的描述和分类,请分别多次单独进行上传。 关于多图片上传的提醒 向维基数据报告关于该项的问题 请输入一些评论。 @@ -857,7 +858,16 @@ 这个地点已经有照片了。 现在检查这个地点是否有照片。 加载时出错 + 未找到用法 维基共享资源 其它wiki 文件用途 + 单一网页视图活动 + 账号 + 隐退账号 + 隐退账号警告 + 隐退是一个<b>最后的手段</b>,应该<b>仅在您希望永远停止编辑</b>,并尽可能隐藏您过去的关联时使用。<br/><br/>在维基媒体共享资源上删除账户是通过更改您的账户名称,使其他人无法识别您的贡献,这个过程称为账户隐退。<b>隐退并不能保证完全匿名,也无法删除对项目的贡献</b>。 + 说明 + 已复制到剪贴板 + 恭喜,专辑中的所有图片都已上传或标记为不上传。 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index e7504df98..d2bde98ab 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -867,5 +867,6 @@ Upload your first media by tapping on the add button. last resort and should only be used when you wish to stop editing forever and also to hide as many of your past associations as possible.

Account deletion on Wikimedia Commons is done by changing your account name to make it so others cannot recognize your contributions in a process called account vanishing. Vanishing does not guarantee complete anonymity or remove contributions to the projects.]]>
Caption Caption copied to clipboard + Congratulations, all pictures in this album have been either uploaded or marked as not for upload.