diff --git a/.github/ISSUE_TEMPLATE/bug-report.yml b/.github/ISSUE_TEMPLATE/bug-report.yml
index a4682fd3c..dcbba0597 100644
--- a/.github/ISSUE_TEMPLATE/bug-report.yml
+++ b/.github/ISSUE_TEMPLATE/bug-report.yml
@@ -70,7 +70,7 @@ body:
required: false
- type: textarea
attributes:
- label: Screen-shots
+ label: Screenshots
description: Add screenshots related to the issue (if available). Can be created by pressing the Volume Down and Power Button at the same time on Android 4.0 and higher.
validations:
required: false
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 72fda2f5d..575aa6a32 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,31 @@
# Wikimedia Commons for Android
+## v6.0.2
+
+### What's changed
+* Addressed a bug that prevented the keyboard from appearing in various text fields, such as on the upload wizard
+* Links in the "File usages" list are now clickable and will take you to the correct page.
+* Titles for file usages are now clearer and easier to understand
+* Bug fixes and stability improvements
+
+## v6.0.1
+
+### What's changed
+* The app now supports Android 15 with an improved user interface
+* Enhanced Nearby with robust and more reliable labels
+* Bug fixes and stability improvements
+
+## v5.6.1
+
+### What's changed
+* The app no longer uploads images to Wikidata if one exists already for a given item
+* File usage displays correctly now
+* No more infinite circular progress bar on nominating an image for deletion
+* Enhanced location updates while using GPS
+* Author/uploader names are now available in Media Details for Commons licensing compliance
+* Improved usage of popups in Nearby
+* Bug fixes and stability improvements
+
## v5.5.0
### What's changed
diff --git a/README.md b/README.md
index 0b31ff5be..37f1a7872 100644
--- a/README.md
+++ b/README.md
@@ -29,11 +29,12 @@ Thank you all for your work!
| [
misaochan](https://github.com/misaochan) | [
translatewiki](https://github.com/translatewiki) | [
neslihanturan](https://github.com/neslihanturan) | [
yuvipanda](https://github.com/yuvipanda) | [
nicolas-raoul](https://github.com/nicolas-raoul) |
| :---: | :---: | :---: | :---: | :---: |
-| [
domdomegg](https://github.com/domdomegg) | [
maskaravivek](https://github.com/maskaravivek) | [
psh](https://github.com/psh) | [
madhurgupta10](https://github.com/madhurgupta10) | [
ashishkumar468](https://github.com/ashishkumar468) |
-| [
bvibber](https://github.com/bvibber) | [
whym](https://github.com/whym) | [
akaita](https://github.com/akaita) | [
veyndan](https://github.com/veyndan) | [
ujjwalagrawal17](https://github.com/ujjwalagrawal17) |
-| [
macgills](https://github.com/macgills) | [
dbrant](https://github.com/dbrant) | [
vanshikaarora](https://github.com/vanshikaarora) | [
sivaraam](https://github.com/sivaraam) | [
Ayan-10](https://github.com/Ayan-10) |
-| [
shashankiitbhu](https://github.com/shashankiitbhu) | [
Pratham2305](https://github.com/Pratham2305) | [
sandarumk](https://github.com/sandarumk) | [
tanvidadu](https://github.com/tanvidadu) | [
cypherop](https://github.com/cypherop) |
-| [
Prince-kushwaha](https://github.com/Prince-kushwaha) | [
tobias47n9e](https://github.com/tobias47n9e) | [
4D17Y4](https://github.com/4D17Y4) | [
hismaeel](https://github.com/hismaeel) | [
tshradheya](https://github.com/tshradheya) |
+| [
psh](https://github.com/psh) | [
domdomegg](https://github.com/domdomegg) | [
maskaravivek](https://github.com/maskaravivek) | [
madhurgupta10](https://github.com/madhurgupta10) | [
ashishkumar468](https://github.com/ashishkumar468) |
+| [
bvibber](https://github.com/bvibber) | [
whym](https://github.com/whym) | [
akaita](https://github.com/akaita) | [
sivaraam](https://github.com/sivaraam) | [
veyndan](https://github.com/veyndan) |
+| [
ujjwalagrawal17](https://github.com/ujjwalagrawal17) | [
macgills](https://github.com/macgills) | [
amire80](https://github.com/amire80) | [
dbrant](https://github.com/dbrant) | [
vanshikaarora](https://github.com/vanshikaarora) |
+| [
RitikaPahwa4444](https://github.com/RitikaPahwa4444) | [
Ayan-10](https://github.com/Ayan-10) | [
rohit9625](https://github.com/rohit9625) | [
shashankiitbhu](https://github.com/shashankiitbhu) | [
Pratham2305](https://github.com/Pratham2305) |
+| [
parneet-guraya](https://github.com/parneet-guraya) | [
sandarumk](https://github.com/sandarumk) | [
tanvidadu](https://github.com/tanvidadu) | [
cypherop](https://github.com/cypherop) | [
Prince-kushwaha](https://github.com/Prince-kushwaha) |
+
.. and [many more](https://github.com/commons-app/apps-android-commons/graphs/contributors).
diff --git a/app/build.gradle.kts b/app/build.gradle.kts
index 69bb328ff..41788128c 100644
--- a/app/build.gradle.kts
+++ b/app/build.gradle.kts
@@ -18,14 +18,14 @@ if (isRunningOnTravisAndIsNotPRBuild) {
android {
namespace = "fr.free.nrw.commons"
- compileSdk = 34
+ compileSdk = 35
defaultConfig {
applicationId = "fr.free.nrw.commons"
minSdk = 21
- targetSdk = 34
- versionCode = 1054
- versionName = "5.6.0"
+ targetSdk = 35
+ versionCode = 1059
+ versionName = "6.1.0"
setProperty("archivesBaseName", "app-commons-v$versionName-" + getBranchName())
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
@@ -226,6 +226,7 @@ dependencies {
implementation(libs.rxbinding)
implementation(libs.rxbinding.appcompat)
implementation(libs.facebook.fresco)
+ implementation(libs.facebook.fresco.middleware)
implementation(libs.apache.commons.lang3)
// UI
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index d56a874b5..17917666d 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -57,8 +57,7 @@
tools:replace="android:appComponentFactory">
+ android:exported="false" />
@@ -85,6 +84,7 @@
android:parentActivityName=".customselector.ui.selector.CustomSelectorActivity" />
@@ -103,7 +103,7 @@
android:exported="true"
android:hardwareAccelerated="false"
android:icon="@mipmap/ic_launcher"
- android:windowSoftInputMode="adjustResize">
+ android:windowSoftInputMode="adjustPan">
diff --git a/app/src/main/java/fr/free/nrw/commons/AboutActivity.kt b/app/src/main/java/fr/free/nrw/commons/AboutActivity.kt
index ebbb4097a..865ad3ddb 100644
--- a/app/src/main/java/fr/free/nrw/commons/AboutActivity.kt
+++ b/app/src/main/java/fr/free/nrw/commons/AboutActivity.kt
@@ -19,6 +19,7 @@ import fr.free.nrw.commons.utils.ConfigUtils.getVersionNameWithSha
import fr.free.nrw.commons.utils.DialogUtil.showAlertDialog
import java.util.Collections
import androidx.core.net.toUri
+import fr.free.nrw.commons.utils.applyEdgeToEdgeTopInsets
import fr.free.nrw.commons.utils.handleWebUrl
import fr.free.nrw.commons.utils.setUnderlinedText
@@ -47,6 +48,7 @@ class AboutActivity : BaseActivity() {
*/
binding = ActivityAboutBinding.inflate(layoutInflater)
val view: View = binding!!.root
+ applyEdgeToEdgeTopInsets(binding!!.toolbarLayout)
setContentView(view)
setSupportActionBar(binding!!.toolbarBinding.toolbar)
diff --git a/app/src/main/java/fr/free/nrw/commons/CommonsApplication.kt b/app/src/main/java/fr/free/nrw/commons/CommonsApplication.kt
index 90ab0393a..89fdaa055 100644
--- a/app/src/main/java/fr/free/nrw/commons/CommonsApplication.kt
+++ b/app/src/main/java/fr/free/nrw/commons/CommonsApplication.kt
@@ -15,9 +15,8 @@ import com.facebook.drawee.backends.pipeline.Fresco
import com.facebook.imagepipeline.core.ImagePipelineConfig
import fr.free.nrw.commons.auth.LoginActivity
import fr.free.nrw.commons.auth.SessionManager
-import fr.free.nrw.commons.bookmarks.items.BookmarkItemsDao
-import fr.free.nrw.commons.bookmarks.locations.BookmarkLocationsDao
-import fr.free.nrw.commons.bookmarks.pictures.BookmarkPicturesDao
+import fr.free.nrw.commons.bookmarks.items.BookmarkItemsTable
+import fr.free.nrw.commons.bookmarks.pictures.BookmarksTable
import fr.free.nrw.commons.category.CategoryDao
import fr.free.nrw.commons.concurrency.BackgroundPoolExceptionHandler
import fr.free.nrw.commons.concurrency.ThreadPoolService
@@ -257,8 +256,8 @@ class CommonsApplication : MultiDexApplication() {
} catch (e: SQLiteException) {
Timber.e(e)
}
- BookmarkPicturesDao.Table.onDelete(db)
- BookmarkItemsDao.Table.onDelete(db)
+ BookmarksTable.onDelete(db)
+ BookmarkItemsTable.onDelete(db)
}
diff --git a/app/src/main/java/fr/free/nrw/commons/OkHttpConnectionFactory.kt b/app/src/main/java/fr/free/nrw/commons/OkHttpConnectionFactory.kt
index d15c72f57..c54c3aefb 100644
--- a/app/src/main/java/fr/free/nrw/commons/OkHttpConnectionFactory.kt
+++ b/app/src/main/java/fr/free/nrw/commons/OkHttpConnectionFactory.kt
@@ -1,7 +1,11 @@
package fr.free.nrw.commons
import androidx.annotation.VisibleForTesting
+import fr.free.nrw.commons.wikidata.GsonUtil
import fr.free.nrw.commons.wikidata.cookies.CommonsCookieJar
+import fr.free.nrw.commons.wikidata.mwapi.MwErrorResponse
+import fr.free.nrw.commons.wikidata.mwapi.MwIOException
+import fr.free.nrw.commons.wikidata.mwapi.MwLegacyServiceError
import okhttp3.Cache
import okhttp3.Interceptor
import okhttp3.OkHttpClient
@@ -50,7 +54,7 @@ object OkHttpConnectionFactory {
}
}
-private class CommonHeaderRequestInterceptor : Interceptor {
+class CommonHeaderRequestInterceptor : Interceptor {
@Throws(IOException::class)
override fun intercept(chain: Interceptor.Chain): Response {
val request = chain.request().newBuilder()
@@ -86,16 +90,25 @@ private class UnsuccessfulResponseInterceptor : Interceptor {
rsp.peekBody(ERRORS_PREFIX.length.toLong()).use { responseBody ->
if (ERRORS_PREFIX == responseBody.string()) {
rsp.body.use { body ->
- throw IOException(body!!.string())
+ val bodyString = body!!.string()
+
+ throw MwIOException(
+ "MediaWiki API returned error: $bodyString",
+ GsonUtil.defaultGson.fromJson(
+ bodyString,
+ MwErrorResponse::class.java
+ ).error!!,
+ )
}
}
}
- } catch (e: IOException) {
+ } catch (e: MwIOException) {
// Log the error as debug (and therefore, "expected") or at error level
if (suppressErrors) {
Timber.d(e, "Suppressed (known / expected) error")
} else {
Timber.e(e)
+ throw e
}
}
return rsp
diff --git a/app/src/main/java/fr/free/nrw/commons/WelcomeActivity.kt b/app/src/main/java/fr/free/nrw/commons/WelcomeActivity.kt
index 439ed1e92..0882ba117 100644
--- a/app/src/main/java/fr/free/nrw/commons/WelcomeActivity.kt
+++ b/app/src/main/java/fr/free/nrw/commons/WelcomeActivity.kt
@@ -9,6 +9,7 @@ import fr.free.nrw.commons.databinding.ActivityWelcomeBinding
import fr.free.nrw.commons.databinding.PopupForCopyrightBinding
import fr.free.nrw.commons.quiz.QuizActivity
import fr.free.nrw.commons.theme.BaseActivity
+import fr.free.nrw.commons.utils.applyEdgeToEdgeAllInsets
import fr.free.nrw.commons.utils.ConfigUtils.isBetaFlavour
class WelcomeActivity : BaseActivity() {
@@ -23,6 +24,7 @@ class WelcomeActivity : BaseActivity() {
public override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityWelcomeBinding.inflate(layoutInflater)
+ applyEdgeToEdgeAllInsets(binding!!.welcomePager.rootView)
setContentView(binding!!.root)
isQuiz = intent?.extras?.getBoolean("isQuiz", false) ?: false
diff --git a/app/src/main/java/fr/free/nrw/commons/auth/LoginActivity.kt b/app/src/main/java/fr/free/nrw/commons/auth/LoginActivity.kt
index 7a665197b..0c9901b56 100644
--- a/app/src/main/java/fr/free/nrw/commons/auth/LoginActivity.kt
+++ b/app/src/main/java/fr/free/nrw/commons/auth/LoginActivity.kt
@@ -22,6 +22,7 @@ import androidx.appcompat.app.AlertDialog
import androidx.appcompat.app.AppCompatDelegate
import androidx.core.app.NavUtils
import androidx.core.content.ContextCompat
+import androidx.core.view.WindowCompat
import fr.free.nrw.commons.BuildConfig
import fr.free.nrw.commons.CommonsApplication
import fr.free.nrw.commons.R
@@ -32,11 +33,13 @@ import fr.free.nrw.commons.contributions.MainActivity
import fr.free.nrw.commons.databinding.ActivityLoginBinding
import fr.free.nrw.commons.di.ApplicationlessInjection
import fr.free.nrw.commons.kvstore.JsonKvStore
+import fr.free.nrw.commons.utils.applyEdgeToEdgeAllInsets
import fr.free.nrw.commons.utils.AbstractTextWatcher
import fr.free.nrw.commons.utils.ActivityUtils.startActivityWithFlags
import fr.free.nrw.commons.utils.ConfigUtils.isBetaFlavour
import fr.free.nrw.commons.utils.SystemThemeUtils
import fr.free.nrw.commons.utils.ViewUtil.hideKeyboard
+import fr.free.nrw.commons.utils.handleKeyboardInsets
import fr.free.nrw.commons.utils.handleWebUrl
import io.reactivex.disposables.CompositeDisposable
import timber.log.Timber
@@ -79,7 +82,14 @@ class LoginActivity : AccountAuthenticatorActivity() {
delegate.installViewFactory()
delegate.onCreate(savedInstanceState)
+ WindowCompat.getInsetsController(window, window.decorView)
+ .isAppearanceLightStatusBars = !isDarkTheme
+
+ WindowCompat.setDecorFitsSystemWindows(window, false)
+
binding = ActivityLoginBinding.inflate(layoutInflater)
+ applyEdgeToEdgeAllInsets(binding!!.root)
+ binding!!.root.handleKeyboardInsets()
with(binding!!) {
setContentView(root)
diff --git a/app/src/main/java/fr/free/nrw/commons/auth/SignupActivity.kt b/app/src/main/java/fr/free/nrw/commons/auth/SignupActivity.kt
index 5b48ecd8f..22f557bcd 100644
--- a/app/src/main/java/fr/free/nrw/commons/auth/SignupActivity.kt
+++ b/app/src/main/java/fr/free/nrw/commons/auth/SignupActivity.kt
@@ -10,6 +10,7 @@ import android.widget.Toast
import fr.free.nrw.commons.BuildConfig
import fr.free.nrw.commons.R
import fr.free.nrw.commons.theme.BaseActivity
+import fr.free.nrw.commons.utils.applyEdgeToEdgeAllInsets
import timber.log.Timber
class SignupActivity : BaseActivity() {
@@ -21,6 +22,7 @@ class SignupActivity : BaseActivity() {
Timber.d("Signup Activity started")
webView = WebView(this)
+ applyEdgeToEdgeAllInsets(webView!!)
with(webView!!) {
setContentView(this)
webViewClient = MyWebViewClient()
diff --git a/app/src/main/java/fr/free/nrw/commons/bookmarks/BookmarkFragment.java b/app/src/main/java/fr/free/nrw/commons/bookmarks/BookmarkFragment.java
deleted file mode 100644
index 9100fb63c..000000000
--- a/app/src/main/java/fr/free/nrw/commons/bookmarks/BookmarkFragment.java
+++ /dev/null
@@ -1,105 +0,0 @@
-package fr.free.nrw.commons.bookmarks;
-
-import android.os.Bundle;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
-import androidx.fragment.app.FragmentManager;
-import fr.free.nrw.commons.contributions.MainActivity;
-import fr.free.nrw.commons.databinding.FragmentBookmarksBinding;
-import fr.free.nrw.commons.di.CommonsDaggerSupportFragment;
-import fr.free.nrw.commons.kvstore.JsonKvStore;
-import fr.free.nrw.commons.theme.BaseActivity;
-import javax.inject.Inject;
-import fr.free.nrw.commons.contributions.ContributionController;
-import javax.inject.Named;
-
-public class BookmarkFragment extends CommonsDaggerSupportFragment {
-
- private FragmentManager supportFragmentManager;
- private BookmarksPagerAdapter adapter;
- FragmentBookmarksBinding binding;
-
- @Inject
- ContributionController controller;
- /**
- * To check if the user is loggedIn or not.
- */
- @Inject
- @Named("default_preferences")
- public
- JsonKvStore applicationKvStore;
-
- @NonNull
- public static BookmarkFragment newInstance() {
- BookmarkFragment fragment = new BookmarkFragment();
- fragment.setRetainInstance(true);
- return fragment;
- }
-
- public void setScroll(boolean canScroll) {
- if (binding!=null) {
- binding.viewPagerBookmarks.setCanScroll(canScroll);
- }
- }
-
- @Override
- public void onCreate(@Nullable final Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- }
-
- @Nullable
- @Override
- public View onCreateView(@NonNull final LayoutInflater inflater,
- @Nullable final ViewGroup container,
- @Nullable final Bundle savedInstanceState) {
- super.onCreateView(inflater, container, savedInstanceState);
- binding = FragmentBookmarksBinding.inflate(inflater, container, false);
-
- // Activity can call methods in the fragment by acquiring a
- // reference to the Fragment from FragmentManager, using findFragmentById()
- supportFragmentManager = getChildFragmentManager();
-
- adapter = new BookmarksPagerAdapter(supportFragmentManager, getContext(),
- applicationKvStore.getBoolean("login_skipped"));
- binding.viewPagerBookmarks.setAdapter(adapter);
- binding.tabLayout.setupWithViewPager(binding.viewPagerBookmarks);
-
- ((MainActivity) getActivity()).showTabs();
- ((BaseActivity) getActivity()).getSupportActionBar().setDisplayHomeAsUpEnabled(false);
-
- setupTabLayout();
- return binding.getRoot();
- }
-
- /**
- * This method sets up the tab layout. If the adapter has only one element it sets the
- * visibility of tabLayout to gone.
- */
- public void setupTabLayout() {
- binding.tabLayout.setVisibility(View.VISIBLE);
- if (adapter.getCount() == 1) {
- binding.tabLayout.setVisibility(View.GONE);
- }
- }
-
-
- public void onBackPressed() {
- if (((BookmarkListRootFragment) (adapter.getItem(binding.tabLayout.getSelectedTabPosition())))
- .backPressed()) {
- // The event is handled internally by the adapter , no further action required.
- return;
- }
- // Event is not handled by the adapter ( performed back action ) change action bar.
- ((BaseActivity) getActivity()).getSupportActionBar().setDisplayHomeAsUpEnabled(false);
- }
-
- @Override
- public void onDestroy() {
- super.onDestroy();
- binding = null;
- }
-}
diff --git a/app/src/main/java/fr/free/nrw/commons/bookmarks/BookmarkFragment.kt b/app/src/main/java/fr/free/nrw/commons/bookmarks/BookmarkFragment.kt
new file mode 100644
index 000000000..51f15b23c
--- /dev/null
+++ b/app/src/main/java/fr/free/nrw/commons/bookmarks/BookmarkFragment.kt
@@ -0,0 +1,98 @@
+package fr.free.nrw.commons.bookmarks
+
+import android.os.Bundle
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import fr.free.nrw.commons.contributions.ContributionController
+import fr.free.nrw.commons.contributions.MainActivity
+import fr.free.nrw.commons.databinding.FragmentBookmarksBinding
+import fr.free.nrw.commons.di.CommonsDaggerSupportFragment
+import fr.free.nrw.commons.kvstore.JsonKvStore
+import fr.free.nrw.commons.theme.BaseActivity
+import javax.inject.Inject
+import javax.inject.Named
+
+class BookmarkFragment : CommonsDaggerSupportFragment() {
+ private var adapter: BookmarksPagerAdapter? = null
+
+ @JvmField
+ var binding: FragmentBookmarksBinding? = null
+
+ @JvmField
+ @Inject
+ var controller: ContributionController? = null
+
+ /**
+ * To check if the user is loggedIn or not.
+ */
+ @JvmField
+ @Inject
+ @Named("default_preferences")
+ var applicationKvStore: JsonKvStore? = null
+
+ fun setScroll(canScroll: Boolean) {
+ binding?.let {
+ it.viewPagerBookmarks.canScroll = canScroll
+ }
+ }
+
+ override fun onCreateView(
+ inflater: LayoutInflater,
+ container: ViewGroup?,
+ savedInstanceState: Bundle?
+ ): View {
+ super.onCreateView(inflater, container, savedInstanceState)
+ binding = FragmentBookmarksBinding.inflate(inflater, container, false)
+
+ // Activity can call methods in the fragment by acquiring a
+ // reference to the Fragment from FragmentManager, using findFragmentById()
+ val supportFragmentManager = childFragmentManager
+
+ adapter = BookmarksPagerAdapter(
+ supportFragmentManager, requireContext(),
+ applicationKvStore!!.getBoolean("login_skipped")
+ )
+ binding!!.viewPagerBookmarks.adapter = adapter
+ binding!!.tabLayout.setupWithViewPager(binding!!.viewPagerBookmarks)
+
+ (requireActivity() as MainActivity).showTabs()
+ (requireActivity() as BaseActivity).supportActionBar!!.setDisplayHomeAsUpEnabled(false)
+
+ setupTabLayout()
+ return binding!!.root
+ }
+
+ /**
+ * This method sets up the tab layout. If the adapter has only one element it sets the
+ * visibility of tabLayout to gone.
+ */
+ fun setupTabLayout() {
+ binding!!.tabLayout.visibility = View.VISIBLE
+ if (adapter!!.count == 1) {
+ binding!!.tabLayout.visibility = View.GONE
+ }
+ }
+
+
+ fun onBackPressed() {
+ if (((adapter!!.getItem(binding!!.tabLayout.selectedTabPosition)) as BookmarkListRootFragment).backPressed()) {
+ // The event is handled internally by the adapter , no further action required.
+ return
+ }
+
+ // Event is not handled by the adapter ( performed back action ) change action bar.
+ (requireActivity() as BaseActivity).supportActionBar!!.setDisplayHomeAsUpEnabled(false)
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ binding = null
+ }
+
+ companion object {
+ fun newInstance(): BookmarkFragment = BookmarkFragment().apply {
+ retainInstance = true
+ }
+ }
+}
diff --git a/app/src/main/java/fr/free/nrw/commons/bookmarks/BookmarkListRootFragment.java b/app/src/main/java/fr/free/nrw/commons/bookmarks/BookmarkListRootFragment.java
deleted file mode 100644
index e14cbbb6f..000000000
--- a/app/src/main/java/fr/free/nrw/commons/bookmarks/BookmarkListRootFragment.java
+++ /dev/null
@@ -1,267 +0,0 @@
-package fr.free.nrw.commons.bookmarks;
-
-import android.content.Context;
-import android.os.Bundle;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.AdapterView;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
-import androidx.fragment.app.Fragment;
-import androidx.fragment.app.FragmentManager;
-import fr.free.nrw.commons.Media;
-import fr.free.nrw.commons.R;
-import fr.free.nrw.commons.bookmarks.category.BookmarkCategoriesFragment;
-import fr.free.nrw.commons.bookmarks.items.BookmarkItemsFragment;
-import fr.free.nrw.commons.bookmarks.locations.BookmarkLocationsFragment;
-import fr.free.nrw.commons.bookmarks.pictures.BookmarkPicturesFragment;
-import fr.free.nrw.commons.category.CategoryImagesCallback;
-import fr.free.nrw.commons.category.GridViewAdapter;
-import fr.free.nrw.commons.contributions.MainActivity;
-import fr.free.nrw.commons.databinding.FragmentFeaturedRootBinding;
-import fr.free.nrw.commons.di.CommonsDaggerSupportFragment;
-import fr.free.nrw.commons.media.MediaDetailPagerFragment;
-import fr.free.nrw.commons.media.MediaDetailProvider;
-import fr.free.nrw.commons.navtab.NavTab;
-import java.util.ArrayList;
-import java.util.Iterator;
-import timber.log.Timber;
-
-public class BookmarkListRootFragment extends CommonsDaggerSupportFragment implements
- FragmentManager.OnBackStackChangedListener,
- MediaDetailProvider,
- AdapterView.OnItemClickListener, CategoryImagesCallback {
-
- private MediaDetailPagerFragment mediaDetails;
- //private BookmarkPicturesFragment bookmarkPicturesFragment;
- private BookmarkLocationsFragment bookmarkLocationsFragment;
- public Fragment listFragment;
- private BookmarksPagerAdapter bookmarksPagerAdapter;
-
- FragmentFeaturedRootBinding binding;
-
- public BookmarkListRootFragment() {
- //empty constructor necessary otherwise crashes on recreate
- }
-
- public BookmarkListRootFragment(Bundle bundle, BookmarksPagerAdapter bookmarksPagerAdapter) {
- String title = bundle.getString("categoryName");
- int order = bundle.getInt("order");
- final int orderItem = bundle.getInt("orderItem");
-
- switch (order){
- case 0: listFragment = new BookmarkPicturesFragment();
- break;
-
- case 1: listFragment = new BookmarkLocationsFragment();
- break;
-
- case 3: listFragment = new BookmarkCategoriesFragment();
- break;
- }
- if(orderItem == 2) {
- listFragment = new BookmarkItemsFragment();
- }
-
- Bundle featuredArguments = new Bundle();
- featuredArguments.putString("categoryName", title);
- listFragment.setArguments(featuredArguments);
- this.bookmarksPagerAdapter = bookmarksPagerAdapter;
- }
-
- @Nullable
- @Override
- public View onCreateView(@NonNull final LayoutInflater inflater,
- @Nullable final ViewGroup container,
- @Nullable final Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- binding = FragmentFeaturedRootBinding.inflate(inflater, container, false);
- return binding.getRoot();
- }
-
- @Override
- public void onViewCreated(@NonNull final View view, @Nullable final Bundle savedInstanceState) {
- super.onViewCreated(view, savedInstanceState);
- if (savedInstanceState == null) {
- setFragment(listFragment, mediaDetails);
- }
- }
-
- public void setFragment(Fragment fragment, Fragment otherFragment) {
- if (fragment.isAdded() && otherFragment != null) {
- getChildFragmentManager()
- .beginTransaction()
- .hide(otherFragment)
- .show(fragment)
- .addToBackStack("CONTRIBUTION_LIST_FRAGMENT_TAG")
- .commit();
- getChildFragmentManager().executePendingTransactions();
- } else if (fragment.isAdded() && otherFragment == null) {
- getChildFragmentManager()
- .beginTransaction()
- .show(fragment)
- .addToBackStack("CONTRIBUTION_LIST_FRAGMENT_TAG")
- .commit();
- getChildFragmentManager().executePendingTransactions();
- } else if (!fragment.isAdded() && otherFragment != null) {
- getChildFragmentManager()
- .beginTransaction()
- .hide(otherFragment)
- .add(R.id.explore_container, fragment)
- .addToBackStack("CONTRIBUTION_LIST_FRAGMENT_TAG")
- .commit();
- getChildFragmentManager().executePendingTransactions();
- } else if (!fragment.isAdded()) {
- getChildFragmentManager()
- .beginTransaction()
- .replace(R.id.explore_container, fragment)
- .addToBackStack("CONTRIBUTION_LIST_FRAGMENT_TAG")
- .commit();
- getChildFragmentManager().executePendingTransactions();
- }
- }
-
- public void removeFragment(Fragment fragment) {
- getChildFragmentManager()
- .beginTransaction()
- .remove(fragment)
- .commit();
- getChildFragmentManager().executePendingTransactions();
- }
-
- @Override
- public void onAttach(final Context context) {
- super.onAttach(context);
- }
-
- @Override
- public void onMediaClicked(int position) {
- Timber.d("on media clicked");
- /*container.setVisibility(View.VISIBLE);
- ((BookmarkFragment)getParentFragment()).tabLayout.setVisibility(View.GONE);
- mediaDetails = new MediaDetailPagerFragment(false, true, position);
- setFragment(mediaDetails, bookmarkPicturesFragment);*/
- }
-
- /**
- * This method is called mediaDetailPagerFragment. It returns the Media Object at that Index
- *
- * @param i It is the index of which media object is to be returned which is same as current
- * index of viewPager.
- * @return Media Object
- */
- @Override
- public Media getMediaAtPosition(int i) {
- if (bookmarksPagerAdapter.getMediaAdapter() == null) {
- // not yet ready to return data
- return null;
- } else {
- return (Media) bookmarksPagerAdapter.getMediaAdapter().getItem(i);
- }
- }
-
- /**
- * This method is called on from getCount of MediaDetailPagerFragment The viewpager will contain
- * same number of media items as that of media elements in adapter.
- *
- * @return Total Media count in the adapter
- */
- @Override
- public int getTotalMediaCount() {
- if (bookmarksPagerAdapter.getMediaAdapter() == null) {
- return 0;
- }
- return bookmarksPagerAdapter.getMediaAdapter().getCount();
- }
-
- @Override
- public Integer getContributionStateAt(int position) {
- return null;
- }
-
- /**
- * Reload media detail fragment once media is nominated
- *
- * @param index item position that has been nominated
- */
- @Override
- public void refreshNominatedMedia(int index) {
- if (mediaDetails != null && !listFragment.isVisible()) {
- removeFragment(mediaDetails);
- mediaDetails = MediaDetailPagerFragment.newInstance(false, true);
- ((BookmarkFragment) getParentFragment()).setScroll(false);
- setFragment(mediaDetails, listFragment);
- mediaDetails.showImage(index);
- }
- }
-
- /**
- * This method is called on success of API call for featured images or mobile uploads. The
- * viewpager will notified that number of items have changed.
- */
- @Override
- public void viewPagerNotifyDataSetChanged() {
- if (mediaDetails != null) {
- mediaDetails.notifyDataSetChanged();
- }
- }
-
- public boolean backPressed() {
- //check mediaDetailPage fragment is not null then we check mediaDetail.is Visible or not to avoid NullPointerException
- if (mediaDetails != null) {
- if (mediaDetails.isVisible()) {
- // todo add get list fragment
- ((BookmarkFragment) getParentFragment()).setupTabLayout();
- ArrayList removed = mediaDetails.getRemovedItems();
- removeFragment(mediaDetails);
- ((BookmarkFragment) getParentFragment()).setScroll(true);
- setFragment(listFragment, mediaDetails);
- ((MainActivity) getActivity()).showTabs();
- if (listFragment instanceof BookmarkPicturesFragment) {
- GridViewAdapter adapter = ((GridViewAdapter) ((BookmarkPicturesFragment) listFragment)
- .getAdapter());
- Iterator i = removed.iterator();
- while (i.hasNext()) {
- adapter.remove(adapter.getItem((int) i.next()));
- }
- mediaDetails.clearRemoved();
-
- }
- } else {
- moveToContributionsFragment();
- }
- } else {
- moveToContributionsFragment();
- }
- // notify mediaDetails did not handled the backPressed further actions required.
- return false;
- }
-
- void moveToContributionsFragment() {
- ((MainActivity) getActivity()).setSelectedItemId(NavTab.CONTRIBUTIONS.code());
- ((MainActivity) getActivity()).showTabs();
- }
-
- @Override
- public void onItemClick(AdapterView> parent, View view, int position, long id) {
- Timber.d("on media clicked");
- binding.exploreContainer.setVisibility(View.VISIBLE);
- ((BookmarkFragment) getParentFragment()).binding.tabLayout.setVisibility(View.GONE);
- mediaDetails = MediaDetailPagerFragment.newInstance(false, true);
- ((BookmarkFragment) getParentFragment()).setScroll(false);
- setFragment(mediaDetails, listFragment);
- mediaDetails.showImage(position);
- }
-
- @Override
- public void onBackStackChanged() {
-
- }
-
- @Override
- public void onDestroy() {
- super.onDestroy();
- binding = null;
- }
-}
diff --git a/app/src/main/java/fr/free/nrw/commons/bookmarks/BookmarkListRootFragment.kt b/app/src/main/java/fr/free/nrw/commons/bookmarks/BookmarkListRootFragment.kt
new file mode 100644
index 000000000..a9ed33abc
--- /dev/null
+++ b/app/src/main/java/fr/free/nrw/commons/bookmarks/BookmarkListRootFragment.kt
@@ -0,0 +1,226 @@
+package fr.free.nrw.commons.bookmarks
+
+import android.os.Bundle
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.AdapterView
+import android.widget.AdapterView.OnItemClickListener
+import androidx.fragment.app.Fragment
+import androidx.fragment.app.FragmentManager
+import fr.free.nrw.commons.Media
+import fr.free.nrw.commons.R
+import fr.free.nrw.commons.bookmarks.category.BookmarkCategoriesFragment
+import fr.free.nrw.commons.bookmarks.items.BookmarkItemsFragment
+import fr.free.nrw.commons.bookmarks.locations.BookmarkLocationsFragment
+import fr.free.nrw.commons.bookmarks.pictures.BookmarkPicturesFragment
+import fr.free.nrw.commons.category.CategoryImagesCallback
+import fr.free.nrw.commons.category.GridViewAdapter
+import fr.free.nrw.commons.contributions.MainActivity
+import fr.free.nrw.commons.databinding.FragmentFeaturedRootBinding
+import fr.free.nrw.commons.di.CommonsDaggerSupportFragment
+import fr.free.nrw.commons.media.MediaDetailPagerFragment
+import fr.free.nrw.commons.media.MediaDetailPagerFragment.Companion.newInstance
+import fr.free.nrw.commons.media.MediaDetailProvider
+import fr.free.nrw.commons.navtab.NavTab
+import timber.log.Timber
+
+class BookmarkListRootFragment : CommonsDaggerSupportFragment,
+ FragmentManager.OnBackStackChangedListener, MediaDetailProvider, OnItemClickListener,
+ CategoryImagesCallback {
+ private var mediaDetails: MediaDetailPagerFragment? = null
+ private val bookmarkLocationsFragment: BookmarkLocationsFragment? = null
+ var listFragment: Fragment? = null
+ private var bookmarksPagerAdapter: BookmarksPagerAdapter? = null
+
+ var binding: FragmentFeaturedRootBinding? = null
+
+ constructor()
+
+ constructor(bundle: Bundle, bookmarksPagerAdapter: BookmarksPagerAdapter) {
+ val title = bundle.getString("categoryName")
+ val order = bundle.getInt("order")
+ val orderItem = bundle.getInt("orderItem")
+
+ when (order) {
+ 0 -> listFragment = BookmarkPicturesFragment()
+ 1 -> listFragment = BookmarkLocationsFragment()
+ 3 -> listFragment = BookmarkCategoriesFragment()
+ }
+ if (orderItem == 2) {
+ listFragment = BookmarkItemsFragment()
+ }
+
+ val featuredArguments = Bundle()
+ featuredArguments.putString("categoryName", title)
+ listFragment!!.setArguments(featuredArguments)
+ this.bookmarksPagerAdapter = bookmarksPagerAdapter
+ }
+
+ override fun onCreateView(
+ inflater: LayoutInflater,
+ container: ViewGroup?,
+ savedInstanceState: Bundle?
+ ): View? {
+ super.onCreate(savedInstanceState)
+ binding = FragmentFeaturedRootBinding.inflate(inflater, container, false)
+ return binding!!.getRoot()
+ }
+
+ override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+ super.onViewCreated(view, savedInstanceState)
+ if (savedInstanceState == null) {
+ setFragment(listFragment!!, mediaDetails)
+ }
+ }
+
+ fun setFragment(fragment: Fragment, otherFragment: Fragment?) {
+ if (fragment.isAdded() && otherFragment != null) {
+ getChildFragmentManager()
+ .beginTransaction()
+ .hide(otherFragment)
+ .show(fragment)
+ .addToBackStack("CONTRIBUTION_LIST_FRAGMENT_TAG")
+ .commit()
+ getChildFragmentManager().executePendingTransactions()
+ } else if (fragment.isAdded() && otherFragment == null) {
+ getChildFragmentManager()
+ .beginTransaction()
+ .show(fragment)
+ .addToBackStack("CONTRIBUTION_LIST_FRAGMENT_TAG")
+ .commit()
+ getChildFragmentManager().executePendingTransactions()
+ } else if (!fragment.isAdded() && otherFragment != null) {
+ getChildFragmentManager()
+ .beginTransaction()
+ .hide(otherFragment)
+ .add(R.id.explore_container, fragment)
+ .addToBackStack("CONTRIBUTION_LIST_FRAGMENT_TAG")
+ .commit()
+ getChildFragmentManager().executePendingTransactions()
+ } else if (!fragment.isAdded()) {
+ getChildFragmentManager()
+ .beginTransaction()
+ .replace(R.id.explore_container, fragment)
+ .addToBackStack("CONTRIBUTION_LIST_FRAGMENT_TAG")
+ .commit()
+ getChildFragmentManager().executePendingTransactions()
+ }
+ }
+
+ fun removeFragment(fragment: Fragment) {
+ getChildFragmentManager()
+ .beginTransaction()
+ .remove(fragment)
+ .commit()
+ getChildFragmentManager().executePendingTransactions()
+ }
+
+ override fun onMediaClicked(position: Int) {
+ Timber.d("on media clicked")
+ /*container.setVisibility(View.VISIBLE);
+ ((BookmarkFragment)getParentFragment()).tabLayout.setVisibility(View.GONE);
+ mediaDetails = new MediaDetailPagerFragment(false, true, position);
+ setFragment(mediaDetails, bookmarkPicturesFragment);*/
+ }
+
+ /**
+ * This method is called mediaDetailPagerFragment. It returns the Media Object at that Index
+ *
+ * @param i It is the index of which media object is to be returned which is same as current
+ * index of viewPager.
+ * @return Media Object
+ */
+ override fun getMediaAtPosition(i: Int): Media? =
+ bookmarksPagerAdapter!!.mediaAdapter?.getItem(i) as Media?
+
+ /**
+ * This method is called on from getCount of MediaDetailPagerFragment The viewpager will contain
+ * same number of media items as that of media elements in adapter.
+ *
+ * @return Total Media count in the adapter
+ */
+ override fun getTotalMediaCount(): Int =
+ bookmarksPagerAdapter!!.mediaAdapter?.count ?: 0
+
+ override fun getContributionStateAt(position: Int): Int? {
+ return null
+ }
+
+ /**
+ * Reload media detail fragment once media is nominated
+ *
+ * @param index item position that has been nominated
+ */
+ override fun refreshNominatedMedia(index: Int) {
+ if (mediaDetails != null && !listFragment!!.isVisible()) {
+ removeFragment(mediaDetails!!)
+ mediaDetails = newInstance(false, true)
+ (parentFragment as BookmarkFragment).setScroll(false)
+ setFragment(mediaDetails!!, listFragment)
+ mediaDetails!!.showImage(index)
+ }
+ }
+
+ /**
+ * This method is called on success of API call for featured images or mobile uploads. The
+ * viewpager will notified that number of items have changed.
+ */
+ override fun viewPagerNotifyDataSetChanged() {
+ if (mediaDetails != null) {
+ mediaDetails!!.notifyDataSetChanged()
+ }
+ }
+
+ fun backPressed(): Boolean {
+ //check mediaDetailPage fragment is not null then we check mediaDetail.is Visible or not to avoid NullPointerException
+ if (mediaDetails != null) {
+ if (mediaDetails!!.isVisible()) {
+ // todo add get list fragment
+ (parentFragment as BookmarkFragment).setupTabLayout()
+ val removed: ArrayList = mediaDetails!!.removedItems
+ removeFragment(mediaDetails!!)
+ (parentFragment as BookmarkFragment).setScroll(true)
+ setFragment(listFragment!!, mediaDetails)
+ (requireActivity() as MainActivity).showTabs()
+ if (listFragment is BookmarkPicturesFragment) {
+ val adapter = ((listFragment as BookmarkPicturesFragment)
+ .getAdapter() as GridViewAdapter?)
+ val i: MutableIterator<*> = removed.iterator()
+ while (i.hasNext()) {
+ adapter!!.remove(adapter.getItem(i.next() as Int))
+ }
+ mediaDetails!!.clearRemoved()
+ }
+ } else {
+ moveToContributionsFragment()
+ }
+ } else {
+ moveToContributionsFragment()
+ }
+ // notify mediaDetails did not handled the backPressed further actions required.
+ return false
+ }
+
+ fun moveToContributionsFragment() {
+ (requireActivity() as MainActivity).setSelectedItemId(NavTab.CONTRIBUTIONS.code())
+ (requireActivity() as MainActivity).showTabs()
+ }
+
+ override fun onItemClick(parent: AdapterView<*>?, view: View?, position: Int, id: Long) {
+ Timber.d("on media clicked")
+ binding!!.exploreContainer.visibility = View.VISIBLE
+ (parentFragment as BookmarkFragment).binding!!.tabLayout.setVisibility(View.GONE)
+ mediaDetails = newInstance(false, true)
+ (parentFragment as BookmarkFragment).setScroll(false)
+ setFragment(mediaDetails!!, listFragment)
+ mediaDetails!!.showImage(position)
+ }
+
+ override fun onBackStackChanged() = Unit
+
+ override fun onDestroy() {
+ super.onDestroy()
+ binding = null
+ }
+}
diff --git a/app/src/main/java/fr/free/nrw/commons/bookmarks/BookmarksPagerAdapter.java b/app/src/main/java/fr/free/nrw/commons/bookmarks/BookmarksPagerAdapter.java
deleted file mode 100644
index f0620032a..000000000
--- a/app/src/main/java/fr/free/nrw/commons/bookmarks/BookmarksPagerAdapter.java
+++ /dev/null
@@ -1,94 +0,0 @@
-package fr.free.nrw.commons.bookmarks;
-
-import android.content.Context;
-import android.os.Bundle;
-import android.widget.ListAdapter;
-
-import androidx.annotation.Nullable;
-import androidx.fragment.app.Fragment;
-import androidx.fragment.app.FragmentManager;
-import androidx.fragment.app.FragmentPagerAdapter;
-
-import java.util.ArrayList;
-
-import fr.free.nrw.commons.R;
-import fr.free.nrw.commons.bookmarks.pictures.BookmarkPicturesFragment;
-
-public class BookmarksPagerAdapter extends FragmentPagerAdapter {
-
- private ArrayList pages;
-
- /**
- * Default Constructor
- * @param fm
- * @param context
- * @param onlyPictures is true if the fragment requires only BookmarkPictureFragment
- * (i.e. when no user is logged in).
- */
- BookmarksPagerAdapter(FragmentManager fm, Context context,boolean onlyPictures) {
- super(fm);
- pages = new ArrayList<>();
- Bundle picturesBundle = new Bundle();
- picturesBundle.putString("categoryName", context.getString(R.string.title_page_bookmarks_pictures));
- picturesBundle.putInt("order", 0);
- pages.add(new BookmarkPages(
- new BookmarkListRootFragment(picturesBundle, this),
- context.getString(R.string.title_page_bookmarks_pictures)));
- if (!onlyPictures) {
- // if onlyPictures is false we also add the location fragment.
- Bundle locationBundle = new Bundle();
- locationBundle.putString("categoryName",
- context.getString(R.string.title_page_bookmarks_locations));
- locationBundle.putInt("order", 1);
- pages.add(new BookmarkPages(
- new BookmarkListRootFragment(locationBundle, this),
- context.getString(R.string.title_page_bookmarks_locations)));
-
- locationBundle.putInt("orderItem", 2);
- pages.add(new BookmarkPages(
- new BookmarkListRootFragment(locationBundle, this),
- context.getString(R.string.title_page_bookmarks_items)));
- }
- final Bundle categoriesBundle = new Bundle();
- categoriesBundle.putString("categoryName",
- context.getString(R.string.title_page_bookmarks_categories));
- categoriesBundle.putInt("order", 3);
- pages.add(new BookmarkPages(
- new BookmarkListRootFragment(categoriesBundle, this),
- context.getString(R.string.title_page_bookmarks_categories)));
- notifyDataSetChanged();
- }
-
- @Override
- public Fragment getItem(int position) {
- return pages.get(position).getPage();
- }
-
- @Override
- public int getCount() {
- return pages.size();
- }
-
- @Nullable
- @Override
- public CharSequence getPageTitle(int position) {
- return pages.get(position).getTitle();
- }
-
- /**
- * Return the Adapter used to display the picture gridview
- * @return adapter
- */
- public ListAdapter getMediaAdapter() {
- BookmarkPicturesFragment fragment = (BookmarkPicturesFragment)(((BookmarkListRootFragment)pages.get(0).getPage()).listFragment);
- return fragment.getAdapter();
- }
-
- /**
- * Update the pictures list for the bookmark fragment
- */
- public void requestPictureListUpdate() {
- BookmarkPicturesFragment fragment = (BookmarkPicturesFragment)(((BookmarkListRootFragment)pages.get(0).getPage()).listFragment);
- fragment.onResume();
- }
-}
diff --git a/app/src/main/java/fr/free/nrw/commons/bookmarks/BookmarksPagerAdapter.kt b/app/src/main/java/fr/free/nrw/commons/bookmarks/BookmarksPagerAdapter.kt
new file mode 100644
index 000000000..a7cbf0e68
--- /dev/null
+++ b/app/src/main/java/fr/free/nrw/commons/bookmarks/BookmarksPagerAdapter.kt
@@ -0,0 +1,82 @@
+package fr.free.nrw.commons.bookmarks
+
+import android.content.Context
+import android.widget.ListAdapter
+import androidx.core.os.bundleOf
+import androidx.fragment.app.Fragment
+import androidx.fragment.app.FragmentManager
+import androidx.fragment.app.FragmentPagerAdapter
+import fr.free.nrw.commons.R
+import fr.free.nrw.commons.bookmarks.pictures.BookmarkPicturesFragment
+
+class BookmarksPagerAdapter internal constructor(
+ fm: FragmentManager, context: Context, onlyPictures: Boolean
+) : FragmentPagerAdapter(fm) {
+ private val pages = mutableListOf()
+
+ /**
+ * Default Constructor
+ * @param fm
+ * @param context
+ * @param onlyPictures is true if the fragment requires only BookmarkPictureFragment
+ * (i.e. when no user is logged in).
+ */
+ init {
+ pages.add(
+ BookmarkPages(
+ BookmarkListRootFragment(
+ bundleOf(
+ "categoryName" to context.getString(R.string.title_page_bookmarks_pictures),
+ "order" to 0
+ ), this
+ ), context.getString(R.string.title_page_bookmarks_pictures)
+ )
+ )
+ if (!onlyPictures) {
+ // if onlyPictures is false we also add the location fragment.
+ val locationBundle = bundleOf(
+ "categoryName" to context.getString(R.string.title_page_bookmarks_locations),
+ "order" to 1
+ )
+
+ pages.add(
+ BookmarkPages(
+ BookmarkListRootFragment(locationBundle, this),
+ context.getString(R.string.title_page_bookmarks_locations)
+ )
+ )
+
+ locationBundle.putInt("orderItem", 2)
+ pages.add(
+ BookmarkPages(
+ BookmarkListRootFragment(locationBundle, this),
+ context.getString(R.string.title_page_bookmarks_items)
+ )
+ )
+ }
+ pages.add(
+ BookmarkPages(
+ BookmarkListRootFragment(
+ bundleOf(
+ "categoryName" to context.getString(R.string.title_page_bookmarks_categories),
+ "order" to 3
+ ), this),
+ context.getString(R.string.title_page_bookmarks_categories)
+ )
+ )
+ notifyDataSetChanged()
+ }
+
+ override fun getItem(position: Int): Fragment = pages[position].page!!
+
+ override fun getCount(): Int = pages.size
+
+ override fun getPageTitle(position: Int): CharSequence? = pages[position].title
+
+ /**
+ * Return the Adapter used to display the picture gridview
+ * @return adapter
+ */
+ val mediaAdapter: ListAdapter?
+ get() = (((pages[0].page as BookmarkListRootFragment).listFragment) as BookmarkPicturesFragment).getAdapter()
+}
diff --git a/app/src/main/java/fr/free/nrw/commons/bookmarks/items/BookmarkItemsContentProvider.java b/app/src/main/java/fr/free/nrw/commons/bookmarks/items/BookmarkItemsContentProvider.java
deleted file mode 100644
index 3a85ec159..000000000
--- a/app/src/main/java/fr/free/nrw/commons/bookmarks/items/BookmarkItemsContentProvider.java
+++ /dev/null
@@ -1,129 +0,0 @@
-package fr.free.nrw.commons.bookmarks.items;
-
-import static fr.free.nrw.commons.bookmarks.items.BookmarkItemsDao.Table.COLUMN_ID;
-import static fr.free.nrw.commons.bookmarks.items.BookmarkItemsDao.Table.TABLE_NAME;
-
-import android.content.ContentValues;
-import android.database.Cursor;
-import android.database.sqlite.SQLiteDatabase;
-import android.database.sqlite.SQLiteQueryBuilder;
-import android.net.Uri;
-import android.text.TextUtils;
-import androidx.annotation.NonNull;
-import fr.free.nrw.commons.BuildConfig;
-import fr.free.nrw.commons.data.DBOpenHelper;
-import fr.free.nrw.commons.di.CommonsDaggerContentProvider;
-import javax.inject.Inject;
-import timber.log.Timber;
-
-/**
- * Handles private storage for bookmarked items
- */
-public class BookmarkItemsContentProvider extends CommonsDaggerContentProvider {
-
- private static final String BASE_PATH = "bookmarksItems";
- public static final Uri BASE_URI =
- Uri.parse("content://" + BuildConfig.BOOKMARK_ITEMS_AUTHORITY + "/" + BASE_PATH);
-
-
- /**
- * Append bookmark items ID to the base uri
- */
- public static Uri uriForName(final String id) {
- return Uri.parse(BASE_URI + "/" + id);
- }
-
- @Inject
- DBOpenHelper dbOpenHelper;
-
- @Override
- public String getType(@NonNull final Uri uri) {
- return null;
- }
-
- /**
- * Queries the SQLite database for the bookmark items
- * @param uri : contains the uri for bookmark items
- * @param projection : contains the all fields of the table
- * @param selection : handles Where
- * @param selectionArgs : the condition of Where clause
- * @param sortOrder : ascending or descending
- */
- @SuppressWarnings("ConstantConditions")
- @Override
- public Cursor query(@NonNull final Uri uri, final String[] projection, final String selection,
- final String[] selectionArgs, final String sortOrder) {
- final SQLiteQueryBuilder queryBuilder = new SQLiteQueryBuilder();
- queryBuilder.setTables(TABLE_NAME);
- final SQLiteDatabase db = dbOpenHelper.getReadableDatabase();
- final Cursor cursor = queryBuilder.query(db, projection, selection,
- selectionArgs, null, null, sortOrder);
- cursor.setNotificationUri(getContext().getContentResolver(), uri);
- return cursor;
- }
-
- /**
- * Handles the update query of local SQLite Database
- * @param uri : contains the uri for bookmark items
- * @param contentValues : new values to be entered to db
- * @param selection : handles Where
- * @param selectionArgs : the condition of Where clause
- */
- @SuppressWarnings("ConstantConditions")
- @Override
- public int update(@NonNull final Uri uri, final ContentValues contentValues,
- final String selection, final String[] selectionArgs) {
- final SQLiteDatabase sqlDB = dbOpenHelper.getWritableDatabase();
- final int rowsUpdated;
- if (TextUtils.isEmpty(selection)) {
- final int id = Integer.parseInt(uri.getLastPathSegment());
- rowsUpdated = sqlDB.update(TABLE_NAME,
- contentValues,
- COLUMN_ID + " = ?",
- new String[]{String.valueOf(id)});
- } else {
- throw new IllegalArgumentException(
- "Parameter `selection` should be empty when updating an ID");
- }
-
- getContext().getContentResolver().notifyChange(uri, null);
- return rowsUpdated;
- }
-
- /**
- * Handles the insertion of new bookmark items record to local SQLite Database
- * @param uri
- * @param contentValues
- * @return
- */
- @SuppressWarnings("ConstantConditions")
- @Override
- public Uri insert(@NonNull final Uri uri, final ContentValues contentValues) {
- final SQLiteDatabase sqlDB = dbOpenHelper.getWritableDatabase();
- final long id = sqlDB.insert(TABLE_NAME, null, contentValues);
- getContext().getContentResolver().notifyChange(uri, null);
- return Uri.parse(BASE_URI + "/" + id);
- }
-
- /**
- * Handles the deletion of new bookmark items record to local SQLite Database
- * @param uri
- * @param s
- * @param strings
- * @return
- */
- @SuppressWarnings("ConstantConditions")
- @Override
- public int delete(@NonNull final Uri uri, final String s, final String[] strings) {
- final int rows;
- final SQLiteDatabase db = dbOpenHelper.getReadableDatabase();
- Timber.d("Deleting bookmark name %s", uri.getLastPathSegment());
- rows = db.delete(
- TABLE_NAME,
- "item_id = ?",
- new String[]{uri.getLastPathSegment()}
- );
- getContext().getContentResolver().notifyChange(uri, null);
- return rows;
- }
-}
diff --git a/app/src/main/java/fr/free/nrw/commons/bookmarks/items/BookmarkItemsContentProvider.kt b/app/src/main/java/fr/free/nrw/commons/bookmarks/items/BookmarkItemsContentProvider.kt
new file mode 100644
index 000000000..c532ed3cc
--- /dev/null
+++ b/app/src/main/java/fr/free/nrw/commons/bookmarks/items/BookmarkItemsContentProvider.kt
@@ -0,0 +1,101 @@
+package fr.free.nrw.commons.bookmarks.items
+
+import android.content.ContentValues
+import android.database.Cursor
+import android.database.sqlite.SQLiteQueryBuilder
+import android.net.Uri
+import fr.free.nrw.commons.BuildConfig
+import fr.free.nrw.commons.bookmarks.items.BookmarkItemsTable.TABLE_NAME
+import fr.free.nrw.commons.di.CommonsDaggerContentProvider
+import androidx.core.net.toUri
+import fr.free.nrw.commons.bookmarks.items.BookmarkItemsTable.COLUMN_ID
+
+/**
+ * Handles private storage for bookmarked items
+ */
+class BookmarkItemsContentProvider : CommonsDaggerContentProvider() {
+ override fun getType(uri: Uri): String? = null
+
+ /**
+ * Queries the SQLite database for the bookmark items
+ * @param uri : contains the uri for bookmark items
+ * @param projection : contains the all fields of the table
+ * @param selection : handles Where
+ * @param selectionArgs : the condition of Where clause
+ * @param sortOrder : ascending or descending
+ */
+ override fun query(
+ uri: Uri, projection: Array?, selection: String?,
+ selectionArgs: Array?, sortOrder: String?
+ ): Cursor {
+ val queryBuilder = SQLiteQueryBuilder().apply {
+ tables = TABLE_NAME
+ }
+
+ return queryBuilder.query(
+ requireDb(), projection, selection,
+ selectionArgs, null, null, sortOrder
+ ).apply {
+ setNotificationUri(context?.contentResolver, uri)
+ }
+ }
+
+ /**
+ * Handles the update query of local SQLite Database
+ * @param uri : contains the uri for bookmark items
+ * @param contentValues : new values to be entered to db
+ * @param selection : handles Where
+ * @param selectionArgs : the condition of Where clause
+ */
+ override fun update(
+ uri: Uri, contentValues: ContentValues?,
+ selection: String?, selectionArgs: Array?
+ ): Int {
+ val rowsUpdated: Int
+ if (selection.isNullOrEmpty()) {
+ val id = uri.lastPathSegment!!.toInt()
+ rowsUpdated = requireDb().update(
+ TABLE_NAME,
+ contentValues,
+ "$COLUMN_ID = ?",
+ arrayOf(id.toString())
+ )
+ } else {
+ throw IllegalArgumentException(
+ "Parameter `selection` should be empty when updating an ID"
+ )
+ }
+
+ context?.contentResolver?.notifyChange(uri, null)
+ return rowsUpdated
+ }
+
+ /**
+ * Handles the insertion of new bookmark items record to local SQLite Database
+ */
+ override fun insert(uri: Uri, contentValues: ContentValues?): Uri? {
+ val id = requireDb().insert(TABLE_NAME, null, contentValues)
+ context?.contentResolver?.notifyChange(uri, null)
+ return "$BASE_URI/$id".toUri()
+ }
+
+
+ /**
+ * Handles the deletion of new bookmark items record to local SQLite Database
+ */
+ override fun delete(uri: Uri, s: String?, strings: Array?): Int {
+ val rows: Int = requireDb().delete(
+ TABLE_NAME,
+ "$COLUMN_ID = ?",
+ arrayOf(uri.lastPathSegment)
+ )
+ context?.contentResolver?.notifyChange(uri, null)
+ return rows
+ }
+
+ companion object {
+ private const val BASE_PATH = "bookmarksItems"
+ val BASE_URI: Uri = "content://${BuildConfig.BOOKMARK_ITEMS_AUTHORITY}/$BASE_PATH".toUri()
+ fun uriForName(id: String) = "$BASE_URI/$id".toUri()
+ }
+}
diff --git a/app/src/main/java/fr/free/nrw/commons/bookmarks/items/BookmarkItemsController.java b/app/src/main/java/fr/free/nrw/commons/bookmarks/items/BookmarkItemsController.java
deleted file mode 100644
index d059e4cc4..000000000
--- a/app/src/main/java/fr/free/nrw/commons/bookmarks/items/BookmarkItemsController.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package fr.free.nrw.commons.bookmarks.items;
-
-import fr.free.nrw.commons.upload.structure.depictions.DepictedItem;
-import java.util.List;
-import javax.inject.Inject;
-import javax.inject.Singleton;
-
-/**
- * Handles loading bookmarked items from Database
- */
-@Singleton
-public class BookmarkItemsController {
-
- @Inject
- BookmarkItemsDao bookmarkItemsDao;
-
- @Inject
- public BookmarkItemsController() {}
-
- /**
- * Load from DB the bookmarked items
- * @return a list of DepictedItem objects.
- */
- public List loadFavoritesItems() {
- return bookmarkItemsDao.getAllBookmarksItems();
- }
-}
diff --git a/app/src/main/java/fr/free/nrw/commons/bookmarks/items/BookmarkItemsController.kt b/app/src/main/java/fr/free/nrw/commons/bookmarks/items/BookmarkItemsController.kt
new file mode 100644
index 000000000..d1a9ef785
--- /dev/null
+++ b/app/src/main/java/fr/free/nrw/commons/bookmarks/items/BookmarkItemsController.kt
@@ -0,0 +1,23 @@
+package fr.free.nrw.commons.bookmarks.items
+
+import fr.free.nrw.commons.upload.structure.depictions.DepictedItem
+import javax.inject.Inject
+import javax.inject.Singleton
+
+/**
+ * Handles loading bookmarked items from Database
+ */
+@Singleton
+class BookmarkItemsController @Inject constructor() {
+ @JvmField
+ @Inject
+ var bookmarkItemsDao: BookmarkItemsDao? = null
+
+ /**
+ * Load from DB the bookmarked items
+ * @return a list of DepictedItem objects.
+ */
+ fun loadFavoritesItems(): List {
+ return bookmarkItemsDao?.getAllBookmarksItems() ?: emptyList()
+ }
+}
diff --git a/app/src/main/java/fr/free/nrw/commons/bookmarks/items/BookmarkItemsDao.java b/app/src/main/java/fr/free/nrw/commons/bookmarks/items/BookmarkItemsDao.java
deleted file mode 100644
index 6788a8290..000000000
--- a/app/src/main/java/fr/free/nrw/commons/bookmarks/items/BookmarkItemsDao.java
+++ /dev/null
@@ -1,329 +0,0 @@
-package fr.free.nrw.commons.bookmarks.items;
-
-import android.annotation.SuppressLint;
-import android.content.ContentProviderClient;
-import android.content.ContentValues;
-import android.database.Cursor;
-import android.database.sqlite.SQLiteDatabase;
-import android.os.RemoteException;
-import fr.free.nrw.commons.category.CategoryItem;
-import fr.free.nrw.commons.upload.structure.depictions.DepictedItem;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import javax.inject.Inject;
-import javax.inject.Named;
-import javax.inject.Provider;
-import javax.inject.Singleton;
-import org.apache.commons.lang3.StringUtils;
-
-/**
- * Handles database operations for bookmarked items
- */
-@Singleton
-public class BookmarkItemsDao {
-
- private final Provider clientProvider;
-
- @Inject
- public BookmarkItemsDao(
- @Named("bookmarksItem") final Provider clientProvider) {
- this.clientProvider = clientProvider;
- }
-
-
- /**
- * Find all persisted items bookmarks on database
- * @return list of bookmarks
- */
- public List getAllBookmarksItems() {
- final List items = new ArrayList<>();
- final ContentProviderClient db = clientProvider.get();
- try (final Cursor cursor = db.query(
- BookmarkItemsContentProvider.BASE_URI,
- Table.ALL_FIELDS,
- null,
- new String[]{},
- null)) {
- while (cursor != null && cursor.moveToNext()) {
- items.add(fromCursor(cursor));
- }
- } catch (final RemoteException e) {
- throw new RuntimeException(e);
- } finally {
- db.release();
- }
- return items;
- }
-
-
- /**
- * Look for a bookmark in database and in order to insert or delete it
- * @param depictedItem : Bookmark object
- * @return boolean : is bookmark now favorite ?
- */
- public boolean updateBookmarkItem(final DepictedItem depictedItem) {
- final boolean bookmarkExists = findBookmarkItem(depictedItem.getId());
- if (bookmarkExists) {
- deleteBookmarkItem(depictedItem);
- } else {
- addBookmarkItem(depictedItem);
- }
- return !bookmarkExists;
- }
-
- /**
- * Add a Bookmark to database
- * @param depictedItem : Bookmark to add
- */
- private void addBookmarkItem(final DepictedItem depictedItem) {
- final ContentProviderClient db = clientProvider.get();
- try {
- db.insert(BookmarkItemsContentProvider.BASE_URI, toContentValues(depictedItem));
- } catch (final RemoteException e) {
- throw new RuntimeException(e);
- } finally {
- db.release();
- }
- }
-
- /**
- * Delete a bookmark from database
- * @param depictedItem : Bookmark to delete
- */
- private void deleteBookmarkItem(final DepictedItem depictedItem) {
- final ContentProviderClient db = clientProvider.get();
- try {
- db.delete(BookmarkItemsContentProvider.uriForName(depictedItem.getId()), null, null);
- } catch (final RemoteException e) {
- throw new RuntimeException(e);
- } finally {
- db.release();
- }
- }
-
- /**
- * Find a bookmark from database based on its name
- * @param depictedItemID : Bookmark to find
- * @return boolean : is bookmark in database ?
- */
- public boolean findBookmarkItem(final String depictedItemID) {
- if (depictedItemID == null) { //Avoiding NPE's
- return false;
- }
- final ContentProviderClient db = clientProvider.get();
- try (final Cursor cursor = db.query(
- BookmarkItemsContentProvider.BASE_URI,
- Table.ALL_FIELDS,
- Table.COLUMN_ID + "=?",
- new String[]{depictedItemID},
- null
- )) {
- if (cursor != null && cursor.moveToFirst()) {
- return true;
- }
- } catch (final RemoteException e) {
- throw new RuntimeException(e);
- } finally {
- db.release();
- }
- return false;
- }
-
- /**
- * Recives real data from cursor
- * @param cursor : Object for storing database data
- * @return DepictedItem
- */
- @SuppressLint("Range")
- DepictedItem fromCursor(final Cursor cursor) {
- final String fileName = cursor.getString(cursor.getColumnIndex(Table.COLUMN_NAME));
- final String description
- = cursor.getString(cursor.getColumnIndex(Table.COLUMN_DESCRIPTION));
- final String imageUrl = cursor.getString(cursor.getColumnIndex(Table.COLUMN_IMAGE));
- final String instanceListString
- = cursor.getString(cursor.getColumnIndex(Table.COLUMN_INSTANCE_LIST));
- final List instanceList = StringToArray(instanceListString);
- final String categoryNameListString = cursor.getString(cursor
- .getColumnIndex(Table.COLUMN_CATEGORIES_NAME_LIST));
- final List categoryNameList = StringToArray(categoryNameListString);
- final String categoryDescriptionListString = cursor.getString(cursor
- .getColumnIndex(Table.COLUMN_CATEGORIES_DESCRIPTION_LIST));
- final List categoryDescriptionList = StringToArray(categoryDescriptionListString);
- final String categoryThumbnailListString = cursor.getString(cursor
- .getColumnIndex(Table.COLUMN_CATEGORIES_THUMBNAIL_LIST));
- final List categoryThumbnailList = StringToArray(categoryThumbnailListString);
- final List categoryList = convertToCategoryItems(categoryNameList,
- categoryDescriptionList, categoryThumbnailList);
- final boolean isSelected
- = Boolean.parseBoolean(cursor.getString(cursor
- .getColumnIndex(Table.COLUMN_IS_SELECTED)));
- final String id = cursor.getString(cursor.getColumnIndex(Table.COLUMN_ID));
-
- return new DepictedItem(
- fileName,
- description,
- imageUrl,
- instanceList,
- categoryList,
- isSelected,
- id
- );
- }
-
- private List convertToCategoryItems(List categoryNameList,
- List categoryDescriptionList, List categoryThumbnailList) {
- List categoryItems = new ArrayList<>();
- for(int i=0; i StringToArray(final String listString) {
- final String[] elements = listString.split(",");
- return Arrays.asList(elements);
- }
-
- /**
- * Converts string to List
- * @param list list of items
- * @return string comma separated single string of items
- */
- private String ArrayToString(final List list) {
- if (list != null) {
- return StringUtils.join(list, ',');
- }
- return null;
- }
-
- /**
- * Takes data from DepictedItem and create a content value object
- * @param depictedItem depicted item
- * @return ContentValues
- */
- private ContentValues toContentValues(final DepictedItem depictedItem) {
-
- final List namesOfCommonsCategories = new ArrayList<>();
- for (final CategoryItem category :
- depictedItem.getCommonsCategories()) {
- namesOfCommonsCategories.add(category.getName());
- }
-
- final List descriptionsOfCommonsCategories = new ArrayList<>();
- for (final CategoryItem category :
- depictedItem.getCommonsCategories()) {
- descriptionsOfCommonsCategories.add(category.getDescription());
- }
-
- final List thumbnailsOfCommonsCategories = new ArrayList<>();
- for (final CategoryItem category :
- depictedItem.getCommonsCategories()) {
- thumbnailsOfCommonsCategories.add(category.getThumbnail());
- }
-
- final ContentValues cv = new ContentValues();
- cv.put(Table.COLUMN_NAME, depictedItem.getName());
- cv.put(Table.COLUMN_DESCRIPTION, depictedItem.getDescription());
- cv.put(Table.COLUMN_IMAGE, depictedItem.getImageUrl());
- cv.put(Table.COLUMN_INSTANCE_LIST, ArrayToString(depictedItem.getInstanceOfs()));
- cv.put(Table.COLUMN_CATEGORIES_NAME_LIST, ArrayToString(namesOfCommonsCategories));
- cv.put(Table.COLUMN_CATEGORIES_DESCRIPTION_LIST,
- ArrayToString(descriptionsOfCommonsCategories));
- cv.put(Table.COLUMN_CATEGORIES_THUMBNAIL_LIST,
- ArrayToString(thumbnailsOfCommonsCategories));
- cv.put(Table.COLUMN_IS_SELECTED, depictedItem.isSelected());
- cv.put(Table.COLUMN_ID, depictedItem.getId());
- return cv;
- }
-
- /**
- * Table of bookmarksItems data
- */
- public static final class Table {
- public static final String TABLE_NAME = "bookmarksItems";
- public static final String COLUMN_NAME = "item_name";
- public static final String COLUMN_DESCRIPTION = "item_description";
- public static final String COLUMN_IMAGE = "item_image_url";
- public static final String COLUMN_INSTANCE_LIST = "item_instance_of";
- public static final String COLUMN_CATEGORIES_NAME_LIST = "item_name_categories";
- public static final String COLUMN_CATEGORIES_DESCRIPTION_LIST = "item_description_categories";
- public static final String COLUMN_CATEGORIES_THUMBNAIL_LIST = "item_thumbnail_categories";
- public static final String COLUMN_IS_SELECTED = "item_is_selected";
- public static final String COLUMN_ID = "item_id";
-
- public static final String[] ALL_FIELDS = {
- COLUMN_NAME,
- COLUMN_DESCRIPTION,
- COLUMN_IMAGE,
- COLUMN_INSTANCE_LIST,
- COLUMN_CATEGORIES_NAME_LIST,
- COLUMN_CATEGORIES_DESCRIPTION_LIST,
- COLUMN_CATEGORIES_THUMBNAIL_LIST,
- COLUMN_IS_SELECTED,
- COLUMN_ID
- };
-
- 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,"
- + COLUMN_DESCRIPTION + " STRING,"
- + COLUMN_IMAGE + " STRING,"
- + COLUMN_INSTANCE_LIST + " STRING,"
- + COLUMN_CATEGORIES_NAME_LIST + " STRING,"
- + COLUMN_CATEGORIES_DESCRIPTION_LIST + " STRING,"
- + COLUMN_CATEGORIES_THUMBNAIL_LIST + " STRING,"
- + COLUMN_IS_SELECTED + " STRING,"
- + COLUMN_ID + " STRING PRIMARY KEY"
- + ");";
-
- /**
- * Creates table
- * @param db SQLiteDatabase
- */
- public static void onCreate(final SQLiteDatabase db) {
- db.execSQL(CREATE_TABLE_STATEMENT);
- }
-
- /**
- * Deletes database
- * @param db SQLiteDatabase
- */
- public static void onDelete(final SQLiteDatabase db) {
- db.execSQL(DROP_TABLE_STATEMENT);
- onCreate(db);
- }
-
- /**
- * Updates database
- * @param db SQLiteDatabase
- * @param from starting
- * @param to end
- */
- public static void onUpdate(final SQLiteDatabase db, int from, final int to) {
- if (from == to) {
- return;
- }
- if (from < 18) {
- // doesn't exist yet
- from++;
- onUpdate(db, from, to);
- return;
- }
-
- if (from == 18) {
- // table added in version 19
- onCreate(db);
- from++;
- onUpdate(db, from, to);
- }
- }
- }
-}
diff --git a/app/src/main/java/fr/free/nrw/commons/bookmarks/items/BookmarkItemsDao.kt b/app/src/main/java/fr/free/nrw/commons/bookmarks/items/BookmarkItemsDao.kt
new file mode 100644
index 000000000..e21e1ac8f
--- /dev/null
+++ b/app/src/main/java/fr/free/nrw/commons/bookmarks/items/BookmarkItemsDao.kt
@@ -0,0 +1,203 @@
+package fr.free.nrw.commons.bookmarks.items
+
+import android.annotation.SuppressLint
+import android.content.ContentProviderClient
+import android.content.ContentValues
+import android.database.Cursor
+import android.os.RemoteException
+import androidx.core.content.contentValuesOf
+import fr.free.nrw.commons.bookmarks.items.BookmarkItemsContentProvider.Companion.BASE_URI
+import fr.free.nrw.commons.bookmarks.items.BookmarkItemsContentProvider.Companion.uriForName
+import fr.free.nrw.commons.bookmarks.items.BookmarkItemsTable.COLUMN_CATEGORIES_DESCRIPTION_LIST
+import fr.free.nrw.commons.bookmarks.items.BookmarkItemsTable.COLUMN_CATEGORIES_NAME_LIST
+import fr.free.nrw.commons.bookmarks.items.BookmarkItemsTable.COLUMN_CATEGORIES_THUMBNAIL_LIST
+import fr.free.nrw.commons.bookmarks.items.BookmarkItemsTable.COLUMN_DESCRIPTION
+import fr.free.nrw.commons.bookmarks.items.BookmarkItemsTable.COLUMN_ID
+import fr.free.nrw.commons.bookmarks.items.BookmarkItemsTable.COLUMN_IMAGE
+import fr.free.nrw.commons.bookmarks.items.BookmarkItemsTable.COLUMN_INSTANCE_LIST
+import fr.free.nrw.commons.bookmarks.items.BookmarkItemsTable.COLUMN_IS_SELECTED
+import fr.free.nrw.commons.bookmarks.items.BookmarkItemsTable.COLUMN_NAME
+import fr.free.nrw.commons.category.CategoryItem
+import fr.free.nrw.commons.upload.structure.depictions.DepictedItem
+import fr.free.nrw.commons.utils.arrayToString
+import fr.free.nrw.commons.utils.getString
+import fr.free.nrw.commons.utils.getStringArray
+import javax.inject.Inject
+import javax.inject.Named
+import javax.inject.Provider
+import javax.inject.Singleton
+
+/**
+ * Handles database operations for bookmarked items
+ */
+@Singleton
+class BookmarkItemsDao @Inject constructor(
+ @param:Named("bookmarksItem") private val clientProvider: Provider
+) {
+ /**
+ * Find all persisted items bookmarks on database
+ * @return list of bookmarks
+ */
+ fun getAllBookmarksItems(): List {
+ val items: MutableList = mutableListOf()
+ val db = clientProvider.get()
+ try {
+ db.query(
+ BASE_URI,
+ BookmarkItemsTable.ALL_FIELDS,
+ null,
+ arrayOf(),
+ null
+ ).use { cursor ->
+ while (cursor != null && cursor.moveToNext()) {
+ items.add(fromCursor(cursor))
+ }
+ }
+ } catch (e: RemoteException) {
+ throw RuntimeException(e)
+ } finally {
+ db.release()
+ }
+ return items
+ }
+
+
+ /**
+ * Look for a bookmark in database and in order to insert or delete it
+ * @param depictedItem : Bookmark object
+ * @return boolean : is bookmark now favorite ?
+ */
+ fun updateBookmarkItem(depictedItem: DepictedItem): Boolean {
+ val bookmarkExists = findBookmarkItem(depictedItem.id)
+ if (bookmarkExists) {
+ deleteBookmarkItem(depictedItem)
+ } else {
+ addBookmarkItem(depictedItem)
+ }
+ return !bookmarkExists
+ }
+
+ /**
+ * Add a Bookmark to database
+ * @param depictedItem : Bookmark to add
+ */
+ private fun addBookmarkItem(depictedItem: DepictedItem) {
+ val db = clientProvider.get()
+ try {
+ db.insert(BASE_URI, toContentValues(depictedItem))
+ } catch (e: RemoteException) {
+ throw RuntimeException(e)
+ } finally {
+ db.release()
+ }
+ }
+
+ /**
+ * Delete a bookmark from database
+ * @param depictedItem : Bookmark to delete
+ */
+ private fun deleteBookmarkItem(depictedItem: DepictedItem) {
+ val db = clientProvider.get()
+ try {
+ db.delete(uriForName(depictedItem.id), null, null)
+ } catch (e: RemoteException) {
+ throw RuntimeException(e)
+ } finally {
+ db.release()
+ }
+ }
+
+ /**
+ * Find a bookmark from database based on its name
+ * @param depictedItemID : Bookmark to find
+ * @return boolean : is bookmark in database ?
+ */
+ fun findBookmarkItem(depictedItemID: String?): Boolean {
+ if (depictedItemID == null) { //Avoiding NPE's
+ return false
+ }
+ val db = clientProvider.get()
+ try {
+ db.query(
+ BASE_URI,
+ BookmarkItemsTable.ALL_FIELDS,
+ COLUMN_ID + "=?",
+ arrayOf(depictedItemID),
+ null
+ ).use { cursor ->
+ if (cursor != null && cursor.moveToFirst()) {
+ return true
+ }
+ }
+ } catch (e: RemoteException) {
+ throw RuntimeException(e)
+ } finally {
+ db.release()
+ }
+ return false
+ }
+
+ /**
+ * Recives real data from cursor
+ * @param cursor : Object for storing database data
+ * @return DepictedItem
+ */
+ @SuppressLint("Range")
+ fun fromCursor(cursor: Cursor) = with(cursor) {
+ var name = getString(COLUMN_NAME)
+ if (name == null) {
+ name = ""
+ }
+
+ var id = getString(COLUMN_ID)
+ if (id == null) {
+ id = ""
+ }
+
+ DepictedItem(
+ name,
+ getString(COLUMN_DESCRIPTION),
+ getString(COLUMN_IMAGE),
+ getStringArray(COLUMN_INSTANCE_LIST),
+ convertToCategoryItems(
+ getStringArray(COLUMN_CATEGORIES_NAME_LIST),
+ getStringArray(COLUMN_CATEGORIES_DESCRIPTION_LIST),
+ getStringArray(COLUMN_CATEGORIES_THUMBNAIL_LIST)
+ ),
+ getString(COLUMN_IS_SELECTED).toBoolean(),
+ id
+ )
+ }
+
+ private fun convertToCategoryItems(
+ categoryNameList: List,
+ categoryDescriptionList: List,
+ categoryThumbnailList: List
+ ): List = categoryNameList.mapIndexed { index, name ->
+ CategoryItem(
+ name = name,
+ description = categoryDescriptionList.getOrNull(index),
+ thumbnail = categoryThumbnailList.getOrNull(index),
+ isSelected = false
+ )
+ }
+
+ /**
+ * Takes data from DepictedItem and create a content value object
+ * @param depictedItem depicted item
+ * @return ContentValues
+ */
+ private fun toContentValues(depictedItem: DepictedItem): ContentValues {
+ return contentValuesOf(
+ COLUMN_NAME to depictedItem.name,
+ COLUMN_DESCRIPTION to depictedItem.description,
+ COLUMN_IMAGE to depictedItem.imageUrl,
+ COLUMN_INSTANCE_LIST to arrayToString(depictedItem.instanceOfs),
+ COLUMN_CATEGORIES_NAME_LIST to arrayToString(depictedItem.commonsCategories.map { it.name }),
+ COLUMN_CATEGORIES_DESCRIPTION_LIST to arrayToString(depictedItem.commonsCategories.map { it.description }),
+ COLUMN_CATEGORIES_THUMBNAIL_LIST to arrayToString(depictedItem.commonsCategories.map { it.thumbnail }),
+ COLUMN_IS_SELECTED to depictedItem.isSelected,
+ COLUMN_ID to depictedItem.id,
+ )
+ }
+}
diff --git a/app/src/main/java/fr/free/nrw/commons/bookmarks/items/BookmarkItemsFragment.java b/app/src/main/java/fr/free/nrw/commons/bookmarks/items/BookmarkItemsFragment.java
deleted file mode 100644
index 75a0fa7a4..000000000
--- a/app/src/main/java/fr/free/nrw/commons/bookmarks/items/BookmarkItemsFragment.java
+++ /dev/null
@@ -1,81 +0,0 @@
-package fr.free.nrw.commons.bookmarks.items;
-
-import android.content.Context;
-import android.os.Bundle;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.ProgressBar;
-import android.widget.RelativeLayout;
-import android.widget.TextView;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
-import androidx.recyclerview.widget.LinearLayoutManager;
-import androidx.recyclerview.widget.RecyclerView;
-import dagger.android.support.DaggerFragment;
-import fr.free.nrw.commons.R;
-import fr.free.nrw.commons.databinding.FragmentBookmarksItemsBinding;
-import fr.free.nrw.commons.upload.structure.depictions.DepictedItem;
-import java.util.List;
-import javax.inject.Inject;
-import org.jetbrains.annotations.NotNull;
-
-/**
- * Tab fragment to show list of bookmarked Wikidata Items
- */
-public class BookmarkItemsFragment extends DaggerFragment {
-
- private FragmentBookmarksItemsBinding binding;
-
- @Inject
- BookmarkItemsController controller;
-
- public static BookmarkItemsFragment newInstance() {
- return new BookmarkItemsFragment();
- }
-
- @Override
- public View onCreateView(
- @NonNull final LayoutInflater inflater,
- final ViewGroup container,
- final Bundle savedInstanceState
- ) {
- binding = FragmentBookmarksItemsBinding.inflate(inflater, container, false);
- return binding.getRoot();
- }
-
- @Override
- public void onViewCreated(final @NotNull View view, @Nullable final Bundle savedInstanceState) {
- super.onViewCreated(view, savedInstanceState);
- initList(requireContext());
- }
-
- @Override
- public void onResume() {
- super.onResume();
- initList(requireContext());
- }
-
- /**
- * Get list of DepictedItem and sets to the adapter
- * @param context context
- */
- private void initList(final Context context) {
- final List depictItems = controller.loadFavoritesItems();
- final BookmarkItemsAdapter adapter = new BookmarkItemsAdapter(depictItems, context);
- binding.listView.setAdapter(adapter);
- binding.loadingImagesProgressBar.setVisibility(View.GONE);
- if (depictItems.isEmpty()) {
- binding.statusMessage.setText(R.string.bookmark_empty);
- binding.statusMessage.setVisibility(View.VISIBLE);
- } else {
- binding.statusMessage.setVisibility(View.GONE);
- }
- }
-
- @Override
- public void onDestroy() {
- super.onDestroy();
- binding = null;
- }
-}
diff --git a/app/src/main/java/fr/free/nrw/commons/bookmarks/items/BookmarkItemsFragment.kt b/app/src/main/java/fr/free/nrw/commons/bookmarks/items/BookmarkItemsFragment.kt
new file mode 100644
index 000000000..aa9dcccc0
--- /dev/null
+++ b/app/src/main/java/fr/free/nrw/commons/bookmarks/items/BookmarkItemsFragment.kt
@@ -0,0 +1,62 @@
+package fr.free.nrw.commons.bookmarks.items
+
+import android.content.Context
+import android.os.Bundle
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import dagger.android.support.DaggerFragment
+import fr.free.nrw.commons.R
+import fr.free.nrw.commons.databinding.FragmentBookmarksItemsBinding
+import javax.inject.Inject
+
+/**
+ * Tab fragment to show list of bookmarked Wikidata Items
+ */
+class BookmarkItemsFragment : DaggerFragment() {
+ private var binding: FragmentBookmarksItemsBinding? = null
+
+ @JvmField
+ @Inject
+ var controller: BookmarkItemsController? = null
+
+ override fun onCreateView(
+ inflater: LayoutInflater,
+ container: ViewGroup?,
+ savedInstanceState: Bundle?
+ ): View {
+ binding = FragmentBookmarksItemsBinding.inflate(inflater, container, false)
+ return binding!!.root
+ }
+
+ override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+ super.onViewCreated(view, savedInstanceState)
+ initList(requireContext())
+ }
+
+ override fun onResume() {
+ super.onResume()
+ initList(requireContext())
+ }
+
+ /**
+ * Get list of DepictedItem and sets to the adapter
+ * @param context context
+ */
+ private fun initList(context: Context) {
+ val depictItems = controller!!.loadFavoritesItems()
+ binding!!.listView.adapter = BookmarkItemsAdapter(depictItems, context)
+ binding!!.loadingImagesProgressBar.visibility = View.GONE
+ if (depictItems.isEmpty()) {
+ binding!!.statusMessage.setText(R.string.bookmark_empty)
+ binding!!.statusMessage.visibility = View.VISIBLE
+ } else {
+ binding!!.statusMessage.visibility = View.GONE
+ }
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ binding = null
+ }
+}
diff --git a/app/src/main/java/fr/free/nrw/commons/bookmarks/items/BookmarkItemsTable.kt b/app/src/main/java/fr/free/nrw/commons/bookmarks/items/BookmarkItemsTable.kt
new file mode 100644
index 000000000..b1b03c71b
--- /dev/null
+++ b/app/src/main/java/fr/free/nrw/commons/bookmarks/items/BookmarkItemsTable.kt
@@ -0,0 +1,90 @@
+package fr.free.nrw.commons.bookmarks.items
+
+import android.database.sqlite.SQLiteDatabase
+
+/**
+ * Table of bookmarksItems data
+ */
+object BookmarkItemsTable {
+ const val TABLE_NAME = "bookmarksItems"
+ const val COLUMN_NAME = "item_name"
+ const val COLUMN_DESCRIPTION = "item_description"
+ const val COLUMN_IMAGE = "item_image_url"
+ const val COLUMN_INSTANCE_LIST = "item_instance_of"
+ const val COLUMN_CATEGORIES_NAME_LIST = "item_name_categories"
+ const val COLUMN_CATEGORIES_DESCRIPTION_LIST = "item_description_categories"
+ const val COLUMN_CATEGORIES_THUMBNAIL_LIST = "item_thumbnail_categories"
+ const val COLUMN_IS_SELECTED = "item_is_selected"
+ const val COLUMN_ID = "item_id"
+
+ val ALL_FIELDS = arrayOf(
+ COLUMN_NAME,
+ COLUMN_DESCRIPTION,
+ COLUMN_IMAGE,
+ COLUMN_INSTANCE_LIST,
+ COLUMN_CATEGORIES_NAME_LIST,
+ COLUMN_CATEGORIES_DESCRIPTION_LIST,
+ COLUMN_CATEGORIES_THUMBNAIL_LIST,
+ COLUMN_IS_SELECTED,
+ COLUMN_ID
+ )
+
+ const val DROP_TABLE_STATEMENT = "DROP TABLE IF EXISTS $TABLE_NAME"
+
+ val CREATE_TABLE_STATEMENT =
+ """CREATE TABLE $TABLE_NAME (
+ $COLUMN_NAME STRING,
+ $COLUMN_DESCRIPTION STRING,
+ $COLUMN_IMAGE STRING,
+ $COLUMN_INSTANCE_LIST STRING,
+ $COLUMN_CATEGORIES_NAME_LIST STRING,
+ $COLUMN_CATEGORIES_DESCRIPTION_LIST STRING,
+ $COLUMN_CATEGORIES_THUMBNAIL_LIST STRING,
+ $COLUMN_IS_SELECTED STRING,
+ $COLUMN_ID STRING PRIMARY KEY
+ );""".trimIndent()
+
+ /**
+ * Creates table
+ *
+ * @param db SQLiteDatabase
+ */
+ fun onCreate(db: SQLiteDatabase) {
+ db.execSQL(CREATE_TABLE_STATEMENT)
+ }
+
+ /**
+ * Deletes database
+ *
+ * @param db SQLiteDatabase
+ */
+ fun onDelete(db: SQLiteDatabase) {
+ db.execSQL(DROP_TABLE_STATEMENT)
+ onCreate(db)
+ }
+
+ /**
+ * Updates database
+ *
+ * @param db SQLiteDatabase
+ * @param from starting
+ * @param to end
+ */
+ fun onUpdate(db: SQLiteDatabase, from: Int, to: Int) {
+ if (from == to) {
+ return
+ }
+
+ if (from < 18) {
+ // doesn't exist yet
+ onUpdate(db, from + 1, to)
+ return
+ }
+
+ if (from == 18) {
+ // table added in version 19
+ onCreate(db)
+ onUpdate(db, from + 1, to)
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/fr/free/nrw/commons/bookmarks/pictures/BookmarkPicturesContentProvider.java b/app/src/main/java/fr/free/nrw/commons/bookmarks/pictures/BookmarkPicturesContentProvider.java
deleted file mode 100644
index 2aac07902..000000000
--- a/app/src/main/java/fr/free/nrw/commons/bookmarks/pictures/BookmarkPicturesContentProvider.java
+++ /dev/null
@@ -1,120 +0,0 @@
-package fr.free.nrw.commons.bookmarks.pictures;
-
-import android.content.ContentValues;
-import android.database.Cursor;
-import android.database.sqlite.SQLiteDatabase;
-import android.database.sqlite.SQLiteQueryBuilder;
-// We can get uri using java.Net.Uri, but andoid implimentation is faster (but it's forgiving with handling exceptions though)
-import android.net.Uri;
-import android.text.TextUtils;
-
-import androidx.annotation.NonNull;
-
-import javax.inject.Inject;
-
-import fr.free.nrw.commons.BuildConfig;
-import fr.free.nrw.commons.data.DBOpenHelper;
-import fr.free.nrw.commons.di.CommonsDaggerContentProvider;
-import timber.log.Timber;
-
-import static fr.free.nrw.commons.bookmarks.pictures.BookmarkPicturesDao.Table.COLUMN_MEDIA_NAME;
-import static fr.free.nrw.commons.bookmarks.pictures.BookmarkPicturesDao.Table.TABLE_NAME;
-
-/**
- * Handles private storage for Bookmark pictures
- */
-public class BookmarkPicturesContentProvider extends CommonsDaggerContentProvider {
-
- private static final String BASE_PATH = "bookmarks";
- public static final Uri BASE_URI = Uri.parse("content://" + BuildConfig.BOOKMARK_AUTHORITY + "/" + BASE_PATH);
-
- /**
- * Append bookmark pictures name to the base uri
- */
- public static Uri uriForName(String name) {
- return Uri.parse(BASE_URI.toString() + "/" + name);
- }
-
- @Inject
- DBOpenHelper dbOpenHelper;
-
- @Override
- public String getType(@NonNull Uri uri) {
- return null;
- }
-
- /**
- * Queries the SQLite database for the bookmark pictures
- * @param uri : contains the uri for bookmark pictures
- * @param projection
- * @param selection : handles Where
- * @param selectionArgs : the condition of Where clause
- * @param sortOrder : ascending or descending
- */
- @SuppressWarnings("ConstantConditions")
- @Override
- public Cursor query(@NonNull Uri uri, String[] projection, String selection,
- String[] selectionArgs, String sortOrder) {
- SQLiteQueryBuilder queryBuilder = new SQLiteQueryBuilder();
- queryBuilder.setTables(TABLE_NAME);
-
- SQLiteDatabase db = dbOpenHelper.getReadableDatabase();
- Cursor cursor = queryBuilder.query(db, projection, selection, selectionArgs, null, null, sortOrder);
- cursor.setNotificationUri(getContext().getContentResolver(), uri);
-
- return cursor;
- }
-
- /**
- * Handles the update query of local SQLite Database
- * @param uri : contains the uri for bookmark pictures
- * @param contentValues : new values to be entered to db
- * @param selection : handles Where
- * @param selectionArgs : the condition of Where clause
- */
- @SuppressWarnings("ConstantConditions")
- @Override
- public int update(@NonNull Uri uri, ContentValues contentValues, String selection,
- String[] selectionArgs) {
- SQLiteDatabase sqlDB = dbOpenHelper.getWritableDatabase();
- int rowsUpdated;
- if (TextUtils.isEmpty(selection)) {
- int id = Integer.valueOf(uri.getLastPathSegment());
- rowsUpdated = sqlDB.update(TABLE_NAME,
- contentValues,
- COLUMN_MEDIA_NAME + " = ?",
- new String[]{String.valueOf(id)});
- } else {
- throw new IllegalArgumentException(
- "Parameter `selection` should be empty when updating an ID");
- }
- getContext().getContentResolver().notifyChange(uri, null);
- return rowsUpdated;
- }
-
- /**
- * Handles the insertion of new bookmark pictures record to local SQLite Database
- */
- @SuppressWarnings("ConstantConditions")
- @Override
- public Uri insert(@NonNull Uri uri, ContentValues contentValues) {
- SQLiteDatabase sqlDB = dbOpenHelper.getWritableDatabase();
- long id = sqlDB.insert(BookmarkPicturesDao.Table.TABLE_NAME, null, contentValues);
- getContext().getContentResolver().notifyChange(uri, null);
- return Uri.parse(BASE_URI + "/" + id);
- }
-
- @SuppressWarnings("ConstantConditions")
- @Override
- public int delete(@NonNull Uri uri, String s, String[] strings) {
- int rows;
- SQLiteDatabase db = dbOpenHelper.getReadableDatabase();
- Timber.d("Deleting bookmark name %s", uri.getLastPathSegment());
- rows = db.delete(TABLE_NAME,
- "media_name = ?",
- new String[]{uri.getLastPathSegment()}
- );
- getContext().getContentResolver().notifyChange(uri, null);
- return rows;
- }
-}
diff --git a/app/src/main/java/fr/free/nrw/commons/bookmarks/pictures/BookmarkPicturesContentProvider.kt b/app/src/main/java/fr/free/nrw/commons/bookmarks/pictures/BookmarkPicturesContentProvider.kt
new file mode 100644
index 000000000..a47eed8ca
--- /dev/null
+++ b/app/src/main/java/fr/free/nrw/commons/bookmarks/pictures/BookmarkPicturesContentProvider.kt
@@ -0,0 +1,100 @@
+package fr.free.nrw.commons.bookmarks.pictures
+
+import android.content.ContentValues
+import android.database.Cursor
+import android.database.sqlite.SQLiteQueryBuilder
+import android.net.Uri
+import fr.free.nrw.commons.BuildConfig
+import fr.free.nrw.commons.di.CommonsDaggerContentProvider
+import androidx.core.net.toUri
+import fr.free.nrw.commons.bookmarks.pictures.BookmarksTable.COLUMN_MEDIA_NAME
+import fr.free.nrw.commons.bookmarks.pictures.BookmarksTable.TABLE_NAME
+
+/**
+ * Handles private storage for Bookmark pictures
+ */
+class BookmarkPicturesContentProvider : CommonsDaggerContentProvider() {
+ override fun getType(uri: Uri): String? = null
+
+ /**
+ * Queries the SQLite database for the bookmark pictures
+ * @param uri : contains the uri for bookmark pictures
+ * @param projection
+ * @param selection : handles Where
+ * @param selectionArgs : the condition of Where clause
+ * @param sortOrder : ascending or descending
+ */
+ override fun query(
+ uri: Uri, projection: Array?, selection: String?,
+ selectionArgs: Array?, sortOrder: String?
+ ): Cursor {
+ val queryBuilder = SQLiteQueryBuilder().apply {
+ tables = TABLE_NAME
+ }
+
+ val cursor = queryBuilder.query(
+ requireDb(), projection, selection,
+ selectionArgs, null, null, sortOrder
+ )
+ cursor.setNotificationUri(context?.contentResolver, uri)
+
+ return cursor
+ }
+
+ /**
+ * Handles the update query of local SQLite Database
+ * @param uri : contains the uri for bookmark pictures
+ * @param contentValues : new values to be entered to db
+ * @param selection : handles Where
+ * @param selectionArgs : the condition of Where clause
+ */
+ override fun update(
+ uri: Uri, contentValues: ContentValues?, selection: String?,
+ selectionArgs: Array?
+ ): Int {
+ val rowsUpdated: Int
+ if (selection.isNullOrEmpty()) {
+ val id = uri.lastPathSegment!!.toInt()
+ rowsUpdated = requireDb().update(
+ TABLE_NAME,
+ contentValues,
+ "$COLUMN_MEDIA_NAME = ?",
+ arrayOf(id.toString())
+ )
+ } else {
+ throw IllegalArgumentException(
+ "Parameter `selection` should be empty when updating an ID"
+ )
+ }
+ context?.contentResolver?.notifyChange(uri, null)
+ return rowsUpdated
+ }
+
+ /**
+ * Handles the insertion of new bookmark pictures record to local SQLite Database
+ */
+ override fun insert(uri: Uri, contentValues: ContentValues?): Uri {
+ val id = requireDb().insert(TABLE_NAME, null, contentValues)
+ context?.contentResolver?.notifyChange(uri, null)
+ return "$BASE_URI/$id".toUri()
+ }
+
+ override fun delete(uri: Uri, s: String?, strings: Array?): Int {
+ val rows: Int = requireDb().delete(
+ TABLE_NAME,
+ "media_name = ?",
+ arrayOf(uri.lastPathSegment)
+ )
+ context?.contentResolver?.notifyChange(uri, null)
+ return rows
+ }
+
+ companion object {
+ private const val BASE_PATH = "bookmarks"
+ @JvmField
+ val BASE_URI: Uri = "content://${BuildConfig.BOOKMARK_AUTHORITY}/$BASE_PATH".toUri()
+
+ @JvmStatic
+ fun uriForName(name: String): Uri = "$BASE_URI/$name".toUri()
+ }
+}
diff --git a/app/src/main/java/fr/free/nrw/commons/bookmarks/pictures/BookmarkPicturesController.java b/app/src/main/java/fr/free/nrw/commons/bookmarks/pictures/BookmarkPicturesController.java
deleted file mode 100644
index 7b644586c..000000000
--- a/app/src/main/java/fr/free/nrw/commons/bookmarks/pictures/BookmarkPicturesController.java
+++ /dev/null
@@ -1,63 +0,0 @@
-package fr.free.nrw.commons.bookmarks.pictures;
-
-import fr.free.nrw.commons.Media;
-import fr.free.nrw.commons.bookmarks.models.Bookmark;
-import fr.free.nrw.commons.media.MediaClient;
-import io.reactivex.Observable;
-import io.reactivex.ObservableSource;
-import io.reactivex.Single;
-import io.reactivex.functions.Function;
-import java.util.ArrayList;
-import java.util.List;
-import javax.inject.Inject;
-import javax.inject.Singleton;
-
-@Singleton
-public class BookmarkPicturesController {
-
- private final MediaClient mediaClient;
- private final BookmarkPicturesDao bookmarkDao;
-
- private List currentBookmarks;
-
- @Inject
- public BookmarkPicturesController(MediaClient mediaClient, BookmarkPicturesDao bookmarkDao) {
- this.mediaClient = mediaClient;
- this.bookmarkDao = bookmarkDao;
- currentBookmarks = new ArrayList<>();
- }
-
- /**
- * Loads the Media objects from the raw data stored in DB and the API.
- * @return a list of bookmarked Media object
- */
- Single> loadBookmarkedPictures() {
- List bookmarks = bookmarkDao.getAllBookmarks();
- currentBookmarks = bookmarks;
- return Observable.fromIterable(bookmarks)
- .flatMap((Function>) this::getMediaFromBookmark)
- .toList();
- }
-
- private Observable getMediaFromBookmark(Bookmark bookmark) {
- return mediaClient.getMedia(bookmark.getMediaName())
- .toObservable()
- .onErrorResumeNext(Observable.empty());
- }
-
- /**
- * Loads the Media objects from the raw data stored in DB and the API.
- * @return a list of bookmarked Media object
- */
- boolean needRefreshBookmarkedPictures() {
- List bookmarks = bookmarkDao.getAllBookmarks();
- return bookmarks.size() != currentBookmarks.size();
- }
-
- /**
- * Cancels the requests to the API and the DB
- */
- void stop() {
- //noop
- }
-}
diff --git a/app/src/main/java/fr/free/nrw/commons/bookmarks/pictures/BookmarkPicturesController.kt b/app/src/main/java/fr/free/nrw/commons/bookmarks/pictures/BookmarkPicturesController.kt
new file mode 100644
index 000000000..5ee88d973
--- /dev/null
+++ b/app/src/main/java/fr/free/nrw/commons/bookmarks/pictures/BookmarkPicturesController.kt
@@ -0,0 +1,38 @@
+package fr.free.nrw.commons.bookmarks.pictures
+
+import fr.free.nrw.commons.Media
+import fr.free.nrw.commons.bookmarks.models.Bookmark
+import fr.free.nrw.commons.media.MediaClient
+import io.reactivex.Observable
+import io.reactivex.Single
+import javax.inject.Inject
+import javax.inject.Singleton
+
+@Singleton
+class BookmarkPicturesController @Inject constructor(
+ private val mediaClient: MediaClient,
+ private val bookmarkDao: BookmarkPicturesDao
+) {
+ private var currentBookmarks: List = listOf()
+
+ /**
+ * Loads the Media objects from the raw data stored in DB and the API.
+ * @return a list of bookmarked Media object
+ */
+ fun loadBookmarkedPictures(): Single> {
+ val bookmarks = bookmarkDao.getAllBookmarks()
+ currentBookmarks = bookmarks
+ return Observable.fromIterable(bookmarks).flatMap {
+ mediaClient.getMedia(it.mediaName)
+ .toObservable()
+ .onErrorResumeNext(Observable.empty())
+ }.toList()
+ }
+
+ fun needRefreshBookmarkedPictures(): Boolean {
+ val bookmarks = bookmarkDao.getAllBookmarks()
+ return bookmarks.size != currentBookmarks.size
+ }
+
+ fun stop() = Unit
+}
diff --git a/app/src/main/java/fr/free/nrw/commons/bookmarks/pictures/BookmarkPicturesDao.java b/app/src/main/java/fr/free/nrw/commons/bookmarks/pictures/BookmarkPicturesDao.java
deleted file mode 100644
index c214ae996..000000000
--- a/app/src/main/java/fr/free/nrw/commons/bookmarks/pictures/BookmarkPicturesDao.java
+++ /dev/null
@@ -1,227 +0,0 @@
-package fr.free.nrw.commons.bookmarks.pictures;
-
-import android.annotation.SuppressLint;
-import android.content.ContentProviderClient;
-import android.content.ContentValues;
-import android.database.Cursor;
-import android.database.sqlite.SQLiteDatabase;
-import android.os.RemoteException;
-
-import androidx.annotation.NonNull;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.inject.Inject;
-import javax.inject.Named;
-import javax.inject.Provider;
-import javax.inject.Singleton;
-
-import fr.free.nrw.commons.bookmarks.models.Bookmark;
-
-import static fr.free.nrw.commons.bookmarks.pictures.BookmarkPicturesContentProvider.BASE_URI;
-
-@Singleton
-public class BookmarkPicturesDao {
-
- private final Provider clientProvider;
-
- @Inject
- public BookmarkPicturesDao(@Named("bookmarks") Provider clientProvider) {
- this.clientProvider = clientProvider;
- }
-
-
- /**
- * Find all persisted pictures bookmarks on database
- *
- * @return list of bookmarks
- */
- @NonNull
- public List getAllBookmarks() {
- List items = new ArrayList<>();
- Cursor cursor = null;
- ContentProviderClient db = clientProvider.get();
- try {
- cursor = db.query(
- BookmarkPicturesContentProvider.BASE_URI,
- Table.ALL_FIELDS,
- null,
- new String[]{},
- null);
- while (cursor != null && cursor.moveToNext()) {
- items.add(fromCursor(cursor));
- }
- } catch (RemoteException e) {
- throw new RuntimeException(e);
- } finally {
- if (cursor != null) {
- cursor.close();
- }
- db.release();
- }
- return items;
- }
-
-
- /**
- * Look for a bookmark in database and in order to insert or delete it
- *
- * @param bookmark : Bookmark object
- * @return boolean : is bookmark now fav ?
- */
- public boolean updateBookmark(Bookmark bookmark) {
- boolean bookmarkExists = findBookmark(bookmark);
- if (bookmarkExists) {
- deleteBookmark(bookmark);
- } else {
- addBookmark(bookmark);
- }
- return !bookmarkExists;
- }
-
- /**
- * Add a Bookmark to database
- *
- * @param bookmark : Bookmark to add
- */
- private void addBookmark(Bookmark bookmark) {
- ContentProviderClient db = clientProvider.get();
- try {
- db.insert(BASE_URI, toContentValues(bookmark));
- } catch (RemoteException e) {
- throw new RuntimeException(e);
- } finally {
- db.release();
- }
- }
-
- /**
- * Delete a bookmark from database
- *
- * @param bookmark : Bookmark to delete
- */
- private void deleteBookmark(Bookmark bookmark) {
- ContentProviderClient db = clientProvider.get();
- try {
- if (bookmark.getContentUri() == null) {
- throw new RuntimeException("tried to delete item with no content URI");
- } else {
- db.delete(bookmark.getContentUri(), null, null);
- }
- } catch (RemoteException e) {
- throw new RuntimeException(e);
- } finally {
- db.release();
- }
- }
-
- /**
- * Find a bookmark from database based on its name
- *
- * @param bookmark : Bookmark to find
- * @return boolean : is bookmark in database ?
- */
- public boolean findBookmark(Bookmark bookmark) {
- if (bookmark == null) {//Avoiding NPE's
- return false;
- }
-
- Cursor cursor = null;
- ContentProviderClient db = clientProvider.get();
- try {
- cursor = db.query(
- BookmarkPicturesContentProvider.BASE_URI,
- Table.ALL_FIELDS,
- Table.COLUMN_MEDIA_NAME + "=?",
- new String[]{bookmark.getMediaName()},
- null);
- if (cursor != null && cursor.moveToFirst()) {
- return true;
- }
- } catch (RemoteException e) {
- // This feels lazy, but to hell with checked exceptions. :)
- throw new RuntimeException(e);
- } finally {
- if (cursor != null) {
- cursor.close();
- }
- db.release();
- }
- return false;
- }
-
- @SuppressLint("Range")
- @NonNull
- Bookmark fromCursor(Cursor cursor) {
- String fileName = cursor.getString(cursor.getColumnIndex(Table.COLUMN_MEDIA_NAME));
- return new Bookmark(
- fileName,
- cursor.getString(cursor.getColumnIndex(Table.COLUMN_CREATOR)),
- BookmarkPicturesContentProvider.uriForName(fileName)
- );
- }
-
- private ContentValues toContentValues(Bookmark bookmark) {
- ContentValues cv = new ContentValues();
- cv.put(BookmarkPicturesDao.Table.COLUMN_MEDIA_NAME, bookmark.getMediaName());
- cv.put(BookmarkPicturesDao.Table.COLUMN_CREATOR, bookmark.getMediaCreator());
- return cv;
- }
-
-
- public static class Table {
- public static final String TABLE_NAME = "bookmarks";
-
- public static final String COLUMN_MEDIA_NAME = "media_name";
- public static final String COLUMN_CREATOR = "media_creator";
-
- // NOTE! KEEP IN SAME ORDER AS THEY ARE DEFINED UP THERE. HELPS HARD CODE COLUMN INDICES.
- public static final String[] ALL_FIELDS = {
- COLUMN_MEDIA_NAME,
- COLUMN_CREATOR
- };
-
- public static final String DROP_TABLE_STATEMENT = "DROP TABLE IF EXISTS " + TABLE_NAME;
-
- public static final String CREATE_TABLE_STATEMENT = "CREATE TABLE " + TABLE_NAME + " ("
- + COLUMN_MEDIA_NAME + " STRING PRIMARY KEY,"
- + COLUMN_CREATOR + " STRING"
- + ");";
-
- public static void onCreate(SQLiteDatabase db) {
- db.execSQL(CREATE_TABLE_STATEMENT);
- }
-
- public static void onDelete(SQLiteDatabase db) {
- db.execSQL(DROP_TABLE_STATEMENT);
- onCreate(db);
- }
-
- public static void onUpdate(SQLiteDatabase db, int from, int to) {
- if (from == to) {
- return;
- }
- if (from < 7) {
- // doesn't exist yet
- from++;
- onUpdate(db, from, to);
- return;
- }
-
- if (from == 7) {
- // table added in version 8
- onCreate(db);
- from++;
- onUpdate(db, from, to);
- return;
- }
-
- if (from == 8) {
- from++;
- onUpdate(db, from, to);
- return;
- }
- }
- }
-}
diff --git a/app/src/main/java/fr/free/nrw/commons/bookmarks/pictures/BookmarkPicturesDao.kt b/app/src/main/java/fr/free/nrw/commons/bookmarks/pictures/BookmarkPicturesDao.kt
new file mode 100644
index 000000000..00c8e3228
--- /dev/null
+++ b/app/src/main/java/fr/free/nrw/commons/bookmarks/pictures/BookmarkPicturesDao.kt
@@ -0,0 +1,144 @@
+package fr.free.nrw.commons.bookmarks.pictures
+
+import android.content.ContentProviderClient
+import android.content.ContentValues
+import android.database.Cursor
+import android.os.RemoteException
+import androidx.core.content.contentValuesOf
+import fr.free.nrw.commons.bookmarks.models.Bookmark
+import fr.free.nrw.commons.bookmarks.pictures.BookmarkPicturesContentProvider.Companion.BASE_URI
+import fr.free.nrw.commons.bookmarks.pictures.BookmarkPicturesContentProvider.Companion.uriForName
+import fr.free.nrw.commons.bookmarks.pictures.BookmarksTable.ALL_FIELDS
+import fr.free.nrw.commons.bookmarks.pictures.BookmarksTable.COLUMN_CREATOR
+import fr.free.nrw.commons.bookmarks.pictures.BookmarksTable.COLUMN_MEDIA_NAME
+import fr.free.nrw.commons.utils.getString
+import javax.inject.Inject
+import javax.inject.Named
+import javax.inject.Provider
+import javax.inject.Singleton
+
+@Singleton
+class BookmarkPicturesDao @Inject constructor(
+ @param:Named("bookmarks") private val clientProvider: Provider
+) {
+ /**
+ * Find all persisted pictures bookmarks on database
+ *
+ * @return list of bookmarks
+ */
+ fun getAllBookmarks(): List {
+ val items: MutableList = mutableListOf()
+ var cursor: Cursor? = null
+ val db = clientProvider.get()
+ try {
+ cursor = db.query(
+ BASE_URI, ALL_FIELDS, null, arrayOf(), null
+ )
+ while (cursor != null && cursor.moveToNext()) {
+ items.add(fromCursor(cursor))
+ }
+ } catch (e: RemoteException) {
+ throw RuntimeException(e)
+ } finally {
+ cursor?.close()
+ db.release()
+ }
+ return items
+ }
+
+ /**
+ * Look for a bookmark in database and in order to insert or delete it
+ *
+ * @param bookmark : Bookmark object
+ * @return boolean : is bookmark now fav ?
+ */
+ fun updateBookmark(bookmark: Bookmark): Boolean {
+ val bookmarkExists = findBookmark(bookmark)
+ if (bookmarkExists) {
+ deleteBookmark(bookmark)
+ } else {
+ addBookmark(bookmark)
+ }
+ return !bookmarkExists
+ }
+
+ /**
+ * Add a Bookmark to database
+ *
+ * @param bookmark : Bookmark to add
+ */
+ private fun addBookmark(bookmark: Bookmark) {
+ val db = clientProvider.get()
+ try {
+ db.insert(BASE_URI, toContentValues(bookmark))
+ } catch (e: RemoteException) {
+ throw RuntimeException(e)
+ } finally {
+ db.release()
+ }
+ }
+
+ /**
+ * Delete a bookmark from database
+ *
+ * @param bookmark : Bookmark to delete
+ */
+ private fun deleteBookmark(bookmark: Bookmark) {
+ val db = clientProvider.get()
+ try {
+ if (bookmark.contentUri == null) {
+ throw RuntimeException("tried to delete item with no content URI")
+ } else {
+ db.delete(bookmark.contentUri!!, null, null)
+ }
+ } catch (e: RemoteException) {
+ throw RuntimeException(e)
+ } finally {
+ db.release()
+ }
+ }
+
+ /**
+ * Find a bookmark from database based on its name
+ *
+ * @param bookmark : Bookmark to find
+ * @return boolean : is bookmark in database ?
+ */
+ fun findBookmark(bookmark: Bookmark?): Boolean {
+ if (bookmark == null) {
+ return false
+ }
+
+ var cursor: Cursor? = null
+ val db = clientProvider.get()
+ try {
+ cursor = db.query(
+ BASE_URI, ALL_FIELDS, "$COLUMN_MEDIA_NAME=?", arrayOf(bookmark.mediaName), null
+ )
+ if (cursor != null && cursor.moveToFirst()) {
+ return true
+ }
+ } catch (e: RemoteException) {
+ throw RuntimeException(e)
+ } finally {
+ cursor?.close()
+ db.release()
+ }
+ return false
+ }
+
+ fun fromCursor(cursor: Cursor): Bookmark {
+ var fileName = cursor.getString(COLUMN_MEDIA_NAME)
+ if (fileName == null) {
+ fileName = ""
+ }
+ return Bookmark(
+ fileName, cursor.getString(COLUMN_CREATOR), uriForName(fileName)
+ )
+ }
+
+ private fun toContentValues(bookmark: Bookmark): ContentValues = contentValuesOf(
+ COLUMN_MEDIA_NAME to bookmark.mediaName,
+ COLUMN_CREATOR to bookmark.mediaCreator
+ )
+}
diff --git a/app/src/main/java/fr/free/nrw/commons/bookmarks/pictures/BookmarkPicturesFragment.java b/app/src/main/java/fr/free/nrw/commons/bookmarks/pictures/BookmarkPicturesFragment.java
deleted file mode 100644
index 9f02e4631..000000000
--- a/app/src/main/java/fr/free/nrw/commons/bookmarks/pictures/BookmarkPicturesFragment.java
+++ /dev/null
@@ -1,218 +0,0 @@
-package fr.free.nrw.commons.bookmarks.pictures;
-
-import static android.view.View.GONE;
-import static android.view.View.VISIBLE;
-
-import android.annotation.SuppressLint;
-import android.os.Bundle;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.AdapterView;
-import android.widget.ListAdapter;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
-import dagger.android.support.DaggerFragment;
-import fr.free.nrw.commons.Media;
-import fr.free.nrw.commons.R;
-import fr.free.nrw.commons.bookmarks.BookmarkListRootFragment;
-import fr.free.nrw.commons.category.GridViewAdapter;
-import fr.free.nrw.commons.databinding.FragmentBookmarksPicturesBinding;
-import fr.free.nrw.commons.utils.NetworkUtils;
-import fr.free.nrw.commons.utils.ViewUtil;
-import io.reactivex.android.schedulers.AndroidSchedulers;
-import io.reactivex.disposables.CompositeDisposable;
-import io.reactivex.schedulers.Schedulers;
-import java.util.List;
-import javax.inject.Inject;
-import timber.log.Timber;
-
-public class BookmarkPicturesFragment extends DaggerFragment {
-
- private GridViewAdapter gridAdapter;
- private CompositeDisposable compositeDisposable = new CompositeDisposable();
-
- private FragmentBookmarksPicturesBinding binding;
- @Inject
- BookmarkPicturesController controller;
-
- /**
- * Create an instance of the fragment with the right bundle parameters
- * @return an instance of the fragment
- */
- public static BookmarkPicturesFragment newInstance() {
- return new BookmarkPicturesFragment();
- }
-
- @Override
- public View onCreateView(
- @NonNull LayoutInflater inflater,
- ViewGroup container,
- Bundle savedInstanceState
- ) {
- binding = FragmentBookmarksPicturesBinding.inflate(inflater, container, false);
- return binding.getRoot();
- }
-
- @Override
- public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
- super.onViewCreated(view, savedInstanceState);
- binding.bookmarkedPicturesList.setOnItemClickListener((AdapterView.OnItemClickListener) getParentFragment());
- initList();
- }
-
- @Override
- public void onStop() {
- super.onStop();
- controller.stop();
- }
-
- @Override
- public void onDestroy() {
- super.onDestroy();
- compositeDisposable.clear();
- binding = null;
- }
-
- @Override
- public void onResume() {
- super.onResume();
- if (controller.needRefreshBookmarkedPictures()) {
- binding.bookmarkedPicturesList.setVisibility(GONE);
- if (gridAdapter != null) {
- gridAdapter.clear();
- ((BookmarkListRootFragment)getParentFragment()).viewPagerNotifyDataSetChanged();
- }
- initList();
- }
- }
-
- /**
- * Checks for internet connection and then initializes
- * the recycler view with bookmarked pictures
- */
- @SuppressLint("CheckResult")
- private void initList() {
- if (!NetworkUtils.isInternetConnectionEstablished(getContext())) {
- handleNoInternet();
- return;
- }
-
- binding.loadingImagesProgressBar.setVisibility(VISIBLE);
- binding.statusMessage.setVisibility(GONE);
-
- compositeDisposable.add(controller.loadBookmarkedPictures()
- .subscribeOn(Schedulers.io())
- .observeOn(AndroidSchedulers.mainThread())
- .subscribe(this::handleSuccess, this::handleError));
- }
-
- /**
- * Handles the UI updates for no internet scenario
- */
- private void handleNoInternet() {
- binding.loadingImagesProgressBar.setVisibility(GONE);
- if (gridAdapter == null || gridAdapter.isEmpty()) {
- binding.statusMessage.setVisibility(VISIBLE);
- binding.statusMessage.setText(getString(R.string.no_internet));
- } else {
- ViewUtil.showShortSnackbar(binding.parentLayout, R.string.no_internet);
- }
- }
-
- /**
- * Logs and handles API error scenario
- * @param throwable
- */
- private void handleError(Throwable throwable) {
- Timber.e(throwable, "Error occurred while loading images inside a category");
- try{
- ViewUtil.showShortSnackbar(binding.getRoot(), R.string.error_loading_images);
- initErrorView();
- }catch (Exception e){
- e.printStackTrace();
- }
- }
-
- /**
- * Handles the UI updates for a error scenario
- */
- private void initErrorView() {
- binding.loadingImagesProgressBar.setVisibility(GONE);
- if (gridAdapter == null || gridAdapter.isEmpty()) {
- binding.statusMessage.setVisibility(VISIBLE);
- binding.statusMessage.setText(getString(R.string.no_images_found));
- } else {
- binding.statusMessage.setVisibility(GONE);
- }
- }
-
- /**
- * Handles the UI updates when there is no bookmarks
- */
- private void initEmptyBookmarkListView() {
- binding.loadingImagesProgressBar.setVisibility(GONE);
- if (gridAdapter == null || gridAdapter.isEmpty()) {
- binding.statusMessage.setVisibility(VISIBLE);
- binding.statusMessage.setText(getString(R.string.bookmark_empty));
- } else {
- binding.statusMessage.setVisibility(GONE);
- }
- }
-
- /**
- * Handles the success scenario
- * On first load, it initializes the grid view. On subsequent loads, it adds items to the adapter
- * @param collection List of new Media to be displayed
- */
- private void handleSuccess(List collection) {
- if (collection == null) {
- initErrorView();
- return;
- }
- if (collection.isEmpty()) {
- initEmptyBookmarkListView();
- return;
- }
-
- if (gridAdapter == null) {
- setAdapter(collection);
- } else {
- if (gridAdapter.containsAll(collection)) {
- binding.loadingImagesProgressBar.setVisibility(GONE);
- binding.statusMessage.setVisibility(GONE);
- binding.bookmarkedPicturesList.setVisibility(VISIBLE);
- binding.bookmarkedPicturesList.setAdapter(gridAdapter);
- return;
- }
- gridAdapter.addItems(collection);
- ((BookmarkListRootFragment) getParentFragment()).viewPagerNotifyDataSetChanged();
- }
- binding.loadingImagesProgressBar.setVisibility(GONE);
- binding.statusMessage.setVisibility(GONE);
- binding.bookmarkedPicturesList.setVisibility(VISIBLE);
- }
-
- /**
- * Initializes the adapter with a list of Media objects
- * @param mediaList List of new Media to be displayed
- */
- private void setAdapter(List mediaList) {
- gridAdapter = new GridViewAdapter(
- this.getContext(),
- R.layout.layout_category_images,
- mediaList
- );
- binding.bookmarkedPicturesList.setAdapter(gridAdapter);
- }
-
- /**
- * It return an instance of gridView adapter which helps in extracting media details
- * used by the gridView
- * @return GridView Adapter
- */
- public ListAdapter getAdapter() {
- return binding.bookmarkedPicturesList.getAdapter();
- }
-
-}
diff --git a/app/src/main/java/fr/free/nrw/commons/bookmarks/pictures/BookmarkPicturesFragment.kt b/app/src/main/java/fr/free/nrw/commons/bookmarks/pictures/BookmarkPicturesFragment.kt
new file mode 100644
index 000000000..e8c61371a
--- /dev/null
+++ b/app/src/main/java/fr/free/nrw/commons/bookmarks/pictures/BookmarkPicturesFragment.kt
@@ -0,0 +1,201 @@
+package fr.free.nrw.commons.bookmarks.pictures
+
+import android.annotation.SuppressLint
+import android.os.Bundle
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.AdapterView.OnItemClickListener
+import android.widget.ListAdapter
+import dagger.android.support.DaggerFragment
+import fr.free.nrw.commons.Media
+import fr.free.nrw.commons.R
+import fr.free.nrw.commons.bookmarks.BookmarkListRootFragment
+import fr.free.nrw.commons.category.GridViewAdapter
+import fr.free.nrw.commons.databinding.FragmentBookmarksPicturesBinding
+import fr.free.nrw.commons.utils.NetworkUtils.isInternetConnectionEstablished
+import fr.free.nrw.commons.utils.ViewUtil.showShortSnackbar
+import io.reactivex.android.schedulers.AndroidSchedulers
+import io.reactivex.disposables.CompositeDisposable
+import io.reactivex.functions.Consumer
+import io.reactivex.schedulers.Schedulers
+import timber.log.Timber
+import javax.inject.Inject
+
+class BookmarkPicturesFragment : DaggerFragment() {
+ private var gridAdapter: GridViewAdapter? = null
+ private val compositeDisposable = CompositeDisposable()
+
+ private var binding: FragmentBookmarksPicturesBinding? = null
+
+ @JvmField
+ @Inject
+ var controller: BookmarkPicturesController? = null
+
+ override fun onCreateView(
+ inflater: LayoutInflater,
+ container: ViewGroup?,
+ savedInstanceState: Bundle?
+ ): View {
+ binding = FragmentBookmarksPicturesBinding.inflate(inflater, container, false)
+ return binding!!.root
+ }
+
+ override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+ super.onViewCreated(view, savedInstanceState)
+ binding!!.bookmarkedPicturesList.onItemClickListener =
+ parentFragment as OnItemClickListener?
+ initList()
+ }
+
+ override fun onStop() {
+ super.onStop()
+ controller!!.stop()
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ compositeDisposable.clear()
+ binding = null
+ }
+
+ override fun onResume() {
+ super.onResume()
+ if (controller!!.needRefreshBookmarkedPictures()) {
+ binding!!.bookmarkedPicturesList.visibility = View.GONE
+ gridAdapter?.let {
+ it.clear()
+ (parentFragment as BookmarkListRootFragment).viewPagerNotifyDataSetChanged()
+ }
+ initList()
+ }
+ }
+
+ /**
+ * Checks for internet connection and then initializes
+ * the recycler view with bookmarked pictures
+ */
+ @SuppressLint("CheckResult")
+ private fun initList() {
+ if (!isInternetConnectionEstablished(context)) {
+ handleNoInternet()
+ return
+ }
+
+ binding!!.loadingImagesProgressBar.visibility = View.VISIBLE
+ binding!!.statusMessage.visibility = View.GONE
+
+ compositeDisposable.add(
+ controller!!.loadBookmarkedPictures()
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(::handleSuccess, ::handleError)
+ )
+ }
+
+ /**
+ * Handles the UI updates for no internet scenario
+ */
+ private fun handleNoInternet() {
+ binding!!.loadingImagesProgressBar.visibility = View.GONE
+ if (gridAdapter == null || gridAdapter!!.isEmpty) {
+ binding!!.statusMessage.visibility = View.VISIBLE
+ binding!!.statusMessage.text = getString(R.string.no_internet)
+ } else {
+ showShortSnackbar(binding!!.parentLayout, R.string.no_internet)
+ }
+ }
+
+ /**
+ * Logs and handles API error scenario
+ * @param throwable
+ */
+ private fun handleError(throwable: Throwable) {
+ Timber.e(throwable, "Error occurred while loading images inside a category")
+ try {
+ showShortSnackbar(binding!!.root, R.string.error_loading_images)
+ initErrorView()
+ } catch (e: Exception) {
+ Timber.e(e)
+ }
+ }
+
+ /**
+ * Handles the UI updates for a error scenario
+ */
+ private fun initErrorView() {
+ binding!!.loadingImagesProgressBar.visibility = View.GONE
+ if (gridAdapter == null || gridAdapter!!.isEmpty) {
+ binding!!.statusMessage.visibility = View.VISIBLE
+ binding!!.statusMessage.text = getString(R.string.no_images_found)
+ } else {
+ binding!!.statusMessage.visibility = View.GONE
+ }
+ }
+
+ /**
+ * Handles the UI updates when there is no bookmarks
+ */
+ private fun initEmptyBookmarkListView() {
+ binding!!.loadingImagesProgressBar.visibility = View.GONE
+ if (gridAdapter == null || gridAdapter!!.isEmpty) {
+ binding!!.statusMessage.visibility = View.VISIBLE
+ binding!!.statusMessage.text = getString(R.string.bookmark_empty)
+ } else {
+ binding!!.statusMessage.visibility = View.GONE
+ }
+ }
+
+ /**
+ * Handles the success scenario
+ * On first load, it initializes the grid view. On subsequent loads, it adds items to the adapter
+ * @param collection List of new Media to be displayed
+ */
+ private fun handleSuccess(collection: List?) {
+ if (collection == null) {
+ initErrorView()
+ return
+ }
+ if (collection.isEmpty()) {
+ initEmptyBookmarkListView()
+ return
+ }
+
+ if (gridAdapter == null) {
+ setAdapter(collection)
+ } else {
+ if (gridAdapter!!.containsAll(collection)) {
+ binding!!.loadingImagesProgressBar.visibility = View.GONE
+ binding!!.statusMessage.visibility = View.GONE
+ binding!!.bookmarkedPicturesList.visibility = View.VISIBLE
+ binding!!.bookmarkedPicturesList.adapter = gridAdapter
+ return
+ }
+ gridAdapter!!.addItems(collection)
+ (parentFragment as BookmarkListRootFragment).viewPagerNotifyDataSetChanged()
+ }
+ binding!!.loadingImagesProgressBar.visibility = View.GONE
+ binding!!.statusMessage.visibility = View.GONE
+ binding!!.bookmarkedPicturesList.visibility = View.VISIBLE
+ }
+
+ /**
+ * Initializes the adapter with a list of Media objects
+ * @param mediaList List of new Media to be displayed
+ */
+ private fun setAdapter(mediaList: List) {
+ gridAdapter = GridViewAdapter(
+ requireContext(),
+ R.layout.layout_category_images,
+ mediaList.toMutableList()
+ )
+ binding?.let { it.bookmarkedPicturesList.adapter = gridAdapter }
+ }
+
+ /**
+ * It return an instance of gridView adapter which helps in extracting media details
+ * used by the gridView
+ * @return GridView Adapter
+ */
+ fun getAdapter(): ListAdapter? = binding?.bookmarkedPicturesList?.adapter
+}
diff --git a/app/src/main/java/fr/free/nrw/commons/bookmarks/pictures/BookmarksTable.kt b/app/src/main/java/fr/free/nrw/commons/bookmarks/pictures/BookmarksTable.kt
new file mode 100644
index 000000000..6a8f4d541
--- /dev/null
+++ b/app/src/main/java/fr/free/nrw/commons/bookmarks/pictures/BookmarksTable.kt
@@ -0,0 +1,54 @@
+package fr.free.nrw.commons.bookmarks.pictures
+
+import android.database.sqlite.SQLiteDatabase
+
+object BookmarksTable {
+ const val TABLE_NAME: String = "bookmarks"
+ const val COLUMN_MEDIA_NAME: String = "media_name"
+ const val COLUMN_CREATOR: String = "media_creator"
+
+ // NOTE! KEEP IN SAME ORDER AS THEY ARE DEFINED UP THERE. HELPS HARD CODE COLUMN INDICES.
+ val ALL_FIELDS = arrayOf(
+ COLUMN_MEDIA_NAME,
+ COLUMN_CREATOR
+ )
+
+ const val DROP_TABLE_STATEMENT: String = "DROP TABLE IF EXISTS $TABLE_NAME"
+
+ const val CREATE_TABLE_STATEMENT: String = ("CREATE TABLE $TABLE_NAME (" +
+ "$COLUMN_MEDIA_NAME STRING PRIMARY KEY, " +
+ "$COLUMN_CREATOR STRING" +
+ ");")
+
+ fun onCreate(db: SQLiteDatabase) =
+ db.execSQL(CREATE_TABLE_STATEMENT)
+
+ fun onDelete(db: SQLiteDatabase) {
+ db.execSQL(DROP_TABLE_STATEMENT)
+ onCreate(db)
+ }
+
+ fun onUpdate(db: SQLiteDatabase, from: Int, to: Int) {
+ if (from == to) {
+ return
+ }
+
+ if (from < 7) {
+ // doesn't exist yet
+ onUpdate(db, from+1, to)
+ return
+ }
+
+ if (from == 7) {
+ // table added in version 8
+ onCreate(db)
+ onUpdate(db, from+1, to)
+ return
+ }
+
+ if (from == 8) {
+ onUpdate(db, from+1, to)
+ return
+ }
+ }
+}
diff --git a/app/src/main/java/fr/free/nrw/commons/campaigns/CampaignConfig.kt b/app/src/main/java/fr/free/nrw/commons/campaigns/CampaignConfig.kt
index 6bf0bc0ed..9f94e8592 100644
--- a/app/src/main/java/fr/free/nrw/commons/campaigns/CampaignConfig.kt
+++ b/app/src/main/java/fr/free/nrw/commons/campaigns/CampaignConfig.kt
@@ -7,8 +7,8 @@ import com.google.gson.annotations.SerializedName
*/
class CampaignConfig {
@SerializedName("showOnlyLiveCampaigns")
- private val showOnlyLiveCampaigns = false
+ var showOnlyLiveCampaigns = false
@SerializedName("sortBy")
- private val sortBy: String? = null
-}
+ var sortBy: String? = null
+}
\ No newline at end of file
diff --git a/app/src/main/java/fr/free/nrw/commons/campaigns/CampaignResponseDTO.kt b/app/src/main/java/fr/free/nrw/commons/campaigns/CampaignResponseDTO.kt
index 767732eb7..1656109e7 100644
--- a/app/src/main/java/fr/free/nrw/commons/campaigns/CampaignResponseDTO.kt
+++ b/app/src/main/java/fr/free/nrw/commons/campaigns/CampaignResponseDTO.kt
@@ -8,8 +8,8 @@ import fr.free.nrw.commons.campaigns.models.Campaign
*/
class CampaignResponseDTO {
@SerializedName("config")
- val campaignConfig: CampaignConfig? = null
+ var campaignConfig: CampaignConfig? = null
@SerializedName("campaigns")
- val campaigns: List? = null
-}
+ var campaigns: List? = null
+}
\ No newline at end of file
diff --git a/app/src/main/java/fr/free/nrw/commons/category/CategoryContentProvider.kt b/app/src/main/java/fr/free/nrw/commons/category/CategoryContentProvider.kt
index ddd7f5ae4..f5cec0fce 100644
--- a/app/src/main/java/fr/free/nrw/commons/category/CategoryContentProvider.kt
+++ b/app/src/main/java/fr/free/nrw/commons/category/CategoryContentProvider.kt
@@ -9,12 +9,9 @@ import android.database.sqlite.SQLiteDatabase
import android.database.sqlite.SQLiteQueryBuilder
import android.net.Uri
import android.text.TextUtils
-import androidx.annotation.NonNull
import fr.free.nrw.commons.BuildConfig
-import fr.free.nrw.commons.data.DBOpenHelper
import fr.free.nrw.commons.di.CommonsDaggerContentProvider
-import timber.log.Timber
-import javax.inject.Inject
+import androidx.core.net.toUri
class CategoryContentProvider : CommonsDaggerContentProvider() {
@@ -23,9 +20,6 @@ class CategoryContentProvider : CommonsDaggerContentProvider() {
addURI(BuildConfig.CATEGORY_AUTHORITY, "${BASE_PATH}/#", CATEGORIES_ID)
}
- @Inject
- lateinit var dbOpenHelper: DBOpenHelper
-
@SuppressWarnings("ConstantConditions")
override fun query(uri: Uri, projection: Array?, selection: String?,
selectionArgs: Array?, sortOrder: String?): Cursor? {
@@ -34,7 +28,7 @@ class CategoryContentProvider : CommonsDaggerContentProvider() {
}
val uriType = uriMatcher.match(uri)
- val db = dbOpenHelper.readableDatabase
+ val db = requireDb()
val cursor: Cursor? = when (uriType) {
CATEGORIES -> queryBuilder.query(
@@ -58,45 +52,37 @@ class CategoryContentProvider : CommonsDaggerContentProvider() {
else -> throw IllegalArgumentException("Unknown URI $uri")
}
- cursor?.setNotificationUri(context?.contentResolver, uri)
+ cursor?.setNotificationUri(requireContext().contentResolver, uri)
return cursor
}
- override fun getType(uri: Uri): String? {
- return null
- }
+ override fun getType(uri: Uri): String? = null
@SuppressWarnings("ConstantConditions")
- override fun insert(uri: Uri, contentValues: ContentValues?): Uri? {
+ override fun insert(uri: Uri, contentValues: ContentValues?): Uri {
val uriType = uriMatcher.match(uri)
- val sqlDB = dbOpenHelper.writableDatabase
val id: Long
when (uriType) {
CATEGORIES -> {
- id = sqlDB.insert(TABLE_NAME, null, contentValues)
+ id = requireDb().insert(TABLE_NAME, null, contentValues)
}
else -> throw IllegalArgumentException("Unknown URI: $uri")
}
- context?.contentResolver?.notifyChange(uri, null)
- return Uri.parse("${Companion.BASE_URI}/$id")
+ requireContext().contentResolver?.notifyChange(uri, null)
+ return "${BASE_URI}/$id".toUri()
}
@SuppressWarnings("ConstantConditions")
- override fun delete(uri: Uri, selection: String?, selectionArgs: Array?): Int {
- // Not implemented
- return 0
- }
+ override fun delete(uri: Uri, selection: String?, selectionArgs: Array?): Int = 0
@SuppressWarnings("ConstantConditions")
override fun bulkInsert(uri: Uri, values: Array): Int {
- Timber.d("Hello, bulk insert! (CategoryContentProvider)")
val uriType = uriMatcher.match(uri)
- val sqlDB = dbOpenHelper.writableDatabase
+ val sqlDB = requireDb()
sqlDB.beginTransaction()
when (uriType) {
CATEGORIES -> {
for (value in values) {
- Timber.d("Inserting! %s", value)
sqlDB.insert(TABLE_NAME, null, value)
}
sqlDB.setTransactionSuccessful()
@@ -104,7 +90,7 @@ class CategoryContentProvider : CommonsDaggerContentProvider() {
else -> throw IllegalArgumentException("Unknown URI: $uri")
}
sqlDB.endTransaction()
- context?.contentResolver?.notifyChange(uri, null)
+ requireContext().contentResolver?.notifyChange(uri, null)
return values.size
}
@@ -112,17 +98,18 @@ class CategoryContentProvider : CommonsDaggerContentProvider() {
override fun update(uri: Uri, contentValues: ContentValues?, selection: String?,
selectionArgs: Array?): Int {
val uriType = uriMatcher.match(uri)
- val sqlDB = dbOpenHelper.writableDatabase
val rowsUpdated: Int
when (uriType) {
CATEGORIES_ID -> {
if (TextUtils.isEmpty(selection)) {
val id = uri.lastPathSegment?.toInt()
?: throw IllegalArgumentException("Invalid ID")
- rowsUpdated = sqlDB.update(TABLE_NAME,
+ rowsUpdated = requireDb().update(
+ TABLE_NAME,
contentValues,
"$COLUMN_ID = ?",
- arrayOf(id.toString()))
+ arrayOf(id.toString())
+ )
} else {
throw IllegalArgumentException(
"Parameter `selection` should be empty when updating an ID")
@@ -130,7 +117,7 @@ class CategoryContentProvider : CommonsDaggerContentProvider() {
}
else -> throw IllegalArgumentException("Unknown URI: $uri with type $uriType")
}
- context?.contentResolver?.notifyChange(uri, null)
+ requireContext().contentResolver?.notifyChange(uri, null)
return rowsUpdated
}
@@ -165,13 +152,9 @@ class CategoryContentProvider : CommonsDaggerContentProvider() {
"$COLUMN_TIMES_USED INTEGER" +
");"
- fun uriForId(id: Int): Uri {
- return Uri.parse("${BASE_URI}/$id")
- }
+ fun uriForId(id: Int): Uri = Uri.parse("${BASE_URI}/$id")
- fun onCreate(db: SQLiteDatabase) {
- db.execSQL(CREATE_TABLE_STATEMENT)
- }
+ fun onCreate(db: SQLiteDatabase) = db.execSQL(CREATE_TABLE_STATEMENT)
fun onDelete(db: SQLiteDatabase) {
db.execSQL(DROP_TABLE_STATEMENT)
@@ -200,6 +183,6 @@ class CategoryContentProvider : CommonsDaggerContentProvider() {
private const val CATEGORIES = 1
private const val CATEGORIES_ID = 2
private const val BASE_PATH = "categories"
- val BASE_URI: Uri = Uri.parse("content://${BuildConfig.CATEGORY_AUTHORITY}/${Companion.BASE_PATH}")
+ val BASE_URI: Uri = "content://${BuildConfig.CATEGORY_AUTHORITY}/${BASE_PATH}".toUri()
}
}
diff --git a/app/src/main/java/fr/free/nrw/commons/category/CategoryDetailsActivity.kt b/app/src/main/java/fr/free/nrw/commons/category/CategoryDetailsActivity.kt
index c998f96ac..fefe462a9 100644
--- a/app/src/main/java/fr/free/nrw/commons/category/CategoryDetailsActivity.kt
+++ b/app/src/main/java/fr/free/nrw/commons/category/CategoryDetailsActivity.kt
@@ -23,6 +23,7 @@ import fr.free.nrw.commons.explore.categories.sub.SubCategoriesFragment
import fr.free.nrw.commons.media.MediaDetailPagerFragment
import fr.free.nrw.commons.media.MediaDetailProvider
import fr.free.nrw.commons.theme.BaseActivity
+import fr.free.nrw.commons.utils.applyEdgeToEdgeAllInsets
import fr.free.nrw.commons.utils.handleWebUrl
import fr.free.nrw.commons.wikidata.model.WikiSite
import fr.free.nrw.commons.wikidata.model.page.PageTitle
@@ -57,6 +58,7 @@ class CategoryDetailsActivity : BaseActivity(),
binding = ActivityCategoryDetailsBinding.inflate(layoutInflater)
val view = binding.root
+ applyEdgeToEdgeAllInsets(view)
setContentView(view)
supportFragmentManager = getSupportFragmentManager()
viewPagerAdapter = ViewPagerAdapter(this, supportFragmentManager)
diff --git a/app/src/main/java/fr/free/nrw/commons/contributions/ContributionController.kt b/app/src/main/java/fr/free/nrw/commons/contributions/ContributionController.kt
index 29267452b..b9532a12e 100644
--- a/app/src/main/java/fr/free/nrw/commons/contributions/ContributionController.kt
+++ b/app/src/main/java/fr/free/nrw/commons/contributions/ContributionController.kt
@@ -180,8 +180,8 @@ class ContributionController @Inject constructor(@param:Named("default_preferenc
showAlertDialog(
activity, activity.getString(R.string.location_permission_title),
activity.getString(R.string.in_app_camera_location_permission_rationale),
- activity.getString(android.R.string.ok),
- activity.getString(android.R.string.cancel),
+ activity.getString(R.string.ok),
+ activity.getString(R.string.cancel),
{
createDialogsAndHandleLocationPermissions(
activity,
diff --git a/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsListFragment.kt b/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsListFragment.kt
index b86cd6dc9..6d0822604 100644
--- a/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsListFragment.kt
+++ b/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsListFragment.kt
@@ -5,7 +5,6 @@ import android.annotation.SuppressLint
import android.content.Context
import android.content.Intent
import android.content.res.Configuration
-import android.net.Uri
import android.os.Bundle
import android.os.Parcelable
import android.view.LayoutInflater
@@ -20,6 +19,8 @@ import androidx.activity.result.ActivityResultLauncher
import androidx.activity.result.contract.ActivityResultContracts.RequestMultiplePermissions
import androidx.activity.result.contract.ActivityResultContracts.StartActivityForResult
import androidx.annotation.VisibleForTesting
+import androidx.core.net.toUri
+import androidx.core.os.BundleCompat
import androidx.paging.PagedList
import androidx.recyclerview.widget.GridLayoutManager
import androidx.recyclerview.widget.RecyclerView
@@ -38,12 +39,10 @@ import fr.free.nrw.commons.filepicker.FilePicker
import fr.free.nrw.commons.media.MediaClient
import fr.free.nrw.commons.profile.ProfileActivity
import fr.free.nrw.commons.utils.DialogUtil.showAlertDialog
-import fr.free.nrw.commons.utils.SystemThemeUtils
import fr.free.nrw.commons.utils.ViewUtil.showShortToast
import fr.free.nrw.commons.utils.copyToClipboard
import fr.free.nrw.commons.utils.handleWebUrl
import fr.free.nrw.commons.wikidata.model.WikiSite
-import org.apache.commons.lang3.StringUtils
import javax.inject.Inject
import javax.inject.Named
@@ -53,10 +52,6 @@ import javax.inject.Named
*/
class ContributionsListFragment : CommonsDaggerSupportFragment(), ContributionsListContract.View,
ContributionsListAdapter.Callback, WikipediaInstructionsDialogFragment.Callback {
- @JvmField
- @Inject
- var systemThemeUtils: SystemThemeUtils? = null
-
@JvmField
@Inject
var controller: ContributionController? = null
@@ -83,13 +78,14 @@ class ContributionsListFragment : CommonsDaggerSupportFragment(), ContributionsL
var sessionManager: SessionManager? = null
private var binding: FragmentContributionsListBinding? = null
- private var fab_close: Animation? = null
- private var fab_open: Animation? = null
- private var rotate_forward: Animation? = null
- private var rotate_backward: Animation? = null
+ private var fabClose: Animation? = null
+ private var fabOpen: Animation? = null
+ private var rotateForward: Animation? = null
+ private var rotateBackward: Animation? = null
private var isFabOpen = false
- private lateinit var inAppCameraLocationPermissionLauncher: ActivityResultLauncher>
+ private lateinit var inAppCameraLocationPermissionLauncher:
+ ActivityResultLauncher>
@VisibleForTesting
var rvContributionsList: RecyclerView? = null
@@ -100,8 +96,8 @@ class ContributionsListFragment : CommonsDaggerSupportFragment(), ContributionsL
@VisibleForTesting
var callback: Callback? = null
- private val SPAN_COUNT_LANDSCAPE = 3
- private val SPAN_COUNT_PORTRAIT = 1
+ private val spanCountLandscape = 3
+ private val spanCountPortrait = 1
private var contributionsSize = 0
private var userName: String? = null
@@ -150,7 +146,7 @@ class ContributionsListFragment : CommonsDaggerSupportFragment(), ContributionsL
userName = requireArguments().getString(ProfileActivity.KEY_USERNAME)
}
- if (StringUtils.isEmpty(userName)) {
+ if (userName.isNullOrEmpty()) {
userName = sessionManager!!.userName
}
inAppCameraLocationPermissionLauncher =
@@ -161,7 +157,8 @@ class ContributionsListFragment : CommonsDaggerSupportFragment(), ContributionsL
controller?.locationPermissionCallback?.onLocationPermissionGranted()
} else {
activity?.let { currentActivity ->
- if (currentActivity.shouldShowRequestPermissionRationale(permission.ACCESS_FINE_LOCATION)) {
+ if (currentActivity.shouldShowRequestPermissionRationale(
+ permission.ACCESS_FINE_LOCATION)) {
controller?.handleShowRationaleFlowCameraLocation(
currentActivity,
inAppCameraLocationPermissionLauncher, // Pass launcher
@@ -169,7 +166,8 @@ class ContributionsListFragment : CommonsDaggerSupportFragment(), ContributionsL
)
} else {
controller?.locationPermissionCallback?.onLocationPermissionDenied(
- currentActivity.getString(R.string.in_app_camera_location_permission_denied)
+ currentActivity.getString(
+ R.string.in_app_camera_location_permission_denied)
)
}
}
@@ -189,7 +187,7 @@ class ContributionsListFragment : CommonsDaggerSupportFragment(), ContributionsL
contributionsListPresenter!!.onAttachView(this)
binding!!.fabCustomGallery.setOnClickListener { v: View? -> launchCustomSelector() }
binding!!.fabCustomGallery.setOnLongClickListener { view: View? ->
- showShortToast(context, fr.free.nrw.commons.R.string.custom_selector_title)
+ showShortToast(context, R.string.custom_selector_title)
true
}
@@ -199,7 +197,7 @@ class ContributionsListFragment : CommonsDaggerSupportFragment(), ContributionsL
} else {
binding!!.tvContributionsOfUser.visibility = View.VISIBLE
binding!!.tvContributionsOfUser.text =
- getString(fr.free.nrw.commons.R.string.contributions_of_user, userName)
+ getString(R.string.contributions_of_user, userName)
binding!!.fabLayout.visibility = View.GONE
}
@@ -237,7 +235,10 @@ class ContributionsListFragment : CommonsDaggerSupportFragment(), ContributionsL
}
private fun initAdapter() {
- adapter = ContributionsListAdapter(this, mediaClient!!, mediaDataExtractor!!, compositeDisposable)
+ adapter = ContributionsListAdapter(this,
+ mediaClient!!,
+ mediaDataExtractor!!,
+ compositeDisposable)
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
@@ -312,7 +313,7 @@ class ContributionsListFragment : CommonsDaggerSupportFragment(), ContributionsL
override fun onInterceptTouchEvent(rv: RecyclerView, e: MotionEvent): Boolean {
if (e.action == MotionEvent.ACTION_DOWN) {
if (isFabOpen) {
- animateFAB(isFabOpen)
+ animateFAB(true)
}
}
return false
@@ -344,14 +345,20 @@ class ContributionsListFragment : CommonsDaggerSupportFragment(), ContributionsL
}
private fun getSpanCount(orientation: Int): Int {
- return if (orientation == Configuration.ORIENTATION_LANDSCAPE) SPAN_COUNT_LANDSCAPE else SPAN_COUNT_PORTRAIT
+ return if (orientation == Configuration.ORIENTATION_LANDSCAPE)
+ spanCountLandscape
+ else
+ spanCountPortrait
}
override fun onConfigurationChanged(newConfig: Configuration) {
super.onConfigurationChanged(newConfig)
// check orientation
binding!!.fabLayout.orientation =
- if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) LinearLayout.HORIZONTAL else LinearLayout.VERTICAL
+ if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE)
+ LinearLayout.HORIZONTAL
+ else
+ LinearLayout.VERTICAL
rvContributionsList
?.setLayoutManager(
GridLayoutManager(context, getSpanCount(newConfig.orientation))
@@ -359,10 +366,10 @@ class ContributionsListFragment : CommonsDaggerSupportFragment(), ContributionsL
}
private fun initializeAnimations() {
- fab_open = AnimationUtils.loadAnimation(activity, fr.free.nrw.commons.R.anim.fab_open)
- fab_close = AnimationUtils.loadAnimation(activity, fr.free.nrw.commons.R.anim.fab_close)
- rotate_forward = AnimationUtils.loadAnimation(activity, fr.free.nrw.commons.R.anim.rotate_forward)
- rotate_backward = AnimationUtils.loadAnimation(activity, fr.free.nrw.commons.R.anim.rotate_backward)
+ fabOpen = AnimationUtils.loadAnimation(activity, R.anim.fab_open)
+ fabClose = AnimationUtils.loadAnimation(activity, R.anim.fab_close)
+ rotateForward = AnimationUtils.loadAnimation(activity, R.anim.rotate_forward)
+ rotateBackward = AnimationUtils.loadAnimation(activity, R.anim.rotate_backward)
}
private fun setListeners() {
@@ -378,7 +385,7 @@ class ContributionsListFragment : CommonsDaggerSupportFragment(), ContributionsL
binding!!.fabCamera.setOnLongClickListener { view: View? ->
showShortToast(
context,
- fr.free.nrw.commons.R.string.add_contribution_from_camera
+ R.string.add_contribution_from_camera
)
true
}
@@ -387,7 +394,7 @@ class ContributionsListFragment : CommonsDaggerSupportFragment(), ContributionsL
animateFAB(isFabOpen)
}
binding!!.fabGallery.setOnLongClickListener { view: View? ->
- showShortToast(context, fr.free.nrw.commons.R.string.menu_from_gallery)
+ showShortToast(context, R.string.menu_from_gallery)
true
}
}
@@ -395,7 +402,7 @@ class ContributionsListFragment : CommonsDaggerSupportFragment(), ContributionsL
/**
* Launch Custom Selector.
*/
- protected fun launchCustomSelector() {
+ private fun launchCustomSelector() {
controller!!.initiateCustomGalleryPickWithPermission(
requireActivity(),
customSelectorLauncherForResult
@@ -411,18 +418,18 @@ class ContributionsListFragment : CommonsDaggerSupportFragment(), ContributionsL
this.isFabOpen = !isFabOpen
if (binding!!.fabPlus.isShown) {
if (isFabOpen) {
- binding!!.fabPlus.startAnimation(rotate_backward)
- binding!!.fabCamera.startAnimation(fab_close)
- binding!!.fabGallery.startAnimation(fab_close)
- binding!!.fabCustomGallery.startAnimation(fab_close)
+ binding!!.fabPlus.startAnimation(rotateBackward)
+ binding!!.fabCamera.startAnimation(fabClose)
+ binding!!.fabGallery.startAnimation(fabClose)
+ binding!!.fabCustomGallery.startAnimation(fabClose)
binding!!.fabCamera.hide()
binding!!.fabGallery.hide()
binding!!.fabCustomGallery.hide()
} else {
- binding!!.fabPlus.startAnimation(rotate_forward)
- binding!!.fabCamera.startAnimation(fab_open)
- binding!!.fabGallery.startAnimation(fab_open)
- binding!!.fabCustomGallery.startAnimation(fab_open)
+ binding!!.fabPlus.startAnimation(rotateForward)
+ binding!!.fabCamera.startAnimation(fabOpen)
+ binding!!.fabGallery.startAnimation(fabOpen)
+ binding!!.fabCustomGallery.startAnimation(fabOpen)
binding!!.fabCamera.show()
binding!!.fabGallery.show()
binding!!.fabCustomGallery.show()
@@ -434,9 +441,9 @@ class ContributionsListFragment : CommonsDaggerSupportFragment(), ContributionsL
/**
* Shows welcome message if user has no contributions yet i.e. new user.
*/
- override fun showWelcomeTip(shouldShow: Boolean) {
+ override fun showWelcomeTip(numberOfUploads: Boolean) {
binding!!.noContributionsYet.visibility =
- if (shouldShow) View.VISIBLE else View.GONE
+ if (numberOfUploads) View.VISIBLE else View.GONE
}
/**
@@ -456,22 +463,22 @@ class ContributionsListFragment : CommonsDaggerSupportFragment(), ContributionsL
override fun onSaveInstanceState(outState: Bundle) {
super.onSaveInstanceState(outState)
- val layoutManager = rvContributionsList
- ?.getLayoutManager() as GridLayoutManager?
+ val layoutManager = rvContributionsList?.layoutManager as GridLayoutManager?
outState.putParcelable(RV_STATE, layoutManager!!.onSaveInstanceState())
}
override fun onViewStateRestored(savedInstanceState: Bundle?) {
super.onViewStateRestored(savedInstanceState)
if (null != savedInstanceState) {
- val savedRecyclerLayoutState = savedInstanceState.getParcelable(RV_STATE)
+ val savedRecyclerLayoutState =
+ BundleCompat.getParcelable(savedInstanceState, RV_STATE, Parcelable::class.java)
rvContributionsList!!.layoutManager!!.onRestoreInstanceState(savedRecyclerLayoutState)
}
}
- override fun openMediaDetail(position: Int, isWikipediaButtonDisplayed: Boolean) {
+ override fun openMediaDetail(contribution: Int, isWikipediaPageExists: Boolean) {
if (null != callback) { //Just being safe, ideally they won't be called when detached
- callback!!.showDetail(position, isWikipediaButtonDisplayed)
+ callback!!.showDetail(contribution, isWikipediaPageExists)
}
}
@@ -483,8 +490,8 @@ class ContributionsListFragment : CommonsDaggerSupportFragment(), ContributionsL
override fun addImageToWikipedia(contribution: Contribution?) {
showAlertDialog(
requireActivity(),
- getString(fr.free.nrw.commons.R.string.add_picture_to_wikipedia_article_title),
- getString(fr.free.nrw.commons.R.string.add_picture_to_wikipedia_article_desc),
+ getString(R.string.add_picture_to_wikipedia_article_title),
+ getString(R.string.add_picture_to_wikipedia_article_desc),
{
if (contribution != null) {
showAddImageToWikipediaInstructions(contribution)
@@ -498,16 +505,18 @@ class ContributionsListFragment : CommonsDaggerSupportFragment(), ContributionsL
* @param contribution
*/
private fun showAddImageToWikipediaInstructions(contribution: Contribution) {
- val fragmentManager = fragmentManager
+ val fragmentManager = this.parentFragmentManager
val fragment = newInstance(contribution)
fragment.callback =
- WikipediaInstructionsDialogFragment.Callback { contribution: Contribution?, copyWikicode: Boolean ->
- this.onConfirmClicked(
+ WikipediaInstructionsDialogFragment.Callback {
+ contribution: Contribution?,
+ copyWikicode: Boolean ->
+ onConfirmClicked(
contribution,
copyWikicode
)
}
- fragment.show(fragmentManager!!, "WikimediaFragment")
+ fragment.show(fragmentManager, "WikimediaFragment")
}
@@ -534,7 +543,7 @@ class ContributionsListFragment : CommonsDaggerSupportFragment(), ContributionsL
val url =
languageWikipediaSite!!.mobileUrl() + "/wiki/" + (contribution!!.wikidataPlace
?.getWikipediaPageTitle())
- handleWebUrl(requireContext(), Uri.parse(url))
+ handleWebUrl(requireContext(), url.toUri())
}
fun getContributionStateAt(position: Int): Int {
diff --git a/app/src/main/java/fr/free/nrw/commons/contributions/MainActivity.kt b/app/src/main/java/fr/free/nrw/commons/contributions/MainActivity.kt
index b9fa3e395..d481017b2 100644
--- a/app/src/main/java/fr/free/nrw/commons/contributions/MainActivity.kt
+++ b/app/src/main/java/fr/free/nrw/commons/contributions/MainActivity.kt
@@ -34,6 +34,7 @@ import fr.free.nrw.commons.quiz.QuizChecker
import fr.free.nrw.commons.settings.SettingsFragment
import fr.free.nrw.commons.startWelcome
import fr.free.nrw.commons.theme.BaseActivity
+import fr.free.nrw.commons.utils.applyEdgeToEdgeAllInsets
import fr.free.nrw.commons.upload.UploadProgressActivity
import fr.free.nrw.commons.upload.worker.WorkRequestHelper.Companion.makeOneTimeWorkRequest
import fr.free.nrw.commons.utils.ViewUtilWrapper
@@ -112,6 +113,7 @@ class MainActivity : BaseActivity(), FragmentManager.OnBackStackChangedListener
public override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = MainBinding.inflate(layoutInflater)
+ applyEdgeToEdgeAllInsets(binding!!.root)
setContentView(binding!!.root)
setSupportActionBar(binding!!.toolbarBinding.toolbar)
tabLayout = binding!!.fragmentMainNavTabLayout
@@ -151,21 +153,7 @@ after opening the app.
}
}
setUpPager()
- /**
- * Ask the user for media location access just after login
- * so that location in the EXIF metadata of the images shared by the user
- * is retained on devices running Android 10 or above
- */
-// if (VERSION.SDK_INT >= VERSION_CODES.Q) {
-// ActivityCompat.requestPermissions(this,
-// new String[]{Manifest.permission.ACCESS_MEDIA_LOCATION}, 0);
-// PermissionUtils.checkPermissionsAndPerformAction(
-// this,
-// () -> {},
-// R.string.media_location_permission_denied,
-// R.string.add_location_manually,
-// permission.ACCESS_MEDIA_LOCATION);
-// }
+
checkAndResumeStuckUploads()
}
}
@@ -336,7 +324,7 @@ after opening the app.
)
.subscribeOn(Schedulers.io())
.blockingGet()
- Timber.d("Resuming " + stuckUploads.size + " uploads...")
+ Timber.d("Resuming %d uploads...", stuckUploads.size)
if (!stuckUploads.isEmpty()) {
for (contribution in stuckUploads) {
contribution.state = Contribution.STATE_QUEUED
diff --git a/app/src/main/java/fr/free/nrw/commons/contributions/SetWallpaperWorker.kt b/app/src/main/java/fr/free/nrw/commons/contributions/SetWallpaperWorker.kt
index 06c31fede..8e899fcba 100644
--- a/app/src/main/java/fr/free/nrw/commons/contributions/SetWallpaperWorker.kt
+++ b/app/src/main/java/fr/free/nrw/commons/contributions/SetWallpaperWorker.kt
@@ -45,10 +45,10 @@ class SetWallpaperWorker(context: Context, params: WorkerParameters) :
}
}
- override fun onFailureImpl(dataSource: DataSource>?) {
+ override fun onFailureImpl(dataSource: DataSource?>) {
Timber.d("Error getting bitmap from image url %s", imageUrl.toString())
showNotification(context, "Setting Wallpaper Failed", "Failed to download image.")
- dataSource?.close()
+ dataSource.close()
}
}, CallerThreadExecutor.getInstance())
diff --git a/app/src/main/java/fr/free/nrw/commons/customselector/model/Folder.kt b/app/src/main/java/fr/free/nrw/commons/customselector/model/Folder.kt
index ec08f6f73..4bf295f4c 100644
--- a/app/src/main/java/fr/free/nrw/commons/customselector/model/Folder.kt
+++ b/app/src/main/java/fr/free/nrw/commons/customselector/model/Folder.kt
@@ -39,4 +39,11 @@ data class Folder(
return true
}
+
+ override fun hashCode(): Int {
+ var result = bucketId.hashCode()
+ result = 31 * result + name.hashCode()
+ result = 31 * result + images.hashCode()
+ return result
+ }
}
diff --git a/app/src/main/java/fr/free/nrw/commons/customselector/model/Image.kt b/app/src/main/java/fr/free/nrw/commons/customselector/model/Image.kt
index a2965fb5d..a172f28e2 100644
--- a/app/src/main/java/fr/free/nrw/commons/customselector/model/Image.kt
+++ b/app/src/main/java/fr/free/nrw/commons/customselector/model/Image.kt
@@ -1,6 +1,7 @@
package fr.free.nrw.commons.customselector.model
import android.net.Uri
+import android.os.Build
import android.os.Parcel
import android.os.Parcelable
@@ -48,7 +49,12 @@ data class Image(
this(
parcel.readLong(),
parcel.readString()!!,
- parcel.readParcelable(Uri::class.java.classLoader)!!,
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
+ parcel.readParcelable(Uri::class.java.classLoader, Uri::class.java)!!
+ } else {
+ @Suppress("DEPRECATION")
+ parcel.readParcelable(Uri::class.java.classLoader)!!
+ },
parcel.readString()!!,
parcel.readLong(),
parcel.readString()!!,
@@ -121,4 +127,16 @@ data class Image(
override fun newArray(size: Int): Array = arrayOfNulls(size)
}
+
+ override fun hashCode(): Int {
+ var result = id.hashCode()
+ result = 31 * result + bucketId.hashCode()
+ result = 31 * result + name.hashCode()
+ result = 31 * result + uri.hashCode()
+ result = 31 * result + path.hashCode()
+ result = 31 * result + bucketName.hashCode()
+ result = 31 * result + sha1.hashCode()
+ result = 31 * result + date.hashCode()
+ return result
+ }
}
diff --git a/app/src/main/java/fr/free/nrw/commons/customselector/ui/adapter/ImageAdapter.kt b/app/src/main/java/fr/free/nrw/commons/customselector/ui/adapter/ImageAdapter.kt
index 62a440ff4..c3ef4a784 100644
--- a/app/src/main/java/fr/free/nrw/commons/customselector/ui/adapter/ImageAdapter.kt
+++ b/app/src/main/java/fr/free/nrw/commons/customselector/ui/adapter/ImageAdapter.kt
@@ -168,8 +168,7 @@ class ImageAdapter(
// Getting selected index when switch is off
} else if (actionableImagesMap.size > position) {
- ImageHelper
- .getIndex(selectedImages, ArrayList(actionableImagesMap.values)[position])
+ ImageHelper.getIndex(selectedImages, ArrayList(actionableImagesMap.values)[position])
// For any other case return -1
} else {
@@ -348,8 +347,14 @@ class ImageAdapter(
numberOfSelectedImagesMarkedAsNotForUpload--
}
notifyItemChanged(position, ImageUnselected())
+ // Notify listener of deselection to update UI
+ imageSelectListener.onSelectedImagesChanged(selectedImages, numberOfSelectedImagesMarkedAsNotForUpload)
} else {
- val image = images[position]
+ // Prevent adding the same image multiple times
+ val image = if (showAlreadyActionedImages) images[position] else ArrayList(actionableImagesMap.values)[position]
+ if (selectedImages.contains(image)) {
+ return // Image already selected, ignore additional clicks
+ }
scope.launch(ioDispatcher) {
val imageSHA1 = imageLoader.getSHA1(image, defaultDispatcher)
withContext(Dispatchers.Main) {
@@ -373,7 +378,6 @@ class ImageAdapter(
}
selectedImages.add(image)
notifyItemChanged(position, ImageSelectedOrUpdated())
-
imageSelectListener.onSelectedImagesChanged(selectedImages, numberOfSelectedImagesMarkedAsNotForUpload)
}
}
@@ -632,4 +636,4 @@ class ImageAdapter(
fun setSingleSelection(single: Boolean) {
singleSelection = single
}
-}
+}
\ No newline at end of file
diff --git a/app/src/main/java/fr/free/nrw/commons/customselector/ui/selector/CustomSelectorActivity.kt b/app/src/main/java/fr/free/nrw/commons/customselector/ui/selector/CustomSelectorActivity.kt
index 7e7d7e4cd..2534b4aeb 100644
--- a/app/src/main/java/fr/free/nrw/commons/customselector/ui/selector/CustomSelectorActivity.kt
+++ b/app/src/main/java/fr/free/nrw/commons/customselector/ui/selector/CustomSelectorActivity.kt
@@ -40,6 +40,7 @@ import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import androidx.constraintlayout.widget.ConstraintLayout
import androidx.core.content.ContextCompat
+import androidx.core.view.ViewGroupCompat
import androidx.lifecycle.ViewModelProvider
import fr.free.nrw.commons.R
import fr.free.nrw.commons.customselector.database.NotForUploadStatus
@@ -56,6 +57,8 @@ import fr.free.nrw.commons.media.ZoomableActivity
import fr.free.nrw.commons.theme.BaseActivity
import fr.free.nrw.commons.upload.FileUtilsWrapper
import fr.free.nrw.commons.utils.CustomSelectorUtils
+import fr.free.nrw.commons.utils.applyEdgeToEdgeBottomPaddingInsets
+import fr.free.nrw.commons.utils.applyEdgeToEdgeTopInsets
import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
@@ -198,6 +201,9 @@ class CustomSelectorActivity :
.fillMaxWidth(),
)
}
+ ViewGroupCompat.installCompatInsetsDispatch(binding.root)
+ applyEdgeToEdgeTopInsets(toolbarBinding.toolbarLayout)
+ bottomSheetBinding.bottomLayout.applyEdgeToEdgeBottomPaddingInsets()
val view = binding.root
setContentView(view)
diff --git a/app/src/main/java/fr/free/nrw/commons/customselector/ui/selector/FolderFragment.kt b/app/src/main/java/fr/free/nrw/commons/customselector/ui/selector/FolderFragment.kt
index 6ca2b06e4..0c3c5bdd0 100644
--- a/app/src/main/java/fr/free/nrw/commons/customselector/ui/selector/FolderFragment.kt
+++ b/app/src/main/java/fr/free/nrw/commons/customselector/ui/selector/FolderFragment.kt
@@ -18,6 +18,7 @@ import fr.free.nrw.commons.databinding.FragmentCustomSelectorBinding
import fr.free.nrw.commons.di.CommonsDaggerSupportFragment
import fr.free.nrw.commons.media.MediaClient
import fr.free.nrw.commons.upload.FileProcessor
+import fr.free.nrw.commons.utils.applyEdgeToEdgeBottomPaddingInsets
import javax.inject.Inject
/**
@@ -99,6 +100,7 @@ class FolderFragment : CommonsDaggerSupportFragment() {
selectorRV = binding?.selectorRv
loader = binding?.loader
with(binding?.selectorRv) {
+ this?.applyEdgeToEdgeBottomPaddingInsets()
this?.layoutManager = gridLayoutManager
this?.setHasFixedSize(true)
this?.adapter = folderAdapter
diff --git a/app/src/main/java/fr/free/nrw/commons/customselector/ui/selector/ImageFragment.kt b/app/src/main/java/fr/free/nrw/commons/customselector/ui/selector/ImageFragment.kt
index 6e08e30f1..a5182fe62 100644
--- a/app/src/main/java/fr/free/nrw/commons/customselector/ui/selector/ImageFragment.kt
+++ b/app/src/main/java/fr/free/nrw/commons/customselector/ui/selector/ImageFragment.kt
@@ -9,7 +9,6 @@ import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ProgressBar
-import android.widget.Switch
import androidx.appcompat.app.AlertDialog
import androidx.constraintlayout.widget.ConstraintLayout
import androidx.core.view.isVisible
@@ -20,6 +19,7 @@ import androidx.lifecycle.lifecycleScope
import androidx.lifecycle.repeatOnLifecycle
import androidx.recyclerview.widget.GridLayoutManager
import androidx.recyclerview.widget.RecyclerView
+import com.google.android.material.switchmaterial.SwitchMaterial
import fr.free.nrw.commons.contributions.Contribution
import fr.free.nrw.commons.contributions.ContributionDao
import fr.free.nrw.commons.customselector.database.NotForUploadStatusDao
@@ -41,11 +41,13 @@ import fr.free.nrw.commons.media.MediaClient
import fr.free.nrw.commons.theme.BaseActivity
import fr.free.nrw.commons.upload.FileProcessor
import fr.free.nrw.commons.upload.FileUtilsWrapper
+import fr.free.nrw.commons.utils.applyEdgeToEdgeBottomPaddingInsets
import io.reactivex.schedulers.Schedulers
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.asStateFlow
import kotlinx.coroutines.flow.combine
import kotlinx.coroutines.launch
+import timber.log.Timber
import java.util.TreeMap
import javax.inject.Inject
import kotlin.collections.ArrayList
@@ -80,7 +82,7 @@ class ImageFragment :
*/
private var selectorRV: RecyclerView? = null
private var loader: ProgressBar? = null
- private var switch: Switch? = null
+ private var switch: SwitchMaterial? = null
lateinit var filteredImages: ArrayList
/**
@@ -210,13 +212,18 @@ class ImageFragment :
savedInstanceState: Bundle?,
): View? {
_binding = FragmentCustomSelectorBinding.inflate(inflater, container, false)
- imageAdapter =
- ImageAdapter(requireActivity(), activity as ImageSelectListener, imageLoader!!)
+
+ // ensures imageAdapter is initialized
+ if (!::imageAdapter.isInitialized) {
+ imageAdapter = ImageAdapter(requireActivity(), activity as ImageSelectListener, imageLoader!!)
+ Timber.d("Initialized imageAdapter in onCreateView")
+ }
// Set single selection mode if needed
val singleSelection = (activity as? CustomSelectorActivity)?.intent?.getBooleanExtra(CustomSelectorActivity.EXTRA_SINGLE_SELECTION, false) == true
imageAdapter.setSingleSelection(singleSelection)
gridLayoutManager = GridLayoutManager(context, getSpanCount())
with(binding?.selectorRv) {
+ this?.applyEdgeToEdgeBottomPaddingInsets()
this?.layoutManager = gridLayoutManager
this?.setHasFixedSize(true)
this?.adapter = imageAdapter
@@ -368,7 +375,12 @@ class ImageFragment :
* notifyDataSetChanged, rebuild the holder views to account for deleted images.
*/
override fun onResume() {
- imageAdapter.notifyDataSetChanged()
+ if (::imageAdapter.isInitialized) {
+ imageAdapter.notifyDataSetChanged()
+ Timber.d("Notified imageAdapter in onResume")
+ } else {
+ Timber.w("imageAdapter not initialized in onResume")
+ }
super.onResume()
}
@@ -378,14 +390,19 @@ class ImageFragment :
* Save the Image Fragment state.
*/
override fun onDestroy() {
- imageAdapter.cleanUp()
+ if (::imageAdapter.isInitialized) {
+ imageAdapter.cleanUp()
+ Timber.d("Cleaned up imageAdapter in onDestroy")
+ } else {
+ Timber.w("imageAdapter not initialized in onDestroy, skipping cleanup")
+ }
val position =
- (selectorRV?.layoutManager as GridLayoutManager)
- .findFirstVisibleItemPosition()
+ (selectorRV?.layoutManager as? GridLayoutManager)
+ ?.findFirstVisibleItemPosition() ?: -1
- // Check for empty RecyclerView.
- if (position != -1 && filteredImages.size > 0) {
+ // check for valid position and non-empty image list
+ if (position != -1 && filteredImages.isNotEmpty() && ::imageAdapter.isInitialized) {
context?.let { context ->
context
.getSharedPreferences(
@@ -394,34 +411,57 @@ class ImageFragment :
)?.let { prefs ->
prefs.edit()?.let { editor ->
editor.putLong("ItemId", imageAdapter.getImageIdAt(position))?.apply()
+ Timber.d("Saved last visible item ID: %d", imageAdapter.getImageIdAt(position))
}
}
}
+ } else {
+ Timber.d("Skipped saving item ID: position=%d, filteredImages.size=%d, imageAdapter initialized=%b",
+ position, filteredImages.size, ::imageAdapter.isInitialized)
}
super.onDestroy()
}
override fun onDestroyView() {
_binding = null
+ selectorRV = null
+ loader = null
+ switch = null
+ progressLayout = null
super.onDestroyView()
}
override fun refresh() {
- imageAdapter.refresh(filteredImages, allImages, getUploadingContributions())
+ if (::imageAdapter.isInitialized) {
+ imageAdapter.refresh(filteredImages, allImages, getUploadingContributions())
+ Timber.d("Refreshed imageAdapter")
+ } else {
+ Timber.w("imageAdapter not initialized in refresh")
+ }
}
/**
* Removes the image from the actionable image map
*/
fun removeImage(image: Image) {
- imageAdapter.removeImageFromActionableImageMap(image)
+ if (::imageAdapter.isInitialized) {
+ imageAdapter.removeImageFromActionableImageMap(image)
+ Timber.d("Removed image from actionable image map")
+ } else {
+ Timber.w("imageAdapter not initialized in removeImage")
+ }
}
/**
* Clears the selected images
*/
fun clearSelectedImages() {
- imageAdapter.clearSelectedImages()
+ if (::imageAdapter.isInitialized) {
+ imageAdapter.clearSelectedImages()
+ Timber.d("Cleared selected images")
+ } else {
+ Timber.w("imageAdapter not initialized in clearSelectedImages")
+ }
}
/**
@@ -432,6 +472,15 @@ class ImageFragment :
selectedImages: ArrayList,
shouldRefresh: Boolean,
) {
+ if (::imageAdapter.isInitialized) {
+ imageAdapter.setSelectedImages(selectedImages)
+ if (shouldRefresh) {
+ imageAdapter.refresh(filteredImages, allImages, getUploadingContributions())
+ }
+ Timber.d("Passed %d selected images to imageAdapter, shouldRefresh=%b", selectedImages.size, shouldRefresh)
+ } else {
+ Timber.w("imageAdapter not initialized in passSelectedImages")
+ }
}
/**
@@ -441,6 +490,7 @@ class ImageFragment :
if (!progressDialog.isShowing) {
progressDialogLayout.progressDialogText.text = text
progressDialog.show()
+ Timber.d("Showing mark/unmark progress dialog: %s", text)
}
}
@@ -450,6 +500,7 @@ class ImageFragment :
fun dismissMarkUnmarkProgressDialog() {
if (progressDialog.isShowing) {
progressDialog.dismiss()
+ Timber.d("Dismissed mark/unmark progress dialog")
}
}
@@ -459,4 +510,4 @@ class ImageFragment :
listOf(Contribution.STATE_IN_PROGRESS, Contribution.STATE_FAILED, Contribution.STATE_QUEUED, Contribution.STATE_PAUSED),
)?.subscribeOn(Schedulers.io())
?.blockingGet() ?: emptyList()
-}
+}
\ No newline at end of file
diff --git a/app/src/main/java/fr/free/nrw/commons/data/DBOpenHelper.kt b/app/src/main/java/fr/free/nrw/commons/data/DBOpenHelper.kt
index 7cb7f60f7..55ddec5bc 100644
--- a/app/src/main/java/fr/free/nrw/commons/data/DBOpenHelper.kt
+++ b/app/src/main/java/fr/free/nrw/commons/data/DBOpenHelper.kt
@@ -4,11 +4,10 @@ import android.content.Context
import android.database.sqlite.SQLiteDatabase
import android.database.sqlite.SQLiteException
import android.database.sqlite.SQLiteOpenHelper
-import fr.free.nrw.commons.bookmarks.items.BookmarkItemsDao
-import fr.free.nrw.commons.bookmarks.locations.BookmarkLocationsDao
-import fr.free.nrw.commons.bookmarks.pictures.BookmarkPicturesDao
+import fr.free.nrw.commons.bookmarks.items.BookmarkItemsTable
+import fr.free.nrw.commons.bookmarks.pictures.BookmarksTable
import fr.free.nrw.commons.category.CategoryDao
-import fr.free.nrw.commons.explore.recentsearches.RecentSearchesDao
+import fr.free.nrw.commons.explore.recentsearches.RecentSearchesTable
import fr.free.nrw.commons.recentlanguages.RecentLanguagesDao
@@ -30,17 +29,17 @@ class DBOpenHelper(
*/
override fun onCreate(db: SQLiteDatabase) {
CategoryDao.Table.onCreate(db)
- BookmarkPicturesDao.Table.onCreate(db)
- BookmarkItemsDao.Table.onCreate(db)
- RecentSearchesDao.Table.onCreate(db)
+ BookmarksTable.onCreate(db)
+ BookmarkItemsTable.onCreate(db)
+ RecentSearchesTable.onCreate(db)
RecentLanguagesDao.Table.onCreate(db)
}
override fun onUpgrade(db: SQLiteDatabase, from: Int, to: Int) {
CategoryDao.Table.onUpdate(db, from, to)
- BookmarkPicturesDao.Table.onUpdate(db, from, to)
- BookmarkItemsDao.Table.onUpdate(db, from, to)
- RecentSearchesDao.Table.onUpdate(db, from, to)
+ BookmarksTable.onUpdate(db, from, to)
+ BookmarkItemsTable.onUpdate(db, from, to)
+ RecentSearchesTable.onUpdate(db, from, to)
RecentLanguagesDao.Table.onUpdate(db, from, to)
deleteTable(db, CONTRIBUTIONS_TABLE)
deleteTable(db, BOOKMARKS_LOCATIONS)
diff --git a/app/src/main/java/fr/free/nrw/commons/description/DescriptionEditActivity.kt b/app/src/main/java/fr/free/nrw/commons/description/DescriptionEditActivity.kt
index 44cefe4d5..b1f1b7f9b 100644
--- a/app/src/main/java/fr/free/nrw/commons/description/DescriptionEditActivity.kt
+++ b/app/src/main/java/fr/free/nrw/commons/description/DescriptionEditActivity.kt
@@ -7,6 +7,7 @@ import android.speech.RecognizerIntent
import android.view.View
import androidx.activity.result.ActivityResult
import androidx.activity.result.contract.ActivityResultContracts
+import androidx.core.view.WindowCompat
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import fr.free.nrw.commons.CommonsApplication
@@ -20,9 +21,11 @@ import fr.free.nrw.commons.description.EditDescriptionConstants.WIKITEXT
import fr.free.nrw.commons.recentlanguages.RecentLanguagesDao
import fr.free.nrw.commons.settings.Prefs
import fr.free.nrw.commons.theme.BaseActivity
+import fr.free.nrw.commons.utils.applyEdgeToEdgeBottomInsets
import fr.free.nrw.commons.upload.UploadMediaDetail
import fr.free.nrw.commons.upload.UploadMediaDetailAdapter
import fr.free.nrw.commons.utils.DialogUtil.showAlertDialog
+import fr.free.nrw.commons.utils.applyEdgeToEdgeTopPaddingInsets
import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.functions.Consumer
import io.reactivex.schedulers.Schedulers
@@ -87,6 +90,10 @@ class DescriptionEditActivity :
super.onCreate(savedInstanceState)
binding = ActivityDescriptionEditBinding.inflate(layoutInflater)
+ applyEdgeToEdgeBottomInsets(binding.btnEditSubmit)
+ WindowCompat.getInsetsController(window, window.decorView)
+ .isAppearanceLightStatusBars = false
+ binding.toolbar.applyEdgeToEdgeTopPaddingInsets()
setContentView(binding.root)
val bundle = intent.extras
@@ -143,7 +150,7 @@ class DescriptionEditActivity :
this,
getString(titleStringID),
getString(messageStringId),
- getString(android.R.string.ok),
+ getString(R.string.ok),
null
)
}
diff --git a/app/src/main/java/fr/free/nrw/commons/di/CommonsDaggerContentProvider.kt b/app/src/main/java/fr/free/nrw/commons/di/CommonsDaggerContentProvider.kt
index c1bda689c..4c77d1aad 100644
--- a/app/src/main/java/fr/free/nrw/commons/di/CommonsDaggerContentProvider.kt
+++ b/app/src/main/java/fr/free/nrw/commons/di/CommonsDaggerContentProvider.kt
@@ -1,14 +1,25 @@
package fr.free.nrw.commons.di
import android.content.ContentProvider
+import android.database.sqlite.SQLiteDatabase
+import fr.free.nrw.commons.data.DBOpenHelper
import fr.free.nrw.commons.di.ApplicationlessInjection.Companion.getInstance
+import javax.inject.Inject
abstract class CommonsDaggerContentProvider : ContentProvider() {
+ @JvmField
+ @Inject
+ var dbOpenHelper: DBOpenHelper? = null
+
override fun onCreate(): Boolean {
inject()
return true
}
+ fun requireDbOpenHelper(): DBOpenHelper = dbOpenHelper!!
+
+ fun requireDb(): SQLiteDatabase = requireDbOpenHelper().writableDatabase!!
+
private fun inject() {
val injection = getInstance(context!!)
diff --git a/app/src/main/java/fr/free/nrw/commons/di/NetworkingModule.kt b/app/src/main/java/fr/free/nrw/commons/di/NetworkingModule.kt
index 2539db312..9246ff303 100644
--- a/app/src/main/java/fr/free/nrw/commons/di/NetworkingModule.kt
+++ b/app/src/main/java/fr/free/nrw/commons/di/NetworkingModule.kt
@@ -7,6 +7,7 @@ import dagger.Provides
import fr.free.nrw.commons.BetaConstants
import fr.free.nrw.commons.BuildConfig
import fr.free.nrw.commons.OkHttpConnectionFactory
+import fr.free.nrw.commons.CommonHeaderRequestInterceptor
import fr.free.nrw.commons.actions.PageEditClient
import fr.free.nrw.commons.actions.PageEditInterface
import fr.free.nrw.commons.actions.ThanksInterface
@@ -60,6 +61,7 @@ class NetworkingModule {
.connectTimeout(120, TimeUnit.SECONDS)
.writeTimeout(120, TimeUnit.SECONDS)
.addInterceptor(httpLoggingInterceptor)
+ .addInterceptor(CommonHeaderRequestInterceptor())
.readTimeout(120, TimeUnit.SECONDS)
.cache(Cache(File(context.cacheDir, "okHttpCache"), OK_HTTP_CACHE_SIZE))
.build()
diff --git a/app/src/main/java/fr/free/nrw/commons/explore/ExploreFragment.java b/app/src/main/java/fr/free/nrw/commons/explore/ExploreFragment.java
deleted file mode 100644
index 475d14287..000000000
--- a/app/src/main/java/fr/free/nrw/commons/explore/ExploreFragment.java
+++ /dev/null
@@ -1,260 +0,0 @@
-package fr.free.nrw.commons.explore;
-
-import static androidx.viewpager.widget.ViewPager.SCROLL_STATE_IDLE;
-import static fr.free.nrw.commons.ViewPagerAdapter.pairOf;
-
-import android.os.Bundle;
-import android.view.LayoutInflater;
-import android.view.Menu;
-import android.view.MenuInflater;
-import android.view.MenuItem;
-import android.view.View;
-import android.view.ViewGroup;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
-import androidx.fragment.app.Fragment;
-import androidx.fragment.app.FragmentPagerAdapter;
-import androidx.viewpager.widget.ViewPager.OnPageChangeListener;
-import fr.free.nrw.commons.R;
-import fr.free.nrw.commons.ViewPagerAdapter;
-import fr.free.nrw.commons.contributions.MainActivity;
-import fr.free.nrw.commons.databinding.FragmentExploreBinding;
-import fr.free.nrw.commons.di.CommonsDaggerSupportFragment;
-import fr.free.nrw.commons.kvstore.JsonKvStore;
-import fr.free.nrw.commons.theme.BaseActivity;
-import fr.free.nrw.commons.utils.ActivityUtils;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Locale;
-import javax.inject.Inject;
-import javax.inject.Named;
-import kotlin.Pair;
-
-public class ExploreFragment extends CommonsDaggerSupportFragment {
-
- private static final String FEATURED_IMAGES_CATEGORY = "Featured_pictures_on_Wikimedia_Commons";
- private static final String MOBILE_UPLOADS_CATEGORY = "Uploaded_with_Mobile/Android";
- private static final String EXPLORE_MAP = "Map";
- private static final String MEDIA_DETAILS_FRAGMENT_TAG = "MediaDetailsFragment";
-
-
- public FragmentExploreBinding binding;
- ViewPagerAdapter viewPagerAdapter;
- private ExploreListRootFragment featuredRootFragment;
- private ExploreListRootFragment mobileRootFragment;
- private ExploreMapRootFragment mapRootFragment;
- @Inject
- @Named("default_preferences")
- public JsonKvStore applicationKvStore;
-
- // Nearby map state (for if we came from Nearby fragment)
- private double prevZoom;
- private double prevLatitude;
- private double prevLongitude;
-
- public void setScroll(boolean canScroll) {
- if (binding != null) {
- binding.viewPager.setCanScroll(canScroll);
- }
- }
-
- @NonNull
- public static ExploreFragment newInstance() {
- ExploreFragment fragment = new ExploreFragment();
- fragment.setRetainInstance(true);
- return fragment;
- }
-
- @Override
- public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container,
- @Nullable Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- loadNearbyMapData();
- binding = FragmentExploreBinding.inflate(inflater, container, false);
-
- viewPagerAdapter = new ViewPagerAdapter(requireContext(), getChildFragmentManager(),
- FragmentPagerAdapter.BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT);
-
- binding.viewPager.setAdapter(viewPagerAdapter);
- binding.viewPager.setId(R.id.viewPager);
- binding.tabLayout.setupWithViewPager(binding.viewPager);
- binding.viewPager.addOnPageChangeListener(new OnPageChangeListener() {
- @Override
- public void onPageScrolled(int position, float positionOffset,
- int positionOffsetPixels) {
-
- }
-
- @Override
- public void onPageSelected(int position) {
- if (position == 2) {
- binding.viewPager.setCanScroll(false);
- } else {
- binding.viewPager.setCanScroll(true);
- }
- }
-
- @Override
- public void onPageScrollStateChanged(int state) {
-
- }
- });
- setTabs();
- setHasOptionsMenu(true);
-
- // if we came from 'Show in Explore' in Nearby, jump to Map tab
- if (isCameFromNearbyMap()) {
- binding.viewPager.setCurrentItem(2);
- }
- return binding.getRoot();
- }
-
- /**
- * Sets the titles in the tabLayout and fragments in the viewPager
- */
- public void setTabs() {
- Bundle featuredArguments = new Bundle();
- featuredArguments.putString("categoryName", FEATURED_IMAGES_CATEGORY);
-
- Bundle mobileArguments = new Bundle();
- mobileArguments.putString("categoryName", MOBILE_UPLOADS_CATEGORY);
-
- Bundle mapArguments = new Bundle();
- mapArguments.putString("categoryName", EXPLORE_MAP);
-
- // if we came from 'Show in Explore' in Nearby, pass on zoom and center to Explore map root
- if (isCameFromNearbyMap()) {
- mapArguments.putDouble("prev_zoom", prevZoom);
- mapArguments.putDouble("prev_latitude", prevLatitude);
- mapArguments.putDouble("prev_longitude", prevLongitude);
- }
-
- featuredRootFragment = new ExploreListRootFragment(featuredArguments);
- mobileRootFragment = new ExploreListRootFragment(mobileArguments);
- mapRootFragment = new ExploreMapRootFragment(mapArguments);
-
- ((MainActivity) getActivity()).showTabs();
- ((BaseActivity) getActivity()).getSupportActionBar().setDisplayHomeAsUpEnabled(false);
-
- viewPagerAdapter.setTabs(
- pairOf(R.string.explore_tab_title_featured, featuredRootFragment),
- pairOf(R.string.explore_tab_title_mobile, mobileRootFragment),
- pairOf(R.string.explore_tab_title_map, mapRootFragment)
- );
- viewPagerAdapter.notifyDataSetChanged();
- }
-
- /**
- * Fetch Nearby map camera data from fragment arguments if any.
- */
- public void loadNearbyMapData() {
- // get fragment arguments
- if (getArguments() != null) {
- prevZoom = getArguments().getDouble("prev_zoom");
- prevLatitude = getArguments().getDouble("prev_latitude");
- prevLongitude = getArguments().getDouble("prev_longitude");
- }
- }
-
- /**
- * Checks if fragment arguments contain data from Nearby map. if present, then the user
- * navigated from Nearby using 'Show in Explore'.
- *
- * @return true if user navigated from Nearby map
- **/
- public boolean isCameFromNearbyMap() {
- return prevZoom != 0.0 || prevLatitude != 0.0 || prevLongitude != 0.0;
- }
-
- public boolean onBackPressed() {
- if (binding.tabLayout.getSelectedTabPosition() == 0) {
- if (featuredRootFragment.backPressed()) {
- ((BaseActivity) getActivity()).getSupportActionBar()
- .setDisplayHomeAsUpEnabled(false);
- return true;
- }
- } else if (binding.tabLayout.getSelectedTabPosition() == 1) { //Mobile root fragment
- if (mobileRootFragment.backPressed()) {
- ((BaseActivity) getActivity()).getSupportActionBar()
- .setDisplayHomeAsUpEnabled(false);
- return true;
- }
- } else { //explore map fragment
- if (mapRootFragment.backPressed()) {
- ((BaseActivity) getActivity()).getSupportActionBar()
- .setDisplayHomeAsUpEnabled(false);
- return true;
- }
- }
- return false;
- }
-
- /**
- * This method inflates the menu in the toolbar
- */
- @Override
- public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
- // if logged in 'Show in Nearby' menu item is visible
- if (applicationKvStore.getBoolean("login_skipped") == false) {
- inflater.inflate(R.menu.explore_fragment_menu, menu);
-
- MenuItem others = menu.findItem(R.id.list_item_show_in_nearby);
-
- if (binding.viewPager.getCurrentItem() == 2) {
- others.setVisible(true);
- }
-
- // if on Map tab, show all menu options, else only show search
- binding.viewPager.addOnPageChangeListener(new OnPageChangeListener() {
- @Override
- public void onPageScrolled(int position, float positionOffset,
- int positionOffsetPixels) {
- }
-
- @Override
- public void onPageSelected(int position) {
- others.setVisible((position == 2));
- }
-
- @Override
- public void onPageScrollStateChanged(int state) {
- if (state == SCROLL_STATE_IDLE && binding.viewPager.getCurrentItem() == 2) {
- onPageSelected(2);
- }
- }
- });
- } else {
- inflater.inflate(R.menu.menu_search, menu);
- }
- super.onCreateOptionsMenu(menu, inflater);
- }
-
- /**
- * This method handles the logic on ItemSelect in toolbar menu Currently only 1 choice is
- * available to open search page of the app
- */
- @Override
- public boolean onOptionsItemSelected(MenuItem item) {
-
- // Handle item selection
- switch (item.getItemId()) {
- case R.id.action_search:
- ActivityUtils.startActivityWithFlags(getActivity(), SearchActivity.class);
- return true;
- case R.id.list_item_show_in_nearby:
- mapRootFragment.loadNearbyMapFromExplore();
- return true;
- default:
- return super.onOptionsItemSelected(item);
- }
- }
-
- @Override
- public void onDestroy() {
- super.onDestroy();
- binding = null;
- }
-}
-
-
diff --git a/app/src/main/java/fr/free/nrw/commons/explore/ExploreFragment.kt b/app/src/main/java/fr/free/nrw/commons/explore/ExploreFragment.kt
new file mode 100644
index 000000000..bc8f9cfaa
--- /dev/null
+++ b/app/src/main/java/fr/free/nrw/commons/explore/ExploreFragment.kt
@@ -0,0 +1,227 @@
+package fr.free.nrw.commons.explore
+
+import android.os.Bundle
+import android.view.LayoutInflater
+import android.view.Menu
+import android.view.MenuInflater
+import android.view.MenuItem
+import android.view.View
+import android.view.ViewGroup
+import androidx.fragment.app.FragmentPagerAdapter
+import androidx.viewpager.widget.ViewPager
+import androidx.viewpager.widget.ViewPager.OnPageChangeListener
+import fr.free.nrw.commons.R
+import fr.free.nrw.commons.ViewPagerAdapter
+import fr.free.nrw.commons.contributions.MainActivity
+import fr.free.nrw.commons.databinding.FragmentExploreBinding
+import fr.free.nrw.commons.di.CommonsDaggerSupportFragment
+import fr.free.nrw.commons.kvstore.JsonKvStore
+import fr.free.nrw.commons.theme.BaseActivity
+import fr.free.nrw.commons.utils.ActivityUtils.startActivityWithFlags
+import javax.inject.Inject
+import javax.inject.Named
+
+class ExploreFragment : CommonsDaggerSupportFragment() {
+
+ @JvmField
+ @Inject
+ @Named("default_preferences")
+ var applicationKvStore: JsonKvStore? = null
+
+ private var featuredRootFragment: ExploreListRootFragment? = null
+ private var mobileRootFragment: ExploreListRootFragment? = null
+ private var mapRootFragment: ExploreMapRootFragment? = null
+ private var prevZoom = 0.0
+ private var prevLatitude = 0.0
+ private var prevLongitude = 0.0
+ private var viewPagerAdapter: ViewPagerAdapter? = null
+ var binding: FragmentExploreBinding? = null
+
+ fun setScroll(canScroll: Boolean) {
+ if (binding != null) {
+ binding!!.viewPager.canScroll = canScroll
+ }
+ }
+
+ override fun onCreateView(
+ inflater: LayoutInflater, container: ViewGroup?,
+ savedInstanceState: Bundle?
+ ): View {
+ super.onCreate(savedInstanceState)
+ loadNearbyMapData()
+ binding = FragmentExploreBinding.inflate(inflater, container, false)
+
+ viewPagerAdapter = ViewPagerAdapter(
+ requireContext(), childFragmentManager,
+ FragmentPagerAdapter.BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT
+ )
+
+ binding!!.viewPager.adapter = viewPagerAdapter
+ binding!!.viewPager.id = R.id.viewPager
+ binding!!.tabLayout.setupWithViewPager(binding!!.viewPager)
+ binding!!.viewPager.addOnPageChangeListener(object : OnPageChangeListener {
+ override fun onPageScrolled(position: Int, positionOffset: Float, positionOffsetPixels: Int) = Unit
+ override fun onPageScrollStateChanged(state: Int) = Unit
+ override fun onPageSelected(position: Int) {
+ binding!!.viewPager.canScroll = position != 2
+ if (position == 2) {
+ mapRootFragment?.requestLocationIfNeeded()
+ }
+ }
+ })
+ setTabs()
+ setHasOptionsMenu(true)
+
+ // if we came from 'Show in Explore' in Nearby, jump to Map tab
+ if (isCameFromNearbyMap) {
+ binding!!.viewPager.currentItem = 2
+ }
+ return binding!!.root
+ }
+
+ /**
+ * Sets the titles in the tabLayout and fragments in the viewPager
+ */
+ fun setTabs() {
+ val featuredArguments = Bundle()
+ featuredArguments.putString("categoryName", FEATURED_IMAGES_CATEGORY)
+
+ val mobileArguments = Bundle()
+ mobileArguments.putString("categoryName", MOBILE_UPLOADS_CATEGORY)
+
+ val mapArguments = Bundle()
+ mapArguments.putString("categoryName", EXPLORE_MAP)
+
+ // if we came from 'Show in Explore' in Nearby, pass on zoom and center to Explore map root
+ if (isCameFromNearbyMap) {
+ mapArguments.putDouble("prev_zoom", prevZoom)
+ mapArguments.putDouble("prev_latitude", prevLatitude)
+ mapArguments.putDouble("prev_longitude", prevLongitude)
+ }
+
+ featuredRootFragment = ExploreListRootFragment(featuredArguments)
+ mobileRootFragment = ExploreListRootFragment(mobileArguments)
+ mapRootFragment = ExploreMapRootFragment(mapArguments)
+
+ (activity as MainActivity).showTabs()
+ (activity as BaseActivity).supportActionBar!!.setDisplayHomeAsUpEnabled(false)
+
+ viewPagerAdapter!!.setTabs(
+ R.string.explore_tab_title_featured to featuredRootFragment!!,
+ R.string.explore_tab_title_mobile to mobileRootFragment!!,
+ R.string.explore_tab_title_map to mapRootFragment!!
+ )
+ viewPagerAdapter!!.notifyDataSetChanged()
+ }
+
+ /**
+ * Fetch Nearby map camera data from fragment arguments if any.
+ */
+ private fun loadNearbyMapData() {
+ // get fragment arguments
+ if (arguments != null) {
+ with (requireArguments()) {
+ prevZoom = getDouble("prev_zoom")
+ prevLatitude = getDouble("prev_latitude")
+ prevLongitude = getDouble("prev_longitude")
+ }
+ }
+ }
+
+ /**
+ * Checks if fragment arguments contain data from Nearby map. if present, then the user
+ * navigated from Nearby using 'Show in Explore'.
+ *
+ * @return true if user navigated from Nearby map
+ */
+ private val isCameFromNearbyMap: Boolean
+ get() = prevZoom != 0.0 || prevLatitude != 0.0 || prevLongitude != 0.0
+
+ fun onBackPressed(): Boolean {
+ if (binding!!.tabLayout.selectedTabPosition == 0) {
+ if (featuredRootFragment!!.backPressed()) {
+ (activity as BaseActivity).supportActionBar!!.setDisplayHomeAsUpEnabled(false)
+ return true
+ }
+ } else if (binding!!.tabLayout.selectedTabPosition == 1) { //Mobile root fragment
+ if (mobileRootFragment!!.backPressed()) {
+ (activity as BaseActivity).supportActionBar!!.setDisplayHomeAsUpEnabled(false)
+ return true
+ }
+ } else { //explore map fragment
+ if (mapRootFragment!!.backPressed()) {
+ (activity as BaseActivity).supportActionBar!!.setDisplayHomeAsUpEnabled(false)
+ return true
+ }
+ }
+ return false
+ }
+
+ /**
+ * This method inflates the menu in the toolbar
+ */
+ override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
+ // if logged in 'Show in Nearby' menu item is visible
+ if (applicationKvStore!!.getBoolean("login_skipped") == false) {
+ inflater.inflate(R.menu.explore_fragment_menu, menu)
+
+ val others = menu.findItem(R.id.list_item_show_in_nearby)
+
+ if (binding!!.viewPager.currentItem == 2) {
+ others.setVisible(true)
+ }
+
+ // if on Map tab, show all menu options, else only show search
+ binding!!.viewPager.addOnPageChangeListener(object : OnPageChangeListener {
+ override fun onPageScrolled(position: Int, positionOffset: Float, positionOffsetPixels: Int) = Unit
+ override fun onPageScrollStateChanged(state: Int) = Unit
+ override fun onPageSelected(position: Int) {
+ binding!!.viewPager.canScroll = position != 2
+ others.setVisible(position == 2)
+ if (position == 2) {
+ mapRootFragment?.requestLocationIfNeeded()
+ }
+ }
+ })
+ } else {
+ inflater.inflate(R.menu.menu_search, menu)
+ }
+ super.onCreateOptionsMenu(menu, inflater)
+ }
+
+ /**
+ * This method handles the logic on ItemSelect in toolbar menu Currently only 1 choice is
+ * available to open search page of the app
+ */
+ override fun onOptionsItemSelected(item: MenuItem): Boolean {
+ // Handle item selection
+ when (item.itemId) {
+ R.id.action_search -> {
+ startActivityWithFlags(requireActivity(), SearchActivity::class.java)
+ return true
+ }
+
+ R.id.list_item_show_in_nearby -> {
+ mapRootFragment!!.loadNearbyMapFromExplore()
+ return true
+ }
+
+ else -> return super.onOptionsItemSelected(item)
+ }
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ binding = null
+ }
+
+ companion object {
+ private const val FEATURED_IMAGES_CATEGORY = "Featured_pictures_on_Wikimedia_Commons"
+ private const val MOBILE_UPLOADS_CATEGORY = "Uploaded_with_Mobile/Android"
+ private const val EXPLORE_MAP = "Map"
+
+ fun newInstance(): ExploreFragment = ExploreFragment().apply {
+ retainInstance = true
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/fr/free/nrw/commons/explore/ExploreListRootFragment.java b/app/src/main/java/fr/free/nrw/commons/explore/ExploreListRootFragment.java
deleted file mode 100644
index e3ad90119..000000000
--- a/app/src/main/java/fr/free/nrw/commons/explore/ExploreListRootFragment.java
+++ /dev/null
@@ -1,215 +0,0 @@
-package fr.free.nrw.commons.explore;
-
-import android.content.Context;
-import android.os.Bundle;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
-import androidx.fragment.app.Fragment;
-import fr.free.nrw.commons.Media;
-import fr.free.nrw.commons.R;
-import fr.free.nrw.commons.category.CategoryImagesCallback;
-import fr.free.nrw.commons.contributions.MainActivity;
-import fr.free.nrw.commons.databinding.FragmentFeaturedRootBinding;
-import fr.free.nrw.commons.di.CommonsDaggerSupportFragment;
-import fr.free.nrw.commons.explore.categories.media.CategoriesMediaFragment;
-import fr.free.nrw.commons.media.MediaDetailPagerFragment;
-import fr.free.nrw.commons.media.MediaDetailProvider;
-import fr.free.nrw.commons.navtab.NavTab;
-
-public class ExploreListRootFragment extends CommonsDaggerSupportFragment implements
- MediaDetailProvider, CategoryImagesCallback {
-
- private MediaDetailPagerFragment mediaDetails;
- private CategoriesMediaFragment listFragment;
-
- private FragmentFeaturedRootBinding binding;
-
- public ExploreListRootFragment() {
- //empty constructor necessary otherwise crashes on recreate
- }
-
- public ExploreListRootFragment(Bundle bundle) {
- String title = bundle.getString("categoryName");
- listFragment = new CategoriesMediaFragment();
- Bundle featuredArguments = new Bundle();
- featuredArguments.putString("categoryName", title);
- listFragment.setArguments(featuredArguments);
- }
-
- @Nullable
- @Override
- public View onCreateView(@NonNull final LayoutInflater inflater,
- @Nullable final ViewGroup container,
- @Nullable final Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
-
- binding = FragmentFeaturedRootBinding.inflate(inflater, container, false);
- return binding.getRoot();
- }
-
- @Override
- public void onViewCreated(@NonNull final View view, @Nullable final Bundle savedInstanceState) {
- super.onViewCreated(view, savedInstanceState);
- if (savedInstanceState == null) {
- setFragment(listFragment, mediaDetails);
- }
- }
-
- public void setFragment(Fragment fragment, Fragment otherFragment) {
- if (fragment.isAdded() && otherFragment != null) {
- getChildFragmentManager()
- .beginTransaction()
- .hide(otherFragment)
- .show(fragment)
- .addToBackStack("CONTRIBUTION_LIST_FRAGMENT_TAG")
- .commit();
- getChildFragmentManager().executePendingTransactions();
- } else if (fragment.isAdded() && otherFragment == null) {
- getChildFragmentManager()
- .beginTransaction()
- .show(fragment)
- .addToBackStack("CONTRIBUTION_LIST_FRAGMENT_TAG")
- .commit();
- getChildFragmentManager().executePendingTransactions();
- } else if (!fragment.isAdded() && otherFragment != null) {
- getChildFragmentManager()
- .beginTransaction()
- .hide(otherFragment)
- .add(R.id.explore_container, fragment)
- .addToBackStack("CONTRIBUTION_LIST_FRAGMENT_TAG")
- .commit();
- getChildFragmentManager().executePendingTransactions();
- } else if (!fragment.isAdded()) {
- getChildFragmentManager()
- .beginTransaction()
- .replace(R.id.explore_container, fragment)
- .addToBackStack("CONTRIBUTION_LIST_FRAGMENT_TAG")
- .commit();
- getChildFragmentManager().executePendingTransactions();
- }
- }
-
- public void removeFragment(Fragment fragment) {
- getChildFragmentManager()
- .beginTransaction()
- .remove(fragment)
- .commit();
- getChildFragmentManager().executePendingTransactions();
- }
-
- @Override
- public void onAttach(final Context context) {
- super.onAttach(context);
- }
-
- @Override
- public void onMediaClicked(int position) {
- if (binding!=null) {
- binding.exploreContainer.setVisibility(View.VISIBLE);
- }
- if (((ExploreFragment) getParentFragment()).binding!=null) {
- ((ExploreFragment) getParentFragment()).binding.tabLayout.setVisibility(View.GONE);
- }
- mediaDetails = MediaDetailPagerFragment.newInstance(false, true);
- ((ExploreFragment) getParentFragment()).setScroll(false);
- setFragment(mediaDetails, listFragment);
- mediaDetails.showImage(position);
- }
-
- /**
- * This method is called mediaDetailPagerFragment. It returns the Media Object at that Index
- *
- * @param i It is the index of which media object is to be returned which is same as current
- * index of viewPager.
- * @return Media Object
- */
- @Override
- public Media getMediaAtPosition(int i) {
- if (listFragment != null) {
- return listFragment.getMediaAtPosition(i);
- } else {
- return null;
- }
- }
-
- /**
- * This method is called on from getCount of MediaDetailPagerFragment The viewpager will contain
- * same number of media items as that of media elements in adapter.
- *
- * @return Total Media count in the adapter
- */
- @Override
- public int getTotalMediaCount() {
- if (listFragment != null) {
- return listFragment.getTotalMediaCount();
- } else {
- return 0;
- }
- }
-
- @Override
- public Integer getContributionStateAt(int position) {
- return null;
- }
-
- /**
- * Reload media detail fragment once media is nominated
- *
- * @param index item position that has been nominated
- */
- @Override
- public void refreshNominatedMedia(int index) {
- if (mediaDetails != null && !listFragment.isVisible()) {
- removeFragment(mediaDetails);
- onMediaClicked(index);
- }
- }
-
- /**
- * This method is called on success of API call for featured images or mobile uploads. The
- * viewpager will notified that number of items have changed.
- */
- @Override
- public void viewPagerNotifyDataSetChanged() {
- if (mediaDetails != null) {
- mediaDetails.notifyDataSetChanged();
- }
- }
-
- /**
- * Performs back pressed action on the fragment. Return true if the event was handled by the
- * mediaDetails otherwise returns false.
- *
- * @return
- */
- public boolean backPressed() {
- if (null != mediaDetails && mediaDetails.isVisible()) {
- if (((ExploreFragment) getParentFragment()).binding != null) {
- ((ExploreFragment) getParentFragment()).binding.tabLayout.setVisibility(View.VISIBLE);
- }
- removeFragment(mediaDetails);
- ((ExploreFragment) getParentFragment()).setScroll(true);
- setFragment(listFragment, mediaDetails);
- ((MainActivity) getActivity()).showTabs();
- return true;
- } else {
- if (((MainActivity) getActivity()) != null) {
- ((MainActivity) getActivity()).setSelectedItemId(NavTab.CONTRIBUTIONS.code());
- }
- }
- if (((MainActivity) getActivity()) != null) {
- ((MainActivity) getActivity()).showTabs();
- }
- return false;
- }
-
- @Override
- public void onDestroy() {
- super.onDestroy();
-
- binding = null;
- }
-}
diff --git a/app/src/main/java/fr/free/nrw/commons/explore/ExploreListRootFragment.kt b/app/src/main/java/fr/free/nrw/commons/explore/ExploreListRootFragment.kt
new file mode 100644
index 000000000..32acebbb1
--- /dev/null
+++ b/app/src/main/java/fr/free/nrw/commons/explore/ExploreListRootFragment.kt
@@ -0,0 +1,182 @@
+package fr.free.nrw.commons.explore
+
+import android.os.Bundle
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import androidx.core.os.bundleOf
+import androidx.fragment.app.Fragment
+import fr.free.nrw.commons.Media
+import fr.free.nrw.commons.R
+import fr.free.nrw.commons.category.CategoryImagesCallback
+import fr.free.nrw.commons.contributions.MainActivity
+import fr.free.nrw.commons.databinding.FragmentFeaturedRootBinding
+import fr.free.nrw.commons.di.CommonsDaggerSupportFragment
+import fr.free.nrw.commons.explore.categories.media.CategoriesMediaFragment
+import fr.free.nrw.commons.media.MediaDetailPagerFragment
+import fr.free.nrw.commons.media.MediaDetailProvider
+import fr.free.nrw.commons.navtab.NavTab
+
+class ExploreListRootFragment : CommonsDaggerSupportFragment, MediaDetailProvider,
+ CategoryImagesCallback {
+ private var mediaDetails: MediaDetailPagerFragment? = null
+ private var listFragment: CategoriesMediaFragment? = null
+ private var binding: FragmentFeaturedRootBinding? = null
+
+ constructor()
+
+ constructor(bundle: Bundle) {
+ listFragment = CategoriesMediaFragment().apply {
+ arguments = bundleOf(
+ "categoryName" to bundle.getString("categoryName")
+ )
+ }
+ }
+
+ override fun onCreateView(
+ inflater: LayoutInflater,
+ container: ViewGroup?,
+ savedInstanceState: Bundle?
+ ): View {
+ super.onCreate(savedInstanceState)
+
+ binding = FragmentFeaturedRootBinding.inflate(inflater, container, false)
+ return binding!!.root
+ }
+
+ override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+ super.onViewCreated(view, savedInstanceState)
+ if (savedInstanceState == null) {
+ setFragment(listFragment!!, mediaDetails)
+ }
+ }
+
+ fun setFragment(fragment: Fragment, otherFragment: Fragment?) {
+ if (fragment.isAdded && otherFragment != null) {
+ childFragmentManager
+ .beginTransaction()
+ .hide(otherFragment)
+ .show(fragment)
+ .addToBackStack("CONTRIBUTION_LIST_FRAGMENT_TAG")
+ .commit()
+ childFragmentManager.executePendingTransactions()
+ } else if (fragment.isAdded && otherFragment == null) {
+ childFragmentManager
+ .beginTransaction()
+ .show(fragment)
+ .addToBackStack("CONTRIBUTION_LIST_FRAGMENT_TAG")
+ .commit()
+ childFragmentManager.executePendingTransactions()
+ } else if (!fragment.isAdded && otherFragment != null) {
+ childFragmentManager
+ .beginTransaction()
+ .hide(otherFragment)
+ .add(R.id.explore_container, fragment)
+ .addToBackStack("CONTRIBUTION_LIST_FRAGMENT_TAG")
+ .commit()
+ childFragmentManager.executePendingTransactions()
+ } else if (!fragment.isAdded) {
+ childFragmentManager
+ .beginTransaction()
+ .replace(R.id.explore_container, fragment)
+ .addToBackStack("CONTRIBUTION_LIST_FRAGMENT_TAG")
+ .commit()
+ childFragmentManager.executePendingTransactions()
+ }
+ }
+
+ private fun removeFragment(fragment: Fragment) {
+ childFragmentManager
+ .beginTransaction()
+ .remove(fragment)
+ .commit()
+ childFragmentManager.executePendingTransactions()
+ }
+
+ override fun onMediaClicked(position: Int) {
+ if (binding != null) {
+ binding!!.exploreContainer.visibility = View.VISIBLE
+ }
+ if ((parentFragment as ExploreFragment).binding != null) {
+ (parentFragment as ExploreFragment).binding!!.tabLayout.visibility =
+ View.GONE
+ }
+ mediaDetails = MediaDetailPagerFragment.newInstance(false, true)
+ (parentFragment as ExploreFragment).setScroll(false)
+ setFragment(mediaDetails!!, listFragment)
+ mediaDetails!!.showImage(position)
+ }
+
+ /**
+ * This method is called mediaDetailPagerFragment. It returns the Media Object at that Index
+ *
+ * @param i It is the index of which media object is to be returned which is same as current
+ * index of viewPager.
+ * @return Media Object
+ */
+ override fun getMediaAtPosition(i: Int): Media? = listFragment?.getMediaAtPosition(i)
+
+ /**
+ * This method is called on from getCount of MediaDetailPagerFragment The viewpager will contain
+ * same number of media items as that of media elements in adapter.
+ *
+ * @return Total Media count in the adapter
+ */
+ override fun getTotalMediaCount(): Int = listFragment?.getTotalMediaCount() ?: 0
+
+ override fun getContributionStateAt(position: Int): Int? = null
+
+ /**
+ * Reload media detail fragment once media is nominated
+ *
+ * @param index item position that has been nominated
+ */
+ override fun refreshNominatedMedia(index: Int) {
+ if (mediaDetails != null && !listFragment!!.isVisible) {
+ removeFragment(mediaDetails!!)
+ onMediaClicked(index)
+ }
+ }
+
+ /**
+ * This method is called on success of API call for featured images or mobile uploads. The
+ * viewpager will notified that number of items have changed.
+ */
+ override fun viewPagerNotifyDataSetChanged() {
+ mediaDetails?.notifyDataSetChanged()
+ }
+
+ /**
+ * Performs back pressed action on the fragment. Return true if the event was handled by the
+ * mediaDetails otherwise returns false.
+ *
+ * @return
+ */
+ fun backPressed(): Boolean {
+ if (null != mediaDetails && mediaDetails!!.isVisible) {
+ if ((parentFragment as ExploreFragment).binding != null) {
+ (parentFragment as ExploreFragment).binding!!.tabLayout.visibility =
+ View.VISIBLE
+ }
+ removeFragment(mediaDetails!!)
+ (parentFragment as ExploreFragment).setScroll(true)
+ setFragment(listFragment!!, mediaDetails)
+ (activity as MainActivity).showTabs()
+ return true
+ } else {
+ if ((activity as MainActivity?) != null) {
+ (activity as MainActivity).setSelectedItemId(NavTab.CONTRIBUTIONS.code())
+ }
+ }
+ if ((activity as MainActivity?) != null) {
+ (activity as MainActivity).showTabs()
+ }
+ return false
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+
+ binding = null
+ }
+}
diff --git a/app/src/main/java/fr/free/nrw/commons/explore/ExploreMapRootFragment.java b/app/src/main/java/fr/free/nrw/commons/explore/ExploreMapRootFragment.java
deleted file mode 100644
index 31a8e11ba..000000000
--- a/app/src/main/java/fr/free/nrw/commons/explore/ExploreMapRootFragment.java
+++ /dev/null
@@ -1,239 +0,0 @@
-package fr.free.nrw.commons.explore;
-
-import android.content.Context;
-import android.os.Bundle;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
-import androidx.fragment.app.Fragment;
-import fr.free.nrw.commons.Media;
-import fr.free.nrw.commons.R;
-import fr.free.nrw.commons.category.CategoryImagesCallback;
-import fr.free.nrw.commons.contributions.MainActivity;
-import fr.free.nrw.commons.databinding.FragmentFeaturedRootBinding;
-import fr.free.nrw.commons.di.CommonsDaggerSupportFragment;
-import fr.free.nrw.commons.explore.map.ExploreMapFragment;
-import fr.free.nrw.commons.media.MediaDetailPagerFragment;
-import fr.free.nrw.commons.media.MediaDetailProvider;
-import fr.free.nrw.commons.navtab.NavTab;
-
-public class ExploreMapRootFragment extends CommonsDaggerSupportFragment implements
- MediaDetailProvider, CategoryImagesCallback {
-
- private MediaDetailPagerFragment mediaDetails;
- private ExploreMapFragment mapFragment;
-
- private FragmentFeaturedRootBinding binding;
-
- public ExploreMapRootFragment() {
- //empty constructor necessary otherwise crashes on recreate
- }
-
- @NonNull
- public static ExploreMapRootFragment newInstance() {
- ExploreMapRootFragment fragment = new ExploreMapRootFragment();
- fragment.setRetainInstance(true);
- return fragment;
- }
-
- public ExploreMapRootFragment(Bundle bundle) {
- // get fragment arguments
- String title = bundle.getString("categoryName");
- double zoom = bundle.getDouble("prev_zoom");
- double latitude = bundle.getDouble("prev_latitude");
- double longitude = bundle.getDouble("prev_longitude");
-
- mapFragment = new ExploreMapFragment();
- Bundle featuredArguments = new Bundle();
- featuredArguments.putString("categoryName", title);
-
- // if we came from 'Show in Explore' in Nearby, pass on zoom and center
- if (zoom != 0.0 || latitude != 0.0 || longitude != 0.0) {
- featuredArguments.putDouble("prev_zoom", zoom);
- featuredArguments.putDouble("prev_latitude", latitude);
- featuredArguments.putDouble("prev_longitude", longitude);
- }
- mapFragment.setArguments(featuredArguments);
- }
-
- @Nullable
- @Override
- public View onCreateView(@NonNull final LayoutInflater inflater,
- @Nullable final ViewGroup container,
- @Nullable final Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
-
- binding = FragmentFeaturedRootBinding.inflate(inflater, container, false);
-
- return binding.getRoot();
- }
-
- @Override
- public void onViewCreated(@NonNull final View view, @Nullable final Bundle savedInstanceState) {
- super.onViewCreated(view, savedInstanceState);
- if (savedInstanceState == null) {
- setFragment(mapFragment, mediaDetails);
- }
- }
-
- public void setFragment(Fragment fragment, Fragment otherFragment) {
- if (fragment.isAdded() && otherFragment != null) {
- getChildFragmentManager()
- .beginTransaction()
- .hide(otherFragment)
- .show(fragment)
- .addToBackStack("CONTRIBUTION_LIST_FRAGMENT_TAG")
- .commit();
- getChildFragmentManager().executePendingTransactions();
- } else if (fragment.isAdded() && otherFragment == null) {
- getChildFragmentManager()
- .beginTransaction()
- .show(fragment)
- .addToBackStack("CONTRIBUTION_LIST_FRAGMENT_TAG")
- .commit();
- getChildFragmentManager().executePendingTransactions();
- } else if (!fragment.isAdded() && otherFragment != null) {
- getChildFragmentManager()
- .beginTransaction()
- .hide(otherFragment)
- .add(R.id.explore_container, fragment)
- .addToBackStack("CONTRIBUTION_LIST_FRAGMENT_TAG")
- .commit();
- getChildFragmentManager().executePendingTransactions();
- } else if (!fragment.isAdded()) {
- getChildFragmentManager()
- .beginTransaction()
- .replace(R.id.explore_container, fragment)
- .addToBackStack("CONTRIBUTION_LIST_FRAGMENT_TAG")
- .commit();
- getChildFragmentManager().executePendingTransactions();
- }
- }
-
- public void removeFragment(Fragment fragment) {
- getChildFragmentManager()
- .beginTransaction()
- .remove(fragment)
- .commit();
- getChildFragmentManager().executePendingTransactions();
- }
-
- @Override
- public void onAttach(final Context context) {
- super.onAttach(context);
- }
-
- @Override
- public void onMediaClicked(int position) {
- binding.exploreContainer.setVisibility(View.VISIBLE);
- ((ExploreFragment) getParentFragment()).binding.tabLayout.setVisibility(View.GONE);
- mediaDetails = MediaDetailPagerFragment.newInstance(false, true);
- ((ExploreFragment) getParentFragment()).setScroll(false);
- setFragment(mediaDetails, mapFragment);
- mediaDetails.showImage(position);
- }
-
- /**
- * This method is called mediaDetailPagerFragment. It returns the Media Object at that Index
- *
- * @param i It is the index of which media object is to be returned which is same as current
- * index of viewPager.
- * @return Media Object
- */
- @Override
- public Media getMediaAtPosition(int i) {
- if (mapFragment != null && mapFragment.mediaList != null) {
- return mapFragment.mediaList.get(i);
- } else {
- return null;
- }
- }
-
- /**
- * This method is called on from getCount of MediaDetailPagerFragment The viewpager will contain
- * same number of media items as that of media elements in adapter.
- *
- * @return Total Media count in the adapter
- */
- @Override
- public int getTotalMediaCount() {
- if (mapFragment != null && mapFragment.mediaList != null) {
- return mapFragment.mediaList.size();
- } else {
- return 0;
- }
- }
-
- @Override
- public Integer getContributionStateAt(int position) {
- return null;
- }
-
- /**
- * Reload media detail fragment once media is nominated
- *
- * @param index item position that has been nominated
- */
- @Override
- public void refreshNominatedMedia(int index) {
- if (mediaDetails != null && !mapFragment.isVisible()) {
- removeFragment(mediaDetails);
- onMediaClicked(index);
- }
- }
-
- /**
- * This method is called on success of API call for featured images or mobile uploads. The
- * viewpager will notified that number of items have changed.
- */
- @Override
- public void viewPagerNotifyDataSetChanged() {
- if (mediaDetails != null) {
- mediaDetails.notifyDataSetChanged();
- }
- }
-
- /**
- * Performs back pressed action on the fragment. Return true if the event was handled by the
- * mediaDetails otherwise returns false.
- *
- * @return
- */
- public boolean backPressed() {
- if (null != mediaDetails && mediaDetails.isVisible()) {
- ((ExploreFragment) getParentFragment()).binding.tabLayout.setVisibility(View.VISIBLE);
- removeFragment(mediaDetails);
- ((ExploreFragment) getParentFragment()).setScroll(true);
- setFragment(mapFragment, mediaDetails);
- ((MainActivity) getActivity()).showTabs();
- return true;
-
- }
- if (mapFragment != null && mapFragment.isVisible()) {
- if (mapFragment.backButtonClicked()) {
- // Explore map fragment handled the event no further action required.
- return true;
- } else {
- ((MainActivity) getActivity()).showTabs();
- return false;
- }
- } else {
- ((MainActivity) getActivity()).setSelectedItemId(NavTab.CONTRIBUTIONS.code());
- }
- ((MainActivity) getActivity()).showTabs();
- return false;
- }
-
- public void loadNearbyMapFromExplore() {
- mapFragment.loadNearbyMapFromExplore();
- }
-
- @Override
- public void onDestroy() {
- super.onDestroy();
-
- binding = null;
- }
-}
diff --git a/app/src/main/java/fr/free/nrw/commons/explore/ExploreMapRootFragment.kt b/app/src/main/java/fr/free/nrw/commons/explore/ExploreMapRootFragment.kt
new file mode 100644
index 000000000..d405709a8
--- /dev/null
+++ b/app/src/main/java/fr/free/nrw/commons/explore/ExploreMapRootFragment.kt
@@ -0,0 +1,212 @@
+package fr.free.nrw.commons.explore
+
+import android.os.Bundle
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import androidx.core.os.bundleOf
+import androidx.fragment.app.Fragment
+import fr.free.nrw.commons.Media
+import fr.free.nrw.commons.R
+import fr.free.nrw.commons.category.CategoryImagesCallback
+import fr.free.nrw.commons.contributions.MainActivity
+import fr.free.nrw.commons.databinding.FragmentFeaturedRootBinding
+import fr.free.nrw.commons.di.CommonsDaggerSupportFragment
+import fr.free.nrw.commons.explore.map.ExploreMapFragment
+import fr.free.nrw.commons.media.MediaDetailPagerFragment
+import fr.free.nrw.commons.media.MediaDetailProvider
+import fr.free.nrw.commons.navtab.NavTab
+
+class ExploreMapRootFragment : CommonsDaggerSupportFragment, MediaDetailProvider,
+ CategoryImagesCallback {
+ private var mediaDetails: MediaDetailPagerFragment? = null
+ private var mapFragment: ExploreMapFragment? = null
+ private var binding: FragmentFeaturedRootBinding? = null
+
+ constructor()
+
+ constructor(bundle: Bundle) {
+ // get fragment arguments
+ val title = bundle.getString("categoryName")
+ val zoom = bundle.getDouble("prev_zoom")
+ val latitude = bundle.getDouble("prev_latitude")
+ val longitude = bundle.getDouble("prev_longitude")
+
+ mapFragment = ExploreMapFragment()
+ val featuredArguments = bundleOf(
+ "categoryName" to title
+ )
+
+ // if we came from 'Show in Explore' in Nearby, pass on zoom and center
+ if (zoom != 0.0 || latitude != 0.0 || longitude != 0.0) {
+ featuredArguments.putDouble("prev_zoom", zoom)
+ featuredArguments.putDouble("prev_latitude", latitude)
+ featuredArguments.putDouble("prev_longitude", longitude)
+ }
+ mapFragment!!.arguments = featuredArguments
+ }
+
+ override fun onCreateView(
+ inflater: LayoutInflater,
+ container: ViewGroup?,
+ savedInstanceState: Bundle?
+ ): View {
+ super.onCreate(savedInstanceState)
+
+ binding = FragmentFeaturedRootBinding.inflate(inflater, container, false)
+
+ return binding!!.root
+ }
+
+ override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+ super.onViewCreated(view, savedInstanceState)
+ if (savedInstanceState == null) {
+ setFragment(mapFragment!!, mediaDetails)
+ }
+ }
+
+ fun setFragment(fragment: Fragment, otherFragment: Fragment?) {
+ if (fragment.isAdded && otherFragment != null) {
+ childFragmentManager
+ .beginTransaction()
+ .hide(otherFragment)
+ .show(fragment)
+ .addToBackStack("CONTRIBUTION_LIST_FRAGMENT_TAG")
+ .commit()
+ childFragmentManager.executePendingTransactions()
+ } else if (fragment.isAdded && otherFragment == null) {
+ childFragmentManager
+ .beginTransaction()
+ .show(fragment)
+ .addToBackStack("CONTRIBUTION_LIST_FRAGMENT_TAG")
+ .commit()
+ childFragmentManager.executePendingTransactions()
+ } else if (!fragment.isAdded && otherFragment != null) {
+ childFragmentManager
+ .beginTransaction()
+ .hide(otherFragment)
+ .add(R.id.explore_container, fragment)
+ .addToBackStack("CONTRIBUTION_LIST_FRAGMENT_TAG")
+ .commit()
+ childFragmentManager.executePendingTransactions()
+ } else if (!fragment.isAdded) {
+ childFragmentManager
+ .beginTransaction()
+ .replace(R.id.explore_container, fragment)
+ .addToBackStack("CONTRIBUTION_LIST_FRAGMENT_TAG")
+ .commit()
+ childFragmentManager.executePendingTransactions()
+ }
+ }
+
+ private fun removeFragment(fragment: Fragment) {
+ childFragmentManager
+ .beginTransaction()
+ .remove(fragment)
+ .commit()
+ childFragmentManager.executePendingTransactions()
+ }
+
+ override fun onMediaClicked(position: Int) {
+ binding!!.exploreContainer.visibility = View.VISIBLE
+ (parentFragment as ExploreFragment).binding!!.tabLayout.visibility = View.GONE
+ mediaDetails = MediaDetailPagerFragment.newInstance(false, true)
+ (parentFragment as ExploreFragment).setScroll(false)
+ setFragment(mediaDetails!!, mapFragment)
+ mediaDetails!!.showImage(position)
+ }
+
+ /**
+ * This method is called mediaDetailPagerFragment. It returns the Media Object at that Index
+ *
+ * @param i It is the index of which media object is to be returned which is same as current
+ * index of viewPager.
+ * @return Media Object
+ */
+ override fun getMediaAtPosition(i: Int): Media? = mapFragment?.mediaList?.get(i)
+
+ /**
+ * This method is called on from getCount of MediaDetailPagerFragment The viewpager will contain
+ * same number of media items as that of media elements in adapter.
+ *
+ * @return Total Media count in the adapter
+ */
+ override fun getTotalMediaCount(): Int = mapFragment?.mediaList?.size ?: 0
+
+ override fun getContributionStateAt(position: Int): Int? = null
+
+ /**
+ * Reload media detail fragment once media is nominated
+ *
+ * @param index item position that has been nominated
+ */
+ override fun refreshNominatedMedia(index: Int) {
+ if (mediaDetails != null && !mapFragment!!.isVisible) {
+ removeFragment(mediaDetails!!)
+ onMediaClicked(index)
+ }
+ }
+
+ /**
+ * This method is called on success of API call for featured images or mobile uploads. The
+ * viewpager will notified that number of items have changed.
+ */
+ override fun viewPagerNotifyDataSetChanged() {
+ mediaDetails?.notifyDataSetChanged()
+ }
+
+ /**
+ * Performs back pressed action on the fragment. Return true if the event was handled by the
+ * mediaDetails otherwise returns false.
+ *
+ * @return
+ */
+ fun backPressed(): Boolean {
+ if (null != mediaDetails && mediaDetails!!.isVisible) {
+ (parentFragment as ExploreFragment).binding!!.tabLayout.visibility = View.VISIBLE
+ removeFragment(mediaDetails!!)
+ (parentFragment as ExploreFragment).setScroll(true)
+ setFragment(mapFragment!!, mediaDetails)
+ (activity as MainActivity).showTabs()
+ return true
+ }
+ if (mapFragment != null && mapFragment!!.isVisible) {
+ if (mapFragment!!.backButtonClicked()) {
+ // Explore map fragment handled the event no further action required.
+ return true
+ } else {
+ (activity as MainActivity).showTabs()
+ return false
+ }
+ } else {
+ (activity as MainActivity).setSelectedItemId(NavTab.CONTRIBUTIONS.code())
+ }
+ (activity as MainActivity).showTabs()
+ return false
+ }
+
+ fun loadNearbyMapFromExplore() = mapFragment?.loadNearbyMapFromExplore()
+
+ override fun onDestroy() {
+ super.onDestroy()
+
+ binding = null
+ }
+
+ fun requestLocationIfNeeded() {
+ mapFragment?.requestLocationIfNeeded()
+ }
+
+ override fun setUserVisibleHint(isVisibleToUser: Boolean) {
+ super.setUserVisibleHint(isVisibleToUser)
+ if (isVisibleToUser) {
+ requestLocationIfNeeded()
+ }
+ }
+
+ companion object {
+ fun newInstance(): ExploreMapRootFragment = ExploreMapRootFragment().apply {
+ retainInstance = true
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/fr/free/nrw/commons/explore/ParentViewPager.java b/app/src/main/java/fr/free/nrw/commons/explore/ParentViewPager.java
deleted file mode 100644
index 4112cda95..000000000
--- a/app/src/main/java/fr/free/nrw/commons/explore/ParentViewPager.java
+++ /dev/null
@@ -1,66 +0,0 @@
-package fr.free.nrw.commons.explore;
-
-import android.content.Context;
-import android.util.AttributeSet;
-import android.view.MotionEvent;
-import androidx.viewpager.widget.ViewPager;
-
-/**
- * ParentViewPager A custom viewPager whose scrolling can be enabled and disabled.
- */
-public class ParentViewPager extends ViewPager {
-
- /**
- * Boolean variable that stores the current state of pager scroll i.e(enabled or disabled)
- */
- private boolean canScroll = true;
-
-
- /**
- * Default constructors
- */
- public ParentViewPager(Context context) {
- super(context);
- }
-
- public ParentViewPager(Context context, AttributeSet attrs) {
- super(context, attrs);
- }
-
-
- /**
- * Setter method for canScroll.
- */
- public void setCanScroll(boolean canScroll) {
- this.canScroll = canScroll;
- }
-
-
- /**
- * Getter method for canScroll.
- */
- public boolean isCanScroll() {
- return canScroll;
- }
-
-
- /**
- * Method that prevents scrolling if canScroll is set to false.
- */
- @Override
- public boolean onTouchEvent(MotionEvent ev) {
- return canScroll && super.onTouchEvent(ev);
- }
-
-
- /**
- * A facilitator method that allows parent to intercept touch events before its children. thus
- * making it possible to prevent swiping parent on child end.
- */
- @Override
- public boolean onInterceptTouchEvent(MotionEvent ev) {
- return canScroll && super.onInterceptTouchEvent(ev);
- }
-
-
-}
diff --git a/app/src/main/java/fr/free/nrw/commons/explore/ParentViewPager.kt b/app/src/main/java/fr/free/nrw/commons/explore/ParentViewPager.kt
new file mode 100644
index 000000000..36e85e70a
--- /dev/null
+++ b/app/src/main/java/fr/free/nrw/commons/explore/ParentViewPager.kt
@@ -0,0 +1,25 @@
+package fr.free.nrw.commons.explore
+
+import android.content.Context
+import android.util.AttributeSet
+import android.view.MotionEvent
+import androidx.viewpager.widget.ViewPager
+
+/**
+ * ParentViewPager A custom viewPager whose scrolling can be enabled and disabled.
+ */
+class ParentViewPager : ViewPager {
+ var canScroll: Boolean = true
+
+ constructor(context: Context) : super(context)
+
+ constructor(context: Context, attrs: AttributeSet?) : super(context, attrs)
+
+ override fun onTouchEvent(ev: MotionEvent): Boolean {
+ return canScroll && super.onTouchEvent(ev)
+ }
+
+ override fun onInterceptTouchEvent(ev: MotionEvent): Boolean {
+ return canScroll && super.onInterceptTouchEvent(ev)
+ }
+}
diff --git a/app/src/main/java/fr/free/nrw/commons/explore/SearchActivity.java b/app/src/main/java/fr/free/nrw/commons/explore/SearchActivity.java
deleted file mode 100644
index b27ffc338..000000000
--- a/app/src/main/java/fr/free/nrw/commons/explore/SearchActivity.java
+++ /dev/null
@@ -1,285 +0,0 @@
-package fr.free.nrw.commons.explore;
-
-import static fr.free.nrw.commons.ViewPagerAdapter.pairOf;
-
-import android.os.Bundle;
-import android.text.TextUtils;
-import android.view.View;
-import androidx.annotation.NonNull;
-import androidx.fragment.app.FragmentManager;
-import androidx.fragment.app.FragmentTransaction;
-import com.jakewharton.rxbinding2.view.RxView;
-import com.jakewharton.rxbinding2.widget.RxSearchView;
-import fr.free.nrw.commons.Media;
-import fr.free.nrw.commons.R;
-import fr.free.nrw.commons.ViewPagerAdapter;
-import fr.free.nrw.commons.category.CategoryImagesCallback;
-import fr.free.nrw.commons.databinding.ActivitySearchBinding;
-import fr.free.nrw.commons.explore.categories.search.SearchCategoryFragment;
-import fr.free.nrw.commons.explore.depictions.search.SearchDepictionsFragment;
-import fr.free.nrw.commons.explore.media.SearchMediaFragment;
-import fr.free.nrw.commons.explore.models.RecentSearch;
-import fr.free.nrw.commons.explore.recentsearches.RecentSearchesDao;
-import fr.free.nrw.commons.explore.recentsearches.RecentSearchesFragment;
-import fr.free.nrw.commons.media.MediaDetailPagerFragment;
-import fr.free.nrw.commons.media.MediaDetailProvider;
-import fr.free.nrw.commons.theme.BaseActivity;
-import fr.free.nrw.commons.utils.FragmentUtils;
-import fr.free.nrw.commons.utils.ViewUtil;
-import io.reactivex.android.schedulers.AndroidSchedulers;
-import java.util.Date;
-import java.util.concurrent.TimeUnit;
-import javax.inject.Inject;
-import timber.log.Timber;
-
-/**
- * Represents search screen of this app
- */
-
-public class SearchActivity extends BaseActivity
- implements MediaDetailProvider, CategoryImagesCallback {
-
- @Inject
- RecentSearchesDao recentSearchesDao;
-
- private SearchMediaFragment searchMediaFragment;
- private SearchCategoryFragment searchCategoryFragment;
- private SearchDepictionsFragment searchDepictionsFragment;
- private RecentSearchesFragment recentSearchesFragment;
- private FragmentManager supportFragmentManager;
- private MediaDetailPagerFragment mediaDetails;
- ViewPagerAdapter viewPagerAdapter;
-
- private ActivitySearchBinding binding;
-
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- binding = ActivitySearchBinding.inflate(getLayoutInflater());
- setContentView(binding.getRoot());
-
- setTitle(getString(R.string.title_activity_search));
- setSupportActionBar(binding.toolbarSearch);
- getSupportActionBar().setDisplayHomeAsUpEnabled(true);
- binding.toolbarSearch.setNavigationOnClickListener(v->onBackPressed());
- supportFragmentManager = getSupportFragmentManager();
- setSearchHistoryFragment();
- viewPagerAdapter = new ViewPagerAdapter(this, getSupportFragmentManager());
- binding.viewPager.setAdapter(viewPagerAdapter);
- binding.viewPager.setOffscreenPageLimit(2); // Because we want all the fragments to be alive
- binding.tabLayout.setupWithViewPager(binding.viewPager);
- setTabs();
- binding.searchBox.setQueryHint(getString(R.string.search_commons));
- binding.searchBox.onActionViewExpanded();
- binding.searchBox.clearFocus();
-
- }
-
- /**
- * This method sets the search history fragment.
- * Search history fragment is displayed when query is empty.
- */
- private void setSearchHistoryFragment() {
- recentSearchesFragment = new RecentSearchesFragment();
- FragmentTransaction transaction = supportFragmentManager.beginTransaction();
- transaction.add(R.id.searchHistoryContainer, recentSearchesFragment).commit();
- }
-
- /**
- * Sets the titles in the tabLayout and fragments in the viewPager
- */
- public void setTabs() {
- searchMediaFragment = new SearchMediaFragment();
- searchDepictionsFragment = new SearchDepictionsFragment();
- searchCategoryFragment= new SearchCategoryFragment();
-
- viewPagerAdapter.setTabs(
- pairOf(R.string.search_tab_title_media, searchMediaFragment),
- pairOf(R.string.search_tab_title_categories, searchCategoryFragment),
- pairOf(R.string.search_tab_title_depictions, searchDepictionsFragment)
- );
- viewPagerAdapter.notifyDataSetChanged();
- getCompositeDisposable().add(RxSearchView.queryTextChanges(binding.searchBox)
- .takeUntil(RxView.detaches(binding.searchBox))
- .debounce(500, TimeUnit.MILLISECONDS)
- .observeOn(AndroidSchedulers.mainThread())
- .subscribe(this::handleSearch, Timber::e
- ));
- }
-
- private void handleSearch(final CharSequence query) {
- if (!TextUtils.isEmpty(query)) {
- saveRecentSearch(query.toString());
- binding.viewPager.setVisibility(View.VISIBLE);
- binding.tabLayout.setVisibility(View.VISIBLE);
- binding.searchHistoryContainer.setVisibility(View.GONE);
-
- if (FragmentUtils.isFragmentUIActive(searchDepictionsFragment)) {
- searchDepictionsFragment.onQueryUpdated(query.toString());
- }
-
- if (FragmentUtils.isFragmentUIActive(searchMediaFragment)) {
- searchMediaFragment.onQueryUpdated(query.toString());
- }
-
- if (FragmentUtils.isFragmentUIActive(searchCategoryFragment)) {
- searchCategoryFragment.onQueryUpdated(query.toString());
- }
-
- }
- else {
- //Open RecentSearchesFragment
- recentSearchesFragment.updateRecentSearches();
- binding.viewPager.setVisibility(View.GONE);
- binding.tabLayout.setVisibility(View.GONE);
- setSearchHistoryFragment();
- binding.searchHistoryContainer.setVisibility(View.VISIBLE);
- }
- }
-
- private void saveRecentSearch(@NonNull final String query) {
- final RecentSearch recentSearch = recentSearchesDao.find(query);
- // Newly searched query...
- if (recentSearch == null) {
- recentSearchesDao.save(new RecentSearch(null, query, new Date()));
- } else {
- recentSearch.setLastSearched(new Date());
- recentSearchesDao.save(recentSearch);
- }
- }
-
- /**
- * returns Media Object at position
- * @param i position of Media in the imagesRecyclerView adapter.
- */
- @Override
- public Media getMediaAtPosition(int i) {
- return searchMediaFragment.getMediaAtPosition(i);
- }
-
- /**
- * returns total number of images present in the imagesRecyclerView adapter.
- */
- @Override
- public int getTotalMediaCount() {
- return searchMediaFragment.getTotalMediaCount();
- }
-
- @Override
- public Integer getContributionStateAt(int position) {
- return null;
- }
-
- /**
- * Reload media detail fragment once media is nominated
- *
- * @param index item position that has been nominated
- */
- @Override
- public void refreshNominatedMedia(int index) {
- if (getSupportFragmentManager().getBackStackEntryCount() == 1) {
- onBackPressed();
- onMediaClicked(index);
- }
- }
-
- /**
- * This method is called on success of API call for image Search.
- * The viewpager will notified that number of items have changed.
- */
- @Override
- public void viewPagerNotifyDataSetChanged() {
- if (mediaDetails!=null){
- mediaDetails.notifyDataSetChanged();
- }
- }
-
- /**
- * Open media detail pager fragment on click of image in search results
- * @param index item index that should be opened
- */
- @Override
- public void onMediaClicked(int index) {
- ViewUtil.hideKeyboard(this.findViewById(R.id.searchBox));
- binding.tabLayout.setVisibility(View.GONE);
- binding.viewPager.setVisibility(View.GONE);
- binding.mediaContainer.setVisibility(View.VISIBLE);
- binding.searchBox.setVisibility(View.GONE);// to remove searchview when mediaDetails fragment open
- if (mediaDetails == null || !mediaDetails.isVisible()) {
- // set isFeaturedImage true for featured images, to include author field on media detail
- mediaDetails = MediaDetailPagerFragment.newInstance(false, true);
- supportFragmentManager
- .beginTransaction()
- .hide(supportFragmentManager.getFragments().get(supportFragmentManager.getBackStackEntryCount()))
- .add(R.id.mediaContainer, mediaDetails)
- .addToBackStack(null)
- .commit();
- // Reason for using hide, add instead of replace is to maintain scroll position after
- // coming back to the search activity. See https://github.com/commons-app/apps-android-commons/issues/1631
- // https://stackoverflow.com/questions/11353075/how-can-i-maintain-fragment-state-when-added-to-the-back-stack/19022550#19022550
- supportFragmentManager.executePendingTransactions();
- }
- mediaDetails.showImage(index);
- }
-
- /**
- * This method is called on Screen Rotation
- */
- @Override
- protected void onResume() {
- if (supportFragmentManager.getBackStackEntryCount()==1){
- //FIXME: Temporary fix for screen rotation inside media details. If we don't call onBackPressed then fragment stack is increasing every time.
- //FIXME: Similar issue like this https://github.com/commons-app/apps-android-commons/issues/894
- // This is called on screen rotation when user is inside media details. Ideally it should show Media Details but since we are not saving the state now. We are throwing the user to search screen otherwise the app was crashing.
- //
- onBackPressed();
- }
- super.onResume();
- }
-
- /**
- * This method is called on backPressed of anyFragment in the activity.
- * If condition is called when mediaDetailFragment is opened.
- */
- @Override
- public void onBackPressed() {
- //Remove the backstack entry that gets added when share button is clicked
- //fixing:https://github.com/commons-app/apps-android-commons/issues/2296
- if (getSupportFragmentManager().getBackStackEntryCount() == 2) {
- supportFragmentManager
- .beginTransaction()
- .remove(mediaDetails)
- .commit();
- supportFragmentManager.popBackStack();
- supportFragmentManager.executePendingTransactions();
- }
- if (getSupportFragmentManager().getBackStackEntryCount() == 1) {
- // back to search so show search toolbar and hide navigation toolbar
- binding.searchBox.setVisibility(View.VISIBLE);//set the searchview
- binding.tabLayout.setVisibility(View.VISIBLE);
- binding.viewPager.setVisibility(View.VISIBLE);
- binding.mediaContainer.setVisibility(View.GONE);
- } else {
- binding.toolbarSearch.setVisibility(View.GONE);
- }
- super.onBackPressed();
- }
-
- /**
- * This method is called on click of a recent search to update query in SearchView.
- * @param query Recent Search Query
- */
- public void updateText(String query) {
- binding.searchBox.setQuery(query, true);
- // Clear focus of searchView now. searchView.clearFocus(); does not seem to work Check the below link for more details.
- // https://stackoverflow.com/questions/6117967/how-to-remove-focus-without-setting-focus-to-another-control/15481511
- binding.viewPager.requestFocus();
- }
-
- @Override protected void onDestroy() {
- super.onDestroy();
- //Dispose the disposables when the activity is destroyed
- getCompositeDisposable().dispose();
- binding = null;
- }
-}
diff --git a/app/src/main/java/fr/free/nrw/commons/explore/SearchActivity.kt b/app/src/main/java/fr/free/nrw/commons/explore/SearchActivity.kt
new file mode 100644
index 000000000..0d7dfd218
--- /dev/null
+++ b/app/src/main/java/fr/free/nrw/commons/explore/SearchActivity.kt
@@ -0,0 +1,254 @@
+package fr.free.nrw.commons.explore
+
+import android.os.Bundle
+import android.text.TextUtils
+import android.view.View
+import androidx.fragment.app.FragmentManager
+import com.jakewharton.rxbinding2.view.RxView
+import com.jakewharton.rxbinding2.widget.RxSearchView
+import fr.free.nrw.commons.Media
+import fr.free.nrw.commons.R
+import fr.free.nrw.commons.ViewPagerAdapter
+import fr.free.nrw.commons.category.CategoryImagesCallback
+import fr.free.nrw.commons.databinding.ActivitySearchBinding
+import fr.free.nrw.commons.explore.categories.search.SearchCategoryFragment
+import fr.free.nrw.commons.explore.depictions.search.SearchDepictionsFragment
+import fr.free.nrw.commons.explore.media.SearchMediaFragment
+import fr.free.nrw.commons.explore.models.RecentSearch
+import fr.free.nrw.commons.explore.recentsearches.RecentSearchesDao
+import fr.free.nrw.commons.explore.recentsearches.RecentSearchesFragment
+import fr.free.nrw.commons.media.MediaDetailPagerFragment
+import fr.free.nrw.commons.media.MediaDetailProvider
+import fr.free.nrw.commons.theme.BaseActivity
+import fr.free.nrw.commons.utils.FragmentUtils.isFragmentUIActive
+import fr.free.nrw.commons.utils.ViewUtil.hideKeyboard
+import fr.free.nrw.commons.utils.applyEdgeToEdgeAllInsets
+import io.reactivex.android.schedulers.AndroidSchedulers
+import timber.log.Timber
+import java.util.Date
+import java.util.concurrent.TimeUnit
+import javax.inject.Inject
+
+/**
+ * Represents search screen of this app
+ */
+class SearchActivity : BaseActivity(), MediaDetailProvider, CategoryImagesCallback {
+ @JvmField
+ @Inject
+ var recentSearchesDao: RecentSearchesDao? = null
+
+ private var searchMediaFragment: SearchMediaFragment? = null
+ private var searchCategoryFragment: SearchCategoryFragment? = null
+ private var searchDepictionsFragment: SearchDepictionsFragment? = null
+ private var recentSearchesFragment: RecentSearchesFragment? = null
+ private var supportFragmentManager: FragmentManager? = null
+ private var mediaDetails: MediaDetailPagerFragment? = null
+ private var viewPagerAdapter: ViewPagerAdapter? = null
+ private var binding: ActivitySearchBinding? = null
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ binding = ActivitySearchBinding.inflate(layoutInflater)
+ applyEdgeToEdgeAllInsets(binding!!.root)
+ setContentView(binding!!.root)
+
+ title = getString(R.string.title_activity_search)
+ setSupportActionBar(binding!!.toolbarSearch)
+ supportActionBar!!.setDisplayHomeAsUpEnabled(true)
+ binding!!.toolbarSearch.setNavigationOnClickListener { onBackPressed() }
+ supportFragmentManager = getSupportFragmentManager()
+ setSearchHistoryFragment()
+ viewPagerAdapter = ViewPagerAdapter(this, getSupportFragmentManager())
+ binding!!.viewPager.adapter = viewPagerAdapter
+ binding!!.viewPager.offscreenPageLimit = 2 // Because we want all the fragments to be alive
+ binding!!.tabLayout.setupWithViewPager(binding!!.viewPager)
+ setTabs()
+ binding!!.searchBox.queryHint = getString(R.string.search_commons)
+ binding!!.searchBox.onActionViewExpanded()
+ binding!!.searchBox.clearFocus()
+ }
+
+ /**
+ * This method sets the search history fragment.
+ * Search history fragment is displayed when query is empty.
+ */
+ private fun setSearchHistoryFragment() {
+ recentSearchesFragment = RecentSearchesFragment()
+ val transaction = supportFragmentManager!!.beginTransaction()
+ transaction.add(R.id.searchHistoryContainer, recentSearchesFragment!!).commit()
+ }
+
+ /**
+ * Sets the titles in the tabLayout and fragments in the viewPager
+ */
+ fun setTabs() {
+ searchMediaFragment = SearchMediaFragment()
+ searchDepictionsFragment = SearchDepictionsFragment()
+ searchCategoryFragment = SearchCategoryFragment()
+
+ viewPagerAdapter!!.setTabs(
+ R.string.search_tab_title_media to searchMediaFragment!!,
+ R.string.search_tab_title_categories to searchCategoryFragment!!,
+ R.string.search_tab_title_depictions to searchDepictionsFragment!!
+ )
+ viewPagerAdapter!!.notifyDataSetChanged()
+ compositeDisposable.add(
+ RxSearchView.queryTextChanges(binding!!.searchBox)
+ .takeUntil(RxView.detaches(binding!!.searchBox))
+ .debounce(500, TimeUnit.MILLISECONDS)
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(::handleSearch, Timber::e)
+ )
+ }
+
+ private fun handleSearch(query: CharSequence) {
+ if (!TextUtils.isEmpty(query)) {
+ saveRecentSearch(query.toString())
+ binding!!.viewPager.visibility = View.VISIBLE
+ binding!!.tabLayout.visibility = View.VISIBLE
+ binding!!.searchHistoryContainer.visibility = View.GONE
+
+ if (isFragmentUIActive(searchDepictionsFragment)) {
+ searchDepictionsFragment!!.onQueryUpdated(query.toString())
+ }
+
+ if (isFragmentUIActive(searchMediaFragment)) {
+ searchMediaFragment!!.onQueryUpdated(query.toString())
+ }
+
+ if (isFragmentUIActive(searchCategoryFragment)) {
+ searchCategoryFragment!!.onQueryUpdated(query.toString())
+ }
+ } else {
+ //Open RecentSearchesFragment
+ recentSearchesFragment!!.updateRecentSearches()
+ binding!!.viewPager.visibility = View.GONE
+ binding!!.tabLayout.visibility = View.GONE
+ setSearchHistoryFragment()
+ binding!!.searchHistoryContainer.visibility = View.VISIBLE
+ }
+ }
+
+ private fun saveRecentSearch(query: String) {
+ val recentSearch = recentSearchesDao!!.find(query)
+ // Newly searched query...
+ if (recentSearch == null) {
+ recentSearchesDao!!.save(RecentSearch(null, query, Date()))
+ } else {
+ recentSearch.lastSearched = Date()
+ recentSearchesDao!!.save(recentSearch)
+ }
+ }
+
+ override fun getMediaAtPosition(i: Int): Media? = searchMediaFragment!!.getMediaAtPosition(i)
+
+ override fun getTotalMediaCount(): Int = searchMediaFragment!!.getTotalMediaCount()
+
+ override fun getContributionStateAt(position: Int): Int? = null
+
+ /**
+ * Reload media detail fragment once media is nominated
+ *
+ * @param index item position that has been nominated
+ */
+ override fun refreshNominatedMedia(index: Int) {
+ if (getSupportFragmentManager().backStackEntryCount == 1) {
+ onBackPressed()
+ onMediaClicked(index)
+ }
+ }
+
+ /**
+ * This method is called on success of API call for image Search.
+ * The viewpager will notified that number of items have changed.
+ */
+ override fun viewPagerNotifyDataSetChanged() {
+ mediaDetails?.notifyDataSetChanged()
+ }
+
+ /**
+ * Open media detail pager fragment on click of image in search results
+ * @param position item index that should be opened
+ */
+ override fun onMediaClicked(position: Int) {
+ hideKeyboard(findViewById(R.id.searchBox))
+ binding!!.tabLayout.visibility = View.GONE
+ binding!!.viewPager.visibility = View.GONE
+ binding!!.mediaContainer.visibility = View.VISIBLE
+ binding!!.searchBox.visibility =
+ View.GONE // to remove searchview when mediaDetails fragment open
+ if (mediaDetails == null || !mediaDetails!!.isVisible) {
+ // set isFeaturedImage true for featured images, to include author field on media detail
+ mediaDetails = MediaDetailPagerFragment.newInstance(false, true)
+ supportFragmentManager!!
+ .beginTransaction()
+ .hide(supportFragmentManager!!.fragments[supportFragmentManager!!.backStackEntryCount])
+ .add(R.id.mediaContainer, mediaDetails!!)
+ .addToBackStack(null)
+ .commit()
+ // Reason for using hide, add instead of replace is to maintain scroll position after
+ // coming back to the search activity. See https://github.com/commons-app/apps-android-commons/issues/1631
+ // https://stackoverflow.com/questions/11353075/how-can-i-maintain-fragment-state-when-added-to-the-back-stack/19022550#19022550
+ supportFragmentManager!!.executePendingTransactions()
+ }
+ mediaDetails!!.showImage(position)
+ }
+
+ /**
+ * This method is called on Screen Rotation
+ */
+ override fun onResume() {
+ if (supportFragmentManager!!.backStackEntryCount == 1) {
+ //FIXME: Temporary fix for screen rotation inside media details. If we don't call onBackPressed then fragment stack is increasing every time.
+ //FIXME: Similar issue like this https://github.com/commons-app/apps-android-commons/issues/894
+ // This is called on screen rotation when user is inside media details. Ideally it should show Media Details but since we are not saving the state now. We are throwing the user to search screen otherwise the app was crashing.
+ onBackPressed()
+ }
+ super.onResume()
+ }
+
+ /**
+ * This method is called on backPressed of anyFragment in the activity.
+ * If condition is called when mediaDetailFragment is opened.
+ */
+ override fun onBackPressed() {
+ //Remove the backstack entry that gets added when share button is clicked
+ //fixing:https://github.com/commons-app/apps-android-commons/issues/2296
+ if (getSupportFragmentManager().backStackEntryCount == 2) {
+ supportFragmentManager!!
+ .beginTransaction()
+ .remove(mediaDetails!!)
+ .commit()
+ supportFragmentManager!!.popBackStack()
+ supportFragmentManager!!.executePendingTransactions()
+ }
+ if (getSupportFragmentManager().backStackEntryCount == 1) {
+ // back to search so show search toolbar and hide navigation toolbar
+ binding!!.searchBox.visibility = View.VISIBLE //set the searchview
+ binding!!.tabLayout.visibility = View.VISIBLE
+ binding!!.viewPager.visibility = View.VISIBLE
+ binding!!.mediaContainer.visibility = View.GONE
+ } else {
+ binding!!.toolbarSearch.visibility = View.GONE
+ }
+ super.onBackPressed()
+ }
+
+ /**
+ * This method is called on click of a recent search to update query in SearchView.
+ * @param query Recent Search Query
+ */
+ fun updateText(query: String?) {
+ binding!!.searchBox.setQuery(query, true)
+ // Clear focus of searchView now. searchView.clearFocus(); does not seem to work Check the below link for more details.
+ // https://stackoverflow.com/questions/6117967/how-to-remove-focus-without-setting-focus-to-another-control/15481511
+ binding!!.viewPager.requestFocus()
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ //Dispose the disposables when the activity is destroyed
+ compositeDisposable.dispose()
+ binding = null
+ }
+}
diff --git a/app/src/main/java/fr/free/nrw/commons/explore/depictions/PageableDepictionsFragment.kt b/app/src/main/java/fr/free/nrw/commons/explore/depictions/PageableDepictionsFragment.kt
index 9c41628a2..7c1d08bac 100644
--- a/app/src/main/java/fr/free/nrw/commons/explore/depictions/PageableDepictionsFragment.kt
+++ b/app/src/main/java/fr/free/nrw/commons/explore/depictions/PageableDepictionsFragment.kt
@@ -7,6 +7,6 @@ import fr.free.nrw.commons.upload.structure.depictions.DepictedItem
abstract class PageableDepictionsFragment : BasePagingFragment() {
override val errorTextId: Int = R.string.error_loading_depictions
override val pagedListAdapter by lazy {
- DepictionAdapter { WikidataItemDetailsActivity.startYourself(context, it) }
+ DepictionAdapter { WikidataItemDetailsActivity.startYourself(requireContext(), it) }
}
}
diff --git a/app/src/main/java/fr/free/nrw/commons/explore/depictions/WikidataItemDetailsActivity.java b/app/src/main/java/fr/free/nrw/commons/explore/depictions/WikidataItemDetailsActivity.java
deleted file mode 100644
index ec5ea42a4..000000000
--- a/app/src/main/java/fr/free/nrw/commons/explore/depictions/WikidataItemDetailsActivity.java
+++ /dev/null
@@ -1,302 +0,0 @@
-package fr.free.nrw.commons.explore.depictions;
-
-import static fr.free.nrw.commons.ViewPagerAdapter.pairOf;
-import static fr.free.nrw.commons.utils.UrlUtilsKt.handleWebUrl;
-
-import android.content.Context;
-import android.content.Intent;
-import android.net.Uri;
-import android.os.Bundle;
-import android.view.Menu;
-import android.view.MenuInflater;
-import android.view.MenuItem;
-import android.view.View;
-import androidx.fragment.app.FragmentManager;
-import com.google.android.material.snackbar.Snackbar;
-import fr.free.nrw.commons.Media;
-import fr.free.nrw.commons.R;
-import fr.free.nrw.commons.ViewPagerAdapter;
-import fr.free.nrw.commons.bookmarks.items.BookmarkItemsDao;
-import fr.free.nrw.commons.category.CategoryImagesCallback;
-import fr.free.nrw.commons.databinding.ActivityWikidataItemDetailsBinding;
-import fr.free.nrw.commons.explore.depictions.child.ChildDepictionsFragment;
-import fr.free.nrw.commons.explore.depictions.media.DepictedImagesFragment;
-import fr.free.nrw.commons.explore.depictions.parent.ParentDepictionsFragment;
-import fr.free.nrw.commons.media.MediaDetailPagerFragment;
-import fr.free.nrw.commons.media.MediaDetailProvider;
-import fr.free.nrw.commons.theme.BaseActivity;
-import fr.free.nrw.commons.upload.structure.depictions.DepictModel;
-import fr.free.nrw.commons.upload.structure.depictions.DepictedItem;
-import fr.free.nrw.commons.wikidata.WikidataConstants;
-import io.reactivex.android.schedulers.AndroidSchedulers;
-import io.reactivex.disposables.CompositeDisposable;
-import io.reactivex.schedulers.Schedulers;
-import javax.inject.Inject;
-
-/**
- * Activity to show depiction media, parent classes and child classes of depicted items in Explore
- */
-public class WikidataItemDetailsActivity extends BaseActivity implements MediaDetailProvider,
- CategoryImagesCallback {
- private FragmentManager supportFragmentManager;
- private DepictedImagesFragment depictionImagesListFragment;
- private MediaDetailPagerFragment mediaDetailPagerFragment;
-
- /**
- * Name of the depicted item
- * Ex: Rabbit
- */
-
- @Inject BookmarkItemsDao bookmarkItemsDao;
- private CompositeDisposable compositeDisposable;
- @Inject
- DepictModel depictModel;
- private String wikidataItemName;
- private ActivityWikidataItemDetailsBinding binding;
-
- ViewPagerAdapter viewPagerAdapter;
- private DepictedItem wikidataItem;
-
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
-
- binding = ActivityWikidataItemDetailsBinding.inflate(getLayoutInflater());
- setContentView(binding.getRoot());
- compositeDisposable = new CompositeDisposable();
- supportFragmentManager = getSupportFragmentManager();
- viewPagerAdapter = new ViewPagerAdapter(this, getSupportFragmentManager());
- binding.viewPager.setAdapter(viewPagerAdapter);
- binding.viewPager.setOffscreenPageLimit(2);
- binding.tabLayout.setupWithViewPager(binding.viewPager);
-
- final DepictedItem depictedItem = getIntent().getParcelableExtra(
- WikidataConstants.BOOKMARKS_ITEMS);
- wikidataItem = depictedItem;
- setSupportActionBar(binding.toolbarBinding.toolbar);
- getSupportActionBar().setDisplayHomeAsUpEnabled(true);
- setTabs();
- setPageTitle();
- }
-
- /**
- * Gets the passed wikidataItemName from the intents and displays it as the page title
- */
- private void setPageTitle() {
- if (getIntent() != null && getIntent().getStringExtra("wikidataItemName") != null) {
- setTitle(getIntent().getStringExtra("wikidataItemName"));
- }
- }
-
- /**
- * This method is called on success of API call for featured Images.
- * The viewpager will notified that number of items have changed.
- */
- @Override
- public void viewPagerNotifyDataSetChanged() {
- if (mediaDetailPagerFragment !=null){
- mediaDetailPagerFragment.notifyDataSetChanged();
- }
- }
-
- /**
- * This activity contains 3 tabs and a viewpager. This method is used to set the titles of tab,
- * Set the fragments according to the tab selected in the viewPager.
- */
- private void setTabs() {
- depictionImagesListFragment = new DepictedImagesFragment();
- ChildDepictionsFragment childDepictionsFragment = new ChildDepictionsFragment();
- ParentDepictionsFragment parentDepictionsFragment = new ParentDepictionsFragment();
- wikidataItemName = getIntent().getStringExtra("wikidataItemName");
- String entityId = getIntent().getStringExtra("entityId");
- if (getIntent() != null && wikidataItemName != null) {
- Bundle arguments = new Bundle();
- arguments.putString("wikidataItemName", wikidataItemName);
- arguments.putString("entityId", entityId);
- depictionImagesListFragment.setArguments(arguments);
- parentDepictionsFragment.setArguments(arguments);
- childDepictionsFragment.setArguments(arguments);
- }
-
- viewPagerAdapter.setTabs(
- pairOf(R.string.title_for_media, depictionImagesListFragment),
- pairOf(R.string.title_for_subcategories, childDepictionsFragment),
- pairOf(R.string.title_for_parent_categories, parentDepictionsFragment)
- );
- binding.viewPager.setOffscreenPageLimit(2);
- viewPagerAdapter.notifyDataSetChanged();
-
- }
-
-
- /**
- * Shows media detail fragment when user clicks on any image in the list
- */
- @Override
- public void onMediaClicked(int position) {
- binding.tabLayout.setVisibility(View.GONE);
- binding.viewPager.setVisibility(View.GONE);
- binding.mediaContainer.setVisibility(View.VISIBLE);
- if (mediaDetailPagerFragment == null || !mediaDetailPagerFragment.isVisible()) {
- // set isFeaturedImage true for featured images, to include author field on media detail
- mediaDetailPagerFragment = MediaDetailPagerFragment.newInstance(false, true);
- FragmentManager supportFragmentManager = getSupportFragmentManager();
- supportFragmentManager
- .beginTransaction()
- .replace(R.id.mediaContainer, mediaDetailPagerFragment)
- .addToBackStack(null)
- .commit();
- supportFragmentManager.executePendingTransactions();
- }
- mediaDetailPagerFragment.showImage(position);
- }
-
- /**
- * This method is called mediaDetailPagerFragment. It returns the Media Object at that Index
- * @param i It is the index of which media object is to be returned which is same as
- * current index of viewPager.
- * @return Media Object
- */
- @Override
- public Media getMediaAtPosition(int i) {
- return depictionImagesListFragment.getMediaAtPosition(i);
- }
-
- /**
- * This method is called on backPressed of anyFragment in the activity.
- * If condition is called when mediaDetailFragment is opened.
- */
- @Override
- public void onBackPressed() {
- if (supportFragmentManager.getBackStackEntryCount() == 1){
- binding.tabLayout.setVisibility(View.VISIBLE);
- binding.viewPager.setVisibility(View.VISIBLE);
- binding.mediaContainer.setVisibility(View.GONE);
- }
- super.onBackPressed();
- }
-
- /**
- * This method is called on from getCount of MediaDetailPagerFragment
- * The viewpager will contain same number of media items as that of media elements in adapter.
- * @return Total Media count in the adapter
- */
- @Override
- public int getTotalMediaCount() {
- return depictionImagesListFragment.getTotalMediaCount();
- }
-
- @Override
- public Integer getContributionStateAt(int position) {
- return null;
- }
-
- /**
- * Reload media detail fragment once media is nominated
- *
- * @param index item position that has been nominated
- */
- @Override
- public void refreshNominatedMedia(int index) {
- if (getSupportFragmentManager().getBackStackEntryCount() == 1) {
- onBackPressed();
- onMediaClicked(index);
- }
- }
-
- /**
- * Consumers should be simply using this method to use this activity.
- *
- * @param context A Context of the application package implementing this class.
- * @param depictedItem Name of the depicts for displaying its details
- */
- public static void startYourself(Context context, DepictedItem depictedItem) {
- Intent intent = new Intent(context, WikidataItemDetailsActivity.class);
- intent.putExtra("wikidataItemName", depictedItem.getName());
- intent.putExtra("entityId", depictedItem.getId());
- intent.putExtra(WikidataConstants.BOOKMARKS_ITEMS, depictedItem);
- context.startActivity(intent);
- }
-
- /**
- * This function inflates the menu
- */
- @Override
- public boolean onCreateOptionsMenu(Menu menu) {
- MenuInflater menuInflater=getMenuInflater();
- menuInflater.inflate(R.menu.menu_wikidata_item,menu);
-
- updateBookmarkState(menu.findItem(R.id.menu_bookmark_current_item));
-
- return super.onCreateOptionsMenu(menu);
- }
-
- /**
- * This method handles the logic on item select in toolbar menu
- * Currently only 1 choice is available to open Wikidata item details page in browser
- */
- @Override
- public boolean onOptionsItemSelected(MenuItem item) {
-
- switch (item.getItemId()){
- case R.id.browser_actions_menu_items:
- String entityId=getIntent().getStringExtra("entityId");
- Uri uri = Uri.parse("https://www.wikidata.org/wiki/" + entityId);
- handleWebUrl(this, uri);
- return true;
- case R.id.menu_bookmark_current_item:
-
- if(getIntent().getStringExtra("fragment") != null) {
- compositeDisposable.add(depictModel.getDepictions(
- getIntent().getStringExtra("entityId")
- ).subscribeOn(Schedulers.io())
- .observeOn(AndroidSchedulers.mainThread())
- .subscribe(depictedItems -> {
- final boolean bookmarkExists = bookmarkItemsDao.updateBookmarkItem(
- depictedItems.get(0));
- final Snackbar snackbar
- = bookmarkExists ? Snackbar.make(findViewById(R.id.toolbar_layout),
- R.string.add_bookmark, Snackbar.LENGTH_LONG)
- : Snackbar.make(findViewById(R.id.toolbar_layout),
- R.string.remove_bookmark,
- Snackbar.LENGTH_LONG);
-
- snackbar.show();
- updateBookmarkState(item);
- }));
-
- } else {
- final boolean bookmarkExists
- = bookmarkItemsDao.updateBookmarkItem(wikidataItem);
- final Snackbar snackbar
- = bookmarkExists ? Snackbar.make(findViewById(R.id.toolbar_layout),
- R.string.add_bookmark, Snackbar.LENGTH_LONG)
- : Snackbar.make(findViewById(R.id.toolbar_layout), R.string.remove_bookmark,
- Snackbar.LENGTH_LONG);
-
- snackbar.show();
- updateBookmarkState(item);
- }
- return true;
- case android.R.id.home:
- onBackPressed();
- return true;
- default:
- return super.onOptionsItemSelected(item);
- }
- }
-
- private void updateBookmarkState(final MenuItem item) {
- final boolean isBookmarked;
- if(getIntent().getStringExtra("fragment") != null) {
- isBookmarked
- = bookmarkItemsDao.findBookmarkItem(getIntent().getStringExtra("entityId"));
- } else {
- isBookmarked = bookmarkItemsDao.findBookmarkItem(wikidataItem.getId());
- }
- final int icon
- = isBookmarked ? R.drawable.menu_ic_round_star_filled_24px
- : R.drawable.menu_ic_round_star_border_24px;
- item.setIcon(icon);
- }
-}
diff --git a/app/src/main/java/fr/free/nrw/commons/explore/depictions/WikidataItemDetailsActivity.kt b/app/src/main/java/fr/free/nrw/commons/explore/depictions/WikidataItemDetailsActivity.kt
new file mode 100644
index 000000000..d025fdfe1
--- /dev/null
+++ b/app/src/main/java/fr/free/nrw/commons/explore/depictions/WikidataItemDetailsActivity.kt
@@ -0,0 +1,297 @@
+package fr.free.nrw.commons.explore.depictions
+
+import android.content.Context
+import android.content.Intent
+import android.net.Uri
+import android.os.Bundle
+import android.view.Menu
+import android.view.MenuItem
+import android.view.View
+import androidx.core.os.bundleOf
+import androidx.fragment.app.FragmentManager
+import com.google.android.material.snackbar.Snackbar
+import fr.free.nrw.commons.Media
+import fr.free.nrw.commons.R
+import fr.free.nrw.commons.ViewPagerAdapter
+import fr.free.nrw.commons.bookmarks.items.BookmarkItemsDao
+import fr.free.nrw.commons.category.CategoryImagesCallback
+import fr.free.nrw.commons.databinding.ActivityWikidataItemDetailsBinding
+import fr.free.nrw.commons.explore.depictions.child.ChildDepictionsFragment
+import fr.free.nrw.commons.explore.depictions.media.DepictedImagesFragment
+import fr.free.nrw.commons.explore.depictions.parent.ParentDepictionsFragment
+import fr.free.nrw.commons.media.MediaDetailPagerFragment
+import fr.free.nrw.commons.media.MediaDetailProvider
+import fr.free.nrw.commons.theme.BaseActivity
+import fr.free.nrw.commons.upload.structure.depictions.DepictModel
+import fr.free.nrw.commons.upload.structure.depictions.DepictedItem
+import fr.free.nrw.commons.utils.applyEdgeToEdgeAllInsets
+import fr.free.nrw.commons.utils.handleWebUrl
+import fr.free.nrw.commons.wikidata.WikidataConstants
+import io.reactivex.android.schedulers.AndroidSchedulers
+import io.reactivex.functions.Consumer
+import io.reactivex.schedulers.Schedulers
+import javax.inject.Inject
+
+/**
+ * Activity to show depiction media, parent classes and child classes of depicted items in Explore
+ */
+class WikidataItemDetailsActivity : BaseActivity(), MediaDetailProvider, CategoryImagesCallback {
+ @JvmField
+ @Inject
+ var bookmarkItemsDao: BookmarkItemsDao? = null
+
+ @JvmField
+ @Inject
+ var depictModel: DepictModel? = null
+
+ private var supportFragmentManager: FragmentManager? = null
+ private var depictionImagesListFragment: DepictedImagesFragment? = null
+ private var mediaDetailPagerFragment: MediaDetailPagerFragment? = null
+ private var binding: ActivityWikidataItemDetailsBinding? = null
+
+ var viewPagerAdapter: ViewPagerAdapter? = null
+ private var wikidataItem: DepictedItem? = null
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+
+ binding = ActivityWikidataItemDetailsBinding.inflate(layoutInflater)
+ applyEdgeToEdgeAllInsets(binding!!.root)
+ setContentView(binding!!.root)
+ supportFragmentManager = getSupportFragmentManager()
+ viewPagerAdapter = ViewPagerAdapter(this, getSupportFragmentManager())
+ binding!!.viewPager.adapter = viewPagerAdapter
+ binding!!.viewPager.offscreenPageLimit = 2
+ binding!!.tabLayout.setupWithViewPager(binding!!.viewPager)
+
+ wikidataItem = intent.getParcelableExtra(WikidataConstants.BOOKMARKS_ITEMS)
+ setSupportActionBar(binding!!.toolbarBinding.toolbar)
+ supportActionBar!!.setDisplayHomeAsUpEnabled(true)
+ setTabs()
+ setPageTitle()
+ }
+
+ /**
+ * Gets the passed wikidataItemName from the intents and displays it as the page title
+ */
+ private fun setPageTitle() {
+ if (intent != null && intent.getStringExtra("wikidataItemName") != null) {
+ title = intent.getStringExtra("wikidataItemName")
+ }
+ }
+
+ /**
+ * This method is called on success of API call for featured Images.
+ * The viewpager will notified that number of items have changed.
+ */
+ override fun viewPagerNotifyDataSetChanged() {
+ if (mediaDetailPagerFragment != null) {
+ mediaDetailPagerFragment!!.notifyDataSetChanged()
+ }
+ }
+
+ /**
+ * This activity contains 3 tabs and a viewpager. This method is used to set the titles of tab,
+ * Set the fragments according to the tab selected in the viewPager.
+ */
+ private fun setTabs() {
+ depictionImagesListFragment = DepictedImagesFragment()
+ val childDepictionsFragment = ChildDepictionsFragment()
+ val parentDepictionsFragment = ParentDepictionsFragment()
+ val wikidataItemName = intent.getStringExtra("wikidataItemName")
+ val entityId = intent.getStringExtra("entityId")
+ if (intent != null && wikidataItemName != null) {
+ val arguments = bundleOf(
+ "wikidataItemName" to wikidataItemName,
+ "entityId" to entityId
+ )
+ depictionImagesListFragment!!.arguments = arguments
+ parentDepictionsFragment.arguments = arguments
+ childDepictionsFragment.arguments = arguments
+ }
+
+ viewPagerAdapter!!.setTabs(
+ R.string.title_for_media to depictionImagesListFragment!!,
+ R.string.title_for_child_classes to childDepictionsFragment,
+ R.string.title_for_parent_classes to parentDepictionsFragment
+ )
+ binding!!.viewPager.offscreenPageLimit = 2
+ viewPagerAdapter!!.notifyDataSetChanged()
+ }
+
+
+ /**
+ * Shows media detail fragment when user clicks on any image in the list
+ */
+ override fun onMediaClicked(position: Int) {
+ binding!!.tabLayout.visibility = View.GONE
+ binding!!.viewPager.visibility = View.GONE
+ binding!!.mediaContainer.visibility = View.VISIBLE
+ if (mediaDetailPagerFragment == null || !mediaDetailPagerFragment!!.isVisible) {
+ // set isFeaturedImage true for featured images, to include author field on media detail
+ mediaDetailPagerFragment = MediaDetailPagerFragment.newInstance(false, true)
+ val supportFragmentManager = getSupportFragmentManager()
+ supportFragmentManager
+ .beginTransaction()
+ .replace(R.id.mediaContainer, mediaDetailPagerFragment!!)
+ .addToBackStack(null)
+ .commit()
+ supportFragmentManager.executePendingTransactions()
+ }
+ mediaDetailPagerFragment!!.showImage(position)
+ }
+
+ /**
+ * This method is called mediaDetailPagerFragment. It returns the Media Object at that Index
+ * @param i It is the index of which media object is to be returned which is same as
+ * current index of viewPager.
+ * @return Media Object
+ */
+ override fun getMediaAtPosition(i: Int): Media? {
+ return depictionImagesListFragment!!.getMediaAtPosition(i)
+ }
+
+ /**
+ * This method is called on backPressed of anyFragment in the activity.
+ * If condition is called when mediaDetailFragment is opened.
+ */
+ override fun onBackPressed() {
+ if (supportFragmentManager!!.backStackEntryCount == 1) {
+ binding!!.tabLayout.visibility = View.VISIBLE
+ binding!!.viewPager.visibility = View.VISIBLE
+ binding!!.mediaContainer.visibility = View.GONE
+ }
+ super.onBackPressed()
+ }
+
+ /**
+ * This method is called on from getCount of MediaDetailPagerFragment
+ * The viewpager will contain same number of media items as that of media elements in adapter.
+ * @return Total Media count in the adapter
+ */
+ override fun getTotalMediaCount(): Int = depictionImagesListFragment!!.getTotalMediaCount()
+
+ override fun getContributionStateAt(position: Int): Int? = null
+
+ /**
+ * Reload media detail fragment once media is nominated
+ *
+ * @param index item position that has been nominated
+ */
+ override fun refreshNominatedMedia(index: Int) {
+ if (getSupportFragmentManager().backStackEntryCount == 1) {
+ onBackPressed()
+ onMediaClicked(index)
+ }
+ }
+
+ /**
+ * This function inflates the menu
+ */
+ override fun onCreateOptionsMenu(menu: Menu): Boolean {
+ val menuInflater = menuInflater
+ menuInflater.inflate(R.menu.menu_wikidata_item, menu)
+
+ updateBookmarkState(menu.findItem(R.id.menu_bookmark_current_item))
+
+ return super.onCreateOptionsMenu(menu)
+ }
+
+ /**
+ * This method handles the logic on item select in toolbar menu
+ * Currently only 1 choice is available to open Wikidata item details page in browser
+ */
+ override fun onOptionsItemSelected(item: MenuItem): Boolean {
+ when (item.itemId) {
+ R.id.browser_actions_menu_items -> {
+ val entityId = intent.getStringExtra("entityId")
+ val uri = Uri.parse("https://www.wikidata.org/wiki/$entityId")
+ handleWebUrl(this, uri)
+ return true
+ }
+
+ R.id.menu_bookmark_current_item -> {
+ if (intent.getStringExtra("fragment") != null) {
+ compositeDisposable!!.add(
+ depictModel!!.getDepictions(
+ intent.getStringExtra("entityId")!!
+ ).subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(Consumer> { depictedItems: List ->
+ val bookmarkExists = bookmarkItemsDao!!.updateBookmarkItem(
+ depictedItems[0]!!
+ )
+ val snackbar = if (bookmarkExists)
+ Snackbar.make(
+ findViewById(R.id.toolbar_layout),
+ R.string.add_bookmark, Snackbar.LENGTH_LONG
+ )
+ else
+ Snackbar.make(
+ findViewById(R.id.toolbar_layout),
+ R.string.remove_bookmark,
+ Snackbar.LENGTH_LONG
+ )
+
+ snackbar.show()
+ updateBookmarkState(item)
+ })
+ )
+ } else {
+ val bookmarkExists = bookmarkItemsDao!!.updateBookmarkItem(wikidataItem!!)
+ val snackbar = if (bookmarkExists)
+ Snackbar.make(
+ findViewById(R.id.toolbar_layout),
+ R.string.add_bookmark, Snackbar.LENGTH_LONG
+ )
+ else
+ Snackbar.make(
+ findViewById(R.id.toolbar_layout), R.string.remove_bookmark,
+ Snackbar.LENGTH_LONG
+ )
+
+ snackbar.show()
+ updateBookmarkState(item)
+ }
+ return true
+ }
+
+ android.R.id.home -> {
+ onBackPressed()
+ return true
+ }
+
+ else -> return super.onOptionsItemSelected(item)
+ }
+ }
+
+ private fun updateBookmarkState(item: MenuItem) {
+ val isBookmarked: Boolean = if (intent.getStringExtra("fragment") != null) {
+ bookmarkItemsDao!!.findBookmarkItem(intent.getStringExtra("entityId"))
+ } else {
+ bookmarkItemsDao!!.findBookmarkItem(wikidataItem!!.id)
+ }
+ item.setIcon(if (isBookmarked) {
+ R.drawable.menu_ic_round_star_filled_24px
+ } else {
+ R.drawable.menu_ic_round_star_border_24px
+ })
+ }
+
+ companion object {
+ /**
+ * Consumers should be simply using this method to use this activity.
+ *
+ * @param context A Context of the application package implementing this class.
+ * @param depictedItem Name of the depicts for displaying its details
+ */
+ fun startYourself(context: Context, depictedItem: DepictedItem) {
+ val intent = Intent(context, WikidataItemDetailsActivity::class.java).apply {
+ putExtra("wikidataItemName", depictedItem.name)
+ putExtra("entityId", depictedItem.id)
+ putExtra(WikidataConstants.BOOKMARKS_ITEMS, depictedItem)
+ }
+ context.startActivity(intent)
+ }
+ }
+}
diff --git a/app/src/main/java/fr/free/nrw/commons/explore/map/ExploreMapCalls.java b/app/src/main/java/fr/free/nrw/commons/explore/map/ExploreMapCalls.java
deleted file mode 100644
index 5e674dceb..000000000
--- a/app/src/main/java/fr/free/nrw/commons/explore/map/ExploreMapCalls.java
+++ /dev/null
@@ -1,34 +0,0 @@
-package fr.free.nrw.commons.explore.map;
-
-import androidx.annotation.NonNull;
-import fr.free.nrw.commons.Media;
-import fr.free.nrw.commons.location.LatLng;
-import fr.free.nrw.commons.media.MediaClient;
-import java.util.Collections;
-import java.util.List;
-import javax.inject.Inject;
-import javax.inject.Singleton;
-
-@Singleton
-public class ExploreMapCalls {
-
- @Inject
- MediaClient mediaClient;
-
- @Inject
- public ExploreMapCalls() {
- }
-
- /**
- * Calls method to query Commons for uploads around a location
- *
- * @param currentLatLng coordinates of search location
- * @return list of places obtained
- */
- @NonNull
- List callCommonsQuery(final LatLng currentLatLng) {
- String coordinates = currentLatLng.getLatitude() + "|" + currentLatLng.getLongitude();
- return mediaClient.getMediaListFromGeoSearch(coordinates).blockingGet();
- }
-
-}
diff --git a/app/src/main/java/fr/free/nrw/commons/explore/map/ExploreMapCalls.kt b/app/src/main/java/fr/free/nrw/commons/explore/map/ExploreMapCalls.kt
new file mode 100644
index 000000000..6c62d3667
--- /dev/null
+++ b/app/src/main/java/fr/free/nrw/commons/explore/map/ExploreMapCalls.kt
@@ -0,0 +1,25 @@
+package fr.free.nrw.commons.explore.map
+
+import fr.free.nrw.commons.Media
+import fr.free.nrw.commons.location.LatLng
+import fr.free.nrw.commons.media.MediaClient
+import javax.inject.Inject
+import javax.inject.Singleton
+
+@Singleton
+class ExploreMapCalls @Inject constructor() {
+ @Inject
+ @JvmField
+ var mediaClient: MediaClient? = null
+
+ /**
+ * Calls method to query Commons for uploads around a location
+ *
+ * @param currentLatLng coordinates of search location
+ * @return list of places obtained
+ */
+ fun callCommonsQuery(currentLatLng: LatLng): List {
+ val coordinates = currentLatLng.latitude.toString() + "|" + currentLatLng.longitude
+ return mediaClient!!.getMediaListFromGeoSearch(coordinates).blockingGet()
+ }
+}
diff --git a/app/src/main/java/fr/free/nrw/commons/explore/map/ExploreMapContract.java b/app/src/main/java/fr/free/nrw/commons/explore/map/ExploreMapContract.java
deleted file mode 100644
index feb66bf55..000000000
--- a/app/src/main/java/fr/free/nrw/commons/explore/map/ExploreMapContract.java
+++ /dev/null
@@ -1,45 +0,0 @@
-package fr.free.nrw.commons.explore.map;
-
-import android.content.Context;
-import fr.free.nrw.commons.BaseMarker;
-import fr.free.nrw.commons.kvstore.JsonKvStore;
-import fr.free.nrw.commons.location.LatLng;
-import fr.free.nrw.commons.location.LocationServiceManager;
-import java.util.List;
-
-public class ExploreMapContract {
-
- interface View {
- boolean isNetworkConnectionEstablished();
- void populatePlaces(LatLng curlatLng);
- void askForLocationPermission();
- void recenterMap(LatLng curLatLng);
- void hideBottomDetailsSheet();
- LatLng getMapCenter();
- LatLng getMapFocus();
- LatLng getLastMapFocus();
- void addMarkersToMap(final List nearbyBaseMarkers);
- void clearAllMarkers();
- void addSearchThisAreaButtonAction();
- void setSearchThisAreaButtonVisibility(boolean isVisible);
- void setProgressBarVisibility(boolean isVisible);
- boolean isDetailsBottomSheetVisible();
- boolean isSearchThisAreaButtonVisible();
- Context getContext();
- LatLng getLastLocation();
- void disableFABRecenter();
- void enableFABRecenter();
- void setFABRecenterAction(android.view.View.OnClickListener onClickListener);
- boolean backButtonClicked();
- }
-
- interface UserActions {
- void updateMap(LocationServiceManager.LocationChangeType locationChangeType);
- void lockUnlockNearby(boolean isNearbyLocked);
- void attachView(View view);
- void detachView();
- void setActionListeners(JsonKvStore applicationKvStore);
- boolean backButtonClicked();
- }
-
-}
diff --git a/app/src/main/java/fr/free/nrw/commons/explore/map/ExploreMapContract.kt b/app/src/main/java/fr/free/nrw/commons/explore/map/ExploreMapContract.kt
new file mode 100644
index 000000000..306446a43
--- /dev/null
+++ b/app/src/main/java/fr/free/nrw/commons/explore/map/ExploreMapContract.kt
@@ -0,0 +1,43 @@
+package fr.free.nrw.commons.explore.map
+
+import android.content.Context
+import android.view.View
+import fr.free.nrw.commons.BaseMarker
+import fr.free.nrw.commons.kvstore.JsonKvStore
+import fr.free.nrw.commons.location.LatLng
+import fr.free.nrw.commons.location.LocationServiceManager.LocationChangeType
+
+class ExploreMapContract {
+ interface View {
+ fun isNetworkConnectionEstablished(): Boolean
+ fun populatePlaces(curlatLng: LatLng?)
+ fun askForLocationPermission()
+ fun recenterMap(curLatLng: LatLng?)
+ fun hideBottomDetailsSheet()
+ fun getMapCenter(): LatLng?
+ fun getMapFocus(): LatLng?
+ fun getLastMapFocus(): LatLng?
+ fun addMarkersToMap(nearbyBaseMarkers: List?)
+ fun clearAllMarkers()
+ fun addSearchThisAreaButtonAction()
+ fun setSearchThisAreaButtonVisibility(isVisible: Boolean)
+ fun setProgressBarVisibility(isVisible: Boolean)
+ fun isDetailsBottomSheetVisible(): Boolean
+ fun isSearchThisAreaButtonVisible(): Boolean
+ fun getContext(): Context?
+ fun getLastLocation(): LatLng?
+ fun disableFABRecenter()
+ fun enableFABRecenter()
+ fun setFABRecenterAction(onClickListener: android.view.View.OnClickListener?)
+ fun backButtonClicked(): Boolean
+ }
+
+ interface UserActions {
+ fun updateMap(locationChangeType: LocationChangeType)
+ fun lockUnlockNearby(isNearbyLocked: Boolean)
+ fun attachView(view: View?)
+ fun detachView()
+ fun setActionListeners(applicationKvStore: JsonKvStore?)
+ fun backButtonClicked(): Boolean
+ }
+}
diff --git a/app/src/main/java/fr/free/nrw/commons/explore/map/ExploreMapController.java b/app/src/main/java/fr/free/nrw/commons/explore/map/ExploreMapController.java
deleted file mode 100644
index c944f75a1..000000000
--- a/app/src/main/java/fr/free/nrw/commons/explore/map/ExploreMapController.java
+++ /dev/null
@@ -1,213 +0,0 @@
-package fr.free.nrw.commons.explore.map;
-
-import static fr.free.nrw.commons.utils.LengthUtils.computeDistanceBetween;
-import static fr.free.nrw.commons.utils.LengthUtils.formatDistanceBetween;
-
-import android.content.Context;
-import android.content.res.Resources;
-import android.graphics.Bitmap;
-import android.graphics.drawable.Drawable;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
-import androidx.vectordrawable.graphics.drawable.VectorDrawableCompat;
-import com.bumptech.glide.Glide;
-import com.bumptech.glide.request.RequestOptions;
-import com.bumptech.glide.request.target.CustomTarget;
-import com.bumptech.glide.request.transition.Transition;
-import fr.free.nrw.commons.BaseMarker;
-import fr.free.nrw.commons.MapController;
-import fr.free.nrw.commons.Media;
-import fr.free.nrw.commons.R;
-import fr.free.nrw.commons.location.LatLng;
-import fr.free.nrw.commons.nearby.Place;
-import fr.free.nrw.commons.utils.ImageUtils;
-import fr.free.nrw.commons.utils.LocationUtils;
-import fr.free.nrw.commons.utils.PlaceUtils;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import javax.inject.Inject;
-import timber.log.Timber;
-
-public class ExploreMapController extends MapController {
-
- private final ExploreMapCalls exploreMapCalls;
- public LatLng latestSearchLocation; // Can be current and camera target on search this area button is used
- public LatLng currentLocation; // current location of user
- public double latestSearchRadius = 0; // Any last search radius
- public double currentLocationSearchRadius = 0; // Search radius of only searches around current location
-
-
- @Inject
- public ExploreMapController(ExploreMapCalls explorePlaces) {
- this.exploreMapCalls = explorePlaces;
- }
-
- /**
- * Takes location as parameter and returns ExplorePlaces info that holds currentLatLng, mediaList,
- * explorePlaceList and boundaryCoordinates
- *
- * @param currentLatLng is current geolocation
- * @param searchLatLng is the location that we want to search around
- * @param checkingAroundCurrentLocation is a boolean flag. True if we want to check around
- * current location, false if another location
- * @return explorePlacesInfo info that holds currentLatLng, mediaList, explorePlaceList and
- * boundaryCoordinates
- */
- public ExplorePlacesInfo loadAttractionsFromLocation(LatLng currentLatLng, LatLng searchLatLng,
- boolean checkingAroundCurrentLocation) {
-
- if (searchLatLng == null) {
- Timber.d("Loading attractions explore map, but search is null");
- return null;
- }
-
- ExplorePlacesInfo explorePlacesInfo = new ExplorePlacesInfo();
- try {
- explorePlacesInfo.currentLatLng = currentLatLng;
- latestSearchLocation = searchLatLng;
-
- List mediaList = exploreMapCalls.callCommonsQuery(searchLatLng);
- LatLng[] boundaryCoordinates = {mediaList.get(0).getCoordinates(), // south
- mediaList.get(0).getCoordinates(), // north
- mediaList.get(0).getCoordinates(), // west
- mediaList.get(0).getCoordinates()};// east, init with a random location
-
- if (searchLatLng != null) {
- Timber.d("Sorting places by distance...");
- final Map distances = new HashMap<>();
- for (Media media : mediaList) {
- distances.put(media,
- computeDistanceBetween(media.getCoordinates(), searchLatLng));
- // Find boundaries with basic find max approach
- if (media.getCoordinates().getLatitude()
- < boundaryCoordinates[0].getLatitude()) {
- boundaryCoordinates[0] = media.getCoordinates();
- }
- if (media.getCoordinates().getLatitude()
- > boundaryCoordinates[1].getLatitude()) {
- boundaryCoordinates[1] = media.getCoordinates();
- }
- if (media.getCoordinates().getLongitude()
- < boundaryCoordinates[2].getLongitude()) {
- boundaryCoordinates[2] = media.getCoordinates();
- }
- if (media.getCoordinates().getLongitude()
- > boundaryCoordinates[3].getLongitude()) {
- boundaryCoordinates[3] = media.getCoordinates();
- }
- }
- }
- explorePlacesInfo.mediaList = mediaList;
- explorePlacesInfo.explorePlaceList = PlaceUtils.mediaToExplorePlace(mediaList);
- explorePlacesInfo.boundaryCoordinates = boundaryCoordinates;
-
- // Sets latestSearchRadius to maximum distance among boundaries and search location
- for (LatLng bound : boundaryCoordinates) {
- double distance = LocationUtils.calculateDistance(bound.getLatitude(),
- bound.getLongitude(), searchLatLng.getLatitude(), searchLatLng.getLongitude());
- if (distance > latestSearchRadius) {
- latestSearchRadius = distance;
- }
- }
-
- // Our radius searched around us, will be used to understand when user search their own location, we will follow them
- if (checkingAroundCurrentLocation) {
- currentLocationSearchRadius = latestSearchRadius;
- currentLocation = currentLatLng;
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- return explorePlacesInfo;
- }
-
- /**
- * Loads attractions from location for map view, we need to return places in Place data type
- *
- * @return baseMarkerOptions list that holds nearby places with their icons
- */
- public static List loadAttractionsFromLocationToBaseMarkerOptions(
- LatLng currentLatLng,
- final List placeList,
- Context context,
- NearbyBaseMarkerThumbCallback callback,
- ExplorePlacesInfo explorePlacesInfo) {
- List baseMarkerList = new ArrayList<>();
-
- if (placeList == null) {
- return baseMarkerList;
- }
-
- VectorDrawableCompat vectorDrawable = null;
- try {
- vectorDrawable = VectorDrawableCompat.create(
- context.getResources(), R.drawable.ic_custom_map_marker_dark, context.getTheme());
-
- } catch (Resources.NotFoundException e) {
- // ignore when running tests.
- }
- if (vectorDrawable != null) {
- for (Place explorePlace : placeList) {
- final BaseMarker baseMarker = new BaseMarker();
- String distance = formatDistanceBetween(currentLatLng, explorePlace.location);
- explorePlace.setDistance(distance);
-
- baseMarker.setTitle(
- explorePlace.name.substring(5, explorePlace.name.lastIndexOf(".")));
- baseMarker.setPosition(
- new fr.free.nrw.commons.location.LatLng(
- explorePlace.location.getLatitude(),
- explorePlace.location.getLongitude(), 0));
- baseMarker.setPlace(explorePlace);
-
- Glide.with(context)
- .asBitmap()
- .load(explorePlace.getThumb())
- .placeholder(R.drawable.image_placeholder_96)
- .apply(new RequestOptions().override(96, 96).centerCrop())
- .into(new CustomTarget() {
- // We add icons to markers when bitmaps are ready
- @Override
- public void onResourceReady(@NonNull Bitmap resource,
- @Nullable Transition super Bitmap> transition) {
- baseMarker.setIcon(
- ImageUtils.addRedBorder(resource, 6, context));
- baseMarkerList.add(baseMarker);
- if (baseMarkerList.size()
- == placeList.size()) { // if true, we added all markers to list and can trigger thumbs ready callback
- callback.onNearbyBaseMarkerThumbsReady(baseMarkerList,
- explorePlacesInfo);
- }
- }
-
- @Override
- public void onLoadCleared(@Nullable Drawable placeholder) {
- }
-
- // We add thumbnail icon for images that couldn't be loaded
- @Override
- public void onLoadFailed(@Nullable final Drawable errorDrawable) {
- super.onLoadFailed(errorDrawable);
- baseMarker.fromResource(context, R.drawable.image_placeholder_96);
- baseMarkerList.add(baseMarker);
- if (baseMarkerList.size()
- == placeList.size()) { // if true, we added all markers to list and can trigger thumbs ready callback
- callback.onNearbyBaseMarkerThumbsReady(baseMarkerList,
- explorePlacesInfo);
- }
- }
- });
- }
- }
- return baseMarkerList;
- }
-
- interface NearbyBaseMarkerThumbCallback {
-
- // Callback to notify thumbnails of explore markers are added as icons and ready
- void onNearbyBaseMarkerThumbsReady(List baseMarkers,
- ExplorePlacesInfo explorePlacesInfo);
- }
-}
diff --git a/app/src/main/java/fr/free/nrw/commons/explore/map/ExploreMapController.kt b/app/src/main/java/fr/free/nrw/commons/explore/map/ExploreMapController.kt
new file mode 100644
index 000000000..0873572d1
--- /dev/null
+++ b/app/src/main/java/fr/free/nrw/commons/explore/map/ExploreMapController.kt
@@ -0,0 +1,219 @@
+package fr.free.nrw.commons.explore.map
+
+import android.content.Context
+import android.content.res.Resources
+import android.graphics.Bitmap
+import android.graphics.drawable.Drawable
+import androidx.vectordrawable.graphics.drawable.VectorDrawableCompat
+import com.bumptech.glide.Glide
+import com.bumptech.glide.request.RequestOptions
+import com.bumptech.glide.request.target.CustomTarget
+import com.bumptech.glide.request.transition.Transition
+import fr.free.nrw.commons.BaseMarker
+import fr.free.nrw.commons.MapController
+import fr.free.nrw.commons.Media
+import fr.free.nrw.commons.R
+import fr.free.nrw.commons.location.LatLng
+import fr.free.nrw.commons.nearby.Place
+import fr.free.nrw.commons.utils.ImageUtils.addRedBorder
+import fr.free.nrw.commons.utils.LengthUtils.computeDistanceBetween
+import fr.free.nrw.commons.utils.LengthUtils.formatDistanceBetween
+import fr.free.nrw.commons.utils.LocationUtils.calculateDistance
+import fr.free.nrw.commons.utils.PlaceUtils.mediaToExplorePlace
+import timber.log.Timber
+import javax.inject.Inject
+
+class ExploreMapController @Inject constructor(
+ private val exploreMapCalls: ExploreMapCalls
+) : MapController() {
+ // Can be current and camera target on search this area button is used
+ private var latestSearchLocation: LatLng? = null
+
+ // Any last search radius
+ private var latestSearchRadius: Double = 0.0
+
+ // Search radius of only searches around current location
+ private var currentLocationSearchRadius: Double = 0.0
+
+ @JvmField
+ // current location of user
+ var currentLocation: LatLng? = null
+
+ /**
+ * Takes location as parameter and returns ExplorePlaces info that holds currentLatLng, mediaList,
+ * explorePlaceList and boundaryCoordinates
+ *
+ * @param currentLatLng is current geolocation
+ * @param searchLatLng is the location that we want to search around
+ * @param checkingAroundCurrentLocation is a boolean flag. True if we want to check around
+ * current location, false if another location
+ * @return explorePlacesInfo info that holds currentLatLng, mediaList, explorePlaceList and
+ * boundaryCoordinates
+ */
+ fun loadAttractionsFromLocation(
+ currentLatLng: LatLng?, searchLatLng: LatLng?,
+ checkingAroundCurrentLocation: Boolean
+ ): ExplorePlacesInfo? {
+ if (searchLatLng == null) {
+ Timber.d("Loading attractions explore map, but search is null")
+ return null
+ }
+
+ val explorePlacesInfo = ExplorePlacesInfo()
+ try {
+ explorePlacesInfo.currentLatLng = currentLatLng
+ latestSearchLocation = searchLatLng
+
+ val mediaList = exploreMapCalls.callCommonsQuery(searchLatLng)
+ val boundaryCoordinates = arrayOf(
+ mediaList[0].coordinates!!, // south
+ mediaList[0].coordinates!!, // north
+ mediaList[0].coordinates!!, // west
+ mediaList[0].coordinates!!
+ ) // east, init with a random location
+
+ Timber.d("Sorting places by distance...")
+ val distances: MutableMap = HashMap()
+ for (media in mediaList) {
+ distances[media] = computeDistanceBetween(media.coordinates!!, searchLatLng)
+ // Find boundaries with basic find max approach
+ if (media.coordinates!!.latitude
+ < boundaryCoordinates[0]!!.latitude
+ ) {
+ boundaryCoordinates[0] = media.coordinates!!
+ }
+ if (media.coordinates!!.latitude
+ > boundaryCoordinates[1]!!.latitude
+ ) {
+ boundaryCoordinates[1] = media.coordinates!!
+ }
+ if (media.coordinates!!.longitude
+ < boundaryCoordinates[2]!!.longitude
+ ) {
+ boundaryCoordinates[2] = media.coordinates!!
+ }
+ if (media.coordinates!!.longitude
+ > boundaryCoordinates[3]!!.longitude
+ ) {
+ boundaryCoordinates[3] = media.coordinates!!
+ }
+ }
+ explorePlacesInfo.mediaList = mediaList
+ explorePlacesInfo.explorePlaceList = mediaToExplorePlace(mediaList)
+ explorePlacesInfo.boundaryCoordinates = boundaryCoordinates
+
+ // Sets latestSearchRadius to maximum distance among boundaries and search location
+ for ((latitude, longitude) in boundaryCoordinates) {
+ val distance = calculateDistance(
+ latitude,
+ longitude, searchLatLng.latitude, searchLatLng.longitude
+ )
+ if (distance > latestSearchRadius) {
+ latestSearchRadius = distance
+ }
+ }
+
+ // Our radius searched around us, will be used to understand when user search their own location, we will follow them
+ if (checkingAroundCurrentLocation) {
+ currentLocationSearchRadius = latestSearchRadius
+ currentLocation = currentLatLng
+ }
+ } catch (e: Exception) {
+ Timber.e(e)
+ }
+ return explorePlacesInfo
+ }
+
+ interface NearbyBaseMarkerThumbCallback {
+ // Callback to notify thumbnails of explore markers are added as icons and ready
+ fun onNearbyBaseMarkerThumbsReady(
+ baseMarkers: List?,
+ explorePlacesInfo: ExplorePlacesInfo?
+ )
+ }
+
+ companion object {
+ /**
+ * Loads attractions from location for map view, we need to return places in Place data type
+ *
+ * @return baseMarkerOptions list that holds nearby places with their icons
+ */
+ fun loadAttractionsFromLocationToBaseMarkerOptions(
+ currentLatLng: LatLng?,
+ placeList: List?,
+ context: Context,
+ callback: NearbyBaseMarkerThumbCallback,
+ explorePlacesInfo: ExplorePlacesInfo?
+ ): List {
+ val baseMarkerList: MutableList = ArrayList()
+
+ if (placeList == null) {
+ return baseMarkerList
+ }
+
+ var vectorDrawable: VectorDrawableCompat? = null
+ try {
+ vectorDrawable = VectorDrawableCompat.create(
+ context.resources, R.drawable.ic_custom_map_marker_dark, context.theme
+ )
+ } catch (e: Resources.NotFoundException) {
+ // ignore when running tests.
+ }
+ if (vectorDrawable != null) {
+ for (explorePlace in placeList) {
+ val baseMarker = BaseMarker()
+ val distance = formatDistanceBetween(currentLatLng, explorePlace.location)
+ explorePlace.setDistance(distance)
+
+ baseMarker.title =
+ explorePlace.name.substring(5, explorePlace.name.lastIndexOf("."))
+ baseMarker.position = LatLng(
+ explorePlace.location.latitude,
+ explorePlace.location.longitude, 0f
+ )
+ baseMarker.place = explorePlace
+
+ Glide.with(context)
+ .asBitmap()
+ .load(explorePlace.thumb)
+ .placeholder(R.drawable.image_placeholder_96)
+ .apply(RequestOptions().override(96, 96).centerCrop())
+ .into(object : CustomTarget() {
+ // We add icons to markers when bitmaps are ready
+ override fun onResourceReady(
+ resource: Bitmap,
+ transition: Transition?
+ ) {
+ baseMarker.icon = addRedBorder(resource, 6, context)
+ baseMarkerList.add(baseMarker)
+ if (baseMarkerList.size == placeList.size) {
+ // if true, we added all markers to list and can trigger thumbs ready callback
+ callback.onNearbyBaseMarkerThumbsReady(
+ baseMarkerList,
+ explorePlacesInfo
+ )
+ }
+ }
+
+ override fun onLoadCleared(placeholder: Drawable?) = Unit
+
+ // We add thumbnail icon for images that couldn't be loaded
+ override fun onLoadFailed(errorDrawable: Drawable?) {
+ super.onLoadFailed(errorDrawable)
+ baseMarker.fromResource(context, R.drawable.image_placeholder_96)
+ baseMarkerList.add(baseMarker)
+ if (baseMarkerList.size == placeList.size) {
+ // if true, we added all markers to list and can trigger thumbs ready callback
+ callback.onNearbyBaseMarkerThumbsReady(
+ baseMarkerList,
+ explorePlacesInfo
+ )
+ }
+ }
+ })
+ }
+ }
+ return baseMarkerList
+ }
+ }
+}
diff --git a/app/src/main/java/fr/free/nrw/commons/explore/map/ExploreMapFragment.java b/app/src/main/java/fr/free/nrw/commons/explore/map/ExploreMapFragment.java
deleted file mode 100644
index 364f4d53a..000000000
--- a/app/src/main/java/fr/free/nrw/commons/explore/map/ExploreMapFragment.java
+++ /dev/null
@@ -1,1140 +0,0 @@
-package fr.free.nrw.commons.explore.map;
-
-import static fr.free.nrw.commons.location.LocationServiceManager.LocationChangeType.LOCATION_SIGNIFICANTLY_CHANGED;
-import static fr.free.nrw.commons.location.LocationServiceManager.LocationChangeType.LOCATION_SLIGHTLY_CHANGED;
-import static fr.free.nrw.commons.utils.GeoCoordinatesKt.handleGeoCoordinates;
-import static fr.free.nrw.commons.utils.MapUtils.ZOOM_LEVEL;
-import static fr.free.nrw.commons.utils.UrlUtilsKt.handleWebUrl;
-
-import android.Manifest.permission;
-import android.annotation.SuppressLint;
-import android.content.BroadcastReceiver;
-import android.content.Context;
-import android.content.Intent;
-import android.content.IntentFilter;
-import android.graphics.Bitmap;
-import android.graphics.Color;
-import android.graphics.Paint;
-import android.graphics.drawable.BitmapDrawable;
-import android.graphics.drawable.Drawable;
-import android.location.Location;
-import android.location.LocationManager;
-import android.os.Build;
-import android.os.Bundle;
-import android.preference.PreferenceManager;
-import android.text.Html;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.View.OnClickListener;
-import android.view.ViewGroup;
-import androidx.activity.result.ActivityResultLauncher;
-import androidx.activity.result.contract.ActivityResultContracts;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
-import androidx.core.content.ContextCompat;
-import com.google.android.material.bottomsheet.BottomSheetBehavior;
-import com.google.android.material.snackbar.Snackbar;
-import fr.free.nrw.commons.BaseMarker;
-import fr.free.nrw.commons.MapController;
-import fr.free.nrw.commons.Media;
-import fr.free.nrw.commons.R;
-import fr.free.nrw.commons.bookmarks.locations.BookmarkLocationsDao;
-import fr.free.nrw.commons.contributions.MainActivity;
-import fr.free.nrw.commons.databinding.FragmentExploreMapBinding;
-import fr.free.nrw.commons.di.CommonsDaggerSupportFragment;
-import fr.free.nrw.commons.explore.ExploreMapRootFragment;
-import fr.free.nrw.commons.explore.paging.LiveDataConverter;
-import fr.free.nrw.commons.kvstore.JsonKvStore;
-import fr.free.nrw.commons.location.LatLng;
-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.media.MediaClient;
-import fr.free.nrw.commons.nearby.Place;
-import fr.free.nrw.commons.utils.DialogUtil;
-import fr.free.nrw.commons.utils.MapUtils;
-import fr.free.nrw.commons.utils.NetworkUtils;
-import fr.free.nrw.commons.utils.SystemThemeUtils;
-import fr.free.nrw.commons.utils.ViewUtil;
-import io.reactivex.Observable;
-import io.reactivex.android.schedulers.AndroidSchedulers;
-import io.reactivex.schedulers.Schedulers;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import javax.inject.Inject;
-import javax.inject.Named;
-import org.osmdroid.events.MapEventsReceiver;
-import org.osmdroid.events.MapListener;
-import org.osmdroid.events.ScrollEvent;
-import org.osmdroid.events.ZoomEvent;
-import org.osmdroid.tileprovider.tilesource.TileSourceFactory;
-import org.osmdroid.util.GeoPoint;
-import org.osmdroid.util.constants.GeoConstants;
-import org.osmdroid.views.CustomZoomButtonsController;
-import org.osmdroid.views.overlay.ItemizedIconOverlay.OnItemGestureListener;
-import org.osmdroid.views.overlay.ItemizedOverlayWithFocus;
-import org.osmdroid.views.overlay.MapEventsOverlay;
-import org.osmdroid.views.overlay.Overlay;
-import org.osmdroid.views.overlay.OverlayItem;
-import org.osmdroid.views.overlay.ScaleBarOverlay;
-import org.osmdroid.views.overlay.ScaleDiskOverlay;
-import org.osmdroid.views.overlay.TilesOverlay;
-import timber.log.Timber;
-
-public class ExploreMapFragment extends CommonsDaggerSupportFragment
- implements ExploreMapContract.View, LocationUpdateListener, LocationPermissionCallback {
-
- private BottomSheetBehavior bottomSheetDetailsBehavior;
- private BroadcastReceiver broadcastReceiver;
- private boolean isNetworkErrorOccurred;
- private Snackbar snackbar;
- private boolean isDarkTheme;
- private boolean isPermissionDenied;
- private fr.free.nrw.commons.location.LatLng lastKnownLocation; // last location of user
- private fr.free.nrw.commons.location.LatLng lastFocusLocation; // last location that map is focused
- public List mediaList;
- private boolean recenterToUserLocation; // true is recenter is needed (ie. when current location is in visible map boundaries)
- private BaseMarker clickedMarker;
- private GeoPoint mapCenter;
- private GeoPoint lastMapFocus;
- IntentFilter intentFilter = new IntentFilter(MapUtils.NETWORK_INTENT_ACTION);
- private Map baseMarkerOverlayMap;
-
- @Inject
- LiveDataConverter liveDataConverter;
- @Inject
- MediaClient mediaClient;
- @Inject
- LocationServiceManager locationManager;
- @Inject
- ExploreMapController exploreMapController;
- @Inject
- @Named("default_preferences")
- JsonKvStore applicationKvStore;
- @Inject
- BookmarkLocationsDao bookmarkLocationDao; // May be needed in future if we want to integrate bookmarking explore places
- @Inject
- SystemThemeUtils systemThemeUtils;
- LocationPermissionsHelper locationPermissionsHelper;
-
- // Nearby map state (if we came from Nearby)
- private double prevZoom;
- private double prevLatitude;
- private double prevLongitude;
- private boolean recentlyCameFromNearbyMap;
-
- private ExploreMapPresenter presenter;
-
- public FragmentExploreMapBinding binding;
-
- private ActivityResultLauncher activityResultLauncher = registerForActivityResult(
- new ActivityResultContracts.RequestPermission(), isGranted -> {
- if (isGranted) {
- locationPermissionGranted();
- } else {
- if (shouldShowRequestPermissionRationale(permission.ACCESS_FINE_LOCATION)) {
- DialogUtil.showAlertDialog(getActivity(),
- getActivity().getString(R.string.location_permission_title),
- getActivity().getString(R.string.location_permission_rationale_explore),
- getActivity().getString(android.R.string.ok),
- getActivity().getString(android.R.string.cancel),
- () -> {
- askForLocationPermission();
- },
- null,
- null
- );
- } else {
- if (isPermissionDenied) {
- locationPermissionsHelper.showAppSettingsDialog(getActivity(),
- R.string.explore_map_needs_location);
- }
- Timber.d("The user checked 'Don't ask again' or denied the permission twice");
- isPermissionDenied = true;
- }
- }
- });
-
- @NonNull
- public static ExploreMapFragment newInstance() {
- ExploreMapFragment fragment = new ExploreMapFragment();
- fragment.setRetainInstance(true);
- return fragment;
- }
-
- @Override
- public View onCreateView(
- @NonNull LayoutInflater inflater,
- ViewGroup container,
- Bundle savedInstanceState
- ) {
- loadNearbyMapData();
- binding = FragmentExploreMapBinding.inflate(getLayoutInflater());
- return binding.getRoot();
- }
-
- @Override
- public void onViewCreated(@NonNull final View view, @Nullable final Bundle savedInstanceState) {
- super.onViewCreated(view, savedInstanceState);
- setSearchThisAreaButtonVisibility(false);
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
- binding.tvAttribution.setText(
- Html.fromHtml(getString(R.string.map_attribution), Html.FROM_HTML_MODE_LEGACY));
- } else {
- binding.tvAttribution.setText(Html.fromHtml(getString(R.string.map_attribution)));
- }
- initNetworkBroadCastReceiver();
- locationPermissionsHelper = new LocationPermissionsHelper(getActivity(), locationManager,
- this);
- if (presenter == null) {
- presenter = new ExploreMapPresenter(bookmarkLocationDao);
- }
- setHasOptionsMenu(true);
-
- isDarkTheme = systemThemeUtils.isDeviceInNightMode();
- isPermissionDenied = false;
- presenter.attachView(this);
-
- initViews();
- presenter.setActionListeners(applicationKvStore);
-
- org.osmdroid.config.Configuration.getInstance().load(this.getContext(),
- PreferenceManager.getDefaultSharedPreferences(this.getContext()));
-
- binding.mapView.setTileSource(TileSourceFactory.WIKIMEDIA);
- binding.mapView.setTilesScaledToDpi(true);
-
- org.osmdroid.config.Configuration.getInstance().getAdditionalHttpRequestProperties().put(
- "Referer", "http://maps.wikimedia.org/"
- );
-
- ScaleBarOverlay scaleBarOverlay = new ScaleBarOverlay(binding.mapView);
- scaleBarOverlay.setScaleBarOffset(15, 25);
- Paint barPaint = new Paint();
- barPaint.setARGB(200, 255, 250, 250);
- scaleBarOverlay.setBackgroundPaint(barPaint);
- scaleBarOverlay.enableScaleBar();
- binding.mapView.getOverlays().add(scaleBarOverlay);
- binding.mapView.getZoomController()
- .setVisibility(CustomZoomButtonsController.Visibility.NEVER);
- binding.mapView.setMultiTouchControls(true);
-
- if (!isCameFromNearbyMap()) {
- binding.mapView.getController().setZoom(ZOOM_LEVEL);
- }
-
-
- binding.mapView.getOverlays().add(new MapEventsOverlay(new MapEventsReceiver() {
- @Override
- public boolean singleTapConfirmedHelper(GeoPoint p) {
- if (clickedMarker != null) {
- removeMarker(clickedMarker);
- addMarkerToMap(clickedMarker);
- binding.mapView.invalidate();
- } else {
- Timber.e("CLICKED MARKER IS NULL");
- }
- if (bottomSheetDetailsBehavior.getState() == BottomSheetBehavior.STATE_EXPANDED) {
- // Back should first hide the bottom sheet if it is expanded
- bottomSheetDetailsBehavior.setState(BottomSheetBehavior.STATE_HIDDEN);
- } else if (isDetailsBottomSheetVisible()) {
- hideBottomDetailsSheet();
- }
- return true;
- }
-
- @Override
- public boolean longPressHelper(GeoPoint p) {
- return false;
- }
- }));
-
- binding.mapView.addMapListener(new MapListener() {
- @Override
- public boolean onScroll(ScrollEvent event) {
- if (getLastMapFocus() != null) {
- Location mylocation = new Location("");
- Location dest_location = new Location("");
- dest_location.setLatitude(binding.mapView.getMapCenter().getLatitude());
- dest_location.setLongitude(binding.mapView.getMapCenter().getLongitude());
- mylocation.setLatitude(getLastMapFocus().getLatitude());
- mylocation.setLongitude(getLastMapFocus().getLongitude());
- Float distance = mylocation.distanceTo(dest_location);//in meters
- if (getLastMapFocus() != null) {
- if (isNetworkConnectionEstablished() && (event.getX() > 0
- || event.getY() > 0)) {
- if (distance > 2000.0) {
- setSearchThisAreaButtonVisibility(true);
- } else {
- setSearchThisAreaButtonVisibility(false);
- }
- }
- } else {
- setSearchThisAreaButtonVisibility(false);
- }
- }
-
- return true;
- }
-
- @Override
- public boolean onZoom(ZoomEvent event) {
- return false;
- }
-
- });
- if (!locationPermissionsHelper.checkLocationPermission(getActivity())) {
- askForLocationPermission();
- }
- }
-
- @Override
- public void onResume() {
- super.onResume();
- binding.mapView.onResume();
- presenter.attachView(this);
- registerNetworkReceiver();
- if (isResumed()) {
- if (locationPermissionsHelper.checkLocationPermission(getActivity())) {
- performMapReadyActions();
- } else {
- startMapWithoutPermission();
- }
- }
- }
-
- @Override
- public void onPause() {
- super.onPause();
- // unregistering the broadcastReceiver, as it was causing an exception and a potential crash
- unregisterNetworkReceiver();
- }
-
-
- /**
- * Unregisters the networkReceiver
- */
- private void unregisterNetworkReceiver() {
- if (getActivity() != null) {
- getActivity().unregisterReceiver(broadcastReceiver);
- }
- }
-
- private void startMapWithoutPermission() {
- lastKnownLocation = MapUtils.getDefaultLatLng();
- moveCameraToPosition(
- new GeoPoint(lastKnownLocation.getLatitude(), lastKnownLocation.getLongitude()));
- presenter.onMapReady(exploreMapController);
- }
-
- private void registerNetworkReceiver() {
- if (getActivity() != null) {
- getActivity().registerReceiver(broadcastReceiver, intentFilter);
- }
- }
-
- private void performMapReadyActions() {
- if (isDarkTheme) {
- binding.mapView.getOverlayManager().getTilesOverlay()
- .setColorFilter(TilesOverlay.INVERT_COLORS);
- }
- if (applicationKvStore.getBoolean("doNotAskForLocationPermission", false) &&
- !locationPermissionsHelper.checkLocationPermission(getActivity())) {
- isPermissionDenied = true;
- }
-
- lastKnownLocation = getLastLocation();
-
- if (lastKnownLocation == null) {
- lastKnownLocation = MapUtils.getDefaultLatLng();
- }
-
- // if we came from 'Show in Explore' in Nearby, load Nearby map center and zoom
- if (isCameFromNearbyMap()) {
- moveCameraToPosition(
- new GeoPoint(prevLatitude, prevLongitude),
- prevZoom,
- 1L
- );
- } else {
- moveCameraToPosition(
- new GeoPoint(lastKnownLocation.getLatitude(), lastKnownLocation.getLongitude()));
- }
- presenter.onMapReady(exploreMapController);
- }
-
- /**
- * Fetch Nearby map camera data from fragment arguments if any.
- */
- public void loadNearbyMapData() {
- // get fragment arguments
- if (getArguments() != null) {
- prevZoom = getArguments().getDouble("prev_zoom");
- prevLatitude = getArguments().getDouble("prev_latitude");
- prevLongitude = getArguments().getDouble("prev_longitude");
- }
-
- setRecentlyCameFromNearbyMap(isCameFromNearbyMap());
- }
-
- /**
- * @return The LatLng from the previous Fragment's map center or (0,0,0) coordinates
- * if that information is not available/applicable.
- */
- public LatLng getPreviousLatLng() {
- return new LatLng(prevLatitude, prevLongitude, (float)prevZoom);
- }
-
- /**
- * Checks if fragment arguments contain data from Nearby map, indicating that the user navigated
- * from Nearby using 'Show in Explore'.
- *
- * @return true if user navigated from Nearby map
- **/
- public boolean isCameFromNearbyMap() {
- return prevZoom != 0.0 || prevLatitude != 0.0 || prevLongitude != 0.0;
- }
-
- /**
- * Gets the value that indicates if the user navigated from "Show in Explore" in Nearby and
- * that the LatLng from Nearby has yet to be searched for map markers.
- */
- public boolean recentlyCameFromNearbyMap() {
- return recentlyCameFromNearbyMap;
- }
-
- /**
- * Sets the value that indicates if the user navigated from "Show in Explore" in Nearby and
- * that the LatLng from Nearby has yet to be searched for map markers.
- * @param newValue The value to set.
- */
- public void setRecentlyCameFromNearbyMap(boolean newValue) {
- recentlyCameFromNearbyMap = newValue;
- }
-
- public void loadNearbyMapFromExplore() {
- ((MainActivity) getContext()).loadNearbyMapFromExplore(
- binding.mapView.getZoomLevelDouble(),
- binding.mapView.getMapCenter().getLatitude(),
- binding.mapView.getMapCenter().getLongitude()
- );
- }
-
- private void initViews() {
- Timber.d("init views called");
- initBottomSheets();
- setBottomSheetCallbacks();
- }
-
- /**
- * a) Creates bottom sheet behaviours from bottom sheet, sets initial states and visibility
- * b) Gets the touch event on the map to perform following actions:
- * if bottom sheet details are expanded or collapsed hide the bottom sheet details.
- */
- @SuppressLint("ClickableViewAccessibility")
- private void initBottomSheets() {
- bottomSheetDetailsBehavior = BottomSheetBehavior.from(
- binding.bottomSheetDetailsBinding.getRoot());
- bottomSheetDetailsBehavior.setState(BottomSheetBehavior.STATE_HIDDEN);
- binding.bottomSheetDetailsBinding.getRoot().setVisibility(View.VISIBLE);
- }
-
- /**
- * Defines how bottom sheets will act on click
- */
- private void setBottomSheetCallbacks() {
- binding.bottomSheetDetailsBinding.getRoot().setOnClickListener(v -> {
- if (bottomSheetDetailsBehavior.getState() == BottomSheetBehavior.STATE_COLLAPSED) {
- bottomSheetDetailsBehavior.setState(BottomSheetBehavior.STATE_EXPANDED);
- } else if (bottomSheetDetailsBehavior.getState()
- == BottomSheetBehavior.STATE_EXPANDED) {
- bottomSheetDetailsBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED);
- }
- });
- }
-
- @Override
- public void onLocationChangedSignificantly(LatLng latLng) {
- Timber.d("Location significantly changed");
- if (latLng != null) {
- handleLocationUpdate(latLng, LOCATION_SIGNIFICANTLY_CHANGED);
- }
- }
-
- @Override
- public void onLocationChangedSlightly(LatLng latLng) {
- Timber.d("Location slightly changed");
- if (latLng != null) {//If the map has never ever shown the current location, lets do it know
- handleLocationUpdate(latLng, LOCATION_SLIGHTLY_CHANGED);
- }
- }
-
- private void handleLocationUpdate(final fr.free.nrw.commons.location.LatLng latLng,
- final LocationServiceManager.LocationChangeType locationChangeType) {
- lastKnownLocation = latLng;
- exploreMapController.currentLocation = lastKnownLocation;
- presenter.updateMap(locationChangeType);
- }
-
- @Override
- public void onLocationChangedMedium(LatLng latLng) {
-
- }
-
- @Override
- public boolean isNetworkConnectionEstablished() {
- return NetworkUtils.isInternetConnectionEstablished(getActivity());
- }
-
- @Override
- public void populatePlaces(LatLng currentLatLng) {
- final Observable nearbyPlacesInfoObservable;
- if (currentLatLng == null) {
- return;
- }
- if (currentLatLng.equals(
- getLastMapFocus())) { // Means we are checking around current location
- nearbyPlacesInfoObservable = presenter.loadAttractionsFromLocation(currentLatLng,
- getLastMapFocus(), true);
- } else {
- nearbyPlacesInfoObservable = presenter.loadAttractionsFromLocation(getLastMapFocus(),
- currentLatLng, false);
- }
- getCompositeDisposable().add(nearbyPlacesInfoObservable
- .subscribeOn(Schedulers.io())
- .observeOn(AndroidSchedulers.mainThread())
- .subscribe(explorePlacesInfo -> {
- mediaList = explorePlacesInfo.mediaList;
- if (mediaList == null) {
- showResponseMessage(getString(R.string.no_pictures_in_this_area));
- }
- updateMapMarkers(explorePlacesInfo);
- lastMapFocus = new GeoPoint(currentLatLng.getLatitude(),
- currentLatLng.getLongitude());
- },
- throwable -> {
- Timber.d(throwable);
- // Not showing the user, throwable localizedErrorMessage
- showErrorMessage(getString(R.string.error_fetching_nearby_places));
-
- setProgressBarVisibility(false);
- presenter.lockUnlockNearby(false);
- }));
- if (recenterToUserLocation) {
- recenterToUserLocation = false;
- }
- }
-
- /**
- * Updates map markers according to latest situation
- *
- * @param explorePlacesInfo holds several information as current location, marker list etc.
- */
- private void updateMapMarkers(final MapController.ExplorePlacesInfo explorePlacesInfo) {
- presenter.updateMapMarkers(explorePlacesInfo);
- }
-
- private void showErrorMessage(final String message) {
- ViewUtil.showLongToast(getActivity(), message);
- }
-
- private void showResponseMessage(final String message) {
- ViewUtil.showLongSnackbar(getView(), message);
- }
-
- @Override
- public void askForLocationPermission() {
- Timber.d("Asking for location permission");
- activityResultLauncher.launch(permission.ACCESS_FINE_LOCATION);
- }
-
- private void locationPermissionGranted() {
- isPermissionDenied = false;
- applicationKvStore.putBoolean("doNotAskForLocationPermission", false);
- lastKnownLocation = locationManager.getLastLocation();
- fr.free.nrw.commons.location.LatLng target = lastKnownLocation;
- if (lastKnownLocation != null) {
- GeoPoint targetP = new GeoPoint(target.getLatitude(), target.getLongitude());
- mapCenter = targetP;
- binding.mapView.getController().setCenter(targetP);
- recenterMarkerToPosition(targetP);
- moveCameraToPosition(targetP);
- } else if (locationManager.isGPSProviderEnabled()
- || locationManager.isNetworkProviderEnabled()) {
- locationManager.requestLocationUpdatesFromProvider(LocationManager.NETWORK_PROVIDER);
- locationManager.requestLocationUpdatesFromProvider(LocationManager.GPS_PROVIDER);
- setProgressBarVisibility(true);
- } else {
- locationPermissionsHelper.showLocationOffDialog(getActivity(),
- R.string.ask_to_turn_location_on_text);
- }
- presenter.onMapReady(exploreMapController);
- registerUnregisterLocationListener(false);
- }
-
- public void registerUnregisterLocationListener(final boolean removeLocationListener) {
- MapUtils.registerUnregisterLocationListener(removeLocationListener, locationManager, this);
- }
-
- @Override
- public void recenterMap(LatLng currentLatLng) {
- // if user has denied permission twice, then show dialog
- if (isPermissionDenied) {
- if (locationPermissionsHelper.checkLocationPermission(getActivity())) {
- // this will run when user has given permission by opening app's settings
- isPermissionDenied = false;
- recenterMap(currentLatLng);
- } else {
- askForLocationPermission();
- }
- } else {
- if (!locationPermissionsHelper.checkLocationPermission(getActivity())) {
- askForLocationPermission();
- } else {
- locationPermissionGranted();
- }
- }
- if (currentLatLng == null) {
- recenterToUserLocation = true;
- return;
- }
- recenterMarkerToPosition(
- new GeoPoint(currentLatLng.getLatitude(), currentLatLng.getLongitude()));
- binding.mapView.getController()
- .animateTo(new GeoPoint(currentLatLng.getLatitude(), currentLatLng.getLongitude()));
- if (lastMapFocus != null) {
- Location mylocation = new Location("");
- Location dest_location = new Location("");
- dest_location.setLatitude(binding.mapView.getMapCenter().getLatitude());
- dest_location.setLongitude(binding.mapView.getMapCenter().getLongitude());
- mylocation.setLatitude(lastMapFocus.getLatitude());
- mylocation.setLongitude(lastMapFocus.getLongitude());
- Float distance = mylocation.distanceTo(dest_location);//in meters
- if (lastMapFocus != null) {
- if (isNetworkConnectionEstablished()) {
- if (distance > 2000.0) {
- setSearchThisAreaButtonVisibility(true);
- } else {
- setSearchThisAreaButtonVisibility(false);
- }
- }
- } else {
- setSearchThisAreaButtonVisibility(false);
- }
- }
- }
-
- @Override
- public void hideBottomDetailsSheet() {
- bottomSheetDetailsBehavior.setState(BottomSheetBehavior.STATE_HIDDEN);
- }
-
- /**
- * Same bottom sheet carries information for all nearby places, so we need to pass information
- * (title, description, distance and links) to view on nearby marker click
- *
- * @param place Place of clicked nearby marker
- */
- private void passInfoToSheet(final Place place) {
- binding.bottomSheetDetailsBinding.directionsButton.setOnClickListener(
- view -> handleGeoCoordinates(requireActivity(),
- place.getLocation(), binding.mapView.getZoomLevelDouble()));
-
- binding.bottomSheetDetailsBinding.commonsButton.setVisibility(
- place.hasCommonsLink() ? View.VISIBLE : View.GONE);
- binding.bottomSheetDetailsBinding.commonsButton.setOnClickListener(
- view -> handleWebUrl(getContext(), place.siteLinks.getCommonsLink()));
-
- int index = 0;
- for (Media media : mediaList) {
- if (media.getFilename().equals(place.name)) {
- int finalIndex = index;
- binding.bottomSheetDetailsBinding.mediaDetailsButton.setOnClickListener(view -> {
- ((ExploreMapRootFragment) getParentFragment()).onMediaClicked(finalIndex);
- });
- }
- index++;
- }
- binding.bottomSheetDetailsBinding.title.setText(
- place.name.substring(5, place.name.lastIndexOf(".")));
- binding.bottomSheetDetailsBinding.category.setText(place.distance);
- // Remove label since it is double information
- String descriptionText = place.getLongDescription()
- .replace(place.getName() + " (", "");
- descriptionText = (descriptionText.equals(place.getLongDescription()) ? descriptionText
- : descriptionText.replaceFirst(".$", ""));
- // Set the short description after we remove place name from long description
- binding.bottomSheetDetailsBinding.description.setText(descriptionText);
- }
-
- @Override
- public void addSearchThisAreaButtonAction() {
- binding.searchThisAreaButton.setOnClickListener(presenter.onSearchThisAreaClicked());
- }
-
- @Override
- public void setSearchThisAreaButtonVisibility(boolean isVisible) {
- binding.searchThisAreaButton.setVisibility(isVisible ? View.VISIBLE : View.GONE);
- }
-
- @Override
- public void setProgressBarVisibility(boolean isVisible) {
- binding.mapProgressBar.setVisibility(isVisible ? View.VISIBLE : View.GONE);
- }
-
- @Override
- public boolean isDetailsBottomSheetVisible() {
- if (binding.bottomSheetDetailsBinding.getRoot().getVisibility() == View.VISIBLE) {
- return true;
- } else {
- return false;
- }
- }
-
- @Override
- public boolean isSearchThisAreaButtonVisible() {
- return binding.bottomSheetDetailsBinding.getRoot().getVisibility() == View.VISIBLE;
- }
-
- @Override
- public LatLng getLastLocation() {
- if (lastKnownLocation == null) {
- lastKnownLocation = locationManager.getLastLocation();
- }
- return lastKnownLocation;
- }
-
- @Override
- public void disableFABRecenter() {
- binding.fabRecenter.setEnabled(false);
- }
-
- @Override
- public void enableFABRecenter() {
- binding.fabRecenter.setEnabled(true);
- }
-
- /**
- * Adds a markers to the map based on the list of NearbyBaseMarker.
- *
- * @param nearbyBaseMarkers The NearbyBaseMarker object representing the markers to be added.
- */
- @Override
- public void addMarkersToMap(List nearbyBaseMarkers) {
- clearAllMarkers();
- for (int i = 0; i < nearbyBaseMarkers.size(); i++) {
- addMarkerToMap(nearbyBaseMarkers.get(i));
- }
- binding.mapView.invalidate();
- }
-
- /**
- * Adds a marker to the map based on the specified NearbyBaseMarker.
- *
- * @param nearbyBaseMarker The NearbyBaseMarker object representing the marker to be added.
- */
- private void addMarkerToMap(BaseMarker nearbyBaseMarker) {
- if (isAttachedToActivity()) {
- ArrayList items = new ArrayList<>();
- Bitmap icon = nearbyBaseMarker.getIcon();
- Drawable d = new BitmapDrawable(getResources(), icon);
- GeoPoint point = new GeoPoint(
- nearbyBaseMarker.getPlace().location.getLatitude(),
- nearbyBaseMarker.getPlace().location.getLongitude());
-
- Media markerMedia = this.getMediaFromImageURL(nearbyBaseMarker.getPlace().pic);
- String authorUser = null;
- if (markerMedia != null) {
- authorUser = markerMedia.getAuthorOrUser();
- // HTML text is sometimes part of the author string and needs to be removed
- authorUser = Html.fromHtml(authorUser, Html.FROM_HTML_MODE_LEGACY).toString();
- }
-
- String title = nearbyBaseMarker.getPlace().name;
- // Remove "File:" if present at start
- if (title.startsWith("File:")) {
- title = title.substring(5);
- }
- // Remove extensions like .jpg, .jpeg, .png, .svg (case insensitive)
- title = title.replaceAll("(?i)\\.(jpg|jpeg|png|svg)$", "");
- title = title.replace("_", " ");
- //Truncate if too long because it doesn't fit the screen
- if (title.length() > 43) {
- title = title.substring(0, 40) + "…";
- }
-
- OverlayItem item = new OverlayItem(title, authorUser, point);
- item.setMarker(d);
- items.add(item);
- ItemizedOverlayWithFocus overlay = new ItemizedOverlayWithFocus(items,
- new OnItemGestureListener() {
- @Override
- public boolean onItemSingleTapUp(int index, OverlayItem item) {
- final Place place = nearbyBaseMarker.getPlace();
- if (clickedMarker != null) {
- removeMarker(clickedMarker);
- addMarkerToMap(clickedMarker);
- bottomSheetDetailsBehavior.setState(BottomSheetBehavior.STATE_HIDDEN);
- bottomSheetDetailsBehavior.setState(
- BottomSheetBehavior.STATE_COLLAPSED);
- }
- clickedMarker = nearbyBaseMarker;
- passInfoToSheet(place);
-
- //Move the overlay to the top so it can be fully seen.
- moveOverlayToTop(getOverlay(item));
- return true;
- }
-
- @Override
- public boolean onItemLongPress(int index, OverlayItem item) {
- return false;
- }
- }, getContext());
-
- if (this.baseMarkerOverlayMap == null) {
- this.baseMarkerOverlayMap = new HashMap<>();
- }
- this.baseMarkerOverlayMap.put(nearbyBaseMarker, overlay);
-
- overlay.setFocusItemsOnTap(true);
- binding.mapView.getOverlays().add(overlay); // Add the overlay to the map
- }
- }
-
- /**
- * Moves the specified Overlay above all other Overlays. This prevents other Overlays from
- * obstructing it. Upon failure, this method returns early.
- * @param overlay The Overlay to move.
- */
- private void moveOverlayToTop (Overlay overlay) {
- if (overlay == null || binding == null || binding.mapView.getOverlays() == null) {
- return;
- }
-
- boolean successfulRemoval = binding.mapView.getOverlays().remove(overlay);
- if (!successfulRemoval) {
- return;
- }
-
- binding.mapView.getOverlays().add(overlay);
- }
-
- /**
- * Performs a linear search for the first Overlay which contains the specified OverlayItem.
- *
- * @param item The OverlayItem contained within the first target Overlay.
- * @return The first Overlay which contains the specified OverlayItem or null if the Overlay
- * could not be found.
- */
- private Overlay getOverlay (OverlayItem item) {
- if (item == null || binding == null || binding.mapView.getOverlays() == null) {
- return null;
- }
-
- for (int i = 0; i < binding.mapView.getOverlays().size(); i++) {
- if (binding.mapView.getOverlays().get(i) instanceof ItemizedOverlayWithFocus) {
- ItemizedOverlayWithFocus overlay =
- (ItemizedOverlayWithFocus)binding.mapView.getOverlays().get(i);
-
- for (int j = 0; j < overlay.size(); j++) {
- if (overlay.getItem(j) == item) {
- return overlay;
- }
- }
- }
- }
-
- return null;
- }
-
- /**
- * Retrieves the specific Media object from the mediaList field.
- * @param url The specific Media's image URL.
- * @return The Media object that matches the URL or null if it could not be found.
- */
- private Media getMediaFromImageURL(String url) {
- if (mediaList == null || url == null) {
- return null;
- }
-
- for (int i = 0; i < mediaList.size(); i++) {
- if (mediaList.get(i) != null && mediaList.get(i).getImageUrl() != null
- && mediaList.get(i).getImageUrl().equals(url)) {
- return mediaList.get(i);
- }
- }
-
- return null;
- }
-
- /**
- * Removes a marker from the map based on the specified NearbyBaseMarker.
- *
- * @param nearbyBaseMarker The NearbyBaseMarker object representing the marker to be removed.
- */
- private void removeMarker(BaseMarker nearbyBaseMarker) {
- if (nearbyBaseMarker == null || nearbyBaseMarker.getPlace().getName() == null ||
- baseMarkerOverlayMap == null || !baseMarkerOverlayMap.containsKey(nearbyBaseMarker)) {
- return;
- }
-
- Overlay target = baseMarkerOverlayMap.get(nearbyBaseMarker);
- List overlays = binding.mapView.getOverlays();
-
- for (int i = 0; i < overlays.size(); i++) {
- Overlay overlay = overlays.get(i);
-
- if (overlay.equals(target)) {
- binding.mapView.getOverlays().remove(i);
- binding.mapView.invalidate();
- baseMarkerOverlayMap.remove(nearbyBaseMarker);
- break;
- }
- }
- }
-
- /**
- * Clears all markers from the map and resets certain map overlays and gestures. After clearing
- * markers, it re-adds a scale bar overlay and rotation gesture overlay to the map.
- */
- @Override
- public void clearAllMarkers() {
- if (isAttachedToActivity()) {
- binding.mapView.getOverlayManager().clear();
- GeoPoint geoPoint = mapCenter;
- if (geoPoint != null) {
- List overlays = binding.mapView.getOverlays();
- ScaleDiskOverlay diskOverlay =
- new ScaleDiskOverlay(this.getContext(),
- geoPoint, 2000, GeoConstants.UnitOfMeasure.foot);
- Paint circlePaint = new Paint();
- circlePaint.setColor(Color.rgb(128, 128, 128));
- circlePaint.setStyle(Paint.Style.STROKE);
- circlePaint.setStrokeWidth(2f);
- diskOverlay.setCirclePaint2(circlePaint);
- Paint diskPaint = new Paint();
- diskPaint.setColor(Color.argb(40, 128, 128, 128));
- diskPaint.setStyle(Paint.Style.FILL_AND_STROKE);
- diskOverlay.setCirclePaint1(diskPaint);
- diskOverlay.setDisplaySizeMin(900);
- diskOverlay.setDisplaySizeMax(1700);
- binding.mapView.getOverlays().add(diskOverlay);
- org.osmdroid.views.overlay.Marker startMarker = new org.osmdroid.views.overlay.Marker(
- binding.mapView);
- startMarker.setPosition(geoPoint);
- startMarker.setAnchor(org.osmdroid.views.overlay.Marker.ANCHOR_CENTER,
- org.osmdroid.views.overlay.Marker.ANCHOR_BOTTOM);
- startMarker.setIcon(
- ContextCompat.getDrawable(this.getContext(),
- R.drawable.current_location_marker));
- startMarker.setTitle("Your Location");
- startMarker.setTextLabelFontSize(24);
- binding.mapView.getOverlays().add(startMarker);
- }
- ScaleBarOverlay scaleBarOverlay = new ScaleBarOverlay(binding.mapView);
- scaleBarOverlay.setScaleBarOffset(15, 25);
- Paint barPaint = new Paint();
- barPaint.setARGB(200, 255, 250, 250);
- scaleBarOverlay.setBackgroundPaint(barPaint);
- scaleBarOverlay.enableScaleBar();
- binding.mapView.getOverlays().add(scaleBarOverlay);
- binding.mapView.getOverlays().add(new MapEventsOverlay(new MapEventsReceiver() {
- @Override
- public boolean singleTapConfirmedHelper(GeoPoint p) {
- if (clickedMarker != null) {
- removeMarker(clickedMarker);
- addMarkerToMap(clickedMarker);
- binding.mapView.invalidate();
- } else {
- Timber.e("CLICKED MARKER IS NULL");
- }
- if (bottomSheetDetailsBehavior.getState()
- == BottomSheetBehavior.STATE_EXPANDED) {
- // Back should first hide the bottom sheet if it is expanded
- bottomSheetDetailsBehavior.setState(BottomSheetBehavior.STATE_HIDDEN);
- } else if (isDetailsBottomSheetVisible()) {
- hideBottomDetailsSheet();
- }
- return true;
- }
-
- @Override
- public boolean longPressHelper(GeoPoint p) {
- return false;
- }
- }));
- binding.mapView.setMultiTouchControls(true);
- }
- }
-
- /**
- * Recenters the map view to the specified GeoPoint and updates the marker to indicate the new
- * position.
- *
- * @param geoPoint The GeoPoint representing the new center position for the map.
- */
- private void recenterMarkerToPosition(GeoPoint geoPoint) {
- if (geoPoint != null) {
- binding.mapView.getController().setCenter(geoPoint);
- List overlays = binding.mapView.getOverlays();
- for (int i = 0; i < overlays.size(); i++) {
- if (overlays.get(i) instanceof org.osmdroid.views.overlay.Marker) {
- binding.mapView.getOverlays().remove(i);
- } else if (overlays.get(i) instanceof ScaleDiskOverlay) {
- binding.mapView.getOverlays().remove(i);
- }
- }
- ScaleDiskOverlay diskOverlay =
- new ScaleDiskOverlay(this.getContext(),
- geoPoint, 2000, GeoConstants.UnitOfMeasure.foot);
- Paint circlePaint = new Paint();
- circlePaint.setColor(Color.rgb(128, 128, 128));
- circlePaint.setStyle(Paint.Style.STROKE);
- circlePaint.setStrokeWidth(2f);
- diskOverlay.setCirclePaint2(circlePaint);
- Paint diskPaint = new Paint();
- diskPaint.setColor(Color.argb(40, 128, 128, 128));
- diskPaint.setStyle(Paint.Style.FILL_AND_STROKE);
- diskOverlay.setCirclePaint1(diskPaint);
- diskOverlay.setDisplaySizeMin(900);
- diskOverlay.setDisplaySizeMax(1700);
- binding.mapView.getOverlays().add(diskOverlay);
- org.osmdroid.views.overlay.Marker startMarker = new org.osmdroid.views.overlay.Marker(
- binding.mapView);
- startMarker.setPosition(geoPoint);
- startMarker.setAnchor(org.osmdroid.views.overlay.Marker.ANCHOR_CENTER,
- org.osmdroid.views.overlay.Marker.ANCHOR_BOTTOM);
- startMarker.setIcon(
- ContextCompat.getDrawable(this.getContext(), R.drawable.current_location_marker));
- startMarker.setTitle("Your Location");
- startMarker.setTextLabelFontSize(24);
- binding.mapView.getOverlays().add(startMarker);
- }
- }
-
- /**
- * Moves the camera of the map view to the specified GeoPoint using an animation.
- *
- * @param geoPoint The GeoPoint representing the new camera position for the map.
- */
- private void moveCameraToPosition(GeoPoint geoPoint) {
- binding.mapView.getController().animateTo(geoPoint);
- }
-
- /**
- * Moves the camera of the map view to the specified GeoPoint at specified zoom level and speed
- * using an animation.
- *
- * @param geoPoint The GeoPoint representing the new camera position for the map.
- * @param zoom Zoom level of the map camera
- * @param speed Speed of animation
- */
- private void moveCameraToPosition(GeoPoint geoPoint, double zoom, long speed) {
- binding.mapView.getController().animateTo(geoPoint, zoom, speed);
- }
-
- @Override
- public fr.free.nrw.commons.location.LatLng getLastMapFocus() {
- return lastMapFocus == null ? getMapCenter() : new fr.free.nrw.commons.location.LatLng(
- lastMapFocus.getLatitude(), lastMapFocus.getLongitude(), 100);
- }
-
- @Override
- public fr.free.nrw.commons.location.LatLng getMapCenter() {
- fr.free.nrw.commons.location.LatLng latLnge = null;
- if (mapCenter != null) {
- latLnge = new fr.free.nrw.commons.location.LatLng(
- mapCenter.getLatitude(), mapCenter.getLongitude(), 100);
- } else {
- if (applicationKvStore.getString("LastLocation") != null) {
- final String[] locationLatLng
- = applicationKvStore.getString("LastLocation").split(",");
- lastKnownLocation
- = new fr.free.nrw.commons.location.LatLng(Double.parseDouble(locationLatLng[0]),
- Double.parseDouble(locationLatLng[1]), 1f);
- latLnge = lastKnownLocation;
- } else {
- latLnge = new fr.free.nrw.commons.location.LatLng(51.506255446947776,
- -0.07483536015053005, 1f);
- }
- }
- return latLnge;
- }
-
- @Override
- public fr.free.nrw.commons.location.LatLng getMapFocus() {
- fr.free.nrw.commons.location.LatLng mapFocusedLatLng = new fr.free.nrw.commons.location.LatLng(
- binding.mapView.getMapCenter().getLatitude(),
- binding.mapView.getMapCenter().getLongitude(), 100);
- return mapFocusedLatLng;
- }
-
- @Override
- public void setFABRecenterAction(OnClickListener onClickListener) {
- binding.fabRecenter.setOnClickListener(onClickListener);
- }
-
- @Override
- public boolean backButtonClicked() {
- if (!(bottomSheetDetailsBehavior.getState() == BottomSheetBehavior.STATE_HIDDEN)) {
- bottomSheetDetailsBehavior.setState(BottomSheetBehavior.STATE_HIDDEN);
- return true;
- } else {
- return false;
- }
- }
-
- /**
- * Adds network broadcast receiver to recognize connection established
- */
- private void initNetworkBroadCastReceiver() {
- broadcastReceiver = new BroadcastReceiver() {
- @Override
- public void onReceive(final Context context, final Intent intent) {
- if (getActivity() != null) {
- if (NetworkUtils.isInternetConnectionEstablished(getActivity())) {
- if (isNetworkErrorOccurred) {
- presenter.updateMap(LOCATION_SIGNIFICANTLY_CHANGED);
- isNetworkErrorOccurred = false;
- }
-
- if (snackbar != null) {
- snackbar.dismiss();
- snackbar = null;
- }
- } else {
- if (snackbar == null) {
- snackbar = Snackbar.make(getView(), R.string.no_internet,
- Snackbar.LENGTH_INDEFINITE);
- setSearchThisAreaButtonVisibility(false);
- setProgressBarVisibility(false);
- }
-
- isNetworkErrorOccurred = true;
- snackbar.show();
- }
- }
- }
- };
- }
-
- /**
- * helper function to confirm that this fragment has been attached.
- **/
- public boolean isAttachedToActivity() {
- boolean attached = isVisible() && getActivity() != null;
- return attached;
- }
-
- @Override
- public void onLocationPermissionDenied(String toastMessage) {
- }
-
- @Override
- public void onLocationPermissionGranted() {
- }
-}
diff --git a/app/src/main/java/fr/free/nrw/commons/explore/map/ExploreMapFragment.kt b/app/src/main/java/fr/free/nrw/commons/explore/map/ExploreMapFragment.kt
new file mode 100644
index 000000000..a1bae09fb
--- /dev/null
+++ b/app/src/main/java/fr/free/nrw/commons/explore/map/ExploreMapFragment.kt
@@ -0,0 +1,1139 @@
+@file:Suppress("DEPRECATION")
+
+package fr.free.nrw.commons.explore.map
+
+import android.Manifest.permission
+import android.annotation.SuppressLint
+import android.content.BroadcastReceiver
+import android.content.Context
+import android.content.Intent
+import android.content.IntentFilter
+import android.graphics.Color
+import android.graphics.Paint
+import android.graphics.drawable.Drawable
+import android.location.Location
+import android.location.LocationManager
+import android.os.Build
+import android.os.Bundle
+import android.preference.PreferenceManager
+import android.text.Html
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.LinearLayout
+import androidx.activity.result.contract.ActivityResultContracts.RequestPermission
+import androidx.core.content.ContextCompat
+import androidx.core.graphics.drawable.toDrawable
+import androidx.core.view.isVisible
+import com.google.android.material.bottomsheet.BottomSheetBehavior
+import com.google.android.material.snackbar.Snackbar
+import fr.free.nrw.commons.BaseMarker
+import fr.free.nrw.commons.MapController.ExplorePlacesInfo
+import fr.free.nrw.commons.Media
+import fr.free.nrw.commons.R
+import fr.free.nrw.commons.bookmarks.locations.BookmarkLocationsDao
+import fr.free.nrw.commons.contributions.MainActivity
+import fr.free.nrw.commons.databinding.FragmentExploreMapBinding
+import fr.free.nrw.commons.di.CommonsDaggerSupportFragment
+import fr.free.nrw.commons.explore.ExploreMapRootFragment
+import fr.free.nrw.commons.explore.paging.LiveDataConverter
+import fr.free.nrw.commons.kvstore.JsonKvStore
+import fr.free.nrw.commons.location.LatLng
+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.LocationServiceManager.LocationChangeType
+import fr.free.nrw.commons.location.LocationUpdateListener
+import fr.free.nrw.commons.media.MediaClient
+import fr.free.nrw.commons.nearby.Place
+import fr.free.nrw.commons.utils.DialogUtil.showAlertDialog
+import fr.free.nrw.commons.utils.MapUtils
+import fr.free.nrw.commons.utils.MapUtils.ZOOM_LEVEL
+import fr.free.nrw.commons.utils.MapUtils.defaultLatLng
+import fr.free.nrw.commons.utils.NetworkUtils.isInternetConnectionEstablished
+import fr.free.nrw.commons.utils.SystemThemeUtils
+import fr.free.nrw.commons.utils.ViewUtil.showLongSnackbar
+import fr.free.nrw.commons.utils.ViewUtil.showLongToast
+import fr.free.nrw.commons.utils.handleGeoCoordinates
+import fr.free.nrw.commons.utils.handleWebUrl
+import io.reactivex.Observable
+import io.reactivex.android.schedulers.AndroidSchedulers
+import io.reactivex.functions.Consumer
+import io.reactivex.schedulers.Schedulers
+import org.osmdroid.config.Configuration
+import org.osmdroid.events.MapEventsReceiver
+import org.osmdroid.events.MapListener
+import org.osmdroid.events.ScrollEvent
+import org.osmdroid.events.ZoomEvent
+import org.osmdroid.tileprovider.tilesource.TileSourceFactory
+import org.osmdroid.util.GeoPoint
+import org.osmdroid.util.constants.GeoConstants
+import org.osmdroid.views.CustomZoomButtonsController
+import org.osmdroid.views.overlay.ItemizedIconOverlay.OnItemGestureListener
+import org.osmdroid.views.overlay.ItemizedOverlayWithFocus
+import org.osmdroid.views.overlay.MapEventsOverlay
+import org.osmdroid.views.overlay.Marker
+import org.osmdroid.views.overlay.Overlay
+import org.osmdroid.views.overlay.OverlayItem
+import org.osmdroid.views.overlay.ScaleBarOverlay
+import org.osmdroid.views.overlay.ScaleDiskOverlay
+import org.osmdroid.views.overlay.TilesOverlay
+import timber.log.Timber
+import javax.inject.Inject
+import javax.inject.Named
+
+class ExploreMapFragment : CommonsDaggerSupportFragment(), ExploreMapContract.View,
+ LocationUpdateListener, LocationPermissionCallback {
+ private var bottomSheetDetailsBehavior: BottomSheetBehavior<*>? = null
+ private var broadcastReceiver: BroadcastReceiver? = null
+ private var isNetworkErrorOccurred = false
+ private var snackbar: Snackbar? = null
+ private var isDarkTheme = false
+ private var isPermissionDenied = false
+ private var lastKnownLocation: LatLng? = null // last location of user
+ private var recenterToUserLocation = false // true is recenter is needed (ie. when current location is in visible map boundaries)
+ private var clickedMarker: BaseMarker? = null
+ private var mapCenter: GeoPoint? = null
+ private var lastMapFocus: GeoPoint? = null
+ private var intentFilter: IntentFilter = IntentFilter(MapUtils.NETWORK_INTENT_ACTION)
+ private var baseMarkerOverlayMap: MutableMap? = null
+ private var locationPermissionsHelper: LocationPermissionsHelper? = null
+ private var prevZoom = 0.0
+ private var prevLatitude = 0.0
+ private var prevLongitude = 0.0
+ private var recentlyCameFromNearbyMap = false
+ private var presenter: ExploreMapPresenter? = null
+ private var binding: FragmentExploreMapBinding? = null
+ var mediaList: MutableList? = null
+ private set
+
+ @Inject
+ lateinit var liveDataConverter: LiveDataConverter
+
+ @Inject
+ lateinit var mediaClient: MediaClient
+
+ @Inject
+ lateinit var locationManager: LocationServiceManager
+
+ @Inject
+ lateinit var exploreMapController: ExploreMapController
+
+ @Inject
+ @Named("default_preferences")
+ lateinit var applicationKvStore: JsonKvStore
+
+ @Inject
+ lateinit var bookmarkLocationDao: BookmarkLocationsDao // May be needed in future if we want to integrate bookmarking explore places
+
+ @Inject
+ lateinit var systemThemeUtils: SystemThemeUtils
+
+ private val activityResultLauncher = registerForActivityResult(
+ RequestPermission()
+ ) { isGranted: Boolean? ->
+ if (isGranted == true) {
+ locationPermissionGranted()
+ } else {
+ if (shouldShowRequestPermissionRationale(permission.ACCESS_FINE_LOCATION)) {
+ showAlertDialog(
+ requireActivity(),
+ requireActivity().getString(R.string.location_permission_title),
+ requireActivity().getString(R.string.location_permission_rationale_explore),
+ requireActivity().getString(R.string.ok),
+ requireActivity().getString(R.string.cancel),
+ { askForLocationPermission() },
+ null,
+ null
+ )
+ } else {
+ if (isPermissionDenied) {
+ locationPermissionsHelper!!.showAppSettingsDialog(
+ requireActivity(),
+ R.string.explore_map_needs_location
+ )
+ }
+ Timber.d("The user checked 'Don't ask again' or denied the permission twice")
+ isPermissionDenied = true
+ }
+ }
+ }
+
+ override fun onCreateView(
+ inflater: LayoutInflater,
+ container: ViewGroup?,
+ savedInstanceState: Bundle?
+ ): View {
+ loadNearbyMapData()
+ binding = FragmentExploreMapBinding.inflate(getLayoutInflater())
+ return binding!!.getRoot()
+ }
+
+ override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+ super.onViewCreated(view, savedInstanceState)
+ setSearchThisAreaButtonVisibility(false)
+ binding!!.tvAttribution.text = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
+ Html.fromHtml(getString(R.string.map_attribution), Html.FROM_HTML_MODE_LEGACY)
+ } else {
+ Html.fromHtml(getString(R.string.map_attribution))
+ }
+ initNetworkBroadCastReceiver()
+ locationPermissionsHelper = LocationPermissionsHelper(
+ requireActivity(), locationManager,
+ this
+ )
+ if (presenter == null) {
+ presenter = ExploreMapPresenter(bookmarkLocationDao)
+ }
+ setHasOptionsMenu(true)
+
+ isDarkTheme = systemThemeUtils.isDeviceInNightMode()
+ isPermissionDenied = false
+ presenter!!.attachView(this)
+
+ initViews()
+ presenter!!.setActionListeners(applicationKvStore)
+
+ Configuration.getInstance().load(
+ requireContext(),
+ PreferenceManager.getDefaultSharedPreferences(requireContext())
+ )
+
+ binding!!.mapView.setTileSource(TileSourceFactory.WIKIMEDIA)
+ binding!!.mapView.setTilesScaledToDpi(true)
+
+ Configuration.getInstance().additionalHttpRequestProperties.put(
+ "Referer", "http://maps.wikimedia.org/"
+ )
+
+ val scaleBarOverlay = ScaleBarOverlay(binding!!.mapView)
+ scaleBarOverlay.setScaleBarOffset(15, 25)
+ val barPaint = Paint()
+ barPaint.setARGB(200, 255, 250, 250)
+ scaleBarOverlay.setBackgroundPaint(barPaint)
+ scaleBarOverlay.enableScaleBar()
+ binding!!.mapView.overlays.add(scaleBarOverlay)
+ binding!!.mapView.zoomController
+ .setVisibility(CustomZoomButtonsController.Visibility.NEVER)
+ binding!!.mapView.setMultiTouchControls(true)
+
+ if (!isCameFromNearbyMap) {
+ binding!!.mapView.controller.setZoom(ZOOM_LEVEL.toDouble())
+ }
+
+
+ binding!!.mapView.overlays.add(MapEventsOverlay(object : MapEventsReceiver {
+ override fun singleTapConfirmedHelper(p: GeoPoint?): Boolean {
+ if (clickedMarker != null) {
+ removeMarker(clickedMarker)
+ addMarkerToMap(clickedMarker!!)
+ binding!!.mapView.invalidate()
+ } else {
+ Timber.e("CLICKED MARKER IS NULL")
+ }
+ if (bottomSheetDetailsBehavior!!.getState() == BottomSheetBehavior.STATE_EXPANDED) {
+ // Back should first hide the bottom sheet if it is expanded
+ bottomSheetDetailsBehavior!!.setState(BottomSheetBehavior.STATE_HIDDEN)
+ } else if (isDetailsBottomSheetVisible()) {
+ hideBottomDetailsSheet()
+ }
+ return true
+ }
+
+ override fun longPressHelper(p: GeoPoint?): Boolean = false
+ }))
+
+ binding!!.mapView.addMapListener(object : MapListener {
+ override fun onScroll(event: ScrollEvent): Boolean {
+ if (getLastMapFocus() != null) {
+ val mylocation = Location("")
+ val dest_location = Location("")
+ dest_location.latitude = binding!!.mapView.mapCenter.latitude
+ dest_location.longitude = binding!!.mapView.mapCenter.longitude
+ mylocation.latitude = getLastMapFocus()!!.latitude
+ mylocation.longitude = getLastMapFocus()!!.longitude
+ val distance = mylocation.distanceTo(dest_location) //in meters
+ if (getLastMapFocus() != null) {
+ if (isNetworkConnectionEstablished() && (event.getX() > 0
+ || event.getY() > 0)
+ ) {
+ setSearchThisAreaButtonVisibility(distance > 2000.0)
+ }
+ } else {
+ setSearchThisAreaButtonVisibility(false)
+ }
+ }
+
+ return true
+ }
+
+ override fun onZoom(event: ZoomEvent?): Boolean = false
+ })
+ // removed tha permission check here to prevent it from running on fragment creation
+ }
+
+ override fun onResume() {
+ super.onResume()
+ binding!!.mapView.onResume()
+ presenter!!.attachView(this)
+ locationManager.addLocationListener(this)
+ if (broadcastReceiver != null) {
+ requireActivity().registerReceiver(broadcastReceiver, intentFilter)
+ }
+ setSearchThisAreaButtonVisibility(false)
+ }
+
+ override fun onPause() {
+ super.onPause()
+ // unregistering the broadcastReceiver, as it was causing an exception and a potential crash
+ unregisterNetworkReceiver()
+ locationManager.unregisterLocationManager()
+ locationManager.removeLocationListener(this)
+ }
+
+ fun requestLocationIfNeeded() {
+ if (!isVisible) return // skips if not visible to user
+ if (locationPermissionsHelper!!.checkLocationPermission(requireActivity())) {
+ if (locationPermissionsHelper!!.isLocationAccessToAppsTurnedOn()) {
+ locationManager.registerLocationManager()
+ drawMyLocationMarker()
+ } else {
+ locationPermissionsHelper!!.showLocationOffDialog(requireActivity(), R.string.location_off_dialog_text)
+ }
+ } else {
+ locationPermissionsHelper!!.requestForLocationAccess(
+ R.string.location_permission_title,
+ R.string.location_permission_rationale
+ )
+ }
+ }
+
+ private fun drawMyLocationMarker() {
+ val location = locationManager.getLastLocation()
+ if (location != null) {
+ val geoPoint = GeoPoint(location.latitude, location.longitude)
+ val startMarker = Marker(binding!!.mapView).apply {
+ setPosition(geoPoint)
+ setAnchor(Marker.ANCHOR_CENTER, Marker.ANCHOR_BOTTOM)
+ icon = ContextCompat.getDrawable(requireContext(), R.drawable.current_location_marker)
+ title = "Your Location"
+ textLabelFontSize = 24
+ }
+ binding!!.mapView.overlays.add(startMarker)
+ binding!!.mapView.invalidate()
+ }
+ }
+
+ /**
+ * Unregisters the networkReceiver
+ */
+ private fun unregisterNetworkReceiver() =
+ activity?.unregisterReceiver(broadcastReceiver)
+
+ private fun startMapWithoutPermission() {
+ lastKnownLocation = defaultLatLng
+ moveCameraToPosition(
+ GeoPoint(lastKnownLocation!!.latitude, lastKnownLocation!!.longitude)
+ )
+ presenter!!.onMapReady(exploreMapController)
+ }
+
+ private fun registerNetworkReceiver() =
+ activity?.registerReceiver(broadcastReceiver, intentFilter)
+
+ private fun performMapReadyActions() {
+ if (isDarkTheme) {
+ binding!!.mapView.overlayManager.tilesOverlay.setColorFilter(TilesOverlay.INVERT_COLORS)
+ }
+
+ if (applicationKvStore.getBoolean("doNotAskForLocationPermission", false) &&
+ !locationPermissionsHelper!!.checkLocationPermission(requireActivity())) {
+ isPermissionDenied = true
+ }
+
+ lastKnownLocation = getLastLocation()
+
+ if (lastKnownLocation == null) {
+ lastKnownLocation = defaultLatLng
+ }
+
+ // if we came from 'Show in Explore' in Nearby, load Nearby map center and zoom
+ if (isCameFromNearbyMap) {
+ moveCameraToPosition(
+ GeoPoint(prevLatitude, prevLongitude),
+ prevZoom,
+ 1L
+ )
+ } else {
+ moveCameraToPosition(
+ GeoPoint(lastKnownLocation!!.latitude, lastKnownLocation!!.longitude)
+ )
+ }
+ presenter!!.onMapReady(exploreMapController)
+ }
+
+ /**
+ * Fetch Nearby map camera data from fragment arguments if any.
+ */
+ fun loadNearbyMapData() {
+ // get fragment arguments
+ if (arguments != null) {
+ with (requireArguments()) {
+ prevZoom = getDouble("prev_zoom")
+ prevLatitude = getDouble("prev_latitude")
+ prevLongitude = getDouble("prev_longitude")
+ }
+ }
+
+ setRecentlyCameFromNearbyMap(isCameFromNearbyMap)
+ }
+
+ /**
+ * @return The LatLng from the previous Fragment's map center or (0,0,0) coordinates
+ * if that information is not available/applicable.
+ */
+ val previousLatLng: LatLng
+ get() = LatLng(prevLatitude, prevLongitude, prevZoom.toFloat())
+
+ /**
+ * Checks if fragment arguments contain data from Nearby map, indicating that the user navigated
+ * from Nearby using 'Show in Explore'.
+ *
+ * @return true if user navigated from Nearby map
+ */
+ val isCameFromNearbyMap: Boolean
+ get() = prevZoom != 0.0 || prevLatitude != 0.0 || prevLongitude != 0.0
+
+ /**
+ * Gets the value that indicates if the user navigated from "Show in Explore" in Nearby and
+ * that the LatLng from Nearby has yet to be searched for map markers.
+ */
+ fun recentlyCameFromNearbyMap(): Boolean =
+ recentlyCameFromNearbyMap
+
+ /**
+ * Sets the value that indicates if the user navigated from "Show in Explore" in Nearby and
+ * that the LatLng from Nearby has yet to be searched for map markers.
+ * @param newValue The value to set.
+ */
+ fun setRecentlyCameFromNearbyMap(newValue: Boolean) {
+ recentlyCameFromNearbyMap = newValue
+ }
+
+ fun loadNearbyMapFromExplore() {
+ (requireContext() as MainActivity).loadNearbyMapFromExplore(
+ binding!!.mapView.zoomLevelDouble,
+ binding!!.mapView.mapCenter.latitude,
+ binding!!.mapView.mapCenter.longitude
+ )
+ }
+
+ private fun initViews() {
+ initBottomSheets()
+ setBottomSheetCallbacks()
+ }
+
+ /**
+ * a) Creates bottom sheet behaviours from bottom sheet, sets initial states and visibility
+ * b) Gets the touch event on the map to perform following actions:
+ * if bottom sheet details are expanded or collapsed hide the bottom sheet details.
+ */
+ @SuppressLint("ClickableViewAccessibility")
+ private fun initBottomSheets() {
+ bottomSheetDetailsBehavior = BottomSheetBehavior.from(
+ binding!!.bottomSheetDetailsBinding.getRoot()
+ )
+ bottomSheetDetailsBehavior!!.setState(BottomSheetBehavior.STATE_HIDDEN)
+ binding!!.bottomSheetDetailsBinding.getRoot().visibility = View.VISIBLE
+ }
+
+ /**
+ * Defines how bottom sheets will act on click
+ */
+ private fun setBottomSheetCallbacks() {
+ binding!!.bottomSheetDetailsBinding.getRoot()
+ .setOnClickListener { v: View? ->
+ if (bottomSheetDetailsBehavior!!.getState() == BottomSheetBehavior.STATE_COLLAPSED) {
+ bottomSheetDetailsBehavior!!.setState(BottomSheetBehavior.STATE_EXPANDED)
+ } else if (bottomSheetDetailsBehavior!!.getState()
+ == BottomSheetBehavior.STATE_EXPANDED
+ ) {
+ bottomSheetDetailsBehavior!!.setState(BottomSheetBehavior.STATE_COLLAPSED)
+ }
+ }
+ }
+
+ override fun onLocationChangedSignificantly(latLng: LatLng) =
+ handleLocationUpdate(latLng, LocationChangeType.LOCATION_SIGNIFICANTLY_CHANGED)
+
+ override fun onLocationChangedSlightly(latLng: LatLng) =
+ handleLocationUpdate(latLng, LocationChangeType.LOCATION_SLIGHTLY_CHANGED)
+
+ private fun handleLocationUpdate(
+ latLng: LatLng?,
+ locationChangeType: LocationChangeType
+ ) {
+ lastKnownLocation = latLng
+ exploreMapController.currentLocation = lastKnownLocation
+ presenter!!.updateMap(locationChangeType)
+ }
+
+ override fun onLocationChangedMedium(latLng: LatLng) = Unit
+
+ override fun isNetworkConnectionEstablished(): Boolean =
+ isInternetConnectionEstablished(requireActivity())
+
+ override fun populatePlaces(curlatLng: LatLng?) {
+ val nearbyPlacesInfoObservable: Observable
+ if (curlatLng == null) {
+ return
+ }
+ if (curlatLng.equals(
+ getLastMapFocus()
+ )
+ ) { // Means we are checking around current location
+ nearbyPlacesInfoObservable = presenter!!.loadAttractionsFromLocation(
+ curlatLng,
+ getLastMapFocus(), true
+ )
+ } else {
+ nearbyPlacesInfoObservable = presenter!!.loadAttractionsFromLocation(
+ getLastMapFocus(),
+ curlatLng, false
+ )
+ }
+ compositeDisposable.add(
+ nearbyPlacesInfoObservable
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(
+ Consumer { explorePlacesInfo: ExplorePlacesInfo? ->
+ mediaList = explorePlacesInfo!!.mediaList.toMutableList()
+ if (mediaList!!.isEmpty()) {
+ showResponseMessage(getString(R.string.no_pictures_in_this_area))
+ }
+ updateMapMarkers(explorePlacesInfo)
+ lastMapFocus = GeoPoint(
+ curlatLng.latitude,
+ curlatLng.longitude
+ )
+ },
+ Consumer { throwable: Throwable? ->
+ Timber.d(throwable)
+ // Not showing the user, throwable localizedErrorMessage
+ showErrorMessage(getString(R.string.error_fetching_nearby_places))
+
+ setProgressBarVisibility(false)
+ presenter!!.lockUnlockNearby(false)
+ })
+ )
+ if (recenterToUserLocation) {
+ recenterToUserLocation = false
+ }
+ }
+
+ /**
+ * Updates map markers according to latest situation
+ *
+ * @param explorePlacesInfo holds several information as current location, marker list etc.
+ */
+ private fun updateMapMarkers(explorePlacesInfo: ExplorePlacesInfo) =
+ presenter!!.updateMapMarkers(explorePlacesInfo)
+
+ private fun showErrorMessage(message: String) =
+ showLongToast(requireActivity(), message)
+
+ private fun showResponseMessage(message: String) =
+ showLongSnackbar(requireView(), message)
+
+ override fun askForLocationPermission() {
+ Timber.d("Asking for location permission")
+ activityResultLauncher.launch(permission.ACCESS_FINE_LOCATION)
+ }
+
+ private fun locationPermissionGranted() {
+ isPermissionDenied = false
+ applicationKvStore.putBoolean("doNotAskForLocationPermission", false)
+ lastKnownLocation = locationManager.getLastLocation()
+ val target = lastKnownLocation
+ if (lastKnownLocation != null) {
+ val targetP = GeoPoint(target!!.latitude, target.longitude)
+ mapCenter = targetP
+ binding!!.mapView.controller.setCenter(targetP)
+ recenterMarkerToPosition(targetP)
+ moveCameraToPosition(targetP)
+ } else if (locationManager.isGPSProviderEnabled()
+ || locationManager.isNetworkProviderEnabled()
+ ) {
+ locationManager.requestLocationUpdatesFromProvider(LocationManager.NETWORK_PROVIDER)
+ locationManager.requestLocationUpdatesFromProvider(LocationManager.GPS_PROVIDER)
+ setProgressBarVisibility(true)
+ } else {
+ locationPermissionsHelper!!.showLocationOffDialog(
+ requireActivity(),
+ R.string.ask_to_turn_location_on_text
+ )
+ }
+ presenter!!.onMapReady(exploreMapController)
+ registerUnregisterLocationListener(false)
+ }
+
+ fun registerUnregisterLocationListener(removeLocationListener: Boolean) {
+ MapUtils.registerUnregisterLocationListener(removeLocationListener, locationManager, this)
+ }
+
+ override fun recenterMap(curLatLng: LatLng?) {
+ // if user has denied permission twice, then show dialog
+ if (isPermissionDenied) {
+ if (locationPermissionsHelper!!.checkLocationPermission(requireActivity())) {
+ // this will run when user has given permission by opening app's settings
+ isPermissionDenied = false
+ recenterMap(curLatLng)
+ } else {
+ askForLocationPermission()
+ }
+ } else {
+ if (!locationPermissionsHelper!!.checkLocationPermission(requireActivity())) {
+ askForLocationPermission()
+ } else {
+ locationPermissionGranted()
+ }
+ }
+ if (curLatLng == null) {
+ recenterToUserLocation = true
+ return
+ }
+ recenterMarkerToPosition(
+ GeoPoint(curLatLng.latitude, curLatLng.longitude)
+ )
+ binding!!.mapView.controller.animateTo(
+ GeoPoint(curLatLng.latitude, curLatLng.longitude)
+ )
+ if (lastMapFocus != null) {
+ val mylocation = Location("")
+ val dest_location = Location("")
+ dest_location.latitude = binding!!.mapView.mapCenter.latitude
+ dest_location.longitude = binding!!.mapView.mapCenter.longitude
+ mylocation.latitude = lastMapFocus!!.latitude
+ mylocation.longitude = lastMapFocus!!.longitude
+ val distance = mylocation.distanceTo(dest_location) //in meters
+ if (lastMapFocus != null) {
+ if (isNetworkConnectionEstablished()) {
+ setSearchThisAreaButtonVisibility(distance > 2000.0)
+ }
+ } else {
+ setSearchThisAreaButtonVisibility(false)
+ }
+ }
+ }
+
+ override fun hideBottomDetailsSheet() {
+ bottomSheetDetailsBehavior!!.setState(BottomSheetBehavior.STATE_HIDDEN)
+ }
+
+ /**
+ * Same bottom sheet carries information for all nearby places, so we need to pass information
+ * (title, description, distance and links) to view on nearby marker click
+ *
+ * @param place Place of clicked nearby marker
+ */
+ private fun passInfoToSheet(place: Place) {
+ binding!!.bottomSheetDetailsBinding.directionsButton.setOnClickListener {
+ handleGeoCoordinates(requireActivity(), place.getLocation(), binding!!.mapView.zoomLevelDouble)
+ }
+
+ binding!!.bottomSheetDetailsBinding.commonsButton.visibility = if (place.hasCommonsLink()) View.VISIBLE else View.GONE
+ binding!!.bottomSheetDetailsBinding.commonsButton.setOnClickListener {
+ handleWebUrl(requireContext(), place.siteLinks.commonsLink)
+ }
+
+ var index = 0
+ for (media in mediaList!!) {
+ if (media.filename == place.name) {
+ val finalIndex = index
+ binding!!.bottomSheetDetailsBinding.mediaDetailsButton.setOnClickListener {
+ (parentFragment as ExploreMapRootFragment).onMediaClicked(finalIndex)
+ }
+ }
+ index++
+ }
+ binding!!.bottomSheetDetailsBinding.title.text = place.name.substring(5, place.name.lastIndexOf("."))
+ binding!!.bottomSheetDetailsBinding.category.text = place.distance
+ // Remove label since it is double information
+ var descriptionText = place.longDescription
+ .replace(place.getName() + " (", "")
+ descriptionText = (if (descriptionText == place.longDescription)
+ descriptionText
+ else
+ descriptionText.replaceFirst(".$".toRegex(), ""))
+ // Set the short description after we remove place name from long description
+ binding!!.bottomSheetDetailsBinding.description.text = descriptionText
+ }
+
+ override fun addSearchThisAreaButtonAction() {
+ binding!!.searchThisAreaButton.setOnClickListener(presenter!!.onSearchThisAreaClicked())
+ }
+
+ override fun setSearchThisAreaButtonVisibility(isVisible: Boolean) {
+ binding!!.searchThisAreaButton.visibility = if (isVisible) View.VISIBLE else View.GONE
+ }
+
+ override fun setProgressBarVisibility(isVisible: Boolean) {
+ binding!!.mapProgressBar.visibility = if (isVisible) View.VISIBLE else View.GONE
+ }
+
+ override fun isDetailsBottomSheetVisible(): Boolean =
+ binding!!.bottomSheetDetailsBinding.getRoot().isVisible
+
+ override fun isSearchThisAreaButtonVisible(): Boolean =
+ binding!!.bottomSheetDetailsBinding.getRoot().isVisible
+
+ override fun getLastLocation(): LatLng? {
+ if (lastKnownLocation == null) {
+ lastKnownLocation = locationManager.getLastLocation()
+ }
+ return lastKnownLocation
+ }
+
+ override fun disableFABRecenter() {
+ binding!!.fabRecenter.setEnabled(false)
+ }
+
+ override fun enableFABRecenter() {
+ binding!!.fabRecenter.setEnabled(true)
+ }
+
+ /**
+ * Adds a markers to the map based on the list of NearbyBaseMarker.
+ *
+ * @param nearbyBaseMarkers The NearbyBaseMarker object representing the markers to be added.
+ */
+ override fun addMarkersToMap(nearbyBaseMarkers: List?) {
+ clearAllMarkers()
+ nearbyBaseMarkers?.forEach {
+ addMarkerToMap(it!!)
+ }
+ binding!!.mapView.invalidate()
+ }
+
+ /**
+ * Adds a marker to the map based on the specified NearbyBaseMarker.
+ *
+ * @param nearbyBaseMarker The NearbyBaseMarker object representing the marker to be added.
+ */
+ private fun addMarkerToMap(nearbyBaseMarker: BaseMarker) {
+ if (isAttachedToActivity) {
+ val items = mutableListOf()
+ val d: Drawable = nearbyBaseMarker.icon!!.toDrawable(resources)
+ val point = GeoPoint(
+ nearbyBaseMarker.place.location.latitude,
+ nearbyBaseMarker.place.location.longitude
+ )
+
+ val markerMedia = getMediaFromImageURL(nearbyBaseMarker.place.pic)
+ var authorUser: String? = null
+ if (markerMedia != null) {
+ // HTML text is sometimes part of the author string and needs to be removed
+ authorUser = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
+ Html.fromHtml(markerMedia.getAuthorOrUser(), Html.FROM_HTML_MODE_LEGACY)
+ } else {
+ Html.fromHtml(markerMedia.getAuthorOrUser())
+ }.toString()
+ }
+
+ var title = nearbyBaseMarker.place.name
+ // Remove "File:" if present at start
+ if (title.startsWith("File:")) {
+ title = title.substring(5)
+ }
+ // Remove extensions like .jpg, .jpeg, .png, .svg (case insensitive)
+ title = title.replace("(?i)\\.(jpg|jpeg|png|svg)$".toRegex(), "")
+ title = title.replace("_", " ")
+ //Truncate if too long because it doesn't fit the screen
+ if (title.length > 43) {
+ title = title.substring(0, 40) + "…"
+ }
+
+ val item = OverlayItem(title, authorUser, point)
+ item.setMarker(d)
+ items.add(item)
+ val overlay = ItemizedOverlayWithFocus(
+ items,
+ object : OnItemGestureListener {
+ override fun onItemSingleTapUp(index: Int, item: OverlayItem?): Boolean {
+ val place = nearbyBaseMarker.place
+ if (clickedMarker != null) {
+ removeMarker(clickedMarker)
+ addMarkerToMap(clickedMarker!!)
+ bottomSheetDetailsBehavior!!.setState(BottomSheetBehavior.STATE_HIDDEN)
+ bottomSheetDetailsBehavior!!.setState(BottomSheetBehavior.STATE_COLLAPSED)
+ }
+ clickedMarker = nearbyBaseMarker
+ passInfoToSheet(place)
+
+ //Move the overlay to the top so it can be fully seen.
+ moveOverlayToTop(getOverlay(item))
+ return true
+ }
+
+ override fun onItemLongPress(index: Int, item: OverlayItem?): Boolean = false
+ }, requireContext()
+ )
+
+ if (baseMarkerOverlayMap == null) {
+ baseMarkerOverlayMap = HashMap()
+ }
+ baseMarkerOverlayMap!!.put(nearbyBaseMarker, overlay)
+
+ overlay.setFocusItemsOnTap(true)
+ binding!!.mapView.overlays.add(overlay) // Add the overlay to the map
+ }
+ }
+
+ /**
+ * Moves the specified Overlay above all other Overlays. This prevents other Overlays from
+ * obstructing it. Upon failure, this method returns early.
+ * @param overlay The Overlay to move.
+ */
+ private fun moveOverlayToTop(overlay: Overlay?) {
+ if (overlay == null || binding == null || binding!!.mapView.overlays == null) {
+ return
+ }
+
+ val successfulRemoval = binding!!.mapView.overlays.remove(overlay)
+ if (!successfulRemoval) {
+ return
+ }
+
+ binding!!.mapView.overlays.add(overlay)
+ }
+
+ /**
+ * Performs a linear search for the first Overlay which contains the specified OverlayItem.
+ *
+ * @param item The OverlayItem contained within the first target Overlay.
+ * @return The first Overlay which contains the specified OverlayItem or null if the Overlay
+ * could not be found.
+ */
+ private fun getOverlay(item: OverlayItem?): Overlay? {
+ if (item == null || binding == null || binding!!.mapView.overlays == null) {
+ return null
+ }
+
+ for (i in binding!!.mapView.overlays.indices) {
+ if (binding!!.mapView.overlays[i] is ItemizedOverlayWithFocus<*>) {
+ val overlay = binding!!.mapView.overlays[i] as ItemizedOverlayWithFocus<*>
+
+ for (j in 0.. {
+ setARGB(200, 255, 250, 250)
+ })
+ enableScaleBar()
+ })
+
+ binding!!.mapView.overlays.add(MapEventsOverlay(object : MapEventsReceiver {
+ override fun singleTapConfirmedHelper(p: GeoPoint?): Boolean {
+ if (clickedMarker != null) {
+ removeMarker(clickedMarker)
+ addMarkerToMap(clickedMarker!!)
+ binding!!.mapView.invalidate()
+ } else {
+ Timber.e("CLICKED MARKER IS NULL")
+ }
+ if (bottomSheetDetailsBehavior!!.getState() == BottomSheetBehavior.STATE_EXPANDED) {
+ // Back should first hide the bottom sheet if it is expanded
+ bottomSheetDetailsBehavior!!.setState(BottomSheetBehavior.STATE_HIDDEN)
+ } else if (isDetailsBottomSheetVisible()) {
+ hideBottomDetailsSheet()
+ }
+ return true
+ }
+
+ override fun longPressHelper(p: GeoPoint?): Boolean = false
+ }))
+ binding!!.mapView.setMultiTouchControls(true)
+ }
+ }
+
+ /**
+ * Recenters the map view to the specified GeoPoint and updates the marker to indicate the new
+ * position.
+ *
+ * @param geoPoint The GeoPoint representing the new center position for the map.
+ */
+ private fun recenterMarkerToPosition(geoPoint: GeoPoint?) {
+ if (geoPoint != null) {
+ binding!!.mapView.controller.setCenter(geoPoint)
+ val overlays = binding!!.mapView.overlays
+ // collects the indices of items to remove
+ val indicesToRemove = mutableListOf()
+ for (i in overlays.indices) {
+ if (overlays[i] is Marker || overlays[i] is ScaleDiskOverlay) {
+ indicesToRemove.add(i)
+ }
+ }
+ // removes the items in reverse order to avoid index shifting
+ indicesToRemove.sortedDescending().forEach { index ->
+ binding!!.mapView.overlays.removeAt(index)
+ }
+ val diskOverlay = ScaleDiskOverlay(
+ requireContext(),
+ geoPoint, 2000, GeoConstants.UnitOfMeasure.foot
+ ).apply {
+ setCirclePaint2(Paint().apply {
+ setColor(Color.rgb(128, 128, 128))
+ this.style = Paint.Style.STROKE
+ this.strokeWidth = 2f
+ })
+ setCirclePaint1(Paint().apply {
+ setColor(Color.argb(40, 128, 128, 128))
+ this.style = Paint.Style.FILL_AND_STROKE
+ })
+ setDisplaySizeMin(900)
+ setDisplaySizeMax(1700)
+ }
+ binding!!.mapView.overlays.add(diskOverlay)
+ val startMarker = Marker(
+ binding!!.mapView
+ ).apply {
+ setPosition(geoPoint)
+ setAnchor(Marker.ANCHOR_CENTER, Marker.ANCHOR_BOTTOM)
+ icon = ContextCompat.getDrawable(requireContext(), R.drawable.current_location_marker)
+ title = "Your Location"
+ textLabelFontSize = 24
+ }
+ binding!!.mapView.overlays.add(startMarker)
+ }
+ }
+
+ /**
+ * Moves the camera of the map view to the specified GeoPoint using an animation.
+ *
+ * @param geoPoint The GeoPoint representing the new camera position for the map.
+ */
+ private fun moveCameraToPosition(geoPoint: GeoPoint?) {
+ binding!!.mapView.controller.animateTo(geoPoint)
+ }
+
+ /**
+ * Moves the camera of the map view to the specified GeoPoint at specified zoom level and speed
+ * using an animation.
+ *
+ * @param geoPoint The GeoPoint representing the new camera position for the map.
+ * @param zoom Zoom level of the map camera
+ * @param speed Speed of animation
+ */
+ private fun moveCameraToPosition(geoPoint: GeoPoint?, zoom: Double, speed: Long) {
+ binding!!.mapView.controller.animateTo(geoPoint, zoom, speed)
+ }
+
+ override fun getLastMapFocus(): LatLng? = if (lastMapFocus == null) {
+ getMapCenter()
+ } else {
+ LatLng(lastMapFocus!!.latitude, lastMapFocus!!.longitude, 100f)
+ }
+
+ override fun getMapCenter(): LatLng? = if (mapCenter != null) {
+ LatLng(mapCenter!!.latitude, mapCenter!!.longitude, 100f)
+ } else {
+ if (applicationKvStore.getString("LastLocation") != null) {
+ val locationLatLng: Array =
+ applicationKvStore.getString("LastLocation")!!
+ .split(",".toRegex())
+ .dropLastWhile { it.isEmpty() }
+ .toTypedArray()
+ lastKnownLocation = LatLng(
+ locationLatLng[0]!!.toDouble(),
+ locationLatLng[1]!!.toDouble(), 1f
+ )
+ lastKnownLocation
+ } else {
+ LatLng(51.506255446947776, -0.07483536015053005, 1f)
+ }
+ }
+
+ override fun getMapFocus(): LatLng? = LatLng(
+ binding!!.mapView.mapCenter.latitude,
+ binding!!.mapView.mapCenter.longitude, 100f
+ )
+
+ override fun setFABRecenterAction(onClickListener: View.OnClickListener?) {
+ binding!!.fabRecenter.setOnClickListener(onClickListener)
+ }
+
+ override fun backButtonClicked(): Boolean {
+ if (bottomSheetDetailsBehavior!!.getState() != BottomSheetBehavior.STATE_HIDDEN) {
+ bottomSheetDetailsBehavior!!.setState(BottomSheetBehavior.STATE_HIDDEN)
+ return true
+ } else {
+ return false
+ }
+ }
+
+ /**
+ * Adds network broadcast receiver to recognize connection established
+ */
+ private fun initNetworkBroadCastReceiver() {
+ broadcastReceiver = object : BroadcastReceiver() {
+ override fun onReceive(context: Context?, intent: Intent?) {
+ if (activity != null) {
+ if (isInternetConnectionEstablished(requireActivity())) {
+ if (isNetworkErrorOccurred) {
+ presenter!!.updateMap(LocationChangeType.LOCATION_SIGNIFICANTLY_CHANGED)
+ isNetworkErrorOccurred = false
+ }
+
+ if (snackbar != null) {
+ snackbar!!.dismiss()
+ snackbar = null
+ }
+ } else {
+ if (snackbar == null) {
+ snackbar = Snackbar.make(
+ requireView(), R.string.no_internet,
+ Snackbar.LENGTH_INDEFINITE
+ )
+ setSearchThisAreaButtonVisibility(false)
+ setProgressBarVisibility(false)
+ }
+
+ isNetworkErrorOccurred = true
+ snackbar!!.show()
+ }
+ }
+ }
+ }
+ }
+
+ val isAttachedToActivity: Boolean
+ get() = isVisible && activity != null
+
+ override fun onLocationPermissionDenied(toastMessage: String) = Unit
+
+ override fun onLocationPermissionGranted() {
+ if (locationPermissionsHelper!!.isLocationAccessToAppsTurnedOn()) {
+ locationManager.registerLocationManager()
+ drawMyLocationMarker()
+ } else {
+ locationPermissionsHelper!!.showLocationOffDialog(requireActivity(), R.string.location_off_dialog_text)
+ }
+ onLocationChanged(LocationChangeType.PERMISSION_JUST_GRANTED, null)
+ }
+
+ fun onLocationChanged(locationChangeType: LocationChangeType, location: Location?) {
+ if (locationChangeType == LocationChangeType.PERMISSION_JUST_GRANTED) {
+ val curLatLng = locationManager.getLastLocation() ?: getMapCenter()
+ populatePlaces(curLatLng)
+ } else {
+ presenter!!.updateMap(locationChangeType)
+ }
+ }
+
+ companion object {
+ fun newInstance(): ExploreMapFragment {
+ val fragment = ExploreMapFragment()
+ fragment.setRetainInstance(true)
+ return fragment
+ }
+ }
+}
diff --git a/app/src/main/java/fr/free/nrw/commons/explore/map/ExploreMapPresenter.java b/app/src/main/java/fr/free/nrw/commons/explore/map/ExploreMapPresenter.java
deleted file mode 100644
index 70f785b40..000000000
--- a/app/src/main/java/fr/free/nrw/commons/explore/map/ExploreMapPresenter.java
+++ /dev/null
@@ -1,237 +0,0 @@
-package fr.free.nrw.commons.explore.map;
-
-import static fr.free.nrw.commons.location.LocationServiceManager.LocationChangeType.LOCATION_SIGNIFICANTLY_CHANGED;
-import static fr.free.nrw.commons.location.LocationServiceManager.LocationChangeType.SEARCH_CUSTOM_AREA;
-
-
-import android.location.Location;
-import android.view.View;
-import fr.free.nrw.commons.BaseMarker;
-import fr.free.nrw.commons.MapController;
-import fr.free.nrw.commons.MapController.ExplorePlacesInfo;
-import fr.free.nrw.commons.bookmarks.locations.BookmarkLocationsDao;
-import fr.free.nrw.commons.explore.map.ExploreMapController.NearbyBaseMarkerThumbCallback;
-import fr.free.nrw.commons.kvstore.JsonKvStore;
-import fr.free.nrw.commons.location.LatLng;
-import fr.free.nrw.commons.location.LocationServiceManager.LocationChangeType;
-import fr.free.nrw.commons.nearby.Place;
-import io.reactivex.Observable;
-import java.lang.reflect.Proxy;
-import java.util.List;
-import timber.log.Timber;
-
-public class ExploreMapPresenter
- implements ExploreMapContract.UserActions,
- NearbyBaseMarkerThumbCallback {
-
- BookmarkLocationsDao bookmarkLocationDao;
- private boolean isNearbyLocked;
- private LatLng currentLatLng;
- private ExploreMapController exploreMapController;
-
- private static final ExploreMapContract.View DUMMY = (ExploreMapContract.View) Proxy
- .newProxyInstance(
- ExploreMapContract.View.class.getClassLoader(),
- new Class[]{ExploreMapContract.View.class}, (proxy, method, args) -> {
- if (method.getName().equals("onMyEvent")) {
- return null;
- } else if (String.class == method.getReturnType()) {
- return "";
- } else if (Integer.class == method.getReturnType()) {
- return Integer.valueOf(0);
- } else if (int.class == method.getReturnType()) {
- return 0;
- } else if (Boolean.class == method.getReturnType()) {
- return Boolean.FALSE;
- } else if (boolean.class == method.getReturnType()) {
- return false;
- } else {
- return null;
- }
- }
- );
- private ExploreMapContract.View exploreMapFragmentView = DUMMY;
-
- public ExploreMapPresenter(BookmarkLocationsDao bookmarkLocationDao) {
- this.bookmarkLocationDao = bookmarkLocationDao;
- }
-
- @Override
- public void updateMap(LocationChangeType locationChangeType) {
- Timber.d("Presenter updates map and list" + locationChangeType.toString());
- if (isNearbyLocked) {
- Timber.d("Nearby is locked, so updateMapAndList returns");
- return;
- }
-
- if (!exploreMapFragmentView.isNetworkConnectionEstablished()) {
- Timber.d("Network connection is not established");
- return;
- }
-
- /**
- * Significant changed - Markers and current location will be updated together
- * Slightly changed - Only current position marker will be updated
- */
- if (locationChangeType.equals(LOCATION_SIGNIFICANTLY_CHANGED)) {
- Timber.d("LOCATION_SIGNIFICANTLY_CHANGED");
- LatLng populateLatLng = exploreMapFragmentView.getMapCenter();
-
- //If "Show in Explore" was selected in Nearby, use the previous LatLng
- if (exploreMapFragmentView instanceof ExploreMapFragment) {
- ExploreMapFragment exploreMapFragment = (ExploreMapFragment)exploreMapFragmentView;
- if (exploreMapFragment.recentlyCameFromNearbyMap()) {
- //Ensure this LatLng will not be used again if user searches their GPS location
- exploreMapFragment.setRecentlyCameFromNearbyMap(false);
-
- populateLatLng = exploreMapFragment.getPreviousLatLng();
- }
- }
-
- lockUnlockNearby(true);
- exploreMapFragmentView.setProgressBarVisibility(true);
- exploreMapFragmentView.populatePlaces(populateLatLng);
- } else if (locationChangeType.equals(SEARCH_CUSTOM_AREA)) {
- Timber.d("SEARCH_CUSTOM_AREA");
- lockUnlockNearby(true);
- exploreMapFragmentView.setProgressBarVisibility(true);
- exploreMapFragmentView.populatePlaces(exploreMapFragmentView.getMapFocus());
- } else { // Means location changed slightly, ie user is walking or driving.
- Timber.d("Means location changed slightly");
- }
- }
-
- /**
- * Nearby updates takes time, since they are network operations. During update time, we don't
- * want to get any other calls from user. So locking nearby.
- *
- * @param isNearbyLocked true means lock, false means unlock
- */
- @Override
- public void lockUnlockNearby(boolean isNearbyLocked) {
- this.isNearbyLocked = isNearbyLocked;
- if (isNearbyLocked) {
- exploreMapFragmentView.disableFABRecenter();
- } else {
- exploreMapFragmentView.enableFABRecenter();
- }
- }
-
- @Override
- public void attachView(ExploreMapContract.View view) {
- exploreMapFragmentView = view;
- }
-
- @Override
- public void detachView() {
- exploreMapFragmentView = DUMMY;
- }
-
- /**
- * Sets click listener of FAB
- */
- @Override
- public void setActionListeners(JsonKvStore applicationKvStore) {
- exploreMapFragmentView.setFABRecenterAction(v -> {
- exploreMapFragmentView.recenterMap(currentLatLng);
- });
-
- }
-
- @Override
- public boolean backButtonClicked() {
- return exploreMapFragmentView.backButtonClicked();
- }
-
- public void onMapReady(ExploreMapController exploreMapController) {
- this.exploreMapController = exploreMapController;
- if (null != exploreMapFragmentView) {
- exploreMapFragmentView.addSearchThisAreaButtonAction();
- initializeMapOperations();
- }
- }
-
- public void initializeMapOperations() {
- lockUnlockNearby(false);
- updateMap(LOCATION_SIGNIFICANTLY_CHANGED);
- }
-
- public Observable loadAttractionsFromLocation(LatLng currentLatLng,
- LatLng searchLatLng, boolean checkingAroundCurrent) {
- return Observable
- .fromCallable(() -> exploreMapController
- .loadAttractionsFromLocation(currentLatLng, searchLatLng, checkingAroundCurrent));
- }
-
- /**
- * Populates places for custom location, should be used for finding nearby places around a
- * location where you are not at.
- *
- * @param explorePlacesInfo This variable has placeToCenter list information and distances.
- */
- public void updateMapMarkers(
- MapController.ExplorePlacesInfo explorePlacesInfo) {
- if (explorePlacesInfo.mediaList != null) {
- prepareNearbyBaseMarkers(explorePlacesInfo);
- } else {
- lockUnlockNearby(false); // So that new location updates wont come
- exploreMapFragmentView.setProgressBarVisibility(false);
- }
- }
-
- void prepareNearbyBaseMarkers(MapController.ExplorePlacesInfo explorePlacesInfo) {
- exploreMapController
- .loadAttractionsFromLocationToBaseMarkerOptions(explorePlacesInfo.currentLatLng,
- // Curlatlang will be used to calculate distances
- (List) explorePlacesInfo.explorePlaceList,
- exploreMapFragmentView.getContext(),
- this,
- explorePlacesInfo);
- }
-
- @Override
- public void onNearbyBaseMarkerThumbsReady(List baseMarkers,
- ExplorePlacesInfo explorePlacesInfo) {
- if (null != exploreMapFragmentView) {
- exploreMapFragmentView.addMarkersToMap(baseMarkers);
- lockUnlockNearby(false); // So that new location updates wont come
- exploreMapFragmentView.setProgressBarVisibility(false);
- }
- }
-
- public View.OnClickListener onSearchThisAreaClicked() {
- return v -> {
- // Lock map operations during search this area operation
- exploreMapFragmentView.setSearchThisAreaButtonVisibility(false);
-
- if (searchCloseToCurrentLocation()) {
- updateMap(LOCATION_SIGNIFICANTLY_CHANGED);
- } else {
- updateMap(SEARCH_CUSTOM_AREA);
- }
- };
- }
-
- /**
- * Returns true if search this area button is used around our current location, so that we can
- * continue following our current location again
- *
- * @return Returns true if search this area button is used around our current location
- */
- public boolean searchCloseToCurrentLocation() {
- if (null == exploreMapFragmentView.getLastMapFocus()) {
- return true;
- }
-
- Location mylocation = new Location("");
- Location dest_location = new Location("");
- dest_location.setLatitude(exploreMapFragmentView.getMapFocus().getLatitude());
- dest_location.setLongitude(exploreMapFragmentView.getMapFocus().getLongitude());
- mylocation.setLatitude(exploreMapFragmentView.getLastMapFocus().getLatitude());
- mylocation.setLongitude(exploreMapFragmentView.getLastMapFocus().getLongitude());
- Float distance = mylocation.distanceTo(dest_location);
-
- return !(distance > 2000.0 * 3 / 4);
- }
-
-}
diff --git a/app/src/main/java/fr/free/nrw/commons/explore/map/ExploreMapPresenter.kt b/app/src/main/java/fr/free/nrw/commons/explore/map/ExploreMapPresenter.kt
new file mode 100644
index 000000000..002ff6044
--- /dev/null
+++ b/app/src/main/java/fr/free/nrw/commons/explore/map/ExploreMapPresenter.kt
@@ -0,0 +1,223 @@
+package fr.free.nrw.commons.explore.map
+
+import android.location.Location
+import android.view.View
+import fr.free.nrw.commons.BaseMarker
+import fr.free.nrw.commons.MapController.ExplorePlacesInfo
+import fr.free.nrw.commons.bookmarks.locations.BookmarkLocationsDao
+import fr.free.nrw.commons.explore.map.ExploreMapController.Companion.loadAttractionsFromLocationToBaseMarkerOptions
+import fr.free.nrw.commons.explore.map.ExploreMapController.NearbyBaseMarkerThumbCallback
+import fr.free.nrw.commons.kvstore.JsonKvStore
+import fr.free.nrw.commons.location.LatLng
+import fr.free.nrw.commons.location.LocationServiceManager.LocationChangeType
+import fr.free.nrw.commons.nearby.Place
+import io.reactivex.Observable
+import timber.log.Timber
+import java.lang.reflect.Method
+import java.lang.reflect.Proxy
+import java.util.concurrent.Callable
+
+class ExploreMapPresenter(
+ var bookmarkLocationDao: BookmarkLocationsDao
+) : ExploreMapContract.UserActions, NearbyBaseMarkerThumbCallback {
+
+ private var isNearbyLocked = false
+ private val currentLatLng: LatLng? = null
+ private var exploreMapController: ExploreMapController? = null
+ private var exploreMapFragmentView: ExploreMapContract.View? = DUMMY
+
+ override fun updateMap(locationChangeType: LocationChangeType) {
+ Timber.d("Presenter updates map and list$locationChangeType")
+ if (isNearbyLocked) {
+ Timber.d("Nearby is locked, so updateMapAndList returns")
+ return
+ }
+
+ if (!exploreMapFragmentView!!.isNetworkConnectionEstablished()) {
+ Timber.d("Network connection is not established")
+ return
+ }
+
+ /**
+ * Significant changed - Markers and current location will be updated together
+ * Slightly changed - Only current position marker will be updated
+ */
+ if (locationChangeType == LocationChangeType.LOCATION_SIGNIFICANTLY_CHANGED) {
+ Timber.d("LOCATION_SIGNIFICANTLY_CHANGED")
+ var populateLatLng = exploreMapFragmentView!!.getMapCenter()
+
+ //If "Show in Explore" was selected in Nearby, use the previous LatLng
+ if (exploreMapFragmentView is ExploreMapFragment) {
+ val exploreMapFragment = exploreMapFragmentView as ExploreMapFragment
+ if (exploreMapFragment.recentlyCameFromNearbyMap()) {
+ //Ensure this LatLng will not be used again if user searches their GPS location
+ exploreMapFragment.setRecentlyCameFromNearbyMap(false)
+
+ populateLatLng = exploreMapFragment.previousLatLng
+ }
+ }
+
+ lockUnlockNearby(true)
+ exploreMapFragmentView!!.setProgressBarVisibility(true)
+ exploreMapFragmentView!!.populatePlaces(populateLatLng)
+ } else if (locationChangeType == LocationChangeType.SEARCH_CUSTOM_AREA) {
+ Timber.d("SEARCH_CUSTOM_AREA")
+ lockUnlockNearby(true)
+ exploreMapFragmentView!!.setProgressBarVisibility(true)
+ exploreMapFragmentView!!.populatePlaces(exploreMapFragmentView!!.getMapFocus())
+ } else { // Means location changed slightly, ie user is walking or driving.
+ Timber.d("Means location changed slightly")
+ }
+ }
+
+ /**
+ * Nearby updates takes time, since they are network operations. During update time, we don't
+ * want to get any other calls from user. So locking nearby.
+ *
+ * @param isNearbyLocked true means lock, false means unlock
+ */
+ override fun lockUnlockNearby(isNearbyLocked: Boolean) {
+ this.isNearbyLocked = isNearbyLocked
+ if (isNearbyLocked) {
+ exploreMapFragmentView!!.disableFABRecenter()
+ } else {
+ exploreMapFragmentView!!.enableFABRecenter()
+ }
+ }
+
+ override fun attachView(view: ExploreMapContract.View?) {
+ exploreMapFragmentView = view
+ }
+
+ override fun detachView() {
+ exploreMapFragmentView = DUMMY
+ }
+
+ /**
+ * Sets click listener of FAB
+ */
+ override fun setActionListeners(applicationKvStore: JsonKvStore?) {
+ exploreMapFragmentView!!.setFABRecenterAction {
+ exploreMapFragmentView!!.recenterMap(currentLatLng)
+ }
+ }
+
+ override fun backButtonClicked(): Boolean =
+ exploreMapFragmentView!!.backButtonClicked()
+
+ fun onMapReady(exploreMapController: ExploreMapController?) {
+ this.exploreMapController = exploreMapController
+ if (null != exploreMapFragmentView) {
+ exploreMapFragmentView!!.addSearchThisAreaButtonAction()
+ initializeMapOperations()
+ }
+ }
+
+ fun initializeMapOperations() {
+ lockUnlockNearby(false)
+ updateMap(LocationChangeType.LOCATION_SIGNIFICANTLY_CHANGED)
+ }
+
+ fun loadAttractionsFromLocation(
+ currentLatLng: LatLng?,
+ searchLatLng: LatLng?, checkingAroundCurrent: Boolean
+ ): Observable = Observable.fromCallable(Callable {
+ exploreMapController!!.loadAttractionsFromLocation(
+ currentLatLng,
+ searchLatLng,
+ checkingAroundCurrent
+ )
+ })
+
+ /**
+ * Populates places for custom location, should be used for finding nearby places around a
+ * location where you are not at.
+ *
+ * @param explorePlacesInfo This variable has placeToCenter list information and distances.
+ */
+ fun updateMapMarkers(
+ explorePlacesInfo: ExplorePlacesInfo
+ ) {
+ if (explorePlacesInfo.mediaList != null) {
+ prepareNearbyBaseMarkers(explorePlacesInfo)
+ } else {
+ lockUnlockNearby(false) // So that new location updates wont come
+ exploreMapFragmentView!!.setProgressBarVisibility(false)
+ }
+ }
+
+ private fun prepareNearbyBaseMarkers(explorePlacesInfo: ExplorePlacesInfo) {
+ loadAttractionsFromLocationToBaseMarkerOptions(
+ explorePlacesInfo.currentLatLng, // Curlatlang will be used to calculate distances
+ explorePlacesInfo.explorePlaceList,
+ exploreMapFragmentView!!.getContext()!!,
+ this,
+ explorePlacesInfo
+ )
+ }
+
+ override fun onNearbyBaseMarkerThumbsReady(
+ baseMarkers: List?,
+ explorePlacesInfo: ExplorePlacesInfo?
+ ) {
+ if (null != exploreMapFragmentView) {
+ exploreMapFragmentView!!.addMarkersToMap(baseMarkers)
+ lockUnlockNearby(false) // So that new location updates wont come
+ exploreMapFragmentView!!.setProgressBarVisibility(false)
+ }
+ }
+
+ fun onSearchThisAreaClicked(): View.OnClickListener {
+ return View.OnClickListener {
+ // Lock map operations during search this area operation
+ exploreMapFragmentView!!.setSearchThisAreaButtonVisibility(false)
+ updateMap(if (searchCloseToCurrentLocation()) {
+ LocationChangeType.LOCATION_SIGNIFICANTLY_CHANGED
+ } else {
+ LocationChangeType.SEARCH_CUSTOM_AREA
+ })
+ }
+ }
+
+ /**
+ * Returns true if search this area button is used around our current location, so that we can
+ * continue following our current location again
+ *
+ * @return Returns true if search this area button is used around our current location
+ */
+ private fun searchCloseToCurrentLocation(): Boolean {
+ if (null == exploreMapFragmentView!!.getLastMapFocus()) {
+ return true
+ }
+
+ val mylocation = Location("").apply {
+ latitude = exploreMapFragmentView!!.getLastMapFocus()!!.latitude
+ longitude = exploreMapFragmentView!!.getLastMapFocus()!!.longitude
+ }
+ val dest_location = Location("").apply {
+ latitude = exploreMapFragmentView!!.getMapFocus()!!.latitude
+ longitude = exploreMapFragmentView!!.getMapFocus()!!.longitude
+ }
+
+ val distance = mylocation.distanceTo(dest_location)
+
+ return !(distance > 2000.0 * 3 / 4)
+ }
+
+ companion object {
+ private val DUMMY = Proxy.newProxyInstance(
+ ExploreMapContract.View::class.java.classLoader,
+ arrayOf>(ExploreMapContract.View::class.java)
+ ) { _: Any?, method: Method, _: Array? ->
+ when {
+ method.name == "onMyEvent" -> null
+ String::class.java == method.returnType -> ""
+ Int::class.java == method.returnType -> 0
+ Int::class.javaPrimitiveType == method.returnType -> 0
+ Boolean::class.java == method.returnType -> java.lang.Boolean.FALSE
+ Boolean::class.javaPrimitiveType == method.returnType -> false
+ else -> null
+ }
+ } as ExploreMapContract.View
+ }
+}
diff --git a/app/src/main/java/fr/free/nrw/commons/explore/recentsearches/RecentSearchesContentProvider.java b/app/src/main/java/fr/free/nrw/commons/explore/recentsearches/RecentSearchesContentProvider.java
deleted file mode 100644
index ab6dd7b05..000000000
--- a/app/src/main/java/fr/free/nrw/commons/explore/recentsearches/RecentSearchesContentProvider.java
+++ /dev/null
@@ -1,202 +0,0 @@
-package fr.free.nrw.commons.explore.recentsearches;
-
-import android.content.ContentValues;
-import android.content.UriMatcher;
-import android.database.Cursor;
-import android.database.sqlite.SQLiteDatabase;
-import android.database.sqlite.SQLiteQueryBuilder;
-import android.net.Uri;
-import android.text.TextUtils;
-
-import androidx.annotation.NonNull;
-
-import javax.inject.Inject;
-
-import fr.free.nrw.commons.BuildConfig;
-import fr.free.nrw.commons.data.DBOpenHelper;
-import fr.free.nrw.commons.di.CommonsDaggerContentProvider;
-import timber.log.Timber;
-
-import static android.content.UriMatcher.NO_MATCH;
-import static fr.free.nrw.commons.explore.recentsearches.RecentSearchesDao.Table.ALL_FIELDS;
-import static fr.free.nrw.commons.explore.recentsearches.RecentSearchesDao.Table.COLUMN_ID;
-import static fr.free.nrw.commons.explore.recentsearches.RecentSearchesDao.Table.TABLE_NAME;
-
-
-/**
- * This class contains functions for executing queries for
- * inserting, searching, deleting, editing recent searches in SqLite DB
- **/
-public class RecentSearchesContentProvider extends CommonsDaggerContentProvider {
-
- // For URI matcher
- private static final int RECENT_SEARCHES = 1;
- private static final int RECENT_SEARCHES_ID = 2;
- private static final String BASE_PATH = "recent_searches";
- public static final Uri BASE_URI = Uri.parse("content://" + BuildConfig.RECENT_SEARCH_AUTHORITY + "/" + BASE_PATH);
- private static final UriMatcher uriMatcher = new UriMatcher(NO_MATCH);
-
- static {
- uriMatcher.addURI(BuildConfig.RECENT_SEARCH_AUTHORITY, BASE_PATH, RECENT_SEARCHES);
- uriMatcher.addURI(BuildConfig.RECENT_SEARCH_AUTHORITY, BASE_PATH + "/#", RECENT_SEARCHES_ID);
- }
-
- public static Uri uriForId(int id) {
- return Uri.parse(BASE_URI.toString() + "/" + id);
- }
-
- @Inject DBOpenHelper dbOpenHelper;
-
- /**
- * This functions executes query for searching recent searches in SqLite DB
- **/
- @SuppressWarnings("ConstantConditions")
- @Override
- public Cursor query(@NonNull Uri uri, String[] projection, String selection,
- String[] selectionArgs, String sortOrder) {
- SQLiteQueryBuilder queryBuilder = new SQLiteQueryBuilder();
- queryBuilder.setTables(TABLE_NAME);
-
- int uriType = uriMatcher.match(uri);
-
- SQLiteDatabase db = dbOpenHelper.getReadableDatabase();
- Cursor cursor;
-
- switch (uriType) {
- case RECENT_SEARCHES:
- cursor = queryBuilder.query(db, projection, selection, selectionArgs,
- null, null, sortOrder);
- break;
- case RECENT_SEARCHES_ID:
- cursor = queryBuilder.query(db,
- ALL_FIELDS,
- "_id = ?",
- new String[]{uri.getLastPathSegment()},
- null,
- null,
- sortOrder
- );
- break;
- default:
- throw new IllegalArgumentException("Unknown URI" + uri);
- }
-
- cursor.setNotificationUri(getContext().getContentResolver(), uri);
-
- return cursor;
- }
-
- @Override
- public String getType(@NonNull Uri uri) {
- return null;
- }
-
- /**
- * This functions executes query for inserting a recentSearch object in SqLite DB
- **/
- @SuppressWarnings("ConstantConditions")
- @Override
- public Uri insert(@NonNull Uri uri, ContentValues contentValues) {
- int uriType = uriMatcher.match(uri);
- SQLiteDatabase sqlDB = dbOpenHelper.getWritableDatabase();
- long id;
- switch (uriType) {
- case RECENT_SEARCHES:
- id = sqlDB.insert(TABLE_NAME, null, contentValues);
- break;
- default:
- throw new IllegalArgumentException("Unknown URI: " + uri);
- }
- getContext().getContentResolver().notifyChange(uri, null);
- return Uri.parse(BASE_URI + "/" + id);
- }
-
- /**
- * This functions executes query for deleting a recentSearch object in SqLite DB
- **/
- @Override
- public int delete(@NonNull Uri uri, String s, String[] strings) {
- int rows;
- int uriType = uriMatcher.match(uri);
- SQLiteDatabase db = dbOpenHelper.getReadableDatabase();
- switch (uriType) {
- case RECENT_SEARCHES_ID:
- Timber.d("Deleting recent searches id %s", uri.getLastPathSegment());
- rows = db.delete(RecentSearchesDao.Table.TABLE_NAME,
- "_id = ?",
- new String[]{uri.getLastPathSegment()}
- );
- break;
- default:
- throw new IllegalArgumentException("Unknown URI" + uri);
- }
- getContext().getContentResolver().notifyChange(uri, null);
- return rows;
- }
-
- /**
- * This functions executes query for inserting multiple recentSearch objects in SqLite DB
- **/
- @SuppressWarnings("ConstantConditions")
- @Override
- public int bulkInsert(@NonNull Uri uri, @NonNull ContentValues[] values) {
- Timber.d("Hello, bulk insert! (RecentSearchesContentProvider)");
- int uriType = uriMatcher.match(uri);
- SQLiteDatabase sqlDB = dbOpenHelper.getWritableDatabase();
- sqlDB.beginTransaction();
- switch (uriType) {
- case RECENT_SEARCHES:
- for (ContentValues value : values) {
- Timber.d("Inserting! %s", value);
- sqlDB.insert(TABLE_NAME, null, value);
- }
- break;
- default:
- throw new IllegalArgumentException("Unknown URI: " + uri);
- }
- sqlDB.setTransactionSuccessful();
- sqlDB.endTransaction();
- getContext().getContentResolver().notifyChange(uri, null);
- return values.length;
- }
-
- /**
- * This functions executes query for updating a particular recentSearch object in SqLite DB
- **/
- @SuppressWarnings("ConstantConditions")
- @Override
- public int update(@NonNull Uri uri, ContentValues contentValues, String selection,
- String[] selectionArgs) {
- /*
- SQL Injection warnings: First, note that we're not exposing this to the
- outside world (exported="false"). Even then, we should make sure to sanitize
- all user input appropriately. Input that passes through ContentValues
- should be fine. So only issues are those that pass in via concating.
-
- In here, the only concat created argument is for id. It is cast to an int,
- and will error out otherwise.
- */
- int uriType = uriMatcher.match(uri);
- SQLiteDatabase sqlDB = dbOpenHelper.getWritableDatabase();
- int rowsUpdated;
- switch (uriType) {
- case RECENT_SEARCHES_ID:
- if (TextUtils.isEmpty(selection)) {
- int id = Integer.valueOf(uri.getLastPathSegment());
- rowsUpdated = sqlDB.update(TABLE_NAME,
- contentValues,
- COLUMN_ID + " = ?",
- new String[]{String.valueOf(id)});
- } else {
- throw new IllegalArgumentException(
- "Parameter `selection` should be empty when updating an ID");
- }
- break;
- default:
- throw new IllegalArgumentException("Unknown URI: " + uri + " with type " + uriType);
- }
- getContext().getContentResolver().notifyChange(uri, null);
- return rowsUpdated;
- }
-}
-
diff --git a/app/src/main/java/fr/free/nrw/commons/explore/recentsearches/RecentSearchesContentProvider.kt b/app/src/main/java/fr/free/nrw/commons/explore/recentsearches/RecentSearchesContentProvider.kt
new file mode 100644
index 000000000..c18f101ae
--- /dev/null
+++ b/app/src/main/java/fr/free/nrw/commons/explore/recentsearches/RecentSearchesContentProvider.kt
@@ -0,0 +1,174 @@
+package fr.free.nrw.commons.explore.recentsearches
+
+import android.content.ContentValues
+import android.content.UriMatcher
+import android.database.Cursor
+import android.database.sqlite.SQLiteQueryBuilder
+import android.net.Uri
+import androidx.core.net.toUri
+import fr.free.nrw.commons.BuildConfig
+import fr.free.nrw.commons.di.CommonsDaggerContentProvider
+import fr.free.nrw.commons.explore.recentsearches.RecentSearchesTable.ALL_FIELDS
+import fr.free.nrw.commons.explore.recentsearches.RecentSearchesTable.COLUMN_ID
+import fr.free.nrw.commons.explore.recentsearches.RecentSearchesTable.TABLE_NAME
+
+/**
+ * This class contains functions for executing queries for
+ * inserting, searching, deleting, editing recent searches in SqLite DB
+ */
+class RecentSearchesContentProvider : CommonsDaggerContentProvider() {
+
+ /**
+ * This functions executes query for searching recent searches in SqLite DB
+ */
+ override fun query(
+ uri: Uri, projection: Array?, selection: String?,
+ selectionArgs: Array?, sortOrder: String?
+ ): Cursor {
+ val queryBuilder = SQLiteQueryBuilder().apply {
+ tables = TABLE_NAME
+ }
+
+ val uriType = uriMatcher.match(uri)
+
+ val cursor = when (uriType) {
+ RECENT_SEARCHES -> queryBuilder.query(
+ requireDb(), projection, selection, selectionArgs,
+ null, null, sortOrder
+ )
+
+ RECENT_SEARCHES_ID -> queryBuilder.query(
+ requireDb(),
+ ALL_FIELDS,
+ "$COLUMN_ID = ?",
+ arrayOf(uri.lastPathSegment),
+ null,
+ null,
+ sortOrder
+ )
+
+ else -> throw IllegalArgumentException("Unknown URI$uri")
+ }
+
+ cursor.setNotificationUri(context?.contentResolver, uri)
+
+ return cursor
+ }
+
+ override fun getType(uri: Uri): String? = null
+
+ /**
+ * This functions executes query for inserting a recentSearch object in SqLite DB
+ */
+ override fun insert(uri: Uri, contentValues: ContentValues?): Uri? {
+ val uriType = uriMatcher.match(uri)
+ val id: Long = when (uriType) {
+ RECENT_SEARCHES -> requireDb().insert(TABLE_NAME, null, contentValues)
+
+ else -> throw IllegalArgumentException("Unknown URI: $uri")
+ }
+ context?.contentResolver?.notifyChange(uri, null)
+ return "$BASE_URI/$id".toUri()
+ }
+
+ /**
+ * This functions executes query for deleting a recentSearch object in SqLite DB
+ */
+ override fun delete(uri: Uri, s: String?, strings: Array?): Int {
+ val rows: Int
+ val uriType = uriMatcher.match(uri)
+ when (uriType) {
+ RECENT_SEARCHES_ID -> {
+ rows = requireDb().delete(
+ TABLE_NAME,
+ "_id = ?",
+ arrayOf(uri.lastPathSegment)
+ )
+ }
+
+ else -> throw IllegalArgumentException("Unknown URI - $uri")
+ }
+ context?.contentResolver?.notifyChange(uri, null)
+ return rows
+ }
+
+ /**
+ * This functions executes query for inserting multiple recentSearch objects in SqLite DB
+ */
+ override fun bulkInsert(uri: Uri, values: Array): Int {
+ val uriType = uriMatcher.match(uri)
+ val sqlDB = requireDb()
+ sqlDB.beginTransaction()
+ when (uriType) {
+ RECENT_SEARCHES -> for (value in values) {
+ sqlDB.insert(TABLE_NAME, null, value)
+ }
+
+ else -> throw IllegalArgumentException("Unknown URI: $uri")
+ }
+ sqlDB.setTransactionSuccessful()
+ sqlDB.endTransaction()
+ context?.contentResolver?.notifyChange(uri, null)
+ return values.size
+ }
+
+ /**
+ * This functions executes query for updating a particular recentSearch object in SqLite DB
+ */
+ override fun update(
+ uri: Uri, contentValues: ContentValues?, selection: String?,
+ selectionArgs: Array?
+ ): Int {
+ /*
+ SQL Injection warnings: First, note that we're not exposing this to the
+ outside world (exported="false"). Even then, we should make sure to sanitize
+ all user input appropriately. Input that passes through ContentValues
+ should be fine. So only issues are those that pass in via concating.
+
+ In here, the only concat created argument is for id. It is cast to an int,
+ and will error out otherwise.
+ */
+ val uriType = uriMatcher.match(uri)
+ val rowsUpdated: Int
+ when (uriType) {
+ RECENT_SEARCHES_ID -> if (selection.isNullOrEmpty()) {
+ val id = uri.lastPathSegment!!.toInt()
+ rowsUpdated = requireDb().update(
+ TABLE_NAME,
+ contentValues,
+ "$COLUMN_ID = ?",
+ arrayOf(id.toString())
+ )
+ } else {
+ throw IllegalArgumentException(
+ "Parameter `selection` should be empty when updating an ID"
+ )
+ }
+
+ else -> throw IllegalArgumentException("Unknown URI: $uri with type $uriType")
+ }
+ context?.contentResolver?.notifyChange(uri, null)
+ return rowsUpdated
+ }
+
+ companion object {
+ // For URI matcher
+ private const val RECENT_SEARCHES = 1
+ private const val RECENT_SEARCHES_ID = 2
+ private const val BASE_PATH = "recent_searches"
+
+ @JvmField
+ val BASE_URI: Uri = "content://${BuildConfig.RECENT_SEARCH_AUTHORITY}/$BASE_PATH".toUri()
+
+ private val uriMatcher = UriMatcher(UriMatcher.NO_MATCH)
+
+ init {
+ uriMatcher.addURI(BuildConfig.RECENT_SEARCH_AUTHORITY, BASE_PATH, RECENT_SEARCHES)
+ uriMatcher.addURI(BuildConfig.RECENT_SEARCH_AUTHORITY, "$BASE_PATH/#", RECENT_SEARCHES_ID)
+ }
+
+ @JvmStatic
+ fun uriForId(id: Int): Uri = "$BASE_URI/$id".toUri()
+ }
+}
+
diff --git a/app/src/main/java/fr/free/nrw/commons/explore/recentsearches/RecentSearchesDao.java b/app/src/main/java/fr/free/nrw/commons/explore/recentsearches/RecentSearchesDao.java
deleted file mode 100644
index cee8a25ae..000000000
--- a/app/src/main/java/fr/free/nrw/commons/explore/recentsearches/RecentSearchesDao.java
+++ /dev/null
@@ -1,275 +0,0 @@
-package fr.free.nrw.commons.explore.recentsearches;
-
-import android.annotation.SuppressLint;
-import android.content.ContentProviderClient;
-import android.content.ContentValues;
-import android.database.Cursor;
-import android.database.sqlite.SQLiteDatabase;
-import android.os.RemoteException;
-
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
-
-import fr.free.nrw.commons.explore.models.RecentSearch;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-
-import javax.inject.Inject;
-import javax.inject.Named;
-import javax.inject.Provider;
-
-import timber.log.Timber;
-
-/**
- * This class doesn't execute queries in database directly instead it contains the logic behind
- * inserting, deleting, searching data from recent searches database.
- **/
-public class RecentSearchesDao {
-
- private final Provider clientProvider;
-
- @Inject
- public RecentSearchesDao(@Named("recentsearch") Provider clientProvider) {
- this.clientProvider = clientProvider;
- }
-
- /**
- * This method is called on click of media/ categories for storing them in recent searches
- * @param recentSearch a recent searches object that is to be added in SqLite DB
- */
- public void save(RecentSearch recentSearch) {
- ContentProviderClient db = clientProvider.get();
- try {
- if (recentSearch.getContentUri() == null) {
- recentSearch.setContentUri(db.insert(RecentSearchesContentProvider.BASE_URI, toContentValues(recentSearch)));
- } else {
- db.update(recentSearch.getContentUri(), toContentValues(recentSearch), null, null);
- }
- } catch (RemoteException e) {
- throw new RuntimeException(e);
- } finally {
- db.release();
- }
- }
-
- /**
- * This method is called on confirmation of delete recent searches.
- * It deletes all recent searches from the database
- */
- public void deleteAll() {
- Cursor cursor = null;
- ContentProviderClient db = clientProvider.get();
- try {
- cursor = db.query(
- RecentSearchesContentProvider.BASE_URI,
- Table.ALL_FIELDS,
- null,
- new String[]{},
- Table.COLUMN_LAST_USED + " DESC"
- );
- while (cursor != null && cursor.moveToNext()) {
- try {
- RecentSearch recentSearch = find(fromCursor(cursor).getQuery());
- if (recentSearch.getContentUri() == null) {
- throw new RuntimeException("tried to delete item with no content URI");
- } else {
- Timber.d("QUERY_NAME %s - delete tried", recentSearch.getContentUri());
- db.delete(recentSearch.getContentUri(), null, null);
- Timber.d("QUERY_NAME %s - query deleted", recentSearch.getQuery());
- }
- } catch (RemoteException e) {
- Timber.e(e, "query deleted");
- throw new RuntimeException(e);
- } finally {
- db.release();
- }
- }
- } catch (RemoteException e) {
- throw new RuntimeException(e);
- } finally {
- if (cursor != null) {
- cursor.close();
- }
- }
- }
-
- /**
- * Deletes a recent search from the database
- */
- public void delete(RecentSearch recentSearch) {
-
- ContentProviderClient db = clientProvider.get();
- try {
- if (recentSearch.getContentUri() == null) {
- throw new RuntimeException("tried to delete item with no content URI");
- } else {
- db.delete(recentSearch.getContentUri(), null, null);
- }
- } catch (RemoteException e) {
- throw new RuntimeException(e);
- } finally {
- db.release();
- }
- }
-
-
- /**
- * Find persisted search query in database, based on its name.
- * @param name Search query Ex- "butterfly"
- * @return recently searched query from database, or null if not found
- */
- @Nullable
- public RecentSearch find(String name) {
- Cursor cursor = null;
- ContentProviderClient db = clientProvider.get();
- try {
- cursor = db.query(
- RecentSearchesContentProvider.BASE_URI,
- Table.ALL_FIELDS,
- Table.COLUMN_NAME + "=?",
- new String[]{name},
- null);
- if (cursor != null && cursor.moveToFirst()) {
- return fromCursor(cursor);
- }
- } catch (RemoteException e) {
- // This feels lazy, but to hell with checked exceptions. :)
- throw new RuntimeException(e);
- } finally {
- if (cursor != null) {
- cursor.close();
- }
- db.release();
- }
- return null;
- }
-
- /**
- * Retrieve recently-searched queries, ordered by descending date.
- * @return a list containing recent searches
- */
- @NonNull
- public List recentSearches(int limit) {
- List items = new ArrayList<>();
- Cursor cursor = null;
- ContentProviderClient db = clientProvider.get();
- try {
- cursor = db.query( RecentSearchesContentProvider.BASE_URI, Table.ALL_FIELDS,
- null, new String[]{}, Table.COLUMN_LAST_USED + " DESC");
- // fixme add a limit on the original query instead of falling out of the loop?
- while (cursor != null && cursor.moveToNext() && cursor.getPosition() < limit) {
- items.add(fromCursor(cursor).getQuery());
- }
- } catch (RemoteException e) {
- throw new RuntimeException(e);
- } finally {
- if (cursor != null) {
- cursor.close();
- }
- db.release();
- }
- return items;
- }
-
-
- /**
- * It creates an Recent Searches object from data stored in the SQLite DB by using cursor
- * @param cursor
- * @return RecentSearch object
- */
- @NonNull
- @SuppressLint("Range")
- RecentSearch fromCursor(Cursor cursor) {
- // Hardcoding column positions!
- return new RecentSearch(
- RecentSearchesContentProvider.uriForId(cursor.getInt(cursor.getColumnIndex(Table.COLUMN_ID))),
- cursor.getString(cursor.getColumnIndex(Table.COLUMN_NAME)),
- new Date(cursor.getLong(cursor.getColumnIndex(Table.COLUMN_LAST_USED)))
- );
- }
-
- /**
- * This class contains the database table architechture for recent searches,
- * It also contains queries and logic necessary to the create, update, delete this table.
- */
- private ContentValues toContentValues(RecentSearch recentSearch) {
- ContentValues cv = new ContentValues();
- cv.put(RecentSearchesDao.Table.COLUMN_NAME, recentSearch.getQuery());
- cv.put(RecentSearchesDao.Table.COLUMN_LAST_USED, recentSearch.getLastSearched().getTime());
- return cv;
- }
-
- /**
- * This class contains the database table architechture for recent searches,
- * It also contains queries and logic necessary to the create, update, delete this table.
- */
- public static class Table {
- public static final String TABLE_NAME = "recent_searches";
- public static final String COLUMN_ID = "_id";
- static final String COLUMN_NAME = "name";
- static final String COLUMN_LAST_USED = "last_used";
-
- // NOTE! KEEP IN SAME ORDER AS THEY ARE DEFINED UP THERE. HELPS HARD CODE COLUMN INDICES.
- public static final String[] ALL_FIELDS = {
- COLUMN_ID,
- COLUMN_NAME,
- COLUMN_LAST_USED,
- };
-
- static final String DROP_TABLE_STATEMENT = "DROP TABLE IF EXISTS " + TABLE_NAME;
-
- static final String CREATE_TABLE_STATEMENT = "CREATE TABLE " + TABLE_NAME + " ("
- + COLUMN_ID + " INTEGER PRIMARY KEY,"
- + COLUMN_NAME + " STRING,"
- + COLUMN_LAST_USED + " INTEGER"
- + ");";
-
- /**
- * This method creates a RecentSearchesTable in SQLiteDatabase
- * @param db SQLiteDatabase
- */
- public static void onCreate(SQLiteDatabase db) {
- db.execSQL(CREATE_TABLE_STATEMENT);
- }
-
- /**
- * This method deletes RecentSearchesTable from SQLiteDatabase
- * @param db SQLiteDatabase
- */
- public static void onDelete(SQLiteDatabase db) {
- db.execSQL(DROP_TABLE_STATEMENT);
- onCreate(db);
- }
-
- /**
- * This method is called on migrating from a older version to a newer version
- * @param db SQLiteDatabase
- * @param from Version from which we are migrating
- * @param to Version to which we are migrating
- */
- public static void onUpdate(SQLiteDatabase db, int from, int to) {
- if (from == to) {
- return;
- }
- if (from < 6) {
- // doesn't exist yet
- from++;
- onUpdate(db, from, to);
- return;
- }
- if (from == 6) {
- // table added in version 7
- onCreate(db);
- from++;
- onUpdate(db, from, to);
- return;
- }
- if (from == 7) {
- from++;
- onUpdate(db, from, to);
- return;
- }
- }
- }
-}
diff --git a/app/src/main/java/fr/free/nrw/commons/explore/recentsearches/RecentSearchesDao.kt b/app/src/main/java/fr/free/nrw/commons/explore/recentsearches/RecentSearchesDao.kt
new file mode 100644
index 000000000..d16d250dd
--- /dev/null
+++ b/app/src/main/java/fr/free/nrw/commons/explore/recentsearches/RecentSearchesDao.kt
@@ -0,0 +1,188 @@
+package fr.free.nrw.commons.explore.recentsearches
+
+import android.annotation.SuppressLint
+import android.content.ContentProviderClient
+import android.content.ContentValues
+import android.database.Cursor
+import android.os.RemoteException
+import androidx.core.content.contentValuesOf
+import fr.free.nrw.commons.explore.models.RecentSearch
+import fr.free.nrw.commons.explore.recentsearches.RecentSearchesContentProvider.Companion.BASE_URI
+import fr.free.nrw.commons.explore.recentsearches.RecentSearchesContentProvider.Companion.uriForId
+import fr.free.nrw.commons.explore.recentsearches.RecentSearchesTable.ALL_FIELDS
+import fr.free.nrw.commons.explore.recentsearches.RecentSearchesTable.COLUMN_ID
+import fr.free.nrw.commons.explore.recentsearches.RecentSearchesTable.COLUMN_LAST_USED
+import fr.free.nrw.commons.explore.recentsearches.RecentSearchesTable.COLUMN_NAME
+import fr.free.nrw.commons.utils.getInt
+import fr.free.nrw.commons.utils.getLong
+import fr.free.nrw.commons.utils.getString
+import java.util.Date
+import javax.inject.Inject
+import javax.inject.Named
+import javax.inject.Provider
+
+/**
+ * This class doesn't execute queries in database directly instead it contains the logic behind
+ * inserting, deleting, searching data from recent searches database.
+ */
+class RecentSearchesDao @Inject constructor(
+ @param:Named("recentsearch") private val clientProvider: Provider
+) {
+ /**
+ * This method is called on click of media/ categories for storing them in recent searches
+ * @param recentSearch a recent searches object that is to be added in SqLite DB
+ */
+ fun save(recentSearch: RecentSearch) {
+ val db = clientProvider.get()
+ try {
+ val contentValues = toContentValues(recentSearch)
+ if (recentSearch.contentUri == null) {
+ recentSearch.contentUri = db.insert(BASE_URI, contentValues)
+ } else {
+ db.update(recentSearch.contentUri!!, contentValues, null, null)
+ }
+ } catch (e: RemoteException) {
+ throw RuntimeException(e)
+ } finally {
+ db.release()
+ }
+ }
+
+ /**
+ * This method is called on confirmation of delete recent searches.
+ * It deletes all recent searches from the database
+ */
+ fun deleteAll() {
+ var cursor: Cursor? = null
+ val db = clientProvider.get()
+ try {
+ cursor = db.query(
+ BASE_URI,
+ ALL_FIELDS,
+ null,
+ arrayOf(),
+ "$COLUMN_LAST_USED DESC"
+ )
+ while (cursor != null && cursor.moveToNext()) {
+ try {
+ val recentSearch = find(fromCursor(cursor).query)
+ if (recentSearch!!.contentUri == null) {
+ throw RuntimeException("tried to delete item with no content URI")
+ } else {
+ db.delete(recentSearch.contentUri!!, null, null)
+ }
+ } catch (e: RemoteException) {
+ throw RuntimeException(e)
+ } finally {
+ db.release()
+ }
+ }
+ } catch (e: RemoteException) {
+ throw RuntimeException(e)
+ } finally {
+ cursor?.close()
+ }
+ }
+
+ /**
+ * Deletes a recent search from the database
+ */
+ fun delete(recentSearch: RecentSearch) {
+ val db = clientProvider.get()
+ try {
+ if (recentSearch.contentUri == null) {
+ throw RuntimeException("tried to delete item with no content URI")
+ } else {
+ db.delete(recentSearch.contentUri!!, null, null)
+ }
+ } catch (e: RemoteException) {
+ throw RuntimeException(e)
+ } finally {
+ db.release()
+ }
+ }
+
+
+ /**
+ * Find persisted search query in database, based on its name.
+ * @param name Search query Ex- "butterfly"
+ * @return recently searched query from database, or null if not found
+ */
+ fun find(name: String): RecentSearch? {
+ var cursor: Cursor? = null
+ val db = clientProvider.get()
+ try {
+ cursor = db.query(
+ BASE_URI,
+ ALL_FIELDS,
+ "$COLUMN_NAME=?",
+ arrayOf(name),
+ null
+ )
+ if (cursor != null && cursor.moveToFirst()) {
+ return fromCursor(cursor)
+ }
+ } catch (e: RemoteException) {
+ // This feels lazy, but to hell with checked exceptions. :)
+ throw RuntimeException(e)
+ } finally {
+ cursor?.close()
+ db.release()
+ }
+ return null
+ }
+
+ /**
+ * Retrieve recently-searched queries, ordered by descending date.
+ * @return a list containing recent searches
+ */
+ fun recentSearches(limit: Int): List {
+ val items: MutableList = mutableListOf()
+ var cursor: Cursor? = null
+ val db = clientProvider.get()
+ try {
+ cursor = db.query(
+ BASE_URI, ALL_FIELDS,
+ null, arrayOf(), "$COLUMN_LAST_USED DESC"
+ )
+ // fixme add a limit on the original query instead of falling out of the loop?
+ while (cursor != null && cursor.moveToNext() && cursor.position < limit) {
+ items.add(fromCursor(cursor).query)
+ }
+ } catch (e: RemoteException) {
+ throw RuntimeException(e)
+ } finally {
+ cursor?.close()
+ db.release()
+ }
+ return items
+ }
+
+ /**
+ * It creates an Recent Searches object from data stored in the SQLite DB by using cursor
+ * @param cursor
+ * @return RecentSearch object
+ */
+ fun fromCursor(cursor: Cursor): RecentSearch {
+ var query = cursor.getString(COLUMN_NAME)
+
+ if (query == null) {
+ query = ""
+ }
+
+ return RecentSearch(
+ uriForId(cursor.getInt(COLUMN_ID)),
+ query,
+ Date(cursor.getLong(COLUMN_LAST_USED))
+ )
+ }
+
+ /**
+ * This class contains the database table architechture for recent searches,
+ * It also contains queries and logic necessary to the create, update, delete this table.
+ */
+ private fun toContentValues(recentSearch: RecentSearch): ContentValues = contentValuesOf(
+ COLUMN_NAME to recentSearch.query,
+ COLUMN_LAST_USED to recentSearch.lastSearched.time
+ )
+}
diff --git a/app/src/main/java/fr/free/nrw/commons/explore/recentsearches/RecentSearchesFragment.java b/app/src/main/java/fr/free/nrw/commons/explore/recentsearches/RecentSearchesFragment.java
deleted file mode 100644
index 588f3a25f..000000000
--- a/app/src/main/java/fr/free/nrw/commons/explore/recentsearches/RecentSearchesFragment.java
+++ /dev/null
@@ -1,149 +0,0 @@
-package fr.free.nrw.commons.explore.recentsearches;
-
-import android.content.Context;
-import android.content.DialogInterface;
-import android.os.Bundle;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.ArrayAdapter;
-import android.widget.Toast;
-import androidx.annotation.NonNull;
-import androidx.appcompat.app.AlertDialog;
-import fr.free.nrw.commons.R;
-import fr.free.nrw.commons.databinding.FragmentSearchHistoryBinding;
-import fr.free.nrw.commons.di.CommonsDaggerSupportFragment;
-import fr.free.nrw.commons.explore.SearchActivity;
-import java.util.List;
-import java.util.Locale;
-import javax.inject.Inject;
-
-
-/**
- * Displays the recent searches screen.
- */
-public class RecentSearchesFragment extends CommonsDaggerSupportFragment {
-
- @Inject
- RecentSearchesDao recentSearchesDao;
- List recentSearches;
- ArrayAdapter adapter;
-
- private FragmentSearchHistoryBinding binding;
-
- @Override
- public View onCreateView(LayoutInflater inflater, ViewGroup container,
- Bundle savedInstanceState) {
- binding = FragmentSearchHistoryBinding.inflate(inflater, container, false);
-
- recentSearches = recentSearchesDao.recentSearches(10);
-
- if (recentSearches.isEmpty()) {
- binding.recentSearchesDeleteButton.setVisibility(View.GONE);
- binding.recentSearchesTextView.setText(R.string.no_recent_searches);
- }
-
- binding.recentSearchesDeleteButton.setOnClickListener(v -> {
- showDeleteRecentAlertDialog(requireContext());
- });
-
- adapter = new ArrayAdapter<>(requireContext(), R.layout.item_recent_searches,
- recentSearches);
- binding.recentSearchesList.setAdapter(adapter);
- binding.recentSearchesList.setOnItemClickListener((parent, view, position, id) -> (
- (SearchActivity) getContext()).updateText(recentSearches.get(position)));
- binding.recentSearchesList.setOnItemLongClickListener((parent, view, position, id) -> {
- showDeleteAlertDialog(requireContext(), position);
- return true;
- });
- updateRecentSearches();
-
- return binding.getRoot();
- }
-
- private void showDeleteRecentAlertDialog(@NonNull final Context context) {
- new AlertDialog.Builder(context)
- .setMessage(getString(R.string.delete_recent_searches_dialog))
- .setPositiveButton(android.R.string.yes,
- (dialog, which) -> setDeleteRecentPositiveButton(context, dialog))
- .setNegativeButton(android.R.string.no, null)
- .setCancelable(false)
- .create()
- .show();
- }
-
- private void setDeleteRecentPositiveButton(@NonNull final Context context,
- final DialogInterface dialog) {
- recentSearchesDao.deleteAll();
- if (binding != null) {
- binding.recentSearchesDeleteButton.setVisibility(View.GONE);
- binding.recentSearchesTextView.setText(R.string.no_recent_searches);
- Toast.makeText(getContext(), getString(R.string.search_history_deleted),
- Toast.LENGTH_SHORT).show();
- recentSearches = recentSearchesDao.recentSearches(10);
- adapter = new ArrayAdapter<>(context, R.layout.item_recent_searches,
- recentSearches);
- binding.recentSearchesList.setAdapter(adapter);
- adapter.notifyDataSetChanged();
- }
- dialog.dismiss();
- }
-
- private void showDeleteAlertDialog(@NonNull final Context context, final int position) {
- new AlertDialog.Builder(context)
- .setMessage(R.string.delete_search_dialog)
- .setPositiveButton(getString(R.string.delete).toUpperCase(Locale.ROOT),
- ((dialog, which) -> setDeletePositiveButton(context, dialog, position)))
- .setNegativeButton(android.R.string.cancel, null)
- .setCancelable(false)
- .create()
- .show();
- }
-
- private void setDeletePositiveButton(@NonNull final Context context,
- final DialogInterface dialog, final int position) {
- recentSearchesDao.delete(recentSearchesDao.find(recentSearches.get(position)));
- recentSearches = recentSearchesDao.recentSearches(10);
- adapter = new ArrayAdapter<>(context, R.layout.item_recent_searches,
- recentSearches);
- if (binding != null){
- binding.recentSearchesList.setAdapter(adapter);
- adapter.notifyDataSetChanged();
- }
- dialog.dismiss();
- }
-
- /**
- * This method is called on back press of activity so we are updating the list from database to
- * refresh the recent searches list.
- */
- @Override
- public void onResume() {
- updateRecentSearches();
- super.onResume();
- }
-
- /**
- * This method is called when search query is null to update Recent Searches
- */
- public void updateRecentSearches() {
- recentSearches = recentSearchesDao.recentSearches(10);
- adapter.notifyDataSetChanged();
-
- if (!recentSearches.isEmpty()) {
- if (binding!= null) {
- binding.recentSearchesDeleteButton.setVisibility(View.VISIBLE);
- binding.recentSearchesTextView.setText(R.string.search_recent_header);
- }
- }
- }
-
- @Override
- public void onDestroy() {
- super.onDestroy();
-
- if (binding != null) {
- binding = null;
- }
- }
-}
diff --git a/app/src/main/java/fr/free/nrw/commons/explore/recentsearches/RecentSearchesFragment.kt b/app/src/main/java/fr/free/nrw/commons/explore/recentsearches/RecentSearchesFragment.kt
new file mode 100644
index 000000000..e7903c9ed
--- /dev/null
+++ b/app/src/main/java/fr/free/nrw/commons/explore/recentsearches/RecentSearchesFragment.kt
@@ -0,0 +1,153 @@
+package fr.free.nrw.commons.explore.recentsearches
+
+import android.content.Context
+import android.content.DialogInterface
+import android.content.DialogInterface.OnClickListener
+import android.os.Bundle
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.AdapterView
+import android.widget.AdapterView.OnItemClickListener
+import android.widget.AdapterView.OnItemLongClickListener
+import android.widget.ArrayAdapter
+import android.widget.Toast
+import androidx.appcompat.app.AlertDialog
+import fr.free.nrw.commons.R
+import fr.free.nrw.commons.databinding.FragmentSearchHistoryBinding
+import fr.free.nrw.commons.di.CommonsDaggerSupportFragment
+import fr.free.nrw.commons.explore.SearchActivity
+import javax.inject.Inject
+
+/**
+ * Displays the recent searches screen.
+ */
+class RecentSearchesFragment : CommonsDaggerSupportFragment() {
+ @JvmField
+ @Inject
+ var recentSearchesDao: RecentSearchesDao? = null
+
+ private var recentSearches: List = emptyList()
+ private lateinit var adapter: ArrayAdapter
+ private var binding: FragmentSearchHistoryBinding? = null
+
+ override fun onCreateView(
+ inflater: LayoutInflater, container: ViewGroup?,
+ savedInstanceState: Bundle?
+ ): View {
+ binding = FragmentSearchHistoryBinding.inflate(inflater, container, false)
+
+ recentSearches = recentSearchesDao!!.recentSearches(10)
+
+ if (recentSearches.isEmpty()) {
+ binding!!.recentSearchesDeleteButton.visibility = View.GONE
+ binding!!.recentSearchesTextView.setText(R.string.no_recent_searches)
+ }
+
+ binding!!.recentSearchesDeleteButton.setOnClickListener { v: View? ->
+ showDeleteRecentAlertDialog(requireContext())
+ }
+
+ adapter = ArrayAdapter(requireContext(), R.layout.item_recent_searches, recentSearches)
+ binding!!.recentSearchesList.adapter = adapter
+ binding!!.recentSearchesList.onItemClickListener =
+ OnItemClickListener { _: AdapterView<*>?, _: View?, position: Int, _: Long ->
+ (context as SearchActivity).updateText(recentSearches[position])
+ }
+ binding!!.recentSearchesList.onItemLongClickListener =
+ OnItemLongClickListener { _: AdapterView<*>?, _: View?, position: Int, _: Long ->
+ showDeleteAlertDialog(requireContext(), position)
+ true
+ }
+ updateRecentSearches()
+
+ return binding!!.root
+ }
+
+ private fun showDeleteRecentAlertDialog(context: Context) {
+ AlertDialog.Builder(context)
+ .setMessage(getString(R.string.delete_recent_searches_dialog))
+ .setPositiveButton(R.string.yes) { dialog: DialogInterface, _: Int ->
+ setDeleteRecentPositiveButton(context, dialog)
+ }
+ .setNegativeButton(R.string.no, null)
+ .setCancelable(false)
+ .create()
+ .show()
+ }
+
+ private fun setDeleteRecentPositiveButton(context: Context, dialog: DialogInterface) {
+ recentSearchesDao!!.deleteAll()
+ if (binding != null) {
+ binding!!.recentSearchesDeleteButton.visibility = View.GONE
+ binding!!.recentSearchesTextView.setText(R.string.no_recent_searches)
+ Toast.makeText(
+ getContext(), getString(R.string.search_history_deleted),
+ Toast.LENGTH_SHORT
+ ).show()
+ recentSearches = recentSearchesDao!!.recentSearches(10)
+ adapter = ArrayAdapter(context, R.layout.item_recent_searches, recentSearches)
+ binding!!.recentSearchesList.adapter = adapter
+ adapter.notifyDataSetChanged()
+ }
+ dialog.dismiss()
+ }
+
+ private fun showDeleteAlertDialog(context: Context, position: Int) {
+ AlertDialog.Builder(context)
+ .setMessage(R.string.delete_search_dialog)
+ .setPositiveButton(
+ getString(R.string.delete).uppercase(),
+ { dialog: DialogInterface, _: Int ->
+ setDeletePositiveButton(context, dialog, position)
+ }
+ )
+ .setNegativeButton(R.string.cancel, null)
+ .setCancelable(false)
+ .create()
+ .show()
+ }
+
+ private fun setDeletePositiveButton(context: Context, dialog: DialogInterface, position: Int) {
+ recentSearchesDao!!.delete(recentSearchesDao!!.find(recentSearches[position])!!)
+ recentSearches = recentSearchesDao!!.recentSearches(10)
+ adapter = ArrayAdapter(
+ context, R.layout.item_recent_searches,
+ recentSearches
+ )
+ if (binding != null) {
+ binding!!.recentSearchesList.adapter = adapter
+ adapter.notifyDataSetChanged()
+ }
+ dialog.dismiss()
+ }
+
+ /**
+ * This method is called on back press of activity so we are updating the list from database to
+ * refresh the recent searches list.
+ */
+ override fun onResume() {
+ updateRecentSearches()
+ super.onResume()
+ }
+
+ /**
+ * This method is called when search query is null to update Recent Searches
+ */
+ fun updateRecentSearches() {
+ recentSearches = recentSearchesDao!!.recentSearches(10)
+ adapter.notifyDataSetChanged()
+
+ if (recentSearches.isNotEmpty()) {
+ if (binding != null) {
+ binding!!.recentSearchesDeleteButton.visibility = View.VISIBLE
+ binding!!.recentSearchesTextView.setText(R.string.search_recent_header)
+ }
+ }
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ binding = null
+ }
+}
diff --git a/app/src/main/java/fr/free/nrw/commons/explore/recentsearches/RecentSearchesTable.kt b/app/src/main/java/fr/free/nrw/commons/explore/recentsearches/RecentSearchesTable.kt
new file mode 100644
index 000000000..e32fc9fa4
--- /dev/null
+++ b/app/src/main/java/fr/free/nrw/commons/explore/recentsearches/RecentSearchesTable.kt
@@ -0,0 +1,71 @@
+package fr.free.nrw.commons.explore.recentsearches
+
+import android.database.sqlite.SQLiteDatabase
+
+/**
+ * This class contains the database table architechture for recent searches, It also contains
+ * queries and logic necessary to the create, update, delete this table.
+ */
+object RecentSearchesTable {
+ const val TABLE_NAME: String = "recent_searches"
+ const val COLUMN_ID: String = "_id"
+ const val COLUMN_NAME: String = "name"
+ const val COLUMN_LAST_USED: String = "last_used"
+
+ // NOTE! KEEP IN SAME ORDER AS THEY ARE DEFINED UP THERE. HELPS HARD CODE COLUMN INDICES.
+ @JvmField
+ val ALL_FIELDS = arrayOf(
+ COLUMN_ID,
+ COLUMN_NAME,
+ COLUMN_LAST_USED,
+ )
+
+ const val DROP_TABLE_STATEMENT: String = "DROP TABLE IF EXISTS $TABLE_NAME"
+
+ const val CREATE_TABLE_STATEMENT: String = ("CREATE TABLE $TABLE_NAME ($COLUMN_ID INTEGER PRIMARY KEY,$COLUMN_NAME STRING,$COLUMN_LAST_USED INTEGER);")
+
+ /**
+ * This method creates a RecentSearchesTable in SQLiteDatabase
+ *
+ * @param db SQLiteDatabase
+ */
+ fun onCreate(db: SQLiteDatabase) = db.execSQL(CREATE_TABLE_STATEMENT)
+
+ /**
+ * This method deletes RecentSearchesTable from SQLiteDatabase
+ *
+ * @param db SQLiteDatabase
+ */
+ fun onDelete(db: SQLiteDatabase) {
+ db.execSQL(DROP_TABLE_STATEMENT)
+ onCreate(db)
+ }
+
+ /**
+ * This method is called on migrating from a older version to a newer version
+ *
+ * @param db SQLiteDatabase
+ * @param from Version from which we are migrating
+ * @param to Version to which we are migrating
+ */
+ fun onUpdate(db: SQLiteDatabase, from: Int, to: Int) {
+ if (from == to) {
+ return
+ }
+ if (from < 6) {
+ // doesn't exist yet
+ onUpdate(db, from + 1, to)
+ return
+ }
+ if (from == 6) {
+ // table added in version 7
+ onCreate(db)
+ onUpdate(db, from + 1, to)
+ return
+ }
+ if (from == 7) {
+ onUpdate(db, from + 1, to)
+ return
+ }
+ }
+}
diff --git a/app/src/main/java/fr/free/nrw/commons/filepicker/FilePicker.kt b/app/src/main/java/fr/free/nrw/commons/filepicker/FilePicker.kt
index bb0a371e1..a7e3a671d 100644
--- a/app/src/main/java/fr/free/nrw/commons/filepicker/FilePicker.kt
+++ b/app/src/main/java/fr/free/nrw/commons/filepicker/FilePicker.kt
@@ -296,10 +296,19 @@ object FilePicker : Constants {
* https://github.com/commons-app/apps-android-commons/issues/6357
*/
private fun takePersistableUriPermissions(context: Context, result: ActivityResult) {
- result.data?.data?.also { uri ->
- val takeFlags: Int = (Intent.FLAG_GRANT_READ_URI_PERMISSION
- or Intent.FLAG_GRANT_WRITE_URI_PERMISSION)
- context.contentResolver.takePersistableUriPermission(uri, takeFlags)
+ result.data?.let { intentData ->
+ val takeFlags: Int = (Intent.FLAG_GRANT_READ_URI_PERMISSION)
+ // Persist the URI permission for all URIs in the clip data
+ // if multiple images are selected,
+ // or for the single URI if only one image is selected
+ intentData.clipData?.let { clipData ->
+ for (i in 0 until clipData.itemCount) {
+ context.contentResolver.takePersistableUriPermission(
+ clipData.getItemAt(i).uri, takeFlags)
+ }
+ } ?: intentData.data?.let { uri ->
+ context.contentResolver.takePersistableUriPermission(uri, takeFlags)
+ }
}
}
@@ -358,6 +367,7 @@ object FilePicker : Constants {
callbacks: Callbacks
) {
if (result.resultCode == Activity.RESULT_OK && !isPhoto(result.data)) {
+ takePersistableUriPermissions(activity, result)
try {
val files = getFilesFromGalleryPictures(result.data, activity)
callbacks.onImagesPicked(files, ImageSource.GALLERY, restoreType(activity))
diff --git a/app/src/main/java/fr/free/nrw/commons/fileusages/FileUsagesUiModel.kt b/app/src/main/java/fr/free/nrw/commons/fileusages/FileUsagesUiModel.kt
index 63b0740d0..540c87e4c 100644
--- a/app/src/main/java/fr/free/nrw/commons/fileusages/FileUsagesUiModel.kt
+++ b/app/src/main/java/fr/free/nrw/commons/fileusages/FileUsagesUiModel.kt
@@ -1,18 +1,68 @@
package fr.free.nrw.commons.fileusages
+import android.net.Uri
+import timber.log.Timber
+
/**
- * Show where file is being used on Commons and oher wikis.
+ * Data model for displaying file usage information in the UI, including the title and link to the page.
*/
data class FileUsagesUiModel(
val title: String,
val link: String?
)
+/**
+ * Converts a FileUsage object to a UI model for Commons file usages.
+ * Creates a link to the file's page on Commons.
+ */
fun FileUsage.toUiModel(): FileUsagesUiModel {
- return FileUsagesUiModel(title = title, link = "https://commons.wikimedia.org/wiki/$title")
+ // Replace spaces with underscores and URL-encode the title for the link
+ val encodedTitle = Uri.encode(title.replace(" ", "_"))
+ return FileUsagesUiModel(
+ title = title,
+ link = "https://commons.wikimedia.org/wiki/$encodedTitle"
+ )
}
+/**
+ * Converts a GlobalFileUsage object to a UI model for file usages on other wikis.
+ * Generates a link to the page and prefixes the title with the wiki code (e.g., "(en) Title").
+ */
fun GlobalFileUsage.toUiModel(): FileUsagesUiModel {
- // link is associated with sub items under wiki group (which is not used ATM)
- return FileUsagesUiModel(title = wiki, link = null)
-}
+ // Log input values for debugging
+ Timber.d("Converting GlobalFileUsage: wiki=$wiki, title=$title")
+
+ // Check for invalid or empty inputs
+ if (wiki.isBlank() || title.isBlank()) {
+ Timber.w("Invalid input: wiki=$wiki, title=$title")
+ return FileUsagesUiModel(title = title, link = null)
+ }
+
+ // Extract wiki code for prefix (e.g., "en" from "en.wikipedia.org" or "enwiki")
+ val wikiCode = when {
+ wiki.contains(".") -> wiki.substringBefore(".") // e.g., "en" from "en.wikipedia.org"
+ wiki == "commonswiki" -> "commons"
+ wiki.endsWith("wiki") -> wiki.removeSuffix("wiki")
+ else -> wiki
+ }
+
+ // Create prefixed title, e.g., "(en) Changi East Depot"
+ val prefixedTitle = "($wikiCode) $title"
+
+ // Determine the domain for the URL
+ val domain = when {
+ wiki.contains(".") -> wiki // Already a full domain, e.g., "en.wikipedia.org"
+ wiki == "commonswiki" -> "commons.wikimedia.org"
+ wiki.endsWith("wiki") -> wiki.removeSuffix("wiki") + ".wikipedia.org"
+ else -> "$wiki.wikipedia.org" // Fallback for simple codes like "en"
+ }
+
+ // Normalize title: replace spaces with underscores and URL-encode
+ val encodedTitle = Uri.encode(title.replace(" ", "_"))
+
+ // Build the full URL
+ val url = "https://$domain/wiki/$encodedTitle"
+ Timber.d("Generated URL: $url")
+
+ return FileUsagesUiModel(title = prefixedTitle, link = url)
+}
\ No newline at end of file
diff --git a/app/src/main/java/fr/free/nrw/commons/location/LocationPermissionsHelper.kt b/app/src/main/java/fr/free/nrw/commons/location/LocationPermissionsHelper.kt
index fefb59adb..47b4165ad 100644
--- a/app/src/main/java/fr/free/nrw/commons/location/LocationPermissionsHelper.kt
+++ b/app/src/main/java/fr/free/nrw/commons/location/LocationPermissionsHelper.kt
@@ -64,8 +64,8 @@ class LocationPermissionsHelper(
activity,
activity.getString(dialogTitleResource),
activity.getString(dialogTextResource),
- activity.getString(android.R.string.ok),
- activity.getString(android.R.string.cancel),
+ activity.getString(R.string.ok),
+ activity.getString(R.string.cancel),
{
ActivityCompat.requestPermissions(
activity,
diff --git a/app/src/main/java/fr/free/nrw/commons/locationpicker/LocationPickerActivity.kt b/app/src/main/java/fr/free/nrw/commons/locationpicker/LocationPickerActivity.kt
index a8b6ddf26..08dee587b 100644
--- a/app/src/main/java/fr/free/nrw/commons/locationpicker/LocationPickerActivity.kt
+++ b/app/src/main/java/fr/free/nrw/commons/locationpicker/LocationPickerActivity.kt
@@ -25,6 +25,7 @@ import androidx.core.content.ContextCompat
import androidx.core.content.IntentCompat
import androidx.core.os.BundleCompat
import androidx.core.text.HtmlCompat
+import androidx.core.view.WindowCompat
import com.google.android.material.floatingactionbutton.FloatingActionButton
import fr.free.nrw.commons.CameraPosition
import fr.free.nrw.commons.CommonsApplication
@@ -44,6 +45,9 @@ import fr.free.nrw.commons.upload.mediaDetails.UploadMediaDetailFragment.Compani
import fr.free.nrw.commons.upload.mediaDetails.UploadMediaDetailFragment.Companion.LAST_ZOOM
import fr.free.nrw.commons.utils.DialogUtil
import fr.free.nrw.commons.utils.MapUtils.ZOOM_LEVEL
+import fr.free.nrw.commons.utils.applyEdgeToEdgeBottomInsets
+import fr.free.nrw.commons.utils.applyEdgeToEdgeBottomPaddingInsets
+import fr.free.nrw.commons.utils.applyEdgeToEdgeTopPaddingInsets
import fr.free.nrw.commons.utils.handleGeoCoordinates
import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.schedulers.Schedulers
@@ -330,12 +334,19 @@ class LocationPickerActivity : BaseActivity(), LocationPermissionCallback {
*/
private fun getToolbarUI() {
val toolbar: ConstraintLayout = findViewById(R.id.location_picker_toolbar)
+ WindowCompat.getInsetsController(window, window.decorView)
+ .isAppearanceLightStatusBars = false
+ toolbar.applyEdgeToEdgeTopPaddingInsets()
largeToolbarText = findViewById(R.id.location_picker_toolbar_primary_text_view)
smallToolbarText = findViewById(R.id.location_picker_toolbar_secondary_text_view)
toolbar.setBackgroundColor(ContextCompat.getColor(this, R.color.primaryColor))
}
private fun setupMapView() {
+
+ val mapBottomLayout: ConstraintLayout = findViewById(R.id.map_bottom_layout)
+ mapBottomLayout.applyEdgeToEdgeBottomPaddingInsets()
+
requestLocationPermissions()
//If location metadata is available, move map to that location.
@@ -460,6 +471,7 @@ class LocationPickerActivity : BaseActivity(), LocationPermissionCallback {
*/
private fun addPlaceSelectedButton() {
placeSelectedButton = findViewById(R.id.location_chosen_button)
+ applyEdgeToEdgeBottomInsets(placeSelectedButton)
placeSelectedButton.setOnClickListener { placeSelected() }
}
diff --git a/app/src/main/java/fr/free/nrw/commons/media/MediaDetailFragment.kt b/app/src/main/java/fr/free/nrw/commons/media/MediaDetailFragment.kt
index d34c162dc..41e65ae4e 100644
--- a/app/src/main/java/fr/free/nrw/commons/media/MediaDetailFragment.kt
+++ b/app/src/main/java/fr/free/nrw/commons/media/MediaDetailFragment.kt
@@ -541,6 +541,7 @@ class MediaDetailFragment : CommonsDaggerSupportFragment(), CategoryEditHelper.C
}
)
binding.progressBarEdit.visibility = View.GONE
+ binding.descriptionEdit.visibility = View.VISIBLE
}
override fun onConfigurationChanged(newConfig: Configuration) {
@@ -1026,12 +1027,12 @@ class MediaDetailFragment : CommonsDaggerSupportFragment(), CategoryEditHelper.C
val message: String = if (result) {
context.getString(
R.string.send_thank_success_message,
- media!!.displayTitle
+ media!!.user
)
} else {
context.getString(
R.string.send_thank_failure_message,
- media!!.displayTitle
+ media!!.user
)
}
@@ -2128,22 +2129,17 @@ fun FileUsagesContainer(
val uriHandle = LocalUriHandler.current
Column(modifier = modifier) {
-
Row(
modifier = Modifier.fillMaxWidth(),
verticalAlignment = Alignment.CenterVertically,
horizontalArrangement = Arrangement.SpaceBetween
) {
-
Text(
text = stringResource(R.string.usages_on_commons_heading),
textAlign = TextAlign.Center,
style = MaterialTheme.typography.titleSmall
)
-
- IconButton(onClick = {
- isCommonsListExpanded = !isCommonsListExpanded
- }) {
+ IconButton(onClick = { isCommonsListExpanded = !isCommonsListExpanded }) {
Icon(
imageVector = if (isCommonsListExpanded) Icons.Default.KeyboardArrowUp
else Icons.Default.KeyboardArrowDown,
@@ -2157,11 +2153,8 @@ fun FileUsagesContainer(
MediaDetailViewModel.FileUsagesContainerState.Loading -> {
LinearProgressIndicator()
}
-
is MediaDetailViewModel.FileUsagesContainerState.Success -> {
-
val data = commonsContainerState.data
-
if (data.isNullOrEmpty()) {
ListItem(headlineContent = {
Text(
@@ -2181,7 +2174,7 @@ fun FileUsagesContainer(
headlineContent = {
Text(
modifier = Modifier.clickable {
- uriHandle.openUri(usage.link!!)
+ usage.link?.let { uriHandle.openUri(it) }
},
text = usage.title,
style = MaterialTheme.typography.titleSmall.copy(
@@ -2189,11 +2182,11 @@ fun FileUsagesContainer(
textDecoration = TextDecoration.Underline
)
)
- })
+ }
+ )
}
}
}
-
is MediaDetailViewModel.FileUsagesContainerState.Error -> {
ListItem(headlineContent = {
Text(
@@ -2203,12 +2196,10 @@ fun FileUsagesContainer(
)
})
}
-
MediaDetailViewModel.FileUsagesContainerState.Initial -> {}
}
}
-
Row(
modifier = Modifier.fillMaxWidth(),
verticalAlignment = Alignment.CenterVertically,
@@ -2219,10 +2210,7 @@ fun FileUsagesContainer(
textAlign = TextAlign.Center,
style = MaterialTheme.typography.titleSmall
)
-
- IconButton(onClick = {
- isOtherWikisListExpanded = !isOtherWikisListExpanded
- }) {
+ IconButton(onClick = { isOtherWikisListExpanded = !isOtherWikisListExpanded }) {
Icon(
imageVector = if (isOtherWikisListExpanded) Icons.Default.KeyboardArrowUp
else Icons.Default.KeyboardArrowDown,
@@ -2236,11 +2224,8 @@ fun FileUsagesContainer(
MediaDetailViewModel.FileUsagesContainerState.Loading -> {
LinearProgressIndicator()
}
-
is MediaDetailViewModel.FileUsagesContainerState.Success -> {
-
val data = globalContainerState.data
-
if (data.isNullOrEmpty()) {
ListItem(headlineContent = {
Text(
@@ -2259,16 +2244,20 @@ fun FileUsagesContainer(
},
headlineContent = {
Text(
+ modifier = Modifier.clickable {
+ usage.link?.let { uriHandle.openUri(it) }
+ },
text = usage.title,
style = MaterialTheme.typography.titleSmall.copy(
+ color = Color(0xFF5A6AEC),
textDecoration = TextDecoration.Underline
)
)
- })
+ }
+ )
}
}
}
-
is MediaDetailViewModel.FileUsagesContainerState.Error -> {
ListItem(headlineContent = {
Text(
@@ -2278,10 +2267,8 @@ fun FileUsagesContainer(
)
})
}
-
MediaDetailViewModel.FileUsagesContainerState.Initial -> {}
}
}
-
}
-}
+}
\ No newline at end of file
diff --git a/app/src/main/java/fr/free/nrw/commons/media/MediaDetailPagerFragment.kt b/app/src/main/java/fr/free/nrw/commons/media/MediaDetailPagerFragment.kt
index b66c888aa..92cca611e 100644
--- a/app/src/main/java/fr/free/nrw/commons/media/MediaDetailPagerFragment.kt
+++ b/app/src/main/java/fr/free/nrw/commons/media/MediaDetailPagerFragment.kt
@@ -166,7 +166,7 @@ class MediaDetailPagerFragment : CommonsDaggerSupportFragment(), OnPageChangeLis
val mediaDetailFragment = adapter!!.currentMediaDetailFragment
when (item.itemId) {
R.id.menu_bookmark_current_image -> {
- val bookmarkExists = bookmarkDao!!.updateBookmark(bookmark)
+ val bookmarkExists = bookmarkDao!!.updateBookmark(bookmark!!)
val snackbar = if (bookmarkExists) Snackbar.make(
requireView(),
R.string.add_bookmark,
@@ -436,7 +436,7 @@ ${m.pageTitle.canonicalUri}"""
bookmark = Bookmark(
m.filename,
m.getAuthorOrUser(),
- BookmarkPicturesContentProvider.uriForName(m.filename)
+ BookmarkPicturesContentProvider.uriForName(m.filename!!)
)
updateBookmarkState(menu.findItem(R.id.menu_bookmark_current_image))
val contributionState = provider.getContributionStateAt(position)
diff --git a/app/src/main/java/fr/free/nrw/commons/nearby/CheckBoxTriStates.java b/app/src/main/java/fr/free/nrw/commons/nearby/CheckBoxTriStates.java
index db2c1f5d9..323f9756f 100644
--- a/app/src/main/java/fr/free/nrw/commons/nearby/CheckBoxTriStates.java
+++ b/app/src/main/java/fr/free/nrw/commons/nearby/CheckBoxTriStates.java
@@ -44,7 +44,7 @@ public class CheckBoxTriStates extends AppCompatCheckBox {
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
switch (state) {
case UNKNOWN:
- setState(UNCHECKED);;
+ setState(UNCHECKED);
break;
case UNCHECKED:
setState(CHECKED);
diff --git a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyFilterSearchRecyclerViewAdapter.java b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyFilterSearchRecyclerViewAdapter.java
index b5f760c9f..53e9970a6 100644
--- a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyFilterSearchRecyclerViewAdapter.java
+++ b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyFilterSearchRecyclerViewAdapter.java
@@ -91,6 +91,7 @@ public class NearbyFilterSearchRecyclerViewAdapter
label.setSelected(!label.isSelected());
holder.placeTypeLayout.setSelected(label.isSelected());
+ NearbyFilterState.setSelectedLabels(new ArrayList<>(selectedLabels));
callback.filterByMarkerType(selectedLabels, 0, false, false);
});
}
@@ -152,6 +153,7 @@ public class NearbyFilterSearchRecyclerViewAdapter
label.setSelected(false);
selectedLabels.remove(label);
}
+ NearbyFilterState.setSelectedLabels(new ArrayList<>(selectedLabels));
notifyDataSetChanged();
}
@@ -163,6 +165,7 @@ public class NearbyFilterSearchRecyclerViewAdapter
selectedLabels.add(label);
}
}
+ NearbyFilterState.setSelectedLabels(new ArrayList<>(selectedLabels));
notifyDataSetChanged();
}
diff --git a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyFilterState.java b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyFilterState.java
index d3ece9bfa..d0aec96af 100644
--- a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyFilterState.java
+++ b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyFilterState.java
@@ -9,7 +9,7 @@ public class NearbyFilterState {
private int checkBoxTriState;
private ArrayList
+ android:text="@string/upload_categories_dont_show_this_message_again" />
\ No newline at end of file
diff --git a/app/src/main/res/layout/dialog_select_language.xml b/app/src/main/res/layout/dialog_select_language.xml
index b63d3ceac..dcef302fc 100644
--- a/app/src/main/res/layout/dialog_select_language.xml
+++ b/app/src/main/res/layout/dialog_select_language.xml
@@ -12,17 +12,17 @@
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="8dp"
- android:hint="Type Language Name"
+ android:hint="@string/language_search_type_language_name"
android:padding="12dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
- app:layout_constraintTop_toTopOf="parent">
+ app:layout_constraintTop_toTopOf="parent" />
-
-
-
@@ -33,9 +32,8 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="@dimen/filter_padding"
- android:gravity="center_vertical"
+ android:gravity="center"
tools:text="testing2"
- android:textAlignment="center"
android:textSize="22sp"/>
diff --git a/app/src/main/res/layout/fragment_upload_media_detail_fragment.xml b/app/src/main/res/layout/fragment_upload_media_detail_fragment.xml
index f803a2616..d6a08066f 100644
--- a/app/src/main/res/layout/fragment_upload_media_detail_fragment.xml
+++ b/app/src/main/res/layout/fragment_upload_media_detail_fragment.xml
@@ -14,6 +14,7 @@
app:actualImageScaleType="fitXY" />
+ android:orientation="horizontal" />
-
-
diff --git a/app/src/main/res/layout/layout_upload_categories_item.xml b/app/src/main/res/layout/layout_upload_categories_item.xml
index 1c432ca88..146d55af3 100644
--- a/app/src/main/res/layout/layout_upload_categories_item.xml
+++ b/app/src/main/res/layout/layout_upload_categories_item.xml
@@ -3,6 +3,7 @@
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/category_layout"
+ android:layoutDirection="locale"
android:layout_width="match_parent"
android:layout_height="wrap_content">
@@ -10,26 +11,31 @@
android:id="@+id/upload_category_checkbox"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
+ android:minWidth="48dp"
+ android:minHeight="48dp"
android:checkMark="?android:attr/textCheckMark"
android:checked="false"
android:gravity="center_vertical"
android:padding="@dimen/tiny_gap"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@+id/category_image"
- app:layout_constraintLeft_toLeftOf="parent"
+ app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
@@ -9,26 +10,31 @@
android:id="@+id/depict_checkbox"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
+ android:minWidth="48dp"
+ android:minHeight="48dp"
android:checkMark="?android:attr/textCheckMark"
android:checked="false"
android:gravity="center_vertical"
android:padding="@dimen/tiny_gap"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@+id/depicted_image"
- app:layout_constraintLeft_toLeftOf="parent"
+ app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
+ android:text="@string/depicts_description" />
diff --git a/app/src/main/res/layout/pic_of_day_app_widget.xml b/app/src/main/res/layout/pic_of_day_app_widget.xml
index 46e00a0f4..53e54a7cf 100644
--- a/app/src/main/res/layout/pic_of_day_app_widget.xml
+++ b/app/src/main/res/layout/pic_of_day_app_widget.xml
@@ -35,7 +35,6 @@
android:layout_height="wrap_content"
android:id="@+id/appwidget_title"
android:textAlignment="center"
- android:layout_gravity="bottom"
android:textColor="@color/white"
android:layout_marginTop="@dimen/filter_padding"
android:layout_marginStart="@dimen/tiny_padding"
@@ -47,6 +46,6 @@
android:id="@+id/appwidget_image"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:contentDescription="@string/appwidget_img" />
+ android:contentDescription="@string/appwidget_img" />
diff --git a/app/src/main/res/layout/toolbar_location_picker.xml b/app/src/main/res/layout/toolbar_location_picker.xml
index 846bb703b..78c1c5fcf 100644
--- a/app/src/main/res/layout/toolbar_location_picker.xml
+++ b/app/src/main/res/layout/toolbar_location_picker.xml
@@ -5,7 +5,8 @@
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/location_picker_toolbar"
android:layout_width="match_parent"
- android:layout_height="78dp"
+ android:layout_height="wrap_content"
+ android:paddingVertical="@dimen/small_gap"
tools:background="@color/primaryColor">
diff --git a/app/src/main/res/layout/upload_depicts_fragment.xml b/app/src/main/res/layout/upload_depicts_fragment.xml
index 9fa621396..ff4f78b3e 100644
--- a/app/src/main/res/layout/upload_depicts_fragment.xml
+++ b/app/src/main/res/layout/upload_depicts_fragment.xml
@@ -22,7 +22,6 @@
android:layout_marginEnd="@dimen/standard_gap"
android:layout_marginRight="@dimen/standard_gap"
android:layout_alignParentStart="true"
- android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:orientation="horizontal">
+ android:id="@+id/button_divider"
+ android:layout_width="match_parent"
+ android:layout_height="1dp"
+ android:layout_above="@+id/navigation_buttons_container"
+ android:background="@color/divider_grey" />
-
-
-
+ android:gravity="end">
+
+
+
diff --git a/app/src/main/res/values-ab/strings.xml b/app/src/main/res/values-ab/strings.xml
index 9ff1b19b4..0c4cb0470 100644
--- a/app/src/main/res/values-ab/strings.xml
+++ b/app/src/main/res/values-ab/strings.xml
@@ -51,10 +51,10 @@
Иҭыгатәуп
Алицензиа
Уахынлатәи арежим
- Attribution-ShareAlike 4.0
- Attribution 4.0
- Attribution-ShareAlike 3.0
- Attribution 3.0
+ Attribution-ShareAlike 4.0
+ Attribution 4.0
+ Attribution-ShareAlike 3.0
+ Attribution 3.0
CC0
CC BY-SA 3.0
CC BY 3.0
@@ -80,7 +80,7 @@
2ФА Акод
Ашьха Зао
Атиульпан
- Бзиала шәаабеит Википедиа ахь
+ Бзиала шәаабеит Википедиа ахь
Сиднеи аопера атеатр
Аҟәыхра
Иаарттәуп
diff --git a/app/src/main/res/values-af/strings.xml b/app/src/main/res/values-af/strings.xml
index 51aaea77e..25567a92c 100644
--- a/app/src/main/res/values-af/strings.xml
+++ b/app/src/main/res/values-af/strings.xml
@@ -8,7 +8,7 @@
-->
Commons Facebook bladsy
- Commons Github-bronkode
+ Commons Github-bronkode
Commons logo
Commons webwerf
Indien
@@ -21,16 +21,7 @@
- %1$d lêer aan die uploaden
- %1$d lêers aan die uploaden
-
- - \@string/contributions_subtitle_zero
- - (%1$d)
- - (%1$d)
-
-
- - Starting %1$d upload
- - Starting %1$d uploads
-
-
+
- %1$d upload
- %1$d uploads
@@ -122,10 +113,10 @@
Standaard lisensie
Gebruik vorige titel en beskrywing
Nag-modus
- Erkenning-DeelAlle 4.0
- Erkenning 4.0
- Erkenning-DeelAlik 3.0
- Erkenning 3.0
+ Erkenning-DeelAlle 4.0
+ Erkenning 4.0
+ Erkenning-DeelAlik 3.0
+ Erkenning 3.0
Op Wikimediuma Commons staan die meeste afbeeldings dit word in Wikipedia gebruik.
Uw afbeeldings help mense dwarsoor wêreld met kennis opdoen!
Upload asseblief alleen afbeeldings dit volledig deur uzelf gemaak wees:
@@ -174,15 +165,14 @@
Sluit aan by ons beta-kanaal op Google Play en kry vroeë toegang tot nuwe funksies en foutoplossings
2FA-kode
Wil u regtig afmeld?
- Mediabeeld misluk
Geen subkategorieë gevind nie
Geen ouerkategorieë gevind nie
Mount Zao
llamas
Reënboogbrug
Tulip
- Welkom Wikipedia
- Welkom Kopiereg
+ Welkom Wikipedia
+ Welkom Kopiereg
Sydney Opera Huis
Kanselleer
oop
@@ -295,11 +285,10 @@
Benoem vir skrapping
Skrap
Prestasies
- Statistiek
Dankie ontvang
Voorgestelde beelde
Beelde via \"Plekke in die buurt\"
- Vlak
+ Vlak %1$d
Beelde opgelaai
Beelde nie teruggestel nie
Beelde gebruik
@@ -369,5 +358,6 @@
Versoek kategorie-toets vir %1$s
Nabygeleë plek gevind
Is dit \'n foto van Plek %1$s?
+ Opsionele toestemming: kry die huidige ligging vir kategorievoorstelle
Brug to fingre for at zoome ind og ud.
diff --git a/app/src/main/res/values-anp/strings.xml b/app/src/main/res/values-anp/strings.xml
index 2eaf1c64d..b9efe7e2d 100644
--- a/app/src/main/res/values-anp/strings.xml
+++ b/app/src/main/res/values-anp/strings.xml
@@ -4,7 +4,7 @@
-->
कॉमन्स फेसबुक पृष्ठ
- कॉमन्स गिटहब स्त्रोत कूटशब्द
+ कॉमन्स गिटहब स्त्रोत कूटशब्द
कॉमन्स क प्रतीक चिन्ह
कॉमन्स जालस्थान
जमा करौ
@@ -60,10 +60,10 @@
रद्द करौ
डाउनलोड करौ
डिफॉल्ट लाइसेन्स
- एट्रीब्यूशन-शेयरअलाइक 3.0
- एट्रिब्यूशन 4.0
- एट्रीब्यूशन-शेयरअलाइक 3.0
- एट्रिब्यूशन 4.0
+ एट्रीब्यूशन-शेयरअलाइक 3.0
+ एट्रिब्यूशन 4.0
+ एट्रीब्यूशन-शेयरअलाइक 3.0
+ एट्रिब्यूशन 4.0
कृपया अपलोड नाय करौ:
हाँव!
बेसी जानकारी
@@ -88,13 +88,12 @@
लाइसेंस
निर्देशांक
2 एफए कोड
- मीडिया छवि विफल
माउंट ज़ाओ
ल्लामस
इंद्रधनुष केरौ पूल
ट्यूलिप
- विकिपीडिया मँ स्वागत छौं
- प्रतिलिप्याधिकार मँ स्वागत छौं
+ विकिपीडिया मँ स्वागत छौं
+ प्रतिलिप्याधिकार मँ स्वागत छौं
सिडनी केरौ ओपेरा हाउस
रद्द करौ
उघाड़ौ
@@ -149,10 +148,9 @@
हटाबौ
उपलब्धी सिनी
प्रोफ़ाइल
- सांख्यिकी
धन्यवाद प्राप्त करलखौ
निर्वाचित चित्र
- स्तर
+ स्तर %1$d
चित्र अपलोड होलौं
योगदान
ठामे मँ
diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml
index 6530ab5d5..3944d7752 100644
--- a/app/src/main/res/values-ar/strings.xml
+++ b/app/src/main/res/values-ar/strings.xml
@@ -16,6 +16,7 @@
* Lolekek
* Meno25
* Mido
+* Mohammed Qays
* Monrokhoury
* Mr. Ibrahem
* NEHAOUA
@@ -34,7 +35,7 @@
-->
صفحة فيسبوك الخاصة بكومنز
- كود مصدر كومنز في غيت هب
+ كود مصدر كومنز في غيت هب
شعار كومنز
موقع كومنز
الخروج من منتقي الموقع
@@ -62,30 +63,22 @@
- %1$d ملف جاري رفعه
- %1$d ملفات جاري رفعها
-
- - \@string/contributions_subtitle_zero
- - (%1$d)
- - (%1$d)
- - (%1$d)
- - (%1$d)
- - (%1$d)
-
بدء التحميلات
- لا معالج
- - معالجة %d تحميل
+ - معالجة %1$d تحميل
- معالجان
- معالج
- معالجة
- - معالجة %d تحميلات
+ - معالجة %1$d تحميلات
- لا مرفوعات
- - %d تحميل
+ - %1$d تحميل
- مرفوعان
- مرفوع
- مرفوع
- - %d تحميلات
+ - %1$d تحميلات
- سيتم ترخيص هذه الصور تحت %1$s
@@ -141,7 +134,7 @@
تحميل في قائمة الانتظار (وضع الاتصال المحدود ممكّن)
رُفع %1$s!
انقر لعرض ملفك المرفوع
- تحميل ملف: %s
+ تحميل ملف: %1$s
يجري رفع %1$s
اكتمال رفع %1$s
الفشل في التحميل
@@ -191,6 +184,7 @@
الإعدادات
سجّل
الصور المختارة
+ الصور المميزة هي مساهمات من مصورين ورسامين ذوي مهارات عالية اختارها مجتمع ويكيميديا كومنز باعتبارها من بين أعلى مستويات الجودة على الموقع.
محدد مخصص
التصنيف
استعراض النظراء
@@ -207,6 +201,9 @@
لم ترفع بعد أية صور.
إعادة المحاولة
إلغاء
+ نوع اللغة الاسم
+ أحدث عمليات البحث
+ كل اللغات
بتقديم هذه الصورة، أعلن أن هذا عملي الخاص، وأنه لا يحتوي على مواد محفوظة الحقوق أو صور شخصية، وغير ذلك يلتزم <a href=\"https://commons.wikimedia.org/wiki/Commons:Policies_and_guidelines\">بسياسات ويكيميديا كومنز</a>.
نزّل
الرخصة الافتراضية
@@ -268,6 +265,7 @@
الوصف
نقاش
المؤلف
+ الرافع
تاريخ الرفع
الترخيص
الإحداثيات
@@ -277,15 +275,14 @@
رمز التحقق المزدوج 2FA
رمز التحقق من البريد الإلكتروني
أترغب فعلا في الخروج؟
- صورة الوسائط فشلت
لم يتم العثور على تصنيفات فرعية.
لم يتم العثور على تصنيفات رئيسية.
جبل زوا
لاماس
جسر قوس قزح
تيوليب
- مرحبا في ويكيبيديا
- حقوق نسخ الترحيب
+ مرحبا في ويكيبيديا
+ حقوق نسخ الترحيب
بيت أوبرا سيدني
إلغاء
فتح
@@ -318,6 +315,7 @@
تتطلب عملية التحميل الوصول إلى الإنترنت. يرجى التحقق من اتصال الشبكة الخاص بك.
تم العثور على مشاكل في الصورة
يُرجَى فقط رفع الصور التي التقطتها بنفسك، لا ترفع الصور التي قمت بتنزيلها من الإنترنت.
+ المرفوعات
حفظ اللقطات داخل-التطبيق In-app
حفظ الصور الملتقطة بالكاميرا داخل-التطبيق In-app على جهازك
تسجيل الدخول إلى حسابك
@@ -389,6 +387,7 @@
لغز
هل هذه الصورة موافقة للرفع؟
سؤال
+ لست متأكدا
النتيجة
إذا استمر رفع الصور التي تتطلب الحذف، فمن المحتمل أن يتم من حسابك، هل أنت متأكد من أنك تريد إنهاء الاختبار؟
تم حذف أكثر من %1$s من الصور التي رفعتها، إذا استمر تحميل الصور التي تتطلب الحذف، فمن المحتمل أن يتم منع حسابك. \n\nهل ترغب في مشاهدة البرنامج التعليمي مرة أخرى ومن ثم إجراء اختبار لمساعدتك في معرفة نوع الصور التي ينبغي أو لا ينبغي رفعا؟
@@ -398,6 +397,7 @@
أحد أهداف كومنز جمع صور عالية الجودة، لذلك; لا يجب رفع صور باهتة; حاول دائما التقاط صور جميلة بإضاءة جيدة.
الصور التي تظهر التكنولوجيا أو الثقافة موضع ترحيب كبير في كومنز.
لقد حصلت عل %1$s من الإجابات الصحيحة، تهانينا!
+ استمرار
حدد أحد الخيارين للإجابة على السؤال
انتهت صلاحية جلسة تسجيل الدخول. يُرجَى تسجيل الدخول مرة أخرى.
تبادل سؤالك مع أصدقائك!
@@ -421,13 +421,11 @@
الإنجازات
الملف الشخصي
أوسمة
- إحصاءات
- تم تلقي الشكر
+ شكراً جزيلاً
الصور المختارة
صور عبر \"الأماكن المجاورة\"
- المستوى %d
- %s (المستوى %s)
- %s (%s)
+ المستوى %1$d
+ %1$s (المستوى %2$s)
الصور المرفوعة
لم يتم إرجاع الصور
الصور المستخدمة
@@ -487,11 +485,13 @@
لا تسأل هذا مرة أخرى
اطلب إذن الموقع
اطلب إذن الموقع عند الحاجة إلى ميزة عرض بطاقة التنبيه القريبة.
- حدث خطأ ما، لم نتمكن من جلب إنجازاتك
+ لقد حدث خطأ ما ولم نتمكن من جلب الإنجازات
لقد قدمت الكثير من المساهمات لا يستطيع نظامنا لحساب الإنجازات التعامل معها. هذا هو الإنجاز النهائي.
ينتهي في:
عرض الحملات
انظر الحملات الجارية
+ أظهر زر الحذف
+ تمكين زر \"حذف المجلد\" في أداة التحديد المخصصة
اسمح للتطبيق بجلب الموقع في حالة عدم تسجيله بالكاميرا. بعض كاميرات الأجهزة لا تسجل الموقع. في مثل هذه الحالات، فإن السماح للتطبيق بجلب الموقع وإرفاقه به يجعل مساهمتك أكثر فائدة. يمكنك تغيير هذا في أي وقت من خلال الإعدادات
السماح
رفض
@@ -515,11 +515,11 @@
لا يمكن طلب التحقق من التصنيف %1$s
جارٍ طلب التحقق من التصنيف %1$s
تم
- إرسال الشكر: نجاح
- تم بنجاح إرسال الشكر ل%1$s
- أخفق إرسال الشكر ل%1$s
- إرسال الشكر: فشل
- جارٍ إرسال شكرا على %1$s
+ إرسال الشكر: نجاح
+ تم الإرسال بفضل %1$s
+ فشل إرسال الشكر إلى %1$s
+ إرسال الشكر: فشل
+ جارٍ إرسال شكرا على %1$s
هل يتبع هذا قواعد حقوق النشر؟
هل تم تصنيف هذا بشكل صحيح؟
هل هذا في النطاق؟
@@ -546,15 +546,14 @@
عرض غير المقروءة
حدث خطأ أثناء التقاط الصور
الرجاء الانتظار...
- الصور المختارة هي صور من مصورين ورسامين ذوي مهارات عالية اختارها مجتمع ويكيميديا كومنز كبعض الأفضل جودة على الموقع.
الصور المرفوعة عبر الأماكن القريبة هي الصور المرفوعة عن طريق اكتشاف الأماكن على الخريطة.
تتيح هذه الميزة للمحررين إرسال إشعار شكر للمستخدمين الذين يقومون بتعديلات مفيدة - باستخدام رابط شكر صغير في صفحة التاريخ أو صفحة الفرق.
- نسخ إلى الوسائط اللاحقة
+ نسخ إلى العناصر التالية
نُسِخت!
أمثلة على صور جيدة لرفعها إلى كومنز
أمثلة على صور لعدم رفعها
تخطي هذه الصورة
- التنزيل فشل!!. لا يمكننا تنزيل الملف دون إذن تخزين خارجي.
+ فشل التنزيل. لا يمكننا تنزيل الملف بدون إذن تخزين خارجي.
إدارة وسوم EXIF
حدد أية وسوم EXIF لتحتفظ بها في المرفوعات
المؤلف
@@ -564,11 +563,10 @@
طراز العدسة
الأرقام التسلسلية
برمجية
- رفض الوصول إلى موقع الوسائط
- قد لا نتمكن من الحصول تلقائيًا على بيانات الموقع من الصور التي تقوم برفعها. يرجى إضافة الموقع المناسب لكل صورة قبل الإرسال
ارفع الصور لويكيميديا كومنز مباشرة من هاتفك. قم بتنزيل تطبيق كومنز الآن: %1$s
مشاركة التطبيق عبر...
معلومات الصورة
+ لا تظهر هذه الرسالة مرة أخرى
لم يتم العثور على تصنيفات
لم يتم العثور على الصور
تم إلغاء الرفع
@@ -629,7 +627,7 @@
تحرير الأوصاف والتعليقات
مشاركة الصور عبر
أنت لم تقم بأي مساهمة حتى الآن
- لم يقم %s بأي مساهمات حتى الآن
+ لم يقم %1$s بأي مساهمات حتى الآن
تم إنشاء الحساب!
تم نسخ النص إلى الحافظة.
تم تعليم الإخطار كمقروء
@@ -638,7 +636,7 @@
موجود
يحتاج صورة
نوع المكان:
- جسر، متحف، فندق، إلخ
+ جسر، متحف، فندق، الخ.
حدث خطأ ما أثناء تسجيل الدخول. يجب عليك إعادة تعيين كلمة المرور الخاصة بك!
وسائل الإعلام
تصنيف الأطفال
@@ -682,7 +680,7 @@
5. الصق نص ويكي في المكان المناسب.
6. قم بتحرير نص ويكي لتحديد المواقع المناسبة، إذا لزم الأمر. لمزيد من المعلومات، انظر <a href=\"https://en.wikipedia.org/wiki/Wikipedia:Manual_of_Style/Images#How_to_place_an_image\">هنا</a>.
7. نشر المقال
- نسخ كود الويكي إلى الحافظة
+ نسخ نص الويكي إلى الحافظة
إيقاف مؤقت
استئناف
متوقف مؤقتًا
@@ -724,6 +722,8 @@
الرجاء تحديد التصنيفات المناسبة. على عكس الصور، تتوفر التصنيفات باللغة الإنجليزية فقط.
كومنز يجعل صورك قابلة لإعادة الاستخدام وتكييفها من قبل الجميع. هل تريد التنازل عن جميع الحقوق؟ هل تريد أن تُنسب إليك؟ هل تريد أن تستخدام التكييفات نفس الترخيص؟
يصور
+ التسمية
+ الوصف
رخصة وسائل الإعلام
تفاصيل الوسائط
عرض صفحة التصنيف
@@ -750,7 +750,7 @@
رجوع
مرحبًا بك في محدد الصورة المخصص
يعرض لك هذا المنتقي الصور التي قمت بتحميلها بالفعل إلى العموم.
- على عكس الصورة الموجودة على اليسار ، فإن الصورة الموجودة على اليمين بها شعار كومنز يشير إلى أنه تم تحميلها بالفعل. !ن! المس مع الاستمرار لمعاينة الصورة.
+ على عكس الصورة الموجودة على اليسار، فإن الصورة الموجودة على اليمين تحمل شعار Commons مما يشير إلى أنه تم تحميلها بالفعل.\n\nالمس مع الاستمرار لمعاينة الصورة.
رائع
تم تحميل هذه الصورة بالفعل إلى العموم.
لأسباب فنية، لا يمكن للتطبيق تحميل أكثر من %1$d من الصور مرة واحدة بشكل موثوق. تم تجاوز حد التحميل %1$d بواسطة %2$d .
@@ -766,8 +766,10 @@
Wiki Loves Monuments هي مسابقة صور دولية للآثار تنظمها ويكيميديا
تحتاج إذن
تحتاج الخرائط المجاورة لقراءة PHONE STATE لتعمل بشكل صحيح
- مساهمات المستخدم: %s
- إنجازات المستخدم: %s
+ يرجى تشغيل خدمات الموقع لعرض الأماكن القريبة.
+ صلاحية اختيارية: احصل على الموقع الحالي لاقتراحات التصنيفات
+ مساهمات المستخدم: %1$s
+ إنجازات المستخدم: %1$s
اعرض صفحة المستخدم
تحرير الصور
تحرير الفئات
@@ -778,7 +780,7 @@
تساعد بيانات الموقع محرري ويكي في العثور على صورتك، مما يجعلها أكثر فائدة.\nلا تحتوي مرفوعاتك الأخيرة على موقع.\nنقترح عليك تشغيل الموقع في إعدادات تطبيق الكاميرا.\nشكرًا لك على الرفع!
لم يتم العثور على موقع
ماذا عن إضافة المكان الذي التقطت فيه هذه الصورة؟\nتساعد بيانات الموقع محرري ويكي في العثور على صورتك، مما يجعلها أكثر فائدة.\nشكرًا لك!
- أضف الموقع
+ إضافة الموقع
يُرجى إزالة أي معلومات لا تشعر بالارتياح عند مشاركتها علنًا من هذا البريد الإلكتروني. أيضًا ، يرجى العلم أن عنوان بريدك الإلكتروني الذي تنشر به ، والاسم المرتبط وصورة الملف الشخصي ، سيكونان مرئيين للجمهور.
التفاصيل
الإنجازات متوفرة فقط في نكهة المنتج. يرجى مراجعة وثائق المطور.
@@ -799,8 +801,8 @@
إلغاء علامة على أنه ليس للتحميل
إلغاء علامة على أنه ليس للرفع
إلغاء علامة على أنه ليس للرفع
- عرض الصور بالفعل
- إخفاء الصور بالفعل
+ إظهار الصور التي تمت معالجتها بالفعل
+ إخفاء الصور التي تمت معالجتها بالفعل
لم يتم العثور على المزيد من الصور
تم تحميل هذه الصورة بالفعل
لا يمكن تحديد هذه الصورة للتحميل
@@ -823,7 +825,7 @@
الإذن مطلوب لهذه الوظيفة
تعلم كيفية كتابة وصف مفيد
تعلم كيفية كتابة تعليق مفيد
- شاهد إنجازاتك
+ عرض إنجازاتك
تعديل الصورة
تعديل الموقع
تم تحديث الموقع!
@@ -840,19 +842,19 @@
هل تريد فتح ملف KML؟
فشل في حفظ ملف KML.
فشل في حفظ ملف GPX.
- حفظ ملف KML
- حفظ ملف GPX
+ حفظ كملف KML...
+ حفظ كملف GPX...
- لا صور تم اختيارها
- - %d صورة تم اختيارها
+ - %1$d صورة تم اختيارها
- صورتان تم اختيارهما
- صور قليلة تم اختيارها
- صور كثيرة تم اختيارها
- - %d صور تم اختيارها
+ - %1$d صور تم اختيارها
يرجى تذكر أن جميع الصور في التحميل المتعدد تحصل على نفس الفئات والأوصاف. إذا لم تتشارك الصور في الأوصاف والفئات، فيرجى إجراء عدة عمليات تحميل منفصلة.
ملاحظة حول التحميلات المتعددة
- الإبلاغ عن مشكلة حول هذا العنصر إلى Wikidata
+ الإبلاغ عن مشكلة حول هذا العنصر إلى ويكي بيانات
الرجاء إدخال بعض التعليقات
نقاش
اكتب شيئًا عن العنصر \'%1$s\'. سيكون مرئيًا للعامة.
@@ -884,7 +886,6 @@
كومنز
مواقع ويكي أخرى
حالات استخدام الملف
- نشاط عرض ويب واحد
حساب
حذف الحساب
تحذير من اختفاء الحساب
diff --git a/app/src/main/res/values-as/strings.xml b/app/src/main/res/values-as/strings.xml
index 74fad1be0..195279e96 100644
--- a/app/src/main/res/values-as/strings.xml
+++ b/app/src/main/res/values-as/strings.xml
@@ -104,7 +104,6 @@
স্থানাংকসমূহ
একো প্ৰদান কৰা নাই
এগৰাকী বিটা টেষ্টাৰ হওঁক
- মিডিয়াৰ ছবি বিফল হ\'ল
খোলক
বন্ধ কৰক
নিকটৱৰ্তী
@@ -119,8 +118,7 @@
দিনটোৰ ছবিখন
ক\'ম\'ঞ্চত সন্ধান কৰক
বিলোপ কৰক
- পৰিসংখ্যা
- স্তৰ
+ স্তৰ %1$d
ত্ৰুটি সংঘটিত হ\'ল!
জাননী
%1$s কিয় বিলোপ কৰা হ\'ব লাগে?
diff --git a/app/src/main/res/values-ast/strings.xml b/app/src/main/res/values-ast/strings.xml
index 591c21395..9a9ccdef4 100644
--- a/app/src/main/res/values-ast/strings.xml
+++ b/app/src/main/res/values-ast/strings.xml
@@ -8,7 +8,7 @@
-->
Páxina de Facebook de Commons
- Códigu fonte de Commons en GitHub
+ Códigu fonte de Commons en GitHub
Logo de Commons
Sitiu web de Commons
Salir del selector d\'allugamientu
@@ -32,18 +32,14 @@
- Xubiendo un ficheru
- Xubiendo %1$d ficheros
-
- - (%1$d)
- - (%1$d)
-
Empiezando les xubíes
- - Procesando %d xubida
- - Procesando %d xubíes
+ - Procesando %1$d xubida
+ - Procesando %1$d xubíes
- - %d xubida
- - %d xubíes
+ - %1$d xubida
+ - %1$d xubíes
- Esta imaxe quedará baxo la llicencia %1$s
@@ -83,7 +79,7 @@
Xubida en cola (mou de conexón llindada activáu)
¡%1$s xubíu!
Toque pa ver la xuba
- Xubiendo archivu: %s
+ Xubiendo archivu: %1$s
%1$s ta xubiendo
Acabando de xubir %1$s
Falló la xubida de %1$s
@@ -129,6 +125,7 @@
Configuración
Date d\'alta
Imáxenes destacaes
+ Les imaxes destacaes son creaciones de talentosos fotógrafos y ilustradores que la comunidá de Wikimedia Commons reconoció como les de mayor calidá del sitiu.
Selector personalizáu
Categoría
Revisión por pares
@@ -150,10 +147,10 @@
Llicencia predeterminada
Usar un títulu y descripción anterior
Tema
- Reconocimientu-CompartirIgual 4.0
- Reconocimientu 4.0
- Reconocimientu-CompartirIgual 3.0
- Reconocimientu 3.0
+ Reconocimientu-CompartirIgual 4.0
+ Reconocimientu 4.0
+ Reconocimientu-CompartirIgual 3.0
+ Reconocimientu 3.0
CC0
CC BY-SA 3.0
CC BY 3.0
@@ -212,15 +209,14 @@
Escueye\'l nuesu canal beta en Google Play y ten accesu tempranu a carauterístiques nueves ya igües de fallos
Códigu I2F
¿Confirmes que quies salir?
- Falló la imaxe multimedia
Nun s\'alcontraron categoríes
Nun s\'atopó nenguna categoría padre
Monte Zao
Llames
Ponte del Arcu la Vieya
Tulipa
- Bienvenida a Wikipedia
- Bienvenida a Derechos d\'autor
+ Bienvenida a Wikipedia
+ Bienvenida a Derechos d\'autor
Ópera de Sidney
Zarrar
Abrir
@@ -349,11 +345,10 @@
Desaniciar
Llogros
Perfil
- Estadístiques
Agradecimientos recibíos
Imáxenes destacaes
Imaxes vía «Sitios Cercanos»
- Nivel
+ Nivel %1$d
Imáxenes xubíes
Imáxenes ensin revertir
Imáxenes utilizaes
@@ -433,17 +428,17 @@
Nun pudo pidise\'l control de categoría pa %1$s
Pidiendo control de categoría pa %1$s
Fecho
- Unviar agradecimientu: Correuto
- Unvióse correutamente l\'agradecimientu a %1$s
- Falló l\'unviar agradecimientu a %1$s
- Unviar agradecimientu: Fallu
- Unviar agradecimientu por %1$s
+ Unviar agradecimientu: Correuto
+ Unvióse correutamente l\'agradecimientu a %1$s
+ Falló l\'unviar agradecimientu a %1$s
+ Unviar agradecimientu: Fallu
+ Unviar agradecimientu por %1$s
¿Esto sigue les regles de drechos d\'autor?
¿Ta correchamente categorizáu?
¿Axústase a la tema?
¿Quies dar les gracies al collaborador?
- Pulsia NON para nomar esta imaxe pa desaniciar si nun ye pa nada útil.
- Los logotipos, les imáxenes de pantalla y los cartelos de películes son davezu infracciones a los derechos d\'autor.\nPulsia NON para nomar esta imaxe pa desaniciar
+ Calca NON para nomar esta imaxe pa desaniciar si nun ye pa nada útil.
+ Los logotipos, les imáxenes de pantalla y los cartelos de películes son davezu infracciones a los derechos d\'autor.\nCalca NON para nomar esta imaxe pa desaniciar
El to agradecimientu animara a %1$s
¡Ai, esto nun ta siquier categorizao!
Esta imaxe ta baxo %1$s categoríes.
@@ -463,13 +458,12 @@
Ver los nun lleíos
Asocedió un error al escoyer les imaxes
Espera…
- Les imaxes destacaes son creaciones de talentosos fotógrafos y ilustradores que la comunidá de Wikimedia Commons reconoció como les de mayor calidá del sitiu.
Les imaxes xubíes via Llugares Cercanos son les imaxes que se cargaron descubriendo llugares nel mapa.
Esta función permite que los editores unvien una nota Gracies a los usuarios que realicen ediciones útiles usando un pequeñu enllaz d\'agradecimientu na páxina d\'historial o na de diferencies.
Exemplos d\'imaxes bones pa xubir a Commons
Exemplos d\'imaxes que nun tienen de xubise
Saltar esta imaxe
- Falló la descarga. Nun podemos descargar el ficheru ensin permisu d\'almacenamientu esternu.
+ Falló la descarga. Nun podemos descargar el ficheru ensin permisu d\'almacenamientu esternu.
Alministrar etiquetes EXIF
Escoyer qué etiquetes EXIF tienen de caltenese nes cargues
Autor
@@ -502,7 +496,7 @@
Logo
Porque ye
Compartir imaxe per
- %s nun fizó entá nenguna contribución
+ %1$s nun fizó entá nenguna contribución
¡Cuenta creada!
Testu copiáu al cartafueyu
Notificación marcada como lleida
@@ -511,7 +505,7 @@
Existe
Precisa foto
Tipu de llugar:
- Ponte, muséu, hotel etc.
+ Ponte, muséu, hotel etc.
¡¡Falló daqué al aniciar sesión, tienes de reaniciar la contraseña!!
MEDIOS
CLASES FÍES
@@ -537,4 +531,5 @@
Nun s\'alcontraron llugares, tenta cambiar los criterios de gueta.
Confirmar
Instrucciones
+ Permisu opcional: llograr l\'allugamientu actual pa suxerir categoríes
diff --git a/app/src/main/res/values-az/error.xml b/app/src/main/res/values-az/error.xml
index 6e9503c43..53a971367 100644
--- a/app/src/main/res/values-az/error.xml
+++ b/app/src/main/res/values-az/error.xml
@@ -5,7 +5,7 @@
* Nemoralis
-->
- Nasazlıq
+ Commons çökdü
Uups. Nəsə düzgün çalışmır!
Nə etdiyinizi bizə deyin, sonra e-poçt vasitəsilə bizimlə paylaşın. Bu, bizə bunu düzəltməyə kömək edəcək!
Təşəkkürlər!
diff --git a/app/src/main/res/values-az/strings.xml b/app/src/main/res/values-az/strings.xml
index c516c53d4..df906b74a 100644
--- a/app/src/main/res/values-az/strings.xml
+++ b/app/src/main/res/values-az/strings.xml
@@ -15,7 +15,7 @@
-->
Commons Facebook səhifəsi
- Commons Github Mənbə Kodu
+ Commons GitHub mənbə kodu
Commons Loqotipi
Commons Veb-saytı
Məkan seçicidən çıxın
@@ -39,18 +39,14 @@
- %1$d fayl yüklənir
- %1$d fayllar yüklənir
-
- - (%1$d)
- - (%1$d)
-
Yükləmələrə Başlanılır
- - %d yükləmə emal edilir
- - %d yükləmə emal edilir
+ - %1$d yükləmə emal edilir
+ - %1$d yükləmə emal edilir
- - %d yükləmə
- - %d yükləmə
+ - %1$d yükləmə
+ - %1$d yükləmə
- Bu şəkil %1$s lisenziyası altında yayımlanacaq
@@ -94,7 +90,7 @@
Yükləmə növbədə (məhdud əlaqə rejimi aktivdir)
%1$s yükləndi!
Yükləmənizə baxmaq üçün toxunun
- Fayl yüklənir: %s
+ Fayl yüklənir: %1$s
%1$s yüklənir
%1$s yüklənməsi başa çatdı
%1$s yükləmək alınmadı
@@ -131,6 +127,7 @@
Kateqoriyalarda axtar
Medianızın təsvir etdiyi elementləri axtarın (dağ, Tac Mahal və s.)
Yadda saxla
+ Daşan menyu
Yenilə
Siyahı
(Hələ yükləmə yoxdur)
@@ -143,6 +140,7 @@
Nizamlamalar
Qeydiyyatdan keç
Seçilmiş şəkillər
+ Seçilmiş şəkillər, Wikimedia Commons icmasının saytda ən yüksək keyfiyyət kimi seçdiyi yüksək ixtisaslı fotoqrafların və illüstratorların töhfələridir.
Xüsusi Seçici
Kateqoriya
Yoxlanış
@@ -159,11 +157,18 @@
Siz hələ heç bir şəkil yükləməmisiniz.
Yenidən cəhd edin
İmtina
+ Dilin adını yaz
+ Son axtarışlar
+ Bütün dillər
Bu şəkli yükləməklə bildirirəm ki, bu mənim şəxsi işimdir, onda müəllif hüququ ilə qorunan material və ya selfilər yoxdur və <a href=\"https://commons.wikimedia.org/wiki/Commons:Policies_and_guidelines\">Vikianbar qaydalarına</a> riayət edir.
Endir
Defolt lisenziya
Əvvəlki başlıq və təsvirdən istifadə et
Tema
+ Attribution-ShareAlike 4.0
+ Attribution 4.0
+ Attribution-ShareAlike 3.0
+ Attribution 3.0
CC BY 3.0
Vikianbar Vikipediyada istifadə olunan şəkillərin əksəriyyətinə ev sahibliyi edir.
Şəkilləriniz bütün dünyada insanları maarifləndirməyə kömək edir!
@@ -212,6 +217,7 @@
Təsvir
Müzakirə
Müəllif
+ Yükləyici
Yüklənmə tarixi
Lisenziya
Koordinatlar
@@ -221,15 +227,14 @@
2FA kodu
E-poçt doğrulama kodu
Həqiqətən çıxış etmək istəyirsiniz?
- Media şəkli uğursuz oldu
Heç bir alt kateqoriya tapılmadı
Heç bir üst kateqoriya tapılmadı
Zao dağı
Lamalar
Göy qurşağı körpüsü
Lalə
- Vikipediyaya xoş gəlmisiniz
- Müəlliflik hüquqlarına xoş gəlmisiniz
+ Ümumi Vikipediya məqaləsinin sxematik şəkli.
+ Üzərində müəllif hüququ simvolu olan kağız yığınının rəsmi.
Sidney Opera Evi
İmtina
Aç
@@ -262,6 +267,7 @@
Yükləmə prosesi aktiv internetə çıxış tələb edir. Şəbəkə bağlantınızı yoxlayın.
Şəkildə tapılan problemlər
Zəhmət olmasa, yalnız özünüz çəkdiyiniz şəkilləri yükləyin. İnternetdən tapdığınız şəkilləri yükləməyin.
+ Yükləmələr
Tətbiqdaxili kadrları yadda saxla
Tətbiqdaxili kamera ilə çəkilmiş şəkilləri cihazın yaddaşında saxla
Hesabınıza daxil olun
@@ -333,6 +339,7 @@
Sorğu
Bu şəkli yükləmək olar?
Sual
+ Əmin deyiləm
Nəticə
Silinməyi tələb edilən şəkilləri yükləməyə davam etsəniz, hesabınız blok olunacaq. Sorğunu bitirmək istədiyinizə əminsiniz?
Yüklədiyiniz şəkillərin %1$s+ ədədi silinib. Silinməyi tələb edilən şəkilləri yükləməyə davam etsəniz, hesabınız blok olunacaq.\n\nTəlimata yenidən baxmaq və sonra hansı növ şəkilləri yükləməli və ya yükləməməli olduğunuzu öyrənməyə kömək etmək üçün testdən keçmək istəyirsiniz?
@@ -342,6 +349,7 @@
Vikianbarın məqsədlərindən biri keyfiyyətli şəkillər toplamaqdır. Ona görə də bulanıq şəkillər yüklənməməlidir. Həmişə yaxşı işıqlandırma ilə gözəl şəkillər çəkməyə çalışın.
Texnologiya və ya mədəniyyəti təsvir edən şəkillər üçün Vikianbarda həmişə yer var.
Cavabların %1$s ədədi düzgündür. Təbriklər!
+ Davam et
Suala cavab vermək üçün iki variantdan birini seçin
Giriş müddəti bitib. Zəhmət olmasa, yenidən daxil olun.
Bunu dostlarınızla paylaşın!
@@ -365,12 +373,11 @@
Nailiyyətlər
Profil
Rozetlər
- Statistika
Qəbul edilən təşəkkürlər
Seçilmiş şəkillər
\"Yaxınlıqdakı yerlər\" vasitəsilə şəkillər
- Səviyyə %d
- %s (Səviyyə %s)
+ Səviyyə %1$d
+ %1$s (Səviyyə %2$s)
Yüklənən şəkillər
Geri qaytarılan şəkillər
İstifadə olunan şəkillər
@@ -395,13 +402,438 @@
Yaddaş icazəsi
Şəkilləri yükləmək üçün cihazınızın xarici yaddaşına giriş icazəsi lazımdır.
Artıq şəkillərə ehtiyacı olan ən yaxın yeri görməyəcəksiniz. Bununla belə, istəyirsinizsə, bu bildirişi Parametrlərdə yenidən aktivləşdirə bilərsiniz.
+ Addım %1$d/%2$d: %3$s
+ Növbəti
+ Əvvəlki
+ %1$s adlı fayl artıq mövcuddur. Davam etmək istədiyinizə əminsiniz?\n\nQeyd: Fayl adına uyğun şəkilçi avtomatik olaraq əlavə olunacaq.
+ Cihazınızda heç bir uyğun xəritə proqramı tapılmadı. Bu funksiyadan istifadə etmək üçün xəritə tətbiqini quraşdırın.
+ Şəkillər
+ Məkanlar
+ Kateqoriyalar
+ Əlfəcinlərə əlavə et/çıxar
+ Əlfəcinlər
+ Siz heç bir əlfəcin əlavə etməmisiniz
+ Əlfəcinlər
+ Jurnalların toplanması başladı. Zəhmət olmasa, proqramı YENİDƏN BAŞLADIN, daxil olmaq istədiyiniz əməliyyatı yerinə yetirin və sonra yenidən \"Jurnal faylını göndər\" düyməsinə klikləyin
+ Səhvən yükləmişəm
+ Bunun ictimai olaraq görünəcəyini bilmirdim
+ Bunun məxfiliyim üçün pis olduğunu anladım
+ Fikrimi dəyişdim, daha ictimaiyyətə görünməsini istəmirəm
+ Təəssüf ki, bu şəkil ensiklopediya üçün maraqlı deyil
+ %1$s tarixində yükləmişəm, ən azı %2$d məqalədə istifadə olunub.
+ Commons-a xoş gəlmisiniz!\n\nƏlavə düyməsini klikləməklə ilk medianızı yükləyin.
+ Heç bir kateqoriya seçilməyib
+ Kateqoriyaları olmayan şəkillər nadir hallarda istifadə olunur. Kateqoriya seçmədən davam etmək istədiyinizə əminsiniz?
+ Heç bir təsvir seçilməyib
+ Nəyi təsvir etdiyi qeyd olunan şəkillər daha asan tapılır və istifadə olunma ehtimalı daha yüksəkdir. Bunsuz davam etmək istədiyinizə əminsiniz?
+ Yükləməni ləğv et
+ Geri düyməsini istifadə etmək bu yükləməni ləğv edəcək və siz irəliləyişinizi itirəcəksiniz
+ Yükləməyə davam et
+ (Dəstədəki bütün şəkillər üçün)
+ Bu ərazini axtar
+ İcazə sorğusu
+ Şəkillərə ehtiyacı olan ən yaxın yeri göstərmək üçün cari məkanınızdan istifadə etməyimizi istəyirsiniz?
+ Məkan icazəsi olmadan şəkillərə ehtiyacı olan ən yaxın yeri göstərmək mümkün deyil
+ Bunu bir daha heç vaxt soruşma
+ Məkan icazəsi istə
+ Yaxınlıqdakı bildiriş kartına baxmaq funksiyası üçün lazım olduqda məkan icazəsi istəyin.
+ Xəta baş verdi və nailiyyətləri əldə edə bilmədik
+ Siz bizim nailiyyətləri hesablama sistemimizin öhdəsindən gələ bilməyəcək qədər çox töhfə vermisiniz. Bu möhtəşəm nailiyyətdir.
+ Bitmə:
+ Kampaniyaları göstər
+ Davam edən kampaniyalara bax
+ Silmə düyməsini göstər
+ Fərdi seçicidə \"Qovluğu Sil\" düyməsini aktiv et
+ Kameranın qeyd etmədiyi halda, tətbiqə məkanı əldə etməyə icazə verin. Bəzi cihaz kameraları məkanı qeyd etmir. Belə hallarda, tətbiqin əldə edilməsinə və ona məkan əlavə edilməsinə icazə vermək töhfənizi daha faydalı edir. Bunu istənilən vaxt Parametrlərdən dəyişə bilərsiniz
+ İcazə ver
+ Bağla
+ Zəhmət olmasa, parametrlərdən məkan icazəsini aktiv edin və yenidən cəhd edin. \n\nQeyd: Əgər proqram qısa müddət ərzində cihazdan yeri əldə edə bilmirsə, yükləmənin məkan məlumatı olmaya bilər.
+ Məkan EXIF-də mövcud olmadığı halda, tətbiqdaxili kamera onu şəkillərinizə əlavə etmək üçün məkan icazəsi tələb edir. Zəhmət olmasa, tətbiqin məkanınıza daxil olmasına icazə verin və yenidən cəhd edin.\n\nQeyd: Əgər proqram qısa müddət ərzində cihazdan yeri əldə edə bilmirsə, yükləmənin məkan məlumatı olmaya bilər.
+ Məkan icazəsi olmadığı üçün proqram çəkilişlərlə birlikdə məkanı qeyd etməyəcək
+ GPS söndürüldüyü üçün proqram çəkilişlərlə birlikdə məkanı qeyd etməyəcək
+ Sənəd əsaslı foto seçicidən istifadə et
+ Yeni Android foto seçicisi məkan məlumatını itirmək riski daşıyır. Əgər istifadə edirsinizsə, aktivləşdirin.
+ Bunun söndürülməsi yeni Android foto seçicisini işə sala bilər. Bu, məkan məlumatını itirmək riski daşıyır.\n\nƏtraflı məlumat üçün \"Ətraflı məlumat\" üzərinə klikləyin.
+ Siz artıq kampaniyaları görməyəcəksiniz. Bununla belə, istəyirsinizsə, bu bildirişi Parametrlərdə yenidən aktivləşdirə bilərsiniz.
+ Bu funksiya şəbəkə bağlantısı tələb edir. Bağlantı parametrlərinizi yoxlayın.
+ Şəkili emal edərkən xəta baş verdi. Zəhmət olmasa, yenidən cəhd edin!
+ Redaktə üçün token əldə edilir
+ Kateqoriya yoxlaması üçün şablon əlavə edilir
+ %1$s üçün kateqoriya yoxlanışı tələb olunur
+ Kateqoriya yoxlanışı tələb olunur
+ Kateqoriya yoxlanışı tələb olundu
+ Kateqoriya yoxlama sorğusu işləmədi
+ %1$s üçün kateqoriya yoxlanışı tələb olundu
+ %1$s üçün kateqoriya yoxlanışı tələb oluna bilmədi
+ %1$s üçün kateqoriya yoxlanışı tələb olunur
+ Oldu
Təşəkkür uğurla göndərildi
- Təşəkkür göndərilə bilmədi %1$s
+ %1$s istifadəçisinə təşəkkür göndərildi
+ %1$s istifadəçisinə təşəkkür göndərilə bilmədi
Təşəkkür göndərilir: Xəta
- %1$s üçün təşəkkür göndərişi
+ %1$s üçün təşəkkür göndərilir
+ Bu, müəllif hüququ qaydalarına uyğundur?
+ Bu, düzgün kateqoriyalaşdırılıb?
+ Bu, layihə əhatəsindədir?
+ Töhfə verənə təşəkkür etmək istəyirsiniz?
+ Bu şəklin heç bir faydası yoxdursa, silinməyə namizəd etmək üçün NO düyməsini klikləyin.
+ Loqolar, skrinşotlar, film afişaları çox vaxt müəllif hüquqları pozuntusudur.\nBu şəklin silinməsinə namizəd göstərmək üçün NO düyməsini basın
+ %1$s təşəkkürlərinizlə həvəsləndiriləcək
+ Ah, bu heç kateqoriyalaşdırılmayıb!
+ Bu şəkil %1$s kateqoriyasındadır.
+ Əhatə dairəsindən kənardadır, çünki
+ Müəllif hüququ pozuntusudur, çünki
+ Növbəti şəkil
+ Bəli, niyə də yox
+ Bu düyməni klikləsəniz, sizə Wikimedia Commons-dan bu yaxınlarda yüklənmiş başqa bir şəkil veriləcək
+ Wikimedia Commons-un keyfiyyətini yaxşılaşdırmaq üçün şəkilləri nəzərdən keçirə bilərsiniz.\nYoxlamanın üç parametri var:\n\n- Bu şəkil əhatə dairəsindədir?\nƏgər Xeyr (deyil) seçsəniz, bu şəkilə silinmə namizədliyi şablonu əlavə olunacaq.\n\n- Bu şəkil müəllif hüquqları qaydalarına əməl edir?\n Əgər Xeyr (müəllif hüquqları qaydalarına əməl etmir) seçsəniz, bu şəkilə silinmə namizədliyi şablonu əlavə olunacaq.\n\n- Bu şəkilə düzgün kateqoriyalar əlavə edilib?\n Əgər Xeyr (düzgün kateqoriyalaşdırılmayıb) seçsəniz, bu şəkilə kateqoriyalaşdırma tələbi şablonu əlavə olunacaq.\n\nƏgər hər şey qaydasındadırsa, şəkilə heç bir şablon əlavə olunmur və sizə şəkil yükləyən istifadəçiyə təşəkkür etmək imkanı verilir.
+ Heç bir şəkil istifadə edilməyib
+ Heç bir şəkil geri qaytarılmayıb
+ Heç bir şəkil yüklənməyib
+ Oxunmamış bildirişləriniz yoxdur
+ Oxunmuş bildirişləriniz yoxdur
+ Jurnalı paylaş
+ E-poçt qutunuzu yoxlayın
+ Oxunmuşlara bax
+ Oxunmamışlara bax
+ Şəkilləri seçərkən xəta baş verdi
+ Zəhmət olmasa, gözləyin…
+ Yaxınlıqdakı yerlər vasitəsilə yüklənən şəkillər xəritədə yerləri kəşf etməklə yüklənən şəkillərdir.
+ Bu funksiya redaktorlara faydalı redaktə edən istifadəçilərə tarixçə səhifəsində və ya fərq səhifəsində kiçik bir təşəkkür keçidindən istifadə edərək Təşəkkür bildirişi göndərməyə imkan verir.
+ Növbəti elementlərə kopiyala
+ Kopiyalandı!
+ Vikianbara yükləmək üçün yaxşı şəkillərin nümunələri
+ Yüklənməməli şəkil nümunələri
+ Bu şəkli atla
+ Yükləmə uğursuz oldu. Xarici yaddaş icazəsi olmadan faylı endirə bilmərik.
+ EXIF teqlərini idarə et
+ Yükləmələrdə hansı EXIF teqlərinin saxlanacağını seç
+ Müəllif
+ Müəllif hüququ
+ Məkan
+ Kamera modeli
+ Linza modeli
+ Seriya nömrələri
+ Proqram təminatı
+ Şəkilləri birbaşa telefonunuzdan Wikimedia Commons-a yükləyin. Commons Tətbiqini indi endirin: %1$s
+ Proqramı paylaş...
+ Şəkil məlumatı
+ Bu mesajı bir daha göstərmə
+ Heç bir kateqoriya tapılmadı
+ Heç bir təsvir tapılmadı
+ Ləğv edilmiş yükləmə
+ Əvvəlki şəklin başlığı və ya təsviri üçün heç bir məlumat yoxdur
+ %1$s niyə silinməlidir?
+ %1$s %2$s tərəfindən yüklənib
+ Defolt təsvir dili
+ Silinməyə namizəd göstərilir
+ Uğurlu
+ %1$s silinməyə namizəd göstərildi.
+ Uğursuz
+ Silinməsini tələb etmək mümkün olmadı.
+ heç bir məqalədə istifadə olunmayan selfi
+ tamamilə bulanıq
+ mənasız, məqalədə istifadəyə tamamilə yararsızdır
+ Mətbuat fotosu
+ İnternetdən təsadüfi foto
+ Loqo
+ Panoram azadlığının pozulması
+ Çünki
+ Kateqoriyaları yeniləməyə çalışır.
+ Kateqoriya yeniləməsi
+ Uğurlu
+
+ - %1$s kateqoriyası əlavə edildi.
+ - %1$s kateqoriyaları əlavə edildi.
+
+ Kateqoriyalar əlavə etmək mümkün olmadı.
+ Kateqoriyaları yenilə
+ Təsvirləri yeniləməyə çalışır.
+ Təsvirləri redaktə et
+
+ - %1$s təsviri əlavə edildi.
+ - %1$s təsvirləri əlavə edildi.
+
+ Təsvirləri əlavə etmək mümkün olmadı.
+ Koordinatları yeniləməyə çalışır.
+ Koordinatların yenilənməsi
+ Təsvir yeniləməsi
+ Başlıq yeniləməsi
+ Uğurlu
+ %1$s koordinatları əlavə edildi.
+ Təsvirlər əlavə olundu.
+ Başlıq əlavə olundu.
+ Koordinatları əlavə etmək mümkün olmadı.
+ Təsvirləri əlavə etmək mümkün olmadı.
+ Başlıq əlavə etmək mümkün olmadı.
Şəklin koordinatları yenilənməyib
+ Təsvirləri əldə etmək mümkün deyil.
+ Təsvirləri və başlıqları redaktə et
+ Şəkli paylaş
+ Hələ heç bir töhfə verməmisiniz
+ %1$s hələ heç bir töhfə verməyib
+ Hesab yaradıldı!
+ Mətn buferə kopiyalandı.
Bildiriş oxunmuş olaraq işarələndi
+ Xəta baş verdi:
+ Yer vəziyyəti:
+ Mövcuddur
+ Foto lazımdır
+ Yer növü:
+ Körpü, muzey, otel və s.
+ Giriş zamanı xəta baş verdi. Siz parolunuzu sıfırlamalısınız!
+ MEDİA
+ AŞAĞI SİNİFLƏR
+ ÜST SİNİFLƏR
+ ALT KATEQORİYALAR
+ ANA KATEQORİYALAR
+ Yaxınlıqda yer tapıldı
+ Bunlar %1$s şəkilləridir?
+ Bu %1$s şəklidir?
+ Əlfəcinlər
+ Parametrlər
+ Əlfəcinlərdən silindi
+ Əlfəcinlərə əlavə edildi
+ Nəsə xəta baş verdi. Divar kağızı qurmaq mümkün olmadı
+ Divar kağızı kimi təyin et
+ Divar kağızı qurulur. Zəhmət olmasa, gözləyin...
+ Sistemi izlə
+ Gecə
+ Gündüz
+ Məkan parametrlərini açmaq alınmadı. Zəhmət olmasa, məkanı əl ilə aktiv edin
+ Ən yaxşı nəticələr üçün Yüksək Dəqiqlik rejimini seçin.
+ Məkan aktiv edilsin?
Zəhmət olmasa tətbiqin cari məkanınızı göstərmək üçün məkan xidmətlərini aktiv edin
+ Yaxınlıqdakılar səhifəsinin düzgün işləməsi üçün məkanın aktivləşdirilməsi lazımdır
Yaxınlıqdakı şəkilləri göstərmək üçün məkan icazəsi lazımdır
+ Məkanı avtomatik təyin etmək üçün məkan icazəsi verməlisiniz.
+ Bu iki şəkli eyni yerdə çəkmisiniz? Sağdakı şəklin enini/uzunluğunu istifadə etmək istəyirsiniz?
+ Daha çox yüklə
+ Heç bir yer tapılmadı, axtarış kriteriyalarınızı dəyişməyə cəhd edin.
+ Təklif olunan təkmilləşdirmələr:
+ - İstifadə qabiliyyətini yaxşılaşdırmaq üçün bu şəkilə kateqoriyalar əlavə edin.
+ - Bu şəkli heç bir təsviri olmayan əlaqəli Vikipediya məqaləsinə əlavə edin.
+ Şəkli Vikipediyaya əlavə et
+ Bu şəkli %1$s dilli Vikipediya məqaləsinə əlavə etmək istəyirsiniz?
+ Təsdiq et
+ Təlimatlar
+ 1. Aşağıdakı vikimətndən istifadə et:
+ 2. Təsdiq etə klikləmək Vikipediya məqaləsini açacaq
+ 3. Məqalədə şəkliniz üçün uyğun bölmə tapın
+ 4. Həmin bölmə üçün Redaktə et ikonasına (qələm kimi olan) klikləyin.
+ 5. Vikimətni müvafiq yerə yapışdırın.
+ 6. Lazım gələrsə, müvafiq yerləşdirmə üçün vikimətni redaktə edin. Ətraflı məlumat üçün <a href=\"https://en.wikipedia.org/wiki/Wikipedia:Manual_of_Style/Images#How_to_place_an_image\">buraya</a> baxın.
+ 7. Məqaləni dərc edin
+ Vikimətni mübadilə buferinə köçür
+ dayan
+ davam et
+ Dayandırıldı
+ Daha çox
+ Əlfəcinlər
+ Nailiyyətlər
+ Liderlər lövhəsi
+ Reytinq:
+ Say:
+ Dərəcə
+ İstifadəçi
+ Sayı
+ Lider lövhəsi avatarı kimi təyin et
+ Avatar olaraq təyin edilir, gözləyin
+ Avatar təyin edildi
+ Yeni avatarı təyin edərkən xəta baş verdi, yenidən cəhd edin
+ Avatar olaraq təyin et
+ İllik
+ Həftəlik
+ Hamısı
+ Yükləmə
+ Yaxınlıqdakılar
+ İstifadə olunur
+ Mənim dərəcəm
+ Məhdud bağlantı rejimi aktivləşdirildi!
+ Məhdud bağlantı rejimi deaktiv edilib. Gözləyən yükləmələr indi davam edəcək.
+ Məhdud Bağlantı Rejimi
+ Keyfiyyətli Şəkillər
+ Keyfiyyətli şəkillər müəyyən keyfiyyət standartlarına cavab verən (əsasən texniki xarakter daşıyır) və Vikimedia layihələri üçün dəyərli diaqramlar və ya fotoşəkillərdir.
+ Yükləmə davam etdirilir…
+ Yükləmə dayandırılır…
+ Yükləmə ləğv edilir…
+ Yükləməni ləğv et
+ Siz məhdud bağlantı rejimini aktiv etmisiniz. Bütün yükləmələr dayandırılıb və siz bu rejimi söndürdükdən sonra davam edəcək.
+ Məhdud bağlantı rejimi aktivdir.
+ Zəhmət olmasa şəklinizin nəyi göstərdiyini izah edən qısa məlumat yazın. Təsvirdə şəklin maraqlı və ya tipik və ya nadir olduğunu söyləyin və görünən və ya olmayan konteksti izah edin. Bacardığınız qədər dəqiq terminologiyadan istifadə edin.
+ Zəhmət olmasa, bu şəklin təsvir etdiyi bütün konsepsiyaları tapın və seçin. Bacardığınız qədər konkret olun. Şəkil birdən çox elementi təsvir edirsə, onların hamısını seçin. Daha spesifik teqlər varsa, ümumiləşdirilmiş teqləri seçməyin.
+ Müvafiq kateqoriyaları seçin. Təsvirlərdən fərqli olaraq kateqoriyalar yalnız ingilis dilindədir.
+ Commons şəkillərinizi hamı tərəfindən yenidən istifadə edilə və uyğunlaşdırıla bilən edir. Bütün hüquqlardan imtina etmək istəyirsiniz? Sizə istinad edilməsini istəyirsiniz? Uyğunlaşdırmaların eyni lisenziya ilə paylaşılmasını istəyirsiniz?
+ Təsvir edir
+ Etiket
+ Təsvir
+ Media lisenziyası
+ Media detalları
+ Kateqoriya səhifəsinə bax
+ Element səhifəsinə bax
+ Proqram istifadəçi interfeysi dili
+ Başlıq və təsviri silir
+ Daha ətraflı oxu
+ Bütün dillərdə
+ Məkan seç
+ Tənzimləmək üçün sürüşdürün və böyüdün
+ Məkan seç
+ Xəritə proqramında göstər
+ Məkanı redaktə et
+ Məkan seçicinin şəkil görünüşü
+ Məkan seçicisinin şəkil görünüşünün kölgəsi
+ Şəklin yeri
+ Yerin düzgün olub olmadığını yoxlayın
+ Etiket
+ Açıqlama
+ Elementlər
+ Xüsusi Seçici
+ Şəkillər yoxdur
+ Oldu
+ Geriyə
+ Xüsusi Şəkil Seçicisinə xoş gəlmisiniz
+ Bu seçici Commons-a hansı şəkilləri artıq yüklədiyinizi göstərir.
+ Soldakı şəkildən fərqli olaraq, sağdakı şəkildə artıq yükləndiyini göstərən Commons loqosu var.\n \nŞəklin önizləməsi üçün toxunub saxlayın.
+ Möhtəşəm
+ Bu şəkil artıq Commons-a yüklənib.
+ Texniki səbəblərə görə proqram eyni vaxtda %1$d+ şəkil yükləyə bilməz. %1$d yükləmə limiti %2$d ilə aşıldı.
+ Bağla
+ Maks: %1$d
+ Xəta: Yükləmə Limiti aşıldı
+ Bu şəkil Viki Abidələri Sevir müsabiqəsində iştirak edəcək
+ Abidələri göstər
+ Viki Abidələri Sevir ayıdır!
+ ƏTRAFLI ÖYRƏN
+ Viki Abidələri Sevir
+ Viki Abidələri Sevir Vikimedia tərəfindən təşkil edilən abidələr üçün beynəlxalq foto müsabiqəsidir
+ İcazə lazımdır
+ Yaxınlıqdakı xəritələr düzgün işləməsi üçün PHONE STATE oxumalıdır
+ Yaxınlıqdakı yerlərə baxmaq üçün məkan xidmətlərini aktiv edin.
+ Xəritədə yaxınlıqdakı yerləri göstərmək üçün məkana giriş tələb olunur.
+ %1$s istifadəçisinin töhfələri
+ %1$s istifadəçisinin nailiyyətləri
+ İstifadəçi profilinə bax
+ Təsvirləri redaktə et
+ Kateqoriyaları redaktə et
+ Qabaqcıl seçimlər
+ Siz Yaxınlıqdakı sorğunu fərdiləşdirə bilərsiniz. Xəta alsanız, sıfırlayın və tətbiq edin.
+ Tətbiq et
+ Sıfırla
+ Məkan məlumatı viki redaktorlarına şəklinizi tapmaqda kömək edir və onu daha faydalı edir.\nSon yükləmələrinizin yer məlumatı yoxdur.\nKamera proqramınızın parametrlərində məkanı aktiv etməyi təklif edirik.\nYüklədiyiniz üçün təşəkkür edirik!
+ Məkan tapılmadı
+ Bu şəklin çəkildiyi yeri əlavə etməyə nə deyirsiniz?\nMəkan məlumatları viki redaktorlarına şəklinizi tapmağa kömək edir və onu daha faydalı edir.\nTəşəkkürlər!
+ Məkan əlavə et
+ Zəhmət olmasa, açıq şəkildə paylaşmaq istəmədiyiniz hər hansı məlumatı bu e-poçtdan silin. Həmçinin, unutmayın ki, e-poçt ünvanınız və əlaqəli ad və profil şəkliniz hamıya görünəcək.
+ Detallar
+ Nailiyyətlər yalnız prod versiyasında mövcuddur. Tərtibatçı sənədlərini yoxlayın.
+ Lider lövhəsi yalnız prod versiyasında mövcuddur. Zəhmət olmasa tərtibatçı sənədlərini yoxlayın.
+ Zəhmət olmasa yalnız öz çəkdiyiniz şəkilləri yükləyin. Müəllif hüquqları ilə qorunan şəkilləri yükləyənlər bloklanacaq. Bu, beta versiyasına da aiddir. Proqramı sınadığınız üçün təşəkkür edirik!
+ Zəhmət olmasa, açıq şəkildə paylaşmaq istəmədiyiniz hər hansı məlumatın seçimini ləğv edin.
+ API səviyyəsi
+ Android versiyası
+ Cihaz istehsalçısı
+ Cihaz modeli
+ Cihaz adı
+ Şəbəkə tipi
+ Rəy bildirdiyiniz üçün təşəkkür edirik
+ Rəy göndərərkən xəta baş verdi
+ Rəyiniz nədir?
+ Rəyiniz
+ Yükləmə üçün deyil kimi işarələ
+ Yükləmə üçün deyil işarəsini sil
+ Yükləmə üçün deyil kimi işarələnir
+ Yükləmə üçün deyil işarəsi silinir
+ Artıq emal edilmiş şəkilləri göstər
+ Artıq emal edilmiş şəkilləri gizlədilir
+ Əlavə heç bir şəkil tapılmadı
+ Bu şəkil artıq yüklənib
+ Yükləmək üçün bu şəkli seçmək mümkün deyil
+ Şəkil seçildi
+ Şəkil yükləmək üçün deyil kimi işarələnib
+ Bildir
+ Ağ fon təyin et
+ Qara fon təyin et
+ Pozuntu bildir
+ Bu istifadəçini şikayət et
+ Bu məzmunu bildir
+ Bu istifadəçinin bloklanmasını istə
+ Tam Ekran Seçim Rejiminə xoş gəlmisiniz
+ Böyütmək və kiçiltmək üçün iki barmağınızdan istifadə edin.
+ Bu hərəkətləri yerinə yetirmək üçün sürətli və uzun sürüşdürün: \n- Sol/Sağ: Əvvəlki/növbətiyə keçmək\n- Yuxarı: Seçmək\n- Aşağı: Yükləmə üçün deyil kimi işarələmək.
+ Liderlər lövhəsi avatarınızı qurmaq üçün istənilən şəklin üç nöqtəli menyusunda \"Avatar kimi təyin et\" seçiminə klikləyin.
+ Koordinatlar dəqiq koordinatlar deyil, lakin bu şəkli yükləyən şəxs onların kifayət qədər yaxın olduğunu düşünür.
+ Yaddaş İcazəsi rədd edildi
+ Bu elementi paylaşmaq mümkün deyil
+ Funksionallıq üçün icazələr tələb olunur
+ Faydalı təsvir yazmağı öyrənin
+ Faydalı başlıq yazmağı öyrənin
+ Nailiyyətlərinizə baxın
+ Şəkli redaktə et
+ Məkanı redaktə et
+ Məkan yeniləndi!
+ Məkanı sil
+ Məkan silinməsi xəbərdarlığı
+ Məkan şəkilləri daha faydalı və tapıla bilən edir. Bu şəkildən məkanı həqiqətən silmək istəyirsiniz?
+ Məkan silindi!
+ Müəllifə təşəkkür et
+ Müəllifə təşəkkür göndərilərkən xəta baş verdi.
+ Girişinizin müddəti başa çatıb. Zəhmət olmasa, yenidən daxil olun.
+ GPX fayllarını açmaq üçün heç bir proqram mövcud deyil
+ Fayl uğurla saxlanıldı
+ GPX faylını açmaq istəyirsiniz?
+ KML faylını açmaq istəyirsiniz?
+ KML faylını saxlamaq alınmadı.
+ GPX faylını saxlamaq alınmadı.
+ KML faylı saxlanılır...
+ GPX faylı saxlanılır...
+
+ - %1$d şəkil seçildi
+ - %1$d şəkil seçildi
+
+ Xahiş edirik unutmayın ki, çoxlu yükləmədəki bütün şəkillər eyni kateqoriyalara və təsvirlərə sahib olacaq. Şəkillər təsvirləri və kateqoriyaları paylaşmırsa, zəhmət olmasa, bir neçə ayrı yükləmə həyata keçirin.
+ Çoxlu yükləmələr haqqında qeyd
+ Bu elementlə bağlı problemi Vikidataya bildir
+ Zəhmət olmasa, şərh yazın.
+ Müzakirə
+ \'%1$s\' elementi haqqında nəsə yazın. O, hamıya görünəcək.
+ \'%1$s\' artıq mövcud deyil, ondan heç bir şəkil çəkilə bilməz.
+ \'%1$s\' başqa yerdədir.
+ \'%1$s\' başqa yerdədir. Xahiş edirik aşağıda doğru yeri qeyd edin və mümkünsə düzgün eni və uzunluğu yazın.
+ Digər problem və ya məlumat (zəhmət olmasa aşağıda izah edin).
+ Rəyiniz aşağıdakı viki səhifəsinə yerləşdiriləcək: <a href=\"https://commons.wikimedia.org/wiki/Commons:Mobile_app/Feedback\">Commons:Mobile app/Feedback</a>
+ Bütün yükləmələri ləğv etmək istədiyinizə əminsiniz?
+ Bütün yükləmələr ləğv edilir...
+ Yükləmələr
+ Gözləmədə
+ Uğursuz
+ Yer datasını yükləmək mümkün olmadı
Qovluğu Sil
+ Silinməni təsdiqlə
+ %2$d elementdən ibarət %1$s qovluğunu silmək istədiyinizə əminsiniz?
+ Sil
+ İmtina
+ %1$s qovluğu uğurla silindi
+ %1$s qovluğunu silmək alınmadı
+ Qovluq məzmununu silmə xətası: %1$s
+ Paket ID-si üçün qovluq yolunu əldə etmək alınmadı: %1$d
+ Bu yerin heç şəkli yoxdur, get birini çək!
+ Bu yerin artıq şəkli var.
+ İndi bu yerdə şəklin olub-olmaması yoxlanılır.
+ Yükləyərkən xəta baş verdi
+ Heç bir istifadə tapılmadı
+ Vikianbar
+ Digər vikilər
+ Faylın istifadəsi
+ Hesab
+ Hesabı sil
+ Hesabın silinməsi xəbərdarlığı
+ Silinmə <b>son yoldur</b> və <b>yalnız redaktəni həmişəlik dayandırmaq və həmçinin mümkün qədər çox keçmiş əlaqələrinizi gizlətmək</b> istədiyiniz zaman istifadə edilməlidir.<br/><br/> Vikianbarda hesabın silinməsi vanishing adlanan prosesdə sizin töhfələrinizi başqalarının tanıya bilməməsi üçün hesab adınızı dəyişdirməklə həyata keçirilir. <b>Hesabın silinməsi tam anonimliyə zəmanət vermir və ya layihələrə edilmiş töhfələri silmir</b>.
+ Başlıq
+ Başlıq buferə kopiyalandı
+ Təbrik edirik, bu albomdakı bütün şəkillər ya yüklənib, ya da yükləmək üçün deyil kimi işarələnib.
+ Kəşf et bölməsində göstər
+ Yaxınlıqda göstər
+ Yaradan və yükləyən: %1$s
+ %1$s tərəfindən yaradılmış və %2$s tərəfindən yüklənmişdir
+ Silinməyə namizəd göstərilib
diff --git a/app/src/main/res/values-b+ms+Arab/strings.xml b/app/src/main/res/values-b+ms+Arab/strings.xml
index 272498526..7d111a54c 100644
--- a/app/src/main/res/values-b+ms+Arab/strings.xml
+++ b/app/src/main/res/values-b+ms+Arab/strings.xml
@@ -92,8 +92,7 @@
هاڤوس
ڤنچاڤاين
ڤروفيل
- ستاتيستيک
- تاهڤ
+ تاهڤ %1$d
ايميج دموات ناءيق
سومبڠن
بردکتن
diff --git a/app/src/main/res/values-b+nds+NL/strings.xml b/app/src/main/res/values-b+nds+NL/strings.xml
index 2bfdc3fde..9e51daaad 100644
--- a/app/src/main/res/values-b+nds+NL/strings.xml
+++ b/app/src/main/res/values-b+nds+NL/strings.xml
@@ -3,7 +3,10 @@
* Servien
-->
- Disse aofbeelding völt onder de lisensie %1$s
+
+ - Disse aofbeelding völt onder de lisensie %1$s
+ - Disse aofbeelding völt onder de lisensie %1$s
+
Wikimedia Commons
Veurkeuren
Gebrukersnaam
diff --git a/app/src/main/res/values-b+roa+tara/strings.xml b/app/src/main/res/values-b+roa+tara/strings.xml
index 3edb3e0c5..7846f922b 100644
--- a/app/src/main/res/values-b+roa+tara/strings.xml
+++ b/app/src/main/res/values-b+roa+tara/strings.xml
@@ -9,18 +9,14 @@
- %1$d fail in caricamende
- %1$d fail in caricamende
-
- - (%1$d)
- - (%1$d)
-
Stoche accumenze le carecaminde
- - Ste processe %d carecamende
- - Ste processe %d carecaminde
+ - Ste processe %1$d carecamende
+ - Ste processe %1$d carecaminde
- - %d carecamende
- - %d carecaminde
+ - %1$d carecamende
+ - %1$d carecaminde
- %1$d Carecamende
@@ -65,10 +61,10 @@
Sus a
Pruève arrete
Annulle
- Attribbuzione-Condivide a \'u stesse mode 4.0
- Attribbuzione 4.0
- Attribbuzione-Condivide a \'u stesse mode 3.0
- Attribbuzione 3.0
+ Attribbuzione-Condivide a \'u stesse mode 4.0
+ Attribbuzione 4.0
+ Attribbuzione-Condivide a \'u stesse mode 3.0
+ Attribbuzione 3.0
CC0
CC BY-SA 3.0
CC BY 3.0
@@ -100,8 +96,7 @@
Aggiornate da mobbile
Nisciuna recerche recende
Scangìlle
- Statisteche
- Levèlle
+ Levèlle %1$d
Condrebbute
Vicine a
Notifeche
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 459f75852..bd6bbe828 100644
--- a/app/src/main/res/values-b+sr+Latn/strings.xml
+++ b/app/src/main/res/values-b+sr+Latn/strings.xml
@@ -7,7 +7,7 @@
-->
Fejsbuk stranica Ostave
- Izvorni kod na Github-u
+ Izvorni kod na Github-u
Logo Ostave
Veb-sajt Ostave
Pošalji
@@ -28,18 +28,15 @@
- %1$d datoteka se otprema
- %1$d datoteke se otpremaju
-
- - %1$d otpremanje
- - %1$d otpremanja
-
Pokretanje otpremanja
-
- - Procesuiranje %d otpremanje
- - Procesuiranje %d otpremanja
+
+ - Procesuiranje %1$d otpremanje
+ - Procesuiranje %1$d otpremanje
+ - Procesuiranje %1$d otpremanja
- - %d otpremanje
- - %d otpremanja
+ - %1$d otpremanje
+ - %1$d otpremanja
- Slika će se voditi pod licencom %1$s
@@ -83,7 +80,7 @@
Otpremanje je u redu (omogućen režim ograničene veze)
Datoteka „%1$s” je otpremljena.
Dodirnite da biste videli otpremanje
- Otpremanje datoteke „%s”
+ Otpremanje datoteke „%1$s”
Otpremanje datoteke „%1$s”
Završavanje otpremanja datoteke „%1$s”
Otpremanje datoteke „%1$s” nije uspelo
@@ -126,6 +123,7 @@
Podešavanja
Otvori nalog
Izabrane slike
+ Istaknute slike su slike od veoma iskusnih fotografa i ilustratora, koje je zajednica Vikimedijine ostave odabrala kao neke od najvećeg kvaliteta na sajtu.
Kategorija
Pregled slika
O aplikaciji
@@ -146,10 +144,10 @@
Podrazumevana licenca
Koristi prethodan naslov i opis
Tema
- Autorstvo-Deliti pod istim uslovima 4.0
- Autorstvo 4.0
- Autorstvo-Deliti pod istim uslovima 3.0
- Autorstvo 3.0
+ Autorstvo-Deliti pod istim uslovima 4.0
+ Autorstvo 4.0
+ Autorstvo-Deliti pod istim uslovima 3.0
+ Autorstvo 3.0
CC0
CC BY-SA 3.0
CC BY 3.0
@@ -210,15 +208,14 @@
Priključite se našem kanalu beta verzija na Google Play-u i ranije pristupajte novim funkcijama i ispravkama grešaka
2FA kod
Zaista želite da se odjavite?
- Medijska slika neuspešna
Potkategorije nisu pronađene
Nadređene kategorije nisu pronađene
Planina Zao
Lame
Dugin most
Tulipan
- Dobrodošlica Vikipediji
- Dobrodošlica za autorska prava
+ Dobrodošlica Vikipediji
+ Dobrodošlica za autorska prava
Sidnejska opera
Otkaži
Otvori
@@ -348,11 +345,10 @@
Izbriši
Dostignuća
Profil
- Statistika
Zahvaljivanja
Izabrane slike
Slike preko \"Mesta u blizini\"
- Nivo
+ Nivo %1$d
Otpremljene slike
Slike koje nisu uklonjene
Iskorišćene slike
@@ -437,11 +433,11 @@
Nije moguće zatražiti proveru kategorije za %1$s
Zahtevanje provere kategorije za %1$s
Urađeno
- Slanje zahvalnice: Uspešno
- Uspešno poslata zahvalnica na %1$s
- Nije uspelo slanje zahvalnice %1$s
- Slanje zahvalnice: Nije uspelo
- Slanje zahvalnica za %1$s
+ Slanje zahvalnice: Uspešno
+ Uspešno poslata zahvalnica na %1$s
+ Nije uspelo slanje zahvalnice %1$s
+ Slanje zahvalnice: Nije uspelo
+ Slanje zahvalnica za %1$s
Da li prati pravila autorskih prava?
Da li je ovo korektno kategorizovano?
Da li je za Ostavu?
@@ -466,14 +462,13 @@
Prikaži nepročitano
Došlo je do greške pri izboru slika
Sačekajte…
- Istaknute slike su slike od veoma iskusnih fotografa i ilustratora, koje je zajednica Vikimedijine ostave odabrala kao neke od najvećeg kvaliteta na sajtu.
Slike otpremljene preko Mesta u blizini su slike koje su otpremljene otkrivanjem mesta na mapi.
Ova mogućnost omogućava urednicima da pošanju obaveštenje zahvaljivanja korisnicima koji su napravili korisne izmene - korišćenjem male veze za zahvaljivanje na stranici istorije ili razlici izmena.
Kopirano
Primeri dobrih slika za otpremanje na Ostavu
Primeri slika koje nisu za otpremanje
Preskoči sliku
- Preuzimanje nije uspelo!! Ne možemo preuzeti datoteku bez dozvole za pristup spoljašnjoj memoriji.
+ Preuzimanje nije uspelo!! Ne možemo preuzeti datoteku bez dozvole za pristup spoljašnjoj memoriji.
Upravljanje EXIF oznakama
Odaberite koje EXIF želite da sačuvate u otpremanjima
Autor
@@ -483,8 +478,6 @@
Model objektiva
Serijski brojevi
Softver
- Pristup lokaciji medija je odbijen
- Možda nećemo moći da automatski pribavimo podatke o lokaciji iz slika koje otpremite. Dodajte odgovarajuću lokaciju za svaku sliku pre objavljivanja
Otpremi fotografije na Vikimedijinu Ostavu direktno sa svog telefona. Preuzmi aplikaciju Ostave sada: %1$s
Podeli aplikaciju preko...
Informacije o slici
@@ -532,7 +525,7 @@
Uredi opise i natpise
Podeli sliku preko
Nemate još uvek doprinosa
- %s još nije doprinosio/la
+ %1$s još nije doprinosio/la
Nalog je otvoren.
Tekst je kopiran u privremenu memoriju
Obaveštenje je označeno pročitanim
@@ -541,7 +534,7 @@
Postoji
Potrebna slika
Tip mesta:
- Most, muzej, hotel itd.
+ Most, muzej, hotel itd.
Došlo je do greške sa prijavljivanjem, morate da promenite vašu lozinku !!
Obližnje mesto je pronađeno
Da li je ovo fotografija %1$s?
@@ -576,7 +569,7 @@
5. Nalepite vikitekst na odgovarajuće mesto.
6. Izmenite vikitekst za odgovarajuće pozicioniranje, ukoliko je potrebno. Više informacija možete pronaći <a href=\"https://en.wikipedia.org/wiki/Wikipedia:Manual_of_Style/Images#How_to_place_an_image\">ovde</a>.
7. Objavite članak
- Kopirajte viki sintaksu u međuspremnik
+ Kopirajte viki sintaksu u međuspremnik
pauziraj
nastavi
Pauzirano
@@ -638,7 +631,7 @@
Nazad
Dobrodošli u Prilagođen birač slika
Ovaj birač vam prikazuje koje su slike već otpremljene na Ostavu.
- Za razliku od slika sa leve strane, slike na desnoj strani imaju logo Ostave, što označava da su već otpremljene. Dodirnite i držite za pregled slike.
+ Za razliku od slika sa leve strane, slike na desnoj strani imaju logo Ostave, što označava da su već otpremljene. Dodirnite i držite za pregled slike.
Odlično
Ova slika je već otpremljena na Ostavu.
Ova slika će biti uvrštena u takmičenje Viki voli spomenike
@@ -647,8 +640,9 @@
Viki voli spomenike
Viki voli spomenike je međunarodno takmičenje fotografija spomenika, koje organizuje Vikimedija
Potrebna je dozvola
- Doprinosi korisnika/ce: %s
- Dostignuća korisnika/ce: %s
+ Neobavezna dozvola: preuzmi trenutnu lokaciju za predloge kategorija
+ Doprinosi korisnika/ce: %1$s
+ Dostignuća korisnika/ce: %1$s
Prikaži korisničku stranicu
Izmeni kategorije
Napredne opcije
@@ -657,7 +651,7 @@
Podaci o lokaciji pomažu viki urednicima da pronađu vašu sliku, čineći je korisnijom.\nVaša skorašnja otpremanja nemaju lokaciju.\nPredlažemo vam da uključite lokaciju u podešavanjima aplikacije vaše kamere.\nHvala vam za otpremanja!
Lokacija nije pronađena
Šta mislite o dodavanju mesta gde je napravljena ova slika?\nPodaci o lokaciju pomažu viki urednicima da pronađu vašu sliku, čineći je korisnijom.\nHvala vam!
- Dodaj lokaciju
+ Dodaj lokaciju
Uklonite iz ovog mejla bilo sve informacije koje ne želite da delite javno. Takođe, imajte na umu da će vaša imejl adresa sa koje objavljujete, i povezano ime i profilna slika, biti javno vidljivi.
Detalji
Dostignuća su dostupna samo u produkcionoj verziji, proverite dokumentaciju za programere.
@@ -678,8 +672,8 @@
Ukloni oznaku \"nije za otpremanje\"
Označavanje kao \"nije za otpremanje\"
Uklanjanje oznake \"nije za otpremanje\"
- Prikaži već izvršene slike
- Sakrivanje već izvršenih slika
+ Prikaži već izvršene slike
+ Sakrivanje već izvršenih slika
Nije pronađeno više slika
Ova slika je već otpremljena
Nije moguće odabrati ovu sliku za otpremanje
@@ -697,7 +691,7 @@
Odbijene dozvole za skladište
Nije moguće podeliti ovu stavku
- - %d slika je odabrana
- - %d slika je odabrano
+ - %1$d slika je odabrana
+ - %1$d slika je odabrano
diff --git a/app/src/main/res/values-b+tg+Cyrl/strings.xml b/app/src/main/res/values-b+tg+Cyrl/strings.xml
index 3404183dc..d577ee149 100644
--- a/app/src/main/res/values-b+tg+Cyrl/strings.xml
+++ b/app/src/main/res/values-b+tg+Cyrl/strings.xml
@@ -90,7 +90,7 @@
Координатҳо
Пешниҳод нашудааст
Ягон зергурӯҳе пайдо нашуд
- Ба Википедиа хуш омадед.
+ Ба Википедиа хуш омадед.
Пӯшидан
Кушодан
Пӯшидан
@@ -130,8 +130,7 @@
Таърихи ҷустуҷӯҳо ҳазф шуд
Номзад барои ҳазф
Ҳазв
- Омор
- Сатҳ
+ Сатҳ %1$d
Рӯйхат
Баъдӣ
Пешина
diff --git a/app/src/main/res/values-b+tt+Cyrl/strings.xml b/app/src/main/res/values-b+tt+Cyrl/strings.xml
new file mode 100644
index 000000000..bcc058062
--- /dev/null
+++ b/app/src/main/res/values-b+tt+Cyrl/strings.xml
@@ -0,0 +1,227 @@
+
+
+
+ Викиҗыентыкның Facebook бите
+ Викиҗыентыкның гитхабтагы башлангыч кодлары
+ Викиҗыентык логотипы
+ Викиҗыентыкның веб-сайты
+ Урынны сайлау тәрәзәсеннән чыгарга
+ Сакларга
+ Башка тасвирлама өстәргә
+ Яңа кертем өстәргә
+ Камерадан яңа кертем өстәргә
+ Камерадан яңа кертем өстәргә
+ Алдагы кертемнәр галереясыннан фото өстәргә
+ Язмалар
+ Тел тасвирламасы
+ Язма
+ Тасвирлама
+ Сурәт
+ Барысы
+ Күчертергә
+ Күренешне эзлә
+ Урын халәте
+ Көн сурәте
+
+ - %1$d файл йөкләнә
+ - %1$d файл йөкләнә
+ - %1$d файл йөкләнә
+ - %1$d файл йөкләнә
+
+ Йөкләү башлана
+
+ - %1$d йөкләүне эшкәртү
+ - %1$d йөкләүне эшкәртү
+ - %1$d йөкләүне эшкәртү
+ - %1$d йөкләүне эшкәртү
+
+
+ - %1$d йөкләү
+ - %1$d йөкләү
+ - %1$d йөкләү
+ - %1$d йөкләү
+
+ Тикшерергә
+ Күренеш
+ Гомуми
+ Кире элемтә
+ Шәхсилек
+ Викиҗыентык
+ Көйләнмәләр
+ Викиҗыентыкка йөкләргә
+ Йөкләү бара...
+ Кулланучы исеме
+ Серсүз
+ Commons Beta хисапъязмагызга керегез
+ Керү
+ Серсүзне оныттыгызмы?
+ Теркәлү
+ Керү бара…
+ Бераз көтегезче...
+ Язмалар һәм тасвирламалар яңартыла
+ Бераз көтегезче...
+ Керү уңышлы башкарылды!
+ Системага кереп булмады!
+ Файл табылмады. Башка файлны кулланып карагызчы.
+ Кабатлаулар саны нык артып китте! Йөкләүне кире кагыгыз яки яңадан кабатлагыз.
+ Батәринең оптималь кулланылышын сүндерергәме?
+ Йөкләү башланды!
+ %1$s төялде!
+ Төялгән файлыгызны карау өчен басыгыз
+ Файлны төяү: %1$s
+ %1$s йөкләнә
+ %1$s йөкләве тәмамлана
+ %1$s йөкләнә алмады
+ %1$s йөкләнүе туктатылып калды
+ Карау өчен басыгыз
+ Карау өчен басыгыз
+ Минем соңгы төяүләрем
+ Төяү хатасы
+ Төяү бара
+ Галереядан
+ Фото ясарга
+ Якында
+ Минем төяүләрем
+ Сылтаманы күчереп ал
+ Сылтама алмашу буферына күчереп алынды
+ Уртаклашырга
+ Файл битен күрсәтергә
+ Язма (Зарур)
+ Бу файлның исемен билгеләгезче
+ Тасвирлама
+ Язма
+ Кереп булмый - челтәр хатасы
+ Гафу итегез, мондый исемле кулланучы Викиҗыентыкта блокланган булган.
+ Системага кереп булмады!
+ Төяү
+ Бу файллар төркеме өчен исемне кертегез
+ Төя
+ Төркемнәрне сайла
+ Сакла
+ Яңарту
+ Исемлек
+ Төялгән файллар юк әле!
+ Төркемнәр
+ Көйләнмәләр
+ Теркәл
+ Сакланган сурәтләр
+ Кулланучы селекторы
+ Төркем
+ Тикшер
+ Кушымта турында
+ Яшеренлек сәясәте
+ Төзүчеләр
+ Кушымта турында
+ Почта клиенты урнаштырылмаган
+ Күптән түгел кулланылган төркемнәр
+ Беренче синхронлаштыруны көтү...
+ Сез әле бер сурәтне дә төямәдегез.
+ Кабатла
+ Кире как
+ Иңләргә
+ Гадәттәге рөхсәтнамә килешүе
+ Алдагы исемне һәм тамвирламаны куллан
+ Күренеш
+ Attribution-ShareAlike 4.0
+ Attribution 4.0
+ Attribution-ShareAlike 3.0
+ Attribution 3.0
+ Викиҗыентыктагы сурәтләр Википедиянең күпчелек күләмендә кулланыла.
+ Төягән сурәтләрегез бөтен дөньядагы кешеләргә белем алырга ярдәм итә ала!
+ Зинһар, бары тик үзегез ясаган яки төшергән сурәтләрне генә төягез:
+ Табигать объектлары (мәсәлән, чәчәкләр, хайваннар, таулар)
+ Файдалы җисемнәр (мәсәлән, велосипедлар, вокзаллар)
+ Билгеле кешеләр (мәсәлән, мэрыгыз, сез очраткан олимпияче-спортсменнар)
+ Зинһар, боларны ТӨЯМӘГЕЗ:
+ Селфилар яки дусларыгызның фотолары
+ Интернеттан иңләгән фотолар
+ Ирекле булмаган программаларның скриншотлары
+ Төяү мисалы:
+ Атамасы: Сидней опера театры
+ Сурәтләрегезне төягез. Википедия мәкаләләрен кызыклырак ясарга булышыгыз!
+ Википедиядә кулланылучы сурәтләр Викиҗыентыкта саклана.
+ Төягән сурәтләрегез бөтен дөньядагы кешеләргә белем алырга ярдәм итә ала.
+ Авторлык хокуклары белән сакланган материалларны, мәсәлән, Интернетта табылган плакатлар, китап тышлары һ. б. ш. сурәтләрне кулланмаска тырышыгыз.
+ Бу сезгә аңлашыламы?
+ Әйе!
+ Тулырак мәгълүмат
+ Төркемнәр
+ Йөкләнә...
+ Бернәрсә дә сайланмаган
+ Язмасыз
+ Тасвирламасыз
+ Фикерләшү юк
+ Билгесез лицензия
+ Яңарту
+ Тышкы саклагычны куллану рөхсәтен сорау
+ Локациягезне табуны сорау
+ Кушымтада ясалган фотолар өчен локацияне яздыр
+ Ярар
+ Игътибар
+ Кабатлана торган файл исеме табылды
+ Төя
+ Әйе
+ Юк
+ Язма
+ Исем
+ Тасвирланган феномен
+ Тасвирлама
+ Фикер алышу
+ Автор
+ Төяп куючы
+ Төяү вакыты
+ Лицензия
+ Координатлар
+ Билгеләнмәгән
+ Бета-тестерга әйләнергә
+ Сез чыннан да чыгарга телисезме?
+ Астөркемнәр табылмады.
+ Баш тарту
+ Ачарга
+ Ябарга
+ Баш бит
+ Төяргә
+ Якын-тирәдә
+ Кушымта турында
+ Көйләнмәләр
+ Кире элемтә
+ GitHub аркылы кире элемтә
+ Чыгарга
+ Кулланма
+ Белдермәләр
+ Тикшерү
+ тасвирлама табылмады
+ Файлның Викиҗыентыктагы бите
+ Викимәгълүмат элементы
+ Википедия мәкаләсе
+ Сурәт артык караңгы.
+ Бу сурәт Викиҗыентыкта бар инде.
+ Бу сурәт башка урында ясалган булган.
+ Барыбер бу сурәтне төяргә телисезме?
+ Тоташтыру хатасы
+ Сурәттә читенлекләр табылды
+ Кушымтада ясалган фотоларны сакла
+ Җайланма камерасы ярдәмендә эшләнгән фотоларны җайланмада сакла
+ Хата! Сылтама табылмады
+ Бетерергә тәкъдим ит
+ Бу сурәтне бетерергә тәкъдим ителде.
+ Күбрәк мәгълүмат өчен битне карагыз
+ Калдырып үт
+ Керү
+ Викитекст алмашу буферына күчереп алынды
+ Юнәлешләр
+ Викимәгълүмат
+ Википедия
+ Викиҗыентык
+ Безне бәяләгез
+ Еш бирелгән сораулар (ЕБС, ЧаВо)
+ Бору
+ Саклауга рөхсәтләр кире кагылды
+ Бу объект белән уртаклашу мөмкин түгел
+
diff --git a/app/src/main/res/values-ba/strings.xml b/app/src/main/res/values-ba/strings.xml
index 0fc68329f..b128e71ab 100644
--- a/app/src/main/res/values-ba/strings.xml
+++ b/app/src/main/res/values-ba/strings.xml
@@ -8,7 +8,7 @@
-->
Викимилектең Facebook-бите
- Гитхабта Викимилектең сығанаҡ кодтары
+ Гитхабта Викимилектең сығанаҡ кодтары
Викимилек логотибы
Викимилектең веб-сайты
Урынлашҡан ерҙе билдәләү тәҙрәһенән сығырға
@@ -31,21 +31,20 @@
- %1$d файл йөкләнә
- %1$d файл йөкләнә
-
- - (%1$d)
- - (%1$d)
-
Йөкләүҙе башлау
- - %d файлды эшкәртеү
- - %d файлды эшкәртеү
+ - %1$d файлды эшкәртеү
+ - %1$d файлды эшкәртеү
-
+
- %1$d тейәү
- %1$d тейәүҙәр
- %1$d тейәүҙәре
- Был рәсем %1$s аҫтында лицензия аласаҡ
+
+ - Был рәсем %1$s аҫтында лицензия аласаҡ
+ - Был рәсем %1$s аҫтында лицензия аласаҡ
+
Тикшереү
Тышҡы күренеш
Дөйөм
@@ -75,7 +74,7 @@
Йөкләү сиратҡа ҡуйылды (сикләнгән бәйләнеш режимы эшләтеп ебәрелде).
%1$s йөкләнде!
Ошонда баҫып йөкләнгән файлды ҡара
- Файлды йөкләү: %s
+ Файлды йөкләү: %1$s
%1$s йөкләнә
Йөкләү %1$s тамамланды
%1$s йөкләп булманы
@@ -140,10 +139,10 @@
Программа көйләгән лицензия
Элекке атаманы һәм тасуирламаны ҡулланыу
Биҙәү темаһы
- Attribution-ShareAlike 4.0
- Attribution 4.0
- Attribution-ShareAlike 3.0
- Attribution 3.0
+ Attribution-ShareAlike 4.0
+ Attribution 4.0
+ Attribution-ShareAlike 3.0
+ Attribution 3.0
CC0
CC BY-SA 3.0
CC BY 3.0
@@ -199,14 +198,13 @@
Google Play аша беҙҙең бета-версия каналына яҙыл һәм иң тәүгеләрҙән булып яңы көйләүҙәр, хата төҙәтеүҙәр тураһында хәбәрҙар бул
2ФА Коды
Ысынлап та системанан сыҡҡығыҙ киләме?
- Медиарәсем хатаһы
Субкатегориялар табылманы
Зао тауы
Ламалар
Йәйғорло күпер
Ләлә
- Википедияға рәхим итегеҙ
- Рәхим итегеҙ - автор хоҡуҡтары
+ Википедияға рәхим итегеҙ
+ Рәхим итегеҙ - автор хоҡуҡтары
Сидней опера театры
Кире алыу
Асырға
@@ -257,4 +255,5 @@
Телдәр
Кире алырға
Ҡабатларға
+ Мотлаҡ булмаған рөхсәт: категория тәҡдиме өсөн ошо урынды алыу
diff --git a/app/src/main/res/values-ban/strings.xml b/app/src/main/res/values-ban/strings.xml
index fa34d7f68..b832c831b 100644
--- a/app/src/main/res/values-ban/strings.xml
+++ b/app/src/main/res/values-ban/strings.xml
@@ -5,7 +5,7 @@
-->
Kaca Facebook Commons
- Kode Wit Commons ring Github
+ Kode Wit Commons ring Github
Logo Commons
Situs Commons
Medal pamilihan genah
@@ -23,21 +23,18 @@
Makejang
Alih Duur
Cingakan Panyelehan
- Genah Negara
+ Genah Pernyataan
Gambar rahina mangkin
- %1$d berkas kaunggah
- %1$d berkas kaunggah
-
- - (%1$d)
-
Ngawitin Unggahan
- - Ngamargiang %d unggahan
+ - Ngamargiang %1$d unggahan
- - %d unggahan
+ - %1$d unggahan
- Gambar puniki pacang kaicain lisénsi %1$s
@@ -72,7 +69,7 @@
Unggahan ring antrian (mode tetemon kawates kauripang)
%1$s kaunggah!
Gecek antuk nyingakin unggahan Ida
- Munggahang berkas: %s
+ Munggahang berkas: %1$s
%1$s kaunggah
Muputang pangunggahan %1$s
Ngunggahang %1$s gagal
@@ -136,10 +133,10 @@
Lisénsi baku
Anggén murda miwah pidarta sadurungné
Téma
- Atribusi-MawagiSarupa 4.0
- Atribusi 4.0
- Atribusi-MawagiSarupa 3.0
- Atribusi 3.0
+ Atribusi-MawagiSarupa 4.0
+ Atribusi 4.0
+ Atribusi-MawagiSarupa 3.0
+ Atribusi 3.0
CC0
CC BY-SA 3.0
CC BY 3.0
@@ -188,8 +185,8 @@
Llama
Titi Kakuwung
Tulip
- Rahajeng Rauh ring Wikipédia
- Rahajeng Rauh Hak Ripta
+ Rahajeng Rauh ring Wikipédia
+ Rahajeng Rauh Hak Ripta
Umah Opera Sydney
Wangdé
Buka
@@ -267,10 +264,9 @@
Usap
Panghargaan
Profil
- Statistik
Haturan Suksma Katampi
Gambar Pilihan
- Tingkat
+ Tingkat %1$d
Gambar Kaupload
Gambar Kaanggén
Pituut
@@ -288,7 +284,7 @@
Selehin wawengkon puniki
Pinunasan lugra
Puput
- Kirim Suksma majeng %1$s
+ Kirim Suksma majeng %1$s
Gambar salanturnyané
Nggih, ngujang ten
Cingak wacén
@@ -314,7 +310,7 @@
Suksés
Suksés
Soroh genah:
- Kreteg, museum, hotél, msl.
+ Kreteg, museum, hotél, msl.
MÉDIA
Chinabuku
Pangaturan
diff --git a/app/src/main/res/values-bcl/strings.xml b/app/src/main/res/values-bcl/strings.xml
index 7b43481a8..510b0b26f 100644
--- a/app/src/main/res/values-bcl/strings.xml
+++ b/app/src/main/res/values-bcl/strings.xml
@@ -8,17 +8,10 @@
- %1$d file uploading
- %1$d an mga files ikinakarga
-
- - \@string/contributions_subtitle_zero
- - (%1$d)
- - (%1$d)
-
- - Starting %1$d upload
- Nagpuon na %1$d an pagkarga
-
- - %1$d upload
+
- %1$d mga karga
@@ -100,8 +93,8 @@
Kargahon
Lisensiya
Maggamit nin dating titulo/deskripsiyon
- Attribution-ShareAlike 3.0
- Attribution 3.0
+ Attribution-ShareAlike 3.0
+ Attribution 3.0
CC0
Mag-ambag kan saimong mga imahe. Magtabang sa mga artikulo nin Wikipedia na magka-igwa nin buhay!
An mga imahe sa Wikipedia naggigikan sa mga Karugaringan nin Wikimedia.
diff --git a/app/src/main/res/values-bg/strings.xml b/app/src/main/res/values-bg/strings.xml
index 6ee931542..477c6f92b 100644
--- a/app/src/main/res/values-bg/strings.xml
+++ b/app/src/main/res/values-bg/strings.xml
@@ -17,12 +17,12 @@
Сайт на Общомедия
Изпращане
- - Обработване на %d качване
- - Обработване на %d качвания
+ - Обработване на %1$d качване
+ - Обработване на %1$d качвания
- - %d качване
- - %d качвания
+ - %1$d качване
+ - %1$d качвания
- Изображението ще бъде лицензирано под условията на лиценза %1$s
@@ -59,7 +59,7 @@
Качването започна!
Файл %1$s е качен!
Докоснете, за да видите качения файл
- Качване на файл: %s
+ Качване на файл: %1$s
„%1$s“ е в процес на качване
Завършвам с качване на „%1$s“
Качването на „%1$s“ е неуспешно
@@ -116,10 +116,10 @@
Лиценз по подразбиране
Използване на предишното заглавие и описание
Облик
- Признание-Споделяне на споделеното 4.0
- Признание 4.0
- Признание-Споделяне на споделеното 3.0
- Признание 3.0
+ Признание-Споделяне на споделеното 4.0
+ Признание 4.0
+ Признание-Споделяне на споделеното 3.0
+ Признание 3.0
CC0
CC BY-SA 3.0
CC BY 3.0
@@ -177,7 +177,7 @@
Лами
Мостът Рейнбоу Бридж
Лале
- Добре дошли в Уикипедия
+ Добре дошли в Уикипедия
Операта в Сидни
Отказ
Отваряне
@@ -261,7 +261,6 @@
Допустимо ли е качването на този екранен кадър?
Няма скорошни търсения
Предлагане за изтриване
- Статистика
Изображения чрез „Близки места“
Брой качени в Общомедия изображения, без значение от софтуера за качване
Процент от качените от Вас изображения в Общомедия, които не са били изтрити
@@ -271,6 +270,7 @@
При качването използвайте персонализирано авторско име вместо потребителското си име
Персонализирано авторско име
Наблизо
+ Известия
Известия (прочетени)
Списък
Следваща
@@ -308,4 +308,5 @@
напълно размазано
Наблизо
Прочетете повече
+ Отказ
diff --git a/app/src/main/res/values-blk/strings.xml b/app/src/main/res/values-blk/strings.xml
index 03bd8e747..16ebe9456 100644
--- a/app/src/main/res/values-blk/strings.xml
+++ b/app/src/main/res/values-blk/strings.xml
@@ -7,7 +7,7 @@
-->
Commons(လိုꩻအာသုင်ꩻ) Facebook လိတ်မဲ့ငါ
- Commons(လိုꩻအာသုင်ꩻ) Github ရွီးခိုႏကိုဒ်
+ Commons(လိုꩻအာသုင်ꩻ) Github ရွီးခိုႏကိုဒ်
Commons(လိုꩻအာသုင်ꩻ) လိုင်ကို
Commons(လိုꩻအာသုင်ꩻ) ဝဲက်သုဲက်
အဝ်ႏအုံထွောင်းထာꩻလွိုက်ကို ထန်ႏသွော့ꩻ
@@ -18,10 +18,6 @@
- အဝ်ႏထူႏဒင်ႏဖုဲင် %1$d ဗာႏကျာꩻ
- အဝ်ႏထူႏဒင်ႏဖုဲင် %1$d ဗာႏကျာꩻ
-
- - (%1$d)
- - (%1$d)
-
ထူႏဒင်ႏစအပ်လိုပ်ဖိုင်ႏ
ထိုမ်ႏလွူꩻထွား
အပွိုင်အငုဲင်ꩻ
@@ -45,7 +41,7 @@
စဲစ်ထွားမုꩻအောင်ႏတဝ်းသြ၊ နွို့ထဲင်းယင်းသွော့အကောက်တလဲင်ႏဟုဲင်းသြ။
ဒင်ႏစလဲဉ်းအပ်လိုတ်
%1$s ဒင်ႏထွူလဲဉ်း!
- အဝ်ႏဒင်ႏဖုဲင်ကျာꩻ- %s
+ အဝ်ႏဒင်ႏဖုဲင်ကျာꩻ- %1$s
%1$s အဝ်ႏဒင်ႏအပ်လိုတ်ကျာꩻ
နျꩻထွား
နျꩻထွား
@@ -90,10 +86,10 @@
မူလလုဲင်သိဉ်
ထူႏသုင်ꩻ ကတူႏစဲဉ်ႏတောမ်ႏ အွောန်ႏနယ်ချက် ကရီးခါ
Theme
- Attribution-ShareAlike 4.0
- Attribution 4.0
- Attribution-ShareAlike 3.0
- Attribution 3.0
+ Attribution-ShareAlike 4.0
+ Attribution 4.0
+ Attribution-ShareAlike 3.0
+ Attribution 3.0
မွေး!
ထဲင်းယင်း သꩻတင်ꩻအချက်လက်
ကဏ္ဍဖုံႏ
@@ -119,7 +115,7 @@
ဒင်ႏခါꩻဒါႏမွူးနီꩻ
လုဲင်သိဉ်
ကိုဩဒိနိတ်
- ဝီခီပီးဒီးယားယို ကျိုႏဆွုမ်ႏဒျာႏသြ။
+ ဝီခီပီးဒီးယားယို ကျိုႏဆွုမ်ႏဒျာႏသြ။
မာꩻတဝ်းဒွုမ်
ပေ့ꩻထိုꩻ
ဗဟိုႏ
@@ -155,8 +151,7 @@
ကဏ္ဍဖုံႏ
ထိုမ်ႏခါꩻမုꩻဖုံႏ အဝ်ႏတဝ်း
ယားကုဲင်
- စာႏရင်ꩻဖုံႏ
- အရန်း
+ အရန်း %1$d
ကောင်မွဥ်း ဖေႏသေချက်
ခွုမ်မာꩻချက်ဖုံႏ
ဖေႏသေချက်ဖုံႏ
diff --git a/app/src/main/res/values-bn/strings.xml b/app/src/main/res/values-bn/strings.xml
index 041ce3722..74c2f65b7 100644
--- a/app/src/main/res/values-bn/strings.xml
+++ b/app/src/main/res/values-bn/strings.xml
@@ -54,18 +54,14 @@
- %1$dটি ফাইল আপলোড হচ্ছে
- %1$dটি ফাইল আপলোড হচ্ছে
-
- - (%1$d)
- - (%1$d)
-
আপলোড শুরু হচ্ছে
- - %dটি আপলোড প্রক্রিয়াকরণ হচ্ছে
- - %dটি আপলোড প্রক্রিয়াকরণ হচ্ছে
+ - %1$dটি আপলোড প্রক্রিয়াকরণ হচ্ছে
+ - %1$dটি আপলোড প্রক্রিয়াকরণ হচ্ছে
- - %dটি আপলোড
- - %dটি আপলোড
+ - %1$dটি আপলোড
+ - %1$dটি আপলোড
- এই ছবিটি %1$s এর অধীনে লাইসেন্স করা হবে
@@ -108,7 +104,7 @@
আপলোড সারিবদ্ধ করা হয়েছে (সীমিত সংযোগ মোড সক্রিয় করা)
%1$ আপলোড হয়েছে!
আপনার আপলোড দেখতে টোকা দিন
- ফাইল আপলোড করা হচ্ছে: %s
+ ফাইল আপলোড করা হচ্ছে: %1$s
%1$s আপলোড হচ্ছে
%1$s আপলোড করা শেষ হয়েছে
%1$s আপলোড করা যায়নি
@@ -177,10 +173,10 @@
পূর্বনির্ধারিত লাইসেন্স
পূর্ববর্তী শিরোনাম ও বিবরণ ব্যবহার করুন
থিম
- অ্যাট্রিবিউশন-শেয়ারঅ্যালাইক ৪.০
- অ্যাট্রিবিউশন ৪.০
- অ্যাট্রিবিউশন-শেয়ারঅ্যালাইক ৩.০
- সিসিইউ০০এ০এঅ্যাট্রিবিউসনইউ০০এ০৩.০
+ অ্যাট্রিবিউশন-শেয়ারঅ্যালাইক ৪.০
+ অ্যাট্রিবিউশন ৪.০
+ অ্যাট্রিবিউশন-শেয়ারঅ্যালাইক ৩.০
+ সিসিইউ০০এ০এঅ্যাট্রিবিউসনইউ০০এ০৩.০
সিসি০
সিসি বাই-এস ৩.০
সিসি বাই ৩.০
@@ -240,15 +236,14 @@
2FA কোড
ইমেল যাচাইকরণ কোড
আপনি কি সত্যিই প্রস্থান করতে চান?
- মিডিয়া চিত্র ব্যর্থ হয়েছে
কোন উপবিষয়শ্রেনী পাওয়া যায় নি।
কোনও মূল বিষয়শ্রেণী পাওয়া যায়নি
জাও পর্বত
লামা
রংধনুর সেতু
টিউলিপ
- উইকিপিডিয়ায় স্বাগতম
- স্বাগতম কপিরাইট
+ উইকিপিডিয়ায় স্বাগতম
+ স্বাগতম কপিরাইট
সিডনি অপেরা হাউস
বাতিল
খুলুন
@@ -367,12 +362,11 @@
কৃতিত্বগুলি
প্রোফাইল
ব্যাজ
- পরিসংখ্যান
ধন্যবাদ পেয়েছেন
নির্বাচিত ছবি
\"কাছাকাছি স্থান\" এর মাধ্যমে ছবি
- স্তর %d
- %s (স্তর %s )
+ স্তর %1$d
+ %1$s (স্তর %2$s )
আপলোডকৃত চিত্র
ছবিগুলো প্রত্যাবর্তন করা হয়নি
ব্যবহৃত ছবি
@@ -408,6 +402,7 @@
আবার কখনো দেখাবেন না
আপনি এত অবদান রেখেছেন যে আমাদের গণনা ব্যবস্থা তা গণনা করতে পারছে না। অভিনন্দন, এটাই চূড়ান্ত অর্জন।
সম্পন্ন
+ ধন্যবাদ পাঠানো সফল হয়েছে
এই চিত্রটি কি কপিরাইটের নিয়ম অনুসরণ করে?
এই চিত্রটিকে কি সঠিকভাবে বিষয়শ্রেণীকরণ করা হয়েছে?
এই চিত্রটি কি প্রকল্পের উদ্দেশ্যের সাথে সামঞ্জস্যপূর্ণ?
@@ -457,7 +452,7 @@
অস্তিত্ব আছে
চিত্র প্রয়োজন
স্থানের ধরন:
- সেতু, জাদুঘর, হোটেল ইত্যাদি।
+ সেতু, জাদুঘর, হোটেল ইত্যাদি।
মিডিয়া
কাছাকাছি স্থান পাওয়া গেছে
এটি কি %1$s-এর একটি চিত্র?
@@ -477,7 +472,7 @@
নিশ্চিত করুন
নির্দেশাবলী
৭. নিবন্ধটি প্রকাশ করুন
- ক্লিপবোর্ডে উইকিকোড অনুলিপি করুন
+ ক্লিপবোর্ডে উইকিকোড অনুলিপি করুন
থামান
পুনরায় শুরু করুন
থামানো হয়েছে
@@ -534,14 +529,15 @@
আরও জানুন
উইকি লাভস মনুমেন্টস
অনুমতি দরকার
- ব্যবহারকারীর অবদান: %s
- ব্যবহারকারীর অর্জন: %s
+ ঐচ্ছিক অনুমতি: বিষয়শ্রেণী পরামর্শের জন্য বর্তমান অবস্থান নেয়
+ ব্যবহারকারীর অবদান: %1$s
+ ব্যবহারকারীর অর্জন: %1$s
ব্যবহারকারীর পাতা দেখুন
উচ্চতর বিকল্প
প্রয়োগ করুন
পুনঃস্থাপন
কোন অবস্থান পাওয়া যায়নি
- অবস্থান যোগ করুন
+ অবস্থান যোগ করুন
বিস্তারিত
এপিআই লেভেল
অ্যান্ড্রয়েড সংস্করণ
diff --git a/app/src/main/res/values-br/strings.xml b/app/src/main/res/values-br/strings.xml
index 4d7d98cf8..c2a0e3e5c 100644
--- a/app/src/main/res/values-br/strings.xml
+++ b/app/src/main/res/values-br/strings.xml
@@ -11,7 +11,7 @@
-->
Pajenn Facebook Commons
- Kod mammenn Github Commons
+ Kod mammenn Github Commons
Logo Commons
Lec\'hienn web Commons
Kas
@@ -31,27 +31,26 @@
- %1$d restr o vezañ karget
- %1$d restr o vezañ karget
-
- - (%1$d).
- - (%1$d).
- - (%1$d).
- - (%1$d).
- - (%1$d).
-
- %1$d bellgargadenn loc\'het
+ - %1$d pellgargadennoù loc\'het
+ - %1$d pellgargadennoù loc\'het
+ - %1$d pellgargadennoù loc\'het
- %1$d pellgargadennoù loc\'het
- - %d enporzhiadur
- - %d enporzhiadur
- - %d enporzhiadur
- - %d enporzhiadur
- - %d enporzhiadur
+ - %1$d enporzhiadur
+ - %1$d enporzhiadur
+ - %1$d enporzhiadur
+ - %1$d enporzhiadur
+ - %1$d enporzhiadur
- - gant an aotre-implijout %1$s e vo ar skeudenn-mañ
- - gant an aotreoù-implijout %1$s e vo ar skeudenn-mañ
+ - Gant an aotre-implijout %1$s e vo ar skeudenn-mañ
+ - Gant an aotreoù-implijout %1$s e vo ar skeudenn-mañ
+ - Gant an aotreoù-implijout %1$s e vo ar skeudenn-mañ
+ - Gant an aotreoù-implijout %1$s e vo ar skeudenn-mañ
+ - Gant an aotreoù-implijout %1$s e vo ar skeudenn-mañ
- %1$d enporzhiadur
@@ -84,7 +83,7 @@
Kroget da enporzhiañ!
%1$s bet pellgaset !
Pouezit evit gwelet hoc\'h enporzhiadenn
- Oc\'h enporzhiañ ar restr: %s
+ Oc\'h enporzhiañ ar restr: %1$s
O enporzhiañ %1$s !
Oc\'h echuiñ enporzhiadenn %1$s
C\'hwitet en deus enporzhiañ %1$s
@@ -146,10 +145,10 @@
Aotre-implijout dre ziouer
Ober gant an titl hag an deskrivadur kent
Tem
- Deroadur-RannañHeñvel 4.0
- Deroadur 4.0
- Deroadur-RannañHeñvel 3.0
- Deroadur 3.0
+ Deroadur-RannañHeñvel 4.0
+ Deroadur 4.0
+ Deroadur-RannañHeñvel 3.0
+ Deroadur 3.0
CC0
CC BY-SA 3.0
CC BY 3.0
@@ -204,15 +203,14 @@
En em enskrivañ en hor c\'hanol beta war Google Play ha kaout ur rakmoned d\'an arc\'hwelioù nevez d\'an drein difaziet
Kod 2FA
Sur oc\'h e fell deoc\'h digevreañ ?
- C\'hwitadenn war skeudenn ar media
Isrummad ebet kavet
Rummad tad ebet kavet
Menez Zao
Lamaed
Pont Gwareg-ar-glav
Tulipez
- Donemat e Wikipedia
- Gwirioù oberour donemat
+ Donemat e Wikipedia
+ Gwirioù oberour donemat
Ti Opera Sydney
Nullañ
Digeriñ
@@ -308,11 +306,10 @@
Dilemel
Trec\'hioù
Profil
- Stadegoù
Trugarekadennoù resevet
Skeudennoù lakaet a-wel
Skeudennoù dre \"Lec\'hioù nepell\"
- Live
+ Live %1$d
Skeudennoù pellgarget
Skeudennoù nann nullet
Skeudennoù implijet
@@ -346,9 +343,9 @@
Aotren
Disteurel
Graet
- Trugarekaet eo bet %1$s gant berzh
- Ur fazi zo bet en ur drugarekaat %1$s
- Trugarekaat %1$s
+ Trugarekaet eo bet %1$s gant berzh
+ Ur fazi zo bet en ur drugarekaat %1$s
+ Trugarekaat %1$s
Skeudenn da-heul
Ya, perak pas
Skeudenn ebet implijet
@@ -386,7 +383,7 @@
Bez\' ez eus anezhañ
Ur skeudenn zo ezhomm
Seurt lec\'h:
- Pont, mirdi, leti h.a.
+ Pont, mirdi, leti h.a.
MEDIA
KLASOÙ BUGALE
KLASOÙ KERENT
@@ -435,13 +432,14 @@
Distreiñ
Fiskal
GOUZOUT HIROC\'H
- Degasadennoù an implijer: %s
- Taolioù-kaer an implijer: %s
+ Aotre diret : kaout al lec\'hiadur red evit kinnig rummadoù
+ Degasadennoù an implijer: %1$s
+ Taolioù-kaer an implijer: %1$s
Gwelet profil an implijer
Kemmañ ar rummadoù
Dibarzhioù araokaet
Lec\'hiadur ebet kavet
- Ouzhpennañ ul lec\'hiadur
+ Ouzhpennañ ul lec\'hiadur
Munudoù
Stumm Android
Seurt rouedad
diff --git a/app/src/main/res/values-bs/strings.xml b/app/src/main/res/values-bs/strings.xml
index 91860b1e1..beeba313b 100644
--- a/app/src/main/res/values-bs/strings.xml
+++ b/app/src/main/res/values-bs/strings.xml
@@ -12,20 +12,21 @@
- postavlja se %1$d datoteka
- postavlja se %1$d datoteka
-
- - \@string/contributions_subtitle_zero
- - postavljena %1$d datoteka
- - postavljenih datoteka: %1$d
-
- Započinjem postavljanje %1$d datoteke
- - Započinjem postavljanje %1$d datoteka/-e
+ - Započinjem postavljanje %1$d datoteke
+ - Započinjem postavljanje %1$d datoteka
-
+
- %1$d postavljanje
+ - %1$d postavljanja
- %1$d postavljanja
- Slika će se voditi pod licencom %1$s
+
+ - Ova slika će se voditi pod licencom %1$s
+ - Ove slike će se voditi pod licencom %1$s
+ - Ove slike će se voditi pod licencom %1$s
+
Istraži
Izgled
Općenito
@@ -48,7 +49,7 @@
Postavljanje je započelo!
Datoteka %1$s je postavljena!
Dodirnite da biste vidjeli datoteku
- Postavljam datoteku: %s
+ Postavljam datoteku: %1$s
Postavljanje datoteke %1$s u toku
Postavljanje datoteke %1$s završeno
Postavljanje datoteke %1$s nije uspjelo
@@ -107,10 +108,10 @@
Predodređena licenca
Koristi prethodni naziv i opis
Tema
- Autorstvo-Dijeliti pod istim uslovima 4.0
- Autorstvo 4.0
- Autorstvo-Dijeliti pod istim uvjetima 3.0
- Autorstvo 3.0
+ Autorstvo-Dijeliti pod istim uslovima 4.0
+ Autorstvo 4.0
+ Autorstvo-Dijeliti pod istim uvjetima 3.0
+ Autorstvo 3.0
CC0
CC BY-SA 3.0
CC BY 3.0
@@ -152,13 +153,12 @@
Prijavite se na naš beta-kanal na Google Playu i dobijte raniji pristup novim mogućnostima i ispravkama grešaka
Kôd za provjeru u 2 koraka
Želite li se zaista odjaviti?
- Slika nije uspjela
Zao
Ljame
Dugin most
Tulipan
- Dobro došli (Wikipedia)
- Dobro došli (autorska prava)
+ Dobro došli (Wikipedia)
+ Dobro došli (autorska prava)
Sidnejska opera
Otkaži
Otvori
@@ -184,4 +184,5 @@
ČPP
Prevedi
Jezici
+ Neobavezna dozvola: Dobavljanje trenutne lokacije za predlaganje kategorija
diff --git a/app/src/main/res/values-ca/strings.xml b/app/src/main/res/values-ca/strings.xml
index e99e997b0..08d9697bd 100644
--- a/app/src/main/res/values-ca/strings.xml
+++ b/app/src/main/res/values-ca/strings.xml
@@ -1,6 +1,7 @@
Pàgina del Facebook del Commons
- Codi font del Commons a GitHub
+ Codi font del Commons a GitHub
Logo de Commons
Lloc web del Commons
Envia
@@ -22,18 +23,14 @@
- s\'està carregant %1$d fitxer
- s\'estan carregant %1$d fitxers
-
- - (%1$d)
- - (%1$d)
-
S\'inicien les càrregues
- S\'està processant %1$d càrrega
- S\'estan processant %1$d càrregues
- - %d càrrega
- - %d càrregues
+ - %1$d càrrega
+ - %1$d càrregues
- Aquesta imatge quedarà sota llicència %1$s
@@ -66,7 +63,7 @@
Ha començat la càrrega!
S’ha pujat %1$s.
Prem per veure la teva càrrega
- Pujant el fitxer: %s
+ Pujant el fitxer: %1$s
Carregant %1$s
Acabant la càrrega al servidor de %1$s
Error al carregar %1$s
@@ -125,10 +122,10 @@
Llicència per defecte
Utilitzar títol i descripció anteriors
Tema
- Reconeixement-CompartirIgual 4.0
- Reconeixement 4.0
- Reconeixement-CompartirIgual 3.0
- Reconeixement 3.0
+ Reconeixement-CompartirIgual 4.0
+ Reconeixement 4.0
+ Reconeixement-CompartirIgual 3.0
+ Reconeixement 3.0
CC0
CC BY-SA 3.0
CC BY 3.0
@@ -181,15 +178,14 @@
Proveu la versió beta
Codi 2FA
Realment voleu finalitzar la sessió?
- Ha fallat la imatge multimèdia
No s\'han trobat subcategories
No s\'ha trobat cap categoria pare
Mont Zao
Llames
Pont Rainbow
Tulipa
- Benvinguts a la Viquipèdia
- Drets d\'autor de benvinguda
+ Benvinguts a la Viquipèdia
+ Drets d\'autor de benvinguda
Casa d\'Òpera de Sydney
Cancel·la
Obre
@@ -299,11 +295,10 @@
Suprimeix
Assoliments
Perfil
- Estadístiques
Agraïments rebuts
Imatges destacades
Imatges per proximitat
- Nivell
+ Nivell %1$d
Imatges carregades
Imatges no revertides
Imatges utilitzades
@@ -355,9 +350,9 @@
Consulta les campanyes en curs
S\'ha produït un error en processar la imatge. Torneu-ho a provar!
Fet
- Enviament d\'agraïments: Èxit
- Enviament d\'agraïments: Fallada
- S\'estan enviant agraïments per %1$s
+ Enviament d\'agraïments: Èxit
+ Enviament d\'agraïments: Fallada
+ S\'estan enviant agraïments per %1$s
Això segueix les regles de drets d\'autor?
Té categorizació correcta?
S\'adiu al tema?
@@ -415,7 +410,7 @@
Perquè sí
Actualitza les categories
Comparteix la imatge via
- No hi heu fet cap contribució encara
+ %1$s no hi ha fet cap contribució encara
S\'ha creat el compte
S\'ha copiat el text al porta-retalls
La notificació s\'ha marcat com llegida
@@ -424,7 +419,7 @@
Existeix
Cal una foto
Tipus de lloc:
- Pont, museu, hotel, etc.
+ Pont, museu, hotel, etc.
Quelcom ha fallat amb la vostra sessió. Reinicieu la vostra contrasenya!!
Paràmetres
Seguir el sistema
@@ -447,4 +442,5 @@
Enrere
Fantàstic
Mostra els monuments
+ Permís opcional: obtén la ubicació actual per al suggeriment de categories
diff --git a/app/src/main/res/values-ce/strings.xml b/app/src/main/res/values-ce/strings.xml
index 3855a80cd..7dcf5b075 100644
--- a/app/src/main/res/values-ce/strings.xml
+++ b/app/src/main/res/values-ce/strings.xml
@@ -7,7 +7,7 @@
-->
Викилармера Facebook-агӀо
- Викилармин йуьхьанцара кодаш гитхабехь
+ Викилармин йуьхьанцара кодаш гитхабехь
Викилармин логотип
Викилармин веб-сайт
Лаьтта меттиг хоржучу корера ара вала(йала)
@@ -31,18 +31,14 @@
- %1$d файл чуйокхуш йу
- %1$d файл чуйокхуш йу
-
- - (%1$d)
- - (%1$d)
-
Чуйаккхар долор
- - Чуйаккхар %d кечдар
- - Чуйаккхар %d кечдар
+ - Чуйаккхар %1$d кечдар
+ - Чуйаккхар %1$d кечдар
- - %d чуйаккхар
- - %d чуйаккхар
+ - %1$d чуйаккхар
+ - %1$d чуйаккхар
- ХIара суртан лицензи йийра йу кху бухахь %1$s
@@ -86,7 +82,7 @@
Чуйакхар рогӀехь йу (зӀенан режим, доза тоьхна дӀахӀоттийна)
%1$s чуйаьккхина!
Чуйаьккхина файле хьажа тӀетаӀайe
- %1$s чуйаккхар долина
+ %1$s чуйаккхар долина
%1$s чуйоккхуш йу
%1$s чуйаккхар чекхдолуш ду
%1$s чуяккхуш гӀалат даьлла
@@ -139,9 +135,9 @@
Схьаэца
Ӏадйитаран кепаца йолу лицензи
Кечйар
- Attribution 4.0
- Attribution-ShareAlike 3.0
- Attribution 3.0
+ Attribution 4.0
+ Attribution-ShareAlike 3.0
+ Attribution 3.0
Чуйаккхаран масала:
ЦӀе: Сиднейн операн театр
ХӀаъ!
@@ -168,8 +164,8 @@
Лицензи
Координаташ
Ламаш
- Марша догӀийла Википеди чу
- Марша догӀийла — авторийн бакъонаш
+ Марша догӀийла Википеди чу
+ Марша догӀийла — авторийн бакъонаш
Сиднейн операн театр
Йухайаккхар
Схьайелла
@@ -237,10 +233,9 @@
ДӀайаккхар
Кхиамаш
Профиль
- Статистика
Баркаллаш кхаьчна
Хаьржина суьрташ
- Локхалла
+ Локхалла %1$d
Суьрташ чудаьхна
Йуха ца дерзийна суьрташ
Суьрташ лелийна
@@ -275,7 +270,7 @@
Йухадаккха
ХӀуна кхий гура йац кампанеш. Делахь, хьайна лаахь, хьа йиш йу кампанех лаьцна нотификаци лато нисдаран гӀирс чохь.
Кийчча йу
- Баркалла дӀадахьийтар: Кхиамца
+ Баркалла дӀадахьийтар: Кхиамца
Файл нийса йуй Викилармин тӀехь?
Декъашхочунна баркалла ала лаьий хьуна?
ХӀаъ
@@ -285,7 +280,7 @@
Хьажа ца дешначарга
Суьрташ чудохуш гӀалат даьлла
Дехар до, собарде…
- РогӀерчу гӀирсашка копеш йар
+ РогӀерчу гӀирсашка копеш йар
Копийина
ХӀара сурт чекхдалийта
EXIF тегашца болх бар
@@ -296,7 +291,6 @@
Объективан модель
Серийн лоьмар
Программан кхачам
- Файл йолу меттиган тӀекхача бакъо ца ло
Йекъа программа, гӀоьнца...
Суьртан информаци
Цхьа а категори ца карийна.
@@ -341,7 +335,7 @@
Хаамашна а, куьг йаздарна а хийцамаш бар
Сурт декъа гӀоьнца
Цкъачунна ахьа къинхьегам ца бина.
- %s цкъачунна къинхьегам бац
+ %1$s цкъачунна къинхьегам бац
Аккаунт кхоьллина!
Текст буфере копийина
Хаамаш \"бешна\" аьлла билгалбаьхна
@@ -350,7 +344,7 @@
Йолуш йу
Сурт оьшу
Меттиган тайпа:
- ТӀай, музей, отел, и.дӀ.кх.
+ ТӀай, музей, отел, и.дӀ.кх.
Цхьа хӀума галдаьлла логинца. Хьайн пароль меттахӀотто йеза ахьа!
МЕДИА
БЕРИЙН КЛАССАШ
@@ -379,8 +373,8 @@
3. Хьайн суьртана догӀу йаззаман дакъа лаха
4. «Хийца» иконкин тӀетаӀайе (къоламах тера йу) хӀокху декъана
5. Вики-код йогӀучу метте дӀайазйе
- 7. Йаззам дӀайазбе
- Вики-код буфер чу копийе
+ 7. Йаззам дӀайазбан
+ Вики-код буфер чу копийе
пауза
кхидӀа
Сацийна
diff --git a/app/src/main/res/values-ckb/strings.xml b/app/src/main/res/values-ckb/strings.xml
index 8294fc284..cc71ca62a 100644
--- a/app/src/main/res/values-ckb/strings.xml
+++ b/app/src/main/res/values-ckb/strings.xml
@@ -7,11 +7,14 @@
-->
پەڕەی فەیسبووکی کۆمنز
- کۆدی سەرچاوەی کۆمنز لە گیتھەب
+ کۆدی سەرچاوەی کۆمنز لە گیتھەب
لۆگۆی کۆمنز
وێبگەی کۆمنز
لێدوانەکان
- ئەم پەڕەیە مۆڵەتنامەی %1 پێ دەدرێت
+
+ - ئەم پەڕەیە مۆڵەتنامەی %1$s پێ دەدرێت
+ - ئەم پەڕەیە مۆڵەتیان %1$s پێ دەدرێت
+
بگەڕێ
ڕواڵەت
گشتی
diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml
index ba99354da..f083d7f41 100644
--- a/app/src/main/res/values-cs/strings.xml
+++ b/app/src/main/res/values-cs/strings.xml
@@ -19,6 +19,7 @@
* Patriccck
* Patrik L.
* Robins7
+* Segoulas
* Spotter
* The astrea
* Vlad5250
@@ -27,7 +28,7 @@
-->
Facebooková stránka Commons
- Zdrojový kód Commons na GitHubu
+ Zdrojový kód Commons na GitHubu
Logo Wikimedia Commons
Stránka Commons
Ukončit výběr polohy
@@ -53,24 +54,18 @@
- Nahrávání %1$d souborů
- Nahrávání %1$d souborů
-
- - (%1$d)
- - (%1$d)
- - (%1$d)
- - (%1$d)
-
Spouštění nahrávání
- - Zpracovávání %d nahrání
- - Zpracovávání %d nahrání
- - Zpracovávání %d nahrání
- - Zpracovávání %d nahrání
+ - Zpracovávání %1$d nahrání
+ - Zpracovávání %1$d nahrání
+ - Zpracovávání %1$d nahrání
+ - Zpracovávání %1$d nahrání
- - %d nahrávání
- - %d nahrávání
- - %d nahrávání
- - %d nahrávání
+ - %1$d nahrávání
+ - %1$d nahrávání
+ - %1$d nahrávání
+ - %1$d nahrávání
- Tento obrázek bude zveřejněn pod licencí %1$s
@@ -120,7 +115,7 @@
Nahrávání je ve frontě (zapnut režim omezeného připojení)
%1$s nahráno!
Klepnutím zobrazíte upload
- Načítání souboru: %s
+ Načítání souboru: %1$s
Nahrává se soubor %1$s
Dokončení nahrávání souboru %1$s
Nepodařilo se nahrát soubor %1$s
@@ -170,6 +165,7 @@
Nastavení
Zaregistrovat se
Nejlepší obrázky
+ Nejlepší obrázky jsou soubory od vysoce zkušených fotografů a ilustrátorů, které vybrala komunita Wikimedia Commons jako jedny z nejkvalitnějších.
Vlastní výběr
Kategorie
Kontrola
@@ -191,10 +187,10 @@
Výchozí licence
Použít předchozí název a popis
Vzhled
- Uveďte autora-Zachovejte licenci 4.0
- Uveďte autora 4.0
- Uveďte autora-Zachovejte licenci 3.0
- CC Uveďte autora 3.0
+ Uveďte autora-Zachovejte licenci 4.0
+ Uveďte autora 4.0
+ Uveďte autora-Zachovejte licenci 3.0
+ CC Uveďte autora 3.0
CC0
CC BY-SA 3.0
CC BY 3.0
@@ -247,6 +243,7 @@
Popis
Diskuse
Autor
+ Nahrávač
Datum nahrání souboru
Licence
Souřadnice
@@ -256,15 +253,14 @@
Kód pro dvoufázové ověření (2FA)
Ověřovací kód z e-mailu
Opravdu se chcete odhlásit?
- Obrázek
Nebyly nalezeny podkategorie
Nebyly nalezeny rodičovské kategorie
Hora Zao
Lamy
Duhový most
Tulipán
- Vítejte na Wikipedii
- Úvod k autorským právům
+ Vítejte na Wikipedii
+ Úvod k autorským právům
Opera v Sydney
Zrušit
Otevřít
@@ -400,13 +396,11 @@
Dosažené úspěchy
Profil
Odznaky
- Statistiky
Obdržená poděkování
Nejlepší obrázky
Obrázky přes „Místa v okolí“
- Úroveň %d
- %s (úroveň %s)
- %s (%s)
+ Úroveň %1$d
+ %1$s (úroveň %2$s)
Nahrané obrázky
Nerevertované obrázky
Použitých obrázků
@@ -449,7 +443,7 @@
Uvědomil/a jsem si, že je to špatné pro mé soukromí
Změnil/a jsem názor, nechci, aby to bylo veřejně viditelné
Omlouváme se, že tento obrázek není zajímavý pro encyklopedii
- Náhráno mnou %1$s, použito v(e) %2$d článku/článcích.
+ Nahráno mnou %1$s, použito v alespoň %2$d článku/článcích.
Vítejte na Commons!\n\nNahrajte svá první média klepnutím na tlačítko přidat.
Nebyly vybrány žádné kategorie
Obrázky bez kategorií jsou používány jen zřídka. Opravdu chcete nahrát obrázek bez výběru kategorií?
@@ -466,7 +460,7 @@
Znovu nezobrazovat
Požádat o oprávnění k poloze
Požádejte o oprávnění k umístění, pokud je zapotřebí pro funkci zobrazení pohledu v blízkosti.
- Nastala neočekávaná chyba. Nemohli jsme načíst vaše úspěchy
+ Nastala neočekávaná chyba. Nemohli jsme načíst vaše úspěchy
Vytvořili jste tolik příspěvků, že je náš systém výpočtu úspěchů nedokáže zvládnout. Toto je nejvyšší možný úspěch.
Končí:
Zobrazovat kampaně
@@ -494,11 +488,11 @@
Nepodařilo se vyžádat kontrolu kategorie %1$s
Probíhá žádání o kontrolu kategorie souboru %1$s
Hotovo
- Poděkování bylo úspěšně odesláno
- Úspěšně jste poděkovali uživateli %1$s
- Poděkování uživateli %1$s se nepodařilo odeslat
- Poděkování se nepodařilo odeslat
- Probíhá odesílání poděkování uživateli %1$s
+ Poděkování bylo úspěšně odesláno
+ Úspěšně jste poděkovali uživateli %1$s
+ Poděkování uživateli %1$s se nepodařilo odeslat
+ Poděkování se nepodařilo odeslat
+ Probíhá odesílání poděkování uživateli %1$s
Je to v souladu s pravidly autorskými práv?
Je to správně kategorizováno?
Je to v pořádku?
@@ -525,15 +519,14 @@
Zobrazit nepřečtené
Nastala chyba při vybírání obrázků
Čekejte prosím…
- Nejlepší obrázky jsou soubory od vysoce zkušených fotografů a ilustrátorů, které vybrala komunita Wikimedia Commons jako jedny z nejkvalitnějších.
Obrázky nahrané přes Poblíž jsou obrázky, které jsou nahrané díky objevování míst na mapě.
Tato funkce umožňuje uživatelům poslat poděkování za užitečné editace – použitím odkazu poděkovat v historii stránky anebo na stránce rozdílu mezi revizemi.
- Kopírovat do následujícího média
+ Kopírovat do následujícího média
Zkopírováno!
Příklady dobrých obrázků k nahrání na Commons
Příklady obrázků, které byste neměli nahrávat
Přeskočit obrázek
- Stahování se nepodařilo! Nemůžeme stáhnout obrázek bez povolení k přístupu k úložišti.
+ Stahování se nepodařilo! Nemůžeme stáhnout obrázek bez povolení k přístupu k úložišti.
Spravovat data EXIF
Vybrat EXIF data, která se mají ponechat
Autor
@@ -543,8 +536,6 @@
Model objektivu
Sériová čísla
Software
- Přístup k poloze médií odmítnut
- Možná nebudeme schopni automaticky získat údaje o poloze z obrázků, které nahrajete. Před odesláním prosím přidejte odpovídající polohu ke každému obrázku
Nahrávejte fotky na Wikimedia Commons přímo s vašeho mobilu. Stáhněte si aplikaci: %1$s
Sdílet aplikaci pomocí…
Informace o obrázku
@@ -604,7 +595,7 @@
Upravit popisy a titulky
Sdílet obrázek pomocí
Zatím nemáte žádné příspěvky
- Zatím nemáte žádné příspěvky
+ %1$s zatím nepřispěl(a) žádné příspěvky
Účet byl založen!
Text byl zkopírován do schránky.
Oznámení označené jako přečtené
@@ -613,11 +604,13 @@
Existuje
Potřebuje fotku
Typ místa:
- Most, muzeum, hotel atd.
+ Most, muzeum, hotel atd.
Při přihlášení nastala chyba. Musíte si resetovat vaše heslo!
MÉDIA
PODŘAZENÉ TŘÍDY
NADŘAZENÉ TŘÍDY
+ PODKATEGORIE
+ NADŘAZENÉ KATEGORIE
Místo v okolí nalezeno
Je na těchto obrázcích %1$s?
Je toto obrázek místa %1$s?
@@ -655,7 +648,7 @@
5. Vložte wikitext na vhodné místo.
6. Pokud je to nutné, upravte wikitext pro vhodné umístění. Pro více informací se podívejte <a href=\"https://en.wikipedia.org/wiki/Wikipedia:Manual_of_Style/Images#How_to_place_an_image\">sem</a>.
7. Zveřejněte článek
- Zkopírujte wikitext
+ Zkopírujte wikitext
pozastavit
pokračovat
Pozastaveno
@@ -710,7 +703,7 @@
Zobrazit v mapové aplikaci
Upravit umístění
Zobrazení obrázku výběru polohy
- \n Stín zobrazení obrázku výběru polohy
+ \n Stín zobrazení obrázku výběru polohy
Umístění obrázku
Zkontrolujte, zda je umístění správné
Štítek
@@ -722,7 +715,7 @@
Zpět
Vítejte ve výběru vlastních obrázků
Tento výběr zobrazuje, které obrázky jste již nahráli do Commons.
- Na rozdíl od obrázku nalevo má obrázek napravo logo Commons, které značí, že byl již nahrán.\n Klepněte a podržte pro náhled obrázku.
+ Na rozdíl od obrázku nalevo má obrázek napravo logo Commons, které značí, že byl již nahrán.\n Klepněte a podržte pro náhled obrázku.
Skvělé
Tento obrázek byl již nahrán do Commons.
Z technických důvodů nedokáže aplikace spolehlivě nahrát více než %1$d obrázků naráz. Limit %1$d byl překročen o %2$d.
@@ -736,8 +729,9 @@
Wiki miluje památky je mezinárodní soutěž týkající se památek, organizovaná Wikimedií
Je vyžadováno oprávnění
Mapy v okolí potřebují ke správné funkčnosti číst STAV TELEFONU
- Příspěvky uživatele: %s
- Úspěchy uživatele: %s
+ Volitelně: Umožněte aplikaci, aby získávala aktuální polohu a nabízela na jejím základě kategorie
+ Příspěvky uživatele: %1$s
+ Úspěchy uživatele: %1$s
Zobrazit profil uživatele
Upravit znázornění
Upravit kategorie
@@ -748,7 +742,7 @@
Údaje o poloze pomáhají editorům Wiki najít váš obrázek, díky čemuž je mnohem užitečnější.\nVaše nedávná nahrání nemají žádnou polohu.\nDoporučujeme zapnout polohu v nastavení aplikace fotoaparátu.\nDěkujeme, že nahráváte!
Nenalezena žádná poloha
Co takhle přidat místo, kde byl tento obrázek pořízen?\nÚdaje o poloze pomáhají editorům Wiki najít váš obrázek, díky čemuž je mnohem užitečnější.\nDěkujeme!
- Přidat polohu
+ Přidat polohu
Odstraňte prosím z tohoto e-mailu všechny informace, které nechcete sdílet veřejně. Mějte také na paměti, že e-mailová adresa, kterou používáte, a související jméno a profilový obrázek, budou veřejně zobrazeny.
Podrobnosti
Úspěchy jsou dostupné pouze v produkční verzi. Více informací viz dokumentace pro vývojáře.
@@ -769,8 +763,8 @@
Zrušit označení jako neurčené k nahrání
Označování jako neurčené k nahrání
Rušení označení jako neurčené k nahrání
- Zobrazit již zpracované obrázky
- Skrývání již zpracovaných obrázků
+ Zobrazit již zpracované obrázky
+ Skrývání již zpracovaných obrázků
Nenalezeny žádné další obrázky
Tento obrázek byl již nahrán
Tento obrázek nelze vybrat k nahrání
@@ -793,7 +787,7 @@
Pro funkčnost jsou vyžadována oprávnění
Naučte se, jak psát užitečný popis
Naučte se, jak psát užitečný popis
- Podívejte se na své úspěchy
+ Zhlédněte své úspěchy
Upravit obrázek
Upravit polohu
Poloha aktualizována!
@@ -806,17 +800,17 @@
Vaše přihlášení vypršelo. Přihlaste se prosím znovu.
Není dostupná žádná aplikace k otevření souborů GPX
Soubor úspěšně uložen
- Chcete otevřít soubor GPX?
- Chcete otevřít soubor KML?
- Nepodařilo se uložit soubor KML.
- Nepodařilo se uložit soubor GPX.
- Ukládání souboru KML
- Ukládání souboru GPX
+ Chcete otevřít soubor GPX?
+ Chcete otevřít soubor KML?
+ Nepodařilo se uložit soubor KML.
+ Nepodařilo se uložit soubor GPX.
+ Ukládání souboru KML
+ Ukládání souboru GPX
- - Vybrán %d obrázek
- - Vybrány %d obrázky
- - Vybráno %d obrázků
- - Vybráno %d obrázků
+ - Vybrán %1$d obrázek
+ - Vybrány %1$d obrázky
+ - Vybráno %1$d obrázků
+ - Vybráno %1$d obrázků
Nezapomeňte, že všechny obrázky ve hromadném nahrání získají stejné kategorie a znázornění. Pokud obrázky nesdílí znázornění a kategorie, nahrajte je prosím zvlášť.
Informace o hromadných nahráních
@@ -825,6 +819,7 @@
Diskuze
Napište komentář o položce „%1$s“. Bude veřejně viditelný.
„%1$s“ již neexistuje, nelze z něj již tedy pořídit obrázek.
+ \'%1$s\' je na odlišném místě.
„%1$s“ je na jiném místě. Zadejte prosím správné místo, a pokud je to možné, napište správnou zeměpisnou šířku a délku.
Jiný problém nebo informace (vysvětlete prosím níže).
Vaše zpětná vazba bude zveřejněna na následující stránce wiki: <a href=\"https://commons.wikimedia.org/wiki/Commons:Mobile_app/Feedback\">Commons:Mobile app/Feedback</a>
@@ -851,7 +846,6 @@
Commons
Jiné wiki
Použití souboru
- SingleWebViewActivity
Účet
Nechat zmizet účet
Varování o zmizení účtu
@@ -863,4 +857,5 @@
Zobrazit v kartě Poblíž
Vytvořil/a a nahrál/a: %1$s
Vytvořeno uživatelem %1$s a nahráno uživatelem %2$s
+ Nominováno na smazání
diff --git a/app/src/main/res/values-csb/strings.xml b/app/src/main/res/values-csb/strings.xml
index 623a48c8c..fff5b5067 100644
--- a/app/src/main/res/values-csb/strings.xml
+++ b/app/src/main/res/values-csb/strings.xml
@@ -8,20 +8,20 @@
- Wladënk %1$d lopka
- Wladënk %1$d lopków
-
- - Przesłano @string/contributions_subtitle_zero
- - Przesłano %1$d lopk
- - Przesłano %1$d lopczi
-
- Naczãto %1$d wladënk
- Naczãto %1$d wladënczi
-
+
- %1$d wladënk
- %1$d wladënczi
- Nen òbrôzk bãdze ùprzistãpniony wedle licencëji %1$s
+
+ - Nen òbrôzk bãdze ùprzistãpniony wedle licencëji %1$s
+ - Neni òbrôzki bãdze ùprzistãpniony wedle licencëji %1$s
+ - Neni òbrôzki bãdze ùprzistãpniony wedle licencëji %1$s
+ - Neni òbrôzki bãdze ùprzistãpniony wedle licencëji %1$s
+
Commons
Nastôwë
Miono brëkòwnika
@@ -86,10 +86,10 @@
Licencëjô
Ùżëjë slédnegò titla/òpisënka
Nocny trib
- Ùznanié ùsôdztwa na równych prawach 4.0
- Ùznanié ùsôdztwa 4.0
- Ùznanié ùsôdztwa na równych prawach 3.0
- Ùznanié ùsôdztwa 3.0
+ Ùznanié ùsôdztwa na równych prawach 4.0
+ Ùznanié ùsôdztwa 4.0
+ Ùznanié ùsôdztwa na równych prawach 3.0
+ Ùznanié ùsôdztwa 3.0
CC0
CC BY-SA 3.0
CC BY 3.0
@@ -121,8 +121,8 @@
Lamy
Rainbow Bridge
Tulpa
- Witôj na Wikipediji
- Witôj w prawnych zastrzégach
+ Witôj na Wikipediji
+ Witôj w prawnych zastrzégach
Sydney Opera House
Òprzestóń
Òtemkni
diff --git a/app/src/main/res/values-cy/strings.xml b/app/src/main/res/values-cy/strings.xml
index 8c4b4a652..e611d5439 100644
--- a/app/src/main/res/values-cy/strings.xml
+++ b/app/src/main/res/values-cy/strings.xml
@@ -24,22 +24,29 @@
- %1$d ffeil yn uwchlwytho
- %1$d ffeil yn uwchlwytho
-
- - \@string/contributions_subtitle_zero
- - (%1$d)
- - (%1$d)
-
Cychwyn Uwchlwytho
+ - Cychwyn uwchlwytho %1$d ffeil
- Cychwyn %1$d uwchlwythiad
+ - Cychwyn uwchlwytho %1$d ffeil
+ - Cychwyn uwchlwytho %1$d ffeil
+ - Cychwyn uwchlwytho %1$d ffeil
- Cychwyn uwchlwytho %1$d ffeil
-
+
+ - %1$d uwchlwythiad
- %1$d uwchlwythiad
+ - %1$d uwchlwythiad
+ - %1$d uwchlwythiad
+ - %1$d uwchlwythiad
- %1$d uwchlwythiad
-
+
+ - Caiff y delweddau hyn eu trwyddedu dan %1$s
- Caiff y ddelwedd hon ei thrwyddedu yn ôl termau\'r drwydded %1$s
+ - Caiff y delweddau hyn eu trwyddedu dan %1$s
+ - Caiff y delweddau hyn eu trwyddedu dan %1$s
+ - Caiff y delweddau hyn eu trwyddedu dan %1$s
- Caiff y delweddau hyn eu trwyddedu dan %1$s
Archwilio
@@ -66,7 +73,7 @@
Dechreuodd yr uwchlwytho!
Uwchlwythwyd %1$s!
Tapiwch i weld eich uwchlwythiad
- Wrthi\'n uwchlwytho ffeil: %s
+ Wrthi\'n uwchlwytho ffeil: %1$s
Wrthi\'n uwchlwytho %1$s
Yn gorffen uwchlwytho %1$s
Wedi methu uwchlwytho %1$s
@@ -125,10 +132,10 @@
Trwydded Ddiofyn (\'default\')
Defnydiwch y teitl/disgrifiad blaenorol
Thema
- Attribution-ShareAlike 4.0
- Attribution 4.0
- CC Attribution-ShareAlike 3.0
- CC Attribution 3.0
+ Attribution-ShareAlike 4.0
+ Attribution 4.0
+ CC Attribution-ShareAlike 3.0
+ CC Attribution 3.0
CC0
CC BY-SA 3.0
CC BY 3.0
@@ -185,14 +192,13 @@
Dewch yn Brofwr Beta
Cod 2FA
Ti\'n sicr dy fod am allgofnodi?
- Methodd y ddelwedd
Ni chafwyd hyd i is-gategoriau
Mount Zao
Lamas
Pont yr Enfys
Tiwlip
- Croeso Wicipedia
- Croeso Hawlfraint
+ Croeso Wicipedia
+ Croeso Hawlfraint
Ty Opera Sydney
Diddymu
Agor
@@ -282,7 +288,6 @@
Rhannu Ap
Dileu
Proffil
- Ystadegau
Cyfraniadau
Hysbysiadau
Caniatáu
@@ -301,6 +306,7 @@
Disgrifiad
Eitemau
DYSGU MWY
+ Caniatad opsiynol: Ceisio\'r lleoliad cyfoes ar gyfer categoriau
Ailosod
Manylion
Lefel API
diff --git a/app/src/main/res/values-da/strings.xml b/app/src/main/res/values-da/strings.xml
index 053c28934..4b3e11b3f 100644
--- a/app/src/main/res/values-da/strings.xml
+++ b/app/src/main/res/values-da/strings.xml
@@ -12,7 +12,7 @@
-->
Commons Facebook-side
- Commons Github-kildekode
+ Commons Github-kildekode
Commons-logo
Commons-hjemmeside
Afslut stedvælger
@@ -36,18 +36,14 @@
- %1$d fil uploades
- %1$d filer uploades
-
- - (%1$d)
- - (%1$d)
-
Starter upload
- - Behandler %d upload
- - Behandler %d uploads
+ - Behandler %1$d upload
+ - Behandler %1$d uploads
-
- - %d upload
- - %d uploads
+
+ - %1$d upload
+ - %1$d uploads
- Dette billede vil blive licenseret under %1$s
@@ -91,7 +87,7 @@
Upload i kø (begrænset forbindelsestilstand aktiveret)
%1$s uploadet!
Tryk for at få vist dit upload
- Uploader fil: %s
+ Uploader fil: %1$s
%1$s uploades
Afslutter upload af %1$s
Upload af %1$s mislykkedes
@@ -141,6 +137,7 @@
Indstillinger
Opret konto
Fremhævede billeder
+ Fremhævede billeder er billeder fra højt kvalificerede fotografer og illustratører, som Wikimedia Commons-fællesskabet har udvalgt som nogle af dem med højeste kvalitet på webstedet.
Brugerdefineret vælger
Kategori
Gennemsyn
@@ -162,10 +159,10 @@
Standardlicens
Brug forrige titel og beskrivelse
Tema
- Attribution-ShareAlike 4.0
- Attribution 4.0
- Attribution-ShareAlike 3.0
- Attribution 3.0
+ Attribution-ShareAlike 4.0
+ Attribution 4.0
+ Attribution-ShareAlike 3.0
+ Attribution 3.0
CC0
CC BY-SA 3.0
CC BY 3.0
@@ -228,15 +225,14 @@
2FA-kode
E-mail-bekræftelseskode
Ønsker du at logge ud?
- Mediebillede mislykkedes
Ingen underkategorier fundet
Ingen overordnede kategorier fundet
Monter Zao
Lamaer
Regnbuebro
Tulipan
- Velkommen til Wikipedia
- Velkommen til ophavsret
+ Velkommen til Wikipedia
+ Velkommen til ophavsret
Operahuset i Sydney
Afbryd
Åbn
@@ -372,13 +368,11 @@
Præstationer
Profil
Emblemer
- Statistik
Tak modtaget
Udvalgte billeder
Billeder via \"Steder i nærheden\"
- Niveau %d
- %s (Niveau %s)
- %s (%s)
+ Niveau %1$d
+ %1$s (Niveau %2$s)
Uploadede billeder
Billeder, som ikke er blevet trukket tilbage
Billeder brugt
@@ -438,7 +432,7 @@
Spørg aldrig om dette igen
Bed om placeringstilladelse
Spørg om placeringstilladelse, når det er nødvendigt for visning af \"I nærheden\"-notifikationskort.
- Noget gik galt. Vi kunne ikke hente præstationer
+ Noget gik galt. Vi kunne ikke hente præstationer
Du har bidraget så meget, at vores udregningssystem for præstationer ikke kan håndtere det. Dette er den ultimate præstationen.
Slutter den:
Vis kampagner
@@ -466,11 +460,11 @@
Kunne ikke anmode om kategorikontrol for %1$s
Anmoder om kategorikontrol for %1$s
Udført
- Sender tak: Færdig
- Sendte tak til %1$s
- Kunne ikke sende tak %1$s
- Sender tak: Mislykkedes
- Sender tak for %1$s
+ Sender tak: Færdig
+ Sendte tak til %1$s
+ Kunne ikke sende tak %1$s
+ Sender tak: Mislykkedes
+ Sender tak for %1$s
Følger dette reglerne for ophavsret?
Er dette korrekt kategoriseret?
Er dette relevant?
@@ -497,15 +491,14 @@
Vis ulæste
Der opstod en fejl under udvælgelse af billeder
Vent venligst…
- Fremhævede billeder er billeder fra højt kvalificerede fotografer og illustratører, som Wikimedia Commons-fællesskabet har udvalgt som nogle af dem med højeste kvalitet på webstedet.
Billeder uploadet via nærliggende steder er de billeder, der uploades ved at opdage steder på kortet.
Denne funktion giver redaktører mulighed for at sende en tak-notifikation til brugere, der foretager nyttige redigeringer - ved at bruge et lille takkelink på historiksiden eller diff-siden.
- Kopiér til efterfølgende medier
+ Kopiér til efterfølgende medier
Kopieret
Eksempler på gode billeder til at uploade til Commons
Eksempler på billeder, der ikke bør uploades
Spring dette billede over
- Download mislykkedes!!. Vi kan ikke downloade filen uden tilladelse til ekstern lagring.
+ 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
Forfatter
@@ -515,8 +508,6 @@
Objektivmodel
Serienumre
Software
- Adgang til medieplacering nægtet
- Vi kan muligvis ikke automatisk indhente placeringsdata fra billeder, du uploader. Tilføj den passende placering for hvert billede, før du indsender
Upload billeder til Wikimedia Commons direkte fra din telefon. Download Commons-appen nu: %1$s
Del app via...
Billedoplysninger
@@ -572,7 +563,7 @@
Rediger beskrivelser og billedtekster
Del billede via
Du har ikke lavet nogen bidrag endnu
- %s har ikke lavet nogen bidrag endnu
+ %1$s har ikke lavet nogen bidrag endnu
Konto oprettet!
Tekst kopieret til udklipsholder
Notifikation markeret som læst
@@ -581,7 +572,7 @@
Findes
Mangler et billede
Stedtype:
- Bro, museum, hotel, osv.
+ Bro, museum, hotel, osv.
Noget gik galt med login. Du skal nulstille din adgangskode!
MEDIER
UNDERKLASSER
@@ -625,7 +616,7 @@
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
+ Kopier wikikode til udklipsholder
sæt på pause
genoptag
Sat på pause
@@ -680,7 +671,7 @@
Vis i kort-app
Rediger placering
Billedvisningen af placeringsvælgeren
- Skyggen af billedvisningen af lokationsvælgeren
+ Skyggen af billedvisningen af lokationsvælgeren
Billedplacering
Tjek, om placeringen er korrekt
Etiket
@@ -692,7 +683,7 @@
Tilbage
Velkommen til brugerdefineret billedvælger
Denne vælger viser dig, hvilke billeder du allerede har uploadet til Commons.
- I modsætning til billedet til venstre har billedet til højre Commons-logoet, hvilket indikerer, at det allerede er uploadet. \n Tryk og hold for at se forhåndsvisning af billede.
+ I modsætning til billedet til venstre har billedet til højre Commons-logoet, hvilket indikerer, at det allerede er uploadet. \n Tryk og hold for at se forhåndsvisning af billede.
Fantastisk
Dette billede er allerede blevet uploadet til Commons.
Af tekniske årsager kan appen ikke pålideligt uploade mere end %1$d billeder på én gang. Uploadgrænsen på %1$d er blevet overskredet med %2$d.
@@ -706,8 +697,9 @@
Wiki Loves Monuments er en international fotokonkurrence for monumenter arrangeret af Wikimedia
Har brug for tilladelse
\"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
+ Valgfri tilladelse: Hent nuværende position for kategoriforslag
+ Bidrag fra bruger: %1$s
+ Præstationer af bruger: %1$s
Vis brugerprofil
Rediger afbildninger
Rediger kategorier
@@ -718,7 +710,7 @@
Placeringsdata hjælper Wiki-redaktører med at finde dit billede, hvilket gør det meget mere nyttigt.\nDine seneste uploads har ingen placering.\nVi foreslår, at du slår placering til i indstillingerne for din kamera-app.\nTak, fordi du uploadede!
Ingen placering fundet
Hvad med at tilføje stedet, hvor dette billede blev taget?\nPlaceringsdata hjælper Wiki-redaktører med at finde dit billede, hvilket gør det meget mere nyttigt.\nTak!
- Tilføj placering
+ Tilføj placering
Fjern enhver information fra denne e-mail, som du ikke er tryg ved at dele offentligt. Vær også opmærksom på, at din e-mailadresse, som du anvender, og det tilhørende navn og profilbillede, vil være offentligt synligt.
Detaljer
Præstationer er kun tilgængelige i produktionsversionen. Tjek venligst udviklerdokumentationen.
@@ -739,8 +731,8 @@
Fjern markeringen af ikke til upload
Markerer som ikke til upload
Fjerner markering af ikke til upload
- Vis allerede behandlede billeder
- Skjuler allerede behandlede billeder
+ Vis allerede behandlede billeder
+ Skjuler allerede behandlede billeder
Ikke flere billeder fundet
Dette billede er allerede uploadet
Kan ikke vælge dette billede til upload
@@ -776,15 +768,15 @@
Login udløb. Log venligst ind igen.
Der er ingen tilgængelig applikation til at åbne GPX-filer
Fil gemt
- Vil du åbne GPX-filen?
- Vil du åbne KML-filen?
- Kunne ikke gemme KML-fil.
- Kunne ikke gemme GPX-fil.
- Gemmer KML-fil
- Gemmer GPX-fil
+ Vil du åbne GPX-filen?
+ Vil du åbne KML-filen?
+ Kunne ikke gemme KML-fil.
+ Kunne ikke gemme GPX-fil.
+ Gemmer KML-fil
+ Gemmer GPX-fil
- - %d billede valgt
- - %d billeder valgt
+ - %1$d billede valgt
+ - %1$d billeder valgt
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
diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml
index 409763b63..ac4aa3b8b 100644
--- a/app/src/main/res/values-de/strings.xml
+++ b/app/src/main/res/values-de/strings.xml
@@ -47,7 +47,7 @@
-->
Commons-Facebookseite
- Commons-Quellcode auf Github
+ Commons-Quellcode auf Github
Commons-Logo
Commons-Website
Beenden der Ortswahl
@@ -71,10 +71,6 @@
- Eine Datei wird hochgeladen
- %1$d Dateien werden hochgeladen
-
- - (%1$d)
- - (%1$d)
-
Hochladen starten
- Verarbeitung eines Uploads
@@ -82,7 +78,7 @@
- Eine hochgeladene Datei
- - %d hochgeladene Dateien
+ - %1$d hochgeladene Dateien
- Dieses Bild wird unter %1$s lizenziert
@@ -126,7 +122,7 @@
Hochladen in Warteschlange (eingeschränkter Verbindungsmodus aktiviert)
„%1$s“ hochgeladen!
Tippe, um deinen Upload anzusehen
- Hochlade von Datei: %s
+ Hochlade von Datei: %1$s
„%1$s“ wird hochgeladen
Hochladen von „%1$s“ abschließen
Hochladen von %1$s fehlgeschlagen
@@ -176,6 +172,7 @@
Einstellungen
Registrieren
Vorgestellte Bilder
+ Vorgestellte Bilder sind Bilder von professionellen Fotografen und Zeichnern, die die Gemeinschaft von Wikimedia Commons als diejenigen mit der höchsten Qualität auf der Website ausgewählt hat.
Benutzerdefinierte Auswahl
Kategorie
Peer Review
@@ -192,6 +189,9 @@
Du hast noch keine Fotos hochgeladen.
Erneut versuchen
Abbrechen
+ Tippe die Sprache
+ Letzte Suchanfragen
+ Alle Sprachen
Durch das Hochladen dieses Bildes erkläre ich, dass dies mein eigenes Werk ist, das kein urheberrechtlich geschütztes Material oder Selfies enthält und das auch sonst die <a href=\"https://commons.wikimedia.org/wiki/Commons:Policies_and_guidelines/de\">Wikimedia-Commons-Richtlinien</a> einhält.
Herunterladen
Standardlizenz
@@ -253,6 +253,7 @@
Beschreibung
Diskussion
Autor
+ Uploader
Hochgeladen am
Lizenz
Koordinaten
@@ -262,15 +263,14 @@
2FA-Code
E-Mail-Bestätigungscode
Möchtest du dich wirklich abmelden?
- Medienbild fehlgeschlagen
Keine Unterkategorien gefunden
Keine übergeordneten Kategorien gefunden
Zaō
Lamas
Rainbow Bridge
Tulpe
- Willkommen Wikipedia
- Willkommen Urheberrecht
+ Willkommen Wikipedia
+ Willkommen Urheberrecht
Sydney Opera House
Abbrechen
Öffnen
@@ -303,6 +303,7 @@
Der Hochlade-Vorgang erfordert einen aktiven Internetzugang. Bitte prüfe deine Netzwerkverbindung.
Im Bild gefundene Probleme
Lade bitte nur Bilder hoch, die du selber aufgenommen hast. Lade keine Bilder hoch, die du aus dem Internet heruntergeladen hast.
+ Hochgeladene Dateien
Speichern von In-App-Aufnahmen
Mit der In-App-Kamera aufgenommene Bilder auf deinem Gerät speichern
Bei deinem Benutzerkonto anmelden
@@ -374,6 +375,7 @@
Quiz
Ist dieses Bild in Ordnung zum Hochladen?
Frage
+ Ich bin unsicher
Ergebnis
Falls du weiterhin Bilder hochlädst, die eine Löschung erfordern, wird dein Benutzerkonto vermutlich gesperrt. Bist du sicher, dass du das Quiz beenden möchtest?
Mehr als %1$s deiner hochgeladenen Bilder wurden gelöscht. Falls du weiterhin Bilder hochlädst, die eine Löschung erfordern, wird dein Benutzerkonto vermutlich gesperrt.\n\nMöchtest du die Anleitung erneut ansehen und anschließend ein Quiz machen, das dir hilft zu lernen, welche Bildtypen du hochladen sollst und welche nicht?
@@ -383,6 +385,7 @@
Eines der Ziele von Commons ist das Sammeln von Qualitätsbildern. Deshalb sollten keine unscharfen Bilder hochgeladen werden. Versuche immer schöne Bilder mit einer guten Belichtung aufzunehmen.
Bilder, die Technik oder Kultur zeigen, sind auf Commons sehr willkommen.
%1$s deiner Antworten waren korrekt. Glückwunsch!
+ Weiter
Wähle eine der zwei Optionen aus, um die Frage zu beantworten.
Sitzung abgelaufen. Bitte erneut anmelden.
Teile das Quiz mit deinen Freunden!
@@ -406,13 +409,11 @@
Errungenschaften
Profil
Auszeichnungen
- Statistiken
Erhaltene Dankeschöns
Vorgestellte Bilder
Bilder über „Orte in der Nähe“
- Level %d
- %s (Level %s)
- %s (%s)
+ Level %1$d
+ %1$s (Level %2$s)
Hochgeladene Bilder
Bilder nicht zurückgesetzt
Verwendete Bilder
@@ -477,6 +478,8 @@
Endet am:
Kampagnen anzeigen
Die laufenden Kampagnen ansehen
+ Löschschaltfläche anzeigen
+ Aktiviere die Schaltfläche „Ordner löschen“ im benutzerdefinierten Picker
Erlauben Sie der App, den Standort abzurufen, falls die Kamera ihn nicht aufzeichnet. Einige Gerätekameras zeichnen den Standort nicht auf. In solchen Fällen wird Ihr Beitrag nützlicher, wenn Sie die App den Standort abrufen und anhängen lassen. Sie können dies jederzeit in den Einstellungen ändern
Erlauben
Ablehnen
@@ -500,11 +503,11 @@
Eine Kategorieprüfung für %1$s konnte nicht angefordert werden
Kategorieprüfung für %1$s anfordern
Fertig
- Dankeschöns senden: Erfolgreich
- Dankeschön erfolgreich an %1$s gesandt
- Senden der Dankeschöns %1$s fehlgeschlagen
- Dankeschön senden: Fehler
- Dankeschöns für %1$s senden
+ Dankeschöns senden: Erfolgreich
+ Dankeschön an %1$s gesendet
+ Senden des Dankeschöns an %1$s fehlgeschlagen
+ Dankeschön senden: Fehler
+ Dankeschöns für %1$s senden
Entspricht dies den Regeln des Urheberrechts?
Ist dies korrekt kategorisiert?
Ist dies im Geltungsbereich?
@@ -531,15 +534,14 @@
Ungelesene ansehen
Beim Auswählen der Bilder ist ein Fehler aufgetreten
Bitte warten …
- Vorgestellte Bilder sind Bilder von professionellen Fotografen und Zeichnern, die die Gemeinschaft von Wikimedia Commons als diejenigen mit der höchsten Qualität auf der Website ausgewählt hat.
Über Orte in der Nähe hochgeladene Bilder sind die Bilder, die von entdeckten Orten auf der Karte hochgeladen wurden.
Diese Funktion erlaubt es Autoren, eine Dankeschön-Benachrichtigung an Benutzer zu senden, die nützliche Bearbeitungen durchgeführt haben – durch die Benutzung eines kleinen Dankeschön-Links in der Versionsgeschichte oder Unterschiedsseite.
- Auf Folgemedien kopieren
+ Auf die nachfolgenden Elemente kopieren
Kopiert
Beispiele guter Bilder zum Hochladen auf Commons
Beispiele von Bildern, die nicht hochgeladen werden sollen.
Dieses Bild überspringen
- Download fehlgeschlagen! Wir konnten die Datei nicht ohne externe Speicherberechtigung herunterladen!
+ Download fehlgeschlagen. Wir konnten die Datei nicht ohne externe Speicherberechtigung herunterladen.
EXIF-Tags verwalten
Auswahl, welche EXIF-Tags beim Upload behalten werden sollen
Autor
@@ -549,11 +551,10 @@
Kameralinse
Seriennummer
Software
- Zugriff auf Medienstandort verweigert
- Es kann sein, dass wir nicht in der Lage sind, automatisch Standortdaten von Bildern zu erhalten, die du hochlädst. Bitte füge den entsprechenden Ort für jedes Bild hinzu, bevor du es einreichst.
Lade Fotos direkt von deinem Telefon auf Wikimedia Commons hoch. Lade die Commons-App jetzt herunter: %1$s
App teilen über …
Bildinformationen
+ Diese Nachricht nicht mehr anzeigen
Keine Kategorien gefunden
Keine Motive gefunden
Hochladen abbrechen
@@ -585,7 +586,10 @@
Kategorien aktualisieren
Versuche, die Darstellungen zu aktualisieren.
Beschriftungen bearbeiten
- {{PLURAL|one=Darstellung %1$s wird hinzugefügt.|Darstellungen %1$s werden hinzugefügt.
+
+ - Darstellung %1$s wird hinzugefügt.
+ - Darstellungen %1$s werden hinzugefügt.
+
Es konnten keine Darstellungen hinzugefügt werden.
Versuche, die Koordinaten zu aktualisieren.
Koordinaten aktualisieren
@@ -603,7 +607,7 @@
Beschreibungen und Überschriften bearbeiten
Bild teilen via
Du hast noch keine Beiträge verfasst.
- %s hat noch keine Beiträge geleistet
+ %1$s hat noch keine Beiträge geleistet
Benutzerkonto erstellt!
Text in die Zwischenablage kopiert
Benachrichtigung als gelesen markieren
@@ -612,7 +616,7 @@
Existiert
Benötigt Foto
Ortstyp:
- Brücke, Museum, Hotel etc.
+ Brücke, Museum, Hotel etc.
Bei der Anmeldung ist etwas schiefgelaufen. Du musst dein Passwort zurücksetzen!
MEDIA
CHILD CLASSES
@@ -723,7 +727,7 @@
Zurück
Willkommen bei der benutzerdefinierten Bildauswahl
Diese Auswahl zeigt dir, welche Bilder du bereits auf Commons hochgeladen hast.
- Im Gegensatz zum Bild auf der linken Seite ist das Bild auf der rechten Seite mit dem Commons-Logo versehen, das anzeigt, dass es bereits hochgeladen wurde. Für die Bildvorschau berühren und halten.
+ Im Gegensatz zum Bild auf der linken Seite ist das Bild auf der rechten Seite mit dem Commons-Logo versehen, das anzeigt, dass es bereits hochgeladen wurde. Für die Bildvorschau berühren und halten.
Großartig
Dieses Bild ist bereits auf Commons hochgeladen worden.
Aus technischen Gründen kann die Anwendung nicht mehr als %1$d Bilder auf einmal verlässlich hochladen. Die Grenze für das Hochladen von %1$d wurde um %2$d überschritten.
@@ -737,8 +741,10 @@
Wiki Loves Monuments ist ein internationaler Fotowettbewerb für Denkmäler, der von Wikimedia organisiert wird.
Erlaubnis erforderlich
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
+ Bitte aktivieren Sie die Ortungsdienste, um Orte in der Nähe anzuzeigen.
+ Optionale Berechtigung: Ruft den aktuellen Standort für Kategorievorschläge ab
+ Beiträge von Benutzer: %1$s
+ Erfolge des Benutzers: %1$s
Benutzerseite ansehen
Beschriftungen bearbeiten
Kategorien bearbeiten
@@ -749,7 +755,7 @@
Standortdaten helfen den Wiki-Benutzern, dein Bild zu finden, was es viel nützlicher macht.\nDeine zuletzt hochgaldenen Fotos haben keinen Standort.\nWir empfehlen dir, den Standort in den Einstellungen deiner Kamera-App zu aktivieren.\nVielen Dank für das Hochladen!
Kein Standort gefunden
Wie wäre es, den Ort hinzuzufügen, an dem dieses Bild aufgenommen wurde?\nOrtsangaben helfen Wiki-Benutzern, dein Bild zu finden, und machen es viel nützlicher.\nVielen Dank!
- Standort hinzufügen
+ Standort hinzufügen
Bitte entferne aus dieser E-Mail alle Informationen, die du nicht öffentlich mitteilen möchtest. Bitte beachte auch, dass deine E-Mail-Adresse, mit der du schreibst, sowie der dazugehörige Name und das Profilbild öffentlich sichtbar sind.
Einzelheiten
Erfolge sind nur in der Prod-Variante verfügbar. Bitte schaue in der Entwicklerdokumentation nach.
@@ -770,8 +776,8 @@
Markierung als nicht zum Hochladen aufheben
Als nicht zum Hochladen markieren
Markierung als nicht zum Hochladen aufheben
- Bereits bearbeitete Bilder anzeigen
- Ausblenden bereits bearbeiteter Bilder
+ Bereits bearbeitete Bilder anzeigen
+ Ausblenden bereits bearbeiteter Bilder
Keine Bilder mehr gefunden
Dieses Bild wurde bereits hochgeladen
Dieses Bild kann nicht zum Hochladen ausgewählt werden
@@ -794,7 +800,7 @@
Für die Funktionalität sind Berechtigungen erforderlich
Erfahre, wie man eine nützliche Beschreibung schreibt
Erfahre, wie man eine nützliche Überschrift schreibt
- Deine Erfolge ansehen
+ Deine Erfolge ansehen
Bild bearbeiten
Standort bearbeiten
Standort aktualisiert!
@@ -807,15 +813,15 @@
Deine Sitzung ist abgelaufen. Bitte melde dich erneut an.
Keine Anwendung zum Öffnen von GPX-Dateien verfügbar
Datei erfolgreich gespeichert
- Möchtest du die GPX-Datei öffnen?
- Möchtest du die KML-Datei öffnen?
- KML-Datei konnte nicht gespeichert werden.
- GPX-Datei konnte nicht gespeichert werden.
- Speichere KML-Datei
- Speichere GPX-Datei
+ Möchtest du die GPX-Datei öffnen?
+ Möchtest du die KML-Datei öffnen?
+ KML-Datei konnte nicht gespeichert werden.
+ GPX-Datei konnte nicht gespeichert werden.
+ Speichere KML-Datei
+ Speichere GPX-Datei
- Ein Bild ausgewählt
- - %d Bilder ausgewählt
+ - %1$d Bilder ausgewählt
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
@@ -824,6 +830,7 @@
Diskussion
Schreibe etwas über das Objekt ‚%1$s‘. Deine Beschreibung wird öffentlich sichtbar sein.
‚%1$s‘ existiert nicht mehr, es kann kein Foto mehr davon gemacht werden.
+ „%1$s“ befindet sich an einem anderen Ort.
‚%1$s‘ ist jetzt an einem anderen Ort. Bitte gib den richtigen Ort und, wenn möglich, den Breiten- und Längengrad an.
Sonstiges Problem oder Information (bitte unten erläutern).
Dein Feedback wird auf der folgenden Wiki-Seite veröffentlicht werden: <a href=\"https://commons.wikimedia.org/wiki/Commons:Mobile_app/Feedback\">Commons:Mobile app/Feedback</a>
@@ -853,6 +860,7 @@
Konto
Konto auflösen
Kontoauflösungs-Warnung
+ Das Ausblenden ist ein <b>letzter Ausweg</b> und sollte <b>nur verwendet werden, wenn du für immer mit dem Bearbeiten aufhören willst</b> und auch, um so viele deiner früheren Verknüpfungen wie möglich zu verbergen.<br/><br/>Die Löschung eines Kontos bei Wikipedia erfolgt, indem dein Kontoname so geändert wird, dass andere deine Beiträge nicht mehr erkennen können, ein Prozess, der Kontoverbergen genannt wird. <b>Das Ausblenden garantiert keine vollständige Anonymität und entfernt keine Beiträge in den Projekten</b>.
Bildunterschrift
Bildunterschrift in Zwischenablage kopiert
Herzlichen Glückwunsch, alle Bilder in diesem Album wurden entweder hochgeladen oder als nicht zum Hochladen markiert.
@@ -860,4 +868,5 @@
In „In der Nähe“ anzeigen
Erstellt und hochgeladen von: %1$s
Erstellt von %1$s und hochgeladen von %2$s
+ Zur Löschung vorschlagen
diff --git a/app/src/main/res/values-diq/strings.xml b/app/src/main/res/values-diq/strings.xml
index f6bbf1f0e..28575a9d5 100644
--- a/app/src/main/res/values-diq/strings.xml
+++ b/app/src/main/res/values-diq/strings.xml
@@ -12,7 +12,7 @@
-->
Pela Facebookiya Commonsi
- Kodê Çımeyê GitHubê Commonsi
+ Kodê Çımeyê GitHubê Commonsi
Logoy Commonsi
Websitey Commonsi
Bırışe
@@ -27,21 +27,17 @@
- 1 dosya bar bena
- %1$d dosyeyi bar benê
-
- - (%1$d)
- - (%1$d)
-
Barkerdış serniyeno
- %1$d bar beno
- %1$d bar benê
-
+
- %1$d barkerdış
- %1$d barkerdışi
-
- - no resım , lisansê %1$s bın bo
+
+ - No resım, lisansê %1$s bın bo
- Nê resımi, lisansê %1$s bın bê
@@ -129,10 +125,10 @@
Biya war
Lisanso hesebiyaye
Thema
- Attribution-ShareAlike 4.0
- Attribution 4.0
- Attribution-ShareAlike 3.0
- Attribution 3.0
+ Attribution-ShareAlike 4.0
+ Attribution 4.0
+ Attribution-ShareAlike 3.0
+ Attribution 3.0
CC0
CC BY-SA 3.0
CC BY 3.0
@@ -175,15 +171,14 @@
Bıbe karberê Beta Testi
2FA-Code (Dı faktorın raşt kerdış)
Şıma qayılê cı ra bıvıciyê?
- Resımê medyay nêbiyo
Bınkategoriye nêvineya
Kategoriya serên nêvineyê
Koyê Zao
Lamay
Pırdê rainbowi
Korbıze
- Xeyr amey Wikipedia
- Xeyr amey Heqa telifiye
+ Xeyr amey Wikipedia
+ Xeyr amey Heqa telifiye
Sydney Opera House
Bıtexelne
Ake
@@ -261,11 +256,10 @@
Bestere
Destgrotey
Profile
- İstatistiki
Teşekurê gêriyayi
Resımê weçinıteyi
\"Cayê nezdı\" ra resımi
- Sewiya
+ Sewiya %1$d
Resımi biyê bar
Resımi peyser nêgeriyaye
Gureyniyaye resımi
@@ -313,7 +307,7 @@
Logo
Çıkı wıniyo
Resımi vıla kerê pê
- Hewna to iştirak nêkerdo
+ Hewna %1$s iştirak nêkerdo
Hesab vıraziya!
Metın be panoyi ra kopya bi
Pêhesnayışi wanaye nışan bıkerê
diff --git a/app/src/main/res/values-el/strings.xml b/app/src/main/res/values-el/strings.xml
index b571ed003..5cdf49799 100644
--- a/app/src/main/res/values-el/strings.xml
+++ b/app/src/main/res/values-el/strings.xml
@@ -28,7 +28,7 @@
-->
Σελίδα Commons στο Facebook
- Πηγαίος κώδικας των Commons στο GitHub
+ Πηγαίος κώδικας των Commons στο GitHub
Λογότυπο Commons
Ιστοσελίδα Commons
Έξοδος από το εργαλείο επιλογής τοποθεσίας
@@ -52,18 +52,14 @@
- %1$d μεταφόρτωση αρχείου
- %1$d μεταφόρτωση αρχείων
-
- - (%1$d)
- - (%1$d)
-
Έναρξη μεταφορτώσεων
- - Επεξεργασία %d μεταφόρτωσης
- - Επεξεργασία %d μεταφορτώσεων
+ - Επεξεργασία %1$d μεταφόρτωσης
+ - Επεξεργασία %1$d μεταφορτώσεων
- - %d μεταφόρτωση
- - %d μεταφορτώσεις
+ - %1$d μεταφόρτωση
+ - %1$d μεταφορτώσεις
- Αυτή η εικόνα θα αδειοδοτηθεί υπό την %1$s
@@ -107,7 +103,7 @@
Η μεταφόρτωση βρίσκεται σε ουρά (ενεργοποιημένη λειτουργία περιορισμένης σύνδεσης)
%1$s μεταφορτώθηκε!
Πατήστε για να δείτε τη μεταφόρτωσή σας
- Μεταφόρτωση αρχείου: %s
+ Μεταφόρτωση αρχείου: %1$s
%1$s μεταφορτώθηκε!
Ολοκληρώνεται η μεταφόρτωση %1$s
Η μεταφόρτωση του %1$s απέτυχε
@@ -155,6 +151,7 @@
Ρυθμίσεις
Εγγραφή
Προβεβλημμένες εικόνες
+ Οι επιλεγμένες εικόνες είναι εικόνες από άριστα καταρτισμένους φωτογράφους και εικονογράφους που η κοινότητα του Wikimedia Commons έχει επιλέξει ως μερικές από τις υψηλότερης ποιότητας στον ιστότοπο.
Προσαρμοσμένος Επιλογέας
Κατηγορία
Αξιολόγηση από ομοτίμους
@@ -176,10 +173,10 @@
Προεπιλεγμένη άδεια
Χρήση προηγούμενου τίτλου και περιγραφής
Θέμα
- Αναφορά-Παρόμοια Διανομή 4.0
- Αναφορά 4.0
- Αναφορά-Παρόμοια Διανομή 4.0 3.0
- Αναφορά 3.0
+ Αναφορά-Παρόμοια Διανομή 4.0
+ Αναφορά 4.0
+ Αναφορά-Παρόμοια Διανομή 4.0 3.0
+ Αναφορά 3.0
CC0
CC BY-SA 3.0
CC BY 3.0
@@ -232,6 +229,7 @@
Περιγραφή
Συζήτηση
Συγγραφέας
+ Ανεβαστής
Ημερομηνία μεταφόρτωσης
Άδεια
Συντεταγμένες
@@ -241,15 +239,14 @@
Κωδικός 2FA
Κωδικός επαλήθευσης ηλεκτρονικού ταχυδρομείου
Θέλετε σίγουρα να αποσυνδεθείτε;
- Η εικόνα πολυμέσων απέτυχε
Δε βρέθηκαν υποκατηγορίες
Δε βρέθηκαν γονικές κατηγορίες
Όρος Ζάο
Λάμα
Γέφυρα Ρέινμποου
Τουλίπα
- Καλωσήρθατε στη Βικιπαίδεια
- Καλώς ορίσατε στα Πνευματικά δικαιώματα
+ Καλωσήρθατε στη Βικιπαίδεια
+ Καλώς ορίσατε στα Πνευματικά δικαιώματα
Όπερα του Σίδνεϊ
Ακύρωση
Άνοιγμα
@@ -385,13 +382,11 @@
Επιτεύγματα
Προφίλ
Σήματα
- Στατιστικά
Ευχαριστίες που έχετε λάβει
Προβεβλημμένες εικόνες
Εικόνες μέσω «Κοντινά μέρη»
- Επίπεδο %d
- %s (Επίπεδο %s)
- %s (%s)
+ Επίπεδο %1$d
+ %1$s (Επίπεδο %2$s)
Εικόνες που μεταφορτώθηκαν
Εικόνες που δεν ανεστράφησαν
Εικόνες που χρησιμοποιήθηκαν
@@ -434,7 +429,7 @@
Συνειδητοποίησα ότι είναι κακό για την ιδιωτικότητά μου
Άλλαξα γνώμη, δε θέλω να προβάλλεται πλέον δημόσια
Συγγνώμη, αυτή η φωτογραφία δεν είναι ενδιαφέρουσα για μια εγκυκλοπαίδεια
- Ανέβηκε από εμένα στο %1$s, χρησιμοποιήθηκε σε %2$d άρθρο/α
+ Ανέβηκε από εμένα στο %1$s, χρησιμοποιήθηκε σε τουλάχιστον %2$d άρθρο/α.
Καλώς ήρθατε στα Commons!\n\nΑνεβάστε τα πρώτα σας πολυμέσα πατώντας το κουμπί της προσθήκης.
Δεν επιλέχθηκαν κατηγορίες
Οι εικόνες χωρίς κατηγορίες χρησιμοποιούνται σπάνια. Θέλετε πράγματι να συνεχίσετε δίχως να επιλέξετε κατηγορίες;
@@ -451,7 +446,7 @@
Μη με ξαναρωτήσετε
Ζητήστε άδεια τοποθεσίας
Ζητήστε άδεια τοποθεσίας όταν χρειάζεται για τη λειτουργία προβολής κοντινής κάρτας ειδοποιήσεων.
- Κάτι πήγε στραβά. Δεν μπορέσαμε να ανακτήσουμε επιτεύγματα
+ Κάτι πήγε στραβά. Δεν μπορέσαμε να ανακτήσουμε επιτεύγματα
Έχετε κάνει τόσες πολλές συνεισφορές που δεν μπορεί να αντεπεξέλθει το σύστημα υπολογισμού επιτευγμάτων μας. Αυτό είναι το απόλυτο επίτευγμα.
Λήγει στις:
Προβολή εκστρατειών
@@ -479,11 +474,11 @@
Δεν ήταν δυνατή η αίτηση ελέγχου κατηγορίας για %1$s
Αίτημα ελέγχου κατηγορίας για %1$s
Έγινε
- Αποστολή Ευχαριστιών: Επιτυχία
- Επιτυχής αποστοή ευχαριστιών προς %1$s
- Αποτυχία αποστολής ευχαριστιών %1$s
- Αποστολή Ευχαριστιών: Αποτυχία
- Αποστολή Ευχαριστιών για %1$s
+ Αποστολή Ευχαριστιών: Επιτυχία
+ Επιτυχής αποστοή ευχαριστιών προς %1$s
+ Αποτυχία αποστολής ευχαριστιών %1$s
+ Αποστολή Ευχαριστιών: Αποτυχία
+ Αποστολή Ευχαριστιών για %1$s
Ακολουθεί αυτό τους κανόνες πνευματικής ιδιοκτησίας;
Είναι σωστά κατηγοριοποιημένο αυτό;
Είναι αυτό εντός πεδίου εφαρμογής;
@@ -510,15 +505,14 @@
Προβολή μη αναγνωσμένων
Παρουσιάστηκε σφάλμα κατά την επιλογή εικόνων
Παρακαλούμε περιμένετε…
- Οι επιλεγμένες εικόνες είναι εικόνες από άριστα καταρτισμένους φωτογράφους και εικονογράφους που η κοινότητα του Wikimedia Commons έχει επιλέξει ως μερικές από τις υψηλότερης ποιότητας στον ιστότοπο.
Οι εικόνες που μεταφορτώνονται μέσω κοντινών τοποθεσιών είναι οι εικόνες που μεταφορτώνονται ανακαλύπτοντας μέρη στο χάρτη.
Αυτή η δυνατότητα επιτρέπει στους συντάκτες να στέλνουν μια ειδοποίηση ευχαριστιών σε χρήστες που κάνουν χρήσιμες επεξεργασίες – χρησιμοποιώντας έναν μικρό σύνδεσμο ευχαριστιών στη σελίδα ιστορικού ή στη σελίδα διαφορών.
- Αντιγραφή σε επόμενα μέσα
+ Αντιγραφή σε επόμενα μέσα
Αντιγράφηκε με επιτυχία
Παραδείγματα καλών εικόνων για να ανεβάσετε στο Commons
Παραδείγματα εικόνων που δεν πρέπει να ανεβάζονται
Παραλείψτε αυτήν την εικόνα
- Η λήψη απέτυχε!!. Δεν μπορούμε να κατεβάσουμε το αρχείο χωρίς άδεια εξωτερικού χώρου αποθήκευσης.
+ Η λήψη απέτυχε!!. Δεν μπορούμε να κατεβάσουμε το αρχείο χωρίς άδεια εξωτερικού χώρου αποθήκευσης.
Διαχείριση ετικετών EXIF
Επιλέξτε ποιες ετικέτες EXIF θα διατηρηθούν στις μεταφορτώσεις
Δημιουργός
@@ -528,8 +522,6 @@
Μοντέλο φακού
Σειριακός αριθμός
Λογισμικό
- Δεν επιτρέπεται η πρόσβαση στην τοποθεσία πολυμέσων
- Ενδέχεται να μην μπορούμε να λάβουμε αυτόματα δεδομένα τοποθεσίας από φωτογραφίες που ανεβάζετε. Προσθέστε την κατάλληλη τοποθεσία για κάθε εικόνα πριν την υποβολή
Ανεβάστε φωτογραφίες στα Wikimedia Commons απευθείας από το τηλέφωνό σας. Κάντε λήψη της εφαρμογής Commons τώρα: %1$s
Κοινή χρήση εφαρμογής μέσω...
Πληροφορίες Εικόνας
@@ -585,7 +577,7 @@
Επεξεργαστείτε περιγραφές και λεζάντες
Κοινή χρήση εικόνας μέσω
Δεν έχετε κάνει ακόμη συνεισφορές
- %s δεν έχει συνεισφέρει ακόμα
+ %1$s δεν έχει συνεισφέρει ακόμα
Ο λογαριασμός δημιουργήθηκε!
Το κείμενο αντιγράφτηκε στο πρόχειρο.
Η ειδοποίηση επισημάνθηκε ως αναγνωσμένη
@@ -594,7 +586,7 @@
Υπάρχει
Χρειάζεται Φωτογραφία
Τύπος τοποθεσίας:
- Γέφυρα, μουσείο, ξενοδοχείο κ.λπ.
+ Γέφυρα, μουσείο, ξενοδοχείο κ.λπ.
Κάτι πήγε στραβά με την σύνδεση. Πρέπει να επαναφέρετε το κωδικό πρόσβασης σας!
ΜΕΣΑ
ΥΠΟΚΛΑΣΕΙΣ
@@ -636,7 +628,7 @@
5. Επικολλήστε το wikitext στην κατάλληλη θέση.
6. Επεξεργαστείτε το wikitext για κατάλληλη τοποθέτηση, εάν είναι απαραίτητο. Για περισσότερες πληροφορίες, δείτε <a href=\"https://en.wikipedia.org/wiki/Wikipedia:Manual_of_Style/Images#How_to_place_an_image\">εδώ</a> .
7. Δημοσιεύστε το άρθρο
- Αντιγράψτε τον wikicode στο πρόχειρο
+ Αντιγράψτε τον wikicode στο πρόχειρο
παύση
συνέχεια
Σε παύση
@@ -691,7 +683,7 @@
Εμφάνιση στην εφαρμογή χάρτη
Επεξεργασία τοποθεσίας
Η προβολή εικόνας του εργαλείου επιλογής τοποθεσίας
- Η σκιά της προβολής εικόνας του εργαλείου επιλογής τοποθεσίας
+ Η σκιά της προβολής εικόνας του εργαλείου επιλογής τοποθεσίας
Τοποθεσία εικόνας
Ελέγξτε εάν η τοποθεσία είναι σωστή
Ετικέτα
@@ -703,7 +695,7 @@
Πίσω
Καλώς ορίσατε στον Προσαρμοσμένο Επιλογέα Εικόνων
Αυτό το εργαλείο επιλογής σάς δείχνει ποιες εικόνες έχετε ήδη ανεβάσει στα Commons.
- Σε αντίθεση με την εικόνα στα αριστερά, η εικόνα στα δεξιά έχει το λογότυπο Commons που υποδεικνύει ότι έχει ήδη μεταφορτωθεί. Αγγίξτε παρατεταμένα για προεπισκόπηση εικόνας.
+ Σε αντίθεση με την εικόνα στα αριστερά, η εικόνα στα δεξιά έχει το λογότυπο Commons που υποδεικνύει ότι έχει ήδη μεταφορτωθεί. Αγγίξτε παρατεταμένα για προεπισκόπηση εικόνας.
Περίφημα!
Αυτή η εικόνα έχει ήδη μεταφορτωθεί στο Commons.
Για τεχνικούς λόγους, η εφαρμογή δεν μπορεί να ανεβάσει αξιόπιστα περισσότερες από %1$d φωτογραφίες ταυτόχρονα. Το όριο μεταφόρτωσης του %1$d έχει ξεπεραστεί κατά %2$d .
@@ -717,8 +709,9 @@
Το Wiki Loves Monuments είναι ένας διεθνής διαγωνισμός φωτογραφίας για μνημεία που διοργανώνεται από το Wikimedia
Χρειάζεται άδεια
Οι κοντινοί χάρτες πρέπει να διαβάζουν PHONE STATE για να λειτουργούν σωστά
- Συνεισφορές χρήστη: %s
- Επιτεύγματα χρήστη: %s
+ Προαιρετική άδεια: Ανάκτηση τρέχουσας θέσης σας για προτάσεις κατηγοριών
+ Συνεισφορές χρήστη: %1$s
+ Επιτεύγματα χρήστη: %1$s
Προβολή σελίδας χρήστη
Επεξεργασία απεικονίσεων
Επεξεργασία κατηγοριών
@@ -729,7 +722,7 @@
Τα δεδομένα τοποθεσίας βοηθούν τους συντάκτες του Wiki να βρουν την εικόνα σας, καθιστώντας την πολύ πιο χρήσιμη. Οι πρόσφατες μεταφορτώσεις σας δεν έχουν τοποθεσία. Σας προτείνουμε να ενεργοποιήσετε την τοποθεσία στις ρυθμίσεις της εφαρμογής της κάμεράς σας.\nΣας ευχαριστούμε για τη μεταφόρτωση!
Δεν βρέθηκε τοποθεσία
Τι θα λέγατε να προσθέσετε το μέρος όπου τραβήχτηκε αυτή η εικόνα; Τα δεδομένα τοποθεσίας βοηθούν τους συντάκτες του Wiki να βρουν την εικόνα σας, καθιστώντας την πολύ πιο χρήσιμη.\nΕυχαριστούμε!
- Προσθήκη τοποθεσίας
+ Προσθήκη τοποθεσίας
Αφαιρέστε από αυτό το μήνυμα ηλεκτρονικού ταχυδρομείου οποιεσδήποτε πληροφορίες δεν θα θέλατε να κοινοποιήσετε δημόσια. Επίσης, λάβετε υπόψη ότι η διεύθυνση email σας με την οποία δημοσιεύετε, καθώς και το σχετικό όνομα και η εικόνα προφίλ, θα είναι ορατά δημόσια.
Λεπτομέρειες
Τα επιτεύγματα είναι διαθέσιμα μόνο στο prod flavor. Ελέγξτε την τεκμηρίωση προγραμματιστή.
@@ -750,8 +743,8 @@
Καταργήστε την επισήμανση ως όχι για μεταφόρτωση
Επισήμανση ως όχι για μεταφόρτωση
Κατάργηση επισήμανσης ως όχι για μεταφόρτωση
- Εμφάνιση εικόνων που έχουν ήδη ενεργοποιηθεί
- Απόκρυψη εικόνων που έχουν ήδη ενεργοποιηθεί
+ Εμφάνιση εικόνων που έχουν ήδη ενεργοποιηθεί
+ Απόκρυψη εικόνων που έχουν ήδη ενεργοποιηθεί
Δεν βρέθηκαν άλλες εικόνες
Αυτή η εικόνα έχει ήδη μεταφορτωθεί
Δεν είναι δυνατή η επιλογή αυτής της εικόνας για μεταφόρτωση
@@ -774,7 +767,7 @@
Απαιτούνται δικαιώματα για τη λειτουργικότητα
Μάθετε πώς να γράψετε μια χρήσιμη περιγραφή
Μάθετε πώς να γράψετε μια χρήσιμη λεζάντα
- Δείτε τα επιτεύγματά σας
+ Δείτε τα επιτεύγματά σας
Επεξεργασία εικόνας
Επεξεργασία τοποθεσίας
Η τοποθεσία ενημερώθηκε!
@@ -787,15 +780,15 @@
Η περίοδος σύνδεσης έληξε, παρακαλούμε συνδεθείτε ξανά
Δεν υπάρχει διαθέσιμη εφαρμογή για το άνοιγμα αρχείων GPX
Το αρχείο αποθηκεύτηκε με επιτυχία
- Θέλετε να ανοίξετε το αρχείο GPX;
- Θέλετε να ανοίξετε το αρχείο KML;
- Αποτυχία αποθήκευσης του αρχείου KML.
- Αποτυχία αποθήκευσης του αρχείου GPX.
- Αποθήκευση αρχείου KML
- Αποθήκευση αρχείου GPX
+ Θέλετε να ανοίξετε το αρχείο GPX;
+ Θέλετε να ανοίξετε το αρχείο KML;
+ Αποτυχία αποθήκευσης του αρχείου KML.
+ Αποτυχία αποθήκευσης του αρχείου GPX.
+ Αποθήκευση αρχείου KML
+ Αποθήκευση αρχείου GPX
- - %d επιλεγμένη εικόνα
- - Επιλέχθηκαν %d εικόνες
+ - %1$d επιλεγμένη εικόνα
+ - Επιλέχθηκαν %1$d εικόνες
Να θυμάστε ότι όλες οι εικόνες σε μια πολλαπλή μεταφόρτωση έχουν τις ίδιες κατηγορίες και απεικονίσεις. Εάν οι εικόνες δεν μοιράζονται απεικονίσεις και κατηγορίες, πραγματοποιήστε πολλές ξεχωριστές μεταφορτώσεις.
Σημείωση για τις πολλαπλές μεταφορτώσεις
@@ -835,4 +828,5 @@
Εμφάνιση στα Κοντινά
Δημιουργήθηκε και μεταφορτώθηκε από: %1$s
Δημιουργήθηκε από %1$s και μεταφορτώθηκε από %2$s
+ Προτάθηκε για Διαγραφή
diff --git a/app/src/main/res/values-eo/strings.xml b/app/src/main/res/values-eo/strings.xml
index 28f3f0eb8..53be4c95a 100644
--- a/app/src/main/res/values-eo/strings.xml
+++ b/app/src/main/res/values-eo/strings.xml
@@ -8,12 +8,13 @@
* Mirin
* Robin van der Vliet
* Surfo
+* Tymewalk
* YvesNevelsteen
* Ziko
-->
Facebook-Paĝo de Komunejo
- Fontokodo de Komunejo ĉe Github
+ Fontokodo de Komunejo ĉe GitHub
Emblemo de Komunejo
Retejo de Komunejo
Eliri lok-elektilon
@@ -37,18 +38,14 @@
- %1$d dosiero alŝutata
- %1$d dosieroj alŝutataj
-
- - (%1$d)
- - (%1$d)
-
Komencanta Alŝutojn
-
- - Komencanta %d alŝuton
- - Komencanta %d alŝutojn
+
+ - Prilaboraĵo de %1$d alŝuton
+ - Prilaboraĵo de %1$d alŝutojn
- - %d alŝuto
- - %d alŝutoj
+ - %1$d alŝuto
+ - %1$d alŝutoj
- Ĉi tiu bildo estos sub permesilo %1$s
@@ -92,7 +89,7 @@
Alŝuto atendas en vico (limigita konekta modo estas ebligita)
%1$s alŝutita!
Tuŝetu por vidi vian alŝutadon
- Alŝutas dosieron: %s
+ Alŝutas dosieron: %1$s
Alŝutante %1$s
Finiĝis la alŝutado de %1$s
La alŝutado de %1$s malsukcesis
@@ -138,6 +135,7 @@
Agordoj
Registriĝi
Elstarigitaj bildoj
+ Elstaraj bildoj estas tiuj bildoj far tre spertaj fotografistoj kaj ilustristoj, kiujn la komunumo de Vikimedia Komunejo elektis kiel iujn de la plej alta kvalito en la retejo.
Laŭmenda Elektilo
Kategorio
Reviziado de kolegoj
@@ -154,15 +152,16 @@
Vi ankoraŭ ne alŝutis fotojn.
Reprovi
Nuligi
+ Ĉiuj Lingvoj
Per submetado de ĉi tiu bildo, mi certigas ke ĝi estas mia propra verko, ke ĝi ne enhavas ion protektatan de aŭtorrajtoj, ke ĝi ne estas memfoto, kaj ke ĝi alimaniere observas la <a href=\"https://commons.wikimedia.org/wiki/Commons:Policies_and_guidelines/eo\">regularojn de Vikipedia Komunejo</a>.
Elŝuti
Defaŭlta permesilo
Uzi la antaŭajn titolon kaj priskribon
Etoso
- Atribuite-Samkondiĉe 4.0
- Atribuite 4.0
- Atribuite-Samkondiĉe 3.0
- Atribuite 3.0
+ Atribuite-Samkondiĉe 4.0
+ Atribuite 4.0
+ Atribuite-Samkondiĉe 3.0
+ Atribuite 3.0
CC0
CC BY-SA 3.0
CC BY 3.0
@@ -223,15 +222,14 @@
Abonu nian beta-kanalon ĉe Google Play kaj frue ekprovu novajn trajtojn kaj riparojn de cimoj
2FA-Kodo
Ĉu vi vere volas elsaluti?
- Aŭdvidaĵo-Bildo Malsukcesis
Neniu subkategorio trovita
Neniu superkategorio trovita
Monto Zao
Lamoj
Ĉielarka Ponto
Tulipo
- Bonvenon al Vikipedio
- Kopirajto
+ Bonvenon al Vikipedio
+ Kopirajto
Sidneja Operejo
Nuligi
Malfermi
@@ -341,6 +339,7 @@
Unu el la celoj de Komunejo estas kolekti bonkvalitajn bildojn. Do, malklaraj bildoj ne estas alŝutindaj. Ĉiam provu foti bonkvalite kun bona prilumado.
Ĉe Komunejo, ni bonvenigas bildojn prezentantajn teknologion aŭ kulturon.
%1$s el viaj respondoj estis ĝustaj. Gratulon!
+ Daŭrigi
Elektu unu el la du respondoj al la demando
Ensaluta sesio eksvalidiĝis; bonvolu reensaluti.
Diskonigi ĉi tiun kvizon al viaj amikoj!
@@ -362,11 +361,11 @@
Forigi
Atingoj
Profilo
- Statistiko
Ricevitaj dankoj
Elstaraj Bildoj
Bildoj per \"Apudaj Lokoj\"
- Nivelo
+ Nivelo %1$d
+ %1$s (Nivelo %2$s)
Alŝutitaj Bildoj
Bildoj Ne Malfaritaj
Uzataj Bildoj
@@ -398,6 +397,7 @@
Neniu kongrua aplikaĵo troveblas en via aparato. Bonvolu instali tian por uzo kun ĉi tiu funkcio.
Bildoj
Lokoj
+ Kategorioj
Aldoni/Forigi legosignon
Legosignoj
Vi aldonis neniun legosignon
@@ -453,11 +453,11 @@
Ne povis peti kontrolon de kategorio pri %1$s
Petante kontrolon de kategorio pri %1$s
Farite
- Sendante Dankon: Sukcesis
- Sukcese dankis uzanton %1$s
- Malsukcesis sendi dankon %1$s
- Dankado: Malsukcesis
- Sendante Dankon por %1$s
+ Sendante Dankon: Sukcesis
+ Sukcese dankis uzanton %1$s
+ Malsukcesis sendi dankon %1$s
+ Dankado: Malsukcesis
+ Sendante dankon por %1$s
Ĉu tio observas la regulojn pri aŭtorrajtoj?
Ĉu ĉi tiu estis ĝuste enkategoriigita?
Ĉu ĉi tiu estas taŭga?
@@ -483,15 +483,14 @@
Vidi nelegitojn
Eraro okazis dum elektado de bildoj
Bonvolu atendi...
- Elstaraj bildoj estas tiuj bildoj far tre spertaj fotografistoj kaj ilustristoj, kiujn la komunumo de Vikimedia Komunejo elektis kiel iujn de la plej alta kvalito en la retejo.
Bildoj Alŝutitaj per Apudaj lokoj estas bildoj alŝutitaj per trovado de lokoj sur la mapo.
Tiu funkcio ebligas sendi Dankantan sciigon al farinto de utila redakto – per malgranda dankiga ligilo ĉe la paĝo de historio aŭ diferenco.
- Kopio al sekva plurmediaĵo
+ Kopio al sekva plurmediaĵo
Kopiita
Ekzemploj de alŝutindaj bildoj por Komunejo
Ekzemploj de ne alŝutindaj bildoj
Preterpasi ĉi tiun bildon
- Elŝuto malsukcesis!! Ni ne povas elŝuti la dosieron sen permeso konservi ekstere.
+ Elŝuto malsukcesis!! Ni ne povas elŝuti la dosieron sen permeso konservi ekstere.
Mastrumi EXIF-Etikedojn
Elekti EXIF-etikedojn tenotajn je alŝutoj
Aŭtoro
@@ -501,8 +500,6 @@
Speco de Lenso
Numero de Fotilo
Programaro
- Aliro al loko de plurmediaĵo malakceptita
- Ni eble ne povos aŭtomate akiri pri-lokajn datumojn de bildoj, kiujn vi alŝutas. Bonvolu aldoni la taŭgan lokon por ĉiu bildo antaŭ ol sendi
Alŝutu fotojn al Vikimedia Komunejo rekte de via telefono. Elŝutu la Komunejan aplikaĵon nun: %1$s
Diskonigi aplikaĵon per...
Informo pri Bildo
@@ -558,7 +555,7 @@
Redakti priskribojn kaj bildotekstojn
Disdonu bildon per
Vi ankoraŭ ne faris ajnajn kontribuojn
- %s ankoraŭ ne faris ajnajn kontribuojn
+ %1$s ankoraŭ ne faris ajnajn kontribuojn
Konto kreita!
Teksto kopiita al pinĉtabulo
Sciigo markita kiel legita
@@ -567,7 +564,7 @@
Ekzistas
Foto bezonata
Tipo de loko:
- Ponto, muzeo, hotelo ktp.
+ Ponto, muzeo, hotelo ktp.
Io misfunkciis kun ensaluto, vi devas restarigi vian pasvorton !!
PLURMEDIAĴO
SUBKLASOJ
@@ -606,7 +603,7 @@
5. Algluu la vikitekston al la taŭga loko.
6. Redaktu la vikitekston por taŭga poziciigo, se necese. Por pliaj informoj, vidu <a href=\"https://en.wikipedia.org/wiki/Wikipedia:Manual_of_Style/Images#How_to_place_an_image\">ĉi tie</a>.
7. Publikigu la artikolon
- Kopiu wikikodon al la pintotabulo
+ Kopiu wikikodon al la pintotabulo
paŭzigi
daŭrigi
Paŭzita
@@ -647,6 +644,7 @@
Bonvolu elekti la taŭgajn kategoriojn. Malsame ol priskriboj, kategorioj ekzistas nur en la angla.
Komunejo reuzebligas kaj adaptebligas viajn bildojn por ĉiuj. Ĉu vi volas rezigni pri ĉiuj rajtoj? Ĉu vi volas esti atribuata? Ĉu vi volas, ke adaptaĵoj uzu la saman permesilon?
Montras
+ Priskribo
Permesilo por plurmediaĵo
Detaloj de plurmediaĵo
Vidi la paĝon de la kategorio
@@ -661,7 +659,7 @@
Montru en mapo-aplikaĵo
Redakti lokon
La bildvido de la loko-elektilo
- La ombro de la bildvido de la loko-elektilo
+ La ombro de la bildvido de la loko-elektilo
Pozicio de bildo
Kontrolu ĉu la loko estas ĝusta
Etikedo
@@ -673,7 +671,7 @@
Reen
Bonvenon al Propra Bilda Elektilo
Ĉi tiu elektilo montras al vi kiujn bildojn vi jam alŝutis al Komunejo.
- Malkiel la bildo maldekstre, la bildo dekstre havas la emblemo de Komunejo; tio indikas ke ĝi jam estas alŝutita.\nTuŝu kaj premadu por antaŭrigardo de bildo.
+ Malkiel la bildo maldekstre, la bildo dekstre havas la emblemo de Komunejo; tio indikas ke ĝi jam estas alŝutita.\nTuŝu kaj premadu por antaŭrigardo de bildo.
Tre bone
Ĉi tiu bildo jam estis alŝutita al Komunejo.
Pro teknikaj kialoj, la programo ne povas fidinde alŝuti pli ol %1$d bildojn samtempe. La alŝuta limo de %1$d estis preterpasita je %2$d.
@@ -687,8 +685,9 @@
Wiki Loves Monuments estas internacia fotokonkurso por monumentoj, organizita de Vikimedio
Bezonas Permeson
Mapoj de Apude bezonas legi TELEFONAN STATON por funkcii bone
- Kontribuoj de Uzanto: %s
- Atingoj de Uzanto: %s
+ Laŭvola permeso: Akiri aktualan lokon por sugestoj pri kategorio
+ Kontribuoj de Uzanto: %1$s
+ Atingoj de Uzanto: %1$s
Vidi la uzantopaĝon
Redakti priskribojn
Redakti kategoriojn
@@ -699,7 +698,7 @@
Lokdatumoj helpas al vikiaj redaktantoj trovi vian bildon, kaj tio faras ĝin multe pli utila.\nViaj lastatempaj alŝutoj ne havas lokon.\nNi sugestas, ke vi enŝaltu Loko en la agordoj de via fotilprogramo.\nDankon pro alŝutado!
Neniu loko trovita
Ĉu vi povus aldoni la lokon, kie ĉi tiu bildo estis farita?\nLokdatumoj helpas al vikiaj redaktantoj trovi vian bildon, kaj tio faras ĝin multe pli utila.\nDankon!
- Aldoni lokon
+ Aldoni lokon
Bonvolu forigi el ĉi tiu retpoŝto ajnajn informojn, kiujn vi ne deziras disdoni publike. Ankaŭ, bonvolu scii, ke via retadreso, kun kiu vi komentas, kaj la rilataj nomo kaj profilbildo, estos videblaj publike.
Detaloj
Atingoj haveblas nur en la produkto-versio, bonvolu konsulti la dokumentaron por programistoj.
@@ -720,8 +719,8 @@
Malmarki kiel Ne por alŝuti
Markado kiel Ne por alŝuto
Malmarkado kiel Ne por alŝuto
- Montru jam pritraktitajn bildojn
- Kaŝante jam pritraktitajn bildojn
+ Montru jam pritraktitajn bildojn
+ Kaŝante jam pritraktitajn bildojn
Neniuj pliaj bildoj trovitaj
Ĉi tiu bildo jam estas alŝutita
Ne eblas elekti ĉi tiun bildon por alŝuto
@@ -743,7 +742,8 @@
Ne eblas disdoni ĉi tiun objekton
Permesoj estas necesaj por ke funkciu
- - %d bildo elektita
- - %d bildoj elektitaj
+ - %1$d bildo elektita
+ - %1$d bildoj elektitaj
+ Aliaj vikioj
diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml
index e911d280c..1a4c8ef50 100644
--- a/app/src/main/res/values-es/strings.xml
+++ b/app/src/main/res/values-es/strings.xml
@@ -57,7 +57,7 @@
-->
Página de Facebook de Commons
- Código fuente de Commons en GitHub
+ Código fuente de Commons en GitHub
Logo de Commons
Sitio web de Commons
Salir del selector de ubicación
@@ -81,18 +81,14 @@
- Cargando %1$d archivo
- Cargando %1$d archivos
-
- - (%1$d)
- - (%1$d)
-
Comenzando las subidas
- - Procesando %d carga
- - Procesando %d cargas
+ - Procesando %1$d carga
+ - Procesando %1$d cargas
- - %d carga
- - %1 cargas
+ - %1$d carga
+ - %1$d cargas
- Esta imagen se publicará bajo la licencia %1$s
@@ -136,7 +132,7 @@
Carga en cola (modo de conexión limitada activado)
¡Se ha subido %1$s!
Pulsa para ver tu subida
- Empezando la subida de %s
+ Empezando la subida de %1$s
Subiendo %1$s
Finalizando la subida de %1$s
Error al cargar %1$s
@@ -186,6 +182,7 @@
Ajustes
Regístrate
Imágenes destacadas
+ Las imágenes destacadas son creaciones de talentosos fotógrafos e ilustradores que la comunidad de Wikimedia Commons ha reconocido como las de mayor calidad del sitio.
selector personalizado
Categoría
Revisión por pares
@@ -207,10 +204,10 @@
Licencia predeterminada
Usar título y descripción anteriores
Tema
- Atribución-CompartirIgual 4.0
- Atribución 4.0
- Atribución-CompartirIgual 3.0
- Atribución 3.0
+ Atribución-CompartirIgual 4.0
+ Atribución 4.0
+ Atribución-CompartirIgual 3.0
+ Atribución 3.0
CC0
CC BY-SA 3.0
CC BY 3.0
@@ -273,15 +270,14 @@
Código de autenticación de 2 pasos
Código de verificación de correo electrónico
¿Confirmas que quieres salir?
- Falló la imagen de multimedia
No se encontró ninguna subcategoría
No se encontró ninguna categoría contenedora
Monte Zao
Llamas
Puente del Arco Iris
Tulipa
- Bienvenida de Wikipedia
- Derechos de autor de bienvenida
+ Bienvenida de Wikipedia
+ Derechos de autor de bienvenida
Ópera de Sídney
Cancelar
Abrir
@@ -417,12 +413,11 @@
Logros
Perfil
Las insignias
- Estadísticas
Agradecimientos recibidos
Imágenes destacadas
Imágenes vía \"Sitios Cercanos\"
- Nivel %d
- %s (Nivel %s)
+ Nivel %1$d
+ %1$s (Nivel %2$s)
Imágenes subidas
Imágenes no revertidas
Imágenes utilizadas
@@ -482,7 +477,7 @@
Nunca preguntar esto de nuevo
Pedir permiso de ubicación
Pida permiso de ubicación cuando sea necesario para ver la tarjeta de notificación cercana.
- Algo salió mal, no pudimos obtener tus aptitudes
+ Algo salió mal, no pudimos obtener tus aptitudes
Has hecho tantas contribuciones que nuestro sistema de recuento de contribuciones no puede contarlas. Este es el último recuento.
Finaliza el:
Mostrar campañas
@@ -510,11 +505,11 @@
No se puede pedir el control de categoría para %1$s
Pidiendo control de categoría para %1$s
Hecho
- Enviando agradecimiento: éxito
- Los agradecimientos a %1$s se enviaron satisfactoriamente
- Falló el envío de agradecimiento a %1$s
- Enviando agradecimiento: falló
- Enviando agradecimiento a %1$s
+ Enviando agradecimiento: éxito
+ Los agradecimientos a %1$s se enviaron satisfactoriamente
+ Falló el envío de agradecimiento a %1$s
+ Enviando agradecimiento: falló
+ Enviando agradecimiento a %1$s
¿Esto cumple con las reglas del copyright?
¿Está correctamente categorizado?
¿Está dentro de los objetivos del proyecto?
@@ -541,15 +536,14 @@
Ver no leidas
Ocurrió un error mientras se elegían imagenes
Un momento…
- Las imágenes destacadas son creaciones de talentosos fotógrafos e ilustradores que la comunidad de Wikimedia Commons ha reconocido como las de mayor calidad del sitio.
Las imágenes subidas vía Lugares Cercanos son las imágenes que han sido subidas al descubrir lugares en el mapa.
Esta funcionalidad permite a los editores enviar una notificación de agradecimiento a aquellos usuarios que realicen ediciones útiles mediante un pequeño enlace en la página de historial o de diferencias.
- Copia a medios de comunicación subsiguientes
+ Copia a medios de comunicación subsiguientes
Copiado
Ejemplos de imágenes adecuadas para Commons
Ejemplos de imágenes que no deben cargarse
Omitir esta imagen
- La descarga falló!. No podemos descargar el archivo sin el permiso de almacenamiento externo.
+ La descarga falló!. No podemos descargar el archivo sin el permiso de almacenamiento externo.
Gestionar etiquetas EXIF
Seleccionar qué etiquetas EXIF se mantendrán en la subida
Autor
@@ -559,8 +553,6 @@
Modelo de lente
Números de serie
Programa
- Acceso a la ubicación del archivo multimedia denegado
- Es posible que no podamos obtener automáticamente los datos de ubicación de las imágenes que suba. Añada la ubicación adecuada a cada imagen antes de enviarla
Sube fotos a Wikimedia Commons directamente desde tu celular. Descarga la aplicación de Commons ahora: %1$s
Compartir la aplicación vía...
Información de la imagen
@@ -616,7 +608,7 @@
Editar descripciones y leyendas
Compartir imagen via
Todavía no has hecho ninguna contribución.
- %s Aún no ha realizado ninguna contribución
+ %1$s Aún no ha realizado ninguna contribución
Cuenta creada
Texto copiado en el portapapeles.
Notificación: marcar como leída
@@ -625,7 +617,7 @@
Existe
Necesita fotografía
Tipo de lugar:
- Puente, museo, hotel…
+ Puente, museo, hotel…
¡Error en el inicio de sesión, debe restablecer su contraseña!
MULTIMEDIA
CLASES HIJAS
@@ -669,7 +661,7 @@
5. Pega el wikitexto en el sitio apropiado.
6. Edita el wikitexto para un posicionamiento adecuado si es necesario. Paa mayor información, visita <a href=\"https://en.wikipedia.org/wiki/Wikipedia:Manual_of_Style/Images#How_to_place_an_image\">here</a>.
7. Publica el artículo
- Copiar el wikicódigo al portapapeles
+ Copiar el wikicódigo al portapapeles
pausar
reanudar
En pausa
@@ -724,7 +716,7 @@
Mostrar en la aplicación de mapa
Editar ubicación
La vista de la imagen del selector de ubicación
- La sombra de la vista de la imagen del selector de ubicación
+ La sombra de la vista de la imagen del selector de ubicación
Posición de imagen
Compruebe si la ubicación es correcta
Etiqueta
@@ -736,7 +728,7 @@
Atrás
Bienvenido al Selector de Imagen Personalizado
Este selector muestra qué imágenes ya ha subido a Commons.
- A diferencia de la imagen de la izquierda, la imagen de la derecha tiene el logo de Commons que indica que ha sido cargado. \nPara previsualizar la imagen toca y mantén
+ A diferencia de la imagen de la izquierda, la imagen de la derecha tiene el logo de Commons que indica que ha sido cargado. \nPara previsualizar la imagen toca y mantén
Magnífico
Esta imagen ya se ha subido a Commons.
Por razones técnicas, la aplicación no puede subir de manera confiable más de %1$d imágenes a la vez. El límite de subida de %1$d se ha excedido por %2$d.
@@ -750,8 +742,9 @@
Wiki loves monuments es un consurso internacional de fotografías de monumentos organizado por Wikimedia
Necesita Permiso
Los mapas cercanos necesitan leer ESTADO DEL TELÉFONO para funcionar correctamente
- Contribuciones del usuario: %s
- Logros del usuario: %s
+ Permiso opcional: obtener la ubicación actual para sugerir categorías
+ Contribuciones del usuario: %1$s
+ Logros del usuario: %1$s
Ver perfil de usuario
Editar las descripciones
Editar categorías
@@ -762,7 +755,7 @@
Los datos de ubicación ayudan a los editores a encontrar su imagen, haciéndola mucho más útil.\nSus archivos subidos recientemente no tienen ubicación.\nLe sugerimos que active la ubicación en la configuración de la aplicación de su cámara.\n¡Gracias por contribuir!
No se encontró ninguna ubicación
¿Qué tal agregar el lugar donde se tomó esta imagen?\nLos datos de ubicación ayudan a los editores a encontrar su imagen, haciéndola mucho más útil.\n¡Gracias!
- Añadir ubicación
+ Añadir ubicación
Elimine de este correo electrónico cualquier información con la que no se sienta a gusto compartiendo públicamente. Además, tenga en cuenta que su dirección de correo electrónico con la que está publicando, y el nombre asociado y la imagen de perfil, serán visibles públicamente.
Detalles
Los logros sólo están disponibles en la versión de producción, por favor consulte la documentación del desarrollador.
@@ -783,8 +776,8 @@
Desmarcar como no para subir
Marcar como no para subir
Desmarcar como no para subir
- Mostrar imágenes ya accionadas
- Ocultar imágenes ya accionadas
+ Mostrar imágenes ya accionadas
+ Ocultar imágenes ya accionadas
No se encontraron más imágenes
Esta imagen ya está subida
No se puede seleccionar esta imagen para subir
@@ -820,15 +813,15 @@
Su sesión ha caducado. Inicie sesión de nuevo.
No hay ninguna aplicación disponible para abrir archivos GPX
Guardado correctamente
- ¿Quieres abrir el archivo GPX?
- ¿Quieres abrir el archivo KML?
- No se pudo guardar el archivo KML.
- No se pudo guardar el archivo GPX.
- Guardar el archivo KML
- Guardar archivo GPX
+ ¿Quieres abrir el archivo GPX?
+ ¿Quieres abrir el archivo KML?
+ No se pudo guardar el archivo KML.
+ No se pudo guardar el archivo GPX.
+ Guardar el archivo KML
+ Guardar archivo GPX
- - %d imagen seleccionada
- - %d imagenes seleccionadas
+ - %1$d imagen seleccionada
+ - %1$d imagenes seleccionadas
Recuerde que todas las imágenes en una carga múltiple tienen la misma categoría y representación. Si las imágenes no comparten representación y categoría, haga varias cargas por separado.
Nota sobre cargas múltiples
@@ -864,7 +857,6 @@
Commons
Otras wikis
Usos de archivos
- Actividad de vista web única
Cuenta
Desaparecer cuenta
Advertencia sobre la desaparición de la cuenta
diff --git a/app/src/main/res/values-eu/strings.xml b/app/src/main/res/values-eu/strings.xml
index 76ad1ca06..4f7eac71e 100644
--- a/app/src/main/res/values-eu/strings.xml
+++ b/app/src/main/res/values-eu/strings.xml
@@ -16,7 +16,7 @@
-->
Commons-en Facebook orria
- Commons Github Iturburu-kodea
+ Commons Github Iturburu-kodea
Commonsen logoa
Commons webgunea
Kokalekuaren biltzailetik irten
@@ -35,10 +35,6 @@
- Fitxategi %1$d kargatzen
- %1$d fitxategi kargatzen
-
- - (%1$d)
- - (%1$d)
-
Igoerak hasi
- Karga %1$d hasten
@@ -80,7 +76,7 @@
Igoera hasi da!
%1$s igotzen!
Ukitu igotakoa ikusteko
- %1$s fitxategia igotzen
+ %1$s fitxategia igotzen
%1$s igotzen
%1$s igotzen bukatzen
%1$s igotzean akatsa
@@ -140,10 +136,10 @@
Berezko lizentzia
Aurreko izenburu eta deskribapena erabili
Gaia
- Aitortu-PartekatuBerdin 4.0
- Aitortu 4.0
- Aitortu-PartekatuBerdin 3.0
- Esleipena 3.0
+ Aitortu-PartekatuBerdin 4.0
+ Aitortu 4.0
+ Aitortu-PartekatuBerdin 3.0
+ Esleipena 3.0
CC0
CC BY-SA 3.0
CC BY 3.0
@@ -196,15 +192,14 @@
Beta testatzaile bihurtu
2FA Kodea
Benetan saioa itxi nahi duzu ?
- Media irudiak kale egin du
Ez da azpikategoriarik aurkitu
Ez da guraso kategoriarik aurkitu
Zao Mendia
Llamak
Ortzadar zubia
Tulipa
- Ongi etorri Wikipediara
- Ongi etorri copyright-a
+ Ongi etorri Wikipediara
+ Ongi etorri copyright-a
Sidney-ko Opera Etxea
Utzi
Ireki
@@ -315,10 +310,9 @@
Ezabatu
Lorpenak
Profila
- Estatistikak
Jasotako eskerrak
Nabarmendutako irudiak
- Maila
+ Maila %1$d
Irudiak igo dira
Erabilitako irudiak
Partekatu zure lorpenak lagunekin!
@@ -360,7 +354,7 @@
Logo
Arrakasta
Oraindik ez duzu ekarpenik egin
- %s(r)ek oraindik ez du ekarpenik egin
+ %1$s(r)ek oraindik ez du ekarpenik egin
Hobespenak
Iluna
Argia
@@ -375,5 +369,6 @@
Zenbaketa
Igo
Hurbilekoak
- Erabiltzailearen ekarpenak: %s
+ Aukerako baimena: momentuko kokapena zehaztu kategoriak iradokitzeko
+ Erabiltzailearen ekarpenak: %1$s
diff --git a/app/src/main/res/values-fa/error.xml b/app/src/main/res/values-fa/error.xml
index 56981759b..f49f90aa7 100644
--- a/app/src/main/res/values-fa/error.xml
+++ b/app/src/main/res/values-fa/error.xml
@@ -2,6 +2,7 @@
Commons Facebook-sivu
- Commons Github lähdekoodi
+ Commons Github lähdekoodi
Commons-logo
Commons-verkkosivu
Poistu sijainnin valitsimesta
Lähetä
Lisää toinen kuvaus
+ Lisää uusi tiedosto
+ Lisää uusi tiedosto kameralla
+ Lisää uusi tiedosto kuvista
Kuvatekstit
Kielen kuvaus
Kuvateksti
@@ -41,18 +45,14 @@
- %1$d tiedosto tallentuu
- %1$d tiedostoa tallentuu
-
- - (%1$d)
- - (%1$d)
-
- Aloitetaan latauksia
+ Aloitetaan tallennuksia
- - Käsitellään %d tallennus
- - Käsitellään %d tallennusta
+ - Käsitellään %1$d tallennus
+ - Käsitellään %1$d tallennusta
- - %d tallennus
- - %d tallennusta
+ - %1$d tallennus
+ - %1$d tallennusta
- Tiedosto tallennetaan lisenssin %1$s ehtojen mukaisesti
@@ -87,10 +87,10 @@
Poistetaanko akun optimointi käytöstä?
Tunnistautuminen epäonnistui, kirjaudu uudelleen sisään
Tallentaminen aloitettiin!
- Lataus jonossa (rajoitettu yhteystila käytössä)
+ Tallennus on jonossa (rajoitettu yhteystila käytössä)
%1$s tallennettiin!
Napauta katsoaksesi tallennusta
- Kopioidaan palvelimelle: %s
+ Kopioidaan palvelimelle: %1$s
Tallennetaan %1$s
%1$s tallennettu
Tiedoston %1$s tallentaminen epäonnistui
@@ -106,6 +106,8 @@
Ota kuva
Lähistöllä
Omat tallennukset
+ Kopioi linkki
+ Linkki on kopioitu leikepöydälle.
Jaa
Näytä tiedostosivu
Kuvateksti (vaaditaan)
@@ -122,13 +124,14 @@
Muutokset
Tallenna
Etsi luokkia
- Hae kohteita, joita mediasi kuvaa (vuori, Taj Mahal jne.)
+ Hae kohteita, joita mediasi esittää (vuori, Taj Mahal jne.)
Tallenna
+ Ylivuotovalikko
Päivitä
Lista
(Ei vielä tallennuksia)
Luokkaa %1$s ei löytynyt
- Wikidata-kohteita ei löytynyt
+ Hakusanaa %1$s vastaavia Wikidata-kohteita ei löytynyt
%1$s ei ole lapsiluokkia
%1$s ei ole vanhempia luokkia
Lisää luokkia tehdäksesi kuvistasi enemmän löydettäviä Wikimedia Commonssissa.\nAloita kirjoittaminen lisätäksesi luokkia.
@@ -136,6 +139,7 @@
Asetukset
Rekisteröidy
Suositellut kuvat
+ Mukautettu valitsin
Luokka
Vertaisarviointi
Tietoja
@@ -151,7 +155,10 @@
Et ole vielä tallentanut kuvia.
Yritä uudelleen
Peruuta
- Lisäämällä kuvan, ilmoitan tämän olevan oma työ ja että se ei sisällä tekijänoikeuden alaista materiaalia tai selfietä ja muuten noudattaa <a href=\"https://commons.wikimedia.org/wiki/Commons:Policies_and_guidelines\">Wikimedia Commons policies</a>.
+ Kirjoita kielen nimi
+ Viimeaikaiset haut
+ Kaikki kielet
+ Lisäämällä kuvan, ilmoitan tämän olevan oma työ ja että se ei sisällä tekijänoikeuden alaista materiaalia tai selfietä ja muuten noudattaa <a href=\"https://commons.wikimedia.org/wiki/Commons:Policies_and_guidelines\">Wikimedia Commonsin käytäntöjä</a>.
Lataa
Oletuslisenssi
Käytä edellistä otsikkoa ja kuvausta
@@ -174,7 +181,7 @@
ÄLÄ tallenna seuraavia:
Selfiet tai kuvat ystävistäsi
Kuvia, jotka olet ladannut Internetistä
- Kuvakaappaukset omistamistasi sovelluksista
+ Kuvakaappaukset muiden omistamista sovelluksista
Tallennusesimerkki:
Otsikko: Sydneyn oopperatalo
Kuvaus: Sydneyn oopperatalo lahden toiselta puolelta katsottuna
@@ -200,15 +207,17 @@
Pyydetään sijaintilupaa
OK
Varoitus
+ Vastaava tiedostonimi löytyi
Tallenna
Kyllä
Ei
Kuvateksti
Otsikko
- Kuvaukset
+ Esittää-tunnisteet
Kuvaus
Keskustelu
Tekijä
+ Tallentaja
Tallennuspäivämäärä
Lisenssi
Koordinaatit
@@ -216,16 +225,16 @@
Ryhdy beetatestaajaksi
Valitse beeta-kanavamme Google Playssa ja hanki varhainen pääsy uusiin ominaisuuksiin ja virheenkorjauksiin
Kaksivaiheisen tunnistautumisen koodi
+ Sähköpostivahvistuskoodi
Haluatko varmasti kirjautua ulos?
- Mediakuva epäonnistui
Alaluokkia ei löytynyt
Vanhempia luokkia ei löytynyt
Zao-vuori
Laamat
Sateenkaarisilta
Tulppaani
- Tervetuloa Wikipediaan
- Tervetuloa tekijänoikeus
+ Tervetuloa Wikipediaan
+ Tervetuloa tekijänoikeus
Sydneyn oopperatalo
Peru
Avaa
@@ -236,6 +245,7 @@
Tietoja
Asetukset
Palaute
+ Palaute GitHubissa
Kirjaudu ulos
Opas
Ilmoitukset
@@ -257,6 +267,7 @@
Tallennusprosessi vaatii aktiivisen internet-yhteyden. Tarkista verkkoyhteytesi tila.
Kuvasta löytyi ongelmia
Tallenna vain kuvia, jotka olet itse ottanut. Älä tallenna kuvia, joita olet ladannut internetistä.
+ Tallennukset
Tallenna sovelluksen sisäisiä otoksia
Tallenna sovelluksen sisäisellä kameralla otetut kuvat laitteen tallennustilaan
Kirjaudu tilillesi
@@ -270,14 +281,14 @@
Ohita
Kirjaudu sisään
Haluatko todella ohittaa kirjautumisen?
- Sinun täytyy kirjautua sisään tallentaaksesi kuvia tulevaisuudessa.
+ Sinun täytyy kirjautua sisään tallentaaksesi kuvia tulevaisuudessa.
Kirjaudu sisään käyttääksesi tätä ominaisuutta
Kopioi wikiteksti leikepöydälle
Wikiteksti kopioitiin leikepöydälle
- Nearby ei välttämättä toimi, sillä sijainti ei käytettävissä.
+ Lähistöllä-toiminto ei välttämättä toimi kunnolla, sillä sijainti ei käytettävissä.
Sijainnin käyttö kielletty. Aseta sijaintisi manuaalisesti käyttääksesi tätä ominaisuutta.
- Lupa vaaditaan läheisten paikkojen luettelon näyttämiseen
- Lupa vaaditaan läheltä otettujen kuvien luettelon näyttämiseen
+ Lupa vaaditaan lähellä olevien paikkojen luettelon näyttämiseen
+ Lupa vaaditaan lähellä otettujen kuvien luettelon näyttämiseen
Reitit
Wikidata
Wikipedia
@@ -312,7 +323,7 @@
Äskettäiset haut:
Äskettäin haetut kyselyt
Luokkia ladattaessa tapahtui virhe.
- Virhe ladattaessa kuvauksia.
+ Virhe ladattaessa esittää-tunnisteita.
Media
Luokat
Kohteet
@@ -326,15 +337,17 @@
Tietovisa
Onko tämä kuva OK tallennettavaksi?
Kysymys
+ En ole varma
Tulos
- Jos jatkat poistettavien kuvien lataamista, tilisi todennäköisesti kielletään. Haluatko varmasti lopettaa tietokilpailun?
- Yli %1$s tallentamistasi kuvista on poistettu. Mikäli jatkat poistamista vaativien kuvien lataamista, tilisi todennäköisesti estetään.\n\nHaluatko tutustua oppaaseen uudelleen ja tehdä sen jälkeen tietovisan oppiaksesi minkälaisia kuvia saa ja ei saa tallentaa?
+ Jos jatkat poistettavien kuvien tallentamista, tunnuksesi tullaan todennäköisesti estämään. Haluatko varmasti lopettaa tietokilpailun?
+ Yli %1$s tallentamistasi kuvista on poistettu. Mikäli jatkat poistamista vaativien kuvien tallentamista, tunnuksesi tullaan todennäköisesti estämään.\n\nHaluatko tutustua oppaaseen uudelleen ja tehdä sen jälkeen tietovisan oppiaksesi, minkälaisia kuvia saa ja ei saa tallentaa?
Selfieillä ei ole paljoa arvoa tietosanakirjassa. Älä tallenna kuvaa itsestäsi, ellei sinusta jo ole Wikipedia-artikkelia.
Monumenteista ja maisemista otetut kuvat ovat hyväksyttäviä tallennettavaksi useimmissa maissa. Huomaa kuitenkin että ulkotiloihin sijoitetut väliaikaiset tilataideteokset ovat usein suojattu tekijänoikeudella ja niistä otettuja kuvia ei usein saa tallentaa.
Kuvakaappauksia sivustoista tulkitaan jäljennöksiksi ja ovat täten sivuston kopiosuojan piirissä. Kuvia voidaan käyttää asianmukaisella tekijältä saadulta luvalla. Ilman kyseistä lupaa, mitä tahansa heidän materiaalistaan tuottamaa tuotosta tulkitaan alkuperäisen tekijän näkökulmasta luvattomaksi kopioksi.
Yksi Commonsin päämääristä on kerätä hyvänlaatuisia kuvia. Täten sumeita kuvia ei pitäisi lähettää. Ota aina hyviä kuvia hyvällä valaistuksella.
Kuvat, jotka esittävät teknologiaa tai kulttuuria ovat erittäin tervetulleita Commonsiin.
Sait %1$s vastausta oikein. Onnittelut!
+ Jatka
Valitse yksi kahdesta vaihtoehdosta vastataksesi kysymykseen
Istuntosi on vanhentunut. Kirjaudu sisään uudelleen.
Jaa visailusi ystäviesi kanssa!
@@ -350,29 +363,28 @@
Virhe läheisiä monumentteja haettaessa.
Ei viimeaikaisia hakuja
Haluatko varmasti tyhjentää hakuhistoriasi?
- Haluatko varmasti peruuttaa tämän latauksen?
+ Haluatko varmasti peruuttaa tämän tallennuksen?
Haluatko poistaa tämän haun?
Hakuhistoria poistettu
Ehdota poistettavaksi
Poista
Saavutukset
Profiili
- Tilastot
+ Merkit
Kiitos vastaanotettu
Suositellut kuvat
- Kuvia läheltä
- Taso %d
- %s (taso %s)
- %s (%s)
+ \"Lähistöllä\"-kuvat
+ Taso %1$d
+ %1$s (taso %2$s)
Kuvia tallennettu
Kuvia ei palautettu
Kuvia käytetty
Jaa saavutuksesi ystäviesi kanssa!
Tasosi nousee, kun täytät nämä vaatimukset. Tilastot-osion kohteita ei lasketa tasoosi.
vähimmäisvaatimus:
- Lähetettyjen kuvien määrä Commonsiin minkä tahansa latausohjelmiston kautta
+ Lähetettyjen kuvien määrä Commonsiin minkä tahansa tallennusohjelmiston kautta
Niiden kuvien prosenttiosuus, jotka olet ladannut Commonsiin ja joita ei poistettu
- Wikimedia-artikkeleissa käytettyjen Commonsiin lataamiesi kuvien määrä
+ Wikimedia-artikkeleissa käytettyjen Commonsiin tallentamiesi kuvien määrä
Tapahtui virhe!
Commons-ilmoitus
Käytä mukautettua tekijän nimeä
@@ -386,7 +398,7 @@
Näytä sovelluksen sisäinen ilmoitus lähinnä kuvia tarvitsevasta paikasta
Lista
Tallennuslupa
- Tarvitsemme luvan käyttääksesi laitteen ulkoista tallennustilaa kuvien lataamista varten.
+ Tarvitsemme luvan käyttääksesi laitteen ulkoista tallennustilaa kuvien tallentamista varten.
Et enää näe lähellä olevia paikkoja, jotka tarvitsevat kuvia. Voit kuitenkin halutessasi ottaa tämän ilmoituksen uudelleen käyttöön asetuksissa.
Vaihe %1$d %2$d: %3$s
Seuraava
@@ -395,6 +407,7 @@
Laitteestasi ei löydy yhteensopivaa karttasovellusta. Asenna karttasovellus käyttääksesi tätä toimintoa.
Kuvat
Sijainnit
+ Luokat
Lisää kirjanmerkkeihin/Poista kirjanmerkeistä
Kirjanmerkit
Et ole lisännyt yhtään kirjanmerkkejä
@@ -405,12 +418,12 @@
Huomasin, että se on haitallinen yksityisyydelleni.
Muutin mieleni, en halua että se on enää julkisesti näkyvissä.
Valitettavasti tämä kuva ei ole kiinnostava tietosanakirjaan
- Minä olen ladannut kohteen %1$s käytetty %2$d artikkelissa.
+ Minä olen ladannut kohteen %1$s, käytetty ainakin %2$d artikkelissa.
Tervetuloa Commonsiin!\n\nTallenna ensimmäinen mediasi koskettamalla lisäyspainiketta.
Luokkia ei valittu
Kuvat, jotka eivät ole luokissa, ovat harvoin käyttökelpoisia. Haluatko varmasti jatkaa valitsematta luokkia?
- Kuvauksia ei valittu
- Kuvat, joissa on kuvatekstejä, löytyvät helpommin ja todennäköisemmin niitä käytetään. Haluatko varmasti jatkaa valitsematta kuvatekstejä?
+ Esittää-tunnisteita ei valittu
+ Kuvat, joissa on esittää-tunnisteita, löytyvät helpommin ja niitä käytetään todennäköisemmin. Haluatko varmasti jatkaa valitsematta esittää-tunnisteita?
Peruuta tallennus
Takaisin-napin painaminen peruuttaa tämän tallennuksen ja poistaa tallentamasi tiedot
Jatka tallennusta
@@ -422,11 +435,12 @@
Älä kysy tätä uudelleen
Kysy lupaa sijainnille
Pyydä sijaintilupaa tarvittaessa läheisen ilmoituksen näkymää varten.
- Jotain meni pieleen. Emme voineet noutaa saavutuksia
+ Jotain meni pieleen. Emme voineet noutaa saavutuksia
Olet tehnyt niin paljon muokkauskia, että saavutusten laskentajärjestelmä ei pysty selviytymään. Tämä on perimmäinen saavutus.
Päättyy:
Näytä kilpailut
Näe meneillään olevat kilpailut
+ Näytä poistonappi
Salli
Hylkää
Et enää näe kampanjoita. Voit kuitenkin halutessasi ottaa tämän ilmoituksen uudelleen käyttöön asetuksissa.
@@ -442,11 +456,11 @@
Luokkatarkistusta ei voitu pyytää %1$s
Pyydetään luokkatarkistusta %1$s
Valmis
- Kiitosten lähettäminen: Onnistui
- Lähetetty onnistuneesti käyttäjälle %1$s
- Kiitosten lähettäminen epäonnistui %1$s
- Kiitosten lähettäminen: Epäonnistui
- Lähetetty kiitokset %1$s
+ Kiitosten lähettäminen: Onnistui
+ Kiitos lähetetty käyttäjälle %1$s
+ Kiitoksen lähettäminen käyttäjälle %1$s epäonnistui
+ Kiitosten lähettäminen: Epäonnistui
+ Lähetetty kiitokset %1$s
Noudattaako tämä tekijänoikeussääntöjä?
Onko tämä luokiteltu oikein?
Sopiiko tämä sivuston puitteissa?
@@ -468,6 +482,7 @@
Sinulla ei ole lukemattomia ilmoituksia
Sinulla ei ole luettuja ilmoituksia
Jaa lokit käyttämällä
+ Tarkista sähköpostilaatikkosi
Näytä luetut
Näytä lukemattomat
Kuvien valinnassa tapahtui virhe
@@ -476,7 +491,7 @@
Esimerkkejä hyvistä Commonsiin lähetettävistä kuvista
Esimerkkejä kuvista, joita ei kannata lähettää
Ohita tämä kuva
- Lataus epäonnistui!! Emme voi ladata tiedostoa ilman ulkoisen tallennustilan käyttölupaa.
+ Lataus epäonnistui. Emme voi ladata tiedostoa ilman ulkoisen tallennustilan käyttölupaa.
Käsittele EXIF-tageja
Valitse, mitä EXIF-tageja säilytetään lähetyksissä
Tekijä
@@ -486,11 +501,12 @@
Linssin malli
Sarjanumerot
Ohjelmisto
- Lähetä valokuvia suoraan Wikimedia Commonsiin puhelimestasi. Lataa Commons-appi nyt: %1$s
+ Tallenna kuvia Wikimedia Commonsiin suoraan puhelimeltasi. Lataa Commons-sovellus nyt: %1$s
Jaa sovellus...
Kuvan tiedot
+ Älä näytä tätä viestiä uudelleen
Luokkia ei löytynyt
- Kuvauksia ei löytynyt
+ Esittää-tunnisteita ei löytynyt
Peruutettu tallennus
Miksi %1$s tulisi poistaa?
%1$s oli lähettänyt: %2$s
@@ -506,6 +522,7 @@
Lehdistökuva
Satunnainen kuva internetistä
Logo
+ Panoraamavapauden rikkomus
Koska se on
Yritetään päivittää luokkia.
Luokan päivitys
@@ -516,6 +533,9 @@
Ei voitu lisätä luokkia.
Päivitetään luokkia
+ Yritetään päivittää esittää-tunnisteita.
+ Muokkaa esittää-tunnisteita
+ Esittää-tunnisteita ei voitu lisätä.
Yritetään päivittää koordinaatit.
Koordinaattien päivitys
Kuvaus päivitetty
@@ -527,12 +547,12 @@
Koordinaatteja ei voitu lisätä.
Kuvauksia ei voitu lisätä.
Kuvatekstiä ei voitu lisätä.
- Koordinaattien haku epäonnistui.
+ Kuvan koordinaatteja ei tallennettu
Kuvauksia ei voitu hakea.
Muokkaa kuvauksia ja kuvatekstejä
Jaa kuva
Et ole vielä tehnyt muokkauksia
- %s ei ole vielä tehnyt muokkauksia
+ %1$s ei ole vielä tehnyt muokkauksia
Käyttäjätunnus luotu!
Teksti kopioitu leikepöydälle
Ilmoitus merkitty luetuksi
@@ -544,8 +564,13 @@
Silta, museo, hotelli jne.
Jokin meni pieleen kirjautumisessa. Sinun on nollattava salasanasi!
MEDIA
- Lähipaikka löytyi
- Onko tämä kuva paikasta %1$s?
+ ALALUOKAT
+ YLÄLUOKAT
+ ALALUOKAT
+ YLÄLUOKAT
+ Lähistöllä-paikka löytyi
+ Ovatko nämä kuvia paikasta %1$s?
+ Onko tämä kuva paikasta %1$s?
Kirjanmerkit
Asetukset
Poistettu kirjanmerkeistä
@@ -571,7 +596,7 @@
4. Klikkaa Muokkaa-ikonia (se kynältä näyttävä) siitä osasta.
5. Liitä wikiteksti sopivaan paikkaan.
7. Julkaise artikkeli
- Kopioi wikikoodi leikepöydälle
+ Kopioi wikiteksti leikepöydälle
tauko
jatka
Pysäytetty
@@ -593,7 +618,7 @@
Viikoittain
Koko ajalta
Lähetä
- Lähistöltä
+ Lähistöllä
Käyttöjä
Sijani
Rajoitettu yhteystila päällä!
@@ -606,10 +631,12 @@
Peruuta tallennus
Rajoitettu yhteystila on päällä.
Kirjoita lyhyt kuvateksti. Kerro miksi kuva on kiinnostava, tyypillinen tai harvinainen ja selitä asiayhteys, näkyy se kuvassa tai ei. Käytä mahdollisimman tarkkaa terminologiaa.
- Etsi ja valitse kaikki tämän kuvan kuvaamat käsitteet. Ole mahdollisimman tarkka. Mikäli kuvattuna on monta kohdetta, valitse ne kaikki kohtuullisuuden rajoissa. Älä valitse yleisiä tunnisteita mikäli tarkempia on saatavilla.
- Valitse sopivat luokat. Toisin kuin kuvaukset, luokkien nimet ovat vain englanniksi.
- Kuka tahansa saa käyttää ja muokata Commonsiin lataamiasi kuvia. Haluatko luovuttaa kuviesi kaikki oikeudet? Haluatko tulla nimetyksi kuvien tekijänä? Haluatko kuviesi muokattujen versioiden julkaistavan samalla lisenssillä?
+ Etsi ja valitse kaikki käsitteet, joita tämä kuva esittää. Ole mahdollisimman tarkka. Mikäli kuvattuna on monta kohdetta, valitse ne kaikki kohtuullisuuden rajoissa. Älä valitse yleisiä tunnisteita, mikäli tarkempia on saatavilla.
+ Valitse sopivat luokat. Toisin kuin esittää-tunnisteet, luokkien nimet ovat vain englanniksi.
+ Kuka tahansa saa käyttää ja muokata Commonsiin tallentamiasi kuvia. Haluatko luovuttaa kuviesi kaikki oikeudet? Haluatko tulla nimetyksi kuvien tekijänä? Haluatko kuviesi muokattujen versioiden julkaistavan samalla lisenssillä?
Esittää
+ Nimi
+ Kuvaus
Median lisenssi
Median tiedot
Näytä luokkasivu
@@ -630,20 +657,23 @@
Ei kuvia
Valmis
Takaisin
- Mahtava
+ Mahtavaa
Tämä kuva on jo ladattu Commonsiin.
+ Virhe: Tallennusraja ylitetty
LUE LISÄÄ
Tarvitaan käyttöoikeus
- Käyttäjän muokkaukset: %s
- Käyttäjän saavutukset: %s
- Näytä käyttäjäsivu
+ Valinnainen lupa: Saada tämänhetkinen sijainti loukkasuosituksia varten.
+ Käyttäjän muokkaukset: %1$s
+ Käyttäjän saavutukset: %1$s
+ Näytä käyttäjäprofiili
+ Muokkaa esittää-tunnisteita
Muokkaa luokkia
Lisäasetukset
Käytä
Nollaa
- Sijaintitiedot auttavat wikin muokkaajia löytämään kuvasi, mikä tekee siitä paljon hyödyllisemmän.\nViimeaikaisissa tallennuksissasi ei ole sijaintia.\nSuosittelemme, että otat sijainnin käyttöön kamerasovelluksesi asetuksista.\nKiitos latauksesta!
+ Sijaintitiedot auttavat wikin muokkaajia löytämään kuvasi, mikä tekee siitä paljon hyödyllisemmän.\nViimeaikaisissa tallennuksissasi ei ole sijaintia.\nSuosittelemme, että otat sijainnin käyttöön kamerasovelluksesi asetuksista.\nKiitos kuvien tallentamista!
Paikkaa ei löytynyt
- Lisää paikka
+ Lisää sijainti
Tiedot
API-taso
Android-versio
@@ -670,7 +700,9 @@
Näytä omat saavutukset
Muokkaa kuvaa
Muokkaa sijaintia
+ Sijainti päivitetty!
Poista sijainti
+ Poista sijaintivaroitus
Sijainti poistettu!
Kiitä tekijää
Tiedosto tallennettu onnistuneesti
@@ -678,8 +710,41 @@
Haluatko avata KML-tiedoston?
KML-tiedoston tallentaminen epäonnistui.
GPX-tiedoston tallentaminen epäonnistui.
+ Tallennetaan KML-tiedostona...
+ Tallennetaan GPX-tiedostona...
- - %d kuva valittu
- - %d kuvaa valittu
+ - %1$d kuva valittu
+ - %1$d kuvaa valittu
+ Keskustelu
+ Palautteesi on julkaistu seuraavalla wikisivulla: <a href=\"https://commons.wikimedia.org/wiki/Commons:Mobile_app/Feedback\">Commons:Mobile app/Feedback</a>
+ Oletko varma, että haluat peruuttaa kaikki tallennukset?
+ Peruutetaan kaikki tallennukset...
+ Tallennukset
+ Odottavat
+ Epäonnistuneet
+ Poista kansio
+ Vahvista poisto
+ Oletko varma, että haluat poistaa kansion %1$s, jossa on %2$d kohdetta?
+ Poista
+ Peruuta
+ Kansio %1$s poistettu
+ Kansion %1$s poistaminen epäonnistui
+ Tästä paikasta ei ole vielä kuvaa. Ota ihmeessä kuva!
+ Tästä paikasta on jo kuva.
+ Tarkistetaan, onko tästä paikasta kuvaa.
+ Virhe ladattaessa
+ Commons
+ Muut wikit
+ Tiedoston käyttö
+ Tunnus
+ Hävitä käyttäjätunnus
+ Varoitus hävittämisestä
+ Hävittäminen on <b>viimeinen keino</b> ja sitä tulee <b>käyttää vain, jos haluat lopettaa muokkaamisen lopullisesti</b> ja samalla myös piilottaa mahdollisimman paljon aiemmista toimistasi.<br/><br/>Käyttäjätunnuksen poistaminen Wikimedia Commonsissa tapahtuu muuttamalla tunnuksesi nimeä niin, etteivät muut pysty tunnistamaan muokkauksiasi. Tätä toimea kutsutaan käyttäjätunnuksen hävittämiseksi. <b>Hävittäminen ei takaa täyttä anonyymiyttä, eikä se poista hankkeisiin tekemiäsi muokkauksia</b>.
+ Kuvateksti
+ Kuvateksti kopioitu leikepöydälle
+ Näytä Tutki-välilehdellä
+ Luonut ja tallentanut: %1$s
+ Luonut %1$s ja tallentanut %2$s
+ Ehdotettu poistettavaksi
diff --git a/app/src/main/res/values-fo/strings.xml b/app/src/main/res/values-fo/strings.xml
index 3fa8f4f6b..03e25750d 100644
--- a/app/src/main/res/values-fo/strings.xml
+++ b/app/src/main/res/values-fo/strings.xml
@@ -3,7 +3,10 @@
* EileenSanda
-->
- Henda myndin kemur undir %1$s lisensin
+
+ - Henda myndin kemur undir %1$s lisensin
+ - Henda myndin kemur undir %1$s lisensin
+
Wikimedia Commons
Innstillingar
Brúkaranavn
diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml
index 9d9697f7c..342765ad6 100644
--- a/app/src/main/res/values-fr/strings.xml
+++ b/app/src/main/res/values-fr/strings.xml
@@ -12,6 +12,7 @@
* Cyclicus
* DavidL
* Derugon
+* EmDashUser002
* Eneelk
* Fitoschido
* Friday83260
@@ -47,12 +48,13 @@
* Urhixidur
* VIGNERON
* Verdy p
+* WillyM
* Wladek92
* Y-M D
-->
Page Facebook de Commons
- Code source de Commons sur Github
+ Code source de Commons sur Github
Logo de Commons
Site web de Commons
Sélecteur d\'emplacement de sortie
@@ -76,22 +78,18 @@
- %1$d fichier en cours de téléversement
- %1$d fichiers en cours de téléversement
-
- - (%1$d)
- - (%1$d)
-
Démarrage des téléversements
- - %d téléversement en cours
- - %d téléversements en cours
+ - %1$d téléversement en cours
+ - %1$d téléversements en cours
- - %d téléversement
- - %d téléversements
+ - %1$d téléversement
+ - %1$d téléversements
- - Cette image sera sous licence %1$s.
- - Ces images seront sous licence %1$s.
+ - Cette image sera sous licence %1$s
+ - Ces images seront sous licence %1$s
- %1$d téléversement
@@ -131,7 +129,7 @@
Téléversement mis en file d’attente (mode de connexion limitée activé)
%1$s téléversé !
Appuyer pour voir votre téléversement
- Téléversement du fichier : %s
+ Téléversement du fichier : %1$s
%1$s en cours de téléversement
Fin du téléversement de %1$s
Le téléversement de %1$s a échoué
@@ -181,6 +179,7 @@
Paramètres
S’inscrire
Images remarquables
+ Les images en vedette sont des images de photographes et d’illustrateurs très doués que la communauté de Wikimédia Commons a choisies comme étant de la meilleure qualité pour le site.
Sélecteur personnalisé
Catégorie
Relecture par les pairs
@@ -202,10 +201,10 @@
Licence par défaut
Utiliser le titre ou la description précédent
Thème
- Attribution-ShareAlike 4.0
- Attribution 4.0
- Attribution – Partage des conditions 3.0
- Attribution 3.0
+ Attribution-ShareAlike 4.0
+ Attribution 4.0
+ Attribution – Partage des conditions 3.0
+ Attribution 3.0
CC0
CC BY-SA 3.0
CC BY 3.0
@@ -268,15 +267,14 @@
Code 2FA
Code de vérification par email
Voulez-vous vraiment vous déconnecter ?
- Échec sur l’image du média
Aucune sous-catégorie trouvée
Aucune catégorie parente trouvée
Mont Zao
Lamas
Pont Arc-en-ciel
Tulipe
- Bienvenue de Wikipédia
- Droit d’auteur de bienvenue
+ Bienvenue de Wikipédia
+ Droit d’auteur de bienvenue
Maison de l’Opéra de Sydney
Annuler
Ouvrir
@@ -412,13 +410,11 @@
Accomplissements
Profil
Badges
- Statistiques
Remerciements reçus
Images remarquables
Images par « Lieux à proximité »
- Niveau %d
- %s (niveau %s)
- %s (%s)
+ Niveau %1$d
+ %1$s (niveau %2$s)
Images téléversées
Images non annulées
Images utilisées
@@ -478,7 +474,7 @@
Ne plus jamais demander cela
Demander l’autorisation de géolocalisation
Demander le droit de géolocaliser quand cela est nécessaire à la fonctionnalité de notifications de proximité.
- Un problème est survenu, nous n\'avons pas pu récupérer vos réussites
+ Un problème est survenu, nous n\'avons pas pu récupérer vos réussites
Vous avez effectué tellement de contributions que notre système de calcul des accomplissements est débordé. Il s’agit là de l’accomplissement ultime.
Se termine le :
Campagnes d’affichage
@@ -506,11 +502,11 @@
Impossible de demander un contrôle de catégorie pour %1$s
Demande en cours du contrôle de la catégorie pour %1$s
Fait
- Envoi des remerciements : succès
- Remerciements envoyés avec succès à %1$s
- Échec de l’envoi des remerciements à %1$s
- Envoi des remerciements : échec
- Envoi de remerciements pour %1$s
+ Envoi des remerciements : succès
+ Remerciements envoyés avec succès à %1$s
+ Échec de l’envoi des remerciements à %1$s
+ Envoi des remerciements : échec
+ Envoi de remerciements pour %1$s
Ceci est-il conforme aux règles des droits d’auteur ?
Est-ce la bonne catégorie ?
Est-ce dans le champ du projet ?
@@ -537,15 +533,14 @@
Afficher les non lus
Une erreur est survenue lors de la sélection des images
Veuillez patienter...
- Les images en vedette sont des images de photographes et d’illustrateurs très doués que la communauté de Wikimédia Commons a choisies comme étant de la meilleure qualité pour le site.
Les images téléversées par « Lieux à proximité » sont les images téléversées lors de la découverte de lieux sur la carte.
Cette fonctionnalité permet aux contributeurs d’envoyer une notification de remerciement aux utilisateurs qui font des modifications utiles ― en utilisant un petit lien de remerciement sur la page historique ou sur celle du diff.
- Copier vers les médias subséquents
+ Copier vers les médias subséquents
Copié
Exemples de bonnes images à téléverser sur Commons
Exemples d’images à ne pas téléverser
Sauter cette image
- Échec du téléchargement ! Nous ne pouvons pas télécharger le fichier sans droit d’accès au stockage externe.
+ Échec du téléchargement ! Nous ne pouvons pas télécharger le fichier sans droit d’accès au stockage externe.
Gérer les balises EXIF
Sélectionner quelles balises EXIF à conserver dans les téléversements
Auteur
@@ -555,8 +550,6 @@
Modèle de lentille
Numéros de série
Logiciel
- Accès à l’emplacement du média refusé
- Nous ne pourrons pas obtenir automatiquement les données de localisation des images que vous téléchargez. Veuillez ajouter l’emplacement approprié pour chaque image avant de la soumettre.
Téléversez des photos sur Wikimedia Commons directement depuis votre téléphone. Téléchargez l’application Commons maintenant : %1$s
Partager l’application via...
Informations sur l’image
@@ -612,7 +605,7 @@
Modifier les descriptions et les légendes
Partager l’image via
Vous n’avez encore fait aucune contribution
- %s n’a encore fait aucune contribution
+ %1$s n’a encore fait aucune contribution
Compte créé !
Texte copié dans le presse-papiers
Notification marquée comme lue
@@ -621,7 +614,7 @@
Existe
Photo manquante
Type de lieu :
- Pont, musée, hôtel, etc.
+ Pont, musée, hôtel, etc.
Quelque chose s’est mal passé lors de la connexion. Vous devez réinitialiser votre mot de passe !
MÉDIA
CLASSES ENFANTS
@@ -665,7 +658,7 @@
5. Coller le texte wiki à l’endroit approprié.
6. Modifier le wikicode pour un positionnement approprié, si nécessaire. Pour plus d’informations, voir <a href=\"https://www.mediawiki.org/wiki/Help:Images/fr#Affichage_d\'une_seule_image\">l’aide ici</a>.
7. Publier l’article
- Copier le wikicode dans le presse-papiers
+ Copier le wikicode dans le presse-papiers
pause
reprendre
En pause
@@ -706,6 +699,8 @@
Veuillez sélectionner les catégories appropriées. À l’inverse des éléments représentés, les catégories ne sont qu’en anglais.
Communs rend vos images réutilisables et adaptées à chacun. Voulez-vous renoncer à tous les droits ? Voulez-vous être crédité pour cela ? Voulez-vous que les adaptations utilisent la même licence ?
Éléments représentés
+ Libellé
+ Description
Licence du média
Détails du média
Voir la page de catégorie
@@ -732,7 +727,7 @@
Retour
Bienvenue dans le sélecteur d’image personnalisé
Ce sélecteur affiche quelles images vous avez déjà téléversées dans Commons.
- À l’inverse de l’image sur la gauche, l’image de droite comporte un logo Commons qui indique qu’elle a déjà été téléversée.\nToucher et maintenir pour avoir un aperçu de l’image.
+ À l’inverse de l’image sur la gauche, l’image de droite comporte un logo Commons qui indique qu’elle a déjà été téléversée.\nToucher et maintenir pour avoir un aperçu de l’image.
Génial
Cette image a déjà été téléversée sur Commons.
Pour des raisons techniques, l’application ne peut pas charger de façon fiable plus de %1$d images à la fois. La limite de téléchargement de %1$d a été dépassée de %2$d.
@@ -748,8 +743,10 @@
« Wiki aime les monuments » est un concours international de photographie des monuments, organisé par Wikimédia.
Nécessite une permission
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
+ Veuillez activer les services de localisation pour afficher les lieux à proximité.
+ Autorisation facultative : obtenir l’emplacement actuel pour des suggestions de catégorie
+ Contributions de l’utilisateur : %1$s
+ Réussites de l’utilisateur : %1$s
Afficher le profil de l\'utilisateur
Modifier les descriptions
Modifier les catégories
@@ -760,7 +757,7 @@
Les données de lieu aident les éditeurs de Wiki à trouver votre photo, ce qui la rend beaucoup plus utile.\nVos téléchargements récents n’indiquent aucun lieu.\nNous vous suggérons d’activer la géolocalisation dans les paramètres de votre application appareil photo.\nMerci pour vos téléversements !
Aucun lieu trouvé
Pourquoi ne pas ajouter le lieu où cette image a été trouvée ?\nLes données de lieu aident les contributeurs de wikis à trouver votre image, ce qui la rend beaucoup plus utile.\nMerci !
- Ajouter un lieu
+ Ajouter un lieu
Veuillez supprimer de ce courriel toute information que vous n’aimeriez pas diffuser publiquement. Également, veuillez prendre conscience du fait que votre adresse de messagerie avec laquelle vous publiez, ainsi que le nom et l’image de profil associés, seront visibles publiquement.
Détails
Les réalisations ne sont disponibles que dans la version de production. Veuillez consulter la documentation du développeur.
@@ -781,8 +778,8 @@
Démarquer comme à ne pas téléverser
Marquer comme non destiné au téléchargement
Ne plus marquer comme non destiné au téléchargement
- Afficher les images déjà actionnées
- Masquer les images déjà actionnées
+ Afficher les images déjà actionnées
+ Masquer les images déjà actionnées
Aucune autre image trouvée
Cette image est déjà téléversée
Impossible de sélectionner cette image pour le téléversement
@@ -818,15 +815,15 @@
Votre connexion a expiré. Veuillez vous reconnecter.
Aucune application disponible pour ouvrir les fichiers GPX
Fichier bien enregistré
- Voulez-vous ouvrir le fichier GPX ?
- Voulez-vous ouvrir le fichier KML ?
- Échec d’enregistrement du fichier KML.
- Échec d’enregistrement du fichier GPX.
- Fichier KML enregistré
- Fichier GPX enregistré
+ Voulez-vous ouvrir le fichier GPX ?
+ Voulez-vous ouvrir le fichier KML ?
+ Échec d’enregistrement du fichier KML.
+ Échec d’enregistrement du fichier GPX.
+ Fichier KML enregistré
+ Fichier GPX enregistré
- - %d image sélectionnée
- - %d images sélectionnées
+ - %1$d image sélectionnée
+ - %1$d images sélectionnées
Souvenez-vous que toutes les images dans une importation multiple prennent les mêmes catégories et descriptions. Si les images de partagent pas les descriptions et catégories, veuillez effectuer plusieurs importations séparées.
Note au sujet des importations multiples
@@ -863,7 +860,6 @@
Autres wikis
•
Utilisations du fichier
- SingleWebViewActivity
Compte
Faire disparaître le compte
Avertissement de disparition du compte
diff --git a/app/src/main/res/values-frr/strings.xml b/app/src/main/res/values-frr/strings.xml
index c2f2cc30e..c131215ea 100644
--- a/app/src/main/res/values-frr/strings.xml
+++ b/app/src/main/res/values-frr/strings.xml
@@ -8,20 +8,18 @@
- %1$d datei woort huuchschüürd
- %1$d datein wurd huuchschüürd
-
- - \@string/contributions_subtitle_zero
- - Ian huuchschüürd datei
- - %1$d huuchschüürd datein
-
- Began %1$d upload
- Began %1$d uploads
-
+
- %1$d huuchschüürd datei
- %1$d huuchschüürd datein
- Detdiar bil feit det lisens %1$s
+
+ - Detdiar bil feit det lisens %1$s
+ - Detdiar bil feit det lisens %1$s
+
Commons
Iinstelangen
Brükernööm
@@ -89,10 +87,10 @@
Lisens
Ual tiitel/beskriiwang brük
Naacht muude
- Attribution-ShareAlike 4.0
- Attribution 4.0
- Attribution-ShareAlike 3.0
- Attribution 3.0
+ Attribution-ShareAlike 4.0
+ Attribution 4.0
+ Attribution-ShareAlike 3.0
+ Attribution 3.0
CC0
CC BY-SA 3.0
CC-BY 3.0
@@ -139,4 +137,5 @@
Ufmelde
Commons-artiikel
WikiData-artiikel
+ Mögelk rocht: Rept di aktuel plak för kategoriiföörslacher ap.
diff --git a/app/src/main/res/values-gcr/strings.xml b/app/src/main/res/values-gcr/strings.xml
index 38fc4a560..388fa9a60 100644
--- a/app/src/main/res/values-gcr/strings.xml
+++ b/app/src/main/res/values-gcr/strings.xml
@@ -4,7 +4,7 @@
-->
Paj Facebook di Commons
- Kod sours Github pou Commons
+ Kod sours Github pou Commons
Logo di Commons
Sit web di Commons
Soumèt
@@ -21,7 +21,10 @@
Wè di sasé
Léta di bagaj
Zimaj pou jodla
- %1$d fiché ka télévèrsé
+
+ - %1$d fiché ka télévèrsé
+ - %1$d fiché ka télévèrsé
+
Koumansman di télévèrsé-ya
Èsploré
Jénéral
@@ -48,7 +51,7 @@
Télévèrsé koumansé !
%1$s télévèrsé !
Pézé pou wè kisa ou télévèrsé
- Téléversé di fiché : %s
+ Téléversé di fiché : %1$s
%1$s ka télévèrsé
Télévèrsé fini pou %1$s
Pézé pou afiché
@@ -91,8 +94,8 @@
Annilé
Téléchajé
Tenm
- Attribution-ShareAlike 4.0
- Attribution 4.0
+ Attribution-ShareAlike 4.0
+ Attribution 4.0
Enren !
Plis lenfòrmasyon
Katégori-ya
@@ -119,7 +122,7 @@
Pa fourni
Ès ou vréman lé dékonnègté oukò
Pyès soukatégori ki trouvé
- Bèlvini di Wikipédja
+ Bèlvini di Wikipédja
Annilé
Louvri
Fronmen
@@ -180,10 +183,9 @@
Siprimen
Akonplisman
Profil
- Èstatistik
Grémésiman rousouvrè
Zimaj ki byenfèt
- Nivèl
+ Nivèl %1$d
Zimaj ki itilizé
Kontribisyon
Òbò
diff --git a/app/src/main/res/values-gl/strings.xml b/app/src/main/res/values-gl/strings.xml
index f2a606ab9..4b5fea74f 100644
--- a/app/src/main/res/values-gl/strings.xml
+++ b/app/src/main/res/values-gl/strings.xml
@@ -14,7 +14,7 @@
-->
Páxina de Commons en Facebook
- Código fonte de Commons en Github
+ Código fonte de Commons en Github
Logo de Commons
Sitio web de Commons
Saír do selector de localización
@@ -36,17 +36,13 @@
- Cargando %1$d ficheiro
- Cargando %1$d ficheiros
-
- - (%1$d)
- - (%1$d)
-
- - Procesando %d carga
- - Procesando %d cargas
+ - Procesando %1$d carga
+ - Procesando %1$d cargas
- - %d carga
- - %d cargas
+ - %1$d carga
+ - %1$d cargas
- Esta imaxe quedará baixo a licenza %1$s
@@ -89,7 +85,7 @@
Envío en cola (modo de conexión limitado activado)
Subiuse \"%1$s\"!
Prema para ollar a súa carga
- A subir o ficheiro: %s
+ A subir o ficheiro: %1$s
Cargando \"%1$s\"
Rematando a carga de \"%1$s\"
Produciuse un erro ao enviar %1$s
@@ -152,10 +148,10 @@
Licenza por defecto
Usar o título e descrición anteriores
Tema
- Recoñecemento-CompartirIgual 4.0
- Recoñecemento 4.0
- Recoñecemento-CompartirIgual 3.0
- Recoñecemento 3.0
+ Recoñecemento-CompartirIgual 4.0
+ Recoñecemento 4.0
+ Recoñecemento-CompartirIgual 3.0
+ Recoñecemento 3.0
CC0
CC BY-SA 3.0
CC BY 3.0
@@ -213,15 +209,14 @@
Siga a nosa canle beta en Google Play e obteña acceso a novas funcionalidades e correccións de erros
Código de autenticación de dous pasos
Está seguro de querer saír?
- Fallou a imaxe de multimedia
Non se atoparon subcategorías
Non se atoparon categorías nais
Monte Zao
Llamas
Ponte do Arco da vella
Tulipán
- Benvida de Wikipedia
- Dereitos de autor de benvida
+ Benvida de Wikipedia
+ Dereitos de autor de benvida
Ópera de Sydney
Cancelar
Abrir
@@ -271,9 +266,9 @@
Texto wiki copiado ó portapapeis
A localización non está dispoñible. A identificación de sitios próximos pode non funcionar correctamente.
Precísase permiso para amosar unha lista de lugares preto de aquí
- COMO CHEGAR
- WIKIDATA
- WIKIPEDIA
+ Indicacións
+ Wikidata
+ Wikipedia
COMMONS
Avalíenos
FAQ
@@ -349,11 +344,11 @@
Borrar
Logros
Perfil
- Estatísticas
Agradecementos recibidos
Imaxes destacadas
Imaxes vía \"Lugares próximos\"
- Nivel %d
+ Nivel %1$d
+ %1$s (nivel %2$s)
Imaxes cargadas
Imaxes non revertidas
Imaxes usadas
@@ -409,7 +404,7 @@
Non volver a preguntar isto nunca
Solicitar permiso de localización
Pedir permisos de localización cando sexa necesario para a funcionalidade de notificación de proximidade.
- Algo foi mal e non puidemos obter os logros
+ Algo foi mal e non puidemos obter os logros
Finaliza o:
Amosar campañas
Ver as campañas en curso
@@ -428,9 +423,9 @@
Non foi posible solicitar un control de categoría para %1$s
Solicitando control de categoría para %1$s
Feito
- Enviando agradecementos: Éxito
- Enviado correctamente o agradecemento a %1$s
- Enviando agradecementos por %1$s
+ Enviando agradecementos: Éxito
+ Enviado correctamente o agradecemento a %1$s
+ Enviando agradecementos por %1$s
Imaxe seguinte
Si, por que non
Ningunha imaxe usada
@@ -498,7 +493,7 @@
Conta creada!
Existe
Precisa fotografía
- Ponte, museo, hotel etc.
+ Ponte, museo, hotel etc.
Favoritos
Axustes
Eliminado de favoritos
@@ -530,4 +525,5 @@
Enviar
A miña clasificación
Activouse o modo de conexión limitadoǃ
+ Permiso opcionalː obter a localización actual para suxerir categorías
diff --git a/app/src/main/res/values-got/error.xml b/app/src/main/res/values-got/error.xml
new file mode 100644
index 000000000..7838a0fbf
--- /dev/null
+++ b/app/src/main/res/values-got/error.xml
@@ -0,0 +1,10 @@
+
+
+
+ 𐌲𐌰𐌼𐌰𐌹𐌽𐌰 𐌱𐍂𐌰𐌺
+ 𐍉. 𐌰𐌹𐍂𐌶𐌴𐌹 𐍅𐌰𐍂𐌸!
+ 𐌲𐌰𐍄𐌰𐌹𐌷 𐌿𐌽𐍃 𐍈𐌰 𐌸𐌰𐍄𐌴𐌹 𐍄𐌰𐍅𐌹𐌳𐌴𐍃, 𐌸𐌰𐌽𐌿𐌷 𐌸𐌰𐌽 𐌳𐌰𐌹𐌻𐌴𐌹 𐌸𐌰𐌹𐍂𐌷 𐌴-𐌱𐍉𐌺𐍉𐍃. 𐌷𐌹𐌻𐍀𐌹𐌸 𐌿𐌽𐍃𐌰𐍂𐌰 𐌲𐌰𐌱𐍉𐍄𐌾𐌰𐌽!
+ 𐌰𐍅𐌹𐌻𐌹𐌿𐌳𐍉𐌼 𐌸𐌿𐍃!
+
diff --git a/app/src/main/res/values-got/strings.xml b/app/src/main/res/values-got/strings.xml
new file mode 100644
index 000000000..9e8ae1754
--- /dev/null
+++ b/app/src/main/res/values-got/strings.xml
@@ -0,0 +1,372 @@
+
+
+
+ 𐌲𐌰𐌼𐌰𐌹𐌽𐌰 𐌻𐌰𐌿𐍆𐍃 𐍆𐌴𐍃𐌱𐌿𐌺𐍃
+ 𐌲𐌰𐌼𐌰𐌹𐌽𐌰 𐌲𐌹𐍄𐌷𐌰𐌱𐍃 𐌺𐍉𐌳𐌿𐍃 𐌱𐍂𐌿𐌽𐌽𐌹𐌽𐍃
+ 𐌲𐌰𐌼𐌰𐌹𐌽𐌰 𐌻𐍉𐌲𐍉
+ 𐌲𐌰𐌼𐌰𐌹𐌽𐌰 𐌽𐌰𐍄𐌾𐌰𐍃𐍄𐌰𐌸𐍃
+ 𐍃𐍄𐌰𐌳𐌹𐍃 𐌽𐌹𐌼𐌰𐌽𐌳 𐌰𐍆𐌻𐌴𐌹𐌸𐌰𐌽
+ 𐍃𐌰𐌽𐌳𐌾𐌰𐌽
+ 𐍆𐍂𐌹𐍃𐌰𐌷𐍄𐍃
+ 𐌰𐌻𐌻
+ 𐌹𐌿𐍀 𐌹𐌽𐌼𐌰𐌹𐌳𐌾𐌰𐌽
+ 𐍃𐌹𐌿𐌽𐍃 𐍃𐍉𐌺𐌽𐌰𐌹𐍃
+ 𐍆𐍂𐌹𐍃𐌰𐌷𐍄𐍃 𐌳𐌰𐌲𐌹𐍃
+ 𐌹𐌽𐌽𐌰𐍄𐌱𐌰𐌿𐍂𐌰 𐌳𐌿𐌲𐌹𐌽𐌽𐌰𐌽𐌳
+
+ - 𐌰𐌹𐌽=%1$d 𐌹𐌽𐌽𐌰𐍄𐌱𐌰𐌿𐍂
+
+ 𐌱𐌹𐌲𐌹𐍄𐌰𐌽
+ 𐌲𐌰𐌼𐌰𐌹𐌽
+ 𐍃𐌿𐌽𐌳𐍂𐌰𐌻𐌴𐌹𐌺𐌴𐌹
+ 𐌲𐌰𐌼𐌰𐌹𐌽𐌰
+ 𐍃𐌰𐍄𐌴𐌹𐌽𐍉𐍃
+ 𐌹𐌽𐌽𐌰𐍄𐌱𐌰𐌹𐍂𐌰𐌽 𐌳𐌿 𐌲𐌰𐌼𐌰𐌹𐌽𐌰𐌹𐌼
+ 𐌹𐌽𐌽𐌰𐍄𐌱𐌰𐌿𐍂 𐍅𐌰𐌹𐍂𐌸𐌹𐌸
+ 𐌱𐍂𐌿𐌺𐌾𐌰𐌽𐌰𐌼𐍉
+ 𐍂𐌿𐌽𐌰𐍅𐌰𐌿𐍂𐌳
+ 𐌰𐍄𐌲𐌰𐌲𐌲𐌰𐌽 𐌳𐌿 𐌲𐌰𐌼𐌰𐌹𐌽𐌰𐌹 𐌱𐌰𐌹𐍄𐌰 𐍂𐌰𐌷𐌽𐌴𐌹𐌽𐌰𐌹 𐌸𐌴𐌹𐌽𐌰𐌹
+ 𐌰𐍄𐌲𐌰𐌲𐌲𐌰𐌽
+ 𐌿𐍆𐌰𐍂𐌼𐌿𐌽𐌽𐍉𐌳𐌴𐍃 𐍂𐌿𐌽𐌰𐍅𐌰𐌿𐍂𐌳𐌰?
+ 𐌰𐌽𐌰𐌼𐌴𐌻𐌾𐌰𐌽
+ 𐌰𐍄𐌲𐌰𐌲𐌲𐌰𐌽𐌳𐍉…
+ 𐌱𐌹𐌳𐌾𐌰𐌼 𐌸𐌿𐌺 𐌱𐌴𐌹𐌳𐌰𐌽...
+ 𐌱𐌹𐌳𐌾𐌰𐌼 𐌸𐌿𐌺 𐌱𐌴𐌹𐌳𐌰𐌽...
+ 𐌰𐍄𐌲𐌰𐌲𐌲 𐍅𐌰𐍂𐌸!
+ 𐌽𐌹 𐌼𐌰𐌷𐍄𐌰 𐌰𐍄𐌲𐌰𐌲𐌲𐌰𐌽!
+ 𐍆𐌰𐌾𐌻 𐌱𐌹𐌲𐌹𐍄𐌰𐌽 𐌽𐌹𐍃𐍄. 𐌱𐌹𐌳𐌾𐌰𐌼 𐌸𐌿𐌺 𐍃𐍉𐌺𐌾𐌰𐌽 𐌰𐌽𐌸𐌰𐍂 𐍆𐌰𐌾𐌻.
+ 𐌹𐌽𐌽𐌰𐍄𐌱𐌰𐌿𐍂 𐌳𐌿𐌲𐌰𐌽𐌽!
+ 𐌹𐌽𐌽𐌰𐍄𐌱𐌰𐌿𐍂 𐌱𐌴𐌹𐌳𐌹𐌸 (𐌰𐌽𐌰𐌻𐌰𐌲𐌹𐌸 𐌹𐍃𐍄 𐌼𐍉𐌳𐌿𐍃 𐌲𐌰𐍅𐌹𐍃𐍃𐌰𐌹𐍃 𐌲𐌰𐌼𐌰𐍂𐌺𐍉𐌸)
+ %1$s 𐌹𐌽𐌽𐌰𐍄𐌱𐌰𐌿𐍂𐌰𐌽!
+ 𐌸𐍂𐌿𐌺𐌾𐌰𐌽 𐌳𐌿 𐍃𐌰𐌹𐍈𐌰𐌽 𐌹𐌽𐌽𐌰𐍄𐌱𐌰𐌿𐍂 𐌸𐌴𐌹𐌽
+ 𐌹𐌽𐌽𐌰𐍄𐌱𐌰𐌹𐍂𐌰𐌳𐌰 𐍆𐌰𐌾𐌻: %1$s
+ %1$s 𐌹𐌽𐌽𐌰𐍄𐌱𐌰𐌹𐍂𐌰𐌳𐌰
+ 𐌸𐍂𐌿𐌺𐌾𐌰𐌽 𐌳𐌿 𐍃𐌰𐌹𐍈𐌰𐌽
+ 𐌸𐍂𐌿𐌺𐌾𐌰𐌽 𐌳𐌿 𐍃𐌰𐌹𐍈𐌰𐌽
+ 𐌰𐍆𐍄𐌿𐌼𐌹𐍃𐍄𐌰 𐌹𐌽𐌽𐌰𐍄𐌱𐌰𐌿𐍂𐌰 𐌼𐌴𐌹𐌽𐌰
+ 𐍆𐍂𐌹𐍃𐌰𐌷𐍄𐌹𐌷𐌰𐌻𐌻𐍉𐍃
+ 𐌽𐌹𐌼 𐌻𐌹𐌿𐌷𐌰𐌳𐌰𐌼𐌴𐌻𐌹
+ 𐌽𐌴𐍈𐌰
+ 𐌹𐌽𐌽𐌰𐍄𐌱𐌰𐌿𐍂𐌰 𐌼𐌴𐌹𐌽𐌰
+ 𐌳𐌰𐌹𐌻𐌾𐌰𐌽
+ 𐍆𐌰𐌾𐌻𐌹𐍃 𐌻𐌰𐌿𐍆 𐍃𐌰𐌹𐍈𐌰𐌽
+ 𐌿𐍆𐌼𐌴𐌻𐌴𐌹𐌽𐍃 (𐌸𐌰𐌿𐍂𐍆𐍄𐍃 𐌹𐍃𐍄)
+ 𐌿𐍆𐌼𐌴𐌻𐌴𐌹𐌽𐍃
+ 𐌽𐌹 𐌼𐌰𐌷𐍄𐌰 𐌰𐍄𐌲𐌰𐌲𐌲𐌰𐌽
+ 𐌰𐍄𐌱𐌰𐌹𐍂𐌰𐌽
+ 𐌷𐌰𐌹𐍄 𐌸𐌰𐍄𐌰 𐌷𐌿𐌶𐌳
+ 𐌹𐌽𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐍉𐍃
+ 𐌹𐌽𐌽𐌰𐍄𐌱𐌰𐌹𐍂𐌰𐌽
+ 𐍃𐍉𐌺𐌽𐌰𐌹𐍃 𐌺𐌿𐌽𐌾𐌰
+ 𐌲𐌰𐍆𐌰𐍃𐍄𐌰𐌽
+ 𐌰𐍆𐍄𐍂𐌰𐌰𐌽𐌰𐌽𐌹𐌿𐌾𐌰𐌽
+ 𐍅𐌹𐌺𐍉
+ (𐌽𐌹 𐌽𐌰𐌿𐌷 𐌹𐌽𐌽𐌰𐍄𐌱𐌰𐌿𐍂𐌰)
+ 𐌽𐌹 𐌺𐌿𐌽𐌾𐌰 𐌲𐌰𐌻𐌴𐌹𐌺𐍉𐌽𐌳𐍉𐌽𐌰 %1$s 𐌱𐌹𐌲𐌹𐍄𐌰𐌽𐌰
+ 𐌺𐌿𐌽𐌾𐌰
+ 𐌻𐌰𐌲𐌴𐌹𐌽𐍉𐍃
+ 𐌰𐌽𐌰𐌼𐌴𐌻𐌾𐌰𐌽
+ 𐌺𐌿𐌽𐌹
+ 𐌱𐌹
+ 𐌱𐌹
+ 𐌰𐍆𐍄𐍂𐌰 𐍃𐍉𐌺𐌾𐌰𐌽
+ 𐍃𐍅𐌴𐌹𐌱𐌰𐌽
+ 𐌰𐍄𐌳𐍂𐌰𐌲𐌰𐌽
+ 𐌸𐌰𐌹𐌼𐌰
+ 𐍆𐍂𐌹𐍃𐌰𐌷𐍄𐌴𐌹𐍃 𐌸𐌴𐌹𐌽𐍉𐍃 𐌷𐌹𐌻𐍀𐌰𐌽𐌳 𐌻𐌰𐌹𐍃𐌴𐌹𐌽𐌰𐌹𐍃 𐌼𐌰𐌽𐌽𐌴 𐌹𐌽 𐍆𐌰𐌹𐍂𐍈𐌰𐌿!
+ 𐍅𐌹𐍃𐍄𐌴𐌹𐌲𐍉𐍃 𐍅𐌰𐌹𐌷𐍄𐍃 (𐌱𐌻𐍉𐌼𐌰𐌽𐍃, 𐌳𐌹𐌿𐌶𐌰, 𐍆𐌰𐌹𐍂𐌲𐌿𐌽𐌾𐌰)
+ 𐌱𐌹𐌳𐌾𐌰𐌼 𐌸𐌿𐌺 𐌽𐌹 𐌹𐌽𐌽𐌰𐍄𐌱𐌰𐌹𐍂𐌰𐌽:
+ 𐍃𐌹𐌻𐌱𐌴𐌹𐌽𐍃 𐌸𐌰𐌿 𐍆𐍂𐌹𐍃𐌰𐌷𐍄𐌴𐌹𐍃 𐍆𐍂𐌹𐌾𐍉𐌽𐌳𐌴 𐌸𐌴𐌹𐌽𐌰𐌹𐌶𐌴
+ 𐍆𐍂𐌹𐍃𐌰𐌷𐍄𐌴𐌹𐍃 𐌸𐍉𐌶𐌴𐌹 𐌰𐍄𐌳𐍂𐌰𐌲𐍄 𐌰𐍆 𐌲𐌰𐌽𐌰𐍄𐌾𐌰
+ 𐍆𐍂𐌹𐍃𐌰𐌷𐍄𐍃 𐌹𐌽𐌽𐌰𐍄𐌱𐌰𐌿𐍂𐌹𐍃:
+ 𐌿𐍆𐌰𐍂𐌼𐌴𐌻𐌹: 𐍃𐌹𐌳𐌽𐌴𐌹 𐍉𐍀𐌰𐌹𐍂𐌰𐌲𐌰𐍂𐌳𐍃
+ 𐍆𐍂𐌹𐍃𐌰𐌷𐍄𐌴𐌹𐍃 𐌸𐌴𐌹𐌽𐍉𐍃 𐌱𐌹𐌰𐌹𐌺𐌰𐌽. 𐌷𐌹𐌻𐍀 𐌻𐌰𐌿𐌱𐌴 𐍅𐌹𐌺𐌹𐍀𐌰𐌹𐌳𐌾𐍉𐍃 𐌲𐌰𐌵𐌹𐌿𐌾𐌰𐌽!
+ 𐍆𐍂𐌹𐍃𐌰𐌷𐍄𐌴𐌹𐍃 𐌰𐌽𐌰 𐍅𐌹𐌺𐌹𐍀𐌰𐌹𐌳𐌾𐌰𐌹 𐌵𐌹𐌼𐌰𐌽𐌳𐌴𐌹𐌽𐍃 𐍆𐍂𐌰𐌼 𐍅𐌹𐌺𐌹𐌼𐌰𐌹𐌳𐌾𐌰𐌹 𐌲𐌰𐌼𐌰𐌹𐌽𐌰𐌹.
+ 𐍆𐍂𐌹𐍃𐌰𐌷𐍄𐌴𐌹𐍃 𐌸𐌴𐌹𐌽𐍉𐍃 𐌷𐌹𐌻𐍀𐌰𐌽𐌳 𐌻𐌰𐌹𐍃𐌴𐌹𐌽𐌰𐌹𐍃 𐌼𐌰𐌽𐌽𐌴 𐌹𐌽 𐍆𐌰𐌹𐍂𐍈𐌰𐌿.
+ 𐌸𐌰𐌲𐌺𐌾𐌹𐍃 𐌸𐌰𐍄𐌴𐌹 𐍆𐍂𐍉𐍃𐍄?
+ 𐌾𐌰𐌹!
+ 𐌼𐌰𐌹𐍃 𐌺𐌿𐌽𐌸𐌹
+ 𐌺𐌿𐌽𐌾𐌰
+ 𐌽𐌹 𐍅𐌰𐌹𐌷𐍄 𐌲𐌰𐍅𐌰𐌻𐌹𐌸
+ 𐌽𐌹 𐌲𐌰𐍅𐌰𐌿𐍂𐌳𐌹
+ 𐌰𐍆𐍄𐍂𐌰𐌰𐌽𐌰𐌽𐌹𐌿𐌾𐌰𐌽
+ 𐍅𐌰𐌹𐌻𐌰
+ 𐍈𐍉𐍄𐌰
+ 𐍃𐌰𐌼𐍉 𐌽𐌰𐌼𐍉 𐍆𐌰𐌾𐌻𐌹𐍃 𐌱𐌹𐌲𐌹𐍄𐌰𐌽
+ 𐌹𐌽𐌽𐌰𐍄𐌱𐌰𐌹𐍂𐌰𐌽
+ 𐌾𐌰𐌹
+ 𐌽𐌴
+ 𐌿𐍆𐌼𐌴𐌻𐌴𐌹𐌽𐍃
+ 𐌿𐍆𐌰𐍂𐌼𐌴𐌻𐌹
+ 𐌲𐌰𐍅𐌰𐌿𐍂𐌳𐌹
+ 𐌱𐍉𐌺𐌰𐍂𐌴𐌹𐍃
+ 𐌹𐌽𐌽𐌰𐍄𐌱𐌰𐌹𐍂𐌰𐌽𐌳𐍃
+ 𐌲𐌰𐍄𐌴𐍅𐍉𐍃
+ 𐌽𐌹 𐌲𐌹𐌱𐌰𐌽
+ 𐍅𐌰𐌹𐍂𐌸 𐌱𐌰𐌹𐍄𐌰 𐍃𐍉𐌺𐌾𐌰𐌽𐌳𐍃
+ 2𐍆𐌰 𐌺𐍉𐌳𐌿𐍃
+ 𐌱𐌹 𐍃𐌿𐌽𐌾𐌰𐌹 𐍅𐌹𐌻𐌴𐌹𐌶𐌿 𐌰𐍆𐌻𐌴𐌹𐌸𐌰𐌽?
+ 𐌽𐌹 𐌱𐌹𐌲𐌹𐍄𐌰𐌽𐌰 𐌿𐍆𐌺𐌿𐌽𐌾𐌰
+ 𐍆𐌰𐌹𐍂𐌲𐌿𐌽𐌹 𐌶𐌰𐍉
+ 𐌻𐌻𐌰𐌼𐌰𐍃
+ 𐌱𐍂𐌿𐌳𐌳𐌹 𐍂𐌹𐌲𐌽𐌰𐌱𐌿𐌲𐌹𐌽𐍃
+ 𐍄𐍅𐌻𐌹𐍀
+ 𐍅𐌹𐌻𐌾𐌰𐌵𐌿𐌼𐌰 𐍅𐌹𐌺𐌹𐍀𐌰𐌹𐌳𐌾𐍉𐍃
+ 𐍃𐍅𐌴𐌹𐌱𐌰𐌽
+ 𐌿𐍃𐌻𐌿𐌺𐌰𐌽
+ 𐌻𐌿𐌺𐌰𐌽
+ 𐌲𐌰𐍂𐌳𐍃
+ 𐌰𐍄𐌱𐌰𐌹𐍂𐌰𐌽
+ 𐌽𐌴𐍈𐌰
+ 𐌱𐌹
+ 𐌻𐌰𐌲𐌴𐌹𐌽𐍉𐍃
+ 𐌰𐍆𐌻𐌴𐌹𐌸𐌰𐌽
+ 𐌿𐍃𐌸𐍂𐍉𐌸𐌴𐌹𐌽𐍃 𐌻𐌰𐌹𐍃𐌴𐌹𐌽𐌰𐌹𐍃
+ 𐌻𐌰𐌿𐍆𐍃 𐍆𐌰𐌾𐌻𐌹𐍃 𐌲𐌰𐌼𐌰𐌹𐌽𐍃
+ 𐌻𐌰𐌿𐍆𐍃 𐍅𐌹𐌺𐌹𐍀𐌰𐌹𐌳𐌾𐍉𐍃
+ 𐌼𐌰𐌷𐍄𐌴𐌹𐌲𐍉𐍃 𐌰𐌹𐍂𐌶𐌴𐌹𐌽𐍃 𐌸𐌹𐌶𐌰𐌹 𐍆𐍂𐌹𐍃𐌰𐌷𐍄𐌰𐌹:
+ 𐍆𐍂𐌹𐍃𐌰𐌷𐍄𐍃 𐌿𐍆𐌰𐍂𐍂𐌹𐌵𐌹𐌶𐌰 𐌹𐍃𐍄.
+ 𐍆𐍂𐌹𐍃𐌰𐌷𐍄𐍃 𐍃𐌺𐌴𐌹𐍂𐌰 𐌽𐌹𐍃𐍄.
+ 𐍆𐍂𐌹𐍃𐌰𐌷𐍄𐍃 𐌾𐌿 𐌹𐍃𐍄 𐌰𐌽𐌰 𐌲𐌰𐌼𐌰𐌹𐌽𐌰𐌹𐌼.
+ 𐍃𐍉 𐍆𐍂𐌹𐍃𐌰𐌷𐍄𐍃 𐌰𐍄 𐌰𐌽𐌸𐌰𐍂𐌰𐌼𐌼𐌰 𐍃𐍄𐌰𐌳𐌰 𐌽𐌿𐌼𐌰𐌽𐌰 𐍅𐌰𐍃.
+ 𐌱𐌹𐌳𐌾𐌰𐌼 𐌸𐌿𐌺 𐌸𐌰𐍄𐌰𐌹𐌽𐌴𐌹 𐌹𐌽𐌽𐌰𐍄𐌱𐌰𐌹𐍂𐌰𐌽 𐍆𐍂𐌹𐍃𐌰𐌷𐍄𐌹𐌽𐍃 𐌽𐌿𐌼𐌰𐌽𐍉𐍃 𐍆𐍂𐌰𐌼 𐌸𐌿𐍃 𐍃𐌹𐌻𐌱𐌹𐌽. 𐌽𐌹 𐌹𐌽𐌽𐌰𐍄𐌱𐌰𐌹𐍂 𐍆𐍂𐌹𐍃𐌰𐌷𐍄𐌹𐌽𐍃 𐌸𐍉𐌶𐌴𐌹 𐌱𐌹𐌲𐌰𐍃𐍄 𐌰𐌽𐌰 𐍆𐌴𐍃𐌱𐌿𐌺 𐍂𐌰𐌷𐌽𐌴𐌹𐌽𐌹𐌼 𐌰𐌽𐌸𐌰𐍂𐌰𐌹𐌶𐌴.
+ 𐍅𐌹𐌻𐌴𐌹𐌶𐌿 𐌽𐌰𐌿𐌷 𐌸𐍉 𐍆𐍂𐌹𐍃𐌰𐌷𐍄 𐌹𐌽𐌽𐌰𐍄𐌱𐌰𐌹𐍂𐌰𐌽?
+ 𐌰𐌹𐍂𐌶𐌴𐌹 𐍅𐌰𐍂𐌸 𐌲𐌰𐍅𐌹𐍃𐍃𐌰𐌹
+ 𐌰𐌹𐍂𐌶𐌴𐌹𐌽𐍃 𐌱𐌹𐌲𐌹𐍄𐌰𐌽𐍉𐍃 𐌹𐌽 𐍆𐍂𐌹𐍃𐌰𐌷𐍄𐌰𐌹
+ 𐌹𐌽-𐌰𐍀𐍀 𐍃𐌺𐌰𐌿𐍄𐌰𐌽𐍃 𐌲𐌰𐍆𐌰𐍃𐍄𐌰𐌽
+ 𐌰𐍄𐌲𐌰𐌲𐌲𐌰𐌽 𐌳𐌿 𐍂𐌰𐌷𐌽𐌴𐌹𐌽𐌰𐌹 𐌸𐌴𐌹𐌽𐌰𐌹
+ 𐌻𐌰𐌿𐌲 𐍆𐌰𐌾𐌻 𐍃𐌰𐌽𐌳𐌾𐌰𐌽
+ 𐌰𐌹𐍂𐌶𐌴𐌹! 𐌿𐍂𐌻 𐌽𐌹 𐌱𐌹𐌲𐌹𐍄𐌰𐌽
+ 𐌲𐌰𐌳𐍉𐌼𐌾𐌰𐌽 𐍆𐍂𐌰𐌵𐌹𐍃𐍄𐌴𐌹𐌽𐌰𐌹
+ 𐍃𐍉 𐍆𐍂𐌹𐍃𐌰𐌷𐍄𐍃 𐌲𐌰𐌳𐍉𐌼𐌹𐌳𐌰 𐌹𐍃𐍄 𐍆𐍂𐌰𐌵𐌹𐍃𐍄𐌴𐌹𐌽𐌰𐌹
+ 𐍃𐌰𐌹𐍈 𐌽𐌰𐍄𐌾𐌰𐍃𐍄𐌰𐌸 𐌼𐌰𐌹𐌶𐍉 𐌺𐌿𐌽𐌸𐌾𐌰.
+ 𐍄𐍂𐌹𐍀𐍀𐍉𐌽
+ 𐌰𐍄𐌲𐌰𐌲𐌲𐌰𐌽
+ 𐌱𐌹 𐍃𐌿𐌽𐌾𐌰𐌹 𐍅𐌹𐌻𐌴𐌹𐌶𐌿 𐍄𐍂𐌹𐍀𐍀𐍉𐌽 𐌰𐍄𐌲𐌰𐌲𐌲?
+ 𐍃𐌺𐌰𐌻𐍄 𐌰𐍄𐌲𐌰𐌲𐌲𐌰𐌽 𐌳𐌿 𐌹𐌽𐌽𐌰𐍄𐌱𐌰𐌹𐍂𐌰𐌽 𐍆𐍂𐌹𐍃𐌰𐌷𐍄𐌹𐌽𐍃 𐌹𐌽 𐌰𐌽𐌰𐍅𐌰𐌹𐍂𐌸𐌰.
+ 𐌱𐌹𐌳𐌾𐌰𐌼 𐌸𐌿𐌺 𐌰𐍄𐌲𐌰𐌲𐌲 𐌳𐌿 𐌱𐍂𐌿𐌺𐌾𐌰𐌽 𐌸𐌹𐌶𐍉𐍃 𐌼𐌰𐌷𐍄𐌰𐌹𐍃
+ 𐌽𐌴𐍈𐌰 𐌼𐌰𐌲𐌹 𐌽𐌹 𐍅𐌰𐌹𐌻𐌰 𐍅𐌰𐌿𐍂𐌺𐌾𐌰𐌽, 𐍃𐍄𐌰𐌸𐍃 𐌽𐌹𐍃𐍄.
+ 𐍅𐌹𐌺𐌹𐌳𐌰𐍄𐌰
+ 𐍅𐌹𐌺𐌹𐍀𐌰𐌹𐌳𐌾𐌰
+ 𐌲𐌰𐌼𐌰𐌹𐌽𐌰
+ 𐌲𐌹𐍆 𐌿𐌽𐍃 𐍅𐌰𐌹𐍂𐌸
+ 𐍆𐌹𐌻𐌿 𐍆𐍂𐌰𐌹𐌷𐌽𐌰𐌽𐍉𐍃 𐌱𐌹𐌳𐍉𐍃
+ 𐌷𐌰𐌽𐌳𐌿𐌱𐍉𐌺𐍉𐍃 𐌱𐍂𐌿𐌺𐌾𐌹𐌽𐍃
+ 𐌲𐌰𐌽𐌰𐍄𐌹 𐌽𐌹𐍃𐍄
+ 𐍃𐌺𐌴𐌹𐍂𐌾𐌰𐌽
+ 𐍂𐌰𐌶𐌳𐍉𐍃
+ 𐍅𐌰𐌻𐌴𐌹 𐍂𐌰𐌶𐌳𐌰 𐌸𐌹𐌶𐌰𐌹𐌴𐌹 𐍅𐌹𐌻𐌴𐌹𐍃 𐌹𐌽𐍃𐌰𐌽𐌳𐌾𐌰𐌽 𐍃𐌺𐌴𐌹𐍂𐌴𐌹𐌽𐌹𐌽𐍃
+ 𐌸𐌰𐌹𐍂𐌷𐍅𐌹𐍃
+ 𐍃𐍅𐌴𐌹𐌱𐌰𐌽
+ 𐌰𐍆𐍄𐍂𐌰 𐍃𐍉𐌺𐌾𐌰𐌽
+ 𐍃𐌰 𐍃𐍄𐌰𐌸𐍃 𐌸𐌰𐍂𐍆 𐌻𐌹𐌿𐌷𐌰𐌳𐌰𐌼𐌴𐌻𐌾𐌹𐍃.
+ 𐍃𐌰 𐍃𐍄𐌰𐌸𐍃 𐌾𐌿𐌸𐌰𐌽 𐌷𐌰𐌱𐌰𐌹𐌸 𐌻𐌹𐌿𐌷𐌰𐌳𐌰𐌼𐌴𐌻𐌹.
+ 𐍃𐌰 𐍃𐍄𐌰𐌸𐍃 𐌸𐌰𐌽𐌰𐌼𐌰𐌹𐍃 𐌽𐌹𐍃𐍄.
+ 𐌽𐌹 𐍆𐍂𐌹𐍃𐌰𐌷𐍄𐌴𐌹𐍃 𐌱𐌹𐌲𐌹𐍄𐌰𐌽𐍉𐍃!
+ 𐌰𐌹𐍂𐌶𐌴𐌹 𐍅𐌰𐍂𐌸 𐌰𐍄𐌱𐌰𐌹𐍂𐌰𐌽 𐍆𐍂𐌹𐍃𐌰𐌷𐍄𐌹𐌽𐍃
+ 𐍆𐍂𐌹𐍃𐌰𐌷𐍄𐍃 𐌳𐌰𐌲𐌹𐍃
+ 𐍃𐍉𐌺𐌽𐍃
+ 𐌲𐌰𐌼𐌰𐌹𐌽𐌰 𐍃𐍉𐌺𐌾𐌰𐌽
+ 𐍃𐍉𐌺𐌾𐌰𐌽
+ 𐌰𐍆𐍄𐌿𐌼𐌹𐍃𐍄𐍉𐍃 𐍃𐍉𐌺𐌽𐌴𐌹𐍃:
+ 𐌼𐌰𐌹𐌳𐌾𐌰
+ 𐌺𐌿𐌽𐌾𐌰
+ 𐌺𐌰𐍂𐍄𐌰
+ 𐌵𐌿𐌹𐌶
+ 𐌹𐍃𐍄 𐍃𐍉 𐍆𐍂𐌹𐍃𐌰𐌷𐍄𐍃 𐌲𐍉𐌳𐌰 𐌳𐌿 𐌹𐌽𐌽𐌰𐍄𐌱𐌰𐌹𐍂𐌰𐌽?
+ 𐌱𐌴𐌹𐌳𐌰
+ 𐍄𐌰𐌿𐌹
+ 𐍆𐍂𐌹𐍃𐌰𐌷𐍄𐌴𐌹𐍃 𐌱𐌰𐌽𐌳𐍅𐌾𐌰𐌽𐌳𐌴𐌹𐌽𐍃 𐍄𐍉𐌾𐌰𐌻𐌴𐌹𐍃𐌴𐌹𐌽 𐌸𐌰𐌿 𐌿𐍃𐌼𐌴𐍄 𐌲𐌰𐌹𐍂𐌽𐌾𐌰𐌱𐌰 𐍅𐌹𐌻𐌴𐌹𐌼𐌰 𐌰𐌽𐌰 𐌲𐌰𐌼𐌰𐌹𐌽𐌰𐌹𐌼.
+ %1$s 𐌰𐌽𐌳𐌰𐌷𐌰𐍆𐍄𐌴 𐌸𐌴𐌹𐌽𐌰𐌹𐌶𐍉 𐍂𐌰𐌹𐌷𐍄𐍉𐍃 𐍅𐌴𐍃𐌿𐌽.\n𐍅𐌰𐌹𐌻𐌰 𐌲𐌰𐍄𐌰𐍅𐌹𐌳𐌴𐍃!
+ 𐍅𐌰𐌻𐌴𐌹 𐍃𐌿𐌼𐌰 𐍄𐍅𐌰𐌳𐌳𐌾𐍉 𐌲𐌰𐍅𐌰𐌻𐌴𐌹𐌽𐍉 𐌳𐌿 𐌰𐌽𐌳𐌷𐌰𐍆𐌾𐌰𐌽 𐌸𐌹𐌶𐌰𐌹 𐌱𐌹𐌳𐌰𐌹.
+ 𐌰𐍄𐌲𐌰𐌲𐌲 𐌿𐍃𐍄𐌰𐌿𐌷. 𐌱𐌹𐌳𐌾𐌰𐌼 𐌸𐌿𐌺 𐌰𐍆𐍄𐍂𐌰 𐌰𐍄𐌲𐌰𐌲𐌲𐌰𐌽.
+ 𐌵𐌿𐌹𐌶 𐌸𐌴𐌹𐌽 𐌲𐌰𐌳𐌰𐌹𐌻𐌾𐌰𐌽 𐍆𐍂𐌹𐌾𐍉𐌽𐌳𐌰𐌼!
+ 𐌸𐌰𐌹𐍂𐌷𐍅𐌹𐍃𐌰𐌽
+ 𐌰𐌽𐌳𐌰𐌷𐌰𐍆𐍄𐍃 𐍂𐌰𐌹𐌷𐍄𐌰
+ 𐌰𐌽𐌳𐌰𐌷𐌰𐍆𐍄𐍃 𐌿𐌽𐍂𐌰𐌹𐌷𐍄𐌰
+ 𐍃𐌰 𐍃𐌺𐌰𐌹𐍂𐌼𐌰𐍃𐌺𐌰𐌿𐍄𐍃 𐌲𐍉𐌸𐍃 𐌹𐍃𐍄 𐌳𐌿 𐌹𐌽𐌽𐌰𐍄𐌱𐌰𐌹𐍂𐌰𐌽?
+ 𐌰𐍀𐍀 𐌳𐌰𐌹𐌻𐌾𐌰𐌽
+ 𐌽𐌹 𐌼𐌰𐌷𐍄𐌰 𐌰𐍄𐌱𐌰𐌹𐍂𐌰𐌽 𐍃𐍄𐌰𐌳𐌹𐌽𐍃 𐌽𐌴𐍈𐌰
+ 𐌽𐌹 𐍆𐍂𐌹𐍃𐌰𐌷𐍄𐌴𐌹𐍃 𐌹𐌽 𐌸𐌰𐌼𐌼𐌰 𐍃𐍄𐌰𐌳𐌰
+ 𐌽𐌹 𐍃𐌹𐌽𐌳 𐍃𐍄𐌰𐌳𐌴𐌹𐍃 𐌽𐌴𐍈𐌰 𐌱𐌹𐍃𐌿𐌽𐌾𐌰𐌽𐌴
+ 𐌰𐌹𐍂𐌶𐌴𐌹 𐍅𐌰𐍂𐌸 𐌽𐌹𐌼𐌰𐌽 𐌰𐌿𐍂𐌰𐌷𐌾𐍉𐍃 𐌽𐌴𐍈𐌰.
+ 𐌽𐌹 𐍃𐍉𐌺𐌽𐌴𐌹𐍃 𐌰𐍆𐍄𐌿𐌼𐌹𐍃𐍄𐍉𐍃
+ 𐌱𐌹 𐍃𐌿𐌽𐌾𐌰𐌹 𐍅𐌹𐌻𐌴𐌹𐌶𐌿 𐍃𐍉𐌺𐌽𐌰𐌹𐍃 𐍃𐍀𐌹𐌻𐌻 𐌰𐍆𐌷𐍂𐌰𐌹𐌽𐌾𐌰𐌽?
+ 𐍅𐌹𐌻𐌴𐌹𐌶𐌿 𐌸𐌹𐌶𐌰𐌹 𐍃𐍉𐌺𐌽𐌰𐌹 𐌿𐍃𐌵𐌹𐍃𐍄𐌾𐌰𐌽?
+ 𐍃𐍉𐌺𐌽𐌰𐌹𐍃 𐍃𐍀𐌹𐌻𐌻𐌰𐍅𐌹𐍄𐌿𐌱𐌽𐌹 𐌿𐍃𐌵𐌹𐍃𐍄𐌹𐌸
+ 𐌲𐌰𐌳𐍉𐌼𐌾𐌰𐌽 𐍆𐍂𐌰𐌵𐌹𐍃𐍄𐌴𐌹𐌽𐌰𐌹
+ 𐌿𐍃𐌵𐌹𐍃𐍄𐌾𐌰𐌽
+ 𐌰𐍅𐌹𐌻𐌹𐌿𐌸 𐌰𐌽𐌳𐌽𐌿𐌼𐌰𐌽
+ 𐍆𐍂𐌹𐍃𐌰𐌷𐍄𐌴𐌹𐍃 𐍅𐌰𐌹𐌻𐌰𐌼𐌴𐍂𐌾𐍉𐍃
+ 𐍆𐍂𐌹𐍃𐌰𐌷𐍄𐌴𐌹𐍃 𐌸𐌰𐌹𐍂𐌷 \"𐍃𐍄𐌰𐌳𐌹𐌽𐍃 𐌽𐌴𐍈𐌰\"
+ 𐌷𐌰𐌿𐌷𐌹𐌸𐌰 %1$d
+ %1$s (𐌷𐌰𐌿𐌷𐌹𐌸𐌰 %2$s)
+ 𐍆𐍂𐌹𐍃𐌰𐌷𐍄𐌴𐌹𐍃 𐌹𐌽𐌽𐌰𐍄𐌱𐌰𐌿𐍂𐌰𐌽𐍉𐍃
+ 𐌱𐍂𐌿𐌷𐍄𐍉𐍃 𐍆𐍂𐌹𐍃𐌰𐌷𐍄𐌴𐌹𐍃
+ 𐌸𐌰𐍄𐌰 𐌼𐌹𐌽𐌽𐌹𐍃𐍄𐍉 𐌽𐌰𐌿𐌳𐌹𐌸𐌰𐌿𐍂𐍆𐍄𐌰𐌹:
+ 𐍂𐌰𐌸𐌾𐍉 𐍆𐍂𐌹𐍃𐌰𐌷𐍄𐌴 𐌸𐍉𐌶𐌴𐌹 𐌹𐌽𐌽𐌰𐍄𐌱𐌰𐍂𐍄 𐌳𐌿 𐌲𐌰𐌼𐌰𐌹𐌽𐌰𐌼, 𐌸𐌰𐌹𐍂𐌷 𐌷𐌽𐌰𐍃𐌵𐌿𐍅𐌰𐍂𐌰 𐌳𐌿 𐌹𐌽𐌽𐌰𐍄𐌱𐌰𐌹𐍂𐌰𐌽
+ 𐍂𐌰𐌸𐌾𐍉 𐍆𐍂𐌹𐍃𐌰𐌷𐍄𐌴 𐌹𐌽𐌽𐌰𐍄𐌱𐌰𐌿𐍂𐌰𐌽𐌰𐌹𐌶𐍉 𐌳𐌿 𐌲𐌰𐌼𐌰𐌹𐌽𐌰𐌹𐌼 𐌸𐍉𐌶𐌴𐌹 𐌱𐍂𐌿𐌷𐍄𐍉𐍃 𐍃𐌹𐌽𐌳 𐌹𐌽 𐌻𐌰𐌿𐌱𐌰𐌼 𐍅𐌹𐌺𐌹𐌼𐌰𐌹𐌳𐌾𐌴
+ 𐌰𐌹𐍂𐌶𐌴𐌹 𐍅𐌰𐍂𐌸!
+ 𐌽𐌰𐌼𐍉 𐌱𐍉𐌺𐌰𐍂𐌴𐌹𐍃 𐌱𐌹𐌿𐌷𐍄
+ 𐌱𐌹𐌰𐌿𐌺𐌰𐌹𐌽𐌴𐌹𐍃
+ 𐌽𐌴𐍈𐌰
+ 𐍅𐌹𐌺𐍉
+ 𐌽𐌹 𐍃𐌰𐌹𐍈𐌹𐍃 𐌸𐌰𐌽𐌰𐍃𐌴𐌹𐌸𐍃 𐌸𐌰𐌽𐌰 𐌽𐌴𐍈𐌹𐍃𐍄𐌰𐌽 𐍃𐍄𐌰𐌸 𐍃𐌰𐌴𐌹 𐌸𐌰𐍂𐍆 𐍆𐍂𐌹𐍃𐌰𐌷𐍄𐌴. 𐌰𐌸𐌸𐌰𐌽 𐌼𐌰𐌲𐍄 𐌰𐍆𐍄𐍂𐌰-𐌻𐌰𐌲𐌾𐌰𐌽 𐌸𐍉 𐌼𐌴𐍂𐌴𐌹𐌽 𐌹𐌽 𐌻𐌰𐌲𐌴𐌹𐌽𐌹𐌼 𐌾𐌰𐌱𐌰𐌹 𐍅𐌹𐌻𐌴𐌹𐍃.
+ 𐌹𐍆𐍄𐌿𐌼
+ 𐍃𐍀𐌴𐌳𐌹𐍃𐍄
+ 𐍆𐍂𐌹𐍃𐌰𐌷𐍄𐌴𐌹𐍃
+ 𐍃𐍄𐌰𐌳𐌴𐌹𐍃
+ 𐌺𐌿𐌽𐌾𐌰
+ 𐌱𐍉𐌺𐌰𐌼𐌰𐍂𐌺𐍉𐍃
+ 𐌽𐌹 𐌽𐌰𐌿𐌷 𐌱𐌹𐌰𐌹𐌰𐌿𐌺𐍄 𐌱𐍉𐌺𐌰𐌼𐌰𐍂𐌺𐍉𐍃.
+ 𐌱𐍉𐌺𐌰𐌼𐌰𐍂𐌺𐍉𐍃
+ 𐌽𐌹 𐍅𐌹𐍃𐍃𐌰 𐌸𐌰𐍄𐌴𐌹 𐌰𐌽𐌳𐌰𐌿𐌲𐌾𐍉 𐌰𐌽𐌰𐍃𐌹𐌿𐌽 𐍅𐌴𐍃𐌹
+ 𐌿𐍆𐌺𐌿𐌽𐌸𐌰 𐌸𐌰𐍄𐌴𐌹 𐌲𐍉𐌸 𐌽𐌹𐍃𐍄 𐍃𐌿𐌽𐌳𐍂𐌰𐌻𐌴𐌹𐌺𐌴𐌹𐌽 𐌼𐌴𐌹𐌽𐌰𐌹
+ 𐌷𐌰𐌱𐌰𐌹 𐌿𐌽𐍃 𐍆𐌰𐌿𐍂𐌵𐌹𐌸𐌰𐌽𐌰𐌹, 𐍃𐍅𐌰𐌻𐌴𐌹𐌺𐌰 𐍆𐍂𐌹𐍃𐌰𐌷𐍄𐍃 𐌰𐌹𐌲𐌺𐌴𐌹𐌺𐌻𐌰𐌿𐍀𐌰𐌹𐌳𐌾𐌰𐌹 𐌲𐌰𐍄𐌹𐌻𐌰 𐌽𐌹𐍃𐍄
+ 𐍅𐌹𐌻𐌾𐌰𐌵𐌿𐌼𐌰 𐌳𐌿 𐌲𐌰𐌼𐌰𐌹𐌽𐌰𐌼!\n\n𐌼𐌰𐌲𐍄 𐌼𐌰𐌹𐌳𐌾𐌰 𐍆𐍂𐌿𐌼𐌹𐍃𐍄𐌰 𐌸𐌴𐌹𐌽𐌰 𐌹𐌽𐌽𐌰𐍄𐌱𐌰𐌹𐍂𐌰𐌽 𐌸𐍂𐌿𐌺𐌾𐌰𐌽𐌳𐍃 𐌰𐌽𐌰 𐌷𐌰𐌿𐌱𐌹𐌳𐌹𐌻𐍉𐌽 𐌱𐌹𐌰𐌹𐌺𐌰𐌽.
+ 𐌽𐌹 𐌺𐌿𐌽𐌾𐌰 𐌲𐌰𐍅𐌰𐌻𐌹𐌳𐌰
+ 𐍆𐍂𐌹𐍃𐌰𐌷𐍄𐌴 𐌹𐌽𐌿𐌷 𐌺𐌿𐌽𐌾𐌰 𐌽𐌹 𐌿𐍆𐍄𐌰 𐌱𐍂𐌿𐌺𐌾𐌰𐌽𐌳𐌰. 𐌱𐌹 𐍃𐌿𐌽𐌾𐌰𐌹 𐍅𐌹𐌻𐌴𐌹𐌶𐌿 𐌸𐌰𐌹𐍂𐌷𐍅𐌹𐍃𐌰𐌽 𐌽𐌹𐌱𐌰 𐌲𐌰𐍅𐌰𐌻𐌹𐌳𐌰 𐌺𐌿𐌽𐌾𐌰?
+ 𐌹𐌽𐌽𐌰𐍄𐌱𐌰𐌿𐍂 𐍃𐍅𐌴𐌹𐌱𐌰𐌽
+ 𐌱𐍂𐌿𐌺𐌴𐌹𐌽𐍃 𐌷𐌰𐌿𐌱𐌹𐌳𐌹𐌻𐍉𐌽𐍃 𐌳𐌿 𐌲𐌰𐍅𐌰𐌽𐌳𐌾𐌰𐌽 𐌸𐌿𐌺 𐍃𐍅𐌴𐌹𐌱𐌹𐌸 𐌸𐌰𐍄𐌰 𐌹𐌽𐌽𐌰𐍄𐌱𐌰𐌿𐍂 𐌾𐌰𐌷 𐍆𐍂𐌰𐌻𐌹𐌿𐍃𐌹𐍃 𐍆𐍂𐌰𐌼𐌲𐌰𐌷𐍄𐌰𐌹 𐌸𐌴𐌹𐌽𐌰𐌹
+ 𐌹𐌽𐌽𐌰𐍄𐌱𐌰𐌿𐍂 𐌸𐌰𐌹𐍂𐌷𐍅𐌹𐍃𐌰𐌽
+ 𐌹𐌽 𐌸𐌰𐌼𐌼𐌰 𐌲𐌰𐌿𐌾𐌰 𐍃𐍉𐌺𐌾𐌰𐌽
+ 𐌱𐌹𐌳𐌰 𐌰𐌽𐌳𐌻𐌴𐍄𐌹𐍃
+ 𐍅𐌹𐌻𐌴𐌹𐌶𐌿 𐌰𐌽𐌳𐍅𐌰𐌹𐍂𐌸𐌰𐌼𐌼𐌰 𐍃𐍄𐌰𐌳𐌰 𐌸𐌴𐌹𐌽𐌰𐌼𐌼𐌰 𐌱𐍂𐌿𐌺𐌾𐌰𐌽 𐌳𐌿 𐌱𐌰𐌽𐌳𐍅𐌾𐌰𐌽 𐌸𐌰𐌽𐌰 𐍃𐍄𐌰𐌸 𐌽𐌴𐍈𐌹𐍃𐍄𐌰𐌽 𐍃𐌰𐌴𐌹 𐌸𐌰𐍂𐍆 𐍆𐍂𐌹𐍃𐌰𐌷𐍄𐌴?
+ 𐌽𐌹 𐌼𐌰𐌷𐍄𐌰 𐌱𐌰𐌽𐌳𐍅𐌾𐌰𐌽 𐌸𐌰𐌽𐌰 𐍃𐍄𐌰𐌸 𐌽𐌴𐍈𐌹𐍃𐍄𐌰𐌽 𐍃𐌰𐌴𐌹 𐌸𐌰𐍂𐍆 𐍆𐍂𐌹𐍃𐌰𐌷𐍄𐌴 𐌹𐌽𐌿𐌷 𐌰𐌽𐌳𐌻𐌴𐍄𐌰 𐌻𐍉𐌲𐌹𐍃
+ 𐌸𐌰𐍄𐌰 𐌽𐌹 𐍆𐍂𐌰𐌹𐌷𐌽𐌰𐌽 𐌰𐍆𐍄𐍂𐌰 𐌰𐌹𐍅
+ 𐍆𐍂𐌰𐌹𐌷𐌽𐌰𐌽 𐌰𐌽𐌳𐌻𐌴𐍄 𐍃𐍄𐌰𐌳𐌹𐍃
+ 𐌿𐍃𐍄𐌹𐌿𐌷𐌹𐌸:
+ 𐌰𐌽𐌳𐌻𐌴𐍄𐌰𐌽
+ 𐌰𐌹𐍂𐌶𐌴𐌹 𐍅𐌰𐍂𐌸 𐍅𐌰𐌿𐍂𐌺𐌾𐌰𐌽 𐌸𐍉 𐍆𐍂𐌹𐍃𐌰𐌷𐍄. 𐌱𐌹𐌳𐌾𐌰𐌼 𐌸𐌿𐌺, 𐍃𐍉𐌺𐌴𐌹 𐌰𐍆𐍄𐍂𐌰!
+ 𐌽𐌹𐌼𐌹𐌸 𐍄𐌰𐌹𐌺𐌽 𐌹𐌽𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐌰𐌹
+ 𐌲𐌰𐍄𐌰𐍅𐌹𐌸
+ 𐍃𐌰𐌽𐌳𐌾𐌰𐌽𐌳𐌰 𐌰𐍅𐌹𐌻𐌹𐌿𐌳𐌰: 𐍅𐌰𐌿𐍂𐌷𐍄
+ 𐍅𐌰𐌹𐌻𐌰 𐌹𐌽𐍃𐌰𐌽𐌳𐌹𐌳𐌰 𐌰𐍅𐌹𐌻𐌹𐌿𐌸 𐌳𐌿 %1$s
+ 𐌽𐌹 𐌼𐌰𐌷𐍄𐌰 𐍃𐌰𐌽𐌳𐌾𐌰𐌽 𐌰𐍅𐌹𐌻𐌹𐌿𐌳𐌰 %1$s
+ 𐍃𐌰𐌽𐌳𐌾𐌰𐌽𐌳𐌰 𐌰𐍅𐌹𐌻𐌹𐌿𐌳𐌰: 𐌽𐌹 𐍅𐌰𐌿𐍂𐌷𐍄𐌰
+ 𐌰𐍅𐌹𐌻𐌹𐌿𐌳 𐍃𐌰𐌽𐌳𐌾𐌰𐌳𐌰 𐍆𐌰𐌿𐍂 %1$s
+ 𐌹𐍃𐍄 𐌸𐌰𐍄𐌰 𐌹𐌽 𐌺𐌿𐌽𐌾𐌰 𐍂𐌰𐌹𐌷𐍄𐌰𐌼𐌼𐌰?
+ 𐍅𐌹𐌻𐌴𐌹𐌶𐌿 𐌰𐍅𐌹𐌻𐌹𐌿𐌳𐍉 𐌸𐌰𐌼𐌼𐌰 𐌱𐌹𐌰𐌿𐌺𐌰𐌽𐌳?
+ 𐌰𐍄𐍄𐌴𐌺 \'𐌽𐌴\' 𐌳𐌿 𐌳𐍉𐌼𐌾𐌰𐌽 𐌸𐍉 𐍆𐍂𐌹𐍃𐌰𐌷𐍄 𐍆𐍂𐌰𐌵𐌹𐍃𐍄𐌴𐌹𐌽𐌰𐌹 𐌾𐌰𐌱𐌰𐌹 𐌽𐌹𐍃𐍄 𐌰𐌻𐌻𐌹𐍃 𐌱𐍂𐌿𐌺𐌰.
+ 𐍉, 𐌸𐌰𐍄𐌰 𐌽𐌹 𐌷𐌰𐌱𐌰𐌹𐌸 𐌺𐌿𐌽𐌹!
+ 𐍃𐍉 𐍆𐍂𐌹𐍃𐌰𐌷𐍄𐍃 𐌷𐌰𐌱𐌰𐌹𐌸 %1$s 𐌺𐌿𐌽𐌾𐌰.
+ 𐌹𐍆𐍄𐌿𐌼𐌰 𐍆𐍂𐌹𐍃𐌰𐌷𐍄𐍃
+ 𐌾𐌰𐌹, 𐌳𐌿𐍈𐌴 𐌽𐌹
+ 𐌽𐌹 𐍆𐍂𐌹𐍃𐌰𐌷𐍄𐌴𐌹𐍃 𐌱𐍂𐌿𐌷𐍄𐍉𐍃
+ 𐌰𐌽𐌰𐌺𐌿𐌽𐌽𐌰𐌽 𐍃𐌰𐌹𐍈𐌰𐌽
+ 𐌿𐌽𐌰𐌽𐌰𐌺𐌿𐌽𐌽𐌰𐌽 𐍃𐌰𐌹𐍈𐌰𐌽
+ 𐌰𐌹𐍂𐌶𐌴𐌹 𐍅𐌰𐍂𐌸 𐌽𐌿𐌼𐍄𐌰𐌹 𐍆𐍂𐌹𐍃𐌰𐌷𐍄𐌴
+ 𐌱𐌹𐌳𐌾𐌰𐌼 𐌸𐌿𐌺 𐌱𐌴𐌹𐌳𐌰𐌽...
+ 𐌸𐍉 𐍆𐍂𐌹𐍃𐌰𐌷𐍄 𐍄𐍂𐌹𐍀𐍀𐍉𐌽
+ EXIF 𐍃𐍉𐌺𐌽𐌹𐍅𐌰𐌿𐍂𐌳𐌰 𐌰𐍄𐌲𐌰𐍂𐌰𐌹𐌷𐍄𐌾𐌰𐌽
+ 𐌱𐍉𐌺𐌰𐍂𐌴𐌹𐍃
+ 𐍃𐍄𐌰𐌸𐍃
+ 𐌷𐌽𐌰𐍃𐌵𐌿𐍅𐌰𐍂𐌰
+ 𐌰𐍀𐍀 𐌳𐌰𐌹𐌻𐌾𐌰𐌽 𐌸𐌰𐌹𐍂𐌷...
+ 𐌺𐌿𐌽𐌸𐌹 𐍆𐍂𐌹𐍃𐌰𐌷𐍄𐌰𐌹𐍃
+ 𐌽𐌹 𐌺𐌿𐌽𐌾𐌰 𐌱𐌹𐌲𐌹𐍄𐌰𐌽𐌰
+ 𐌳𐌰𐍄𐌰 𐌽𐌹 𐍃𐌹𐌽𐌳 𐍃𐍀𐌴𐌳𐌹𐍃𐍄𐌰𐌹𐌶𐍉𐍃 𐍆𐍂𐌹𐍃𐌰𐌷𐍄𐌰𐌹𐍃 𐌿𐍆𐌰𐍂𐌼𐌴𐌻𐌾𐌰 𐌸𐌰𐌿 𐌲𐌰𐍃𐌺𐌴𐌹𐍂𐌴𐌹𐌽𐌹𐌼
+ 𐌳𐌿𐍈𐌴 𐍃𐌺𐌿𐌻𐌳 𐌹𐍃𐍄 %1$s 𐌿𐍃𐌵𐌹𐍃𐍄𐌾𐌰𐌽?
+ 𐍅𐌰𐌹𐌻𐌰 𐌲𐌰𐍄𐌰𐍅𐌹𐌸
+ 𐌲𐌰𐌳𐍉𐌼𐌹𐌳𐌰 %1$s 𐍆𐍂𐌰𐌵𐌹𐍃𐍄𐌴𐌹𐌽𐌰𐌹.
+ 𐌱𐍂𐌰𐌺
+ 𐌽𐌹 𐌼𐌰𐌷𐍄𐌰 𐌱𐌹𐌳𐌾𐌰𐌽 𐍆𐍂𐌰𐌵𐌹𐍃𐍄𐌴𐌹𐌽𐌰𐌹𐍃.
+ 𐍃𐌹𐌻𐌱𐌴𐌹 𐌽𐌹 𐌱𐍂𐌿𐌷𐍄𐌰 𐌹𐌽 𐌻𐌰𐌿𐌱𐌰
+ 𐌳𐍅𐌰𐌻𐌰𐍅𐌰𐌿𐍂𐌳𐌴𐌹, 𐌱𐌹 𐍃𐌿𐌽𐌾𐌰𐌹 𐌿𐌽𐌱𐍂𐌿𐌺 𐌹𐍃𐍄 𐌻𐌰𐌿𐌱𐌰
+ 𐌻𐍉𐌲𐍉
+ 𐌿𐌽𐍄𐌴 𐌹𐍃𐍄
+ 𐌽𐌹 𐌼𐌰𐌷𐍄𐌰 𐌺𐌿𐌽𐌾𐌰 𐌱𐌹𐌰𐌹𐌺𐌰𐌽.
+ 𐌺𐌿𐌽𐌾𐌰 𐌰𐌽𐌰𐌽𐌹𐌿𐌾𐌰𐌽
+ 𐌺𐌹𐌿𐍃𐌹𐌸 𐌰𐍆𐍄𐍂𐌰𐌰𐌽𐌰𐌽𐌹𐌿𐌾𐌰𐌽 𐌲𐌰𐍄𐌴𐍅𐍉𐍃.
+ 𐌰𐍆𐍄𐍂𐌰𐌰𐌽𐌰𐌽𐌹𐌿𐌴𐌹𐌽𐍃 𐌲𐌰𐍄𐌴𐍅𐍉
+ 𐍆𐍂𐌹𐍃𐌰𐌷𐍄𐌰𐌹𐍃 𐌲𐌰𐍄𐌴𐍅𐍉𐍃 𐌽𐌹 𐌰𐍆𐍄𐍂𐌰𐌰𐌽𐌰𐌽𐌹𐌿𐌾𐌹𐌳𐍉𐍃
+ 𐍆𐍂𐌹𐍃𐌰𐌷𐍄 𐌳𐌰𐌹𐌻𐌾𐌰𐌽 𐌸𐌰𐌹𐍂𐌷
+ 𐌰𐌺𐌰𐍅𐌽𐍄 𐌲𐌰𐍃𐌺𐌰𐍀𐌰𐌽!
+ 𐍃𐌿𐌼𐌰 𐌰𐌹𐍂𐌶𐌴𐌹 𐍅𐌰𐍂𐌸!
+ 𐌹𐍃𐍄
+ 𐌸𐌰𐍂𐍆 𐌻𐌹𐌿𐌷𐌰𐌳𐌰𐌼𐌴𐌻𐌾𐌹𐍃
+ 𐌱𐍂𐌿𐌳𐌳𐌹, 𐌼𐌿𐍃𐌴𐌹𐍉, 𐍃𐌰𐌻𐌹𐌸𐍅𐍉𐍃 𐌾𐌰𐌷 𐍃𐍅𐌴 𐍆𐍂𐌰𐌼𐍅𐌹𐌲𐌹𐍃
+ 𐌼𐌰𐌹𐌳𐌾𐌰
+ 𐌿𐍆𐌺𐌿𐌽𐌾𐌰
+ 𐍃𐍄𐌰𐌸𐍃 𐌽𐌴𐍈𐌰 𐌱𐌹𐌲𐌰𐍄
+ 𐍃𐌹𐌽𐌳𐌿 𐍆𐍂𐌹𐍃𐌰𐌷𐍄𐌴𐌹𐍃 𐍅𐌰𐌹𐌷𐍄𐌰𐌹𐍃 %1$s?
+ 𐌹𐍃𐍄𐌿 𐍆𐍂𐌹𐍃𐌰𐌷𐍄𐍃 𐍅𐌰𐌹𐌷𐍄𐌰𐌹𐍃 %1$s?
+ 𐌱𐍉𐌺𐌰𐌼𐌰𐍂𐌺𐍉𐍃
+ 𐍃𐌰𐍄𐌴𐌹𐌽𐍉𐍃
+ 𐍂𐌹𐌵𐌹𐍃
+ 𐌻𐌹𐌿𐌷𐌰𐌸
+ 𐌱𐌰𐍃𐍄𐌹𐍃𐍄𐍉𐌽𐌰𐌼 𐍄𐍉𐌾𐌰𐌼, 𐌱𐍂𐌿𐌺𐌴𐌹 𐌼𐍉𐌳𐌰𐌿𐍃 𐌷𐌰𐌿𐌷𐌲𐌻𐌰𐌲𐌲𐍅𐌹𐍃.
+ 𐌻𐍉𐌲 𐌰𐌽𐌰𐌻𐌰𐌲𐌾𐌰𐌽?
+ 𐌼𐌰𐌹𐍃 𐌰𐍄𐌱𐍂𐌹𐌲𐌲𐌰𐌽
+ 𐌽𐌹 𐍃𐍄𐌰𐌳𐌴𐌹𐍃 𐌱𐌹𐌲𐌹𐍄𐌰𐌽𐌰𐌹, 𐌲𐌰𐌺𐌰𐌿𐍃𐌴𐌹 𐌼𐌹𐍄𐌰𐌳𐌾𐍉𐌽𐍃 𐌹𐌽𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐌰𐌹𐍃 𐍃𐍉𐌺𐌽𐌰𐌹𐍃.
+ 𐌲𐌰𐌱𐍉𐍄𐌴𐌹𐌽𐍉𐍃 𐌰𐌽𐌰𐍆𐌹𐌻𐌷𐌰𐌽𐍉𐍃:
+ - 𐌺𐌿𐌽𐌾𐌰 𐌱𐌹𐌰𐌿𐌺𐌰𐌽 𐌳𐌿 𐌸𐌹𐌶𐌰𐌹 𐍆𐍂𐌹𐍃𐌰𐌷𐍄𐌰𐌹 𐌲𐌰𐌱𐍉𐍄𐌾𐌰𐌽 𐌱𐍂𐌿𐌺𐌴𐌹𐌽.
+ 𐍆𐍂𐌹𐍃𐌰𐌷𐍄 𐌱𐌹𐌰𐌿𐌺𐌰𐌽 𐌳𐌿 𐍅𐌹𐌺𐌹𐍀𐌰𐌹𐌳𐌾𐌰𐌹
+ 𐌲𐌰𐍄𐌿𐌻𐌲𐌾𐌰𐌽
+ 1. 𐌱𐍂𐌿𐌺𐌴𐌹 𐌹𐍆𐍄𐌿𐌼𐌰𐌹𐌶𐍉 𐍅𐌹𐌺𐌹𐌱𐍉𐌺𐍉:
+ 𐌸𐌰𐌹𐍂𐌷𐍅𐌹𐍃𐌰𐌽
+ 𐌼𐌰𐌹𐍃
+ 𐌱𐍉𐌺𐌰𐌼𐌰𐍂𐌺𐍉𐍃
+ 𐍃𐌹𐌲𐌹𐍃𐌱𐌰𐌿𐍂𐌳
+ 𐍂𐌰𐌸𐌾𐍉:
+ 𐌱𐍂𐌿𐌺𐌾𐌰
+ 𐍂𐌰𐌸𐌾𐍉
+ 𐌹𐌽 𐌾𐌴𐍂𐌰𐌼
+ 𐌹𐌽 𐍅𐌹𐌺𐍉𐌼
+ 𐍃𐌹𐌽𐍄𐌴𐌹𐌽𐍉
+ 𐌽𐌴𐍈𐌰
+ 𐌱𐍂𐌿𐌷𐍄
+ 𐌺𐌿𐌽𐌾𐌹𐍃 𐌻𐌰𐌿𐍆 𐍃𐌰𐌹𐍈𐌰𐌽
+ 𐍅𐌰𐌹𐌷𐍄𐌰𐌹𐍃 𐌻𐌰𐌿𐍆 𐍃𐌰𐌹𐍈𐌰𐌽
+ 𐍂𐌰𐌶𐌳𐌰 𐌰𐍀𐍀𐌻𐌴𐌹𐌺𐌰𐍄𐍃𐌾𐍉𐌽𐍃 𐌱𐍂𐌿𐌺𐌾𐌹𐌽𐍃 𐌹𐌽𐍄𐌰𐌹𐍂𐍆𐌰𐌺𐌹𐍉𐍃
+ 𐌼𐌰𐌹𐍃 𐌰𐌽𐌰𐌺𐌿𐌽𐌽𐌰𐌽
+ 𐌹𐌽 𐌰𐌻𐌻𐌰𐌹𐌼 𐍂𐌰𐌶𐌳𐍉𐌼
+ 𐍃𐍄𐌰𐌸 𐍅𐌰𐌻𐌾𐌰𐌽
+ 𐍃𐍄𐌰𐌸 𐍅𐌰𐌻𐌾𐌰𐌽
+ 𐌹𐌽 𐌻𐌰𐌽𐌳𐌰𐍇𐌰𐍂𐍄𐍉𐍃 𐌰𐍀𐍀 𐌱𐌰𐌽𐌳𐍅𐌾𐌰𐌽
+ 𐍃𐍄𐌰𐌸 𐌹𐌽𐌼𐌰𐌹𐌳𐌾𐌰𐌽
+ 𐌽𐌹 𐍆𐍂𐌹𐍃𐌰𐌷𐍄𐌴𐌹𐍃
+ 𐌲𐌰𐍄𐌰𐍅𐌹𐌸
+ 𐌲𐌰𐍅𐌰𐌽𐌳𐌾𐌰𐌽 𐌸𐌿𐌺
+ 𐌻𐌰𐌹𐍃𐌾𐌰𐌽 𐌸𐌿𐌺 𐌼𐌰𐌹𐍃
+ 𐌸𐌰𐌿𐍂𐌱𐌰𐌽𐌳 𐌰𐌽𐌳𐌻𐌴𐍄𐌰𐌹𐍃
+ 𐌰𐍆𐍄𐍂𐌰𐌻𐌰𐌲𐌾𐌰𐌽
+ 𐍃𐍄𐌰𐌸 𐌱𐌹𐌰𐌿𐌺𐌰𐌽
+ 𐌿𐍃𐌼𐌴𐍂𐌹 𐌰𐌽𐌳𐍂𐌰𐌿𐌴𐌹𐌳𐍃
+ 𐌼𐌰𐌷𐍄𐌴𐌹𐌲 𐌽𐌹𐍃𐍄 𐍅𐌰𐌻𐌾𐌰𐌽 𐌸𐍉 𐍆𐍂𐌹𐍃𐌰𐌷𐍄 𐌳𐌿 𐌹𐌽𐌽𐌰𐍄𐌱𐌰𐌹𐍂𐌰𐌽
+ 𐍆𐍂𐌹𐍃𐌰𐌷𐍄𐍃 𐌲𐌰𐍅𐌰𐌻𐌹𐌳𐌰
+ 𐌽𐌹 𐌼𐌰𐌷𐍄𐌰 𐌳𐌰𐌹𐌻𐌾𐌰𐌽 𐌸𐍉 𐍅𐌰𐌹𐌷𐍄
+ 𐍆𐍂𐌹𐍃𐌰𐌷𐍄 𐌹𐌽𐌼𐌰𐌹𐌳𐌾𐌰𐌽
+ 𐍃𐍄𐌰𐌸 𐌹𐌽𐌼𐌰𐌹𐌳𐌾𐌰𐌽
+ 𐍃𐍄𐌰𐌸𐍃 𐌰𐍆𐍄𐍂𐌰𐌰𐌽𐌰𐌽𐌹𐌿𐌾𐌹𐌸!
+ 𐌻𐍉𐌲 𐌿𐍃𐌽𐌹𐌼𐌰𐌽
+ 𐌻𐍉𐌲𐌹𐍃 𐍈𐍉𐍄𐌰 𐌿𐍃𐌽𐌹𐌼𐌰𐌽
+ 𐌻𐍉𐌲 𐌿𐍃𐌽𐌿𐌼𐌰𐌽!
+ 𐌱𐍉𐌺𐌰𐍂𐌾𐌰 𐌰𐍅𐌹𐌻𐌹𐌿𐌳𐍉𐌽
+ 𐌰𐌹𐍂𐌶𐌴𐌹 𐍅𐌰𐍂𐌸 𐌹𐌽 𐍃𐌰𐌽𐌳𐌴𐌹𐌽𐌰𐌹 𐌰𐍅𐌹𐌻𐌹𐌿𐌳𐌹𐍃 𐌳𐌿 𐌱𐍉𐌺𐌰𐍂𐌾𐌰.
+ 𐌰𐍄𐌲𐌰𐌲𐌲 𐌿𐍃𐍄𐌰𐌿𐌷. 𐌱𐌹𐌳𐌾𐌰𐌼 𐌸𐌿𐌺 𐌰𐍆𐍄𐍂𐌰 𐌰𐍄𐌲𐌰𐌲𐌲𐌰𐌽.
+ 𐍅𐌹𐌻𐌴𐌹𐌶𐌿 𐌲𐍀𐍇 𐍆𐌰𐌾𐌻 𐌿𐍃𐌻𐌿𐌺𐌰𐌽?
+ 𐍅𐌹𐌻𐌴𐌹𐌶𐌿 𐌺𐌼𐌻 𐍆𐌰𐌾𐌻 𐌿𐍃𐌻𐌿𐌺𐌰𐌽?
+ 𐌽𐌹 𐌼𐌰𐌷𐍄𐌰 𐌺𐌼𐌻 𐍆𐌰𐌾𐌻 𐌲𐌰𐍆𐌰𐍃𐍄𐌰𐌽.
+ 𐌽𐌹 𐌼𐌰𐌷𐍄𐌰 𐌲𐍀𐍇 𐍆𐌰𐌾𐌻 𐌲𐌰𐍆𐌰𐍃𐍄𐌰𐌽.
+ 𐌱𐌹𐌳𐌾𐌰𐌼 𐌸𐌿𐌺, 𐌼𐌴𐌻𐌴𐌹 𐍅𐌰𐌿𐍂𐌳𐌰 𐍃𐌿𐌼𐌰
+ 𐌲𐌰𐍅𐌰𐌿𐍂𐌳𐌹
+ \'%1$s\' 𐌸𐌰𐌽𐌰𐍃𐌴𐌹𐌸𐍃 𐌽𐌹𐍃𐍄, 𐌽𐌹 𐍆𐍂𐌹𐍃𐌰𐌷𐍄𐍃 𐌸𐌹𐌶𐌴𐌹 𐌼𐌰𐌷𐍄𐌴𐌹𐌲 𐌹𐍃𐍄 𐌰𐌹𐍅 𐌽𐌹𐌼𐌰𐌽.
+ \'%1$s\' 𐌹𐍃𐍄 𐌹𐌽 𐍃𐍄𐌰𐌳𐌰 𐌰𐌽𐌸𐌰𐍂𐌰𐌼𐌼𐌰.
+ 𐌱𐌹 𐍃𐌿𐌽𐌾𐌰𐌹 𐍅𐌹𐌻𐌴𐌹𐌶𐌿 𐍃𐍅𐌴𐌹𐌱𐌰𐌽 𐌰𐌻𐌻 𐌸𐌰𐍄𐌴𐌹 𐌹𐌽𐌽𐌰𐍄𐌱𐌰𐌹𐍂𐌰𐌳𐌰?
+ 𐌿𐍃𐌵𐌹𐍃𐍄𐌴𐌹𐌽 𐌲𐌰𐍄𐌿𐌻𐌲𐌾𐌰𐌽
+ 𐌿𐍃𐌵𐌹𐍃𐍄𐌾𐌰𐌽
+ 𐍃𐍅𐌴𐌹𐌱𐌰𐌽
+ 𐍃𐌰 𐍃𐍄𐌰𐌸𐍃 𐌽𐌹 𐌷𐌰𐌱𐌰𐌹𐌸 𐌽𐌰𐌿𐌷 𐍆𐍂𐌹𐍃𐌰𐌷𐍄, 𐌽𐌹𐌼 𐍃𐌿𐌼𐌰!
+ 𐍃𐌰 𐍃𐍄𐌰𐌸𐍃 𐌾𐌿 𐍆𐍂𐌹𐍃𐌰𐌷𐍄 𐌷𐌰𐌱𐌰𐌹𐌸.
+ 𐌽𐌿 𐍃𐌰𐌹𐍈𐌰𐌳𐌰 𐌾𐌰𐌱𐌰𐌹 𐍃𐌰 𐍃𐍄𐌰𐌸𐍃 𐌷𐌰𐌱𐌰𐌹𐌸 𐍆𐍂𐌹𐍃𐌰𐌷𐍄.
+ 𐌱𐍂𐌿𐌺𐌴𐌹𐌽𐍉𐍃 𐌽𐌹 𐌱𐌹𐌲𐌹𐍄𐌰𐌽𐍉𐍃
+ 𐌲𐌰𐌼𐌰𐌹𐌽𐌰
+ 𐌰𐌽𐌸𐌰𐍂𐌰 𐍅𐌹𐌺𐌾𐌰
+ 𐌱𐍂𐌿𐌺𐌴𐌹𐌽𐍉𐍃 𐍆𐌰𐌾𐌻𐌹𐍃
+ 𐍂𐌰𐌷𐌽𐌴𐌹𐌽𐍃
+ 𐌹𐌽 𐌽𐌴𐍈𐌰 𐌱𐌰𐌽𐌳𐍅𐌾𐌰𐌽
+ 𐌲𐌰𐍃𐌺𐌰𐍀𐌰𐌽 𐍆𐍂𐌰𐌼 %1$s 𐌾𐌰𐌷 𐌹𐌽𐌽𐌰𐍄𐌱𐌰𐌿𐍂𐌰𐌽 𐍆𐍂𐌰𐌼 %2$s
+
diff --git a/app/src/main/res/values-haw/strings.xml b/app/src/main/res/values-haw/strings.xml
index 8d10851cd..c3400fa00 100644
--- a/app/src/main/res/values-haw/strings.xml
+++ b/app/src/main/res/values-haw/strings.xml
@@ -3,7 +3,10 @@
* Kolonahe
-->
- E laikini ana kēia kiʻi ma lalo o %1$s
+
+ - E laikini ana kēia kiʻi ma lalo o %1$s
+ - E laikini ʻia kēia mau kiʻi ma lalo o %1$s
+
Kahilehulehu Wikimedia
Makemake
Inoa mea hoʻohana
diff --git a/app/src/main/res/values-he/error.xml b/app/src/main/res/values-he/error.xml
deleted file mode 100644
index 3f64d1789..000000000
--- a/app/src/main/res/values-he/error.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
- יישום ויקישיתוף קרס
- אוי, משהו השתבש!
- אפשר לספר לנו בדואר אלקטרוני מה עשית ואנחנו ננסה לתקן את זה.
- תודה!
-
diff --git a/app/src/main/res/values-he/strings.xml b/app/src/main/res/values-he/strings.xml
deleted file mode 100644
index feb3cf436..000000000
--- a/app/src/main/res/values-he/strings.xml
+++ /dev/null
@@ -1,94 +0,0 @@
-
-
- ויקישיתוף
- הגדרות
- שם משתמש
- ססמה
- כניסה
- כניסה לחשבון
- נא להמתין…
- הכניסה הצליחה
- הכניסה נכשלה!
- אימות הפרטים נכשל
- ההעלאה התחילה!
- הקובץ %1$s הועלה!
- ללחוץ כאן כדי לצפות בהעלאה שלך
- התחלת העלאת %1$s
- מתבצעת העלאת %1$s
- העלאת %1$s מסתיימת
- העלאת %1$s נכשלה
- נא ללחוץ כדי להציג
- ההעלאות שלי
- בתור
- נכשלה
- %1$d%% הושלמו
- העלאה
- מגלריה
- צילום תמונה
- ההעלאות שלי
- שיתוף
- הצגה בדפדפן
- כותרת
- תיאור
- לא ניתן להיכנס – כשל בתקשורת
- לא ניתן להיכנס – נא לבדוק את שם המשתמש שלך
- לא ניתן להיכנס – נא לבדוק את הססמה שלך
- יותר מדי ניסיונות כושלים להיכנס. נא לנסות שוב בעוד מספר דקות
- סליחה, החשבון הזה חסום בוויקישיתוף
- ההעלאלה נכשלה
- העלאה
- שם האוסף
- שינויים
- העלאה
- חיפוש קטגוריות
- שמירה
- לא נמצאו קטגוריות בשם %1$s
- נא להוסיף קטגוריות כדי שיהיה קל יותר למצוא את התמונות שלך בוויקישיתוף.
-
-כדי להוסיף קטגוריה יש להתחיל לכתוב.
-יש ללחוץ על ההודעה הזאת או על כפתור \"חזרה\" כדי לדלג על הצעד הזה.
- קטגוריות
- דוחות שימוש
- לשלוח דוחות שימוש לויקימדיה כדי לעזור לנו לשפר את היישום
- הגדרות
- אודות
- תוכנת קוד-פתוח המשוחררת תחת רישיון <a href=\"https://github.com/commons-app/apps-android-commons/blob/master/COPYING\">אפאצ\'י גרסה 2</a>
- קוד מקור ב־<a href=\"https://github.com/commons-app/apps-android-commons\">GitHub</a>. דיווחי באגים ב<a href=\" https://github.com/commons-app/apps-android-commons/issues\">באגזילה</a>.
-
- אודות
- שליחת משוב (בדוא\"ל)
- קטגוריות בשימוש לאחרונה
- מחכה לסנכרון הראשון…
- עדיין לא העלית תמונות.
- לנסות שוב
- ביטול
- התמונה הזו היא תחת רשיון %1$s
- הורדה
- רישיון
- CC0
- CC BY-SA 3.0
- CC BY-SA 3.0 (אוסטריה)
- CC BY-SA 3.0 (גרמניה)
- CC BY-SA 3.0 (אסטוניה)
- CC BY-SA 3.0 (ספרד)
- CC BY-SA 3.0 (קרואטיה)
- CC BY-SA 3.0 (לוקסמבורג)
- CC BY-SA 3.0 (הולנד)
- CC BY-SA 3.0 (נורווגיה)
- CC BY-SA 3.0 (פולין)
- CC BY-SA 3.0 (רומניה)
- CC BY 3.0
- CC Zero
- תרמו את התמונות שלכם. עזרו לערכים בוויקיפדיה להתעורר לחיים!
- התמונות בוויקיפדיה מגיעות מ־Wikimedia Commons.
- התמונות שלכם עוזרות להעניק חינוך לאנשים מסביב לעולם.
- נא להימנע מחומרים מוגבלים בזכויות יוצרים שמצאתם באינטרנט וכן מתמונות של כרזות, עטיפות ספרים, וכו\'.
- נראה לך שקלטת?
- כן!
- קטגוריות
- טעינה…
- לא נבחר דבר
- אין תיאור
- רישיון לא ידוע
- רענון
-
diff --git a/app/src/main/res/values-hi/strings.xml b/app/src/main/res/values-hi/strings.xml
index 70e767a51..6b1d88da2 100644
--- a/app/src/main/res/values-hi/strings.xml
+++ b/app/src/main/res/values-hi/strings.xml
@@ -26,7 +26,7 @@
-->
कॉमन्स फेसबुक पृष्ठ
- कॉमन्स गिटहब सोर्स कोड
+ कॉमन्स गिटहब सोर्स कोड
कॉमन्स का प्रतीक चिन्ह
कॉमन्स का जालस्थान
निकास स्थान चयनकर्ता
@@ -49,18 +49,14 @@
- %1$d फ़ाइल अपलोड हो रही
- %1$d फ़ाइलें अपलोड हो रहीं
-
- - (%1$d)
- - (%1$d)
-
अपलोड शुरू
- - %d अपलोड संसाधित
- - %d अपलोड संसाधित
+ - %1$d अपलोड संसाधित
+ - %1$d अपलोड संसाधित
- - %d अपलोड
- - %d अपलोड
+ - %1$d अपलोड
+ - %1$d अपलोड
- इस चित्र का प्रयोग %1$s लाइसेंस के अन्तर्गत होगा
@@ -152,10 +148,10 @@
डिफॉल्ट लाइसेन्स
पिछले शीर्षक/विवरण का उपयोग करें
थीम
- एट्रीब्यूशन-शेयरअलाइक 4.0
- एट्रिब्यूशन 4.0
- एट्रीब्यूशन-शेयरअलाइक 3.0
- एट्रीब्यूशन 3.0
+ एट्रीब्यूशन-शेयरअलाइक 4.0
+ एट्रिब्यूशन 4.0
+ एट्रीब्यूशन-शेयरअलाइक 3.0
+ एट्रीब्यूशन 3.0
सीसी0
सीसी बाय-एसए 3.0
CC BY 3.0
@@ -208,15 +204,14 @@
गूगल प्ले पर हमारे बीटा चैनल का चयन करें और नई सुविधाओं व त्रुटिसुधारों तक पहले पहुँचे
2 एफए कोड
क्या आप वास्तव में निकास करना चाहते हैं?
- मीडिया छवि विफल
कोई उपश्रेणी नहीं मिली
कोई मूल श्रेणी नहीं मिली
माउंट ज़ाओ
ल्लामस
इंद्रधनुष के पुल
ट्यूलिप
- विकिपीडिया में स्वागत है
- प्रतिलिप्याधिकार में स्वागत है
+ विकिपीडिया में स्वागत है
+ प्रतिलिप्याधिकार में स्वागत है
सिडनी का ओपेरा हाउस
रद्द करें
खोलें
@@ -301,6 +296,7 @@
प्रश्न
परिणाम
सेल्फी की ज्ञानकोषीय महत्ता बहुत अधिक नहीं है। कृपया अपना चित्र तब तक अपलोड न करें जबतक आपके बारे में कोई विकिपीडिया लेख पहले से उपलब्ध नहीं है।
+ जारी रखें
उत्तर हेतु प्रश्न के दो विकल्प में से कोई एक चुने
लॉग इन सत्र समाप्त हो गया, कृपया पुनः लॉग इन करें।
अपनी प्रश्नोत्तरी अपने मित्रों के साथ साझा करें!
@@ -318,11 +314,10 @@
हटाएँ
उपलब्धियाँ
प्रोफ़ाइल
- सांख्यिकी
धन्यवाद प्राप्त किया
निर्वाचित चित्र
- स्तर %d
- %s (स्तर %s )
+ स्तर %1$d
+ %1$s (स्तर %2$s )
चित्र अपलोड हुआ
चित्रों को वापस नहीं किया गया
उपयोग हुए चित्र
@@ -374,6 +369,7 @@
सफल
गणना
रद्द करें
+ वैकल्पिक अनुमति: श्रेणी सुझाव हेतु वर्तमान स्थान ज्ञात करें
वार्ता
क्या आप वाकई सभी अपलोड रद्द करना चाहते हैं?
सभी अपलोड रद्द किये जा रहे हैं...
diff --git a/app/src/main/res/values-hr/strings.xml b/app/src/main/res/values-hr/strings.xml
index 155881491..7c5d6a2a0 100644
--- a/app/src/main/res/values-hr/strings.xml
+++ b/app/src/main/res/values-hr/strings.xml
@@ -9,7 +9,7 @@
-->
Stranica Zajedničkog poslužitelja na Facebooku
- Izvorni kôd Zajedničkog poslužitelja na Githubu
+ Izvorni kôd Zajedničkog poslužitelja na Githubu
Logotip Zajedničkog poslužitelja
Mrežno mjesto Zajedničkog poslužitelja
Slika dana
@@ -17,20 +17,21 @@
- Postavlja se %1$d datoteka
- Postavljaju se %1$d datoteke
-
- - \@string/contributions_subtitle_zero
- - %1$d postavljena datoteka
- - %1$d postavljene datoteke
-
- - Započeto %1$d postavljanje
- - Započeta %1$d postavljanja
+ - Započinjem postavljanje %1$d datoteke
+ - Započinjem postavljanje %1$d datoteke
+ - Započinjem postavljanje %1$d datoteka
-
+
- %1$d postavljanje
+ - %1$d postavljanja
- %1$d postavljanja
- Ova će slika biti licencirana pod %1$s
+
+ - Ova slika bit će licencirana pod %1$s
+ - Ove će slike biti licencirane pod %1$s
+ - Ove će slike biti licencirane pod %1$s
+
Istraži
Izgled
Opće
@@ -113,10 +114,10 @@
Podrazumijevana licencija
Rabite prethodni naziv i opis
Izgled
- Imenovanje-Dijeli pod istim uvjetima 4.0
- Imenovanje 4.0
- Imenovanje-Dijeli pod istim uvjetima 3.0
- Imenovanje 3.0
+ Imenovanje-Dijeli pod istim uvjetima 4.0
+ Imenovanje 4.0
+ Imenovanje-Dijeli pod istim uvjetima 3.0
+ Imenovanje 3.0
CC0
CC BY-SA 3.0
CC BY 3.0
@@ -168,14 +169,13 @@
Prijavite se na naš beta-kanal na Google Playu i dobijte raniji pristup novim mogućnostima i ispravkama pogrješaka
Kôd za provjeru u 2 koraka
Zaista se želite odjaviti?
- Slika nije uspjela
Potkategorije nisu pronađene
Planina Zao
Ljame
Dugin most
Tulipan
- Welcome (Wikipedija)
- Dobro došli (autorska prava)
+ Welcome (Wikipedija)
+ Dobro došli (autorska prava)
Sidnejska opera
Odustani
Otvori
@@ -269,9 +269,8 @@
Predloži za brisanje
Izbriši
Podatci o suradnici/suradniku
- Statistike
Primljeno zahvala
- Razina
+ Razina %1$d
Došlo je do pogrješke!
Obavijesti Zajedničkoga poslužitelja
Slike
@@ -305,4 +304,5 @@
Mjesto
Suradnica/suradnik
Pogrješka pri postavljanju novoga avatara, molimo Vas, pokušajte ponovno.
+ Potrebno dopuštenje za određivanje trenutačne lokacije za prijedloge kategorija (nije obvezno)
diff --git a/app/src/main/res/values-hrx/strings.xml b/app/src/main/res/values-hrx/strings.xml
index 3cf36b80a..8543ebace 100644
--- a/app/src/main/res/values-hrx/strings.xml
+++ b/app/src/main/res/values-hrx/strings.xml
@@ -4,7 +4,10 @@
* Paul Beppler
-->
- Das Bild weard lizenziert unner %1$s
+
+ - Tas pilt wërt uner %1$s lisensiirt
+ - Ti pilter wëre uner %1$s lisensiirt
+
Wikimedia Commons (Wikimedia Allmend)
Instellunge
Benutzernoome
diff --git a/app/src/main/res/values-hsb/strings.xml b/app/src/main/res/values-hsb/strings.xml
index 2797d27b9..280042991 100644
--- a/app/src/main/res/values-hsb/strings.xml
+++ b/app/src/main/res/values-hsb/strings.xml
@@ -4,7 +4,12 @@
* Michawiki
-->
- Tutón wobraz so pod %1$s licencuje
+
+ - Tutón wobraz so pod %1$s licencuje
+ - Tute wobrazy so pod %1$s licencuje
+ - Tute wobrazy so pod %1$s licencuje
+ - Tute wobrazy so pod %1$s licencuje
+
Wikimedia Commons
Nastajenja
Wužiwarske mjeno
diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml
index a52805873..857fb4c69 100644
--- a/app/src/main/res/values-hu/strings.xml
+++ b/app/src/main/res/values-hu/strings.xml
@@ -18,7 +18,7 @@
-->
Commons Facebook-oldal
- Commons Github forráskód
+ Commons Github forráskód
Commons Logo
Commons weboldal
Küldés
@@ -27,18 +27,14 @@
- %1$d fájl feltöltése folyamatban
- %1$d fájl feltöltése folyamatban
-
- - (%1$d)
- - (%1$d)
-
Feltöltések indítása
- - %d feltöltés feldolgozása
- - %d feltöltés feldolgozás
+ - %1$d feltöltés feldolgozása
+ - %1$d feltöltés feldolgozás
- - %d feltöltés
- - %d feltöltés
+ - %1$d feltöltés
+ - %1$d feltöltés
- Ez a kép %1$s licenc alatt lesz feltöltve
@@ -79,7 +75,7 @@
Feltöltések késleltetése (korlátozott kapcsolat-mód bekapcsolva)
%1$s feltöltve.
Feltöltés megtekintése
- Fájl feltöltése: %s
+ Fájl feltöltése: %1$s
%1$s feltöltése
%1$s feltöltése befejezve
%1$s feltöltése sikertelen
@@ -118,6 +114,7 @@
Beállítások
Regisztráció
Kiemelt képek
+ A \"kiemelt kép\"-eket tapasztalt fényképészek vagy illusztrátorok készítik. A képeket a Wikimedia Commons közössége választja ki a minőségük alapján.
Kategória
Névjegy
A Wikimedia Commons applikáció egy nyílt forráskódú szoftver, amit a Wikimedia-közösség önkéntesei készítettek és tartanak karban. A Wikimédia Alapítvány nem vesz részt az applikáció megalkotásában, fejlesztésében és üzemeltetésében.
@@ -137,10 +134,10 @@
Alapértelmezett licenc
Előző cím és leírás használata
Téma
- Nevezd meg! – Így add tovább! 4.0
- Nevezd meg! 4.0
- Nevezd meg! – Így add tovább! 3.0
- Attribution 3.0
+ Nevezd meg! – Így add tovább! 4.0
+ Nevezd meg! 4.0
+ Nevezd meg! – Így add tovább! 3.0
+ Attribution 3.0
CC0
CC BY-SA 3.0
CC BY 3.0
@@ -197,15 +194,14 @@
Jelentkezz a béta csatornánkra a Google Playen, hogy hamarabb megkapd a hibajavításokat és az új funkciókat
2LH kód
Kilépsz?
- Médiakép sikertelen
Nem található alkategória
Nem található szülő kategória
Zaō-hegy
Lámák
Rainbow Bridge
Tulipán
- Üdvözlünk a Wikipédián
- Üdvözlünk a szerzői jogok világában
+ Üdvözlünk a Wikipédián
+ Üdvözlünk a szerzői jogok világában
Sydney Operaház
Mégse
Megnyitás
@@ -321,11 +317,10 @@
Törlésre jelölés
Törlés
Eredmények
- Statisztikák
Kapott köszönetek
Kiemelt képek
Képek a \"közeli helyek\" segítségével
- %d. szint
+ %1$d. szint
Feltöltött képek
Felhasznált képek
Oszd meg eredményeidet a barátaiddal!
@@ -374,7 +369,7 @@
A helymeghatározás nélkül nem használható ez a funkció.
Ne kérdezd meg többször
Helymeghatározási engedély
- Valami hiba történt, nem sikerült az eredményeid betöltése
+ Valami hiba történt, nem sikerült az eredményeid betöltése
Kampányok megjelenítése
Folyamatban lévő kampányok megjelenítése
Engedélyezd az alkalmazás számára a helyszín lekérését, ha a kamera nem rögzíti azt! Egyes eszközök kamerái nem rögzítik a helyszínt. Közreműködésed hasznosabb, ha ilyen esetekben hagyod, hogy az alkalmazás lekérje és hozzárendelje a helyszínt. Ezt bármikor módosíthatod a Beállításokban
@@ -396,11 +391,11 @@
Nem sikerült kategória ellenőrzés kérése \"%1$s\" számára
Kategória ellenőrzés kérése \"%1$s\" számára
Kész
- Köszönet küldése sikeres
- Köszönet sikeresen elküldve %1$s részére
- Nem sikerült elküldeni %1$s részére a köszönetet
- Köszönet küldése sikertelen
- Köszönet küldése neki:%1$s
+ Köszönet küldése sikeres
+ Köszönet sikeresen elküldve %1$s részére
+ Nem sikerült elküldeni %1$s részére a köszönetet
+ Köszönet küldése sikertelen
+ Köszönet küldése neki:%1$s
Megfelel a szerzői jogvédelmi szabályoknak?
Helyesen van kategorizálva?
Megfelelő a kép?
@@ -425,12 +420,11 @@
Olvasatlanok megtekintése
Hiba történt a képek betöltése során
Kérlek várj…
- A \"kiemelt kép\"-eket tapasztalt fényképészek vagy illusztrátorok készítik. A képeket a Wikimedia Commons közössége választja ki a minőségük alapján.
Ez a funkció lehetővé teszi, hogy \"Köszönöm\" üzenetet küldj annak a felhasználónak, aki hasznos szerkesztést végzett. A kattintható link a Laptörténet oldalon található.
Példák a Commons-ra feltöltött jó képekre
Példák nem feltöltendő képekre
Kép átugrása
- Letöltés sikertelen. Külső tároló írási jog nélkül a letöltés nem működik.
+ Letöltés sikertelen. Külső tároló írási jog nélkül a letöltés nem működik.
EXIF címkék kezelése
Válaszd ki, hogy melyik EXIF elem maradjon meg a feltöltés után
Szerző
@@ -462,7 +456,7 @@
Logó
Azért, mert
Kép megosztása ezen keresztül:
- Még nincs közreműködésed
+ %1$s még nem adott hozzájárulást
Fiók létrehozva!
Szöveg a vágólapra másolva
Értesítés olvasottként megjelölve
@@ -471,7 +465,7 @@
Létezik
Fénykép szükséges
Hely típusa:
- Híd, múzeum, szálloda, stb.
+ Híd, múzeum, szálloda, stb.
A belépés nem sikerült. Kérj új jelszót!
Beállítás háttérképnek
Beállítás háttérképnek. Kérem várjon...
@@ -482,6 +476,7 @@
Korlátozott kapcsolat-mód kikapcsolva. Függőben lévő feltöltések folytatása.
Korlátozott kapcsolat mód
Itt ellenőrizheted a már Commonsba feltöltött képeket.
+ Lehetséges engedély: Jelenlegi hely megszerzése, a kategóriajavaslatok lehetőségéért.
Megjelölés, mint nem feltöltendő
Nem feltöltendő megjelölés visszavonása
Jelentés
@@ -490,7 +485,7 @@
Tartalom jelentése
Kérelem a felhasználó letiltásához
- - %d kép kiválasztva
- - %d kép kiválasztva
+ - %1$d kép kiválasztva
+ - %1$d kép kiválasztva
diff --git a/app/src/main/res/values-ia/strings.xml b/app/src/main/res/values-ia/strings.xml
index 9c631ec28..90c5cbb58 100644
--- a/app/src/main/res/values-ia/strings.xml
+++ b/app/src/main/res/values-ia/strings.xml
@@ -29,18 +29,14 @@
- %1$d file in incargamento
- %1$d files in incargamento
-
- - (%1$d)
- - (%1$d)
-
- Initia incargamentos
+ Initia incargamentos
- - Processa %d incargamento
- - Processa %d incargamentos
+ - Processa %1$d incargamento
+ - Processa %1$d incargamentos
- - %d incargamento
- - %d incargamentos
+ - %1$d incargamento
+ - %1$d incargamentos
- Iste imagine essera licentiate sub %1$s
@@ -134,6 +130,7 @@
Parametros
Inscriber se
Imagines eminente
+ Le imagines eminente es contributiones de photographos e illustratores multo habile que le communitate de Wikimedia Commons ha seligite como alcunes del melior qualitate sur le sito.
Selector personalisate
Categoria
Revision per pares
@@ -150,15 +147,18 @@
Tu non ha ancora incargate alcun photo.
Reprobar
Cancellar
+ Insere nomine de lingua
+ Recercas recente
+ Tote le linguas
Submittente iste imagine, io declara que iste es mi obra proprie, que illo non contine material protegite per derectos de autor ni ‘selfies’, e adhere al <a href=\"https://commons.wikimedia.org/wiki/Commons:Policies_and_guidelines\">politicas de Wikimedia Commons</a>.
Discargar
Licentia predefinite
Usar le titulo e description precedente
Thema
- Attribution-CompartiSimile 4.0
- Attribution 4.0
- Attribution-CompartiSimile 3.0
- Attribution 3.0
+ Attribution-CompartiSimile 4.0
+ Attribution 4.0
+ Attribution-CompartiSimile 3.0
+ Attribution 3.0
Wikimedia Commons alberga le major parte del imagines usate in Wikipedia.
Tu imagines adjuta a educar gente de tote le mundo!
Per favor incarga solmente imagines que tu mesme ha prendite o create:
@@ -216,15 +216,14 @@
Codice 2FA
Codice de verification in e-mail
Vole tu vermente clauder session?
- Imagine multimedial fallite
Necun subcategoria trovate
Necun categoria genitor trovate
Monte Zao
Lamas
Ponte del Arco Iris
Tulipan
- Benvenita: Wikipedia
- Benvenita: derectos de autor
+ Un imagine schematic de un articulo generic de Wikipedia.
+ Un designo de un pila de papiros con le symbolo del derecto de autor barrate.
Opera de Sydney
Cancellar
Aperir
@@ -235,7 +234,7 @@
A proposito
Parametros
Commentario
- Retroaction per GitHub
+ Commentarios per GitHub
Clauder session
Tutorial
Notificationes
@@ -257,6 +256,7 @@
Le processo de incargamento require un accesso a internet active. Per favor verifica tu connexion al rete.
Problemas trovate in le imagine
Per favor, solmente incarga imagines que tu ha prendite tu mesme. Non incarga imagines que tu ha discargate del Internet.
+ Incargamentos
Salveguardar photos prendite in app
Salveguardar le photos prendite con le camera del application sur le immagazinage de tu apparato
Aperir session in tu conto
@@ -328,6 +328,7 @@
Quiz
Es iste imagine bon pro incargar?
Question
+ Io non es secur
Resultato
Si tu continua a incargar imagines que require deletion, tu conto probabilemente essera bannite. Es tu certe que tu vole terminar le questionario?
Plus de %1$s del imagines que tu ha incargate ha essite delite. Si tu continua a incargar imagines que require deletion, tu conto probabilemente essera bannite.\n\nVolerea tu vider le tutorial de novo e postea responder a un questionario pro apprender que typo de imagines tu debe o non debe incargar?
@@ -337,6 +338,7 @@
Un del objectivos de Commons es colliger imagines de qualitate. Pro isto, imagines indistincte non debera esser incargate. Sempre essaya a prender belle photos con un bon illumination.
Imagines que monstra technologia o cultura es multo benvenite sur Commons.
Tu ha %1$s del responsas correcte. Felicitationes!
+ Continuar
Selige un del duo optiones pro responder al question
Session expirate. Per favor reaperi session.
Condivide tu quiz con tu amicos!
@@ -360,13 +362,11 @@
Realisationes
Profilo
Insignias
- Statisticas
Regratiamentos recipite
Imagines eminente
Imagines via “Locos a proximitate”
- Nivello %d
- %s (Nivello %s)
- %s (%s)
+ Nivello %1$d
+ %1$s (Nivello %2$s)
Imagines incargate
Imagines non revertite
Imagines usate
@@ -431,6 +431,8 @@
Termina le:
Monstrar campanias
Vider le campanias in curso
+ Monstrar button de deletion
+ Activar le button “Deler dossier” in le selector personalisate
Permitter al application obtener le localisation in caso que le camera non lo registra. Alcun cameras de apparatos non registra le localisation. In tal casos, permitter al application obtener e attachar le localisation rende tu contribution plus utile. Tu pote cambiar isto a tote momento in le Parametros.
Permitter
Clauder
@@ -455,7 +457,7 @@
Requesta de un controlo de categoria pro %1$s
Facite
Invio de regratiamento: Successo
- Regratiamento correctemente inviate a %1$s
+ Regratiamento inviate a %1$s
Le invio de un regratiamento a %1$s ha fallite
Invio de regratiamento: Fallimento
Invio de regratiamento pro %1$s
@@ -485,15 +487,14 @@
Vider non legites
Un error ha occurrite durante le selection de imagines
Un momento…
- Le imagines eminente es creationes de photographos e illustratores multo habile que le communitate de Wikimedia Commons ha seligite como alcunes del melior qualitate sur le sito.
Le imagines incargate per medio de ‘Locos a proximitate’ es le imagines que es incargate per le discoperta de locos sur le carta.
Iste function permitte a redactores inviar un notification de regratiamento a usatores que face modificationes utile, usante un micre ligamine ‘regratiar’ sur le pagina de historia o de differentias.
- Copiar a medios de communication subsequente
+ Copiar al entratas successive
Copiate
Exemplos de bon imagines a incargar a Commons
Exemplos de imagines que non debe esser incargate
Saltar iste imagine
- Discargamento fallite! Non es possibile discargar le file sin permission de immagazinage externe.
+ Discargamento fallite. Non es possibile discargar le file sin permission de immagazinage externe.
Gerer etiquettas EXIF
Selige qual etiquettas EXIF conservar in files incargate
Autor
@@ -503,11 +504,10 @@
Modello de lente
Numeros de serie
Software
- Accesso al localisation del file multimedial refusate
- Es possibile que nos non potera obtener automaticamente le datos de localisation del imagines que tu incarga. Per favor adde le localisation appropriate pro cata imagine ante de submitter.
Incarga photos a Wikimedia Commons directemente desde tu telephono. Discarga le app de Commons ora: %1$s
Condivider app via…
Information del imagine
+ Non monstrar iste message de novo
Necun categoria trovate
Necun representation trovate
Incargamento cancellate
@@ -560,7 +560,7 @@
Modificar descriptiones e legendas
Condivider imagine via
Tu non ha ancora facite alcun contribution
- %s non ha ancora facite alcun contribution
+ %1$s non ha ancora facite alcun contribution
Conto create!
Texto copiate al area de transferentia
Notification marcate como legite
@@ -613,7 +613,7 @@
5. Colla le wikitexto in le loco appropriate.
6. Modifica le wikitexto pro un positionamento appropriate, si necessari. Pro plus information, lege <a href=\"https://en.wikipedia.org/wiki/Wikipedia:Manual_of_Style/Images#How_to_place_an_image\">isto</a>.
7. Publica le articulo
- Copiar le wikicodice al area de transferentia
+ Copiar le wikitexto al area de transferentia
pausar
reprender
Pausate
@@ -654,6 +654,8 @@
Per favor, selige le categorias appropriate. A differentia del representationes, le categorias es solmente in anglese.
Commons rende tu imagines reusabile e adaptabile per omnes. Vole tu renunciar a tote derectos? Vole tu esser attribuite? Vole tu que le adaptationes usa le mesme licentia?
Representa
+ Etiquetta
+ Description
Licentia del file multimedial
Detalios sur le file multimedial
Vider pagina de categoria
@@ -668,7 +670,7 @@
Monstrar in application cartographic
Modificar position
Le vista in imagine del selector de loco
- \n Le umbra del vista in imagine del selector de loco
+ Le umbra del vista de imagine del selector de loco
Localisation del imagine
Verificar si le localisation es correcte
Etiquetta
@@ -680,7 +682,7 @@
Retro
Benvenite al selector de imagine personalisate
Iste selector te monstra qual imagines tu ha ja incargate a Commons.
- A differentia del imagine al sinistra, le imagine al dextra ha le logo de Commons que indica que illo ha ja essite incargate.\n Tocca e mantene pro un previsualisation del imagine.
+ A differentia del imagine al sinistra, le imagine al dextra ha le logo de Commons que indica que illo ha ja essite incargate.\n\nTocca e mantene pro un previsualisation del imagine.
Genial
Iste imagine ha ja essite incargate a Commons.
Pro rationes technic, le application non pote de maniera digne de fide incargar plus de %1$d imagines al vice. Le limite de incargamento de %1$d ha essite excedite per %2$d.
@@ -694,8 +696,10 @@
Wiki Loves Monuments es un concurso international de photographias de monumentos organisate per Wikimedia
Permission necessari
Le cartas a proximitate debe leger le STATO DEL TELEPHONO pro functionar correctemente
- Contributiones del usator: %s
- Realisationes del usator: %s
+ Activa le servicios de localisation pro monstrar le locos a proximitate.
+ Le accesso al position es necessari pro monstrar locos a proximitate sur le carta.
+ Contributiones del usator: %1$s
+ Realisationes del usator: %1$s
Vider le profilo del usator
Modificar representationes
Modificar categorias
@@ -706,7 +710,7 @@
Le datos de localisation adjuta le redactores wiki a trovar tu imagine, rendente lo multo plus utile.\nTu files recentemente incargate non ha localisation.\nNos suggere que tu activa le localisation un le parametros de tu application de camera.\nGratias pro incargar!
Necun localisation trovate
Proque non adder le loco ubi iste imagine ha essite prendite?\nLe datos de localisation adjuta le redactores wiki a trovar tu imagine, rendente lo multo plus utile.\nGratias!
- Adder localisation
+ Adder loco
Per favor remove de iste e-mail omne information que tu non vole condivider publicamente. In ultra, sia conscie que le adresse de e-mail que tu usa pro publicar, e le nomine e imagine de profilo associate, essera visibile publicamente.
Detalios
Le realisationes es disponibile solmente in le version de production. Per favor consulta le documentation del disveloppator.
@@ -719,8 +723,8 @@
Modello del apparato
Nomine del apparato
Typo de rete
- Gratias pro dar retroaction
- Error durante le invio del retroaction
+ Gratias pro dar commentario
+ Error durante le invio del commentario
Que es tu commentario?
Tu commentario
Marcar como non a incargar
@@ -768,11 +772,11 @@
Vole tu aperir le file KML?
Non poteva salveguardar le file KML.
Non poteva salveguardar le file GPX.
- Salveguarda file KML
- Salveguarda file GPX
+ Salveguardante como file KML…
+ Salveguardante como file GPX…
- - %d imagine seligite
- - %d imagines seligite
+ - %1$d imagine seligite
+ - %1$d imagines seligite
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
@@ -784,7 +788,7 @@
‘%1$s’ se trova in un altere loco.
‘%1$s’ es in un altere loco. Per favor specifica le loco correcte hic infra, e si possibile, indica le latitude e longitude correcte.
Altere problema o information (per favor explica hic infra).
- Tu retroaction apparera sur le sequente pagina wiki: <a href=\"https://commons.wikimedia.org/wiki/Commons:Mobile_app/Feedback\">Commons:Mobile app/Feedback</a>
+ Tu commentario apparera sur le sequente pagina wiki: <a href=\"https://commons.wikimedia.org/wiki/Commons:Mobile_app/Feedback\">Commons:Mobile app/Feedback</a>
Es tu secur de voler cancellar tote le incargamentos?
Cancella tote le incargamentos…
Incargamentos
@@ -808,7 +812,6 @@
Commons
Altere wikis
Usos del file
- Activitate de singule visita web
Conto
Facer disparer le conto
Advertimento concernente le disparition del conto
diff --git a/app/src/main/res/values-id/error.xml b/app/src/main/res/values-id/error.xml
deleted file mode 100644
index 8279fe84f..000000000
--- a/app/src/main/res/values-id/error.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
- Commons mendadak kacau
- Ups. Ada yang tidak beres!
- Beritahu kami apa yang Anda lakukan, lalu kirimkan lewat surel. Informasi Anda membantu kami memperbaikinya!
- Terima kasih!
-
diff --git a/app/src/main/res/values-id/strings.xml b/app/src/main/res/values-id/strings.xml
deleted file mode 100644
index a739449c4..000000000
--- a/app/src/main/res/values-id/strings.xml
+++ /dev/null
@@ -1,113 +0,0 @@
-
-
- Wikimedia Commons
- Pengaturan
- Nama pengguna
- Kata sandi
- Masuk log
- Memasuki log
- Silakan tunggu…
- Berhasil masuk log!
- Masuk log gagal!
- Autentikasi gagal!
- Mulai unggah!
- %1$s terunggah!
- Tekan untuk melihat unggahan Anda
- Memulai unggahan %1$s
- %1$s terunggah!
- Menyelesaikan pengunggahan %1$s
- Mengunggah %1$s gagal
- Tekan untuk melihat
-
- - Mengunggah 1 berkas
- - Mengunggah %1$d berkas
-
- Unggahan saya
- Antrean
- Gagal
- %1$d%% selesai
- Mengunggah
- Dari Galeri
- Ambil foto
- Unggahan saya
- Bagikan
- Buka di Peramban
- Judul
- Deskripsi
- Tidak dapat login - kesalahan pada jaringan
- Tidak dapat masuk log - harap periksa nama pengguna Anda
- Tidak dapat masuk log - harap periksa kata sandi Anda
- Terlalu banyak usaha yang gagal. Harap coba lagi dalam beberapa menit
- Maaf, pengguna ini telah diblokir di Commons
- Gagal masuk log
- Unggah
- Beri nama set ini
- Modifikasi
- Unggah
- Telusuri kategori
- Simpan
-
- - Tidak ada unggahan
- - 1 unggahan
- - %1$d unggahan
-
-
- - Memulai 1 unggahan
- - Memulai %1$d unggahan
-
-
- - 1 unggahan
- - %1$d unggahan
-
- Tidak ada kategori yang cocok dengan %1$s
- Tambahkan kategori agar foto Anda lebih mudah ditemukan di Wikimedia Commons.
-
-Mulai mengetik untuk menambahkan kategori.
-Tekan pesan ini (atau tekan kembali) untuk melewatkan langkah ini.
- Kategori
- Laporan penggunaan
- Kirimkan laporan penggunaan ke Wikimedia untuk membantu kami memperbaiki aplikasi
- Pengaturan
- Tentang
- Perangkat lunak terbuka dirilis di bawah <a href=\"https://github.com/commons-app/apps-android-commons/blob/master/COPYING\">lisensi Apache v2</a>
- Bersumber di <a href=\"https://github.com/commons-app/apps-android-commons\">GitHub</a>. Bug di <a href=\" https://github.com/commons-app/apps-android-commons/issues\">Github</a>.
- <a href=\"https://wikimediafoundation.org/wiki/Privacy_policy/id\">Kebijakan privasi</a>
- Tentang
- Kirim umpan balik (via Surel)
- Kategori yang terakhir digunakan
- Menunggu sinkronisasi pertama…
- Anda belum mengunggah foto apapun.
- Coba lagi
- Batal
- Gambar ini akan diberi lisensi %1$s
- Unduh
- Lisensi
- CC Attribution-ShareAlike 3.0
- CC Attribution 3.0
- CC0
- CC BY-SA 3.0
- CC BY-SA 3.0 (Austria)
- CC BY-SA 3.0 (Jerman)
- CC BY-SA 3.0 (Estonia)
- CC BY-SA 3.0 (Spanyol)
- CC BY-SA 3.0 (Kroasia)
- CC BY-SA 3.0 (Luksemburg)
- CC BY-SA 3.0 (Belanda)
- CC BY-SA 3.0 (Norwegia)
- CC BY-SA 3.0 (Polandia)
- CC BY-SA 3.0 (Rumania)
- CC BY 3.0
- CC Nol
- Sumbangkan gambar-gambar Anda. Bantu hidupkan artikel Wikipedia!
- Gambar di Wikipedia diambil dari Wikimedia Commons.
- Gambar Anda membantu mendidik orang-orang di seluruh dunia
- Hindari materi berhak cipta yang Anda temukan dari internet serta gambar poster, sampul buku, dll.
- Apakah Anda paham?
- Ya!
- Kategori
- Memuat…
- Tidak ada yang dipilih
- Tidak ada keterangan
- Lisensi tidak diketahui
- Segarkan
-
diff --git a/app/src/main/res/values-in/strings.xml b/app/src/main/res/values-in/strings.xml
index 420197fa1..5691a4da9 100644
--- a/app/src/main/res/values-in/strings.xml
+++ b/app/src/main/res/values-in/strings.xml
@@ -25,7 +25,7 @@
-->
Halaman Facebook Commons
- Kode Sumber Commons di Github
+ Kode Sumber Commons di Github
Logo Commons
Situs Web Commons
Keluar dari pemilih lokasi
@@ -45,9 +45,6 @@
- mengunggah %1$d berkas
-
- - (%1$d)
-
Memulai Unggahan
- Memroses %1$d unggahan
@@ -94,7 +91,7 @@
Unggahan dalam antrian (mode sambungan terbatas diaktifkan)
%1$s terunggah!
Tekan untuk melihat unggahan Anda
- Mengunggah berkas: %1$s
+ Mengunggah berkas: %1$s
%1$s terunggah!
Menyelesaikan pengunggahan %1$s
Pengunggaha %1$s gagal
@@ -110,17 +107,20 @@
Ambil foto
Sekitar
Unggahan saya
+ Salin pranala
+ Pranala telah disalin ke papan klip
Bagikan
Lihat halaman berkas
Takarir (Wajib)
Berikan takarir untuk berkas ini
Deskripsi
Takarir
- Tidak dapat login - kesalahan pada jaringan
+ Tidak dapat login - kesalahan pada jaringan
Terlalu banyak percobaan masuk yang gagal. Harap coba lagi dalam beberapa menit
Maaf, pengguna ini telah diblokir di Commons
Anda harus memberikan kode otentikasi dua faktor milik Anda
- Gagal masuk log
+ Kode verifikasi masuk log telah dikirim ke alamat surel Anda. Mohon berikan kode untuk masuk log.
+ Gagal masuk log
Unggah
Beri nama set ini
Modifikasi
@@ -140,6 +140,7 @@
Pengaturan
Mendaftar
Gambar Pilihan
+ Gambar pilihan adalah gambar dari fotografer dan ilustrator berkemampuan tinggi yang komunitas Wikimedia Commons telah pilih sebagai salah satu gambar dengan kualitas tertinggi di situs ini.
Pemilih Kustom
Kategori
Ulasan Peer
@@ -161,10 +162,10 @@
Lisensi standar
Gunakan judul dan deskripsi sebelumnya
Tema
- Atribusi-BerbagiSerupa 4.0
- Atribusi 4.0
- Atribusi-BerbagiSerupa 3.0
- Atribusi 3.0
+ Atribusi-BerbagiSerupa 4.0
+ Atribusi 4.0
+ Atribusi-BerbagiSerupa 3.0
+ Atribusi 3.0
CC0
CC BY-SA 3.0
CC BY 3.0
@@ -179,7 +180,7 @@
Mohon JANGAN diunggah:
Foto narsis atau foto teman Anda
Gambar yang Anda unduh dari Internet
- Cuplikan layar suatu aplikasi
+ Cuplikan layar suatu aplikasi tidak bebas
Contoh unggahan:
Judul: Gedung Opera Sydney
Deskripsi: Gedung Opera Sydney yang dilihat dari seberang teluk
@@ -200,7 +201,7 @@
Lisensi tidak diketahui
Segarkan
Meminta Izin Akses Penyimpanan
- Perlu Izin: Membaca penyimpanan eksternal. Tanpa hal ini aplikasi tidak dapat mengakses galeri Anda.
+ Perlu Izin: Membaca penyimpanan eksternal. Tanpa izin ini aplikasi tidak dapat mengakses galeri Anda.
Perlu Izin: Menulis penyimpanan eksternal. Tanpa hal ini aplikasi tidak dapat mengakses kamera/galeri.
Meminta Izin Lokasi
OKE
@@ -223,15 +224,14 @@
Gabung ke kanal beta kami di Google Play dan dapatkan akses lebih dulu ke fitur-fitur dan perbaikan bug
Kode O2F
Apakah Anda benar-benar ingin keluar?
- Media Gambar Gagal
Subkategori tidak ditemukan
Tidak ditemukan kategori induk
Gunung Zao
Llama
Jembatan Pelangi
Tulip
- Selamat datang di Wikipedia
- Selamat Datang Hak Cipta
+ Selamat datang di Wikipedia
+ Selamat Datang Hak Cipta
Gedung opera Sydney
Batal
Buka
@@ -351,7 +351,7 @@
Apakah tangkapan layar ini OKE untuk diunggah?
Bagikan Aplikasi
Putar
- Galat saat mengambil tempat terdekat.
+ Tidak dapat memuat tempat-tempat terdekat.
Tidak ada gambar di area ini
Tidak ditemukan tempat yang dekat
Galat saat mengambil monumen terdekat.
@@ -364,11 +364,10 @@
Hapus
Pencapaian
Profil
- Statistik
Ucapan terima kasih diterima
Gambar Pilihan
Gambar via \"Tempat di Sekitar\"
- Tingkat
+ Tingkat %1$d
Gambar Diunggah
Gambar Tidak Dikembalikan
Gambar Digunakan
@@ -410,7 +409,7 @@
Saya menyadari itu buruk untuk privasi saya
Saya berubah pikiran, saya tidak ingin itu terlihat publik lagi
Maaf gambar ini tidak menarik untuk ensiklopedia
- Diunggah saya sendiri pada %1$s, digunakan dalam %2$d artikel.
+ Diunggah saya sendiri pada %1$s, digunakan paling tidak dalam %2$d artikel.
Unggah media pertama Anda dengan mengetuk tombol.
Tidak ada Kategori yang Dipilih
Gambar tanpa kategori jarang dapat digunakan. Apakah Anda yakin ingin mengirim tanpa memilih kategori?
@@ -435,7 +434,7 @@
Izinkan
Tutup
Anda tidak akan melihat kampanye ini lagi. Namun, Anda bisa mengaktifkan kembali pemberitahuan ini di Pengaturan jika diinginkan.
- Fungsi ini membutuhkan hubungan jaringan, tolong periksa pengaturan jaringan Anda.
+ Fungsi ini memerlukan hubungan jaringan. Tolong periksa pengaturan jaringan Anda.
Terjadi masalah saat memproses gambar. Harap mengulang lagi.
Dapatkan token untuk menyunting
Menambahkan templat untuk pemeriksaan kategori
@@ -447,11 +446,11 @@
Tidak bisa meminta pemeriksaan kategori untuk %1$s
Meminta pemeriksaan kategori untuk %1$s
Selesai
- Mengirimkan Terima Kasih: Berhasil
- Berhasil mengirimkan terima kasih kepada %1$s
- Gagal mengirimkan terima kasih kepada %1$s
- Mengirimkan Terima Kasih: Gagal
- Mengirimkan Terima Kasih kepada %1$s
+ Mengirimkan Terima Kasih: Berhasil
+ Berhasil mengirimkan terima kasih kepada %1$s
+ Gagal mengirimkan terima kasih kepada %1$s
+ Mengirimkan Terima Kasih: Gagal
+ Mengirimkan Terima Kasih kepada %1$s
Apakah ini memenuhi aturan hak cipta?
Apakah ini dikategorikan dengan tepat?
Apakah ini sesuai dengan cakupan?
@@ -477,15 +476,14 @@
Lihat yang belum terbaca
Terjadi kesalahan ketika memilih gambar
Silakan tunggu…
- Gambar pilihan adalah gambar dari fotografer dan ilustrator berkemampuan tinggi yang komunitas Wikimedia Commons telah pilih sebagai salah satu gambar dengan kualitas tertinggi di situs ini.
Gambar Diunggah via Tempat sekitar adalah gambar yang diunggah dengan menemukan tempat di peta.
Fitur ini memungkinkan penyunting mengirimkan sebuah pemberitahuan Terima kasih kepada pengguna yang membuat suntingan yang berguna – dengan menggunakan tautan terima kasih kecil di halaman riwayat atau \'\'diff\'\'.
- Salin ke media berikutnya
+ Salin ke media berikutnya
Berhasil disalin
Contoh gambar yang sebaiknya diunggah ke Commons
Contoh gambar yang sebaiknya tidak diunggah
Lewati gambar ini
- Pengunduhan Gagal!!. Kami tidak dapat mengunduh berkas ini tanpa perizinan penyimpanan eksternal.
+ Pengunduhan Gagal!!. Kami tidak dapat mengunduh berkas ini tanpa perizinan penyimpanan eksternal.
Mengelola Tag EXIF
Pilih tag EXIF yang dipertahankan ketika mengunggah
Pembuat
@@ -495,8 +493,6 @@
Model lensa
Nomor seri
Perangkat lunak
- Akses lokasi media ditolak
- Kami mungkin tidak dapat memperoleh data lokasi secara otomatis dari gambar yang Anda unggah. Harap tambahkan lokasi yang sesuai untuk setiap gambar sebelum mengirimkannya
Mengunggah foto ke Wikimedia Commons secara langsung dari telepon Anda. Unduh aplikasi Commons sekarang: %1$s
Bagikan aplikasi lewat...
Info Gambar
@@ -543,12 +539,12 @@
Tidak bisa menambahkan koordinat.
Tidak bisa menambahkan deskripsi.
Tidak bisa menambahkan takarir.
- Tidak bisa mendapatkan koordinat.
+ Koordinat gambar tidak diperbarui
Tidak bisa memperoleh deskripsi.
Sunting deskripsi dan takarir
Bagikan gambar melalui
Anda belum membuat kontribusi apapun
- %s belum membuat kontribusi apapun untuk sekarang
+ %1$s belum membuat kontribusi apapun untuk sekarang
Akun dibuat!
Teks disalin ke papan klip
Notifikasi ditandai sudah dibaca
@@ -557,8 +553,8 @@
Ada
Perlu foto
Jenis tempat:
- Jembatas, museum, hotel, dll.
- Terjadi kesalahan ketika masuk log, Anda perlu mengubah kata sandi Anda !!
+ Jembatas, museum, hotel, dll.
+ Terjadi kesalahan ketika masuk log. Anda perlu mengatur ulang kata sandi Anda !!
MEDIA
KELAS ANAK
KELAS INDUK
@@ -578,7 +574,7 @@
Untuk hasil terbaik, pilih mode Akurasi Tinggi.
Nyalakan lokasi?
Tempat sekitar perlu lokasi yang diaktifkan agar bekerja dengan benar
- Anda perlu memberikan akses ke lokasi Anda saat ini untuk mengatur lokasi secara otomatis.
+ Anda perlu memberikan izin lokasi Anda saat ini untuk mengatur lokasi secara otomatis.
Apakah Anda menangkap kedua gambar ini di tempat yang sama? Apakah Anda ingin menggunakan lintang/bujur dari gambar yang di kanan?
Muat Lebih Banyak
Tempat tidak ditemukan, coba ubah kriteria pencarian Anda.
@@ -596,7 +592,7 @@
5. Salin teks wiki ke tempat yang sesuai.
6. Sunting teks wiki untuk menyesuaikan posisinya, apabila perlu. Untuk informasi lebih lanjut, lihat <a href=\"https://en.wikipedia.org/wiki/Wikipedia:Manual_of_Style/Images#How_to_place_an_image\">here</a>.
7. Terbitkan artikel
- Salin kode wiki ke papan klip
+ Salin kode wiki ke papan klip
jeda
lanjut
Dijeda
@@ -663,7 +659,7 @@
Kembali
Selamat datang di Pemilih Gambar Kustom
Alat pemilih ini menunjukkan gambar mana yang sudah Anda unggah ke Commons.
- Berbeda dengan gambar di sebelah kiri, gambar di sebelah kanan memiliki logo Commons yang menandakan gambarnya sudah diunggah.\n Sentuh dan tahan untuk pratinjau gambar.
+ Berbeda dengan gambar di sebelah kiri, gambar di sebelah kanan memiliki logo Commons yang menandakan gambarnya sudah diunggah.\n Sentuh dan tahan untuk pratinjau gambar.
Bagus
Gambar ini sudah diunggah di Commons.
Karena alasan teknis, aplikasi tidak dapat mengunggah lebih dari %1$d gambar sekaligus. Batas unggahan %1$d telah terlampaui sebesar %2$d.
@@ -679,9 +675,10 @@
Wiki Loves Monuments adalah lomba foto internasional untuk monumen yang diselenggarakan oleh Wikimedia
Membutuhkan Izin
Peta Sekitar harus membaca STATUS TELEPON untuk berfungsi dengan benar
- Kontribusi Pengguna: %s
- Pencapaian Pengguna: %s
- Lihat halaman pengguna
+ Pilihan Izin: Lokasi saat ini untuk saran kategori
+ Kontribusi Pengguna: %1$s
+ Pencapaian Pengguna: %1$s
+ Lihat profil pengguna
Sunting penggambaran
Sunting kategori
Opsi Lanjutan
@@ -691,7 +688,7 @@
Data lokasi membantu penyunting Wiki menemukan gambar Anda, sehingga menjadi lebih berguna.\nUnggahan terbaru Anda tidak punya informasi lokasi.\nKami menyarankan Anda menyalakan lokasi di setelan aplikasi kamera Anda.\nTerima kasih karena telah mengunggah!
Lokasi tidak ditemukan
Bagaimana jika Anda menambahkan tempat di mana gambar ini diambil?\nData lokasi membantu para penyunting Wiki menemukan gambar Anda, sehingga ia menjadi lebih berguna.\nTerima kasih!
- Tambahkan lokasi
+ Tambahkan lokasi
Silakan hapus informasi yang menurut Anda tidak layak disebarkan ke masyarakat umum dari surel ini. Selain itu, perlu diperhatikan bahwa alamat surel yang Anda unggah, beserta foto penggunanya, akan dapat dilihat oleh masyarakat umum.
Rincian
Silakan unggah gambar yang Anda buat sendiri. Pengunggah gambar yang melanggar hak cipta akan diblokir. Aturan ini juga berlaku untuk beta. Terima kasih telah menguji aplikasi ini!
@@ -710,8 +707,8 @@
Hapus tanda tidak untuk diunggah
Tandai sebagai bukan untuk diunggah
Tandai sebagai untuk diunggah
- Tampilkan gambar yang sudah ditindaklanjuti
- Sembunyikan gambar yang sudah ditindaklanjuti
+ Tampilkan gambar yang sudah ditindaklanjuti
+ Sembunyikan gambar yang sudah ditindaklanjuti
Tidak ada lagi gambar ditemukan
Gambar ini sudah diunggah
Tidak dapat memilih gambar ini untuk diunggah
@@ -732,7 +729,7 @@
Izin diperlukan untuk fungsionalitas ini
Pelajari cara menulis deskripsi yang berguna
Pelajari cara menulis takarir yang berguna
- Lihat pencapaian Anda
+ Lihat pencapaian Anda
Edit Gambar
Edit Lokasi
Lokasi diperbarui!
@@ -741,7 +738,7 @@
Lokasi membuat gambar lebih berguna dan mudah ditemukan. Apakah Anda benar-benar ingin menghapus lokasi dari gambar ini?
Lokasi dihapus!
- - %d gambar dipilih
+ - %1$d gambar dipilih
Bicara
Membatalkan semua unggahan...
diff --git a/app/src/main/res/values-io/strings.xml b/app/src/main/res/values-io/strings.xml
index b9f0c8137..392a6746b 100644
--- a/app/src/main/res/values-io/strings.xml
+++ b/app/src/main/res/values-io/strings.xml
@@ -5,7 +5,7 @@
-->
Pagino di Commons che Facebook
- Fonto-kodexo di Commons che Github
+ Fonto-kodexo di Commons che Github
Logotipo* di Commons
ret-situo di Commons
Ekirar la lokizo-selektero
@@ -29,18 +29,14 @@
- %1$d sendanta arkivo
- %1$d sendanta arkivi
-
- - (%1$d)
- - (%1$d)
-
Komencar sendaji
- - Karganta %d arkivo
- - Karganta %d arkivi
+ - Karganta %1$d arkivo
+ - Karganta %1$d arkivi
- - %d arkivo sendita
- - %d arkivi sendita
+ - %1$d arkivo sendita
+ - %1$d arkivi sendita
- La licenco di ca imajo esos %1$s
@@ -84,7 +80,7 @@
Sendajo ajornata (modulo \"limitizita konekto\" aktiva)
%1$s sendesis!
Kliktez por vidar vua sendajo
- Sendanta arkivo: %s
+ Sendanta arkivo: %1$s
%1$s karganta
Finis sendar %1$s
Faliis sendar %1$s
@@ -134,6 +130,7 @@
Preferaji
Enirez
Remarkinda imaji
+ Imaji saliigita (Angle: \'\'featured\'\') esas fotografuri facita da multe habila fotografisti ed ilustristi, qui selektesis da la komunitato di Wikimedia kom apartenanta a la maxim bona imaji de la retosituo.
Personalizita selektilo
Kategorio
Atencoza revizo
@@ -155,10 +152,10 @@
Licenco \'\'default\'\'
Uzez antea titulo e deskripto
Temo
- Atributo-ShareAlike 4.0
- Atributo 4.0
- Atributo-ShareAlike 3.0
- Atributo 3.0
+ Atributo-ShareAlike 4.0
+ Atributo 4.0
+ Atributo-ShareAlike 3.0
+ Atributo 3.0
CC BY 3.0
CC BY-SA 4.0
CC BY 4.0
@@ -209,6 +206,7 @@
Deskripto
Diskuto
Autoro
+ Adkarganto
Dato sendita
Licenco
Koordinati
@@ -218,15 +216,14 @@
Kodexo 2FA
Kodexo sendita ad e-postal adreso
Ka vu deziras ekirar?
- Faliis montrar imajo
Nula subkategorio trovesis
Nula kategorio precipua trovesis
Monto Zao
Lamao
Pluv-arko ponto
Tulipo
- Bonveno a Wikipedio
- Autoroyuro dil \'Bonveno\'-mesajo
+ Bonveno a Wikipedio
+ Autoroyuro dil \'Bonveno\'-mesajo
Opero-domo di Sydney
Nuligar
Apertar
@@ -362,13 +359,11 @@
Sucesi
Profilo
Insigni
- Statistiko
Danki recevita
Remarkinda imaji
Imaji tra \"Loki Vicina\"
- Nivelo %d
- %s (Nivelo %s)
- %s (%s)
+ Nivelo %1$d
+ %1$s (Nivelo %2$s)
Imaji sendita
Imaji ne reversionita
Imaji uzita
@@ -411,7 +406,7 @@
Me konstatis ke ol esas mala por mea privateso
Me chanjis mea ideo: me ne pluse deziras ke ol esos publike videbla
Pardonez! Ca imajo ne esas interesanta por ula enciklopedio
- Adjuntita da me, che %1$s, uzita en %2$d artiklo/artikli.
+ Adjuntita da me che %1$s; uzita en adminime %2$d artiklo/artikli.
Bonveno a Commons!\n\nSendez vua unesma arkivo kliktanta sur butono \"adjuntez\" (\'\'add\'\').
Nula kategorio selektita
Imaji sen kategorii rare esas uzebla. Ka vu fakte deziras sendar ol sen selektar irga kategorio?
@@ -428,7 +423,7 @@
Ne pluse demandez to
Demandar lokala permiso
Demandez lokala permiso, kande bezonata por uzar karto montranta proximeso.
- Ulu faliis, ni ne povis montrar vua sucesi
+ Ulu faliis, ni ne povis montrar vua sucesi
Vu facis plu multa kontributaji, e nia kalkulo-utensilo ne povis kalkular li. To esis la maxim importanta suceso.
Finas la:
Montrez kampanii
@@ -437,11 +432,13 @@
Permisar
Eskartar
Voluntez kapabligar registrago di lokizo en \'\'Settings\'\', e probez itere.\n\nNoto: l\'arkivo sendanta povas ne havar informo pri lokizo, se l\'\'\'app\'\' ne povas rekuperar l\'informo pri lokizo en kurta intervalo.
+ La kamero en l\'utensilo bezonas permiso por adjuntar ca informo en imaji, se l\'informo ne esas disponebla che EXIF. Voluntez permisar ke l\'\'\'app\'\' acesez vua lokizo, e probez itere.\n\nAtencez: Esas posibla ke l\'imajo sendonta ne havos informo rekuperebla pri lokizo, se l\'\'\'app\'\' ne povos rekuperor ol pos kurta intervalo.
La programo \'\'app\'\' ne enrejistros informo pri lokizo en la fotografuri pro manko di permisi
Sen kapabligar GPS, l\'enrejistro di la lokizo en la fotografuri ne facesas.
Uzez selektilo di fotografuri segun dokumenti
La nova funciono \'\'Android photo picker\'\' povas perdar informo pri lokizo. Kapabligez ol, se vu semblas uzar ol.
Deskapabliganta ol povos deskuplar la nova funciono \'\'Android photo picker\'\'. Posible perdos informo pri lokizo.
+ Vu ne pluse vidos ta kampanii. Tamen, vu povos itere kapabligar ca avizo en Ajusti (\'\'Settings\'\'), se vu deziros.
Ca funciono bezonas ligilo ad interreto. Verifikez vua ajusti pri konekti.
Eventis eroro dum procesado dil imajo. Voluntez probar ol itere!
Kaptanta \'\'token\'\' por redaktar.
@@ -454,11 +451,11 @@
Ne povis demandar verifiko di kategorio por %1$s
Demandanta verifiko di kategorio por %1$s
Facita
- Sendanta danko: Suceso
- Danko sendita sucese a %1$s
- Faliis pri sendar danko a %1$s
- Sendanta danko: Falio
- Sendanta danko a %1$s
+ Sendanta danko: Suceso
+ Danko sendita sucese a %1$s
+ Faliis pri sendar danko a %1$s
+ Sendanta danko: Falio
+ Sendanta danko a %1$s
Ka to obedias la reguli pri autoroyuro?
Ka lua kategorio esas korekta?
Ka to apartenas al skopo dil projeto?
@@ -485,15 +482,14 @@
Vidar ne-lektata
Eventis eroro dum selekto di imaji
Vartez...
- Imaji saliigita (Angle: \'\'featured\'\') esas fotografuri facita da multe habila fotografisti ed ilustristi, qui selektesis da la komunitato di Wikimedia kom apartenanta a la maxim bona imaji de la retosituo.
Imaji sendita uzanta resurso \'\'Nearby places\'\' esas imaji sendita pos deskovro di loki en la mapo.
Ca utensilo posibligas editeri sendar \'\'danko\'\' ad uzeri qui facis utila redakturi - per sendo di mikra ligilo \"danko\" che historio-pagino o pagino pri diferi.
- Kopiar a sequanta enmagazinigo-moyeno
+ Kopiar a sequanta enmagazinigo-moyeno
Kopiita
Exempli pri bona imaji por sendar a Commons
Exempli pri imaji por NE SENDAR
Saltez ca imajo
- Descharjo faliis!! Ni ne povis descharjar l\'arkivo sen permiso pri extera konservo.
+ Descharjo faliis!! Ni ne povis descharjar l\'arkivo sen permiso pri extera konservo.
Administrar etiketi EXIF
Dum sendo di arkivi, selektez quala etiketi EXIF devas mantenesar
Autoro
@@ -503,8 +499,6 @@
Modelo di lenso
Serio-nombro
Software
- Aceso ad enmagazinigo-moyeno ne permisita
- Posible ni ne povos obtenar automatale datumi pri lokizi dil imaji quin vu sendis. Voluntez furnisar sata lokizo di irga fotografuro, ante sendar ol.
Sendez fotografuri direte de vua smartfono a Wikimedia Commons. Descharjez l\'\'\'app\'\' nun: %1$s
Partigar utensilo \'\'app\'\' per...
Informo pri imajo
@@ -560,7 +554,7 @@
Redaktar deskripturi ed informo-texti
Partigar imajo uzanta
Vu ankore ne facis kontributaji
- %s ankore ne facis irga kontributado
+ %1$s ankore ne facis irga kontributado
Konto kreesis!
Texto kopiita a \'\'clipboard\'\'
Mesajo indikita kom \'lektita\'
@@ -569,11 +563,13 @@
Existas
Bezonas fotografuro
Tipo di lokizo:
- Ponto, muzeo, hotelo, edc.
+ Ponto, muzeo, hotelo, edc.
Irgu faliis dum \'\'log in\'\'. Vu mustos ridefinar vua pasovorto!!
\'\'MEDIA\'\'
SUBKLASI
KLASI PLU ABSTRAKTA
+ SUB-KATEGORII
+ PRECIPUA KATEGORII
Loko proxima trovesis
Ka ca imaji apartenas a %1$s?
Ka to esas imajo di %1$s?
@@ -611,7 +607,7 @@
5. Kopiez la texto wiki che adequata loko.
6. Se bezonata, redaktez la texto wiki por adequata pozado. Por plusa informo, videz <a href=\"https://en.wikipedia.org/wiki/Wikipedia:Manual_of_Style/Images#How_to_place_an_image\">hike</a>.
Publikigar l\'artiklo
- Kopiar wikikodexo a transfero-areo di la komputatoro
+ Kopiar wikikodexo a transfero-areo di la komputatoro
pauzar
durigar
Pauzita
@@ -637,19 +633,26 @@
Uzita
Mea rango
Kapabligesis por uzar kun limitizita konekti!
+ Posibleso pri uzo kun limitizita konekto deskapabligita. La sendo di arkivi rikomencos nun.
Modo por limitizita retoligilo
Imaji di qualeso
+ Imaji kun qualeso esas diagrami o fotografuri qui havas qualesi (maxim-multa-kaze teknikala) ed esas valoroza por projeti de Wikimedia
Duriganta sendajo...
Pauzanta sendajo...
Nuliganta sendajo...
Cesar kargajo
+ Vu kapabligesis l\'uzo di limitizita konekto. Omna senduri pauzesis e durigos nur kande vu deskapabligos ta uzo.
Kapabligesis por uzar limitizita konekti.
Voluntez skribar kurta titulo deskriptanta quon vua imajo montras. En la deskripto, explikez pro quo la fotografuro esas interesanta, tipala o rara, ed explikez la kuntexto, videbla o ne. Skriptez tan exakta kam posibla.
+ Voluntez trovar e selektar omna konceptaji quan ca imajo reprezentas. Esez plu preciza kam vu povas. Se ta imajo montras diversa kozi, selektez precize omna ek li. Ne uzez nepreciza deskripturi, se specifika deskripturi existas.
+ Voluntez selektar la kategorii konvenanta. Diferante de deskripturi, kategorii nur existas en Angla linguo.
+ En Commons, vua imaji povos riuzesar ed adaptesar da omni. Ka vu deziras renuncar omna autoroyuri? Ka vu deziras ke l\'imajo atribuesos a vu? Ka vu deziras adapti por uzar la sama licenco?
Montras
Licencizo di \'\'media\'\'
Detali pri \'\'media\'\'
Vidar kategorio-pagino
Vidar pagino dil arkivo
+ Idiomo di vua interfacio
Removar titulo e deskripto
Lektez pluse
En omna idiomi
@@ -659,7 +662,7 @@
Montrar en l\'utensilo \'\'app\'\' di mapo
Aktualigar lokizo
Vidado dil imajo de la selektilo di lokizo
- L\'ombro di la vidado dil imajo de la selektilo di lokizo
+ L\'ombro di la vidado dil imajo de la selektilo di lokizo
Lokizo dil imajo
Verifikez se la lokizo esas korekta
Etiketo
@@ -670,7 +673,11 @@
Facita
Retroirar
Bonveno a personalizita selektilo di imaji
+ Ica selektilo montras quala imaji vu ja sendis a Commons.
+ Diferanta dil imajo adsinistre, l\'imajo addextre havas la logotipö Commons, qua indikas ke ol ja sendesis. \n Kliktez e mantenez por previdado dil imajo.
Ecelanta
+ Ca imajo ja sendesis a Commons.
+ Por teknikala motivi, l\'utensilo \'\'app\'\' ne povas fidinde sendar plua kam %1$d pikturi samatempe. La limito %1$d superesis per %2$d.
Eskartar
Maximo: %1$d
Eroro: Limito pri sendajo transpasita
@@ -681,18 +688,25 @@
\'\'Wiki Loves Monuments\'\' esas internaciona konkurso pri fotografado di monumenti, organizita da Wikimedia
Bezonas permiso
Mapi di vicina loki mustas lektar la STANDO DI TELEFONO, por funcionar korekte
- Kontributadi dil uzero: %s
- Sucesi dil uzero: %s
+ Kontributadi dil uzero: %1$s
+ Sucesi dil uzero: %1$s
Vidar profilo dil uzero
Redaktar deskripturi
Redaktar kategorii
Progresiva selektaji (advanced options)
+ Vu povas ajustar la demando \"Vicini\" (\'\'Nearby\'\'). Se erori aparos, riadjustez ed aplikez.
Aplikar
Restaurar
+ Datumi pri lokizo helpas editeri di Wiki trovar vua imajo, do ol divenas plu uzebla.\nL\'imaji quin vu sendis recente ne mencionas lokizo.\nNi sugestas ke vu kapabligez lokizo en l\'ajusti di vua kamero.\nDanko por sendar imaji!
Nula lokizo trovita
Ka vu deziras informar la loko de ube vu obtenis ca imajo?\nInformo pri la lokizo helpos editeri trovar vua imajo, do ol divenos plu utila.\nDanko!
- Adjuntez lokizo
+ Adjuntez lokizo
+ Voluntez removar de ca e-postala mesajo irga informo quan vu ne deziras divenar publika. Anke konciez ke vua e-postal-adreso quan vu esas uzanta, vua nomo e l\'imajo asociita a vu divenos publike videbla.
Detali
+ Sucesi nur esas disponebla en la definitiva versiono. Voluntez verifikar la dokumentigo pri developo.
+ La klasifiko-tabelo nur esas disponebla en la definitiva versiono. Voluntez verifikar la dokumentigo pri developo.
+ Voluntez sendar nur pikturi facita da vu. Senderi di imaji kun autoroyuro ne libera blokusesos. To aplikesas anke por probi \'\'beta\'\'. Danko por probar l\'utensilo \'\'app\'\'!
+ Voluntez deskapabligar irga informo quan vu ne deziras partigar publike.
nivelo di API
versiono di Android
Fabrikanto dil aparato
@@ -706,6 +720,9 @@
Indikez por ne sendar ol
Itere indikez por sendar ol
Indikanta ke ol ne sendesos
+ Indikita kom por ne sendar
+ Montrar imaji ja traktita
+ Celanta imaji ja traktita
Ne trovesis plusa imaji
Ca imajo ja sendesis
Ne povis selektar ca imajo por sendar (\'\'upload\'\')
@@ -720,11 +737,15 @@
Demandar blokuso di ca uzero
Bonveno a selekto di Modo \"tota-skreno\"
Uzez du fingri por augmentar o diminutar \'\'zoom\'\'.
+ Glitez rapide e longe por facar lo sequanta: \n- Sinistre/Dextre: Irar al antea/nexta\n- Adsupre: Selektar\n- Adinfre: Indikez kom ne por sendar.
+ Por establisar l\'avataro di vua klasifiko-tabelo, kliktez \"Uzar kom avataro\" en la 3-punti menuo de irga imajo.
Koordinati ne esas l\'exakta, tamen l\'individuo qua sendis ca imajo kredas ke la koordinati quin lu informis esas suficante proxima.
+ Permiso pri enmagazinigado neaceptata
Ne povis partigar ca arkivo
+ Uzar la funcionado bezonas permisi
Savez quale skribar utila deskripto
Savez quale skribar utila etiketo
- Videz vua sucesi
+ Vidar vua sucesi
Modifikar imajo
Aktualigar lokizo
Lokizo aktualigita!
@@ -735,19 +756,30 @@
Dankar l\'autoro
Eroro sendanta danki al autoro.
La tempo-quanto por vua \'\'log in\'\' finis. Voluntez itere enirar.
+ Nula utensilo \'\'app\'\' disponebla por apertar arkivi GPX
Konservo sucesoza di arkivo
- Ka vu deziras apertar arkivo GPX?
- Ka vu deziras apartar l\'arkivo KML?
- Faliis pri konservar arkivo KML.
- Faliis pri konservar arkivo GPX.
- Konservanta arqkivo KML
- Konservanta arkivo GPX
+ Ka vu deziras apertar arkivo GPX?
+ Ka vu deziras apartar l\'arkivo KML?
+ Faliis pri konservar arkivo KML.
+ Faliis pri konservar arkivo GPX.
+ Konservanta arqkivo KML
+ Konservanta arkivo GPX
- - %d imajo selektita
- - %d imaji selektita
+ - %1$d imajo selektita
+ - %1$d imaji selektita
+ Savez ke omna imaji, kande sendesas kune, recevas la sama kategorii, e deskripturi. Se ta imaji ne havas la sama deskripti e kategorii, voluntez facar diversa sendaji separata.
+ Noto pri multopla sendado di imaji
+ Informez Wikipedio pri problemo en ca temo
+ Voluntez facar kelka komenti
Diskuto
Dicez irgu pri l\'arkivo \'%1$s\'. Ol esos videbla publike.
+ \'%1$s\' ne pluse existas, nula imajo povos rekuperesar de ol.
+ \'%1$s\' esas en diferanta loko.
+ \'%1$s\' esas en diferanta loko. Voluntez mencionar la korekta loko adinfre e, se posibla, skribez la korekta latitudo e longitudo.
+ Altra problemo od informo (voluntez explikar adinfre).
+ Vua retrokomento publikigesis che sequanta pagino wiki: \'\'<a href=\"https://commons.wikimedia.org/wiki/Commons:Mobile_app/Feedback\">Commons:Mobile app/Feedback</a>\'\'
+ Ka vu fakte deziras interuptar omna sendi?
Extinganta la tota sendaji...
Arkivi sendita
Vartanta
@@ -764,12 +796,12 @@
Faliis trovar quale rekuperar dokumentaro kun \'\'bucket ID\'\' %1$d
Ankore ne existas fotografuro pr ta loko, facez fotografuro!
Ja existas imajo pri ta loko.
+ Verifikanta se ta loko ja havas imajo.
Eroro dum kargado
Nula uzo trovesis
Commons
Altra wiki
Uzi dil arkivo
- SingleWebViewActivity
Konto
Efacar konto
Avizo pri efaco di konto
@@ -777,6 +809,9 @@
Deskripto-texto
Deskripto-texto kopiita a \'\'clipboard\'\'
Gratuli! Omna imaji en ca albumo sive sendesis, sive indikesis por ne sendar.
+ Montrez en \'\'Explore\'\'
+ Montrez en Proxima (\'\'Nearby\'\')
Kreesis e sendesis da: %1$s
Kreita da %1$s e sendita da %2$s
+ Indikita por Efaco
diff --git a/app/src/main/res/values-is/strings.xml b/app/src/main/res/values-is/strings.xml
index 427e3cec3..a0c0b7044 100644
--- a/app/src/main/res/values-is/strings.xml
+++ b/app/src/main/res/values-is/strings.xml
@@ -5,7 +5,7 @@
-->
Commons Facebook-síðan
- Grunnkóði Commons á Github
+ Grunnkóði Commons á Github
Táknmerki Commons
Commons vefsvæðið
Hætta í staðsetningarveljara
@@ -29,18 +29,14 @@
- %1$d skrá að sendast inn
- %1$d skrár að sendast inn
-
- - (%1$d)
- - (%1$d)
-
Byrja innsendingar
- - Meðhöndla %d innsendingu
- - Meðhöndla %d innsendingar
+ - Meðhöndla %1$d innsendingu
+ - Meðhöndla %1$d innsendingar
- - %d innsending
- - %d innsendingar
+ - %1$d innsending
+ - %1$d innsendingar
- Þessi mynd verður birt með %1$s notkunarleyfi
@@ -80,7 +76,7 @@
Innsending í bið (hamur fyrir takmarkaðar tengingar er virkur)
%1$s var sent inn!
Bankaðu til að skoða sem þú ert að senda inn
- Sendi inn skrá: %s
+ Sendi inn skrá: %1$s
Verið er að senda %1$s inn
Lýk innsendingu á %1$s
Mistókst að senda inn %1$s
@@ -126,6 +122,7 @@
Stillingar
Nýskrá
Áberandi myndir
+ Áberandi myndir eru myndir frá mjög hæfileikaríkum ljósmyndurum og teiknurum, myndir sem Wikimedia Commons samfélagið hefur valið með tilliti til mestu gæða sem finnast á vefsvæðinu.
Sérsniðinn veljari
Flokkur
Yfirlestur jafningja
@@ -147,10 +144,10 @@
Sjálfgefið notkunarleyfi
Nota fyrri titil og lýsingu
Þema
- Attribution-ShareAlike 4.0
- Attribution 4.0
- Attribution-ShareAlike 3.0
- Attribution 3.0
+ Attribution-ShareAlike 4.0
+ Attribution 4.0
+ Attribution-ShareAlike 3.0
+ Attribution 3.0
CC0
CC BY-SA 3.0
CC BY 3.0
@@ -209,15 +206,14 @@
Veldu að taka þátt í beta-forprófunarrásinni á Google Play og fáðu snemmbúinn aðgang að nýjum eiginleikum og villuleiðréttingum
2FA-kóði
Viltu í alvörunni skrá þig út?
- Mynd gagnamiðils brást
Engir undirflokkar fundust
Engir yfirflokkar fundust
Zao-fjall
Lamadýr
Regnbogabrú
Túlípani
- Velkomin á Wikipedia
- Höfundarréttur
+ Velkomin á Wikipedia
+ Höfundarréttur
Óperuhúsið í Sydney
Hætta við
Opna
@@ -346,11 +342,10 @@
Eyða
Frammistaða
Notandasnið
- Tölfræði
Mótteknar þakkir
Áberandi myndir
Myndir gegnum \"Nálægir staðir\"
- Stig
+ Stig %1$d
Myndir sendar inn
Myndir ekki hafnað
Myndir notaðar
@@ -427,11 +422,11 @@
Gat ekki beðið um athugun á flokkum fyrir %1$s
Bið um athugun á flokkum fyrir %1$s
Lokið
- Sending þakka: Tókst
- Tókst að senda þakkir til %1$s
- Mistókst að senda þakkir til %1$s
- Sending þakka: Mistókst
- Sendi þakkir fyrir %1$s
+ Sending þakka: Tókst
+ Tókst að senda þakkir til %1$s
+ Mistókst að senda þakkir til %1$s
+ Sending þakka: Mistókst
+ Sendi þakkir fyrir %1$s
Fylgir þetta reglum varðandi höfundarrétt?
Er þetta rétt flokkað?
Kemur þetta umfjöllunarefninu við?
@@ -457,15 +452,14 @@
Skoða ólesið
Villa kom upp við að velja myndir
Bíddu aðeins…
- Áberandi myndir eru myndir frá mjög hæfileikaríkum ljósmyndurum og teiknurum, myndir sem Wikimedia Commons samfélagið hefur valið með tilliti til mestu gæða sem finnast á vefsvæðinu.
Myndir sem sendar eru í gegnum \"Nálægir staðir\" nýtast til að uppgötva staði á landakortinu.
Þessi eiginleiki gerir félögum í ritstjórninni kleift að senda þakkartilkynningar til notenda sem gera nytsamlegar breytingar - með hjálp lítils þakkartengils á síðunum með breytingaferlinum eða mismuninum.
- Afrita á myndefni sem fylgir í kjölfarið
+ Afrita á myndefni sem fylgir í kjölfarið
Afritað
Dæmi um góðar myndir sem ætti að senda inn á Commons
Dæmi um myndir sem ekki á að senda inn
Sleppa þessari mynd
- Niðurhal mistókst!! Við getum ekki sótt skrána án heimildar til að nota geymslurými.
+ Niðurhal mistókst!! Við getum ekki sótt skrána án heimildar til að nota geymslurými.
Sýsla með EXIF-merki
Veldu hvaða EXIF-merkjum á að halda í innsendum skrám
Höfundur
@@ -475,7 +469,6 @@
Tegund linsu
Raðnúmer
Hugbúnaður
- Aðgangi að staðsetningu gagnamiðla hafnað
Sendu myndir inn á Wikimedia Commons beint úr símanum þínum. Sæktu Commons-appið núna: %1$s
Deila forriti með...
Upplýsingar í mynd
@@ -530,7 +523,7 @@
Breyta lýsingum og skýringatextum
Deila mynd með
Engin framlög frá þér ennþá
- %s á ennþá engin framlög
+ %1$s á ennþá engin framlög
Aðgangur búinn til!
Texti afritaður á klippispjaldið.
Tilkynning merkt sem lesin
@@ -539,7 +532,7 @@
Er þegar til
Þarf ljósmynd
Tegund staðar:
- Brú, safn, hótel o.s.frv.
+ Brú, safn, hótel o.s.frv.
Eitthvað fór úrskeiðis varðandi innskráningu, þú þarft að endurstilla lykilorðið þitt !!
GAGNAMIÐLAR
AFLEIDDIR FLOKKAR
@@ -577,7 +570,7 @@
5. Límdu wikitextann á viðeigandi stað.
6. Breyttu wikitextanum til að fá viðeigandi staðsetningu, ef þarf. Til að fá nánari upplýsingar geturðu skoðað <a href=\"https://en.wikipedia.org/wiki/Wikipedia:Manual_of_Style/Images#How_to_place_an_image\">þetta</a>.
7. Birtu greinina
- Afrita wiki-kóða á klippispjald
+ Afrita wiki-kóða á klippispjald
bið
halda áfram
Í bið
@@ -644,7 +637,7 @@
Til baka
Velkomin í sérsniðinn myndaveljara
Þessi veljari sýnir þér hvaða myndir sé þegar er búið að senda inn í Commons.
- Ólíkt myndinni til vinstri, er hægri myndin með Commons-táknmyndina til að sýna að hún hefur þegar verið send inn. \n Ýttu og haltu niðri til að sjá forskoðun á myndinni.
+ Ólíkt myndinni til vinstri, er hægri myndin með Commons-táknmyndina til að sýna að hún hefur þegar verið send inn. \n Ýttu og haltu niðri til að sjá forskoðun á myndinni.
Æðislegt
Þessa mynd er þegar búið að senda inn í Commons.
WLM
@@ -656,8 +649,9 @@
Wiki Loves Monuments er alþjóðleg ljósmyndasamkeppni um myndir af minnismerkjum sem skipulögð er af Wikimedia
Þarfnast heimildar
Kort í nágrenninu þurfa að geta lesið STÖÐU SÍMANS til að virka almennilega
- Framlög notanda: %s
- Frammistaða notanda: %s
+ Nauðsynlegar heimildir: Lesa núverandi staðsetningu til að geta stungið upp á flokkum
+ Framlög notanda: %1$s
+ Frammistaða notanda: %1$s
Skoða notandasíðu
Breyta myndlýsingum
Breyta flokkum
@@ -668,7 +662,7 @@
Hvernig væri að bæta við staðnum þar sem myndin er tekin?\nStaðsetningargögn hjálpa riturum wiki-síðna að finna myndina þína og gera hana þannig mun nytsamlegri.\nNýlegar innsendingar frá þér hafa ekki verið með staðsetningargögn.\nVið hvetjum þig til að kveikja á staðsetningarbúnaðnum í stillingum myndavélarinnar þinnar.\nBestu þakkir fyrir innsendinguna!
Engin staðsetning fannst
Hvernig væri að bæta við staðnum þar sem myndin er tekin?\nStaðsetningargögn hjálpa riturum wiki-síðna að finna myndina þína og gera hana þannig mun nytsamlegri.\nBestu þakkir til þín!
- Bæta við staðsetningu
+ Bæta við staðsetningu
Fjarlægðu úr þessum tölvupósti allar þær upplýsingar sem þér er ekki vel við að deila opinberlega. Hafðu líka í huga að tölvupóstfangið sem þú sendir úr, ásamt tengdu nafni og auðkennismynd, verður sýnilegt opinberlega.
Nánar
Frammistaða er aðeins í boði í vinnsluútgáfunni, skoðaðu nánari upplýsingar í hjálparskjölum þróunaraðila.
@@ -687,8 +681,8 @@
Umsögn þín
Merkja sem ekki fyrir innsendingu
Afmerkja sem ekki fyrir innsendingu
- Sýna myndir sem þegar hafa verið afgreiddar
- Fel myndir sem þegar hefur verið átt við
+ Sýna myndir sem þegar hafa verið afgreiddar
+ Fel myndir sem þegar hefur verið átt við
Engar fleiri myndir fundust
Þessa mynd er þegar búið að senda inn
Get ekki valið þessa mynd til innsendingar
diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml
index db63f7ee8..8583ad3f5 100644
--- a/app/src/main/res/values-it/strings.xml
+++ b/app/src/main/res/values-it/strings.xml
@@ -12,6 +12,7 @@
* Dream Indigo
* Emabarto01
* Gianfranco
+* Giorgx12
* Lorelai87
* Lorem Ipsum
* Luca.favorido
@@ -27,7 +28,7 @@
-->
Pagina Facebook di Commons
- Codice sorgente Github di Commons
+ Codice sorgente GitHub di Commons
Logo di Commons
Sito web di Commons
Esci dal selettore della posizione
@@ -51,18 +52,14 @@
- %1$d file in caricamento
- %1$d file in caricamento
-
- - (%1$d)
- - (%1$d)
-
- Avvio del caricamento
+ Avvio caricamenti
- - Elaborando %d caricamento
- - Elaborando %d caricamenti
+ - Elaborando %1$d caricamento
+ - Elaborando %1$d caricamenti
- - %d caricamento
- - %d caricamenti
+ - %1$d caricamento
+ - %1$d caricamenti
- Questa immagine sarà rilasciata in base alla licenza %1$s
@@ -106,7 +103,7 @@
Caricamento in coda (attivata modalità di connessione limitata)
%1$s caricato!
Tocca per visualizzare il tuo caricamento
- Caricamento file: %s
+ Caricamento file: %1$s
Sto caricando %1$s
Terminato il caricamento di %1$s
Errore durante il caricamento di %1$s
@@ -143,7 +140,7 @@
Cerca categorie
Cerca elementi che il tuo file rappresenta (montagna, Taj Mahal, ecc.)
Salva
- Menu overflow
+ Menu di overflow
Aggiorna
Elenco
(Non è stato ancora caricato niente)
@@ -156,6 +153,7 @@
Impostazioni
Registrati
Immagini in evidenza
+ Le immagini in vetrina sono contributi di fotografi e illustratori di talento che la comunità di Wikimedia Commons ha riconosciuto come quelle di migliore qualità del sito.
Selettore personalizzato
Categoria
Revisione tra pari
@@ -172,15 +170,16 @@
Non hai ancora caricato alcuna foto.
Riprova
Annulla
+ Ricerche recenti
Caricando questa immagine, dichiaro che questa è una mia opera, che non contiene materiale protetto da copyright o ritratti, e che comunque è conforme alle <a href=\"https://commons.wikimedia.org/wiki/Commons:Policies_and_guidelines\">Policy di Wikimedia Commons</a>.
Scarica
Licenza predefinita
Utilizza titolo e descrizione precedenti
Tema
- Attribuzione-Condividi allo stesso modo 4.0
- Attribuzione 4.0
- Attribuzione-Condividi allo stesso modo 3.0
- Attribuzione 3.0
+ Attribuzione-Condividi allo stesso modo 4.0
+ Attribuzione 4.0
+ Attribuzione-Condividi allo stesso modo 3.0
+ Attribuzione 3.0
CC0
CC BY-SA 3.0
CC BY 3.0
@@ -233,6 +232,7 @@
Descrizione
Discussione
Autore
+ Caricato da
Data di caricamento
Licenza
Coordinate
@@ -242,15 +242,14 @@
Codice 2FA
Codice di verifica indirizzo email
Vuoi veramente uscire?
- Immagine multimediale non riuscita
Nessuna sottocategoria trovata
Nessuna categoria superiore trovata
Monte Zao
Lama
Ponte dell\'Arcobaleno
Tulipano
- Benvenuto Wikipedia
- Benvenuto Copyright
+ Un\'immagine schematica di una voce generica di Wikipedia.
+ Un disegno di una pila di fogli con il simbolo del copyright barrato.
Teatro dell\'opera di Sydney
Annulla
Apri
@@ -283,6 +282,7 @@
Il processo di caricamento richiede un accesso a internet attivo. Per favore verifica la tua connessione alla rete.
Problemi trovati nell\'immagine
Carica solo le foto che hai scattato da solo. Non caricare immagini scaricate da Internet.
+ Caricamenti
Salva scatti in-app
Salva le foto scattate con la fotocamera in-app nella memoria del tuo dispositivo
Accedi alla tua utenza
@@ -354,6 +354,7 @@
Quiz
Questa immagine è OK per essere caricata?
Domanda
+ Non sono sicuro
Risultato
Se continui a caricare immagini che richiedono la cancellazione, la tua utenza sarà probabilmente bannata. Sei sicuro di voler terminare il quiz?
Più di %1$s delle immagini che hai caricato sono state cancellate. Se continui a caricare immagini che richiedono la cancellazione, la tua utenza sarà probabilmente bannata.\n\nTi piacerebbe visualizzare di nuovo il tutorial e poi fare un quiz per aiutarti a capire che tipo di immagini dovresti o non dovresti caricare?
@@ -363,6 +364,7 @@
Uno degli obiettivi di Commons è raccogliere immagini di qualità. Pertanto, le immagini sfocate non dovrebbero essere caricate. Cerca sempre di scattare belle foto con una buona illuminazione.
Le foto che mostrano tecnologia o cultura sono molto apprezzate su Commons.
Hai ottenuto %1$s delle risposte corrette. Congratulazioni!
+ Continua
Seleziona una delle due opzioni per rispondere alla domanda
Sessione scaduta. Accedi nuovamente.
Condividi il tuo quiz con i tuoi amici!
@@ -386,13 +388,11 @@
Risultati
Profilo
Distintivi
- Statistiche
Ringraziamenti ricevuti
Immagini in evidenza
Immagini tramite \"Luoghi nelle vicinanze\"
- Livello %d
- %s (Livello %s)
- %s (%s)
+ Livello %1$d
+ %1$s (Livello %2$s)
Immagini caricate
Immagini non ripristinate
Immagini utilizzate
@@ -452,11 +452,12 @@
Non chiedermelo mai più
Chiedi autorizzazione alla posizione
Chiedi il permesso di localizzazione quando necessario per la funzione di visualizzazione della scheda di notifica nelle vicinanze.
- Qualcosa è andato storto, non siamo riusciti a recuperare i risultati
+ Qualcosa è andato storto e non siamo riusciti a recuperare i risultati
Hai dato così tanti contributi che il nostro sistema di conteggio di risultati non può contarli. Questo è l\'ultimo risultato.
Termina il:
Visualizza campagne
Vedi le campagne in corso
+ Mostra pulsante di cancellazione
Consenti all\'app di recuperare la posizione nel caso in cui la fotocamera non la registri. Alcune fotocamere del dispositivo non la registrano. In questi casi, consentire all\'app di recuperare e allegare la posizione rende il tuo contributo più utile. Potrai modificarlo in qualsiasi momento dalle Impostazioni
Consenti
Nascondi
@@ -480,10 +481,10 @@
Non è stato possibile richiedere la verifica di categoria per %1$s
Richiesta di verifica della categoria per %1$s
Fatto
- Invio Ringraziamenti: Successo
- Ringraziamenti a %1$s inviati correttamente
+ Invio ringraziamenti: Successo
+ Invia ringraziamenti a %1$s
Errore nell\'invio di ringraziamenti a %1$s
- Invio Ringraziamenti: Errore
+ Invio ringraziamenti: Errore
Inviando ringraziamento per %1$s
Ciò e compatibile con la normativa sul diritto d\'autore?
Questo è categorizzato correttamente?
@@ -511,15 +512,14 @@
Vedi non lette
Si è verificato un errore durante la selezione delle immagini
Attendi per favore…
- Le foto in vetrina sono immagini opere di fotografi e ilustratori di talento che la comunità di Wikimedia Commons ha riconosciuto come quelle di migliore qualità del sito.
Le immagini caricate tramite Luoghi Vicini sono le immagini che sono state caricate scoprendo luoghi nella mappa.
Questa funzionalità permette di inviare una notifica di ringraziamento a quegli utenti che hanno condiviso contributi utili – mediante un piccolo link nella pagina di cronologia o delle differenze.
- Copia in altri media
+ Copia negli elementi successivi
Copiato
Esempi di valide immagini caricabili in Commons
Esempi di immagini che non vanno caricate
Salta questa immagine
- Download fallito!!. Non possiamo scaricare il file senza l\'autorizzazione per lo stoccaggio esterno.
+ Download non riuscito. Non è possibile scaricare il file senza l\'autorizzazione di archiviazione esterna.
Gestisci le etichette EXIF
Seleziona quali etichette EXIF vanno mantenute nel caricamento
Autore
@@ -529,11 +529,10 @@
Modello di lente
Numeri seriali
Software
- Accesso alla posizione multimediale negato
- Potremmo non essere in grado di ottenere automaticamente i dati sulla posizione dalle immagini caricate. Si prega di aggiungere la posizione appropriata per ciascuna immagine prima di inviarla
Carica foto su Wikimedia Commons direttamente dal tuo telefono. Scarica subito l\'app Commons: %1$s
Condividi applicazione tramite...
Informazioni sull\'immagine
+ Non mostrare più questo messaggio
Nessuna categoria trovata
Nessuna definizione trovata
Caricamento annullato
@@ -565,6 +564,10 @@
Aggiorna le categorie
Tentativo di aggiornare le rappresentazioni.
Modifica le raffigurazioni
+
+ - Viene aggiunta la raffigurazione %1$s.
+ - Vengono aggiunte le raffigurazioni %1$s.
+
Non è stato possibile aggiungere descrizioni.
Tentativo di aggiornare le coordinate.
Coordinate aggiornate
@@ -582,7 +585,7 @@
Modifica descrizioni e didascalie
Condividi immagine tramite
Non hai ancora condiviso alcun contributo.
- %s non ha fatto alcun contributo ancora
+ %1$s non ha fatto alcun contributo ancora
Utenza creata!
Testo copiato negli appunti
Notifica segnata come letta
@@ -597,6 +600,7 @@
CLASSI FIGLIE
CLASSI SUPERIORI
Sottocategorie
+ CATEGORIE SUPERIORI
Rinvenuto luogo nei pressi
Queste sono immagini di %1$s?
Questa è un\'immagine di %1$s?
@@ -634,7 +638,7 @@
5. Incolla il wikitesto nel posto appropriato.
6. Modifica il wikitesto per il posizionamento appropriato, se necessario. Per ulteriori informazioni vedi <a href=\"https://it.wikipedia.org/wiki/Aiuto:Markup_immagini\">questa pagina</a>.
7. Pubblica la voce
- Copia il wikicodice negli appunti
+ Copia il wikitesto negli appunti
pausa
riprendi
In pausa
@@ -659,6 +663,7 @@
Nelle vicinanze
Usa
Il mio posizionamento
+ © <a href=\"https://www.openstreetmap.org/copyright\">OpenStreetMap</a>
Attivata modalità di connessione limitata!
Disattivata modalità di connessione limitata. I caricamenti in attesa riprenderanno adesso.
Modalità di connessione limitata
@@ -675,6 +680,8 @@
Si prega di selezionare le categorie appropriate. A differenza delle raffigurazioni, le categorie sono solo in inglese.
Commons rende le tue immagini riutilizzabili e adattabili da chiunque. Vuoi rinunciare a tutti i diritti? Vuoi che ti venga attribuita la paternità? Vuoi che gli adattamenti utilizzino la stessa licenza?
Raffigura
+ Etichetta
+ Descrizione
Licenza per il file
Dettagli sul file
Vedi la pagina della categoria
@@ -701,22 +708,25 @@
Indietro
Benvenuto nel selettore di immagini personalizzato
Questo selettore ti mostra quali immagini hai già caricato su Commons.
- A differenza dell\'immagine a sinistra, quella a destra ha il logo Commons che indica che è già caricata. \nTocca e tieni premuto per l\'anteprima dell\'immagine.
+ A differenza dell\'immagine a sinistra, quella a destra ha il logo Commons che indica che è già caricata.\n\nTocca e tieni premuto per l\'anteprima dell\'immagine.
Fantastico
Questa immagine è già stata caricata su Commons.
Per motivi tecnici, l\'app non può caricare in modo affidabile più di %1$d immagini contemporaneamente. Il limite di caricamento di %1$d è stato superato da %2$d .
Nascondi
Massimo: %1$d
Errore: limite di caricamento superato
+ WLM
Questa immagine sarà ammessa al concorso Wiki Loves Monuments
Mostra monumenti
È il mese di Wiki Loves Monuments!
ULTERIORI INFORMAZIONI
+ Wiki Loves Monuments
Wiki Loves Monuments è un concorso internazionale di fotografia di monumenti organizzato da Wikimedia
Autorizzazione/i richiesta/e
Le mappe vicine hanno bisogno di leggere lo STATO DEL TELEFONO per funzionare correttamente
- Contributi dell\'utente: %s
- Traguardi dell\'utente: %s
+ Autorizzazione facoltativa: ottieni la posizione corrente per i suggerimenti di categoria
+ Contributi dell\'utente: %1$s
+ Traguardi dell\'utente: %1$s
Vedi il profilo utente
Modifica le descrizioni
Modifica le categorie
@@ -748,8 +758,8 @@
Deseleziona come \"da non caricare\"
Selezionando come \"da non caricare\"
Deselezionando come \"da non caricare\"
- Mostra le immagini già attivate
- Nascondere le immagini già attivate
+ Mostra le immagini già gestite
+ Nascondere le immagini già gestite
Nessuna altra immagine trovata
Questa immagine è già stata caricata
Impossibile selezionare questa immagine per il caricamento
@@ -789,11 +799,11 @@
Vuoi aprire il file KML?
Errore durante il salvataggio del file KML.
Errore durante il salvataggio del file GPX.
- Salvataggio del file KML
- Salvataggio del file GPX
+ Salvataggio come file KML...
+ Salvataggio come file GPX...
- - %d immagine selezionata
- - %d immagini selezionate
+ - %1$d immagine selezionata
+ - %1$d immagini selezionate
Ricorda che tutte le immagini in un caricamento multiplo hanno le stesse categorie e descrizioni. Se le immagini non condividono descrizioni e categorie, esegui caricamenti separati.
Osservazione sui caricamenti multipli
@@ -820,14 +830,16 @@
Cartella %1$s cancellata correttamente
Impossibile eliminare la cartella %1$s
Impossibile eliminare i contenuti nella cartella: %1$s
+ Impossibile recuperare il percorso della cartella per l\'ID bucket: %1$d
Questo posto non ha ancora una foto, scattane una!
Questo posto ha già una foto.
Ora controlliamo se questo posto ha una foto.
Errore durante il caricamento
+ Nessun uso trovato
Commons
Altri wiki
+ •
Utilizzi del file
- SingleWebViewActivity
Utenza
Elimina l\'utenza
Avviso di eliminazione dell\'utenza
diff --git a/app/src/main/res/values-iw/strings.xml b/app/src/main/res/values-iw/strings.xml
index 6f3345f4f..ab8249852 100644
--- a/app/src/main/res/values-iw/strings.xml
+++ b/app/src/main/res/values-iw/strings.xml
@@ -49,24 +49,18 @@
- מועלים %1$d קבצים
- מועלים %1$d קבצים
-
- - (%1$d)
- - (%1$d)
- - (%1$d)
- - (%1$d)
-
ההעלאות מתחילות
- - עיבוד העלאה
- - עיבוד d% העלאות
- - עיבוד d% העלאות
- - עיבוד d% העלאות
+ - מתבצעת העלאה אחת
+ - מתבצעות %1$d העלאות
+ - מתבצעות %1$d העלאות
+ - מתבצעות %1$d העלאות
- העלאה אחת
- - %d העלאות
- - %d העלאות
- - %d העלאות
+ - %1$d העלאות
+ - %1$d העלאות
+ - %1$d העלאות
- התמונה הזאת תפורסם ברישיון %1$s
@@ -116,7 +110,7 @@
ההעלאות בתור (מופעל מצב חיבור מוגבל)
הקובץ %1$s הועלה!
נא ללחוץ כאן כדי לצפות בהעלאה שלך
- העלאת קובץ: %s
+ העלאת קובץ: %1$s
מתבצעת העלאת %1$s
העלאת %1$s מסתיימת
העלאת %1$s נכשלה
@@ -166,6 +160,7 @@
הגדרות
רישום
תמונות מומלצות
+ תמונות מומלצות הן תמונות של צלמים ומאיירים מיומנים שקהילת ויקישיתוף בחרה בהן בתור הדגמה של תוכן באיכות הגבוהה ביותר באתר.
בורר מותאם אישית
קטגוריה
ביקורת עמיתים
@@ -182,6 +177,9 @@
עדיין לא העלית תמונות.
לנסות שוב
ביטול
+ נא להקליד שם שפה
+ חיפושים אחרונים
+ כל השפות
שליחת התמונה הזאת מהווה את הצהרתי על כך שזאת יצירה שלי, שהיא לא מכילה חומר מוגבל בזכויות יוצרים או תמונות עצמיות (סלפי) ומתאימה בכל אופן ל<a href=\"https://commons.wikimedia.org/wiki/Commons:Policies_and_guidelines\">מדיניות של אתר ויקישיתוף של ויקימדיה</a>.
הורדה
רישיון ברירת מחדל
@@ -253,15 +251,14 @@
קוד אימות דו־שלבי
קוד אימות בדוא״ל
האם באמת לצאת מהחשבון?
- תמונת המדיה נכשלה
לא נמצאו תת־קטגוריות
לא נמצאו קטגוריות הורות
הר זאו
לאמות
גשר הקשת בענן
צבעוני
- ברוך בואך ויקיפדיה
- הודעה לגבי זכויות יוצרים
+ תמונה סכמטית של ערך ויקיפדיה כללי.
+ ציור של ערימת ניירות עם סמל זכויות יוצרים מחוק.
בית האופרה של סידני
ביטול
פתיחה
@@ -294,6 +291,7 @@
תהליך ההעלאה דורש גישה פעילה לאינטרנט. נא לבדוק את חיבור הרשת שלך.
נמצאו בעיות בתמונה
נא להעלות רק תמונות שצילמת בעצמך. לא להעלות תמונות שהורדת מהאינטרנט.
+ העלאות
שמירת צילומים מתוך היישומון
שמירת תמונות שצולמו באמצעות מצלמה בתוך היישום לאחסון של המכשיר שלך
כניסה לחשבון שלך
@@ -365,6 +363,7 @@
מבחן
האם בסדר להעלות את התמונה הזאת?
שאלה
+ לא ברור לי
תוצאה
העלאה של תמונות שדורשות מחיקה תגרום להחרמתך. האם באמת לסיים את הבוחן?
יותר מ־%1$s מהתמונות שהעלית נמחקו. אם תמשיך להעלות תמונות שצריך למחוק, חשבונך כנראה ייחסם.\n\nאולי תרצה לראות שוב את המדריך ואז לעשות בוחן כדי לעזור לך ללמוד אילו סוגים של תמונות צריך או לא צריך להעלות?
@@ -374,6 +373,7 @@
אחת מהמטרות של ויקישיתוף היא לאסוף תמונות איכותיות. לפיכך, אין להעלות תמונות מטושטשות. השתדלו תמיד לצלם תמונות יפות עם תאורה טובה.
תמונות שמציגות טכנולוגיה או תרבות מתקבלות בברכה בוויקישיתוף.
ענית נכון על %1$s מהשאלות. ברכות!
+ להמשיך
יש לבחור אפשרות אחת מתוך שתיים כדי לענות על השאלה
זמן הכניסה לחשבון פקע, נא להיכנס שוב.
שתף את הבוחן שלך עם חברים!
@@ -397,13 +397,11 @@
הישגים
פרופיל
סמלים
- סטטיסטיקה
- התודה התקבלה
+ תודות שהתבקלו
תמונות מומלצות
תמונות דרך \"מקומות בסביבה\"
- רמה %d
- %s (רמה %s)
- %s (%s)
+ רמה %1$d
+ %1$s (רמה %2$s)
תמונות שהועלו
תמונות שלא שוחזרו
תמונות בשימוש
@@ -446,7 +444,7 @@
הבנתי שזה לא טוב לפרטיות שלי
התחרטתי, אינני רוצה עוד שהיא תוצג לציבור
סליחה, התמונה אינה מעניינת עבור אנציקלופדיה
- הועלה על ידי ב־%1$s, בשימוש ב־%2$d ערכים לפחות.
+ הועלה על־ידי ב־%1$s, בשימוש ב־%2$d ערכים לפחות.
ברוך בואך לוויקישיתוף!\n\nכדי להעלות את המדיה הראשונה שלך, נא להקיש על כפתור ההוספה.
לא נבחרו קטגוריות
תמונות ללא קטגוריות בדרך כלל אינן שימושיות. להמשיך ללא בחירת קטגוריות?
@@ -463,16 +461,18 @@
לעולם לא לשאול שוב
לבקש הרשאת מיקום
לבקש הרשאות מיקום לפי הצורך, לשם קבלת התראה על מקומות בסביבה בתצוגת כרטיס.
- משהו השתבש, לא הצלחנו לקבל את ההישגים
+ משהו השתבש, ולא הצלחנו לקבל את ההישגים
תרמת כל־כך הרבה שמערכת חישוב ההישגים שלנו לא מתמודדת עם זה. זה ההישג הגדול ביותר.
מסתיים ב־:
הצגת מסעי פרסום
ר\' את מסעי פרסום שמתרחשים כרגע
- נא לאפשר ליישום לאחזר את המיקום אם המצלמה לא מתעדת אותו. חלק ממצלמות המכשירים לא רושמות את המיקום. במקרים כאלה, מתן אפשרות ליישום למשוך את המיקום ולשייך אותו לתמונה משפר את השימושיות של התרומה שלך. אפשר לשנות זאת בכל עת דרך ההגדרות
+ הצגת כפתור מחיקה
+ הפעלת כפתור „מחיקת תיקייה” בבורר המותאם אישית
+ נא לאפשר ליישום לשלוף את המיקום אם המצלמה לא רושמת אותו. חלק ממצלמות המכשירים לא רושמות את המיקום. במקרים כאלה, מתן אפשרות ליישום לשלוף את המיקום ולשייך אותו לתמונה משפר את השימושיות של התרומה שלך. אפשר לשנות את זה בכל עת דרך ההגדרות
לאפשר
לסרב
- נא להפעיל גישה למיקום מההגדרות ולנסות שוב.\n\nלתשומת ליבך: יכול להיות שלחומר שנשלח לא ישויך מיקום אם היישום לא הצליח למשוך את המיקום מהמכשיר תוך זמן קצר.
- המצלמה שבתוך היישום זקוקה להרשאות מיקום כדי לשייך אותו לתמונות שלך אם המיקום לא זמין ב־EXIF. נא לאפשר ליישום לגשת למיקום שלך ולנסות שוב.\n\nלתשומת ליבך: יכול להיות שלחומר שנשלח לא ישויך מיקום אם היישום לא הצליח למשוך את המיקום מהמכשיר תוך זמן קצר.
+ נא להפעיל גישה למיקום מההגדרות ולנסות שוב.\n\nלתשומת ליבך: יכול להיות שלא ישויך מיקום לחומר שנשלח אם היישום לא הצליח לקבל את המיקום מהמכשיר תוך זמן קצר.
+ המצלמה שבתוך היישום זקוקה להרשאות מיקום כדי לשייך אותו לתמונות שלך אם המיקום לא זמין ב־EXIF. נא לאפשר ליישום לגשת למיקום שלך ולנסות שוב.\n\nלתשומת ליבך: יכול להיות שלא ישויך מיקום לחומר שנשלח אם היישום לא הצליח לקבל את המיקום מהמכשיר תוך זמן קצר.
היישום לא ירשום מיקום יחד עם הצילומים מתוכו כי לא ניתנה לו הרשאת מיקום
היישום לא ירשום את המיקום יחד עם צילומים מתוכו כיוון שה־GPS כבוי
להשתמש בבורר תמונות מבוסס מסמכים
@@ -491,14 +491,14 @@
בקשת בדיקת הקטגוריה עבור %1$s לא הצליחה
מוגשת בקשה לבדיקת קטגוריה עבור %1$s
סיום
- שליחת תודה: הצלחה
- נשלחה תודה בהצלחה אל %1$s
- שליחת התודה נכשלה %1$s
- שליחת תודה: כשל
+ שליחת תודה: זה עבד
+ נשלחה תודה למשתמש %1$s
+ נכשלה שליחת תודה למשתמש %1$s
+ שליחת תודה: זה לא עבד
נשלחת תודה עבור %1$s
האם זה עומד בתנאי זכויות היוצרים?
האם הקטגוריה נכונה?
- האם זה בתחום?
+ האם זה שייך כאן?
ברצונך להודות לתורם?
נא ללחוץ על \"לא\" כדי להציע את התמונה הזאת למחיקה אם היא בכלל לא שימושית.
סמלים, צילומי מסך, כרזות של סרטים, הם לעיתים קרובות הפרות זכויות יוצרים.\nנא ללחוץ \"לא\" כדי להציע את התמונה הזאת למחיקה.
@@ -522,15 +522,14 @@
הצגת התראות שלא נקראו
אירעה שגיאה בעת בחירת תמונות
נא להמתין...
- תמונות מובילות הן תמונות של צלמים ומאיירים מיומנים אותם בחרה קהילת ויקישיתוף בזכות איכות התוצר שהם תורמים לאתר.
- תמונות שהועלו דרך מקומות בסביבה הן התמונות שנשלחות על ידי גילוי מקומות במפה.
- תכונה זו מאפשרת לעורכים לשלוח מסרי תודה למשתמשים שביצעו עריכות מועילות - על ידי שימוש בקישור תודה בדף ההיסטוריה או בדף ההבדלים.
- העתקה למדיה הלאה
+ תמונות שהועלו דרך מקומות בסביבה הן התמונות שנשלחות על־ידי גילוי מקומות במפה.
+ האפשרות הזאת מאפשרת לעורכים לשלוח הודעות תודה למשתמשים שעשו עריכות מועילות - על־ידי שימוש בקישור תודה בדף ההיסטוריה או בדף ההבדלים.
+ העתקה לפריטי המדיה הבאים
הועתק
דוגמאות של תמונות טובות להעלאה לוויקישיתוף
דוגמאות של תמונות שאין להעלות
דילוג על התמונה הזאת
- ההורדה נכשלה!! אין לנו אפשרות להוריד את הקובץ ללא הרשאות גישה לאחסון חיצוני.
+ ההורדה נכשלה. אין לנו אפשרות להוריד את הקובץ ללא הרשאות גישה לאחסון חיצוני.
ניהול תגיות EXIF
לבחור אילו תגיות EXIF יישארו בהעלאות
יוצר
@@ -540,17 +539,16 @@
דגם העדשה
מספרים סידוריים
תוכנה
- הגישה למקום המדיה נדחתה
- ייתכן שלא נוכל לאתר את נתוני המקום מתמונות שהעלית. נא להוסיף את המקום המתאים לכל תמונה בטרם הגשתה
- כדי להעלות תמונות לוויקינתונים של ויקימדיה ישר מהטלפון שלך. אתם מוזמנים להוריד את היישום של ויקינתונים עכשיו: %1$s
+ העלאת תמונות לוויקישיתוף ישר מהטלפון שלך. אפשר להוריד את היישום של ויקישיתוף עכשיו: %1$s
שיתוף היישום דרך...
פרטי תמונה
+ לא להציג את ההודעה הזאת שוב
לא נמצאו קטגוריות
לא נמצאו מוצגים
ההעלאה בוטלה
אין נתונים עבור הכותרת או התיאור התמונה הקודמת
למה %1$s צריך להימחק?
- %1$s הועלה על ידי: %2$s
+ %1$s הועלה על־ידי: %2$s
שפת התיאור כבררת מחדל
העמדה למחיקה
זה עבד
@@ -601,7 +599,7 @@
עריכת תיאורים וכיתובים
שיתוף תמונה דרך
לא תרמת בינתיים שום דבר
- %s עדיין לא תרם שום דבר
+ %1$s עדיין לא תרם שום דבר
חשבון נוצר!
הטקסט הועתק ללוח
התראה סומנה כנקראה
@@ -627,7 +625,7 @@
משהו השתבש. לא היה אפשר להגדיר את הטפט
להגדיר בתור טפט
הגדרת טפט. נא להמתין...
- מערכת מעקב
+ כמו של המערכת
כהה
בהירה
פתיחת הגדרות המיקום נכשלה. נא להפעיל את איתור המיקום ידנית
@@ -654,7 +652,7 @@
5. להדביק את טקסט המקור הוויקי במקום המתאים.
6. עליך לערוך את טקסט מקור הוויקי כדי למקם כראוי במידת הצורך. מידע נוסף ניתן לקרוא <a href=\"https://en.wikipedia.org/wiki/Wikipedia:Manual_of_Style/Images#How_to_place_an_image\">כאן</a>.
7. לפרסם את הערך
- העתקת קוד־ויקי ללוח
+ העתקת קוד ויקי ללוח
השהיה
להמשיך
מושהה
@@ -672,12 +670,12 @@
התמונה הייצוגית הוגדרה
שגיאה בהגדרת תמונה ייצוגית חדשה, נא לנסות שוב
הגדרה כתמונה ייצוגית
- שנתי
- חודשי
- כל הזמנים
- העלאה
+ שנה
+ שבוע
+ מאז ומעולם
+ העלאות
בסביבה
- בשימוש
+ שימושים
הדירוג שלי
מופעל מצב חיבור מוגבל!
מצב חיבור מוגבל הושבת. ההעלאות שממתינות תמשכנה כעת.
@@ -693,8 +691,10 @@
נא לכתוב תיאור קצר שמסביר מה מופיע בתמונה. בתיאור, כדאי לכתוב מה הופך את התמונה הזאת למעניינת, טיפוסית או נדירה ולהסביר את ההקשר, בין אם גלוי או סמוי. יש להשתמש במינוח מדויק ככל הניתן.
נא למצוא ולבחור את כל העקרונות שהתמונה הזאת מתארת. נא לשמור על דיוק מרבי. אם התמונה מתארת מגוון פריטים, נא לבחור אותם בגבולות הסביר. לא לבחור תגיות גנריות אם יש תגיות יותר נקודתית זמינות.
נא לבחור את הקטגוריות המתאימות. בניגוד למאפייני \"מציג\", הקטגוריות כתובות רק באנגלית.
- ויקישיתוף הופך את התמונות שלך לזמינות לשימוש חוזר ולהתאמה על ידי כל אחד. בא לך לוותר על כל הזכויות? שייחסו את היצירה אליך? שההתאמות ישתמשו באותו הרישיון?
+ ויקישיתוף הופך את התמונות שלך לזמינות לשימוש חוזר ולהתאמה על־ידי כל אחד. בא לך לוותר על כל הזכויות? שייחסו את היצירה אליך? שההתאמות ישתמשו באותו הרישיון?
מוצג
+ תווית
+ תיאור
רישיון מדיה
פרטי מדיה
הצגת דף הקטגוריה
@@ -721,7 +721,7 @@
חזרה
ברוך בואך לבוחר התמונות המותאמות
הבורר מציג לך אילו תמונות כבר העלית לוויקישיתוף.
- בניגוד לתמונה מימין, על התמונה שמשמאל מופיע הסמל של ויקישיתוף שמציין שהיא כבר הועלתה. יש לגעת ולהחזיק לקבלת תצוגה מקדימה של התמונה.
+ בניגוד לתמונה מימין, על התמונה שמשמאל מופיע הסמל של ויקישיתוף שמציין שהיא כבר הועלתה.\n\nיש לגעת ולהחזיק לקבלת תצוגה מקדימה של התמונה.
מגניב
התמונה הזאת כבר הועלתה לוויקישיתוף.
מסיבות טכניות, היישום לא יכול להעלות יותר מ־%1$d תמונות בבת אחת בצורה מהימנה. חרגת ממגבלת ההעלאה על סך %1$d ב־%2$d.
@@ -737,8 +737,10 @@
ויקי אוהבת אתרי מורשת היא תחרות בין־לאומית לצילום אתרי מורשת שמאורגנת על־ידי ויקימדיה
נדרשת הרשאה
מפות בסביבה זקוקות להרשאה מצב הטלפון כדי לפעול כראוי
- תרומות של המשתמש: %s
- הישגי המשתמש: %s
+ נא להפעיל שירותי מיקום כדי לצפות במקומות קרובים.
+ הרשאה לא מחייבת: קבלת מיקום נוכחי בשביל הצעות קטגוריות
+ תרומות של המשתמש: %1$s
+ הישגי המשתמש: %1$s
הצגת פרופיל המשתמש
עריכת מוצגים
עריכת קטגוריות
@@ -749,7 +751,7 @@
נתוני מיקום עוזרים לעורכי ויקי למצוא את התמונה שלך, וזה גורם לה להיות הרבה יותר שימושית.\nבהעלאות האחרונות שלך אין מיקום.\nאנחנו ממליצים לך להפעיל את המיקום בהגדרות יישום המצלמה שלך.\nתודה על ההעלאה!
לא נמצא מיקום
מה עם להוסיף את המקום שהתמונה הזאת צולמה בו?\nנתוני מיקום עוזרים לעורכי ויקי למצוא את התמונה שלך, והופכים אותה לשימושית יותר.\nתודה!
- הוספת מיקום
+ להוסיף מיקום
נא להסיר מהמכתב הזה כל מידע שאינך רוצה לשתף באופן פומבי. כמו־כן, נא לזכור שכתובת הדוא\"ל שמכתב נשלח ממנה, השם המשויך והתמונה, יהיו מוצגות ציבורית.
פרטים
ההישגים זמינים רק בגרסה הראשית, נא לבדוק את התיעוד למפתחים.
@@ -770,8 +772,8 @@
לבטל את הסימון בתור \"לא להעלאה\"
מתבצע סימון בתור \"לא להעלאה\"
מתבצע ביטול סימון בתור \"לא להעלאה\"
- להציג תמונות שכבר בוצעו בהן פעולות
- הסתרת תמונות שכבר בוצעו בהן פעולות
+ להציג תמונות שכבר טופלו
+ הסתרת תמונות שכבר טופלו
לא נמצאו עוד תמונות
התמונה הזאת כבר הועלתה
לא ניתן לבחור את התמונה הזאת להעלאה
@@ -794,7 +796,7 @@
צריך הרשאות כדי להשתמש בזה
הסבר על כתיבת תיאור מועיל
הסבר על כתיבת כיתוב מועיל
- הצגת ההישגים שלך
+ הצגת ההישגים שלך
עריכת תמונה
עריכת מיקום
המיקום עודכן!
@@ -802,22 +804,22 @@
הסרת אזהרת מיקום
הוספת המיקום הופך את התמונות לשימושיות ומקל על איתורן. להסיר את המיקום מהתמונה הזאת?
המיקום הוסר!
- תודה למחבר
+ תודה ליוצר
שגיאה בשליחת תודה למחבר.
תוקף הכניסה שלך פג, נא להתחבר שוב.
אין יישום זמין לפתיחת קובצי GPX
הקובץ נשמר בהצלחה
- לפתוח קובץ GPX?
- לפתוח קובץ KML?
+ לפתוח את קובץ ה־GPX?
+ לפתוח את קובץ ה־KML?
שמירת קובץ ה־KML נכשלה.
שמירת קובץ ה־GPX נכשלה.
- שמירת קובץ KML
- שמירת קובץ GPX
+ שמירה כקובץ KML...
+ שמירה כקובץ GPX...
- נבחרה תמונה אחת
- נבחרו שתי תמונות
- - נבחרו %d תמונות
- - נבחרו %d תמונות
+ - נבחרו %1$d תמונות
+ - נבחרו %1$d תמונות
נא לזכור שכשמועלות כמה תמונות, כולן מקבלות את אותן הקטגוריות והמוצגים. אם התמונות אינן חולקות מוצגים וקטגוריות, נא לעשות כמה העלאות נפרדות.
הערה על העלאות מרובות
@@ -854,7 +856,6 @@
אתרי ויקי אחרים
•
שימושים בקובץ
- SingleWebViewActivity
חשבון
העלמת חשבון
אזהרת העלמת חשבון
@@ -863,7 +864,7 @@
הכותרת הועתקה ללוח
ברכותינו, כל התמונות באלבום הזה הועלו או שסומנו לא להעלאה.
בתצוגת סיור
- בתצוגת בסביבה
+ לעבור לתצוגת בסביבה
נוצר והועלה על־ידי: %1$s
נוצר על־ידי %1$s והועלה על־ידי %2$s
הועמדה למחיקה
diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml
index f051ba27a..04e96cd02 100644
--- a/app/src/main/res/values-ja/strings.xml
+++ b/app/src/main/res/values-ja/strings.xml
@@ -30,11 +30,13 @@
-->
コモンズのフェイスブックページ
- コモンズのGithubソースコード
+ コモンズのGitHubソースコード
コモンズのロゴ
コモンズのウェブサイト
送信
+ 別の説明を追加
キャプション
+ 言語の説明
キャプション
説明
画像
@@ -43,16 +45,12 @@
- %1$d 件のファイルをアップロード中
-
- - (%1$d)
- - (%1$d)
-
アップロードを開始中です
- - %d 件をアップロード中
+ - %1$d 件をアップロード中
- - %d 件のアップロード
+ - %1$d 件のアップロード
- この画像は%1$sライセンスのもとにアップロードされます
@@ -87,12 +85,14 @@
ログインに成功しました!
ログインに失敗しました!
ファイルが見つかりません。別のファイルでお試しください。
+ 試行回数の上限に達しました!アップロードをキャンセルしてもう一度お試しください
+ バッテリーの最適化をオフにしますか?
認証に失敗しました。もう一度ログインしてください。
アップロードを開始しました!
アップロードは待機中です(限定接続モードが有効)
%1$s をアップロードしました!
アップロードしたものを表示するにはタップしてください
- %s のアップロードを開始中
+ %1$s のアップロードを開始中
%1$s をアップロード中
%1$s のアップロードを完了中
%1$s のアップロードに失敗しました
@@ -120,6 +120,7 @@
失敗した回数が多すぎます。数分後にもう一度お試しください。
申し訳ありませんが、この利用者はコモンズでブロックされています。
二要素認証コードを入力してください。
+ ログイン認証コードをあなたのメールアドレスに送信しました。ログインするにはコードを提示してください。
ログイン失敗
アップロード
このセットに名前をつけてください
@@ -141,6 +142,7 @@
設定
利用者登録
秀逸な画像
+ 秀逸な画像とは、技術力の高い写真家や作画家による作品で、ウィキメディアコモンズのコミュニティから最高の品質を誇るものとして選出されています。
カテゴリ
査読
このアプリについて
@@ -156,6 +158,8 @@
まだ写真をアップロードしていません。
再試行
キャンセル
+ 最近の検索
+ すべての言語
この画像の投稿に当たり、私はこれが自分自身の作品であり、著作権のあるコンテンツや自撮りは含まれず<a href=\"https://commons.wikimedia.org/wiki/Commons:Policies_and_guidelines\">Wikimedia Commons の方針</a>に従っていると宣言します。
ダウンロード
既定のライセンス
@@ -215,6 +219,7 @@
説明
議論
作者
+ アップロード者
アップロード日時
ライセンス
緯度経度
@@ -222,16 +227,16 @@
ベータ版テスターになる
Google Playのベータ版チャンネルにオプトインして、新機能やバグ修正プログラムに早期にアクセス
2FAコード
+ メール認証コード
ログアウトしてもよろしいですか?
- メディアイメージが失敗しました
下位カテゴリは見つかりませんでした
上位カテゴリは見つかりませんでした
蔵王連峰
リャマ
レインボーブリッジ
チューリップ
- ウィキペディアへようこそ
- 著作権について
+ ウィキペディアへようこそ
+ 著作権について
シドニーオペラハウス
キャンセル
開く
@@ -264,6 +269,7 @@
アップロードの過程にはインタネットアクセスへの接続が必要です。ネットワーク接続をご確認ください。
画像に問題があります
あなた自身の撮影した画像に限定してアップロードしてください。ウェブ上からダウンロードした画像はアップロードできません。
+ アップロード
アプリの画面キャプチャを保存
アプリ内のカメラで撮影した写真を端末のメモリに保存する
自分のアカウントにログイン
@@ -332,6 +338,7 @@
クイズ
本当にアップロードしますか?
質問
+ わからない
結果
削除対象の画像を投稿し続けた場合、あなたのアカウントはブロックされます。クイズの終了に同意しますか?
あなたがアップロードした画像のうち、最低%1$s件がその後、削除されました。もし今後も削除が必要な画像のアップロードを続けるなら、あなたのアカウントは禁止される可能性があります。\n\nどんな画像をアップロードしてよいか禁止されているか覚えるため、もう一度チュートリアルを閲覧してクイズを受けますか?
@@ -341,6 +348,7 @@
コモンズが目指すもののひとつに、質の高い画像の収集があります。そのためピンぼけ画像はアップロードしてはいけません。明るさに注意して画質の良い写真の撮影を心がけましょう。
コモンズでは技術や文化を表す画像をいつでも募集中です。
正解は %1$s でした。おめでとうございます!
+ 続行
回答するには2件のどちらかを選択
ログインが期限切れになりました。もう一度ログインしてください。
友だちとクイズを共有!
@@ -351,6 +359,9 @@
アプリをシェアする
回転
付近の場所を読み込めません
+ この地域に写真がありません
+ 周辺の場所がありません
+ 近くのモニュメントの取得エラー。
最近の検索はまだありません
本当に検索履歴を消去しますか?
このアップロードを本当にキャンセルしますか?
@@ -361,15 +372,15 @@
貢献
プロフィール
バッジ
- 統計
受け取った感謝
秀逸な画像
「近くの場所」機能でアップロードした画像
- レベル %d
+ レベル %1$d
+ %1$s (レベル %2$s)
アップロードした画像
却下されなかった画像
使用された画像
- 成果を友だちとシェアしましょう!
+ 貢献を友だちと共有しましょう!
これらの条件を満たすとレベルがアップします。「統計」欄の項目はレベル計算とは無関係です。
最低条件:
コモンズへの投稿画像数。アップロードに使用したアプリは問いません
@@ -408,7 +419,7 @@
自分のプライバシーを傷つけると気がつきました
以前とは考えが変わりました。今後は公衆の場で自分の画像を公開したくありません
残念ですがこの画像は百科事典の目的に合いません
- 私本人が%1$sにアップロードし、%2$d件の記事で使用されました。
+ 私本人が%1$sにアップロードし、少なくとも%2$d件の記事で使用されました。
コモンズへようこそ!\n\n追加ボタンを押して、ぜひご自分のメディアの初投稿をしましょう。
カテゴリが選択されていません
カテゴリを指定しない画像は使用されることがほとんどありません。ほんとうにカテゴリを選択しないまま作業を続けますか?
@@ -425,11 +436,14 @@
以後、表示しない
位置情報許可を請求
通知カードで近くの場所を表示するたび、位置情報の使用を許可するかどうか尋ねる
- 何か問題が発生し、あなたの貢献を表示できませんでした
+ 何か問題が発生し、貢献を表示できませんでした
たくさんの貢献をしていただいたのですが、件数が多すぎるため貢献度算出システムが処理できません。まさに究極の貢献をされました。
終了日:
キャンペーンを表示
現在、実施中のキャンペーンを表示
+ 削除ボタンを表示
+ 許可
+ 閉じる
キャンペーンの通知は表示されなくなります。ただし「設定」ページでいつでも通知の表示を有効にできます。
この機能はネットワーク接続が必要です。接続設定の確認をお願いします。
画像の処理中にエラーが発生しました。もう一度、お願いします。
@@ -443,8 +457,8 @@
%1$sのカテゴリ確認を申請できませんでした
%1$sのカテゴリ確認を申請中です
完了
- 感謝の送信:完了
- %1$sさんに感謝の送信が完了しました
+ 感謝の送信:成功
+ %1$sさんに感謝を送信しました
%1$sさんへ感謝を送信できませんでした
感謝の送信:失敗
%1$sさんに感謝を送信中
@@ -474,15 +488,14 @@
未読を見る
画像の選択中にエラーが発生しました
お待ちください…
- 秀逸な画像とは、技術力の高い写真家や作画家による作品で、ウィキメディアコモンズのコミュニティから最高の品質を誇るものとして選出されています。
「近くの場所でアップロードした画像」とは、地図上で検索した結果に基づいてアップロードした画像のことです。
この機能は、変更履歴や差分のページに表示される小さな感謝リンクで、有用な編集を行った利用者に感謝を伝えられるようにします。
- 次のメディアにコピー
+ 次の項目にコピー
コピーしました
コモンズへの投稿画像の良い例
投稿に適さない画像のサンプル
この画像をスキップ
- ダウンロードに失敗しました! 外部ストレージの許可がないため、ファイルをダウンロードできませんでした
+ ダウンロードに失敗しました。外部ストレージの許可がないため、ファイルをダウンロードできませんでした
EXIF タグの管理
アップロードに添付するEXIFタグを選択
作者
@@ -495,6 +508,7 @@
スマホから直接、ウィキメディア・コモンズに画像を投稿する。\nコモンズアプリを今すぐダウンロード:%1$s
アプリの共有に使うのは…
画像情報
+ 今後このメッセージを表示しない
カテゴリが見つかりません
描写が見つかりません
アップロードを中止しました
@@ -544,7 +558,7 @@
説明とキャプションを編集する
画像をシェア
あなたはまだ投稿をしたことがありません
- %sはまだ投稿をしたことがありません
+ %1$sはまだ投稿をしたことがありません
アカウントを作成しました
テキストをクリップボードにコピー済み
通知を既読にしました
@@ -553,7 +567,7 @@
存在する
写真がない
場所のタイプ:
- 橋・博物館・ホテルなど
+ 橋、博物館、ホテル、など。
ログインがうまくいきませんでした。パスワードをリセットする必要があります!
メディア
子分類
@@ -574,6 +588,7 @@
位置設定を開ませんでした。手動で位置を有効にしてください
高品質を確保するには、高精モードを選択してください。
位置を有効にしますか?
+ アプリが現在位置を表示するために位置サービスをオンにしてください
付近が正確に機能するには、位置を有効にしてください
これら2点の撮影場所は同じですか? 右側の画像に緯度経度情報を添付しますか?
さらに読み込む
@@ -592,7 +607,7 @@
5. 先ほどのウィキ文を適切な位置にペーストします。
6. もしその位置に合わせる必要がある場合には、ウィキ文を編集します。詳細は<a href=\"https://ja.wikipedia.org/wiki/Help:画像の表示#一番簡単な方法\">こちら</a>をご参照ください。
7. 記事を保存して公開
- ウィキコードをクリップボードにコピー
+ ウィキテキストをクリップボードにコピー
一時停止
継続
一時停止
@@ -600,7 +615,7 @@
ブックマーク
貢献
リーダーボード
- 順位
+ 順位:
件数:
順位
利用者
@@ -633,29 +648,51 @@
適合するカテゴリを選びます。描写と異なり、カテゴリは英語のみです。
コモンズに置くと、皆さんの画像はだれでも再利用できます。著作権ほか、すべての権利は適用されませんが、同意しますか? 作者として名前を表示してほしいですか? 改変された場合も、同じライセンス条件を継承してほしいですか?
描写
+ ラベル
+ 説明
メディアのライセンス
メディアの詳細
カテゴリのページを表示
+ 項目ページを表示
アプリのユーザーインターフェース言語
+ キャプションと説明を除去
さらに詳しく
すべての言語
+ 位置を選択
+ パンとズームで調整
+ 位置を選択
地図アプリで表示
位置を編集
- 場所が正しいかどうかを確認する
+ 画像の位置
+ 位置が正しいかどうかを確認する
ラベル
説明
項目
+ カスタムセレクター
画像なし
完了
戻る
+ この画像は既にコモンズにアップロードされています。
+ 技術的な理由により、アプリは一度に%1$d枚以上の画像を確実にアップロードすることができません。%1$d枚のアプロード制限を%2$d枚超過しています。
+ 閉じる
+ 最大: %1$d
+ エラー: アップロード制限を超えました
+ モニュメントを表示
権限が必要です
+ 近くの場所を表示するには、位置サービスをオンにしてください。
+ マップ上に近くの場所を表示するには位置アクセス権限が必要です。
+ 利用者の投稿: %1$s
+ 利用者の貢献: %1$s
利用者プロフィールを表示
題材を編集する
カテゴリを編集
+ 高度なオプション
適用
リセット
+ 位置が見つかりません
位置を追加
詳細
+ 公開したくない情報はすべて選択解除してください。
APIレベル
アンドロイドのバージョン
デバイスの製造元
@@ -666,11 +703,17 @@
フィードバックを送る途中でエラーが起きました
あなたのフィードバックは何ですか?
あなたのフィードバック
- アップロード不可としてマーク
+ アップロードしないとしてマーク
+ アップロードしないとしてマーク解除
+ アップロードしないとしてマーク中
+ アップロードしないとしてマーク解除中
+ 処理済みの画像を表示
+ 処理済みの画像を非表示
これ以上画像が見つかりません
この画像は既にアップロードされています
この画像をアップロード用に選択できません
画像が選択されました
+ アップロードしないとマークされた画像
報告
白色背景を設定
黒色背景を設定
@@ -679,28 +722,70 @@
このコンテンツを報告する
この利用者のブロックを依頼
全画面選択モードへようこそ
+ 日本の指を使ってズームイン・アウトします。
リーダーボードのアバターを設定するには、任意の画像の 3 つのドット メニューで [アバターとして設定] をタップします。
+ この項目を共有できません
この機能には権限が必要です
+ 有用な説明の書き方を学ぶ
+ 有用なキャプションの書き方を学ぶ
+ 自分の貢献を表示
画像の編集
位置を編集
+ 位置を更新しました!
+ 位置を除去
+ 位置の除去警告
+ 位置情報により写真がより有用で見つけやすくなります。本当に写真から位置情報を除去しますか?
+ 位置を除去しました!
作者に感謝する
作者への感謝の送信エラー。
ログインが期限切れになりました。もう一度ログインしてください。
GPXファイルを開くことができるアプリケーションがありません
+ ファイルが正常に保存されました
+ GPXファイルを開きますか?
+ KMLファイルを開きますか?
+ KMLファイルの保存に失敗しました。
+ GPXファイルの保存に失敗しました。
+ KMLファイルとして保存中...
+ GPXファイルとして保存中...
- - %d件の画像が選択されました
+ - %1$d件の画像が選択されました
+ 複数アップロードではすべての画像が同一のカテゴリおよび題材となります。画像が題材およびカテゴリを共有していない場合、個別のアップロードを複数実施してください。
+ 複数アップロードに関する注記
+ この項目に関する問題をウィキデータに報告
+ コメントを入力してください
+ トーク
+ その他の問題または情報 (以下に説明してください)。
+ あなたのフィードバックは以下のウィキページに投稿されます: <a href=\"https://commons.wikimedia.org/wiki/Commons:Mobile_app/Feedback\">Commons:Mobile app/Feedback</a>
+ 本当にすべてのアップロードをキャンセルしますか?
すべてのアップロードをキャンセルしています...
アップロード
保留中
失敗しました
+ 場所データを読み込めませんでした
+ フォルダを削除
+ 削除を確認
+ %2$d個の項目を含むフォルダー %1$s を本当に削除しますか?
削除
キャンセル
+ フォルダー %1$s が正常に削除されました
+ フォルダー %1$s の削除に失敗しました
+ フォルダーの内容の削除エラー: %1$s
+ 以下のバケットIDに対するフォルダーパスの取得に失敗: %1$d
+ この場所にはまだ写真がありません、撮りに行きましょう!
+ この場所には既に写真があります。
+ この場所に写真があるか確認中です。
+ 読み込み中のエラー
+ 使用はありません
コモンズ
その他のウィキ
+ ファイルの使用
アカウント
アカウント抹消
アカウント抹消の警告
キャプション
キャプションをクリップボードにコピーしました
+ 作成およびアップロード者: %1$s
+ %1$s が作成し %2$s がアップロード
+ 削除提案
diff --git a/app/src/main/res/values-ji/strings.xml b/app/src/main/res/values-ji/strings.xml
index 0d6cf62a8..feb0553c1 100644
--- a/app/src/main/res/values-ji/strings.xml
+++ b/app/src/main/res/values-ji/strings.xml
@@ -11,16 +11,11 @@
- %1$d טעקע לאדט אן
- %1$d טעקעס לאדן אן
-
- - \@string/contributions_subtitle_zero
- - (%1$d)
- - (%1$d)
-
- אנהייבן %1$d ארויפֿלאד
- אנהייבן %1$d ארויפֿלאדן
-
+
- %1$d ארויפֿלאד
- %1$d ארויפֿלאדן
@@ -80,8 +75,8 @@
אַנולירן
אראָפלאָדן
סטאנדארט־ליצענץ
- Attribution-ShareAlike 3.0
- Attribution 3.0
+ Attribution-ShareAlike 3.0
+ Attribution 3.0
CC0
CC BY-SA 3.0
CC BY 3.0
diff --git a/app/src/main/res/values-jv/strings.xml b/app/src/main/res/values-jv/strings.xml
index e775ba274..50b534507 100644
--- a/app/src/main/res/values-jv/strings.xml
+++ b/app/src/main/res/values-jv/strings.xml
@@ -9,27 +9,22 @@
-->
Kaca Facebook Commons
- Kodhe Sumber Github Commons
+ Kodhe Sumber Github Commons
Logo Commons
Situswèb Commons
- %1$d barkas lagi kaunggah
- %1$d barkas lagi kaunggah
-
- - \@string/contributions_subtitle_zero
- - (%1$d)
- - (%1$d)
-
- - Miwiti %1$d unggahan
- - Miwiti %1$d unggahan
+ - Ngolah %1$d unggahan
-
- - %1$d unggahan
+
- %1$d unggahan
- Gambar iki bakal dilisènsèkaké nganggo %1$s
+
+ - Gambar iki bakal dilisènsèkaké nganggo %1$s
+
Dlajah
Cakrik
Umum
@@ -106,10 +101,10 @@
Lisènsi
Anggo sesirah/wedharan sadurungé
Modhe wengi
- Atribusi-DumSaèmper 4.0
- Atribusi 4.0
- Atribusi-DumSaèmper 3.0
- Atribusi 3.0
+ Atribusi-DumSaèmper 4.0
+ Atribusi 4.0
+ Atribusi-DumSaèmper 3.0
+ Atribusi 3.0
CC0
CC BY-SA 3.0
CC BY-SA 3.0
@@ -140,14 +135,13 @@
Dadi Pangetès Béta
Kodhe 2FA
Panjenengan yakin arep metu log?
- Gambar Médhia Wurung
Anak kategori ora tinemu
Kategori babon ora tinemu
Gunung Zao
Llama
Kreteg Kluwung
Tulip
- Sugeng Rawuh ing Wikipédia
+ Sugeng Rawuh ing Wikipédia
Wisma Opera Sydney
Wurung
Bukak
@@ -185,4 +179,5 @@
Golèkan mentas waé:
Pitakon
Banjuraké
+ Palilah manasuka: Njupuk pernah saiki kanggo saran ing kategori
diff --git a/app/src/main/res/values-ka/strings.xml b/app/src/main/res/values-ka/strings.xml
index e6142ec34..223783b98 100644
--- a/app/src/main/res/values-ka/strings.xml
+++ b/app/src/main/res/values-ka/strings.xml
@@ -8,7 +8,7 @@
-->
ვიკისაწყობის Facebook-ის გვერდი
- ვიკისაწყობის წყაროს კოდი Github-ზე
+ ვიკისაწყობის წყაროს კოდი Github-ზე
ვიკისაწყობის ლოგო
ვიკისაწყობის საიტი
მდებარეობის ამრჩევიდან გასვლა
@@ -32,20 +32,19 @@
- %1$d ფაილი იტვირთება
- %1$d ფაილი იტვირთება
-
- - (%1$d)
- - (%1$d)
-
ატვირთვის დაწყება
- - მუშავდება %d ატვირთვა
- - მუშავდება %d ატვირთვა
+ - მუშავდება %1$d ატვირთვა
+ - მუშავდება %1$d ატვირთვა
- - %d ატვირთვა
- - %d ატვირთვები
+ - %1$d ატვირთვა
+ - %1$d ატვირთვები
+
+
+ - ეს სურათი გავრცელდება %1$s ლიცენზიით
+ - ეს სურათი გავრცელდება %1$s ლიცენზიით
- ეს სურათი გავრცელდება %1$s ლიცენზიით
- %1$d ატვირთვა
- %1$d ატვირთვა
@@ -84,7 +83,7 @@
ატვირთვა რიგშია (შეზღუდული კავშირის რეჟიმი ჩართულია)
%1$ ატვირთულია!
დააჭირეთ თქვენი ატვირთვის სანახავად
- ფაილის ატვირთვა: %s
+ ფაილის ატვირთვა: %1$s
%1$ ატვირთვა
ატვირთვის დასრულება %1$
%1$ ატვირთვა ვერ მოხერხდა
@@ -155,10 +154,10 @@
ნაგულისხმევი ლიცენზია
წინა სათაურისა და აღწერის გამოყენება
თემა
- Attribution-ShareAlike 4.0
- Attribution 4.0
- Attribution-ShareAlike 3.0
- Attribution 3.0
+ Attribution-ShareAlike 4.0
+ Attribution 4.0
+ Attribution-ShareAlike 3.0
+ Attribution 3.0
CC0
CC BY-SA 3.0
CC BY 3.0
@@ -220,15 +219,14 @@
2ფა კოდი
ელფოსტის დამადასტურებელი კოდი
ნამდვილად გსურთ გასვლა?
- მედიაგამოსახულების შეცდომა
ქვეკატეგორიები ვერ მოიძებნა
ზედა დონის კატეგორიები ვერ მოიძებნა
ზაოს მთა
ლამები
ცისარტყელის ხიდი
ტიტა
- მოგესალმებით ვიკიპედიაში
- მოგესალმებით — საავტორო უფლებები
+ მოგესალმებით ვიკიპედიაში
+ მოგესალმებით — საავტორო უფლებები
სიდნეის ოპერის თეატრი
გაუქმება
გახსნა
@@ -364,13 +362,11 @@
მიღწევები
პროფილი
ნიშნები
- სტატისტიკა
მადლობა მიღებულია
რჩეული სურათები
სურათები „ახლომდებარე ადგილები“ -დან
- დონე %d
- %s (დონე %s)
- %s (%s)
+ დონე %1$d
+ %1$s (დონე %2$s)
სურათები ატვირთულია
სურათები არ დაბრუნებულა
სურათები გამოიყენება
@@ -430,7 +426,7 @@
აღარ მკითხო
მდებარეობის ნებართვის მოთხოვნა
ახლომდებარე შეტყობინებების ბარათის ნახვის ფუნქციისთვის, მოითხოვეთ მდებარეობის ნებართვა.
- რაღაც შეცდომა მოხდა, ჩვენ ვერ მოვახერხეთ მიღწევის განხილვა
+ რაღაც შეცდომა მოხდა, ჩვენ ვერ მოვახერხეთ მიღწევის განხილვა
თქვენ იმდენი წვლილი შეიტანეთ, რომ ჩვენი მიღწევების გაანგარიშების სისტემას არ შეუძლია გაუმკლავდეს. ეს უდიდესი მიღწევაა.
მთავრდება:
საჩვენებელი კამპანიები
@@ -483,7 +479,7 @@
აპლიკაციის მომხმარებლის ინტერფეისის ენა
ადგილმდებარეობის რედაქტირება
ადგილმდებარეობის მაჩვენებლის სურათის ნახვა
- ადგილმდებარეობის მაჩვენებლის სურათის სურათის ჩრდილი
+ ადგილმდებარეობის მაჩვენებლის სურათის სურათის ჩრდილი
სურათის მდებარეობა
შეამოწმეთ, არის თუ არა ადგილმდებარეობა სწორი
სახელი
@@ -496,6 +492,7 @@
შესანიშნავია
უარყოფა
მეტის გაგება
+ დამატებითი ნებართვა: მიმდინარე ადგილმდებარეობის განსაზღვრა კატეგორიის შემოთავაზებისთვის
დეტალები
API დონე
Android-ის ვერსია
@@ -508,12 +505,12 @@
როგორია თქვენი გამოხმაურება?
თქვენი გამოხმაურება
მონიშნეთ,რომ არ არის ასატვირთი
- GPX ფაილის შენახვა ვერ მოხერხდა.
- KML ფაილის შენახვა
- GPX ფაილის შენახვა
+ GPX ფაილის შენახვა ვერ მოხერხდა.
+ KML ფაილის შენახვა
+ GPX ფაილის შენახვა
- - %d სურათი არჩეულია
- - %d სურათი არჩეულია
+ - %1$d სურათი არჩეულია
+ - %1$d სურათი არჩეულია
გთხოვთ, გაითვალისწინოთ, რომ მრავალჯერადი ატვირთვისას ყველა სურათს ერთნაირი კატეგორიები და გამოსახულებები აქვს. თუ სურათებს საერთო გამოსახულებები და კატეგორიები არ აქვთ, გთხოვთ, ატვირთოთ ისინი ცალ-ცალკე.
შენიშვნა მრავალჯერადი ატვირთვის შესახებ
@@ -549,7 +546,6 @@
ვიკისაწყობი
სხვა ვიკისები
ფაილის გამოყენება
- SingleWebViewActivity
ანგარიში
ანგარიშის გაქრობა
ანგარიშის გაქრობის გაფრთხილება
diff --git a/app/src/main/res/values-kab/strings.xml b/app/src/main/res/values-kab/strings.xml
index 1370e84c0..1a86a65aa 100644
--- a/app/src/main/res/values-kab/strings.xml
+++ b/app/src/main/res/values-kab/strings.xml
@@ -6,23 +6,21 @@
-->
Asmel Facebook n Commons
- Tangalt aɣbalu Github n Commons
+ Tangalt aɣbalu Github n Commons
Alugu Commons
Asmel wen n Commons
+ Aglam n tutlayt
Aglam
+ Tugna
Akk
- %1$d n ufaylu yezga yettali
- %1$d n ifuyla zgan ttalin
-
- - (%1$d)
- - (%1$d)
-
Beddu n walluy
- - %d n usali iteddu
- - %d n usali iteddu
+ - %1$d n usali iteddu
+ - %1$d n usali iteddu
- %1$d n usali
@@ -74,6 +72,7 @@
Ṭṭef tawlaft
S lqeṛban
Ifuyla i suliɣ
+ Nɣel aseɣwen
Bḍu
Azwel
Aglam
@@ -110,15 +109,16 @@
Ur tsuliḍ ara yakan tiwlafin.
Ɛref̣ tikelt-nniḍen
Sefsex
+ Akk tutlayin
S tuzna n tygna-agi, ad d-wekkdeɣ d akken d ayla-w, ur tegbir ara aferdis yettwaḥerzen s izerfan n umeskar, udiɣ tqudeṛ <a href=\"https://commons.wikimedia.org/wiki/Commons:Policies_and_guidelines\">Tisertiyin n Wikimedia Commons</a>.
Sider
Turagt
Seqdec azwel neɣ aglam yezrin
Askar n yiḍ
- Attribution-ShareAlike 4.0
- Attribution 4.0
- Attribution-ShareAlike 3.0
- Attribution 3.0
+ Attribution-ShareAlike 4.0
+ Attribution 4.0
+ Attribution-ShareAlike 3.0
+ Attribution 3.0
CC0
CC BY-SA 3.0
CC BY-SA 3.0
@@ -160,13 +160,12 @@
Jerred ar ubadu-nneɣ Beta di Google Play sakin awi anekcum uzwir ar tmahilin timaynutin akked useɣti n ibugen.
Tangalt 2FA
Tabɣiḍ ad teffɣeḍ?
- Tugna n midya ur teddi ara
Taqirruct Zao
Lamas
Taqenṭart tislit n unẓaṛ
Taxlult
- Anṣuf ar wikipedia
- Izerfan n umeskar n usterḥeb
+ Anṣuf ar wikipedia
+ Izerfan n umeskar n usterḥeb
Tazeqqa Opera n Sydney
Sefsex
Ldi
@@ -189,6 +188,7 @@
Qqen ar umiḍan-ik
Azen afaylu n uɣmis
Azen afaylu n uɣmis i yinermisen s yimayl
+ Zgel
Qqen
Ulac adeg
Ilaq usireg i uskan tabdart n wadigen iqerben
@@ -201,4 +201,29 @@
Nadi
Nadi
Taggayin
+ Kemmel
+ Kemmel
+ Bḍu asnas
+ Kkes
+ Amaɣnu
+ Tabdart
+ Uḍfir
+ Tiwlafin
+ Taggayin
+ Immed
+ Tugna tuḍfiṛt
+ Ameskar
+ Aseɣẓan
+ Iɣewwaren
+ Ubrik
+ Aceɛlal
+ Sali-d ugar
+ Sentem
+ Ugar
+ Aseqdac
+ ISSIN UGAR
+ Tasiregt tafrayant: Awi adig amiran i yisumar n taggayt
+ Kkes
+ Semmet
+ Amiḍan
diff --git a/app/src/main/res/values-kge/error.xml b/app/src/main/res/values-kge/error.xml
new file mode 100644
index 000000000..f2f30519a
--- /dev/null
+++ b/app/src/main/res/values-kge/error.xml
@@ -0,0 +1,10 @@
+
+
+
+ Commons cadang ngojut
+ Ay uy. Uwat say mak bonos!
+ Unjuk panday sikam apiya say Niku gawiko, raduna kirimko jak surel. Informasimu nulung sikam nandanina!
+ Tarima kasih!
+
diff --git a/app/src/main/res/values-km/strings.xml b/app/src/main/res/values-km/strings.xml
index 3139b9293..87464cd58 100644
--- a/app/src/main/res/values-km/strings.xml
+++ b/app/src/main/res/values-km/strings.xml
@@ -10,22 +10,15 @@
- %1$d ឯកសារកំពុងផ្ទុកឡើង
- %1$d ឯកសារកំពុងផ្ទុកឡើង
-
- - \@string/contributions_subtitle_zero
- - (%1$d)
- - (%1$d)
-
ចាប់ផ្ដើមផ្ទុកឡើង
- ចាប់ផ្ដើមផ្ទុកឡើង %1$d
- ចាប់ផ្ដើមផ្ទុកឡើង %1$d
-
- - %1$d ផ្ទុកឡើង
+
- %1$d បានផ្ទុកឡើង
-
- - រូបភាពនេះនឹងត្រូវបានផ្តល់អាជ្ញាបណ្ណក្រោមសិទ្ធិ %1$s
+
- រូបភាពទាំងនេះនឹងត្រូវបានផ្តល់អាជ្ញាបណ្ណក្រោម %1$s
@@ -108,8 +101,8 @@
បោះបង់
ទាញយក
អាជ្ញាបណ្ណលំនាំដើម
- Attribution-ShareAlike 3.0
- Attribution 3.0
+ Attribution-ShareAlike 3.0
+ Attribution 3.0
CC0
CC BY-SA 3.0
CC BY 3.0
diff --git a/app/src/main/res/values-kn/strings.xml b/app/src/main/res/values-kn/strings.xml
index 5e0e0c602..36c4d2dc3 100644
--- a/app/src/main/res/values-kn/strings.xml
+++ b/app/src/main/res/values-kn/strings.xml
@@ -2,6 +2,7 @@
ಕಾಮನ್ಸ್ ಫೇಸ್ಬುಕ್ ಪುಟ
+ ಕಾಮನ್ಸ್ನ ಗಿಟ್ಹಬ್ ಮೂಲ ಕೋಡ್
+ ಕಾಮನ್ಸ್ ಲಾಂಛನ
ಕಾಮನ್ಸ್ ಜಾಲತಾಣ
+ ಸ್ಥಳ ಆಯ್ಕೆಯಿಂದ ನಿರ್ಗಮಿಸಿ
ಸಲ್ಲಿಸಿ
+ ಇನ್ನೊಂದು ವಿವರಣೆಯನ್ನು ಸೇರಿಸಿ
+ ಹೊಸ ಕೊಡುಗೆಗಳನ್ನು ಸೇರಿಸಿ
+ ಕ್ಯಾಮೆರಾದಿಂದ ಕೊಡುಗೆಯನ್ನು ಸೇರಿಸಿ
+ ಫೋಟೋಗಳಿಂದ ಕೊಡುಗೆಯನ್ನು ಸೇರಿಸಿ
+ ಹಿಂದಿನ ಕೊಡುಗೆಗಳ ಗ್ಯಾಲರಿಯಿಂದ ಕೊಡುಗೆಯನ್ನು ಸೇರಿಸಿ
+ ತಲೆಬರಹ
+ ಭಾಷಾ ವಿವರಣೆ
+ ತಲೆಬರಹ
+ ವಿವರಣೆ
+ ಚಿತ್ರ
+ ಎಲ್ಲಾ
+ ಮೇಲಕ್ಕೆ ಟಾಗಲ್ ಮಾಡಿ
ದಿನದ ಚಿತ್ರ
- %1$d ಕಡತ ಅಪ್ಲೋಡ್ ಅಗುತ್ತಿದೆ
@@ -35,7 +51,7 @@
ಅಪ್ಲೋಡ್ ಪ್ರಾರಂಭವಾಗಿದೆ!
%1$s ಅಪ್ಲೋಡ್ ಆಗಿದೆ!
ನಿಮ್ಮ ನಕಲೇರಿಕೆಯನ್ನು ನೋಡಲು ಮೆಲ್ಲಗೆ ತಟ್ಟಿ
- ಕಡತ ಅಪ್ಲೋಡ್ ಆಗುತ್ತಿದೆ: %s
+ ಕಡತ ಅಪ್ಲೋಡ್ ಆಗುತ್ತಿದೆ: %1$s
%1$s ನಕಲೇರಿಕೆ ಆಗಿದೆ!
%1$s ಅಪ್ಲೋಡ್ ಮಾಡುವಿಕೆಯನ್ನು ಪೂರ್ಣಗೊಳಿಸಲಾಗುತ್ತಿದೆ
%1$s ಅನ್ನು ಅಪ್ಲೋಡ್ ಮಾಡಲು ವಿಫಲವಾಗಿದೆ
@@ -83,10 +99,10 @@
ಪೂರ್ವನಿಯೋಜಿತ ಪರವಾನಗಿ
ಹಿಂದಿನ ಶೀರ್ಷಿಕೆ ಹಾಗೂ ವರ್ಣನೆಯನ್ನು ಬಳಸಿ
ಥೀಮ್
- Attribution-ShareAlike 4.0
- Attribution 4.0
- Attribution-ShareAlike 3.0
- Attribution 3.0
+ Attribution-ShareAlike 4.0
+ Attribution 4.0
+ Attribution-ShareAlike 3.0
+ Attribution 3.0
ದಯವಿಟ್ಟು ಅಪ್ಲೋಡ್ ಮಾಡಬೇಡಿ:
ಸೆಲ್ಫಿ ಅಥವಾ ನಿಮ್ಮ ಗೆಳೆಯರ ಚಿತ್ರಗಳು
ನೀವು ಅಂತರ್ಜಾಲದಿಂದ ಡೌನ್ಲೋಡ್ ಮಾಡಿದ ಚಿತ್ರಗಳು
@@ -161,7 +177,6 @@
ತಪ್ಪಾದ ಉತ್ತರ
ಅಳಿಸು
ಸಾಧನೆಗಳು
- ಅಂಕಿ ಅಂಶಗಳು
ದೋಷ ಉಂಟಾಯಿತು!
ಕಾಮನ್ಸ್ ಅಧಿಸೂಚನೆ
ಕಾಣಿಕೆಗಳು
@@ -180,5 +195,5 @@
ಇನ್ನೂ ಓದಿ
ಯಾವುದೇ ಸ್ಥಳ ಕಂಡುಬಂದಿಲ್ಲ
ಈ ಚಿತ್ರವನ್ನು ತೆಗೆದ ಸ್ಥಳವನ್ನು ಸೇರಿಸಿ?\nಸ್ಥಳ ಡೇಟಾವು ವಿಕಿ ಸಂಪಾದಕರಿಗೆ ನಿಮ್ಮ ಚಿತ್ರವನ್ನು ಹುಡುಕಲು ಸಹಾಯ ಮಾಡುತ್ತದೆ, ಇದು ಹೆಚ್ಚು ಉಪಯುಕ್ತವಾಗಿದೆ.\nಧನ್ಯವಾದಗಳು.
- ಸ್ಥಳ ಸೇರಿಸಿ
+ ಸ್ಥಳ ಸೇರಿಸಿ
diff --git a/app/src/main/res/values-ko-rKP/strings.xml b/app/src/main/res/values-ko-rKP/strings.xml
index b58b509c7..e3dc7b836 100644
--- a/app/src/main/res/values-ko-rKP/strings.xml
+++ b/app/src/main/res/values-ko-rKP/strings.xml
@@ -5,7 +5,7 @@
-->
공용 페이스부크 페지
- 공용 GitHub 원천코드
+ 공용 GitHub 원천코드
공용 로고
공용 웨브싸이트
오늘의 화상
@@ -13,20 +13,14 @@
- %1$d개의 서류를 올리적재하는중
- %1$d개의 서류를 올리적재하는중
-
- - \@string/contributions_subtitle_zero
- - (%1$d)
- - (%1$d)
-
- %1$d장의 올리적재를 시작합니다
- %1$d장의 올리적재를 시작합니다
-
+
- %1$d개 올리적재
- %1$d개 올리적재
- 이 그림은 %1$s에 따라 사용이 허가됩니다
찾아보기
보이기
일반
@@ -105,10 +99,10 @@
기본 허가권
이전의 제목/설명을 사용하기
야간방식
- 저작자표시-동일조건변경허락 4.0
- 저작자표시 4.0
- 저작자표시-동일조건변경허락 3.0
- 저작자표시 3.0
+ 저작자표시-동일조건변경허락 4.0
+ 저작자표시 4.0
+ 저작자표시-동일조건변경허락 3.0
+ 저작자표시 3.0
CC0
크리에이티브코먼즈 저작자표시-동일조건변경허락 3.0
크리에이티브코먼즈 저작자표시 3.0
@@ -158,13 +152,12 @@
베타 시험자가 되세요
2FA부호
정말 탈퇴하시겠습니까?
- 매체 그림 실패
하위 분류가 없습니다
부모 분류가 없습니다
자오련봉
레인보우브리즈
울금향
- 위키백과에 오신것을 환영합니다
+ 위키백과에 오신것을 환영합니다
취소
열기
닫기
@@ -257,9 +250,8 @@
검색 리력이 지워짐
지우기 신청
성과
- 통계
알찬 그림
- 수준
+ 수준 %1$d
화상 올리적대됨
동무와 성과를 공유하세요!
최소 요구사항:
@@ -290,4 +282,5 @@
여기를 검색
권한 요청
다시는 묻지 않음
+ 선택적 허가: 분류 추천을 위해 현재 위치를 가져옵니다.
diff --git a/app/src/main/res/values-ko/strings.xml b/app/src/main/res/values-ko/strings.xml
index 4fa6329b2..b39b60e82 100644
--- a/app/src/main/res/values-ko/strings.xml
+++ b/app/src/main/res/values-ko/strings.xml
@@ -24,8 +24,8 @@
* 아라
-->
- 공용 페이스북 페이지
- 공용 GitHub 소스 코드
+ 공용 페이스북 문서
+ 공용 GitHub 소스 코드
공용 로고
공용 웹사이트
출구 위치 선택기
@@ -35,11 +35,11 @@
카메라에서 기여 참가
사진에서 기여 참가
이전 기여 갤러리에서 기여 참가
- 캡션
+ 설명
언어 설명
캡션
설명
- 이미지
+ 그림
모두
위로 전환
검색 뷰
@@ -49,18 +49,13 @@
- %1$d개의 파일을 올리는 중
- %1$d개의 파일을 올리는 중
-
- - (%1$d)
- - (%1$d)
-
파일 올리기
-
+
- %1$d장의 업로드를 처리하는 중입니다
- %1$d장의 업로드를 처리하는 중입니다
- - %d개 업로드
- - %d개 업로드
+ - %1$d개 업로드
- 이 그림은 %1$s에 따라 사용이 허가됩니다
@@ -98,7 +93,7 @@
업로드 대기 중 (제한 연결 모드 활성화됨)
%1$s 파일을 올렸습니다!
올린 것을 보려면 탭하세요
- %1$s 파일 올리는 중
+ %1$s 파일 올리는 중
%1$s 파일을 올리는 중
%1$s 파일 올리기를 끝내는 중
%1$s 올리기 실패
@@ -141,7 +136,7 @@
%1$s와(과) 일치하는 분류를 찾을 수 없습니다
%1$s에 대한 위키데이터 검색 결과가 없습니다
%1$s에 자식 클래스가 없습니다
- %1$s에 부모 클래스가 없습니다
+ %1$s에 상위 클래스가 없습니다
위키미디어 공용에서 그림을 더 찾기 쉽게 만들기 위해 분류를 추가합니다.\n분류를 추가하려면 입력을 시작하세요.
분류
설정
@@ -168,10 +163,10 @@
기본 라이선스
이전의 제목과 설명을 사용하기
테마
- 저작자표시-동일조건변경허락 4.0
- 저작자표시 4.0
- 저작자표시-동일조건변경허락 3.0
- 저작자표시 3.0
+ 저작자표시-동일조건변경허락 4.0
+ 저작자표시 4.0
+ 저작자표시-동일조건변경허락 3.0
+ 저작자표시 3.0
CC0
크리에이티브 커먼즈 저작자표시-동일조건변경허락 3.0
크리에이티브 커먼즈 저작자표시 3.0
@@ -222,6 +217,7 @@
설명
토론
저자
+ 올린 사람
올린 날짜
라이선스
좌표
@@ -231,15 +227,14 @@
2FA 코드
이메일 인증 코드
정말 로그아웃하시겠습니까?
- 미디어 그림 실패
하위 분류가 없습니다
상위 분류가 없습니다
자오 연봉
라마
레인보우 브리지
튤립
- 환영 위키백과
- 환영 저작권
+ 환영 위키백과
+ 환영 저작권
시드니 오페라 하우스
취소
열기
@@ -374,13 +369,11 @@
성과
프로파일
배지
- 통계
받은 감사
알찬 그림
\"주변 장소\" 경유 이미지
- 레벨 %d
- %s (레벨 %s)
- %s (%s)
+ 레벨 %1$d
+ %1$s (레벨 %2$s)
사진 업로드됨
사용된 이미지
친구와 성과를 공유하세요!
@@ -433,7 +426,7 @@
위치 권한 없이 사진이 필요한 주변 장소를 표시할 수 없습니다
다시는 묻지 않음
위치 권한 요청
- 오류가 발생하여, 업적을 가져올 수 없습니다.
+ 오류가 발생하여, 업적을 가져올 수 없습니다.
캠페인 표시
진행되고 있는 캠페인 보기
허용
@@ -450,8 +443,8 @@
%1$s을(를) 위한 분류 검사를 요청하지 못했습니다
%1$s을(를) 위한 분류 검사를 요청합니다
완료
- 감사 표현 보내기: 성공
- 감사 표현 보내기: 실패
+ 감사 표현 보내기: 성공
+ 감사 표현 보내기: 실패
이것이 저작권 규정을 준수하고 있습니까?
알맞게 분류됐습니까?
이것이 범위에 포함되나요?
@@ -473,12 +466,12 @@
읽지 않은 항목 보기
이미지 선택 도중 오류가 발생했습니다
기다려 주십시오...
- 다음 미디어로 복사
+ 다음 미디어로 복사
복사했습니다
공용에 업로드할 좋은 이미지의 예
올리지 말아야 할 이미지 예시
이 이미지 건너뛰기
- 다운로드를 실패했습니다!! 외장 스토리지 권한 없이 파일을 다운로드할 수 없습니다.
+ 다운로드를 실패했습니다!! 외장 스토리지 권한 없이 파일을 다운로드할 수 없습니다.
EXIF 태그 관리
만든이
저작권
@@ -525,7 +518,7 @@
설명 및 캡션 편집
다음을 통해 이미지 공유
아직 기여가 없습니다
- %s님은 아직 기여가 없습니다
+ %1$s님은 아직 기여가 없습니다
계정을 만들었습니다!
텍스트가 클립보드에 복사되었습니다
알림을 읽은 것으로 표시
@@ -534,11 +527,13 @@
존재함
사진 필요
장소 유형:
- 다리, 박물관, 호텔 등.
+ 다리, 박물관, 호텔 등.
로그인에 문제가 생겼습니다, 비밀번호를 재설정해야 합니다!
미디어
자식 클래스
상위 클래스
+ 하위 분류
+ 상위 분류
주변 장소 발견
%1$s의 사진이 맞습니까?
%1$s의 사진이 맞습니까?
@@ -564,7 +559,7 @@
2. 확인을 클릭하면 위키백과 문서가 열립니다
5. 위키텍스트를 적절한 위치에 붙여 넣으세요.
7. 문서 게시
- 클립보드에 위키코드 복사
+ 클립보드에 위키코드 복사
일시 정지
계속하기
일시 중단됨
@@ -583,8 +578,10 @@
아바타로 설정
매년
매주
+ 항상
업로드
근처
+ 사용됨
내 순위
제한된 연결 모드
고품질 사진
@@ -618,7 +615,7 @@
뒤로
커스텀 사진 선택기에 오신 것을 환영합니다.
이 선택기는 당신이 지금까지 커먼즈에 업로드한 사진을 보여줍니다.
- 왼쪽 사진과 달리 오른쪽 사진에는 이미 업로드되었음을 나타내는 커먼즈 로고가 있습니다. \n이미지를 미리 보시려면 길게 터치하세요.
+ 왼쪽 사진과 달리 오른쪽 사진에는 이미 업로드되었음을 나타내는 커먼즈 로고가 있습니다. \n이미지를 미리 보시려면 길게 터치하세요.
훌륭합니다
이 이미지는 이미 커먼즈에 업로드되었습니다.
숨기기
@@ -626,8 +623,9 @@
오류: 업로드 제한에 도달했습니다
더 알아보기
권한 필요
- 사용자의 기여: %s
- 사용자 달성도: %s
+ 선택적 권한: 분류 추천을 위해 현재 위치 정보를 가져옵니다.
+ 사용자의 기여: %1$s
+ 사용자 달성도: %1$s
사용자 프로필 보기
묘사된 항목 편집하기
분류 편집
@@ -636,7 +634,7 @@
재설정
위치를 찾을 수 없습니다
이 사진을 찍은 장소를 추가해 보는 것은 어떨까요?\n위치 정보는 위키 편집자가 사진을 찾는 데 도움이 되며, 훨씬 더 유용하게 사용됩니다.\n감사합니다!
- 위치 추가
+ 위치 추가
자세한 사항
당신이 찍은 사진만 올려 주십시오. 저작권이 있는 이미지를 올린 사람은 차단됩니다. 양질의 이미지에도 해당합니다. 앱을 테스트해 주셔서 고맙습니다!
API 레벨
@@ -685,14 +683,14 @@
로그인 세션 만료. 다시 로그인해 주십시오.
GPX 파일을 열 수 있는 응용 프로그램이 없습니다
파일이 성공적으로 저장되었습니다
- GPX 파일을 여시겠습니까?
- KML 파일을 여시겠습니까?
- KML 파일을 저장하지 못했습니다.
- GPX 파일을 저장하지 못했습니다.
- KML 파일을 저장 중
- GPX 파일을 저장 중
+ GPX 파일을 여시겠습니까?
+ KML 파일을 여시겠습니까?
+ KML 파일을 저장하지 못했습니다.
+ GPX 파일을 저장하지 못했습니다.
+ KML 파일을 저장 중
+ GPX 파일을 저장 중
- - %d개 이미지 선택됨
+ - %1$d개 이미지 선택됨
다중 업로드에 대한 참고사항
이 항목에 관한 문제를 위키데이터에 보고하기
diff --git a/app/src/main/res/values-krc/strings.xml b/app/src/main/res/values-krc/strings.xml
index 5dd7af15f..deaccff00 100644
--- a/app/src/main/res/values-krc/strings.xml
+++ b/app/src/main/res/values-krc/strings.xml
@@ -6,7 +6,7 @@
-->
Викигёзенни Facebook Бети
- Викигёзенни Github Къайнакъ Коду
+ Викигёзенни Github Къайнакъ Коду
Викигёзен Лого
Викигёзен вебсайт
Локация сайлаучудан чыкъ
@@ -30,18 +30,14 @@
- %1$d файл джюкленеди
- %1$d файл джюкленеди
-
- - (%1$d)
- - (%1$d)
-
Джюклеуле Башланадыла
- - %d джюклениу этиледи
- - %d джюклениу этиледи
+ - %1$d джюклениу этиледи
+ - %1$d джюклениу этиледи
- - %d джюклеу
- - %d джюклеу
+ - %1$d джюклеу
+ - %1$d джюклеу
- Бу сурат %1$s лицензнияны тамалында боллукъду
@@ -85,7 +81,7 @@
Джюклеу кёзюуюн сакълайды (тимитли байланыу режим джандырылыбды)
%1$s джюкленди!
Джюкленнген файлгъа къарар ючюн басыгъыз
- Файл джюклене турады: %s
+ Файл джюклене турады: %1$s
%1$s джюклене турады
%1$s джюклениб бошалды
%1$s джюклеу джетишимсиз болду
@@ -135,6 +131,7 @@
Джарашдырыўла
Регистрация
Сайланнган Суратла
+ Сайланнган суратла, Викигёзен джамагъат, сайтдагъы эм мийик агъачы болгъанды деб сайлагъанды, эм фахмулу фотографла бла иллюстраторланы суратларыды.
Хайырланыучуну Сайлаучусу
Категория
Эксперт Тинтиу
@@ -156,10 +153,10 @@
Тынгылау бла Лицензия
Аллындагъы башлыкъ эмда ачыкълауну хайырлан
Тема
- Attribution-ShareAlike 4.0
- Attribution 4.0
- Attribution-ShareAlike 3.0
- Attribution 3.0
+ Attribution-ShareAlike 4.0
+ Attribution 4.0
+ Attribution-ShareAlike 3.0
+ Attribution 3.0
CC0
CC BY-SA 3.0
CC BY 3.0
@@ -220,15 +217,14 @@
2FA Код
Электрон почтаны верификация этигиз
Кертиден чыгъаргъа излеймисиз?
- Медиа Сурат Джетишимсизди
Тюб категория табылмады
Ана категорияла табылмадыла
Зао Тау
Ламала
Джангкъылыч Кёпюр
Гюлханий
- Википедиягъа Хош Келигиз
- Автор Хакълагъа Хош Келигиз
+ Википедиягъа Хош Келигиз
+ Автор Хакълагъа Хош Келигиз
Сидней Опера Театр
Ызына ал
Ач
@@ -364,13 +360,11 @@
Джетишимле
Профиль
Белгичикле
- Статистика
Бюсюреуле Алындыла
Сайланнган Суратла
\"Джууукъдагъы Джерле\" юсю бла суратла
- Дараджа %d
- %s (Дараджа %s)
- %s (%s)
+ Дараджа %1$d
+ %1$s (Дараджа %2$s)
Суратла Джюклендиле
Суратла Кери Алынмадыла
Суратла Хайырландыла
@@ -430,7 +424,7 @@
Буну мындан сора сорма
Локация эркинлик излегиз
Джууукъдагъы хапарландырыу картны кёргюзюу функциясы ючюн керек болса локация эркинлик излегиз.
- Не эсе да терс кетди, биз джетишимлеригизни алалмадыкъ
+ Не эсе да терс кетди, биз джетишимлеригизни алалмадыкъ
Джетишим эсеблеучю системабыз онглаямлазча, бек кёб къошум этдигиз. Бу уллу джетишимди.
Бошалады:
Компанияланы кёргюз
@@ -458,11 +452,11 @@
%1$s ючюн категория тинтиу излем болмады
%1$s ючюн категория тинтиу излем барады
Тындырылды
- Бюсюреуле Джибериу: Джетишимли
- %1$s бюсюреуле джиберилдиле
- %1$s бюсюреуле джиберилалмадыла
- Бюсюреуле Джибериу: Джетишимсиз
- %1$s ючюн Бюсюреуле Джибериу
+ Бюсюреуле Джибериу: Джетишимли
+ %1$s бюсюреуле джиберилдиле
+ %1$s бюсюреуле джиберилалмадыла
+ Бюсюреуле Джибериу: Джетишимсиз
+ %1$s ючюн Бюсюреуле Джибериу
Бу автор хакълагъа келишемиди?
Бу тюз категориялашханмыды?
Бу келишемиди?
@@ -489,15 +483,14 @@
Окъулмагъанланы кёргюз
Суратла сайланнган заманда халат болду.
Бираз сакълагъыз…
- Сайланнган суратла, Викигёзен джамагъат, сайтдагъы эм мийик агъачы болгъанды деб сайлагъанды, эм фахмулу фотографла бла иллюстраторланы суратларыды.
Джууукъдагъы джерле юсю бла джюкленнген суратла, картадагъы джерлени табыб джюкленнген суратладыла.
Бу функция, редакторланы, тарих бетде неда версия башхалыкъ бетде, гитче бюсюреу джибериуню хайырланыб, файдалы тюзетиулени этген хайырланыучулагъа Бюсюреу хапарландырыу джиберирге амал береди.
- Сорагъы медиагъа копия эт
+ Сорагъы медиагъа копия эт
Копия этилди
Гёзеннге джюкленник иги суратланы юлгюлери
Джюкленмезлик суратланы юлгюлери
Бу суратны атлат
- Джюклеу Джетишимсиз Болду!! Тыш асыраучугъа эркинлик берилмей джюклеяллыкъ тюлбюз.
+ Джюклеу Джетишимсиз Болду!! Тыш асыраучугъа эркинлик берилмей джюклеяллыкъ тюлбюз.
EXIF-тегле бла ишле
Джюклеуледе къайсы EXIF-теглени тутуллукъларын сайла
Автор
@@ -507,8 +500,6 @@
Линзаны Модели
Серия Номерлери
Программа баджарыу
- Медиа локациягъа джетишиу уналмады
- Джюклеген суратладан локация билгилени автомат халда алмазгъа боллукъбуз. Тилейбиз, джибериуден алгъа хар сурат ючюн келишген локацияны къошугъуз
Фотосуратланы телефонугъуздан туура Викигёзеннге джюклегиз. Гёзен Къошакъны энди эндиригиз: %1$s
Къошакъны буну бла юлюшле...
Сурат Информация
@@ -564,7 +555,7 @@
Ачыкълауланы эмда тюб джазыуланы тюзет
Суратны буну бла юлюшле
Алкъын чырт къошум этмедегиз
- %s алкъын чырт къошум этмеди
+ %1$s алкъын чырт къошум этмеди
Хыйсаб къуралды!
Текст алмашдырыу буферге копия этилгенди
Хапарландырыу окъулгъанча белгиленди
@@ -573,7 +564,7 @@
Барды
Фото Керекди
Джерни типи:
- Кёпюр, музей, къонакъ юй эмда а. к.
+ Кёпюр, музей, къонакъ юй эмда а. к.
Не эсе да терс кетди. Паролугъузну ташларгъа керексиз!
МЕДИА
БАЛА КЛАССЛА
@@ -617,7 +608,7 @@
5. Викитекстни келишимли джерле салыгъыз.
6. Керек болса викитекстни, келишимли орунландырыр ючюн тюзетигиз. Аслам информация ючюн <a href=\"https://en.wikipedia.org/wiki/Wikipedia:Manual_of_Style/Images#How_to_place_an_image\">бери къарагъыз</a>.
7. Статьяны басмалагъыз
- Викикодну алмашдырыу буферге копия эт
+ Викикодну алмашдырыу буферге копия эт
туракълат
бардыр
Туракълатылды
@@ -672,7 +663,7 @@
Карта къошакъда кёргюз
Локацияны тюзет
Локация сайлаучуну сурат кёрюнюмю
- \n\n Локация сайлаучуну сурат кёрюнюмюню кёлеккеси
+ \n\n Локация сайлаучуну сурат кёрюнюмюню кёлеккеси
Суратны Локациясы
Локацияны тюз болгъанын тинт
Белги
@@ -684,7 +675,7 @@
Кери
Энчи Сурат Сайлаучугъа Хош Келигиз
Бу сайлаучу, Гёзенде къайсы суратланы джюклегенигизни кёргюзюр.
- Солдагъы суратдан башха болуб, онгдагъы суратда алайсыз да джюкленнгенин белгилеген Гёзенни логосу барды. Суратны ал къарауу ючюн басыб туругъуз.
+ Солдагъы суратдан башха болуб, онгдагъы суратда алайсыз да джюкленнгенин белгилеген Гёзенни логосу барды. Суратны ал къарауу ючюн басыб туругъуз.
Сейирлик
Бу сурат Гёзеннге алайсыз да джюкленнгенди.
Техника чурумла бла къошакъ бир заманда %1$d фотосуратдан асламыны къоркъуусуз шекелде джюклеялмайды. %1$d болгъан джюклеу марда %2$d бла оздурулду.
@@ -698,8 +689,8 @@
Вики, Эсгертмелени Сюеди, Викимедиа джанындан къуралгъан эсгретмеле ючюн халкъла арасы фото эришиудю
Эркинлик Керекди
Джууукъдагъы картала тюз ишлер ючюн ТЕЛЕФОННУ БОЛУМУн окъургъа амал болургъа кереклиди
- Хайырланыучуну къошумлары: %s
- Хайырланыучуну джетишимлери: %s
+ Хайырланыучуну къошумлары: %1$s
+ Хайырланыучуну джетишимлери: %1$s
Хайырланыучу профильни кёр
Танытыуланы тюзет
Категорияланы тюзет
@@ -710,7 +701,7 @@
Локация билги Вики редакторлагъа суратыгъызны табханын тынч этиб, андан да иги хайырланырча этеди.\nКамера къошагъыгъызны джарашдырыуларында локацияны джандырлыгъызны теджейбиз. Джюклениу ючюн сау болугъуз!
Локация табылалмады
Бу сурат алыннган джерни къошууну юсюнден не дерсиз?\nЛокация билгиле, Вики тюзетиучюлени суратыгъызны табмасына болушлукъ болуб, аны андан да бек хайырланырча этер. \nСау болугъуз!
- Локацияны къош
+ Локацияны къош
Тилейбиз, хар кимге ачыкъ болуб юлюшерге излемеген бютеу информацияны бу электрон мектубдан къоратыгъыз. Аны юсюне, юлюшледигиз электрон адресигизни эмда байламлы ат эмда профиль суратыгъызны хар кимге ачыкъ кёрюннюгюню унутмагъыз.
Толу ачыкълаула
Джетишимле къуру prod версияда джетиширчады, тилейбиз, джаратыучу документация бла танышыгъыз.
@@ -731,8 +722,8 @@
Джюклеу ючюн тюлдю белгини къорат
Джюклеу ючюн тюлдю деб белгиленеди
Джюклеу ючюн тюлдю деб белги къоратылады
- Хазыр этилиб бошагъан суратланы кёргюз
- Хазыр этилиб бошагъан суратланы джашыр
+ Хазыр этилиб бошагъан суратланы кёргюз
+ Хазыр этилиб бошагъан суратланы джашыр
Башха сурат табылмады
Бу сурат алайсыз да джюкленнгенди
Бу сурат джюклер ючюн сайланалмайды
@@ -768,15 +759,15 @@
Сессиягъызны болджалы чыкъгъанды. Тилебиз, джангыдан киригиз.
GPX файлланы ачаллыкъ джетиширча къошакъ джокъду
Файл Джетишимли Сакъланды
- GPX файлны ачаргъа излеймисиз?
- KML файлны ачаргъа излеймисиз?
- KML файл сакъландырыу джетишимсиз болду.
- GPX файл сакъландырыу джетишимсиз болду.
- KML файлны сакъланыуу
- GPX файлны сакъланыуу
+ GPX файлны ачаргъа излеймисиз?
+ KML файлны ачаргъа излеймисиз?
+ KML файл сакъландырыу джетишимсиз болду.
+ GPX файл сакъландырыу джетишимсиз болду.
+ KML файлны сакъланыуу
+ GPX файлны сакъланыуу
- - %d сурат сайланды
- - %d сурат сайланды
+ - %1$d сурат сайланды
+ - %1$d сурат сайланды
Мультиджюклеудеги бютеу суратлаула бир категорияла эмда танытыула алгъанларын унутмагъыз. Суратлау ангылатыула эмда категориялары юлюшлемей эселе, тилейбиз, талай айры джюклеу этигиз.
Мультиджюклеулеуни юсюнден эсгертиу
@@ -812,7 +803,6 @@
Гёзен
Башха викиле
Файлны хайырланыулары
- SingleWebViewActivity
Хыйсаб
Хыйсабны сюрт
Хыйсаб сюртюуню эсгертиую
diff --git a/app/src/main/res/values-ku/strings.xml b/app/src/main/res/values-ku/strings.xml
index 54364b533..bc34bde4c 100644
--- a/app/src/main/res/values-ku/strings.xml
+++ b/app/src/main/res/values-ku/strings.xml
@@ -10,7 +10,7 @@
-->
Rûpela Facebookê ya Commonsê
- Koda Çavkanî ya Githuba Commonsê
+ Koda Çavkanî ya Githuba Commonsê
Logoya Commonsê
Malpera Commonsê
Ji bijêra lokasyonê derkeve
@@ -34,18 +34,14 @@
- %1$d dosye tê barkirin
- %1$d dosye tên barkirin
-
- - (%1$d)
- - (%1$d)
-
Barkirin ên destpêkirin
-
+
- %1$d barkirinê dide xebitandin
- %1$d barkirinan dide xebitandin
- - %d barkirin
- - %d barkirin
+ - %1$d barkirin
+ - %1$d barkirin
- Ev wêne wê li bin %1$s were lîsanskirin
@@ -175,11 +171,10 @@
Jê bibe
Serkeftin
Profîl
- Statîstîk
Spasî Hate Wergirtin
Wêneyên Bijartî
Wêneyên bi riya \"Cihên Nêz\"
- Derece %d
+ Derece %1$d
Wêneyên Barkirî
Wêneyê din
Belê, çima na
diff --git a/app/src/main/res/values-kum/strings.xml b/app/src/main/res/values-kum/strings.xml
index 8112afea6..11e6345b3 100644
--- a/app/src/main/res/values-kum/strings.xml
+++ b/app/src/main/res/values-kum/strings.xml
@@ -65,7 +65,7 @@
Юклев тархы
2FA код
Лале
- Хош гел Википедиягъа
+ Хош гел Википедиягъа
Гери алмакъ
Ачмакъ
Япмакъ
diff --git a/app/src/main/res/values-kus/strings.xml b/app/src/main/res/values-kus/strings.xml
index 75447a96b..effa42a60 100644
--- a/app/src/main/res/values-kus/strings.xml
+++ b/app/src/main/res/values-kus/strings.xml
@@ -4,7 +4,7 @@
-->
Commons Facebook Page
- Commons Github Source Code
+ Commons Github Source Code
Commons zanbin
Commons Website
Yiib zin\'ig
@@ -27,18 +27,18 @@
- yinne=%1$d faal la kpɛn\'ɛd
-
- - yinne=(%1$d)
-
Kpɛn\'ɛb pin\'in
- - yinsne=maan %d kpɛn\'ɛsʋg
+ - maan %1$d kpɛn\'ɛsʋg
+ - maalʋg %1$d kpɛn\'ɛsʋg
- - yinne=%d kpɛn\'ɛsʋg
+ - %1$d kpɛn\'ɛsʋg
+ - %1$d kpɛn\'ɛsʋg nam
- - yinne=siig kaŋa na paam suori yi %1$s
+ - Siig kaŋa na paam suori yi %1$s
+ - Siis bama na paam suori yi %1$s
- yinne=%1$d kpɛn\'ɛsʋg
@@ -76,7 +76,7 @@
Dinɛ ka fʋ zaŋi kpɛn\'ɛsid la bɛnɛ lai zug (fʋ bas suor ye di tɔ\'ɔŋim tʋm bi\'ela ma\'aa)
%1$s Kpɛn\'ɛya!
Di\'em ka gɔs dinɛ ka fʋ Kpɛn\'ɛs
- Kpɛn\'ɛsidnɛ faal: %s
+ Kpɛn\'ɛsidnɛ faal: %1$s
%1$s Kpɛn\'ɛsidnɛ
Kpɛn\'ɛsʋg naaednɛ %1$s
%1$s Kpɛn\'ɛsʋg gʋ\'ʋnya
@@ -143,10 +143,10 @@
Tʋʋma gbaʋŋ kanɛ an na\'ana
Nɔkim pian\'azug kʋdʋg nɛ pa\'alʋg
Pian\'azug
- Attribution-ShareAlike 4.0
- Attribution 4.0
- Attribution-ShareAlike 3.0
- Attribution 3.0
+ Attribution-ShareAlike 4.0
+ Attribution 4.0
+ Attribution-ShareAlike 3.0
+ Attribution 3.0
Wikimedia Commonsi mɔr footonam bɛdegʋ banɛ bɛ Wikipedia tʋʋma ni la.
Fʋ footo la sʋŋi pa\'an nidib dunia wʋsa ni!
M bɛlimnɛ kpɛn\'ɛsim footo banɛ ka fʋ mɛŋ ki\'a bɛɛ ka fʋ mɛŋ maal:
@@ -201,15 +201,14 @@
Liebim onɛ kpansid Beta
2FA koodi
Fʋ sid bɔɔdi fʋ yi yiiŋa?
- Midia footo gʋ\'ʋŋya
Pʋ paam buudi bibisɛ
Pʋ paam buudi si\'a
Zao zuor
Lamas
Rainbow Birig
Tulip
- Ken-ken Wikipiidia
- Ken-ken Gbauŋ sɔbid nyadi
+ Ken-ken Wikipiidia
+ Ken-ken Gbauŋ sɔbid nyadi
Sydney Opera House
Basim
Yɔ\'ɔgin
@@ -309,11 +308,10 @@
Yisim
Nyɔɔd nam
Mɛŋ yɛla
- Kaalʋg
Pʋ\'ʋsʋg di\'eya
Footo banɛ nwɛn taaba
Footo banɛ dɔlis zin\'ibanɛ bɛ yamma.
- Zi\'esim
+ Zi\'esim %1$d
Footonam kpɛn\'ɛya
Ba pʋ lɛbis Footo din aan si\'em
Footonam tʋmya
@@ -372,11 +370,11 @@
Pʋ nyaŋi bu\'os %1$s buudi yɛlaa
Buosidnɛ %1$s buudi yɛla
Naaya
- Kennɛ M pʋ\'ʋsya: Nyaŋya
- Nyaŋi tis %1$s M pʋ\'ʋsya labaar
- Pʋ nyaŋi tis %1$s m pʋ\'ʋsya
- Tisidnɛ M pʋ\'ʋsya: Gʋ\'ʋŋnɛ
- Tisidnɛ %1$s m pʋ\'ʋsya
+ Kennɛ M pʋ\'ʋsya: Nyaŋya
+ Nyaŋi tis %1$s M pʋ\'ʋsya labaar
+ Pʋ nyaŋi tis %1$s m pʋ\'ʋsya
+ Tisidnɛ M pʋ\'ʋsya: Gʋ\'ʋŋnɛ
+ Tisidnɛ %1$s m pʋ\'ʋsya
Nɛ\'ɛŋa dɔli anɔk sɔ\' tʋʋma wada?
Nɛ\'ɛŋa pʋʋ ba buudinam sʋ\'ʋŋaa?
Nɛ\' anɛ insikop pɛɛ?
@@ -402,12 +400,12 @@
Daʋŋʋ kidig footonam la nɔkirin
M bɛlimnɛ gu\'usim...
Footo banɛ ka fʋ kpɛn\'ɛsi dɔlis zin\'ibanɛ be yamma anɛ footo banɛ ka fʋ kpɛn\'ɛs ka di yinɛ fʋn nyɛ di map ni la.
- Yaam paas media banɛ bɛ tuon
+ Yaam paas media banɛ bɛ tuon
Yaaiya
Footo banɛ nar nɛ Commons kpɛn\'ɛsʋg tituunli
Footo banɛ pʋ nar nɛ kpɛn\'ɛsʋg tituunli
Iankim gaŋ footo kaŋa
- Vɛ\'ɛgor gʋ\'ʋŋya!!. Ti kʋ nyaŋi vɛ\'ɛg faal la ka pʋ paam suori yi yiiŋ suak zin\'igin la.
+ Vɛ\'ɛgor gʋ\'ʋŋya!!. Ti kʋ nyaŋi vɛ\'ɛg faal la ka pʋ paam suori yi yiiŋ suak zin\'igin la.
Maalim EXIF tagnam
Gaŋim EXIF tagbanɛ ka fʋ ye fʋ kpɛn\'ɛs
Sʋ\'ʋd
@@ -417,7 +415,6 @@
Lens Model
Serial Numbers
Software
- Pʋ bas suor ye fʋ kpɛn\' midia zin\'iginɛ
Pʋdigim app la dɔlis...
Footo labaar
Pʋ paam buudinama
@@ -470,7 +467,7 @@
Dɛmisim Pa\'ala nɛ pian\'azut
Pʋdigim footo dɔlis
Fʋ nam pʋ tʋm tʋʋmsi\'a nannɛ
- %s nam pʋ tʋm tʋʋmsi\'a nannɛ
+ %1$s nam pʋ tʋm tʋʋmsi\'a nannɛ
Akaʋnt yɔ\'ɔgya!
Kopi sɔbʋg la keŋ su\'ak zin\'igin
Tienr labaar Zanbili pa\'al ye di karimya
@@ -479,7 +476,7 @@
Bɛ
Bɔɔdi footo
Zin\'igi buudi:
- Bridge, museum, hotel etc.
+ Bridge, museum, hotel etc.
Daʋŋsi\'a kidig kpɛn\'ɛb suorin la, asɛɛ ka fʋ tiaki fʋ paaswɛɛd la!!
MEDIA
CHILD\n CLASSES
@@ -510,7 +507,7 @@
Sa\'alʋg nam
Nɔkim Wikisɔbʋbkaŋa:
Fʋ ya\'a din\' ya\'as di na yɔ\'ɔg Wikipedia atikil la
- Kopim wikidoodi keŋ suak zin\'igin
+ Kopim wikidoodi keŋ suak zin\'igin
Zi\'enim
Lɛm pin\'il ya\'as
Zi\'enya
@@ -556,7 +553,7 @@
Pa\'alim map app ni
Dɛmisim zin\'ig
Footo gɔsʋg kanɛ bɛ zin\'ig nɔkirin
- Footo kanɛ pa\'an zin\'ig nɔkir la siig
+ Footo kanɛ pa\'an zin\'ig nɔkir la siig
Footo zin\'ig
Gɔsim ye zin\'ig la an sʋm bɛ
Zanbin
@@ -575,8 +572,8 @@
ZAMISIM BɛDEGʋ
Bɔɔdi suor ye di tʋm
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
+ Tʋmtʋm tʋʋma: %1$s
+ Tʋmtʋm nyɔɔd: %1$s
Gɔsim tʋmtʋm lakir zin\'ig
Dɛmisim nwɛnnɛmnam
Dɛmisim buudinam
@@ -584,7 +581,7 @@
Zaŋim tʋm
Maligim maal
Pʋ paam zin\'isi\'aa
- Paasim zin\'ig
+ Paasim zin\'ig
Wiesʋg
API zi\'esim
Android version
@@ -600,8 +597,8 @@
Da zanbil kanɛ an ye di ka\' dinɛ kpɛn\'ɛsid la
Zanbinnɛ ye di ka\' dine kpɛn\'ɛsida
Yisidnɛ zanbin kanɛ an ye di ka\' dine kpɛn\'ɛsid la
- Pa\'aolim footo banɛ dɛŋim mɔr tʋʋma
- Su\'am footo banɛ dɛŋim mɔr tʋʋma
+ Pa\'aolim footo banɛ dɛŋim mɔr tʋʋma
+ Su\'am footo banɛ dɛŋim mɔr tʋʋma
Pʋ nyɛ footo si\'a
Footo kaŋa pʋn kpɛn\' sa
Kʋ nyaŋi gaŋ footo kaŋa kpɛn\'ɛsɛ
@@ -619,7 +616,7 @@
Pʋ bas suor ye fʋ kpɛn\' la\'ad suak zin\'igin la.
Pʋ nyaŋi pʋdig laʋk kaŋa
- - %d image selected
- - %d images selected
+ - %1$d image selected
+ - %1$d images selected
diff --git a/app/src/main/res/values-ky/strings.xml b/app/src/main/res/values-ky/strings.xml
index 17cb550ae..4ee9094bb 100644
--- a/app/src/main/res/values-ky/strings.xml
+++ b/app/src/main/res/values-ky/strings.xml
@@ -3,14 +3,17 @@
* Askar Nazyrov
* Baydastann
* Bosogo
+* Incall
* Kotormochu
* Maksat
* NR Deblocked
-->
Викиказынанын Facebook баракчасы
+ Викиказына GitHub булак коду
Викиказынанын логотиби
Викиказынанын сайты
+ Жайгашкан жер тандоодон чыгуу
Жөнөтүү
Башка сүрөттөмө кошуу
Жаңы салым кошуу
@@ -23,28 +26,35 @@
Сыпаттама
Сүрөт
Баары
+ Жогоруну которуу
Кызыктуу жерди издөө
Жердин абалы
Күндүн сүрөтү
-
- - 1 файл жүктөлүүдө
- - %1$d файл жүктөлүүдө
-
-
- - Азырынча жүктөөлөр жок
- - 1 жүктөө
- - %1$d жүктөө
+
+ - %1$d файл жүктөлүүдө
+ - %1$d файлдар жүктөлүүдө
Жүктөө башталууда
-
- - 1 жүктөө башталды
- - %1$d жүктөө башталды
+
+ - %1$d файл жүктөлүүдө
+ - %1$d файлдар жүктөлүүдө
- - %d жүктөө
- - %d жүктөө
+ - %1$d жүктөө
+ - %1$d жүктөө
+
+
+ - Бул сүрөт %1$s лицензиясы астында берилет
+ - Бул сүрөттөр %1$s лицензиясы астында берилет
+
+
+ - %1$d файл жүктөлдү
+ - %1$d файлдар жүктөлдү
+
+
+ - Бөлүшүлгөн контент алынып жатат. Сүрөттү иштетүү бир аз убакыт талап кылынышы мүмкүн, сүрөттүн көлөмүнө жана түзмөгүңүзгө жараша
+ - Бөлүшүлгөн контент алынып жатат. Сүрөттөрдү иштетүү бир аз убакыт талап кылынышы мүмкүн, сүрөттөрдүн көлөмүнө жана түзмөгүңүзгө жараша
- Бул сүрөт %1$s лицензияланат
Изилдөө
Көрүнүш
Жалпы
@@ -67,11 +77,15 @@
Ийгиликтүү кирдиңиз!
Системага кирүүдө катачылык бар!
Файл табылган жок. Башка файлды издеп көрүңүз.
+ Максималдуу аракеттердин саны жетти! Жүктөөнү токтотуп, кайра аракет кылыңыз.
+ Батарейка оптимизациясын өчүрүү керекпи?
+ 3дөн ашык сүрөттү жүктөө батарейка оптимизациясы өчүрүлгөндө туруктуу иштейт. Жакшы жүктөө үчүн Викиказына тиркемесинде батарейка оптимизациясын өчүрүңүз. \n\nБатарейка оптимизациясын өчүрүү үчүн мүмкүн болгон кадамдар:\n\nКадам 1: Төмөндөгү «Настройкалар» баскычын таптаңыз.\n\nКадам 2: «Оптимизацияланбаган»дан «Бардык тиркемелер»ге которуңуз.\n\nКадам 3: \"Викиказына\" же \"fr.free.nrw.commons\" издеңиз.\n\nКадам 4: Тиркемени таптап, «Оптимизациялобо» деп тандаңыз.\n\nКадам 5: «Аяктоо» баскычын басыңыз.
Аутентификация ишке ашкан жок. Кайра кириңиз.
Жүктөө башталды!
+ Жүктөө кезекке коюлду (чектелген байланыш режими иштетилди)
%1$s жүктөлдү !
Жүктөлгөн файлды көрүү үчүн басыңыз
- Файл жүктөлүүдө: %s
+ Файл жүктөлүүдө: %1$s
%1$s жүктөлүүдө
Жүктөө соңуна жетти %1$s
Жүктөө %1$s иш жүзүнө ашкан жок
@@ -88,7 +102,9 @@
Жакынкы
Жүктөөлөрүм
Шилтемени көчүрүү
+ Ссылка клипбордго көчүрүлдү
Бөлүшүү
+ Файл барагын көрүү
Коштомо жазуу (талап кылынат)
Бул файлга коштомо жазуу бериңиз
Сыпаттама
@@ -106,58 +122,117 @@
Түрмөктөрдү издөө
Файлдагы элементтерди издөө (тоо, Таж-Махал ж.б.)
Сактоо
+ Кошумча меню
Жаңылоо
Тизме
(Азырынча жүктөөлөр жок)
%1$s түрмөктөрү табылган жок
- Уикиказынада Сиздин сүрөттөрдү жеңил табуу үчүн түрмөктөрдү кошуңуз.\n\nТүрмөктөрдү жазууну баштаңыз.\nБул кадамды аттап өтүү үчүн, бул билдирүүнү (же кийинкини) басыңыз.
+ %1$s менен дал келген Викимаалымат элементтери табылган жок
+ %1$s балалык класстарга ээ эмес
+ %1$s ата-энелик класстарга ээ эмес
+ Сүрөттөрүңүздү Викиказына сайтында оңой табылат кылуу үчүн категорияларды кошуңуз.\nКатегорияларды кошуу үчүн жазууну баштаңыз.
Категориялар
Параметрлер
Катталуу
+ Тандалган сүрөттөр
+ Тандалган сүрөттөр бул Викиказына жамааты доолборундагы эң жогорку сапаттагы деп тандаган, өз ишин өтө чебер фотографтар менен иллюстраторлор жүктөгөн сүрөттөр.
+ Ыңгайлаштырылган тандоочу»
Категория
+ Көрүшүүчүлөрдүн баасы
Колдонмо тууралуу
- баштапкы коду ачык тиркемелер, <a href=\"https://github.com/commons-app/apps-android-commons/blob/master/COPYING\">Apache License v2</a> лицензиясынын негизинде чыгарылган
- <a href=\"https://github.com/commons-app/apps-android-commons\">GitHub</a> шилтемесине баштапкы код. <a href=\" https://github.com/commons-app/apps-android-commons/issues\">Github</a> шилтемесиндеги катачылык.
+ Викиказына тиркемеси — бул ачык булактуу тиркеме, Викимедиа коомчулугунун грант алгандары жана волонтерлери тарабынан түзүлүп, тейленет. Викимедиа Фонду тиркемени түзүүгө, өнүктүрүүгө же тейлөөгө катышкан эмес.
+ Жаңы <a href=\"%1$s\">GitHub маселесин</a> түзүңүз, ката тууралуу билдирүүлөр жана сунуштар үчүн.
Купуялык саясаты
+ Ыраазычылык
Колдонмо тууралуу
Шарттуу жооп жөнөтүү (Email)
+ Электрондук почта кардары орнотулбаган
Жакында колдонулган түрмөктөр
Алгачкы мезгилдештирүүнү күтүү…
Сиз бир дагы сүрөт жүктөй элексиз.
Кайра аракет кылуу
Жокко чыгаруу
+ Тилдин атын жазыңыз
+ Акыркы издөөдөлөр
+ Бардык тилдер
+ Бул сүрөттү жөнөтүп жатканым менен, мен анын менин жеке эмгегим экенин, анда автордук укук менен корголгон материалдар же селфилер жок экенин жана башкача айтканда <a href=\"https://commons.wikimedia.org/wiki/Commons:Policies_and_guidelines\">Викиказына саясатына</a> ылайык экенин билдирем.
Жүктөп алуу
- Лицензия
+ Стандарттык лицензия
+ Мурунку аталыш жана сүрөттөмөнү колдонуу
Тема
- CC Attribution-ShareAlike 3.0
- CC Attribution 3.0
+ Attribution-ShareAlike 4.0
+ Attribution 4.0
+ Attribution-ShareAlike 3.0
+ Attribution 3.0
CC0
CC BY-SA 3.0
CC BY 3.0
+ Викиказына Википедияда колдонулган сүрөттөрдүн көбүн жайгаштырат.
+ Сиздин сүрөттөрүңүз дүйнө жүзү боюнча адамдарды окутууга жардам берет!
+ Сураныч, толугу менен өзүңүз тарткан же түзгөн сүрөттөрдү жүктөңүз:
+ Табигый объекттер (гүлдөр, жаныбарлар, тоолор)
+ Пайдалы объекттер (велосипеддер, темир жол станциялары)
+ Белгилүү адамдар (шаарыңыздын мэри, жолугушкан Олимпиадалык спортчулар)
+ Сураныч, ЖҮКТӨБӨҢҮЗ:
+ Селфилер же досторуңуздун сүрөттөрү
+ Интернеттен жүктөп алган сүрөттөр
+ Закрытылган тиркемелердин скриншоттору
+ Мисал катары жүктөө:
+ Аталышы: Сидней опера театры
+ Сүрөттөмө: Сидней опера театры булуңдун боюнан караганда
+ Категориялар: Сидней опера театрынын батыштан көрүнүшү, Сидней опера театрынын алыстан көрүнүшү
Жеке сүрөттөрүңүздү жүктөңүз. Уикипедияда макалаларды жандандырууга салымыңызды кошуңуз!
Уикипедиядагы сүрөттөр Уикиказынада жеткиликтүү
Сиздин сүрөттөр дүйнө жүзүндөгү адамдардын билим алышына өбөлгө түзүүдө.
Интернетте жарыяланган автордук укукка ээ сүрөттөрдөн, ошондой эле плакаттардан жана китептердин мукабасынан ж.б. четтеңиз.
Сизге бул түшүнүктүүбү?
Ооба!
+ Кошумча маалымат
Категориялар
Жүктөлүүдө…
Тандалган жок
+ Сүрөттөмө жок
Сыпаттама жок
+ Талкуу жок
+ Белгисиз лицензия
Жаңылоо
+ Сактоо уруксатын сурап жатабыз
+ Талап кылынган уруксат: Сырттан сактоону окуу. Бул уруксаты жок тиркеме галереяңызды көрө албайт.
+ Талап кылынган уруксат: Сырттан сактоого жазуу. Бул уруксаты жок тиркеме камераңызды/галереяңызды колдоно албайт.
+ Жайгашкан жерди аныктоо уруксатын сурап жатабыз
+ Тиркеме ичинде тартылган сүрөттөр үчүн жайгашкан жерди сактоо
+ Эгерде түзмөк камерасы жайгашкан жерди сактамаса, тиркеме ичиндеги сүрөттөр менен жайгашкан жерди жазуу үчүн бул параметрди күйгүзүңүз.
Макул
+ Эскертүү
+ Кайталанган файл аталышы табылды
Жүктөө
Ооба
Жок
Коштомо жазуу
Аталыш
+ Сүрөттөмөлөр
Сыпаттама
Талкуу
Автор
+ Жүктөөчү
Жүктөлгөн датасы
Лицензия
Координаттар
- Википедияга кош келиңиз
+ Берилген жок
+ Бета-тестирлөөчү болуңуз
+ Google Play\'деги бета-каналыбызга кошулуп, жаңы функцияларга жана каталарды оңдоолорго эрте жеткиликтүүлүк алыңыз
+ 2FA коду
+ Электрондук почта текшерүү коду
+ Чындыгында чыгуу каалайсызбы?
+ Төмөнкү категориялар табылган жок
+ Ата-энелик категориялар табылган жок
+ Зао тоосу
+ Ламалар
+ Көкүрөктүн көпүрөсү
+ Тюльпан
+ Википедиядагы кадимки макаланын схемалык сүрөтү.
+ Автордук укук белгиси сызып ташталган кагаздардын үймөгүнүн сүрөтү.
+ Сидней опера театры
Жокко чыгаруу
Ачуу
Жабуу
@@ -176,6 +251,26 @@
Файлдын Викиказынадагы барагы
Викимаалыматтын элементи
Википедия макаласы
+ Сүрөттөмөнү мүмкүн болушунча кенен бериңиз: Бул сүрөт кайда тартылган? Эмне көрсөтөт? Контекст кандай? Объекттерди же адамдарды сүрөттөп бериңиз. Жөнөкөй жол менен болжолдоого болбогон маалыматтарды кошуңуз, мисалы, пейзаж болсо күндүн кайсы учурунда тартылганын. Эгер сүрөттөгү нерсе өзгөчө болсо, эмне үчүн өзгөчө экенин түшүндүрүңүз.
+ Сүрөттүн кыскача сүрөттөмөсүн жазыңыз. Биринчи сүрөттөмө сүрөттүн Аталышы катары колдонулат. 255 белгиден ашпасын.
+ Бул сүрөт менен мүмкүн болгон көйгөйлөр:
+ Сүрөт өтө караңгы.
+ Сүрөт булуттуу.
+ Сүрөт мурунтан эле Викиказынада бар
+ Бул сүрөт башка жерде тартылган.
+ Сураныч, жөн гана өзүңүз тарткан сүрөттөрдү жүктөңүз. Башкалардын Facebook баракчаларынан тапкан сүрөттөрдү жүктөбөңүз.
+ Бул сүрөттү дагы деле жүктөп койгуңуз келеби?
+ Байланыш катасы
+ Файлды жүктөө үчүн интернетке туташуу керек. Тармагыңызды текшериңиз.
+ Сүрөттө табылган көйгөйлөр
+ Сураныч, жөн гана өзүңүз тарткан сүрөттөрдү жүктөңүз. Интернеттен жүктөлгөн сүрөттөрдү жүктөбөңүз.
+ Жүктөөлөр
+ Тиркеме ичиндеги сүрөттөрдү сактоо
+ Тиркеме ичиндеги камера менен тартылган сүрөттөрдү түзмөгүңүздүн сактоосуна сактоо
+ Эсеп жазууга кирүү
+ Лог файлын жөнөтүү
+ Тиркеме менен байланышкан көйгөйлөрдү талдоо үчүн лог файлын электрондук почта аркылуу иштеп чыгуучуларга жөнөтүңүз. Эскертүү: логдордо жеке маалымат болушу мүмкүн.
+ URL ачуу үчүн веб-браузер табылган жок
Ката! URL табылган жок
Өчүрүүгө сунуштоо
Бул файлды өчүрүү сунушталган.
@@ -185,20 +280,163 @@
Аккаунтка кирүүнү чындап эле өткөрүп жибергиңиз келеби?
Кийин файлдарды жүктөө үчүн аккаунтка кирген болгонуңуз керек болот.
Бул функцияны колдонуу үчүн аккаунтка кириңиз
+ Викитекстти клипбордго көчүрүү
+ Викитекст клипбордго көчүрүлдү
+ Жакынкы объекттер туура иштебеши мүмкүн, жайгашкан жер жеткиликсиз.
+ Интернет жеткиликсиз. Тек гана кэштелген жерлер көрсөтүлөт.
+ Жайгашкан жерге уруксат берилген жок. Бул функцияны колдонуу үчүн жайгашкан жерди кол менен орнотуңуз.
+ Жакынкы жерлердин тизмесин көрсөтүү үчүн уруксат керек
+ Жакынкы сүрөттөрдүн тизмесин көрсөтүү үчүн уруксат керек
+ Жол көрсөтмөлөрү
Викимаалымат
Википедия
+ Викиказына
+ Баа бериңиз
КБС
+ Колдонуучунун нускамасы
+ Окуу куралын өткөрүп жиберүү
+ Интернет жеткиликсиз
+ Билдирүүлөрдү алуу катасы
+ Сын үчүн сүрөттү алуу катасы. Кайра аракет кылуу үчүн жаңылоону басыңыз.
+ Билдирүүлөр табылган жок
Которуу
Тилдер
+ Кайсы тил үчүн котормолорду жөнөтүүнү каалай турганыңызды тандаңыз
+ Улантуу
Жокко чыгаруу
+ Кайра аракет кылуу
+ Бул жерлер сизге жакын, алар үчүн Википедия макалаларын сүрөттөр менен иллюстрациялоо керек.\n\n«БУУ ЖЕРДИ ИЗДӨӨ» баскычын чыкылдатуу картага бекитип, ошол жердин айланасында жакынкы издөө жүргүзөт.
+ Бул жер үчүн сүрөт керек.
+ Бул жердин сүрөтү мурунтан эле бар.
+ Бул жер эми жок.
+ Сүрөттөр табылган жок!
+ Сүрөттөрдү жүктөөдө ката кетти.
+ Жүктөгөн: %1$s
+ Бөгөттөлдү
+ Сизге Викиказынага түзөтүүгө бөгөт коюлган.
+ Күндүн сүрөтү
+ Издөө
+ Викиказынада издөө
+ Издөө
+ Жакында издегендер:
+ Жакында издеген сурамдар
+ Жакында издеген тил сурамдары
+ Категорияларды жүктөөдө ката кетти.
+ Сүрөттөмөлөрдү жүктөөдө ката кетти.
Медиа
Категориялар
+ Элементтер
+ Тандалма
Уюлдук телефон аркылуу жүктөлгөн
Карта
+ %1$s\'ке Викимаалыматтарда сүрөт кошулду!
+ Тиешелүү Викимаалымат элементинин жаңыртылышы ишке ашкан жок!
+ Обои катары коюу
+ Обои ийгиликтүү коюлду!
+ Тест
+ Бул сүрөттү жүктөөгө болобу?
+ Суроо
+ Так билбейм
+ Жыйынтык
+ Өчүрүү керек болгон сүрөттөрдү жүктөөнү уланта берсеңиз, аккаунтуңуз бөгөттөлүшү мүмкүн. Тестти токтоткуңуз келеби?
+ Сиз жүктөгөн сүрөттөрдүн %1$s%дан көбү өчүрүлгөн. Эгер өчүрүлүшү керек болгон сүрөттөрдү жүктөөнү уланта берсеңиз, аккаунтуңуз бөгөттөлүшү мүмкүн.\nОкутуу сабактарын кайра көрүп, кайсы сүрөттөрдү жүктөш керек, кайсынысы керек эмес экенин үйрөнүү үчүн тесттен өтөсүзбү?
+ Селфилердин энциклопедикалык мааниси аз. Эгер сиз жөнүндө Википедияда макала жок болсо, өзүңүздүн сүрөтүңүздү жүктөөдөн алыс болуңуз.
+ Айрым өлкөлөрдө эстеликтердин жана сырттагы көрүнүштөрдүн сүрөттөрүн жүктөө көбүнчө уруксат берилет. Бирок, сыртта коюлган убактылуу көркөм инсталляциялар көбүнчө автордук укукка ээ болуп, жүктөөгө болбойт.
+ Веб-сайттардын скриншоттору деривативдик (жөндөлгөн) чыгармалар болуп саналат жана сайттагы автордук укуктарга ылайык келет. Муну колдонуу үчүн автордон уруксат алуу керек. Андай уруксат болбосо, алардын ишине негизделген бардык чыгармаңыз мыйзам боюнча уруксатсыз көчүрмө катары эсептелип, оригинал авторго таандык.
+ Виктказынанын максаттарынын бири — сапаттуу сүрөттөрдү чогултуу. Ошондуктан, тайгалак сүрөттөрдү жүктөөгө болбойт. Ар дайым жакшы жарыкта ачык жана сапаттуу сүрөттөрдү тартууга аракет кылыңыз.
+ Технологияны же маданиятты чагылдырган сүрөттөр Викиказынада абдан куттукталат.
+ Сиз %1$s суроого туура жооп бердиңиз. Куттуктайбыз!
+ Улантуу
+ Суроого жооп берүү үчүн эки варианттын бирин тандаңыз.
+ Кирүү мөөнөтү бүттү. Кайра кириңиз, сураныч.
+ Тестиңизди досторуңуз менен бөлүшүңүз!
+ Улантуу
+ Туура жооп
+ Туура эмес жооп
+ Бул скриншотту жүктөөгө болобу?
+ Колдонмону бөлүшүү
+ Айлантуу
+ Жакын жерлерди жүктөө мүмкүн болгон жок.
+ Бул аймакта сүрөттөр жок.
+ Жакын жерде эч кандай жайлар жок.
+ Жакынкы эстеликтерди алуудө ката кетти.
+ Жакында издөө болгон жок.
+ Издөө тарыхыңызды тазалоону каалайсызбы?
+ Бул жүктөөнү токтоткуңуз келетпи?
+ Бул издөөнү өчүргүңүз келеби?
+ Издөө тарыхы өчүрүлдү
+ Өчүрүү үчүн сунуштоо
+ Өчүрүү
+ Жетишкендиктер
+ Профиль
+ Бээжелер
+ Рахматтар кабыл алынды
+ Тандалган сүрөттөр
+ Сүрөттөр «Жакынкы жайлар» аркылуу
+ Деңгээл %1$d
+ %1$s (Деңгээл %2$s)
+ Жүктөлгөн сүрөттөр
+ Сүрөттөр кайра алынган жок
+ Колдонулган сүрөттөр
+ Жетишкендиктериңизди досторуңуз менен бөлүшүңүз!
+ Сиз ушул талаптарды аткарган сайын деңгээлиңиз көтөрүлөт. «Статистика» бөлүмүндөгү элементтер деңгээлиңизге эсептелбейт.
+ минималдуу талап:
+ Викиказынага ар кандай жүктөө программалары аркылуу жүктөгөн сүрөттөрдүн саны
+ Викиказынага жүктөгөн сүрөттөрүңүздүн өчүрүлбөгөн пайызы
+ Викиказынага жүктөгөн жана Викимедиа макалаларында колдонулган сүрөттөрдүн саны
+ Ката кетти!
+ Викиказына билдирүүсү
+ Ыңгайлаштырылган автордун атын колдонуу
+ Сүрөттөрдү жүктөө учурунда колдонуучу атыңдын ордуна өзгөчөлөнгөн автор атыңды колдон
+ Өзгөчөлөнгөн автор аты
+ Салым
+ Жакынкы
+ Билдирүүлөр
+ Билдирүүлөр (окуу)
+ Жакын жердеги билдирүүнү көрсөтүү
+ Сүрөттөр керек болгон жакын жерге колдонмодогу билдирүүнү көрсөтүү
+ Тизме
+ Сактагычка уруксат
+ Сүрөттөрдү жүктөө үчүн түзмөгүңүздүн тышкы сактагычына кирүү уруксатыңыз керек.
+ Сүрөттөр керек болгон жакын жерди эми көрө албай каласың. Бирок кааласаң, бул билдирүүнү Параметрлерден кайра күйгүзө аласың.
+ %2$d кадамдын %1$d-кадамы: %3$s
+ Кийинки
+ Мурунку
+ %1$s аталышындагы файл бар. Уланткыңар келеби?\n\nЭскертүү: Файл аталышына ылайыктуу кошумча автоматтык түрдө кошулат.
+ Түзмөгүңүздө шайкеш картографиялык тиркеме табылган жок. Бул функцияны колдонуу үчүн карта тиркемесин орнотуңуз.
+ Сүрөттөр
+ Жайгашкан жерлер
+ Категориялар
+ Белгилерге кошуу/алып салуу
+ Белгилер
+ Сиз эч кандай белгилерди кошкон жоксуз.
+ Белгилер
+ Логдорду чогултуу башталды. Тиркемени кайра баштаңыз, логдогу аракетти жасаңыз, андан кийин \'Лог файлын жөнөтүү\' баскычын кайра таптаңыз.
+ Мен аны ката менен жүктөдүм
+ Мен анын жалпыга көрүнүктүү болоорун билген эмесмин
+ Бул менин купуялыгым үчүн жакшы эместигин түшүндүм
+ Мен ойлогонумду өзгөрттүм, аны эми жалпыга көрүнүктүү кылууну каалабайм
+ Кечиресиз, бул сүрөт энциклопедия үчүн кызыксыз
+ %1$s күнү мен өзүм жүктөдүм, кеминде %2$d макалада колдонулган.
+ Виказынага кош келиңиз! \n\nБиринчи медиаңызды кошуу баскычын таптап жүктөңүз.
+ Категориялар тандалган жок
+ Категориялары жок сүрөттөр сейрек колдонулат. Категорияларды тандабастан уланткыңыз келеби?
+ Сүрөттөр тандалган жок
+ Сүрөттөлгөн сүрөттөрдү табуу оңой жана колдонулушу мүмкүн. Сүрөттөрдү тандабай эле улантууну каалайсызбы?
Жүктөөнү жокко чыгаруу
Артка баскычын колдонуу менен бул жүктөө жокко чыгарылат жана сиз ийгиликти жоготосуз
Жүктөөнү улантуу
+ (Келишимдеги бардык сүрөттөр үчүн)
+ Бул аймакты издөө
+ Уруксат суроо
+ Сүрөттөр керек болгон эң жакын жерди көрсөтүү үчүн учурдагы жайгашкан жериңизди колдонууну каалайсызбы?
+ Жайгашкан жерге уруксат берилбегендиктен, жакынкы жер көрсөтүлбөйт.
+ Муну кайра сураба
+ Жайгашкан жерге уруксат сураңыз
+ Жакынкы билдирүүлөрдү көрсөтүү үчүн жайгашкан жерге уруксат сураңыз.
Күтө туруңуз...
+ МЕДИА
+ Параметрлер
Аталыш
Сыпаттама
Элементтер
diff --git a/app/src/main/res/values-la/strings.xml b/app/src/main/res/values-la/strings.xml
index f0ca1b28f..ac017902e 100644
--- a/app/src/main/res/values-la/strings.xml
+++ b/app/src/main/res/values-la/strings.xml
@@ -6,7 +6,10 @@
* UV
-->
- Haec imago sub licentia %1$s communicabitur.
+
+ - Haec imago sub licentia %1$s communicabitur.
+ - Hae imagines sub licentia %1$s communicabintur.
+
Wikimedia Commons
Modi
Nomen usoris
diff --git a/app/src/main/res/values-lb/strings.xml b/app/src/main/res/values-lb/strings.xml
index 440c8d6cb..71e97d0cd 100644
--- a/app/src/main/res/values-lb/strings.xml
+++ b/app/src/main/res/values-lb/strings.xml
@@ -8,7 +8,7 @@
-->
Commons-Facebook-Säit
- Commons-Quellcode op Github
+ Commons-Quellcode op GitHub
Commons-Logo
Internetsite vu Commons
Späicheren
@@ -27,18 +27,14 @@
- ee Fichier eroplueden
- %1$d Fichieren eroplueden
-
- - (%1$d)
- - (%1$d)
-
Eropluede starten
- - Ugefaangen %d Fichier eropzelueden
- - Ugefaangen %d Fichieren eropzelueden
+ - Ugefaangen %1$d Fichier eropzelueden
+ - Ugefaangen %1$d Fichieren eropzelueden
- - Ee Fichier eropgelueden
- - %d Fichieren eropgelueden
+ - %1$d Fichier eropgelueden
+ - %1$d Fichieren eropgelueden
- Dëst Bild gëtt ënner %1$s lizenzéiert
@@ -71,7 +67,7 @@
D\'Eroplueden huet ugefaang!
%1$s eropgelueden!
Tippt fir de Fichier ze gesinn, deen Dir eropgelueden hutt
- Fichier eroplueden: %s
+ Fichier eroplueden: %1$s
%1$s gëtt eropgelueden
Eropluede vu(n) %1$s ofschléissen
%1$s konnt net eropgeluede ginn
@@ -131,14 +127,16 @@
Dir hutt nach keng Fotoen eropgelueden.
Nach eng Kéier probéieren
Ofbriechen
+ Sproochnumm antippen
+ All Sproochen
Eroflueden
Standardlizenz
Viregen Titel a Beschreiwung benotzen
Faarfscheema
Attribution-ShareAlike 4.0
Attribution 4.0
- CC Attribution-ShareAlike 3.0
- CC Attribution 3.0
+ Attribution-ShareAlike 3.0
+ Attribution 3.0
CC0
CC BY-SA 3.0
CC BY 3.0
@@ -179,7 +177,7 @@
Warnung
Eroplueden
Jo
- Neen
+ Nee
Beschrëftung
Titel
Motiven
@@ -196,12 +194,13 @@
E-Mail-Verifikatiounscode
Wëllt dir Iech wierklech ausloggen?
Keng Ënnerkategorie fonnt
+ Keng Iwwerkategorië fonnt
Bierg Zao
Lamaen
Rainbow Bridge
Tulp
- Wëllkomm Wikipedia
- Wëllkomm Copyright
+ E schematescht Bild vun engem geneeresche Wikipedia-Artikel.
+ Eng Zeechnung vun engem Koup Pabeier mat duerchgestrachenem Copyright-Symbol.
Oper vu Sydney
Ofbriechen
Opmaachen
@@ -288,8 +287,10 @@
Hannergrondbild festgeluecht
Quiz
Fro
+ Ech si mer net sécher
Resultat
Dir hutt %1$s richteg Äntwert. Gléckwonsch!
+ Virufueren
Wielt eng vun den zwou Méiglechkeete fir d\'Fro ze beäntwerten
Deelt Äre Quiz mat Äre Frënn!
Virufueren
@@ -303,12 +304,10 @@
Läschen
Realisatiounen
Profil
- Statistiken
Mercie kritt
Bemierkenswäert Biller
- Niveau %d
- %s (Niveau %s)
- %s (%s)
+ Niveau %1$d
+ %1$s (Niveau %2$s)
Eropgeluede Biller
Biller net zréckgesat
Benotzte Biller
@@ -341,6 +340,7 @@
Eropluede weiderféieren
Dëst ni méi froen
Dir hutt esou vill Kontributioune gemaach datt eise Berechnungssystem iwwerfuerdert ass. Dëst ass déi bescht Leeschtung.
+ Läschknäppche weisen
Erlaben
Verwerfen
Fäerdeg
@@ -349,8 +349,8 @@
Merci fir %1$s schécken
Entsprécht dat de Copyright-Reegelen?
Ass dëst richteg kategoriséiert?
- Klickt op NEEN fir dëst Bild fir d\'Läsche virzeschloen, falls et guer net nëtzlech ass.
- Logoen, Screenshotten oder Filmplakate sinn oft Urheberrechtsverletzungen. Klickt op NEEN fir virzeschloen, datt dëst Bild geläscht gëtt
+ Klickt op NEE fir virzeschloen, datt dëst Bild geläscht gi soll, falls et guer net nëtzlech ass.
+ Logoen, Screenshotten oder Filmplakate sinn oft Urheberrechtsverletzungen.\nKlickt op NEE fir virzeschloen, datt dëst Bild geläscht gi soll
Oh, dat ass mol net kategoriséiert!
Et ass eng Urheberrechtsverletzung, well et
Nächst Bild
@@ -377,6 +377,7 @@
Luet Fotoen direkt vun Ärem Handy op Wikimedia Commons erop. Luet d\'Commons-App elo erof: %1$s
App deelen iwwer...
Bildinformatiounen
+ Dëse Message net nach eng Kéier weisen
Keng Kategorie fonnt.
Eroplueden ofgebrach
Firwat soll %1$s geläscht ginn?
@@ -406,7 +407,7 @@
Beschreiwungen a Beschrëftungen änneren
Bild deelen iwwer
Dir hutt nach keng Kontributioune gemaach
- %s huet nach keng Kontributioune gemaach
+ De Benotzer %1$s huet nach keng Kontributioune gemaach
Benotzerkont ugeluecht!
Text an den Tëschespäicher kopéiert
Et gouf e Feeler!
@@ -442,7 +443,7 @@
Instruktiounen
1. Benotzt de follgende Wikitext:
7.Den Artikel publizéieren
- De Wikicode an den Tëschespäicher kopéieren
+ De Wikitext an den Tëschespäicher kopéieren
ënnerbriechen
virufueren
Ënnerbrach
@@ -472,6 +473,8 @@
Qualitéitsbiller sinn Diagrammen oder Fotoen, déi gewësse Qualitéitscritèren erfëllen (déi haaptsächlech vun technescher Natur sinn) a wäertvoll fir Wikimedia-Projete sinn.
Eropluede gëtt ofgebrach....
Eroplueden ofbriechen
+ Etikett
+ Beschreiwung
Kategoriesäit weisen
Sprooch vum Interface vum Benotzer vun der App
Hëlt eng Beschrëftung a Beschreiwung ewech
@@ -484,7 +487,7 @@
Elementer
Keng Biller
Fäerdeg
- Zréck
+ Zeréck
Genial
Dëst Bild gouf schonn op Commons eropgelueden.
Dëst Bild wäert beim Concours Wiki Loves Monuments agereecht ginn.
@@ -493,8 +496,9 @@
Wiki Loves Monuments
Wiki Loves Monuments ass een internationale Fotosconcours fir Monumenter, dee vu Wikimedia organiséiert gëtt
Autorisatioun gëtt gebraucht
- Kontributioune vum Benotzer: %s
- Leeschtunge vum Benotzer: %s
+ Fakultativ Autorisatioun: Déi aktuell Plaz kréie fir Propose fir Kategorien
+ Kontributioune vum Benotzer: %1$s
+ Leeschtunge vum Benotzer: %1$s
Benotzerprofil weisen
Kategorien änneren
Erweidert Optiounen
@@ -524,15 +528,15 @@
Dem Auteur Merci soen
Feeler beim Schécke vun engem Merci un den Auteur.
Fichier erfollegräich gespäichert
- Wëllt Dir de GPW-Fichier opmaachen?
+ Wëllt Dir de GPX-Fichier opmaachen?
Wëllt Dir de KML-Fichier opmaachen?
De KML-Fichier konnt net gespäichert ginn.
De GPX-Fichier konnt net gespäichert ginn.
- KML-Fichier späicheren
- GPX-Fichier späicheren
+ Als KML-Fichier späicheren...
+ Als GPX-Fichier späicheren...
- - %d Bild ausgewielt
- - %d Biller ausgewielt
+ - %1$d Bild ausgewielt
+ - %1$d Biller ausgewielt
\'%1$s\' gëtt et net méi, et kann keng Foto méi dovunner gemaach ginn.
Läsche confirméieren
diff --git a/app/src/main/res/values-li/strings.xml b/app/src/main/res/values-li/strings.xml
index f477ed8f0..3adda5c8c 100644
--- a/app/src/main/res/values-li/strings.xml
+++ b/app/src/main/res/values-li/strings.xml
@@ -8,20 +8,18 @@
- %1$d bestandj up \'nt loade
- %1$d bestenj up \'nt loade
-
- - \@string/contributions_subtitle_zero
- - %1$d upload
- - %1$d uploads
-
- Beginnendj mit %1$d upload
- Beginnendj mit %1$d uploads
-
+
- %1$d upload
- %1$d uploads
- Dit plaetje weurt gelicenseerd ónger %1$s
+
+ - Dit plaetje weurt gelicenseerd ónger %1$s
+ - Dees plaetje weure gelicenseerd ónger %1$s
+
Uterlik
Algemein
Feedback
@@ -97,10 +95,10 @@
Standerdlicentie
Gebroek veurige naam/besjrieving
Nachmodus
- Naamsvermeljing-GeliekDeile 4.0
- Naamsvermeljing 4.0
- Naamsvermeljing-GeliekDeile 3.0
- Naamsvermeljing 3.0
+ Naamsvermeljing-GeliekDeile 4.0
+ Naamsvermeljing 4.0
+ Naamsvermeljing-GeliekDeile 3.0
+ Naamsvermeljing 3.0
CC0
CC BY-SA 3.0
CC BY 3.0
diff --git a/app/src/main/res/values-lt/strings.xml b/app/src/main/res/values-lt/strings.xml
index c13874a74..42ccfe377 100644
--- a/app/src/main/res/values-lt/strings.xml
+++ b/app/src/main/res/values-lt/strings.xml
@@ -12,7 +12,7 @@
-->
Vikitekos Facebook puslapis
- Vikitekos Github šaltinio kodas
+ Vikitekos Github šaltinio kodas
Vikitekos logotipas
Vikitekos interneto svetainė
Išeiti iš vietos pasirinkimo
@@ -35,21 +35,25 @@
- %1$d keliamas failas
- %1$d keliami failai
-
-
- - \@string/contributions_subtitle_zero
- - 1 įkėlimas
-
- Įkėlimai pradedami
+ Įkėlimai pradedami
- - Pradedamas %1$d įkėlimas
- - Pradedami %1$d įkėlimai
+ - Apdorojamas %1$d įkėlimas
+ - Apdorojami %1$d įkėlimai
+ - Apdorojami %1$d įkėlimai
+ - Apdorojami %1$d įkėlimai
-
+
- %1$d įkėlimas
- - %1$d įkėlimai
+ - %1$d įkėlimai
+ - %1$d įkėlimai
+ - %1$d įkėlimų
+
+
+ - Šio paveikslėlio licencija bus %1$s
+ - Šių paveikslų licencija bus %1$s
+ - Šių paveikslų licencija bus %1$s
+ - Šių paveikslų licencija bus %1$s
- Šio paveikslėlio licencija bus %1$s
Naršyti
Išvaizda
Bendra
@@ -80,7 +84,7 @@
Įkėlimas eilėje (įgalintas riboto ryšio režimas)
%1$s įkelta!
Bakstelėkite norėdami peržiūrėti jūsų įkėlimą
- Keliamas failas: %s
+ Keliamas failas: %1$s
%1$s įkeliamas
Baigiamas įkelti %1$s
Įkelti %1$s nepavyko
@@ -126,6 +130,7 @@
Nustatymai
Užsiregistruoti
Rinktiniai Paveikslėliai
+ Rinktinės nuotraukos yra aukštos kvalifikacijos fotografų ir iliustratorių vaizdai, kuriuos Vikiteka bendruomenė pasirinko kaip svetainėje aukščiausios kokybės.
Pasirinktinis parinkiklis
Kategorija
Apie
@@ -146,10 +151,10 @@
Numatytoji Licencija
Naudoti ankstesnį pavadinimą ir aprašymą
Tema
- Attribution-ShareAlike 4.0
- Attribution 4.0
- Attribution-ShareAlike 3.0
- Attribution 3.0
+ Attribution-ShareAlike 4.0
+ Attribution 4.0
+ Attribution-ShareAlike 3.0
+ Attribution 3.0
CC BY-SA 4.0
CC BY 4.0
Vikimedija Commons talpina daugumą paveikslėlių, kurie yra naudojami Vikipedijoje.
@@ -207,13 +212,12 @@
Prisijunkite prie beta kanalo Google Play ir gaukite išankstinę prieigą prie naujų funkcijų bei klaidų pataisymų
2FA kodas
Ar tikrai norite atsijungti?
- Medijos paveikslėlis nepavyko
Subkategorijų nerasta
Zao kalnas
Lamos
Vaivorykštės tiltas
Tulpė
- Sveiki atvykę į Vikipediją
+ Sveiki atvykę į Vikipediją
Sidnėjaus operos teatras
Atšaukti
Atidaryti
@@ -348,13 +352,11 @@
Pasiekimai
Profilis
Ženkliukai
- Statistika
Gauta padėka
Rinktiniai paveikslėliai
Vaizdai per „Netoliese esančios vietos“
- Lygis %d
- %s (%s lygis)
- %s (%s)
+ Lygis %1$d
+ %1$s (%2$s lygis)
Vaizdai įkelti
Paveikslėliai negrąžinti
Naudoti vaizdai
@@ -414,7 +416,7 @@
Niekada daugiau to neklausti
Paprašyti vietos leidimo
Jei reikia, kad būtų galima naudoti netoliese esančio pranešimų kortelės peržiūros funkciją, paprašykite leidimo nustatyti vietą.
- Kažkas ne taip, mums nepavyko gauti pasiekimų
+ Kažkas ne taip, mums nepavyko gauti pasiekimų
Prisidėjote tiek daug, kad mūsų pasiekimų skaičiavimo sistema negali susidoroti. Tai yra didžiausias pasiekimas.
Baigiasi:
Peržiūrėkite vykstančias kampanijas
@@ -441,11 +443,11 @@
Nepavyko prašyti %1$s kategorijos patikrinimo
Prašoma %1$s kategorijos patikrinimo
Atlikta
- Padėkos siuntimas: pavyko
- Padėka %1$s sėkmingai išsiųsta
- Nepavyko išsiųsti padėkos %1$s
- Padėkos siuntimas: nepavyko
- Siunčiama padėka už %1$s
+ Padėkos siuntimas: pavyko
+ Padėka %1$s sėkmingai išsiųsta
+ Nepavyko išsiųsti padėkos %1$s
+ Padėkos siuntimas: nepavyko
+ Siunčiama padėka už %1$s
Ar tai atitinka autorines teises?
Ar tai teisingai priskirta kategorijoms?
Ar tai taikytina?
@@ -472,14 +474,13 @@
Žiūrėti neperskaitytus
Renkant vaizdus įvyko klaida
Prašome palaukti...
- Rinktinės nuotraukos yra aukštos kvalifikacijos fotografų ir iliustratorių vaizdai, kuriuos Vikiteka bendruomenė pasirinko kaip svetainėje aukščiausios kokybės.
Vaizdai, įkelti per Netoliese esančias vietas, yra vaizdai, kurie įkeliami atrandant vietas žemėlapyje.
Ši funkcija leidžia redaktoriams siųsti padėkos pranešimą naudotojams, kurie atlieka naudingus pakeitimus, naudojant nedidelę padėkos nuorodą istorijos puslapyje arba skirtumų puslapyje.
Nukopijuota
Gerų vaizdų, kurie laukiami Vikitekoje, pavyzdžiai
Vaizdų, kurie neturėtų būti keliami, pavyzdžiai
Praleisti šį vaizdą
- Atsiuntimas nepavyko!!. Negalime atsisiųsti failo be išorinės saugyklos leidimo.
+ Atsiuntimas nepavyko!!. Negalime atsisiųsti failo be išorinės saugyklos leidimo.
Tvarkyti EXIF žymas
Pasirinkite, kurias EXIF žymas išlaikyti įkėlimuose
Autorius
@@ -489,8 +490,6 @@
Objektyvo modelis
Serijinis numeris
Programinė įranga
- Prieiga prie medijos vietos uždrausta
- Gali būti, kad negalėsime automatiškai gauti vietos duomenų iš jūsų įkeltų nuotraukų. Prieš pateikdami kiekvienai nuotraukai pridėkite tinkamą vietą
Įkelkite nuotraukas į Vikiteką tiesiai iš savo telefono. Atsisiųskite Vikitekos programėlę dabar: %1$s
Dalintis programą per ...
Vaizdo informacija
@@ -538,7 +537,7 @@
Redaguokite aprašymus ir antraštes
Dalintis vaizdu per
Dar nepadarėte jokio indėlio
- %s dar nepadarė jokio indėlio
+ %1$s dar nepadarė jokio indėlio
Paskyra sukurta!
Tekstas nukopijuotas į iškarpinę
Pranešimas pažymėtas kaip perskaitytas
@@ -547,7 +546,7 @@
Egzistuoja
Reikia Nuotraukos
Vietos tipas:
- Tiltas, muziejus, viešbutis ir t.t.
+ Tiltas, muziejus, viešbutis ir t.t.
Kažkas nepavyko prisijungiant. Turite iš naujo nustatyti slaptažodį!
MEDIJA
Netoliese rasta vieta
@@ -587,7 +586,7 @@
5. Įklijuokite vikitekstą į atitinkamą vietą.
6. Jei reikia, redaguokite vikitekstą, kad būtų nustatyta tinkama padėtis. Daugiau informacijos rasite <a href=\"https://en.wikipedia.org/wiki/Wikipedia:Manual_of_Style/Images#How_to_place_an_image\">čia</a>.
7. Paskelbkite straipsnį
- Nukopijuokite vikikodą į mainų sritį
+ Nukopijuokite vikikodą į mainų sritį
pauzė
tęsti
Pristabdyta
@@ -642,7 +641,7 @@
Rodyti žemėlapio programėlėje
Redaguoti vietą
Vietos rinkiklio vaizdo rodinys
- \n Vietos parinkiklio vaizdo rodinio šešėlis
+ \n Vietos parinkiklio vaizdo rodinio šešėlis
Vaizdo vieta
Patikrinkite, ar vieta yra teisinga
Etiketė
@@ -654,7 +653,7 @@
Atgal
Sveiki atvykę į tinkintą nuotraukų parinkiklį
Šis rinkiklis rodo, kurias nuotraukas jau įkėlėte į Vikiteką.
- Skirtingai nuo paveikslėlio kairėje, paveikslėlyje dešinėje yra Vikitekos logotipas, nurodantis, kad jis jau įkeltas. \n Palieskite ir palaikykite, kad peržiūrėtumėte vaizdą.
+ Skirtingai nuo paveikslėlio kairėje, paveikslėlyje dešinėje yra Vikitekos logotipas, nurodantis, kad jis jau įkeltas. \n Palieskite ir palaikykite, kad peržiūrėtumėte vaizdą.
Puiku
Šis vaizdas jau buvo įkeltas į Vikiteką.
Dėl techninių priežasčių programėlė negali patikimai įkelti daugiau nei %1$d nuotraukos vienu metu. %1$d įkėlimo limitas buvo viršytas %2$d.
@@ -668,8 +667,9 @@
Viki myli paminklus yra tarptautinis nuotraukų konkursas, skirtas paminklams, kurį organizuoja Vikiteka
Reikia leidimo
Netoliese žemėlapiai turi perskaityti TELENFONO BŪSENĄ, kad tinkamai funkcionuotų
- Naudotojo indėlis: %s
- Naudotojo pasiekimai: %s
+ Neprivaloma teisė: Gauti dabartinę vietovę, kad būtų pasiūlomos kategorijos
+ Naudotojo indėlis: %1$s
+ Naudotojo pasiekimai: %1$s
Žiūrėti naudotojo puslapį
Redaguoti vaizdus
Redaguoti kategorijas
@@ -680,7 +680,7 @@
Vietos duomenys padeda Viki redaktoriams rasti jūsų nuotrauką, todėl ji tampa daug naudingesnė.\nNaujai įkeltų failų vieta nenustatyta.\nSiūlome įjungti vietos nustatymą fotoaparato programėlės nustatymuose.\nDėkojame, kad įkėlėte!
Vieta nerasta
Apsvarstykite galimybę pridėti vietą, kur ši nuotrauka buvo padaryta.\nVietos duomenys padeda Viki redaktoriams rasti jūsų nuotrauką, todėl jim tampa daug naudingesnė.\nAčiū!
- Pridėti vietą
+ Pridėti vietą
Pašalinkite iš šio el. laiško bet kokią informaciją, kurios nenorite bendrinti viešai. Be to, atminkite, kad jūsų el. pašto adresas, su kuriuo skelbiate, ir susijęs vardas bei profilio nuotrauka bus matomi viešai.
Detalės
Panaikinkite visą informaciją, kuria nenorite dalytis viešai.
@@ -698,8 +698,8 @@
Panaikinkite žymėjimą kaip neskirto įkėlimui
Žymima kaip neįkėlimui
Naikinamas žymėjimas kaip neįkėlimui
- Rodyti jau padarytas nuotraukas
- Slepiamos jau padarytos nuotraukos
+ Rodyti jau padarytas nuotraukas
+ Slepiamos jau padarytos nuotraukos
Daugiau paveikslėlių nerasta
Šis paveiklėlis jau yra įkeltas
Negalima pasirinkti šio vaizdo įkėlimui
@@ -735,12 +735,12 @@
Jūsų prisijungimo sesija baigėsi. Prašome prisijungti dar kartą.
Nėra jokios programos GPX failams atidaryti
Failas sėkmingai išsaugotas
- Ar norite atidaryti GPX failą?
- Ar norite atidaryti KML failą?
- Nepavyko išsaugoti KML failo.
- Nepavyko išsaugoti GPX failo.
- Išsaugomas KML failas
- Išsaugomas GPX failas
+ Ar norite atidaryti GPX failą?
+ Ar norite atidaryti KML failą?
+ Nepavyko išsaugoti KML failo.
+ Nepavyko išsaugoti GPX failo.
+ Išsaugomas KML failas
+ Išsaugomas GPX failas
Atminkite, kad visi paveikslėliai, įkeliant kelis, turi tas pačias kategorijas ir vaizdus. Jei paveikslėliuose vaizdai ir kategorijos skiriasi, prašome atlikti kelis atskirus įkėlimus.
Pastaba apie kelis įkėlimus
Praneškite apie problemą dėl šio elemento Vikiduomenims.
diff --git a/app/src/main/res/values-lv/strings.xml b/app/src/main/res/values-lv/strings.xml
index cbc710bc9..aca203962 100644
--- a/app/src/main/res/values-lv/strings.xml
+++ b/app/src/main/res/values-lv/strings.xml
@@ -144,8 +144,7 @@
Meklējumu vēsture izdzēsta
Dzēst
Profils
- Statistika
- Līmenis
+ Līmenis %1$d
Tuvumā
Saraksts
Nākamais
diff --git a/app/src/main/res/values-min/error.xml b/app/src/main/res/values-min/error.xml
new file mode 100644
index 000000000..11f57f87d
--- /dev/null
+++ b/app/src/main/res/values-min/error.xml
@@ -0,0 +1,10 @@
+
+
+
+ Commons bamasalah
+ Ups. Ado nan salah!
+ Caritokan apo nan sanak karajoan, sudah tu bagikan lewat email ka kami. Akan kami bantu mamelokannyo!
+ Tarimo kasih!
+
diff --git a/app/src/main/res/values-mk/strings.xml b/app/src/main/res/values-mk/strings.xml
index 8895247f7..5ae090aa8 100644
--- a/app/src/main/res/values-mk/strings.xml
+++ b/app/src/main/res/values-mk/strings.xml
@@ -6,7 +6,7 @@
-->
Ризницата на Фејсбук
- Изворен код на Ризницата на Github
+ Изворен код на Ризницата на GitHub
Лого на Ризницата
Ризница
Излези од избирачот на местоположба
@@ -30,18 +30,14 @@
- Се подига %1$d податотека
- Се подигаат %1$d податотеки
-
- - (%1$d)
- - (%1$d)
-
- Почеток на подигањата
+ Подигањето почнува
- Обработувам %1$d подигање
- Обработувам %1$d подигања
- - %d подигање
- - %d подигања
+ - %1$d подигање
+ - %1$d подигања
- Сликава ќе се води под лиценцата %1$s
@@ -85,7 +81,7 @@
Подигањето е во редица (овозможен режимот на ограничена врска)
Податотеката „%1$s“ е подигната!
Допрете за да го погледате подигањето
- Подигање на податотеката: %s
+ Подигање на податотеката: %1$s
Подигање на „%1$s“
Завршувам со подигање на „%1$s“
Подигањето на %1$s не успеа
@@ -135,6 +131,7 @@
Нагодувања
Зачленување
Избрани слики
+ Избраните слики се придонеси на високообучени фотографи и илустратори кои заедницата ги избрала за да бидат истакнати како едни од најдобрите слики на Ризницата.
Прилагоден избирач
Категорија
Оценување
@@ -151,14 +148,17 @@
Сè уште немате подигнато ниедна слика.
Пробај пак
Откажи
+ Внесете име на јазик
+ Скорешни пребарувања
+ Сите јазици
Поднесувајќи ја сликава, изјавувам дека истата е мое сопствено дело, дека не содржи никаков материјал заштитен со авторски права, не содржи самослици, и дека на секој друг начин е во склад со <a href=\"https://commons.wikimedia.org/wiki/Commons:Policies_and_guidelines/mk?uselang=mk\">правилата на Ризницата</a>.
Преземи
Стандардна лиценца
Користи претходен наслов и опис
Изглед
- Наведи извор-Сподели под исти услови 4.0
+ Наведи извор-Сподели под исти услови 4.0
Наведи извор 4.0
- Наведи извор-Сподели под исти услови 3.0
+ Наведи извор-Сподели под исти услови 3.0
Наведи извор 3.0
CC0
CC BY-SA 3.0
@@ -212,6 +212,7 @@
Опис
Разговор
Автор
+ Подигач
Датум на подигање
Лиценца
Координати
@@ -221,15 +222,14 @@
2ЧЗ-код
Испрати го потврдниот код на е-пошта
Дали навистина сакате да се одјавите?
- Сликата не успеа
Не пронајдов поткатегории
Не пронајдов матични категории
Зао
Лами
Виножитен мост
Лале
- Добре дојде Википедија
- Добре дојде Авторски права
+ Шематски приказ на генеричка статија на Википедија.
+ Цртеж на купче хартии со прецртан симбол за авторски права.
Сиднејска опера
Откажи
Отвори
@@ -262,6 +262,7 @@
Постапката за подигање бара да сте поврзани\n со семрежјето. Проверете си ја врската.
Пронајдени проблеми во сликата
Подигајте само слики кои самите сте ги направиле. Не подигајте слики што сте ги нашле некаде на семрежјето.
+ Подигања
Зачувај слики направени во прилогот
Зачувување на сликите направени со камерата во прилогот на вашиот уред
Најавете се со вашата сметка
@@ -333,6 +334,7 @@
Квиз
Дали е во ред да се подигне сликава?
Прашање
+ Не знам
Исход
Ако продолжите со подигање на слики што треба да се бришат, веројатно е дека ќе добиете забрана на сметката. Сигурно сакате да го завршите квизот?
Преку %1$s од сликите што ги подигнавте беа избришани. Ако продолжите со подигање на слики што треба да се бришат, веројатно е дека ќе добиете забрана на сметката.\n\nДали би сакале повторно да го погледате упатството, па да си го проверите знаењето во квиз за тоа какви слики се дозволени за подигање?
@@ -342,6 +344,7 @@
Една од целите на Ризницата е да биде собиралиште за квалитетни слики. Затоа, не треба да се подигаат матни фотографии. Секогаш настојувајте да правите уредни слики со добро осветлување.
На Ризницата се добредојдени слики на кои се прикажува технологија или култура.
Дадовте %1$s точни одговори. Честитаме!
+ Продолжи
Изберете еден одговор
Најавната седница истече. Најавете се повторно.
Споделете го квизов со пријателите!
@@ -365,13 +368,11 @@
Достигнувања
Профил
Значки
- Статистика
Примени благодарници
Избрани слики
Слики преку „Околни места“
- Степен %d
- %s (Степен %s)
- %s (%s)
+ Степен %1$d
+ %1$s (Степен %2$s)
Подигнати слики
Неоткажани слики
Употребени слики
@@ -431,11 +432,13 @@
Повеќе не прашувај
Побарај дозвола за местоположба
Барај дозвола за местоположба кога ќе треба да се даде известување за околно место.
- Нешто не е во ред. Не можев да ги добијам вашите достигнувања
+ Нешто не е во ред, па затоа не можев да ги добијам достигнувањата
Имате толку многу придонеси што нашиот пресметувач на достигнувања просто не може да постигне. Ова е врховното достигнување.
Завршува:
Прикажи походи
Погледајте ги тековните походи
+ Прикажувај го копчето за бришење
+ Овозможете го копчето „Избриши папка“ во прилагодливиот избирач
Дозволете му на прилогот да презема местоположба во случај камерата да не го заведува овој податок. Камерите на некои уреди не заведуваат местоположба. Во такви случаи, овозможете му на прилогот да најде и запише местоположба за вашиот придонес да биде покорисен. Ова можете да го смените во секое време во Нагодувањата
Дозволи
Тргни
@@ -460,7 +463,7 @@
Барање на категориска проверка за %1$s
Готово
Испраќање на благодарница: Успешно
- Успешно испратена благодарница на %1$s
+ Испратена благодарница на %1$s
Не успеав да испратам благодарница на %1$s
Испраќање на благодарница: Неуспешно
Испраќање на благодарница за %1$s
@@ -490,15 +493,14 @@
Погл. непрочитани
Се јави грешка при избирањето на сликите
Почекајте...
- Избраните слики се дела на високообучени фотографи и илустратори кои заедницата ги избрала за да бидат истакнати како едни од најдобрите слики на Ризницата.
Сликите подигнати преку „Околни места“ се оние подигнати при откривање на места на картата.
Ова им дава можност на уредниците да им испраќаат благодарници на корисниците што вршат полезни уредувања. Ова се прави стискајќи на малата врска за заблагодарување во страницата за историја или разлики.
- Копирај во нареден носач
+ Копирај во следните ставки
Ископирано
Примери — Добри слики за подигање
Примери — Слики што не се за подигање
Прескокни ја сликава
- Преземањето не успеа!!! Не можеме да ја преземеме податотеката без дозвола од надворешен склад.
+ Преземањето не успеа. Не можеме да ја преземеме податотеката без дозвола од надворешен склад.
Раков. со EXIF-ознаки
Изберете кои EXIF-ознаки да се задржат во подигањата
Автор
@@ -508,11 +510,10 @@
Модел на објективот
Сериски броеви
Програми
- Одибиен пристапот до местоположбата на сликата
- Можеби нема да можеме автоматски да ги добиеме податоците за местоположба од сликите што ги подигате. Ставете ја соодветната местоположба за секоја слика пред да подигате
Подигајте слики непосредно на Ризницата од телефон. Преземете го прилогот на Ризницата сега: %1$s
Сподели преку...
Инфо за сликата
+ Повеќе не ја покажувај поракава
Не пронајдов ниедна категорија
Не пронајдов ниедно прикажување
Откажено подигање
@@ -565,7 +566,7 @@
Уреди описи и толкувања
Сподели ја сликата преку
Засега немате придонеси
- %s засега нема придонеси
+ %1$s засега нема придонеси
Сметката е создадена!
Текстот е ставен во меѓускладот
Известувањето е означено како прочитано
@@ -618,7 +619,7 @@
5. Прекопирајте го викитекстот во соодветното место.
6. По потреба, уредете го викитекстот за да ја ставите сликата во прикладна положба во одност на текстот. Повеќе информации за тоа ќе видите <a href=\"https://en.wikipedia.org/wiki/Wikipedia:Manual_of_Style/Images#How_to_place_an_image\">тука</a>.
7. Објавете ја статијата
- Прекопирајте го викикодот во меѓускладот
+ Прекопирајте го викитекстот во меѓускладот
запри
продолжи
Запрено
@@ -659,6 +660,8 @@
Изберете ги прикладните категории. За разлика од приказите, категориите се исклучиво на англиски.
Ризницата ги става вашите дела на располагање за употреба и преработка за секого. Дали сакате да се одречете од сите права? Дали сакате делото да ви се припишува? Дали сакате преработените дела да ја имаат истата лиценца?
Прикажува
+ Натпис
+ Опис
Лиценца на творбата
Поединости за творбата
Погл. категориска страница
@@ -685,7 +688,7 @@
Назад
Добре дојдовте на Прилагодениот избирач
Овој избирач ви покажува кои слики веќе ги имате подигнато на Ризницата.
- За разлика од сликата лево, таа десно има лого на Ризницата, што значи дека веќе е подигната. \n Допрете и држете за да ја погледате сликата.
+ За разлика од сликата лево, таа десно има лого на Ризницата, што значи дека веќе е подигната. \n\nДопрете и држете за да ја погледате сликата.
Одлично
Оваа слика е веќе подигната на Ризницата.
Од технички причини прилогот не може поуздано да вчита повеќе од %1$d слики наеднап. Имате %2$d повеќе од дозволените %1$d подигања.
@@ -701,8 +704,10 @@
„Вики ги сака спомениците“ е меѓународен фотографски натпревар за споменици приреден од Викимедија
Се бара дозвола
Картите со блиски места треба можат да ја прочитаат СОСТОЈБАТА НА ТЕЛЕФОНОТ за да работат правилно
- Придонеси на корисникот: %s
- Достигнувања на корисникот: %s
+ Вклучете ја вашата местоположба за да ги гледате околните места.
+ Дозвола по желба: Утврдување на тековната местоположба за предлагање категории
+ Придонеси на корисникот: %1$s
+ Достигнувања на корисникот: %1$s
Погл. кориснички профил
Уреди прикази
Уреди категории
@@ -758,7 +763,7 @@
Се бараат дозволи за функцијата
Дознајте како да напишете корисен опис
Дознајте како да напишете корисно толкување
- Видете ги вашите достигнувања
+ Погледајте ги вашите достигнувања
Уреди слика
Уреди местоположба
Местоположбата е подновена!
@@ -771,15 +776,15 @@
Најавата ви е истечена. Најавете се повторно.
Нема достапен прилог за отворање на GPX-податотеки
Податотеката е успешно зачувана
- Дали сакате да отворите GPX-податотека?
- Дали сакате да отворите KML-податотека?
- Не можев да ја зачувам KML-податотеката.
+ Дали сакате да ја отворите GPX-податотеката?
+ Дали сакате да ја отворите KML-податотеката?
+ Не можев да ја зачувам KML-податотекатата.
Не можев да ја зачувам GPX-податотеката.
- Зачувување на KML-податотека
- Зачувување на GPX-податотека
+ Зачувување како KML-податотека...
+ Зачувувам како GPX-податотека...
- - Избрана е %d слика
- - Избрани се %d слики
+ - Избрана е %1$d слика
+ - Избрани се %1$d слики
Запомнете дека сите слики што ги подигате наеднаш се очекуваат да ја прикажуваат истата работа и ги добиваат истите категории и описи. Ако сликите прикажуваат различни нешта и треба да имаат различни категории, извршете неколку одделни подигања.
Напомена за подигање повеќе слики наеднаш
@@ -816,7 +821,6 @@
Други викија
•
Употреби на податотеката
- SingleWebViewActivity
Сметка
Исчезни сметка
Предупредување за исчезнување на сметка
diff --git a/app/src/main/res/values-ml/strings.xml b/app/src/main/res/values-ml/strings.xml
index 775a64bcc..c18bfbeca 100644
--- a/app/src/main/res/values-ml/strings.xml
+++ b/app/src/main/res/values-ml/strings.xml
@@ -10,7 +10,7 @@
-->
കോമൺസ് ഫേസ്ബുക്ക് പേജ്
- കോമൺസ് ജിത്ഹബ് സോഴ്സ് കോഡ്
+ കോമൺസ് ജിത്ഹബ് സോഴ്സ് കോഡ്
കോമൺസ് ലോഗോ
കോമൺസ് വെബ്സൈറ്റ്
സമർപ്പിക്കുക
@@ -32,21 +32,19 @@
- ഒരു പ്രമാണം അപ്ലോഡ് ചെയ്യുന്നു
- %1$d പ്രമാണങ്ങൾ അപ്ലോഡ് ചെയ്യുന്നു
-
- - ഒരു അപ്ലോഡും ചെയ്തില്ല
- - ഒരു അപ്ലോഡ്
- - %1$d അപ്ലോഡുകൾ
-
അപ്ലോഡുകൾ ആരംഭിക്കുന്നു
- ഒരു അപ്ലോഡ് തുടങ്ങുന്നു
- %1$d അപ്ലോഡുകൾ തുടങ്ങുന്നു
-
+
- ഒരു അപ്ലോഡ്
- %1$d അപ്ലോഡുകൾ
- ചിത്രം %1$s പ്രകാരം അനുമതി നൽകപ്പെടുന്നതാണ്
+
+ - ഈ ചിത്രം %1$s ന് കീഴിൽ ലൈസൻസ് ചെയ്യപ്പെടും
+ - ഈ ചിത്രങ്ങൾ %1$s ന് കീഴിൽ ലൈസൻസ് ചെയ്യപ്പെടും
+
പര്യവേഷണം
ദൃശ്യരൂപം
സാർവത്രികം
@@ -134,10 +132,10 @@
ഡൗൺലോഡ്
സ്വതേയുള്ള ഉപയോഗാനുമതി
വിഷയം
- ആട്രിബ്യൂഷൻ-ഷെയർഎലൈക് 4.0
- ആട്രിബ്യൂഷൻ 4.0
- ആട്രിബ്യൂഷൻ-ഷെയർഎലൈക് 3.0
- ആട്രിബ്യൂഷൻ 3.0
+ ആട്രിബ്യൂഷൻ-ഷെയർഎലൈക് 4.0
+ ആട്രിബ്യൂഷൻ 4.0
+ ആട്രിബ്യൂഷൻ-ഷെയർഎലൈക് 3.0
+ ആട്രിബ്യൂഷൻ 3.0
സി.സി.0
സി.സി. ബൈ-എസ്.എ. 3.0
സി.സി. ബൈ 3.0
@@ -205,7 +203,6 @@
വർഗ്ഗങ്ങൾ
മായ്ക്കാനായി നിർദ്ദേശിക്കുക
മായ്ക്കുക
- സ്ഥിതിവിവരക്കണക്കുകൾ
പട്ടിക
അടുത്തത്
വർഗ്ഗങ്ങൾ ഒന്നും തന്നെ തിരഞ്ഞെടുത്തിട്ടില്ല
@@ -217,7 +214,7 @@
നിലവിലുണ്ട്
ചിത്രം വേണം
സ്ഥലത്തിന്റെ തരം:
- പാലം, മ്യൂസിയം, ഹോട്ടൽ തുടങ്ങിയവ
+ പാലം, മ്യൂസിയം, ഹോട്ടൽ തുടങ്ങിയവ
സജ്ജീകരണങ്ങൾ
താത്കാലികമായി നിർത്തുക
തുടരുക
diff --git a/app/src/main/res/values-mni/strings.xml b/app/src/main/res/values-mni/strings.xml
index 7d48bab32..27dc3c325 100644
--- a/app/src/main/res/values-mni/strings.xml
+++ b/app/src/main/res/values-mni/strings.xml
@@ -48,10 +48,10 @@
ꯑꯌꯥꯕꯥ ꯱ ꯍꯦꯛꯇ
ꯁꯤꯖꯤꯟꯅꯧ ꯃꯃꯥꯡꯒꯤ ꯃꯃꯤꯡ ꯱ꯁꯨꯡ ꯑꯀꯨꯞꯄ ꯋꯥꯔꯣꯜ
ꯃꯑꯣꯡ
- ꯑꯇ꯭ꯔꯤꯕꯨꯁꯟ-ꯁꯌꯥꯔꯑꯂꯥꯏꯛ ꯴.꯰
- ꯑꯇ꯭ꯔꯤꯕꯨꯁꯟ ꯴.꯰
- ꯑꯇ꯭ꯔꯤꯕꯨꯁꯟ-ꯁꯌꯥꯔꯑꯂꯥꯏꯛ ꯳.꯰
- ꯑꯇ꯭ꯔꯤꯕꯨꯁꯟ ꯳.꯰
+ ꯑꯇ꯭ꯔꯤꯕꯨꯁꯟ-ꯁꯌꯥꯔꯑꯂꯥꯏꯛ ꯴.꯰
+ ꯑꯇ꯭ꯔꯤꯕꯨꯁꯟ ꯴.꯰
+ ꯑꯇ꯭ꯔꯤꯕꯨꯁꯟ-ꯁꯌꯥꯔꯑꯂꯥꯏꯛ ꯳.꯰
+ ꯑꯇ꯭ꯔꯤꯕꯨꯁꯟ ꯳.꯰
ꯆꯥꯟꯕꯤꯗꯨꯅꯥ ꯊꯥꯒꯠꯀꯅꯨ:
ꯏꯁꯥ ꯏꯇꯣꯝ ꯃꯥꯏꯑꯣꯟꯁꯤꯟꯗꯨꯅꯥ ꯀꯥꯞꯆꯕ ꯅꯠꯇ꯭ꯔꯒ ꯅꯃꯥꯝꯅꯕꯒꯤ ꯃꯤꯔꯦꯜꯁꯤꯡ
ꯊꯥꯒꯠꯄꯒꯤ ꯈꯨꯗꯝ:
@@ -77,8 +77,8 @@
ꯑꯌꯥꯕꯥ
ꯀꯣꯑꯣꯔꯗꯤꯅꯦꯠꯁ
ꯕꯦꯇꯥ ꯆꯥꯡꯌꯦꯡ ꯇꯧꯕ ꯱ ꯑꯣꯏꯕꯤꯌꯨ
- ꯂꯦꯡꯁꯤꯟꯕꯤꯔꯛꯁꯤ ꯋꯤꯀꯤꯄꯦꯗꯤꯌꯥ
- ꯂꯦꯡꯁꯤꯟꯕꯤꯔꯛꯁꯤ ꯁꯤꯟꯗꯣꯛꯄ-ꯑꯌꯥꯕ
+ ꯂꯦꯡꯁꯤꯟꯕꯤꯔꯛꯁꯤ ꯋꯤꯀꯤꯄꯦꯗꯤꯌꯥ
+ ꯂꯦꯡꯁꯤꯟꯕꯤꯔꯛꯁꯤ ꯁꯤꯟꯗꯣꯛꯄ-ꯑꯌꯥꯕ
ꯇꯣꯛꯄ
ꯍꯥꯡꯗꯣꯛꯄ
ꯈꯨꯝꯖꯤꯟꯕ
@@ -129,7 +129,7 @@
ꯑꯔꯥꯟꯕ ꯄꯥꯎꯈꯨꯝ
ꯀꯛꯊꯠꯄꯥ
ꯊꯥꯒꯠꯆꯔꯤ ꯐꯪꯖꯔꯦ
- ꯊꯥꯛ
+ ꯊꯥꯛ %1$d
ꯃꯊꯪ
ꯃꯃꯥꯡꯒꯤ
ꯃꯐꯝꯁꯤꯡ
diff --git a/app/src/main/res/values-mnw/strings.xml b/app/src/main/res/values-mnw/strings.xml
index a6c18bca3..774483a9e 100644
--- a/app/src/main/res/values-mnw/strings.xml
+++ b/app/src/main/res/values-mnw/strings.xml
@@ -9,20 +9,15 @@
Commons Facebook Page
သၚ်္ကေတ Commons
ဗီုရုပ်တၟေင် သွက်တ္ၚဲဏအ်
-
- - ဝှာင် %1$d file uploadingဂှ် ပတိုန်ပၠုပ်ဒၟံင်
- - ဝှာင် %1$d files uploadingဂှ် ပတိုန်ပၠုပ်ဒၟံင်
-
-
- - \@string/contributions_subtitle_zero
- - (%1$d)
- - (%1$d)
+
+ - %1$d ဝှာင် ဂှ် ပတိုန်ပၠုပ်ဒၟံင်
+ - %1$d ဝှာင် ဂှ် ပတိုန်ပၠုပ်ဒၟံင်
- စဒၟံင် %1$d ပတိုန်ပၠုပ်
- စဒၟံင် %1$d ပတိုန်ပၠုပ်
-
+
- %1$d ပတိုန်ပၠုပ်
- %1$d ပတိုန်ပၠုပ်
@@ -117,10 +112,10 @@
လာင်ဇြေန် နူတမ်
စုတ် က္ဍိုပ်လိက် ကေုာံ ဗမံက်ထ္ၜး တၞဟ်ခြာညိ
ပရူပရာ
- Attribution-ShareAlike 4.0
- Attribution 4.0
- Attribution-ShareAlike 3.0
- Attribution 3.0
+ Attribution-ShareAlike 4.0
+ Attribution 4.0
+ Attribution-ShareAlike 3.0
+ Attribution 3.0
CC0
CC BY-SA 3.0
CC BY 3.0
@@ -180,7 +175,7 @@
Llamas
Rainbow Bridge
Tulip
- ဒုင်တၠုင်ဏာ နူဝဳကဳပဳဒဳယာ၊၊
+ ဒုင်တၠုင်ဏာ နူဝဳကဳပဳဒဳယာ၊၊
တးပဲါ
ပံက်
ကၟာတ်
@@ -226,7 +221,7 @@
ဗဒင်ဏအ် ဟွံကၠောန်ကမၠောန် ဗွဲဓမ္မတာ၊ ဒၞာဲဒတန် ဟွံသၟဟ်အစောမ်။
အာတ်မိက်ဒၟံင် အခေါင် သွက်ဂွံထ္ၜး စရင်ဒၞာဲဒတန် ဗဒင်ဗဒင်
စမၞောန်ဂမၠိုင်
- ဝဳကဳဒါတာ
+ ဝဳကဳတင်ဂၞင်
ဝဳကဳပဳဒဳယာ
ခမ်မောန်
ကဵုင္ၚုဟ် ကုပိုယ်
@@ -268,11 +263,12 @@
ဆက်
သွဟ်မဍာံ
သွဟ် မဗၠေတ်
- ကဆံၚ်
+ ကဆံၚ် %1$d
ဗီုရုပ် မတိုန်လဝ်
အရာမကၠောန်သ္ပလဝ်အထံက်အပၚ်ဂမၠိုၚ်
ဗီုရုပ် ဟွံမွဲ
တုဲဒှ်
ကလေင်
သေသာတ်
+ အခေါင်မပိုင်ပြဳ: ကေတ် ဒတန်ဒၞာဲ မနွံဒၟံင်လၟုဟ် သွက်ဂွံစုတ် ပ္ဍဲကဏ္ဍ
diff --git a/app/src/main/res/values-mr/strings.xml b/app/src/main/res/values-mr/strings.xml
index 546b43f4f..a111617fe 100644
--- a/app/src/main/res/values-mr/strings.xml
+++ b/app/src/main/res/values-mr/strings.xml
@@ -9,27 +9,25 @@
-->
कॉमन्सचे फ़ेसबुक पान
- कॉमन्सचे गिटहब स्त्रोत कोड
+ कॉमन्सचे गिटहब स्त्रोत कोड
कॉमन्सचे चिन्ह
कॉमन्सचे संकेतस्थळ
- १ संचिका अपभारीत होत आहे
- %1$d संचिका अपभारीत होत आहे
-
- - अद्याप अपभारणे नाहीत
- - एक अपभारण
- - %1$d अपभारणे
-
- १ अपभारण सुरू करीत आहे upload
- %1$d अपभारणे सुरू करीत आहे
-
+
- १ अपभारण
- %1$d अपभारणे
- ही संचिका %1$s या परवान्यांतर्गत राहील
+
+ - ही संचिका %1$s या परवान्यांतर्गत राहील
+ - ही संचिका %1$s या परवान्यांतर्गत राहील
+
स्वरूप
सामान्य
अभिप्राय
@@ -103,10 +101,10 @@
डिफॉल्ट परवाना
मागील शीर्षक/वर्णन वापरा
रात्रीच्या वेळेच्या व्यवस्था
- Attribution-ShareAlike 3.0
- Attribution 3.0
- Attribution-ShareAlike 3.0
- Attribution 3.0
+ Attribution-ShareAlike 3.0
+ Attribution 3.0
+ Attribution-ShareAlike 3.0
+ Attribution 3.0
CC0
CC BY-SA 3.0
CC BY 3.0
@@ -154,13 +152,12 @@
गुगल प्ले वरील आमच्या बिटा चॅनलचा पाठलाग करा आणि आमच्या नव्या सेवा-सुविधांचा तसाच त्रुटी-निरसनांचा फ़ायदा घ्या.
2FA कोड
काय आपणास खरेच बंद करायचे आहे?
- चित्र माध्यमे कोसळली
जाओ जान पर्वत
लामा
रेनबो पूल
टुलिप
- विकीपिडीयात स्वागत आहे
- प्रताधिकार स्वागत आहे
+ विकीपिडीयात स्वागत आहे
+ प्रताधिकार स्वागत आहे
सिडनीचे ओपेरा हाऊस
रद्द करा
उघडा
@@ -190,4 +187,5 @@
सतत विचारले जाणारे प्रश्न
ट्यूटोरियल वगळा
+ ऐच्छिक परवानगी:वर्ग सुचवण्यांसाठी सध्याचे स्थान मिळवा
diff --git a/app/src/main/res/values-ms/strings.xml b/app/src/main/res/values-ms/strings.xml
index 56b0cd2d4..658a6ce7c 100644
--- a/app/src/main/res/values-ms/strings.xml
+++ b/app/src/main/res/values-ms/strings.xml
@@ -9,7 +9,7 @@
-->
Laman Facebook Commons
- Kod Sumber Github Commons
+ Kod Sumber Github Commons
Logo Commons
Tapak Sesawang Commons
Keluar dari pemilih lokasi
@@ -28,19 +28,19 @@
Togol Atas
Paparan Carian
Gambar untuk Hari ini
- %d fail sedang dimuat naik
-
- - Belum ada muatnaik
- - %1$d muatnaik
- - %1$d muatnaik
+
+ - %1$d fail sedang dimuat naik
Memulakan Muat Naik
- Memulakan %d kerja muat naik
-
- - %1$d muatnaik
+
+ - Memulakan %1$d kerja muat naik
+
+
- %1$d muatnaik
- Gambar ini akan dilesenkan di bawah %1$s
+
+ - Gambar ini akan dilesenkan di bawah %1$s
+
Jelajah
Paparan
Umum
@@ -71,7 +71,7 @@
Muat naik menunggu (mod sambungan terhad diaktifkan)
%1$s telah dimuat naik!
Ketik untuk melihat muatan naik anda
- Memuat naik fail: %s
+ Memuat naik fail: %1$s
%1$s sedang dimuat naik
%1$s akan siap dimuat naik
Gagal untuk muat naik %1$s
@@ -167,7 +167,6 @@
Jadilah Penguji Beta
Kod 2FA
Adakah anda benar-benar mahu log keluar?
- Imej Media Gagal
Tiada subkategori dijumpai
Batalkan
Buka
@@ -223,8 +222,7 @@
Jawapan Salah
Pencapaian
Profil
- Statistik
- Tahap
+ Tahap %1$d
Imej Dimuat Naik
Imej Digunakan
Kongsi pencapaian anda dengan kawan anda!
@@ -245,8 +243,6 @@
Imej berikutnya
Ya, kenapa tidak
Pengarang
- Akses lokasi media ditolak
- Kami mungkin tidak dapat memperolehi data tempat dari gambar yang anda muat naik secara automatik. Sila tambah tempat sewajarnya pada setiap gambar sebelum menyerahnya
Kemas kini kategori
Kemas kini kategori
Tambah imej ke Wikipedia
diff --git a/app/src/main/res/values-mt/strings.xml b/app/src/main/res/values-mt/strings.xml
index f64c782f6..7ead8a923 100644
--- a/app/src/main/res/values-mt/strings.xml
+++ b/app/src/main/res/values-mt/strings.xml
@@ -3,7 +3,12 @@
* Chrisportelli
-->
- Din l-istampa se tiġi liċenzjata taħt %1$s
+
+ - Din l-istampa se tiġi liċenzjata taħt %1$s
+ - Dawn l-istampijiet se jkunu liċenzjati taħt %1$s
+ - Dawn l-istampijiet se jkunu liċenzjati taħt %1$s
+ - Dawn l-istampijiet se jkunu liċenzjati taħt %1$s
+
Wikimedia Commons
Isem l-utent
Password
diff --git a/app/src/main/res/values-my/strings.xml b/app/src/main/res/values-my/strings.xml
index ea7ab06f9..70c8daa08 100644
--- a/app/src/main/res/values-my/strings.xml
+++ b/app/src/main/res/values-my/strings.xml
@@ -18,13 +18,11 @@
ရုပ်ပုံ
အားလုံး
ယနေ့အတွက် အထူးဓာတ်ပုံ
-
- - ဖိုင် %1$d ခု တင်နေသည်
+
- ဖိုင် %1$d ခု တင်နေသည်
အပ်ပလုဒ်များ စတင်ခြင်း
-
- - %1$d ခု တင်ထားသည်
+
- %1$d ခု တင်ထားသည်
@@ -58,7 +56,7 @@
စစ်ဆေးခြင်း မအောင်မြင်ပါ၊ ထပ်မံ၍ လော့အင်ဝင်ပါ။
Upload စတင်ပါပြီ
%1$s တင်ပြီးပြီ
- ဖိုင်အက်ပလုဒ်တင်နေသည်- %1$s
+ ဖိုင်အက်ပလုဒ်တင်နေသည်- %1$s
%1$s ဖိုင်တင်နေသည်
ဖိုင်တင်ခြင်း ပြီးဆုံးမှု %1$s
ဖိုင်တင်ခြင်း %1$s မအောင်မြင်ပါ
@@ -109,10 +107,10 @@
နဂို လိုင်စင်
ယခင် ခေါင်းစဉ်နှင့်ဖော်ပြချက် သုံးမည်
ညကြည့်ပုံစံ
- Attribution-ShareAlike 4.0
- Attribution 4.0
- Attribution-ShareAlike 3.0
- Attribution 3.0
+ Attribution-ShareAlike 4.0
+ Attribution 4.0
+ Attribution-ShareAlike 3.0
+ Attribution 3.0
CC0
CC BY-SA 3.0
CC BY 3.0
@@ -157,12 +155,11 @@
ကိုဩဒိနိတ်
မဖြည့်ထားပါ
အမှန်တကယ် ထွက်သွားလိုပါသလား
- မီဒီယာရုပ်ပုံ မအောင်မြင်ပါ
ကဏ္ဍခွဲများ မတွေ့ရှိပါ
ပင်မကဏ္ဍများ မတွေ့ရှိပါ
ခတ္တာပန်း
- ဝီကီပီးဒီးယားမှ ကြိုဆိုပါသည်။
- မူပိုင်ခွင့်မှ ကြိုဆိုပါသည်
+ ဝီကီပီးဒီးယားမှ ကြိုဆိုပါသည်။
+ မူပိုင်ခွင့်မှ ကြိုဆိုပါသည်
မလုပ်တော့ပါ
ဖွင့်ရန်
ပိတ်ရန်
@@ -258,11 +255,10 @@
ဖျက်ရန်
အောင်မြင်မှုပန်းတိုင်များ
ပရိုဖိုင်
- စာရင်းအင်း
ကျေးဇူးစကား လက်ခံရရှိ
အထူးဓာတ်ပုံများ
\"အနီးအနားနေရာများ\" မှတဆင့် ရုပ်ပုံများ
- အဆင့်
+ အဆင့် %1$d
ရုပ်ပုံများ အက်ပလုတ်တင်ပြီးပြီ
သင်၏အောင်မြင်မှုများကို မိတ်ဆွေများနှင့် မျှဝေလိုက်ပါ
အနည်းဆုံး လိုအပ်ချက်:
@@ -302,9 +298,9 @@
ကဏ္ဍစစ်ဆေးမှု တောင်းဆိုနေသည်
ကဏ္ဍစစ်ဆေးမှု တောင်းဆိုခဲ့သည်
ပြီးပြီ
- ကျေးဇူးတင်စကားပို့ခြင်း- အောင်မြင်သည်
- ကျေးဇူးတင်စကားပို့ခြင်း- မအောင်မြင်ပါ
- %1$s အတွက် ကျေးဇူးတင်မှု ပို့နေသည်
+ ကျေးဇူးတင်စကားပို့ခြင်း- အောင်မြင်သည်
+ ကျေးဇူးတင်စကားပို့ခြင်း- မအောင်မြင်ပါ
+ %1$s အတွက် ကျေးဇူးတင်မှု ပို့နေသည်
မှန်ကန်စွာ ကဏ္ဍခွဲထားပါသလား
ပံ့ပိုးသူအား ကျေးဇူးတင်လိုပါသလား
ဤရုပ်ပုံသည် %1$s ကဏ္ဍများအောက်တွင်ရှိသည်။
@@ -318,7 +314,7 @@
ကျေးဇူးပြု၍ ခဏစောင့်ပါ...
နမူနာရုပ်ပုံများ အက်ပလုပ်တင်ရန် မဟုတ်ပါ
ဤရုပ်ပုံအား ကျော်သွားမည်
- ဒေါင်းလုဒ် မအောင်မြင်ပါ။ ပြင်ပသိုလှောင်မှုခွင့်ပြုချက်မရှိဘဲ ဖိုင်ဒေါင်းလုဒ်မဆွဲနိုင်ပါ။
+ ဒေါင်းလုဒ် မအောင်မြင်ပါ။ ပြင်ပသိုလှောင်မှုခွင့်ပြုချက်မရှိဘဲ ဖိုင်ဒေါင်းလုဒ်မဆွဲနိုင်ပါ။
ဖန်တီးသူ
မူပိုင်ခွင့်
တည်နေရာ
@@ -346,7 +342,7 @@
ကိုဩဒိနိတ် မွမ်းမံ
အောင်မြင်
ဖော်ပြချက်များ ပေါင်းထည့်ခဲ့သည်။
- %s သည် မည့်သည့်ပံ့ပိုးမှုမျှ မရှိသေးပါ
+ %1$s သည် မည့်သည့်ပံ့ပိုးမှုမျှ မရှိသေးပါ
အကောင့်ဖန်တီးပြီးပါပြီ
အသိပေးချက်ကို ဖတ်ပြီးကြောင်းမှတ်သားပြီးပြီ
အမှားအယွင်းအချို့ရှိခဲ့သည်
@@ -395,8 +391,8 @@
ဤရုပ်ပုံအား ကွန်မွန်းစ်သို့ အက်ပလုဒ်တင်ပြီးသားဖြစ်ပါသည်။
ပိုမိုလေ့လာရန်
ခွင့်ပြုချက် လိုအပ်
- အသုံးပြုသူ၏ ပံ့ပိုးမှုများ- %s
- အသုံးပြုသူ၏ အောင်မြင်မှုများ- %s
+ အသုံးပြုသူ၏ ပံ့ပိုးမှုများ- %1$s
+ အသုံးပြုသူ၏ အောင်မြင်မှုများ- %1$s
အသုံးပြုသူ၏ စာမျက်နှာကို ကြည့်ရန်
ကဏ္ဍများ တည်းဖြတ်ရန်
အဆင့်မြင့်ရွေးချယ်ရန်များ
diff --git a/app/src/main/res/values-nb/strings.xml b/app/src/main/res/values-nb/strings.xml
index 81fb7030b..32fb7554a 100644
--- a/app/src/main/res/values-nb/strings.xml
+++ b/app/src/main/res/values-nb/strings.xml
@@ -15,7 +15,7 @@
-->
Commons\' Facebook-side
- Commons\' kildekode på GitHub
+ Commons\' kildekode på GitHub
Commons-logo
Commons-nettsted
Gå ut av stedsvelgeren
@@ -38,18 +38,14 @@
- %1$d fil lastes opp
- %1$d filer lastes opp
-
- - (%1$d)
- - (%1$d)
-
Starter opplastinger
- - Behandler %d opplasting
- - Behandler %d opplastinger
+ - Behandler %1$d opplasting
+ - Behandler %1$d opplastinger
- - %d opplasting
- - %d opplastinger
+ - %1$d opplasting
+ - %1$d opplastinger
- Dette bildet vil bli lisensiert under %1$s
@@ -92,7 +88,7 @@
Køede opplastinger (begrenset tilkoblingsmodus aktivert)
%1$s lastet opp!
Trykk for å vise din opplasting
- Laster opp fil: %s
+ Laster opp fil: %1$s
%1$s lastet opp
Avslutter opplasting av %1$s
Kunne ikke laste opp %1$s
@@ -138,6 +134,7 @@
Innstillinger
Registrer deg
Utvalgte bilder
+ Fremhevede bilder er bilder fra dyktige fotografer og illustratører som fellesskapet på Wikimedia Commons har utpekt som blant de bildene med høyest kvalitet på nettstedet.
Egendefinert velger
Kategori
Gjennomgang
@@ -159,10 +156,10 @@
Standardlisens
Bruk forrige tittel og beskrivelse
Tema
- Navngivelse-Del på samme vilkår 4.0
- Navngivelse 4.0
- Navngivelse-Del på samme vilkår 3.0
- Navngivelse 3.0
+ Navngivelse-Del på samme vilkår 4.0
+ Navngivelse 4.0
+ Navngivelse-Del på samme vilkår 3.0
+ Navngivelse 3.0
CC0
CC BY-SA 3.0
CC BY 3.0
@@ -223,15 +220,14 @@
Registrer deg på vår betakanal på Google Play og få tidlig tilgang til nye funksjoner og feilrettinger
2FA-kode
Ønsker du virkelig å logge ut?
- Mediebilde feilet
Ingen underkategorier funnet
Ingen overordnede kategorier funnet
Zao
Lamaer
Regnbuebrua
Tulipan
- Velkommen til Wikipedia
- Velkommen opphavsrett
+ Velkommen til Wikipedia
+ Velkommen opphavsrett
Operahuset i Sydney
Avbryt
Åpne
@@ -362,11 +358,10 @@
Slett
Prestasjoner
Profil
- Statistikk
Takk mottatt
Utvalgte bilder
Bilder via «steder i nærheten»
- Nivå
+ Nivå %1$d
Opplastede bilder
Bilder som ikke har blitt tilbakestilt
Bilder brukt
@@ -448,11 +443,11 @@
Kunne ikke be om kategorisjekk for %1$s
Ber om kategorisjekk for %1$s
Gjort
- Sender takk: Ferdig
- Sendte takk til %1$s
- Kunne ikke sende takk %1$s
- Sender takk: Mislyktes
- Sender takk for %1$s
+ Sender takk: Ferdig
+ Sendte takk til %1$s
+ Kunne ikke sende takk %1$s
+ Sender takk: Mislyktes
+ Sender takk for %1$s
Følger dette opphavsrettsreglene?
Er dette riktig kategorisert?
Er dette relevant?
@@ -478,15 +473,14 @@
Vis uleste
Feil under utvalg av bilder
Vennligst vent…
- Fremhevede bilder er bilder fra dyktige fotografer og illustratører som fellesskapet på Wikimedia Commons har utpekt som blant de bildene med høyest kvalitet på nettstedet.
Bilder lastet opp via steder i nærheten er bilder som lastes opp ved å oppdage steder på kartet.
Denne funksjonen lar brukere sende takk til brukere som gjør nyttige endringer – ved å bruke en liten takkelenke på historikksider eller diffsider.
- Kopier til påfølgende media
+ Kopier til påfølgende media
Kopiert
Eksempler på gode bilder å laste opp til Commons
Eksempler på bilder som ikke bør lastes opp
Hopp over dette bildet
- Nedlasting feilet! Vi kan ikke laste ned fila uten lagringstillatelse.
+ Nedlasting feilet! Vi kan ikke laste ned fila uten lagringstillatelse.
Behandle EXIF-tagger
Velg hvilke EXIF-tagger som skal beholdes under opplatsing
Opphavsperson
@@ -538,7 +532,7 @@
Rediger beskrivelser og bildetekster
Del bilde via
Du har ikke gjort noen bidrag ennå
- %s har ikke gjort noen bidrag ennå
+ %1$s har ikke gjort noen bidrag ennå
Konto opprettet!
Tekst kopiert til utklippstavlen
Varsel merket som lest
@@ -547,7 +541,7 @@
Eksisterer
Trenger bilde
Stedstype:
- Bro, museum, hotell, etc.
+ Bro, museum, hotell, etc.
Noe gikk galt under innloggingen, du må tilbakestille passordet ditt!
MEDIA
UNDERKLASSER
@@ -618,8 +612,9 @@
Det er Wiki Loves Monuments-måneden!
LÆR MER
Trenger tillatelse
- Bidrag til bruker: %s
- Prestasjoner til bruker: %s
+ Valgfri tillatelse: Hent nåværende posisjon for kategoriforslag
+ Bidrag til bruker: %1$s
+ Prestasjoner til bruker: %1$s
Vis brukerside
Rediger avbildninger
Rediger kategorier
@@ -628,7 +623,7 @@
Bruk
Nullstill
Ingen plassering funnet
- Legg til plassering
+ Legg til plassering
Detaljer
API-nivå
Android-versjon
diff --git a/app/src/main/res/values-ne/strings.xml b/app/src/main/res/values-ne/strings.xml
index ef94ba081..df412cccd 100644
--- a/app/src/main/res/values-ne/strings.xml
+++ b/app/src/main/res/values-ne/strings.xml
@@ -12,15 +12,46 @@
-->
कमन्सकाे फेसबुक पृष्ठ
- कमन्सकाे Github स्रोत कोड
+ कमन्सकाे Github स्रोत कोड
कमन्सकाे लाेगाे
कमन्सकाे वेबसाइट
+ स्थान चयनकर्ताबाट बाहिर निस्कनुहोस्
बुझाउनुहोस्
+ अर्को विवरण थप्नुहोस्
+ नयाँ योगदान थप्नुहोस्
+ क्यामराबाट योगदान थप्नुहोस्
+ फोटोहरूबाट योगदान थप्नुहोस्
+ अघिल्लो योगदान ग्यालरीबाट योगदान थप्नुहोस्
+ शीर्षकहरू
+ भाषा विवरण
+ शीर्षक
विवरण
चित्र
सबै
+ दृश्य खोज्नुहोस्
+ स्थानको अवस्था
दिनकाे उत्कृष्ट तस्वीर
- यी तस्वीरहरू %1$s अनुमतिपत्र अनुसार प्राप्त हुनेछ
+
+ - %1$d फाइल अपलोड हुँदैछ
+ - %1$d फाइलहरू अपलोड हुँदैछ
+
+ अपलोडहरू सुरु गर्दै
+
+ - %1$d अपलोड प्रशोधन गर्दै
+ - %1$d अपलोडहरू प्रशोधन गर्दै
+
+
+ - %1$d अपलोड
+ - %1$d अपलोडहरू
+
+
+ - यो तस्वीर %1$s अन्तर्गत इजाजतपत्र प्राप्त हुनेछ
+ - यी तस्वीरहरू %1$s अन्तर्गत इजाजतपत्र प्राप्त हुनेछन्।
+
+
+ - %1$d अपलोड
+ - %1$d अपलोडहरू
+
अन्वेषण
स्वरूप
सामान्य
@@ -29,6 +60,7 @@
कमन्स
मेरो अभिरुचिहरू
कमन्समा उर्ध्वभरण गर्नुहाेस्
+ अर्ध्वभरण कार्य हुँदैछ
प्रयोगकर्ता नाम
पासवर्ड
तपाईको कमन्स बिटा खातामा प्रवेश गर्नुहोस्
@@ -37,18 +69,21 @@
खाता खाेल्नुहाेस्
प्रवेश गर्दै
कृपया प्रतीक्षा गर्नुहोस् …
+ शीर्षक र विवरणहरू अद्यावधिक गर्दै
कृपया प्रतीक्षा गर्नुहोस् …
- प्रवेश सफल!
- प्रवेश सफल हुन सकेन!
+ प्रवेश सफल!
+ प्रवेश सफल हुन सकेन!
चित्र भेटिएन। कृपया अर्को चित्र प्रयास गर्नुहोस्।
- प्रमाणिकरण असफल भयो, कृपया पुनः प्रवेश गर्नुहोस्!
+ पुन: प्रयास गर्ने अधिकतम सीमा पुग्यो! कृपया अपलोड रद्द गर्नुहोस् र फेरि प्रयास गर्नुहोस्।
+ ब्याट्री अप्टिमाइजेसन बन्द गर्ने?
+ प्रमाणिकरण असफल भयो। कृपया पुनः प्रवेश गर्नुहोस्!
उर्ध्वभरण सुरू भयो!
%1$s उर्ध्वभरण गरियो !
तपाईको उर्ध्वभरण हेर्नको लागि ट्याप गर्नुहोस्
- %1$s उर्ध्वभरण सुरू गर्दैै
+ %1$s: उर्ध्वभरण सुरू गर्दैै
%1$s उर्ध्वभरण गरिँदै
%1$s उर्ध्वभरण सकाउँदै
- %1$s उर्ध्वभरण असफल भयो
+ %1$s उर्ध्वभरण असफल भयो
हेर्नको लागि ट्याप गर्नुहोस्
हेर्नको लागि ट्याप गर्नुहोस्
मेरा वर्तमानका उर्ध्वभरणहरू
@@ -62,13 +97,13 @@
मेरा उर्ध्वभरणहरू
बाड्ने
चित्र पृष्ठ हेर्नुहोस्
- शीर्षक (आवश्यक)
+ शीर्षक (आवश्यक)
वर्णन
- प्रवेश गर्न असमर्थ - जडान खराबी
+ प्रवेश गर्न असमर्थ - जडान खराबी
धेरै असफल प्रयासहरू भए। कृपया केही मिनेट पछि पुन: प्रयास गर्नुहोस
माफ गर्नुहोस, यो प्रयोगकर्तालाई कमन्समा प्रतिबन्ध गरिएको छ
तपाईंले आफ्नो दुई कारक प्रमाणीकरण अङ्क प्रदान गर्नुपर्नेछ।
- प्रवेश सफल हुन सकेन
+ प्रवेश सफल हुन सकेन
उर्ध्वभरण गर्ने
यो सेटलाई नाम दिनुहोस्
परिवर्तनहरू
@@ -87,7 +122,7 @@
श्रेणी
बारेमा
विकिमिडिया कमन्स अनुप्रयाेग एक स्वतन्त्र स्रोत अनुप्रयाेग हो। यो अनुप्रयाेग विकिमिडिया समुदायका अनुदानप्राप्तकर्ताहरू र स्वयंसेवकहरूद्वारा निर्मित एवम् प्रबन्धित छ। विकिमिडिया फाउण्डेसन यस अनुप्रयाेगकाे निर्माण, विकास र प्रबन्धनमा कुनै पनि प्रकारले संलग्न छैन।
- <a href=\"https://github.com/commons-app/apps-android-commons\">गिटहब</a> मा स्रोत। <a href=\" https://github.com/commons-app/apps-android-commons/issues\">बगजिल्ला</a> मा बग छ।
+ बग प्रतिवेदन र सुझावहरूको लागि नयाँ <a href=\"<span class=\"notranslate\" translate=\"no\">%1$s \">गिटहब समस्या</a> सिर्जना गर्नुहोस्।
गोपनीयता नीति
श्रेयहरू
बारेमा
@@ -102,10 +137,10 @@
पूर्वनिर्धारित अनुमति पत्र
अघिल्लो शीर्षक र वर्णनकाे प्रयोग गर्नुहोस्
थिम
- एट्रिब्युसन- सेयरअलाइक ४.०
- एट्रिब्युसन ४.०
- एट्रिब्युसन- सेयरअलाइक ३.०
- एट्रिब्युसन ३.०
+ एट्रिब्युसन- सेयरअलाइक ४.०
+ एट्रिब्युसन ४.०
+ एट्रिब्युसन- सेयरअलाइक ३.०
+ एट्रिब्युसन ३.०
CC०
CC BY-SA ३.०
CC BY-SA ३.०
@@ -154,7 +189,7 @@
के तपाईं निर्गमन गर्न चाहानुहुन्छ?
कुनैपनि उपश्रेणीहरू फेला परेनन्
कुनैपनि अभिभावक श्रेणीहरू फेला परेन
- विकिपिडियामा स्वागत छ
+ विकिपिडियामा स्वागत छ
सिड्नीकाे ओपेरा हाउस
रद्द गर्नुहोस्
खोल्नुहोस्
@@ -181,7 +216,10 @@
कमन्स
मूल्याङ्कन गर्नुहाेस्
प्राय सोधिएका प्रश्नहरू
+ प्रयोगकर्ता निर्देशिका
इन्टरनेट उपलब्ध छैन
+ सूचनाहरू प्राप्त गर्दा त्रुटि भयो
+ समीक्षाको लागि छवि प्राप्त गर्दा त्रुटि भयो। फेरि प्रयास गर्न रिफ्रेस थिच्नुहोस्।
कुनै सूचनाहरू फेला परेन
अनुवाद
भाषाहरू
@@ -189,6 +227,9 @@
अगाडि बढ्नुहोस्
रद्द गर्नुहोस्
पुनः प्रयास गर्नुहोस्
+ यो ठाउँको फोटो चाहिन्छ।
+ यो ठाउँको फोटो पहिले नै छ।
+ यो ठाउँ अब अवस्थित छैन।
कुनैपनि तस्वीर फेला परेन
निषेधित
तपाईलाई कमन्स सम्पादन गर्नबाट प्रतिबन्ध गरिएको छ
@@ -214,16 +255,15 @@
मेटाउनका लागि नामाङ्कित
मेटाउनुहाेस्
उपलब्धिहरू
- तथ्याङ्कहरू
धन्यवाद प्राप्त भयाे
विशेष तस्वीरहरू
- स्तर
+ स्तर %1$d
प्रयाेग भएका तस्वीरहरू
कमन्स सूचना
योगदानहरू
नजिकैको
सूचनाहरू
- सूचनाहरू (अभिलेख)
+ सूचनाहरू (अभिलेखित)
सूची
भण्डारण अनुमति
अर्को
@@ -254,7 +294,7 @@
लोगो
सफल
सफल
- तपाईले हालसम्म कुनैपनि सम्पादन गर्नु भएकाे छैन
+ तपाईले हालसम्म कुनैपनि सम्पादन गर्नु भएकाे छैन %1$s
खाता सृजना गरियो!
नजिकैको स्थान भेटियो
पुस्तक चिनोहरू
@@ -262,7 +302,7 @@
पुस्तक चिनाेमा थपियाे
भित्तेपत्रकाे रूपमा चयन गर्नुहोस्
वालपेपर सेट गर्दै। कृपया प्रतीक्षा गर्नुहोस् …
- पुनर्निर्धारित
+ प्रणाली पछ्याउनुहोस्
गाढा
हल्का
पुस्तक चिनोहरू
@@ -275,11 +315,12 @@
विवरण
वस्तुहरू
सम्पन्न भयो
-
+
थप जान्नुहोस्
विकी लभ्स मोनुमेन्टस्
अनुमति आवश्यक
- प्रयोगकर्ता पृष्ठ हेर्नुहोस्
+ वैकल्पिक अनुमति: श्रेणी सुझावहरूको लागि हालको स्थान प्राप्त गर्नुहोस्
+ प्रयोगकर्ता पृष्ठ हेर्नुहोस्
सम्पादन श्रेणीहरू
उन्नत विकल्प
तपाईँले निकटता क्वेरी अनुकूलन गर्न सक्नुहुन्छ। त्रुटी भएमा पूर्ववत् गर्नुभएर लागू गर्नुहोस्।
@@ -288,7 +329,7 @@
कुनै पनि स्थान फेला परेन ।
तस्विर खिचिएको स्थान थप्ने हो?\nस्थानको डेटाले विकी सम्पादकहरूलाई तस्विर भेटाउन मद्दत गर्छ र यसलाई धेरै उपयोगी गराउँछ।\nधन्यवाद!
- स्थान थप्नुहोस्
+ स्थान थप्नुहोस्
विवरणहरू
कृपया आफैँले खिच्नुभएको तस्विर मात्र अपलोड गर्नुहोस्। प्रतिलिपि अधिकार हनन् गर्ने अपलोडकर्तालाई रोकगाइने छ। यो बिटाएपमा पनि लागू हुन्छ। एप परीक्षण गर्नुभएकोमा धन्यवाद!
एन्ड्रोइड संस्करण
@@ -306,7 +347,7 @@
यस प्रयोगकर्तालाई रोक लगाउन अनुरोध गर्नुहोस्
तस्विर सम्पादन गर्नुहोस्
स्थान सम्पादन गर्नुहोस्
- स्थान अपडेट गरियो!
+ स्थान अद्यावधिक गरियो!
यो स्थान हटाउनुहोस्
स्थान चेतावनी हटाउनुहोस्
स्थान हटाइयो!
diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml
index e2c3b5b9e..24c8e2cbf 100644
--- a/app/src/main/res/values-nl/strings.xml
+++ b/app/src/main/res/values-nl/strings.xml
@@ -52,14 +52,10 @@
- %1$d bestand aan het uploaden
- %1$d bestanden aan het uploaden
-
- - (%1$d)
- - (%1$d)
-
Uploaden starten
- - %d upload verwerken
- - %d uploads verwerken
+ - %1$d upload verwerken
+ - %1$d uploads verwerken
- %1$d upload
@@ -107,7 +103,7 @@
Upload in wachtrij (beperkte verbindingsmodus ingeschakeld)
%1$s geüpload
Tik om uw upload te bekijken
- Bestand wordt geüpload: %s
+ Bestand wordt geüpload: %1$s
%1$s aan het uploaden
Het uploaden van %1$s wordt afgerond
Fout bij uploaden %1$s
@@ -157,6 +153,7 @@
Instellingen
Registreren
Uitgelichte afbeeldingen
+ Uitgelichte afbeeldingen zijn bijdragen van zeer bekwame fotografen en illustratoren die door de Wikimedia Commons-gemeenschap zijn gekozen als enkele van de beste op de site.
Aangepaste kiezer
Categorie
Onderlinge toetsing
@@ -173,14 +170,17 @@
U hebt nog geen afbeeldingen geüpload.
Opnieuw proberen
Annuleren
+ Typ taalnaam
+ Recente zoekopdrachten
+ Alle talen
Door deze foto te delen, verklaar ik dat dit mijn eigen werk is, dat het geen auteursrechtelijk beschermd materiaal of selfies bevat en dat het verder voldoet aan het <a href=\"https://commons.wikimedia.org/wiki/Commons:Policies_and_guidelines\">Wikimedia Commons-beleid</a>.
Downloaden
Standaardlicentie
Vorige titel/omschrijving gebruiken
Thema
- Naamsvermelding-GelijkDelen 4.0
+ Naamsvermelding-GelijkDelen 4.0
Naamsvermelding 4.0
- Naamsvermelding-GelijkDelen 3.0
+ Naamsvermelding-GelijkDelen 3.0
Naamsvermelding 3.0
CC0
CC BY-SA 3.0
@@ -234,24 +234,24 @@
Beschrijving
Overleg
Auteur
+ Uploader
Uploaddatum
Licentie
Coördinaten
Niet opgegeven
Word bètatester
Meld u aan voor ons bètakanaal op Google Play en krijg vroegtijdig toegang tot nieuwe functies en bugfixes
- 2FA-code
+ Tweetrapsauthenticatie-code
E-mailverificatiecode
Wilt u zich echt afmelden?
- Media-afbeelding is mislukt
Geen subcategorieën gevonden
Geen bovenliggende categorieën gevonden
Mount Zao
Lama\'s
Rainbow Bridge
Tulp
- Welkom op Wikipedia
- Welkom Auteursrecht
+ Een schematische afbeelding van een doorsnee Wikipedia-artikel.
+ Tekening van een stapel papier met het auteursrechten-symbool doorgestreept.
Sydney Opera House
Annuleren
Openen
@@ -284,6 +284,7 @@
Het uploadproces vereist een actieve internettoegang. Controleer uw netwerkverbinding.
Problemen gevonden in afbeelding
Upload alleen foto\'s die je zelf hebt genomen. Upload geen foto\'s die je van internet hebt gedownload.
+ Uploads
In-app opnamen opslaan
Foto\'s die met de in-app-camera zijn gemaakt, opslaan in de opslag van uw apparaat
Aanmelden bij uw account
@@ -355,6 +356,7 @@
Vragenspel
Is deze afbeelding geschikt om te uploaden?
Vraag
+ Ik weet het niet zeker
Uitslag
Als u doorgaat met het uploaden van afbeeldingen die moeten worden verwijderd, wordt uw account waarschijnlijk geblokkeerd. Weet u zeker dat u de quiz wilt beëindigen?
Meer dan %1$s van de afbeeldingen die u heeft geüpload, zijn verwijderd. Als u doorgaat met het uploaden van afbeeldingen die moeten worden verwijderd, wordt uw account waarschijnlijk geblokkeerd.\n\nWilt u de tutorial opnieuw bekijken en vervolgens een quiz doen om u te helpen te leren welk type afbeeldingen u wel of niet moet uploaden?
@@ -364,6 +366,7 @@
Een van de doelen van Commons is het verzamelen van kwaliteitsafbeeldingen. Daarom mogen onscherpe afbeeldingen niet worden geüpload. Probeer altijd mooie foto\'s te maken met goede belichting.
Foto\'s met technologie of cultuur zijn van harte welkom op Commons.
U heeft %1$s van de antwoorden goed. Gefeliciteerd!
+ Doorgaan
Selecteer een van de twee opties om de vraag te beantwoorden
De aanmelding is verlopen. Meld u opnieuw aan.
Deel de quiz met uw vrienden!
@@ -387,13 +390,11 @@
Prestaties
Profiel
Badges
- Statistieken
Ontvangen bedankjes
Uitgelichte afbeeldingen
Afbeeldingen via \"Plaatsen in de buurt\"
- Niveau %d
- %s (Niveau %s)
- %s (%s)
+ Niveau %1$d
+ %1$s (Niveau %2$s)
Geüploade afbeeldingen
Afbeeldingen niet teruggedraaid
Gebruikte afbeeldingen
@@ -453,11 +454,13 @@
Niet meer vragen
Toestemming voor locatie vragen
Naar toestemming voor locatie vragen als dat nodig is voor de functie meldingskaart dichtbij weergeven.
- Er is iets misgegaan, we konden de prestaties niet ophalen
+ Er is iets misgegaan waardoor de prestaties niet konden worden opgevraagd
U heeft zoveel bijdragen geleverd dat ons prestatieberekeningssysteem het niet aankan. Dit is de ultieme prestatie.
Eindigt op:
Campagnes weergeven
Bekijk de lopende campagnes
+ Verwijderknop weergeven
+ De knop “Map verwijderen” in de aangepaste kiezer activeren
Toestaan dat de app de locatie ophaalt voor het geval de camera deze niet registreert. Sommige apparaatcamera\'s doen dat namelijk niet. In dergelijke gevallen wordt uw bijdrage nuttiger als u de app de locatie laat ophalen en aan uw foto\'s laat koppelen. U kunt dit op elk gewenst moment wijzigen via de Instellingen.
Toestaan
Afwijzen
@@ -481,11 +484,11 @@
Kan categoriecontrole niet aanvragen voor %1$s
Categoriecontrole aanvragen voor %1$s
Afgerond
- Bedanken: gelukt
- Bedankje succesvol verzonden naar %1$s
+ Bedankje sturen: gelukt
+ Bedankje verzonden naar %1$s
Verzending bedankje naar %1$s is mislukt
- Verzending bedankje is mislukt
- Verstuur een bedankje voor %1$s
+ Bedankje sturen: mislukt
+ Bedankje voor %1$s wordt verstuurd
Voldoet dit aan de regels van het auteursrecht?
Is dit correct gecategoriseerd?
Past dit bij de doelstelling van het project?
@@ -512,15 +515,14 @@
Ongelezen bekijken
Er is een fout opgetreden bij het kiezen van afbeeldingen
Een ogenblik geduld…
- Uitgelichte afbeeldingen zijn afbeeldingen van zeer bekwame fotografen en illustratoren op de site die door de Wikimedia Commons-gemeenschap zijn gekozen als de hoogste kwaliteit.
Afbeeldingen die zijn geüpload via Plaatsen in de Buurt zijn de afbeeldingen die worden geüpload door plaatsen op de kaart te ontdekken.
Met deze functie kunnen gebruikers een bedankbericht sturen naar andere gebruikers die nuttige bewerkingen uitvoeren, door een kleine bedanklink op de geschiedenispagina of diff-pagina.
- Kopiëren naar volgende media
+ Kopiëren naar de volgende onderdelen
Gekopieerd
Voorbeelden van goede afbeeldingen om te uploaden naar Commons
Voorbeelden van afbeeldingen die niet mogen worden geüpload
Sla deze afbeelding over
- Download mislukt!! We kunnen het bestand niet downloaden zonder toestemming voor externe opslag.
+ Download mislukt. Zonder toestemming voor externe opslag kan het bestand niet worden gedownload.
EXIF-tags beheren
Selecteer welke EXIF-tags in uploads moeten worden behouden
Auteur
@@ -530,11 +532,10 @@
Lensmodel
Serienummers
Software
- Toegang tot medialocatie geweigerd
- Het is mogelijk dat we niet automatisch locatiegegevens kunnen verkrijgen van foto\'s die u uploadt. Voeg de locatie bij elke foto toe voordat u die upload
Upload foto\'s rechtstreeks vanaf uw telefoon naar Wikimedia Commons. Download de Commons-app nu: %1$s
App delen via...
Afbeeldingsinfo
+ Dit bericht niet meer weergeven
Geen categorieën gevonden
Geen beschrijvingen gevonden
Uploaden geannuleerd
@@ -587,7 +588,7 @@
Bewerk beschrijvingen en bijschriften.
Deel afbeelding via
U heeft nog geen bijdragen geleverd
- %s heeft nog geen bijdragen gedaan
+ %1$s heeft nog geen bijdragen gedaan
Account aangemaakt!
De tekst is gekopieerd naar het klembord.
Melding gemarkeerd als gelezen
@@ -601,6 +602,8 @@
MEDIA
SUBKLASSEN
HOOFDKLASSEN
+ SUBCATEGORIEËN
+ BOVENLIGGENDE CATEGORIEËN
Plaats in de buurt gevonden
Zijn dit afbeeldingen van %1$s?
Is dit een afbeelding van %1$s?
@@ -638,7 +641,7 @@
5. Plak de wikitekst op de juiste plaats.
6. Bewerk indien nodig de wikitekst voor de juiste positionering. Zie <a href=\"https://en.wikipedia.org/wiki/Wikipedia:Manual_of_Style/Images#How_to_place_an_image\">hier</a> voor meer informatie.
7. Publiceer het artikel
- Kopieer wikicode naar klembord
+ Wikitekst naar klembord kopiëren
pauzeren
hervatten
Gepauzeerd
@@ -679,6 +682,8 @@
Selecteer de juiste categorieën. In tegenstelling tot afbeeldingen zijn categorieën alleen in het Engels.
Commons maakt uw foto\'s herbruikbaar en bewerkbaar voor iedereen. Wilt u afstand doen van deze rechten? Wilt u een naamsvermelding? Wilt u dat bewerkte versies dezelfde licentie gebruiken?
Beeldt af
+ Label
+ Beschrijving
Medialicentie
Mediadetails
Categoriepagina bekijken
@@ -705,7 +710,7 @@
Terug
Welkom bij de Aangepaste Afbeelding Kiezer
Deze kiezer laat zien welke foto\'s u al naar Commons hebt geüpload.
- In tegenstelling tot de afbeelding aan de linkerkant, heeft de afbeelding aan de rechterkant het Commons-logo om aan te geven dat deze al is geüpload.\n Aanraken en vasthouden voor afbeeldingsvoorbeeld.
+ In tegenstelling tot de afbeelding links staat bij de afbeelding rechts het Commons-logo, wat aangeeft dat deze al is geüpload.\n\nHoud ingedrukt voor een voorvertoning van de afbeelding.
Geweldig
Deze afbeelding is al geüpload op Wikimedia Commons.
Om technische redenen kan de app niet op betrouwbare wijze meer dan %1$d foto’s tegelijk uploaden. De uploadlimiet van %1$d is met %2$d overschreden.
@@ -721,8 +726,10 @@
Wiki Loves Monuments is een internationale fotowedstrijd voor monumenten georganiseerd door Wikimedia
Toestemming Nodig
Kaarten in de buurt moeten TELEFOONSTATUS lezen om goed te kunnen werken
- Bijdragen door Gebruiker: %s
- Prestaties van Gebruiker: %s
+ Schakel locatievoorzieningen in om plaatsen in de buurt te bekijken.
+ Optionele toestemming: Huidige locatie ophalen voor categoriesuggesties
+ Bijdragen door Gebruiker: %1$s
+ Prestaties van Gebruiker: %1$s
Gebruikersprofiel bekijken
Wijzig items
Categorieën bewerken
@@ -754,8 +761,8 @@
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 weergeven
- Reeds behandelde afbeeldingen verbergen
+ Reeds afgehandelde afbeeldingen weergeven
+ Reeds afgehandelde afbeeldingen verbergen
Geen afbeeldingen meer gevonden
Deze afbeelding is al geüpload
Kan deze afbeelding niet selecteren om te uploaden
@@ -778,7 +785,7 @@
Voor deze functionaliteit zijn toestemmingen vereist
Leer hoe u een nuttige beschrijving schrijft
Leer hoe u een nuttig bijschrift schrijft
- Bekijk uw prestaties
+ Bekijk uw prestaties
Afbeelding Bewerken
Locatie bewerken
Locatie bijgewerkt!
@@ -795,11 +802,11 @@
Wilt u het KML-bestand openen?
Het KML-bestand kon niet opgeslagen worden.
Het GPX-bestand kon niet opgeslagen worden.
- Het KML-bestand wordt opgeslagen
- Het GPX-bestand wordt opgeslagen
+ Wordt als KML-bestand opgeslagen…
+ Wordt als GPX-bestand opgeslagen…
- - %d afbeelding geselecteerd
- - %d afbeeldingen geselecteerd
+ - %1$d afbeelding geselecteerd
+ - %1$d afbeeldingen geselecteerd
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
@@ -835,7 +842,6 @@
Commons
Andere wiki’s
Bestandsgebruik
- Activiteit enkele webraadpleging
Account
Account laten verdwijnen
Waarschuwing verwijdering account
diff --git a/app/src/main/res/values-nqo/strings.xml b/app/src/main/res/values-nqo/strings.xml
index 99923ca5f..b57642fd9 100644
--- a/app/src/main/res/values-nqo/strings.xml
+++ b/app/src/main/res/values-nqo/strings.xml
@@ -7,7 +7,7 @@
-->
ߞߐߡߐ߲ ߝߋߛߑߓߎߞ ߞߐߜߍ
- ߞߐߡߐ߲ߛ Github ߘߏߝߙߍߕߍ ߓߐߛߎ߲
+ ߞߐߡߐ߲ߛ Github ߘߏߝߙߍߕߍ ߓߐߛߎ߲
ߞߐߡߐ߲ ߛߌ߲ߞߐ߲
ߞߐߡߐ߲ ߞߍߦߙߐ
ߓߐ߫ ߘߌ߲߬ߞߌߙߊ ߛߎߥߊ߲ߘߌߟߊ߲ ߘߐ߫
@@ -27,11 +27,6 @@
ߢߌߣߌ߲ߠߌ߲ ߦߌ߬ߘߊ
ߦߙߐ ߛߎ߯ߦߊ:
ߟߏ߲ ߖߌ߬ߦߊ߬ߓߍ
-
- - \@string/contributions_subtitle_zero
- - (%1$d)
- - (%1$d)
-
ߟߊ߬ߦߟߍ߬ߟߌ ߓߘߊ߫ ߘߊߡߌ߬ߣߊ߫
- ߞߋߟߋ߲߫ %1$d ߟߊߦߟߍ߬
@@ -61,7 +56,7 @@
ߟߊ߬ߦߟߍ߬ߟߌ ߓߘߊ߫ ߘߊߡߌ߬ߣߊ߬߹
%1$s ߟߊ߬ߦߟߍ߬ߟߌ
ߊ߬ ߛߐ߲߬ߞߌ߲߫ ߞߴߌ ߟߊ߫ ߟߊ߬ߦߟߍ߬ߣߍ߲ ߠߎ߬ ߘߐߜߍ߫
- %1$s ߟߊ߬ߦߟߍ ߦߴߌ ߘߐ߫
+ %1$s ߟߊ߬ߦߟߍ ߦߴߌ ߘߐ߫
%1$s ߟߊ߬ߦߟߍ߬ߟߌ ߦߋ߫ ߛߋ߲߬ߠߊ߫
%1$s ߟߊ߬ߦߟߍ߬ߟߌ ߞߎ߲߬ߘߏ߲߬ߠߌ߲ ߦߴߌ ߘߐ߫
%1$s ߟߊ߬ߦߟߍ߬ߟߌ ߓߘߊ߫ ߗߌߙߏ߲߫
@@ -124,8 +119,8 @@
ߕߦߊ ߓߐߛߎ߲
ߢߍߦߋߟߌ ߞߎ߲߬ߕߐ߮ ߟߊߓߊ߯ߙߊ߫ ߊ߬ ߣߌ߫ ߞߊ߲߬ߛߓߍ߬ߟߌ
ߞߍߗߏ߮
- ߘߍ߬ߡߍ߲߬ߘߌ߬ߟߌ ߄.߀
- ߘߍ߬ߡߍ߲߬ߘߌ߬ߟߌ ߃.߀
+ ߘߍ߬ߡߍ߲߬ߘߌ߬ߟߌ ߄.߀
+ ߘߍ߬ߡߍ߲߬ߘߌ߬ߟߌ ߃.߀
ߥߞߌߡߋߘߌߦߊ ߞߐߡߐ߲ߛ ߟߋ߬ ߦߋ߫ ߖߌ߬ߦߊ߬ߓߍ ߝߊ߲߬ߓߊ ߡߊߛߐ߫ ߟߊ߫ ߡߍ߲ ߠߎ߬ ߦߋ߫ ߟߊߓߞߊߙߊ߫ ߟߊ߫ ߥߞߌߔߋߘߌߦߊ ߟߊ߫.
ߌ ߟߊ߫ ߖߌ߬ߦߊ߬ߓߍ ߦߋ߫ ߡߐ߱ ߟߎ߬ ߘߍ߬ߡߍ߲߬ ߠߊ߫ ߞߊ߬ߙߊ߲ ߡߊ߬ ߘߎߢߊ߫ ߝߊ߲߭ ߓߍ߯߹
ߖߊ߰ߣߌ߲߫ ߌ ߦߋ߫ ߖߌ߬ߦߊ߬ߓߍ߫ ߟߎ߫ ߟߋ߬ ߟߊߦߟߍ߬ ߡߍ߲ ߠߎ߬ ߕߊ߬ߣߍ߲߫ ߥߟߊ߫ ߛߌ߲ߘߌߣߍ߲߫ ߦߴߌ ߖߍ߬ߘߍ ߓߟߏ߫:
@@ -179,15 +174,14 @@
ߌ ߕߐ߮ ߛߓߍ߫ ߊ߲ ߠߊ߫ ߓߋߕߊ ߥߏ߬ߦߏ ߟߊ߫ ߜ߭ߎߜ߭ߏߟ ߔߑߟߋߦ ߞߊ߲߬ ߞߊ߬ ߗߋߘߊ߫ ߞߎߘߊ ߟߎ߬ ߟߊߛߐ߬ߘߐ߲߫ ߊ߬ ߣߌ߫ ߞߐߕߐ߯ ߕߌߢߍߣߍ߲ ߠߎ߬
2FA Code
ߌ ߦߴߊ߬ ߝߍ߬ ߞߵߌ ߜߊ߲߬ߞߎ߲߬ߣߍ߲ ߓߐ߫ ߝߛߊߦߌ߫؟
- ߡߋߘߌߦߊ ߖߌ߬ߦߊ߬ߓߍ ߓߘߊ߫ ߗߌߙߏ߲߫
ߦߌߟߡߊߙߋ߲߫ ߕߴߦߋ߲߬
ߡߏߦߌߓߊ߯ ߦߌߟߡߊ ߟߎ߬ ߝߋ߲߫ ߡߊ߫ ߛߐ߬ߘߐ߲߫.
ߖ߭ߊߏ߫ ߞߎ߬ߙߎ
ߞߏ߲ߞߏߛߊ߱
ߞߟߐ߬ߟߐ ߞߣߍߦߊ
ߕߎߟߌߔ
- ߌ ߣߌ߫ ߛߣߍ߫ ߥߞߌߡߋߘߌߦߊ ߞߊ߲߬
- ߓߊߦߟߍߡߊ߲ ߤߊߞߍ ߣߌ߫ ߛߣߍ߫
+ ߌ ߣߌ߫ ߛߣߍ߫ ߥߞߌߡߋߘߌߦߊ ߞߊ߲߬
+ ߓߊߦߟߍߡߊ߲ ߤߊߞߍ ߣߌ߫ ߛߣߍ߫
ߛߌߘߑߣߋ߫ ߏߔߋߙߊ߫ ߓߏ߲
ߊ߬ ߘߐߛߊ߬
ߊ߬ ߟߊߞߊ߬
@@ -317,11 +311,11 @@
ߊ߬ ߖߏ߬ߛߌ߫
ߞߎ߲߬ߝߊ߰ߟߌ
ߢߊߞߙߍ
- ߖߊ߬ߕߋ߬ߛߎ߬ߓߐ ߟߎ߬
ߞߎߟߎ߲ߖߋߟߌ ߓߘߊ߫ ߟߊߛߐ߬ߘߐ߲߬
ߖߌ߬ߦߊ߬ߓߍ߫ ߟߊߓߊ߯ߙߕߊ ߟߎ߬
ߖߌ߬ߦߊ߬ߓߍ ߞߊߕߙߍ߬ \"ߛߌ߰ߢߐ߲߰ ߦߙߐ\" ߡߊ߬
- ߞߊߓߋ
+ ߞߊߓߋ %1$d
+ %1$s (ߞߊߓߋ %2$s)
ߖߌ߬ߦߊ߬ߓߍ ߓߘߊ߫ ߟߊߦߟߍ߬
ߖߌ߬ߦߊ߬ߓߍ ߡߊ߫ ߖߏ߰ߛߌ߬
ߖߌ߬ߦߊ߬ߓߍ߬ ߟߊߓߊ߯ߙߊߣߍ߲ ߠߎ߬
@@ -390,11 +384,11 @@
ߦߌߟߡߊ ߝߛߍ߬ߝߛߍ߬ߟߌ ߕߍ߫ ߛߐ߲߬ ߡߊߢߌ߬ߣߌ߲߬ߞߊ߬ ߟߊ߫ %1$s ߦߋ߫
ߦߌߟߡߊ ߝߛߍ߬ߝߛߍ߬ߟߌ ߡߊߢߌ߬ߣߌ߲߬ߞߊ߬ߣߍ߲߫ %1$s ߦߋ߫
ߊ߬ ߓߘߊ߫ ߞߍ߫
- ߞߎߟߎ߲ߖߋߟߌ ߗߋߟߌ: ߓߘߊ߫ ߛߎߘߊ߲߫
- ߞߎߟߎ߲ߖߋߟߌ ߗߋߟߌ ߓߘߊ߫ ߛߎߘߊ߲߫ %1$s ߡߊ߬.
- ߞߎߟߎ߲ߖߋߟߌ ߗߋߟߌ ߓߘߊ߫ ߛߎߘߊ߲߫ %1$s ߡߊ߬
- ߞߎߟߎ߲ߖߋߟߌ ߗߋߟߌ: ߓߘߊ߫ ߗߌߙߏ߲߫
- ߞߎߟߎ߲ߖߋߟߌ ߗߋߟߌ %1$s ߟߊ߫ ߞߏ߫ ߟߊ߫
+ ߞߎߟߎ߲ߖߋߟߌ ߗߋߟߌ: ߓߘߊ߫ ߛߎߘߊ߲߫
+ ߞߎߟߎ߲ߖߋߟߌ ߗߋߟߌ ߓߘߊ߫ ߛߎߘߊ߲߫ %1$s ߡߊ߬.
+ ߞߎߟߎ߲ߖߋߟߌ ߗߋߟߌ ߓߘߊ߫ ߛߎߘߊ߲߫ %1$s ߡߊ߬
+ ߞߎߟߎ߲ߖߋߟߌ ߗߋߟߌ: ߓߘߊ߫ ߗߌߙߏ߲߫
+ ߞߎߟߎ߲ߖߋߟߌ ߗߋߟߌ %1$s ߟߊ߫ ߞߏ߫ ߟߊ߫
ߊ߬ ߝߐ߫ ߣߌ߲߬ ߓߍ߲߬ߣߍ߲߫ ߦߋ߫ ߓߊߦߟߍߡߊ߲ߠߌ߲ ߤߊߞߍ ߡߊ߬ ߝߋߎ߫؟
ߊ߬ ߝߐ߫ ߣߌ߲߬ ߦߌߟߡߊߦߊߣߍ߲߫ ߝߋߎ߫؟
ߊ߬ ߓߐ߫ ߊ߬ ߦߋ߫ ߖߊ߬ߕߋ߬ߘߐ߬ߛߌ߰ ߞߣߍ ߞߊ߲߬؟
@@ -472,7 +466,7 @@
ߞߊ߲߬ߛߓߍߟߌ ߣߌ߫ ߝߍ߬ߛߓߍߟߌ ߟߎ߫ ߡߊߦߟߍ߬ߡߊ߲߫
ߖߌ߬ߦߊ߬ߓߍ ߟߊߖߍ߲ߛߍ߲߫ ߞߊߕߙߍ߬
ߌ ߡߊ߫ ߓߟߏߡߊߜߍ߲߫ ߛߌ߫ ߛߌ߲ߘߌ߫ ߡߎߣߎ߲߬
- %s ߡߊ߫ ߓߟߏߡߊߜߍ߲߫ ߛߌ߫ ߞߍ߫ ߡߎߣߎ߲߬
+ %1$s ߡߊ߫ ߓߟߏߡߊߜߍ߲߫ ߛߌ߫ ߞߍ߫ ߡߎߣߎ߲߬
ߖߊ߬ߕߋ߬ߘߊ ߓߘߊ߫ ߛߌ߲ߘߌ߫߹
ߛߓߍߟߌ ߓߘߊ߫ ߓߊߓߌ߬ߟߊ߬ ߛߓߍߝߌߘߊ߫-ߜߍ߬ߙߍ߲߬ߘߍ߬ߣߍ߲ ߞߊ߲߬.
ߖߊ߲߬ߓߌ߬ߟߊ߬ߟߌ: ߖߊ߬ߕߋ߫ ߘߐ߬ߞߊ߬ߙߊ߲߬ߣߍ߲ ߘߌ߫
@@ -481,7 +475,7 @@
ߊ߬ ߦߋ߫ ߦߋ߲߬
ߡߊ߬ߞߏ ߦߋ߫ ߖߌ߬ߦߊ߬ߓߍ ߟߊ߫
ߦߙߐ ߛߎ߯ߦߊ:
- ߛߍ߲߸ ߗߍߓߏ߲߸ ߖߌ߬ߦߊ߬ߓߏ߲ ߊ߬ ߣߌ߫.
+ ߛߍ߲߸ ߗߍߓߏ߲߸ ߖߌ߬ߦߊ߬ߓߏ߲ ߊ߬ ߣߌ߫.
ߞߏ ߘߏ߫ ߓߍ߲߬ ߣߍ߲߬ ߕߍ߫ ߜߊ߲߬ߞߎ߲߬ߠߌ߲ ߘߐ߫߸ ߌ ߦߴߌ ߟߊ߫ ߕߊ߬ߡߌ߲߬ߞߊ߲ ߡߊߝߊ߲߬ߟߋ߲߬߹߹
ߡߋߘߌߦߊ
ߘߋ߲ ߠߎ߬ ߟߊ߫ ߛߊ߯ߘߊ ߟߎ߫
@@ -515,7 +509,7 @@
߁߭. ߥߞߌߛߓߍߟߌ ߢߌ߲߬ ߠߎ߬ ߟߊߓߊ߯ߙߊ߫:
߂.ߟߊ߬ߛߙߋ߬ߦߊ߬ߟߌ ߛߐ߲߬ߞߌ߲ ߓߍߣߊ߬ ߥߞߌߔߋߘߌߦߊ ߞߎߡߘߊ ߘߊߦߟߍ߬
߇߲. ߞߎߡߘߊ ߟߊߥߊ߲߬ߞߊ߫
- ߥߞߌߘߏߞߊ߲ ߓߊߓߌ߬ߟߊ߫ ߛߓߍߝߌߘߊ߫-ߜߍ߬ߙߍ߲߬ߘߍ߬ߣߍ߲ ߘߐ߫
+ ߥߞߌߘߏߞߊ߲ ߓߊߓߌ߬ߟߊ߫ ߛߓߍߝߌߘߊ߫-ߜߍ߬ߙߍ߲߬ߘߍ߬ߣߍ߲ ߘߐ߫
ߊ߬ ߟߊߟߐ߬
ߟߊߛߎ߬ߘߎ߲߬ߧߊ߫
ߊ߬ ߓߘߊ߫ ߟߊߟߐ߬
@@ -567,7 +561,7 @@
ߌ ߞߐߛߊ߬ߦߌ߬
ߌ ߣߌ߫ ߛߣߍ߫ ߘߎ߲߬ߘߎ߬ߡߊ߬ ߖߌߦߊߓߍ ߟߎ߬ ߛߎߥߊ߲ߘߌߟߊ߲ ߞߊ߲߬
ߛߎߥߊ߲ߘߌߟߊ߲ ߣߌ߲߬ ߦߴߌ ߟߊ߫ ߖߌ߬ߦߊ߬ߓߍ߬ ߟߊߦߟߍ߬ߣߍ߲ ߠߎ߬ ߟߋ߬ ߦߌ߬ߘߊ߬ ߟߴߌ ߟߊ߫ ߞߐߡߐ߲ߛ ߞߊ߲߬.
- ߣߎߡߊ߲߫ ߝߍ߫ ߖߌߦߊߓߍ ߟߎ߬ ߞߏ߫ ߘߍ߫ ߘߋ߬߸ ߞߐߡߐ߲ߛ ߕߐ߰ߛߙߋ ߦߋ߫ ߞߌߣߌ߲ߝߍߕߊ ߡߍ߲ ߠߎ߬ ߟߊ߫ ߣߌ߲߬، ߏ߬ ߟߎ߬ ߦߴߊ߬ ߦߌ߬ߘߊ߬ ߟߊ߫ ߟߋ߬ ߞߴߌ ߓߘߊ߫ ߓߊ߲߫ ߏ߬ ߟߎ߬ ߟߊߦߟߍ߬ ߟߊ߫.\nߌ ߡߊ߰ ߏ߬ ߟߊ߫ ߞߵߊ߬ ߘߐߡߌ߬ߣߊ߬ ߖߌ߬ߦߊ߬ߓߍ ߡߊߝߟߍߞߏ ߘߐ߫ ߡߎߣߎ߲߬.
+ ߣߎߡߊ߲߫ ߝߍ߫ ߖߌߦߊߓߍ ߟߎ߬ ߞߏ߫ ߘߍ߫ ߘߋ߬߸ ߞߐߡߐ߲ߛ ߕߐ߰ߛߙߋ ߦߋ߫ ߞߌߣߌ߲ߝߍߕߊ ߡߍ߲ ߠߎ߬ ߟߊ߫ ߣߌ߲߬، ߏ߬ ߟߎ߬ ߦߴߊ߬ ߦߌ߬ߘߊ߬ ߟߊ߫ ߟߋ߬ ߞߴߌ ߓߘߊ߫ ߓߊ߲߫ ߏ߬ ߟߎ߬ ߟߊߦߟߍ߬ ߟߊ߫.\nߌ ߡߊ߰ ߏ߬ ߟߊ߫ ߞߵߊ߬ ߘߐߡߌ߬ߣߊ߬ ߖߌ߬ߦߊ߬ߓߍ ߡߊߝߟߍߞߏ ߘߐ߫ ߡߎߣߎ߲߬.
ߡߊ߲߬ߕߊ߬ߣߌ߲߬ߡߊ߬ߞߏ
ߖߌ߬ߦߊ߬ߓߍ ߣߌ߲߬ ߓߘߊ߫ ߓߊ߲߫ ߠߊߦߟߍ߬ ߟߊ߫ ߞߐߡߐ߲ߛ ߞߣߐ߫ ߞߘߐ߬ߡߊ߲߫
ߖߌ߬ߦߊߓߍ ߣߌ߲߬ ߓߍߣߊ߬ ߟߊߕߘߍ߬ ߥߞߌ ߝߙߎߕߎ ߞߊ߬ߣߌ߲߬ߓߊ߮ ߂߀߂߁ ߜߊ߬ߛߊ ߘߐ߫
@@ -577,8 +571,9 @@
ߥߞߌ ߝߙߎߕߎ ߞߊ߬ߣߌ߲߬ߓߊ߮ ߟߎ߬ ߦߋ߫ ߡߊ߲߬ߕߏ߲߬ߕߍ߬ߦߊ ߖߌ߬ߦߊ߬ߓߍ ߛߊ߲ߞߊߢߐ߲߯ߦߊ ߟߋ߬ ߘߌ߫ ߡߍ߲ ߛߌ߲߬ߝߏ߲߬ߧߊ߬ߣߍ߲߫ ߦߋ߫ ߥߞߌߡߋߘߌߦߊ ߓߟߏ߫
ߡߊ߬ߞߏ ߦߋ߫ ߟߊ߬ߘߌ߬ߢߍ߬ߟߌ ߟߊ߫
ߞߙߍ߬ߝߍ߬ ߔߊߔߘߊ (ߡߊߔߛ) ߡߊ߬ߞߏ ߦߋ߫ ߜߋߟߋ߲ߜߋߟߋ߲ ߞߊ߬ߝߏ ߘߐߞߊ߬ߙߊ߲ ߠߊ߫ ߞߊ߬ ߛߋ߫ ߓߊ߯ߙߊ߫ ߟߴߊ߬ ߢߊߓߘߍ ߡߊ߬
- ߟߊ߬ߓߊ߰ߙߊ߬ߟߊ %s: ߟߊ߫ ߓߟߏߡߊߜߍ߲
- ߟߊ߬ߓߊ߰ߙߊ߬ߟߊ %s: ߟߊ߫ ߞߎ߲߬ߝߊ߰ߟߌ ߟߎ߬
+ ߢߣߊߕߊߟߌ ߟߊ߬ߘߌ߬ߢߍ߬ߟߌ: ߕߋ߲߭ߕߋ߲߭ ߦߌߟߡߊ߫ ߦߌ߬ߘߊ߬ߣߍ߲ ߠߎ߬ ߘߌ߲߬ߞߌߙߊ ߟߊߛߐ߬ߘߐ߲߬.
+ ߟߊ߬ߓߊ߰ߙߊ߬ߟߊ %1$s: ߟߊ߫ ߓߟߏߡߊߜߍ߲
+ ߟߊ߬ߓߊ߰ߙߊ߬ߟߊ %1$s: ߟߊ߫ ߞߎ߲߬ߝߊ߰ߟߌ ߟߎ߬
ߟߊ߬ߓߊ߰ߙߊ߬ߟߌ߫ ߞߐߜߍ ߦߋ߫
ߞߊ߲߬ߛߓߍ߬ߟߌ ߟߎ߬ ߡߊߦߟߍ߬ߡߊ߲߫
ߦߌߟߡߊ ߟߎ߬ ߡߊߦߟߍ߬ߡߊ߲߫
@@ -586,7 +581,7 @@
ߊ߬ ߟߥߊߟߌ߫
ߘߌ߲߬ߞߌ߬ߙߊ߬ ߡߊ߫ ߛߐ߬ߘߐ߲߫
ߡߎ߲߬ ߟߐ߬ ߕߐ߫ ߦߋ߫ ߖߌ߬ߦߊ߬ߓߍ ߕߊ߬ ߦߙߐ ߝߙߊ߬ߟߌ ߟߊ߫ ߞߏ ߡߊ߬؟ \nߘߌ߲߬ߞߌߙߊ ߓߟߏߡߟߊ ߟߋ߬ ߦߋ߫ ߓߟߏߡߊߜߍ߲ߠߊ ߟߎ߬ ߘߍ߬ߡߍ߲߬ ߠߊ߫ ߞߵߌ ߟߊ߫ ߖߌ߬ߦߊ߬ߓߍ ߟߎ߬ ߢߌߣߌ߲߫߸ ߡߍ߲ ߞߍ߫ ߕߐ߫ ߦߴߊ߬ ߞߍ߫ ߣߝߊ߬ߡߊ ߘߌ߫. \nߌ ߣߌ߫ ߗߋ߫߹
- ߘߌ߲߬ߞߌߙߊ ߝߊ߬ߙߊ߫
+ ߘߌ߲߬ߞߌߙߊ ߝߊ߬ߙߊ߫
ߝߊߙߊ߲ߝߊ߯ߛߌ ߟߎ߬
API ߞߊߓߋ
ߊ߲ߘߙߏߦߌߘ ߦߌߟߡߊ
diff --git a/app/src/main/res/values-oc/strings.xml b/app/src/main/res/values-oc/strings.xml
index f837c4732..5e737cfb8 100644
--- a/app/src/main/res/values-oc/strings.xml
+++ b/app/src/main/res/values-oc/strings.xml
@@ -11,20 +11,18 @@
- %1$d fichièr en cors de cargament
- %1$d fichièrs en cors de cargament
-
- - \@string/contributions_subtitle_zero
- - %1$d cargament
- - %1$d cargaments
-
- %1$d cargament aviat
- %1$d cargaments aviats
-
+
- %1$d cargament
- %1$d cargaments
- Aqueste imatge serà jos licéncia %1$s
+
+ - Aqueste imatge serà jos licéncia %1$s
+ - Aquestes imatges seràn jos licencia %1$s
+
Explorar
Commons
Paramètres
@@ -88,10 +86,10 @@
Telecargar
Licéncia
Tèma
- Atribucion-PartimentIdentic 4.0
- Atribucion 4.0
- Atribucion-PartimentIdentic 3.0
- Atribucion 3.0
+ Atribucion-PartimentIdentic 4.0
+ Atribucion 4.0
+ Atribucion-PartimentIdentic 3.0
+ Atribucion 3.0
CC0
CC BY-SA 3.0
CC BY 3.0
diff --git a/app/src/main/res/values-or/strings.xml b/app/src/main/res/values-or/strings.xml
index 70c207050..56a990ac7 100644
--- a/app/src/main/res/values-or/strings.xml
+++ b/app/src/main/res/values-or/strings.xml
@@ -4,7 +4,10 @@
* Psubhashish
-->
- ଏହି ଛବିଟି %1$s ରେ ଲାଇସେନ୍ସକୃତ ହେବ
+
+ - ଏହି ଛବିଟି %1$s ରେ ଲାଇସେନ୍ସକୃତ ହେବ
+ - ଏହି ଛବିଟି %1$s ରେ ଲାଇସେନ୍ସକୃତ ହେବ
+
ଉଇକିମିଡ଼ିଆ କମନ୍ସ
ସଂରଚନା
ସଭ୍ୟ ନାମ
diff --git a/app/src/main/res/values-pa/strings.xml b/app/src/main/res/values-pa/strings.xml
index fa2051047..5d6fee9b0 100644
--- a/app/src/main/res/values-pa/strings.xml
+++ b/app/src/main/res/values-pa/strings.xml
@@ -26,20 +26,18 @@
- ੧ ਫ਼ਾਈਲ ਚੜ੍ਹਾਈ ਜਾ ਰਹੀ ਹੈ
- %1$d ਫ਼ਾਈਲਾਂ ਚੜ੍ਹਾਈਆਂ ਜਾ ਰਹੀਆਂ ਹਨ
-
- - \@string/contributions_subtitle_zero
- - %1$d upload
- - %1$d ਅੱਪਲੋਡ
-
- %1$d ਅੱਪਲੋਡ ਸ਼ੁਰੂ ਹੋ ਰਹੀ ਹੈ
- %1$d ਸ਼ੁਰੂ ਹੋ ਰਹੇ ਹਨ
-
- - &d ਅੱਪਲੋਡ
+
+ - &1$d ਅੱਪਲੋਡ
- %1$d ਅੱਪਲੋਡਾਂ
- ਇਹ ਤਸਵੀਰ ਦਾ %1$s ਹੇਠ ਲਸੰਸ ਜਾਰੀ ਕੀਤੀ ਜਾਵੇਗਾ
+
+ - ਇਹ ਤਸਵੀਰ ਦਾ %1$s ਹੇਠ ਲਸੰਸ ਜਾਰੀ ਕੀਤੀ ਜਾਵੇਗਾ
+ - ਇਹ ਤਸਵੀਰ ਦਾ %1$s ਹੇਠ ਲਸੰਸ ਜਾਰੀ ਕੀਤੀ ਜਾਵੇਗਾ
+
ਪੜਚੋਲ ਕਰੋ
ਦਿੱਖ
ਆਮ
@@ -64,7 +62,7 @@
ਅੱਪਲੋਡ ਸ਼ੁਰੂ ਹੋਇਆ!
%1$s ਅੱਪਲੋਡ ਹੋ ਗਏ!
ਆਪਣਾ ਅੱਪਲੋਡ ਵੇਖਣ ਲਈ ਥਪੇੜੋ
- ਫਾਈਲ ਚੜ੍ਹਾਈ ਜਾ ਰਹੀ ਐ: %s
+ ਫਾਈਲ ਚੜ੍ਹਾਈ ਜਾ ਰਹੀ ਐ: %1$s
%1$s ਅੱਪਲੋਡ ਕੀਤੇ ਜਾ ਰਹੇ ਹਨ
%1$s ਦਾ ਅੱਪਲੋਡ ਖ਼ਤਮ ਹੋ ਰਿਹਾ ਹੈ
%1$s ਨੂੰ ਚੜ੍ਹਾਉਣ ਵਿੱਚ ਨਾਕਾਮ
@@ -128,10 +126,10 @@
ਮੂਲ ਲਸੰਸ
ਪਿਛਲੇ ਸਿਰਲੇਖ ਅਤੇ ਵੇਰਵੇ ਦੀ ਵਰਤੋਂ ਕਰੋ
ਵਿਸ਼ਾ-ਵਸਤੂ
- Attribution-ShareAlike 4.0
- Attribution 4.0
- CC Attribution-ShareAlike 3.0
- Attribution 3.0
+ Attribution-ShareAlike 4.0
+ Attribution 4.0
+ CC Attribution-ShareAlike 3.0
+ Attribution 3.0
CC0
CC BY-SA 3.0
CC BY 3.0
@@ -182,8 +180,8 @@
ਕੀ ਤੁਸੀਂ ਸੱਚੀਂ ਬੰਦ ਕਰਨਾ ਚਾਹੁੰਦੇ ਹੋ?
ਲਾਮਾ
ਸਤਰੰਗੀ ਪੁਲ
- ਵਿਕੀਪੀਡੀਆ \'ਤੇ ਜੀ ਆਇਆਂ ਨੂੰ
- ਜੀ ਆਇਆਂ ਨੂੰ ਕਾਪੀਰਾਈਟ
+ ਵਿਕੀਪੀਡੀਆ \'ਤੇ ਜੀ ਆਇਆਂ ਨੂੰ
+ ਜੀ ਆਇਆਂ ਨੂੰ ਕਾਪੀਰਾਈਟ
ਸਿਡਨੀ ਓਪੇਰਾ ਹਾਊਸ
ਰੱਦ ਕਰੋ
ਖੋਲ੍ਹੋ
@@ -254,11 +252,10 @@
ਮਿਟਾਓ
ਪ੍ਰਾਪਤੀਆਂ
ਪ੍ਰੋਫਾਈਲ
- ਅੰਕੜੇ
ਧੰਨਵਾਦ ਪ੍ਰਾਪਤ ਹੋਏ
ਵਿਸ਼ੇਸ਼ ਤਸਵੀਰ
\"ਨੇੜਲੀਆਂ ਥਾਵਾਂ\" ਰਾਹੀਂ ਤਸਵੀਰਾਂ
- ਪੱਧਰ %d
+ ਪੱਧਰ %1$d
ਤਸਵੀਰਾਂ ਚੜ੍ਹਾਇਆਂ ਗਈਆਂ
ਤਸਵੀਰਾਂ ਵਾਪਸ ਨਹੀਂ ਕੀਤੀ ਗਈਆਂ
ਵਰਤੀ ਗਈਆਂ ਤਸਵੀਰਾਂ
@@ -283,13 +280,13 @@
ਮੁਹਿੰਮਾਂ ਵੇਖਾਓ
ਇਜਾਜ਼ਤ ਦਿਓ
ਖ਼ਾਰਜ ਕਰੋ
- ਧੰਨਵਾਦ ਭੇਜਣਾ: ਸਫਲ ਹੋਇਆ
+ ਧੰਨਵਾਦ ਭੇਜਣਾ: ਸਫਲ ਹੋਇਆ
ਕਿਰਪਾ ਕਰਕੇ ਉਡੀਕੋ...
ਉਤਾਰਾ ਕੀਤਾ
ਟਿਕਾਣਾ
ਲਿਖਤ ਚੂੰਢੀ-ਤਖਤੀ \'ਤੇ ਲਾਹੀ ਗਈ ਏ।
ਲਿਖਤ ਛਾਪੋ
- ਵਿਕੀਕੋਡ ਦਾ ਉਤਾਰਾ ਚੂੰਢੀ-ਤਖਤੀ \'ਤੇ ਲਿਖੋ
+ ਵਿਕੀਕੋਡ ਦਾ ਉਤਾਰਾ ਚੂੰਢੀ-ਤਖਤੀ \'ਤੇ ਲਿਖੋ
ਮੁਹਰੈਲ
ਵਰਤੋਂਕਾਰ
ਟਿਕਾਣਾ ਨਵਿਆਈਆ ਗਿਆ
diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml
index 1861070bb..5bb5cbfb7 100644
--- a/app/src/main/res/values-pl/strings.xml
+++ b/app/src/main/res/values-pl/strings.xml
@@ -31,7 +31,7 @@
-->
Strona Commons na Facebooku
- Kod źródłowy Commons na GitHubie
+ Kod źródłowy Commons na GitHubie
Logo Commons
Strona internetowa Commons
Wyjdź z selektora lokalizacji
@@ -57,24 +57,18 @@
- Przesyłanie %1$d plików
- Przesyłanie %1$d plików
-
- - (%1$d)
- - (%1$d)
- - (%1$d)
- - (%1$d)
-
Rozpoczynanie przesyłania
-
- - Rozpoczęto %d przesyłanie
- - Rozpoczęto %d przesyłania
- - Rozpoczęto %d przesyłań
- - Rozpoczęto %d przesyłań
+
+ - Przetwarzanie %1$d przesyłania
+ - Przetwarzanie %1$d przesłań
+ - Przetwarzanie %1$d przesłań
+ - Przetwarzanie %1$d przesłań
-
- - %d przesłanie
- - %d przesłania
- - %d przesłania
- - %d przesłania
+
+ - %1$d przesłanie
+ - %1$d przesłania
+ - %1$d przesłań
+ - %1$d przesłań
- Ten obraz będzie udostępniany na licencji %1$s
@@ -124,7 +118,7 @@
Prześlij w kolejce (włączony tryb ograniczonego połączenia)
Przesłano %1$s!
Dotknij, aby zobaczyć przesłany plik
- Przesyłanie pliku: %s
+ Przesyłanie pliku: %1$s
Wysyłanie %1$s
Zakończono wysyłanie pliku %1$s
Nieudane wysyłanie %1$s
@@ -174,6 +168,7 @@
Ustawienia
Zarejestruj się
Wyróżniony obrazek
+ Polecane zdjęcia to zdjęcia wysoko wykwalifikowanych fotografów i ilustratorów, które społeczność Wikimedia Commons wybrała jako jedne z najwyższych jakości na stronie.
Selektor niestandardowy
Kategoria
Recenzja
@@ -195,10 +190,10 @@
Domyślna licencja
Użyj poprzedniego tytułu i opisu
Motyw
- Uznanie autorstwa-Na tych samych warunkach 4.0
- Uznanie autorstwa 4.0
- Uznanie autorstwa-Na tych samych warunkach 3.0
- Uznanie autorstwa 3.0
+ Uznanie autorstwa-Na tych samych warunkach 4.0
+ Uznanie autorstwa 4.0
+ Uznanie autorstwa-Na tych samych warunkach 3.0
+ Uznanie autorstwa 3.0
CC0
CC BY-SA 3.0
CC BY 3.0
@@ -260,15 +255,14 @@
Kod 2FA
Kod weryfikacyjny z e-mail
Czy na pewno wylogować?
- Błąd obrazu multimedialnego
Nie znaleziono podkategorii
Nie znaleziono kategorii nadrzędnych
Zaō
Lamy
Rainbow Bridge
Tulipan
- Witaj na Wikipedii
- Witamy Prawa Autorskie.
+ Witaj na Wikipedii
+ Witamy Prawa Autorskie.
Opera Sydnej
Anuluj
Otwórz
@@ -404,13 +398,11 @@
Osiągnięcia
Profil
Odznaki
- Statystyki
Otrzymane Dzięki
Wyróżnione ilustracje
Obrazy za pośrednictwem \"Pobliskie miejsca\"
- Poziom %d
- %s (Poziom %s)
- %s (%s)
+ Poziom %1$d
+ %1$s (Poziom %2$s)
Przesłane obrazy
Nie wycofane obrazy
Wykorzystane obrazy
@@ -470,7 +462,7 @@
Nigdy więcej nie pytaj o to
Poproś o dostęp do lokalizacji
W razie potrzeby zapytaj o pozwolenie na lokalizację w przypadku funkcji widoku pobliskiej karty powiadomień.
- Coś poszło nie tak. Nie mogliśmy pobrać osiągnięć
+ Coś poszło nie tak. Nie mogliśmy pobrać osiągnięć
Zrobiłeś tak wiele wkładu, że nasz system obliczania osiągnięć nie może sobie poradzić. To jest najwyższym osiągnięciem.
Kończy się na:
Wyświetl kampanie
@@ -498,11 +490,11 @@
Nie można zażądać sprawdzania kategorii dla %1$s
Żądanie sprawdzania kategorii dla %1$s
Zrobione
- Wysyłanie podziękowań: Powodzenie
- Pomyślnie wysłano podziękowania do %1$s
- Nie udało się wysłać podziękowań %1$s
- Wysyłanie podziękowań: Błąd
- Wysyłanie podziękowań za %1$s
+ Wysyłanie podziękowań: Powodzenie
+ Pomyślnie wysłano podziękowania do %1$s
+ Nie udało się wysłać podziękowań %1$s
+ Wysyłanie podziękowań: Błąd
+ Wysyłanie podziękowań za %1$s
Czy to jest zgodne z zasadami praw autorskich?
Czy jest to poprawnie skategoryzowane?
Czy jest to w zakresie?
@@ -529,15 +521,14 @@
Wyświetl nieprzeczytane
Wystąpił błąd podczas pobierania zdjęć
Proszę czekać...
- Polecane zdjęcia to zdjęcia wysoko wykwalifikowanych fotografów i ilustratorów, które społeczność Wikimedia Commons wybrała jako jedne z najwyższych jakości na stronie.
Obrazy przesłane przez Pobliskie miejsca to obrazy, które są przesyłane przez odkrywanie miejsc na mapie.
Ta funkcja umożliwia redaktorom wysyłanie powiadomień z podziękowaniem do użytkowników, którzy dokonują przydatnych zmian - za pomocą małego linku z podziękowaniem na stronie historii lub na stronie diff.
- Kopiuj na kolejne nośniki
+ Kopiuj na kolejne nośniki
Skopiowano
Przykłady dobrych zdjęć do przesłania na Commons
Przykłady obrazów, których nie można przesyłać
Pomiń ten obraz
- Pobieranie nie powiodło się!. Nie możemy pobrać pliku bez pozwolenia na dostęp do pamięci zewnętrznej.
+ Pobieranie nie powiodło się!. Nie możemy pobrać pliku bez pozwolenia na dostęp do pamięci zewnętrznej.
Zarządzaj tagami EXIF
Wybierz, które tagi EXIF mają być przesyłane
Autor
@@ -547,8 +538,6 @@
Model obiektywu
Numery seryjne
Oprogramowanie
- Odmowa dostępu do lokalizacji multimediów
- Możemy nie być w stanie automatycznie uzyskać danych o lokalizacji z przesyłanych zdjęć. Przed przesłaniem dodaj odpowiednią lokalizację dla każdego zdjęcia
Prześlij zdjęcia do Wikimedia Commons bezpośrednio z telefonu. Pobierz teraz aplikację Commons: %1$s
Udostępnij za pośrednictwem…
Informacje o obrazie
@@ -608,7 +597,7 @@
Edycja opisów i przypisów
Udostępnij obraz przez
Nie dokonałeś jeszcze żadnej edycji
- %s nie dokonał jeszcze żadnej edycji
+ %1$s nie dokonał jeszcze żadnej edycji
Konto zostało utworzone!
Skopiowano tekst do schowka
Oznaczono powiadomienia jako przeczytane
@@ -617,7 +606,7 @@
Istnieje
Potrzebne Zdjęcia
Typ miejsca:
- Most, muzeum, hotel itp.
+ Most, muzeum, hotel itp.
Coś poszło nie tak z logowaniem. Musisz zresetować hasło!
MEDIA
KLASY POTOMNE
@@ -659,7 +648,7 @@
5. Wklej wikitekst w odpowiednim miejscu.
6. Edytuj wikitekst w celu odpowiedniego pozycjonowania, jeśli to konieczne. Aby uzyskać więcej informacji, zobacz <a href=\"https://en.wikipedia.org/wiki/Wikipedia:Manual_of_Style/Images#How_to_place_an_image\">here</a>.
7. Opublikuj artykuł
- Skopiuj wikicode do schowka
+ Skopiuj wikicode do schowka
zatrzymaj
wznów
Zatrzymano
@@ -726,7 +715,7 @@
Cofnij
Witamy w niestandardowym selektorze zdjęć
Ten selektor pokazuje, które zdjęcia zostały już przesłane do Commons.
- W przeciwieństwie do zdjęcia po lewej, zdjęcie po prawej ma logo Commons wskazujące, że zostało już przesłane.\n Dotknij i przytrzymaj, aby wyświetlić podgląd obrazu.
+ W przeciwieństwie do zdjęcia po lewej, zdjęcie po prawej ma logo Commons wskazujące, że zostało już przesłane.\n Dotknij i przytrzymaj, aby wyświetlić podgląd obrazu.
Niesamowite
Tez plik został już przesłany do Commons.
Ze względów technicznych aplikacja nie może niezawodnie przesyłać więcej niż %1$d zdjęć na raz. Limit przesyłania %1$d został przekroczony przez %2$d.
@@ -740,8 +729,9 @@
Wiki Loves Monuments (Wiki Kocha Zabytki) to międzynarodowy konkurs fotograficzny skoncentrowany na zabytkach, organizowany przez Wikimedia
Wymagane uprawnienie
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
+ Opcjonalne zezwolenie: uzyskiwanie bieżącej lokalizacji dla wygenerowania propozycji kategorii
+ Wkład użytkownika: %1$s
+ Osiągnięcia użytkownika: %1$s
Wyświetl profil użytkownika
Edycja przedstawień
Edycja kategorii
@@ -752,7 +742,7 @@
Dane o lokalizacji pomagają edytorom Wiki znaleźć Twoje zdjęcie, dzięki czemu jest ono znacznie bardziej przydatne.\nTwoje ostatnio przesłane pliki nie zawierają lokalizacji.\nSugerujemy włączenie lokalizacji w ustawieniach aplikacji aparatu.\nDziękujemy za przesłanie!
Nie odnaleziono lokalizacji
Co powiesz na dodanie miejsca, w którym zrobiono to zdjęcie?\nDane o lokalizacji pomagają edytorom Wiki znaleźć Twoje zdjęcie, dzięki czemu jest ono znacznie bardziej przydatne.\nDziękujemy!
- Dodaj położenie
+ Dodaj położenie
Usuń z tego e-maila wszelkie informacje, których nie chcesz udostępniać publicznie. Pamiętaj również, że Twój adres e-mail, z którego publikujesz, oraz powiązane imię i nazwisko i zdjęcie profilowe będą widoczne publicznie.
Szczegóły
Osiągnięcia są dostępne tylko w wersji prod. Sprawdź dokumentację programistyczną.
@@ -773,8 +763,8 @@
Odznacz jako nie do przesłania
Oznacz jako nieprzeznaczone do przesłania
Oznacz jako nieprzeznaczone do przesłania
- Pokaż już wykonane zdjęcia
- Ukrywanie już wykonanych zdjęć
+ Pokaż już wykonane zdjęcia
+ Ukrywanie już wykonanych zdjęć
Nie znaleziono więcej obrazów
To zdjęcie zostało już przesłane
Nie można wybrać tego obrazu do przesłania
@@ -810,17 +800,17 @@
Twoje logowanie wygasło. Zaloguj się ponownie.
Brak dostępnej aplikacji do otwierania plików GPX
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.
- Zapisywanie pliku KML
- Zapisywanie pliku GPX
+ Chcesz otworzyć plik GPX?
+ Chcesz otworzyć plik KML?
+ Nie udało się zapisać pliku KML.
+ Nie udało się zapisać pliku GPX.
+ Zapisywanie pliku KML
+ Zapisywanie pliku GPX
- - %d wybrany obraz
- - %d wybrane obrazy
- - %d wybranych obrazów
-
+ - %1$d wybrany obraz
+ - %1$d wybrane obrazy
+ - %1$d wybranych obrazów
+ - %1$d wybranych obrazów
Pamiętaj, że wszystkie obrazy w wielokrotnym przesłaniu mają te same kategorie i przedstawienia. Jeśli obrazy nie mają wspólnych przedstawień i kategorii, wykonaj kilka oddzielnych przesłań.
Uwaga dotycząca przesyłania wielu obrazów na raz
diff --git a/app/src/main/res/values-pms/strings.xml b/app/src/main/res/values-pms/strings.xml
index 683254b61..064112009 100644
--- a/app/src/main/res/values-pms/strings.xml
+++ b/app/src/main/res/values-pms/strings.xml
@@ -4,7 +4,7 @@
-->
Pàgina su Facebook ëd Comun
- Còdes sorgiss Github ëd Comun
+ Còdes sorgiss Github ëd Comun
Marca ëd Comun
Sit an sl\'aragnà ëd Comun
Seurte dal selessionador ëd locassion
@@ -28,18 +28,14 @@
- %1$d archivi an camin ch\'as caria
- %1$d archivi an camin ch\'as cario
-
- - (%1$d)
- - (%1$d)
-
Ancamin dij cariament
- %1$d cariament an cors
- %1$d cariament an cors
- - %d cariament
- - %d cariament
+ - %1$d cariament
+ - %1$d cariament
- Costa plancia a sarà sota la licensa %1$s
@@ -83,7 +79,7 @@
Carié an coa (manera ëd conession limità abilità)
%1$s carià!
Sgnaché për vëdde sò cariament
- Inissi dël cariament %s
+ Inissi dël cariament %1$s
%1$s carià
Fin dël cariament %1$s
Falì a carué %1$s
@@ -133,6 +129,7 @@
Paràmeter
Marchesse
Plance an evidensa
+ Le fòto an evidensa a son ëd plance fàite da dij fotògraf e ilustrator motobin àbij che la comunità ëd Wikipedia Commons a l\'ha sernù tra cole ëd qualità pi àuta an sël sit.
Seletor përsonalisà
Categorìa
Revision da par
@@ -154,10 +151,10 @@
Licensa dë stàndard
Dovré ël tìtol e la descrission precedent
Tema
- Atribussion-Partagi ugual 4.0
- Atribussion 4.0
- Atribussion-partagi ugual 3.0
- Atribussion 3.0
+ Atribussion-Partagi ugual 4.0
+ Atribussion 4.0
+ Atribussion-partagi ugual 3.0
+ Atribussion 3.0
CC0
CC BY-SA 3.0
CC BY 3.0
@@ -220,15 +217,14 @@
Còdes 2FA
Mandé un còdes ëd verifica
Veul-lo për da bon seurte dal sistema?
- Faliment ëd la plancia dël mojen
Gnun-e sot-categorìe trovà
Gnun-é categorìe ce trovà
Mont Zao
Lama
Pont Arcansiel
Tulipan
- Bin-ëvnù ëd Wikipedia
- Drit d\'autor ëd bin-ëvnù
+ Bin-ëvnù ëd Wikipedia
+ Drit d\'autor ëd bin-ëvnù
Ca dl\'òpera ëd Sidney
Anulé
Duverté
@@ -364,13 +360,11 @@
Realisassion
Profil
Distintiv
- Statìstiche
Aringrassiament arseivù
Plance an evidensa
Plance për \"Pòst davzin\"
- Livel %d
- %s (Livel %s)
- %s (%s)
+ Livel %1$d
+ %1$s (Livel %2$s)
Plance carià
Plance nen anulà
Plance dovrà
@@ -430,7 +424,7 @@
Mai pi ciamé sòn
Ciamé l\'autorisassion ëd localisassion
Ciamé ël përmess ëd localisé cand a-i na j\'é da manca për la fonsion ëd visualisassion ëd la carta dle notìfiche dë vzinansa.
- Cheicòs a l\'ha nen marcià, i l\'oma nen podù arcuperé le realisassion
+ Cheicòs a l\'ha nen marcià, i l\'oma nen podù arcuperé le realisassion
A l\'ha fàit tante contribussion che ël sistema ëd càlcol dj\'arzultà otnù a l\'é debordà. Cost-sì a l\'é l\'ùltim arzultà otnù.
A finiss ai:
Campagne ëd visualisassion
@@ -458,11 +452,11 @@
Impossìbil ciamé un contròl ëd categorìa për %1$s
Arcesta an cors dël contròl ëd la categorìa për %1$s
Fàit
- Spedission sj\'aringrassiament: Riussìa
- Aringrassiament mandà con sucess a %1$s
- Falì a mandé d\'aringrassiament %1$s
- Spedission sj\'aringrassiament: Falìa
- Spedission d\'aringrassiament për %1$s
+ Spedission sj\'aringrassiament: Riussìa
+ Aringrassiament mandà con sucess a %1$s
+ Falì a mandé d\'aringrassiament %1$s
+ Spedission sj\'aringrassiament: Falìa
+ Spedission d\'aringrassiament për %1$s
É-lo sòn conforma a le régole dij drit d\'autor?
É-lo sòn categorisà për da bin?
A rësguarda l\'argoment?
@@ -489,15 +483,14 @@
Vëdde lòn ch\'a l\'é ancor nen ëstàit lesù
A-i é staje n\'eror an selessionand le plance
Ch\'a l\'abia passiensa...
- Le fòto an evidensa a son ëd plance fàite da dij fotògraf e ilustrator motobin àbij che la comunità ëd Wikipedia Commons a l\'ha sernù tra cole ëd qualità pi àuta an sël sit.
Le plance carià dai pòst ëd prossimità a son le plance carià con la dëscuverta dij pòst an sla carta.
Costa fonsionalità a përmet ai contributor ëd mandé na notìfica d\'aringrassiament a j\'utent ch\'a fan dle modìfiche ùtij - an dovrand na cita liura d\'aringrassiament an sla pàgina dla stòria o cola dle diferense.
- Copié al mojen apress
+ Copié al mojen apress
Copià
Esempi ëd plance bon-e da carié su Commons
Esempi ëd plance da nen carié
Sauté costa plancia
- Dëscariament falì! I podoma nen dëscarié l\'archivi sensa ël përmess dël depòsit estern.
+ Dëscariament falì! I podoma nen dëscarié l\'archivi sensa ël përmess dël depòsit estern.
Gestì le tichëtte EXIF
Selessioné che tichëtte EXIT goerné durant ij cariament
Autor
@@ -507,8 +500,6 @@
Model ëd lent
Nùmer ëd serie
Programa
- Acess a la locassion dël mojen arfudà
- I podoma pa oten-e an automàtich ij dàit ëd localisassion dle plance che chiel a caria. Për piasì, ch\'a giontà la posission apropià për tute le plance prima ëd mandeje
Ch\'a caria dle fòto su Wikimedia Commons diretaman da sò teléfon. Ch\'a dëscaria l\'aplicassion Commons adess: %1$s
Partagé l\'aplicassion via...
Anformassion an sla plancia
@@ -564,7 +555,7 @@
Modifiché le descrission e le legende.
Partagé la plancia via
A l\'ha pa ancor fàit ëd contribussion
- %s a l\'ha pa ancor fàit ëd contribussion
+ %1$s a l\'ha pa ancor fàit ëd contribussion
Cont creà!
Test copià an sla taulëtta
Notìfica marcà coma lesùa
@@ -573,7 +564,7 @@
A esist
A l\'ha damanca ëd na fòto
Sòrt ëd pòst:
- Pont, musé, obergi e via fòrt
+ Pont, musé, obergi e via fòrt
Cheicòs a l\'é andàit mal con la conession. A dev torna inissialisé soa ciav!
MOJEN
CLASSE MASNÀ
@@ -617,7 +608,7 @@
5. Ancolé ël wikitest ant ël pòst apropià.
6. Modifiché ël wikitest për posissionelo bin, si necessari. Për pi d\'anformassion, vëdde <a href=\"https://en.wikipedia.org/wiki/Wikipedia:Manual_of_Style/Images#How_to_place_an_image\">here</a>.
7. Publiché l\'artìcol
- Copié ël còdes wiki an sla taulëtta
+ Copié ël còdes wiki an sla taulëtta
pàusa
ancaminé torna
An pàura
@@ -684,7 +675,7 @@
André
Bin-ëvnù ant ël seletor ëd plance përsonalisà
Ës seletor a jë smon dle plance che chiel a l\'ha già carià su Comun.
- A diferensa da la plancia a snistra, la plancia a drita a la marca Comun ch\'a mostra ch\'a l\'é già stàita carià.\n Toché e ten-e për avèj na previsualisassion ëd la plancia.
+ A diferensa da la plancia a snistra, la plancia a drita a la marca Comun ch\'a mostra ch\'a l\'é già stàita carià.\n Toché e ten-e për avèj na previsualisassion ëd la plancia.
Fiamengh
La plancia a l\'é già stàita carià su Comun.
Për dle rason técniche, l\'aplicassion a peul nen carié an manera afidàbil pi che %1$d plance a la vira. Ël lìmit ëd cariament ëd %1$d a l\'é stàit passà ëd %2$d.
@@ -698,8 +689,9 @@
Wiki a-j veul bin ai monument a l\'é un concors antërnassional ëd fotografìa ëd monument organisà da Wikimedia
A-i é damanca dël përmess
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
+ Autorisassion facoltativa: Oten-e la posission atual për dij sugeriment ëd categorìa
+ Contribussion ëd l\'utent: %1$s
+ Arzultà ëd l\'utent: %1$s
Vëdde ël profil ëd l\'utent
Modifiché le descrission
Modifiché le categorìe
@@ -710,7 +702,7 @@
Ij dàit ëd localisassion a giuto j\'editor ëd Wiki a trové soa fòto, lòn ch\'a la rend pi ùtil.\nSò cariament recent a l\'han gnun-a localisassion.\nI-j sugerioma d\'ativé la localisassion ant ij paràmeter ëd soa aplicassion ëd màchina fòto.\nMersì d\'avèj carià!
Gnun pòst trovà
Përché nen gionté ël pòst andoa costa plancia a l\'é stàita fàita?\nIj dàit dij leu a giuto ij contibutor dle wiki a trové soa plancia, rendend-la pi ùtil.\nMersì!
- Gionté un pòst
+ Gionté un pòst
Për piasì, ch\'a gava da \'s mëssage ògni anformassion ch\'a veul nen ch\'a sia spantià an manera pùblica. Ch\'a ten-a ëdcò da ment che l\'adrëssa ëd pòsta eletrònica con la qual chiel a pùblica e ël nòm e la plancia ëd profil assossià a saran visìbil publicaman.
Detaj
Le realisassion a son disponìbij mach ant la version ëd produssion. Për piasì, ch\'a consulta la documentassion dël dësvlupador.
@@ -731,8 +723,8 @@
Desselessioné coma da nen carié
Marché coma da nen carié
Desselessioné coma da nen carié
- Smon-e le plance già assionà
- Stërmé le plance già assionà
+ Smon-e le plance già assionà
+ Stërmé le plance già assionà
Pi gnun-e plance trovà
Costa plancia a l\'é già carià
Impossìbil selessioné costa plancia për ël cariament
@@ -768,15 +760,15 @@
Soa conession a l\'é scadùa. Për piasì ch\'a rintra torna ant ël sistema.
Gnun-a aplicassion disponìbil për duverté j\'archivi GPX
Archivi argistrà për da bin
- Veul-lo duverté l\'archivi GPX?
- Veul-lo duverté l\'archivi KML?
- Falì a argistré l\'archivi KML.
- Falì a argistré l\'archivi GPX.
- Argistrassion ëd l\'archivi KML
- Argistrassion ëd l\'archivi GPX
+ Veul-lo duverté l\'archivi GPX?
+ Veul-lo duverté l\'archivi KML?
+ Falì a argistré l\'archivi KML.
+ Falì a argistré l\'archivi GPX.
+ Argistrassion ëd l\'archivi KML
+ Argistrassion ëd l\'archivi GPX
- - %d plancia selessionà
- - %d plance selessionà
+ - %1$d plancia selessionà
+ - %1$d plance selessionà
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
@@ -813,7 +805,6 @@
Àutre wiki
•
Usagi dl\'archivi
- SingleWebViewActivity
Cont
Flambé ël cont
Avis d\'eliminassion dël cont
diff --git a/app/src/main/res/values-ps/error.xml b/app/src/main/res/values-ps/error.xml
index 94bb26441..2fbd3f195 100644
--- a/app/src/main/res/values-ps/error.xml
+++ b/app/src/main/res/values-ps/error.xml
@@ -1,7 +1,11 @@
+ ويکيخونديځ خرابشوی
+ اوو. يو څه ناسم پېښ شول!
+ موږ ته ووایاست چې تاسو څه کول غواړئ، بيايې له موږ سره د برېښليک له لارې شريک کړئ. دا به موږ سره د هغې سمولو کې مرسته وکړي!
مننه!
diff --git a/app/src/main/res/values-ps/strings.xml b/app/src/main/res/values-ps/strings.xml
index 6083dc833..6dfc96900 100644
--- a/app/src/main/res/values-ps/strings.xml
+++ b/app/src/main/res/values-ps/strings.xml
@@ -10,42 +10,38 @@
-->
د خونديځ فيسبوک پاڼه
- خونديځ ګيټهوب سرچينه کوډ
+ خونديځ گيټهاب سرچينه کوډ
خونديځ نښان
خونديځ وېبپاڼه
له ځای ټاکونکي وتل
سپارل
- بل سپيناوی ورزياتول
- نوې ونډې ورزياتول
- د کامرې له لارې ونډه ورزياتول
- انځورونو له لارې ونډه ورزياتول
- د پخوانيو ونډو له انځورتونه د ونډې ورزياتول
+ بل څرگنداوی ورگډول
+ نوې ونډې ورگډول
+ د کامرې له لارې ونډه ورگډول
+ انځورونو له لارې ونډه ورگډول
+ د پخوانيو ونډو له انځورتونه د ونډې ورگډول
نيونگې
- ژبې سپيناوی
+ ژبې څرگنداوی
نيونگ
- سپيناوی
+ څرگنداوی
انځور
ټول
- پورته کول
- لټون ليد
+ پورته بدلول
+ لټون کتنه
ځای حالت
ورځې انځور
- - %1$d دوتنه پورته کول
- - %1$d دوتنې پورته کول
+ - %1$d دوتنه راپورتهکول
+ - %1$d دوتنې راپورتهکول
-
- - (%1$d)
- - (%1$d)
-
- پورته کولو پيل
+ راپورتهکول پيلول
- - جريان %d پورته کول
- - پورته کولو %d جريان
+ - راپورتهکولو %1$d بهير
+ - راپورتهکولو %1$d بهير
- - %d upload
- - %d پورته کول
+ - %1$d راپورتهکېدنه
+ - %1$d راپورتهکېدنې
- دا انځور به د منښتليک %1$s لاندې وي
@@ -89,7 +85,7 @@
راپورته کول په کتار کې دي(د ټاکلي اړيکې ونگه چارن شوې)
%1$s پورته شوی!
د خپلې راپورکېدنې کتلو لپاره دلته وټاپئ.
- دوتنه راپورته کېږي: %s
+ دوتنه راپورته کېږي: %1$s
د %1$s پورته کول
%1$s راپورته کېدنه بشپړېږي
%1$s راپورته کېدنه نابريالۍ شوه
@@ -100,7 +96,7 @@
لږ
نابريال شو
%1$d%% بشپړ
- د برسېرېدلو په حال کې…
+ راپورتهکېږي
له انځورتون څخه
انځور اخيستل
نژدې
@@ -111,11 +107,11 @@
د دوتنې مخ کتل
نيونگ (اړين دی)
مهرباني وکړئ، د دې دوتنې لپاره نيونگ ورکړئ
- څرگندونه
+ څرگنداوی
نيونگ
غونډال ته ننوتنه ناشونې ده - د جال پاتې راتلنه
- ډیری ناکامه هڅې. لطفا څو دقیقې وروسته بیا هڅه وکړئ.
- بخښنه غواړو، په دي کارن د کامنز لخوا بنديز ولګول شو
+ ډېرې ناکامه هڅې. لطفا څو دقیقې وروسته بیا هڅه وکړئ.
+ بخښنه غواړو، په دې کارن د کامنز لخوا بنديز ولگول شو
تاسو بايد خپل دوه لامليز تاييد کوډ ورکړئ.
ستاسو برېښليک پتې ته د ننوتلو تاييد کوډ لېږل شوی دی. مهرباني وکړئ د ننوتلو لپاره کوډ ورکړئ.
غونډال کې ننوتنه نابريالۍ شوه
@@ -154,6 +150,9 @@
تاسې تر اوسه کوم انځور نه دی پورته کړی.
بياآزمويل
ناگارل
+ ژبې نوم وليکئ
+ وروستنۍ پلټنې
+ ټولې ژبې
ښکته کول
تلواليز منښتليک
مخکنی سرليک او سپيناو وکاروئ
@@ -163,6 +162,7 @@
ځانگړي کونگ-ورته وېشنه ۳.۰
ځانگړي کونگ ۳.۰
CC BY 3.0
+ ويکيرسنۍ خونديځ د ډېرو هغه انځورونو کوربهتوب کوي چې په ويکيپېډيا کې کارول کېږي.
ستاسو انځورونه د نړۍ په گوټ گوټ کې خلکو ته زده کړه ورکوي!
مهرباني وکړئ هغه انځورونه راپورته کړئ چې په بشپړ ډول تاسو اخيستي يا جوړ کړې وي:
طبيعي څيزونه (گلان، څاروي، غرونه)
@@ -187,28 +187,38 @@
رابرسېرېږي...
هېڅ هم نه دی ټاکل شوی
هيڅ نيونگ نشته
- څرگندونه نشته
+ څرگنداوی نشته
هيڅ شننه نشته
- نامعلوم جواز
+ ناجوت منښتليک
تازه کول
د زېرمه کولو د پرېښولي غوښتنه کول
اړينه پرېښولی: بهرنۍ زېرمه ولولئ. کاريال ستاسو انځورتونه ته پرته له دې لاسرسی نشي موندلی.
+ اجازې ته اړتيا ده: باندنۍ زېرمهکولو ليکل. له دې پرته کاريال ستاسو کامرې/انځورتون ته لاسرسی نشي موندلای.
+ د ځای د اجازې غوښتنه کول
ښه
گواښنه
+ د دوتنې غبرگونی نوم وموندل شو
راپورتهکول
هو
نه
نيونگ
سرليک
- څرگندونه
+ وييانځوريز استازيتوب
+ څرگنداوی
شننه
ليکوال
+ راپورتهکوونکی
راپورتهکېدلو نېټه
منښتليک
کورډيناټونه
هېڅ نه دي چمتو شوي
ازمېښتي ازمايښتگر شئ
- ويکيپېډياښه راغلئ
+ برېښليک تاييد کوډ
+ ايا تاسو په رښتيا له غونډاله وتل غواړئ؟
+ هېڅ څېرمهوېشنيزې ونه موندل شوې
+ هېڅ بنسټيزې وېشنيزې ونه موندل شوې
+ د ويکيپېډيا يوې ټوليزې ليکنې يو منشوري انځور.
+ د کاغزونو د يوې ډډې انځور چې لمېسلرښتې ورسره مل وي.
ناگارل
پرانېستل
تړل
@@ -218,13 +228,39 @@
په اړه
اوڼنې
غبرگون
+ گيټهاب له لارې غبرگون
وتل
+ لارښوونيزې
+ خبرتياوې
بياکتنه
- هيڅ څرگنداوی ونهٔ موندل شو
+ هېڅ څرگنداوی ونه موندل شو
+ ټولگړې دوتنې مخ
+ ويکياومتوک توکی
+ ويکيپېډيا ليکنه
+ انځور ډېر تياره دی.
+ انځور ډېر جړ دی.
+ نښلېدا تېروتنه
+ په انځور کې موندل شوې ستونزې
+ يادښت دوتنه لېږل
+ تېروتنه! وېبتړ ونه موندل شو
+ ړنگېدو ته نوماند
+ دا انځور ړنگېدو ته نوماند شوی دی.
+ سپيناوي لپاره وېبپاڼه وگورئ
+ تېرېدل
+ ننوتل
+ آیا تاسو رښتیا غواړئ چې ننوتل پرېږدئ؟
+ په راتلونکي کې تاسو بايد د انځورونو راپورته کولو لپاره غونډال ته ننوځئ.
+ د دې ځانگړنې کارولو لپاره مهرباني وکړئ، غونډال ته ننوځئ
+ ويکيليک ټينگدړې ت ولمېسئ
+ ويکيليک ټينگدړې ته ولمېسل شو
+ څېرمه ځايونه شايد په سمه توگه کار ونکړي، ځکه ځای د لاسرسي وړ نه دي.
+ اينټرنېټ د لاسرسي وړ نه دي. يوازې زېرمه شوي ځايونه ښيي.
+ ځای لاسرسی ناگاره شو. مهرباني وکړئ د دې ځانگړنې کارولو لپاره خپل ځای په لاسي ډول واوڼئ.
تگلوري
ويکياومتوک
ويکيپېډيا
خونديځ
+ و مو ارزوئ
ډځپ
کارن لارښود
ښوونې پرېښودل
@@ -238,6 +274,7 @@
پرمخځه
ناگارل
بيا هڅهکول
+ دا تاسو ته نږدې ځايونه دي چې د ويکيپېډيا ليکنې يې د ښودلو لپاره انځورونو ته اړتيا لري.\n\n\'د دې ځای پلټل\' باندې کليک کولو سره نخچه تاله کوي او د هغه ځای شاوخوا نږدې سيمې لټون پيلول.
داځای انځور ته اړتيا لري.
دا ځای لادمخه انځور لري.
دا ځای نور شتون نه لري.
@@ -253,5 +290,237 @@
وروستۍ پلټنې:
وروستۍ پلټل شوې پوښتنې
وروستۍ ژبې پوښتنې
+ رسنۍ
+ وېشنيزې
+ توکي
+ ټاکلې
+ موبايل له لارې راپورتهشوی
+ نخشه
+ انځور په ویکياومتوک کې %1$s ته ورگډ شو!
+ پوښتنه
+ پايله
+ پرلهپورې
+ سم ځواب
+ ناسم ځواب
+ کاریال وېشل
+ تاوول
+ ايا تاسو ډاډه ياست چې دا راپورتهکول ناگارل غواړئ؟
+ ايا تاسو غواړئ چې دا لټون ړنگ کړئ؟
+ د پلټنې پېښليک ړنگ شو
+ ړنگولو ته نومول
+ ړنگول
+ لاستهراوړنې
+ پېژنيال
+ مټتړوني
+ ترلاسهشوې مننې
+ ټاکلی انځور
+ انځورنه د \"څېرمه ځايونو\" له لارې
+ کچه %1$d
+ %1$s (کچه %2$s)
+ انځورونه راپورتهشول
+ انځورونه په څټگرځولشوي نه دي
+ کارولشوي انځورونه
+ تېروتنه رامنځته شوه!
+ د ليکوال نوم دوديزول
+ ونډې
+ څېرمه
+ خبرتياوې
+ خبرتیاوې (لوستلشوې)
+ څېرمه خبرتياوې ښکارهکول
+ لړليک
+ زخيره کولو اجازه
+ راتلونکی
+ مخکنی
+ انځورونه
+ ځايونه
+ وېشنيزې
+ په کتابنښو کې ورگډول/لرېکول
+ کتابنښې
+ تاسو هېڅ کتابنښې نه دې ورگډېکړې
+ کتابنښې
+ په تېروتنې سره مې راپورتهکړی دی
+ زه نه پوهېدم چې دا به ټولو ته ښکاره شي
+ زه پوه شوم چې دا زما د پټنتيا لپاره بد دی
+ زما اند توپير وکړ، زه نه غواړم چې دا نور په ټوليزه توگه ښکاره شي
+ په بښنې سره دا انځور د يو پوهنغونډ لپاره خواپورې نه دی
+ هېڅ وېشنيزې نه دې ټاکل شوې
+ دا سيمه وپلټئ
+ اجازې غوښتنه
+ دا بيا هېڅکله مه پوښته
+ د ځای غوښتنې پوښتل
+ پای ته رسېږي په:
+ ټاکنيزېسيالۍ ښکارهکول
+ روانې ټاکنيزېسيالۍ وگورئ
+ پرېښول
+ تړل
+ د لاسوند پربنسټ انځور راخيستونکی کارول
+ د انځور پروسسکولو پرمهال تېروتنه رامنځته شوه. مهرباني وکړئ بيا هڅه وکړئ!
+ د سمون لپاره نښه ترلاسه کول
+ د وېشنيزې سمکتنې لپاره کينډۍ ورگډول
+ د %1$s وېشنيزې سمکتنې لپاره غوښتنهکول
+ وېشنيزې سمکتنې غوښتنهکول
+ وېشنيزې سمکتنې غوښتنه وشوه
+ د وېشنيزې سمکتنې غوښتنه کار نه کوي
+ د %1$s وېشنيزې سمکتنې لپاره غوښتنه وشوه
+ د %1$s سمکتنې لپاره غوښتنه نشي کېدای
+ د %1$s وېشنيزې سمکتنې لپاره غوښتنهکول
+ وشو
+ مننې لېږل: برياليتوب
+ %1$s ته مننه ولېږل شوه
+ %1$s د مننې لېږلو کې پاتې راغی
+ مننې لېږل: ناکامي
+ %1$s لپاره د مننې لېږل
+ ايا دا ډ لمېسلرښتو سره سم دی؟
+ ايا دا په سمه توگه ډلبندي شوي دي؟
+ ايا دا د منلو وړ دي؟
+ ايا تاسو غواړئ له ونډهوال نه مننه وکړئ؟
+ که دا انځور ټولگټی نه وي؛ نو ړنگېدو ته د نوماندولو لپاره يې په نه کليک وکړئ.
+ بل انځور
+ هو، ولې نه
+ هېڅ انځورونه کارېدلې نه دي
+ هېڅ انځورونه په څټگرځولشوي نه دي
+ هېڅ انځورونه راپورتهشوې نه دي
+ تاسو هېڅ نالوستې خبرتياوې نه لرئ
+ تاسو هېڅ لوستې خبرتياوې نه لرئ
+ يادښتونه شريکول د لارې
+ خپل پيغام بکس وگورئ
+ لوستي کتل
+ نالوستي کتل
+ د انځورونو راخيستلو پرمهال تېروتنه پېښه شوه
+ مهرباني وکړئ په تمه شئ...
+ لمېسلشوی
+ ليکوال
+ لمېسلرېښتې
+ ځای
+ کامرې نمونه
+ د لړۍ شمېرې
+ پوستغالی
+ کاريال د...لارې وېشل
+ انځور مالومات
+ هېڅ وېشنيزې ونه موندل شوې
+ نښان
+ ځکه چې دا
+ د وېشنيزو هممهالولو هڅهکول.
+ وېشنيزه هممهالول
+ بریالیتوب
+ وېشنيزې نشي ورگډېدای.
+ وېشنيزې هممهالول
+ د ښودنو هممهالولو هڅهکول.
+ ښودنې سمول
+ څرگنداوی هممهالول
+ نيونگ هممهالول
+ بریالیتوب
+ همغږيتوبونه %1$s ورگډ شول.
+ څرگنداوي ورگډل شول.
+ نيونگ ورگډ شو.
+ همغږيتوبونه نشي ورگډېدای.
+ څرگنداوی نشي ورگډېدای.
+ انځور وېشل په وسيله د
+ تياره
+ روښانه
+ ځایښودنه بلول
+ نور بارول
+ تاييدول
+ لارښوونې
+ ۱. لاندې ويکيليک وکاروئ:
+ ويکيليک ټينگدړې ته لمېسل
+ درول
+ بياپيلول
+ درولشوی
+ نور
+ کتابنښې
+ لاستهراوړنې
+ سرمشريزه
+ درجه:
+ شمېر:
+ درجه
+ کارن
+ شمېر
+ د سرمشريزې ځانبڼې په توگه اوڼل
+ ځانبڼې په توگه اوڼل کېږي، مهرباني وکړئ په تمه شئ
+ ځانبڼې ټولگه
+ ځانبڼې په توگه اوڼل
+ کلنی
+ اوونيز
+ هرمهاله
+ راپورتهکول
+ څېرمه
+ کارولشوی
+ زما رتبه
+ محدودې نښلېدا ونگډول چارنشوی!
+ ښه انځورونه
+ انځور ځی
+ نښکه
+ څرگنداوی
+ توکي
+ دوديز ټاکونکی
+ انځورونه نشته
+ وشو
+ پر شا کېدل
+ دوديزه انځور پاکوونکي ته ښه راغلاست
+ پهزړهپورې
+ تړل
+ اجازې ته اړتيا لري
+ کارن پېژنيال کتل
+ وېشنيزې سمول
+ پليکول
+ لهسرهاوڼل
+ ځای اومتوکي له ويکي کارنانو سره مرسته کوي چې ستاسو انځور موندلو او لا ډېر گټور کولو کې مرسته کوي.\nستاسو وروستۍ راپورتهکېدنې ځای نه لري.\nموږ تاسو ته سپارښته کوو چې خپل د ځای ښودنه د کامرې په کاريال په اوڼنو کې بل کړئ.\nله راپورته کولو مو مننه!
+ هېڅ ځای ونه موندل شو
+ ځای ورگډول
+ سپيناوی
+ ایپيآی کچه
+ اندرويد بلبڼه
+ سولگر جوړوونکی
+ سولگر نمونه
+ وسيلې نوم
+ شبکې ډول
+ له غبرگون ورکولو مو مننه
+ د غبرگون لېږلو پرمهال تېروتنه
+ ستاسو غبرگون څه دی؟
+ ستاسو غبرگون
+ د راپورتهکولو لپاره نه دی، په توگه نښه کول
+ د راپورتهکولو لپاره نه دی، په توگه نه نښه کول
+ د راپورتهکولو لپاره نه دی، په توگه نښه کول
+ د راپورتهکولو لپاره نه دی، په توگه نه نښه کول
+ ټاکلشوی انځور
+ راپور
+ سپين شاليد اوڼل
+ تور شاليد اوڼل
+ سرغړونې راپور
+ د دې کارن راپور ورکول
+ دا گڼون راپور کول
+ د دې کارن د بنديز غوښتنه
+ د ټول سکرين ټاکنې دريځ ته ښه راغلاست
+ د نژدېکولو او لرېکولو لپاره دوه گوتې وکاروئ.
+ انځور سمول
+ ځای سمول
+ ځای هممهالهشو
+ ځای لرېکول
+ ځای گواښنه لرېکول
+ راپورتهکېدنې
+ په تمه
+ پاتې راغلی
+ ځای اومتوکي نشي بارېدای
+ ړنگول تایید کړئ
+ ړنگول
+ ناگارل
+ دا ځای لادمخه يو انځور لري.
+ اورس گورو چې دا ځای کوم انځور لري.
+ د بارولو پرمهال تېروتنه
+ هېڅ کارهونه ونه موندل شوه
+ خونديځ
+ نورې ويکيگانې
+ دوتنې کارېدنې
گڼون
+ گڼون له منځه وړل
+ د گڼون له منځه وړلو گواښنه
+ ورکېدل يوه <b>وروستۍ چاره ده</b> او بايد <b>يوازې هغه وخت وکارول شي کله چې تاسو غواړئ د تل لپاره سمون پرېږدئ</b> او همدارنگه تر شوني بريده د ځان اړوند پخوانۍ اړيکې پټې کړئ.<br/><br/>په ويکيرسنۍ خونديځ کې گڼون ړنگول ستاسو د گڼون نوم بدلولو له لارې ترسره کېږي؛ ترڅو نور ستاسو ونډې ونه پېژني، دې چارې ته ورکېدل يا گڼون له منځه وړل وايي. <b>ورکېدل په پروژو کې په بشپړ ډول ستاسو د هويت او ونډو لرې کولو ډاډ نه درکوي</b>.
+ نيونگ
+ نيونگ ټينگدړې ته ولمېسل شو
+ سپړلو کې ښودل
+ څېرمه کې ښودل
+ جوړوونکی او راپورتهکوونکی: %1$s
+ د %1$s له خوا جوړ شوی او د %2$s له خوا راپورتهشوی
+ ړنگولو ته نومولشوې
diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml
index 7f45ab484..7957fed58 100644
--- a/app/src/main/res/values-pt-rBR/strings.xml
+++ b/app/src/main/res/values-pt-rBR/strings.xml
@@ -31,7 +31,7 @@
-->
Página do Commons no Facebook
- Código fonte do Commons no Github
+ Código fonte do Commons no Github
Logotipo do Commons
Site do Commons
Sair do selecionador de localização
@@ -55,18 +55,14 @@
- carregando arquivo
- carregando %1$d arquivos
-
- - (%1$d)
- - (%1$d)
-
Iniciando carregamentos
- - Processando %d carregamento
- - Processando %d carregamentos
+ - Processando %1$d carregamento
+ - Processando %1$d carregamentos
- - %d carregamento
- - %d carregamentos
+ - %1$d carregamento
+ - %1$d carregamentos
- Esta imagem será licenciada sob %1$s
@@ -110,7 +106,7 @@
Fila de carregamento (modo de conexão limitada ativado)
%1$s enviado!
Toque para ver os seu upload
- Carregando arquivo: %s
+ Carregando arquivo: %1$s
%1$s enviando!
Terminando o envio de %1$s
Falha ao enviar %1$s
@@ -157,6 +153,7 @@
Configurações
Criar conta
Imagens destacadas
+ As fotografias destacadas são imagens de fotógrafos e ilustradores altamente qualificados, que a comunidade da wiki Wikimedia Commons escolheu como as de melhor qualidade do \'\'site\'\'.
Seletor personalizado
Categoria
Revisão por pares
@@ -178,10 +175,10 @@
Licença padrão
Usar o título e descrição anterior
Tema
- Atribuição-CompartilhaIgual 4.0
- Atribuição 4.0
- Attribution-ShareAlike 3.0
- Attribution 3.0
+ Atribuição-CompartilhaIgual 4.0
+ Atribuição 4.0
+ Attribution-ShareAlike 3.0
+ Attribution 3.0
CC0
CC BY-SA 3.0
CC BY 3.0
@@ -242,15 +239,14 @@
Entre no nosso canal beta no Google Play e receba acesso prévio a novos recursos e correções de erros
Código 2FA
Quer realmente sair ?
- Falha na imagem de mídia
Nenhuma subcategoria encontrada
Nenhuma categoria pai encontrada
Mount Zao
Llamas
Ponte de Arco-Íris
Tulipa
- Bem-vindo à Wikipédia
- Direitos de autor são bem vindo
+ Bem-vindo à Wikipédia
+ Direitos de autor são bem vindo
Ópera de Sydney
Cancelar
Abrir
@@ -381,11 +377,10 @@
Apagar
Conquistas
Perfil
- Estatísticas
Agradecimentos recebidos
Imagens destacadas
Imagens via \"Locais próximos\"
- Nível
+ Nível %1$d
Imagens carregadas
Imagens não revertidas
Imagens usadas
@@ -472,11 +467,11 @@
Não foi possível solicitar a verificação de categoria para %1$s
Solicitando verificação de categoria para %1$s
Feito
- Enviando obrigado: Sucesso
- Enviado com sucesso graças para %1$s
- Não foi possível enviar %1$s agradecimentos
- Envio de agradecimento: falha
- Enviando obrigado por %1$s
+ Enviando obrigado: Sucesso
+ Enviado com sucesso graças para %1$s
+ Não foi possível enviar %1$s agradecimentos
+ Envio de agradecimento: falha
+ Enviando obrigado por %1$s
Isso segue as regras dos direitos autorais?
Isso é categorizado corretamente?
Isso é dentro do escopo?
@@ -502,15 +497,14 @@
Ver não lidas
Ocorreu um erro ao escolher imagens
Aguarde…
- As fotografias destacadas são imagens de fotógrafos e ilustradores altamente qualificados, que a comunidade da wiki Wikimedia Commons escolheu como as de melhor qualidade do \'\'site\'\'.
As imagens carregadas via \"Locais próximos\" são as imagens que são carregadas descobrindo sítios do mapa.
Esta funcionalidade permite que os editores enviem uma notificação de agradecimento aos usuários que fizerem edições úteis - usando uma pequena hiperligação de agradecimento na página do historial ou na de diferenças.
- Copiar para a mídia subsequente
+ Copiar para a mídia subsequente
Copiado!
Exemplos de imagens que podem ser carregadas na wiki Commons
Exemplos de imagens que não devem ser carregadas
Pular esta imagem
- Falha no Download!!. Não podemos fazer o download do arquivo sem permissão de armazenamento externo.
+ Falha no Download!!. Não podemos fazer o download do arquivo sem permissão de armazenamento externo.
Gerenciar etiquetas EXIF
Selecione quais etiquetas EXIF para manter nos carregados
Autor
@@ -520,8 +514,6 @@
Modelo de lente
Números de série
Software
- Acesso à localização da mídia negado
- É possível que não possamos obter automaticamente os dados de localização das imagens que você carregar. Por favor adicione a localização adequada para cada imagem antes de envia-las
Carregue fotos na wiki Wikimedia Commons, diretamente do seu celular. Baixe o aolicativo Commons agora: %1$s
Compartilhar aplicativo via...
Informação da imagem
@@ -577,7 +569,7 @@
Editar descrições e legendas
Compartilhar imagem via
Ainda não fez nenhuma contribuição
- %s ainda não fez nenhuma contribuição
+ %1$s ainda não fez nenhuma contribuição
Conta criada!
Texto copiado para a área de transferência
Notificação marcada como lida
@@ -586,7 +578,7 @@
Existe
Precisa de foto
Tipo de local:
- Ponte, museu, hotel etc.
+ Ponte, museu, hotel etc.
Algo deu errado com a entrada, você deve redefinir sua senha!
MÍDIA
CLASSES INFANTIS
@@ -625,7 +617,7 @@
5. Cole o wikitexto no local apropriado.
6. Editar o wikitexto para o posicionamento apropriado, se necessário. Para mais informações, veja <a href=\"https://en.wikipedia.org/wiki/Wikipedia:Manual_of_Style/Images#How_to_place_an_image\">aqui</a>.
7. Publique o artigo
- Copiar wikicode para a área de transferência
+ Copiar wikicode para a área de transferência
pausar
continuar
Pausado
@@ -680,7 +672,7 @@
Mostrar no aplicativo de mapa
Editar localização
A visualização da imagem do seletor de local
- A sombra da visualização da imagem do seletor de local
+ A sombra da visualização da imagem do seletor de local
Localização da imagem
Verifique se a localização está correta
Etiqueta
@@ -692,7 +684,7 @@
Voltar
Boas-vindas ao seletor de imagens personalizado
Este seletor mostra quais imagens você já carregou para o Commons.
- Diferente da imagem à esquerda, a da direita possui o logotipo do Commons, o que indica que o envio dela já está concluído.\n Toque e segure para pré-visualizar a imagem.
+ Diferente da imagem à esquerda, a da direita possui o logotipo do Commons, o que indica que o envio dela já está concluído.\n Toque e segure para pré-visualizar a imagem.
Ótimo
Esta imagem já foi enviada para Commons.
Ignorar
@@ -706,8 +698,9 @@
O Wiki Loves Monuments é um concurso internacional organizado pela Wikimedia sobre fotografias de monumentos
Precisa de permissão
Os mapas próximos precisam ler ESTADO DO TELEFONE para funcionar corretamente
- Contribuições do usuário: %s
- Conquistas do usuário: %s
+ Permissão opcional: Obter a localização atual de sugestões de categoria
+ Contribuições do usuário: %1$s
+ Conquistas do usuário: %1$s
Ver página de usuário
Editar representações
Editar categorias
@@ -718,7 +711,7 @@
Os dados de localização ajudam os utilizadores da wiki a encontrar a sua imagem, tornando-a muito mais útil.\nOs seus carregamentos recentes não têm localização.\nSugerimos que você ative a localização nas configurações do aplicativo da câmera.\nObrigado pelo carregamento!
Não foi encontrada nenhuma localização
Que tal adicionar o local onde a imagem foi tirada?\nOs dados de localização ajudam os editores da wiki a encontrarem a sua fotografia, tornando-a muito mais útil.\nObrigado!
- Adicionar local
+ Adicionar local
Remova deste e-mail qualquer informação que você não se sinta à vontade para compartilhar publicamente. Além disso, esteja ciente de que seu endereço de e-mail com o qual você está postando e o nome associado e a foto do perfil serão visíveis publicamente.
Detalhes
As conquistas estão disponíveis apenas na versão de produção, verifique a documentação do desenvolvedor.
@@ -739,8 +732,8 @@
Remover marcação de como não sendo para carregamento
Marcado para não ser carregado
Remover marcação para não ser carregado
- Mostrar imagens já processadas
- Ocultando as imagens já processadas
+ Mostrar imagens já processadas
+ Ocultando as imagens já processadas
Não foram encontradas mais imagens
Esta imagem já foi carregada
Não é possível selecionar esta imagem para carregamento
@@ -765,15 +758,15 @@
Localização removida!
Não há aplicações disponíveis para abrir arquivos GPX
Salvo com sucesso
- Deseja abrir o arquivo GPX?
- Deseja abrir o arquivo KML?
- Falha ao salvar arquivo KML.
- Falha ao salvar o arquivo GPX.
- Salvar arquivo KML
- Salvar arquivo GPX
+ Deseja abrir o arquivo GPX?
+ Deseja abrir o arquivo KML?
+ Falha ao salvar arquivo KML.
+ Falha ao salvar o arquivo GPX.
+ Salvar arquivo KML
+ Salvar arquivo GPX
- - %d imagem selecinada
- - %d imagens selecionadas
+ - %1$d imagem selecinada
+ - %1$d imagens selecionadas
Escreva algo sobre o item %1$s. Isso será visivel publicamente.
Envios
diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml
index 721528c7b..47e058283 100644
--- a/app/src/main/res/values-pt/strings.xml
+++ b/app/src/main/res/values-pt/strings.xml
@@ -1,5 +1,6 @@
Página do Facebook da Commons
- Código Fonte do Github da Commons
+ Código Fonte do Github da Commons
Logótipo da Commons
Site da Web da Commons
Sair do selecionador de localização
@@ -44,29 +45,25 @@
Estado do Local
Imagem do Dia
- - a carregar %1$d ficheiro
- - a carregar %1$d ficheiros
+ - a enviar %1$d ficheiro
+ - a enviar %1$d ficheiros
-
- - (%1$d)
- - (%1$d)
-
- A iniciar carregamentos
+ A iniciar envios
- - A processar %d carregamento
- - A processar %d carregamentos
+ - A processar %1$d envio
+ - A processar %1$d envios
- - %d carregamento
- - %d carregamentos
+ - %1$d envio
+ - %1$d envios
- Esta imagem será licenciada com a %1$s
- Estas imagens serão licenciadas com a %1$s
- - %1$d carregamento
- - %1$d carregamentos
+ - %1$d envio
+ - %1$d envios
- A receber conteúdo partilhado. O processamento da imagem pode demorar algum tempo, dependendo do tamanho da mesma e do seu dispositivo
@@ -83,8 +80,8 @@
Envio em progresso
Nome de utilizador
Palavra-passe
- Entrar na sua conta da wiki Commons Beta
- Entrar
+ Inicie a sessão na sua conta de Commons Beta
+ Iniciar sessão
Esqueceu-se da palavra-passe?
Registar-se
A iniciar sessão
@@ -99,27 +96,27 @@
O carregamento de mais de três imagens funciona de maneira mais fiável quando a otimização da bateria está desligada. Desligue a otimização da bateria para a aplicação Commons nas configurações, de forma a ter uma experiência de carregamento mais fluida. \n\nPossíveis passos para desativar a otimização da bateria:\n\nEtapa 1: premir o botão \'Configurações\' abaixo.\n\nEtapa 2: mudar de \'Não otimizado\' para \'Todas as aplicações\'.\n\nEtapa 3: pesquisar \"Commons\" ou \"fr.free.nrw.commons\".\n\nEtapa 4: premir esta e selecionar \'Não otimizar\'.\n\nEtapa 5: pressionar \'Concluído\'.
Falha na autenticação. Por favor faça login novamente.
Carregamento iniciado!
- Fila de carregamento (modo de ligação limitada ativado)
- %1$s carregado!
- Toque para ver o seu carregamento
- A carregar o ficheiro %s
- A carregar %1$s
- A terminar o carregamento de %1$s
- O carregamento de %1$s falhou
- Carregamento de %1$s em pausa
+ Envio em fila (modo de ligação limitada ativado)
+ %1$s enviado!
+ Toque para ver o seu envio
+ A enviar o ficheiro %1$s
+ A enviar %1$s
+ A terminar o envio de %1$s
+ O envio de %1$s falhou
+ Envio de %1$s pausado
Tocar para ver
Tocar para ver
- Carregamentos recentes
- Em espera
- Falhado
- %1$d%% transferido
- A carregar
+ Meus Envios Recentes
+ Em fila
+ Falhou
+ %1$d%% concluído
+ A enviar
Da galeria
- Tirar foto
+ Tirar fotografia
Nas redondezas
- Carregamentos
- Copiar ligação
- A ligação foi copiada para a área de transferência
+ Meus envios
+ Copiar hiperligação
+ A hiperligação foi copiada para a área de transferência
Partilhar
Ver página do ficheiro
Legenda (obrigatória)
@@ -132,13 +129,14 @@
Tem de fornecer o seu código de autenticação de dois fatores.
Foi enviado um código de verificação de autenticação para o seu endereço de correio eletrónico. Por favor, forneça o código para iniciar a sessão.
O início de sessão falhou
- Carregar
+ Enviar
Dê um nome a este conjunto
Modificações
Carregar
Pesquisar categorias
Procurar elementos que o seu conteúdo multimédia retrata (montanha, o Taj Mahal, etc.)
Gravar
+ Menu de fluxo
Atualizar
Lista
(Ainda não foi carregado nenhum ficheiro)
@@ -148,9 +146,10 @@
%1$s não tem nenhuma classe progenitora
Adicione categorias para tornar as suas imagens mais fáceis de encontrar na wiki Wikimedia Commons.\nComece a escrever para adicionar categorias.
Categorias
- Configurações
+ Definições
Registar-se
Imagens destacadas
+ As fotografias destacadas são imagens de fotógrafos e ilustradores altamente qualificados, que a comunidade da wiki Wikimedia Commons escolheu como as de melhor qualidade do \'\'site\'\'.
Seletor personalizado
Categoria
Revisão por pares
@@ -172,10 +171,10 @@
Licença padrão
Usar título e descrição anteriores
Tema
- Atribuição-CompartilhaIgual 4.0
- Atribuição 4.0
- Atribuição–CompartilhaIgual 3.0
- Atribuição 3.0
+ Atribuição-CompartilhaIgual 4.0
+ Atribuição 4.0
+ Atribuição–CompartilhaIgual 3.0
+ Atribuição 3.0
CC0
CC BY-SA 3.0
CC BY 3.0
@@ -228,6 +227,7 @@
Descrição
Discussão
Autor
+ Carregador
Data de carregamento
Licença
Coordenadas
@@ -235,16 +235,16 @@
Torne-se um Testador Beta
Opte pelo nosso canal beta no Google Play e obtenha acesso antecipado às novas funcionalidades e às correções de erros
Código de autenticação de dois fatores
+ Código de verificação do e-mail
Deseja realmente sair?
- Falha na imagem multimédia
Não foi encontrada nenhuma subcategoria.
Não foi encontrada nenhuma categoria mãe
Monte Zao
Lamas
Ponte do Arco-Íris
Túlipa
- Boas-vindas Wikipédia
- Boas-vindas Direitos de autor
+ Boas-vindas Wikipédia
+ Boas-vindas Direitos de autor
Ópera de Sydney
Cancelar
Abrir
@@ -255,6 +255,7 @@
Sobre
Configurações
Comentários
+ Comentários via GitHub
Sair
Explicação
Notificações
@@ -294,8 +295,10 @@
Copiar o texto wiki para a área de transferência
O texto wiki foi copiado para a área de transferência
A identificação de locais próximos pode não funcionar devidamente; o serviço de localização não está disponível.
+ Internet indisponível. A mostrar apenas os locais em cache.
Acesso à localização negado. Para usar esta funcionalidade defina a sua localização manualmente, por favor.
É necessária permissão para mostrar uma lista dos locais próximos
+ É necessária a permissão para exibir uma lista de imagens próximas
Indicações
Wikidata
Wikipédia
@@ -364,6 +367,7 @@
Partilhar aplicação
Rodar
Não foi possível carregar locais próximos
+ Não há fotografias nesta área
Não existem locais próximos
Erro ao procurar monumentos próximos.
Não há pesquisas recentes
@@ -376,12 +380,11 @@
Realizações
Perfil
Medalhas
- Estatísticas
Agradecimentos recebidos
Imagens destacadas
Imagens via \"Locais próximos\"
- Nível %d
- %s (Nível %s)
+ Nível %1$d
+ %1$s (Nível %2$s)
Imagens carregadas
Imagens não revertidas
Imagens usadas
@@ -441,7 +444,7 @@
Não voltar a perguntar isto
Pedir autorização de localização
Pedir permissões de localização quando for necessário para a funcionalidade do cartão de notificação de proximidade.
- Alguma coisa correu mal, não conseguimos obter as conquistas.
+ Alguma coisa correu mal, não conseguimos obter as conquistas.
As suas contribuições foram tantas que o nosso sistema de cálculo de realizações não consegue processá-las. Essa é a realização máxima.
Termina em:
Apresentar campanhas
@@ -469,11 +472,11 @@
Não foi possível pedir verificação de categoria para %1$s
A pedir verificação de categoria para %1$s
Concluído
- A enviar agradecimento: Êxito
- Foi enviado um agradecimento a %1$s
- Não foi possível enviar agradecimento a %1$s
- A enviar agradecimento: Falhou
- A enviar agradecimento por %1$s
+ A enviar agradecimento: Êxito
+ Foi enviado um agradecimento a %1$s
+ Não foi possível enviar agradecimento a %1$s
+ A enviar agradecimento: Falhou
+ A enviar agradecimento por %1$s
Isto respeita as regras dos direitos de autor?
Isto está categorizado corretamente?
Isto está enquadrado no âmbito?
@@ -500,15 +503,14 @@
Ver não lidas
Ocorreu um erro ao escolher imagens
Aguarde, por favor...
- As fotografias destacadas são imagens de fotógrafos e ilustradores altamente qualificados, que a comunidade da wiki Wikimedia Commons escolheu como as de melhor qualidade do \'\'site\'\'.
As imagens carregadas via \"Locais próximos\" são as imagens que são carregadas descobrindo locais do mapa.
Esta funcionalidade permite que os editores enviem uma notificação de agradecimento aos utilizadores que fizerem edições úteis - usando uma pequena hiperligação de agradecimento na página do historial ou na de diferenças.
- Copiar para a mídia subsequente
+ Copiar para a mídia subsequente
Copiado
Exemplos de imagens que podem ser carregadas na wiki Commons
Exemplos de imagens que não devem ser carregadas
Saltar esta imagem
- O descarregamento falhou! Não podemos descarregar o ficheiro sem permissão de armazenagem externa.
+ O descarregamento falhou! Não podemos descarregar o ficheiro sem permissão de armazenagem externa.
Gerir etiquetas EXIF
Selecionar as etiquetas EXIF a manter nos carregamentos
Autor
@@ -518,8 +520,6 @@
Modelo da lente
Números de série
\'\'Software\'\'
- Acesso à localização de multimédia negado
- Podemos não conseguir obter automaticamente os dados de localização das fotografias que carregar. Adicione a localização apropriada de cada fotografia antes de a enviar, por favor
Carregue fotografias na wiki Wikimedia Commons, diretamente do seu telemóvel. Descarregue a aplicação Commons agora: %1$s
Partilhar aplicação por...
Informação da imagem
@@ -575,7 +575,7 @@
Editar descrições e legendas
Partilhar imagem via
Ainda não fez nenhuma contribuição
- %s ainda não fez nenhuma contribuição
+ %1$s ainda não realizou quaisquer contribuições
Conta criada!
Texto copiado para a área de transferência
Notificação marcada como lida
@@ -584,7 +584,7 @@
Existe
Necessita fotografia
Tipo de local:
- Ponte, museu, hotel, etc.
+ Ponte, museu, hotel, etc.
Ocorreu um erro ao iniciar sessão. Tem de redefinir a sua palavra-passe!
MULTIMÉDIA
CLASSES DESCENDENTES
@@ -626,7 +626,7 @@
5. Inserir o texto wiki no local apropriado.
6. Editar o texto wiki para colocar no posicionamento apropriado, se necessário. Para mais informações, ver <a href=\"https://en.wikipedia.org/wiki/Wikipedia:Manual_of_Style/Images#How_to_place_an_image\">aqui</a>.
7. Publicar o artigo
- Copiar código wiki para a área de transferência
+ Copiar código wiki para a área de transferência
pausar
continuar
Em pausa
@@ -693,7 +693,7 @@
Voltar
Bem-vindo ao seletor de imagens personalizado
Este seletor mostra-lhe que imagens já carregou na wiki Commons.
- Ao contrário da imagem à esquerda, a imagem à direita tem o logótipo da wiki Commons que indica que ela já foi carregada.\n Tocar e manter para uma antevisão da imagem.
+ Ao contrário da imagem à esquerda, a imagem à direita tem o logótipo da wiki Commons que indica que ela já foi carregada.\n Tocar e manter para uma antevisão da imagem.
Excecional
Esta imagem já foi carregada na wiki Commons.
Por motivos técnicos, o aplicativo não pode fazer upload confiável de mais de %1$d fotos de uma só vez. O limite de upload de %1$d foi excedido por %2$d .
@@ -707,8 +707,9 @@
Wiki Loves Monuments é um concurso internacional de fotografias de monumentos, organizado pela Wikimedia
Necessitar de Permissão
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
+ Permissão opcional: obter a localização atual para sugestões de categoria
+ Contribuições do utilizador: %1$s
+ Realizações do utilizador: %1$s
Ver perfil de utilizador
Editar elementos retratados
Editar categorias
@@ -719,7 +720,7 @@
Os dados de localização ajudam os utilizadores da wiki a encontrar a sua imagem, tornando-a muito mais útil.\nOs seus carregamentos recentes não têm localização.\nSugerimos que ative a localização nos parâmetros da aplicação da sua câmara.\nObrigado pelo carregamento!
Não foi encontrada nenhuma localização
Que tal adicionar o local onde a imagem foi tirada?\nOs dados de localização ajudam os editores da wiki a encontrarem a sua fotografia, tornando-a muito mais útil.\nObrigado!
- Adicionar localização
+ Adicionar localização
Remova desta mensagem de correio todas as informações que não se sinta à vontade em partilhar publicamente, por favor. Adicionalmente, esteja consciente de que o seu endereço de correio eletrónico, com o qual está a fazer esta publicação, e o nome e imagem de perfil a ele associados, serão visíveis pelo público geral.
Detalhes
As conquistas só estão disponíveis na versão de produção. Consulte a documentação para programadores.
@@ -740,8 +741,8 @@
Remover marcação de como não sendo para carregamento
A marcar como não sendo para carregamento
A desmarcar como não sendo para carregamento
- Mostrar imagens já processadas
- A ocultar as imagens já processadas
+ Mostrar imagens já processadas
+ A ocultar as imagens já processadas
Não foram encontradas mais imagens
Esta imagem já foi carregada
Não é possível selecionar esta imagem para carregamento
@@ -764,29 +765,55 @@
São necessárias permissões para a funcionalidade
Aprenda a escrever uma descrição útil
Aprenda a escrever uma legenda útil
- Ver as suas realizações
+ Ver as suas realizações
Editar imagem
Editar localização
Localização actualizada!
Remover Localização
+ Remover Aviso de Localização
Localização removida!
Agradecer ao autor
Erro no envio de agradecimento ao autor.
A sua autenticação expirou. Por favor, inicie a sessão novamente.
Nenhuma aplicação disponível para abrir os ficheiros GPX
Ficheiro guardado com sucesso
- Deseja abrir o ficheiro GPX?
- Deseja abrir o ficheiro KML?
- Guardar Ficheiro KML
- Guardar Ficheiro GPX
+ Deseja abrir o ficheiro GPX?
+ Deseja abrir o ficheiro KML?
+ Não foi possível guardar o ficheiro KML.
+ Não foi possível guardar o ficheiro GPX.
+ Guardar Ficheiro KML
+ Guardar Ficheiro GPX
- - %d imagem selecionada
- - %d imagens selecionadas
+ - %1$d imagem selecionada
+ - %1$d imagens selecionadas
- Reporte um problema sobre este item na Wikidados
+ Nota sobre múltiplos envios
+ Reporte um problema sobre este item no Wikidata
Por favor, insira alguns comentários
Discussão
Outro problema ou informação (por favor, explique em baixo).
O seu comentário é publicado na seguinte página da wiki: <a href=\"https://commons.wikimedia.org/wiki/Commons:Mobile_app/Feedback\">Commons:Mobile app/Feedback</a>
+ A cancelar todos os envios...
+ Envios
+ Pendente
+ Falhou
+ Não foi possível carregar os dados do local
+ Eliminar Pasta
+ Confirmar Eliminação
+ Eliminar
+ Cancelar
+ Erro ao carregar
+ Não foram encontradas utilizações
+ Commons
+ Outras wikis
+ Utilização de ficheiro
+ Conta
+ Legenda
+ Legenda copiada para a área de transferência
+ Parabéns, todas as fotografias neste álbum foram envidas ou marcadas como \'não para enviar\'.
+ Mostrar no Explorador
+ Mostrar nas Proximidades
+ Criada e enviada por: %1$s
+ Criada por %1$s e enviada por %2$s
Nomeada para Eliminação
diff --git a/app/src/main/res/values-qq/error.xml b/app/src/main/res/values-qq/error.xml
index e48ac7c9d..9fffe2e0f 100644
--- a/app/src/main/res/values-qq/error.xml
+++ b/app/src/main/res/values-qq/error.xml
@@ -1,9 +1,11 @@
Title of dialog to show when the app crashes
+ Shown when the application crashed.
Prompt asking people to enter info about what they were doing when the app crashed
Toast to be displayed once someone sends an error report thanking them.\n{{Identical|Thank you}}
diff --git a/app/src/main/res/values-qq/strings.xml b/app/src/main/res/values-qq/strings.xml
index 7b521a8ac..f19370355 100644
--- a/app/src/main/res/values-qq/strings.xml
+++ b/app/src/main/res/values-qq/strings.xml
@@ -6,6 +6,7 @@
* Annick green
* Cabal
* Googology
+* H78c67c
* LeGuyanaisPure
* Liuxinyu970226
* Madhurgupta10
@@ -26,34 +27,72 @@
* Ата
-->
+ Alternative text for image link.
+ Alternative text for image link.
+ Alternative text for image.
+ Alternative text for image link.
+ Alternative text.
{{Identical|Submit}}
+ Seems to be unused.
+ Alternative text for button.
+ Alternative text for button.
+ Alternative text for button.
+ Alternative text for button.
+ List title.
+ Seems to be unused.
+ Alternative text.
+ {{Identical|Description}}
+ Alternative text.
{{identical|All}}
- Reba ishakiro
- Status text about number of uploads left.\n* %1$d represents number of uploads left, including current one
- See the current issue [https://phabricator.wikimedia.org/T267142 T267142] tracked in Phabricator about the <code><nowiki>|zero=</nowiki></code> option currently not supported on Translatewiki.net with the custom <code><nowiki>{{PLURAL}}</nowiki></code> rules used by this project for Android, using a non-MediaWiki syntax.
+ Seems to be unused.
+ Alternative text.
+ Seems to be unused.
+ Alternative text.
+ Status text about number of uploads left.\n* %1$d represents number of uploads left, including the current one
+ {{optional}}\nShows the number of contributions. (Lego.)
+ Widget title.
+ Widget title.
{{Identical|Upload}}
- Text label telling user the license of the current upload in progress. %1$s refers to appropriate display text for the chosen CC license
+ Text label telling user the license of the current upload in progress. %1$s refers to appropriate display text for the chosen CC license.
+ Counter in widget.
+ Seems to be unused.
{{Identical|Explore}}
+ Seems to be unused.
{{Identical|General}}
+ A title of an option group in the settings.
+ A title of an option group in the settings.
The name of the application. A short form of \"Wikimedia Commons\". It is used in the app\'s launcher icon.\n{{Identical|Wikimedia Commons}}
Label for menu item to show settings.\n{{Identical|Settings}}
+ Label of option to upload to Commons when sharing from another app.
+ Title in window.
{{Identical|Username}}
{{Identical|Password}}
+ Log in call to action in testing mode.
Button to have people log in.\n{{Identical|Log in}}
+ Message shown on the login screen to request a new password.\n{{Identical|Forgot password}}
{{Identical|Sign up}}
Title of dialog box shown while logging in.\n{{Identical|Logging in}}
Contents of dialog box shown while logging in.\n{{Identical|Please wait}}
+ A string in a progress dialog.
+ A string in a progress dialog.
Message when login has succeeded.\n{{Identical|Login successful}}
Message when login has failed.\n{{Identical|Login failed}}
+ Error message.
+ Error message.
+ An alert when uploading multiple files.
+ An alert when uploading multiple files.
Message shown to user when authentication to Commons fails. Shown as a small toast that disappears after a while.
Toast message when uploading has started
+ A notice after queueing an upload.
Title for notification about upload being completed. %1$s represents file name.\n{{Identical|Uploaded}}
Text for notification about upload being completed.
Title for notificiation about upload being started. %1$s represents file name
Title for notification about upload being in progress. %1$s represents file name\n{{Identical|Uploading}}
Title for notification about upload being completed. %1$s represents file name
Title for notification about upload failing. %1$s represents file name
+ A notice that the current upload is paused.\n\n%1$s is the media\'s display title.
Text for notification about upload being completed.
+ Subtitle for {{msg-wm|Commons-android-strings-upload paused notification title}}.
Title for screen showing my contributions.
Show status of upload as currently queued.\n{{Identical|Queue}}
Show status of upload as failed.\n{{Identical|Failed}}
@@ -63,12 +102,19 @@
Action bar item to allow the user to take a picture to upload
{{Identical|Nearby}}
Display name for user\'s contributions in the phone\'s settings sync screen.\n{{Identical|My upload}}
+ Menu item.
+ Notice after copying a link.
{{Identical|Share}}
+ Menu item.
{{Identical|Title}}
+ A notice during the upload process.
{{Identical|Description}}
+ Label of the caption of the image.
Error message shown to user when login can not be completed due to network issues.
Error message shown to user when login can not be completed because the user has attempted to login too many times in a short period of time, and hence been throttled.
Error message shown to user when login can not be completed because the user is blocked on Wikimedia Commons
+ An error message in the login screen.
+ An error message in the login screen.
{{Identical|Login failed}}
{{Identical|Upload}}
Hint for the textbox that lets user type the Base title for the set of multiple images being uploaded. Example: If the user types \'Visit to Kolkata\' in this text box, the images will all be titled as \'Visit to Kolkata - 1\', \'Visit to Kolkata - 2\', etc.
@@ -77,14 +123,23 @@
This message is followed by a list of the categories.\n{{Identical|Search category}}
{{Doc-commons-app-depicts}}
Hint text on menu item to save selected categories.\n{{Identical|Save}}
+ Alternative text.
{{Identical|Refresh}}
This is an action button, usually a verb (just like Continue, Cancel, Delete, Search, and so on).\n{{Identical|List}}
+ Notice in the Contributions screen when the user didn\'t upload anything. (Lego.)
Message shown to the user when no category matching what they searched for was found. %1$s represents the category name
+ %1$s - search query.
+ %1$s is a Wikidata item name.
+ %1$s is a Wikidata item name.
Text explaining to users why and how to add categories to images. Users can also tap this message to skip adding categories.
Title for the activity where Categories are being selected to add to the Image.\n{{Identical|Category}}
{{Identical|Settings}}
{{Identical|Sign up}}
+ Title of panel that appears after tapping a badge in the achievements tab.
+ Explanation about the featured images screen.
+ Activity title.
{{Identical|Category}}
+ Activity title.
{{Identical|About}}
License and legal notice. %1$s is {{msg-wm|Commons-android-strings-trademarked name}}
{{Ignored}}\n\nUsed in {{msg-wm|Commons-android-strings-about license}}\n\n{{Identical|Wikimedia Commons}}
@@ -93,13 +148,22 @@
{{Identical|Credit}}
{{Identical|About}}
Menu item text that prompts user to send feedback to WMF via email
+ An error message when trying to send an email fails.
+ Content provider title.
Message shown on contributions list during first sync.
Message shown on contribution list during non-first sync if no uploads present.
Menu item text prompting user to retry a failed upload.\n{{Identical|Retry}}
Menu item text prompting user to cancel and delete a failed upload.\n{{Identical|Cancel}}
+ Placeholder text in the top search box in the language search dialog.
+ A title in the language search dialog.
+ A title in the language search dialog.
+ License text.
Menu item text prompting user to download a selected photo or media file locally.\n{{Identical|Download}}
{{Identical|License}}
This is a button text. Concise wording is preferred (e.g. \"&\" instead of \"and\"), where possible. It should ideally be rendered in one line, even on small devices.
+ Settings menu item.
+ A license name.
+ A license name.
Attribution-Sharelike License display name.
CC Attribution License display name.
CC0 License display name.
@@ -107,38 +171,71 @@
{{Identical|CC BY}}
{{Identical|CC BY-SA}}
{{Identical|CC BY}}
+ Tutorial text.
+ Tutorial text.
+ Tutorial text.
+ Tutorial text.
+ Tutorial text.
+ Tutorial text.
Capitals not required
+ Tutorial text.
+ Tutorial text.
+ Tutorial text.
+ Tutorial text.
+ Tutorial text.
+ Tutorial text.
+ Tutorial text.
Message inviting users to contribute their images.\n\nFollowed by {{msg-wm|Commons-android-strings-welcome wikipedia subtext}}.
Preceded by {{msg-wm|Commons-android-strings-welcome wikipedia text}}.
Message explaining the educational benefit of contributing images.
Message explaining what kind of images not to submit, without a received permission from the copyright holder.
Message asking user if they understand what kinds of images to upload.
Button text for confirming the user understands what kinds of images to upload.\n{{Identical|Yes}}
-
+ A link at the bottom of the last page of the tutorial.
Label for categories list in media detail panel.\n{{Identical|Category}}
Placeholder for categories list in media detail panel, while loading from network.\n{{Identical|Loading}}
Placeholder for categories list in media detail panel, if no categories found.\n{{Identical|None selected}}
+ Shown instead of a caption when a caption is not found.
{{Identical|No description}}
+ Shown on a file description screen when the file page has no talk page.
+ Shown on a file page.
Label for menu item that refreshes current list of images.\n{{Identical|Refresh}}
+ Panel title.
+ Explanation for storage permission request.
+ Explanation for permission request.
+ Panel title.
+ Panel title.
+ Explanation for permission request.
{{Identical|OK}}
{{Identical|Warning}}
+ Popup text.
{{Identical|Upload}}
{{Identical|Yes}}
{{Identical|No}}
+ Label of the caption of the image.
{{Identical|Title}}
{{Doc-commons-app-depicts}}
{{Identical|Description}}
{{Identical|Discussion}}
{{Identical|Author}}
+ Label on a file page.
+ Label on a file page.
{{Identical|License}}
{{Identical|Coordinate}}
Describes \"coordinates\".
+ Settings menu item.
+ Settings menu item explanation.
+ Login form label.
+ Login screen command.
+ Confirmation string.
+ Notice when searching for subcategories.
+ Notice when searching for subcategories.
This is a mountain between Yamagata and Miyagi Prefectures in Japan, see [[d:Q167951]] for details.
An animal. See [[:d:Q42569|Wikidata item Q42569]] for a list of possible translations.
A bridge in Japan. See [[:d:Q1046736|Wikidata item Q1046736]] for a list of possible translations.
A flower. See [[:d:Q93201|Wikidata item Q93201]] for a list of possible translations.
- Description of [https://github.com/commons-app/apps-android-commons/blob/main/app/src/main/res/drawable-hdpi/welcome_wikipedia.webp the image] displayed on the welcome screen to illustrate {{msg-wm|Commons-android-strings-welcome wikipedia text}} and {{msg-wm|Commons-android-strings-welcome wikipedia subtext}}.
- Description of [https://github.com/commons-app/apps-android-commons/blob/main/app/src/main/res/drawable-hdpi/welcome_copyright.webp the image] displayed on the welcome screen to illustrate {{msg-wm|Commons-android-strings-welcome copyright text}} and {{msg-wm|Commons-android-strings-welcome copyright subtext}}.
+ Description of [https://github.com/commons-app/apps-android-commons/blob/main/app/src/main/res/drawable-hdpi/welcome_wikipedia.webp the image], which presents a schematic drawing of a Wikipedia page. It\'s displayed on the welcome screens to illustrate these messages:\n* {{msg-wm|Commons-android-strings-welcome wikipedia text}}\n* {{msg-wm|Commons-android-strings-welcome wikipedia subtext}}
+ Description of [https://github.com/commons-app/apps-android-commons/blob/main/app/src/main/res/drawable-hdpi/welcome_copyright.webp the image] displayed on the welcome screen to illustrate these messages:\n* {{msg-wm|Commons-android-strings-welcome copyright text}}\n* {{msg-wm|Commons-android-strings-welcome copyright subtext}}
A building in the city of Sydney. See [[:d:Q45178|Wikidata item Q45178]] for a list of possible translations.
{{Identical|Cancel}}
{{Identical|Open}}
@@ -147,70 +244,592 @@
{{Identical|Upload}}
{{Identical|Nearby}}
{{Identical|About}}
+ A button that leads the user to change permissions when something is not allowed.
+ {{Identical|Feedback}}
+ Link title.
+ Menu item.
{{Identical|Tutorial}}
{{Identical|Notification}}
{{Identical|Review}}
+ A notice in the nearby screens.
+ Nearby info menu item.
+ Nearby info menu item.
+ Nearby info menu item.
+ Information box for writing descriptions.
+ Information box for writing descriptions.
+ Error message title.
+ Error example.
+ Error example.
+ Error example.
+ Error example.
+ Error.
+ Verification question.
{{Identical/Connection Error}}
+ Error message.
+ Error message.
+ Error.
+ A section title in preferences.
+ Setting.
+ Setting description.
+ Log in screen title.
+ Setting.
+ Setting description.
+ Error message.
+ Error message.
+ Button on image page.
+ Notice shown on a file page if a page named \"Commons:Deletion requests/File:\'\'Filename\'\'\" exists.
<u>See webpage for details</u>
{{Identical|Skip}}
{{Identical|Log in}}
+ Confirmation question.
+ Notice.
+ Notice.
+ Button label.
+ Notice.
+ Error message.
+ Error message.
+ Error message.
+ Error message.
+ Error message.
+ Button at the bottom of the map.
{{Identical|Wikidata}}
{{Identical|Wikipedia}}
+ Button at the bottom of the map.
Link text to rating the app in the apps market.\n\nThe word \"rate\" is supposed to be translated the same way as in the market app.
{{Identical|FAQ}}
+ Link from the About screen.
+ Button at the top of the Welcome tutorial.
+ Error message.
+ Error message.
+ Error message.
+ Notice.
Link text with underline.\n{{Identical|Translate}}
{{Identical|Language}}
+ Explanation.
+ Button.
{{Identical|Cancel}}
{{Identical|Retry}}
\"Search this area\" refers to {{msg-wm|Commons-android-strings-search this area}}.
+ Notice in showcase.
+ Notice in showcase.
+ Notice in showcase.
+ Error message in the bookmarks screen.
+ Error message in the bookmarks screen.
+ %1$s is a username.
+ Describes the user.
+ Notice.
+ App widget heading.
{{Identical|Search}}
+ Label.
{{Identical|Search}}
+ Label.
+ Label.
+ Label in language search screen.
+ Error message.
{{Doc-commons-app-depicts}}
- {{Identical|Map}}
+ Tab title in the search screen.
+ Tab title in the search screen.
+ Tab title in the search screen.
+ Tab title in the \"Explore\" view. Shows featured media.
+ Tab title in the \"Explore\" view. Shows media uploaded via mobile.
+ Tab title in the \"Explore\" view. Shows a map of your area with photos tagged with coördinates nearby.\n\n{{Identical|Map}}
Message shown in a dialog (\"success toast\") after a contribution by the user.\n\nParameter:\n* %1$s - title of the target page on Wikidata
+ Error message.
+ Menu item.
+ Notice.
+ Tab title in the search screen.
+ Question in quiz.
{{Identical|Question}}
+ In the quiz, a third option in addition to \"Yes\" and \"No\".
{{Identical|Result}}
+ Warning.
+ Question that leads to quiz.
+ Tutorial.
+ Tutorial.
+ Tutorial.
+ Tutorial.
+ Tutorial.
+ %1$s is a number.
+ Button in quiz.
+ Instruction.
+ Error.
+ Notice at the end of the quiz.
+ Button in location picker.
+ Shown after answering a question correctly.
+ Shown after answering a question incorrectly.
+ Quiz question.
+ About screen button.
+ Seems to be unused.
+ Error message.
+ Notice.
+ Notice (toast) when the Nearby map shows a region in which there are no places at all.
+ Error message.
+ Label.
+ Confirmation question.
+ Confirmation question.
+ Confirmation question.
+ Notice.
+ Button on image page.
{{Identical|Delete}}
- Èstatistik
+ Menu item.
+ Menu item.
+ Title on Profile page.
+ Title of panel that appears after tapping a badge in the achievements tab.
To see the correct translation for your language, please go to https://commons.wikimedia.org/wiki/Commons:Featured_pictures and select your language in \"This project page in other languages\".
+ Title of panel that appears after tapping a badge in the achievements tab.
+ Item in statistics, %1$d is the level number.
+ Shown at the top of the menu that appears when you tap the hamburger button. %1$s is the username, %2$s is the level number.
+ {{optional}}\nShown at the top of the menu that appears when you tap the hamburger button, and the level could not be loaded. The first parameter is the username, the second parameter is the text {{msg-wm|Commons-android-strings-see your achievements}}.
+ Item in statistics.
+ Item in statistics.
+ Item in statistics.
+ Call to action.
+ Explanation in statistics.
+ label in statistics:
+ Profile statistics explanation.
+ Profile statistics explanation.
+ Profile statistics explanation.
+ Error message.
+ Notifications title.
+ Settings item.
+ Settings item explanation.
+ Settings item.
+ Top title.
{{Identical|Nearby}}
+ Title.
+ Title.
+ Settings item.
+ Settings item explanation.
+ Screen title.
+ Title.
+ Permission request explanation.
+ Permission explanation recommendation
+ * %1$d - index +1.\n* %2$d - total number of steps.\n* %3$s - {{msg-wm|Commons-android-strings-depicts_step_title}}
Refers to the next \'\'\'step\'\'\' in the uploading process.
Refers to the previous \'\'\'step\'\'\' in the uploading process.
+ Confirmation message.
+ Error message.
+ Tab in bookmark view.
+ Tab in bookmark view.
+ Tab in bookmark view.
+ Call to action.
+ Provider name.
+ Notice when there are no bookmarks.
+ Provider title.
\"Send log file\" is {{msg-wm|Commons-android-strings-send log file}}.
+ Answer to a question.
+ Answer to a question.
+ Answer to a question.
+ Answer to a question.
+ Answer to a question.
+ * %1$s is a date.\n* %2$d is the number of articles in which the image is used.
+ Shown in the contributions view when the user has no contributions.
+ Warning.
+ Warning explanation.
{{Doc-commons-app-depicts}}
{{Doc-commons-app-depicts}}
+ Button for canceling an upload
+ Warning explanation.
+ Similar to a Cancel button.
+ Means that the same license applies to all the images.
+ Button in the map screen.
+ Title of card when opening the nearby view.
+ Explanation of permission request.
+ Failure explanation.
+ Checkbox label in several questions.
+ Setting title.
+ Setting explanation.
+ Error message.
+ Explanation of error message.
+ Label in description campaign. Shows the date of campaign end.
+ Settings title.
+ Setting explanation.
+ Setting.
+ Setting explanation.
+ Permission explanation.
+ Button label, indicating the user wants to allow access. Appears next to {{msg-wm|Commons-android-strings-option dismiss}}\n\nSee also:\n* {{msg-mw|Mwoauth-form-button-cancel}}\n{{Identical|Allow}}
+ Don\'t give permission. Appears next to {{msg-wm|Commons-android-strings-option allow}}
+ A notice during the upload.
+ A notice during the upload.
+ A notice during the upload.
+ A notice during the upload.
+ Setting.
+ Setting explanation.
\"Read more\" is {{msg-wm|Commons-android-strings-read help link}}.
+ A notice that appears after disabling campaigns.
+ A notice shown when retrying an upload fails.
+ A notice shown in the upload process.
+ A notice during uploading.
+ A notice during uploading.
+ Shown in the review screen.\n\n%1$s is the image display title.
+ Edit summary.
+ A notice shown after posting category check request to the wiki.
+ An error message.
+ Success message shown after posting a category check request.\n\n%1$s is the image display title.
+ Failure message shown after posting a category check request.\n\n%1$s is the image display title.
+ Notice (\"toast\") while requesting category check.\n\n%1$s is the image display title.
{{Identical|Done}}
+ A notice that thanks were sent.
+ A notice that thanks were sent.\n\n%1$s is the username of the uploader.
+ A notice that thanks couldn\'t be sent.\n\n%1$s is the username of the uploader.
+ A notice that thanks couldn\'t be sent.
+ A notice that thanks are being sent. %1$s is the filename for which thanks are being sent.
+ A question in the review screen.
+ A question in the review screen.
+ A question in the review screen.
+ A question in the review screen.
+ An explanation in the review screen.
+ An explanation in the review screen.
+ An explanation in the review screen. %1$s is a username.
+ A notice in the review screen.
\'%1$s\' is replaced by a formatted number (of categories).
+ A prompt in the review screen.
+ A prompt in the review screen.
+ Button in the review screen.
+ Button in the review screen. Sends thanks to the uploader if pressed.
+ Button explanation.
+ Review help.
+ Shown in the profile when no images uploaded by the user are in use.
+ Shown in the profile when no images uploaded by the user were reverted.
+ Shown in the profile when no images were uploaded by the user.
+ A notice in the notifications view.
+ A notice in the notifications view.
+ A prompt to send an email.
+ A note that suggests that notifications were emailed.
+ Tapping it shows the notifications that are already read.
+ Tapping it shows the notifications that are not yet read.
+ Shown in the contributions screen.
{{Identical|Please wait}}
+ Text in the panel that appears after tapping a badge.
+ Text in the panel that appears after tapping a badge.
+ Clickable text at the bottom of the first upload step. It appears when several items are being uploaded. Clicking it copies the information to the next items. It\'s useful when several files have similar titles and descriptions.
+ A notice that appears after pressing {{msg-wm|Commons-android-strings-copy image caption description}}.
+ Tutorial.
+ Tutorial.
+ A skip button in the review screen.
+ Error message.
+ Settings menu item.
+ Setting description.
{{Identical|Author}}
+ Seems to be unused.
{{Identical|Location}}
+ Seems to be unused.
+ Seems to be unused.
+ Seems to be unused.
+ Seems to be unused.
+ Text that is sent when using the Share button in the About screen.
+ Intent string for sharing from the About screen.
+ Label in the review screen.
+ A label of a checkbox.
+ Error message in the categories presenter.
{{Doc-commons-app-depicts}}
+ Notice when removing an image from multiple uploads.
+ Seems to be unused.
+ Question in deletion process.
+ Information text in the review process.\n\n%1$s is a filename, %2$s is a username.
+ Setting name.
+ Notice in the deletion screen. Used with:\n* {{msg-wm|Commons-android-strings-delete helper show deletion title success}}\n* {{msg-wm|Commons-android-strings-delete helper show deletion title failed}}
+ Appended to {{msg-wm|Commons-android-strings-delete helper show deletion title}} if nominating for deletion worked. (Lego)
+ Notification after successful nomination for deletion. %1$s is the filename.
+ Appended to {{msg-wm|Commons-android-strings-delete helper show deletion title}} if nominating for deletion didn\'t work. (Lego)
+ Notification after unsuccessful nomination for deletion.
+ Deletion nomination reason.
+ Deletion nomination reason.
+ Deletion nomination reason.
+ Deletion nomination reason.
+ Deletion nomination reason.
+ Deletion nomination reason.
+ Deletion nomination reason.
+ Deletion nomination reason prompt.
+ Notice (toast) when trying to update categories.
+ Shown after trying to update categories.
+ Shown after {{Msg-wm|depictions_edit_helper_show_edit_title}} (Lego.)
+ Status message.
+ Shown after {{msg-mw|category_edit_helper_show_edit_title}}
+ Seems to be unused.
{{Doc-commons-app-depicts}}
{{Doc-commons-app-depicts}}
{{Doc-commons-app-depicts}}
- {{Doc-commons-app-depicts}}
+ Shown after {{Msg-wm|depictions_edit_helper_show_edit_title}} (Lego.)\n\n{{Doc-commons-app-depicts}}
+ Notice (toast) when trying to update coordinates.
+ Shown after trying to update coordinates, with {{msg-wm|Commons-android-strings-coordinates_edit_helper_show_edit_title_success}} or {{msg-wm|Commons-android-strings-coordinates_edit_helper_edit_message_else}}. (Lego).
+ Shown after trying to update description with {{msg-wm|Commons-android-strings-coordinates_edit_helper_show_edit_title_success}} or {{msg-wm|Commons-android-strings-description_edit_helper_edit_message_else}}. (Lego.)
+ Shown after trying to update caption with {{msg-wm|Commons-android-strings-coordinates_edit_helper_show_edit_title_success}} or {{msg-wm|Commons-android-strings-caption_edit_helper_edit_message_else}}. (Lego.)
+ Shown after {{msg-wm|Commons-android-strings-coordinates_edit_helper_show_edit_title}} if publishing coordinates worked. (Lego.)
+ Shown when adding a description worked. %1$s are the coordinates.
+ Shown when adding a description worked.
+ Shown when adding a caption worked.
+ Shown after {{msg-wm|Commons-android-strings-coordinates_edit_helper_show_edit_title}} if publishing coordinates didn\'t work. (Lego.)
+ Shown after {{msg-wm|Commons-android-strings-description edit helper show edit title}} when updating descriptions didn\'t work. (Lego.)
+ Shown after {{msg-wm|Commons-android-strings-caption edit helper show edit title}} when updating captions didn\'t work. (Lego.)
+ Seems to be unused.
+ Seems to be unused.
+ Screen title.
+ Title for sharing an image.
+ Shown in the achievements screen when the user hasn\'t yet made contributions.
+ Shown in the achievements screen when looking at another user\'s contribution, and there are none. %1$s is a username.
+ Notice (toast) after an account was created.
+ Notice (toast) after copying text in the Nearby screen.
+ Notice at the bottom of the screen after marking a notification as read.
+ An error message after an unsuccessful action with notifications.
+ Seems to be unused.
+ Seems to be unused.
+ Seems to be unused.
+ Filter label.
+ Placeholder in a search box in the Nearby view.
+ Error message in the log-in screen.
+ Appears a tab title at the top of the screen when tapping a category on a file description screen. All the tabs are:\n* {{msg-wm|Commons-android-strings-title for media}}\n* {{msg-wm|Commons-android-strings-title for subcategories}}\n* {{msg-wm|Commons-android-strings-title for parent categories}}
+ Seems to be unused.
+ Seems to be unused.
+ Appears a tab title at the top of the screen when tapping a category on a file description screen. All the tabs are:\n* {{msg-wm|Commons-android-strings-title for media}}\n* {{msg-wm|Commons-android-strings-title for subcategories}}\n* {{msg-wm|Commons-android-strings-title for parent categories}}
+ Appears a tab title at the top of the screen when tapping a category on a file description screen. All the tabs are:\n* {{msg-wm|Commons-android-strings-title for media}}\n* {{msg-wm|Commons-android-strings-title for subcategories}}\n* {{msg-wm|Commons-android-strings-title for parent categories}}
+ Appears during the upload process if the image could perhaps be associated with a place nearby.
+ A question during the upload process. %1$s is a possible place name. Similar to {{msg-wm|Commons-android-strings-upload nearby place found description singular}}, but used when multiple files are being uploaded.
+ A question during the upload process. %1$s is a possible place name. Similar to {{msg-wm|Commons-android-strings-upload nearby place found description plural}}, but used when a single file is being uploaded.
{{identical|Bookmark}}
- Option to make the app\'s theme follow the global system setting.
+ Settings button in a menu.
+ A notice when removing a bookmark. Used when viewing a Wikidata item.
+ A notice when adding a bookmark. Used when viewing a Wikidata item.
+ Seems to be unused.
+ A button shown while viewing the image.
+ A notice shown while setting an image as wallpaper.
+ Option to make the app\'s theme follow the global system setting.\n\nAppears in this list:\n* {{msg-wm|Commons-android-strings-theme light name}}\n* {{msg-wm|Commons-android-strings-theme dark name}}\n* {{msg-wm|Commons-android-strings-theme default name}}
+ The name of the Dark theme in the preferences.\n\nAn adjective that describes {{msg-wm|Commons-android-strings-preference theme}}.\n\nAppears in this list:\n* {{msg-wm|Commons-android-strings-theme light name}}\n* {{msg-wm|Commons-android-strings-theme dark name}}\n* {{msg-wm|Commons-android-strings-theme default name}}
+ The name of the Light theme in the preferences.\n\nAn adjective that describes {{msg-wm|Commons-android-strings-preference theme}}.\n\nAppears in this list:\n* {{msg-wm|Commons-android-strings-theme light name}}\n* {{msg-wm|Commons-android-strings-theme dark name}}\n* {{msg-wm|Commons-android-strings-theme default name}}
+ Notice (toast) when failing to use the nearby function because of lack of permissions.
+ A note while asking to enable location permission.
+ A question asked in several places when trying to use location functions.
+ A request shown in several places when trying to use location functions.
‘Nearby’ should be translated as in {{msg-wm|Commons-android-strings-navigation item nearby}}
+ Shown when opening the \"Explore\" map and location permission was not granted.
+ A notice shown when trying to upload and set the file\'s location.
+ {{Warning|In right to left languages, translate \"left\" instead of \"right\".}}\n\nWhen uploading, another possibly similar image is shown at the top of the screen, and this question is shown underneath them, with \"No\" and \"Yes\" buttons.
+ Button label at the bottom of the subcategories tab in the item page.
+ Appears when no nearby places are found. (Uncertain where it is actually used.)
+ Shown when some improvements are suggested to the file that is being uploaded.
+ Suggestion. Used with {{msg-wm|Commons-android-strings-todo improve}}
+ Suggestion. Used with {{msg-wm|Commons-android-strings-todo improve}}
+ Shown when a Wikipedia adding button is clicked. (Unclear where it is actually shown.)
+ Shown when a Wikipedia adding button is clicked, with {{msg-wm|Commons-android-strings-add picture to wikipedia article title}}. (Unclear where it is actually shown.)
+ Button in instructions for adding to Wikipedia. (Unclear where it is actually shown.)
+ Tutorial
+ Tutorial
+ Tutorial
+ Tutorial
+ Tutorial
+ Tutorial
+ Tutorial
+ Tutorial
+ A button at the bottom of the file page. Pressing it copies the wikitext for embedding the file into a wiki page.
+ \"Pause\" button in the upload panel.
+ \"Resume\" button in the upload panel (resumes after pausing).
+ Seems to be unused.
{{Identical|More}}
+ Bottom bar button label.\n{{identical|Bookmark}}
+ Tab title at the top of the user profile screen.
+ Tab title at the top of the user profile screen.
+ Shown in the Leaderboard tab on the user profile under the username. Followed by a number. Should be the same word as in {{msg-wm|Commons-android-strings-leaderboard column rank}} (Lego.)
+ Shown in the Leaderboard tab on the user profile under the username. Followed by a number of actions that the user made in the selected time. Should be the same word as in {{msg-wm|Commons-android-strings-leaderboard column count}} The actions are:\n* {{msg-wm|Commons-android-strings-leaderboard upload}}\n* {{msg-wm|Commons-android-strings-leaderboard used}}\n* {{msg-wm|Commons-android-strings-leaderboard nearby}}\n\n(Lego.)
+ Label at the top of the table in the leaderboard screen. Should be the same word as in {{msg-wm|Commons-android-strings-rank prefix}}.
+ Label at the top of the table in the leaderboard screen.\n{{Identical|User}}
+ Label at the top of the table in the leaderboard screen. Should be the same word as in {{msg-wm|Commons-android-strings-count prefix}}.
+ Panel title. Appears after tapping {{msg-wm|Commons-android-strings-menu set avatar}}.
+ Panel text. Appears after tapping {{msg-wm|Commons-android-strings-menu set avatar}}.
+ Notice (toast).
+ Error message after tapping {{msg-wm|Commons-android-strings-menu set avatar}}, which din\'t work.
+ Three-dot menu item in the image information.
+ An option in the leaderboard, to select the time period for which the numbers are calculated. Appears in a list with:\n\n* {{msg-wm|Commons-android-strings-leaderboard yearly}}\n* {{msg-wm|Commons-android-strings-leaderboard weekly}}\n* {{msg-wm|Commons-android-strings-leaderboard all time}}
+ An option in the leaderboard, to select the time period for which the numbers are calculated. Appears in a list with:\n\n* {{msg-wm|Commons-android-strings-leaderboard yearly}}\n* {{msg-wm|Commons-android-strings-leaderboard weekly}}\n* {{msg-wm|Commons-android-strings-leaderboard all time}}
+ An option in the leaderboard, to select the time period for which the numbers are calculated. Appears in a list with:\n\n* {{msg-wm|Commons-android-strings-leaderboard yearly}}\n* {{msg-wm|Commons-android-strings-leaderboard weekly}}\n* {{msg-wm|Commons-android-strings-leaderboard all time}}
+ An option in the leaderboard, to select the kind of activity for which the numbers are calculated. Appears in a list with:\n\n* {{msg-wm|Commons-android-strings-leaderboard upload}}\n* {{msg-wm|Commons-android-strings-leaderboard used}}\n* {{msg-wm|Commons-android-strings-leaderboard nearby}}
+ An option in the leaderboard, to select the kind of activity for which the numbers are calculated. Appears in a list with:\n\n* {{msg-wm|Commons-android-strings-leaderboard upload}}\n* {{msg-wm|Commons-android-strings-leaderboard used}}\n* {{msg-wm|Commons-android-strings-leaderboard nearby}}
+ An option in the leaderboard, to select the kind of activity for which the numbers are calculated. Appears in a list with:\n\n* {{msg-wm|Commons-android-strings-leaderboard upload}}\n* {{msg-wm|Commons-android-strings-leaderboard used}}\n* {{msg-wm|Commons-android-strings-leaderboard nearby}}
+ A button at the bottom of the leaderboard. Scrolls the board to the user\'s entry.
{{Optional}}\n<code>&#169;</code> is the copyright symbol (©).
+ Seems to be unused.
+ Seems to be unused.
+ Seems to be unused.
+ Title of panel that appears after tapping a badge in the achievements tab.
+ Text in the panel that appears after tapping a badge.
+ Seems to be unused.
+ A notice after pausing the upload.
+ A notice after canceling the upload.
+ Button for canceling an upload
+ Seems to be unused.
+ Seems to be unused.
+ Explanation about writing a caption while uploading.
+ Explanation about the \"depicts\" selection.
{{Doc-commons-app-depicts}}
+ License explanation.
{{Doc-commons-app-depicts}}
- Panning means moving the map left/right/up/down, typically by touching the screen with one finger and moving it.\n\nZooming means making the map\'s scale bigger or smaller, typically by pinching with two fingers.\n\nExample in other app:\nhttps://igss.schneider-electric.com/features/pan-and-zoom-in-definition/
+ Label
+ Description
+ The title of the license selection screen.
+ Title during the upload process.
+ Item in the three-dots menu on the category screen.
+ Item in the three-dots menu on the item screen.
+ Setting name.
+ Alternative text.
+ Button in the detailed achievements badges descriptions.
+ Shown under Caption and Description on the Image description screen.
+ Shown above the map after tapping the pencil to edit Coordinates on the Image description screen.
+ Shown above the map and under {{msg-wm|Commons-android-strings-choose a location}} after tapping the pencil to edit Coordinates on the Image description screen.\n\nPanning means moving the map left/right/up/down, typically by touching the screen with one finger and moving it.\n\nZooming means making the map\'s scale bigger or smaller, typically by pinching with two fingers.\n\nExample in other app:\nhttps://igss.schneider-electric.com/features/pan-and-zoom-in-definition/
+ Alternative text for the button at the bottom of the map for choosing a location.
+ A button at the bottom of the map view in some cases.
+ A button at the map view in some cases.
+ Alternative text.
A description of a visual element, location picker image shadow. Used for accesibility usually.
+ Title of location selection screen, appears above the map.
+ Subheading of location selection screen, appears above the map.
{{Identical|Label}}
{{Identical|Description}}\n\nDescription of the picture. It ends up on Wikimedia Commons as the \"Description\" field.
{{Identical|Item}}
+ A title that appears in special circumstances when selecting files to upload.
+ Seems to be unused.
{{identical|Done}}
+ Alternative text in the custom selector Back button.
+ Text in the custom selector.
+ Text in the custom selector.
+ Text in the custom selector.
+ Button label in the custom selector.
+ Notice (toast) text.
+ Warning text.\n\n%1$d and %2$d are numbers.
+ Button text in the custom selector.
+ Indicator in the custom selector. %1$d is a number.
+ Error message in the custom selector.
+ Seems to be unused.
+ A note in the license selector.
+ Seems to be unused.
+ Notice in the Nearby screen.
+ Notice in the Nearby screen.
+ Title.
+ Campaign description text.
+ Seems to be unused.
+ Seems to be unused.
+ Location permission helper text.
+ Location permission helper text.
+ Appears at the top of the \"Contributions\" tab, after clicking a username in the leaderboard. %1$s is a username.
+ Appears at the top of the \"Achievements\" tab, after clicking a username in the leaderboard. %1$s is a username.
+ Menu item in the three-dot menu on the file page.
{{Doc-commons-app-depicts}}
+ Title of category editing screen.
{{Identical|Advanced options}}
‘Nearby’ should be translated as in {{msg-wm|Commons-android-strings-navigation item nearby}}
- {{Identical|Detail}}
+ Appears at the bottom of the screen, under the query, on the screen that appears after tapping \"Advanced options\" in the Nearby screen.
+ Appears at the bottom of the screen, under the query, on the screen that appears after tapping \"Advanced options\" in the Nearby screen.
+ Location permission request message.
+ Appears when the image doesn\'t have its own embedded location information.
+ Appears when the image doesn\'t have its own embedded location information.
+ Appears in the first step when beginning an upload.
+ Tutorial for reporting issues.
+ Button at the bottom of the map.\n{{Identical|Detail}}
+ Error message.
+ Error message.
+ A warning after logging in.
+ Appears when sending feedback.
+ Checkbox label in the Feedback window. Selected by default. Deselecting it means that this information will not be sent with the feedback.
+ Checkbox label in the Feedback window. Selected by default. Deselecting it means that this information will not be sent with the feedback.
+ Checkbox label in the Feedback window. Selected by default. Deselecting it means that this information will not be sent with the feedback.
+ Checkbox label in the Feedback window. Selected by default. Deselecting it means that this information will not be sent with the feedback.
+ Checkbox label in the Feedback window. Selected by default. Deselecting it means that this information will not be sent with the feedback.
+ Checkbox label in the Feedback window. Selected by default. Deselecting it means that this information will not be sent with the feedback.
+ Appears after sending the feedback.
+ Error message.
+ An error message that appears when the users submits feedback without writing anything.
+ Placeholder text in the feedback form.
+ Label in custom selector.
+ Label in custom selector.
+ Notice in custom selector.
+ Label in custom selector.
+ Button in the custom selector.
+ Notice in the custom selector.
+ When viewing images one by one in the custom selector, a note (toast) that appears when you try to swipe from the last image.
+ Shown when trying a swipe action in the custom selector that is supposed to upload the image, but the image is already uploaded.
+ Shown when trying a swipe action in the custom selector that is supposed to select an image for uploading, but the image cannot be selected.
+ Shown when trying a swipe action in the custom selector that is supposed to select the image.
+ Shown when trying a swipe action in the custom selector that is supposed to mark the image as not for upload.
+ Menu item.
+ Menu item.
+ Menu item.
+ Title of panel that appears after clicking the \"Report\" menu item on the image page.
+ An item in the menu that appears after clicking the \"Report\" menu item on the image page.
+ An item in the menu that appears after clicking the \"Report\" menu item on the image page.
+ An item in the menu that appears after clicking the \"Report\" menu item on the image page.
+ Notice when entering the zoomed mode in the custom selector.
+ Instructions in the zoomed selector.
+ Instructions in the zoomed selector.
\"Set as avatar\" should be translated the same as {{msg-wm|Commons-android-strings-menu set avatar}}.
+ Set the description text when user selects to use coordinates from another image taken within 120s.
+ Notice about not being able to use storage.
+ Notice about not being able to use storage.
+ General notice (toast) about not being able to obtain permissions.
+ Shown in small text in the first upload step.
+ Shown in small text in the first upload step.
+ Shown on the profile when the 0 level was found.
+ Shown on the first upload step.
+ Appears at the bottom of the map.
+ Appears after updating the location.
+ Appears at the bottom of the map.
+ Warning when removing location.
+ Warning when removing location.
+ Appears after removing location.
+ Appears at the bottom of the image page.
+ Error message.
+ Appears when an action requires being logged in.
+ Error message.
+ Appears after saving a GPX file.
+ Appears after saving a GPX file.
+ Appears after saving a KML file.
+ Error message.
+ Error message.
+ Progress message.
+ Progress message.
+ Custom selector indicator.
{{Doc-commons-app-depicts}}
+ Notice when uploading several files.
+ Notice in the Nearby screen.
+ Error message.
+ Talk page link.
+ Title of feedback form about the Wikidata item. %1$s is the item\'s label.
+ Radio button label in the feedback form about the Wikidata item. %1$s is the item\'s label.
+ Radio button label in the feedback form about the Wikidata item. %1$s is the item\'s label.
+ Radio button label in the feedback form about the Wikidata item. %1$s is the item\'s label.
+ Radio button label in the feedback form about the Wikidata item.
+ A note in the Wikidata feedback prcess.
+ Question shown when canceling multiple uploads.
+ Shown after confirmation to cancel multiple uploads.
+ Lists current uploads.
+ Tab title when viewing uploads.
+ Tab title when viewing uploads.
+ Shown when trying to set location.
+ Button in custom selector.
+ Button in custom selector.
+ Question when deleting folder. %1$s is the name, %2$d is the number of images.
An answer to the question in {{msg-wm|Commons-android-strings-custom selector confirm deletion message}}.
+ Button in the custom selector.
+ Notice after deleting the folder. %1$s is the folder name.
+ Notice after not being able to delete the folder. %1$s is the folder name.
+ Notice after deleting the folder. %1$s is the error message.
+ Seems to be unused.
+ Shown in the Nearby view when tapping a red pin.
+ Shown in the Nearby view when tapping a green pin.
+ Shown in the Nearby view when tapping a gray pin.
+ Shown when unable to load image usage.
+ Shown when no image usages were found.
+ A title in the list of usages on different wikis.\n\n{{Identical|Wikimedia Commons}}
+ A title in the list of usages on different wikis.
{{optional}}
- “Explore” should be translated as in {{msg-wm|Commons-android-strings-navigation item explore}}
- ‘Nearby’ should be translated as in {{msg-wm|Commons-android-strings-navigation item nearby}}
+ A title in the list of usages on different wikis.
+ Seems to be unused.
+ An action in the settings.
+ Panel title.
+ Text in panel about vanishing.
+ Label.
+ Toast.
+ Notice when finishing upload.
+ An option in the three-dots menu in the map. Switches to the Explore mode.\n\n“Explore” should be translated as in {{msg-wm|Commons-android-strings-navigation item explore}}
+ An option in the three-dots menu in the map. Switches to the Nearby mode.\n\n‘Nearby’ should be translated as in {{msg-wm|Commons-android-strings-navigation item nearby}}
+ A little caption in a list of uploads when the image was created and uploaded by the same user. %1$s is a username.
+ A little caption in a list of uploads when the image was created by one user, but the latest version was uploaded by another. %1$s and %2$s are usernames.
+ Toast.
diff --git a/app/src/main/res/values-ro/strings.xml b/app/src/main/res/values-ro/strings.xml
index 602fb69bf..946fd516e 100644
--- a/app/src/main/res/values-ro/strings.xml
+++ b/app/src/main/res/values-ro/strings.xml
@@ -13,7 +13,7 @@
-->
Pagina de Facebook a Commons
- Codul Sursă de la Commons Github
+ Codul Sursă de la Commons Github
Logoul Commons
Site-ul Commons
Ieșiți din selectorul de locații
@@ -27,13 +27,8 @@
- %1$d fișiere se încarcă
- %1$d de fișiere se încarcă
-
- - \@string/contributions_subtitle_zero
- - (%1$d)
- - (%1$d)
-
Pornirea încărcărilor
-
+
- Se pornește 1 încărcare
- Se pornesc %1$d încărcări
- Se pornesc %1$d de încărcări
@@ -46,7 +41,7 @@
- Această imagine va fi licențiată sub %1$s
- Aceste imagini vor fi licențiate sub %1$s
-
+ - Aceste imagini vor fi licențiate sub %1$s
- %1$d Încarcă
@@ -87,7 +82,7 @@
Încărcare în coadă (modul de conexiune limitat activat)
%1$s s-a încărcat!
Atingeți pentru a vizualiza elementul încărcat
- Se încarcă fișierul %1$s
+ Se încarcă fișierul %1$s
%1$s se încarcă
Se finalizează încărcarea fișierului %1$s
Încărcarea fișierului %1$s nu a reușit
@@ -133,6 +128,7 @@
Setări
Înregistrare
Imagini recomandate
+ Imaginile de Calitate sunt imagini ale unor fotografi și ilustratori de înaltă calificare, pe care comunitatea Wikimedia Commons a ales-o ca fiind de cea mai înaltă calitate pe site.
Selector personalizat
Categorie
Evaluare colegială
@@ -154,10 +150,10 @@
Licență implicită
Utilizați titlul și descrierea anterioară
Tema
- Atribuire și distribuire în condiții identice 4.0
- Atribuire 4.0
- Atribuire și distribuire în condiții identice 3.0
- Atribuire 3.0
+ Atribuire și distribuire în condiții identice 4.0
+ Atribuire 4.0
+ Atribuire și distribuire în condiții identice 3.0
+ Atribuire 3.0
CC0
CC BY-SA 3.0
CC BY 3.0
@@ -215,15 +211,14 @@
Abonați-vă la canalul nostru beta pe Google Play și a obține acces rapid la noi caracteristici și corecții de erori
Code 2FA
Chiar vrei să te deconectezi?
- Imagine media nu a reușit
Nu s-au găsit subcategorii
Nu au fost găsite categorii părinte
Muntele Zao
Llamas
Rainbow Bridge
Lalea
- Bine ați venit Wikipedia
- Bine ați venit Drepturi de autor
+ Bine ați venit Wikipedia
+ Bine ați venit Drepturi de autor
Opera din Sydney
Revocare
Deschide
@@ -348,11 +343,10 @@
Șterge
Realizări
Profil
- Statistici
Mulțumiri primite
Imagini recomandate
Imagini prin „Locații în apropiere”
- Nivel
+ Nivel %1$d
Imaginile au fost încărcate
Imaginile nu au fost reluate
Imaginile folosite
@@ -429,11 +423,11 @@
Nu s-a putut solicita verificarea categoriei pentru %1$s
Solicitați verificarea categoriei pentru %1$s
Realizat
- Se Trimit Mulțumiri: Succes
- Trimis mulțumiri cu succes datorită %1$s
- Nu a reușit să trimită mulțumiri %1$s
- Se trimite mulțumiri: Eșec
- Se trimite Mulțumiri pentru %1$s
+ Se Trimit Mulțumiri: Succes
+ Trimis mulțumiri cu succes datorită %1$s
+ Nu a reușit să trimită mulțumiri %1$s
+ Se trimite mulțumiri: Eșec
+ Se trimite Mulțumiri pentru %1$s
Respectă acest lucru regulile dreptului de autor?
Este corect catalogat acest lucru?
Este acesta obiectiv?
@@ -459,15 +453,14 @@
Vezi necitit
A apărut o eroare la alegerea imaginilor
Vă rugăm să așteptați ...
- Imaginile de Calitate sunt imagini ale unor fotografi și ilustratori de înaltă calificare, pe care comunitatea Wikimedia Commons a ales-o ca fiind de cea mai înaltă calitate pe site.
Imaginile Încărcate prin Locurile din Apropiere sunt imaginile care sunt încărcate prin descoperirea locurilor de pe hartă.
Această caracteristică permite editorilor să trimită o notificare de Mulțumire utilizatorilor care fac modificări utile - folosind un mic link de mulțumire pe pagina istoric sau pe pagina dif.
- Copiați pe suportul ulterior
+ Copiați pe suportul ulterior
Copiat cu succes
Exemple de imagini bune de încărcat pe Commons
Exemple de imagini care nu trebuie încărcate
Săriți această imagine
- Descărcare eșuată!! Nu putem descărca fișierul fără permisiunea de stocare externă.
+ Descărcare eșuată!! Nu putem descărca fișierul fără permisiunea de stocare externă.
Gestionați etichetele EXIF
Selectați ce etichete EXIF de păstrat în încărcări
Autor
@@ -516,7 +509,7 @@
Nu s-au putut adăuga coordonate.
Nu se pot obține coordonatele.
Partajează imaginea prin
- Încă nu ați făcut contribuții
+ %1$s nu a făcut încă nicio contribuție
Cont creat!
Text copiat în clipboard
Notificare marcată ca citită
@@ -525,7 +518,7 @@
Există
Are nevoie de foto
Tipul locului:
- Pod, muzeu, hotel etc.
+ Pod, muzeu, hotel etc.
Ceva nu a mers corect la autentificare, trebuie să vă resetați parola !!
MEDIA
CLASE COPIl
@@ -561,7 +554,7 @@
3. Găsiți o secțiune adecvată în articol pentru imaginea dvs.
4. Faceți clic pe pictograma Editare (cea ca un creion) pentru acea secțiune.
5. Lipiți wikitextul în locul corespunzător.
- Copiați wikicodul în clipboard
+ Copiați wikicodul în clipboard
pauză
reia
întrerupt
@@ -586,4 +579,5 @@
Rank-ul meu
Citiți mai multe
Modifică locația
+ Permisiune opțională: Obțineți locația curentă pentru sugestiile de categorii
diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml
index 8302e8954..df29976f7 100644
--- a/app/src/main/res/values-ru/strings.xml
+++ b/app/src/main/res/values-ru/strings.xml
@@ -2,6 +2,7 @@
Facebook-страница Викисклада
- Исходный код Викисклада на гитхабе
+ Исходный код Викисклада на GitHub
Логотип Викисклада
Веб-сайт Викисклада
Выйти из окна выбора местоположения
@@ -76,24 +77,18 @@
- %1$d файлов загружается
- %1$d файлов загружается
-
- - (%1$d)
- - (%1$d)
- - (%1$d)
- - (%1$d)
-
Загрузка начинается
- - Обработка %d загрузки
- - Обработка %d загрузок
- - Обработка %d загрузок
- - Обработка %d загрузок
+ - Обработка %1$d загрузки
+ - Обработка %1$d загрузок
+ - Обработка %1$d загрузок
+ - Обработка %1$d загрузок
- - %d загрузка
- - %d загрузки
- - %d загрузок
- - %d загрузок
+ - %1$d загрузка
+ - %1$d загрузки
+ - %1$d загрузок
+ - %1$d загрузок
- Это изображение будет лицензировано под %1$s
@@ -143,7 +138,7 @@
Загрузка в очереди (включен режим ограниченного подключения)
%1$s загружен!
Нажмите для просмотра загруженного файла
- Загрузка файла: %s
+ Загрузка файла: %1$s
%1$s загружается
Завершение загрузки %1$s
Не удалось загрузить %1$s
@@ -193,6 +188,7 @@
Настройки
Регистрация
Избранные изображения
+ Избранные изображения обычно сделаны профессиональными фотографами и иллюстраторами. Такие изображения отмечены сообществом участников Викисклада как имеющие высшее качество на этом сайте.
Пользовательский селектор
Категория
Проверка
@@ -209,15 +205,18 @@
Вы ещё не загрузили ни одного изображения.
Повторить
Отмена
+ Напишите название языка
+ Недавние поиски
+ Все языки
Отправляя это изображение, я подтверждаю, что это моя собственная работа, которая не содержит защищённых авторским правом материалов или селфи, а также отвечает <a href=\"https://commons.wikimedia.org/wiki/Commons:Policies_and_guidelines/ru\">правилам Викисклада</a>.
Скачать
Лицензия по умолчанию
Использовать предыдущие название и описание
Тема оформления
- Attribution-ShareAlike 4.0
- Attribution 4.0
- Attribution-ShareAlike 3.0
- Attribution 3.0
+ Attribution-ShareAlike 4.0
+ Attribution 4.0
+ Attribution-ShareAlike 3.0
+ Attribution 3.0
CC0
CC BY-SA 3.0
CC BY 3.0
@@ -270,6 +269,7 @@
Описание
Обсуждение
Автор
+ Загружающий
Дата загрузки
Лицензия
Координаты
@@ -279,15 +279,14 @@
Код 2ФА
Код подтверждения электронной почты
Вы действительно хотите выйти?
- Ошибка медиафайла
Подкатегории не найдены.
Не найдено родительских категорий
Гора Зао
Ламы
Радужный мост
Тюльпан
- Добро пожаловать в Википедию
- Добро пожаловать — авторские права
+ Схематическое изображение типовой статьи в Википедии.
+ Рисунок стопки бумаг с перечеркнутым символом авторского права.
Сиднейский оперный театр
Отмена
Открыть
@@ -320,6 +319,7 @@
Для загрузки требуется доступ в Интернет. Пожалуйста, проверьте ваше сетевое соединение.
Проблемы, найденные в изображении
Пожалуйста, загружайте только те изображения, которые были сделаны вами. Не загружайте изображений, которые вы скачали из Интернета.
+ Загрузки
Сохранять сделанные в приложении снимки
Сохранять изображения, сделанные с помощью встроенной камеры, в памяти устройства
Войдите в свою учётную запись
@@ -391,6 +391,7 @@
Опрос
Это изображение корректно для загрузки на сервер?
Вопрос
+ Я не уверен
Результат
Если вы продолжите заливать изображения, которые будут удаляться, ваша учётная запись скорее всего будет заблокирована. Вы уверены, что хотите завершить опрос ?
Внимание: были удалены более %1$s {{PLURAL:%1$s|zero=изображений|one= изображения|few=изображений|изображений}}, загруженных вами. Если вы продолжите заливать изображения, которые будут удаляться, ваша учётная запись скорее всего будет заблокирована.\n\nЖелаете пересмотреть руководство снова и поучаствовать в опросе, для прояснения, какие из типов изображений могут быть загруженными, а какие запрещены ?
@@ -400,6 +401,7 @@
Одной из целей Викисклада является собирание качественных изображений. Поэтому не следует туда загружать нечто размытое. Старайтесь делать изображения с хорошим освещением
Изображения в области техники или культуры весьма желательны на Викискладе.
Вы дали %1$s {{PLURAL:%1$s|zero=правильных ответов|one= правильный ответ|few=правильного ответа|правильных ответов}}. Так держать!
+ Продолжить
Выберите один из двух вариантов ответа на вопрос
Сессия авторизации истекла, пожалуйста авторизуйтесь заново.
Поделитесь результатами опроса со своими друзьями!
@@ -423,13 +425,11 @@
Достижения
Профиль
Значки
- Статистика
- Получены благодарности
+ Полученные благодарности
Избранные изображения
Изображения мест поблизости
- Уровень %d
- %s (Уровень %s)
- %s (%s)
+ Уровень %1$d
+ %1$s (Уровень %2$s)
Загружено изображений
Изображения, которые не откатывались
Использовано изображений
@@ -489,11 +489,13 @@
Больше не спрашивать
Запросить разрешение на геолокацию
Запрашивать разрешение на геолокацию, которое требуется для нотификаций мест поблизости.
- Что-то пошло не так. Не получается получить список ваших достижений
+ Что-то пошло не так, и нам не удалось получить список достижений
Вы сделали так много, что наша система расчёта достижений не справляется. Это финальное достижение.
Заканчивается:
Показ кампаний
Просмотр текущих кампаний
+ Показать кнопку удаления
+ Включить кнопку «Удалить папку» в пользовательском окне выбора
Разрешите приложению определять местоположение, если камера его не записывает. Камеры некоторых устройств не записывают местоположение. В таких случаях, если вы позволите приложению извлекать и привязывать к нему местоположение, ваш вклад станет более полезным. Вы можете изменить это в любое время в настройках.
Разрешить
Отменить
@@ -518,7 +520,7 @@
Проверка категорий файла %1$s
Готово
Отправка благодарности: Успешно
- Благодарности успешно отправлены %1$s
+ Благодарности отправлены %1$s
Не удалось отправить благодарности %1$s
Отправка благодарности: Неуспешно
Отправка благодарности %1$s
@@ -548,15 +550,14 @@
См. непрочитанные
Произошла ошибка при загрузке изображений
Пожалуйста, подождите…
- Избранные изображения обычно сделаны профессиональными фотографами и иллюстраторами. Такие изображения отмечены сообществом участников Викисклада как имеющие высшее качество на этом вебсайте.
Изображения, загруженные участниками, которые находили места с помощью функционала \"Места поблизости\".
Это функция позволяет участникам послать благодарность другим участникам за их полезные правки с помощью маленькой ссылки на странице истории страницы или странице разницы версий.
- Копирование на последующие носители
+ Скопировать на последующие элементы
Скопировано
Примеры изображений, подходящих для загрузки на Викисклад
Примеры изображений, которые не следует загружать на Викисклад
Пропустить это изображение
- Скачивание файла не удалось! Это невозможно выполнить без предоставленного разрешения по использованию внешнего носителя.
+ Скачивание файла не удалось. Это невозможно выполнить без предоставленного разрешения по использованию внешнего носителя.
Работа с EXIF-тегами
Укажите, какие EXIF-теги следует сохранить при загрузке файлов
Автор
@@ -566,11 +567,10 @@
Модель объектива
Серийный номер
Программное обеспечение
- Отказано в доступе к местоположению файла
- Возможно, мы не сможем автоматически получать данные о местоположении из загруженных вами изображений. Пожалуйста, добавьте подходящее место для каждого изображения перед отправкой
Загружайте фото на Викисклад прямо с телефона. Скачайте приложение Wikimedia Commons прямо сейчас: %1$s
Поделиться приложением с помощью...
Информация об изображении
+ Не показывать это сообщение повторно
Категории не найдены.
Описания не найдены
Загрузка отменена
@@ -627,7 +627,7 @@
Редактировать описания и подписи
Поделиться изображением с помощью
Вы пока что не внесли вклада.
- У %s пока ещё нет вклада
+ У %1$s пока ещё нет вклада
Учётная запись создана!
Текст скопирован в буфер обмена
Оповещения маркированы как \"прочитанные\"
@@ -680,7 +680,7 @@
5. Скопируйте вики-код в подходящее место
6. Отредактируйте вики-код для исправления позиционирования, если это необходимо. Более подробную информацию можно получить <a href=\"https://en.wikipedia.org/wiki/Wikipedia:Manual_of_Style/Images#How_to_place_an_image\">здесь</a>
7. Опубликуйте статью
- Скопировать вики-код в буфер обмена
+ Скопировать вики-текст в буфер обмена
пауза
продолжить
Приостановлено
@@ -721,6 +721,8 @@
Пожалуйста, выберите соответствующие категории. В отличие от изображений, категории указываются только на английском языке.
Викисклад делает ваши фотографии доступными всем для повторного использования и изменения. Вы хотите отказаться от всех прав? Вы хотите, чтобы вас указывали в описании? Вы хотите, чтобы производные работы использовали ту же лицензию?
Изображает
+ Метка
+ Описание
Лицензия файла
Детали файла
Просмотреть страницу категории
@@ -747,7 +749,7 @@
Назад
Добро пожаловать в Custom Picture Selector
Этот сборщик показывает вам, какие изображения вы уже загрузили в Викисклад.
- В отличие от изображения слева, изображение справа имеет логотип Commons, указывающий, что оно уже загружено.\n Нажмите и удерживайте для предварительного просмотра изображения.
+ В отличие от изображения слева, изображение справа имеет логотип Викисклада, указывающий, что оно уже загружено.\n\nНажмите и удерживайте для предварительного просмотра изображения.
Потрясающе
Это изображение уже было загружено на Викисклад.
По техническим причинам приложение не может одновременно загрузить более %1$d изображений. Предел загрузки в %1$d шт. был превышен на %2$d шт.
@@ -763,8 +765,10 @@
«Вики любит памятники» — международный фотоконкурс памятников, организованный Викимедиа
Нужно разрешение
Для правильной работы картам поблизости необходимо иметь доступ к СОСТОЯНИЮ ТЕЛЕФОНА.
- Вклад участника: %s
- Достижения участника: %s
+ Включите службу определения местоположения, чтобы просматривать места поблизости.
+ Необязательное разрешение: получение текущего местоположения для предложения категорий
+ Вклад участника: %1$s
+ Достижения участника: %1$s
Посмотреть профиль участника
Редактировать описания
Изменить категории
@@ -835,15 +839,15 @@
Успешно сохранено
Вы хотите открыть файл GPX?
Вы хотите открыть файл KML?
- Не удалось сохранить лексему.
- Не удалось сохранить лексему.
- Сохранение файла KML
- Сохранение файла GPX
+ Не удалось сохранить файл KML.
+ Не удалось сохранить файл GPX.
+ Сохранение файла KML…
+ Сохранение файла GPX…
- - выбрано %d изображение
- - выбрано %d изображения
- - выбрано %d изображений
-
+ - Выбрано %1$d изображение
+ - Выбрано %1$d изображения
+ - Выбрано %1$d изображений
+ - Выбрано %1$d изображений
Помните, что все изображения при мультизагрузке получают одинаковые категории и описания. Если изображения не имеют одинаковых описаний и категорий, выполните несколько отдельных загрузок.
Замечание о мультизагрузках
@@ -879,7 +883,6 @@
Викисклад
Другие вики
Использование файла
- SingleWebViewActivity
Учётная запись
Удалить учётную запись
Предупреждение об удалении учётной записи
diff --git a/app/src/main/res/values-sd/strings.xml b/app/src/main/res/values-sd/strings.xml
index 76706e32c..1c2977cc2 100644
--- a/app/src/main/res/values-sd/strings.xml
+++ b/app/src/main/res/values-sd/strings.xml
@@ -8,7 +8,7 @@
-->
العام فيسبڪ صفحو
- ڪامنز جِٽ ھب ذريعو ڪوڊ
+ ڪامنز جِٽ ھب ذريعو ڪوڊ
العام لوگو
العام ويبسائيٽ
اماڻيو
@@ -30,14 +30,10 @@
- %1$d فائيل چاڙھيندي
- %1$d فائيلَ چاڙھيندي
-
- - (%1$d)
- - (%1$d)
-
چاڙھ شروع ڪندي
- - چاڙھ %d شروع ڪندي
- - چاڙھَ %d شروع ڪندي
+ - چاڙھ %1$d شروع ڪندي
+ - چاڙھَ %1$d شروع ڪندي
- %1$d چاڙھ
@@ -77,7 +73,7 @@
چاڙھ کي قطار ۾ لڳايو ويو آھي (محدود ڪنيڪشن موڊ فعال ٿيل)
%1$s چڙھي چڪا!
پنھنجو چاڙھ ڏسڻ لاءِ ٺونگو ھڻو
- فائيل چاڙھيندي: %s
+ فائيل چاڙھيندي: %1$s
%1$s چاڙھيندي
%1$s جو چاڙھ مڪمل ٿيندي
%1$s چاڙھڻ ۾ ناڪام
@@ -139,10 +135,10 @@
ڏنل اجازتنامو
گذريل عنوان ۽ تشريح استعمال ڪريو
ڏيک
- انتساب-ھجھڙي ڀاڱيداري 4.0
- وصف 4.0
- انتساب-ھڪجھڙي-ونڊ 3.0
- ڪڪ انتساب 3.0
+ انتساب-ھجھڙي ڀاڱيداري 4.0
+ وصف 4.0
+ انتساب-ھڪجھڙي-ونڊ 3.0
+ ڪڪ انتساب 3.0
ڪڪ0
ڪڪ بو-سا 3.0
ڪڪ BY 3.0
@@ -200,8 +196,8 @@
لاما
انڊلٺ پل
گل لالا (ٽيولپ)
- وڪيپيڊيا ۾ ڀليڪار
- حقن ۽ واسطن جي آجيان (ويلڪم ڪاپي رائيٽ)
+ وڪيپيڊيا ۾ ڀليڪار
+ حقن ۽ واسطن جي آجيان (ويلڪم ڪاپي رائيٽ)
سڊني اوپيرا هائوس
رد
کوليو
@@ -278,11 +274,10 @@
ڊاھ لاءِ اميدوار ڪريو
ڊاھيو
ڪاميابيون
- انگ-اکر
مھربانيون مليل
چونڊ عڪس
\"ويجھيون جڳھون\" ذريعي عڪس
- سطح
+ سطح %1$d
عڪس چڙھيا
استعمال ڪيل عڪس
پنھنجون ڪاميابيون پنھنجن دوست سان ونڊيو!
@@ -303,11 +298,11 @@
مڪانيت جي اجازت وٺو
تي ختم:
ٿي-ويو
- مھربانيون موڪلڻ: ڪاميابي
- %1$s ڏانھن ڪاميابيءَ سان مھربانيون موڪلجي ويون
- %1$s ڏانھن مھربانيون موڪلڻ ۾ ناڪام
- مھربانيون موڪلڻ: ناڪامي
- %1$s لاءِ مھربانيون موڪلڻ
+ مھربانيون موڪلڻ: ڪاميابي
+ %1$s ڏانھن ڪاميابيءَ سان مھربانيون موڪلجي ويون
+ %1$s ڏانھن مھربانيون موڪلڻ ۾ ناڪام
+ مھربانيون موڪلڻ: ناڪامي
+ %1$s لاءِ مھربانيون موڪلڻ
ھي عڪس ڇڏيو
مصنف
مڪانيت
@@ -340,4 +335,5 @@
سڀ ٻوليون
ليبل
تشريح
+ چونڊ اجازت: زمرن جي تجويزن لاءِ ھاڻوڪي مڪانيت وٺو
diff --git a/app/src/main/res/values-se/strings.xml b/app/src/main/res/values-se/strings.xml
index 386c5e6f4..41a790fef 100644
--- a/app/src/main/res/values-se/strings.xml
+++ b/app/src/main/res/values-se/strings.xml
@@ -8,7 +8,7 @@
-->
Commons Facebook-siidu
- Commons váldokoda Githubis
+ Commons váldokoda Githubis
Commons-logo
Commons-neahttasiidu
Guođe báikeválljejeaddji
@@ -55,7 +55,7 @@
Bajásluđen ráiduduvvon (ráddjejuvvon čatnasanvuohki doaimmas)
%1$s bajásluđejuvvon!
Deaddel vai oidno du bajásluđen
- Bajásluđeme fiilla: %s
+ Bajásluđeme fiilla: %1$s
%1$s bajásluđeme
Gárvvisteme bajásluđema %1$s
Fiila %1$s vurken ii lihkostuvvan
@@ -172,7 +172,6 @@
Ii addon bajás
Šatta betageahččaleaddji
Áiggutgo don duođaid čálihit olggos?
- Mediagovva ii lihkostuvvan
Ii oktage vuollekategoriija gávdnon
Ii oktage badjekategoriija gávdnon
Gaskkalduhte
@@ -210,8 +209,7 @@
Áiggutgo don duođaid gaskkalduhttit dán fiilla vurkema?
Áiggutgo don duođaid dán ohcama sihkkut?
Sihko
- Statistihkka
- Dássi %d
+ Dássi %1$d
Almmuhusat
Listu
Čuovvovaš
@@ -234,7 +232,7 @@
Koordináhtaid lasiheapmi ii lihkostuvvan.
Govvateavstta lasiheapmi ii lihkostuvvan.
Rievdat govvádusaid ja govvateavsttaid
- Šaldi, musea, hotealla jna.
+ Šaldi, musea, hotealla jna.
Girjemearkkat
Luđe lasi
Lasit gova Wikipediai
diff --git a/app/src/main/res/values-sh/strings.xml b/app/src/main/res/values-sh/strings.xml
index e14f87f28..849f7b187 100644
--- a/app/src/main/res/values-sh/strings.xml
+++ b/app/src/main/res/values-sh/strings.xml
@@ -2,10 +2,11 @@
Ostava na Facebooku
- Izvorni kôd Ostave na Githubu
+ Izvorni kôd Ostave na Githubu
Logo Ostave
Ostava
Unesi
@@ -19,19 +20,15 @@
- %1$d datoteke se otpremaju
- %1$d datoteka se otprema
-
- - (%1$d)
- - (%1$d)
- - (%1$d)
-
- Počinje %1$d otpremanje
+ - Počinje %1$d otpremanje
- Počinju %1$d otpremanja
- - %d otpremanje
- - %d otpremanja
- - %d otpremanja
+ - %1$d otpremanje
+ - %1$d otpremanja
+ - %1$d otpremanja
- Ova slika će se izvoditi pod licencom %1$s
@@ -61,7 +58,7 @@
Otpremanje je započeto!
Datoteka „%1$s” je otpremljena!
Dodirnite da biste pogledali datoteku
- Postavljam datoteku: %s
+ Postavljam datoteku: %1$s
Otpremanje „%1$s”
Završavanje otpremanja „%1$s”
Otpremanje %1$s nije uspjelo
@@ -93,7 +90,7 @@
Otpremi
Pretraži kategorije
Snimi
- Preučitaj
+ Osvježi
Lista
(Još uvijek nema postavljenih datoteka)
Nema kategorija što odgovoraju %1$s
@@ -122,10 +119,10 @@
Standardna licenca
Koristi prethodni naziv i opis
Tema
- Autorstvo-Dijeliti pod istim uslovima 4.0
- Autorstvo 4.0
- Autorstvo-Dijeliti pod istim uslovima 3.0
- Autorstvo 3.0
+ Autorstvo-Dijeliti pod istim uslovima 4.0
+ Autorstvo 4.0
+ Autorstvo-Dijeliti pod istim uslovima 3.0
+ Autorstvo 3.0
Wikimedijina ostava skladišti većinu slika koje se upotrebljavaju na Wikipediji.
Vaše slike pomažu u obrazovanju ljudi širom svijeta!
Postavljajte slike koje su u potpunosti Vaše djelo:
@@ -153,7 +150,7 @@
Nema opisa
Nema razgovora
Nepoznata licenca
- Preučitaj
+ Osvježi
Potrebno ovlaštenje: Čitanje vanjske memorije. Aplikacija ne može pristupiti galeriji bez toga.
Potrebno ovlaštenje: Pisanje u vanjskoj memoriji. Aplikacija ne može pristupiti kameri/galeriji bez toga.
U redu
@@ -174,7 +171,6 @@
Prijavite se na naš beta-kanal na Google Playu i dobijte raniji pristup novim mogućnostima i ispravkama grešaka
2FA kôd
Zaista želite da se odjavite?
- Slika nije uspjela
Nisam pronašao potkategorije
Nisam pronašao nadređene kategorije
Planina Zao
@@ -253,7 +249,8 @@
Dijeli privitak
Nije uspelo
Logo
- Doprinosi korisnika: %s
+ Dozvola po potrebi: Utvrđavanje trenutne lokacije za predlaganje kategorija
+ Doprinosi korisnika: %1$s
Pregled korisničke stranice
Uredi kategorije
Napredne opcije
diff --git a/app/src/main/res/values-si/strings.xml b/app/src/main/res/values-si/strings.xml
index 92fa25f3e..3da2d78de 100644
--- a/app/src/main/res/values-si/strings.xml
+++ b/app/src/main/res/values-si/strings.xml
@@ -10,23 +10,21 @@
කොමන්ස් ලාන්චනය
කොමන්ස් වෙබ් අඩවිය
- - 1 ගොනුවක් උඩුගත කෙරේ
- - ගොනු %d ක් උඩුගත කෙරේ
-
-
- - තවමත් කිසිදු උඩුගත කිරීමක් නැත
- - එක් උඩුගත කිරීමක් ඇත
- - උඩුගත කිරීම් %1$d ක් ඇත
+ - %1$d ගොනුවක් උඩුගත කෙරේ
+ - ගොනු %1$d ක් උඩුගත කෙරේ
- 1 උඩුගත කිරීමක් ආරම්භ කරමින්
- උඩුගත කිරීම් %1$d ක් ආරම්භ කරමින්
-
+
- 1 උඩුගත කිරීමක්
- උඩුගත කිරීම් %1$d ක්
- මෙම පින්තූරය %1$s යටතේ වලංගු වනු ඇත
+
+ - මෙම පින්තූරය %1$s යටතේ වලංගු වනු ඇත
+ - මෙම පින්තූරය %1$s යටතේ වලංගු වනු ඇත
+
කොමන්ස්
සැකසුම්
පරිශීලක නාමය
@@ -90,9 +88,9 @@
බලපත්රය
පෙර මාතෘකාව/විස්තරය භාවිතා කරන්න
රාත්රී ආකාරය
- ඇට්රිබ්යුශන්-ශෙයාඅලයික් 4.0
- ඇට්රිබ්යුශන්-ශෙයාඅලයික් 3.0
- ඇට්රිබ්යුශන්
+ ඇට්රිබ්යුශන්-ශෙයාඅලයික් 4.0
+ ඇට්රිබ්යුශන්-ශෙයාඅලයික් 3.0
+ ඇට්රිබ්යුශන්
CC0
CC BY-SA 3.0
CC BY 3.0
@@ -128,7 +126,7 @@
ඔබට ඇත්තටම නික්මීමට අවශ්යද?
ලාමා සතුන්
ටියුලිප්
- විකිපීඩියා වෙතට ඔබව සාදරයෙන් පිළිගනිමු.
+ විකිපීඩියා වෙතට ඔබව සාදරයෙන් පිළිගනිමු.
සිඩ්නි ඔපෙරා නිවස
අවලංගු කරන්න
විවෘත කරන්න
diff --git a/app/src/main/res/values-sk/strings.xml b/app/src/main/res/values-sk/strings.xml
index c777c5e56..8d0b7a746 100644
--- a/app/src/main/res/values-sk/strings.xml
+++ b/app/src/main/res/values-sk/strings.xml
@@ -12,7 +12,7 @@
-->
Facebooková stránka Commons
- Zdrojový kód Commons na Githube
+ Zdrojový kód Commons na Githube
Logo Commons
Webová stránka Commons
Odísť z výberu polohy
@@ -38,30 +38,24 @@
- nahráva sa %1$d súborov
- nahráva sa %1$d súborov
-
- - (%1$d)
- - (%1$d)
- - (%1$d)
-
-
Začatie nahrávania
- - Začínam nahrávať %d
- - Začínam nahrávanie %d
- - Začínam nahrávanie %d
-
+ - Začínam nahrávať %1$d
+ - Začínam nahrávanie %1$d
+ - Začínam nahrávanie %1$d
+ - Začínam nahrávanie %1$d
- - %d nahranie
- - %d nahrania
- - %d nahraní
-
+ - %1$d nahranie
+ - %1$d nahrania
+ - %1$d nahraní
+ - %1$d nahraní
- Tento obrázok bude licencovaný cez %1$s
- Tieto obrázky budú licencované cez %1$s
- Tieto obrázky budú licencované cez %1$s
-
+ - Tieto obrázky budú licencované cez %1$s
- %1$d nahranie
@@ -104,7 +98,7 @@
Nahrávanie v poradí (je zapnuté limitované pripojenie)
%1$s je nahraný!
Kliknutím zobrazíte váš upload
- Nahrávanie súboru): %s
+ Nahrávanie súboru): %1$s
%1$s nahrávanie
Dokončenie nahrávania %1$s
Nahrávanie %1$s zlyhalo
@@ -150,6 +144,7 @@
Nastavenia
Zaregistrovať sa
Najlepšie obrázky
+ Najlepšie obrázky sú fotografie od vysoko skúsených fotografov a ilustrátorov, ktoré vybrala komunita Wikimedie Commons ako jedny z najkvalitnejších na stránke.
Vlastný výber
Kategória
Kontrola
@@ -171,10 +166,10 @@
Predvolená licencia
Použiť predchádzajúci názov a popis
Motív
- Attribution-ShareAlike 4.0
- Attribution 4.0
- Attribution-ShareAlike 3.0
- Attribution 3.0
+ Attribution-ShareAlike 4.0
+ Attribution 4.0
+ Attribution-ShareAlike 3.0
+ Attribution 3.0
CC0
CC BY-SA 3.0
CC BY 3.0
@@ -235,15 +230,14 @@
Prihlásiť sa do nášho beta kanálu na Google Play a získavať včasný prístup k novinkám a opravám chýb
Kód pre dvojfaktorové overenie (2FA)
Naozaj sa chcete odhlásiť?
- Obrázok zlyhal
Neboli nájdené žiadne podkategórie
Neboli nájdené žiadne rodičovské kategórie
Hora Zaó
Lamy
Dúhový most
Tulipán
- Vitajte na Wikipédii
- Úvod do autorských práv
+ Vitajte na Wikipédii
+ Úvod do autorských práv
Opera v Sydney
Zrušiť
Otvoriť
@@ -377,11 +371,10 @@
Zmazať
Úspechy
Profil
- Štatistiky
Obdržané poďakovania
Najlepšie obrázky
Obrázky cez „Miesta v okolí“
- Úroveň
+ Úroveň %1$d
Nahrané obrázky
Nerevertované obrázky
Použité obrázky
@@ -440,7 +433,7 @@
Znovu nezobrazovať
Žiadať povolenie prístupu k polohe
Požiada o oprávnenie k prístupu k polohe, pokiaľ je to potrebné pre funkciu zobrazenia miest v okolí.
- Nastala chyba, úspechy sa nám nepodarilo načítať
+ Nastala chyba, úspechy sa nám nepodarilo načítať
Urobili ste toľko príspevkov, že to náš systém výpočtu úspechov nedokáže zvládnuť. Toto je konečný úspech.
Končí:
Zobraziť kampane
@@ -462,11 +455,11 @@
Nepodarilo sa vyžiadať kontrolu kategórie %1$s
Posielam požiadavku na kontrolu kategórie %1$s
Hotovo
- Posielanie poďakovania bolo úspešné
- Úspešne ste poďakovali používateľovi/používateľke %1$s
- Poďakovanie používateľovi/používateľke %1$s sa nepodarilo
- Poslanie poďakovania bolo neúspešné
- Posielanie poďakovania používateľovi/používateľke %1$s
+ Posielanie poďakovania bolo úspešné
+ Úspešne ste poďakovali používateľovi/používateľke %1$s
+ Poďakovanie používateľovi/používateľke %1$s sa nepodarilo
+ Poslanie poďakovania bolo neúspešné
+ Posielanie poďakovania používateľovi/používateľke %1$s
Je to v súlade s pravidlami autorských práv?
Je to kategorizované správne?
Je to v poriadku?
@@ -492,15 +485,14 @@
Zobraziť neprečítané
Nastala chyba pri vyberaní obrázkov
Čakajte, prosím...
- Najlepšie obrázky sú fotografie od vysoko skúsených fotografov a ilustrátorov, ktoré vybrala komunita Wikimedie Commons ako jedny z najkvalitnejších na stránke.
Obrázky nahrané cez Miesta v okolí sú obrázky, ktoré sú nahrané vďaka objavovaniu miest na mape.
Táto funkcia umožňuje poslať poďakovanie za užitočné úpravy používateľom – použitím malého odkazu poďakovať v histórií stránky alebo na stránke rozdielu medzi revíziami.
- Kopírovať do nasledovného média
+ Kopírovať do nasledovného média
Skopírované
Príklady dobrých obrázkov na nahranie na Commons
Príklady obrázkov, ktoré by ste nemali nahrávať
Preskočiť obrázok
- Sťahovanie zlyhalo! Nemôžeme stiahnuť súbor bez povolenia k prístupu k externému úložisku.
+ Sťahovanie zlyhalo! Nemôžeme stiahnuť súbor bez povolenia k prístupu k externému úložisku.
Spravovať EXIF dáta
Vybrať, ktoré EXIF dáta sa ponechajú
Autor
@@ -510,8 +502,6 @@
Model objektívu
Sériové čísla
Softvér
- Prístup k polohe médií bol odmietnutý
- Možno nebudeme môcť automaticky získať údaje o polohe z obrázkov, ktoré nahráte. Pred odoslaním, prosím, pridajte ku každému obrázku údaj o polohe.
Nahrávajte fotky na Wikimedia Commons priamo z vášho mobilu. Stiahnite si aplikáciu Wikimedia Commons teraz: %1$s
Zdieľať aplikáciu cez...
Informácie o obrázku
@@ -570,7 +560,7 @@
Upraviť popisy a titulky
Zdieľať obrázok cez
Nemáte zatiaľ žiadne príspevky
- %s zatiaľ nevytvoril/a žiadne príspevky
+ %1$s zatiaľ nevytvoril/a žiadne príspevky
Účet bol vytvorený!
Text bol skopírovaný do schránky.
Oznámenie označené ako prečítané
@@ -579,7 +569,7 @@
Existuje
Potrebuje fotku
Typ miesta:
- Most, múzeum, hotel atď.
+ Most, múzeum, hotel atď.
Pri prihlásení nastala chyba. Musíte si obnoviť vaše heslo!
MÉDIA
DETSKÉ TRIEDY
@@ -619,9 +609,9 @@
3. Nájdite vhodný odsek v článku pre Váš obrázok
4. Kliknite na ikonku „Upraviť“ (tú s ceruzkou) pre daný odsek.
5. Vložte wikitext na vhodné miesto.
- 6. Ak načim, upravte wikitext pre vhodné umiestnenie. Pre viac informácií, pozrite <a href=\"https://sk.wikipedia.org/wiki/Pomoc:Obr%C3%A1zok#Vlo%C5%BEenie_obr%C3%A1zku_do_%C4%8Dl%C3%A1nku\">sem</a>.
+ 6. Ak načim, upravte wikitext pre vhodné umiestnenie. Pre viac informácií, pozrite <a href=\"https://sk.wikipedia.org/wiki/Pomoc:Obrázok#Vloženie_obrázku_do_článku\">sem</a>.
7. Uložte článok
- Skopírujte wikikód
+ Skopírujte wikikód
pozastaviť
pokračovať
Pozastavené
@@ -688,7 +678,7 @@
Späť
Vitajte vo vlastnom výbere obrázkov
Tento výberový nástroj vám ukazuje, ktoré obrázky ste už nahrali na Commons.
- Na rozdiel od obrázka v ľavo, obrázkov v pravo má logo Commons, ktoré indikuje, že už je nahraný. Podržte kurzor nad obrázkom pre náhľad.
+ Na rozdiel od obrázka v ľavo, obrázkov v pravo má logo Commons, ktoré indikuje, že už je nahraný. Podržte kurzor nad obrázkom pre náhľad.
Úžasné
Tento obrázok už bol do Commons nahraný.
Z technických dôvodov aplikácia nemôže spoľahlivo nahrať viac ako %1$d obrázkov naraz. Maximálny počet %1$d bol prekročený o %2$d.
@@ -702,8 +692,9 @@
Wkki miluje monumenty je medzinárodná súťaž fotografií monumentov organizovaná Wikemédiou
Potrebné povolenie
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
+ Voliteľné oprávnenie: Umožniť aplikácii, aby získavala aktuálnu polohu a ponúkala na jej základe navrhované kategórie
+ Príspevky používateľa: %1$s
+ Úspechy používateľa: %1$s
Zobraziť profil používateľa
Upraviť vyobrazenia
Upraviť kategórie
@@ -714,7 +705,7 @@
Údaje o polohe pomáhajú editorom nájsť Váš obrázok a spraviť ho viac užitočným. \nVaše nedávne nahrávania nemajú polohu.\nOdporúčame Vám zapnúť zisťovanie polohy v nastaveniach Vašej kamery. \nĎakujeme!
Nenašli sa žiadne polohy
Čo tak pridať miesto kde bol tento obrázok urobený? Údaje o polohe pomáhajú editorom Wiki nájsť Váš obrázok a urobiť ho tak viac užitočným. Ďakujeme!
- Pridať polohu
+ Pridať polohu
Prosím, odstráňte z tohto e-mailu informácie, ktoré nechcete zverejniť. Tiež, prosím, berte na vedomie, že vaša e-mailová adresa, z ktorej posielate príspevky, bude zverejnená.
Podrobnosti
Úspechy sú dostupné len v prod flavor. Prosím, skontrolujte vývojársku dokumentáciu.
@@ -735,8 +726,8 @@
Zrušiť označenie, že obrázok nie je určený na nahratie
Obrázok sa označuje ako nevhodný na nahratie
Ruší sa označenie, že obrázok nie je určený na nahratie
- Zobraziť už spracované obrázky
- Už spracované obrázky sú skryté
+ Zobraziť už spracované obrázky
+ Už spracované obrázky sú skryté
Nenašli sa žiadne ďalšie obrázky
Tento obrázok je už nahratý
Tento obrázok nebolo možné vybrať na nahratie
@@ -770,12 +761,12 @@
Platnosť vášho prihlásenia vypršala. Prihláste sa znovu, prosím.
Nie je k dispozícii žiadna aplikácia na otvorenie GPX súborov
Súbor úspešne uložený
- Chcete otvoriť GPX súbor?
- Chcete otvoriť KML súbor?
- KML súbor sa nepodarilo uložiť.
- GPX súbor sa nepodarilo uložiť.
- KML súbor sa ukladá
- GPX súbor sa ukladá
+ Chcete otvoriť GPX súbor?
+ Chcete otvoriť KML súbor?
+ KML súbor sa nepodarilo uložiť.
+ GPX súbor sa nepodarilo uložiť.
+ KML súbor sa ukladá
+ GPX súbor sa ukladá
Pamätajte, že všetkým obrázkom vo viacnásobnom nahratí budú pridelené rovnaké kategórie a popisy. Ak obrázky nezdieľajú rovnaký popis a kategórie, vykonajte niekoľko samostatných nahratí, prosím.
Poznámka k viacnásobnému nahrávaniu
Oznámte problém s touto položkou na Wikiúdajoch
diff --git a/app/src/main/res/values-skr/strings.xml b/app/src/main/res/values-skr/strings.xml
index c76bf88a7..d2659d5f6 100644
--- a/app/src/main/res/values-skr/strings.xml
+++ b/app/src/main/res/values-skr/strings.xml
@@ -4,7 +4,7 @@
-->
کامنز فیس بک ورقہ
- کامنز گٹ ہب ماخذ کوڈ
+ کامنز گٹ ہب ماخذ کوڈ
کامنز لوگو
کامنز ویب سائٹ
جمع کرواؤ
@@ -119,9 +119,8 @@
کجھ نی ݙسیا
بیٹا ٹیسٹر بݨو
بھلا تساں سچی دا لاگ آؤٹ تھیوݨ چاہندے ہو؟
- میڈیا فوٹو ناکام
گل لالہ
- وکی پیڈیا وچ ست بسم اللہ
+ وکی پیڈیا وچ ست بسم اللہ
منسوخ
کھولو
بند کرو
@@ -169,8 +168,7 @@
مٹاؤ
کامیابیاں
پروفائل
- شماريات
- درجہ
+ درجہ %1$d
ورتیل تصویراں
خرابی تھی ڳئی ہے!
ونگاراں
@@ -259,7 +257,7 @@
اعلیٰ اختیارات
لاڳو کرو
ولدا ٹھیک کرو
- محل وقوع شامل کرو
+ محل وقوع شامل کرو
تفصیلاں
انڈرائیڈ ورژن
ڈیوائس ماڈل
diff --git a/app/src/main/res/values-sl/strings.xml b/app/src/main/res/values-sl/strings.xml
index 414d85e47..b24c5a364 100644
--- a/app/src/main/res/values-sl/strings.xml
+++ b/app/src/main/res/values-sl/strings.xml
@@ -8,7 +8,7 @@
-->
Facebook stran Zbirke
- Izvorna koda Zbirke v shrambi Github
+ Izvorna koda Zbirke v shrambi Github
Logotip Zbirke
Spletno mesto Zbirke
Izhod iz izbirnika lokacije
@@ -34,24 +34,18 @@
- Nalagam %1$d datoteke
- Nalagam %1$d datotek
-
- - (%1$d)
- - (%1$d)
- - (%1$d)
- - (%1$d)
-
Začenjam nalaganje
- - Obdelujem %d nalaganje
- - Obdelujem %d nalaganji
- - Obdelujem %d nalaganja
- - Obdelujem %d nalaganj
+ - Obdelujem %1$d nalaganje
+ - Obdelujem %1$d nalaganji
+ - Obdelujem %1$d nalaganja
+ - Obdelujem %1$d nalaganj
- - %d nalaganje
- - %d nalaganji
- - %d nalaganja
- - %d nalaganj
+ - %1$d nalaganje
+ - %1$d nalaganji
+ - %1$d nalaganja
+ - %1$d nalaganj
- Slika bo objavljena pod licenco %1$s
@@ -101,7 +95,7 @@
Nalaganje na čakanju (vklopljen je način omejene povezanosti)
Datoteka »%1$s« je naložena!
Tapnite za ogled naložene datoteke
- Nalagam datoteko: %s
+ Nalagam datoteko: %1$s
Nalagam %1$s
Končujem nalaganje datoteke »%1$s«
Nalaganje datoteke »%1$s« ni uspelo
@@ -151,6 +145,7 @@
Nastavitve
Ustvari račun
Izbrane slike
+ Izbrane slike so slike izvrstnih fotografov in ilustratorjev, ki jih je skupnost Wikimedijine zbirke prepoznala kot najbolj kakovostne v tem projektu.
Izbirnik po meri
Kategorija
Ocenjevanje
@@ -172,10 +167,10 @@
Privzeta licenca
Uporabi prejšnji naslov in opis
Tema
- Priznanje avtorstva-Deljenje pod enakimi pogoji 4.0
- Priznanje avtorstva 4.0
- Priznanje avtorstva-Deljenje pod enakimi pogoji 3.0
- Priznanje avtorstva 3.0
+ Priznanje avtorstva-Deljenje pod enakimi pogoji 4.0
+ Priznanje avtorstva 4.0
+ Priznanje avtorstva-Deljenje pod enakimi pogoji 3.0
+ Priznanje avtorstva 3.0
CC0
CC BY-SA 3.0
CC BY 3.0
@@ -237,15 +232,14 @@
Koda 2FA
Koda za preverjanje e-pošte
Ali se res želite odjaviti?
- Nalaganje datoteke ni uspelo
Najdena ni bila nobena podkategorija
Najdena ni bila nobena nadrejena kategorija
Gora Zao
Lame
Mavrični most
Tulipan
- Pozdrav v Wikipediji
- Pozdrav (avtorske pravice)
+ Pozdrav v Wikipediji
+ Pozdrav (avtorske pravice)
Sydneyjska operna hiša
Prekliči
Odpri
@@ -294,7 +288,7 @@
V prihodnosti se boste morali za nalaganje slik prijaviti.
Za uporabo te možnosti se prijavite
Kopiraj vikibesedilo v odložišče
- Vikibesedilo je skopirano v odložišče
+ Vikibesedilo je kopirano v odložišče
Bližnje mogoče ne bo pravilno delovalo. Kraj ni na voljo.
Internet ni na voljo. Prikazani so samo predpomnjeni kraji.
Dostop do lokacije je bil zavrnjen. Za uporabo te možnosti ročno nastavite svojo lokacijo.
@@ -312,7 +306,7 @@
Napaka pri pridobivanju obvestil
Napaka pri pridobivanju slike za pregled. Pritisnite Osveži za ponovni poskus.
Ni najdenih obvestil
- Prevedi
+ Prevodi
Jeziki
Izberite jezike, za katere želite pošiljati prevode
Nadaljuj
@@ -381,19 +375,17 @@
Dosežki
Profil
Značke
- Statistika
Prejete zahvale
Izbrane slike
Slike iz »Bližnji kraji«
- Raven %d
- %s (raven %s)
- %s (%s)
+ Raven %1$d
+ %1$s (raven %2$s)
Naložene slike
Nevrnjene slike
Uporabljene slike
Delite svoje dosežke s prijatelji!
Ko boste izpolnili te zahteve, se bo vaša raven zvišala. Predmeti v razdelku »Statistika« ne štejejo.
- Potrebno najmanj:
+ Potrebno najmanj:
Število slik, ki ste jih naložili v Zbirko, ne glede na program za nalaganje
Delež slik v Zbirki, ki niso bile izbrisane
Število slik, ki ste jih naložili v Zbirko in se uporabljajo v člankih Wikipedije
@@ -425,10 +417,10 @@
Dodali niste nobenega zaznamka
Zaznamki
Dnevniško beleženje se je začelo. Prosimo, ZNOVA ZAŽENITE aplikacijo, opravite dejanje, ki ga želite zabeležiti, in nato znova tapnite »Pošlji dnevniški zapis«.
- Naložil sem jo pomotoma
+ Naložil_a sem jo pomotoma
Nisem vedel_a, da bo javno vidna
Spoznal sem, da je to slabo za mojo zasebnost
- Premislil_a sem si, ne želim več biti javno viden_na
+ Premislil_a sem si, ne želim več, da je javno vidna
Ta slika žal ni zanimiva za enciklopedijo.
Sliko sem naložil/a sam/a dne %1$s. Uporablja se v %2$d članku(ih).
Pozdravljeni v Wikimedijini zbirki!\n\nTapnite gumb dodaj in naložite svojo prvo predstavnostno datoteko.
@@ -447,7 +439,7 @@
Nikoli več ne vprašaj
Vprašaj za dovoljenje za lokacijo
Vprašaj za dovoljenje za uporabo lokacije, ko je to potrebno za ogled obvestila o bližnjih krajih.
- Nekaj je šlo narobe. Dosežkov ni bilo mogoče pridobiti.
+ Nekaj je šlo narobe. Dosežkov ni bilo mogoče pridobiti.
Opravili ste toliko prispevkov, da jih naš sistem izračunavanja ne more razčleniti. To je vrhunski dosežek.
Konec:
Prikaži akcije
@@ -475,11 +467,11 @@
Preverjanja kategorij za »%1$s« ni bilo mogoče zahtevati
Zahtevam preverjanje kategorij za »%1$s«
Opravljeno
- Pošiljanje zahvale: uspešno
- Zahvala uporabniku_ci %1$s je bila uspešno poslana
- Pošiljanje zahvale uporabniku_ci %1$s ni uspelo
- Pošiljanje zahvale: neuspešno
- Pošiljam zahvalo uporabniku/ici %1$s
+ Pošiljanje zahvale: uspešno
+ Zahvala uporabniku_ci %1$s je bila uspešno poslana
+ Pošiljanje zahvale uporabniku_ci %1$s ni uspelo
+ Pošiljanje zahvale: neuspešno
+ Pošiljam zahvalo za %1$s
Ali so tu upoštevane avtorske pravice?
Ali je to pravilno kategorizirano?
Ali to spada v okvir projekta?
@@ -506,15 +498,14 @@
Ogled neprebranih
Pri izbiri slik je prišlo do napake
Prosimo, počakajte ...
- Izbrane slike so slike izvrstnih fotografov in ilustratorjev, ki jih je skupnost Wikimedijine zbirke prepoznala kot najbolj kakovostne v tem projektu.
Slike, naložene z Bližnjimi kraji, so slike, ki so naložene z odkrivanjem krajev na zemljevidu.
Ta možnost vam omogoča, da urejevalcem, ki so opravili koristno urejanje, pošljete zahvalo – z uporabo kratke povezave na strani zgodovine ali strani primerjave.
- Kopiraj na naslednjo predstavnostno datoteko
- Skopirano
+ Kopiraj na naslednjo predstavnostno datoteko
+ Kopirano
Zgledi dobrih slik za nalaganje v Zbirko
Zgledi slik, ki niso primerne za nalaganje
Preskoči to sliko
- Prenos ni uspel!! Datoteke ne moremo prenesti brez dovoljenja za zunanje shranjevanje.
+ Prenos ni uspel!! Datoteke ne moremo prenesti brez dovoljenja za zunanje shranjevanje.
Upravljanje oznak EXIF
Izberite oznake EXIF, ki jih želite shraniti pri nalaganju
Avtor
@@ -524,8 +515,6 @@
Model leče
Serijske številke
Programska oprema
- Dostop do lokacije predstavnosti zavrnjen
- Za slike, ki jih nalagate, ne moremo samodejno pridobiti lokacije. Pred pošiljanjem dodajte za vsako sliko ustrezno lokacijo.
Nalagajte slike v Wikimedijino zbirko neposredno iz telefona. Prenesite aplikacijo Commons zdaj: %1$s
Deli aplikacijo prek ...
Informacije o sliki
@@ -585,7 +574,7 @@
Uredi opise in napise
Deli slike prek ...
Ničesar še niste prispevali
- %s ni opravil_a še nobenega prispevka
+ %1$s ni opravil_a še nobenega prispevka
Račun ustvarjen!
Besedilo kopirano v odložišče
Obvestilo označeno kot prebrano
@@ -594,7 +583,7 @@
Obstaja
Potrebuje fotografijo
Vrsta kraja:
- Most, muzej, hotel idr.
+ Most, muzej, hotel idr.
Pri prijavi je šlo nekaj narobe. Ponastaviti morate geslo!!
MEDIJ
PODREJENI RAZREDI
@@ -634,9 +623,9 @@
3. V članku poiščite ustrezen razdelek za svojo sliko.
4. Kliknite ikono Uredi (svinčnik) tega razdelka.
5. Prilepite vikibesedilo na ustrezno mesto.
- 6. Po potrebi vikibesedilo uredite, da popravite položaj slike. Za več informacij glejte <a href=\"https://sl.wikipedia.org/wiki/Wikipedija:Raz%C5%A1irjena_skladnja_za_slike\">tukaj</a>.
+ 6. Po potrebi vikibesedilo uredite, da popravite položaj slike. Za več informacij glejte <a href=\"https://sl.wikipedia.org/wiki/Wikipedija:Razširjena_skladnja_za_slike\">tukaj</a>.
7. Objavite članek.
- Kopiraj vikibesedilo v odložišče
+ Kopiraj vikibesedilo v odložišče
premor
nadaljuj
Premor
@@ -665,7 +654,7 @@
Način omejene povezanosti izklopljen. Nalaganje se bo zdaj nadaljevalo.
Način omejene povezanosti
Kakovostne slike
- Kakovostne slike so ponazoritve ali fotografije, ki ustrezajo nekaterim merilom kakovosti (ta so predvsem tehnična) in so dragocene za projekte Wikimedie
+ Kakovostne slike so ilustracije ali fotografije, ki ustrezajo nekaterim merilom kakovosti (ta so predvsem tehnična) in so dragocene za projekte Wikimedie
Nalaganje se nadaljuje ...
Zaustavljam nalaganje ...
Preklicujem nalaganje ...
@@ -691,7 +680,7 @@
Prikaži v apu
Uredi lokacijo
Slikovni prikaz izbirnika lokacije
- Senca slikovnega prikaza izbirnika lokacije
+ Senca slikovnega prikaza izbirnika lokacije
Lokacija slike
Preverite, ali je lokacija pravilna
Oznaka
@@ -703,7 +692,7 @@
Nazaj
Pozdravljeni v Izbiralniku slik po meri
Ta izbirnik vam pokaže, katere slike ste že naložili v Zbirko.
- V nasprotju s sliko na levi je slika na desni označena z logotipom Zbirke, kar pomeni, da je v projekt že naložena.\n Za predogled slike se je dotaknite in jo pridržite.
+ V nasprotju s sliko na levi je slika na desni označena z logotipom Zbirke, kar pomeni, da je v projekt že naložena.\n Za predogled slike se je dotaknite in jo pridržite.
Odlično
Ta slika je že naložena v Zbirko.
Zaradi tehničnih razlogov aplikacija ne more zanesljivo naložiti več kot %1$d slik hkrati. Omejitev nalaganja %1$d je bila presežena za %2$d.
@@ -719,8 +708,9 @@
Viki obožuje spomenike je mednarodni fotografski natečaj za spomenike, ki ga organizira Fundacija Wikimedia.
Potrebno je dovoljenje
Bližnji zemljevidi morajo za pravilno delovanje prebrati STANJE TELEFONA
- Prispevki uporabnika: %s
- Dosežki uporabnika: %s
+ Neobvezno dovoljenje: pridobitev trenutne lokacije za predlaganje kategorij
+ Prispevki uporabnika: %1$s
+ Dosežki uporabnika: %1$s
Ogled uporabniškega profila
Uredi slike
Uredi kategorije
@@ -731,7 +721,7 @@
Podatki o lokaciji pomagajo urejevalcem vikijev najti vašo sliko, s čimer se močno poveča njena uporabnost.\nPredlagamo vam, da v nastavitvah aplikacije fotoaparata vklopite označevanje lokacije.\nHvala za prispevanje!
Ni najdene lokacije
Kaj, če bi dodali kraj, kjer je bila slika posneta?\nPodatki o lokaciji pomagajo vikiurejevalcem poiskati sliko, s čimer ta postane precej uporabnejša.\nHvala!
- Dodaj lokacijo
+ Dodaj lokacijo
Iz te e-pošte odstranite vse podatke, ki jih ne želite javno deliti. Upoštevajte, da bodo vaš e-poštni naslov ter povezano ime in profilna slika javno vidni.
Podrobnosti
Dosežki so na voljo samo v produkcijski različici. Preverite dokumentacijo razvijalcev.
@@ -752,8 +742,8 @@
Odznači kot ni za nalaganje
Označevanje kot ni za naložitev
Odznačevanje kot ni za naložitev
- Prikaži že obdelane slike
- Skrivanje že obdelanih slik
+ Prikaži že obdelane slike
+ Skrivanje že obdelanih slik
Ni drugih najdenih slik
Ta slika je že naložena
Te slike ni mogoče izbrati za naložitev
@@ -762,7 +752,7 @@
Prijava
Nastavitev belega ozadja
Nastavitev črnega ozadja
- Prijavi kršitev
+ Prijava kršitve
Prijavi uporabnika
Prijavi to vsebino
Zahtevaj blokiranje uporabnika
@@ -789,17 +779,17 @@
Vaša prijava je potekla. Prosimo, prijavite se znova.
Na voljo ni nobena aplikacija za odpiranje datotek GPX
Datoteka je uspešno shranjena
- Ali želite odpreti datoteko GPX?
- Ali želite odpreti datoteko KML?
- Shranjevanje datoteke KML ni uspelo.
- Shranjevanje datoteke GPX ni uspelo.
- Shranjevanje datoteke KML
- Shranjevanje datoteke GPX
+ Ali želite odpreti datoteko GPX?
+ Ali želite odpreti datoteko KML?
+ Shranjevanje datoteke KML ni uspelo.
+ Shranjevanje datoteke GPX ni uspelo.
+ Shranjevanje datoteke KML
+ Shranjevanje datoteke GPX
- - %d izbrana slika
- - %d izbrani sliki
- - %d izbranih slik
- - %d izbranih slik
+ - %1$d izbrana slika
+ - %1$d izbrani sliki
+ - %1$d izbranih slik
+ - %1$d izbranih slik
Upoštevajte, da imajo vse slike v večkratnem nalaganju enake kategorije in upodobitve. Če slike nimajo skupnih upodobitev in kategorij, izvedite več ločenih nalaganj.
Opomba o večkratnih nalaganjih
@@ -834,8 +824,7 @@
Zbirka
Drugi vikiji
•
- Uporabe datotek
- SingleWebViewActivity
+ Uporabe datoteke
Račun
Izgini račun
Opozorilo o izginjenju računa
diff --git a/app/src/main/res/values-sr/strings.xml b/app/src/main/res/values-sr/strings.xml
index a41096306..8202d6afd 100644
--- a/app/src/main/res/values-sr/strings.xml
+++ b/app/src/main/res/values-sr/strings.xml
@@ -16,7 +16,7 @@
-->
Фејсбук страница Оставе
- Изворни код на Github-у
+ Commons GitHub Source Code
Лого Оставе
Веб-сајт Оставе
Пошаљи
@@ -37,18 +37,16 @@
- %1$d датотека се отпрема
- %1$d датотеке се отпремају
-
- - %1$d отпремање
- - %1$d отпремања
-
Покретање отпремања
- - Процесуирање %d отпремање
- - Процесуирање %d отпремања
+ - Процесуирање %1$d отпремање
+ - Процесуирање %1$d отпремање
+ - Процесуирање %1$d отпремање
- - %d отпремање
- - %d отпремања
+ - %1$d отпремање
+ - %1$d отпремања
+ - %1$d отпремања
- Слика ће се водити под лиценцом %1$s
@@ -92,7 +90,7 @@
Отпремање је у реду (омогућен режим ограничене везе)
Датотека „%1$s” је отпремљена.
Додирните да бисте видели отпремање
- Отпремање датотеке „%s”
+ Отпремање датотеке: %1$s
Отпремање датотеке „%1$s”
Завршавање отпремања датотеке „%1$s”
Отпремање датотеке „%1$s” није успело
@@ -137,6 +135,7 @@
Подешавања
Отвори налог
Изабране слике
+ Истакнуте слике су слике искусних фотографа и илустратора, које је заједница Викимедијине оставе одабрала као неке од највећег квалитета на сајту.
Категорија
Преглед слика
О апликацији
@@ -152,6 +151,7 @@
Још увек нисте отпремили ниједну фотографију.
Покушај поново
Откажи
+ Сви језици
Слањем ове слике, ја тврдим да је у питању мој рад, да не садржи материјал или селфије заштићене ауторским правима, те да је на остале начине у складу са <a href=\"https://commons.wikimedia.org/wiki/Commons:Policies_and_guidelines\">смерницама Викимедијине оставе</a>.
Преузми
Подразумевана лиценца
@@ -221,15 +221,14 @@
Прикључите се нашем каналу бета верзија на Google Play-у и раније приступајте новим функцијама и исправкама грешака
2FA код
Заиста желите да се одјавите?
- Медијска слика неуспешна
Поткатегорије нису пронађене
Надређене категорије нису пронађене
Планина Зао
Ламе
Дугин мост
Тулипан
- Добродошлица Википедији
- Добродошлица за ауторска права
+ Шематска слика генеричког Википедијиног чланка.
+ Цртеж наслаганих папира са прецртаним знаком за ауторска права.
Сиднејска опера
Откажи
Отвори
@@ -261,6 +260,7 @@
Процес отпремања захтева активни приступ интернету. Проверите вашу везу са интернетом.
Пронађени су проблеми у слици
Молимо Вас да отпремате слике које сте ви направили. Не отпремајте слике које сте преузели са интернета.
+ Отпремања
Чувај снимке у апликацији
Чување слика снимљених камером у меморији на вашем уређају
Пријава на налог
@@ -332,6 +332,7 @@
Квиз
Желите ли да отпремите ову слику?
Питање
+ Нисам сигуран
Резултат
Ако наставите са отпремањем слика које захтевају брисање, ваш налог ће вероватно бити блокиран. Заиста желите да завршите квиз?
Више од %1$s слика које сте отпремили је обрисано. Уколико наставите да отпремате слике које је потребно обрисано, ваш налог ће највероватније бити блокиран.\n\nДа ли сте желели да видите туторијал поново и онда урадите квиз који ће вам помоћи да научите које слике требате или не требате да отпремате?
@@ -341,6 +342,7 @@
Један од циљева Оставе је прикупљање квалитетних слика. Због тога не би требало отпремати мутне слике. Увек покушајте да направите лепе слике са добрим осветљењем.
Слике из области технологије или културе су добродошле на Остави.
Тачних одговора: %1$s. Честитамо!
+ Настави
Изаберите једну од две опције да бисте одговорили на питање
Сесија пријаве је истекла. Пријавите се поново.
Делите квиз са пријатељима.
@@ -362,11 +364,10 @@
Избриши
Достигнућа
Профил
- Статистика
Захваљивања
Изабране слике
Слике преко „Места у близини”
- Ниво %d
+ Ниво %1$d
Отпремљене слике
Слике које нису уклоњене
Искоришћене слике
@@ -453,7 +454,7 @@
Захтевање провере категорије за %1$s
Урађено
Слање захвалнице: Успешно
- Успешно послата захвалница на %1$s
+ Послата захвалница на %1$s
Није успело слање захвалнице %1$s
Слање захвалнице: Није успело
Слање захвалница за %1$s
@@ -481,14 +482,13 @@
Прикажи непрочитано
Дошло је до грешке при избору слика
Сачекајте…
- Истакнуте слике су слике од веома искусних фотографа и илустратора, које је заједница Викимедијине оставе одабрала као неке од највећег квалитета на сајту.
Слике отпремљене преко Места у близини су слике које су отпремљене откривањем места на мапи.
Ова могућност омогућава уредницима да пошању обавештење захваљивања корисницима који су направили корисне измене - коришћењем мале везе за захваљивање на страници историје или разлици измена.
Копирано
Примери добрих слика за отпремање на Оставу
Примери слика које нису за отпремање
Прескочи слику
- Преузимање није успело!! Не можемо преузети датотеку без дозволе за приступ спољашњој меморији.
+ Преузимање није успело. Не можемо преузети датотеку без дозволе за приступ спољашњој меморији.
Управљање EXIF ознакама
Одаберите које EXIF желите да сачувате у отпремањима
Аутор
@@ -498,8 +498,6 @@
Модел објектива
Серијски бројеви
Софтвер
- Приступ локацији медија је одбијен
- Можда нећемо моћи да аутоматски прибавимо податке о локацији из слика које отпремите. Додајте одговарајућу локацију за сваку слику пре објављивања
Отпреми фотографије на Викимедијину Оставу директно са свог телефона. Преузми апликацију Оставе сада: %1$s
Подели апликацију преко...
Информације о слици
@@ -547,7 +545,7 @@
Уреди описе и натписе
Подели слику преко
Немате још увек доприноса
- %s још није доприносио/ла
+ %1$s још није доприносио/ла
Налог је отворен.
Текст је копиран у привремену меморију
Обавештење је означено прочитаним
@@ -591,7 +589,7 @@
5. Налепите викитекст на одговарајуће место.
6. Измените викитекст за одговарајуће позиционирање, уколико је потребно. Више информација можете пронаћи <a href=\"https://en.wikipedia.org/wiki/Wikipedia:Manual_of_Style/Images#How_to_place_an_image\">овде</a>.
7. Објавите чланак
- Копирајте вики синтаксу у међуспремник
+ Копирај викитекст
паузирај
настави
Паузирано
@@ -630,6 +628,8 @@
Напишите кратак натпис који објашњава шта слика приказује. У опису, наведите шта ову слику чини интересантном или типичном или ретком, и објасните контекст, био он видљив или не. Користите прецизну терминологију што више можете.
Остава чини ваше слике вишекратним и прилагођеним свима. Да ли желите да се одрекнете свих права? Да ли желите да вам се припишу? Да ли желите адаптације за коришћење исте лиценце?
Приказује
+ Назив
+ Опис
Лиценца медија
Детаљи медија
Прикажи страницу категорије
@@ -653,7 +653,7 @@
Назад
Добродошли у Прилагођен бирач слика
Овај бирач вам приказује које су слике већ отпремљене на Оставу.
- За разлику од слика са леве стране, слике на десној страни имају лого Оставе, што означава да су већ отпремљене. Додирните и држите за преглед слике.
+ За разлику од слика са леве стране, слике на десној страни имају лого Оставе, што означава да су већ отпремљене. \n\nДодирните и држите за преглед слике.
Одлично
Ова слика је већ отпремљена на Оставу.
Одбаци
@@ -664,8 +664,9 @@
Вики воли споменике
Вики воли споменике је међународно такмичење фотографија споменика, које организује Викимедија
Потребна је дозвола
- Доприноси корисника/це: %s
- Достигнућа корисника/це: %s
+ Необавезна дозвола: преузми тренутну локацију за предлоге категорија
+ Доприноси корисника/це: %1$s
+ Достигнућа корисника/це: %1$s
Прикажи корисничку страницу
Измени категорије
Напредне опције
@@ -695,8 +696,8 @@
Уклони ознаку „није за отпремање”
Означавање као „није за отпремање”
Уклоњена ознака „није за отпремање”
- Прикажи већ извршене слике
- Сакривање већ извршених слика
+ Прикажи већ обрађене слике
+ Сакривање већ обрађених слика
Није пронађено више слика
Ова слика је већ отпремљена
Није могуће одабрати ову слику за отпремање
@@ -730,11 +731,11 @@
Чување датотеке успешно
Чување KML датотеке није успело.
Чување GPX датотеке није успело.
- Чување KML датотеке
- Чување GPX датотеке
+ Чување KML датотеке...
+ Чување GPX датотеке...
- - %d слика је одабрана
- - %d слика је одабрано
+ - %1$d слика је одабрана
+ - %1$d слика је одабрано
Унесите коментар
Разговор
diff --git a/app/src/main/res/values-su/strings.xml b/app/src/main/res/values-su/strings.xml
index 70317c7a0..1684ae9e9 100644
--- a/app/src/main/res/values-su/strings.xml
+++ b/app/src/main/res/values-su/strings.xml
@@ -7,7 +7,7 @@
-->
Kaca Facebook Commons
- Kode Sumber Github Commons
+ Kode Sumber Github Commons
Logo Commons
Situs wéb Commons
Kaluar ti pamilih lokasi
@@ -29,14 +29,10 @@
- ngunjal %1$d berkas
- ngunjal %1$d berkas
-
- - (%1$d)
- - (%1$d)
-
Mitembeyan Ngamuat
- - Ngolah %d muatan
- - Ngolah %d muatan
+ - Ngolah %1$d muatan
+ - Ngolah %1$d muatan
- %1$d muatan
@@ -80,7 +76,7 @@
Muatan geus ngantri (sambungan diwates dijalankeun)
%1$s diunjal!
Toél pikeun némpo unjalan anjeun
- Ngamuat berkas: %s
+ Ngamuat berkas: %1$s
Ngunjal %1$s
Méréskeun unjalan %1$s
Gagal ngunjal %1$s
@@ -147,10 +143,10 @@
Lisénsi buhun
Paké judul jeung dadaran saméméhna
Téma
- Atribusi-BabagiSarupa 4.0
- Atribusi 4.0
- Atribusi-BabagiSarupa 3.0
- Atribusi 3.0
+ Atribusi-BabagiSarupa 4.0
+ Atribusi 4.0
+ Atribusi-BabagiSarupa 3.0
+ Atribusi 3.0
CC0
CC BY-SA 3.0
CC BY 3.0
@@ -208,15 +204,14 @@
Pilihan asup kana saluran béta kami di Google Play sarta meunangkeun aksés munggaran pikeun fitur anyar jeung pameneran kutu
Kode 2FA
Yakin anjeun rék kaluar?
- Gambar Média Gagal
Euweuh subkategorian
Euweuh kategorian
Mount Zao
Llamas
Sasak Katumbiri
Tulip
- Wilujeng Sumping Wikipédia
- Wilujeng Sumping Hak Cipta
+ Wilujeng Sumping Wikipédia
+ Wilujeng Sumping Hak Cipta
Imah Opérét Sydney
Bolay
Buka
@@ -329,11 +324,10 @@
Nominasi Pikeun Dipupus
Hapus
Préstasi
- Statistika
Panuhun Katampa
Gambar petingan
Gambar liwat \"Tempat Sabudeureun\"
- Tingkat
+ Tingkat %1$d
Gambar Diunjal
Gambar Teu Dibalikkeun
Gambar Dipaké
@@ -375,11 +369,11 @@
Teu bisa mundut ngecék kategori pikeun %1$s
Mundut ngecék kategori pikeun %1$s
Anggeus
- Ngirim Panuhun: Ngahasil
- Panuhun ngahasil dikirim ka %1$s
- Panuhun gagal dikirim ka %1$s
- Kiriman Panuhun: Gagal
- Ngirim Panuhun ka %1$s
+ Ngirim Panuhun: Ngahasil
+ Panuhun ngahasil dikirim ka %1$s
+ Panuhun gagal dikirim ka %1$s
+ Kiriman Panuhun: Gagal
+ Ngirim Panuhun ka %1$s
Ieu kategori nu bener?
Ieu dina wengkuan?
Daék teu anjeun nganuhunkeun kontributor?
@@ -416,4 +410,5 @@
Naha %1$s bet kudu dihapus?
%1$s dimuat ku: %2$s
Basa dadaran baku
+ Idin pilihan: Paké lokasi kiwari pikeun usulan kategori
diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml
index c5f361ee1..68ffdfbfc 100644
--- a/app/src/main/res/values-sv/strings.xml
+++ b/app/src/main/res/values-sv/strings.xml
@@ -13,7 +13,7 @@
-->
Commons Facebook-sida
- Commons Github-källkod
+ Commons Github-källkod
Commons-logotyp
Commons webbplats
Avsluta platsväljaren
@@ -37,18 +37,14 @@
- %1$d fil laddas upp
- %1$d filer laddas upp
-
- - (%1$d)
- - (%1$d)
-
Startar uppladdningar
- - Bearbetar %d uppladdning
- - Bearbetar %d uppladdningar
+ - Bearbetar %1$d uppladdning
+ - Bearbetar %1$d uppladdningar
- - %d uppladdning
- - %d uppladdningar
+ - %1$d uppladdning
+ - %1$d uppladdningar
- Denna bild kommer att licensieras under %1$s
@@ -92,7 +88,7 @@
Kölagd uppladdning (begränsat anslutningsläge har aktiverats)
%1$s överförd!
Tryck för att visa din uppladdning
- Påbörjar uppladdning av %s
+ Påbörjar uppladdning av %1$s
%1$s laddas upp
Avslutar uppladdning av %1$s
Kunde inte ladda upp %1$s
@@ -142,6 +138,7 @@
Inställningar
Registrera
Utvalda bilder
+ Utmärkta bilder är bilder från skickliga fotografer och illustratörer som gemenskapen på Wikimedia Commons har valt ut som bilder med den högsta kvalitetet på webbplatsen.
Anpassad selektor
Kategori
Granskning
@@ -163,10 +160,10 @@
Standardlicens
Använd föregående titel och beskrivning
Tema
- Erkännande-DelaLika 4.0
- Erkännande 4.0
- Erkännande-DelaLika 3.0
- Erkännande 3.0
+ Erkännande-DelaLika 4.0
+ Erkännande 4.0
+ Erkännande-DelaLika 3.0
+ Erkännande 3.0
CC0
CC BY-SA 3.0
CC BY 3.0
@@ -219,6 +216,7 @@
Beskrivning
Diskussion
Skapare
+ Uppladdare
Uppladdningsdatum
Licens
Koordinater
@@ -228,15 +226,14 @@
2-stegsverif.kod
E-postverifieringskod
Vill du verkligen logga ut?
- Mediabild misslyckades
Inga underkategorier hittades
Inga överordnade kategorier hittades
Zao
Lamor
Regnbågsbron
Tulpan
- Välkommen Wikipedia
- Välkommen upphovsrätt
+ Välkommen Wikipedia
+ Välkommen upphovsrätt
Sydneys operahus
Avbryt
Öppna
@@ -372,13 +369,11 @@
Prestationer
Profil
Märken
- Statistik
Mottagna tack
Utvalda bilder
Bilder via \"Platser i närheten\"
- Nivå %d
- %s (Nivå %s)
- %s (%s)
+ Nivå %1$d
+ %1$s (Nivå %2$s)
Uppladdade bilder
Bilder som inte har återställts
Bilder som används
@@ -421,7 +416,7 @@
Jag insåg att den är dålig för mitt privatliv
Jag ändrade mig, jag vill inte längre att den ska vara synlig offentligt
Tyvärr, denna bild är inte intressant för en encyklopedi
- Laddades upp av mig den %1$s och används i %2$d artiklar.
+ Laddades upp av mig den %1$s och används i minst %2$d artiklar.
Välkommen till Commons!\n\nLadda upp din första mediafil genom att trycka på knappen för att lägga till.
Inga kategorier har valts
Bilder utan kategorier används sällan. Är du säker på att du vill fortsätta utan att välja kategorier?
@@ -438,7 +433,7 @@
Fråga inte detta igen
Be om platsbehörighet
Fråga efter platsbehörighet vid behov för att visa aviseringskortet för i närheten.
- Någonting gick fel. Vi kunde inte hämta prestationer
+ Någonting gick fel. Vi kunde inte hämta prestationer
Du har gjort så många bidrag att vårt system för att beräkna prestationer inte hinner med. Detta är den ultimata prestationen.
Slutar den:
Visa kampanjer
@@ -466,11 +461,11 @@
Kunde inte begära kategorikontroll för %1$s
Begär kategorikontroll för %1$s
Klar
- Skickar tack: Färdig
- Skickade tack till %1$s
- Misslyckades att skicka tack %1$s
- Skickar tack: Misslyckades
- Skickar tack för %1$s
+ Skickar tack: Färdig
+ Skickade tack till %1$s
+ Misslyckades att skicka tack %1$s
+ Skickar tack: Misslyckades
+ Skickar tack för %1$s
Följer detta upphovsreglerna?
Är detta korrekt kategoriserat?
Är detta relevant?
@@ -497,15 +492,14 @@
Visa olästa
Fel uppstod när bilder valdes ut
Var god vänta…
- Utmärkta bilder är bilder från skickliga fotografer och illustratörer som gemenskapen på Wikimedia Commons har valt ut som bilder med den högsta kvalitetet på webbplatsen.
Bilder som har laddats upp via \"Platser i närheten\" är bilderna som laddas upp genom att upptäcka platser på kartan.
Denna funktion låter redigerare skicka en tackavisering till användare som gör användbara redigeringar – genom att använda en liten tacklänk på historik- eller diff-sidor.
- Kopiera till efterföljande media
+ Kopiera till efterföljande media
Kopierad
Exempel på bra bilder att ladda upp på Commons
Exempel på bilder att inte ladda upp
Hoppa över denna bild
- Nedladdning misslyckades!! Vi kan inte ladda ned filen utan behörighet för extern lagring.
+ Nedladdning misslyckades!! Vi kan inte ladda ned filen utan behörighet för extern lagring.
Hantera EXIF-taggar
Välj vilka EXIF-taggar att behålla i uppladdningar
Skapare
@@ -515,8 +509,6 @@
Objektiv
Serienummer
Programvara
- Åtkomst till mediaplats nekades
- Vi kanske inte automatiskt kan få platsdata från bilder du laddar upp. Lägg till lämplig plats för varje bild innan du skickar in
Ladda upp foton till Wikimedia Commons direkt från din telefon. Ladda ned Commons-appen nu: %1$s
Dela appen via...
Bildinfo
@@ -572,7 +564,7 @@
Redigera beskrivningar och bildtexter
Dela bild via
Du har ännu inte gjort några bidrag
- %s har ännu inte gjort några bidrag
+ %1$s har ännu inte gjort några bidrag
Konto har skapats!
Texten kopierades till urklipp
Avisering markerades som läst
@@ -581,11 +573,13 @@
Finns
Behöver foto
Platstyp:
- Bro, museum, hotell, etc.
+ Bro, museum, hotell, etc.
Någonting gick fel med inloggningen. Du måste återställa ditt lösenord!
MEDIA
UNDERORDNADE KLASSER
ÖVERORDNADE KLASSER
+ UNDERKATEGORIER
+ ÖVERORDNADE KATEGORIER
Hittade platser i närheten
Föreställer de här bilderna %1$s?
Är detta en bild på %1$s?
@@ -623,7 +617,7 @@
5. Klistra in wikitexten på det lämpliga stället.
6. Redigera wikitexten för att placera den mer lämpligt vid behov. För mer information, se <a href=\"https://en.wikipedia.org/wiki/Wikipedia:Manual_of_Style/Images#How_to_place_an_image\">här</a>.
7. Publicera artikeln
- Kopiera wikikod till urklipp
+ Kopiera wikikod till urklipp
pausa
återuppta
Pausad
@@ -690,7 +684,7 @@
Tillbaka
Välkommen till anpassade bildselektorn
Denna väljare visar vilka bilder som du redan har laddat upp på Commons.
- Till skillnad från bilden till vänster har bilden till höger Commons-logotypen, vilket innebär att den redan är uppladdad.\n Tryck och håll ned för att förhandsgranska bilden.
+ Till skillnad från bilden till vänster har bilden till höger Commons-logotypen, vilket innebär att den redan är uppladdad.\n Tryck och håll ned för att förhandsgranska bilden.
Häftigt
Denna bild har redan laddats upp till Commons.
Av tekniska skäl kan appen inte ladda upp fler än %1$d bilder samtidigt. Uppladdningsgränsen för %1$d har överskridits med %2$d.
@@ -704,8 +698,9 @@
Wiki Loves Monuments är en internationell fototävling för monument som organiseras av Wikimedia
Behöver behörighet
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
+ Valfri behörighet: Hämta aktuell plats för kategoriförslag
+ Bidrag av användare: %1$s
+ Prestationer av användare: %1$s
Visa användarprofil
Redigera beskrivningar
Redigera kategorier
@@ -716,7 +711,7 @@
Platsdata hjälper wikiredigerare att hitta din bild för att göra den mer användbar.\nDina nyliga uppladdningar har ingen plats.\nVi föreslår att du aktiverar platsen i dina kamerainställningar.\nTack för att du laddar upp!
Ingen plats hittades
Vad sägs om att lägga till platsen där denna bild togs?\nPlatsdata hjälper wikiredigerare att hitta din bild och göra den mycket mer användbar.\nTack!
- Lägg till plats
+ Lägg till plats
Var god ta bort all information från detta e-postmeddelande som du inte är bekväm med att dela offentligt. Observera även att e-postadressen du använder samt det associerade namnet och profilbilden kommer att synas offentligt.
Detaljer
Prestationer är endast tillgängliga i produktionsversionen. Se utvecklardokumentationen.
@@ -737,8 +732,8 @@
Avmarkera som inte för uppladdning
Markerar som inte för uppladdning
Avmarkerar som inte för uppladdning
- Visa redan åtgärdade bilder
- Döljer redan åtgärdade bilder
+ Visa redan åtgärdade bilder
+ Döljer redan åtgärdade bilder
Inga fler bilder hittades
Denna bild är redan uppladdad
Kan inte markera denna bild för uppladdning
@@ -761,7 +756,7 @@
Behörigheter krävs för funktionalitet
Lär dig hur du skriver en användbar beskrivning
Lär dig hur du skriver en användbar bildtext
- Se dina prestationer
+ Se dina prestationer
Redigera bild
Redigera plats
Plats uppdaterades!
@@ -774,15 +769,15 @@
Din inloggningssession löptes ut. Var god logga in igen.
Det finns inget tillgängligt program för att öppna GPX-filer
Filen sparades
- Vill du öppna GPX-filen?
- Vill du öppna KML-filen?
- Misslyckades att spara KML-filen.
- Misslyckades att spara GPX-filen.
- Sparar KML-fil
- Sparar GPX-fil
+ Vill du öppna GPX-filen?
+ Vill du öppna KML-filen?
+ Misslyckades att spara KML-filen.
+ Misslyckades att spara GPX-filen.
+ Sparar KML-fil
+ Sparar GPX-fil
- - %d markerad bild
- - %d markerade bilder
+ - %1$d markerad bild
+ - %1$d markerade bilder
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
@@ -818,7 +813,6 @@
Commons
Andra wikier
Filanvändning
- SingleWebViewActivity
Konto
Få kontot att försvinna
Varning om försvinnande konto
@@ -830,4 +824,5 @@
Visa i \"I närheten\"
Skapades och laddades upp av: %1$s
Skapad av %1$s och laddades upp av %2$s
+ Nominerad för radering
diff --git a/app/src/main/res/values-ta/strings.xml b/app/src/main/res/values-ta/strings.xml
index 762a8ca76..5cfee1bed 100644
--- a/app/src/main/res/values-ta/strings.xml
+++ b/app/src/main/res/values-ta/strings.xml
@@ -11,7 +11,7 @@
-->
பொதுவக முகநூல் பக்கம்
- பொதுவக கிட்டுகபு மூலக் குறி
+ பொதுவக கிட்டுகபு மூலக் குறி
பொதுவக இலச்சினை
பொதுவக வலைத்தளம்
இருப்பிடத் தேர்வியிலிருந்து வெளியேற்
@@ -49,7 +49,7 @@
பதிவேற்றம் வரிசைப்படுத்தப்பட்டது (வரையறுக்கப்பட்ட இணைப்பு முறை இயக்கப்பட்டது)
%1$s பதிவேற்றப்பட்டது!
உமது தரவேற்றத்தைக் காணத் தட்டுக
- கோப்பு பதிவேறுகிறது: %s
+ கோப்பு பதிவேறுகிறது: %1$s
%1$s தரவேற்றப்படுகிறது
%1$s தரவேற்றம் முடிக்கப்படுகிறது
%1$s பதிவேற்றம் தோற்றது
@@ -163,10 +163,9 @@
ஆயத்தொலைகள்
வழங்கப்படவில்லை
தாங்கள் மெய்யாகவே மூடுவதற்கு விரும்புகிறீர்களா?
- பட ஊடகம் தோல்வியடைந்தது
துணைப்பிரிவுகள் இல்லை
முதன்மை வகைகள் இல்லை
- விக்கிப்பீடியாவிற்கு வருக
+ விக்கிப்பீடியாவிற்கு வருக
ரத்து செய்
திற
மூடு
diff --git a/app/src/main/res/values-tcy/strings.xml b/app/src/main/res/values-tcy/strings.xml
index f3eb3562f..800206c82 100644
--- a/app/src/main/res/values-tcy/strings.xml
+++ b/app/src/main/res/values-tcy/strings.xml
@@ -10,7 +10,7 @@
-->
ಕಾಮನ್ಸ್ ಫೇಸ್ಬುಕ್ ಪುಟೊ
- ಕಾಮನ್ಸ್ ಗಿಥಬ್ ಮೂಲ ಕೋಡ್
+ ಕಾಮನ್ಸ್ ಗಿಥಬ್ ಮೂಲ ಕೋಡ್
ಕಾಮನ್ಸ್ ಲೋಗೋ
ಕಾಮನ್ಸ್ ವೆಬ್ಸೈಟ್
ಒಪ್ಪಿಸಾಲೆ
@@ -21,19 +21,6 @@
- %1$d ಕಡತ ಅಪ್ಲೊಡ್ ಆವೊಂದುಂಡು
- %1$d ಕಡತೊಲು ಅಪ್ಲೋಡ್ ಆವೊಂದುಂಡು
-
- - \@string/contributions_subtitle_zero
- - %1$d ಮಿತೆರಾಯಿನ
- - %1$d ಮಿತೆರಾಯಿನವು
-
-
- - Starting %1$d upload
- - Starting %1$d uploads
-
-
- - %1$d upload
- - %1$d uploads
-
- ಈ ಆಕೃತಿಗ್ ಲೈಸನ್ಸ್ ಆಪುಂಡು%1$ ಅಡಿಟ್
- ಈ ಆಕೃತಿಲೆಗ್ ಲೈಸನ್ಸ್ ಆಪುಂಡು %1$ ಅಡಿಟ್
@@ -63,7 +50,7 @@
ದಿಂಜಪುನಾ ಸುರು ಅಂಡ್!
%1$s ಅಪ್ಲೋಡ್ ಆಂಡ್!
ಇರೆನ ಅಪ್ಲೋಡ್ ತೂಯೆರೆ ಒತ್ತುಲೆ
- %s ಅಪ್ಲೋಡ್ ಸುರು ಆವೊಂದುಂಡು
+ %1$s ಅಪ್ಲೋಡ್ ಸುರು ಆವೊಂದುಂಡು
%1$s ಅಪ್ಲೋಡ್ ಆವೊಂದುಂಡು
%1$s ಅಪ್ಲೋಡ್ ಕೈದ್ ಆವೊಂದುಂಡು.
%1$s ಅಪ್ಲೋಡ್ ಆತಿಜಿ
@@ -119,10 +106,10 @@
ಪೂರ್ವನಿಯೋಜಿತ ಲೈಸನ್ಸ್.
ದುಂಬುದ ಪುದರ್ ಬಕ್ಕ ವಿವರಣೆನ್ ಕೊರ್ಲೆ.
ಕತ್ತಲೆದ ಕ್ರಮೊ
- ಅಸ್ಟ್ರೀಬುಷನ್ - ಸೇರ್ ಎ ಲೈಕ್ 4.0.
- Attribution 4.0
- Attribution-ShareAlike 3.0
- Attribution 3.0
+ ಅಸ್ಟ್ರೀಬುಷನ್ - ಸೇರ್ ಎ ಲೈಕ್ 4.0.
+ Attribution 4.0
+ Attribution-ShareAlike 3.0
+ Attribution 3.0
CC0
CC BY-SA 3.0
CC BY 3.0
@@ -174,15 +161,14 @@
Google Play ತಲ್ಪ ಇರ್ ಬೀಟಾ ಚಾನೆಲ್ ಆಯ್ಕೆ ಮಾಲ್ಪುಲೆ ಬುಕ್ಕ ಪೊಸ ವೈಶಿಷ್ಟ್ಯೊ ಅತ್ತಂದೆ ದೋಷ ಪರಿಹಾರಗ್ ದುಂಬು ಪ್ರವೇಶ ಪಡೆಲೆ.
2FA Code
ಇರ್ ನಿಜವಾತ್ ಲಾಗ್ಔಟ್ ಮಾಲ್ಪಿಯರ ಬಯಸುವರಾ?
- ಮೀಡಿಯಾ ಪಟೊ ಅಪ್ಲೋಡ್ ಅತ್ಜ್ಜಿ.
ಒವೆ ಉಪವರ್ಗೊಲು ಇಜ್ಜಿ.
ಇತ್ತೆ ಒವೆ ವರ್ಗೊಲು ಇಜ್ಜಿ.
\nಮೌಂಟ್ ಝಾವೋ.
\nಲಾಮಾಸ್.
\nರೇನ್ಬೋ ಬ್ರಿಡ್ಜ್.
ಟುಲಿಪ್.
- ವಿಕಿಪೀಡಿಯಗ್ ಸ್ವಾಗತೊ
- ಕೃತಿಸ್ವಾಮ್ಯಗ್ ಸ್ವಾಗತೊ
+ ವಿಕಿಪೀಡಿಯಗ್ ಸ್ವಾಗತೊ
+ ಕೃತಿಸ್ವಾಮ್ಯಗ್ ಸ್ವಾಗತೊ
ಸಿಡ್ನಿ ಒಪೇರಾ ಹೌಸ್
ವಜಾ ಮಲ್ಪುಲೆ
ತೋಜಾಲೇ
@@ -227,7 +213,7 @@
ಜಾಗೆತ ಗುರುತು ಇಜ್ಜಿ.
ಮುಟ್ಟತ ಜಾಗೆತ ಪಟ್ಟಿನ್ ತೋಜಾಯರ ಅನುಮತಿ ಅಗತ್ಯವಾತ್ ಬೋಡು.
ನಿರ್ದೆಶನೊ
- ವಿಕಿಡಾಟ
+ ವಿಕಿಡೇಟಾ
ವಿಕಿಪೀಡಿಯ
ಕಾಮನ್ಸ್
<u>Rate us</u>
@@ -265,10 +251,10 @@
ಪ್ರಶ್ನೆಲು
ಪಲಿತಾಂಸೊ
ಮಾಜಾವೊಡಾಯಿನ ಚಿತ್ರೊಲೆನ್ ಮಿತೇರಾವುನೆನ್ ಈರ್ ದುಂಬರಿಯರ್ಡ ಇರೆನ ಖಾತೆ ನಿಷೇಧ ಆವರೆ ಯಾವು. ಈರ್ ಖಂಡಿತವಾದ್ ರಸಪ್ರಶ್ನೆ ಮುಗಿಪರೆ ಬಯಕುವರಾ?
- ಈರ್ ಮಿತೇರಾಯಿನ ಆಕೃತಿಲೆಡ್ %1$ ಡುದು ಹೆಚ್ಚಿನವೆನ್ ಮಾಜಾದಾತುಂಡು. ಈರ್ ಮಾಜಾವೊಡಾಯಿನ ಆಕೃತಿಲೆನ್ ಮಿತೇರಾವುನೆನ್ ದುಂಬರಿಯರ್ಡ ಇರೆನ ಖಾತೆ ನಿಷೇಧ ಆವರೆ ಯಾವು. ಈರ್ ಕಲಿಪಾಟೊನು ನನೊರ ತೂವರೆ ಇಚ್ಚಿಸಾವರಾ ಬೊಕ ಈರ್ ಎಂಚಿ ಆಕೃತಿಲೆನ್ ಮಿತೇರಾವೊಡು ಇಜಿಂಡ ಬಲ್ಲಿ ಪಂದ್ ಕಲ್ಪರೆ ಸಹಾಯೊಗು ಒಂಜಿ ರಸಪ್ರಶ್ನೆ ಗೆತೊಣುವರಾ?
+ ಈರ್ ಮಿತೇರಾಯಿನ ಆಕೃತಿಲೆಡ್ %1$s ಡುದು ಹೆಚ್ಚಿನವೆನ್ ಮಾಜಾದಾತುಂಡು. ಈರ್ ಮಾಜಾವೊಡಾಯಿನ ಆಕೃತಿಲೆನ್ ಮಿತೇರಾವುನೆನ್ ದುಂಬರಿಯರ್ಡ ಇರೆನ ಖಾತೆ ನಿಷೇಧ ಆವರೆ ಯಾವು. \n\nಈರ್ ಕಲಿಪಾಟೊನು ನನೊರ ತೂವರೆ ಇಚ್ಚಿಸಾವರಾ ಬುಕ್ಕೊ ಈರ್ ಎಂಚಿ ಆಕೃತಿಲೆನ್ ಮಿತೇರಾವೊಡು ಇಜಿಂಡ ಬಲ್ಲಿ ಪಂದ್ ಕಲ್ಪರೆ ಸಹಾಯೊಗು ಒಂಜಿ ರಸಪ್ರಶ್ನೆ ಗೆತೊಣುವರಾ?
ಸೆಲ್ಫಿಲೆಗ್ ದಿಂಜ ವಿಶ್ವಕೋಶ ಮೌಲ್ಯ ಇಜ್ಜಿ. ಇರೆನ ಬಗ್ಗೆನೆ ಒಂಜಿ ವಿಕಿಪೀಡಿಯಾ ಲೇಖನ ಇಜ್ಜಿಡಾ, ದಯಮಲ್ತ್ ಈರ್ ಇರೆನ ಚಿತ್ರೊನು ಮಿತೇರಾವೊರ್ಚಿ
- ಬಹುತೇಕ ದೇಶೊಲೆಡ್ ಸ್ಮಾರಕೊಲೆನ ಚಿತ್ರೊಲು ಬೊಕ ಪಿದಾಯಿದ ದೃಶ್ಯೊಲು ಮಿತೇರಾವರೆ ಒಪ್ಪಿಗೆ ಉಂಡು. ದಯಮಲ್ತ್ ಗಮನಿಸಾಲೆ, ಪಿದಾಯಿದ ತಾತ್ಕಾಲಿಕ ಕಲಾ ಸ್ಥಾಪನೆಲು ಸಾಮಾನ್ಯವಾದ್ ನಕಲುಸ್ವಾಮ್ಯದವು ಅಂಚಾದ್ ಮಿತೇರಾವರೆ ಒಪ್ಪಿಗೆ ಇಜ್ಜಿ.
- ಜಾಲತಾನೊಲೆನ ಪರದೆಚಿತ್ರೊಲು ನಿಷ್ಪನ್ನ ಕಾಯಕೊಲು ಇಂದ್ ಪಿನೊಲಿ, ಬೊಕ ಜಾಲತಾನೊಡೆ ಒವ್ವೆ ಕೃತಿಸ್ವಾಮ್ಯೊದ ಉಲಾಯಿ ಬರ್ಪುಂಡು. ಇಂಚಿನವೆನ್ ಲೇಖಕನ ಅನುಮತಿ ಗೆತೊಂದು ಬಳಸೊಲಿ. ಅನುಮತಿದಾಂತೆ ಅರೆನ ಕಾಯಕೊದ ಆಧಾರೊಡು ಈರ್ ರಚಿಸಾಯಿನ ಒವ್ವೆ ಕಲಾಕೃತಿ, ನ್ಯಾಯವಾದ್ ಮೂಲ ಲೇಖಕನ ಸೊತ್ತಾದ್ ಲೈಸನ್ಸ್ ಆವಂದಿನ ಪ್ರತಿ ಇಂದ್ ಪಿನೊಡಾಪುಂಡು.
+ ಬಹುತೇಕ ದೇಶೊಲೆಡ್ ಸ್ಮಾರಕೊಲೆನ ಚಿತ್ರೊಲು ಬುಕ್ಕೊ ಪಿದಾಯಿದ ದೃಶ್ಯೊಲು ಮಿತೇರಾವರೆ ಒಪ್ಪಿಗೆ ಉಂಡು. ದಯಮಲ್ತ್ ಗಮನಿಸಾಲೆ, ಪಿದಾಯಿದ ತಾತ್ಕಾಲಿಕ ಕಲಾ ಸ್ಥಾಪನೆಲು ಸಾಮಾನ್ಯವಾದ್ ನಕಲುಸ್ವಾಮ್ಯದವು ಅಂಚಾದ್ ಮಿತೇರಾವರೆ ಒಪ್ಪಿಗೆ ಇಜ್ಜಿ.
+ ಜಾಲತಾನೊಲೆನ ಪರದೆಚಿತ್ರೊಲು ನಿಷ್ಪನ್ನ ಕಾಯಕೊಲು ಇಂದ್ ಪಿನೊಲಿ, ಬುಕ್ಕೊ ಜಾಲತಾನೊಡೆ ಒವ್ವೆ ಕೃತಿಸ್ವಾಮ್ಯೊದ ಉಲಾಯಿ ಬರ್ಪುಂಡು. ಇಂಚಿನವೆನ್ ಲೇಖಕನ ಅನುಮತಿ ಗೆತೊಂದು ಬಳಸೊಲಿ. ಅನುಮತಿದಾಂತೆ ಅರೆನ ಕಾಯಕೊದ ಆಧಾರೊಡು ಈರ್ ರಚಿಸಾಯಿನ ಒವ್ವೆ ಕಲಾಕೃತಿ, ನ್ಯಾಯವಾದ್ ಮೂಲ ಲೇಖಕನ ಸೊತ್ತಾದ್ ಲೈಸನ್ಸ್ ಆವಂದಿನ ಪ್ರತಿ ಇಂದ್ ಪಿನೊಡಾಪುಂಡು.
ಗುಣಮಾನದ ಆಕೃತಿಲೆನ್ ಒಟ್ಟು ಮಲ್ಪುನವು ಕಾಮನ್ಸ್\'ದ ಗುರಿಕುಲೆಡ್ ಒಂಜಿ ಆದುಂಡು. ಆಯಿನೆರ್ದಾವರಾ, ಮಂಜಾದಿಪ್ಪುನ ಆಕೃತಿಲೆನ್ ಮಿತೇರಾವರೆ ಬಲ್ಲಿ. ಏಪಲಾ ಎಡ್ಡೆ ಬೊಲ್ಪುದ ಪೊರ್ಲುದ ಚಿತ್ರೊಲೆನ್ ದೆಪ್ಪರೆ ಯತ್ನ ಮಲ್ಪುಲೆ.
ತಂತ್ರಜ್ಞಾನ ಇಜಿಂಡ ಸಂಸ್ಕೃತಿ ತೋಜಾವುನ ಚಿತ್ರೊಲೆಗ್ ಕಾಮನ್ಸ್\'ಡು ಬಾರೀ ಸ್ವಾಗತ ಉಂಡು.
ಇರೆನ %1$ ಉತ್ತರೊಲು ಸರಿಯಾದುಂಡು. ಧನ್ಯವಾದೊಲು!
@@ -288,11 +274,9 @@
ಮಾಜಾವರೆ ನಾಮೀಕರಣ ಮಲ್ಪುಲೆ.
ಮಾಜಾಲೆ
ಸಾಧನೆಲು
- ಅಂಕಿ ಅಂಸೊಲು
ಸೊಲ್ಮೆಲು ಪಂಡೆರ್
ವಿಸೆಸೊ ಪಟ
ಆಕೃತಿಲೆನ ಮೂಲಕ \"ಕೈತಲ್ದ ಜಾಗೊಲು\"
- LEVEL
ಪಟೊ ಅಪ್ಲೋಡೆಡ್
ಪಟೊನ್ ಪುನಃ ಪಾಡಿಯರ ಅಪುಜ್ಜಿ
ಪಟೊನ್ ಬಲಕೆ ಮಲ್ತೆರ್
@@ -328,7 +312,7 @@
ಪುಸ್ತಕಗುರ್ತುಲು
ಈರ್ ಒವ್ವೆ ಪುಸ್ತಕಗುರ್ತುಲೆನ್ ಸೇರಾದಿಜರ್.
ಪುಸ್ತಕಗುರ್ತುಲು
- ಗಮನಿ (ಲಾಗ್) ಸಂಗ್ರಹ ಸುರುವಾತ್ಂಡ್. ದಯಮಲ್ತ್ ಕರನ ಪಿರಸುರುಮಲ್ತ್, ಈರ್ ಗಮನಿಡ್ ಸೇರಾವರೆ ಬಯಕುನ ಕ್ರಿಯೆ ಮಲ್ತ್, ಬೊಕ ಕುಡ \"ಗಮನ ಕಡತ ಕಡಪುಡುಲೆ\" ತಟ್ಟ್\'ಲೆ.
+ ಗಮನಿ (ಲಾಗ್) ಸಂಗ್ರಹ ಸುರುವಾತ್ಂಡ್. ದಯಮಲ್ತ್ ಕರನ ಪಿರಸುರುಮಲ್ತ್, ಈರ್ ಗಮನಿಡ್ ಸೇರಾವರೆ ಬಯಕುನ ಕ್ರಿಯೆ ಮಲ್ತ್, ಬುಕ್ಕೊ ಕುಡ \'ಗಮನ ಕಡತ ಕಡಪುಡುಲೆ\' ತಟ್ಟ್\'ಲೆ.
ಯಾನ್ ಅವೆನ್ ತತ್ತ್ದ್ ಮಿತೇರಾಯೆ.
ಅವು ಸಾರ್ವತ್ರಿಕವಾದ್ ತೋಜುಂಡು ಇಂದ್ ಎಂಕ್ ಗೊತ್ತಿತ್ತಿಜಿ
ಅವು ಎನ್ನ ಖಾಸಗಿತೆನೊಕು ಹಾಳ್ಂದ್ ಎಂಕ್ ತೆರಿಂಡ್
@@ -345,4 +329,5 @@
ನನಾತ್ ಓದುಲೇ
ಮಾಂತಾ ಬಾಸೆಲೆಡ್
ಆಂಡ್
+ ಐಚ್ಛಿಕ ಅನುಮತಿ: ವರ್ಗೊ ಸಲಹೆಗ್ ಇತ್ತೆತ ಸ್ಥಳೊನ್ ಪಡೆಲೆ.
diff --git a/app/src/main/res/values-te/strings.xml b/app/src/main/res/values-te/strings.xml
index 0d4b323f4..aa8ac1103 100644
--- a/app/src/main/res/values-te/strings.xml
+++ b/app/src/main/res/values-te/strings.xml
@@ -8,7 +8,7 @@
-->
కామన్స్ ఫేస్బుక్ పేజీ
- Commons Github సోర్సు కోడు
+ Commons Github సోర్సు కోడు
కామన్స్ చిహ్నం
కామన్స్ వెబ్సైటు
స్థానం ఎంపిక నుండి నిష్క్రమించు
@@ -20,12 +20,8 @@
- %1$d ఫైలు అప్లోడవుతోంది
- %1$d ఫైళ్ళు అప్లోడవుతున్నాయి
-
- - (%1$d)
- - (%1$d)
-
ఎక్కింపులను మొదలుపెడుతున్నాం
-
+
- %1$d ఎక్కింపును మొదలు పెడుతున్నాం
- %1$d ఎక్కింపులను మొదలు పెడుతున్నాం
@@ -71,7 +67,7 @@
ఎగుమోత వరుసలో ఉంది (పరిమిత సంబంధ పద్దతి చేతనం)
%1$s ను ఎక్కించాం!
మీ ఎక్కింపును చూసేందుకు నొక్కండి
- దస్త్రాన్ని ఎక్కిస్తున్నాం: $s
+ దస్త్రాన్ని ఎక్కిస్తున్నాం: $s
%1$s ను ఎక్కిస్తున్నాం
%1$s ఎక్కింపు పూర్తికావస్తోంది
%1$s ఎక్కింపు విఫలమైంది
@@ -117,6 +113,7 @@
అమరికలు
నమోదవ్వండి
విశేష చిత్రాలు
+ విశేష చిత్రాలు, అత్యుత్తమ నాణ్యత కలిగినవని వికీమీడియా కామన్స్ సముదాయం సైట్లో ఎంచిన, నిపుణులైన ఫోటోగ్రాఫర్లు చిత్రకారులూ చేసిన బొమ్మలు.
వర్గం
సాటివారి సమీక్ష
గురించి
@@ -137,10 +134,10 @@
అప్రమేయ లైసెన్సు
మునుపటి శీర్షిక, వివరణను వాడు
అలంకారం
- Attribution-ShareAlike 4.0
- Attribution 4.0
- Attribution-ShareAlike 3.0
- Attribution 3.0
+ Attribution-ShareAlike 4.0
+ Attribution 4.0
+ Attribution-ShareAlike 3.0
+ Attribution 3.0
CC0
CC BY-SA 3.0
CC BY 3.0
@@ -195,15 +192,14 @@
గూగుల్ ప్లే లోని మా బీటా ఛానల్లో చేరితే, కొత్త విశేషాలను బగ్ల సవరణలనూ చూడవచ్చు
2FA Code
నిజంగానే లాగౌటవుతారా?
- మీడియా బొమ్మ విఫలమైంది
ఉపవర్గాలేమీ కనబడలేదు
మాతృవర్గాలేమీ కనబడలేదు
మౌంట్ జావో
లామాలు
ఇంద్రధనుస్సు వంతెన
తులిప్
- వికీపీడియాకు స్వాగతం
- కాపీహక్కులకు స్వాగతం
+ వికీపీడియాకు స్వాగతం
+ కాపీహక్కులకు స్వాగతం
సిడ్నీ ఒపేరా హౌస్
రద్దుచేయి
తెరువు
@@ -331,11 +327,10 @@
తొలగించు
సాధించినవి
ప్రొఫైల్
- గణాంకాలు
ధన్యవాదాలు అందాయి
విశేష చిత్రాలు
\"దగ్గర లోని స్థలాల\" ద్వారా బొమ్మలు
- స్థాయి
+ స్థాయి %1$d
బొమ్మలను ఎక్కించాం
బొమ్మలను తిరక్కొట్టలేదు
వాడిన బొమ్మలు
@@ -410,11 +405,11 @@
%1$s కు వర్గాన్ని సరిచూడమనే అభ్యర్ధన చెయ్యలేక పోయాం
%1$s కు వర్గాన్ని సరిచూడమని అభ్యర్ధిస్తున్నాం
అయిపోయింది
- ధన్యవాదాలు పంపిస్తున్నాం: సఫలం
- %1$s కు ధన్యవాదాలు పంపించాం
- %1$s కు ధన్యవాదాలు పంపించడం విఫలమైంది
- ధన్యవాదాలు పంపిస్తున్నాం: విఫలం
- %1$s కోసం ధన్యవాదాలు పంపిస్తున్నాం
+ ధన్యవాదాలు పంపిస్తున్నాం: సఫలం
+ %1$s కు ధన్యవాదాలు పంపించాం
+ %1$s కు ధన్యవాదాలు పంపించడం విఫలమైంది
+ ధన్యవాదాలు పంపిస్తున్నాం: విఫలం
+ %1$s కోసం ధన్యవాదాలు పంపిస్తున్నాం
ఇది కాపీహక్కుల నిఅయమాలకు అనుగుణంగా ఉందా?
దీని వర్గీకరణ సరైనదేనా?
ఇది స్కోపు లోనే ఉందా?
@@ -440,14 +435,13 @@
చదవని వాటిని చూడండి
బొమ్మలను ఎంచుకునేటపుడు లోపం దొర్లింది
వేచివుండండి…
- విశేష చిత్రాలు, అత్యుత్తమ నాణ్యత కలిగినవని వికీమీడియా కామన్స్ సముదాయం సైట్లో ఎంచిన, నిపుణులైన ఫోటోగ్రాఫర్లు చిత్రకారులూ చేసిన బొమ్మలు.
సమీప స్థలాలు ద్వారా ఎక్కించిన బొమ్మలంటే, మ్యాపులో గుర్తించిన సమీప స్థలాలకు సంబంధించిన బొమ్మలే.
ఈ విశేషం ద్వారా, ఉపయోగపడే దిద్దుబాట్లు చేసిన వాడుకరులకు చరిత్ర పేజీలో గానీ తేడా పేజీలో గానీ ఉండే ధన్యవాదాలు లింకు ద్వారా ధన్యవాదాలు పంపించవచ్చు
కాపీ అయ్యింది
కామన్స్ లోకి ఎక్కించేందుకు మంచి బొమ్మలకు ఉదాహరణలు
ఎక్కించ కూడని బొమ్మలకు ఉదాహరణలు
ఈ బొమ్మను దాటవెయ్యి
- దింపుకోలు విఫలమైంది!!. బయటి స్టోరేజీ అనుమతి లేకుండా దించుకోలేం.
+ దింపుకోలు విఫలమైంది!!. బయటి స్టోరేజీ అనుమతి లేకుండా దించుకోలేం.
EXIF ట్యాగులను నిర్వహించండి
ఎక్కింపుల్లో ఏ EXIF ట్యాగులను ఉంచాలో ఎంచుకోండి
కర్త
@@ -502,7 +496,7 @@
వివరణలు, వ్యాఖ్యలను సరిదిద్దండి
బొమ్మను దీని ద్వారా పంచుకోండి
మీరింకా తోడ్పాటులేమీ చెయ్యలేదు
- %s ఇంకా తోడ్పాటేమీ చెయ్యలేదు
+ %1$s ఇంకా తోడ్పాటేమీ చెయ్యలేదు
ఖాతాను సృష్టించాం!
పాఠ్యాన్ని క్లిప్బోర్డుకు కాపీ చేసాం
గమనింపును చదివినట్లుగా గుర్తించాం
@@ -511,7 +505,7 @@
ఉనికిలో ఉంది
ఫోటో కావాలి
స్థలం రకం:
- వంతెన, మ్యూజియమ్, హోటలు వగైరా.
+ వంతెన, మ్యూజియమ్, హోటలు వగైరా.
లాగినవడంలో ఏదో లోపం జరిగింది, మీ సంకేతపదాన్ని మార్చుకోవాలి !!
మాధ్యమం
చైల్డ్ క్లాస్
@@ -548,7 +542,7 @@
5. సరైన స్థానంలో వికీటెక్స్టును అతికించండి.
6. సముచితమైన స్థానంలో పెట్టేందుకు అవసరమైతే వికీటెక్స్టును మార్చండి. మరింత సమాచారం కోసం <a href=\"https://en.wikipedia.org/wiki/Wikipedia:Manual_of_Style/Images#How_to_place_an_image\">ఇక్కడ చూడండి</a>.
7. వ్యాసాన్ని ప్రచురించండి
- వికీకోడ్ను క్లిప్బోర్డు లోకి కాపీ చేసుకోండి
+ వికీకోడ్ను క్లిప్బోర్డు లోకి కాపీ చేసుకోండి
నిలుపు
కొనసాగించు
నిలిపాం
@@ -604,13 +598,14 @@
బొమ్మల్లేవు
అయిపోయింది
వెనక్కి
- ఎడమ వైపున ఉన్న బొమ్మ లాగా కాకుండా, కుడి వైపున ఉన్న దానికి కామన్స్ లోగో ఉంది. అంటే దాన్ని ఈసరికే ఎక్కించారని అర్థం.\n బొమ్మ మునుజూపు కోసం తాకి పట్టుకోండి.
+ ఎడమ వైపున ఉన్న బొమ్మ లాగా కాకుండా, కుడి వైపున ఉన్న దానికి కామన్స్ లోగో ఉంది. అంటే దాన్ని ఈసరికే ఎక్కించారని అర్థం.\n బొమ్మ మునుజూపు కోసం తాకి పట్టుకోండి.
అదరహో
ఈ బొమ్మను ఈసరికే కామన్స్ లోకి ఎక్కించారు.
మరింత తెలుసుకోండి
అనుమతి కావాలి
- వాడుకరి తోడ్పాట్లు: %s
- వాడుకరి సాధించినవి: %s
+ ఐచ్ఛిక అనుమతి: వర్గాల సూచనల కోసం ప్రస్తుత స్థలాన్ని తెచ్చుకో
+ వాడుకరి తోడ్పాట్లు: %1$s
+ వాడుకరి సాధించినవి: %1$s
వాడుకరి పేజీ చూడండి
వర్గాల్లో దిద్దుబాట్లు
ఉన్నత ఎంపికలు
@@ -620,7 +615,7 @@
స్థానం డేటా, వికీ ఎడిటర్లు మీ బొమ్మను వెతకడంలో సాయపడుతుంది. దాని వలన బొమ్మ ఉపయోగం పెరుగుతుంది.\nమీరు ఇటీవల ఎక్కించిన బొమ్మలకు స్థానం లేదు.\nమీ కెమెరా యాప్ సెట్టింగుల్లో స్థానాన్ని చేతనం చేసుకొమ్మని సూచిస్తున్నాం.\nఎక్కించినందుకు ధన్యవాదాలతో!
స్థానం ఏదీ కనబడలేదు
ఈ బొమ్మను తీసిన స్థానాన్ని దీనికి చేరిస్తే బావుంటుంది గదా.\nస్థానం డేటా ఉంటే అది, ఈ బొమ్మను కనుక్కోవడంలో వికీ ఎడిటర్లకు సాయపడుతుంది. ఆ విధంగా బొమ్మ ఉపయోగం పెరుగుతుంది.\nధన్యవాదాలు!
- స్థానాన్ని చేర్చండి
+ స్థానాన్ని చేర్చండి
బహిరంగంగా పంచుకోలేని సమాచారం ఏదైనా ఈ ఈమెయిల్లో ఉంటే దాన్ని తీసెయ్యండి. అలాగే, మీరు పోస్టు చేస్తున్న ఈమెయిలు చిరునామా, దానికి సంబంధించిన పేరు, ప్రొఫైలు బొమ్మా బహిరంగంగా అందరికీ కనిపిస్తాయని గమనంలో ఉంచుకోండి.
వివరాలు
మీరు స్వయంగా తీసిన ఫొటోలను మాత్రమే ఎక్కించండి. కాపీహక్కులున్న బొమ్మలను ఎక్కించినవారిని నిరోధిస్తారు. ఇది బీటా కూర్పుకు కూడా వర్తిస్తుంది. యాప్ను పరీక్షిస్తున్నందుకు ధన్యవాదాలు.
diff --git a/app/src/main/res/values-th/strings.xml b/app/src/main/res/values-th/strings.xml
index dde54e41f..adf3b5fa2 100644
--- a/app/src/main/res/values-th/strings.xml
+++ b/app/src/main/res/values-th/strings.xml
@@ -16,7 +16,7 @@
-->
หน้าเฟซบุ๊กคอมมอนส์
- ซอร์สโค้ดคอมมอนส์บน GitHub
+ ซอร์สโค้ดคอมมอนส์บน GitHub
โลโก้คอมมอนส์
เว็บไซต์คอมมอนส์
ออกจากเครื่องมือเมื่อเลือกตำแหน่ง
@@ -36,19 +36,14 @@
ค้นหาดู
สถานะของสถานที่:
รูปภาพประจำวัน
- กำลังอัปโหลดไฟล์ %1$d ไฟล์
-
- - \@string/contributions_subtitle_zero
- - (%1$d)
- - (%1$d)
+
+ - กำลังอัปโหลดไฟล์ %1$d ไฟล์
กำลังเริ่มอัปโหลด
- - กำลังเริ่มอัปโหลด %1$d รายการ
- กำลังเริ่มอัปโหลด %1$d รายการ
-
- - การอัปโหลด %1$d รายการ
+
- การอัปโหลด %1$d รายการ
@@ -147,10 +142,10 @@
สัญญาอนุญาตปริยาย
ใช้ชื่อเรื่องและคำอธิบายก่อนหน้านี้
ธีม
- Attribution-ShareAlike 4.0
- Attribution 4.0
- Attribution-ShareAlike 3.0
- Attribution 3.0
+ Attribution-ShareAlike 4.0
+ Attribution 4.0
+ Attribution-ShareAlike 3.0
+ Attribution 3.0
CC0
CC BY-SA 3.0
CC BY 3.0
@@ -208,15 +203,14 @@
สมัครเข้าร่วมช่องทางบีตาบน Google Play และเข้าถึงคุณลักษณะใหม่ ๆ และการแก้ไขบั๊กก่อนเปิดตัว
รหัส 2FA
คุณต้องการออกจากระบบจริง ๆ หรือไม่?
- ภาพสื่อล้มเหลว
ไม่พบหมวดหมู่รองที่ต้องการ
ไม่พบหมวดหมู่ต้นทางที่ต้องการ
ภูเขาซะโอ
ยามา
สะพานสายรุ้ง
ทิวลิป
- ยินดีต้อนรับสู่วิกิพีเดีย
- ลิขสิทธิ์ต้อนรับ
+ ยินดีต้อนรับสู่วิกิพีเดีย
+ ลิขสิทธิ์ต้อนรับ
โรงอุปรากรซิดนีย์
ยกเลิก
เปิด
@@ -342,11 +336,10 @@
ลบ
ความสำเร็จ
โพรไฟล์
- สถิติ
คำขอบคุณที่ได้รับแล้ว
ภาพคัดสรร
ภาพผ่านทาง \"สถานที่ใกล้เคียง\"
- ระดับ
+ ระดับ %1$d
ภาพที่อัปโหลดแล้ว
รูปภาพไม่เปลี่ยนกลับ
ภาพที่ใช้แล้ว
@@ -414,7 +407,7 @@
มีอยู่
ต้องการภาพถ่าย
ชนิดสถานที่:
- สะพาน พิพิธภัณฑ์ โรงแรม ฯลฯ
+ สะพาน พิพิธภัณฑ์ โรงแรม ฯลฯ
พบสถานที่ใกล้เคียง
ที่คั่นหน้า
การตั้งค่า
@@ -428,6 +421,7 @@
สถานที่ใกล้เคียง
กำลังยกเลิกอับโหลด…
ยกเลิกอับโหลด
+ สิทธิทางเลือก: รับข้อมูลตำแหน่งที่ตั้งปัจจุบันสำหรับข้อเสนอแนะหมวดหมู่
API level
แอนดรอยด์เวอร์ชัน
รุ่นอุปกรณ์
diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml
index 6499caac1..441c95941 100644
--- a/app/src/main/res/values-tr/strings.xml
+++ b/app/src/main/res/values-tr/strings.xml
@@ -35,7 +35,7 @@
-->
Commons Facebook Sayfası
- Commons Github Kaynak Kodu
+ Commons Github Kaynak Kodu
Commons Logosu
Commons Websitesi
Konum seçiciden çık
@@ -59,18 +59,14 @@
- %1$d dosya yükleniyor
- %1$d dosya yükleniyor
-
- - (%1$d)
- - (%1$d)
-
Yüklemeye Başlıyor
- - %d yüklenmeyi işleniyor
- - %d yüklenmeyi işleniyor
+ - %1$d yüklenmeyi işleniyor
+ - %1$d yüklenmeyi işleniyor
- - %d yükleme
- - %d yükleme
+ - %1$d yükleme
+ - %1$d yükleme
- Bu görüntü, %1$s lisansı altında olacak
@@ -114,7 +110,7 @@
Yükleme kuyruğunda (sınırlı bağlantı modu etkin)
%1$s yüklendi!
Yüklemenizi görüntülemek için hafifçe tıklayın
- Dosya yükleniyor: %s
+ Dosya yükleniyor: %1$s
%1$s yükleniyor
%1$s yüklemesi bitiriliyor
%1$s yüklemesi başarısız oldu
@@ -164,6 +160,7 @@
Ayarlar
Kaydol
Seçkin Resimler
+ Seçkin resimler, Wikimedia Commons topluluğunun sitedeki en yüksek kaliteden bazıları olarak seçtiği son derece yetenekli fotoğrafçıların ve illüstratörlerin görüntüleridir.
Özel Seçici
Kategori
Hakem Denetimi
@@ -185,10 +182,10 @@
Varsayılan Lisans
Önceki başlığı ve açıklamayı kullan
Tema
- Atıf-BenzerPaylaşım 4.0
- Atıf 4.0
- Atıf-BenzerPaylaşım 3.0
- Atıf 3.0
+ Atıf-BenzerPaylaşım 4.0
+ Atıf 4.0
+ Atıf-BenzerPaylaşım 3.0
+ Atıf 3.0
CC0
CC BY-SA 3.0
CC BY 3.0
@@ -241,6 +238,7 @@
Açıklama
Tartışma
Yazar
+ Yükleyici
Yükleme tarihi
Lisans
Koordinatlar
@@ -250,15 +248,14 @@
2 Faktörlü Kimlik Doğrulama (2FA) Kodu
E-posta doğrulama kodu
Gerçekten çıkış yapmak istiyor musunuz?
- Medya Görüntüsü Başarısız Oldu
Alt kategori bulunamadı
Üst kategori bulunamadı
Zao Dağı
Lamalar
Gökkuşağı Köprüsü
Lale
- Vikipedi\'ye Hoş Geldiniz
- Telif Haklarına Hoş Geldiniz
+ Vikipedi\'ye Hoş Geldiniz
+ Telif Haklarına Hoş Geldiniz
Sidney Opera Binası
İptal
Aç
@@ -394,12 +391,11 @@
Başarılar
Profil
Rozetler
- İstatistikler
Teşekkür Alındı
Seçkin Resimler
\"Yakındaki Yerler\"den Resimler
- Seviye %d
- %s (Seviye %s)
+ Seviye %1$d
+ %1$s (Seviye %2$s)
Resimler Yüklendi
Resimler Geri Alınmadı
Resimler Kullanıldı
@@ -442,7 +438,7 @@
Gizliliğimin kötü olduğunu fark ettim
Fikrimi değiştirdim, artık herkese görünür olmasını istemiyorum
Üzgünüz, bu resim bir ansiklopedi için ilginç değil
- Kendi başıma %1$s üzerine yüklendi, %2$d makalede kullanıldı.
+ %1$s tarafımdan yüklendi, en az %2$d madde de kullanıldı.
Commons\'a Hoş Geldiniz!\n\nEkle düğmesine dokunarak ilk medyanızı yükleyin.
Kategori Seçilmedi
Kategorisiz görüntüler nadiren kullanılabilir. Kategori seçmeden devam etmek istediğinizden emin misiniz?
@@ -459,7 +455,7 @@
Bunu bir daha sorma
Konum izni isteyin
Yakındaki bildirim kartı görüntüleme özelliği için gerektiğinde konum izni isteyin.
- Bir şeyler ters gitti, başarıları getiremedik
+ Bir şeyler ters gitti, başarıları getiremedik
Başarı hesaplama sistemimizin üstesinden gelemeyeceği pek çok katkı yaptınız. Bu nihai başarıdır.
Bitiş:
Kampanyaları göster
@@ -487,11 +483,11 @@
%1$s için kategori kontrolü istenemedi
%1$s için kategori kontrolü isteniyor
Yapıldı
- Teşekkür Gönderme: Başarılı
- %1$s sayesinde başarıyla gönderildi
- %1$s teşekkür gönderilemedi
- Teşekkür Gönderme: Başarısız
- %1$s için teşekkürler gönderisi
+ Teşekkür Gönderme: Başarılı
+ %1$s sayesinde başarıyla gönderildi
+ %1$s teşekkür gönderilemedi
+ Teşekkür Gönderme: Başarısız
+ %1$s için teşekkürler gönderisi
Bu telif hakkı kurallarına uyuyor mu?
Bu doğru sınıflandırılmış mı?
Bu kapsamda mı?
@@ -518,15 +514,14 @@
Okunmayanları görüntüle
Resimler seçilirken hata oluştu
Lütfen bekleyin...
- Seçkin resimler, Wikimedia Commons topluluğunun sitedeki en yüksek kaliteden bazıları olarak seçtiği son derece yetenekli fotoğrafçıların ve illüstratörlerin görüntüleridir.
Yakındaki yerler üzerinden yüklenen resimler, haritadaki yerleri keşfederek yüklenen resimlerdir.
Bu özellik, editörlerin, geçmiş sayfasında veya fark sayfasında küçük bir teşekkür bağlantısı kullanarak faydalı düzenlemeler yapan kullanıcılara bir Teşekkür bildirimi göndermesine olanak tanır.
- Sonraki medyaya kopyala
+ Sonraki medyaya kopyala
Kopyalandı
Commons\'a yüklenecek iyi resim örnekleri
Yüklenmeyecek resim örnekleri
Bu resmi atla
- Yükleme Başarısız Oldu!! Harici depolama izni olmadan dosyayı indiremiyoruz.
+ Yükleme Başarısız Oldu!! Harici depolama izni olmadan dosyayı indiremiyoruz.
EXIF Etiketlerini Yönet
Yüklemelerde hangi EXIF etiketlerinin tutulacağını seçin
Yazar
@@ -536,8 +531,6 @@
Lens Modeli
Seri Numaraları
Yazılım
- Medya konumu erişimi reddedildi
- Yüklediğiniz resimlerden konum verilerini otomatik olarak elde edemeyebiliriz. Lütfen göndermeden önce her resim için uygun konumu ekleyin
Fotoğrafları doğrudan telefonunuzdan Wikimedia Commons\'a yükleyin. Commons Uygulamasını şimdi indirin: %1$s
Uygulamayı şununla paylaşın:
Resim Bilgisi
@@ -593,7 +586,7 @@
Açıklamaları ve başlıkları düzenle
Resmi şununla paylaş
Henüz bir katkı yapmadınız
- %s henüz bir katkı yapmadı
+ %1$s henüz bir katkı yapmadı
Hesap oluşturuldu!
Metin panoya kopyalandı
Bildirim okundu olarak işaretlendi
@@ -602,11 +595,13 @@
Var
Fotoğrafa İhtiyaç Var
Yer türü:
- Köprü, müze, otel vb.
+ Köprü, müze, otel vb.
Giriş ile ilgili bir sorun oluştu. Şifrenizi sıfırlamanız gerekiyor!
MEDYA
ALT SINIFLAR
ÜST SINIFLAR
+ ALT KATEGORİLER
+ ÜST KATEGORİLER
Yakındaki Yer Bulundu
Bunlar %1$s resimleri mi?
Bu bir %1$s resmi mi?
@@ -644,7 +639,7 @@
5. Vikimetin dosyasını uygun yere yapıştırın.
6. Gerekirse vikimetini uygun konumlandırma için düzenleyin. Daha fazla bilgi için <a href=\"https://tr.wikipedia.org/wiki/Vikipedi:Biçem_el_kitabı/Görseller#Görsel_nasıl_yerleştirilir\">buraya</a> bakın.
7. Maddeyi yayınlayın
- Vikikodu panoya kopyala
+ Vikikodu panoya kopyala
duraklat
devam et
Durduruldu
@@ -711,7 +706,7 @@
Geri
Özel Resim Seçici\'ye Hoş Geldiniz
Bu seçici, Commons\'a hangi resimleri yüklediğinizi gösterir.
- Soldaki resimden farklı olarak, sağdaki resimde zaten yüklendiğini belirten Commons logosu var.\n Resim ön izlemesi için dokunup basılı tutun.
+ Soldaki resimden farklı olarak, sağdaki resimde zaten yüklendiğini belirten Commons logosu var.\n Resim ön izlemesi için dokunup basılı tutun.
Harika
Bu resim zaten Commons\'a yüklendi.
Teknik nedenlerden dolayı uygulama aynı anda %1$d fotoğraftan fazlasını güvenilir bir şekilde yükleyemiyor. %1$d olan yükleme sınırı %2$d ile aşıldı.
@@ -725,8 +720,9 @@
Viki, Anıtları Seviyor; Wikimedia tarafından düzenlenen anıtlar için uluslararası bir fotoğraf yarışmasıdır.
İzin Gerekiyor
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
+ İsteğe bağlı izin: Kategori önerileri için geçerli konumu al
+ Kullanıcının katkıları: %1$s
+ Kullanıcının başarıları: %1$s
Kullanıcı profilini görüntüle
Betimlemeleri düzenle
Kategorileri düzenle
@@ -737,7 +733,7 @@
Konum verisi Viki editörlerine, daha kullanışlı hale getirerek, fotoğrafınızı bulmaya yardımcı olur.\nSon yüklemelerinizde konum yok.\nKamera uygulamanızın ayarlarından konum seçeneğini etkinleştirmenizi öneririz.\nYükleme için teşekkürler!
Konum bulunamadı
Bu görüntünün çekildiği yeri eklemeye ne dersiniz?\nKonum verileri, Wiki düzenleyicilerinin resminizi bulmasına yardımcı olarak onu çok daha kullanışlı hale getirir.\nTeşekkürler!
- Konum ekle
+ Konum ekle
Lütfen herkese açık olarak paylaşmaktan çekindiğiniz tüm bilgileri bu e-postadan kaldırın. Ayrıca gönderi paylaştığınız e-posta adresinizin ve ilgili ad ve profil resminizin herkese açık olarak görüneceğini lütfen unutmayın.
Ayrıntılar
Başarılar yalnızca prod sürümünde mevcuttur. Lütfen geliştirici belgelerini denetleyin.
@@ -758,8 +754,8 @@
Yükleme için değil işaretini kaldır
Yükleme için değil olarak işaretleniyor
Yükleme için değil işareti kaldırılıyor
- Halihazırda işlem görmüş resimleri göster
- Halihazırda işlem görmüş resimler gizleniyor
+ Halihazırda işlem görmüş resimleri göster
+ Halihazırda işlem görmüş resimler gizleniyor
Başka resim bulunamadı
Bu resim zaten yüklendi
Bu resim yüklemek için seçilemiyor
@@ -782,7 +778,7 @@
İşlevsellik için izinler gereklidir
Yararlı bir açıklamanın nasıl yazılacağını öğrenin
Nasıl faydalı bir alt yazı yazılacağını öğrenin
- Başarılarınızı görün
+ Başarılarınızı görüntüleyin
Görseli düzenle
Konumu Düzenle
Konum güncellendi!
@@ -795,15 +791,15 @@
Oturum açma süreniz doldu. Lütfen tekrar giriş yapın.
GPX dosyalarını açacak uygulama yok
Dosya Başarıyla Kaydedildi
- GPX dosyasını açmak istiyor musunuz?
- KML dosyasını açmak istiyor musunuz?
- KML dosyası kaydedilemedi.
- GPX dosyası kaydedilemedi.
- KML Dosyasını Kaydetme
- GPX Dosyasını Kaydetme
+ GPX dosyasını açmak istiyor musunuz?
+ KML dosyasını açmak istiyor musunuz?
+ KML dosyası kaydedilemedi.
+ GPX dosyası kaydedilemedi.
+ KML Dosyasını Kaydetme
+ GPX Dosyasını Kaydetme
- - %d resim seçildi
- - %d resim seçildi
+ - %1$d resim seçildi
+ - %1$d resim seçildi
Lütfen çoklu yüklemedeki tüm görsellerin aynı kategorilere ve tasvirlere sahip olduğunu unutmayın. Görseller tasvirleri ve kategorileri paylaşmıyorsa, lütfen birkaç ayrı yükleme gerçekleştirin.
Çoklu yüklemelerle ilgili not
@@ -839,7 +835,6 @@
Commons
Diğer vikiler
Dosya kullanımları
- SingleWebViewActivity
Hesap
Kaybolma
Hesap kaybolma uyarısı
@@ -851,4 +846,5 @@
Yakınlarda Göster
Oluşturan ve yükleyen: %1$s
%1$s tarafından oluşturuldu ve %2$s tarafından yüklendi
+ Silinmeye aday gösterildi
diff --git a/app/src/main/res/values-ug/strings.xml b/app/src/main/res/values-ug/strings.xml
index 2f189f48b..c37708bde 100644
--- a/app/src/main/res/values-ug/strings.xml
+++ b/app/src/main/res/values-ug/strings.xml
@@ -75,8 +75,8 @@
ۋاز كەچ
چۈشۈرۈڭ
ئىجازەتنامە
- ئوخشاش ئىمزالىق ئورتاق ھەمبەھىرلىنىش
- ئىمزا قويۇش
+ ئوخشاش ئىمزالىق ئورتاق ھەمبەھىرلىنىش
+ ئىمزا قويۇش
CC0
CC BY-SA 3.0
CC BY 3.0
@@ -103,11 +103,10 @@
بىز كىرگەن Google Play، ئۈستىدىكى ئۆلچەش قانىلى ، ھەمدە تېخىمۇ بالدۇر يېڭى ئىقتىدارى ۋە خاتا ئەسلىگە كەلتۈرۈش
2FAكودى
سىز راستتىنلا چېكىنىپ چىقامسىز ؟
- ۋاستە رەسىمى مەغلۇپ بولدى
ھەسەت ھۈسەن كۆۋرۈك
كېيىنكى سۈرەت
ھەئە، نېمىشقا بولمىسۇن
- كېيىنكى ۋاسىتەگە كۆچۈر
+ كېيىنكى ۋاسىتەگە كۆچۈر
كۆچۈرۈلدى
ھېچقانداق يەر تېپىلمىدى ، ئىزدەش ئۆلچىمىڭىزنى ئۆزگەرتىپ بېقىڭ.
diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml
index ce7963b60..f20552f05 100644
--- a/app/src/main/res/values-uk/strings.xml
+++ b/app/src/main/res/values-uk/strings.xml
@@ -23,7 +23,7 @@
-->
Facebook-сторінка Вікісховища
- Програмний код Вікісховища на GitHub
+ Програмний код Вікісховища на GitHub
Логотип Вікісховища
Веб-сайт Вікісховища
Вийти з вікна вибору розташування
@@ -49,12 +49,6 @@
- Завантажується %1$d файлів
- Завантажується %1$d файлів
-
- - (%1$d)
- - (%1$d)
- - (%1$d)
- - (%1$d)
-
Початок завантаження
- Обробляється %1$d завантаження
@@ -63,10 +57,10 @@
- Обробляються %1$d завантажень
- - %d завантаження
- - %d завантаження
- - %d завантажень
- - %d завантажень
+ - %1$d завантаження
+ - %1$d завантаження
+ - %1$d завантажень
+ - %1$d завантажень
- Це зображення буде ліцензовано на умовах %1$s
@@ -116,7 +110,7 @@
Завантаження додано до черги (увімкнений режим обмеженого з\'єднання)
Завантажено %1$s!
Торкніться, щоб переглянути Ваше завантаження
- Завантаження файлу: %s
+ Завантаження файлу: %1$s
%1$s завантажується
Завершення завантаження %1$s
Не вдалося завантажити %1$s
@@ -166,6 +160,7 @@
Налаштування
Зареєструватися
Вибрані зображення
+ Вибрані зображення — це зображення від вправних фотографів та ілюстраторів, які спільнота Вікісховища визначила як такі, що мають найкращу якість на сайті.
Користувацький селектор
Категорія
Перевірка колегами
@@ -187,10 +182,10 @@
Усталена ліцензія
Використати попередні назву й опис
Тема
- Attribution-ShareAlike 4.0
- Attribution 4.0
- Attribution-ShareAlike 3.0
- CC Attribution 3.0
+ Attribution-ShareAlike 4.0
+ Attribution 4.0
+ Attribution-ShareAlike 3.0
+ CC Attribution 3.0
CC0
CC BY-SA 3.0
CC BY 3.0
@@ -243,6 +238,7 @@
Опис
Обговорення
Автор
+ Завантажувач
Дата завантаження
Ліцензія
Координати
@@ -252,15 +248,14 @@
Код 2FA
Код підтвердження електронної пошти
Ви справді хочете вийти із системи?
- Помилка медіазображення
Підкатегорій не знайдено
Не знайдено батьківських категорій
Гора Зао
Лами
Веселка
Тюльпан
- Ласкаво просимо — Вікіпедія
- Ласкаво просимо — авторські права
+ Ласкаво просимо — Вікіпедія
+ Ласкаво просимо — авторські права
Сіднейський оперний театр
Скасувати
Відкрити
@@ -396,12 +391,11 @@
Досягнення
Профіль
Значки
- Статистика
Отримані подяки
Вибрані зображення
Зображення місць поблизу
- Рівень %d
- %s (Рівень %s)
+ Рівень %1$d
+ %1$s (Рівень %2$s)
Завантажені зображення
Не відхилені зображення
Використані зображення
@@ -461,7 +455,7 @@
Ніколи більше про це не запитувати
Запитувати дозвіл на геолокацію
Запитувати про дозвіл на показ місця перебування, коли це потрібно для функції перегляду місць поблизу.
- Щось пішло не так. Нам не вдалося отримати досягнення
+ Щось пішло не так. Нам не вдалося отримати досягнення
Ви зробили так багато, що наша система підрахунку досягнень не може впоратись зі своїм завданням. Це — абсолютне досягнення.
Завершується:
Показати кампанії
@@ -489,11 +483,11 @@
Не вдалося зробити запит на перевірку категорій для %1$s
Запит на перевірку категорій для %1$s
Готово
- Надсилання подяки: Успішно
- Успішно надіслано подяку %1$s
- Не вдалося надіслати подяку %1$s
- Надсилання подяки: Неуспішно
- Надсилання подяки %1$s
+ Надсилання подяки: Успішно
+ Успішно надіслано подяку %1$s
+ Не вдалося надіслати подяку %1$s
+ Надсилання подяки: Неуспішно
+ Надсилання подяки %1$s
Чи відповідає це правилам авторського права?
Чи правильно вказані категорії?
Чи відповідає це призначенню Вікісховища?
@@ -520,15 +514,14 @@
Перегляд непрочитаних
Сталася помилка при завантаженні зображень
Будь ласка, зачекайте…
- Вибрані зображення — це зображення від вправних фотографів та ілюстраторів, які спільнота Вікісховища визначила як такі, що мають найкращу якість на сайті.
Зображення, завантажені через «Поблизу», — це зображення, завантажені через дослідження місць на мапі.
Ця функція дозволяє редакторам надіслати «дякую» користувачам, які роблять корисні редагування, — скориставшись невеличким посиланням на сторінці історії або порівняння версій.
- Копіювати до наступних медіафайлів
+ Копіювати до наступних медіафайлів
Скопійовано
Приклади добрих зображень для завантаження у Вікісховище
Приклади зображень, які не слід завантажувати
Пропустити це зображення
- Завантаження не вдалося. Ми не змогли завантажити файл без доступу до зовнішнього носія.
+ Завантаження не вдалося. Ми не змогли завантажити файл без доступу до зовнішнього носія.
Робота з EXIF-тегами
Вкажіть, які EXIF-теги мають бути збережені при завантаженні файлів
Автор
@@ -538,8 +531,6 @@
Модель об\'єктиву
Серійний номер
Програмне забезпечення
- Доступ до місцезнаходження медіа заборонено
- Можливо, ми не зможемо автоматично отримати дані про місцезнаходження із зображень, які ви завантажуєте. Будь ласка, додайте відповідне місце для кожного зображення перед надсиланням
Вивантажуйте фото у Вікісховище безпосередньо зі свого телефона. Завантажте застосунок: %1$s
Поділитися програмкою через…
Інформація про зображення
@@ -599,7 +590,7 @@
Редагувати описи та заголовки
Поширити зображення через
Ви ще не зробили жодного внеску
- %s ще не зробив жодного внеску
+ %1$s ще не зробив жодного внеску
Обліковий запис створено!
Текст скопійовано до буферу обміну
Сповіщення позначено прочитаним
@@ -608,7 +599,7 @@
Існує
Треба фото
Тип місця:
- Міст, музей, готель тощо
+ Міст, музей, готель тощо
Щось пішло не так із процесом входу. Вам треба скинути пароль!
МЕДІА
ДОЧІРНІ КЛАСИ
@@ -652,7 +643,7 @@
5. Вставте вікі-текст у відповідне місце.
6. Відредагуйте вікі-текст за потреби, вказавши потрібне розміщення. Детальну інформацію знайдете <a href=\"https://uk.wikipedia.org/wiki/Довідка:Розширений_синтаксис_зображень\">тут</a>.
7. Опублікуйте статтю
- Скопіювати вікікод у буфер обміну
+ Скопіювати вікікод у буфер обміну
пауза
продовжити
Призупинено
@@ -719,7 +710,7 @@
Назад
Ласкаво просимо до користувацького вибору зображень
Цей засіб вибору показує вам, які зображення ви вже завантажили до Commons.
- На відміну від зображення зліва, зображення праворуч має логотип Commons, яке вказує, що воно вже завантажене.\n Натисніть і утримуйте для попереднього перегляду зображення.
+ На відміну від зображення зліва, зображення праворуч має логотип Commons, яке вказує, що воно вже завантажене.\n Натисніть і утримуйте для попереднього перегляду зображення.
Чудово
Це зображення вже завантажено на Спільний ресурс.
З технічних причин програма не може надійно вивантажувати більше ніж %1$d зображення/ь одночасно. Обмеження завантаження %1$d перевищено на %2$d.
@@ -735,8 +726,9 @@
Wiki Loves Monuments — це міжнародний фотоконкурс пам’яток, організований Вікімедією
Потрібен дозвіл
Для належної роботи мапи поблизу мають відображати стан PHONE STATE
- Внесок користувача: %s
- Досягнення користувача: %s
+ Додатковий дозвіл: отримувати поточне розташування для підказок категорій
+ Внесок користувача: %1$s
+ Досягнення користувача: %1$s
Переглянути профіль користувача
Редагувати описи
Редагувати категорії
@@ -747,7 +739,7 @@
Дані про місцезнаходження допомагають редакторам Вікі знайти ваше зображення, що робить його набагато кориснішим.\nВаші останні завантаження не мають місцезнаходження.\nПропонуємо ввімкнути місцезнаходження в налаштуваннях програми камери.\nДякуємо за завантаження!
Розташування не знайдено
Як щодо того, щоб додати місце, де було зроблене зображення? Дані про розташування допомогають вікіредакторам знайти ваше зображення, від чого воно стає ще більш корисним.\nДякуємо!
- Додати розташування
+ Додати розташування
Будь ласка, видаліть з цього листа будь-яку інформацію, якою ви не бажаєте поділитися публічно. Також майте на увазі, що ваша адреса електронної пошти, за допомогою якої ви розміщуєте публікацію, а також пов’язане ім’я та зображення профілю будуть видимі для всіх.
Деталі
Досягнення доступні лише у версії prod. Будь ласка, перегляньте документацію розробників.
@@ -768,8 +760,8 @@
Зняти позначку «Не для завантаження».
Позначення як не для завантаження
Зняття позначки «Не для завантаження»
- Показати вже виконані картинки
- Приховування вже активованих картинок
+ Показати вже виконані картинки
+ Приховування вже активованих картинок
Більше зображень не знайдено
Це зображення вже завантажено
Неможливо вибрати це зображення для завантаження
@@ -792,7 +784,7 @@
Для роботи потрібні дозволи
Дізнайтеся, як написати корисний опис
Дізнайтеся, як написати корисний підпис
- Перегляньте свої досягнення
+ Перегляньте свої досягнення
Редагувати зображення
Редагувати розташування
Розташування оновлено
@@ -805,17 +797,17 @@
Сесія авторизації спливла. Будь ласка, увійдіть наново.
Немає доступного застосунку для відкриття файлів GPX
Файл успішно збережено
- Бажаєте відкрити файл GPX?
- Бажаєте відкрити файл KML?
- Не вдалося зберегти файл KML.
- Не вдалося зберегти файл GPX.
- Збереження файлу KML
- Збереження файлу GPX
+ Бажаєте відкрити файл GPX?
+ Бажаєте відкрити файл KML?
+ Не вдалося зберегти файл KML.
+ Не вдалося зберегти файл GPX.
+ Збереження файлу KML
+ Збереження файлу GPX
- - Вибрано %d зображення
- - Вибрано %d зображення
- - Вибрано %d зображень
- - Вибрано %d зображень
+ - Вибрано %1$d зображення
+ - Вибрано %1$d зображення
+ - Вибрано %1$d зображень
+ - Вибрано %1$d зображень
Пам\'ятайте, що усі зображення, вивантажені разом, отримають ті самі категорії і підписи. Якщо ці зображення повинні мати різні підписи і категорії, будь ласка, завантажуйте їх окремо.
Примітка про завантаження груп файлів
diff --git a/app/src/main/res/values-ur/strings.xml b/app/src/main/res/values-ur/strings.xml
index a9c484405..90605cbc5 100644
--- a/app/src/main/res/values-ur/strings.xml
+++ b/app/src/main/res/values-ur/strings.xml
@@ -13,20 +13,18 @@
- %1$d فائل اپلوڈ ہورہی ہے
- %1$d فائلیں اپلوڈ ہورہی ہے
-
- - \@string/contributions_subtitle_zero
- - %1$d اپلوڈ
- - %1$d اپلوڈ
-
- شروع %1$d اپلوڈ
- - شروع %d$1 اپلوڈ
+ - شروع %1$d اپلوڈ
-
+
- %1$d اپلوڈ
- %1$d اپلوڈز
- %1$s تلے یہ تصویر لائسنس یافتہ ہو گی
+
+ - %1$s تلے یہ تصویر لائسنس یافتہ ہو گی
+ - یہ تصاویر %1$s کے تحت لائسنس یافتہ ہوں گی
+
ایکسپلور
ظاہریت
عمومی
@@ -101,10 +99,10 @@
اجازت نامہ
گزشتہ عنوان/وضاحت استعمال کریں
نائٹ موڈ
- انتباہ-شراکت 4.0
- انتباہ 4.0
- انتباہ-شراکت 3.0
- انتباہ 3.0
+ انتباہ-شراکت 4.0
+ انتباہ 4.0
+ انتباہ-شراکت 3.0
+ انتباہ 3.0
CC0
ہاں!
زمرہ جات
diff --git a/app/src/main/res/values-uz/strings.xml b/app/src/main/res/values-uz/strings.xml
index a6f19b60a..8d96f566d 100644
--- a/app/src/main/res/values-uz/strings.xml
+++ b/app/src/main/res/values-uz/strings.xml
@@ -9,7 +9,7 @@
-->
Vikiombor Facebook sahifasi
- Vikiomborning GitHub manba kodi
+ Vikiomborning GitHub manba kodi
Vikiombor logosi
Vikiombor vebsayti
Joylashuvni tanshadan chiqish
@@ -33,18 +33,14 @@
- %1$d ta fayl joylandi
- %1$d ta fayl joylandi
-
- - (%1$d)
- - (%1$d)
-
Yuklashni boshlash
- - %d yuklandi
- - %d yuklandi
+ - %1$d yuklandi
+ - %1$d yuklandi
- - %d yuklandi
- - %d yuklandi
+ - %1$d yuklandi
+ - %1$d yuklandi
- Ushbu rasm %1$s litsenziyasi asosidadir
@@ -88,7 +84,7 @@
Yuklash navbatda (cheklangan ulanish sozlanmasi yoqilgan)
%1$s yuklanmoqda!
Yuklashni ko‘rish uchun bosing
- Fayl yuklanmoqda: %s
+ Fayl yuklanmoqda: %1$s
%1$s yuklanmoqda
%1$s yuklab boʻlindi
%1$s faylini joylab boʻlmadi
@@ -155,10 +151,10 @@
Standart litsenziya
Oldingi sarlavha va tavsifdan foydalanish
Mavzu
- Attribution-ShareAlike 4.0
- Attribution 4.0
- Attribution-ShareAlike 3.0
- Attribution 3.0
+ Attribution-ShareAlike 4.0
+ Attribution 4.0
+ Attribution-ShareAlike 3.0
+ Attribution 3.0
Wikimedia Commons Vikipediyada qoʻllanilib kelinadigan koʻpgina rasmlarni joylashtiradi.
Rasmlarining butun dunyo boʻylab odamlarni maʼlumot olishga yordam beradi!
Marhamat, oʻzingiz tomonidan olingan yoki tuzilgan rasmlarni joylashtiring:
@@ -215,15 +211,14 @@
2FA kod
Elektron pochta tasdiqlash kodi
Haqiqatan ham tizimdan chiqmoqchimisiz?
- Media tasviri bajarilmadi
Hech qanday ost toifa topilmadi
Asosiy toifa topilmadi
Zao toʻgi
Llamalar
Kamalak koʻprigi
Lola
- Vikipediyaga xush kelibsiz
- Mualliflik huquqlariga xush kelibsiz
+ Vikipediyaga xush kelibsiz
+ Mualliflik huquqlariga xush kelibsiz
Sidney opera teatri
Bekor qilish
Ochish
@@ -357,11 +352,10 @@
Oʻchirish
Yutuqlar
Profil
- Statistika
Bildirilgan minnatdorchiliklar
Tanlangan tasvirlar
\"Yaqin atrofdan\" olingan tasvirlar
- Bosqich
+ Bosqich %1$d
Yuklangan rasmlar
Tasvirlar qayta tiklanmadi
Foydalanilgan tasvirlar
diff --git a/app/src/main/res/values-vec/strings.xml b/app/src/main/res/values-vec/strings.xml
index 17765b3ce..f46b6e8d4 100644
--- a/app/src/main/res/values-vec/strings.xml
+++ b/app/src/main/res/values-vec/strings.xml
@@ -5,7 +5,7 @@
-->
Pajina Facebook de Commons
- Codaxe fonte Github de Commons
+ Codaxe fonte Github de Commons
Logo de Commons
Sito web de Commons
Envia
@@ -14,16 +14,11 @@
- %1$d file en cargamento
- %1$d file en cargamento
-
- - \@string/contributions_subtitle_zero
- - (%1$d)
- - (%1$d)
-
- Scumisià %1$d cargamento
- Scumisiai %1$d cargamenti
-
+
- %1$d cargamento
- %1$d cargamenti
@@ -103,6 +98,7 @@
Inpostasion
Notate
Imajini in evidensa
+ Le foto in primo pian łe xé imajini de fotografi altamente cuałifegai che ła comunità de Wikimedia Commons ła ga ełeto come fotografi de alta cuałità sol sito.
Categoria
Revixion intra pari
Informasion
@@ -123,10 +119,10 @@
Liçensa predefinìa
Dopara titoło e descrision preçedente
Tema
- Atribusion-Spartisi n\'te ła stesa manjiera 4.0
- Atribusion 4.0
- Atribusion-Spartisi n\'te ła stesa manjiera 3.0
- Atribusion 3.0
+ Atribusion-Spartisi n\'te ła stesa manjiera 4.0
+ Atribusion 4.0
+ Atribusion-Spartisi n\'te ła stesa manjiera 3.0
+ Atribusion 3.0
la Wikimedia Commons ła ospita ła major parte de łe imajini che njien doparae so Wikipedia
Le to imajini łe juta l\'istrusion de łe persone in tuto el mondo!
Se ve prega de cargar łe imajini che njien tolte o creae interamente da sołi
@@ -176,15 +172,14 @@
Va drento al nostro canałe beta so Google Play par torte suito łe nove funsionałità e i erori corexùi
Codaxe 2FA
Vuto seriamente sevitar a ndaxer fora?
- Imajine multimediałe no riusìa
Nisuna categoria catada
Nisuna categoria superiore catada
Monte Zao
Lama
Arcobałen
Tulpan
- Benvegnuo Wikipedia
- Benvegnuo Copyright
+ Benvegnuo Wikipedia
+ Benvegnuo Copyright
Teatro de l\'opara de Sydney
Descançełare
Verxi
@@ -298,11 +293,10 @@
Nomina par ła scançełasion
Scanseła
Rixultai
- Statisteghe
Ringrasiamenti rivai
Imajini in evidensa
Imajini catae co \"Posti cuà rente\"
- Livèło:
+ Livèło: %1$d
Imajini cargae
Imajini no trate fora
Imajini doparae
@@ -374,11 +368,11 @@
Inposibiłe domandare el controło de ła categoria par %1$s
Domanda de controło categoria par %1$s
Fato
- Invià, grasie: Fato
- Ringrasiamenti inviai co suçeso a %1$s
- Fałio el envio del grasie a %1$s
- Envio grasie: Fałìo
- Envio de ringrasiamenti par %1$s
+ Invià, grasie: Fato
+ Ringrasiamenti inviai co suçeso a %1$s
+ Fałio el envio del grasie a %1$s
+ Envio grasie: Fałìo
+ Envio de ringrasiamenti par %1$s
Sto cuà el rispeta el regołamento del copyright?
Sto cuà xeło categorixà coretamente?
Sto cuà xeło n\'tei fini?
@@ -404,13 +398,12 @@
Varda no lexeste
Se ga vuo on eror co se jera drio ełexare łe imajini.
Speta on fià...
- Le foto in primo pian łe xé imajini de fotografi altamente cuałifegai che ła comunità de Wikimedia Commons ła ga ełeto come fotografi de alta cuałità sol sito.
Imajini cargae via \"Posti cuà rente\", imajini che łe njien cargae scoerxendo posti n\'te ła mapa
Sta funsion ła consente ai editori de enviar na notifega de ringrasiamento ai uxuari che i fa modifeghe che serve, doparando on lingambo picenin de ringrasiamento n\'te ła pajina del storego o n\'te ła pajina de łe difarense.\n\nQuesta funzione consente agli editor di inviare una notifica di ringraziamento agli utenti che apportano modifiche utili, utilizzando un piccolo link di ringraziamento nella pagina della cronologia o nella pagina delle differenze.
Exenpi de bone imajini da cargar so Commons
Exenpi de imajini da no cargar
Salta sta imajine
- Descargamento fałìo. No xé posibiłe descargar el file sensa el permeso a ła memoria esterna
+ Descargamento fałìo. No xé posibiłe descargar el file sensa el permeso a ła memoria esterna
Jestisi Tag EXIF
Ełexi i tag EXIF da salvare dopo el cargamento.
Autore
@@ -442,7 +435,7 @@
Logo
Parché el xé
Spartisi in jiro tra imajine co
- No te ghe njiancora contribuìo
+ %1$s no ga ancora contribuìo
Te ghè creà l\'uxuario
Testo tolto xò in tei aponti
Nodifega segnà come lexesta
@@ -451,7 +444,7 @@
Existe
Ghe vołe na foto
Tipo de posto
- Ponti, muxei, alberghi etc.
+ Ponti, muxei, alberghi etc.
Se ga verifegà on erore co te jeri drio entrare n\'te l\'utensa, xé neçesario rinpostar ła ciave.
Posto cuà rente catà
Sta cuà ła xé na foto del posto %1$s?
@@ -472,4 +465,5 @@
Ste do foto łe gheto fate in tel steso posto? Vuto doparar ła stesa latitudine/lonxitudine de l\'imajine a drita?
Carga \'ncora
No go catà nisun posto, pròa a canbiar la to riserca.
+ Autorixasion opsionałe: Dopara ła poxision corente par i sujerimenti de categoria
diff --git a/app/src/main/res/values-vi/strings.xml b/app/src/main/res/values-vi/strings.xml
index 635d71a3f..7b7bd33b2 100644
--- a/app/src/main/res/values-vi/strings.xml
+++ b/app/src/main/res/values-vi/strings.xml
@@ -1,5 +1,6 @@
Trang Commons tại Facebook
- Mã nguồn Commons tại GitHub
+ Mã nguồn Commons tại GitHub
Biểu trưng Commons
Trang Web Commons
+ Gửi
Thêm mô tả
+ Thêm đóng góp mới
+ Thêm đóng góp từ máy ảnh
+ Thêm đóng góp từ hình ảnh
+ Miêu tả
+ Hình ảnh
+ Tất cả
- %1$d tập tin đang được tải lên
- %1$d tập tin đang được tải lên
-
- - \@string/contributions_subtitle_zero
- - %1$d tập tin đã tải lên
- - %1$d tập tin đã tải lên
+ Bắt đầu tải lên
+
+ - Đang bắt đầu tải lên %1$d tập tin
- Đang bắt đầu tải lên %1$d tập tin
-
- - %1$d tập tin đã tải lên
+
- %1$d tập tin đã tải lên
- Hình này sẽ được phát hành theo giấy phép %1$s
- Những hình này sẽ được phát hành theo giấy phép %1$s
+
+ - Tải lên %1$d
+
Khám phá
Giao diện
Tổng quát
@@ -52,6 +60,7 @@
Commons
Thiết lập
Đăng tải lên Commons
+ Đang tải lên
Tên người dùng
Mật khẩu
Đăng nhập vào tài khoản Commons Beta của bạn
@@ -61,18 +70,22 @@
Đang đăng nhập
Vui lòng chờ…
Vui lòng chờ…
- Đã đăng nhập thành công!
- Đăng nhập thất bại!
+ Đã đăng nhập thành công!
+ Đăng nhập thất bại!
Không tìm thấy tập tin. Xin vui lòng thử tập tin khác.
- Xác thực thất bại, vui lòng đăng nhập lại
+ Đã đạt đến giới hạn thử lại tối đa! Vui lòng hủy bỏ tải lên và thử lại
+ Tắt tính năng tối ưu hóa pin?
+ Xác thực thất bại, vui lòng đăng nhập lại
Đã bắt đầu tải lên!
Đã tải lên %1$s!
Chạm để xem những tập tin tải lên của bạn
- Đang bắt đầu tải lên tập tin %1$s
+ Đang tải tập tin lên: %1$s
Đang tải lên tập tin %1$s
Đang hoàn thành việc tải lên tập tin %1$s
- Tải lên tập tin %1$s thất bại
+ Tải lên tập tin %1$s thất bại
+ Tải lên %1$s đã tạm dừng
Chạm để xem
+ Chạm để xem
Tập tin Tôi đã Tải lên Gần đây
Đang chờ
Thất bại
@@ -82,14 +95,20 @@
Chụp ảnh
Lân cận
Tập tin tôi tải lên
+ Sao chép địa chỉ liên kết
+ Liên kết đã được sao chép vào bảng tạm
Chia sẻ
- Tựa đề (Yêu cầu)
+ Xem trang tập tin
+ Chú thích (Yêu cầu)
+ Xin hãy cung cấp một chú thích cho tập tin này
Miêu tả
- Không thể đăng nhập – có lỗi mạng
+ Chú thích
+ Không thể đăng nhập – có lỗi mạng
Đã đăng nhập thất bại quá nhiều lần. Xin vui lòng thử lại trong vòng vài phút.
Rất tiếc, người dùng này đã bị cấm tại Commons
Bạn phải cung cấp mã xác thực dùng hai nhân tố.
- Đăng nhập thất bại
+ Một mã xác minh đăng nhập đã được gửi đến địa chỉ thư điện tử của bạn. Xin hãy cung cấp mã để đăng nhập.
+ Đăng nhập thất bại
Tải lên
Đặt tên nhóm này
Sửa đổi
@@ -98,13 +117,14 @@
Lưu
Làm mới
Danh sách
- Chưa có tập tin tải lên
+ (Chưa có tập tin tải lên)
Không tìm thấy thể loại khớp với %1$s
Xếp các hình ảnh vào thể loại để giúp chúng dễ tìm kiếm hơn trên Wikimedia Commons.\nHãy bắt đầu nhập để thêm thể loại.
Thể loại
Cài đặt
Mở tài khoản
Hình ảnh chọn lọc
+ Bộ chọn tùy chỉnh
Thể loại
Giới thiệu
Ứng dụng Wikimedia Commons là ứng dụng mã nguồn mở được sáng tạo và quản lý bởi các tình nguyện viên và những người được tin tưởng của cộng đồng Wikipedia. Wikimedia Foundation không tham gia vào sự tạo lập, phát triển cũng như quản lý của ứng dụng.
@@ -124,10 +144,10 @@
Giấy phép mặc định
Sử dụng tiêu đề và miêu tả trước
Giao diện
- Ghi công–Chia sẻ tương tự 4.0
- Ghi công 4.0
- Ghi công–Chia sẻ tương tự 3.0
- Ghi công 3.0
+ Ghi công–Chia sẻ tương tự 4.0
+ Ghi công 4.0
+ Ghi công–Chia sẻ tương tự 3.0
+ Ghi công 3.0
CC0
CC BY-SA 3.0
CC BY 3.0
@@ -157,21 +177,29 @@
Thể loại
Đang tải…
Chưa chọn
+ Không có chú thích
Không miêu tả
+ Không có thảo luận
Giấy phép không rõ
Làm mới
Yêu cầu Quyền Lưu trữ
Yêu cầu cấp phép: Đọc thiết bị lưu trữ bên ngoài. Ứng dụng cần được phép đọc thiết bị lưu trữ bên ngoài để truy cập kho ảnh của bạn.
- Yêu cầu cấp phép: Ghi vào thiết bị lưu trữ bên ngoài. Ứng dụng cần được phép ghi vào thiết bị lưu trữ bên ngoài để truy cập máy chụp hình của bạn.
+ Yêu cầu cấp phép: Ghi vào thiết bị lưu trữ bên ngoài. Ứng dụng cần được phép ghi vào thiết bị lưu trữ bên ngoài để truy cập máy chụp hình/thư viện ảnh của bạn.
+ Yêu cầu quyền truy cập vị trí
+ Ghi lại vị trí để chụp ảnh trong ứng dụng
OK
Cảnh báo
+ Đã tìm thấy tên tập tin bị trùng lặp
Tải lên
Có
Không
+ Chú thích
Tiêu đề
+ Miêu tả
Mô tả
Thảo luận
Tác giả
+ Người tải lên
Ngày tải lên
Giấy phép
Tọa độ
@@ -179,14 +207,16 @@
Trở thành người dùng thử nghiệm
Tham gia kênh thử nghiệm của chúng tôi trên Google Play và nhận các tính năng mới cùng những bản sửa lỗi sớm hơn
Mã Hai Nhân tố
+ Mã xác minh email
Bạn có chắc chắn muốn đăng xuất?
- Hình ảnh bị Thất bại
+ Không tìm thấy thể loại con
+ Không tìm thấy thể loại mẹ
Núi Zaō
Lạc đà không bướu
Cầu Cầu vồng
Tu-líp
- Hoan nghênh: Wikipedia
- Hoan nghênh: Bản quyền
+ Hoan nghênh: Wikipedia
+ Hoan nghênh: Bản quyền
Nhà hát Opera Sydney
Hủy bỏ
Mở
@@ -197,39 +227,53 @@
Giới thiệu
Thiết lập
Phản hồi
+ Phản hồi qua Github
Đăng xuất
Hướng dẫn
Thông báo
+ Duyệt
không tìm thấy miêu tả
Trang tập tin Commons
Khoản mục Wikidata
Bài Wikipedia
Xin vui lòng miêu tả phương tiện càng đầy đủ càng tốt: Chụp ở đâu? Trong hình có gì? Bối cảnh làm sao? Xin vui lòng miêu tả các đối tượng và người trong hình. Cho biết những thông tin khó đoán ra, chẳng hạn giờ trong ngày nếu là phong cảnh. Nếu phương tiện có gì kỳ lạ, xin vui lòng giải thích tại sao nó kỳ lạ.
+ Có vấn đề tiềm ẩn với hình ảnh này:
Hình ảnh quá tối.
Hình ảnh bị nhòe.
Hình ảnh đã có trên Commons.
Bức ảnh này được chụp ở một địa điểm khác.
Vui lòng chỉ đăng tải hình ảnh bạn đã tự chụp. Xin đừng đăng tải hình ảnh bạn tìm thấy trên tài không Facebook của người khác.
Bạn vẫn muốn đăng tải bức ảnh này?
- Sử dụng thiết bị lưu trữ bên ngoài
- Lưu các hình ảnh được chụp bằng máy chụp hình trong ứng dụng vào thiết bị của bạn
+ Lỗi kết nối
+ Quá trình tải lên yêu cầu phải có kết nối internet. Vui lòng kiểm tra kết nối mạng của bạn.
+ Các vấn đề được phát hiện trong hình ảnh
+ Lưu ảnh trong ứng dụng
+ Lưu các hình ảnh được chụp bằng máy chụp hình trong ứng dụng vào bộ nhớ thiết bị của bạn
Đăng nhập vào tài khoản của bạn
Gửi tập tin nhật trình
- Gửi tập tin nhật trình cho nhà phát triển qua thư điện tử
+ Gửi tập tin nhật trình cho nhà phát triển qua thư điện tử để hỗ trợ gỡ lỗi ứng dụng ứng dụng. Lưu ý: nhật trình có thể chứa thông tin nhận dạng.
Không tìm thấy trình duyệt để mở URL
Lỗi! Không tìm thấy URL
Đề nghị xóa
Có đề nghị xóa hình này.
+ Xem trang web để biết chi tiết
Bỏ qua
Đăng nhập
- Vị trí không có sẵn.
+ Bạn có thực sự muốn bỏ qua bước đăng nhập không?
+ Vui lòng đăng nhập để sử dụng được tính năng này
+ Sao chép wikitext vào bảng tạm
+ Wikitext đã được sao chép vào bảng tạm
+ Gần đó có thể hoạt động không đúng. Vị trí không có sẵn.
+ Không có kết nối mạng. Chỉ hiển thị các địa điểm được lưu trong bộ nhớ đệm.
+ Quyền truy cập vị trí bị từ chối. Vui lòng thiết lập vị trí thủ công để sử dụng được tính năng này.
Bạn cần cho phép để hiển thị danh sách nơi lân cận
Hướng dẫn
Wikidata
Wikipedia
Commons
- <u>Đánh giá chúng tôi</u>
+ Đánh giá chúng tôi
Câu thường hỏi
+ Hướng dẫn người dùng
Bỏ qua Hướng dẫn
Internet không có sẵn
Lỗi khi lấy thông báo
@@ -240,24 +284,201 @@
Tiến hành
Hủy bỏ
Thử lại
+ Chỗ này cần một bức ảnh.
Không tìm thấy hình ảnh!
Đã xuất hiện lỗi khi tải hình ảnh.
Tải lên bởi: %1$s
+ Đã bị cấm
+ Bạn đã bị cấm sửa đổi Commons
+ Bức ảnh trong ngày
+ Tìm kiếm
+ Tìm kiếm Commons
+ Tìm kiếm
+ Tìm kiếm gần đây:
+ Các truy vấn được tìm kiếm gần đây
+ Các truy vấn ngôn ngữ gần đây
+ Có lỗi xảy ra khi tải thể loại.
+ Có lỗi xảy ra khi tải hình ảnh mô tả.
+ Phương tiện
+ Thể loại
+ Khoản mục
+ Chọn lọc
+ Đã tải lên qua thiết bị di động
+ Bản đồ
+ Hình ảnh đã được thêm vào %1$s trên Wikidata!
+ Không cập nhật được thực thể Wikidata tương ứng!
Đặt làm hình nền
+ Đã thiết lập hình nền thành công!
+ Thách đố
+ Có thể tải lên hình ảnh này được không?
+ Câu hỏi
+ Kết quả
Hình chứa di tích và cảnh vật thiên nhiên thường được chấp nhận tải lên ở hầu hết các quốc gia. Xin lưu ý rằng các công trình nghệ thuật được trưng bày tạm thời thường có bản quyền và không được chấp nhận tải lên.
+ Một trong những mục tiêu của Commons là thu thập hình ảnh chất lượng. Do đó, không nên tải lên những hình ảnh mờ. Hãy luôn cố gắng chụp những hình ảnh đẹp với ánh sáng tốt.
+ Những hình ảnh thể hiện được công nghệ hoặc văn hóa luôn được hoan nghênh trên Commons.
+ Bạn trả lời đúng %1$s câu hỏi. Xin chúc mừng!
+ Chọn một trong hai lựa chọn để trả lời câu hỏi
+ Lượt đăng nhập đã hết hạn. Vui lòng đăng nhập lại
+ Chia sẻ bài kiểm tra của bạn với bạn bè!
+ Tiếp tục
+ Câu trả lời chính xác
+ Câu trả lời sai
+ Có thể tải lên hình chụp màn hình này được không?
Chia sẻ Ứng dụng
- Lỗi khi lấy các nơi lân cận.
+ Không thể tải các nơi lân cận.
+ Không có hình ảnh trong khu vực này
+ Không có kết quả tìm kiếm gần đây
+ Bạn có chắc chắn muốn xóa lịch sử tìm kiếm của bạn không?
+ Bạn có muốn xóa kết quả tìm kiếm này không?
+ Lịch sử tìm kiếm đã bị xóa
+ Đề nghị xóa
+ Xóa
+ Thành tích
+ Hồ sơ
+ Huy chương
+ Cảm ơn đã nhận
+ Hình ảnh chọn lọc
+ Hình ảnh đã được tải lên
+ Hình ảnh không được lùi lại
+ Hình ảnh đã được sử dụng
+ Chia sẻ thành tích của bạn đến bạn bè!
+ yêu cầu tối thiểu:
+ Thông báo Commons
+ Sử dụng tên tác giả tùy chỉnh
+ Tên tác giả tùy chỉnh
+ Đóng góp
+ Lân cận
+ Thông báo
+ Thông báo (đọc)
+ Hiển thị thông báo gần đây
+ Danh sách
+ Quyền lưu trữ
+ Chúng tôi cần sự cho phép của bạn để truy cập vào bộ nhớ ngoài của thiết bị nhằm mục đích tải hình ảnh lên.
+ Bước %1$d của %2$d : %3$s
+ Tiếp
+ Trước
+ Các hình ảnh
+ Các vị trí
+ Thể loại
+ Thêm/Xóa vào dấu trang
+ Dấu trang
+ Bạn không hề thêm bất kỳ dấu trang nào
+ Dấu trang
+ Tôi đã tải lên nó một cách nhầm lẫn
+ Tôi không biết nó sẽ được công khai
+ Tôi nhận ra rằng điều đó không tốt cho sự riêng tư của tôi
+ Tôi đã thay đổi ý định, tôi không muốn nó được công khai nữa
+ Xin lỗi, bức ảnh này không thú vị cho một cuốn bách khoa toàn thư
+ Chào mừng đến với Commons!\n\nTải lên phương tiện đầu tiên của bạn bằng cách nhấp vào nút thêm.
+ Không có thể loại nào được chọn
+ Hình ảnh không có thể loại hiếm khi được sử dụng. Bạn có chắc chắn muốn tiếp tục mà không chọn thể loại không?
+ Không có miêu tả nào được chọn
+ Hủy bỏ tải lên
+ Tiếp tục tải lên
Tìm kiếm khu vực này
+ Yêu cầu quyền
+ Có gì đó không đúng, Chúng tôi không thể tải được thành tích.
+ Hiển thị chiến dịch
+ Xem các chiến dịch đang diễn ra
+ Cho phép
+ Bỏ qua
+ Yêu cầu kiểm tra thể loại
+ Đã yêu cầu kiểm tra thể loại
+ Yêu cầu kiểm tra thể loại không hoạt động
+ Đã yêu cầu kiểm tra thể loại cho %1$s
+ Không thể yêu cầu kiểm tra thể loại cho %1$s
+ Đang yêu cầu kiểm tra thể loại cho %1$s
+ Xong
+ Gửi lời cảm ơn: Thành công
+ Đã gửi thành công lời cảm ơn tới %1$s
+ Không gửi được lời cảm ơn tới %1$s
+ Gửi lời cảm ơn: Thất bại
+ Đang gửi lời cảm ơn tới %1$s
+ Hình ảnh sau
+ Vâng, tại sao không?
+ Kiểm tra hộp thư đến của bạn
+ Vui lòng chờ...
+ Đã sao chép
+ Bỏ qua hình ảnh này
+ Tác giả
+ Bản quyền
+ Vị trí
+ Dòng máy ảnh
+ Phần mềm
+ Thành công
+ Thất bại
+ Logo
Đang cố gắng cập nhật danh mục.
Cập nhật danh mục
Thành công
Không thể thêm danh mục.
Cập nhật danh mục
+ Thành công
Không thể thêm mô tả.
+ Tùy chọn
+ Tải thêm
+ Không tìm thấy địa điểm nào, hãy thử thay đổi tiêu chí tìm kiếm.
Các cải thiện được đề xuất:
- Thêm danh mục vào hình ảnh này để cải thiện khả năng sử dụng.
- Thêm hình ảnh này vào bài viết Wikipedia được liên kết không có hình ảnh.
+ Thêm hình ảnh vào Wikipedia
+ Bạn có muốn thêm hình ảnh này vào bài viết Wikipedia ngôn ngữ %1$s không?
+ Xác nhận
+ 1. Sử dụng wikitext sau:
+ 2. Nhấp vào Xác nhận sẽ mở bài viết Wikipedia
+ Tìm một đề mục thích hợp trong bài viết cho hình ảnh của bạn
+ 4. Nhấp vào biểu tượng Sửa đổi (biểu tượng hình cây bút chì) cho đề mục đó.
+ 5. Dán wikitext vào đúng vị trí.
+ 6. Chỉnh sửa wikitext cho phù hợp nếu cần. Để biết thêm thông tin, xem <a href=\"https://en.wikipedia.org/wiki/Wikipedia:Manual_of_Style/Images#How_to_place_an_image\">tại đây</a> .
+ 7. Xuất bản bài viết
+ Sao chép wikicode vào bảng tạm
+ tạm ngừng
+ tiếp tục
+ Đã tạm ngừng
+ Thêm
Dấu trang
+ Thành tích
+ Bảng xếp hạng
+ Hạng
+ Tổng số:
+ Hạng
+ Thành viên
+ Đặt ảnh đại diện
+ Lỗi khi đặt ảnh đại diện mới, vui lòng thử lại
+ Đặt làm ảnh đại diện
+ Hàng năm
+ Hàng tuần
+ Từ trước đến nay
+ Tải lên
+ Lân cận
+ Hạng của tôi
+ Hình ảnh chất lượng
+ Giấy phép Phương tiện
+ Sửa đổi vị trí
+ Vị trí hình
+ Nhãn
+ Miêu tả
+ Khoản mục
+ Không có hình ảnh
+ Xong
+ Trở lại
+ Bỏ qua
+ Tối đa: %1$d
+ Tùy chọn cấp phép: Định vị hiện tại để nhận gợi ý thể loại
+ Áp dụng
+ Mặc định lại
Phiên bản Android
- Vuốt nhanh và lâu để thực hiện các thao tác sau: - Trái/Phải: Đi tới trước/tiếp theo - Lên: Chọn - Xuống: Đánh dấu là không tải lên.
+ Nhà sản xuất thiết bị
+ Mẫu thiết bị
+ Tên thiết bị
+ Hình ảnh đã chọn
+ Báo cáo
+ Báo cáo thành viên này
+ Báo cáo nội dung này
+ Xem thành tích của bạn
+ Sửa đổi hình ảnh
+ Sửa đổi Vị trí
+ Vị trí đã được cập nhật!
+ Xóa vị trí
+ Cảm ơn tác giả
diff --git a/app/src/main/res/values-xal/strings.xml b/app/src/main/res/values-xal/strings.xml
index 346ff15e1..f1c90f6b3 100644
--- a/app/src/main/res/values-xal/strings.xml
+++ b/app/src/main/res/values-xal/strings.xml
@@ -5,7 +5,7 @@
-->
Вики-аһулх һазрин Фэйсбук халх
- Вики-аһулх һазрин Гитхабдк экн кодмуд
+ Вики-аһулх һазрин Гитхабдк экн кодмуд
Вики-аһулх һазрин лого-темдг
Вики-аһулх һазрин вэб-сайт
Бәәршл суңһх терзәс һарх
@@ -37,7 +37,7 @@
Ацаллт кеҗ экллә!
%1$s ацалгдв!
Ацаллтын җигсәлтиг үзх
- Файл ацалгдҗана: %s
+ Файл ацалгдҗана: %1$s
%1$s ацалгдҗана
%1$s ацалгдҗ дуусчана
%1$s ацалҗ чадсн уга
@@ -74,10 +74,10 @@
Цуцлх
Татҗ авх
Аңхдгчар бәәсн лиценз
- Attribution-ShareAlike 4.0
- Attribution 4.0
- Attribution-ShareAlike 3.0
- Attribution 3.0
+ Attribution-ShareAlike 4.0
+ Attribution 4.0
+ Attribution-ShareAlike 3.0
+ Attribution 3.0
Һарцг: Сиднейн дүүрин театр
Тодрхаллт: Сиднейн дүүрин театр, булңгин үзмҗ
Тиим
@@ -105,8 +105,8 @@
Лам гөрәсн
Солңһта тагт
Бамб цецг
- Википедьт тавта мөрлтн!
- Тавта мөрлтн — зокагчин эрк
+ Википедьт тавта мөрлтн!
+ Тавта мөрлтн — зокагчин эрк
Сиднейн дүүрин театр
Цуцлх
Неех
@@ -166,7 +166,7 @@
Өргдксн тохрллһ
Дәкн тохрулх
Бәәршл олдсн уга
- Бәәршл немх
+ Бәәршл немх
Делгрңгү медәлл
Андроидын хүвлвр
Төкәрмҗин үүлдврләч
@@ -182,7 +182,7 @@
Хадһлх Зөвшәрлиг эс зөвшәрв
Эн зүүләр хувалцх болмҗ уга
- - %d дүрс суңһсн
- - %d дүрс суңһсн
+ - %1$d дүрс суңһсн
+ - %1$d дүрс суңһсн
diff --git a/app/src/main/res/values-xmf/strings.xml b/app/src/main/res/values-xmf/strings.xml
index 649cab67d..5a432e2f0 100644
--- a/app/src/main/res/values-xmf/strings.xml
+++ b/app/src/main/res/values-xmf/strings.xml
@@ -5,7 +5,7 @@
-->
ვიკიოწკარუეშ Facebook ხასჷლა
- ვიკიოწკარუეს წყუშ კოდი Github-ის
+ ვიკიოწკარუეს წყუშ კოდი Github-ის
ვიკიოწკარუეშ ლოგო
ვიკიოწკარუეშ ვებ-ხასჷლა
ლოკაციაშ გიშაგორუაშ ოსინთეშე გიშულა
@@ -25,13 +25,12 @@
გორუაშ მიოჯინი
აბანიშ დგომარობა
დღაშ სურათი
- %1$d {{PLURAL:%1$d|one=ფაილი იხარგუ|few=ფაილი იხარგუ}}
-
- - (%1$d)
- - (%1$d)
+
+ - %1$d ფაილი იხარგუ
+ - %1$d ფაილი იხარგუ
ეხარგუაშ დოჭყაფა
-
+
- იმუშებუ %1$d ეხარგუა
- იმუშებუ %1$d ეხარგუა
- იმუშებუ %1$d ეხარგუა
@@ -83,7 +82,7 @@
ეხარგუა რანწკის გერე (გოხურგილი რსხუშ რეჟიმი ჩართული რე)
%1$ ეხარგილი რე!
ქეგუწკანტეთ თქვანი ეხარგუაშ ოძირაფალო
- ეთმიხარგუ ფაილი: %s
+ ეთმიხარგუ ფაილი: %1$s
%1$ იხარგუ
ეხარგუაშ თება %1$
%1$s ეხარგუაქ ვემიხუჯინუ
@@ -154,10 +153,10 @@
გურგოჩამილი ლიცენზია
წჷმი დუდჯოხოშ/ეჭარუაშ გჷმორინაფა
ფონიშ რეჟიმი
- Attribution-ShareAlike 4.0
- Attribution 4.0
- Attribution-ShareAlike 3.0
- Attribution 3.0
+ Attribution-ShareAlike 4.0
+ Attribution 4.0
+ Attribution-ShareAlike 3.0
+ Attribution 3.0
CC0
CC BY-SA 3.0
CC BY-SA 3.0
@@ -219,15 +218,14 @@
2ფა კოდი
ელექტრონული ფოშტაშ დოდასურაფაშ კოდი
გოკონანო გიშულა?
- მედიაფაილიშ ჩილათა
გიმენკატეგორიეფქ ვეგორინუ
ომასქერე კატეგორიეფქ ვეგორინუ
ზაოშ გვალა
ლამეფი
ცაშორტყაფუშ ხინჯი
ტიტა
- მოზოჯით ვიკიპედიაშა
- მოზოჯით — ოავტორე ნებეფი
+ მოზოჯით ვიკიპედიაშა
+ მოზოჯით — ოავტორე ნებეფი
სიდნეიშ ოპერაშ თეატრი
გოუქვაფა
გონწყუმა
@@ -342,11 +340,10 @@
ლასუა
მენაჭირინუეფი
პროფილი
- სტატისტიკა
მარდი მეღებული რე
გიშნაგორა სურათეფი
გოხოლუაშ აბანეფიშ სურათეფი
- დონე
+ დონე %1$d
სურათეფი ეხარგილი რე
სურათეფი ვადორთელენა
სურათეფი გჷმირინუაფუ
@@ -443,4 +440,5 @@
რუმე
თე
უმოსიშ გაგება
+ გეძინელი ოჸია: მიმალი ორენიშ გოთანჯუა კატეგორიაშ მიორზიებელო
diff --git a/app/src/main/res/values-yi/error.xml b/app/src/main/res/values-yi/error.xml
deleted file mode 100644
index e0fd55abb..000000000
--- a/app/src/main/res/values-yi/error.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
- קאמאנסט איז אײַנגעפֿאלן
- אוי, עפעס טויג נישט!
- דערצייל אונז וואס איר האט געהאלטן ביי טון, און טייל עס מיט אונז דורך בליצפאסט. וועט אונז העלפֿן פֿאררעכטן!
- ייש\"כ!
-
diff --git a/app/src/main/res/values-yi/strings.xml b/app/src/main/res/values-yi/strings.xml
deleted file mode 100644
index 27ea76605..000000000
--- a/app/src/main/res/values-yi/strings.xml
+++ /dev/null
@@ -1,81 +0,0 @@
-
-
- וויקימעדיע קאמאנס
- איינשטעלונגען
- באַניצער־נאָמען
- פאַסווארט
- אַרײַנלאָגירן
- ארײַנלאגירן
- ביטע ווארטן…
- אריינלאגירט מיט הצלחה!
- ארײַנלאגירן אדורכגעפאלן!
- אויטענטיפֿיצירן דורכגעפֿאלן!
- ארויפלאדן אנגעהויבן!
- %1$s ארויפגעלאדן!!
- דרוקט צו זען אײַער ארויפֿלאד
- אנהייבן %1$s ארויפלאד
- %1$s ארויפֿלאדן!!
- געענדיקט ארויפֿלאדן %1$s
- ארויפֿלאדן %1$s דורכגעפֿאלן
- דרוקט צו באקוקן
-
- - 1 טעקע לאדט אן
- - %1$d טעקעס לאדן אן
-
- מײַנע ארויפלאדן
- אין ריי
- דורכגעפֿאַלן
- %1$d%% דערגאנצט
- אַרויפֿלאָדן
- פון גאלעריע
- נעמען בילד
- מײַנע ארויפלאדן
- טיילן
- באקוקן אין בלעטערער
- טיטל
- באַשרײַבונג
- ארײַנלאגירן אדורכגעפאלן!
- אַרויפֿלאָדן
- פֿארענדערונגען
- אַרויפֿלאָדן
- זוכן קאטעגאריעס
- אויפֿהיטן
-
- - נאך נישט קיין ארויפֿלאדן
- - 1 ארויפֿלאד
- - %1$d ארויפֿלאדן
-
- קאַטעגאריעס
- באניץ באריכטן
- איינשטעלונגען
- וועגן
- וועגן
- שיקן פֿידבעק (דורך בליצפאסט)
- לעצטיק־געניצטע קאטעגאריעס
- אַנולירן
- אראָפלאָדן
- ליצענץ
- CC Attribution-ShareAlike 3.0
- CC Attribution 3.0
- CC0
- CC BY-SA 3.0
- CC BY-SA 3.0 (עסטרייך)
- CC BY-SA 3.0 (דייטשלאנד)
- CC BY-SA 3.0 (עסטלאנד)
- CC BY-SA 3.0 (שפאניע)
- CC BY-SA 3.0 (קראאטיע)
- CC BY-SA 3.0 (לוקסעמבורג)
- CC BY-SA 3.0 (האלאנד)
- CC BY-SA 3.0 (נארוועגיע)
- CC BY-SA 3.0 (פוילן)
- CC BY-SA 3.0 (רומעניע)
- CC BY 3.0
- CC Zero
- יא!
- קאַטעגאריעס
- לאָדט…
- גארנישט געקליבן
- קיין באַשרײַבונג
- אומבאקאנטער ליצענץ
- דערפֿרישן
-
diff --git a/app/src/main/res/values-zgh/strings.xml b/app/src/main/res/values-zgh/strings.xml
index b3615cefc..ccf76c23d 100644
--- a/app/src/main/res/values-zgh/strings.xml
+++ b/app/src/main/res/values-zgh/strings.xml
@@ -78,7 +78,6 @@
ⵔⵣⵓ
ⴽⴽⵙ
ⵉⴼⵔⵙ
- ⵉⵙⵉⴹⵏⵏ
ⵜⵉⵙⵖⴰⵍ
ⴰⵏⵙⵎⵔⴰⵙ
ⵙⵙⵉⴹⵏ
diff --git a/app/src/main/res/values-zh-rHK/strings.xml b/app/src/main/res/values-zh-rHK/strings.xml
index d7c023e6f..57a0810a5 100644
--- a/app/src/main/res/values-zh-rHK/strings.xml
+++ b/app/src/main/res/values-zh-rHK/strings.xml
@@ -7,25 +7,21 @@
-->
維基共享資源臉書頁
- Github 上的共享資源原始碼
+ Github 上的共享資源原始碼
維基共享資源標誌
共享資源網站
- 正在上傳%1$d份檔案
- 正在上傳%1$d份檔案
-
- - (%1$d)
- - (%1$d)
-
開始上傳
- - 正在處理%d項上傳
- - 正在處理%d項上傳
+ - 正在處理%1$d項上傳
+ - 正在處理%1$d項上傳
- - %d次上傳
- - %d次上傳
+ - %1$d次上傳
+ - %1$d次上傳
- 此圖片會按 %1$s 協議授權上傳
@@ -64,7 +60,7 @@
上傳已排定(限制連線模式已啟用)
已上傳%1$s!
輕觸來檢視您上傳的項目
- 開始上傳檔案:%s
+ 開始上傳檔案:%1$s
正在上傳%1$s
即將完成上傳%1$s
上傳%1$s失敗
@@ -131,10 +127,10 @@
預設授權條款
使用先前標題及描述
主題
- 姓名標示-相同方式分享4.0
- 姓名標示4.0
- 姓名標示-相同方式分享3.0
- 姓名標示3.0
+ 姓名標示-相同方式分享4.0
+ 姓名標示4.0
+ 姓名標示-相同方式分享3.0
+ 姓名標示3.0
維基共享資源管理大部份使用在維基百科的圖片。
您的圖片有助教育世人!
請上傳完全由您自己拍攝或創作的圖片:
@@ -187,15 +183,14 @@
選擇加入我們在 Google Play 上的 beta 測試版本,以提早取用新功能及程式修正
雙重驗證代碼
您確定要登出嗎?
- 媒體圖片失敗
找不到子分類
找不到母分類
藏王連峰
大羊駝
彩虹橋
鬱金香
- 歡迎來到維基百科
- 歡迎版權
+ 歡迎來到維基百科
+ 歡迎版權
雪梨歌劇院
取消
打開
diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml
index 0bcc201e4..8c2053084 100644
--- a/app/src/main/res/values-zh-rTW/strings.xml
+++ b/app/src/main/res/values-zh-rTW/strings.xml
@@ -29,7 +29,7 @@
-->
維基共享資源臉書頁面
- Github 上的共享資源原始碼
+ GitHub 上的共享資源原始碼
維基共享資源標誌
共享資源網站
離開位置點選器
@@ -53,18 +53,14 @@
- 正在上傳%1$d個檔案
- 正在上傳%1$d個檔案
-
- - (%1$d)
- - (%1$d)
-
開始上傳
- - 正在處理%d個上傳
- - 正在處理%d個上傳
+ - 正在處理 %1$d 個上傳
+ - 正在處理 %1$d 個上傳
- - %d個上傳
- - %d個上傳
+ - %1$d 個上傳
+ - %1$d 個上傳
- 此圖片會按 %1$s 協議授權上傳
@@ -108,7 +104,7 @@
上傳已排定(限制連線模式已啟用)
已上傳%1$s!
輕觸來檢視您上傳的項目
- 開始上傳檔案:%s
+ 開始上傳檔案:%1$s
正在上傳%1$s
即將完成上傳%1$s
上傳%1$s失敗
@@ -158,6 +154,7 @@
設定
註冊
精選圖片
+ 特色圖片是出自高水準技巧攝影師和插畫家的貢獻,維基共享資源社區將其挑選為網站上最高品質的圖片。
自訂選擇器
分類
同行評審
@@ -174,6 +171,9 @@
您尚未上傳過任何照片。
重試
取消
+ 類型 語言 名稱
+ 近期搜尋
+ 所有語言
透過提交此圖片,我宣佈這是我個人創作的成品,且不包含受版權保護或自拍內容,並除此之外遵守<a href=\"https://commons.wikimedia.org/wiki/Commons:Policies_and_guidelines\">維基媒體共享資源方針</a>。
下載
預設授權條款
@@ -181,7 +181,7 @@
主題
姓名標示-相同方式分享4.0
姓名標示4.0
- 姓名標示-相同方式分享3.0
+ 姓名標示-相同方式分享3.0
姓名標示3.0
公眾領域貢獻宣告
CC BY-SA 3.0
@@ -245,15 +245,14 @@
2FA 代碼
電子郵件驗證碼
您確定要登出嗎?
- 媒體圖片失敗
找不到子分類
找不到父級分類
藏王山
美洲駝
彩虹橋
鬱金香
- 歡迎來到維基百科
- 歡迎版權
+ 一般維基百科條目的示意圖。
+ 一疊紙張上版權符號被劃掉的圖畫。
雪梨歌劇院
取消
開啟
@@ -286,6 +285,7 @@
上傳過程需要有效的網際網路存取。請檢查您的網路連線。
在圖片中發現的問題
請僅上傳您自己拍攝的圖片。不要上傳您從網路下載來的圖片。
+ 上傳
儲存內建拍攝截圖
將使用內建相機拍攝的照片保存到您的設備存儲中
登入您的帳號
@@ -357,6 +357,7 @@
測驗
這張圖片可以上傳嗎?
問題
+ 我不確定
結果
如果您持續上傳需要刪除的圖片,您的帳號可能會被封禁。你確定要結束測驗嗎?
您上傳的圖片已有%1$s遭到刪除。如果您持續上傳需要刪除的圖片,您的帳號可能會遭到封鎖。\n\n您要不要重新閱覽教學,然後再做一次測驗,以幫助您分辨哪些類型的圖片可以上傳、哪些不可以?
@@ -366,6 +367,7 @@
收錄高畫質圖像是維基共享資源的目標之一,所以不應該上傳模糊的圖片。儘量試著只上傳光線良好的優良圖片。
在維基共享資源上,展現科技或文化的圖片很受到歡迎。
您答對了 %1$s 題,恭喜!
+ 繼續
請在兩個選項中擇一,來回答這個問題。
登入時限已過,請重新登入。
向朋友分享您的測驗結果!
@@ -389,13 +391,12 @@
成果
個人檔案
徽章:
- 統計內容
已收到的感謝
特色圖片
圖片來自“附近的地方”
- 等級 %d
- %s(%s級)
- %s(%s)
+ 等級 %1$d
+ %1$s(%2$s級)
+ %1$s(%2$s)
已上傳的圖片
沒有被還原回復的圖片
有被使用到的圖片
@@ -460,6 +461,8 @@
結束於:
顯示活動
檢視發生中的活動
+ 顯示刪除按鈕
+ 在自訂點選器中啟用「刪除資料夾」按鈕
允許讓應用程式索取位置,以防相機未記錄到位置。某些設備的相機不會記錄位置,在這種情況下,讓應用程式索取位置,並將其附加到圖片裡,能讓您的貢獻更有用。您可以隨時從「設定」中更改
允許
關閉
@@ -484,8 +487,8 @@
請求%1$s的分類檢查
完成
發送感謝:成功
- 成功傳送感謝給:%1$s
- 發送感謝給%1$s失敗
+ 傳送感謝給:%1$s
+ 傳送感謝給%1$s失敗
發送感謝:失敗
向%1$s發送感謝
這是否遵守版權規範?
@@ -514,15 +517,14 @@
檢視未讀
選擇圖片時發生錯誤
請稍待…
- 特色圖片是來自高技能攝影師和插畫家的圖片,維基共享資源社區將其選為網站上最高質量的圖片。
通過附近位置上傳的圖片是指那些使用地圖上發現位置功能上傳的圖片。
此功能允許編輯者通過使用歷史頁面或差異頁面上的小感謝鏈接向進行有用編輯的用戶發送感謝通知。
- 複製到後續媒體
+ 複製到下一個項目
已複製
上傳到共享資源的好圖片示例
未上傳的範例圖片
略過此圖片
- 下載失敗!因為缺少外部儲存裝置權限緣故,我們無法下載檔案。
+ 下載失敗。因為缺少外部儲存裝置權限緣故,我們無法下載檔案。
管理 EXIF 標籤
選擇要保持上傳的 EXIF 標籤
作者
@@ -532,11 +534,10 @@
鏡頭型號
序號
軟體
- 媒體位置訪問被拒絕
- 我們可能無法自動從您上傳的圖片中獲取位置數據。提交前請為每張圖片添加適當的位置
從您的手機上直接上傳照片到維基共享資源,立即下載共享資源應用程式:%1$s
分享應用程式透過…
圖片資訊
+ 不要再顯示此訊息
找不到分類
沒有找到描述
已取消上傳
@@ -589,7 +590,7 @@
編輯描述與說明
分享圖片透過
您還沒有做出任何貢獻
- %s還沒有做出任何貢獻
+ %1$s還沒有做出任何貢獻
已建立帳號!
文字已複製至剪貼簿
將通知標記為已讀
@@ -640,9 +641,9 @@
3. 尋找適合插入您的圖片的章節。
4. 點擊章節裡的編輯按鈕(為筆狀模樣的圖案)。
5. 將wikitext貼到適當的位置。
- 6. 若有需要,可編輯wikitext來調整到適當的定位。更多相關資訊請查看<a href=\"https://zh.wikipedia.org/wiki/Help:%E5%9B%BE%E5%83%8F\">此頁面</a>。
+ 6. 若有需要,可編輯wikitext來調整到適當的定位。更多相關資訊請查看<a href=\"https://zh.wikipedia.org/wiki/Help:图像\">此頁面</a>。
7. 發布條目
- 複製維基代碼到剪貼簿
+ 複製 wikitext 到剪貼簿
暫停
繼續
已暫停
@@ -683,6 +684,8 @@
請選擇適當的分類。與描寫不同,分類僅使用英文。
維基共享資源讓您的圖片可重複使用,並可讓任何人改編。您想要放棄所有使用權嗎?您想要被標示出嗎?您想要改編內容使用相同的授權條款嗎?
描述
+ 標籤
+ 描述
媒體授權條款
媒體詳細資料
檢視分類頁面
@@ -725,8 +728,10 @@
維基愛古蹟是由維基媒體舉行的國際古蹟攝影比賽
需要權限
附近地圖需要讀取手機狀態來正常運作
- 使用者貢獻:%s
- 使用者成果:%s
+ 請開啟定位服務,以查看附近的地點。
+ 可有可無的權限:獲取目前的地理位置,以用於分類建議
+ 使用者貢獻:%1$s
+ 使用者成果:%1$s
檢視使用者個人檔案
編輯描寫
編輯分類
@@ -758,8 +763,8 @@
取消標記為不上傳
標記為不可上傳
取消標記為不可上傳
- 顯示已操作的圖片
- 隱藏已操作的圖片
+ 顯示已處理過的圖片
+ 隱藏已處理過的圖片
找不到更多圖片
已上傳此圖片
無法選擇此圖片來上載
@@ -799,11 +804,11 @@
您要開啟 KML 檔案嗎?
儲存 KML 檔案失敗。
儲存 GPX 檔案失敗。
- 正在儲存 KML 檔案
- 正在儲存 GPX 檔案
+ 正在儲存成 KML 檔案…
+ 正在儲存成 GPX 檔案…
- - 已選 %d 張圖片
- - 已選 %d 張圖片
+ - 已選 %1$d 張圖片
+ - 已選 %1$d 張圖片
請記住,多重上傳中的所有圖片都會取得相同的分類和描述。如果圖片不要共享描述和分類,請執行多次單筆上傳。
關於多次上傳的註釋
@@ -829,8 +834,8 @@
取消
%1$s資料夾刪除成功
無法刪除資料夾%1$s
- 刪除資料夾內容時發生錯誤: %1$s
- 無法取得儲存桶 ID 的資料夾路徑: %1$d
+ 刪除資料夾內容時發生錯誤:%1$s
+ 無法取得儲存桶 ID 的資料夾路徑:%1$d
這個地點還沒有照片,來拍一張吧!
這個地點已有照片。
現在檢查這個地點是否有照片。
@@ -839,7 +844,6 @@
維基共享資源
其它 wiki
檔案用途
- 單一WebViewActivity
帳號
引退帳號
隱退帳號警告
diff --git a/app/src/main/res/values-zh/strings.xml b/app/src/main/res/values-zh/strings.xml
index 8d2a5d6b9..ad572eac0 100644
--- a/app/src/main/res/values-zh/strings.xml
+++ b/app/src/main/res/values-zh/strings.xml
@@ -64,7 +64,7 @@
-->
共享资源Facebook页面
- 共享资源Github源代码
+ 共享资源GitHub源代码
共享资源标识
共享资源网站
退出位置选择器
@@ -88,18 +88,14 @@
- %1$d个文件正在上传
- %1$d个文件正在上传
-
- - %1$d次上传
- - %1$d次上传
-
开始上传
- - 正在处理%d个上传
- - 正在处理%d个上传
+ - 正在处理%1$d个上传
+ - 正在处理%1$d个上传
- - %d个上传
- - %d个上传
+ - %1$d个上传
+ - %1$d个上传
- 该图像的授权协议是 %1$s
@@ -142,7 +138,7 @@
上传排队中(已启用连接受限模式)
%1$s已上传!
点击查看您的上传
- 开始%s的上传
+ 开始%1$s的上传
%1$s正在上传
正在完成上传%1$s
上传%1$s失败
@@ -192,6 +188,7 @@
设置
注册
特色图片
+ 特色图片是出自高水准技巧摄影师和插画家的贡献,维基共享资源社区将其挑选为网站上最高品质的图片。
自定义选择器
分类
同行评审
@@ -208,6 +205,9 @@
您还没有上传任何照片。
重试
取消
+ 类型 语言 名称
+ 近期搜索
+ 所有语言
通过提交该图片,我声明这是我自己的作品,其不包含受版权保护的材料或自拍像,并遵循<a href=\"https://commons.wikimedia.org/wiki/Commons:Policies_and_guidelines\">维基共享资源</a>方针。
下载
默认许可协议
@@ -269,6 +269,7 @@
描述
讨论
作者
+ 上传者
上传日期
许可协议
坐标
@@ -278,15 +279,14 @@
2FA代码
电子邮件验证码
您真的想要退出么?
- 媒体图片失败
找不到子分类
找不到父分类
藏王连峰
大羊驼
彩虹桥
郁金香
- 欢迎界面维基百科信息
- 欢迎界面版权信息
+ 通用维基百科条目的示意图。
+ 一叠纸的图画,版权符号被划掉了。
悉尼歌剧院
取消
打开
@@ -319,6 +319,7 @@
上传过程需要有效的互联网访问。请检查您的网络连接。
在图片中发现的问题
请仅上传由您自己拍摄的图像。请勿上传您从互联网下载的图像。
+ 上传
保存应用程序内截图
将您设备内部照相机应用拍摄的照片保存至您的设备存储中
登录您的账户
@@ -390,6 +391,7 @@
测验
这个图片可以上传吗?
问题
+ 我不确定
结果
如果您继续上传需要删除的图片,您的帐户可能会被封禁。你确定要结束测验吗?
您上传的图片超过%1$s已被删除。如果您继续上传需要删除的图片,您的帐户可能会被封禁。\n\n您是否希望再次查看该教程,然后进行测验以帮助您了解应该或不应上传的图像类型?
@@ -399,6 +401,7 @@
维基共享资源的目标之一是收集高质量的图像。因此,不应上传模糊的图像。因此请尝试用良好的照明拍摄漂亮的照片。
维基共享资源非常欢迎展示技术或文化的图片。
您得到%1$s的答案是正确的。祝贺您!
+ 继续
选择两个选项之一来回答问题
登录已过期。请重新登录。
与朋友分享您的测验!
@@ -422,13 +425,12 @@
成就
个人资料
徽章
- 统计
已收到感谢
特色图片
来自“附近地点”的图片
- 等级%d
- %s(%s級)
- %s(%s)
+ 等级%1$d
+ %1$s(%2$s級)
+ %1$s(%2$s)
已上传图片
未还原图片
使用过的图片
@@ -493,6 +495,8 @@
结束时间:
显示活动
显示正在进行的活动
+ 显示删除按钮
+ 在自定义选择器中启用“删除文件夹”按钮
允许应用获取位置,以防相机未记录位置。某些设备的相机不记录位置。在这种情况下,让应用获取位置并将其附加到照片可以让您的贡献更有用。您可以随时从“设置”中更改此设置
允许
拒绝
@@ -516,11 +520,11 @@
%1$s不能请求类别检查
正在请求对%1$s进行类别检查
完成
- 发送感谢成功
- 成功的给%1$s发送感谢
- 给%1$发送感谢失败
- 发送感谢失败
- 向%1$s发送感谢
+ 发送感谢:成功
+ 已向%1$s发送感谢
+ 无法向%1$s发送感谢
+ 发送感谢:失败
+ 正在向%1$s发送感谢
它是否符合版权方针?
它是否被正确分类?
它是否在维基共享资源的收录范围内?
@@ -547,15 +551,14 @@
查看未读
选择图片时出错
请稍候……
- 特征图片是Wikimedia Commons社区选出的网站上的最高质量的图片中的一部分,是来自于技术高超的摄影师和绘画师。
通过附近位置上传的图片是指那些使用地图上发现位置功能上传的图片
这些功能允许编辑人员给那些做出了有用编辑的用户发送感谢通知-感谢通知通过使用在历史页面或差分页面上的一个小的感谢链接实现的。
- 复制到后续媒体
+ 复制到下一个项目
已复制
上传好图片到Commons的例子
不能上传图片的例子
跳过该图片
- 下载失败!!在没有外部存储权限时我们不能下载该文件。
+ 下载失败。因为缺少外部存储权限,我们无法下载文件。
管理EXIF标签
选择保存在上传中的EXIF标签
作者
@@ -565,11 +568,10 @@
镜头型号
序列号
软件
- 被拒绝访问媒体位置
- 我们可能无法自动从你上传的图片中获取位置数据。提交前请为每张图片添加适当的位置
直接在您手机上的维基共享资源应用中上传照片。立即下载共享资源应用:%1$s
分享到...
图像信息
+ 不再显示此消息
找不到分类
找不到描写。
取消上传
@@ -622,7 +624,7 @@
编辑描述和说明。
分享图片透过
您还没有做出任何贡献
- %s还没有作出任何贡献
+ %1$s还没有作出任何贡献
账户已创建!
文本已复制至剪贴板
通知已标记为已读
@@ -631,11 +633,13 @@
存在
需要照片
地点类型:
- 桥梁、博物馆、旅馆等
+ 桥梁、博物馆、酒店等
登录时出现一些问题。您必须重置您的密码!
媒体
子类别
父类别
+ 子分类
+ 父级分类
找到附近地点
这些是%1$s的图片吗?
这是%1$s的图片吗?
@@ -673,7 +677,7 @@
5. 将wikitext粘贴到合适的位置。
6. 如果必要,在合适的位置编辑wikitext。参阅<a href=\"https://en.wikipedia.org/wiki/Wikipedia:Manual_of_Style/Images#How_to_place_an_image\">此处</a>以获得更多信息。
7. 发布条目
- 复制维基代码到剪贴板
+ 复制wikitext到剪贴板
暂停
继续
已暂停
@@ -714,6 +718,8 @@
请选择合适的分类。与描述不同,分类仅使用英文。
维基共享资源让您的图片能够重复使用并且供任何人修改。您想放弃所有使用权吗?您希望被标示出吗?您想依据相同的授权条款来修改内容吗?
描述
+ 标签
+ 描述
媒体授权条款
媒体详情
查看分类页面
@@ -740,7 +746,7 @@
返回
欢迎来到自定义图片选择器
此拾取器显示您已上传至维基共享资源的图片。
- 右边的图片与左边的不同,它具有已上传至维基共享资源的标志。\n点击并长按来预览图像。
+ 右边的图片与左边的不同,它具有已上传至维基共享资源的标志。\n\n点击并长按来预览图像。
棒极了
此图像已上传至维基共享资源。
出于技术原因,该应用无法可靠地一次性上传超过%1$d张照片。%2$d张已经超过%1$d张的上传限制。
@@ -755,8 +761,10 @@
维基爱古迹是由维基媒体举行的国际古迹摄影比赛
需要权限
附近地图需要读取手机状态权限以正常运行
- 用户贡献:%s
- 用户成就:%s
+ 请打开定位服务,以查看附近的地点。
+ 可选权限:获取当前位置以提供分类建议
+ 用户贡献:%1$s
+ 用户成就:%1$s
查看用户个人资料
编辑描述
编辑分类
@@ -788,8 +796,8 @@
取消标记为不上传
标记为不可上传
取消标记为不可上传
- 显示已操作过的图片
- 隐藏已操作过的图片
+ 显示已处理过的图片
+ 隐藏已处理过的图片
未找到更多图像
此图像已上传
无法选择此图像进行上传
@@ -812,7 +820,7 @@
功能需要权限
了解如何写出有用的描述
了解如何写出有用的注释
- 查看您的成果
+ 查看您的成就
编辑图片
编辑位置
位置已更新!
@@ -827,13 +835,13 @@
文件保存成功
您想打开GPX文件吗?
您想打开KML文件吗?
- 保存KML文件失败。
- 保存GPX文件失败。
- 正在保存KML文件
- 正在保存GPX文件
+ 无法保存KML文件。
+ 无法保存GPX文件。
+ 保存为KML文件...
+ 保存为GPX文件...
- - 已选择%d个图像
- - 已选择%d个图像
+ - 已选择%1$d个图像
+ - 已选择%1$d个图像
请记住,多重上传中的所有图片都会标注相同的分类和描述。如果这些图片并不共享同样的描述和分类,请分别多次单独进行上传。
关于多图片上传的提醒
@@ -869,7 +877,6 @@
维基共享资源
其它wiki
文件用途
- 单一网页视图活动
账号
隐退账号
隐退账号警告
diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml
index cd51dde76..5a3634277 100644
--- a/app/src/main/res/values/dimens.xml
+++ b/app/src/main/res/values/dimens.xml
@@ -7,6 +7,9 @@
8dp
12dp
12dp
+ 8dp
+ 16dp
+ 24dp
30dp
diff --git a/app/src/main/res/values/ids.xml b/app/src/main/res/values/ids.xml
new file mode 100644
index 000000000..83eb08801
--- /dev/null
+++ b/app/src/main/res/values/ids.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ 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 f58a0fd3c..91db64089 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -2,7 +2,7 @@
Commons Facebook Page
- Commons Github Source Code
+ Commons GitHub Source Code
Commons Logo
Commons Website
Exit location picker
@@ -32,14 +32,14 @@
- (%1$d)
- (%1$d)
- Starting Uploads
+ Starting Uploads
- - Processing %d upload
- - Processing %d uploads
+ - Processing %1$d upload
+ - Processing %1$d uploads
- - %d upload
- - %d uploads
+ - %1$d upload
+ - %1$d uploads
- This image will be licensed under %1$s
@@ -83,7 +83,7 @@
Upload queued (limited connection mode enabled)
%1$s uploaded!
Tap to view your upload
- Uploading file: %s
+ Uploading file: %1$s
%1$s uploading
Finishing uploading %1$s
Failed to upload %1$s
@@ -133,6 +133,7 @@
Settings
Sign Up
Featured Images
+ Featured images are contributions by highly skilled photographers and illustrators that the Wikimedia Commons community has chosen as some of the highest quality on the site.
Custom Selector
Category
Peer Review
@@ -150,15 +151,18 @@
You have not yet uploaded any photos.
Retry
Cancel
+ Type Language Name
+ Recent Searches
+ All Languages
By submitting this picture, I declare that this is my own work, that it does not contain copyrighted material or selfies, and otherwise adheres to <a href=\"https://commons.wikimedia.org/wiki/Commons:Policies_and_guidelines\">Wikimedia Commons policies</a>.
Download
Default License
Use previous title and description
Theme
- Attribution-ShareAlike 4.0
- Attribution 4.0
- Attribution-ShareAlike 3.0
- Attribution 3.0
+ Attribution-ShareAlike 4.0
+ Attribution 4.0
+ Attribution-ShareAlike 3.0
+ Attribution 3.0
CC0
CC BY-SA 3.0
CC BY 3.0
@@ -222,15 +226,14 @@
2FA Code
Email verification code
Do you really want to logout?
- Media Image Failed
No subcategories found
No parent categories found
Mount Zao
Llamas
Rainbow Bridge
Tulip
- Welcome Wikipedia
- Welcome Copyright
+ A schematic image of a generic Wikipedia article.
+ A drawing of a stack of papers with the copyright symbol crossed out.
Sydney Opera House
Cancel
Open
@@ -266,6 +269,7 @@
Problems found in image
Please only upload pictures that you have taken by yourself. Don\'t upload pictures that you have downloaded from the Internet.
+ Uploads
Save In-app shots
Save pictures taken with the in-app camera to your device storage
Log in to your account
@@ -344,6 +348,7 @@
Quiz
Is this picture OK to upload?
Question
+ I am not sure
Result
If you carry on uploading images that require deletion, your account will likely be banned. Are you sure you want to end the quiz?
More than %1$s of the images you uploaded have been deleted. If you carry on uploading images that require deletion, your account will likely be banned.\n\nWould you like to view the tutorial again and then take a quiz to help you learn what type of images you should or shouldn\'t upload?
@@ -353,6 +358,7 @@
One of the goals of Commons is to gather quality images. Therefore, blurry images shouldn\'t be uploaded. Always try to take nice pictures with good lighting.
Pictures showing technology or culture are very welcome on Commons.
You got %1$s of the answers correct. Congratulations!
+ Continue
Select one of the two options to answer the question
Log-in expired. Please log in again.
Share your quiz with your friends!
@@ -378,13 +384,12 @@
Achievements
Profile
Badges
- Statistics
Thanks Received
Featured Images
Images via \"Nearby Places\"
- Level %d
- %s (Level %s)
- %s (%s)
+ Level %1$d
+ %1$s (Level %2$s)
+ %1$s (%2$s)
Images Uploaded
Images Not Reverted
Images Used
@@ -456,11 +461,13 @@ Upload your first media by tapping on the add button.
Never ask this again
Ask for location permission
Ask for location permission when needed for nearby notification card view feature.
- Something went wrong, We could not fetch achievements
+ Something went wrong, and we could not fetch achievements
You\'ve made so many contributions our achievements calculation system can\'t cope. This is the ultimate achievement.
Ends on:
Display campaigns
See the ongoing campaigns
+ Show deletion button
+ Enable the \"Delete Folder\" button in the custom picker
Allow the app to fetch location in case the camera does not record it. Some device cameras do not record location. In such cases, letting the app fetch and attach location to it makes your contribution more useful. You may change this any time from the Settings
Allow
Dismiss
@@ -485,12 +492,12 @@ Upload your first media by tapping on the add button.
Could not request category check for %1$s
Requesting category check for %1$s
Done
- Sending Thanks: Success
- Successfully sent thanks to %1$s
- Failed to send thanks %1$s
- Sending Thanks: Failure
+ Sending thanks: Success
+ Sent thanks to %1$s
+ Failed to send thanks to %1$s
+ Sending thanks: Failure
- Sending Thanks for %1$s
+ Sending thanks for %1$s
Does this follow the rules of copyright?
Is this correctly categorized?
Is this in-scope?
@@ -522,15 +529,14 @@ Upload your first media by tapping on the add button.
Error occurred while picking images
Please wait…
- Featured pictures are images from highly skilled photographers and illustrators that the Wikimedia Commons community has chosen as some of the highest quality on the site.
Images Uploaded via Nearby places are the images which are uploaded by discovering places on the map.
This feature allows editors to send a Thank you notification to users who make useful edits – by using a small thank link on the history page or diff page.
- Copy to subsequent media
+ Copy to the next items
Copied
Examples of good images to upload to Commons
Examples of images not to upload
Skip this image
- Download Failed!!. We cannot download the file without external storage permission.
+ Download failed. We cannot download the file without external storage permission.
Manage EXIF Tags
Select which EXIF tags to keep in uploads
@@ -543,12 +549,10 @@ Upload your first media by tapping on the add button.
Serial Numbers
Software
- Media location access denied
- We may not be able to automatically obtain location data from pictures you upload. Please add the appropriate location for each picture before submitting
-
Upload photos to Wikimedia Commons directly from your phone. Download the Commons App now: %1$s
Share app via...
Image Info
+ Don\'t show this message again
No Categories found
No Depictions found
Cancelled Upload
@@ -605,7 +609,7 @@ Upload your first media by tapping on the add button.
Share image via
You haven\'t made any contributions yet
- %s has not made any contributions yet
+ %1$s has not made any contributions yet
Account created!
Text copied to clipboard
Notification marked as read
@@ -614,7 +618,7 @@ Upload your first media by tapping on the add button.
Exists
Needs Photo
Place type:
- Bridge, museum, hotel etc.
+ Bridge, museum, hotel, etc.
Something went wrong with log-in. You must reset your password!
MEDIA
CHILD CLASSES
@@ -662,7 +666,7 @@ Upload your first media by tapping on the add button.
5. Paste the wikitext in the appropriate place.
6. Edit the wikitext for appropriate positioning, if necessary. For more information, see <a href="https://en.wikipedia.org/wiki/Wikipedia:Manual_of_Style/Images#How_to_place_an_image">here</a>.
7. Publish the article
- Copy wikicode to clipboard
+ Copy wikitext to clipboard
pause
resume
Paused
@@ -705,6 +709,8 @@ Upload your first media by tapping on the add button.
Please select the appropriate categories. Unlike depictions, categories are only in English.
Commons makes your pictures reusable and adapted by everyone. Do you want to waive all rights? Do you want to be attributed? Do you want adaptations to use the same license?
Depicts
+ Label
+ Description
Media License
Media Details
View category page
@@ -719,8 +725,7 @@ Upload your first media by tapping on the add button.
Show in map app
Edit location
The image view of the location picker
-
- The shadow of the image view of the location picker
+ The shadow of the image view of the location picker
Image Location
Check whether location is correct
Label
@@ -732,7 +737,7 @@ Upload your first media by tapping on the add button.
Back
Welcome to Custom Picture Selector
This picker shows you which pictures you have already uploaded to Commons.
- Unlike the picture on the left, the picture on the right has the Commons logo indicating it is already uploaded. \n Touch and hold for image preview.
+ Unlike the picture on the left, the picture on the right has the Commons logo indicating it is already uploaded.\n\nTouch and hold for image preview.
Awesome
This image has already been uploaded to Commons.
For technical reasons, the app can\'t reliably upload more than %1$d pictures at once. The upload limit of %1$d has been exceeded by %2$d.
@@ -748,9 +753,11 @@ Upload your first media by tapping on the add button.
Wiki Loves Monuments is an international photo contest for monuments organised by Wikimedia
Need Permission
Nearby maps need to read PHONE STATE to function properly
+ Please turn on location services to view nearby places.
+ Location access is needed to show nearby places on the map.
- Contributions of User: %s
- Achievements of User: %s
+ Contributions of User: %1$s
+ Achievements of User: %1$s
View user profile
Edit depictions
Edit categories
@@ -761,7 +768,7 @@ Upload your first media by tapping on the add button.
Location data helps Wiki editors find your picture, making it much more useful.\nYour recent uploads have no location.\nWe suggest you turn on location in your camera app\'s settings.\nThank you for uploading!
No location found
How about adding the place where this image was taken?\nLocation data helps Wiki editors find your picture, making it much more useful.\nThank you!
- Add location
+ Add Location
Please remove from this email any information that you are not comfortable sharing publicly. Also, please be aware that your email address with which you are posting, and the associated name and profile picture, will be visible publicly.
Details
Achievements are only available in the prod flavor. Please check the developer documentation.
@@ -782,8 +789,8 @@ Upload your first media by tapping on the add button.
Unmark as not for upload
Marking as not for upload
Unmarking as not for upload
- Show already actioned pictures
- Hiding already actioned pictures
+ Show already handled pictures
+ Hiding already handled pictures
No more images found
This image is already uploaded
Can not select this image for upload
@@ -819,15 +826,15 @@ Upload your first media by tapping on the add button.
Your log-in has expired. Please log in again.
No application available to open GPX files
File Saved Successfully
- Do you want to open GPX file?
- Do you want to open KML file?
- Failed to save KML file.
- Failed to save GPX file.
- Saving KML File
- Saving GPX File
+ Do you want to open the GPX file?
+ Do you want to open the KML file?
+ Failed to save the KML file.
+ Failed to save the GPX file.
+ Saving as a KML file...
+ Saving as a GPX file...
- - %d image selected
- - %d images selected
+ - %1$d image selected
+ - %1$d images selected
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
@@ -867,7 +874,6 @@ Upload your first media by tapping on the add button.
Other wikis
•
File usages
- SingleWebViewActivity
Account
Vanish Account
Vanish account warning
diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml
index 02c314a4a..cdc8ce387 100644
--- a/app/src/main/res/values/styles.xml
+++ b/app/src/main/res/values/styles.xml
@@ -123,6 +123,9 @@
- @drawable/ic_arrow_back_black
- false
- false
+
+ - @android:color/transparent
+ - @android:color/transparent