From 3779cfb6a5adec86cd5dd9f95b32ed32a21eafa7 Mon Sep 17 00:00:00 2001 From: Kanahia <114223204+kanahia1@users.noreply.github.com> Date: Mon, 8 Jul 2024 11:43:57 +0530 Subject: [PATCH 001/464] Added Wikitalk Page (#5740) * Added wikitalk page and improved bottomsheet for landscape mode * Improved wikitalk page * Fixed italics * Fixed little bug * Improved the wiki talk page * . * changed commons url to wikidata url * changed commons url to wikidata url + 1 * fixed bookmark issue * Added kdoc and javadoc --------- Co-authored-by: Nicolas Raoul --- app/src/main/AndroidManifest.xml | 440 +++++++++--------- .../nrw/commons/actions/PageEditClient.kt | 37 +- .../nrw/commons/actions/PageEditInterface.kt | 27 ++ .../nrw/commons/di/ActivityBuilderModule.java | 4 + .../di/CommonsApplicationComponent.java | 5 + .../free/nrw/commons/di/NetworkingModule.java | 49 +- .../commons/mwapi/OkHttpJsonApiClient.java | 4 +- .../nrw/commons/nearby/BottomSheetAdapter.kt | 108 +++++ .../nrw/commons/nearby/PageEditHelper.java | 164 +++++++ .../nrw/commons/nearby/WikidataFeedback.kt | 96 ++++ .../fragments/NearbyParentFragment.java | 432 ++++++++++------- .../commons/nearby/model/BottomSheetItem.kt | 3 + .../res/layout/activity_wikidata_feedback.xml | 111 +++++ .../main/res/layout/bottom_sheet_details.xml | 172 +------ .../res/layout/bottom_sheet_item_layout.xml | 27 ++ app/src/main/res/values/strings.xml | 8 + 16 files changed, 1142 insertions(+), 545 deletions(-) create mode 100644 app/src/main/java/fr/free/nrw/commons/nearby/BottomSheetAdapter.kt create mode 100644 app/src/main/java/fr/free/nrw/commons/nearby/PageEditHelper.java create mode 100644 app/src/main/java/fr/free/nrw/commons/nearby/WikidataFeedback.kt create mode 100644 app/src/main/java/fr/free/nrw/commons/nearby/model/BottomSheetItem.kt create mode 100644 app/src/main/res/layout/activity_wikidata_feedback.xml create mode 100644 app/src/main/res/layout/bottom_sheet_item_layout.xml diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 5ba49201a..02f31185a 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,262 +1,266 @@ - - - - - - - - - - - - - - - - - - + xmlns:tools="http://schemas.android.com/tools"> + + + + + + + + + + + + + + + + + + - - - - - - - - - - + + + + + + + + + + - - + + - + - + - + - + - + - - - + - - + + + - + + - - + - - - + + - + + + - - - - - + - + + + + + - - - - - - - + - + + + + + + + - + - + - + - + - + - + - + - + - + - + - - - - - - + - + + + + + + - - - + - + + + - + - + - + - + - + - - - - + - - + + + + - + + - + - + + + \ No newline at end of file diff --git a/app/src/main/java/fr/free/nrw/commons/actions/PageEditClient.kt b/app/src/main/java/fr/free/nrw/commons/actions/PageEditClient.kt index cb153b7cb..93e833c15 100644 --- a/app/src/main/java/fr/free/nrw/commons/actions/PageEditClient.kt +++ b/app/src/main/java/fr/free/nrw/commons/actions/PageEditClient.kt @@ -4,6 +4,7 @@ import fr.free.nrw.commons.auth.csrf.InvalidLoginTokenException import io.reactivex.Observable import io.reactivex.Single import fr.free.nrw.commons.auth.csrf.CsrfTokenClient +import timber.log.Timber /** * This class acts as a Client to facilitate wiki page editing @@ -27,7 +28,41 @@ class PageEditClient( fun edit(pageTitle: String, text: String, summary: String): Observable { return try { pageEditInterface.postEdit(pageTitle, summary, text, csrfTokenClient.getTokenBlocking()) - .map { editResponse -> editResponse.edit()!!.editSucceeded() } + .map { editResponse -> + editResponse.edit()!!.editSucceeded() + } + } catch (throwable: Throwable) { + if (throwable is InvalidLoginTokenException) { + throw throwable + } else { + Observable.just(false) + } + } + } + + /** + * Creates a new page with the given title, text, and summary. + * + * @param pageTitle The title of the page to be created. + * @param text The content of the page in wikitext format. + * @param summary The edit summary for the page creation. + * @return An observable that emits true if the page creation succeeded, false otherwise. + * @throws InvalidLoginTokenException If an invalid login token is encountered during the process. + */ + fun postCreate(pageTitle: String, text: String, summary: String): Observable { + return try { + pageEditInterface.postCreate( + pageTitle, + summary, + text, + "text/x-wiki", + "wikitext", + true, + true, + csrfTokenClient.getTokenBlocking() + ).map { editResponse -> + editResponse.edit()!!.editSucceeded() + } } catch (throwable: Throwable) { if (throwable is InvalidLoginTokenException) { throw throwable diff --git a/app/src/main/java/fr/free/nrw/commons/actions/PageEditInterface.kt b/app/src/main/java/fr/free/nrw/commons/actions/PageEditInterface.kt index 070aaaa64..1aa0bbfce 100644 --- a/app/src/main/java/fr/free/nrw/commons/actions/PageEditInterface.kt +++ b/app/src/main/java/fr/free/nrw/commons/actions/PageEditInterface.kt @@ -36,6 +36,33 @@ interface PageEditInterface { @Field("token") token: String ): Observable + /** + * This method creates or edits a page for nearby items. + * + * @param title Title of the page to edit. Cannot be used together with pageid. + * @param summary Edit summary. Also used as the section title when section=new and sectiontitle is not set. + * @param text Text of the page. + * @param contentformat Format of the content (e.g., "text/x-wiki"). + * @param contentmodel Model of the content (e.g., "wikitext"). + * @param minor Whether the edit is a minor edit. + * @param recreate Whether to recreate the page if it does not exist. + * @param token A "csrf" token. This should always be sent as the last field of form data. + */ + @FormUrlEncoded + @Headers("Cache-Control: no-cache") + @POST(MW_API_PREFIX + "action=edit") + fun postCreate( + @Field("title") title: String, + @Field("summary") summary: String, + @Field("text") text: String, + @Field("contentformat") contentformat: String, + @Field("contentmodel") contentmodel: String, + @Field("minor") minor: Boolean, + @Field("recreate") recreate: Boolean, + // NOTE: This csrf shold always be sent as the last field of form data + @Field("token") token: String + ): Observable + /** * This method posts such that the Content which the page * has will be appended with the value being passed to the diff --git a/app/src/main/java/fr/free/nrw/commons/di/ActivityBuilderModule.java b/app/src/main/java/fr/free/nrw/commons/di/ActivityBuilderModule.java index 6a9277906..0df9685c1 100644 --- a/app/src/main/java/fr/free/nrw/commons/di/ActivityBuilderModule.java +++ b/app/src/main/java/fr/free/nrw/commons/di/ActivityBuilderModule.java @@ -14,6 +14,7 @@ import fr.free.nrw.commons.description.DescriptionEditActivity; import fr.free.nrw.commons.explore.depictions.WikidataItemDetailsActivity; import fr.free.nrw.commons.explore.SearchActivity; import fr.free.nrw.commons.media.ZoomableActivity; +import fr.free.nrw.commons.nearby.WikidataFeedback; import fr.free.nrw.commons.notification.NotificationActivity; import fr.free.nrw.commons.profile.ProfileActivity; import fr.free.nrw.commons.review.ReviewActivity; @@ -79,4 +80,7 @@ public abstract class ActivityBuilderModule { @ContributesAndroidInjector abstract ZoomableActivity bindZoomableActivity(); + + @ContributesAndroidInjector + abstract WikidataFeedback bindWikiFeedback(); } diff --git a/app/src/main/java/fr/free/nrw/commons/di/CommonsApplicationComponent.java b/app/src/main/java/fr/free/nrw/commons/di/CommonsApplicationComponent.java index cbbf1f0c5..1390bd8ef 100644 --- a/app/src/main/java/fr/free/nrw/commons/di/CommonsApplicationComponent.java +++ b/app/src/main/java/fr/free/nrw/commons/di/CommonsApplicationComponent.java @@ -2,9 +2,11 @@ package fr.free.nrw.commons.di; import com.google.gson.Gson; +import fr.free.nrw.commons.actions.PageEditClient; import fr.free.nrw.commons.explore.categories.CategoriesModule; import fr.free.nrw.commons.navtab.MoreBottomSheetFragment; import fr.free.nrw.commons.navtab.MoreBottomSheetLoggedOutFragment; +import fr.free.nrw.commons.nearby.NearbyController; import fr.free.nrw.commons.upload.worker.UploadWorker; import javax.inject.Singleton; @@ -68,6 +70,9 @@ public interface CommonsApplicationComponent extends AndroidInjector" + "\n"; - List placeBindings = runQuery(leftLatLng,rightLatLng); + List placeBindings = runQuery(leftLatLng, rightLatLng); if (placeBindings != null) { for (PlaceBindings item : placeBindings) { if (item.getItem() != null && item.getLabel() != null && item.getClas() != null) { diff --git a/app/src/main/java/fr/free/nrw/commons/nearby/BottomSheetAdapter.kt b/app/src/main/java/fr/free/nrw/commons/nearby/BottomSheetAdapter.kt new file mode 100644 index 000000000..ca21f25ad --- /dev/null +++ b/app/src/main/java/fr/free/nrw/commons/nearby/BottomSheetAdapter.kt @@ -0,0 +1,108 @@ +package fr.free.nrw.commons.nearby + +import android.content.Context +import android.view.LayoutInflater +import android.view.View +import android.view.View.OnLongClickListener +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.annotation.NonNull +import androidx.core.content.ContextCompat +import androidx.recyclerview.widget.RecyclerView +import fr.free.nrw.commons.R +import fr.free.nrw.commons.nearby.model.BottomSheetItem + +/** + * RecyclerView Adapter for displaying items in a bottom sheet. + * + * @property context The context used for inflating layout resources. + * @property itemList The list of BottomSheetItem objects to display. + * @constructor Creates an instance of BottomSheetAdapter. + */ +class BottomSheetAdapter(context: Context?, private val itemList: List) : + RecyclerView.Adapter() { + private val layoutInflater: LayoutInflater = LayoutInflater.from(context) + private var itemClickListener: ItemClickListener? = null + + @NonNull + override fun onCreateViewHolder(@NonNull parent: ViewGroup, viewType: Int): ViewHolder { + val view: View = layoutInflater.inflate(R.layout.bottom_sheet_item_layout, parent, false) + return ViewHolder(view) + } + + override fun onBindViewHolder(@NonNull holder: ViewHolder, position: Int) { + val item = itemList[position] + holder.imageView.setImageDrawable( + ContextCompat.getDrawable( + getContext(), + item.imageResourceId + ) + ) + holder.title.setText(item.title) + } + + /** + * Returns the total number of items in the data set held by the adapter. + * + * @return The total number of items in this adapter. + */ + override fun getItemCount(): Int { + return itemList.size + } + + /** + * Updates the icon for bookmark item. + * + * @param icon The resource ID of the new icon to set. + */ + fun updateBookmarkIcon(icon: Int) { + itemList.forEachIndexed { index, item -> + if (item.imageResourceId == R.drawable.ic_round_star_filled_24px || item.imageResourceId == R.drawable.ic_round_star_border_24px) { + item.imageResourceId = icon + this.notifyItemChanged(index) + return + } + } + } + + inner class ViewHolder internal constructor(itemView: View) : RecyclerView.ViewHolder(itemView), + View.OnClickListener, OnLongClickListener { + var imageView: ImageView = itemView.findViewById(R.id.buttonImage) + var title: TextView = itemView.findViewById(R.id.buttonText) + + init { + itemView.setOnClickListener(this) + itemView.setOnLongClickListener(this) + } + + override fun onClick(view: View) { + if (itemClickListener != null) itemClickListener!!.onBottomSheetItemClick( + view, + adapterPosition + ) + } + + override fun onLongClick(view: View): Boolean { + if (itemClickListener != null) itemClickListener!!.onBottomSheetItemLongClick( + view, + adapterPosition + ) + return true + } + } + + fun setClickListener(itemClickListener: ItemClickListener?) { + this.itemClickListener = itemClickListener + } + + fun getContext(): Context { + return layoutInflater.context + } + + interface ItemClickListener { + fun onBottomSheetItemClick(view: View?, position: Int) + fun onBottomSheetItemLongClick(view: View?, position: Int) + } +} + diff --git a/app/src/main/java/fr/free/nrw/commons/nearby/PageEditHelper.java b/app/src/main/java/fr/free/nrw/commons/nearby/PageEditHelper.java new file mode 100644 index 000000000..9d4b1069c --- /dev/null +++ b/app/src/main/java/fr/free/nrw/commons/nearby/PageEditHelper.java @@ -0,0 +1,164 @@ +package fr.free.nrw.commons.nearby; + + +import static fr.free.nrw.commons.notification.NotificationHelper.NOTIFICATION_DELETE; + +import android.content.Context; +import android.content.DialogInterface; +import android.content.Intent; +import android.net.Uri; +import androidx.appcompat.app.AlertDialog; +import fr.free.nrw.commons.BuildConfig; +import fr.free.nrw.commons.R; +import fr.free.nrw.commons.actions.PageEditClient; +import fr.free.nrw.commons.auth.csrf.InvalidLoginTokenException; +import fr.free.nrw.commons.notification.NotificationHelper; +import fr.free.nrw.commons.utils.ViewUtilWrapper; +import io.reactivex.Observable; +import io.reactivex.Single; +import javax.inject.Inject; +import javax.inject.Named; +import javax.inject.Singleton; +import timber.log.Timber; + +/** + * Singleton class for making edits to wiki pages asynchronously using RxJava. + * + * @property notificationHelper A helper class for displaying notifications. + * @property pageEditClient A client for making page edit requests. + * @property viewUtil A utility class for common view operations. + * @property username The username used for page edits. + * @constructor Initializes the PageEditHelper with required dependencies. + */ +@Singleton +public class PageEditHelper { + + private final NotificationHelper notificationHelper; + private final PageEditClient pageEditClient; + private final ViewUtilWrapper viewUtil; + private final String username; + private AlertDialog d; + private DialogInterface.OnMultiChoiceClickListener listener; + + @Inject + public PageEditHelper(NotificationHelper notificationHelper, + @Named("wikidata-page-edit") PageEditClient pageEditClient, + ViewUtilWrapper viewUtil, + @Named("username") String username) { + this.notificationHelper = notificationHelper; + this.pageEditClient = pageEditClient; + this.viewUtil = viewUtil; + this.username = username; + } + + /** + * Public interface to make a page edit request asynchronously. + * + * @param context The context for displaying messages. + * @param title The title of the page to edit. + * @param preText The existing content of the page. + * @param description The description of the issue to be fixed. + * @param details Additional details about the issue. + * @param lat The latitude of the location related to the page. + * @param lng The longitude of the location related to the page. + * @return A Single emitting true if the edit was successful, false otherwise. + */ + public Single makePageEdit(Context context, String title, String preText, + String description, + String details, Double lat, Double lng) { + viewUtil.showShortToast(context, "Trying to edit " + title); + + return editPage(title, preText, description, details, lat, lng) + .flatMapSingle(result -> Single.just(showNotification(context, title, result))) + .firstOrError() + .onErrorResumeNext(throwable -> { + if (throwable instanceof InvalidLoginTokenException) { + return Single.error(throwable); + } + return Single.error(throwable); + }); + } + + /** + * Creates the text content for the page edit based on provided parameters. + * + * @param title The title of the page to edit. + * @param preText The existing content of the page. + * @param description The description of the issue to be fixed. + * @param details Additional details about the issue. + * @param lat The latitude of the location related to the page. + * @param lng The longitude of the location related to the page. + * @return An Observable emitting true if the edit was successful, false otherwise. + */ + private Observable editPage(String title, String preText, String description, + String details, Double lat, Double lng) { + Timber.d("thread is edit %s", Thread.currentThread().getName()); + String summary = "Please fix this item"; + String text = ""; + String marker = "Please anyone fix the item accordingly, then reply to mark this section as fixed. Thanks a lot for your cooperation!"; + int markerIndex = preText.indexOf(marker); + if (preText == "" || markerIndex == -1) { + text = "==Please fix this item==\n" + + "Someone using the [[Commons:Mobile_app|Commons Android app]] went to this item's geographical location (" + + lat + "," + lng + + ") and noted the following problem(s):\n" + + "* " + description + "\n" + + "\n" + + "Details: " + details + "\n" + + "\n" + + "Please anyone fix the item accordingly, then reply to mark this section as fixed. Thanks a lot for your cooperation!\n" + + "\n" + + "~~~~"; + } else { + text = preText.substring(0, markerIndex); + text = text + "* " + description + "\n" + + "\n" + + "Details: " + details + "\n" + + "\n" + + "Please anyone fix the item accordingly, then reply to mark this section as fixed. Thanks a lot for your cooperation!\n" + + "\n" + + "~~~~"; + } + + return pageEditClient.postCreate(title, text, summary); + } + + /** + * Displays a notification based on the result of the page edit. + * + * @param context The context for displaying the notification. + * @param title The title of the page edited. + * @param result The result of the edit operation. + * @return true if the edit was successful, false otherwise. + */ + private boolean showNotification(Context context, String title, boolean result) { + String message; + + if (result) { + message = title + " Edited Successfully"; + } else { + message = context.getString(R.string.delete_helper_show_deletion_message_else); + } + + String url = BuildConfig.WIKIDATA_URL + "/wiki/" + title; + Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); + notificationHelper.showNotification(context, title, message, NOTIFICATION_DELETE, + browserIntent); + return result; + } + + /** + * returns the instance of shown AlertDialog, used for taking reference during unit test + */ + public AlertDialog getDialog() { + return d; + } + + /** + * returns the instance of shown DialogInterface.OnMultiChoiceClickListener, used for taking + * reference during unit test + */ + public DialogInterface.OnMultiChoiceClickListener getListener() { + return listener; + } +} 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 new file mode 100644 index 000000000..7c62b3646 --- /dev/null +++ b/app/src/main/java/fr/free/nrw/commons/nearby/WikidataFeedback.kt @@ -0,0 +1,96 @@ +package fr.free.nrw.commons.nearby + +import android.annotation.SuppressLint +import android.os.Bundle +import android.widget.RadioButton +import android.widget.Toast +import fr.free.nrw.commons.R +import fr.free.nrw.commons.databinding.ActivityWikidataFeedbackBinding +import fr.free.nrw.commons.theme.BaseActivity +import io.reactivex.Single +import io.reactivex.SingleSource +import io.reactivex.android.schedulers.AndroidSchedulers +import io.reactivex.schedulers.Schedulers +import timber.log.Timber +import java.util.concurrent.Callable +import javax.inject.Inject + +/** + * Activity for providing feedback about Wikidata items. + */ +class WikidataFeedback : BaseActivity() { + private lateinit var binding: ActivityWikidataFeedbackBinding + var place: String = "" + var wikidataQId: String = "" + var pageTitle: String = "" + var preText: String = "" + var lat: Double = 0.0 + var lng: Double = 0.0 + + @Inject + lateinit var pageEditHelper: PageEditHelper + + @Inject + lateinit var nearbyController: NearbyController + + @SuppressLint("CheckResult") + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + binding = ActivityWikidataFeedbackBinding.inflate(layoutInflater) + setContentView(binding.root) + lat = intent.getDoubleExtra("lat", 0.0) + lng = intent.getDoubleExtra("lng", 0.0) + place = intent.getStringExtra("place") ?: "" + wikidataQId = intent.getStringExtra("qid") ?: "" + pageTitle = getString(R.string.talk) + ":" + wikidataQId + binding.toolbarBinding.toolbar.title = pageTitle + binding.textHeader.text = + getString(R.string.write_something_about_the) + "'$place'" + getString(R.string.item_it_will_be_publicly_visible) + binding.radioButton1.setText( + getString( + R.string.does_not_exist_anymore_no_picture_can_ever_be_taken_of_it, + place + )) + binding.radioButton2.setText( + getString( + R.string.is_at_a_different_place_please_specify_the_correct_place_below_if_possible_tell_us_the_correct_latitude_longitude, + place + )) + binding.radioButton3.setText(getString(R.string.other_problem_or_information_please_explain_below)) + setSupportActionBar(binding.toolbarBinding.toolbar) + supportActionBar!!.setDisplayHomeAsUpEnabled(true) + + binding.appCompatButton.setOnClickListener { + var desc = findViewById(binding.radioGroup.checkedRadioButtonId).text + var det = binding.detailsEditText.text.toString() + if (binding.radioGroup.checkedRadioButtonId == R.id.radioButton3 && binding.detailsEditText.text.isNullOrEmpty()) { + Toast.makeText( + this, + getString(R.string.please_enter_some_comments), Toast.LENGTH_SHORT + ).show() + } else { + binding.radioGroup.clearCheck() + binding.detailsEditText.setText("") + Single.defer(Callable> { + pageEditHelper.makePageEdit( + this, pageTitle, preText, + desc.toString(), + det, lat, lng + ) + } as Callable>) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe({ aBoolean: Boolean? -> + }, { throwable: Throwable? -> + Timber.e(throwable!!) + }) + } + } + } + + override fun onSupportNavigateUp(): Boolean { + onBackPressed() + return true + } + +} \ No newline at end of file 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 877f22f5a..d1e28eb7e 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 @@ -48,6 +48,7 @@ import androidx.appcompat.app.AlertDialog; import androidx.core.content.ContextCompat; import androidx.core.content.FileProvider; import androidx.recyclerview.widget.DividerItemDecoration; +import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.LinearLayoutManager; import com.google.android.material.bottomsheet.BottomSheetBehavior; import com.google.android.material.snackbar.Snackbar; @@ -70,6 +71,7 @@ import fr.free.nrw.commons.location.LocationPermissionsHelper; import fr.free.nrw.commons.location.LocationPermissionsHelper.LocationPermissionCallback; import fr.free.nrw.commons.location.LocationServiceManager; import fr.free.nrw.commons.location.LocationUpdateListener; +import fr.free.nrw.commons.nearby.BottomSheetAdapter; import fr.free.nrw.commons.nearby.CheckBoxTriStates; import fr.free.nrw.commons.nearby.Label; import fr.free.nrw.commons.nearby.MarkerPlaceGroup; @@ -77,8 +79,10 @@ import fr.free.nrw.commons.nearby.NearbyController; import fr.free.nrw.commons.nearby.NearbyFilterSearchRecyclerViewAdapter; import fr.free.nrw.commons.nearby.NearbyFilterState; import fr.free.nrw.commons.nearby.Place; +import fr.free.nrw.commons.nearby.WikidataFeedback; import fr.free.nrw.commons.nearby.contract.NearbyParentFragmentContract; import fr.free.nrw.commons.nearby.fragments.AdvanceQueryFragment.Callback; +import fr.free.nrw.commons.nearby.model.BottomSheetItem; import fr.free.nrw.commons.nearby.presenter.NearbyParentFragmentPresenter; import fr.free.nrw.commons.upload.FileUtils; import fr.free.nrw.commons.utils.DialogUtil; @@ -131,7 +135,7 @@ import timber.log.Timber; public class NearbyParentFragment extends CommonsDaggerSupportFragment implements NearbyParentFragmentContract.View, WikidataEditListener.WikidataP18EditListener, LocationUpdateListener, - LocationPermissionCallback { + LocationPermissionCallback, BottomSheetAdapter.ItemClickListener { FragmentNearbyParentBinding binding; @@ -189,6 +193,9 @@ public class NearbyParentFragment extends CommonsDaggerSupportFragment private NearbyParentFragmentInstanceReadyCallback nearbyParentFragmentInstanceReadyCallback; private boolean isAdvancedQueryFragmentVisible = false; private Place nearestPlace; + private GridLayoutManager gridLayoutManager; + private List dataList; + private BottomSheetAdapter bottomSheetAdapter; private ActivityResultLauncher inAppCameraLocationPermissionLauncher = registerForActivityResult( new ActivityResultContracts.RequestMultiplePermissions(), new ActivityResultCallback>() { @@ -203,7 +210,8 @@ public class NearbyParentFragment extends CommonsDaggerSupportFragment controller.locationPermissionCallback.onLocationPermissionGranted(); } else { if (shouldShowRequestPermissionRationale(permission.ACCESS_FINE_LOCATION)) { - controller.handleShowRationaleFlowCameraLocation(getActivity(), inAppCameraLocationPermissionLauncher); + controller.handleShowRationaleFlowCameraLocation(getActivity(), + inAppCameraLocationPermissionLauncher); } else { controller.locationPermissionCallback.onLocationPermissionDenied( getActivity().getString( @@ -434,10 +442,10 @@ public class NearbyParentFragment extends CommonsDaggerSupportFragment moveCameraToPosition(lastMapFocus); initRvNearbyList(); onResume(); - binding.tvAttribution.setText(Html.fromHtml(getString(R.string.map_attribution))); - binding.tvAttribution.setMovementMethod(LinkMovementMethod.getInstance()); + binding.tvAttribution.setText(Html.fromHtml(getString(R.string.map_attribution))); + binding.tvAttribution.setMovementMethod(LinkMovementMethod.getInstance()); binding.nearbyFilterList.btnAdvancedOptions.setOnClickListener(v -> { - binding.nearbyFilter.searchViewLayout.searchView.clearFocus(); + binding.nearbyFilter.searchViewLayout.searchView.clearFocus(); showHideAdvancedQueryFragment(true); final AdvanceQueryFragment fragment = new AdvanceQueryFragment(); final Bundle bundle = new Bundle(); @@ -473,7 +481,7 @@ public class NearbyParentFragment extends CommonsDaggerSupportFragment .commit(); }); - binding.tvLearnMore.setOnClickListener(v ->onLearnMoreClicked()); + binding.tvLearnMore.setOnClickListener(v -> onLearnMoreClicked()); binding.nearbyFilter.ivToggleChips.setOnClickListener(v -> onToggleChipsClicked()); if (!locationPermissionsHelper.checkLocationPermission(getActivity())) { @@ -510,7 +518,8 @@ public class NearbyParentFragment extends CommonsDaggerSupportFragment } private void initRvNearbyList() { - binding.bottomSheetNearby.rvNearbyList.setLayoutManager(new LinearLayoutManager(getContext())); + binding.bottomSheetNearby.rvNearbyList.setLayoutManager( + new LinearLayoutManager(getContext())); adapter = new PlaceAdapter(bookmarkLocationDao, place -> { moveCameraToPosition( @@ -566,7 +575,8 @@ public class NearbyParentFragment extends CommonsDaggerSupportFragment locationManager.requestLocationUpdatesFromProvider(LocationManager.GPS_PROVIDER); setProgressBarVisibility(true); } else { - locationPermissionsHelper.showLocationOffDialog(getActivity(), R.string.ask_to_turn_location_on_text); + locationPermissionsHelper.showLocationOffDialog(getActivity(), + R.string.ask_to_turn_location_on_text); } presenter.onMapReady(); registerUnregisterLocationListener(false); @@ -591,7 +601,6 @@ public class NearbyParentFragment extends CommonsDaggerSupportFragment * Starts the map without GPS and without permission By default it points to 51.50550,-0.07520 * coordinates, other than that it points to the last known location which can be get by the key * "LastLocation" from applicationKvStore - * */ private void startMapWithoutPermission() { if (applicationKvStore.getString("LastLocation") != null) { @@ -649,7 +658,6 @@ public class NearbyParentFragment extends CommonsDaggerSupportFragment initBottomSheets(); loadAnimations(); setBottomSheetCallbacks(); - decideButtonVisibilities(); addActionToTitle(); if (!Utils.isMonumentsEnabled(new Date())) { NearbyFilterState.setWlmSelected(false); @@ -673,26 +681,46 @@ public class NearbyParentFragment extends CommonsDaggerSupportFragment bottomSheetListBehavior.setState(BottomSheetBehavior.STATE_HIDDEN); } + /** + * Determines the number of spans (columns) in the RecyclerView based on device orientation + * and adapter item count. + * + * @return The number of spans to be used in the RecyclerView. + */ + private int getSpanCount() { + int orientation = getResources().getConfiguration().orientation; + if (bottomSheetAdapter != null) { + return (orientation == Configuration.ORIENTATION_PORTRAIT) ? 3 + : bottomSheetAdapter.getItemCount(); + } else { + return (orientation == Configuration.ORIENTATION_PORTRAIT) ? 3 : 6; + } + } + public void initNearbyFilter() { binding.nearbyFilterList.getRoot().setVisibility(View.GONE); hideBottomSheet(); - binding.nearbyFilter.searchViewLayout.searchView.setOnQueryTextFocusChangeListener((v, hasFocus) -> { - LayoutUtils.setLayoutHeightAllignedToWidth(1.25, binding.nearbyFilterList.getRoot()); - if (hasFocus) { - binding.nearbyFilterList.getRoot().setVisibility(View.VISIBLE); - presenter.searchViewGainedFocus(); - } else { - binding.nearbyFilterList.getRoot().setVisibility(View.GONE); - } - }); - binding.nearbyFilterList.searchListView.setHasFixedSize(true); - binding.nearbyFilterList.searchListView.addItemDecoration(new DividerItemDecoration(getContext(), - DividerItemDecoration.VERTICAL)); + binding.nearbyFilter.searchViewLayout.searchView.setOnQueryTextFocusChangeListener( + (v, hasFocus) -> { + LayoutUtils.setLayoutHeightAllignedToWidth(1.25, + binding.nearbyFilterList.getRoot()); + if (hasFocus) { + binding.nearbyFilterList.getRoot().setVisibility(View.VISIBLE); + presenter.searchViewGainedFocus(); + } else { + binding.nearbyFilterList.getRoot().setVisibility(View.GONE); + } + }); + binding.nearbyFilterList.searchListView.setHasFixedSize(true); + binding.nearbyFilterList.searchListView.addItemDecoration( + new DividerItemDecoration(getContext(), + DividerItemDecoration.VERTICAL)); final LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getActivity()); linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL); - binding.nearbyFilterList.searchListView.setLayoutManager(linearLayoutManager); + binding.nearbyFilterList.searchListView.setLayoutManager(linearLayoutManager); nearbyFilterSearchRecyclerViewAdapter = new NearbyFilterSearchRecyclerViewAdapter( - getContext(), new ArrayList<>(Label.valuesAsList()), binding.nearbyFilterList.searchListView); + getContext(), new ArrayList<>(Label.valuesAsList()), + binding.nearbyFilterList.searchListView); nearbyFilterSearchRecyclerViewAdapter.setCallback( new NearbyFilterSearchRecyclerViewAdapter.Callback() { @Override @@ -711,18 +739,20 @@ public class NearbyParentFragment extends CommonsDaggerSupportFragment return isDarkTheme; } }); - binding.nearbyFilterList.getRoot().getLayoutParams().width = (int) LayoutUtils.getScreenWidth(getActivity(), + binding.nearbyFilterList.getRoot() + .getLayoutParams().width = (int) LayoutUtils.getScreenWidth(getActivity(), 0.75); - binding.nearbyFilterList.searchListView.setAdapter(nearbyFilterSearchRecyclerViewAdapter); + binding.nearbyFilterList.searchListView.setAdapter(nearbyFilterSearchRecyclerViewAdapter); LayoutUtils.setLayoutHeightAllignedToWidth(1.25, binding.nearbyFilterList.getRoot()); - compositeDisposable.add(RxSearchView.queryTextChanges( binding.nearbyFilter.searchViewLayout.searchView) - .takeUntil(RxView.detaches(binding.nearbyFilter.searchViewLayout.searchView)) - .debounce(500, TimeUnit.MILLISECONDS) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(query -> { - ((NearbyFilterSearchRecyclerViewAdapter) binding.nearbyFilterList.searchListView.getAdapter()).getFilter() - .filter(query.toString()); - })); + compositeDisposable.add( + RxSearchView.queryTextChanges(binding.nearbyFilter.searchViewLayout.searchView) + .takeUntil(RxView.detaches(binding.nearbyFilter.searchViewLayout.searchView)) + .debounce(500, TimeUnit.MILLISECONDS) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(query -> { + ((NearbyFilterSearchRecyclerViewAdapter) binding.nearbyFilterList.searchListView.getAdapter()).getFilter() + .filter(query.toString()); + })); initFilterChips(); } @@ -739,9 +769,12 @@ public class NearbyParentFragment extends CommonsDaggerSupportFragment @Override public void setFilterState() { - binding.nearbyFilter.chipView.choiceChipNeedsPhoto.setChecked(NearbyFilterState.getInstance().isNeedPhotoSelected()); - binding.nearbyFilter.chipView.choiceChipExists.setChecked(NearbyFilterState.getInstance().isExistsSelected()); - binding.nearbyFilter.chipView.choiceChipWlm.setChecked(NearbyFilterState.getInstance().isWlmSelected()); + binding.nearbyFilter.chipView.choiceChipNeedsPhoto.setChecked( + NearbyFilterState.getInstance().isNeedPhotoSelected()); + binding.nearbyFilter.chipView.choiceChipExists.setChecked( + NearbyFilterState.getInstance().isExistsSelected()); + binding.nearbyFilter.chipView.choiceChipWlm.setChecked( + NearbyFilterState.getInstance().isWlmSelected()); if (NearbyController.currentLocation != null) { presenter.filterByMarkerType(nearbyFilterSearchRecyclerViewAdapter.selectedLabels, binding.nearbyFilterList.checkboxTriStates.getState(), true, false); @@ -749,44 +782,53 @@ public class NearbyParentFragment extends CommonsDaggerSupportFragment } private void initFilterChips() { - binding.nearbyFilter.chipView.choiceChipNeedsPhoto.setOnCheckedChangeListener((buttonView, isChecked) -> { - if (NearbyController.currentLocation != null) { - binding.nearbyFilterList.checkboxTriStates.setState(CheckBoxTriStates.CHECKED); - NearbyFilterState.setNeedPhotoSelected(isChecked); - presenter.filterByMarkerType(nearbyFilterSearchRecyclerViewAdapter.selectedLabels, - binding.nearbyFilterList.checkboxTriStates.getState(), true, true); - updatePlaceList( binding.nearbyFilter.chipView.choiceChipNeedsPhoto.isChecked(), - binding.nearbyFilter.chipView.choiceChipExists.isChecked(), binding.nearbyFilter.chipView.choiceChipWlm.isChecked()); - } else { - binding.nearbyFilter.chipView.choiceChipNeedsPhoto.setChecked(!isChecked); - } - }); + binding.nearbyFilter.chipView.choiceChipNeedsPhoto.setOnCheckedChangeListener( + (buttonView, isChecked) -> { + if (NearbyController.currentLocation != null) { + binding.nearbyFilterList.checkboxTriStates.setState(CheckBoxTriStates.CHECKED); + NearbyFilterState.setNeedPhotoSelected(isChecked); + presenter.filterByMarkerType( + nearbyFilterSearchRecyclerViewAdapter.selectedLabels, + binding.nearbyFilterList.checkboxTriStates.getState(), true, true); + updatePlaceList(binding.nearbyFilter.chipView.choiceChipNeedsPhoto.isChecked(), + binding.nearbyFilter.chipView.choiceChipExists.isChecked(), + binding.nearbyFilter.chipView.choiceChipWlm.isChecked()); + } else { + binding.nearbyFilter.chipView.choiceChipNeedsPhoto.setChecked(!isChecked); + } + }); - binding.nearbyFilter.chipView.choiceChipExists.setOnCheckedChangeListener((buttonView, isChecked) -> { - if (NearbyController.currentLocation != null) { - binding.nearbyFilterList.checkboxTriStates.setState(CheckBoxTriStates.CHECKED); - NearbyFilterState.setExistsSelected(isChecked); - presenter.filterByMarkerType(nearbyFilterSearchRecyclerViewAdapter.selectedLabels, - binding.nearbyFilterList.checkboxTriStates.getState(), true, true); - updatePlaceList( binding.nearbyFilter.chipView.choiceChipNeedsPhoto.isChecked(), - binding.nearbyFilter.chipView.choiceChipExists.isChecked(), binding.nearbyFilter.chipView.choiceChipWlm.isChecked()); - } else { - binding.nearbyFilter.chipView.choiceChipExists.setChecked(!isChecked); - } - }); + binding.nearbyFilter.chipView.choiceChipExists.setOnCheckedChangeListener( + (buttonView, isChecked) -> { + if (NearbyController.currentLocation != null) { + binding.nearbyFilterList.checkboxTriStates.setState(CheckBoxTriStates.CHECKED); + NearbyFilterState.setExistsSelected(isChecked); + presenter.filterByMarkerType( + nearbyFilterSearchRecyclerViewAdapter.selectedLabels, + binding.nearbyFilterList.checkboxTriStates.getState(), true, true); + updatePlaceList(binding.nearbyFilter.chipView.choiceChipNeedsPhoto.isChecked(), + binding.nearbyFilter.chipView.choiceChipExists.isChecked(), + binding.nearbyFilter.chipView.choiceChipWlm.isChecked()); + } else { + binding.nearbyFilter.chipView.choiceChipExists.setChecked(!isChecked); + } + }); - binding.nearbyFilter.chipView.choiceChipWlm.setOnCheckedChangeListener((buttonView, isChecked) -> { - if (NearbyController.currentLocation != null) { - binding.nearbyFilterList.checkboxTriStates.setState(CheckBoxTriStates.CHECKED); - NearbyFilterState.setWlmSelected(isChecked); - presenter.filterByMarkerType(nearbyFilterSearchRecyclerViewAdapter.selectedLabels, - binding.nearbyFilterList.checkboxTriStates.getState(), true, true); - updatePlaceList( binding.nearbyFilter.chipView.choiceChipNeedsPhoto.isChecked(), - binding.nearbyFilter.chipView.choiceChipExists.isChecked(), binding.nearbyFilter.chipView.choiceChipWlm.isChecked()); - } else { - binding.nearbyFilter.chipView.choiceChipWlm.setChecked(!isChecked); - } - }); + binding.nearbyFilter.chipView.choiceChipWlm.setOnCheckedChangeListener( + (buttonView, isChecked) -> { + if (NearbyController.currentLocation != null) { + binding.nearbyFilterList.checkboxTriStates.setState(CheckBoxTriStates.CHECKED); + NearbyFilterState.setWlmSelected(isChecked); + presenter.filterByMarkerType( + nearbyFilterSearchRecyclerViewAdapter.selectedLabels, + binding.nearbyFilterList.checkboxTriStates.getState(), true, true); + updatePlaceList(binding.nearbyFilter.chipView.choiceChipNeedsPhoto.isChecked(), + binding.nearbyFilter.chipView.choiceChipExists.isChecked(), + binding.nearbyFilter.chipView.choiceChipWlm.isChecked()); + } else { + binding.nearbyFilter.chipView.choiceChipWlm.setChecked(!isChecked); + } + }); } /** @@ -838,7 +880,8 @@ public class NearbyParentFragment extends CommonsDaggerSupportFragment } adapter.setItems(updatedPlaces); - binding.bottomSheetNearby.noResultsMessage.setVisibility(updatedPlaces.isEmpty() ? View.VISIBLE : View.GONE); + binding.bottomSheetNearby.noResultsMessage.setVisibility( + updatedPlaces.isEmpty() ? View.VISIBLE : View.GONE); } /** @@ -867,8 +910,9 @@ public class NearbyParentFragment extends CommonsDaggerSupportFragment } }); - binding.bottomSheetNearby.bottomSheet.getLayoutParams().height = getActivity().getWindowManager() - .getDefaultDisplay().getHeight() / 16 * 9; + binding.bottomSheetNearby.bottomSheet.getLayoutParams().height = + getActivity().getWindowManager() + .getDefaultDisplay().getHeight() / 16 * 9; bottomSheetListBehavior = BottomSheetBehavior.from(binding.bottomSheetNearby.bottomSheet); bottomSheetListBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED); bottomSheetListBehavior.setBottomSheetCallback(new BottomSheetBehavior @@ -897,26 +941,13 @@ public class NearbyParentFragment extends CommonsDaggerSupportFragment rotate_backward = AnimationUtils.loadAnimation(getActivity(), R.anim.rotate_backward); } - /** - * Fits buttons according to our layout - */ - private void decideButtonVisibilities() { - // Remove button text if they exceed 1 line or if internal layout has not been built - // Only need to check for directions button because it is the longest - if ( binding.bottomSheetDetails.directionsButtonText.getLineCount() > 1 || binding.bottomSheetDetails.directionsButtonText.getLineCount() == 0) { - binding.bottomSheetDetails.wikipediaButtonText.setVisibility(View.GONE); - binding.bottomSheetDetails.wikidataButtonText.setVisibility(View.GONE); - binding.bottomSheetDetails.commonsButtonText.setVisibility(View.GONE); - binding.bottomSheetDetails.directionsButtonText.setVisibility(View.GONE); - } - } - /** * */ private void addActionToTitle() { binding.bottomSheetDetails.title.setOnLongClickListener(view -> { - Utils.copy("place", binding.bottomSheetDetails.title.getText().toString(), getContext()); + Utils.copy("place", binding.bottomSheetDetails.title.getText().toString(), + getContext()); Toast.makeText(getContext(), R.string.text_copy, Toast.LENGTH_SHORT).show(); return true; }); @@ -963,7 +994,8 @@ public class NearbyParentFragment extends CommonsDaggerSupportFragment public void updateListFragment(final List placeList) { places = placeList; adapter.setItems(placeList); - binding.bottomSheetNearby.noResultsMessage.setVisibility(placeList.isEmpty() ? View.VISIBLE : View.GONE); + binding.bottomSheetNearby.noResultsMessage.setVisibility( + placeList.isEmpty() ? View.VISIBLE : View.GONE); } @Override @@ -1006,7 +1038,8 @@ public class NearbyParentFragment extends CommonsDaggerSupportFragment @Override public fr.free.nrw.commons.location.LatLng getMapFocus() { fr.free.nrw.commons.location.LatLng mapFocusedLatLng = new fr.free.nrw.commons.location.LatLng( - binding.map.getMapCenter().getLatitude(), binding.map.getMapCenter().getLongitude(), 100); + binding.map.getMapCenter().getLatitude(), binding.map.getMapCenter().getLongitude(), + 100); return mapFocusedLatLng; } @@ -1077,8 +1110,10 @@ public class NearbyParentFragment extends CommonsDaggerSupportFragment @Override public void populatePlaces(final fr.free.nrw.commons.location.LatLng currentLatLng) { - IGeoPoint screenTopRight = binding.map.getProjection().fromPixels(binding.map.getWidth(), 0); - IGeoPoint screenBottomLeft = binding.map.getProjection().fromPixels(0, binding.map.getHeight()); + IGeoPoint screenTopRight = binding.map.getProjection() + .fromPixels(binding.map.getWidth(), 0); + IGeoPoint screenBottomLeft = binding.map.getProjection() + .fromPixels(0, binding.map.getHeight()); fr.free.nrw.commons.location.LatLng screenTopRightLatLng = new fr.free.nrw.commons.location.LatLng( screenBottomLeft.getLatitude(), screenBottomLeft.getLongitude(), 0); fr.free.nrw.commons.location.LatLng screenBottomLeftLatLng = new fr.free.nrw.commons.location.LatLng( @@ -1135,8 +1170,10 @@ public class NearbyParentFragment extends CommonsDaggerSupportFragment populatePlaces(currentLatLng); return; } - IGeoPoint screenTopRight = binding.map.getProjection().fromPixels(binding.map.getWidth(), 0); - IGeoPoint screenBottomLeft = binding.map.getProjection().fromPixels(0, binding.map.getHeight()); + IGeoPoint screenTopRight = binding.map.getProjection() + .fromPixels(binding.map.getWidth(), 0); + IGeoPoint screenBottomLeft = binding.map.getProjection() + .fromPixels(0, binding.map.getHeight()); fr.free.nrw.commons.location.LatLng screenTopRightLatLng = new fr.free.nrw.commons.location.LatLng( screenBottomLeft.getLatitude(), screenBottomLeft.getLongitude(), 0); fr.free.nrw.commons.location.LatLng screenBottomLeftLatLng = new fr.free.nrw.commons.location.LatLng( @@ -1250,7 +1287,8 @@ public class NearbyParentFragment extends CommonsDaggerSupportFragment (isGPX) ? getString(R.string.do_you_want_to_open_gpx_file) : getString(R.string.do_you_want_to_open_kml_file); Runnable runnable = () -> openFile(context, fileName, isGPX); - DialogUtil.showAlertDialog(getActivity(), title, message, runnable,() -> {}); + DialogUtil.showAlertDialog(getActivity(), title, message, runnable, () -> { + }); } private void openFile(Context context, String fileName, Boolean isGPX) { @@ -1418,9 +1456,9 @@ public class NearbyParentFragment extends CommonsDaggerSupportFragment @Override public void setProgressBarVisibility(final boolean isVisible) { if (isVisible) { - binding.mapProgressBar.setVisibility(View.VISIBLE); + binding.mapProgressBar.setVisibility(View.VISIBLE); } else { - binding.mapProgressBar.setVisibility(View.GONE); + binding.mapProgressBar.setVisibility(View.GONE); } } @@ -1444,7 +1482,8 @@ public class NearbyParentFragment extends CommonsDaggerSupportFragment } private void showFABs() { - NearbyFABUtils.addAnchorToBigFABs(binding.fabPlus, binding.bottomSheetDetails.getRoot().getId()); + NearbyFABUtils.addAnchorToBigFABs(binding.fabPlus, + binding.bottomSheetDetails.getRoot().getId()); binding.fabPlus.show(); NearbyFABUtils.addAnchorToSmallFABs(binding.fabGallery, getView().findViewById(R.id.empty_view).getId()); @@ -1576,17 +1615,17 @@ public class NearbyParentFragment extends CommonsDaggerSupportFragment @Override public void setFABRecenterAction(final View.OnClickListener onClickListener) { - binding.fabRecenter.setOnClickListener(onClickListener); + binding.fabRecenter.setOnClickListener(onClickListener); } @Override public void disableFABRecenter() { - binding.fabRecenter.setEnabled(false); + binding.fabRecenter.setEnabled(false); } @Override public void enableFABRecenter() { - binding.fabRecenter.setEnabled(true); + binding.fabRecenter.setEnabled(true); } /** @@ -1865,7 +1904,8 @@ public class NearbyParentFragment extends CommonsDaggerSupportFragment } /** - * Extracts text between the first occurrence of '(' and its corresponding ')' in the input string. + * Extracts text between the first occurrence of '(' and its corresponding ')' in the input + * string. * * @param input The input string from which to extract text between parentheses. * @return The text between parentheses if found, or {@code null} if no parentheses are found. @@ -1890,14 +1930,17 @@ public class NearbyParentFragment extends CommonsDaggerSupportFragment return input.contains("(") || input.contains(")"); } - private void removeMarker(Place place){ + private void removeMarker(Place place) { List overlays = binding.map.getOverlays(); - for (int i = 0; i < overlays.size();i++){ - if (overlays.get(i) instanceof ItemizedOverlayWithFocus){ - ItemizedOverlayWithFocus item = (ItemizedOverlayWithFocus)overlays.get(i); + for (int i = 0; i < overlays.size(); i++) { + if (overlays.get(i) instanceof ItemizedOverlayWithFocus) { + ItemizedOverlayWithFocus item = (ItemizedOverlayWithFocus) overlays.get(i); OverlayItem overlayItem = item.getItem(0); - fr.free.nrw.commons.location.LatLng diffLatLang = new fr.free.nrw.commons.location.LatLng(overlayItem.getPoint().getLatitude(),overlayItem.getPoint().getLongitude(),100); - if (place.location.getLatitude() == overlayItem.getPoint().getLatitude() && place.location.getLongitude() == overlayItem.getPoint().getLongitude()){ + fr.free.nrw.commons.location.LatLng diffLatLang = new fr.free.nrw.commons.location.LatLng( + overlayItem.getPoint().getLatitude(), overlayItem.getPoint().getLongitude(), + 100); + if (place.location.getLatitude() == overlayItem.getPoint().getLatitude() + && place.location.getLongitude() == overlayItem.getPoint().getLongitude()) { binding.map.getOverlays().remove(i); binding.map.invalidate(); break; @@ -2020,50 +2063,33 @@ public class NearbyParentFragment extends CommonsDaggerSupportFragment */ private void passInfoToSheet(final Place place) { selectedPlace = place; + dataList = new ArrayList<>(); + // TODO: Decide button text for fitting in the screen + dataList.add(new BottomSheetItem(R.drawable.ic_round_star_border_24px, "")); + dataList.add(new BottomSheetItem(R.drawable.ic_directions_black_24dp, + getResources().getString(R.string.nearby_directions))); + if (place.hasWikidataLink()) { + dataList.add(new BottomSheetItem(R.drawable.ic_wikidata_logo_24dp, + getResources().getString(R.string.nearby_wikidata))); + } + dataList.add(new BottomSheetItem(R.drawable.ic_feedback_black_24dp, + getResources().getString(R.string.nearby_wikitalk))); + if (place.hasWikipediaLink()) { + dataList.add(new BottomSheetItem(R.drawable.ic_wikipedia_logo_24dp, + getResources().getString(R.string.nearby_wikipedia))); + } + if (selectedPlace.hasCommonsLink()) { + dataList.add(new BottomSheetItem(R.drawable.ic_commons_icon_vector, + getResources().getString(R.string.nearby_commons))); + } + int spanCount = getSpanCount(); + gridLayoutManager = new GridLayoutManager(this.getContext(), spanCount); + binding.bottomSheetDetails.bottomSheetRecyclerView.setLayoutManager(gridLayoutManager); + bottomSheetAdapter = new BottomSheetAdapter(this.getContext(), dataList); + bottomSheetAdapter.setClickListener(this); + binding.bottomSheetDetails.bottomSheetRecyclerView.setAdapter(bottomSheetAdapter); updateBookmarkButtonImage(selectedPlace); - binding.bottomSheetDetails.bookmarkButton.setOnClickListener(view -> { - final boolean isBookmarked = bookmarkLocationDao.updateBookmarkLocation(selectedPlace); - updateBookmarkButtonImage(selectedPlace); - updateMarker(isBookmarked, selectedPlace, locationManager.getLastLocation()); - binding.map.invalidate(); - }); - binding.bottomSheetDetails.bookmarkButton.setOnLongClickListener(view -> { - Toast.makeText(getContext(), R.string.menu_bookmark, Toast.LENGTH_SHORT).show(); - return true; - }); - - binding.bottomSheetDetails.wikipediaButton.setVisibility(place.hasWikipediaLink() ? View.VISIBLE : View.GONE); - binding.bottomSheetDetails.wikipediaButton.setOnClickListener( - view -> Utils.handleWebUrl(getContext(), selectedPlace.siteLinks.getWikipediaLink())); - binding.bottomSheetDetails.wikipediaButton.setOnLongClickListener(view -> { - Toast.makeText(getContext(), R.string.nearby_wikipedia, Toast.LENGTH_SHORT).show(); - return true; - }); - - binding.bottomSheetDetails.wikidataButton.setVisibility(place.hasWikidataLink() ? View.VISIBLE : View.GONE); - binding.bottomSheetDetails.wikidataButton.setOnClickListener( - view -> Utils.handleWebUrl(getContext(), selectedPlace.siteLinks.getWikidataLink())); - binding.bottomSheetDetails.wikidataButton.setOnLongClickListener(view -> { - Toast.makeText(getContext(), R.string.nearby_wikidata, Toast.LENGTH_SHORT).show(); - return true; - }); - - binding.bottomSheetDetails.directionsButton.setOnClickListener(view -> Utils.handleGeoCoordinates(getActivity(), - selectedPlace.getLocation())); - binding.bottomSheetDetails.directionsButton.setOnLongClickListener(view -> { - Toast.makeText(getContext(), R.string.nearby_directions, Toast.LENGTH_SHORT).show(); - return true; - }); - - binding.bottomSheetDetails.commonsButton.setVisibility(selectedPlace.hasCommonsLink() ? View.VISIBLE : View.GONE); - binding.bottomSheetDetails.commonsButton.setOnClickListener( - view -> Utils.handleWebUrl(getContext(), selectedPlace.siteLinks.getCommonsLink())); - binding.bottomSheetDetails.commonsButton.setOnLongClickListener(view -> { - Toast.makeText(getContext(), R.string.nearby_commons, Toast.LENGTH_SHORT).show(); - return true; - }); - binding.bottomSheetDetails.icon.setImageResource(selectedPlace.getLabel().getIcon()); binding.bottomSheetDetails.title.setText(selectedPlace.name); @@ -2074,7 +2100,7 @@ public class NearbyParentFragment extends CommonsDaggerSupportFragment descriptionText = (descriptionText.equals(selectedPlace.getLongDescription()) ? descriptionText : descriptionText.replaceFirst(".$", "")); // Set the short description after we remove place name from long description - binding.bottomSheetDetails.description.setText(descriptionText); + binding.bottomSheetDetails.description.setText(descriptionText); binding.fabCamera.setOnClickListener(view -> { if (binding.fabCamera.isShown()) { @@ -2088,7 +2114,8 @@ public class NearbyParentFragment extends CommonsDaggerSupportFragment if (binding.fabGallery.isShown()) { Timber.d("Gallery button tapped. Place: %s", selectedPlace.toString()); storeSharedPrefs(selectedPlace); - controller.initiateGalleryPick(getActivity(), binding.nearbyFilter.chipView.choiceChipWlm.isChecked()); + controller.initiateGalleryPick(getActivity(), + binding.nearbyFilter.chipView.choiceChipWlm.isChecked()); } }); @@ -2115,9 +2142,7 @@ public class NearbyParentFragment extends CommonsDaggerSupportFragment } else { bookmarkIcon = R.drawable.ic_round_star_border_24px; } - if ( binding.bottomSheetDetails.bookmarkButtonImage != null) { - binding.bottomSheetDetails.bookmarkButtonImage.setImageResource(bookmarkIcon); - } + bottomSheetAdapter.updateBookmarkIcon(bookmarkIcon); } @Override @@ -2295,6 +2320,83 @@ public class NearbyParentFragment extends CommonsDaggerSupportFragment binding.map.getController().animateTo(geoPoint); } + @Override + public void onBottomSheetItemClick(@Nullable View view, int position) { + BottomSheetItem item = dataList.get(position); + boolean isBookmarked = bookmarkLocationDao.findBookmarkLocation(selectedPlace); + switch (item.getImageResourceId()) { + case R.drawable.ic_round_star_border_24px: + bookmarkLocationDao.updateBookmarkLocation(selectedPlace); + updateBookmarkButtonImage(selectedPlace); + isBookmarked = bookmarkLocationDao.findBookmarkLocation(selectedPlace); + updateMarker(isBookmarked, selectedPlace, locationManager.getLastLocation()); + binding.map.invalidate(); + break; + case R.drawable.ic_round_star_filled_24px: + bookmarkLocationDao.updateBookmarkLocation(selectedPlace); + updateBookmarkButtonImage(selectedPlace); + isBookmarked = bookmarkLocationDao.findBookmarkLocation(selectedPlace); + updateMarker(isBookmarked, selectedPlace, locationManager.getLastLocation()); + binding.map.invalidate(); + break; + case R.drawable.ic_directions_black_24dp: + Utils.handleGeoCoordinates(this.getContext(), selectedPlace.getLocation()); + break; + case R.drawable.ic_wikidata_logo_24dp: + Utils.handleWebUrl(this.getContext(), selectedPlace.siteLinks.getWikidataLink()); + break; + case R.drawable.ic_feedback_black_24dp: + Intent intent = new Intent(this.getContext(), WikidataFeedback.class); + intent.putExtra("lat", selectedPlace.location.getLatitude()); + intent.putExtra("lng", selectedPlace.location.getLongitude()); + intent.putExtra("place", selectedPlace.name); + intent.putExtra("qid", selectedPlace.getWikiDataEntityId()); + startActivity(intent); + break; + case R.drawable.ic_wikipedia_logo_24dp: + Utils.handleWebUrl(this.getContext(), selectedPlace.siteLinks.getWikipediaLink()); + break; + case R.drawable.ic_commons_icon_vector: + Utils.handleWebUrl(this.getContext(), selectedPlace.siteLinks.getCommonsLink()); + break; + default: + break; + } + } + + @Override + public void onBottomSheetItemLongClick(@Nullable View view, int position) { + BottomSheetItem item = dataList.get(position); + String message; + switch (item.getImageResourceId()) { + case R.drawable.ic_round_star_border_24px: + message = getString(R.string.menu_bookmark); + break; + case R.drawable.ic_round_star_filled_24px: + message = getString(R.string.menu_bookmark); + break; + case R.drawable.ic_directions_black_24dp: + message = getString(R.string.nearby_directions); + break; + case R.drawable.ic_wikidata_logo_24dp: + message = getString(R.string.nearby_wikidata); + break; + case R.drawable.ic_feedback_black_24dp: + message = getString(R.string.nearby_wikitalk); + break; + case R.drawable.ic_wikipedia_logo_24dp: + message = getString(R.string.nearby_wikipedia); + break; + case R.drawable.ic_commons_icon_vector: + message = getString(R.string.nearby_commons); + break; + default: + message = "Long click"; + break; + } + Toast.makeText(this.getContext(), message, Toast.LENGTH_SHORT).show(); + } + public interface NearbyParentFragmentInstanceReadyCallback { void onReady(); @@ -2312,9 +2414,12 @@ public class NearbyParentFragment extends CommonsDaggerSupportFragment rlBottomSheetLayoutParams.height = getActivity().getWindowManager().getDefaultDisplay().getHeight() / 16 * 9; binding.bottomSheetNearby.bottomSheet.setLayoutParams(rlBottomSheetLayoutParams); + int spanCount = getSpanCount(); + if (gridLayoutManager != null) { + gridLayoutManager.setSpanCount(spanCount); + } } - public void onLearnMoreClicked() { Intent intent = new Intent(Intent.ACTION_VIEW); intent.setData(Uri.parse(WLM_URL)); @@ -2322,11 +2427,12 @@ public class NearbyParentFragment extends CommonsDaggerSupportFragment } public void onToggleChipsClicked() { - if ( binding.nearbyFilter.chipView.getRoot().getVisibility() == View.VISIBLE) { - binding.nearbyFilter.chipView.getRoot().setVisibility(View.GONE); + if (binding.nearbyFilter.chipView.getRoot().getVisibility() == View.VISIBLE) { + binding.nearbyFilter.chipView.getRoot().setVisibility(View.GONE); } else { - binding.nearbyFilter.chipView.getRoot().setVisibility(View.VISIBLE); + binding.nearbyFilter.chipView.getRoot().setVisibility(View.VISIBLE); } - binding.nearbyFilter.ivToggleChips.setRotation(binding.nearbyFilter.ivToggleChips.getRotation() + 180); + binding.nearbyFilter.ivToggleChips.setRotation( + binding.nearbyFilter.ivToggleChips.getRotation() + 180); } } diff --git a/app/src/main/java/fr/free/nrw/commons/nearby/model/BottomSheetItem.kt b/app/src/main/java/fr/free/nrw/commons/nearby/model/BottomSheetItem.kt new file mode 100644 index 000000000..bf30be6ec --- /dev/null +++ b/app/src/main/java/fr/free/nrw/commons/nearby/model/BottomSheetItem.kt @@ -0,0 +1,3 @@ +package fr.free.nrw.commons.nearby.model + +class BottomSheetItem(var imageResourceId: Int, val title: String) diff --git a/app/src/main/res/layout/activity_wikidata_feedback.xml b/app/src/main/res/layout/activity_wikidata_feedback.xml new file mode 100644 index 000000000..5f6647efe --- /dev/null +++ b/app/src/main/res/layout/activity_wikidata_feedback.xml @@ -0,0 +1,111 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/bottom_sheet_details.xml b/app/src/main/res/layout/bottom_sheet_details.xml index a8889aafa..8c354daae 100644 --- a/app/src/main/res/layout/bottom_sheet_details.xml +++ b/app/src/main/res/layout/bottom_sheet_details.xml @@ -53,169 +53,21 @@ android:layout_width="match_parent" android:layout_height="@dimen/tiny_height" android:layout_marginTop="@dimen/small_height" - android:layout_marginBottom="@dimen/activity_margin_horizontal" - android:background="@android:color/darker_gray"/> - + android:layout_marginBottom="@dimen/activity_margin_horizontal" + android:background="@android:color/darker_gray" /> - - - - + - - - - - - - - - - - - - - - - - - - + android:layout_width="match_parent" + android:layout_height="@dimen/tiny_height" + android:layout_marginTop="@dimen/small_height" + android:layout_marginBottom="@dimen/activity_margin_horizontal" + android:background="@android:color/darker_gray" /> + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index fb73dd694..21741f6dc 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -818,5 +818,13 @@ Upload your first media by tapping on the add button. Please remember that all images in a multi-upload get the same categories and depictions. If the images do not share depictions and categories, please perform several separate uploads. Note about multi-uploads + Report a problem about this item to Wikidata + Please enter some comments + Talk + "Write something about the " + " item. It will be publicly visible." + \'%1$s\' does not exist anymore, no picture can ever be taken of it. + \'%1$s\' is at a different place (please specify the correct place below, if possible tell us the correct latitude/longitude). + Other problem or information (please explain below). Your feedback gets posted to the following wiki page: Commons:Mobile app/Feedback ]]> From 018a924c533f2371e7b794dcdf14dd9981ae13dc Mon Sep 17 00:00:00 2001 From: "translatewiki.net" Date: Mon, 8 Jul 2024 14:02:00 +0200 Subject: [PATCH 002/464] Localisation updates from https://translatewiki.net. --- app/src/main/res/values-az/strings.xml | 1 + app/src/main/res/values-da/strings.xml | 48 +++++++++++++++----------- app/src/main/res/values-de/strings.xml | 2 ++ app/src/main/res/values-iw/strings.xml | 8 ++++- app/src/main/res/values-mk/strings.xml | 8 +++++ app/src/main/res/values-qq/strings.xml | 2 ++ app/src/main/res/values-sr/strings.xml | 2 ++ 7 files changed, 50 insertions(+), 21 deletions(-) diff --git a/app/src/main/res/values-az/strings.xml b/app/src/main/res/values-az/strings.xml index 866bf63d0..d5e83a2c7 100644 --- a/app/src/main/res/values-az/strings.xml +++ b/app/src/main/res/values-az/strings.xml @@ -88,6 +88,7 @@ Müzakirə Müəllif Lisenziya + Vikidata Vikipediya Təşəkkür uğurla göndərildi Təşəkkür göndərilə bilmədi %1$s diff --git a/app/src/main/res/values-da/strings.xml b/app/src/main/res/values-da/strings.xml index 3041fc8fa..a50318b2d 100644 --- a/app/src/main/res/values-da/strings.xml +++ b/app/src/main/res/values-da/strings.xml @@ -64,7 +64,7 @@ Udforsk Udseende Generelt - Tilbagemelding + Feedback Privatliv Commons @@ -90,11 +90,11 @@ Godkendelse mislykkedes. Log venligst ind igen. Upload påbegyndt! Upload i kø (begrænset forbindelsestilstand aktiveret) - %1$s overført! + %1$s uploadet! Tryk for at få vist dit upload Uploader fil: %s - %1$s overføres - Afslutter uploadning af %1$s + %1$s uploades + Afslutter upload af %1$s Upload af %1$s mislykkedes Upload af %1$s sat på pause Tryk for at se @@ -103,8 +103,8 @@ I kø Mislykkedes %1$d%% færdig - Overfører - Fra galleriet + Uploader + Fra galleri Tag billede I nærheden Mine uploads @@ -147,7 +147,7 @@ Privatlivspolitik Tak til Om - Send tilbagemelding (med e-mail) + Send feedback (via e-mail) Ingen e-mail-klient installeret Nyligt anvendte kategorier Venter på den første synkronisering… @@ -203,7 +203,7 @@ Anmoder om placeringstilladelse Registrer placering for billeder, der tages i appen Aktiver dette for at registrere placering for billeder i appen, i tilfælde af at enhedens kamera ikke gør det - O.k. + Ok Advarsel Dublet filnavn fundet Overfør @@ -214,7 +214,7 @@ Afbildning Beskrivelse Diskussion - Ophavsmand + Forfatter Upload-dato Licens Koordinater @@ -241,7 +241,7 @@ I nærheden Om Indstillinger - Tilbagemelding + Feedback Feedback via GitHub Log af Vejledning @@ -381,9 +381,9 @@ Antallet af billeder, du har uploadet til Commons, som blev brugt i Wikimedia-artikler Der opstod en fejl! Commons-notifikationer - Brug brugerdefineret navn for ophavsmand - Brug et brugerdefineret navn for ophavsmand i stedet for dit brugernavn, når du uploader billeder - Brugerdefineret ophavsmandsnavn + Brug brugerdefineret forfatternavn + Brug et brugerdefineret forfatternavn i stedet for dit brugernavn, når du uploader billeder + Brugerdefineret forfatternavn Bidrag I nærheden Notifikationer @@ -413,7 +413,7 @@ Beklager dette billede er ikke interessant for en encyklopædi Uploadet af mig selv på %1$s , brugt i %2$d artikel(er). Velkommen til Commons!\n\nUpload dit første medie ved at trykke på Tilføj-knappen. - Ingen valgte kategorier + Ingen kategorier valgt Billeder uden kategorier er sjældent brugbare. Er du sikker på, at du vil fortsætte uden at vælge kategorier? Ingen afbildninger valgt Billeder med afbildninger er lettere at finde og mere tilbøjelige til at blive brugt. Er du sikker på, at du vil fortsætte uden at vælge afbildninger? @@ -497,7 +497,7 @@ Download mislykkedes!!. Vi kan ikke downloade filen uden tilladelse til ekstern lagring. Administrer EXIF-tags Vælg hvilke EXIF-tags, der skal beholdes i uploads - Ophavsmand + Forfatter Ophavsret Placering Kameramodel @@ -609,7 +609,7 @@ 2. Hvis du klikker på Bekræft, åbnes Wikipedia-artiklen 3. Find en passende sektion i artiklen til dit billede 4. Klik på Rediger-ikonet (det som ligner en blyant) for den sektion. - 5. Indsæt wikiteksten på det rigtige sted. + 5. Indsæt wikiteksten på det rette sted. 6. Rediger wikiteksten for passende placering, hvis det er nødvendigt. For mere information, se <a href=\"https://en.wikipedia.org/wiki/Wikipedia:Manual_of_Style/Images#How_to_place_an_image\">her</a>. 7. Udgiv artiklen Kopier wikikode til udklipsholder @@ -660,7 +660,7 @@ Appens brugergrænsefladesprog Fjerner en billedtekst og beskrivelse Læs mere - For alle sprog + På alle sprog Vælg en placering Panorer og zoom for at justere Vælg placering @@ -718,7 +718,7 @@ Enhedsmodel Enhedsnavn Netværkstype - Tak for tilbagemeldingen + Tak for din feedback Fejl under afsendelse af feedback Hvad er din feedback? Din feedback @@ -758,8 +758,8 @@ Fjern placering-advarsel Placering gør billeder mere nyttige og nemmere at finde. Ønsker du virkelig at fjerne placering fra dette billede? Placering fjernet! - Tak ophavsmanden - Fejl ved afsendelse af tak til ophavsmand. + Tak forfatteren + Fejl ved afsendelse af tak til forfatter. Login udløb. Log venligst ind igen. Der er ingen tilgængelig applikation til at åbne GPX-filer Fil gemt @@ -775,5 +775,13 @@ Husk, at alle billeder i et multi-upload får de samme kategorier og afbildninger. Hvis billederne ikke deler afbildninger og kategorier, skal du udføre flere separate uploads. Bemærkning om at uploade flere billeder + Rapporter et problem med dette element til Wikidata + Skriv nogle kommentarer + Tal + \"Skriv noget om\" + \" elementet. Det vil være offentligt synligt.\" + \'%1$s\' eksisterer ikke længere, der kan aldrig tages et billede af det. + \'%1$s\' ligger et andet sted (angiv venligst det korrekte sted nedenfor, fortæl os om muligt den korrekte breddegrad/længdegrad). + 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> diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index da7c9c317..3c74f41a9 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -11,6 +11,7 @@ * FF11 * Ferdinand0101 * Icke +* Ignatgg * Inkowik * Justman10000 * Kghbln @@ -800,4 +801,5 @@ 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 + Ihr Feedback wird auf der folgenden Wiki-Seite veröffentlicht: <a href=\"https://commons.wikimedia.org/wiki/Commons:Mobile_app/Feedback\">Commons:Mobile App/Feedback</a> diff --git a/app/src/main/res/values-iw/strings.xml b/app/src/main/res/values-iw/strings.xml index 70288b1cc..257188b11 100644 --- a/app/src/main/res/values-iw/strings.xml +++ b/app/src/main/res/values-iw/strings.xml @@ -707,7 +707,7 @@ חזרה ברוך בואך לבוחר התמונות המותאמות הבורר מציג לך אילו תמונות כבר העלית לוויקישיתוף. - בניגוד לתמונה מימין, על התמונה שמשמאל יש את הלוגו של ויקישיתוף שמעיד שהיא כבר הועלתה. יש לגעת ולהחזיר לקבלת תצוגה מקדימה של התמונה. + בניגוד לתמונה מימין, על התמונה שמשמאל מופיע הסמל של ויקישיתוף שמציין שהיא כבר הועלתה. יש לגעת ולהחזיק לקבלת תצוגה מקדימה של התמונה. מגניב התמונה הזאת כבר הועלתה לוויקישיתוף. מסיבות טכניות, היישום לא יכול להעלות יותר מ־%1$d תמונות בבת אחת בצורה מהימנה. חרגת ממגבלת ההעלאה על סך %1$d ב־%2$d. @@ -807,5 +807,11 @@ נא לזכור שכשמועלות כמה תמונות, כולן מקבלות את אותן הקטגוריות והמוצגים. אם התמונות אינן חולקות מוצגים וקטגוריות, נא לעשות כמה העלאות נפרדות. הערה על העלאות מרובות + דווח על בעיה בפריט הזה לוויקינתונים + נא להזין הערות כלשהן + שיחה + \"נא לכתוב משהו על הפריט \" + \" . זה יהיה גלוי לציבור.\" + \"%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-mk/strings.xml b/app/src/main/res/values-mk/strings.xml index 28034afee..1440c6a90 100644 --- a/app/src/main/res/values-mk/strings.xml +++ b/app/src/main/res/values-mk/strings.xml @@ -771,5 +771,13 @@ Запомнете дека сите слики што ги подигате наеднаш се очекуваат да ја прикажуваат истата работа и ги добиваат истите категории и описи. Ако сликите прикажуваат различни нешта и треба да имаат различни категории, извршете неколку одделни подигања. Напомена за подигање повеќе слики наеднаш + Пријавете проблем со овој предмет на Википодатоци + Внесете коментар + Разговор + „Напишете нешто за предметот “ + “. Ова ќе биде јавно видливо.“ + „%1$s“ повеќе не постои, нема да може да се фотографира. + „%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-qq/strings.xml b/app/src/main/res/values-qq/strings.xml index e06969dc2..2753ee09b 100644 --- a/app/src/main/res/values-qq/strings.xml +++ b/app/src/main/res/values-qq/strings.xml @@ -204,4 +204,6 @@ {{Identical|Detail}} \"Set as avatar\" should be translated the same as {{msg-wm|Commons-android-strings-menu set avatar}}. {{Doc-commons-app-depicts}} + Shown before {{msg-wm|Commons-android-strings-item it will be publicly visible}}. Between them, the item name is shown. + Shown after {{msg-wm|Commons-android-strings-write something about the}}. Between them, the item name is shown. diff --git a/app/src/main/res/values-sr/strings.xml b/app/src/main/res/values-sr/strings.xml index 4313d05fd..f05487488 100644 --- a/app/src/main/res/values-sr/strings.xml +++ b/app/src/main/res/values-sr/strings.xml @@ -731,4 +731,6 @@ %d слика је одабрана %d слика је одабрано + Разговор + „%1$s” не постоји више, и није га могуће више сликати. From 5bcbaa1bebf7cb3f6ad355e5ca0560ef96b2c647 Mon Sep 17 00:00:00 2001 From: "Amir E. Aharoni" Date: Mon, 8 Jul 2024 10:16:26 -0400 Subject: [PATCH 003/464] Improve the messages about being in a different place (#5764) Remove parentheses and comma splice, and replace them with more straightforward grammar. --- app/src/main/res/values/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 21741f6dc..82be02da2 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -824,7 +824,7 @@ Upload your first media by tapping on the add button. "Write something about the " " item. It will be publicly visible." \'%1$s\' does not exist anymore, no picture can ever be taken of it. - \'%1$s\' is at a different place (please specify the correct place below, if possible tell us the correct latitude/longitude). + \'%1$s\' is at a different place. Please specify the correct place below, and if possible, write the correct latitude and longitude. Other problem or information (please explain below). Your feedback gets posted to the following wiki page: Commons:Mobile app/Feedback ]]> From 4d8a7dc138d3f8c26becfa231b6b8a53e08b087b Mon Sep 17 00:00:00 2001 From: "translatewiki.net" Date: Thu, 11 Jul 2024 14:02:14 +0200 Subject: [PATCH 004/464] Localisation updates from https://translatewiki.net. --- app/src/main/res/values-da/strings.xml | 10 +++++----- app/src/main/res/values-ia/strings.xml | 8 ++++++++ app/src/main/res/values-iw/strings.xml | 2 ++ app/src/main/res/values-lb/strings.xml | 1 + app/src/main/res/values-mk/strings.xml | 2 +- app/src/main/res/values-ne/strings.xml | 3 +++ app/src/main/res/values-nl/strings.xml | 8 ++++++++ app/src/main/res/values-pms/strings.xml | 8 ++++++++ app/src/main/res/values-ru/strings.xml | 4 ++++ app/src/main/res/values-se/strings.xml | 12 ++++++------ app/src/main/res/values-skr/strings.xml | 1 + app/src/main/res/values-sl/strings.xml | 1 + app/src/main/res/values-zh-rTW/strings.xml | 8 ++++++++ 13 files changed, 56 insertions(+), 12 deletions(-) diff --git a/app/src/main/res/values-da/strings.xml b/app/src/main/res/values-da/strings.xml index a50318b2d..be15a53dd 100644 --- a/app/src/main/res/values-da/strings.xml +++ b/app/src/main/res/values-da/strings.xml @@ -133,7 +133,7 @@ Der blev ikke fundet nogen Wikidata-elementer, der matcher %1$s %1$s har ingen underklasser %1$s har ingen forældreklasser - Tilføj kategorier for at gøre billederne mere synlig på Wikimedia Commons. Tast for at tilføje kategorier. + Tilføj kategorier for at gøre dine billeder mere synlig på Wikimedia Commons. Begynd at taste for at tilføje kategorier. Kategorier Indstillinger Opret konto @@ -142,7 +142,7 @@ Kategori Gennemsyn Om - Wikimedia Commons-programmet oprettet og udviklet af frivillige i Wikimediafællesskabet. Wikimedia Foundation er ikke involveret i oprettelse, udvikling eller vedligeholdelse af programmet. + Wikimedia Commons-appen oprettet og udviklet af frivillige i Wikimedia-fællesskabet. Wikimedia Foundation er ikke involveret i oprettelse, udvikling eller vedligeholdelse af appen. Opret en ny <a href=\"%1$s\">GitHub-sag</a> for fejlrapporter og forslag. Privatlivspolitik Tak til @@ -775,13 +775,13 @@ Husk, at alle billeder i et multi-upload får de samme kategorier og afbildninger. Hvis billederne ikke deler afbildninger og kategorier, skal du udføre flere separate uploads. Bemærkning om at uploade flere billeder - Rapporter et problem med dette element til Wikidata + Rapporter et problem omkring dette element til Wikidata Skriv nogle kommentarer Tal \"Skriv noget om\" \" elementet. Det vil være offentligt synligt.\" - \'%1$s\' eksisterer ikke længere, der kan aldrig tages et billede af det. - \'%1$s\' ligger et andet sted (angiv venligst det korrekte sted nedenfor, fortæl os om muligt den korrekte breddegrad/længdegrad). + \'%1$s\' eksisterer ikke længere, der vil aldrig kunne tages et billede af det. + \'%1$s\' ligger et andet sted. Angiv venligst det korrekte sted nedenfor, og skriv om muligt den korrekte bredde- og længdegrad. 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> diff --git a/app/src/main/res/values-ia/strings.xml b/app/src/main/res/values-ia/strings.xml index 18739c8c5..79f29007b 100644 --- a/app/src/main/res/values-ia/strings.xml +++ b/app/src/main/res/values-ia/strings.xml @@ -761,5 +761,13 @@ Nota ben que tote le imagines in un multi-incargamento habera le mesme categorias e representationes. Si le imagines non condivide representationes e categorias, per favor exeque plure incargamentos separate. Aviso sur le multi-incargamentos + Signalar a Wikidata un problema sur iste elemento + Per favor insere alcun commentos + Discussion + \"Scribe qualcosa sur le elemento \" + \". Illo 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, si possibile indica le latitude/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> diff --git a/app/src/main/res/values-iw/strings.xml b/app/src/main/res/values-iw/strings.xml index 257188b11..e5295e6b6 100644 --- a/app/src/main/res/values-iw/strings.xml +++ b/app/src/main/res/values-iw/strings.xml @@ -813,5 +813,7 @@ \"נא לכתוב משהו על הפריט \" \" . זה יהיה גלוי לציבור.\" \"%1$s\" כבר לא קיים, אי־אפשר לצלם אותו. + \"%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-lb/strings.xml b/app/src/main/res/values-lb/strings.xml index 2d00d414d..baca7c4ba 100644 --- a/app/src/main/res/values-lb/strings.xml +++ b/app/src/main/res/values-lb/strings.xml @@ -509,4 +509,5 @@ %d Bild ausgewielt %d Biller ausgewielt + \'%1$s\' gëtt et net méi, et kann keng Foto méi dovunner gemaach ginn. diff --git a/app/src/main/res/values-mk/strings.xml b/app/src/main/res/values-mk/strings.xml index 1440c6a90..9d6ba6d32 100644 --- a/app/src/main/res/values-mk/strings.xml +++ b/app/src/main/res/values-mk/strings.xml @@ -777,7 +777,7 @@ „Напишете нешто за предметот “ “. Ова ќе биде јавно видливо.“ „%1$s“ повеќе не постои, нема да може да се фотографира. - „%1$s“ се наоѓа на друго место (подолу укажете го сегашното место, ако е можно со географска ширина и должина). + „%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-ne/strings.xml b/app/src/main/res/values-ne/strings.xml index 1acf3d670..c386c4b57 100644 --- a/app/src/main/res/values-ne/strings.xml +++ b/app/src/main/res/values-ne/strings.xml @@ -268,6 +268,9 @@ हल्का पुस्तक चिनोहरू उपलब्धिहरू + क्रम: + क्रम + वार्षिक उर्ध्वभरण गर्ने निकटस्थ विवरण diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index 57fa519b2..6ea280497 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -792,5 +792,13 @@ Houd er rekening mee dat alle afbeeldingen in een multi-upload dezelfde categorieën krijgen en geacht worden hetzelfde weer te geven. Als deze gegevens per afbeelding moeten verschillen, voer dan meerdere afzonderlijke uploads uit. Opmerking over multi-uploads + Een probleem met dit item melden aan Wikidata + Voer enkele opmerkingen in + Overleg + \"Schrijf iets over het item \" + \". Het zal publiekelijk zichtbaar zijn.\" + ‘%1$s’ bestaat niet meer, er kan nooit een foto van gemaakt worden. + ‘%1$s’ bevindt zich ergens anders. Geef hieronder de juiste plaats aan en noteer, indien mogelijk, de juiste breedte- en lengtegraad. + Ander probleem of andere informatie (verklaar hieronder). Uw feedback wordt op de volgende wikipagina geplaatst: <a href=\"https://commons.wikimedia.org/wiki/Commons:Mobile_app/Feedback\">Commons:Mobile app/Feedback</a> diff --git a/app/src/main/res/values-pms/strings.xml b/app/src/main/res/values-pms/strings.xml index 96e21e87c..d1cdc80e0 100644 --- a/app/src/main/res/values-pms/strings.xml +++ b/app/src/main/res/values-pms/strings.xml @@ -767,5 +767,13 @@ Ch\'a ten-a da ment che tute le plance ant un cariament mùltipl a pijo j\'istesse categorìe e descrission. Si le plance a partagio nen descrission e categorìe, për piasì ch\'a fasa tanti cariament separà. Nòta an sij cariament mùltipl + Signalé un problema su cost element a Wikidata + Për piasì, ch\'a buta dij coment + Ciaciarade + «Scrive cheicòs a propòsit ëd » + « l\'element. A sarà visìbil da tuti.» + \'%1$s\' a esist pi nen, a peul pa esse fotografà. + \'%1$s\' a l\'é ant un pòst diferent. Për piasì, ch\'a spessìfica ël pòst giust sì-sota e, si possìbil, ch\'a scriva latitùdin e longitùdin giuste. + À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> diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index a36df69f7..396adb696 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -831,5 +831,9 @@ Помните, что все изображения при мультизагрузке получают одинаковые категории и описания. Если изображения не имеют одинаковых описаний и категорий, выполните несколько отдельных загрузок. Замечание о мультизагрузках + Сообщить о проблеме с этим элементом в Викиданные + Пожалуйста, добавьте какие-то комментарии + Обсуждение + Другая проблема или информация (пожалуйста, объясните ниже). Ваш отзыв будет опубликован на следующей вики-странице: <a href=\"https://commons.wikimedia.org/wiki/Commons:Mobile_app/Feedback\">Commons:Mobile app/Feedback</a> diff --git a/app/src/main/res/values-se/strings.xml b/app/src/main/res/values-se/strings.xml index 19b5593d6..76c9f5e4f 100644 --- a/app/src/main/res/values-se/strings.xml +++ b/app/src/main/res/values-se/strings.xml @@ -47,10 +47,10 @@ Vuordil... Ođasmáhttá govvateavsttaid ja govvádusaid Vuordil... - Sisačáliheapmi lihkostuvai! - Sisačáliheapmi ii lihkostuvvan! + Sisačáliheapmi lihkostuvai! + Sisačáliheapmi ii lihkostuvvan! Fiila ii gávdnon. Geahččal áinnas eará fiilla. - Autentiseren ii doaibman, čálit mes oktii vel sisa + Autentiseren ii doaibman. Čálit mes oktii vel sisa. Bajásluđen álggahuvvui! Bajásluđen ráiduduvvon (ráddjejuvvon čatnasanvuohki doaimmas) %1$s bajásluđejuvvon! @@ -77,11 +77,11 @@ Atte mes govvateavstta dán fiilii Govvádus Govvateaksta - Ii sáhte čálihit sisa - fierpmádagas feaila + Ii sáhte čálihit sisa - fierpmádagas feaila Beare máŋga eahpelihkostuvvan geahččaleami. Geahččal mat fas moatti minuvtta geahčen Dađibahábuht, dát geavaheaddji lea hehttejuvvon Commons:is Fertet addit iežat guovtteceahkat dovddaldatkoda. - Sisačáliheapmi ii lihkostuvvan + Sisačáliheapmi ii lihkostuvvan Vurke Nammat dán ráiddu Rievdadusat @@ -190,7 +190,7 @@ Wikipedia-artihkal Čálit sisa du dovddaldahkii Čálit sisa - Áiggutgo don duođaid joatkit čálitkeahttá sisa? + Áiggutgo don duođaid joatkit čálitkeahttá sisa? Wikidata Wikipedia Commons diff --git a/app/src/main/res/values-skr/strings.xml b/app/src/main/res/values-skr/strings.xml index 1faaa4df8..e20998561 100644 --- a/app/src/main/res/values-skr/strings.xml +++ b/app/src/main/res/values-skr/strings.xml @@ -269,4 +269,5 @@ تصویر چݨیج ڳئی رپورٹ مصنف کوں شکریہ بھیڄݨ وچ خرابی۔ + ڳالھ مہاڑ diff --git a/app/src/main/res/values-sl/strings.xml b/app/src/main/res/values-sl/strings.xml index 5da5b4d5f..d5dd1d04a 100644 --- a/app/src/main/res/values-sl/strings.xml +++ b/app/src/main/res/values-sl/strings.xml @@ -770,4 +770,5 @@ %d izbranih slik %d izbranih slik + »%1$s« je na drugem kraju. Spodaj navedite pravi kraj in, če je mogoče, napišite pravilno zemljepisno širino in dolžino. diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 25ed6ffc9..e8e4931c2 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -792,5 +792,13 @@ 請記住,多重上傳中的所有圖片都會取得相同的分類和描述。如果圖片不要共享描述和分類,請執行多次單筆上傳。 關於多次上傳的註釋 + 向維基數據回報關於此項目的問題 + 請輸入一些意見。 + 討論 + \"寫一些關於\" + \"項目。這將公開可見。\" + 「%1$s」已不存在,無法拍攝它的照片。 + 「%1$s」位於不同的位置(請在下面指定正確的位置,可以的話請告訴我們正確的經緯度)。 + 其他問題或資訊(請在下方解釋)。 您的回饋已發布到以下 wiki 頁面:<a href=\"https://commons.wikimedia.org/wiki/Commons:Mobile_app/Feedback\">Commons:Mobile app/Feedback</a> From 73e9ed8e264685ba97f7e46810e97cda464ca9da Mon Sep 17 00:00:00 2001 From: "translatewiki.net" Date: Mon, 15 Jul 2024 14:02:06 +0200 Subject: [PATCH 005/464] Localisation updates from https://translatewiki.net. --- app/src/main/res/values-ce/strings.xml | 407 +++++++++++++++++++++++++ app/src/main/res/values-da/strings.xml | 4 +- app/src/main/res/values-ms/strings.xml | 2 +- 3 files changed, 410 insertions(+), 3 deletions(-) create mode 100644 app/src/main/res/values-ce/strings.xml diff --git a/app/src/main/res/values-ce/strings.xml b/app/src/main/res/values-ce/strings.xml new file mode 100644 index 000000000..829161e94 --- /dev/null +++ b/app/src/main/res/values-ce/strings.xml @@ -0,0 +1,407 @@ + + + + Викилармера Facebook-агӀо + Викилармин йуьхьанцара кодаш гитхабехь + Викилармин логотип + Викилармин веб-сайт + Лаьтта меттиг хоржучу корера ара вала(йала) + ДӀадахьийта + ТӀетоха кхин хаам + ТӀетоха керла къинхьегам + ТӀетоха камера тӀера къинхьегам + ТӀетоха суьртан тӀера къинхьегам + ТӀетоха галерей тӀера къинхьегам хьалхарчу къинхьегамашкара + Куьйгаш + Маттах лаьцна + Куьг + Цуьнах лаьцна + Сурт + Йерриге + агIо хийца + Тайпа лахар + Меттиган хьал + Дийнан сурт + + %1$d файл чуйокхуш йу + %1$d файл чуйокхуш йу + + + (%1$d) + (%1$d) + + Чуйаккхар долор + + Чуйаккхар %d кечдар + Чуйаккхар %d кечдар + + + %d чуйаккхар + %d чуйаккхар + + + ХIара суртан лицензи йийра йу кху бухахь %1$s + ХIокху сурташна лицензи йийра йу кху бухахь %1$s + + + %1$d ДӀахӀоттор + %1$d ДӀахӀиттор + + + Чулацам схьаэцар. Суьртан болх бан цхьа хан йала тарло, суьртан бараме а, хьан гӀирсе а хьаьжжина + Чулацам схьаэцар. Суьртан болх бан цхьа хан йала тарло, суьртан бараме а, хьан гӀирсе а хьаьжжина + + Гайта + Арахьара хатӀ + Йукъара + Йуханехьа зӀе + Къайлаха + Викиларма + Параметраш + Викиларма чуйаккха + ДӀадоьдуш ду чуйаккхар... + Декъашхочун цӀе + Пароль + Commons Beta тӀехь хьай цӀарца чугӀо + ЧугӀо + Йицйелла пароль? + ДӀайаздалар + Системин чудахар + Дехар до, собарде… + титраш ​​а, йийцарш а карладохуш ду.. + Дехар до, собарде… + Довзийтар кхиамца кхочушдина! + Системин довзийтарца гӀалат! + Файл цакарина. Хьажа кхий файл. + Максимум йуха хьажаран доза кхаьчна! Дехар ду, чуйаккхар дӀайаккхна, йуха хьажар + Баттарейкан оптимизаци дӀаяккхий? + кхааннал сов суртал чудаийтаро дика болх бо\n кхин а тешаме хир ду батарейн оптимизаци дӀаяьккхича. Дехар ду, дӀаяккха батарейн оптимизаци Викиларма Ӏалашонан нисъйарашчура, дика чуйакхара хилийта.\n\nБатарейн оптимизаци дӀаяккхаран хила тарлуш йолу гӀулчаш:\n\n1-ра гӀулч: Нуьйда \'Нисъйар\' тӀе тӀетаӀа йе.\n\n2-гIа гӀулч: \'Оптимизаци йина яц\' тӀера \'Ерриг приложениш\' тӀе хийца.\n\n3-гIа гӀулч: Хьалаха \"Викиларма\" йе «fr.free.nrw.commons».\n\n4-гIа гӀулч: Цун тӀе тӀетаӀа йе, йуха \'Оптимизаци ма йе\' харжа. \n\n5-гIа гӀулч: ТӀе тӀетаӀа йе \'Кийча\'. + Аутентификацин гӀалат. Дехар до, йуха чугӀо. + Чуйаккхар доладелла! + Чуйакхар рогӀехь йу (зӀенан режим, доза тоьхна дӀахӀоттийна) + %1$s чуйаьккхина! + Чуйаьккхина файле хьажа тӀетаӀайe + %1$s чуйаккхар долина + %1$s чуйоккхуш йу + %1$s чуйаккхар чекхдолуш ду + %1$s чуяккхуш гӀалат даьлла + Чуйакхар %1$s сацийна + ТӀетаӀайe хьажархьама + ТӀетаӀайe хьажархьама + Ас чуяьхарш + РогӀехь + Чуйаккхаран гӀалат. + %1$d%% чекхделла + Чуйолуш йу + Галерей чуьра + Сурт даккха + Уллехь + Ас чуйаьхарш + Йекъа + Хьажа файлан агӀоне + Куьг йазор (ТIедилина ду) + Дехар ду, хӀокху файлан цIе гайта + Цуьнах лаьцна + Куьг + Чувала(йала) тара цало — сетан гӀалат + ТӀех дукха кхиаме боцу гӀертарш. Дехар ду масех минот йаьлча йуха а хьажа. + Бехк ма билла, амма иштта цIе йолу декъашхочун блок тоьхна Викилармичохь + Ахь шинафакторийн аутентификацин код йазо йеза + Системин довзийтарца гӀалат! + Чуйолуш йу + ДӀайазйе хӀокху файлийн тобан цӀе + Хийцамаш + Чуйолуш йу + Категори харжар + Хьан суьрташ тIехь гойтуш йолу, элементаш лахар (лам, Тадж-Махал, и. дӀ. кх. а) + Ӏалашйан + Карлайаккха + МогӀам + Чуйохуш хӀинца а йац! + %1$s йогIуш йол, категореш ца карийна + Категореш + Параметраш + ДӀайаздалар + Хаьржина суьрташ + Категори + Таллам + ТӀетохарх лаьцна + Къайлаха политика + Кхоллархой + ТӀетохарх лаьцна + Йухадан + Цаоьшу + Схьаэца + Ӏадйитаран кепаца йолу лицензи + Кечйар + Attribution 4.0 + Attribution-ShareAlike 3.0 + Attribution 3.0 + Чуйаккхаран масала: + ЦӀе: Сиднейн операн театр + ХӀаъ! + Категореш + Чуйолуш... + ХӀума хаьржина йац + Куьг доцуш + Хаамаш бац + Дийцарш дац + Йевзаш йоцу лицензи + Карлайаккха + ХӀаъ + Тергам бе + Чуйаккха + ХӀаъ + ХӀан-хӀа + Куьг + ЦӀе + Цуьнах лаьцна + Цуьнах лаьцна + Дийцар + Автор + Чуйаьккхина терахь + Лицензи + Координаташ + Ламаш + Марша догӀийла Википеди чу + Марша догӀийла — авторийн бакъонаш + Сиднейн операн театр + Йухайаккхар + Схьайелла + ДӀачӀагӀа + Коьрта + Схьаэца + Йуххехь + Программех лаьцна + Нисдаран гӀирс + Йуханехьа зӀе + Аравала(йала) + Куьйгалла дар + ДӀахаийтарш + Таллар + Некъ + Викихаамаш + Википеди + Викиларма + Тхуна мах хадабе + СиХХ + Декъашхочун хьехам + Хьехам дӀабаккха + Интернет йац + Хаам схьаэцарехь гӀалат + Таллам бан сурт схьаоьцуш гӀалат нисделла. \"Карлайаккха\" тӀетаӀайе, йуха хьажархьама. + Цхьа а хаам бац + Гочйан + Меттанаш + Локализацин мотт схьахаржа, цу чу гочбан йиш йолуш программан интерфейсан элементаш + Гочдаре гӀо + Йухайаккхар + ЙухагӀорта + Декъашхочо чудаьккхина %1$s + Блоктохар + Викилармин тӀехь хийцамаш бар блоктоьхна ду хьуна + Дийнан сурт + Лахар + Викилармин тӀехь лаха + Лахар + ТӀаьххьара лехамаш: + ТӀаьххьара дехарш + ТӀаьххьара меттан дехарш + Категореш чуйохуш гӀалат нисделла. + Хаамаш чубохуш гӀалат нисделла. + Мультимедиа + Категореш + Элементаш + Хаьржинарг + Карарчу программаца чудаьккхина + Карта + Сурт тӀетоьхна %1$s Викихаамийн агӀонна! + Цуьнца йогӀуш йолу Викихаамийн агӀо карлайаккха аьтто ца баьлла! + Фонан сурт санна хӀоттайе + Фонан сурт кхиамца дӀахӀоттийна! + Хеттарш + ХӀара сурт нийса дуй сервер чудаккха? + Хаттар + Хилам + Кхин дӀа + Нийса жоп + Нийса доцу жоп + ХӀара скриншот Викилармин чуйаккха йогӀий? + Апп декъа + ДӀадерзаде + ДӀайаккхар + Кхиамаш + Профиль + Статистика + Баркаллаш кхаьчна + Хаьржина суьрташ + Локхалла + Суьрташ чудаьхна + Йуха ца дерзийна суьрташ + Суьрташ лелийна + Хьайн кхиамаш доттагӀашна бовзийта! + оьшу минимум: + Цхьа гӀалат даьлла! + Викилармин дӀахаийтарш + Авторан алтернативан цӀе лелайе + Авторан алтернативан цӀе + Къинхьегам + Йуххехь + ДӀахаийтарш + ДӀахаийтарш (деша) + МогӀам + Кхин дӀа + ТӀехьа + Сурт + Меттигаш + Чуйаккхар йухадаккхар + «ЙухагӀо» нуьйда лелорца хӀара чуйаккхар йухадоккхур ду, хьан кхиамаш дӀабохур бу + Кхин дӀа а чуйаккха + (Гуламехь долчу массо а суьрташна) + ХӀокху декъехь леха + Бакъо йеха + Хьуна лаьий, карарчу хенахь хьо лаьтта меттиг лелош, гергара меттиг гайта, хӀинца а цхьа а суьрташ доцуш? + Геолокацин бакъо йоцуш суьрташ оьшуш йолу гергара меттиг гайта йиш йац + Кхин ма хатта + Чекхдолуш ду: + Кампанеш гайтар + Карара кампанеш хьажар + Магаде + Йухадаккха + ХӀуна кхий гура йац кампанеш. Делахь, хьайна лаахь, хьа йиш йу кампанех лаьцна нотификаци лато нисдаран гӀирс чохь. + Кийчча йу + Баркалла дӀадахьийтар: Кхиамца + Файл нийса йуй Викилармин тӀехь? + Декъашхочунна баркалла ала лаьий хьуна? + ХӀаъ + РогӀера файл + Лог-файлаш йекъа + Хьажа ахьа дешначуьнга + Хьажа ца дешначарга + Суьрташ чудохуш гӀалат даьлла + Дехар до, собарде… + РогӀерчу гӀирсашка копеш йар + Копийина + ХӀара сурт чекхдалийта + EXIF тегашца болх бар + Автор + Авторийн бакъонаш + Лаьтта меттиг + Камеран модель + Объективан модель + Серийн лоьмар + Программан кхачам + Файл йолу меттиган тӀекхача бакъо ца ло + Йекъа программа, гӀоьнца... + Суьртан информаци + Цхьа а категори ца карийна. + Цхьа а хаам ца карийна. + Чуйаккхар йухадаккхар + ХӀунда дӀайаккха йеза %1$s? + %1$s чуйаьккхина гӀоьнца: %2$s + Хаамийн Ӏад битаран кепаца мотт + ДӀайаккха кховдор + Кхиамца + Тар цаделира + Керланийн сурт + Интернет чуьра ларамаза сурт + Логотип + Кхиамца + + %1$s категори тӀетоьхна. + %1$s категореш тӀетоьхна. + + Категореш тӀетоха аьтто ца баьлла. + Категореш карлайаха + Суьрташ карладаха гӀерта со. + Суьрташна хийцамаш бе + + %1$s хаам тӀетоьхна. + %1$s хаамаш тӀетоьхна. + + Суьрташ тӀетоха аьтто ца баьлла. + Координаташ карлайаха гӀертар. + Координатийн карладаккхар + Хаамаш карлабахар + Куьйг йаздар карладаккхар + Кхиамца + %1$s координаташ тӀетоьхна. + Хаам тӀетоьхна + Куьйг йаздар тӀетоьхна. + Координаташ тӀетоха аьтто ца баьлла. + Хаамаш тӀетоха аьтто ца баьлла. + Куьг йаздар тӀетоха аьтто ца баьлла. + Координаташ схьаэца аьтто ца баьлла. + Хаамаш схьаэца аьтто ца баьлла. + Хаамашна а, куьг йаздарна а хийцамаш бар + Сурт декъа гӀоьнца + Цкъачунна ахьа къинхьегам ца бина. + %s цкъачунна къинхьегам бац + Аккаунт кхоьллина! + Текст буфере копийина + Хаамаш \"бешна\" аьлла билгалбаьхна + Цхьа проблема йу кхузахь :-( + Меттиган хьал: + Йолуш йу + Сурт оьшу + Меттиган тайпа: + ТӀай, музей, отел, и.дӀ.кх. + Цхьа хӀума галдаьлла логинца. Хьайн пароль меттахӀотто йеза ахьа! + МЕДИА + БЕРИЙН КЛАССАШ + ДАЙ-НЕНАН КЛАССАШ + Уллехь меттиг карийна + ХӀокху суьрташ тӀехь %1$s? + ХӀокху сурт тӀехь %1$s? + Нисдаран гӀирс + ДӀайаьккхина закладки йукъара + Цхьа хӀума галдаьлла. Фонан сурт хӀотто аьтто ца баьлла + Фонан сурт санна хӀоттайе + Фонан сурт дӀахӀоттош ду... + Системин нисдаран гӀирс + Бодане + Сирла + Чуйаха кхин а + Кховдийна тодарш: + — ХӀокху суьртана категореш тӀетоха, лело атта хилийта. + — ХӀара сурт тӀетоха гергарчу Википедин йаззамашна, иллюстрацеш йоцуш. + Википеди тӀе сурт тӀетоха + ХӀара сурт Википедин %1$s декъан тӀетоха лаьий хьуна? + Бакъдан + Инструкцеш + 1. Лелайе рогӀера вики-код: + 2. «Бакъдан» нуьйдин тӀетаӀийча Википедин йаззам схьабоьллур бу + 3. Хьайн суьртана догӀу йаззаман дакъа лаха + 4. «Хийца» иконкин тӀетаӀайе (къоламах тера йу) хӀокху декъана + 5. Вики-код йогӀучу метте дӀайазйе + 7. Йаззам дӀайазбе + Вики-код буфер чу копийе + пауза + кхидӀа + Сацийна + Кхин а + Кхиамаш + Лидерийн таблица + Ранг: + Дукхалла: + Ранг + Декъашхо + Дукхалла + Лидерийн таблицин чохь аватарка санна дӀахӀоттайе + Аватарка дӀахӀоттош йу, дехар до, собар де + Аватар дӀахӀоттийна + Аватар хӀоттош гӀалат даьлла, дехар до, йуха хьажа + Аватар санна хӀоттайе + Цхьана шарахь + Цхьана кӀиранахь + Йерриге хенахь + Чуйаккха + Йуххехь + Лелина + Сан ранг + diff --git a/app/src/main/res/values-da/strings.xml b/app/src/main/res/values-da/strings.xml index be15a53dd..3be97d687 100644 --- a/app/src/main/res/values-da/strings.xml +++ b/app/src/main/res/values-da/strings.xml @@ -220,7 +220,7 @@ Koordinater Ingen angivet Bliv betatester - Registrer dig på vores betakanal på Google Play og få tidlig tilgang til nye funktioner og feilrettelser + Registrer dig på vores betakanal på Google Play og få tidlig adgang til nye funktioner og fejlrettelser 2FA-kode Ønsker du at logge ud? Mediebillede mislykkedes @@ -265,7 +265,7 @@ Problemer fundet på billedet Upload kun billeder, som du selv har taget. Upload ikke billeder, som du har downloadet fra internettet. Gem billeder taget i appen - Gem billeder, taget med kameraet i appen, på din enhed + Gem billeder taget med kameraet i appen på din enhed Log ind på din konto Send logfil Send logfilen til udviklerne via e-mail for at hjælpe med at fejlfinde problemer med appen. Bemærk: logfiler kan potentielt indeholde identificerende oplysninger diff --git a/app/src/main/res/values-ms/strings.xml b/app/src/main/res/values-ms/strings.xml index ac31d67b9..fd0932027 100644 --- a/app/src/main/res/values-ms/strings.xml +++ b/app/src/main/res/values-ms/strings.xml @@ -42,7 +42,7 @@ Gambar ini akan dilesenkan di bawah %1$s Jelajah - Penampilan + Paparan Umum Maklum balas Privasi From 5be76044b179ada81424c5ec307f91d4d149ce32 Mon Sep 17 00:00:00 2001 From: Kaartic Sivaraam Date: Wed, 17 Jul 2024 12:52:41 +0530 Subject: [PATCH 006/464] wikidata-feedback: avoid sentence lego (#5775) Fixes #5763 --- .../main/java/fr/free/nrw/commons/nearby/WikidataFeedback.kt | 2 +- app/src/main/res/values/strings.xml | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) 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 7c62b3646..060547d40 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 @@ -45,7 +45,7 @@ class WikidataFeedback : BaseActivity() { pageTitle = getString(R.string.talk) + ":" + wikidataQId binding.toolbarBinding.toolbar.title = pageTitle binding.textHeader.text = - getString(R.string.write_something_about_the) + "'$place'" + getString(R.string.item_it_will_be_publicly_visible) + getString(R.string.write_something_about_the_item, place) binding.radioButton1.setText( getString( R.string.does_not_exist_anymore_no_picture_can_ever_be_taken_of_it, diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 82be02da2..c636ccb0a 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -821,8 +821,7 @@ Upload your first media by tapping on the add button. Report a problem about this item to Wikidata Please enter some comments Talk - "Write something about the " - " item. It will be publicly visible." + "Write something about the \'%1$s\' item. It will be publicly visible." \'%1$s\' does not exist anymore, no picture can ever be taken of it. \'%1$s\' is at a different place. Please specify the correct place below, and if possible, write the correct latitude and longitude. Other problem or information (please explain below). From 34addbe33ade49c61a4f5005ffc52d657559667e Mon Sep 17 00:00:00 2001 From: "Amir E. Aharoni" Date: Wed, 17 Jul 2024 22:47:03 -0400 Subject: [PATCH 007/464] Remove unnecessary double quotes from a message (#5777) --- app/src/main/res/values/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index c636ccb0a..163ee7374 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -821,7 +821,7 @@ Upload your first media by tapping on the add button. Report a problem about this item to Wikidata Please enter some comments Talk - "Write something about the \'%1$s\' item. It will be publicly visible." + Write something about the \'%1$s\' item. It will be publicly visible. \'%1$s\' does not exist anymore, no picture can ever be taken of it. \'%1$s\' is at a different place. Please specify the correct place below, and if possible, write the correct latitude and longitude. Other problem or information (please explain below). From 7f6b45aeb66bc6ef8014aa5bec2907c2d2f8c082 Mon Sep 17 00:00:00 2001 From: Matija Nalis Date: Sat, 20 Jul 2024 13:16:20 +0000 Subject: [PATCH 008/464] Update allowed recent years to include 2020s (#5761) * document regex due to #47 * also count 2020s as "recent years" * clarify that not all years are ignored * clarify "year" is current year * original logic fix from https://github.com/commons-app/apps-android-commons/pull/5761#pullrequestreview-2144120347 * better variale name for ".*0s.*" as that regex will match e.g. `1920s` and `80s` too, so the original `is20xxsYear` would be confusing name for it * consolidate duplicated code to spammyCategory * clarify regexes via variables * spammyCategory should always be skipped * return is simple now, so we can get rid of extra val oldDecade * fix curYearInString * some clarification comments * refactor: rename containsYear to isSpammyCategory This is done as the name containsYear is ambiguous. It not just checks for year to identify spammy categories. * refactor: rename containsYear to isSpammyCategory (take 2) A continuation of fe74c77ab (refactor: rename containsYear to isSpammyCategory, 2024-07-17) --------- Co-authored-by: Kaartic Sivaraam --- .../nrw/commons/category/CategoriesModel.kt | 46 ++++++++++++------- .../commons/repository/UploadRepository.java | 4 +- .../upload/categories/CategoriesPresenter.kt | 4 +- .../commons/upload/CategoriesPresenterTest.kt | 5 +- .../upload/UploadRepositoryUnitTest.kt | 2 +- 5 files changed, 36 insertions(+), 25 deletions(-) diff --git a/app/src/main/java/fr/free/nrw/commons/category/CategoriesModel.kt b/app/src/main/java/fr/free/nrw/commons/category/CategoriesModel.kt index 99448a22b..c69789c21 100644 --- a/app/src/main/java/fr/free/nrw/commons/category/CategoriesModel.kt +++ b/app/src/main/java/fr/free/nrw/commons/category/CategoriesModel.kt @@ -27,30 +27,42 @@ class CategoriesModel @Inject constructor( private var selectedExistingCategories: MutableList = mutableListOf() /** - * Returns if the item contains an year - * @param item + * Returns true if an item is considered to be a spammy category which should be ignored + * + * @param item a category item that needs to be validated to know if it is spammy or not * @return */ - fun containsYear(item: String): Boolean { + fun isSpammyCategory(item: String): Boolean { //Check for current and previous year to exclude these categories from removal val now = Calendar.getInstance() - val year = now[Calendar.YEAR] - val yearInString = year.toString() - val prevYear = year - 1 + val curYear = now[Calendar.YEAR] + val curYearInString = curYear.toString() + val prevYear = curYear - 1 val prevYearInString = prevYear.toString() Timber.d("Previous year: %s", prevYearInString) - //Check if item contains a 4-digit word anywhere within the string (.* is wildcard) - //And that item does not equal the current year or previous year - //And if it is an irrelevant category such as Media_needing_categories_as_of_16_June_2017(Issue #750) - //Check if the year in the form of XX(X)0s is relevant, i.e. in the 2000s or 2010s as stated in Issue #1029 - return item.matches(".*(19|20)\\d{2}.*".toRegex()) - && !item.contains(yearInString) - && !item.contains(prevYearInString) - || item.matches("(.*)needing(.*)".toRegex()) - || item.matches("(.*)taken on(.*)".toRegex()) - || item.matches(".*0s.*".toRegex()) - && !item.matches(".*(200|201)0s.*".toRegex()) + val mentionsDecade = item.matches(".*0s.*".toRegex()) + val recentDecade = item.matches(".*20[0-2]0s.*".toRegex()) + val spammyCategory = item.matches("(.*)needing(.*)".toRegex()) + || item.matches("(.*)taken on(.*)".toRegex()) + + // always skip irrelevant categories such as Media_needing_categories_as_of_16_June_2017(Issue #750) + if (spammyCategory) { + return true + } + + if (mentionsDecade) { + // Check if the year in the form of XX(X)0s is recent/relevant, i.e. in the 2000s or 2010s/2020s as stated in Issue #1029 + // Example: "2020s" is OK, but "1920s" is not (and should be skipped) + return !recentDecade + } else { + // If it is not an year in decade form (e.g. 19xxs/20xxs), then check if item contains a 4-digit year + // anywhere within the string (.* is wildcard) (Issue #47) + // And that item does not equal the current year or previous year + return item.matches(".*(19|20)\\d{2}.*".toRegex()) + && !item.contains(curYearInString) + && !item.contains(prevYearInString) + } } /** diff --git a/app/src/main/java/fr/free/nrw/commons/repository/UploadRepository.java b/app/src/main/java/fr/free/nrw/commons/repository/UploadRepository.java index 2374ebfc3..2f4b6431d 100644 --- a/app/src/main/java/fr/free/nrw/commons/repository/UploadRepository.java +++ b/app/src/main/java/fr/free/nrw/commons/repository/UploadRepository.java @@ -148,8 +148,8 @@ public class UploadRepository { * @param name * @return */ - public boolean containsYear(String name) { - return categoriesModel.containsYear(name); + public boolean isSpammyCategory(String name) { + return categoriesModel.isSpammyCategory(name); } /** diff --git a/app/src/main/java/fr/free/nrw/commons/upload/categories/CategoriesPresenter.kt b/app/src/main/java/fr/free/nrw/commons/upload/categories/CategoriesPresenter.kt index 1ce7c7cdd..49aa41c9e 100644 --- a/app/src/main/java/fr/free/nrw/commons/upload/categories/CategoriesPresenter.kt +++ b/app/src/main/java/fr/free/nrw/commons/upload/categories/CategoriesPresenter.kt @@ -89,7 +89,7 @@ class CategoriesPresenter @Inject constructor( if (media == null) { return repository.searchAll(term, getImageTitleList(), repository.selectedDepictions) .subscribeOn(ioScheduler) - .map { it.filter { categoryItem -> !repository.containsYear(categoryItem.name) + .map { it.filter { categoryItem -> !repository.isSpammyCategory(categoryItem.name) || categoryItem.name==term } } } else { return Observable.zip( @@ -103,7 +103,7 @@ class CategoriesPresenter @Inject constructor( it1 + it2 } .subscribeOn(ioScheduler) - .map { it.filter { categoryItem -> !repository.containsYear(categoryItem.name) + .map { it.filter { categoryItem -> !repository.isSpammyCategory(categoryItem.name) || categoryItem.name==term } } .map { it.filterNot { categoryItem -> categoryItem.thumbnail == "hidden" } } } diff --git a/app/src/test/kotlin/fr/free/nrw/commons/upload/CategoriesPresenterTest.kt b/app/src/test/kotlin/fr/free/nrw/commons/upload/CategoriesPresenterTest.kt index d0347953e..679a25c8d 100644 --- a/app/src/test/kotlin/fr/free/nrw/commons/upload/CategoriesPresenterTest.kt +++ b/app/src/test/kotlin/fr/free/nrw/commons/upload/CategoriesPresenterTest.kt @@ -14,7 +14,6 @@ import media import org.junit.Before import org.junit.Test import org.mockito.Mock -import org.mockito.Mockito.verifyNoInteractions import org.mockito.MockitoAnnotations import java.lang.reflect.Method @@ -97,8 +96,8 @@ class CategoriesPresenterTest { ) ) ) - whenever(repository.containsYear("selected")).thenReturn(false) - whenever(repository.containsYear("doesContainYear")).thenReturn(true) + whenever(repository.isSpammyCategory("selected")).thenReturn(false) + whenever(repository.isSpammyCategory("doesContainYear")).thenReturn(true) whenever(repository.selectedCategories).thenReturn(listOf( categoryItem("selected", "", "",true))) categoriesPresenter.searchForCategories("test") diff --git a/app/src/test/kotlin/fr/free/nrw/commons/upload/UploadRepositoryUnitTest.kt b/app/src/test/kotlin/fr/free/nrw/commons/upload/UploadRepositoryUnitTest.kt index 209566931..5e891e5dc 100644 --- a/app/src/test/kotlin/fr/free/nrw/commons/upload/UploadRepositoryUnitTest.kt +++ b/app/src/test/kotlin/fr/free/nrw/commons/upload/UploadRepositoryUnitTest.kt @@ -156,7 +156,7 @@ class UploadRepositoryUnitTest { @Test fun testContainsYear() { assertEquals( - repository.containsYear(""), categoriesModel.containsYear("") + repository.isSpammyCategory(""), categoriesModel.isSpammyCategory("") ) } From 7d9f8d27bca078bd7c283f3bd357f03aafe863d7 Mon Sep 17 00:00:00 2001 From: Kaartic Sivaraam Date: Sat, 20 Jul 2024 18:49:16 +0530 Subject: [PATCH 009/464] menu: rename menu as "User profile" (#5771) As suggested by @whym on #5754, the name "User page" is ambiguous with the on-wiki user page. We actually show the leaderboard when the menu is clicked on. So, rename the menu as "User profile" instead. Ref: https://github.com/commons-app/apps-android-commons/issues/5754#issuecomment-2196796213 --- app/src/main/res/values/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 163ee7374..e074ea02a 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -738,7 +738,7 @@ Upload your first media by tapping on the add button. Contributions of User: %s Achievements of User: %s - View user page + View user profile Edit depictions Edit categories Advanced Options From d2d8eb9153997e5ebce852502d9faee20040c21a Mon Sep 17 00:00:00 2001 From: "translatewiki.net" Date: Mon, 22 Jul 2024 14:01:59 +0200 Subject: [PATCH 010/464] Localisation updates from https://translatewiki.net. --- app/src/main/res/values-ar/strings.xml | 2 +- app/src/main/res/values-b+sr+Latn/strings.xml | 2 +- app/src/main/res/values-ba/strings.xml | 23 +++--- app/src/main/res/values-ban/strings.xml | 16 +++-- app/src/main/res/values-blk/strings.xml | 2 +- app/src/main/res/values-bn/strings.xml | 2 +- app/src/main/res/values-br/strings.xml | 2 +- app/src/main/res/values-da/strings.xml | 11 ++- app/src/main/res/values-de/strings.xml | 2 +- app/src/main/res/values-el/strings.xml | 2 +- app/src/main/res/values-eo/strings.xml | 2 +- app/src/main/res/values-es/strings.xml | 2 +- app/src/main/res/values-fa/strings.xml | 2 +- app/src/main/res/values-fi/strings.xml | 2 +- app/src/main/res/values-fr/strings.xml | 2 +- app/src/main/res/values-hi/strings.xml | 1 + app/src/main/res/values-ia/strings.xml | 4 +- app/src/main/res/values-in/strings.xml | 2 +- app/src/main/res/values-io/strings.xml | 2 +- app/src/main/res/values-is/strings.xml | 2 +- app/src/main/res/values-it/strings.xml | 2 +- app/src/main/res/values-iw/strings.xml | 5 +- app/src/main/res/values-ja/strings.xml | 2 +- app/src/main/res/values-kaa/error.xml | 10 +++ app/src/main/res/values-ko/strings.xml | 2 +- app/src/main/res/values-krc/strings.xml | 17 ++++- app/src/main/res/values-kus/strings.xml | 2 +- app/src/main/res/values-lb/strings.xml | 2 +- app/src/main/res/values-lt/strings.xml | 2 +- app/src/main/res/values-mk/strings.xml | 7 +- app/src/main/res/values-my/strings.xml | 2 +- app/src/main/res/values-nb/strings.xml | 2 +- app/src/main/res/values-ne/strings.xml | 2 +- app/src/main/res/values-nl/strings.xml | 4 +- app/src/main/res/values-nqo/strings.xml | 2 +- app/src/main/res/values-pl/strings.xml | 8 ++- app/src/main/res/values-pms/strings.xml | 5 +- app/src/main/res/values-pt-rBR/strings.xml | 4 +- app/src/main/res/values-pt/strings.xml | 2 +- app/src/main/res/values-qq/strings.xml | 2 - app/src/main/res/values-ru/strings.xml | 3 +- app/src/main/res/values-se/strings.xml | 2 +- app/src/main/res/values-sh/strings.xml | 2 +- app/src/main/res/values-sk/strings.xml | 2 +- app/src/main/res/values-skr/strings.xml | 2 +- app/src/main/res/values-sl/strings.xml | 5 +- app/src/main/res/values-sr/strings.xml | 2 +- app/src/main/res/values-sv/strings.xml | 12 +++- app/src/main/res/values-te/strings.xml | 2 +- app/src/main/res/values-tr/strings.xml | 2 +- app/src/main/res/values-uk/strings.xml | 71 ++++++++++++++----- app/src/main/res/values-xal/strings.xml | 2 +- app/src/main/res/values-xmf/strings.xml | 28 ++++++-- app/src/main/res/values-zh-rTW/strings.xml | 7 +- app/src/main/res/values-zh/strings.xml | 2 +- 55 files changed, 202 insertions(+), 111 deletions(-) create mode 100644 app/src/main/res/values-kaa/error.xml diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml index e61c82ce3..e11426077 100644 --- a/app/src/main/res/values-ar/strings.xml +++ b/app/src/main/res/values-ar/strings.xml @@ -748,7 +748,7 @@ تحتاج الخرائط المجاورة لقراءة PHONE STATE لتعمل بشكل صحيح مساهمات المستخدم: %s إنجازات المستخدم: %s - اعرض صفحة المستخدم + اعرض صفحة المستخدم تحرير الصور تحرير الفئات خيارات متقدمة 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 7eb98238b..05f757e5f 100644 --- a/app/src/main/res/values-b+sr+Latn/strings.xml +++ b/app/src/main/res/values-b+sr+Latn/strings.xml @@ -650,7 +650,7 @@ Potrebna je dozvola Doprinosi korisnika/ce: %s Dostignuća korisnika/ce: %s - Prikaži korisničku stranicu + Prikaži korisničku stranicu Izmeni kategorije Napredne opcije Primeni diff --git a/app/src/main/res/values-ba/strings.xml b/app/src/main/res/values-ba/strings.xml index d66d8f124..c49f54430 100644 --- a/app/src/main/res/values-ba/strings.xml +++ b/app/src/main/res/values-ba/strings.xml @@ -25,6 +25,7 @@ Рәсем Барыһы ла Өҫкә күсерергә + Эҙләү күренеше Көн рәсеме %1$d файл йөкләнә @@ -35,10 +36,9 @@ (%1$d) Йөкләүҙе башлау - - %1$d тейәү башлана - %1$d тейәү башлана - %1$d тейәүҙәр башлана + + %d файлды эшкәртеү + %d файлды эшкәртеү %1$d тейәү @@ -65,17 +65,22 @@ Зинһар, көтөгөҙ... Аңлатмалар һәм тасуирламалар яңыртыла Зинһар, көтөгөҙ... - Уңышлы танылдығыҙ! - Танылыу хатаһы! + Системаға инеү уңышлы! + Системаға инеү уңышһыҙ! Файл табылманы. Башҡа файлды эҙләп ҡарағыҙ. - Танылыу хатаһы. Зинһар, тағы бер тапҡыр танылығыҙ. + Ҡабатлап ҡарауҙың иң күп һаны етте! Зинһар, йөкләүҙе кире алығыҙ һәм яңынан ҡабатлап ҡарағыҙ + Батарея оптимизацияһын һүндерергәме? + Башҡортсаға тәржемә:\n\n3-тән артыҡ һүрәтте йөкләү батарея оптимизацияһы һүндерелгәндә ышаныслыраҡ эшләй. Зинһар, Commons ҡушымтаһы өсөн көйләүҙәрҙән батарея оптимизацияһын һүндерегеҙ, был йөкләү тәжрибәһен яҡшыртасаҡ.\n\nБатарея оптимизацияһын һүндереү өсөн мөмкин булған аҙымдар:\n\n1-се аҙым: Түбәндәге \'Көйләүҙәр\' төймәһенә баҫығыҙ.\n\n2-се аҙым: \'Оптимизацияланмаған\'дан \'Бөтә ҡушымталар\'ға күсегеҙ.\n\n3-сө аҙым: \"Commons\" йәки \"fr.free.nrw.commons\" тип эҙләгеҙ.\n\n4-се аҙым: Уға баҫығыҙ һәм \'Оптимизацияламаҫҡа\' һайлағыҙ.\n\n5-се аҙым: \'Әҙер\' төймәһенә баҫығыҙ. + Аутентификация үтәлмәне. Зинһар, ҡабаттан системаға инегеҙ. Йөкләү башланды! + Йөкләү сиратҡа ҡуйылды (сикләнгән бәйләнеш режимы эшләтеп ебәрелде). %1$s йөкләнде! Ошонда баҫып йөкләнгән файлды ҡара Файлды йөкләү: %s %1$s йөкләнә Йөкләү %1$s тамамланды %1$s йөкләп булманы + %1$s йөкләү туҡтатылды Ҡарау өсөн баҫығыҙ Ҡарау өсөн баҫығыҙ Һуңғы йөкләүҙәрем @@ -93,11 +98,11 @@ Зинһар, был файлдың исемен күрһәтегеҙ Тасуирлама Ҡултамға (Имза) - Инеп булмай - интернет хатаһы + Системаға инеп булмай - селтәр хатаһы Бик күп уңышһыҙ ынтылыштар булды. Зинһар, бер нисә минуттан тағы ла инеп ҡара. Ғәфү итегеҙ, әммә был ҡатнашыусы Викимилектә бикләнгән Ике тапҡыр раҫлай торған кодты яҙырға кәрәк - Танылыу хатаһы! + Системаға инеү уңышһыҙ! Йөкләү Был файлдар төкөмөнә атама бирегеҙ Үҙгәртеүҙәр diff --git a/app/src/main/res/values-ban/strings.xml b/app/src/main/res/values-ban/strings.xml index a3ed09e58..009d7f391 100644 --- a/app/src/main/res/values-ban/strings.xml +++ b/app/src/main/res/values-ban/strings.xml @@ -54,6 +54,7 @@ Setélan Unggah nuju Commons + Pangunggahan kantun mamargi Peséngan sang anganggé Kruna sandi Majing nuju akun Commons Béta Ida @@ -64,10 +65,10 @@ Jantos dumun... Nganyarin sesirah miwah pidarta Jantos dumun… - Mahasil manjing log! - Manjing log wangdé! + Mahasil manjing log! + Manjing log wangdé! Berkas nénten katemu. Durusang coba berkas liyané. - Otentikasi gagal, durusang majing malih + Otentikasi gagal, durusang majing malih Ngawit unggah! Unggahan ring antrian (mode tetemon kawates kauripang) %1$s kaunggah! @@ -94,11 +95,11 @@ Durus dagingin sesirah antuk berkas puniki Déskripsi Sesirah - Tan prasida login - pikobet ring jaringan + Tan prasida login - pikobet ring jaringan Kakèhan nyoba manjing wangdé. Durusang coba malih di makudang menit Ampura, sang anganggé pjniki sampun kablokir ring Commons Ida patut ngicain kode oténtikasi kalih faktor druén Idané - Manjing log wangdé + Manjing log wangdé Unggah Ica aran sesirah puniki Uahin @@ -224,7 +225,7 @@ Cingak kaca wéb antuk rerincian Liwatin Manjing log - Napiké ragané yakti jagi ngaliwatin manjing log? + Napiké ragané yakti jagi ngaliwatin manjing log? Paarah Wikidata Wikipédia @@ -263,7 +264,7 @@ Napiké Ida jagi ngaresikin lelintihan parerehan Ida? Napiké ragané jagi ngusap parerehan puniki? Lelintihan parerehan kausap - Usulan Pangusapan + Usulan Antuk Kaapus Usap Panghargaan Profil @@ -307,6 +308,7 @@ Pidarta Gambar Pangunggahan Kawangdé %1$s kaunggah olih: %2$s + Pangusulan antuk kaapus Suksés Logo Panganyaran kategori diff --git a/app/src/main/res/values-blk/strings.xml b/app/src/main/res/values-blk/strings.xml index d76248ece..039d11eec 100644 --- a/app/src/main/res/values-blk/strings.xml +++ b/app/src/main/res/values-blk/strings.xml @@ -166,5 +166,5 @@ တဲမ်းလိတ်သား နမ်းပဲင်ႏခွင်ꩻမူ ကဉ်မရာမော်ဒယ် - ထွား ကေားသုင်ꩻသားလိတ်မဲ့ငါ + ထွား ကေားသုင်ꩻသားလိတ်မဲ့ငါ diff --git a/app/src/main/res/values-bn/strings.xml b/app/src/main/res/values-bn/strings.xml index dd3e3705d..d2bc6ad60 100644 --- a/app/src/main/res/values-bn/strings.xml +++ b/app/src/main/res/values-bn/strings.xml @@ -503,7 +503,7 @@ অনুমতি দরকার ব্যবহারকারীর অবদান: %s ব্যবহারকারীর অর্জন: %s - ব্যবহারকারীর পাতা দেখুন + ব্যবহারকারীর পাতা দেখুন উচ্চতর বিকল্প প্রয়োগ করুন পুনঃস্থাপন diff --git a/app/src/main/res/values-br/strings.xml b/app/src/main/res/values-br/strings.xml index 7ffe7f8bf..230913779 100644 --- a/app/src/main/res/values-br/strings.xml +++ b/app/src/main/res/values-br/strings.xml @@ -417,7 +417,7 @@ GOUZOUT HIROC\'H Degasadennoù an implijer: %s Taolioù-kaer an implijer: %s - Gwelet pajenn an implijer + Gwelet pajenn an implijer Kemmañ ar rummadoù Dibarzhioù araokaet Lec\'hiadur ebet kavet diff --git a/app/src/main/res/values-da/strings.xml b/app/src/main/res/values-da/strings.xml index 3be97d687..b17735415 100644 --- a/app/src/main/res/values-da/strings.xml +++ b/app/src/main/res/values-da/strings.xml @@ -211,7 +211,7 @@ Nej Billedtekst Titel - Afbildning + Afbilder Beskrivelse Diskussion Forfatter @@ -303,7 +303,7 @@ Fortsæt Annullér Prøv igen - Det er de steder i nærheden af dig, der har brug for billeder til at illustrere deres Wikipedia-artikler.\n\nKlikker du på \'SØG DETTE OMRÅDE\' låser kortet og starter en søgning i nærheden omkring det pågældende sted. + Det er de steder i nærheden af dig, der har brug for billeder til at illustrere deres Wikipedia-artikler.\n\nKlikker du på \'SØG DETTE OMRÅDE\' låser kortet og starter en søgning i området omkring det pågældende sted. Dette sted mangler et billede. Dette sted har allerede et billede. Dette sted findes ikke længere. @@ -565,7 +565,7 @@ Konto oprettet! Tekst kopieret til udklipsholder Notifikation markeret som læst - Der var en fejl! + Der opstod en fejl Stedstatus: Findes Mangler et billede @@ -695,7 +695,7 @@ \"I nærheden\"-kort har brug for at aflæse TELEFON TILSTAND for at fungere ordentlig Bidrag fra bruger: %s Præstationer af bruger: %s - Vis brugerside + Vis brugerprofil Rediger afbildninger Rediger kategorier Avancerede indstillinger @@ -778,8 +778,7 @@ Rapporter et problem omkring dette element til Wikidata Skriv nogle kommentarer Tal - \"Skriv noget om\" - \" elementet. Det vil være offentligt synligt.\" + Skriv noget om elementet \'%1$s\'. Det vil være offentligt synligt. \'%1$s\' eksisterer ikke længere, der vil aldrig kunne tages et billede af det. \'%1$s\' ligger et andet sted. Angiv venligst det korrekte sted nedenfor, og skriv om muligt den korrekte bredde- og længdegrad. Andet problem eller anden information (forklar venligst nedenfor). diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 3c74f41a9..115016a1c 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -721,7 +721,7 @@ Karten in der Nähe müssen den Telefonstatus lesen können, um richtig zu funktionieren Beiträge von Benutzer: %s Erfolge des Benutzers: %s - Benutzerseite ansehen + Benutzerseite ansehen Beschriftungen bearbeiten Kategorien bearbeiten Erweiterte Optionen diff --git a/app/src/main/res/values-el/strings.xml b/app/src/main/res/values-el/strings.xml index 8784f4654..64c6ba694 100644 --- a/app/src/main/res/values-el/strings.xml +++ b/app/src/main/res/values-el/strings.xml @@ -708,7 +708,7 @@ Οι κοντινοί χάρτες πρέπει να διαβάζουν PHONE STATE για να λειτουργούν σωστά Συνεισφορές χρήστη: %s Επιτεύγματα χρήστη: %s - Προβολή σελίδας χρήστη + Προβολή σελίδας χρήστη Επεξεργασία απεικονίσεων Επεξεργασία κατηγοριών Σύνθετες Επιλογές diff --git a/app/src/main/res/values-eo/strings.xml b/app/src/main/res/values-eo/strings.xml index 7da31ef26..9b5bb84ac 100644 --- a/app/src/main/res/values-eo/strings.xml +++ b/app/src/main/res/values-eo/strings.xml @@ -690,7 +690,7 @@ Mapoj de Apude bezonas legi TELEFONAN STATON por funkcii bone Kontribuoj de Uzanto: %s Atingoj de Uzanto: %s - Vidi la uzantopaĝon + Vidi la uzantopaĝon Redakti priskribojn Redakti kategoriojn Elekteblecoj kromaj diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index c8e808d8e..a2936e197 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -734,7 +734,7 @@ Los mapas cercanos necesitan leer ESTADO DEL TELÉFONO para funcionar correctamente Contribuciones del usuario: %s Logros del usuario: %s - Ver página de usuario + Ver página de usuario Editar las descripciones Editar categorías Opciones avanzadas diff --git a/app/src/main/res/values-fa/strings.xml b/app/src/main/res/values-fa/strings.xml index 325e63cae..92c32087f 100644 --- a/app/src/main/res/values-fa/strings.xml +++ b/app/src/main/res/values-fa/strings.xml @@ -482,7 +482,7 @@ نمایش یادمان‌ها این ماه، ماه «ویکی دوست‌دار یادمان‌ها» است! بیشتر بدانید - نمایش صفحهٔ کاربر + نمایش صفحهٔ کاربر گزینه‌های پیشرفته اعمال بازنشانی diff --git a/app/src/main/res/values-fi/strings.xml b/app/src/main/res/values-fi/strings.xml index dda36404b..cf791f71b 100644 --- a/app/src/main/res/values-fi/strings.xml +++ b/app/src/main/res/values-fi/strings.xml @@ -631,7 +631,7 @@ Tarvitaan käyttöoikeus Käyttäjän muokkaukset: %s Käyttäjän saavutukset: %s - Näytä käyttäjäsivu + Näytä käyttäjäsivu Muokkaa luokkia Lisäasetukset Käytä diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index d7540ee65..3c863df5e 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -728,7 +728,7 @@ Les cartes de proximité doivent pouvoir lire l’ÉTAT DU TÉLÉPHONE pour fonctionner correctement Contributions de l’utilisateur : %s Réussites de l’utilisateur : %s - Afficher la page utilisateur + Afficher la page utilisateur Modifier les descriptions Modifier les catégories Options avancées diff --git a/app/src/main/res/values-hi/strings.xml b/app/src/main/res/values-hi/strings.xml index cefcbb938..7cfc785f2 100644 --- a/app/src/main/res/values-hi/strings.xml +++ b/app/src/main/res/values-hi/strings.xml @@ -348,4 +348,5 @@ सफल गणना रद्द करें + वार्ता diff --git a/app/src/main/res/values-ia/strings.xml b/app/src/main/res/values-ia/strings.xml index 79f29007b..73b171464 100644 --- a/app/src/main/res/values-ia/strings.xml +++ b/app/src/main/res/values-ia/strings.xml @@ -681,7 +681,7 @@ Le cartas a proximitate debe leger le STATO DEL TELEPHONO pro functionar correctemente Contributiones del usator: %s Realisationes del usator: %s - Visitar le pagina del usator + Visitar le pagina del usator Modificar representationes Modificar categorias Optiones avantiate @@ -764,8 +764,6 @@ Signalar a Wikidata un problema sur iste elemento Per favor insere alcun commentos Discussion - \"Scribe qualcosa sur le elemento \" - \". Illo 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, si possibile indica le latitude/longitude correcte). Altere problema o information (per favor explica hic infra). diff --git a/app/src/main/res/values-in/strings.xml b/app/src/main/res/values-in/strings.xml index 47010a4ac..18cd57892 100644 --- a/app/src/main/res/values-in/strings.xml +++ b/app/src/main/res/values-in/strings.xml @@ -677,7 +677,7 @@ Peta Sekitar harus membaca STATUS TELEPON untuk berfungsi dengan benar Kontribusi Pengguna: %s Pencapaian Pengguna: %s - Lihat halaman pengguna + Lihat halaman pengguna Sunting penggambaran Sunting kategori Opsi Lanjutan diff --git a/app/src/main/res/values-io/strings.xml b/app/src/main/res/values-io/strings.xml index 97f65f4df..c965b2585 100644 --- a/app/src/main/res/values-io/strings.xml +++ b/app/src/main/res/values-io/strings.xml @@ -524,7 +524,7 @@ Montrez monumenti SAVEZ PLUSE Bezonas permiso - Vidar uzeropagino + Vidar uzeropagino Imajo selektita Ca imajo indikesis por ne sendesar Raporto diff --git a/app/src/main/res/values-is/strings.xml b/app/src/main/res/values-is/strings.xml index e3e1646a5..188504dcd 100644 --- a/app/src/main/res/values-is/strings.xml +++ b/app/src/main/res/values-is/strings.xml @@ -659,7 +659,7 @@ Kort í nágrenninu þurfa að geta lesið STÖÐU SÍMANS til að virka almennilega Framlög notanda: %s Frammistaða notanda: %s - Skoða notandasíðu + Skoða notandasíðu Breyta myndlýsingum Breyta flokkum Ítarlegir valkostir diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 93af62f8f..91e5331a3 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -696,7 +696,7 @@ Le mappe vicine hanno bisogno di leggere lo STATO DEL TELEFONO per funzionare correttamente Contributi dell\'utente: %s Traguardi dell\'utente: %s - Vedi la pagina utente + Vedi il profilo utente Modifica le descrizioni Modifica le categorie Opzioni avanzate diff --git a/app/src/main/res/values-iw/strings.xml b/app/src/main/res/values-iw/strings.xml index e5295e6b6..3b4bdf5a3 100644 --- a/app/src/main/res/values-iw/strings.xml +++ b/app/src/main/res/values-iw/strings.xml @@ -725,7 +725,7 @@ מפות בסביבה זקוקות להרשאה מצב הטלפון כדי לפעול כראוי תרומות של המשתמש: %s הישגי המשתמש: %s - הצגת דף המשתמש + הצגת פרופיל המשתמש עריכת מוצגים עריכת קטגוריות אפשרויות מתקדמות @@ -810,8 +810,7 @@ דווח על בעיה בפריט הזה לוויקינתונים נא להזין הערות כלשהן שיחה - \"נא לכתוב משהו על הפריט \" - \" . זה יהיה גלוי לציבור.\" + נא לכתוב משהו על פריט \"%1$s\". זה יוצג לציבור. \"%1$s\" כבר לא קיים, אי־אפשר לצלם אותו. \"%1$s\" נמצא במקום אחר. נא לציין את המקום הנכון למטה, ואם אפשר, לכתוב את קו הרוחב ואת קו האורך הנכונים. בעיה אחרת או מידע אחר (נא להסביר הלאה). diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index 856e1b472..b004f6c00 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -642,7 +642,7 @@ 完了 戻る 権限が必要です - 利用者ページを表示 + 利用者ページを表示 題材を編集する カテゴリを編集 適用 diff --git a/app/src/main/res/values-kaa/error.xml b/app/src/main/res/values-kaa/error.xml new file mode 100644 index 000000000..603d0e552 --- /dev/null +++ b/app/src/main/res/values-kaa/error.xml @@ -0,0 +1,10 @@ + + + + Commons isten shıqtı + Birnársede qátelik júz berdi! + Ne zattı qılıp atırǵanlıǵıńızdı bayanlań, soń email arqalı bizge jiberiń. Ońlawǵa járdem etiń! + Raxmet! + diff --git a/app/src/main/res/values-ko/strings.xml b/app/src/main/res/values-ko/strings.xml index 085cace5d..231240bd1 100644 --- a/app/src/main/res/values-ko/strings.xml +++ b/app/src/main/res/values-ko/strings.xml @@ -589,7 +589,7 @@ 이 이미지는 이미 커먼즈에 업로드되었습니다. 권한 필요 사용자의 기여: %s - 사용자 문서 보기 + 사용자 문서 보기 분류 편집 고급 옵션 적용 diff --git a/app/src/main/res/values-krc/strings.xml b/app/src/main/res/values-krc/strings.xml index 10dc97dfe..b97684821 100644 --- a/app/src/main/res/values-krc/strings.xml +++ b/app/src/main/res/values-krc/strings.xml @@ -268,7 +268,7 @@ Атлат Кир Авторизацияны керти да атлатыргъамы излейсиз? - Боллукъ заманда сурат джюклер ючюн кирирге керек боллукъсуз. + Боллукъ заманда суратkf джюклер ючюн кирирге керек боллукъсуз. Бу функцияны хайырланыр ючюн, тилейбиз, киригиз Викитекстни алмашдырыу буферге копия эт Викитекст алмашдырыу буферге копия этилди @@ -567,7 +567,8 @@ БАЛА КЛАССЛА АНА КЛАССЛА Джууукъдагъы Джер Табылды - Бу %1$s суратмыды? + Была %1$s суратламыдыла? + Бу %1$s суратымыды? Китаб белгиле Джарашдырыўла Китаб белгиледен къоратылды @@ -685,7 +686,7 @@ Джууукъдагъы картала тюз ишлер ючюн ТЕЛЕФОННУ БОЛУМУн окъургъа амал болургъа кереклиди Хайырланыучуну къошумлары: %s Хайырланыучуну джетишимлери: %s - Хайырланыучу бетни кёргюз + Хайырланыучу бетни кёргюз Танытыуланы тюзет Категорияланы тюзет Кенгленнген Сайлаула @@ -763,4 +764,14 @@ %d сурат сайланды %d сурат сайланды + Мультиджюклеудеги бютеу суратлаула бир категорияла эмда танытыула алгъанларын унутмагъыз. Суратлау ангылатыула эмда категориялары юлюшлемей эселе, тилейбиз, талай айры джюклеу этигиз. + Мультиджюклеулеуни юсюнден эсгертиу + Викибилгилеге бу элемент бла проблеманы юсюнден билдирме эт + Къаллай болса да комментарий киргизигиз + Сюзюу + %1$s элементни юсюнден бир затла джазыгъыз. Буну хар ким да кёрлюкдю. + \'%1$s\' энди бар тюлдю, аны картха алырча тюлдю. + \'%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-kus/strings.xml b/app/src/main/res/values-kus/strings.xml index 709b59b7e..99fb8c1f7 100644 --- a/app/src/main/res/values-kus/strings.xml +++ b/app/src/main/res/values-kus/strings.xml @@ -577,7 +577,7 @@ Map banɛ bɛ yamma bɔɔd ye ba karim Moba zi\'esim ka nyaŋi tʋm sʋ\'ʋŋa Tʋmtʋm tʋʋma: %s Tʋmtʋm nyɔɔd: %s - Gɔsim tʋmtʋm lakir zin\'ig + Gɔsim tʋmtʋm lakir zin\'ig Dɛmisim nwɛnnɛmnam Dɛmisim buudinam Tuon ken gaansʋg diff --git a/app/src/main/res/values-lb/strings.xml b/app/src/main/res/values-lb/strings.xml index baca7c4ba..669310059 100644 --- a/app/src/main/res/values-lb/strings.xml +++ b/app/src/main/res/values-lb/strings.xml @@ -479,7 +479,7 @@ Autorisatioun gëtt gebraucht Kontributioune vum Benotzer: %s Leeschtunge vum Benotzer: %s - Benotzersäit weisen + Benotzersäit weisen Kategorien änneren Erweidert Optiounen Dir kënnt d\'Nobäi-Ufroen upassen. Falls Dir eng Feelermeldung kritt, setzt zeréck a probéiert nach eng Kéier. diff --git a/app/src/main/res/values-lt/strings.xml b/app/src/main/res/values-lt/strings.xml index bf788150e..e7ee99831 100644 --- a/app/src/main/res/values-lt/strings.xml +++ b/app/src/main/res/values-lt/strings.xml @@ -627,7 +627,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 diff --git a/app/src/main/res/values-mk/strings.xml b/app/src/main/res/values-mk/strings.xml index 9d6ba6d32..d574f8e14 100644 --- a/app/src/main/res/values-mk/strings.xml +++ b/app/src/main/res/values-mk/strings.xml @@ -691,7 +691,7 @@ Картите со блиски места треба можат да ја прочитаат СОСТОЈБАТА НА ТЕЛЕФОНОТ за да работат правилно Придонеси на корисникот: %s Достигнувања на корисникот: %s - Преглед на корисничката страница + Преглед на корисничката страница Уреди прикази Уреди категории Напредни можности @@ -774,10 +774,9 @@ Пријавете проблем со овој предмет на Википодатоци Внесете коментар Разговор - „Напишете нешто за предметот “ - “. Ова ќе биде јавно видливо.“ + „Напишете нешто за предметот „%1$s“. Ова ќе биде јавно видливо.“ „%1$s“ повеќе не постои, нема да може да се фотографира. - „%1$s“ се наоѓа на друго место (подолу укажете го сегашното место, ако е можно со географска ширина и должина). + „%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-my/strings.xml b/app/src/main/res/values-my/strings.xml index 44a98a096..4c4661175 100644 --- a/app/src/main/res/values-my/strings.xml +++ b/app/src/main/res/values-my/strings.xml @@ -398,7 +398,7 @@ ခွင့်ပြုချက် လိုအပ် အသုံးပြုသူ၏ ပံ့ပိုးမှုများ- %s အသုံးပြုသူ၏ အောင်မြင်မှုများ- %s - အသုံးပြုသူ၏ စာမျက်နှာကို ကြည့်ရန် + အသုံးပြုသူ၏ စာမျက်နှာကို ကြည့်ရန် ကဏ္ဍများ တည်းဖြတ်ရန် အဆင့်မြင့်ရွေးချယ်ရန်များ တည်နေရာမတွေ့ပါ diff --git a/app/src/main/res/values-nb/strings.xml b/app/src/main/res/values-nb/strings.xml index 2d7def89c..63e192cc9 100644 --- a/app/src/main/res/values-nb/strings.xml +++ b/app/src/main/res/values-nb/strings.xml @@ -621,7 +621,7 @@ Trenger tillatelse Bidrag til bruker: %s Prestasjoner til bruker: %s - Vis brukerside + Vis brukerside Rediger avbildninger Rediger kategorier Avanserte alternativer diff --git a/app/src/main/res/values-ne/strings.xml b/app/src/main/res/values-ne/strings.xml index c386c4b57..93e27d1db 100644 --- a/app/src/main/res/values-ne/strings.xml +++ b/app/src/main/res/values-ne/strings.xml @@ -280,7 +280,7 @@ थप जान्नुहोस् विकी लभ्स मोनुमेन्टस् अनुमति आवश्यक - प्रयोगकर्ता पृष्ठ हेर्नुहोस् + प्रयोगकर्ता पृष्ठ हेर्नुहोस् सम्पादन श्रेणीहरू उन्नत विकल्प तपाईँले निकटता क्वेरी अनुकूलन गर्न सक्नुहुन्छ। त्रुटी भएमा पूर्ववत् गर्नुभएर लागू गर्नुहोस्। diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index 6ea280497..3a76f4c8d 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -712,7 +712,7 @@ Kaarten in de buurt moeten TELEFOONSTATUS lezen om goed te kunnen werken Bijdragen door Gebruiker: %s Prestaties van Gebruiker: %s - Gebruikerspagina bekijken + Gebruikerspagina bekijken Wijzig items Categorieën bewerken Geavanceerde opties @@ -795,8 +795,6 @@ Een probleem met dit item melden aan Wikidata Voer enkele opmerkingen in Overleg - \"Schrijf iets over het item \" - \". Het zal publiekelijk zichtbaar zijn.\" ‘%1$s’ bestaat niet meer, er kan nooit een foto van gemaakt worden. ‘%1$s’ bevindt zich ergens anders. Geef hieronder de juiste plaats aan en noteer, indien mogelijk, de juiste breedte- en lengtegraad. Ander probleem of andere informatie (verklaar hieronder). diff --git a/app/src/main/res/values-nqo/strings.xml b/app/src/main/res/values-nqo/strings.xml index c6cf9d159..7e11ea03a 100644 --- a/app/src/main/res/values-nqo/strings.xml +++ b/app/src/main/res/values-nqo/strings.xml @@ -571,7 +571,7 @@ ߞߙߍ߬ߝߍ߬ ߔߊߔߘߊ (ߡߊߔߛ) ߡߊ߬ߞߏ ߦߋ߫ ߜߋߟߋ߲ߜߋߟߋ߲ ߞߊ߬ߝߏ ߘߐߞߊ߬ߙߊ߲ ߠߊ߫ ߞߊ߬ ߛߋ߫ ߓߊ߯ߙߊ߫ ߟߴߊ߬ ߢߊߓߘߍ ߡߊ߬ ߟߊ߬ߓߊ߰ߙߊ߬ߟߊ %s: ߟߊ߫ ߓߟߏߡߊߜߍ߲ ߟߊ߬ߓߊ߰ߙߊ߬ߟߊ %s: ߟߊ߫ ߞߎ߲߬ߝߊ߰ߟߌ ߟߎ߬ - ߟߊ߬ߓߊ߰ߙߊ߬ߟߌ߫ ߞߐߜߍ ߦߋ߫ + ߟߊ߬ߓߊ߰ߙߊ߬ߟߌ߫ ߞߐߜߍ ߦߋ߫ ߞߊ߲߬ߛߓߍ߬ߟߌ ߟߎ߬ ߡߊߦߟߍ߬ߡߊ߲߫ ߦߌߟߡߊ ߟߎ߬ ߡߊߦߟߍ߬ߡߊ߲߫ ߢߣߊߕߊߟߌ ߖߊ߲߬ߝߊ߬ߣߍ߲ diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index a8fc77366..1a98091e1 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -4,6 +4,7 @@ * Chrumps * CiaPan * DeRudySoulStorm +* Frozengeist * IOIOI * InternerowyGołąb * Kareyac @@ -716,7 +717,7 @@ Mapy znajdujące się w pobliżu muszą odczytywać STAN TELEFONU, aby działały poprawnie Wkład użytkownika: %s Osiągnięcia użytkownika: %s - Wyświetl stronę użytkownika + Wyświetl stronę użytkownika Edycja przedstawień Edycja kategorii Opcje zaawansowane @@ -771,4 +772,9 @@ Edytuj lokalizację Dziękuję autorowi Błąd wysyłania podziękowań do autora. + Pomyślnie zapisano + Chcesz otworzyć plik GPX? + Chcesz otworzyć plik KML? + Nie udało się zapisać pliku KML. + Nie udało się zapisać pliku GPX. diff --git a/app/src/main/res/values-pms/strings.xml b/app/src/main/res/values-pms/strings.xml index d1cdc80e0..21de30d34 100644 --- a/app/src/main/res/values-pms/strings.xml +++ b/app/src/main/res/values-pms/strings.xml @@ -687,7 +687,7 @@ Le carte dj\'anviron a l\'han damanca ëd lese lë STAT DËL TELÉFON për marcé për da bin Contribussion ëd l\'utent: %s Arzultà ëd l\'utent: %s - Vëdde la pàgina ëd l\'utent + Vëdde la pàgina ëd l\'utent Modifiché le descrission Modifiché le categorìe Opsion avansà @@ -770,8 +770,7 @@ Signalé un problema su cost element a Wikidata Për piasì, ch\'a buta dij coment Ciaciarade - «Scrive cheicòs a propòsit ëd » - « l\'element. A sarà visìbil da tuti.» + «Scrive cheicòs a propòsit ëd l\'element \'%1$s\'. Sòn a sarà visìbil për tuti.» \'%1$s\' a esist pi nen, a peul pa esse fotografà. \'%1$s\' a l\'é ant un pòst diferent. Për piasì, ch\'a spessìfica ël pòst giust sì-sota e, si possìbil, ch\'a scriva latitùdin e longitùdin giuste. Àutr problema o anformassion (për piasì, ch\'a spiega sì-sota). diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index e52d3921e..5fe7223fe 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -7,6 +7,7 @@ * Eduardoaddad * Felipe L. Ewald * Fitoschido +* Flaviane da Silva * Fúlvio * Gusta * HenriqueCrang @@ -704,7 +705,7 @@ Os mapas próximos precisam ler ESTADO DO TELEFONE para funcionar corretamente Contribuições do usuário: %s Conquistas do usuário: %s - Ver página de usuário + Ver página de usuário Editar representações Editar categorias Opções avançadas @@ -769,4 +770,5 @@ %d imagem selecinada %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 83bfa6592..b5fe1c23f 100644 --- a/app/src/main/res/values-pt/strings.xml +++ b/app/src/main/res/values-pt/strings.xml @@ -699,7 +699,7 @@ Os mapas de locais próximos precisam de ler ESTADO DO TELEFONE para funcionar devidamente Contribuições do utilizador: %s Realizações do utilizador: %s - Ver página de utilizador + Ver página de utilizador Editar elementos retratados Editar categorias Opções avançadas diff --git a/app/src/main/res/values-qq/strings.xml b/app/src/main/res/values-qq/strings.xml index 2753ee09b..e06969dc2 100644 --- a/app/src/main/res/values-qq/strings.xml +++ b/app/src/main/res/values-qq/strings.xml @@ -204,6 +204,4 @@ {{Identical|Detail}} \"Set as avatar\" should be translated the same as {{msg-wm|Commons-android-strings-menu set avatar}}. {{Doc-commons-app-depicts}} - Shown before {{msg-wm|Commons-android-strings-item it will be publicly visible}}. Between them, the item name is shown. - Shown after {{msg-wm|Commons-android-strings-write something about the}}. Between them, the item name is shown. diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index 396adb696..d4fda660e 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -749,7 +749,7 @@ Для правильной работы картам поблизости необходимо иметь доступ к СОСТОЯНИЮ ТЕЛЕФОНА. Вклад участника: %s Достижения участника: %s - Посмотреть страницу участника + Посмотреть страницу участника Редактировать описания Изменить категории Расширенные настройки @@ -834,6 +834,7 @@ Сообщить о проблеме с этим элементом в Викиданные Пожалуйста, добавьте какие-то комментарии Обсуждение + Напишите что-нибудь об элементе \'%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-se/strings.xml b/app/src/main/res/values-se/strings.xml index 76c9f5e4f..4d28855de 100644 --- a/app/src/main/res/values-se/strings.xml +++ b/app/src/main/res/values-se/strings.xml @@ -242,7 +242,7 @@ Buot gielaide Govvádus LASSEDIEĐUT - Čájet geavaheaddjisiiddu + Čájet geavaheaddjisiiddu Rievdat kategoriijaid Lasseásahusat Geavat diff --git a/app/src/main/res/values-sh/strings.xml b/app/src/main/res/values-sh/strings.xml index 529647b09..5997677ef 100644 --- a/app/src/main/res/values-sh/strings.xml +++ b/app/src/main/res/values-sh/strings.xml @@ -253,7 +253,7 @@ Nije uspelo Logo Doprinosi korisnika: %s - Pregled korisničke stranice + Pregled korisničke stranice Uredi kategorije Napredne opcije Možete prilagoditi upit \'\'U blizini\'\'. Ako dobijete pogreške, poništite i primijenite. diff --git a/app/src/main/res/values-sk/strings.xml b/app/src/main/res/values-sk/strings.xml index 3379ed2fe..3c5548be5 100644 --- a/app/src/main/res/values-sk/strings.xml +++ b/app/src/main/res/values-sk/strings.xml @@ -680,7 +680,7 @@ Blízke mapy potrebujú mať prístup k polohe telefónu, aby správne fungovali Príspevky používateľa: %s Úspechy používateľa: %s - Zobraziť stránku používateľa + Zobraziť stránku používateľa Upraviť vyobrazenia Upraviť kategórie Rozšírené možnosti diff --git a/app/src/main/res/values-skr/strings.xml b/app/src/main/res/values-skr/strings.xml index e20998561..75aee7065 100644 --- a/app/src/main/res/values-skr/strings.xml +++ b/app/src/main/res/values-skr/strings.xml @@ -253,7 +253,7 @@ مکاؤ ٻیا سکھو اجازت دی لوڑ ہے - ورتݨ آلے دا ورقہ ݙیکھو + ورتݨ آلے دا ورقہ ݙیکھو ونکیاں وچ تبدیلی کرو اعلیٰ اختیارات لاڳو کرو diff --git a/app/src/main/res/values-sl/strings.xml b/app/src/main/res/values-sl/strings.xml index d5dd1d04a..514c8da9f 100644 --- a/app/src/main/res/values-sl/strings.xml +++ b/app/src/main/res/values-sl/strings.xml @@ -2,6 +2,7 @@ @@ -111,7 +112,7 @@ Moje nedavne naložitve V čakalni vrsti Spodletelo - Opravljeno %1$d%&nbsp;% nalaganja + Opravljeno %1$d%&nbsp;%% nalaganja Nalagam Iz galerije Posnemi fotografijo @@ -704,7 +705,7 @@ Bližnji zemljevidi morajo za pravilno delovanje prebrati STANJE TELEFONA Prispevki uporabnika: %s Dosežki uporabnika: %s - Ogled uporabniške strani + Ogled uporabniške strani Uredi slike Uredi kategorije Napredne možnosti diff --git a/app/src/main/res/values-sr/strings.xml b/app/src/main/res/values-sr/strings.xml index f05487488..ccc52792d 100644 --- a/app/src/main/res/values-sr/strings.xml +++ b/app/src/main/res/values-sr/strings.xml @@ -662,7 +662,7 @@ Потребна је дозвола Доприноси корисника/це: %s Достигнућа корисника/це: %s - Прикажи корисничку страницу + Прикажи корисничку страницу Измени категорије Напредне опције Примени diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml index 940639f0f..b00c038e2 100644 --- a/app/src/main/res/values-sv/strings.xml +++ b/app/src/main/res/values-sv/strings.xml @@ -277,7 +277,7 @@ Hoppa över Logga in Vill du verkligen hoppa över inloggningen? - Du behöver logga in för att ladda upp bilder i framtiden. + Du kommer behöva logga in för att ladda upp bilder i framtiden. Logga in för att använda denna funktion Kopiera wikitexten till urklipp Wikitexten kopierades till urklipp @@ -695,7 +695,7 @@ Kartor i närheten behöver läsa TELEFONENS TILLSTÅND för att fungera ordentligt Bidrag av användare: %s Prestationer av användare: %s - Visa användarsida + Visa användarsida Redigera beskrivningar Redigera kategorier Avancerade alternativ @@ -775,4 +775,12 @@ Kom ihåg att när du laddar upp flera bilder får alla bilder samma kategorier och motiv. Om bilder inte bör dela beskrivningar och motiv bör du ladda upp de en och en istället. Anmärkning om att ladda upp flera bilder + Rapportera ett problem om detta objekt till Wikidata + Skriv en kommentar + Diskussion + Skriv någonting om objektet \"%1$s\". Det kommer att visas offentligt. + \"%1$s\" finns inte längre och inga bilder kan någonsin tas på det. + \"%1$s\" är på en annan plats. Ange den korrekta platsen nedan samt ange latitud och longitud om det är möjligt. + 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> diff --git a/app/src/main/res/values-te/strings.xml b/app/src/main/res/values-te/strings.xml index 51c66f850..6f1217371 100644 --- a/app/src/main/res/values-te/strings.xml +++ b/app/src/main/res/values-te/strings.xml @@ -611,7 +611,7 @@ అనుమతి కావాలి వాడుకరి తోడ్పాట్లు: %s వాడుకరి సాధించినవి: %s - వాడుకరి పేజీ చూడండి + వాడుకరి పేజీ చూడండి వర్గాల్లో దిద్దుబాట్లు ఉన్నత ఎంపికలు సమీపంలోని క్వెరీని మీరు ఇష్టానుసారం పెట్టుకోవచ్చు. లోపాలేమైనా ఎదురైతే, రిసెట్ చేసి, అప్లై చెయ్యండి. diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index 355b8b0be..e03bae660 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -716,7 +716,7 @@ Yakındaki haritalar düzgün çalışmak için TELEFON DURUMUNU okumaya ihtiyaç duyuyor Kullanıcının katkıları: %s Kullanıcının başarıları: %s - Kullanıcı sayfasını görüntüle + Kullanıcı sayfasını görüntüle Betimlemeleri düzenle Kategorileri düzenle Gelişmiş Seçenekler diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index a650f872a..5c3a64e82 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -8,6 +8,7 @@ * DDPAT * Fifty Pro * Ice bulldog +* Ignatgg * Movses * Mykola Swarnyk * Piramidion @@ -105,13 +106,13 @@ Будь ласка, зачекайте… Оновлення заголовків та описів Будь ласка, зачекайте… - Ви успішно увійшли! - Не вдалося увійти + Ви успішно увійшли! + Не вдалося увійти Файл не знайдено. Будь ласка, спробуйте інший файл. Досягнуто максимальної кількості повторних спроб! Будь ласка, скасуйте завантаження і спробуйте ще раз Вимкнути оптимізацію батареї? Вивантаження більше ніж 3 зображень працює надійніше, коли оптимізацію батареї вимкнено. Будь ласка, вимкніть оптимізацію батареї для програмки Commons у налаштуваннях для плавної роботи. \n\nМожливі кроки, щоб вимкнути оптимізацію акумулятора:\n\nКрок 1: Натисніть кнопку «Налаштування» нижче.\n\nКрок 2: Переключіться з «Не оптимізовано» на «Усі програми».\n\nКрок 3: Знайдіть «Commons» або «fr.free.nrw.commons».\n\nКрок 4: Натисніть на нього і виберіть «Не оптимізувати».\n\nКрок 5: Натисніть «Готово». - Помилка автентифікації. Будь ласка, увійдіть у свій обліковий запис знову + Помилка автентифікації. Будь ласка, увійдіть у свій обліковий запис знову. Завантаження розпочато! Завантаження додано до черги (увімкнений режим обмеженого з\'єднання) Завантажено %1$s! @@ -138,11 +139,11 @@ Будь ласка, вкажіть підпис цьому файлу Опис Підпис - Неможливо увійти — збій у мережі + Неможливо увійти — збій у мережі Надто багато невдалих спроб. Будь ласка, спробуйте знову через кілька хвилин. Вибачте, цього користувача було заблоковано на Вікісховищі Ви повинні надати код двофакторної автентифікації. - Не вдалося увійти + Не вдалося увійти Завантажити Назвіть цю серію Модифікації @@ -266,6 +267,7 @@ Опис Налаштування Зворотний зв\'язок + Зворотний зв\'язок через GitHub Вийти Керівництво Сповіщення @@ -299,14 +301,15 @@ Див. сторінку, щоб дізнатись більше Пропустити Увійти - Ви дійсно бажаєте пропустити автентифікацію? - Вам треба буде увійти в систему для завантаження зображень у майбутньому. + Ви дійсно бажаєте пропустити автентифікацію? + Вам треба буде увійти в систему для завантаження зображень у майбутньому. Увійдіть, щоб використати цю функцію Скопіювати вікі-текст у буфер обміну Вікі-текст скопійовано у буфер обміну Функція «Поблизу» може працювати некоректно, «Розташування» недоступне. Доступ до місцезнаходження заборонено. Щоб скористатися цією функцією, будь ласка, вкажіть своє місцезнаходження вручну. Потрібний дозвіл для показу списку місць поблизу + Потрібний дозвіл для показу зображень місць поблизу Напрямки Вікідані Вікіпедія @@ -366,7 +369,7 @@ Зображення технологій чи культури дуже бажані для Вікісховища. Ви дали %1$s правильних відповідей. Вітаємо! Оберіть один з двох варіантів відповіді на запитання - Сесія авторизації спливла. Будь ласка, авторизуйтесь знову. + Сесія авторизації спливла. Будь ласка, авторизуйтеся знову. Поширити свій результат тесту із друзями! Продовжити Правильна відповідь @@ -374,7 +377,8 @@ Чи можна завантажувати цей знімок? Поширити програму Повернути - Помилка отримання місць поблизу. + Не вдалося завантажити місця поблизу + Немає зображень з цієї місцевості Не знайдено місць поблизу Помилка отримання пам\'ятників поблизу. Історія пошуку порожня @@ -449,7 +453,7 @@ Ніколи більше про це не запитувати Запитувати дозвіл на геолокацію Запитувати про дозвіл на показ місця перебування, коли це потрібно для функції перегляду місць поблизу. - Щось пішло не так. Нам не вдалося отримати Ваші досягнення + Щось пішло не так. Нам не вдалося отримати досягнення Ви зробили так багато, що наша система підрахунку досягнень не може впоратись зі своїм завданням. Це — абсолютне досягнення. Завершується: Показати кампанії @@ -465,7 +469,7 @@ Новий засіб вибору фотографій Android ризикує втратити інформацію про місцезнаходження. Увімкніть, якщо ви використовуєте його. Якщо вимкнути, то може бути викликаний новий вибір фотографій. Що може призвести до втрати інформації про місцезнаходження.\n\nТоркніться «Докладніше», щоб дізнатись більше. Ви більше не бачитимете кампаній. Однак Ви можете увімкнути це сповіщення повторно в своїх налаштуваннях, якщо забажаєте. - Ця функція вимагає доступу до інтернету. Будь ласка, перевірте своє з\'єднання. + Ця функція вимагає доступу до інтернету. Будь ласка, перевірте своє з\'єднання. Сталася помилка при обробці зображення. Будь ласка, спробуйте ще раз! Отримання токена редагування Додавання шаблона для перевірки категорій @@ -581,7 +585,7 @@ Не вдалося додати координати. Не вдалося додати описи. Не вдалося додати заголовок. - Не вдалося отримати координати. + Координати зображення не оновлено Не вдається отримати описи. Редагувати описи та заголовки Поширити зображення через @@ -596,12 +600,13 @@ Треба фото Тип місця: Міст, музей, готель тощо - Щось пішло не так із процесом входу, ви маєте скинути пароль ! + Щось пішло не так із процесом входу. Вам треба скинути пароль! МЕДІА ДОЧІРНІ КЛАСИ БАТЬКІВСЬКІ КЛАСИ Знайдено місце поблизу - На цьому фото %1$s? + Тут зображено %1$s? + На цьому зображенні %1$s? Закладки Налаштування Вилучено з закладок @@ -615,8 +620,10 @@ Не вдалося відкрити налаштування місця розташування. Будь ласка, увімкніть визначення місця розташування вручну Щоб отримати кращі результати, виберіть режим високої точності. Увімкнути визначення місця розташування? + Будь ласка, увімкніть службу визначення розташування, щоб застосунок показав ваше поточне розташування «Поблизу» потребує увімкненого визначення місця розташування, щоб працювати належним чином - Вам потрібно надати доступ до вашого поточного місцезнаходження, щоб місцезнаходження встановлювалось автоматично. + Функції огляду карти потрібен дозвіл на ваше розташування, щоб показати зображення поблизу + Вам потрібно надати доступ до місцезнаходження, щоб місцезнаходження встановлювалось автоматично. Ви зробили ці два знімки в одному й тому ж місці? Хочете використати широту/довготу зображення справа? Завантажити більше Місць не знайдено, спробуйте змінити критерії пошуку. @@ -719,7 +726,7 @@ Для належної роботи мапи поблизу мають відображати стан PHONE STATE Внесок користувача: %s Досягнення користувача: %s - Переглянути сторінку користувача + Переглянути сторінку користувача Редагувати описи Редагувати категорії Розширені параметри @@ -732,8 +739,8 @@ Додати розташування Будь ласка, видаліть з цього листа будь-яку інформацію, якою ви не бажаєте поділитися публічно. Також майте на увазі, що ваша адреса електронної пошти, за допомогою якої ви розміщуєте публікацію, а також пов’язане ім’я та зображення профілю будуть видимі для всіх. Деталі - Досягнення доступні лише у версії prod, будь ласка, перегляньте документацію розробника. - Таблиця лідерів доступна лише в версії prod. Будь ласка, перегляньте документацію розробника. + Досягнення доступні лише у версії prod. Будь ласка, перегляньте документацію розробників. + Таблиця лідерів доступна лише в версії prod. Будь ласка, перегляньте документацію розробників. Будь ласка, завантажуйте лише фотографії, які ви зробили самі. Користувачі, які завантажують зображення, захищені авторським правом, будуть заблоковані. Це стосується і бета-аромату. Дякуємо за тестування програми! Будь ласка, зніміть прапорець з будь-якої інформації, якою ви не бажаєте ділитися публічно. Рівень API @@ -775,10 +782,38 @@ Дізнайтеся, як написати корисний опис Дізнайтеся, як написати корисний підпис Перегляньте свої досягнення + Редагувати зображення + Редагувати розташування + Розташування оновлено + Вилучити розташування + Попередження про вилучення розташування + Завдяки розташуванню зображення стають кориснішими і доступнішими для пошуку. Ви справді бажаєте прибрати розташування з цього зображення? + Розташування вилучено! + Подякувати автору + Помилка при надсиланні подяки автору. + Сесія авторизації спливла. Будь ласка, увійдіть наново. + Немає доступного застосунку для відкриття файлів GPX + Файл успішно збережено + Бажаєте відкрити файл GPX? + Бажаєте відкрити файл KML? + Не вдалося зберегти файл KML. + Не вдалося зберегти файл GPX. + Збереження файлу KML + Збереження файлу GPX Вибрано %d зображення Вибрано %d зображення Вибрано %d зображень Вибрано %d зображень + Пам\'ятайте, що усі зображення, вивантажені разом, отримають ті самі категорії і підписи. Якщо ці зображення повинні мати різні підписи і категорії, будь ласка, завантажуйте їх окремо. + Примітка про завантаження груп файлів + Повідомити у Вікідані про проблему з цим елементом + Будь ласка, додайте якийсь коментар + Обговорення + Напишіть щось про елемент \"%1$s\". Це буде загальнодоступно. + «%1$s» більше не існує, фотографій цього більше не можливо зробити. + «%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-xal/strings.xml b/app/src/main/res/values-xal/strings.xml index 0b2a0aebe..346ff15e1 100644 --- a/app/src/main/res/values-xal/strings.xml +++ b/app/src/main/res/values-xal/strings.xml @@ -161,7 +161,7 @@ Кегдв Буцх Һәәхлтә - Кергләчин халхиг үзх + Кергләчин халхиг үзх Тотрхаллтыг ясврлх Өргдксн тохрллһ Дәкн тохрулх diff --git a/app/src/main/res/values-xmf/strings.xml b/app/src/main/res/values-xmf/strings.xml index 7cc63fc87..8a6216786 100644 --- a/app/src/main/res/values-xmf/strings.xml +++ b/app/src/main/res/values-xmf/strings.xml @@ -49,6 +49,10 @@ %1$d ეხარგუა %1$d ეხარგუა + + ართამი დინორეშ მეღება. სურათიშ დამუშება იკორინუანს მუზმარენ ბორჯის, ნამუთ გაჩქუ სურათეფიშ ზჷმაშ დო თქვანი მონწყილობაშ მოდელს + ართამი დინორეშ მეღება. სურათეფიშ დამუშება იკორინუანს მუზმარენ ბორჯის, ნამუთ გაჩქუ სურათეფიშ ზჷმაშ დო თქვანი მონწყილობაშ მოდელს + გჷნოჯინა მიოჯინი თარი @@ -71,7 +75,9 @@ სისტემაშა მიშულაქ წჷმოძინელო გეთუ! სისტემაშა მიშულაქ ვემიხუჯინუ! ფაილქ ვეგორუ. ქორთხინთ, ქოცადით შხვა ფაილი. - აუთენტიფიკაციაქ ვემიხუჯინუ, ქოთხინთ ავტორიზაცია ხოლო ართშა გემკორთით. + გომაჟირაფაშ მაქსიმალურ ლიმიტი რე გიმორინაფილი! ქორთინთ, გაუქვათ ეხარგუა დო კჷნი ქოცადით. + გობთიშათო ბატარეაშ ოპტიმიზაცია? + ავთენტიფიკაციაქ ვემიხუჯინუ, ქოთხინთ კჷნი გენშართით. ეხარგუაქ ქჷდიჭყუ! ეხარგუა რანწკის გერე (გოხურგილი რსხუშ რეჟიმი ჩართული რე) %1$ ეხარგილი რე! @@ -79,7 +85,7 @@ ეთმიხარგუ ფაილი: %s %1$ იხარგუ ეხარგუაშ თება %1$ - %1$ ეხარგუაქ ვემიხუჯინუ + %1$s ეხარგუაქ ვემიხუჯინუ %1$s-აშ ეხარგუა გაჩემებული რე ოძირაფალო ქეგუწკანტეთ ოძირაფალო ქეგუწკანტეთ @@ -98,21 +104,23 @@ ქორთხინთ, ქემიოწურეთ თე ფაილიშ ეჭარუა ეჭარუა მუკნაჭარა - მიშულაქ ვემიხუჯინუ - რშვილიშ ჩილათა + მიშულაქ ვემიხუჯინუ - რშვილიშ ჩილათა ძალამ მიარე უმწუძინუ ცადება. ქორთხინ, მუხირენ წუთშა ხოლო ქოცადით. მორდება, თე მახვარებუ ბლოკირი რე ვიკიოწკარუეს თქვა გემშიონათ ოკო ჟირფაქტორიანი ავტორიზაციაშ კოდი. - მიშულაქ ვემიხუჯინუ + მიშულაქ ვემიხუჯინუ ეხარგუა სერიაშ ჯოხო მოდიფიკაციეფი ეხარგუა კატეგორიაშ გიშაგორუა + დოგორით ელემენტეფი, ნამუეფით მოჩამილი რე თქვანი სურათის (გვალა, ტაჯ-მაჰალი დო თ.უ.) ჩუალა გოახალაფა ერკებული (ეხარგუეფი ვა რე) ვეგორინჷ კატეგორიეფქ, ნამუეფით მოგენა %1$s + %1$s-შ მოგვენი ვიკიმუნაჩემეფიშ ელემენტიქ ვეგორუ %1$s-ს ვა უღჷ დოჸუნელი კლასეფი %1$s-ს ვა უღჷ მასქერული კლასეფი ქეგუძინით კატეგორიეფი, თქვანი სურათეფი უმოს მოხუჯურ მიოგორალქ იჸუას ვიკიოწკარუესჷნ.\nგემშეჸონით ჯოხო კატეგორიეფიშ გიოძინალო. @@ -308,6 +316,7 @@ გამა ჩილათირი რე თე სკრინშოტი ჯგირი რენო ეიოხარგალო? მუკორთაფა + ვემიხუჯინჷ გოხოლუაშ აბანეფიშ ინოხარგუაქ თაქ ვა რე მუთუნნერი სურათი ვა რე გოხოლუაშ აბანეფი ასერდეიანი მუნაგორეფი ვა რე @@ -361,9 +370,20 @@ ალობაშ მოთხირი თენა კჷნ დღას ვაბკითხა ორენიშ ალობაშ მოთხირი + ითებუ: + ალობაშ მეჩამა + გოუქვაფა ღოლამირჷ რე + ვა რე გუმორინაფილი სურათეფი სურათიშ ეხარგუაშ ბორჯის ჩილათაქ მოხვადჷ ქორთხინთ ქჷმიცადით … + ავტორი + ორენი + კამერაშ მოდელი + ლინზაშ მოდელი + სერიული ნომერი + პროგრამული უნარღელჸუა + სურათიშ ინფორმაცია სელფი ჸურილი თიშენ ნამჷ-და თინა რე diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index e8e4931c2..ac3e7ebf2 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -712,7 +712,7 @@ 附近地圖需要讀取手機狀態來正常運作 使用者貢獻:%s 使用者成果:%s - 檢視使用者頁面 + 檢視使用者頁面 編輯描寫 編輯分類 進階選項 @@ -795,10 +795,9 @@ 向維基數據回報關於此項目的問題 請輸入一些意見。 討論 - \"寫一些關於\" - \"項目。這將公開可見。\" + 「填寫一些關於『%1$s』項目的事物。內容將公開可見。」 「%1$s」已不存在,無法拍攝它的照片。 - 「%1$s」位於不同的位置(請在下面指定正確的位置,可以的話請告訴我們正確的經緯度)。 + 「%1$s」位於不同的位置。請在下面指定正確的位置,可以的話請填寫正確的經緯度。 其他問題或資訊(請在下方解釋)。 您的回饋已發布到以下 wiki 頁面:<a href=\"https://commons.wikimedia.org/wiki/Commons:Mobile_app/Feedback\">Commons:Mobile app/Feedback</a> diff --git a/app/src/main/res/values-zh/strings.xml b/app/src/main/res/values-zh/strings.xml index a4ed17c02..4c13f4a0b 100644 --- a/app/src/main/res/values-zh/strings.xml +++ b/app/src/main/res/values-zh/strings.xml @@ -734,7 +734,7 @@ 附近地图需要读取手机状态权限以正常运行 用户贡献:%s 用户成就:%s - 查看用户页面 + 查看用户页面 编辑描述 编辑分类 高级选项 From 59da70aca13b36cda045ef0b4b3572da43bdc0b0 Mon Sep 17 00:00:00 2001 From: "translatewiki.net" Date: Thu, 25 Jul 2024 14:01:45 +0200 Subject: [PATCH 011/464] Localisation updates from https://translatewiki.net. --- app/src/main/res/values-da/strings.xml | 2 +- app/src/main/res/values-de/strings.xml | 6 ++++-- app/src/main/res/values-fr/strings.xml | 3 ++- app/src/main/res/values-ku/strings.xml | 10 +++++----- app/src/main/res/values-lb/strings.xml | 2 +- app/src/main/res/values-sr/strings.xml | 2 +- app/src/main/res/values-zh/strings.xml | 2 +- 7 files changed, 15 insertions(+), 12 deletions(-) diff --git a/app/src/main/res/values-da/strings.xml b/app/src/main/res/values-da/strings.xml index b17735415..c7a00d8b3 100644 --- a/app/src/main/res/values-da/strings.xml +++ b/app/src/main/res/values-da/strings.xml @@ -602,7 +602,7 @@ - Tilføj kategorier til dette billede for at forbedre brugbarheden. - Føj dette billede til den tilknyttede Wikipedia-artikel, der ikke har nogen billeder. Tilføj billede til Wikipedia - Vil du tilføje dette billede til Wikipedia-artiklen på sproget %1$s? + Vil du tilføje dette billede til Wikipedia-artiklen på sproget %1$s ? Bekræft Instruktioner 1. Brug følgende wikitekst: diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 115016a1c..1fb3cf0b7 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -23,6 +23,7 @@ * Ngschaider * Pyscowicz * Reedy +* RucolaSpacecat * Sebastian Wallroth * SpaceEnergy * Sujan @@ -91,7 +92,7 @@ Der geteilte Inhalt wird abgerufen. Die Verarbeitung der Bilder kann einige Zeit in Anspruch nehmen, abhängig von der Größe der Bilder und deines Gerätes. Entdecken - Erscheinung + Aussehen Allgemein Rückmeldung Datenschutz @@ -721,7 +722,7 @@ Karten in der Nähe müssen den Telefonstatus lesen können, um richtig zu funktionieren Beiträge von Benutzer: %s Erfolge des Benutzers: %s - Benutzerseite ansehen + Benutzerseite ansehen Beschriftungen bearbeiten Kategorien bearbeiten Erweiterte Optionen @@ -801,5 +802,6 @@ 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 Ihr Feedback wird auf der folgenden Wiki-Seite veröffentlicht: <a href=\"https://commons.wikimedia.org/wiki/Commons:Mobile_app/Feedback\">Commons:Mobile App/Feedback</a> diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 3c863df5e..82c764622 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -3,6 +3,7 @@ * Adehertogh * Ajeje Brazorf * Alno +* Assorted-Interests * BaRaN6161 TURK * BlueCamille * Cigaryno @@ -728,7 +729,7 @@ Les cartes de proximité doivent pouvoir lire l’ÉTAT DU TÉLÉPHONE pour fonctionner correctement Contributions de l’utilisateur : %s Réussites de l’utilisateur : %s - Afficher la page utilisateur + Afficher le profil de l\'utilisateur Modifier les descriptions Modifier les catégories Options avancées diff --git a/app/src/main/res/values-ku/strings.xml b/app/src/main/res/values-ku/strings.xml index 3cb0451e2..017f5ba6f 100644 --- a/app/src/main/res/values-ku/strings.xml +++ b/app/src/main/res/values-ku/strings.xml @@ -73,10 +73,10 @@ Têdikeve Ji kerema xwe piçek bisekine ... Xêra xwe hinek bisekine... - Têketin biserkeftî ye! - Têketin biser neket! + Têketin bi ser ket! + Têketin bi ser neket! Dosye nehat dîtin. Ji kerema xwe re dosyeyek din biceribîne. - Teyîdkirina nasnameyê bi ser neket, ji kerema xwe cardin têkeve + Teyîdkirina nasnameyê bi ser neket, ji kerema xwe cardin têkeve. Barkirin dest pê kir! %1$s hat barkirin! Bo barkirina xwe bibînî bitikîne. @@ -92,7 +92,7 @@ Parve bike Sernav (Hewce ye) Danasîn - Têketin têk çû + Têketin têk çû Bar bike Nav bide vê desteyê Bar bike @@ -143,7 +143,7 @@ Derkeve Derbas bike Têkeve - Tu bi rastî dixwazî têketinê derbas bikî? + Tu bi rastî dixwazî têketinê derbas bikî? Talîmat Wîkîdane Wîkîpediya diff --git a/app/src/main/res/values-lb/strings.xml b/app/src/main/res/values-lb/strings.xml index 669310059..af632d41f 100644 --- a/app/src/main/res/values-lb/strings.xml +++ b/app/src/main/res/values-lb/strings.xml @@ -479,7 +479,7 @@ Autorisatioun gëtt gebraucht Kontributioune vum Benotzer: %s Leeschtunge vum Benotzer: %s - Benotzersäit weisen + Benotzerprofil weisen Kategorien änneren Erweidert Optiounen Dir kënnt d\'Nobäi-Ufroen upassen. Falls Dir eng Feelermeldung kritt, setzt zeréck a probéiert nach eng Kéier. diff --git a/app/src/main/res/values-sr/strings.xml b/app/src/main/res/values-sr/strings.xml index ccc52792d..f05487488 100644 --- a/app/src/main/res/values-sr/strings.xml +++ b/app/src/main/res/values-sr/strings.xml @@ -662,7 +662,7 @@ Потребна је дозвола Доприноси корисника/це: %s Достигнућа корисника/це: %s - Прикажи корисничку страницу + Прикажи корисничку страницу Измени категорије Напредне опције Примени diff --git a/app/src/main/res/values-zh/strings.xml b/app/src/main/res/values-zh/strings.xml index 4c13f4a0b..edf8d1f95 100644 --- a/app/src/main/res/values-zh/strings.xml +++ b/app/src/main/res/values-zh/strings.xml @@ -734,7 +734,7 @@ 附近地图需要读取手机状态权限以正常运行 用户贡献:%s 用户成就:%s - 查看用户页面 + 查看用户个人资料 编辑描述 编辑分类 高级选项 From dbfe3b50f9b338d75c08829d69090674dd8944b6 Mon Sep 17 00:00:00 2001 From: "translatewiki.net" Date: Mon, 29 Jul 2024 14:02:27 +0200 Subject: [PATCH 012/464] Localisation updates from https://translatewiki.net. --- app/src/main/res/values-ar/strings.xml | 7 +++++-- app/src/main/res/values-ko/strings.xml | 27 +++++++++++++++++++++++--- app/src/main/res/values-nl/strings.xml | 5 +++-- app/src/main/res/values-ru/strings.xml | 2 +- 4 files changed, 33 insertions(+), 8 deletions(-) diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml index e11426077..bcf3c5538 100644 --- a/app/src/main/res/values-ar/strings.xml +++ b/app/src/main/res/values-ar/strings.xml @@ -23,6 +23,7 @@ * أَحمد * ترجمان05 * ديفيد +* عبد الإله صديقي * علاء * محمد أحمد عبد الفتاح * مشعل الحربي @@ -287,6 +288,7 @@ حول الإعدادات تعليقات + ردود الفعل عبر \"غيت هاب\" تسجيل الخروج مقدمة تعليمية إشعارات @@ -321,7 +323,7 @@ تجاوز تسجيل الدخول هل تريد حقا تخطي تسجيل الدخول؟ - يجب عليك تسجيل الدخول لرفع الصور في المستقبل. + سيتعين عليك في المستقبل تسجيل الدخول لتحميل الصور. الرجاء تسجيل الدخول لاستخدام هذه الميزة انسخ نص الويكي إلى الكليب بورد نص الويكي تم نسخه إلى الكليب بورد @@ -748,7 +750,7 @@ تحتاج الخرائط المجاورة لقراءة PHONE STATE لتعمل بشكل صحيح مساهمات المستخدم: %s إنجازات المستخدم: %s - اعرض صفحة المستخدم + اعرض صفحة المستخدم تحرير الصور تحرير الفئات خيارات متقدمة @@ -778,6 +780,7 @@ وضع علامة على أنه ليس للتحميل إلغاء علامة على أنه ليس للتحميل إلغاء علامة على أنه ليس للرفع + إلغاء علامة على أنه ليس للرفع عرض الصور بالفعل إخفاء الصور بالفعل لم يتم العثور على المزيد من الصور diff --git a/app/src/main/res/values-ko/strings.xml b/app/src/main/res/values-ko/strings.xml index 231240bd1..52bb0a7ac 100644 --- a/app/src/main/res/values-ko/strings.xml +++ b/app/src/main/res/values-ko/strings.xml @@ -76,6 +76,7 @@ 설정 공용에 업로드 + 업로드 진행 중 사용자 이름 비밀번호 공용 베타 계정으로 로그인합니다 @@ -89,6 +90,7 @@ 로그인 성공! 로그인 실패! 파일을 찾을 수 없습니다. 다른 파일을 사용해 주십시오. + 배터리 최적화를 끌까요? 인증 실패. 다시 로그인해 주십시오 올리기를 시작했습니다! 업로드 대기 중 (제한 연결 모드 활성화됨) @@ -140,6 +142,7 @@ 설정 가입하기 알찬 그림 + 사용자 지정 셀렉터 분류 동료평가 정보 @@ -204,6 +207,7 @@ 위치 권한 요청 중 확인 경고 + 중복 파일 이름이 있습니다 업로드 아니오 @@ -275,7 +279,7 @@ 건너뛰기 로그인 로그인을 건너뛰시겠습니까? - 나중에 사진을 업로드하려면 로그인해야 합니다. + 나중에 사진을 업로드하려면 로그인해야 합니다. 이 기능을 사용하려면 로그인해 주십시오 위키텍스트를 클립보드에 복사 위키텍스트를 클립보드에 복사했습니다 @@ -420,6 +424,8 @@ 무언가가 잘못되어, 저희는 당신의 업적을 가져올 수 없었습니다 캠페인 표시 진행되고 있는 캠페인 보기 + 허용 + 숨기기 이 기능에는 네트워크 연결이 필요합니다. 연결 설정을 확인해 주십시오. 이미지를 처리하는 동안 오류가 발생했습니다. 다시 시도해 주십시오! 편집을 위한 토큰을 가져옵니다 @@ -478,7 +484,7 @@ 실패 삭제를 요청하지 못했습니다. 셀카 - 흐림 + 완전히 흐림 보도 사진 인터넷상의 무작위 이미지 로고 @@ -545,9 +551,11 @@ 계속하기 일시 중단됨 책갈피 + 리더보드 순위: 순위 사용자 + 리더보드 아바타로 설정 아바타로 설정 중이니 기다려 주십시오 새 아바타를 설정하는 중 오류가 발생했습니다. 다시 시도해 주십시오 아바타로 설정 @@ -579,7 +587,11 @@ 위치 편집 이미지 위치 위치가 올바른지 확인 + 레이블 + 설명 항목 + 사용자 지정 셀렉터 + 이미지 없음 완료 뒤로 커스텀 사진 선택기에 오신 것을 환영합니다. @@ -587,9 +599,15 @@ 왼쪽 사진과 달리 오른쪽 사진에는 이미 업로드되었음을 나타내는 커먼즈 로고가 있습니다. \n이미지를 미리 보시려면 길게 터치하세요. 훌륭합니다 이 이미지는 이미 커먼즈에 업로드되었습니다. + 숨기기 + 최대: %1$d + 오류: 업로드 제한에 도달했습니다 + 더 알아보기 권한 필요 사용자의 기여: %s - 사용자 문서 보기 + 사용자 달성도: %s + 사용자 프로필 보기 + 묘사된 항목 편집하기 분류 편집 고급 옵션 적용 @@ -648,4 +666,7 @@ KML 파일을 저장 중 GPX 파일을 저장 중 다중 업로드에 대한 참고사항 + 이 항목에 관한 문제를 위키데이터에 보고하기 + 토론 + 기타 문제 또는 정보 (아래에 설명해 주십시오) diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index 3a76f4c8d..ba936d585 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -712,7 +712,7 @@ Kaarten in de buurt moeten TELEFOONSTATUS lezen om goed te kunnen werken Bijdragen door Gebruiker: %s Prestaties van Gebruiker: %s - Gebruikerspagina bekijken + Gebruikersprofiel bekijken Wijzig items Categorieën bewerken Geavanceerde opties @@ -743,7 +743,7 @@ Schakel de markering als niet geschikt voor uploaden uit Markeren als niet geschikt voor uploaden Markering als niet geschikt voor uploaden uitschakelen - Reeds behandelde afbeeldingen tonen + Reeds behandelde afbeeldingen weergeven Reeds behandelde afbeeldingen verbergen Geen afbeeldingen meer gevonden Deze afbeelding is al geüpload @@ -795,6 +795,7 @@ Een probleem met dit item melden aan Wikidata Voer enkele opmerkingen in Overleg + Schrijf iets over het item \'%1$s\'. Dit is openbaar zichtbaar. ‘%1$s’ bestaat niet meer, er kan nooit een foto van gemaakt worden. ‘%1$s’ bevindt zich ergens anders. Geef hieronder de juiste plaats aan en noteer, indien mogelijk, de juiste breedte- en lengtegraad. Ander probleem of andere informatie (verklaar hieronder). diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index d4fda660e..2d99c38be 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -749,7 +749,7 @@ Для правильной работы картам поблизости необходимо иметь доступ к СОСТОЯНИЮ ТЕЛЕФОНА. Вклад участника: %s Достижения участника: %s - Посмотреть страницу участника + Посмотреть профиль участника Редактировать описания Изменить категории Расширенные настройки From ba6c8fe8d04ced03ff4678e6962a005e6f1f45a4 Mon Sep 17 00:00:00 2001 From: "translatewiki.net" Date: Thu, 1 Aug 2024 14:01:42 +0200 Subject: [PATCH 013/464] Localisation updates from https://translatewiki.net. --- app/src/main/res/values-es/strings.xml | 7 +++++-- app/src/main/res/values-ia/strings.xml | 3 ++- app/src/main/res/values-sr/strings.xml | 4 +++- app/src/main/res/values-zh/strings.xml | 19 +++++++++++++++++++ 4 files changed, 29 insertions(+), 4 deletions(-) diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index a2936e197..6d18d34ed 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -16,6 +16,7 @@ * DannyS712 * Destinid10 2 * DiegoAmbrocio +* EmicraftNoob * Eulalio * Fewasser Traduce * Fitoschido @@ -316,7 +317,7 @@ Omitir Acceder ¿Quieres realmente omitir el inicio de sesión? - Deberías iniciar sesión para subir imágenes en el futuro. + Debes iniciar sesión para subir imágenes en el futuro. Por favor inicia sesion para usar esta característica Copia el wikitexto al portapapeles El wikitexto fue copiado al portapapeles @@ -734,7 +735,7 @@ Los mapas cercanos necesitan leer ESTADO DEL TELÉFONO para funcionar correctamente Contribuciones del usuario: %s Logros del usuario: %s - Ver página de usuario + Ver perfil de usuario Editar las descripciones Editar categorías Opciones avanzadas @@ -787,6 +788,8 @@ Se denegaron los permisos de almacenamiento No se puede compartir este elemento Se requieren permisos para la funcionalidad + Editar Imagen + Editar Ubicación ¡Ubicación actualizada! Quitar ubicación Eliminar el aviso de ubicación diff --git a/app/src/main/res/values-ia/strings.xml b/app/src/main/res/values-ia/strings.xml index 73b171464..c4404bce6 100644 --- a/app/src/main/res/values-ia/strings.xml +++ b/app/src/main/res/values-ia/strings.xml @@ -1,5 +1,6 @@ @@ -681,7 +682,7 @@ Le cartas a proximitate debe leger le STATO DEL TELEPHONO pro functionar correctemente Contributiones del usator: %s Realisationes del usator: %s - Visitar le pagina del usator + Vider le profilo del usator Modificar representationes Modificar categorias Optiones avantiate diff --git a/app/src/main/res/values-sr/strings.xml b/app/src/main/res/values-sr/strings.xml index f05487488..4bef698e2 100644 --- a/app/src/main/res/values-sr/strings.xml +++ b/app/src/main/res/values-sr/strings.xml @@ -673,7 +673,7 @@ Додај локацију Молимо уклоните из овог мејла све информације које не желите да делите јавно. Такође, имајте на уму да ће ваша имејл адреса са које објављујете и повезано име и профилна слика, бити јавно видљиви. Детаљи - Достигнућа су доступна само у продукционој верзији, проверите документацију за програмере. + Достигнућа су доступна само у продукционој верзији, проверите документацију за програмере. Табела лидера је доступна само у продукционој верзији, проверите документацију за програмере. Молимо вас да отпремате само слике које сте сами направили. Отпремаоци слика који крше ауторска права ће бити блокирани. Ово се такође односи на бета верзију. Хвала вам што тестирате апликацију! Молимо вас да поништите све информације које не жечите да делите јавно. @@ -722,6 +722,7 @@ Локација уклоњена! Захвали се аутору Ваша пријава је истекла. Молимо пријавите се поново. + Нема апликације за отварање GPX датотека Чување датотеке успешно Чување KML датотеке није успело. Чување GPX датотеке није успело. @@ -731,6 +732,7 @@ %d слика је одабрана %d слика је одабрано + Унесите коментар Разговор „%1$s” не постоји више, и није га могуће више сликати. diff --git a/app/src/main/res/values-zh/strings.xml b/app/src/main/res/values-zh/strings.xml index edf8d1f95..9df3a1e3b 100644 --- a/app/src/main/res/values-zh/strings.xml +++ b/app/src/main/res/values-zh/strings.xml @@ -14,6 +14,7 @@ * Dream Star.cn * Googology * GuoPC +* Huajing * Hydra * Ken418 * Kuailong @@ -636,6 +637,7 @@ 打开位置? 请开启定位服务,以便应用显示您当前的位置 附近需要启用位置才能正常工作 + 探索地图需要定位权限才能显示附近图片 您需要授予位置权限才能自动设置位置。 您是在同一地点拍摄这两张图片的吗?您想要使用右侧图片的纬度/经度吗? 加载更多 @@ -724,6 +726,10 @@ 右边的图片与左边的不同,它具有已上传至维基共享资源的标志。\n点击并长按来预览图像。 棒极了 此图像已上传至维基共享资源。 + 出于技术原因,该应用无法可靠地一次性上传超过%1$d张照片。%2$d张已经超过%1$d张的上传限制。 + 关闭 + 最大:%1$d + 错误:超出上传限制 此图像将会进入维基爱古迹竞赛 显示古迹 维基爱古迹的月份! @@ -787,12 +793,15 @@ 存储权限被拒绝 无法分享此项目 功能需要权限 + 了解如何写出有用的描述 + 了解如何写出有用的注释 查看您的成果 编辑图片 编辑位置 位置已更新! 移除位置 移除位置警告 + 定位信息使图片更加有用、更容易被找到。您真的希望从这张图片中删除定位信息吗? 位置已移除! 感谢作者 向作者发送感谢时出错。 @@ -809,4 +818,14 @@ 已选择%d个图像 已选择%d个图像 + 请记住,每次多图片上传会为其中的所有图片标注相同的分类和描述。如果这些图片并不共享同样的描述和分类,请分别进行多次上传。 + 关于多图片上传的提醒 + 向维基数据报告关于该项的问题 + 请输入一些评论。 + 讨论 + 请写一些关于项目“%1$s”的信息。所写的内容是公开可见的。 + “%1$s”已不再存在,无法拍摄它的照片。 + “%1$s”位于一个不同的位置。请在下方给出正确的位置,可以的话请填写正确的经纬度。 + 其他问题或信息(请在下方解释)。 + 您的反馈已经发布在以下wiki页面:<a href=\"https://commons.wikimedia.org/wiki/Commons:Mobile_app/Feedback\">Commons:Mobile app/Feedback</a> From 2d63f351ed51c5fd21c9128f649ba211caaf4e7a Mon Sep 17 00:00:00 2001 From: Kanahia <114223204+kanahia1@users.noreply.github.com> Date: Sun, 4 Aug 2024 06:05:09 +0530 Subject: [PATCH 014/464] Made Split to Nearby Query into a fast query for coordinates + a details query for each pin (#5731) * Splitted the query * Made changes to the query * Improvised query * Improvised query by dividing in the batches * Fixed failing tests * Improved batches * Improved sorting * Fixes issue caused by search this area button * Fixed failing tests * Fixed unnecessary reloads on onResume * Fixed few pins not loading on changing apps * Improved zoom level and fixed the pins not loading from the center * Removed toggle chips and changed pin's color * Fixed wikidata url * Fixed unit tests * Implemented retry with delay of 5000ms * Fixed exception issue and pins issue * Added change color icon to pin * Improved pin clicking * Removed search this area button * Implemented caching of places * Fixed unit test * Factorized methods * Changed primary key from location to entity id * Fixed tests * Fixed conflicts * Fixed unit test * Fixed unit test * Fixed the bug * Fixed issue with pin loading on the first launch * Updated javadocs * Temporary commit - only for testing * Replaced Temporary commit * Temporary commit - Added jcenter * Made minor changes * Fixed unit tests * Fixed unit tests * Fixed minor bug --- .../locations/BookmarkLocationsDao.java | 82 +- .../fr/free/nrw/commons/db/AppDatabase.kt | 5 +- .../fr/free/nrw/commons/db/Converters.java | 14 + .../commons/di/CommonsApplicationModule.java | 6 + .../commons/mwapi/OkHttpJsonApiClient.java | 48 + .../nrw/commons/nearby/NearbyController.java | 11 + .../free/nrw/commons/nearby/NearbyPlaces.java | 16 + .../fr/free/nrw/commons/nearby/Place.java | 169 +++- .../fr/free/nrw/commons/nearby/PlaceDao.java | 45 + .../commons/nearby/PlacesLocalDataSource.java | 39 + .../nrw/commons/nearby/PlacesRepository.java | 41 + .../NearbyParentFragmentContract.java | 9 +- .../fragments/NearbyParentFragment.java | 839 ++++++++++-------- .../nrw/commons/nearby/model/ResultTuple.kt | 2 +- .../NearbyParentFragmentPresenter.java | 46 +- .../fr/free/nrw/commons/utils/PlaceUtils.java | 3 +- .../res/drawable/ic_custom_map_marker.xml | 44 +- .../ic_custom_map_marker_grey_bookmarked.xml | 2 +- .../drawable/ic_custom_map_marker_purple.xml | 2 +- ...ic_custom_map_marker_purple_bookmarked.xml | 2 +- .../res/drawable/ic_custom_map_marker_red.xml | 23 + .../ic_custom_map_marker_red_bookmarked.xml | 29 + .../main/res/layout/bottom_sheet_details.xml | 56 +- app/src/main/res/layout/filter_chip_view.xml | 50 -- .../res/layout/fragment_nearby_parent.xml | 19 +- .../res/layout/nearby_filter_all_items.xml | 24 +- app/src/main/res/values/strings.xml | 1 + .../main/resources/queries/query_for_item.rq | 64 ++ .../queries/rectangle_query_for_nearby.rq | 43 - .../rectangle_query_for_nearby_monuments.rq | 43 - .../fr/free/nrw/commons/ModelFunctions.kt | 5 +- .../locations/BookMarkLocationDaoTest.kt | 69 +- .../BookmarkLocationControllerTest.kt | 5 +- .../BookmarkLocationFragmentUnitTests.kt | 3 +- .../commons/nearby/NearbyControllerTest.kt | 30 +- .../NearbyParentFragmentPresenterTest.kt | 27 +- .../nearby/NearbyParentFragmentUnitTest.kt | 42 - .../upload/UploadMediaPresenterTest.kt | 2 +- build.gradle | 1 + 39 files changed, 1147 insertions(+), 814 deletions(-) create mode 100644 app/src/main/java/fr/free/nrw/commons/nearby/PlaceDao.java create mode 100644 app/src/main/java/fr/free/nrw/commons/nearby/PlacesLocalDataSource.java create mode 100644 app/src/main/java/fr/free/nrw/commons/nearby/PlacesRepository.java create mode 100644 app/src/main/res/drawable/ic_custom_map_marker_red.xml create mode 100644 app/src/main/res/drawable/ic_custom_map_marker_red_bookmarked.xml delete mode 100644 app/src/main/res/layout/filter_chip_view.xml create mode 100644 app/src/main/resources/queries/query_for_item.rq 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 a55ae5e0d..850b953e9 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 @@ -46,11 +46,11 @@ public class BookmarkLocationsDao { ContentProviderClient db = clientProvider.get(); try { cursor = db.query( - BookmarkLocationsContentProvider.BASE_URI, - Table.ALL_FIELDS, - null, - new String[]{}, - null); + BookmarkLocationsContentProvider.BASE_URI, + Table.ALL_FIELDS, + null, + new String[]{}, + null); while (cursor != null && cursor.moveToNext()) { items.add(fromCursor(cursor)); } @@ -126,11 +126,11 @@ public class BookmarkLocationsDao { ContentProviderClient db = clientProvider.get(); try { cursor = db.query( - BookmarkLocationsContentProvider.BASE_URI, - Table.ALL_FIELDS, - Table.COLUMN_NAME + "=?", - new String[]{bookmarkLocation.name}, - null); + BookmarkLocationsContentProvider.BASE_URI, + Table.ALL_FIELDS, + Table.COLUMN_NAME + "=?", + new String[]{bookmarkLocation.name}, + null); if (cursor != null && cursor.moveToFirst()) { return true; } @@ -149,7 +149,7 @@ public class BookmarkLocationsDao { @NonNull Place fromCursor(final Cursor cursor) { final LatLng location = new LatLng(cursor.getDouble(cursor.getColumnIndex(Table.COLUMN_LAT)), - cursor.getDouble(cursor.getColumnIndex(Table.COLUMN_LONG)), 1F); + cursor.getDouble(cursor.getColumnIndex(Table.COLUMN_LONG)), 1F); final Sitelinks.Builder builder = new Sitelinks.Builder(); builder.setWikipediaLink(cursor.getString(cursor.getColumnIndex(Table.COLUMN_WIKIPEDIA_LINK))); @@ -207,40 +207,40 @@ public class BookmarkLocationsDao { // NOTE! KEEP IN SAME ORDER AS THEY ARE DEFINED UP THERE. HELPS HARD CODE COLUMN INDICES. public static final String[] ALL_FIELDS = { - COLUMN_NAME, - COLUMN_LANGUAGE, - COLUMN_DESCRIPTION, - COLUMN_CATEGORY, - COLUMN_LABEL_TEXT, - COLUMN_LABEL_ICON, - COLUMN_LAT, - COLUMN_LONG, - COLUMN_IMAGE_URL, - COLUMN_WIKIPEDIA_LINK, - COLUMN_WIKIDATA_LINK, - COLUMN_COMMONS_LINK, - COLUMN_PIC, - COLUMN_EXISTS, + COLUMN_NAME, + COLUMN_LANGUAGE, + COLUMN_DESCRIPTION, + COLUMN_CATEGORY, + COLUMN_LABEL_TEXT, + COLUMN_LABEL_ICON, + COLUMN_LAT, + COLUMN_LONG, + COLUMN_IMAGE_URL, + COLUMN_WIKIPEDIA_LINK, + COLUMN_WIKIDATA_LINK, + COLUMN_COMMONS_LINK, + COLUMN_PIC, + COLUMN_EXISTS, }; static final String DROP_TABLE_STATEMENT = "DROP TABLE IF EXISTS " + TABLE_NAME; static final String CREATE_TABLE_STATEMENT = "CREATE TABLE " + TABLE_NAME + " (" - + COLUMN_NAME + " STRING PRIMARY KEY," - + COLUMN_LANGUAGE + " STRING," - + COLUMN_DESCRIPTION + " STRING," - + COLUMN_CATEGORY + " STRING," - + COLUMN_LABEL_TEXT + " STRING," - + COLUMN_LABEL_ICON + " INTEGER," - + COLUMN_LAT + " DOUBLE," - + COLUMN_LONG + " DOUBLE," - + COLUMN_IMAGE_URL + " STRING," - + COLUMN_WIKIPEDIA_LINK + " STRING," - + COLUMN_WIKIDATA_LINK + " STRING," - + COLUMN_COMMONS_LINK + " STRING," - + COLUMN_PIC + " STRING," - + COLUMN_EXISTS + " STRING" - + ");"; + + COLUMN_NAME + " STRING PRIMARY KEY," + + COLUMN_LANGUAGE + " STRING," + + COLUMN_DESCRIPTION + " STRING," + + COLUMN_CATEGORY + " STRING," + + COLUMN_LABEL_TEXT + " STRING," + + COLUMN_LABEL_ICON + " INTEGER," + + COLUMN_LAT + " DOUBLE," + + COLUMN_LONG + " DOUBLE," + + COLUMN_IMAGE_URL + " STRING," + + COLUMN_WIKIPEDIA_LINK + " STRING," + + COLUMN_WIKIDATA_LINK + " STRING," + + COLUMN_COMMONS_LINK + " STRING," + + COLUMN_PIC + " STRING," + + COLUMN_EXISTS + " STRING" + + ");"; public static void onCreate(SQLiteDatabase db) { db.execSQL(CREATE_TABLE_STATEMENT); @@ -308,4 +308,4 @@ public class BookmarkLocationsDao { } } } -} +} \ No newline at end of file diff --git a/app/src/main/java/fr/free/nrw/commons/db/AppDatabase.kt b/app/src/main/java/fr/free/nrw/commons/db/AppDatabase.kt index 6d63e58a1..594f087c8 100644 --- a/app/src/main/java/fr/free/nrw/commons/db/AppDatabase.kt +++ b/app/src/main/java/fr/free/nrw/commons/db/AppDatabase.kt @@ -6,6 +6,8 @@ import androidx.room.TypeConverters import fr.free.nrw.commons.contributions.Contribution import fr.free.nrw.commons.contributions.ContributionDao import fr.free.nrw.commons.customselector.database.* +import fr.free.nrw.commons.nearby.Place +import fr.free.nrw.commons.nearby.PlaceDao import fr.free.nrw.commons.review.ReviewDao import fr.free.nrw.commons.review.ReviewEntity import fr.free.nrw.commons.upload.depicts.Depicts @@ -15,10 +17,11 @@ import fr.free.nrw.commons.upload.depicts.DepictsDao * The database for accessing the respective DAOs * */ -@Database(entities = [Contribution::class, Depicts::class, UploadedStatus::class, NotForUploadStatus::class, ReviewEntity::class], version = 16, exportSchema = false) +@Database(entities = [Contribution::class, Depicts::class, UploadedStatus::class, NotForUploadStatus::class, ReviewEntity::class, Place::class], version = 18, exportSchema = false) @TypeConverters(Converters::class) abstract class AppDatabase : RoomDatabase() { abstract fun contributionDao(): ContributionDao + abstract fun PlaceDao(): PlaceDao abstract fun DepictsDao(): DepictsDao; abstract fun UploadedStatusDao(): UploadedStatusDao; abstract fun NotForUploadStatusDao(): NotForUploadStatusDao diff --git a/app/src/main/java/fr/free/nrw/commons/db/Converters.java b/app/src/main/java/fr/free/nrw/commons/db/Converters.java index 6f0c8c1fc..a70cdc815 100644 --- a/app/src/main/java/fr/free/nrw/commons/db/Converters.java +++ b/app/src/main/java/fr/free/nrw/commons/db/Converters.java @@ -8,8 +8,10 @@ import fr.free.nrw.commons.CommonsApplication; import fr.free.nrw.commons.contributions.ChunkInfo; import fr.free.nrw.commons.di.ApplicationlessInjection; import fr.free.nrw.commons.location.LatLng; +import fr.free.nrw.commons.nearby.Sitelinks; import fr.free.nrw.commons.upload.WikidataPlace; import fr.free.nrw.commons.upload.structure.depictions.DepictedItem; +import java.lang.reflect.Type; import java.util.Date; import java.util.List; import java.util.Map; @@ -134,6 +136,18 @@ public class Converters { return readObjectWithTypeToken(depictedItems, new TypeToken>() {}); } + @TypeConverter + public static Sitelinks sitelinksFromString(String value) { + Type type = new TypeToken() {}.getType(); + return new Gson().fromJson(value, type); + } + + @TypeConverter + public static String fromSitelinks(Sitelinks sitelinks) { + Gson gson = new Gson(); + return gson.toJson(sitelinks); + } + private static String writeObjectToString(Object object) { return object == null ? null : getGson().toJson(object); } diff --git a/app/src/main/java/fr/free/nrw/commons/di/CommonsApplicationModule.java b/app/src/main/java/fr/free/nrw/commons/di/CommonsApplicationModule.java index abf7c6fb1..cd7324c63 100644 --- a/app/src/main/java/fr/free/nrw/commons/di/CommonsApplicationModule.java +++ b/app/src/main/java/fr/free/nrw/commons/di/CommonsApplicationModule.java @@ -24,6 +24,7 @@ import fr.free.nrw.commons.data.DBOpenHelper; import fr.free.nrw.commons.db.AppDatabase; import fr.free.nrw.commons.kvstore.JsonKvStore; import fr.free.nrw.commons.location.LocationServiceManager; +import fr.free.nrw.commons.nearby.PlaceDao; import fr.free.nrw.commons.review.ReviewDao; import fr.free.nrw.commons.settings.Prefs; import fr.free.nrw.commons.upload.UploadController; @@ -275,6 +276,11 @@ public class CommonsApplicationModule { return appDatabase.contributionDao(); } + @Provides + public PlaceDao providesPlaceDao(AppDatabase appDatabase) { + return appDatabase.PlaceDao(); + } + /** * Get the reference of DepictsDao class. */ diff --git a/app/src/main/java/fr/free/nrw/commons/mwapi/OkHttpJsonApiClient.java b/app/src/main/java/fr/free/nrw/commons/mwapi/OkHttpJsonApiClient.java index 317d1ebc0..8d6b74231 100644 --- a/app/src/main/java/fr/free/nrw/commons/mwapi/OkHttpJsonApiClient.java +++ b/app/src/main/java/fr/free/nrw/commons/mwapi/OkHttpJsonApiClient.java @@ -397,6 +397,54 @@ public class OkHttpJsonApiClient { throw new Exception(response.message()); } + /** + * Retrieves a list of places based on the provided list of places and language. + * + * @param placeList A list of Place objects for which to fetch information. + * @param language The language code to use for the query. + * @return A list of Place objects with additional information retrieved from Wikidata, or null + * if an error occurs. + * @throws IOException If there is an issue with reading the resource file or executing the HTTP + * request. + */ + @Nullable + public List getPlaces( + final List placeList, final String language) throws IOException { + final String wikidataQuery = FileUtils.readFromResource("/queries/query_for_item.rq"); + String qids = ""; + for (final Place place : placeList) { + qids += "\n" + ("wd:" + place.getWikiDataEntityId()); + } + final String query = wikidataQuery + .replace("${ENTITY}", qids) + .replace("${LANG}", language); + final HttpUrl.Builder urlBuilder = HttpUrl + .parse(sparqlQueryUrl) + .newBuilder() + .addQueryParameter("query", query) + .addQueryParameter("format", "json"); + + final Request request = new Request.Builder() + .url(urlBuilder.build()) + .build(); + + try (Response response = okHttpClient.newCall(request).execute()) { + if (response.isSuccessful()) { + final String json = response.body().string(); + final NearbyResponse nearbyResponse = gson.fromJson(json, NearbyResponse.class); + final List bindings = nearbyResponse.getResults().getBindings(); + final List places = new ArrayList<>(); + for (final NearbyResultItem item : bindings) { + final Place placeFromNearbyItem = Place.from(item); + places.add(placeFromNearbyItem); + } + return places; + } else { + throw new IOException("Unexpected response code: " + response.code()); + } + } + } + /** * Make API Call to get Places * diff --git a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyController.java b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyController.java index d650f2869..7bb311961 100644 --- a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyController.java +++ b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyController.java @@ -131,6 +131,17 @@ public class NearbyController extends MapController { ); } + /** + * Retrieves a list of places based on the provided list of places and language. + * + * @param placeList A list of Place objects for which to fetch information. + * @return A list of Place objects obtained from the Wikidata query. + * @throws Exception If an error occurs during the retrieval process. + */ + public List getPlaces(List placeList) throws Exception { + return nearbyPlaces.getPlaces(placeList, Locale.getDefault().getLanguage()); + } + public static LatLng calculateNorthEast(double latitude, double longitude, double distance) { double lat1 = Math.toRadians(latitude); double deltaLat = distance * 0.008; diff --git a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyPlaces.java b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyPlaces.java index 787cc35e2..46f0a2a9e 100644 --- a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyPlaces.java +++ b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyPlaces.java @@ -120,6 +120,22 @@ public class NearbyPlaces { customQuery); } + /** + * Retrieves a list of places based on the provided list of places and language. + * + * This method fetches place information from a Wikidata query using the specified language. + * + * @param placeList A list of Place objects for which to fetch information. + * @param lang The language code to use for the query. + * @return A list of Place objects obtained from the Wikidata query. + * @throws Exception If an error occurs during the retrieval process. + */ + public List getPlaces(final List placeList, + final String lang) throws Exception { + return okHttpJsonApiClient + .getPlaces(placeList, lang); + } + /** * Runs the Wikidata query to retrieve the KML String * diff --git a/app/src/main/java/fr/free/nrw/commons/nearby/Place.java b/app/src/main/java/fr/free/nrw/commons/nearby/Place.java index fdd836390..7732669bc 100644 --- a/app/src/main/java/fr/free/nrw/commons/nearby/Place.java +++ b/app/src/main/java/fr/free/nrw/commons/nearby/Place.java @@ -3,34 +3,38 @@ package fr.free.nrw.commons.nearby; import android.net.Uri; import android.os.Parcel; import android.os.Parcelable; - +import androidx.annotation.NonNull; import androidx.annotation.Nullable; - -import org.apache.commons.lang3.StringUtils; - +import androidx.room.Entity; +import androidx.room.PrimaryKey; import fr.free.nrw.commons.location.LatLng; import fr.free.nrw.commons.nearby.model.NearbyResultItem; +import fr.free.nrw.commons.utils.LocationUtils; import fr.free.nrw.commons.utils.PlaceUtils; +import org.apache.commons.lang3.StringUtils; import timber.log.Timber; /** * A single geolocated Wikidata item */ +@Entity(tableName = "place") public class Place implements Parcelable { - public final String language; - public final String name; - private final Label label; - private final String longDescription; - public final LatLng location; - private final String category; - public final String pic; + public String language; + public String name; + private Label label; + private String longDescription; + public LatLng location; + @PrimaryKey @NonNull + public String entityID; + private String category; + public String pic; // exists boolean will tell whether the place exists or not, // For a place to be existing both destroyed and endTime property should be null but it is also not necessary for a non-existing place to have both properties either one property is enough (in such case that not given property will be considered as null). - public final Boolean exists; + public Boolean exists; public String distance; - public final Sitelinks siteLinks; + public Sitelinks siteLinks; private boolean isMonument; private String thumb; @@ -44,9 +48,11 @@ public class Place implements Parcelable { pic = null; exists = null; siteLinks = null; + entityID = null; } - public Place(String language,String name, Label label, String longDescription, LatLng location, String category, Sitelinks siteLinks, String pic, Boolean exists) { + public Place(String language, String name, Label label, String longDescription, LatLng location, + String category, Sitelinks siteLinks, String pic, Boolean exists, String entityID) { this.language = language; this.name = name; this.label = label; @@ -54,21 +60,37 @@ public class Place implements Parcelable { this.location = location; this.category = category; this.siteLinks = siteLinks; - this.pic = (pic == null) ? "":pic; + this.pic = (pic == null) ? "" : pic; + this.exists = exists; + this.entityID = entityID; + } + + public Place(String language, String name, Label label, String longDescription, LatLng location, + String category, Sitelinks siteLinks, String pic, Boolean exists) { + this.language = language; + this.name = name; + this.label = label; + this.longDescription = longDescription; + this.location = location; + this.category = category; + this.siteLinks = siteLinks; + this.pic = (pic == null) ? "" : pic; this.exists = exists; } - public Place(String name, String longDescription, LatLng location, String category, Sitelinks siteLinks, String pic, String thumb) { + public Place(String name, String longDescription, LatLng location, String category, + Sitelinks siteLinks, String pic, String thumb, String entityID) { this.name = name; this.longDescription = longDescription; this.location = location; this.category = category; this.siteLinks = siteLinks; - this.pic = (pic == null) ? "":pic; + this.pic = (pic == null) ? "" : pic; this.thumb = thumb; this.language = null; this.label = null; this.exists = true; + this.entityID = entityID; } public Place(Parcel in) { @@ -80,19 +102,27 @@ public class Place implements Parcelable { this.category = in.readString(); this.siteLinks = in.readParcelable(Sitelinks.class.getClassLoader()); String picString = in.readString(); - this.pic = (picString == null) ? "":picString; + this.pic = (picString == null) ? "" : picString; String existString = in.readString(); this.exists = Boolean.parseBoolean(existString); this.isMonument = in.readInt() == 1; + this.entityID = in.readString(); } + public static Place from(NearbyResultItem item) { String itemClass = item.getClassName().getValue(); String classEntityId = ""; - if(!StringUtils.isBlank(itemClass)) { + if (!StringUtils.isBlank(itemClass)) { classEntityId = itemClass.replace("http://www.wikidata.org/entity/", ""); } + String entityId = ""; + if (!StringUtils.isBlank(item.getItem().getValue())){ + entityId = item.getItem().getValue().replace("http://www.wikidata.org/entity/", ""); + } // Set description when not null and not empty - String description = (item.getDescription().getValue() != null && !item.getDescription().getValue().isEmpty()) ? item.getDescription().getValue() : ""; + String description = + (item.getDescription().getValue() != null && !item.getDescription().getValue() + .isEmpty()) ? item.getDescription().getValue() : ""; // When description is "?" but we have a valid label, just use the label. So replace "?" by "" in description description = (description.equals("?") && (item.getLabel().getValue() != null @@ -104,8 +134,8 @@ public class Place implements Parcelable { */ description = ((item.getLabel().getValue() != null && !item.getLabel().getValue().isEmpty()) ? item.getLabel().getValue() - + ((description != null && !description.isEmpty()) - ? " (" + description + ")" : "") + + ((description != null && !description.isEmpty()) + ? " (" + description + ")" : "") : description); return new Place( item.getLabel().getLanguage(), @@ -121,11 +151,12 @@ public class Place implements Parcelable { .build(), item.getPic().getValue(), // Checking if the place exists or not - (item.getDestroyed().getValue() == "") && (item.getEndTime().getValue() == "")); + (item.getDestroyed().getValue() == "") && (item.getEndTime().getValue() == ""), entityId); } /** * Gets the language of the caption ie name. + * * @return language */ public String getLanguage() { @@ -134,12 +165,27 @@ public class Place implements Parcelable { /** * Gets the name of the place + * * @return name */ - public String getName() { return name; } + public String getName() { + return name; + } - /** Gets the label of the place - * e.g. "building", "city", etc + /** + * Gets the distance between place and curLatLng + * + * @param curLatLng + * @return name + */ + public Double getDistanceInDouble(LatLng curLatLng) { + return LocationUtils.calculateDistance(curLatLng.getLatitude(), curLatLng.getLongitude(), + getLocation().getLatitude(), getLocation().getLongitude()); + } + + /** + * Gets the label of the place e.g. "building", "city", etc + * * @return label */ public Label getLabel() { @@ -152,6 +198,7 @@ public class Place implements Parcelable { /** * Gets the long description of the place + * * @return long description */ public String getLongDescription() { @@ -160,12 +207,16 @@ public class Place implements Parcelable { /** * Gets the Commons category of the place + * * @return Commons category */ - public String getCategory() {return category; } + public String getCategory() { + return category; + } /** * Sets the distance of the place from the user's location + * * @param distance distance of place from user's location */ public void setDistance(String distance) { @@ -174,6 +225,7 @@ public class Place implements Parcelable { /** * Extracts the entity id from the wikidata link + * * @return returns the entity id if wikidata link destroyed */ @Nullable @@ -189,6 +241,7 @@ public class Place implements Parcelable { /** * Checks if the Wikidata item has a Wikipedia page associated with it + * * @return true if there is a Wikipedia link */ public boolean hasWikipediaLink() { @@ -197,6 +250,7 @@ public class Place implements Parcelable { /** * Checks if the Wikidata item has a Wikidata page associated with it + * * @return true if there is a Wikidata link */ public boolean hasWikidataLink() { @@ -205,6 +259,7 @@ public class Place implements Parcelable { /** * Checks if the Wikidata item has a Commons page associated with it + * * @return true if there is a Commons link */ public boolean hasCommonsLink() { @@ -213,6 +268,7 @@ public class Place implements Parcelable { /** * Sets that this place in nearby is a WikiData monument + * * @param monument */ public void setMonument(final boolean monument) { @@ -221,6 +277,7 @@ public class Place implements Parcelable { /** * Returns if this place is a WikiData monument + * * @return */ public boolean isMonument() { @@ -229,6 +286,7 @@ public class Place implements Parcelable { /** * Check if we already have the exact same Place + * * @param o Place being tested * @return true if name and location of Place is exactly the same */ @@ -250,17 +308,18 @@ public class Place implements Parcelable { @Override public String toString() { return "Place{" + - "name='" + name + '\'' + - ", lang='" + language + '\'' + - ", label='" + label + '\'' + - ", longDescription='" + longDescription + '\'' + - ", location='" + location + '\'' + - ", category='" + category + '\'' + - ", distance='" + distance + '\'' + - ", siteLinks='" + siteLinks.toString() + '\'' + - ", pic='" + pic + '\'' + - ", exists='" + exists.toString() + '\'' + - '}'; + "name='" + name + '\'' + + ", lang='" + language + '\'' + + ", label='" + label + '\'' + + ", longDescription='" + longDescription + '\'' + + ", location='" + location + '\'' + + ", category='" + category + '\'' + + ", distance='" + distance + '\'' + + ", siteLinks='" + siteLinks.toString() + '\'' + + ", pic='" + pic + '\'' + + ", exists='" + exists.toString() + '\'' + + ", entityID='" + entityID + '\'' + + '}'; } @Override @@ -278,6 +337,7 @@ public class Place implements Parcelable { dest.writeString(category); dest.writeParcelable(siteLinks, 0); dest.writeString(pic); + dest.writeString(entityID); dest.writeString(exists.toString()); dest.writeInt(isMonument ? 1 : 0); } @@ -298,7 +358,40 @@ public class Place implements Parcelable { return thumb; } + /** + * Sets the thumbnail URL for the place. + * + * @param thumb the thumbnail URL to set + */ public void setThumb(String thumb) { this.thumb = thumb; } + + /** + * Sets the label for the place. + * + * @param label the label to set + */ + public void setLabel(Label label) { + this.label = label; + } + + /** + * Sets the long description for the place. + * + * @param longDescription the long description to set + */ + public void setLongDescription(String longDescription) { + this.longDescription = longDescription; + } + + /** + * Sets the Commons category for the place. + * + * @param category the category to set + */ + public void setCategory(String category) { + this.category = category; + } + } 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 new file mode 100644 index 000000000..f18b80004 --- /dev/null +++ b/app/src/main/java/fr/free/nrw/commons/nearby/PlaceDao.java @@ -0,0 +1,45 @@ +package fr.free.nrw.commons.nearby; + +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; + +/** + * Data Access Object (DAO) for accessing the Place entity in the database. + * This class provides methods for storing and retrieving Place objects, + * utilized for the caching of places in the Nearby Map feature. + */ +@Dao +public abstract class PlaceDao { + + /** + * Inserts a Place object into the database. + * If a conflict occurs, the existing entry will be replaced. + * + * @param place The Place object to be inserted. + */ + @Insert(onConflict = OnConflictStrategy.REPLACE) + public abstract void saveSynchronous(Place place); + + /** + * Retrieves a Place object from the database based on the provided entity ID. + * + * @param entity The entity ID of the Place to be retrieved. + * @return The Place object with the specified entity ID. + */ + @Query("SELECT * from place WHERE entityID=:entity") + public abstract Place getPlace(String entity); + + /** + * Saves a Place object asynchronously into the database. + */ + public Completable save(final Place place) { + return Completable + .fromAction(() -> { + saveSynchronous(place); + }); + } +} 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 new file mode 100644 index 000000000..8de437c82 --- /dev/null +++ b/app/src/main/java/fr/free/nrw/commons/nearby/PlacesLocalDataSource.java @@ -0,0 +1,39 @@ +package fr.free.nrw.commons.nearby; + +import fr.free.nrw.commons.location.LatLng; +import io.reactivex.Completable; +import javax.inject.Inject; + +/** + * The LocalDataSource class for Places + */ +public class PlacesLocalDataSource { + + private final PlaceDao placeDao; + + @Inject + public PlacesLocalDataSource( + final PlaceDao placeDao) { + this.placeDao = placeDao; + } + + /** + * Fetches a Place object from the database based on the provided entity ID. + * + * @param entityID The entity ID of the Place to be retrieved. + * @return The Place object with the specified entity ID. + */ + public Place fetchPlace(String entityID){ + return placeDao.getPlace(entityID); + } + + /** + * Saves a Place object asynchronously into the database. + * + * @param place The Place object to be saved. + * @return A Completable that completes once the save operation is done. + */ + public Completable savePlace(Place place) { + return placeDao.save(place); + } +} 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 new file mode 100644 index 000000000..85e964ddb --- /dev/null +++ b/app/src/main/java/fr/free/nrw/commons/nearby/PlacesRepository.java @@ -0,0 +1,41 @@ +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 javax.inject.Inject; + +/** + * The PlacesRepository class acts as a repository for Place entities. + * It interacts with the PlacesLocalDataSource to perform database operations. + */ +public class PlacesRepository { + + private PlacesLocalDataSource localDataSource; + + @Inject + public PlacesRepository(PlacesLocalDataSource localDataSource) { + this.localDataSource = localDataSource; + } + + /** + * Saves a Place object asynchronously into the database. + * + * @param place The Place object to be saved. + * @return A Completable that completes once the save operation is done. + */ + public Completable save(Place place){ + return localDataSource.savePlace(place); + } + + /** + * Fetches a Place object from the database based on the provided entity ID. + * + * @param entityID The entity ID of the Place to be retrieved. + * @return The Place object with the specified entity ID. + */ + public Place fetchPlace(String entityID){ + return localDataSource.fetchPlace(entityID); + } + +} diff --git a/app/src/main/java/fr/free/nrw/commons/nearby/contract/NearbyParentFragmentContract.java b/app/src/main/java/fr/free/nrw/commons/nearby/contract/NearbyParentFragmentContract.java index df999dbf0..bcf8d8421 100644 --- a/app/src/main/java/fr/free/nrw/commons/nearby/contract/NearbyParentFragmentContract.java +++ b/app/src/main/java/fr/free/nrw/commons/nearby/contract/NearbyParentFragmentContract.java @@ -42,10 +42,6 @@ public interface NearbyParentFragmentContract { void hideBottomDetailsSheet(); - void addSearchThisAreaButtonAction(); - - void setSearchThisAreaButtonVisibility(boolean isVisible); - void setProgressBarVisibility(boolean isVisible); boolean isDetailsBottomSheetVisible(); @@ -76,8 +72,7 @@ public interface NearbyParentFragmentContract { void filterOutAllMarkers(); - void filterMarkersByLabels(List