mirror of
https://github.com/commons-app/apps-android-commons.git
synced 2025-10-26 20:33:53 +01:00
Merge branch 'master' into 1130(j)
This commit is contained in:
commit
14686138df
64 changed files with 844 additions and 156 deletions
7
.gitignore
vendored
7
.gitignore
vendored
|
|
@ -27,3 +27,10 @@ app/gradle/wrapper/gradle-wrapper.jar
|
|||
app/gradlew
|
||||
app/gradlew.bat
|
||||
app/gradle/wrapper/gradle-wrapper.properties
|
||||
|
||||
#related to OpenCV
|
||||
/libraries/opencv/build
|
||||
app/src/main/jniLibs
|
||||
#Below removes all the HTML files related to OpenCV documentation. The documentation can be otherwise found at:
|
||||
#https://docs.opencv.org/3.3.0/
|
||||
/libraries/opencv/javadoc/
|
||||
|
|
|
|||
9
PULL_REQUEST_TEMPLATE.md
Normal file
9
PULL_REQUEST_TEMPLATE.md
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
## Description
|
||||
|
||||
Fixes #{GitHub issue number}
|
||||
|
||||
{Describe the changes made and why they were made.}
|
||||
|
||||
## Screenshots showing what changed
|
||||
|
||||
{Only for user interface changes, otherwise remove this section. See [how to take a screenshot](https://android.stackexchange.com/questions/1759/how-to-take-a-screenshot-with-an-android-device)}
|
||||
|
|
@ -18,7 +18,7 @@ dependencies {
|
|||
implementation 'com.google.code.gson:gson:2.8.1'
|
||||
implementation 'com.jakewharton.timber:timber:4.5.1'
|
||||
implementation 'info.debatty:java-string-similarity:0.24'
|
||||
implementation ('com.mapbox.mapboxsdk:mapbox-android-sdk:5.2.1@aar'){
|
||||
implementation ('com.mapbox.mapboxsdk:mapbox-android-sdk:5.4.1@aar'){
|
||||
transitive=true
|
||||
}
|
||||
|
||||
|
|
@ -26,6 +26,7 @@ dependencies {
|
|||
implementation "com.android.support:support-v4:$SUPPORT_LIB_VERSION"
|
||||
implementation "com.android.support:appcompat-v7:$SUPPORT_LIB_VERSION"
|
||||
implementation "com.android.support:design:$SUPPORT_LIB_VERSION"
|
||||
implementation "com.android.support:customtabs:$SUPPORT_LIB_VERSION"
|
||||
|
||||
implementation "com.android.support:cardview-v7:$SUPPORT_LIB_VERSION"
|
||||
|
||||
|
|
@ -38,6 +39,26 @@ dependencies {
|
|||
implementation 'io.reactivex.rxjava2:rxandroid:2.0.1'
|
||||
// Because RxAndroid releases are few and far between, it is recommended you also
|
||||
// explicitly depend on RxJava's latest version for bug fixes and new features.
|
||||
compile 'io.reactivex.rxjava2:rxjava:2.1.2'
|
||||
compile 'com.jakewharton.rxbinding2:rxbinding:2.0.0'
|
||||
compile 'com.jakewharton.rxbinding2:rxbinding-support-v4:2.0.0'
|
||||
compile 'com.jakewharton.rxbinding2:rxbinding-appcompat-v7:2.0.0'
|
||||
compile 'com.jakewharton.rxbinding2:rxbinding-design:2.0.0'
|
||||
|
||||
compile 'com.facebook.fresco:fresco:1.3.0'
|
||||
compile 'com.facebook.stetho:stetho:1.5.0'
|
||||
|
||||
testCompile 'junit:junit:4.12'
|
||||
testCompile 'org.robolectric:robolectric:3.4'
|
||||
|
||||
testCompile 'com.squareup.okhttp3:mockwebserver:3.8.1'
|
||||
androidTestCompile 'com.squareup.okhttp3:mockwebserver:3.8.1'
|
||||
androidTestCompile "com.android.support:support-annotations:${project.SUPPORT_LIB_VERSION}"
|
||||
androidTestCompile 'com.android.support.test.espresso:espresso-core:3.0.1'
|
||||
|
||||
debugCompile 'com.squareup.leakcanary:leakcanary-android:1.5.1'
|
||||
releaseCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.5.1'
|
||||
testCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.5.1'
|
||||
implementation 'io.reactivex.rxjava2:rxjava:2.1.2'
|
||||
implementation 'com.jakewharton.rxbinding2:rxbinding:2.0.0'
|
||||
implementation 'com.jakewharton.rxbinding2:rxbinding-support-v4:2.0.0'
|
||||
|
|
@ -91,6 +112,8 @@ android {
|
|||
targetSdkVersion project.targetSdkVersion
|
||||
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
|
||||
vectorDrawables.useSupportLibrary = true
|
||||
|
||||
multiDexEnabled true
|
||||
}
|
||||
|
||||
sourceSets {
|
||||
|
|
|
|||
|
|
@ -3,6 +3,8 @@ package fr.free.nrw.commons;
|
|||
import android.content.Intent;
|
||||
import android.net.Uri;
|
||||
import android.os.Bundle;
|
||||
import android.support.customtabs.CustomTabsIntent;
|
||||
import android.support.v4.content.ContextCompat;
|
||||
import android.view.View;
|
||||
import android.widget.TextView;
|
||||
|
||||
|
|
@ -47,22 +49,29 @@ public class AboutActivity extends NavigationBaseActivity {
|
|||
intent.setPackage("com.facebook.katana");
|
||||
startActivity(intent);
|
||||
} catch (Exception e) {
|
||||
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("https://www.facebook.com/" + "1921335171459985")));
|
||||
Utils.handleWebUrl(this,Uri.parse("https://www.facebook.com/" + "1921335171459985"));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@OnClick(R.id.github_launch_icon)
|
||||
public void launchGithub(View view) {
|
||||
|
||||
Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://github.com/commons-app/apps-android-commons\\"));
|
||||
startActivity(browserIntent);
|
||||
Utils.handleWebUrl(this,Uri.parse("https://commons-app.github.io/\\"));
|
||||
}
|
||||
|
||||
@OnClick(R.id.website_launch_icon)
|
||||
public void launchWebsite(View view) {
|
||||
|
||||
Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://commons-app.github.io/\\"));
|
||||
startActivity(browserIntent);
|
||||
Utils.handleWebUrl(this,Uri.parse("https://commons-app.github.io/\\"));
|
||||
}
|
||||
|
||||
@OnClick(R.id.about_credits)
|
||||
public void launchCredits(View view) {
|
||||
Utils.handleWebUrl(this,Uri.parse("https://github.com/commons-app/apps-android-commons/blob/master/CREDITS/\\"));
|
||||
}
|
||||
|
||||
@OnClick(R.id.about_privacy_policy)
|
||||
public void launchPrivacyPolicy(View view) {
|
||||
Utils.handleWebUrl(this,Uri.parse("https://github.com/commons-app/apps-android-commons/wiki/Privacy-policy\\"));
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
@ -1,8 +1,12 @@
|
|||
package fr.free.nrw.commons;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.net.Uri;
|
||||
import android.preference.PreferenceManager;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.customtabs.CustomTabsIntent;
|
||||
import android.support.v4.content.ContextCompat;
|
||||
|
||||
import org.apache.commons.codec.binary.Hex;
|
||||
import org.apache.commons.codec.digest.DigestUtils;
|
||||
|
|
@ -11,6 +15,7 @@ import java.io.BufferedReader;
|
|||
import java.io.IOException;
|
||||
import java.io.InputStreamReader;
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.net.URL;
|
||||
import java.net.URLEncoder;
|
||||
import java.util.Locale;
|
||||
import java.util.regex.Matcher;
|
||||
|
|
@ -159,4 +164,15 @@ public class Utils {
|
|||
|
||||
return stringBuilder.toString();
|
||||
}
|
||||
|
||||
public static void handleWebUrl(Context context,Uri url){
|
||||
CustomTabsIntent.Builder builder = new CustomTabsIntent.Builder();
|
||||
builder.setToolbarColor(ContextCompat.getColor(context, R.color.primaryColor));
|
||||
builder.setSecondaryToolbarColor(ContextCompat.getColor(context, R.color.primaryDarkColor));
|
||||
builder.setExitAnimations(context, android.R.anim.slide_in_left, android.R.anim.slide_out_right);
|
||||
CustomTabsIntent customTabsIntent = builder.build();
|
||||
customTabsIntent.intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
||||
customTabsIntent.launchUrl(context, url);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@ import android.accounts.Account;
|
|||
import android.accounts.AccountAuthenticatorActivity;
|
||||
import android.accounts.AccountAuthenticatorResponse;
|
||||
import android.accounts.AccountManager;
|
||||
import android.app.Activity;
|
||||
import android.app.ProgressDialog;
|
||||
import android.content.Intent;
|
||||
import android.content.SharedPreferences;
|
||||
|
|
@ -17,10 +18,12 @@ import android.support.v4.content.ContextCompat;
|
|||
import android.support.v7.app.AppCompatDelegate;
|
||||
import android.text.Editable;
|
||||
import android.text.TextWatcher;
|
||||
import android.util.Log;
|
||||
import android.view.MenuInflater;
|
||||
import android.view.MenuItem;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.view.inputmethod.InputMethodManager;
|
||||
import android.widget.Button;
|
||||
import android.widget.EditText;
|
||||
import android.widget.TextView;
|
||||
|
|
@ -69,6 +72,7 @@ public class LoginActivity extends AccountAuthenticatorActivity {
|
|||
@BindView(R.id.loginTwoFactor) EditText twoFactorEdit;
|
||||
@BindView(R.id.error_message_container) ViewGroup errorMessageContainer;
|
||||
@BindView(R.id.error_message) TextView errorMessage;
|
||||
@BindView(R.id.login_credentials) TextView loginCredentials;
|
||||
@BindView(R.id.two_factor_container)TextInputLayout twoFactorContainer;
|
||||
ProgressDialog progressDialog;
|
||||
private AppCompatDelegate delegate;
|
||||
|
|
@ -91,14 +95,39 @@ public class LoginActivity extends AccountAuthenticatorActivity {
|
|||
ButterKnife.bind(this);
|
||||
|
||||
usernameEdit.addTextChangedListener(textWatcher);
|
||||
usernameEdit.setOnFocusChangeListener((v, hasFocus) -> {
|
||||
if (!hasFocus) {
|
||||
hideKeyboard(v);
|
||||
}
|
||||
});
|
||||
|
||||
passwordEdit.addTextChangedListener(textWatcher);
|
||||
passwordEdit.setOnFocusChangeListener((v, hasFocus) -> {
|
||||
if (!hasFocus) {
|
||||
hideKeyboard(v);
|
||||
}
|
||||
});
|
||||
|
||||
twoFactorEdit.addTextChangedListener(textWatcher);
|
||||
passwordEdit.setOnEditorActionListener(newLoginInputActionListener());
|
||||
|
||||
loginButton.setOnClickListener(view -> performLogin());
|
||||
signupButton.setOnClickListener(view -> signUp());
|
||||
|
||||
if(BuildConfig.FLAVOR == "beta"){
|
||||
loginCredentials.setText(getString(R.string.login_credential));
|
||||
} else {
|
||||
loginCredentials.setVisibility(View.GONE);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public void hideKeyboard(View view) {
|
||||
InputMethodManager inputMethodManager =(InputMethodManager)this.getSystemService(Activity.INPUT_METHOD_SERVICE);
|
||||
inputMethodManager.hideSoftInputFromWindow(view.getWindowToken(), 0);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
protected void onPostCreate(Bundle savedInstanceState) {
|
||||
super.onPostCreate(savedInstanceState);
|
||||
|
|
|
|||
|
|
@ -1,17 +1,22 @@
|
|||
package fr.free.nrw.commons.category;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.content.SharedPreferences;
|
||||
import android.os.Bundle;
|
||||
import android.support.v7.app.AlertDialog;
|
||||
import android.support.v7.widget.LinearLayoutManager;
|
||||
import android.support.v7.widget.RecyclerView;
|
||||
import android.text.Editable;
|
||||
import android.text.TextUtils;
|
||||
import android.text.TextWatcher;
|
||||
import android.util.Log;
|
||||
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 android.view.inputmethod.InputMethodManager;
|
||||
import android.widget.EditText;
|
||||
import android.widget.ProgressBar;
|
||||
import android.widget.TextView;
|
||||
|
|
@ -37,6 +42,7 @@ import fr.free.nrw.commons.R;
|
|||
import fr.free.nrw.commons.di.CommonsDaggerSupportFragment;
|
||||
import fr.free.nrw.commons.mwapi.MediaWikiApi;
|
||||
import fr.free.nrw.commons.upload.MwVolleyApi;
|
||||
import fr.free.nrw.commons.upload.SingleUploadFragment;
|
||||
import fr.free.nrw.commons.utils.StringSortingUtils;
|
||||
import io.reactivex.Observable;
|
||||
import io.reactivex.android.schedulers.AndroidSchedulers;
|
||||
|
|
@ -72,6 +78,7 @@ public class CategorizationFragment extends CommonsDaggerSupportFragment {
|
|||
private OnCategoriesSaveHandler onCategoriesSaveHandler;
|
||||
private HashMap<String, ArrayList<String>> categoriesCache;
|
||||
private List<CategoryItem> selectedCategories = new ArrayList<>();
|
||||
private TitleTextWatcher textWatcher = new TitleTextWatcher();
|
||||
|
||||
private final CategoriesAdapterFactory adapterFactory = new CategoriesAdapterFactory(item -> {
|
||||
if (item.isSelected()) {
|
||||
|
|
@ -102,6 +109,15 @@ public class CategorizationFragment extends CommonsDaggerSupportFragment {
|
|||
categoriesAdapter = adapterFactory.create(items);
|
||||
categoriesList.setAdapter(categoriesAdapter);
|
||||
|
||||
|
||||
categoriesFilter.addTextChangedListener(textWatcher);
|
||||
|
||||
categoriesFilter.setOnFocusChangeListener((v, hasFocus) -> {
|
||||
if (!hasFocus) {
|
||||
hideKeyboard(v);
|
||||
}
|
||||
});
|
||||
|
||||
RxTextView.textChanges(categoriesFilter)
|
||||
.takeUntil(RxView.detaches(categoriesFilter))
|
||||
.debounce(500, TimeUnit.MILLISECONDS)
|
||||
|
|
@ -110,6 +126,18 @@ public class CategorizationFragment extends CommonsDaggerSupportFragment {
|
|||
return rootView;
|
||||
}
|
||||
|
||||
public void hideKeyboard(View view) {
|
||||
InputMethodManager inputMethodManager =(InputMethodManager)getActivity().getSystemService(Activity.INPUT_METHOD_SERVICE);
|
||||
inputMethodManager.hideSoftInputFromWindow(view.getWindowToken(), 0);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDestroyView() {
|
||||
categoriesFilter.removeTextChangedListener(textWatcher);
|
||||
super.onDestroyView();
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
|
||||
menu.clear();
|
||||
|
|
@ -351,4 +379,21 @@ public class CategorizationFragment extends CommonsDaggerSupportFragment {
|
|||
.create()
|
||||
.show();
|
||||
}
|
||||
|
||||
private class TitleTextWatcher implements TextWatcher {
|
||||
@Override
|
||||
public void beforeTextChanged(CharSequence charSequence, int i, int i2, int i3) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTextChanged(CharSequence charSequence, int i, int i2, int i3) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void afterTextChanged(Editable editable) {
|
||||
if (getActivity() != null) {
|
||||
getActivity().invalidateOptionsMenu();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -197,6 +197,10 @@ public class Contribution extends Media {
|
|||
this.localUri = localUri;
|
||||
}
|
||||
|
||||
public void setDecimalCoords(String decimalCoords) {
|
||||
this.decimalCoords = decimalCoords;
|
||||
}
|
||||
|
||||
@NonNull
|
||||
private String licenseTemplateFor(String license) {
|
||||
switch (license) {
|
||||
|
|
@ -215,6 +219,7 @@ public class Contribution extends Media {
|
|||
case Prefs.Licenses.CC_BY_SA:
|
||||
return "{{self|cc-by-sa-3.0}}";
|
||||
}
|
||||
|
||||
throw new RuntimeException("Unrecognized license value: " + license);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -10,6 +10,7 @@ import android.preference.PreferenceManager;
|
|||
import android.support.annotation.NonNull;
|
||||
import android.support.v4.app.Fragment;
|
||||
import android.support.v4.app.FragmentTransaction;
|
||||
import android.support.v4.widget.SwipeRefreshLayout;
|
||||
import android.support.v7.app.AlertDialog;
|
||||
import android.view.Menu;
|
||||
import android.view.MenuInflater;
|
||||
|
|
@ -60,7 +61,7 @@ public class NearbyActivity extends NavigationBaseActivity implements LocationUp
|
|||
private NearbyActivityMode viewMode;
|
||||
private Disposable placesDisposable;
|
||||
private boolean lockNearbyView; //Determines if the nearby places needs to be refreshed
|
||||
|
||||
@BindView(R.id.swipe_container) SwipeRefreshLayout swipeLayout;
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
|
|
@ -70,6 +71,13 @@ public class NearbyActivity extends NavigationBaseActivity implements LocationUp
|
|||
bundle = new Bundle();
|
||||
initDrawer();
|
||||
initViewState();
|
||||
swipeLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
|
||||
@Override
|
||||
public void onRefresh() {
|
||||
lockNearbyView(false);
|
||||
refreshView(true);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void initViewState() {
|
||||
|
|
@ -309,7 +317,7 @@ public class NearbyActivity extends NavigationBaseActivity implements LocationUp
|
|||
} else {
|
||||
setListFragment();
|
||||
}
|
||||
|
||||
swipeLayout.setRefreshing(false);
|
||||
hideProgressBar();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -3,7 +3,9 @@ package fr.free.nrw.commons.nearby;
|
|||
import android.content.Intent;
|
||||
import android.net.Uri;
|
||||
import android.os.Bundle;
|
||||
import android.support.customtabs.CustomTabsIntent;
|
||||
import android.support.v4.app.FragmentActivity;
|
||||
import android.support.v4.content.ContextCompat;
|
||||
import android.support.v7.widget.PopupMenu;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.MenuItem;
|
||||
|
|
@ -17,6 +19,7 @@ import butterknife.ButterKnife;
|
|||
import butterknife.OnClick;
|
||||
import butterknife.Unbinder;
|
||||
import fr.free.nrw.commons.R;
|
||||
import fr.free.nrw.commons.Utils;
|
||||
import fr.free.nrw.commons.location.LatLng;
|
||||
import fr.free.nrw.commons.ui.widget.OverlayDialog;
|
||||
import fr.free.nrw.commons.utils.DialogUtil;
|
||||
|
|
@ -141,8 +144,7 @@ public class NearbyInfoDialog extends OverlayDialog {
|
|||
}
|
||||
|
||||
private void openWebView(Uri link) {
|
||||
Intent browserIntent = new Intent(Intent.ACTION_VIEW, link);
|
||||
startActivity(browserIntent);
|
||||
Utils.handleWebUrl(getContext(),link);
|
||||
}
|
||||
|
||||
@OnClick(R.id.emptyLayout)
|
||||
|
|
|
|||
|
|
@ -10,6 +10,7 @@ import android.support.v7.widget.RecyclerView;
|
|||
|
||||
import com.pedrogomez.renderers.RVRendererAdapter;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
import javax.inject.Inject;
|
||||
|
|
@ -58,6 +59,7 @@ public class NotificationActivity extends NavigationBaseActivity {
|
|||
.subscribeOn(Schedulers.io())
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.subscribe(notificationList -> {
|
||||
Collections.reverse(notificationList);
|
||||
Timber.d("Number of notifications is %d", notificationList.size());
|
||||
setAdapter(notificationList);
|
||||
}, throwable -> Timber.e(throwable, "Error occurred while loading notifications"));
|
||||
|
|
|
|||
|
|
@ -0,0 +1,59 @@
|
|||
package fr.free.nrw.commons.upload;
|
||||
|
||||
import android.content.Context;
|
||||
import android.graphics.BitmapRegionDecoder;
|
||||
import android.net.Uri;
|
||||
import android.os.AsyncTask;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
import fr.free.nrw.commons.utils.ImageUtils;
|
||||
import timber.log.Timber;
|
||||
|
||||
/**
|
||||
* Created by bluesir9 on 16/9/17.
|
||||
*
|
||||
* <p>Responsible for checking if the picture that the user is trying to upload is useful or not. Will attempt to filter
|
||||
* away completely black,fuzzy/blurry pictures(for now).
|
||||
*
|
||||
* <p>todo: Detect selfies?
|
||||
*/
|
||||
|
||||
public class DetectUnwantedPicturesAsync extends AsyncTask<Void, Void, ImageUtils.Result> {
|
||||
|
||||
interface Callback {
|
||||
void onResult(ImageUtils.Result result);
|
||||
}
|
||||
|
||||
private final Callback callback;
|
||||
private final String imageMediaFilePath;
|
||||
|
||||
DetectUnwantedPicturesAsync(String imageMediaFilePath, Callback callback) {
|
||||
this.callback = callback;
|
||||
this.imageMediaFilePath = imageMediaFilePath;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected ImageUtils.Result doInBackground(Void... voids) {
|
||||
try {
|
||||
Timber.d("FilePath: " + imageMediaFilePath);
|
||||
if (imageMediaFilePath == null) {
|
||||
return ImageUtils.Result.IMAGE_OK;
|
||||
}
|
||||
|
||||
BitmapRegionDecoder decoder = BitmapRegionDecoder.newInstance(imageMediaFilePath,false);
|
||||
|
||||
return ImageUtils.checkIfImageIsTooDark(decoder);
|
||||
} catch (IOException ioe) {
|
||||
Timber.e(ioe, "IO Exception");
|
||||
return ImageUtils.Result.IMAGE_OK;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onPostExecute(ImageUtils.Result result) {
|
||||
super.onPostExecute(result);
|
||||
//callback to UI so that it can take necessary decision based on the result obtained
|
||||
callback.onResult(result);
|
||||
}
|
||||
}
|
||||
|
|
@ -3,20 +3,25 @@ package fr.free.nrw.commons.upload;
|
|||
import android.annotation.SuppressLint;
|
||||
import android.content.ContentUris;
|
||||
import android.content.Context;
|
||||
import android.content.SharedPreferences;
|
||||
import android.database.Cursor;
|
||||
import android.net.Uri;
|
||||
import android.os.Build;
|
||||
import android.os.Environment;
|
||||
import android.os.ParcelFileDescriptor;
|
||||
import android.preference.PreferenceManager;
|
||||
import android.provider.DocumentsContract;
|
||||
import android.provider.MediaStore;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.annotation.Nullable;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileDescriptor;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.nio.channels.FileChannel;
|
||||
import java.util.Date;
|
||||
|
||||
import timber.log.Timber;
|
||||
|
||||
|
|
@ -36,6 +41,7 @@ public class FileUtils {
|
|||
@Nullable
|
||||
public static String getPath(Context context, Uri uri) {
|
||||
|
||||
String returnPath = null;
|
||||
final boolean isKitKat = Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT;
|
||||
|
||||
// DocumentProvider
|
||||
|
|
@ -47,7 +53,7 @@ public class FileUtils {
|
|||
final String type = split[0];
|
||||
|
||||
if ("primary".equalsIgnoreCase(type)) {
|
||||
return Environment.getExternalStorageDirectory() + "/" + split[1];
|
||||
returnPath = Environment.getExternalStorageDirectory() + "/" + split[1];
|
||||
}
|
||||
} else if (isDownloadsDocument(uri)) { // DownloadsProvider
|
||||
|
||||
|
|
@ -55,8 +61,9 @@ public class FileUtils {
|
|||
final Uri contentUri = ContentUris.withAppendedId(
|
||||
Uri.parse("content://downloads/public_downloads"), Long.valueOf(id));
|
||||
|
||||
return getDataColumn(context, contentUri, null, null);
|
||||
returnPath = getDataColumn(context, contentUri, null, null);
|
||||
} else if (isMediaDocument(uri)) { // MediaProvider
|
||||
|
||||
final String docId = DocumentsContract.getDocumentId(uri);
|
||||
final String[] split = docId.split(":");
|
||||
final String type = split[0];
|
||||
|
|
@ -81,16 +88,55 @@ public class FileUtils {
|
|||
split[1]
|
||||
};
|
||||
|
||||
return getDataColumn(context, contentUri, selection, selectionArgs);
|
||||
returnPath = getDataColumn(context, contentUri, selection, selectionArgs);
|
||||
}
|
||||
}
|
||||
// MediaStore (and general)
|
||||
else if ("content".equalsIgnoreCase(uri.getScheme())) {
|
||||
return getDataColumn(context, uri, null, null);
|
||||
returnPath = getDataColumn(context, uri, null, null);
|
||||
}
|
||||
// File
|
||||
else if ("file".equalsIgnoreCase(uri.getScheme())) {
|
||||
return uri.getPath();
|
||||
returnPath = uri.getPath();
|
||||
}
|
||||
|
||||
if(returnPath == null) {
|
||||
//fetching path may fail depending on the source URI and all hope is lost
|
||||
//so we will create and use a copy of the file, which seems to work
|
||||
String copyPath = null;
|
||||
try {
|
||||
ParcelFileDescriptor descriptor
|
||||
= context.getContentResolver().openFileDescriptor(uri, "r");
|
||||
if (descriptor != null) {
|
||||
|
||||
SharedPreferences sharedPref = PreferenceManager
|
||||
.getDefaultSharedPreferences(context);
|
||||
boolean useExtStorage = sharedPref.getBoolean("useExternalStorage", true);
|
||||
if (useExtStorage) {
|
||||
copyPath = Environment.getExternalStorageDirectory().toString()
|
||||
+ "/CommonsApp/" + new Date().getTime() + ".jpg";
|
||||
File newFile = new File(Environment.getExternalStorageDirectory().toString() + "/CommonsApp");
|
||||
newFile.mkdir();
|
||||
FileUtils.copy(
|
||||
descriptor.getFileDescriptor(),
|
||||
copyPath);
|
||||
Timber.d("Filepath (copied): %s", copyPath);
|
||||
return copyPath;
|
||||
}
|
||||
copyPath = context.getCacheDir().getAbsolutePath()
|
||||
+ "/" + new Date().getTime() + ".jpg";
|
||||
FileUtils.copy(
|
||||
descriptor.getFileDescriptor(),
|
||||
copyPath);
|
||||
Timber.d("Filepath (copied): %s", copyPath);
|
||||
return copyPath;
|
||||
}
|
||||
} catch (IOException e) {
|
||||
Timber.w(e, "Error in file " + copyPath);
|
||||
return null;
|
||||
}
|
||||
} else {
|
||||
return returnPath;
|
||||
}
|
||||
|
||||
return null;
|
||||
|
|
@ -111,7 +157,7 @@ public class FileUtils {
|
|||
String[] selectionArgs) {
|
||||
|
||||
Cursor cursor = null;
|
||||
final String column = "_data";
|
||||
final String column = MediaStore.Images.ImageColumns.DATA;
|
||||
final String[] projection = {
|
||||
column
|
||||
};
|
||||
|
|
|
|||
|
|
@ -11,7 +11,9 @@ import android.database.DataSetObserver;
|
|||
import android.net.Uri;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.os.ParcelFileDescriptor;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.support.v4.app.ActivityCompat;
|
||||
import android.support.v4.app.FragmentManager;
|
||||
import android.support.v4.content.ContextCompat;
|
||||
|
|
@ -21,6 +23,7 @@ import android.view.inputmethod.InputMethodManager;
|
|||
import android.widget.AdapterView;
|
||||
import android.widget.Toast;
|
||||
|
||||
import java.io.FileNotFoundException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
|
|
@ -69,6 +72,8 @@ public class MultipleShareActivity extends AuthenticatedActivity
|
|||
private MediaDetailPagerFragment mediaDetails;
|
||||
private CategorizationFragment categorizationFragment;
|
||||
|
||||
private boolean locationPermitted = false;
|
||||
|
||||
@Override
|
||||
public Media getMediaAtPosition(int i) {
|
||||
return photosList.get(i);
|
||||
|
|
@ -213,6 +218,14 @@ public class MultipleShareActivity extends AuthenticatedActivity
|
|||
|
||||
getSupportFragmentManager().addOnBackStackChangedListener(this);
|
||||
requestAuthToken();
|
||||
|
||||
//TODO: 15/10/17 should location permission be explicitly requested if not provided?
|
||||
//check if location permission is enabled
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
|
||||
if (ContextCompat.checkSelfPermission(this,Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
|
||||
locationPermitted = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -258,6 +271,11 @@ public class MultipleShareActivity extends AuthenticatedActivity
|
|||
up.setTag("sequence", i);
|
||||
up.setSource(Contribution.SOURCE_EXTERNAL);
|
||||
up.setMultiple(true);
|
||||
String imageGpsCoordinates = extractImageGpsData(uri);
|
||||
if (imageGpsCoordinates != null) {
|
||||
Timber.d("GPS data for image found!");
|
||||
up.setDecimalCoords(imageGpsCoordinates);
|
||||
}
|
||||
photosList.add(up);
|
||||
}
|
||||
}
|
||||
|
|
@ -287,4 +305,46 @@ public class MultipleShareActivity extends AuthenticatedActivity
|
|||
getSupportActionBar().setDisplayHomeAsUpEnabled(mediaDetails != null && mediaDetails.isVisible());
|
||||
}
|
||||
|
||||
/**
|
||||
* Will attempt to extract the gps coordinates using exif data or by using the current
|
||||
* location if available for the image who's imageUri has been provided.
|
||||
* @param imageUri The uri of the image who's GPS coordinates data we wish to extract
|
||||
* @return GPS coordinates as a String as is returned by {@link GPSExtractor}
|
||||
*/
|
||||
@Nullable
|
||||
private String extractImageGpsData(Uri imageUri) {
|
||||
Timber.d("Entering extractImagesGpsData");
|
||||
|
||||
if (imageUri == null) {
|
||||
//now why would you do that???
|
||||
return null;
|
||||
}
|
||||
|
||||
GPSExtractor gpsExtractor = null;
|
||||
|
||||
try {
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
|
||||
ParcelFileDescriptor fd = getContentResolver().openFileDescriptor(imageUri,"r");
|
||||
if (fd != null) {
|
||||
gpsExtractor = new GPSExtractor(fd.getFileDescriptor(),this,prefs);
|
||||
}
|
||||
} else {
|
||||
String filePath = FileUtils.getPath(this,imageUri);
|
||||
if (filePath != null) {
|
||||
gpsExtractor = new GPSExtractor(filePath,this,prefs);
|
||||
}
|
||||
}
|
||||
|
||||
if (gpsExtractor != null) {
|
||||
//get image coordinates from exif data or user location
|
||||
return gpsExtractor.getCoords(locationPermitted);
|
||||
}
|
||||
|
||||
} catch (FileNotFoundException fnfe) {
|
||||
Timber.w(fnfe);
|
||||
return null;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
|
@ -1,5 +1,6 @@
|
|||
package fr.free.nrw.commons.upload;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.content.Context;
|
||||
import android.graphics.Point;
|
||||
import android.net.Uri;
|
||||
|
|
@ -10,6 +11,7 @@ import android.text.Editable;
|
|||
import android.text.TextUtils;
|
||||
import android.text.TextWatcher;
|
||||
import android.util.DisplayMetrics;
|
||||
import android.util.Log;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.Menu;
|
||||
import android.view.MenuInflater;
|
||||
|
|
@ -177,9 +179,21 @@ public class MultipleUploadListFragment extends Fragment {
|
|||
photosGrid.setColumnWidth(photoSize.x);
|
||||
|
||||
baseTitle.addTextChangedListener(textWatcher);
|
||||
|
||||
baseTitle.setOnFocusChangeListener((v, hasFocus) -> {
|
||||
if (!hasFocus) {
|
||||
hideKeyboard(v);
|
||||
}
|
||||
});
|
||||
|
||||
return view;
|
||||
}
|
||||
|
||||
public void hideKeyboard(View view) {
|
||||
InputMethodManager inputMethodManager =(InputMethodManager)getActivity().getSystemService(Activity.INPUT_METHOD_SERVICE);
|
||||
inputMethodManager.hideSoftInputFromWindow(view.getWindowToken(), 0);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDestroyView() {
|
||||
baseTitle.removeTextChangedListener(textWatcher);
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@ import android.Manifest;
|
|||
import android.app.Activity;
|
||||
import android.content.ContentResolver;
|
||||
import android.content.Context;
|
||||
import android.content.DialogInterface;
|
||||
import android.content.Intent;
|
||||
import android.content.SharedPreferences;
|
||||
import android.content.pm.PackageManager;
|
||||
|
|
@ -20,6 +21,7 @@ import android.support.graphics.drawable.VectorDrawableCompat;
|
|||
import android.support.v4.app.ActivityCompat;
|
||||
import android.support.v4.app.FragmentManager;
|
||||
import android.support.v4.content.ContextCompat;
|
||||
import android.support.v7.app.AlertDialog;
|
||||
import android.view.MenuItem;
|
||||
import android.view.View;
|
||||
import android.widget.TextView;
|
||||
|
|
@ -50,11 +52,14 @@ import fr.free.nrw.commons.caching.CacheController;
|
|||
import fr.free.nrw.commons.category.CategorizationFragment;
|
||||
import fr.free.nrw.commons.category.OnCategoriesSaveHandler;
|
||||
import fr.free.nrw.commons.contributions.Contribution;
|
||||
import fr.free.nrw.commons.contributions.ContributionsActivity;
|
||||
import fr.free.nrw.commons.modifications.CategoryModifier;
|
||||
import fr.free.nrw.commons.modifications.ModificationsContentProvider;
|
||||
import fr.free.nrw.commons.modifications.ModifierSequence;
|
||||
import fr.free.nrw.commons.modifications.ModifierSequenceDao;
|
||||
import fr.free.nrw.commons.modifications.TemplateRemoveModifier;
|
||||
import fr.free.nrw.commons.mwapi.EventLog;
|
||||
import fr.free.nrw.commons.utils.ImageUtils;
|
||||
import fr.free.nrw.commons.mwapi.MediaWikiApi;
|
||||
import timber.log.Timber;
|
||||
|
||||
|
|
@ -290,7 +295,7 @@ public class ShareActivity
|
|||
REQUEST_PERM_ON_CREATE_LOCATION);
|
||||
}
|
||||
}
|
||||
performPreuploadProcessingOfFile();
|
||||
performPreUploadProcessingOfFile();
|
||||
|
||||
|
||||
SingleUploadFragment shareView = (SingleUploadFragment) getSupportFragmentManager().findFragmentByTag("shareView");
|
||||
|
|
@ -314,7 +319,7 @@ public class ShareActivity
|
|||
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
|
||||
backgroundImageView.setImageURI(mediaUri);
|
||||
storagePermitted = true;
|
||||
performPreuploadProcessingOfFile();
|
||||
performPreUploadProcessingOfFile();
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
|
@ -322,7 +327,7 @@ public class ShareActivity
|
|||
if (grantResults.length >= 1
|
||||
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
|
||||
locationPermitted = true;
|
||||
performPreuploadProcessingOfFile();
|
||||
performPreUploadProcessingOfFile();
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
|
@ -331,12 +336,12 @@ public class ShareActivity
|
|||
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
|
||||
backgroundImageView.setImageURI(mediaUri);
|
||||
storagePermitted = true;
|
||||
performPreuploadProcessingOfFile();
|
||||
performPreUploadProcessingOfFile();
|
||||
}
|
||||
if (grantResults.length >= 2
|
||||
&& grantResults[1] == PackageManager.PERMISSION_GRANTED) {
|
||||
locationPermitted = true;
|
||||
performPreuploadProcessingOfFile();
|
||||
performPreUploadProcessingOfFile();
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
|
@ -347,7 +352,7 @@ public class ShareActivity
|
|||
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
|
||||
//It is OK to call this at both (1) and (4) because if perm had been granted at
|
||||
//snackbar, user should not be prompted at submit button
|
||||
performPreuploadProcessingOfFile();
|
||||
performPreUploadProcessingOfFile();
|
||||
|
||||
//Uploading only begins if storage permission granted from arrow icon
|
||||
uploadBegins();
|
||||
|
|
@ -358,7 +363,7 @@ public class ShareActivity
|
|||
}
|
||||
}
|
||||
|
||||
private void performPreuploadProcessingOfFile() {
|
||||
private void performPreUploadProcessingOfFile() {
|
||||
if (!useNewPermissions || storagePermitted) {
|
||||
if (!duplicateCheckPassed) {
|
||||
//Test SHA1 of image to see if it matches SHA1 of a file on Commons
|
||||
|
|
@ -373,7 +378,17 @@ public class ShareActivity
|
|||
Timber.d("%s duplicate check: %s", mediaUri.toString(), result);
|
||||
duplicateCheckPassed = (result == DUPLICATE_PROCEED
|
||||
|| result == NO_DUPLICATE);
|
||||
}, mwApi);
|
||||
/*
|
||||
TODO: 16/9/17 should we run DetectUnwantedPicturesAsync if DUPLICATE_PROCEED is returned? Since that means
|
||||
we are processing images that are already on server???...
|
||||
*/
|
||||
|
||||
if (duplicateCheckPassed) {
|
||||
//image can be uploaded, so now check if its a useless picture or not
|
||||
performUnwantedPictureDetectionProcess();
|
||||
}
|
||||
|
||||
},mwApi);
|
||||
fileAsyncTask.execute();
|
||||
} catch (IOException e) {
|
||||
Timber.d(e, "IO Exception: ");
|
||||
|
|
@ -387,6 +402,37 @@ public class ShareActivity
|
|||
}
|
||||
}
|
||||
|
||||
private void performUnwantedPictureDetectionProcess() {
|
||||
String imageMediaFilePath = FileUtils.getPath(this,mediaUri);
|
||||
DetectUnwantedPicturesAsync detectUnwantedPicturesAsync = new DetectUnwantedPicturesAsync(imageMediaFilePath, result -> {
|
||||
|
||||
if (result != ImageUtils.Result.IMAGE_OK) {
|
||||
//show appropriate error message
|
||||
String errorMessage = result == ImageUtils.Result.IMAGE_DARK ? getString(R.string.upload_image_too_dark) : getString(R.string.upload_image_blurry);
|
||||
AlertDialog.Builder errorDialogBuilder = new AlertDialog.Builder(this);
|
||||
errorDialogBuilder.setMessage(errorMessage);
|
||||
errorDialogBuilder.setTitle(getString(R.string.warning));
|
||||
errorDialogBuilder.setPositiveButton(getString(R.string.no), (dialogInterface, i) -> {
|
||||
//user does not wish to upload the picture, take them back to ContributionsActivity
|
||||
Intent intent = new Intent(ShareActivity.this, ContributionsActivity.class);
|
||||
dialogInterface.dismiss();
|
||||
startActivity(intent);
|
||||
});
|
||||
errorDialogBuilder.setNegativeButton(getString(R.string.yes), (dialogInterface, i) -> {
|
||||
//user wishes to go ahead with the upload of this picture, just dismiss this dialog
|
||||
dialogInterface.dismiss();
|
||||
});
|
||||
|
||||
AlertDialog errorDialog = errorDialogBuilder.create();
|
||||
if (!isFinishing()) {
|
||||
errorDialog.show();
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
detectUnwantedPicturesAsync.execute();
|
||||
}
|
||||
|
||||
private Snackbar requestPermissionUsingSnackBar(String rationale,
|
||||
final String[] perms,
|
||||
final int code) {
|
||||
|
|
|
|||
135
app/src/main/java/fr/free/nrw/commons/utils/ImageUtils.java
Normal file
135
app/src/main/java/fr/free/nrw/commons/utils/ImageUtils.java
Normal file
|
|
@ -0,0 +1,135 @@
|
|||
package fr.free.nrw.commons.utils;
|
||||
|
||||
import android.graphics.Bitmap;
|
||||
import android.graphics.BitmapRegionDecoder;
|
||||
import android.graphics.Color;
|
||||
import android.graphics.Rect;
|
||||
|
||||
import timber.log.Timber;
|
||||
|
||||
/**
|
||||
* Created by bluesir9 on 3/10/17.
|
||||
*/
|
||||
|
||||
public class ImageUtils {
|
||||
//atleast 50% of the image in question should be considered dark for the entire image to be dark
|
||||
private static final double MINIMUM_DARKNESS_FACTOR = 0.50;
|
||||
//atleast 50% of the image in question should be considered blurry for the entire image to be blurry
|
||||
private static final double MINIMUM_BLURRYNESS_FACTOR = 0.50;
|
||||
private static final int LAPLACIAN_VARIANCE_THRESHOLD = 70;
|
||||
|
||||
public enum Result {
|
||||
IMAGE_DARK,
|
||||
IMAGE_OK
|
||||
}
|
||||
|
||||
/**
|
||||
* BitmapRegionDecoder allows us to process a large bitmap by breaking it down into smaller rectangles. The rectangles
|
||||
* are obtained by setting an initial width, height and start position of the rectangle as a factor of the width and
|
||||
* height of the original bitmap and then manipulating the width, height and position to loop over the entire original
|
||||
* bitmap. Each individual rectangle is independently processed to check if its too dark. Based on
|
||||
* the factor of "bright enough" individual rectangles amongst the total rectangles into which the image
|
||||
* was divided, we will declare the image as wanted/unwanted
|
||||
*
|
||||
* @param bitmapRegionDecoder BitmapRegionDecoder for the image we wish to process
|
||||
* @return Result.IMAGE_OK if image is neither dark nor blurry or if the input bitmapRegionDecoder provided is null
|
||||
* Result.IMAGE_DARK if image is too dark
|
||||
*/
|
||||
public static Result checkIfImageIsTooDark(BitmapRegionDecoder bitmapRegionDecoder) {
|
||||
if (bitmapRegionDecoder == null) {
|
||||
Timber.e("Expected bitmapRegionDecoder was null");
|
||||
return Result.IMAGE_OK;
|
||||
}
|
||||
|
||||
int loadImageHeight = bitmapRegionDecoder.getHeight();
|
||||
int loadImageWidth = bitmapRegionDecoder.getWidth();
|
||||
|
||||
int checkImageTopPosition = 0;
|
||||
int checkImageBottomPosition = loadImageHeight / 10;
|
||||
int checkImageLeftPosition = 0;
|
||||
int checkImageRightPosition = loadImageWidth / 10;
|
||||
|
||||
int totalDividedRectangles = 0;
|
||||
int numberOfDarkRectangles = 0;
|
||||
|
||||
while ((checkImageRightPosition <= loadImageWidth) && (checkImageLeftPosition < checkImageRightPosition)) {
|
||||
while ((checkImageBottomPosition <= loadImageHeight) && (checkImageTopPosition < checkImageBottomPosition)) {
|
||||
Timber.d("left: " + checkImageLeftPosition + " right: " + checkImageRightPosition + " top: " + checkImageTopPosition + " bottom: " + checkImageBottomPosition);
|
||||
|
||||
Rect rect = new Rect(checkImageLeftPosition,checkImageTopPosition,checkImageRightPosition,checkImageBottomPosition);
|
||||
totalDividedRectangles++;
|
||||
|
||||
Bitmap processBitmap = bitmapRegionDecoder.decodeRegion(rect,null);
|
||||
|
||||
if (checkIfImageIsDark(processBitmap)) {
|
||||
numberOfDarkRectangles++;
|
||||
}
|
||||
|
||||
checkImageTopPosition = checkImageBottomPosition;
|
||||
checkImageBottomPosition += (checkImageBottomPosition < (loadImageHeight - checkImageBottomPosition)) ? checkImageBottomPosition : (loadImageHeight - checkImageBottomPosition);
|
||||
}
|
||||
|
||||
checkImageTopPosition = 0; //reset to start
|
||||
checkImageBottomPosition = loadImageHeight / 10; //reset to start
|
||||
checkImageLeftPosition = checkImageRightPosition;
|
||||
checkImageRightPosition += (checkImageRightPosition < (loadImageWidth - checkImageRightPosition)) ? checkImageRightPosition : (loadImageWidth - checkImageRightPosition);
|
||||
}
|
||||
|
||||
Timber.d("dark rectangles count = " + numberOfDarkRectangles + ", total rectangles count = " + totalDividedRectangles);
|
||||
|
||||
if (numberOfDarkRectangles > totalDividedRectangles * MINIMUM_DARKNESS_FACTOR) {
|
||||
return Result.IMAGE_DARK;
|
||||
}
|
||||
|
||||
return Result.IMAGE_OK;
|
||||
}
|
||||
|
||||
/**
|
||||
* Pulls the pixels into an array and then runs through it while checking the brightness of each pixel.
|
||||
* The calculation of brightness of each pixel is done by extracting the RGB constituents of the pixel
|
||||
* and then applying the formula to calculate its "Luminance". If this brightness value is less than
|
||||
* 50 then the pixel is considered to be dark. Based on the MINIMUM_DARKNESS_FACTOR if enough pixels
|
||||
* are dark then the entire bitmap is considered to be dark.
|
||||
*
|
||||
* <p>For more information on this brightness/darkness calculation technique refer the accepted answer
|
||||
* on this -> https://stackoverflow.com/questions/35914461/how-to-detect-dark-photos-in-android/35914745
|
||||
* SO question and follow the trail.
|
||||
*
|
||||
* @param bitmap The bitmap that needs to be checked.
|
||||
* @return true if bitmap is dark or null, false if bitmap is bright
|
||||
*/
|
||||
private static boolean checkIfImageIsDark(Bitmap bitmap) {
|
||||
if (bitmap == null) {
|
||||
Timber.e("Expected bitmap was null");
|
||||
return true;
|
||||
}
|
||||
|
||||
int bitmapWidth = bitmap.getWidth();
|
||||
int bitmapHeight = bitmap.getHeight();
|
||||
|
||||
int allPixelsCount = bitmapWidth * bitmapHeight;
|
||||
int[] bitmapPixels = new int[allPixelsCount];
|
||||
|
||||
bitmap.getPixels(bitmapPixels,0,bitmapWidth,0,0,bitmapWidth,bitmapHeight);
|
||||
boolean isImageDark = false;
|
||||
int darkPixelsCount = 0;
|
||||
|
||||
for (int pixel : bitmapPixels) {
|
||||
int r = Color.red(pixel);
|
||||
int g = Color.green(pixel);
|
||||
int b = Color.blue(pixel);
|
||||
|
||||
int brightness = (int) (0.2126 * r + 0.7152 * g + 0.0722 * b);
|
||||
if (brightness < 50) {
|
||||
//pixel is dark
|
||||
darkPixelsCount++;
|
||||
if (darkPixelsCount > allPixelsCount * MINIMUM_DARKNESS_FACTOR) {
|
||||
isImageDark = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return isImageDark;
|
||||
}
|
||||
}
|
||||
|
|
@ -104,23 +104,26 @@
|
|||
|
||||
</LinearLayout>
|
||||
|
||||
<fr.free.nrw.commons.ui.widget.HtmlTextView
|
||||
<TextView
|
||||
android:id="@+id/about_privacy_policy"
|
||||
style="?android:textAppearanceSmall"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="@dimen/standard_gap"
|
||||
android:gravity="center"
|
||||
android:textColor="@color/primaryColor"
|
||||
android:text="@string/about_privacy_policy" />
|
||||
|
||||
<fr.free.nrw.commons.ui.widget.HtmlTextView
|
||||
<TextView
|
||||
android:id="@+id/about_credits"
|
||||
style="?android:textAppearanceSmall"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="@dimen/standard_gap"
|
||||
android:gravity="center"
|
||||
android:text="@string/about_credits" />
|
||||
android:textColor="@color/primaryColor"
|
||||
android:text="@string/about_credits"
|
||||
/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/about_uploads_to"
|
||||
|
|
|
|||
|
|
@ -19,12 +19,16 @@
|
|||
android:layout_marginRight="@dimen/standard_gap"
|
||||
android:layout_marginStart="@dimen/standard_gap"
|
||||
android:layout_marginTop="@dimen/large_gap"
|
||||
android:clickable="true"
|
||||
android:focusableInTouchMode="true"
|
||||
app:cardCornerRadius="4dp"
|
||||
app:cardElevation="4dp">
|
||||
|
||||
<RelativeLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:clickable="true"
|
||||
android:focusableInTouchMode="true"
|
||||
android:gravity="center"
|
||||
android:orientation="vertical">
|
||||
|
||||
|
|
@ -40,14 +44,29 @@
|
|||
android:textColor="@android:color/white"
|
||||
android:textSize="@dimen/heading_text_size" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/login_credentials"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_below="@id/title"
|
||||
android:layout_marginEnd="@dimen/standard_gap"
|
||||
android:layout_marginLeft="@dimen/standard_gap"
|
||||
android:layout_marginRight="@dimen/standard_gap"
|
||||
android:layout_marginStart="@dimen/standard_gap"
|
||||
android:paddingBottom="@dimen/small_gap"
|
||||
android:paddingTop="@dimen/small_gap"
|
||||
android:textAlignment="center"
|
||||
android:textColor="@color/secondaryDarkColor"
|
||||
tools:text="@string/login_credential"/>
|
||||
|
||||
|
||||
<FrameLayout
|
||||
android:id="@+id/error_message_container"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_below="@id/title"
|
||||
android:layout_below="@id/login_credentials"
|
||||
android:visibility="gone"
|
||||
tools:visibility="visible">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/error_message"
|
||||
android:layout_width="match_parent"
|
||||
|
|
@ -149,8 +168,8 @@
|
|||
|
||||
<Button
|
||||
android:id="@+id/signupButton"
|
||||
android:layout_width="0dp"
|
||||
style="@style/Widget.AppCompat.Button.Borderless.Colored"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_horizontal"
|
||||
android:layout_marginEnd="@dimen/small_gap"
|
||||
|
|
@ -160,8 +179,8 @@
|
|||
|
||||
<Button
|
||||
android:id="@+id/loginButton"
|
||||
android:layout_width="0dp"
|
||||
style="@style/Widget.AppCompat.Button.Colored"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginLeft="@dimen/small_gap"
|
||||
android:layout_marginStart="@dimen/small_gap"
|
||||
|
|
@ -188,19 +207,19 @@
|
|||
<android.support.v7.widget.AppCompatImageView
|
||||
android:layout_width="64dp"
|
||||
android:layout_height="64dp"
|
||||
android:elevation="8dp"
|
||||
tools:ignore="UnusedAttribute"
|
||||
android:layout_gravity="center_horizontal"
|
||||
app:srcCompat="@drawable/blue_rinse_circle" />
|
||||
android:elevation="8dp"
|
||||
app:srcCompat="@drawable/blue_rinse_circle"
|
||||
tools:ignore="UnusedAttribute" />
|
||||
|
||||
<android.support.v7.widget.AppCompatImageView
|
||||
android:layout_width="42dp"
|
||||
android:layout_height="42dp"
|
||||
android:layout_gravity="center_horizontal"
|
||||
android:layout_marginTop="8dp"
|
||||
tools:ignore="UnusedAttribute"
|
||||
android:elevation="8dp"
|
||||
app:srcCompat="@drawable/commons_logo_large" />
|
||||
app:srcCompat="@drawable/commons_logo_large"
|
||||
tools:ignore="UnusedAttribute" />
|
||||
|
||||
</FrameLayout>
|
||||
|
||||
|
|
|
|||
|
|
@ -21,17 +21,19 @@
|
|||
android:orientation="horizontal"
|
||||
android:gravity="center_vertical"
|
||||
android:layout_below="@id/toolbar">
|
||||
|
||||
<ProgressBar
|
||||
android:id="@+id/progressBar"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content" />
|
||||
|
||||
<android.support.v4.widget.SwipeRefreshLayout
|
||||
android:id="@+id/swipe_container"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
<FrameLayout
|
||||
android:id="@+id/container"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent" />
|
||||
|
||||
</android.support.v4.widget.SwipeRefreshLayout>
|
||||
</LinearLayout>
|
||||
</RelativeLayout>
|
||||
|
||||
|
|
|
|||
|
|
@ -1,70 +1,67 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:orientation="vertical"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:background="?attr/fragmentCategorisationBackground"
|
||||
android:clickable="true"
|
||||
android:focusableInTouchMode="true"
|
||||
android:orientation="vertical"
|
||||
android:paddingBottom="@dimen/small_gap"
|
||||
android:paddingLeft="@dimen/standard_gap"
|
||||
android:paddingStart="@dimen/standard_gap"
|
||||
android:paddingRight="@dimen/standard_gap"
|
||||
android:paddingEnd="@dimen/standard_gap"
|
||||
android:paddingLeft="@dimen/standard_gap"
|
||||
android:paddingRight="@dimen/standard_gap"
|
||||
android:paddingStart="@dimen/standard_gap"
|
||||
android:paddingTop="@dimen/small_gap"
|
||||
android:theme="@style/DarkAppTheme"
|
||||
>
|
||||
android:theme="@style/DarkAppTheme">
|
||||
|
||||
<FrameLayout
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_width="match_parent"
|
||||
>
|
||||
android:layout_height="wrap_content"
|
||||
android:clickable="true"
|
||||
android:focusableInTouchMode="true">
|
||||
|
||||
<EditText
|
||||
android:id="@+id/categoriesSearchBox"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:hint="@string/categories_search_text_hint"
|
||||
android:maxLines="1"
|
||||
android:inputType="textCapWords"
|
||||
android:imeOptions="flagNoExtractUi"
|
||||
/>
|
||||
android:inputType="textCapWords"
|
||||
android:maxLines="1" />
|
||||
|
||||
<ProgressBar
|
||||
android:id="@+id/categoriesSearchInProgress"
|
||||
style="?android:progressBarStyleSmall"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_vertical|end"
|
||||
android:layout_marginEnd="@dimen/tiny_gap"
|
||||
android:layout_marginRight="@dimen/tiny_gap"
|
||||
android:indeterminate="true"
|
||||
android:indeterminateOnly="true"
|
||||
android:layout_marginRight="@dimen/tiny_gap"
|
||||
android:layout_marginEnd="@dimen/tiny_gap"
|
||||
android:layout_gravity="center_vertical|end"
|
||||
style="?android:progressBarStyleSmall"
|
||||
android:visibility="gone"
|
||||
/>
|
||||
android:visibility="gone" />
|
||||
</FrameLayout>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/categoriesNotFound"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_width="match_parent"
|
||||
android:visibility="gone"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="center"
|
||||
/>
|
||||
android:visibility="gone" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/categoriesExplanation"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="@dimen/huge_gap"
|
||||
android:gravity="center"
|
||||
android:focusable="true"
|
||||
android:gravity="center"
|
||||
android:text="@string/categories_skip_explanation"
|
||||
android:visibility="gone"
|
||||
/>
|
||||
android:visibility="gone" />
|
||||
|
||||
<android.support.v7.widget.RecyclerView
|
||||
android:id="@+id/categoriesListBox"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_width="match_parent"
|
||||
android:fadingEdge="none"
|
||||
/>
|
||||
android:layout_height="wrap_content"
|
||||
android:fadingEdge="none" />
|
||||
</LinearLayout>
|
||||
|
|
@ -3,6 +3,8 @@
|
|||
android:orientation="vertical"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:clickable="true"
|
||||
android:focusableInTouchMode="true"
|
||||
>
|
||||
|
||||
<EditText
|
||||
|
|
@ -23,4 +25,5 @@
|
|||
android:fadingEdge="none"
|
||||
android:fastScrollEnabled="false"
|
||||
/>
|
||||
|
||||
</LinearLayout>
|
||||
|
|
@ -10,6 +10,11 @@
|
|||
android:icon="@drawable/ic_location_black_24dp"
|
||||
android:title="@string/navigation_item_nearby"/>
|
||||
|
||||
<item
|
||||
android:id="@+id/action_notifications"
|
||||
android:icon="@drawable/ic_notifications_black_24dp"
|
||||
android:title="@string/navigation_item_notification"/>
|
||||
|
||||
<item
|
||||
android:id="@+id/action_about"
|
||||
android:icon="@drawable/ic_info_outline_black_24dp"
|
||||
|
|
@ -35,9 +40,4 @@
|
|||
android:icon="@drawable/ic_exit_to_app_black_24dp"
|
||||
android:title="@string/navigation_item_logout"/>
|
||||
|
||||
<item
|
||||
android:id="@+id/action_notifications"
|
||||
android:icon="@drawable/ic_notifications_black_24dp"
|
||||
android:title="@string/navigation_item_notification"/>
|
||||
|
||||
</menu>
|
||||
|
|
|
|||
|
|
@ -199,12 +199,14 @@
|
|||
<string name="error_while_cache">Error al poner les fotos na caché</string>
|
||||
<string name="title_info">Un títulu descriptivu únicu pal ficheru, que sirvirá para da-y nome al ficheru. Se pue usar llinguax normal con espacios. Nun amiestes la estensión del ficheru</string>
|
||||
<string name="description_info">Por favor, describi l\'elementu multimedia tantu como sía posible: ¿ónde se tomó?, ¿qué amuesa?, ¿cuál ye\'l contestu? Por favor, describi los oxetos o persones. Revela la información que nun pueda aldovinase de mou cenciellu, por casu el momentu del día si ye un paisaxe. Si\'l mediu amuesa daqué desacostumao, esplica qué lo fai raro.</string>
|
||||
<string name="upload_image_too_dark">Esta imaxe ye escura enforma, ¿tas seguru de que quies xubila? Wikimedia Commons ye sólo pa imáxenes con valor enciclopédicu.</string>
|
||||
<string name="upload_image_blurry">Esta imaxe ta borrosa, ¿tas seguru de que quies xubila? Wikimedia Commons ye sólo pa imáxenes con valor enciclopédicu.</string>
|
||||
<string name="give_permission">Dar permisu</string>
|
||||
<string name="use_external_storage">Usar almacenamientu esternu</string>
|
||||
<string name="use_external_storage_summary">Guardar nel preséu les imaxes tomaes cola cámara de la app</string>
|
||||
<string name="login_to_your_account">Anicia sesión na to cuenta</string>
|
||||
<string name="send_log_file">Unviar ficheru de rexistru</string>
|
||||
<string name="send_log_file_description">Unviar ficheru de rexistru a los desendolcadores per corréu electrónicu</string>
|
||||
<string name="login_to_your_account">Anicia sesión na to cuenta</string>
|
||||
<string name="nearby_location_has_not_changed">L\'allugamientu nun camudó.</string>
|
||||
<string name="nearby_location_not_available">L\'allugamientu nun ta disponible.</string>
|
||||
<string name="location_permission_rationale_nearby">Ríquese permisu p\'amosar una llista de llugares cercanos</string>
|
||||
|
|
|
|||
|
|
@ -199,9 +199,9 @@
|
|||
<string name="give_permission">Davanje dozvole</string>
|
||||
<string name="use_external_storage">Upotreba spoljašnjeg skladišta</string>
|
||||
<string name="use_external_storage_summary">Spremanje slika napravljenih kamerom aplikacije na Vašem uređaju</string>
|
||||
<string name="login_to_your_account">Prijavite se na svoj nalog</string>
|
||||
<string name="send_log_file">Pošalji dnevničku datoteku</string>
|
||||
<string name="send_log_file_description">Pošalji dnevničku datoteku developerima preko imejla</string>
|
||||
<string name="login_to_your_account">Prijavite se na svoj nalog</string>
|
||||
<string name="nearby_location_has_not_changed">Lokacija nije promenjena.</string>
|
||||
<string name="nearby_location_not_available">Lokacija nije dostupna.</string>
|
||||
<string name="location_permission_rationale_nearby">Potrebna je dozvola za prikazivanje liste lokacija u blizini</string>
|
||||
|
|
|
|||
|
|
@ -202,9 +202,9 @@
|
|||
<string name="give_permission">অনুমতি দিন</string>
|
||||
<string name="use_external_storage">বাহ্যিক সঞ্চয়স্থান ব্যবহার করুন</string>
|
||||
<string name="use_external_storage_summary">অাপনার ডিভাইসের নিজস্ব ক্যামেরায় ধারণকৃত ছবি সংরক্ষণ করুন</string>
|
||||
<string name="login_to_your_account">আপনার অ্যাকাউন্টে প্রবেশ করুন</string>
|
||||
<string name="send_log_file">লগ ফাইল পাঠান</string>
|
||||
<string name="send_log_file_description">ইমেইলের মাধ্যমে উন্নয়নকারীর কাছে লগ ফাইল পাঠান</string>
|
||||
<string name="login_to_your_account">আপনার অ্যাকাউন্টে প্রবেশ করুন</string>
|
||||
<string name="nearby_location_has_not_changed">অবস্থান পরিবর্তন হয়নি।</string>
|
||||
<string name="nearby_location_not_available">অবস্থান উপলব্ধ নয়।</string>
|
||||
<string name="location_permission_rationale_nearby">কাছাকাছি স্থানসমূহের একটি তালিকা প্রদর্শন করতে অনুমতি প্রয়োজন</string>
|
||||
|
|
|
|||
|
|
@ -170,9 +170,9 @@
|
|||
<string name="error_while_cache">Error mentre es carregaven les fotografies</string>
|
||||
<string name="give_permission">Dóna permís</string>
|
||||
<string name="use_external_storage">Utilitza l’emmagatzematge extern</string>
|
||||
<string name="login_to_your_account">Entreu en el vostre compte</string>
|
||||
<string name="send_log_file">Envia el fitxer de registre</string>
|
||||
<string name="send_log_file_description">Envia el registre als desenvolupadors per correu</string>
|
||||
<string name="login_to_your_account">Entreu en el vostre compte</string>
|
||||
<string name="nearby_location_has_not_changed">La ubicació no ha canviat.</string>
|
||||
<string name="nearby_location_not_available">La ubicació no és disponible.</string>
|
||||
<string name="get_directions">COM ANAR-HI</string>
|
||||
|
|
|
|||
|
|
@ -199,12 +199,14 @@
|
|||
<string name="error_while_cache">Chyba při meziukládání obrázků</string>
|
||||
<string name="title_info">Unikátní a popisný název pro daný soubor, který bude sloužit jako název souboru. Můžete použít běžný psaný jazyk s mezerami; nezahrnujte koncovku souboru.</string>
|
||||
<string name="description_info">Popište prosím obrázek, jak jen to je možné: Kde byl pořízen? Co znázorňuje? Jaký je kontext obrázku? Popisujte prosím významné předměty nebo osoby na obrázku a nezapomeňte na informace, které není možné snadno odhadnout ze samotného obrázku, jako je například denní doba, pokud jde o krajinu. Pokud je na obrázku něco neobvyklého, popište, co to dělá neobvyklým.</string>
|
||||
<string name="upload_image_too_dark">Tento obrázek je příliš tmavý, jste si jist/a, že ho chcete nahrát? Wikimedia Commons slouží jenom pro obrázky s encyklopedickou hodnotou.</string>
|
||||
<string name="upload_image_blurry">Tento obrázek je rozmazaný, jste si jist/a, že ho chcete nahrát? Wikimedia Commons slouží jenom pro obrázky s encyklopedickou hodnotou.</string>
|
||||
<string name="give_permission">Dát povolení</string>
|
||||
<string name="use_external_storage">Použít externí úložiště</string>
|
||||
<string name="use_external_storage_summary">Uložit obrázky pořízené fotoaparátem, jenž je součástí této aplikace</string>
|
||||
<string name="login_to_your_account">Přihlásit se k účtu</string>
|
||||
<string name="send_log_file">Odeslat log</string>
|
||||
<string name="send_log_file_description">Odeslat log vývojářům e-mailem</string>
|
||||
<string name="login_to_your_account">Přihlásit se k účtu</string>
|
||||
<string name="nearby_location_has_not_changed">Vaše umístění se nezměnilo.</string>
|
||||
<string name="nearby_location_not_available">Umístění není dostupné.</string>
|
||||
<string name="location_permission_rationale_nearby">Vyžadováno povolení k zobrazení seznamu blízkých míst</string>
|
||||
|
|
|
|||
|
|
@ -199,12 +199,14 @@
|
|||
<string name="error_while_cache">Fejl under mellemlagring af billeder</string>
|
||||
<string name="title_info">En unik beskrivelse for filen, som vil fungere som et filnavn. Du kan bruge normalt sprog med mellemrum. Udelad filendelsen.</string>
|
||||
<string name="description_info">Beskriv mediet så godt som muligt: Hvor blev det taget? Hvad viser det? Hvad er konteksten? Beskriv objekterne eller personerne. Giv information som ikke nemt kan gættes, for eksempel hvornår på dagen billedet blev taget, om det er et landskabsbillede. Om billedet viser noget usædvanligt, forklar hvad som gør det usædvanlig.</string>
|
||||
<string name="upload_image_too_dark">Billedet er for mørkt. Er du sikker på, at du ønsker at overføre det? Wikimedia Commons er kun for billeder encyklopædisk værdi.</string>
|
||||
<string name="upload_image_blurry">Dette billede er sløret. Er du sikker på, at du ønsker at overføre det? Wikimedia Commons er kun for billeder med encyklopædisk værdi.</string>
|
||||
<string name="give_permission">Giv tilladelse</string>
|
||||
<string name="use_external_storage">Brug eksternt lager</string>
|
||||
<string name="use_external_storage_summary">Gem billeder taget med din enheds program på kameraet</string>
|
||||
<string name="login_to_your_account">Log ind på din konto</string>
|
||||
<string name="send_log_file">Send logfil</string>
|
||||
<string name="send_log_file_description">Send logfil til udviklerne via e-post</string>
|
||||
<string name="login_to_your_account">Log ind på din konto</string>
|
||||
<string name="nearby_location_has_not_changed">Sted er ikke ændret.</string>
|
||||
<string name="nearby_location_not_available">Sted ikke tilgængeligt.</string>
|
||||
<string name="location_permission_rationale_nearby">Tilladelse kræves for at vise en liste over steder i nærheden</string>
|
||||
|
|
|
|||
|
|
@ -199,12 +199,14 @@
|
|||
<string name="error_while_cache">Fehler beim Zwischenspeichern der Bilder</string>
|
||||
<string name="title_info">Ein eindeutiger beschreibender Titel für die Datei, der als Dateiname dient. Du kannst Klartext mit Leerzeichen verwenden. Gib nicht die Dateierweiterung mit an.</string>
|
||||
<string name="description_info">Bitte beschreibe das Medium so gut wie möglich: Wo wurde es aufgenommen? Was zeigt es? Was ist der Kontext? Bitte beschreibe die Objekte oder Personen. Zeige Informationen auf, die nicht einfach erraten werden können, zum Beispiel die Tageszeit, falls es eine Landschaft ist. Falls das Medium etwas Ungewöhnliches zeigt, erkläre bitte, was es ungewöhnlich macht.</string>
|
||||
<string name="upload_image_too_dark">Dieses Bild ist zu dunkel. Bist du sicher, dass du es hochladen möchtest? Wikimedia Commons ist nur für Bilder mit enzyklopädischem Wert gedacht.</string>
|
||||
<string name="upload_image_blurry">Dieses Bild ist verschwommen. Bist du sicher, dass du es hochladen möchtest? Wikimedia Commons ist nur für Bilder mit enzyklopädischem Wert gedacht.</string>
|
||||
<string name="give_permission">Berechtigung geben</string>
|
||||
<string name="use_external_storage">Externen Speicher verwenden</string>
|
||||
<string name="use_external_storage_summary">Mit der In-App-Kamera aufgenommene Bilder auf deinem Gerät speichern</string>
|
||||
<string name="login_to_your_account">Bei deinem Benutzerkonto anmelden</string>
|
||||
<string name="send_log_file">Logdatei senden</string>
|
||||
<string name="send_log_file_description">Logdatei an die Entwickler per E-Mail senden</string>
|
||||
<string name="login_to_your_account">Bei deinem Benutzerkonto anmelden</string>
|
||||
<string name="nearby_location_has_not_changed">Der Standort hat sich nicht geändert.</string>
|
||||
<string name="nearby_location_not_available">Der Standort ist nicht verfügbar.</string>
|
||||
<string name="location_permission_rationale_nearby">Berechtigung zur Anzeige einer Liste mit Orten in der Nähe erforderlich</string>
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@
|
|||
<string name="login">Cı kewe</string>
|
||||
<string name="signup">Qeyd be</string>
|
||||
<string name="logging_in_title">Cıkewtış</string>
|
||||
<string name="logging_in_message" fuzzy="true">Tay bıpawe</string>
|
||||
<string name="logging_in_message">Kerem kerên, bıpawên...</string>
|
||||
<string name="login_success">Cıkewtış hewl bi.</string>
|
||||
<string name="login_failed">Nidekeweya de</string>
|
||||
<string name="upload_failed">Dosya nêvineya. Dosyê da bine bıcerebnê.</string>
|
||||
|
|
@ -20,9 +20,9 @@
|
|||
<string name="upload_progress_notification_title_finishing">Barkerdışe %1$s qedya</string>
|
||||
<string name="upload_failed_notification_title">%1$s bar nêbeno.</string>
|
||||
<string name="upload_failed_notification_subtitle">pıpawane xo bıvin</string>
|
||||
<plurals name="uploads_pending_notification_indicator" fuzzy="true">
|
||||
<item quantity="one">1 dosye selagnayış</item>
|
||||
<item quantity="other">%1$d dosye Selagnayışi</item>
|
||||
<plurals name="uploads_pending_notification_indicator">
|
||||
<item quantity="one">1 dosya bar bena</item>
|
||||
<item quantity="other">%1$d dosyeyi bar benê</item>
|
||||
</plurals>
|
||||
<string name="title_activity_contributions">Barkerdışê mınê peyêni</string>
|
||||
<string name="contribution_state_queued">Ratneya</string>
|
||||
|
|
@ -49,18 +49,18 @@
|
|||
<string name="menu_upload_single">Bar ke</string>
|
||||
<string name="categories_search_text_hint">Kategoriyan dı cı geyr</string>
|
||||
<string name="menu_save_categories">Star ke</string>
|
||||
<plurals name="contributions_subtitle" fuzzy="true">
|
||||
<item quantity="zero">Theba bar nêbı</item>
|
||||
<item quantity="one">1 bar kerdış</item>
|
||||
<item quantity="other">%1$d bar kerdışi</item>
|
||||
<plurals name="contributions_subtitle">
|
||||
<item quantity="zero">\@string/contributions_subtitle_zero</item>
|
||||
<item quantity="one">Yew barbiyayış</item>
|
||||
<item quantity="other">%1$d barbiyayışi</item>
|
||||
</plurals>
|
||||
<plurals name="starting_multiple_uploads" fuzzy="true">
|
||||
<item quantity="one">Sergendış 1 bar kerdış</item>
|
||||
<item quantity="other">Sergendış %1$d bar kerdışi </item>
|
||||
</plurals>
|
||||
<plurals name="multiple_uploads_title" fuzzy="true">
|
||||
<item quantity="one">1 bar kerdış</item>
|
||||
<item quantity="other">%1$d bar kerdışi </item>
|
||||
<plurals name="multiple_uploads_title">
|
||||
<item quantity="one">%1$d barkerdış</item>
|
||||
<item quantity="other">%1$d barkerdışi</item>
|
||||
</plurals>
|
||||
<string name="categories_not_found">Kategoriyan de %1$s deye theba çıniyo</string>
|
||||
<string name="categories_skip_explanation" fuzzy="true">Kategori cı kerdışi rê nusnayış bıkeré. Ena gamer ravêrdışi rê mesaci bıpıloğnê yana peyd şırê.</string>
|
||||
|
|
@ -69,7 +69,7 @@
|
|||
<string name="title_activity_signup">Qeyd be</string>
|
||||
<string name="menu_about">Heq te cı</string>
|
||||
<string name="about_improve" fuzzy="true"><a href=\"https://github.com/commons-app/apps-android-commons\">Çıme</a> u <a href=\"https://commons-app.github.io/\">website</a> on GitHub</a>. Newe vıraz <a href=\"https://github.com/commons-app/apps-android-commons/issues\">GitHub mewzu </a> U rapor bıweseynê</string>
|
||||
<string name="about_privacy_policy" fuzzy="true">/</string>
|
||||
<string name="about_privacy_policy"><a href=\"https://github.com/commons-app/apps-android-commons/wiki/Privacy-policy\">Politikay nımıtışi</a></string>
|
||||
<string name="title_activity_about">Heq te cı</string>
|
||||
<string name="menu_feedback">Peyd rışten bırış (E-posta ra)</string>
|
||||
<string name="no_email_client">E-posta eyar nêbi</string>
|
||||
|
|
|
|||
|
|
@ -199,12 +199,14 @@
|
|||
<string name="error_while_cache">Υπήρξε σφάλμα κατά την σκίαση εικόνων</string>
|
||||
<string name="title_info">Ένας μοναδικός τίτλος περιγραφής του φακέλλου, που θα χρησιμεύσει ως όνομα φακέλλου. Μπορείτε να χρησιμοποιήσετε τις ήδη υπάρχουσες γλώσσες με διαστήματα. Μην συμπεριλάβετε την επέκταση φακέλλου</string>
|
||||
<string name="description_info">\nΠαρακαλώ περιγράψετε τα μέσα το δυνατό περισσότερο : Πού οδηγήθηκε αυτό; Τι δείχνει; Ποιο είναι το περιεχόμενο του; Παρακαλώ περιγράψετε τα αντικείμενα ή τα πρόσωπα. Αποκαλύψετε πληροφορίες που δεν μπορούν εύκολο να μαντέψει κανείς, για παράδειγμα την ώρα εντός της ημέρας αν πρόκειται για τοπίο. Αν τα μέσα δείξουν κάτι ασύνηθες, παρακαλώ εξηγήστε τι το καθιστά μη συνηθισμένα.</string>
|
||||
<string name="upload_image_too_dark">Αυτή η εικόνα είναι πολύ σκοτεινή, είστε βέβαιοι ότι θέλετε να την ανεβάσετε; Το Wikimedia Commons είναι μόνο για εικόνες με εγκυκλοπαιδική αξία.</string>
|
||||
<string name="upload_image_blurry">Αυτή η εικόνα είναι θολή, είστε βέβαιοι ότι θέλετε να την ανεβάσετε; Το Wikimedia Commons είναι μόνο για εικόνες με εγκυκλοπαιδική αξία.</string>
|
||||
<string name="give_permission">Χορηγήστε άδεια</string>
|
||||
<string name="use_external_storage">Χρησιμοποιήσετε την εξωτερική αποθήκευση</string>
|
||||
<string name="use_external_storage_summary">Αποθηκεύσετε εικόνες που παίρνονται στην κάμερα εφαρμογής στην συσκευή σας</string>
|
||||
<string name="login_to_your_account">Συνδεθείτε στο λογαριασμό σας.</string>
|
||||
<string name="send_log_file">Αποστείλατε τον φάκελλο σύνδεσης</string>
|
||||
<string name="send_log_file_description">Στείλατε τον φάκελλο σύνδεσης στους δημιουργούς μέσω email</string>
|
||||
<string name="login_to_your_account">Συνδεθείτε στο λογαριασμό σας.</string>
|
||||
<string name="nearby_location_has_not_changed">Ο εντοπισμός δεν έχει αλλάξει.</string>
|
||||
<string name="nearby_location_not_available">Ο τόπος δεν είναι διαθέσιμος.</string>
|
||||
<string name="location_permission_rationale_nearby">Απαιτείται άδεια για την εμφάνιση λίστας κοντινών σημείων</string>
|
||||
|
|
|
|||
|
|
@ -199,12 +199,14 @@
|
|||
<string name="error_while_cache">Error al almacenar imágenes en la antememoria</string>
|
||||
<string name="title_info">Un título único descriptivo para el archivo, que servirá como un nombre de archivo. Puede usar un lenguaje claro con espacios. No incluya la extensión del archivo.</string>
|
||||
<string name="description_info">Por favor, describa el elemento multimedia tanto como sea posible: ¿dónde fue tomado?, ¿qué muestra?, ¿cuál es el contexto? Por favor, describa los objetos o personas. Ofrezca la información que no puede ser inferida tan fácilmente, por ejemplo el momento del día si es un paisaje. Si el medio muestra algo inusual, explique qué lo hace insual.</string>
|
||||
<string name="upload_image_too_dark">Esta imagen es demasiado oscura. ¿Confirmas que quieres cargarla? Wikimedia Commons solo acepta imágenes con valor enciclopédico.</string>
|
||||
<string name="upload_image_blurry">Esta imagen se ve borrosa. ¿Confirmas que quieres cargarla? Wikimedia Commons solo acepta imágenes con valor enciclopédico.</string>
|
||||
<string name="give_permission">Otorgar permiso</string>
|
||||
<string name="use_external_storage">Utilizar almacenamiento externo</string>
|
||||
<string name="use_external_storage_summary">Guardar en el dispositivo imágenes capturadas con la cámara de la aplicación</string>
|
||||
<string name="login_to_your_account">Accede a tu cuenta</string>
|
||||
<string name="send_log_file">Enviar archivo de registro</string>
|
||||
<string name="send_log_file_description">Enviar archivo de registro a los desarrolladores por correo electrónico</string>
|
||||
<string name="login_to_your_account">Accede a tu cuenta</string>
|
||||
<string name="nearby_location_has_not_changed">La ubicación no ha cambiado.</string>
|
||||
<string name="nearby_location_not_available">La ubicación no está disponible.</string>
|
||||
<string name="location_permission_rationale_nearby">Se necesita permiso para mostrar una lista de lugares cercanos</string>
|
||||
|
|
|
|||
|
|
@ -198,9 +198,9 @@
|
|||
<string name="give_permission">اجازه بده</string>
|
||||
<string name="use_external_storage">استفاده از حافظهٔ خارجی</string>
|
||||
<string name="use_external_storage_summary">ذخیرهٔ تصویرهای گرفته شده توسط دوربین درونکار اپلیکیشن بر روی دستگاه شما</string>
|
||||
<string name="login_to_your_account">ورود به حساب کاربریتان</string>
|
||||
<string name="send_log_file">ارسال فایل سیاهه</string>
|
||||
<string name="send_log_file_description">ارسال فایل سیاهه بهوسیلهٔ ایمیل برای توسعهدهندگان</string>
|
||||
<string name="login_to_your_account">ورود به حساب کاربریتان</string>
|
||||
<string name="nearby_location_has_not_changed">مکان تغییر نکردهاست.</string>
|
||||
<string name="nearby_location_not_available">مکان موجود نیست.</string>
|
||||
<string name="location_permission_rationale_nearby">برای نمایش مکانّای اطراف نیاز به اجازه است.</string>
|
||||
|
|
|
|||
|
|
@ -192,9 +192,9 @@
|
|||
<string name="title_info">Tiedoston yksilöllinen ja kuvaava otsikko, jota käytetään tiedostonimenä. Voit käyttää tavallista kieltä välilyönnein. Älä sisällytä tiedoston päätettä.</string>
|
||||
<string name="give_permission">Anna lupa</string>
|
||||
<string name="use_external_storage">Käytä ulkoista tallennustilaa</string>
|
||||
<string name="login_to_your_account">Kirjaudu tilillesi</string>
|
||||
<string name="send_log_file">Lähetä lokitiedosto</string>
|
||||
<string name="send_log_file_description">Lähetä logitiedosto kehittäjille sähköpostin kautta</string>
|
||||
<string name="login_to_your_account">Kirjaudu tilillesi</string>
|
||||
<string name="nearby_location_has_not_changed">Sijainti ei ole muuttunut.</string>
|
||||
<string name="nearby_location_not_available">Sijainti ei käytettävissä.</string>
|
||||
<string name="read_article">LUE ARTIKKELI</string>
|
||||
|
|
|
|||
|
|
@ -199,12 +199,14 @@
|
|||
<string name="error_while_cache">Erreur en mettant les images en cache</string>
|
||||
<string name="title_info">Un titre descriptif unique pour le fichier, qui servira de nom de fichier. Vous pouvez utiliser un langage simple avec des espaces. N’incluez pas l’extension du fichier</string>
|
||||
<string name="description_info">Veuillez décrire le média autant que possible : Où a-t-il été enregistré ? Que montre-t-il ? Quel est le contexte ? Veuillez décrire les objets ou les personnes. Révélez les informations qui ne peuvent pas être devinées facilement, par exemple l’heure de la journée si c’est un paysage. Si le média montre quelque chose d’inhabituel, veuillez expliquer ce qui le rend exceptionnel.</string>
|
||||
<string name="upload_image_too_dark">Cette image est trop sombre, êtes-vous sûr de vouloir la télécharger ? Wikimédia Communs n’est que pour les images avec une valeur encyclopédique.</string>
|
||||
<string name="upload_image_blurry">Cette image est floue, êtes-vous sûr de vouloir la télécharger ? Wikimédia Communs n’est que pour les images ayant une valeur encyclopédique.</string>
|
||||
<string name="give_permission">Accorder le droit</string>
|
||||
<string name="use_external_storage">Utiliser le stockage externe</string>
|
||||
<string name="use_external_storage_summary">Enregistrer les images prises avec l’appareil photo de votre appareil</string>
|
||||
<string name="login_to_your_account">Connectez-vous à votre compte</string>
|
||||
<string name="send_log_file">Envoyer le journal</string>
|
||||
<string name="send_log_file_description">Envoyer le journal aux développeurs par courriel</string>
|
||||
<string name="login_to_your_account">Connectez-vous à votre compte</string>
|
||||
<string name="nearby_location_has_not_changed">L\'emplacement n\'a pas changé.</string>
|
||||
<string name="nearby_location_not_available">Emplacement non disponible.</string>
|
||||
<string name="location_permission_rationale_nearby">Une permission est requise pour afficher une liste de lieux relatifs</string>
|
||||
|
|
|
|||
|
|
@ -202,9 +202,9 @@
|
|||
<string name="give_permission">Outorgar permiso</string>
|
||||
<string name="use_external_storage">Usar o almacenamento externo</string>
|
||||
<string name="use_external_storage_summary">Gardar as imaxes capturadas coa cámara do seu dispositivo</string>
|
||||
<string name="login_to_your_account">Comezar sesión na súa conta</string>
|
||||
<string name="send_log_file">Enviar ficheiro de rexistro</string>
|
||||
<string name="send_log_file_description">Enviar ficheiro de rexistro ós desenvolvedores por correo electrónico</string>
|
||||
<string name="login_to_your_account">Comezar sesión na súa conta</string>
|
||||
<string name="nearby_location_has_not_changed">A localización non cambiou.</string>
|
||||
<string name="nearby_location_not_available">A localización non está dispoñible.</string>
|
||||
<string name="location_permission_rationale_nearby">Precísase permiso para amosar unha lista de lugares preto de aquí</string>
|
||||
|
|
|
|||
|
|
@ -198,12 +198,13 @@
|
|||
<string name="error_while_cache">चित्र कैशिंग करते समय त्रुटि</string>
|
||||
<string name="title_info">फ़ाइल के लिए एक अद्वितीय वर्णनात्मक शीर्षक, जो एक फ़ाइल नाम के रूप में काम करेगा। आप रिक्त स्थान के साथ सादे भाषा का उपयोग कर सकते हैं। फ़ाइल विस्तार शामिल न करें</string>
|
||||
<string name="description_info">कृपया मीडिया जितना संभव हो उतना बताएं: यह कहां लिया गया? यह क्या दिखाता है? संदर्भ क्या है? कृपया वस्तुओं या व्यक्तियों का वर्णन करें। ऐसी जानकारी का खुलासा करें जिसे आसानी से अनुमानित नहीं किया जा सकता, उदाहरण के लिए दिन का समय यदि यह परिदृश्य है। अगर मीडिया कुछ असामान्य दिखाता है, तो कृपया बताएं कि इसे क्या असामान्य बनाता है।</string>
|
||||
<string name="upload_image_too_dark">यह चित्र बहुत गहरा है, क्या आप वाकई इसे अपलोड करना चाहते हैं? विकिमीडिया कॉमन्स केवल विश्वकोषीय मूल्य वाले चित्रों के लिए है।</string>
|
||||
<string name="give_permission">अनुमति दें</string>
|
||||
<string name="use_external_storage">बाहरी स्टॉरज का पृयोग करे।</string>
|
||||
<string name="use_external_storage_summary">आप अपने डिवाइस के इन-ऐप कैमरा से ली गई तस्वीरों को सहेजें।</string>
|
||||
<string name="login_to_your_account">अपने खाते में प्रवेश करें</string>
|
||||
<string name="send_log_file">लॉग फाइल भेजें</string>
|
||||
<string name="send_log_file_description">डेवेलपर्स को लॉग फाइल ई-मेल से भेजें</string>
|
||||
<string name="login_to_your_account">अपने खाते में प्रवेश करें</string>
|
||||
<string name="nearby_location_has_not_changed">स्थान परिवर्तन नहीं हुआ।</string>
|
||||
<string name="nearby_location_not_available">स्थान उपलब्ध नहीं।</string>
|
||||
<string name="location_permission_rationale_nearby">आसपास के स्थान दिखाने के लिए अनुमति चाहिए</string>
|
||||
|
|
|
|||
|
|
@ -196,9 +196,9 @@
|
|||
<string name="give_permission">Engedély adása</string>
|
||||
<string name="use_external_storage">Külső tárhely használata</string>
|
||||
<string name="use_external_storage_summary">Az alkalmazáson belüli kamerával készült képek mentése az eszközre</string>
|
||||
<string name="login_to_your_account">Bejelentkezés a fiókodba</string>
|
||||
<string name="send_log_file">Naplófájlok küldése</string>
|
||||
<string name="send_log_file_description">Naplófájlok küldése e-mailben a fejlesztőknek</string>
|
||||
<string name="login_to_your_account">Bejelentkezés a fiókodba</string>
|
||||
<string name="nearby_location_has_not_changed">A hely nem változott.</string>
|
||||
<string name="nearby_location_not_available">A hely nem érhető el.</string>
|
||||
</resources>
|
||||
|
|
|
|||
|
|
@ -54,16 +54,16 @@
|
|||
<string name="gps_disabled">GPS er óvirkt í tækinu þínu. Viltu virkja það?</string>
|
||||
<string name="enable_gps">Virkja GPS</string>
|
||||
<string name="contributions_subtitle_zero">Engar innsendingar ennþá</string>
|
||||
<plurals name="contributions_subtitle" fuzzy="true">
|
||||
<plurals name="contributions_subtitle">
|
||||
<item quantity="zero">\@string/contributions_subtitle_zero</item>
|
||||
<item quantity="one">%1$d innsending</item>
|
||||
<item quantity="other">%1$d innsendingar</item>
|
||||
</plurals>
|
||||
<plurals name="starting_multiple_uploads" fuzzy="true">
|
||||
<plurals name="starting_multiple_uploads">
|
||||
<item quantity="one">Byrja %1$d innsendingu</item>
|
||||
<item quantity="other">Byrja %1$d innsendingar</item>
|
||||
</plurals>
|
||||
<plurals name="multiple_uploads_title" fuzzy="true">
|
||||
<plurals name="multiple_uploads_title">
|
||||
<item quantity="one">%1$d innsending</item>
|
||||
<item quantity="other">%1$d innsendingar</item>
|
||||
</plurals>
|
||||
|
|
@ -199,19 +199,22 @@
|
|||
<string name="error_while_cache">Villa kom upp í skyndiminni mynda</string>
|
||||
<string name="title_info">Einstakur og lýsandi titill, sem mun verða skráarheiti. Þú mátt nota einfaldan texta með bilum. Ekki hafa með neina skráarendingu</string>
|
||||
<string name="description_info">Lýstu gögnunum eins vel og auðið er: Hvar er myndin tekin? Hvað sýnir hún? Hvert er samhengið? Lýstu fólki og fyrirbærum. Gefðu upp þær upplýsingar sem ekki er auðvelt að giska á, til dæmis á hvaða tíma dags myndin er tekin ef hún sýnir landslag. Ef gögnin sýna eitthvað óvenjulegt, útskýrðu þá hvað það er sem sé sérstakt.</string>
|
||||
<string name="upload_image_too_dark">Þessi mynd er of dökk, ertu viss um að þú viljir senda hana inn? Wikimedia Commons er aðeins fyrir myndir sem hafa eitthvað fræðslugildi.</string>
|
||||
<string name="upload_image_blurry">Þessi mynd er ekki skörp, ertu viss um að þú viljir senda hana inn? Wikimedia Commons er aðeins fyrir myndir sem hafa eitthvað fræðslugildi.</string>
|
||||
<string name="give_permission">Gefa heimild</string>
|
||||
<string name="use_external_storage">Nota ytri gagnageymslu</string>
|
||||
<string name="use_external_storage_summary">Vistaðu myndir sem teknar hafa verið með innbyggðu myndavélinni í tækinu þínu</string>
|
||||
<string name="login_to_your_account">Skrá inn á aðganginn þinn</string>
|
||||
<string name="send_log_file">Senda atvikaskrá</string>
|
||||
<string name="send_log_file_description">Senda atvikaskrá til forritaranna með tölvupósti</string>
|
||||
<string name="login_to_your_account">Skrá inn á aðganginn þinn</string>
|
||||
<string name="nearby_location_has_not_changed">Staðsetning hefur ekki breyst.</string>
|
||||
<string name="nearby_location_not_available">Staðsetning ekki tiltæk.</string>
|
||||
<string name="location_permission_rationale_nearby">Heimild þarf til að birta lista yfir staði í nágrenninu</string>
|
||||
<string name="get_directions">FÁ LEIÐSÖGN</string>
|
||||
<string name="read_article">LESA GREIN</string>
|
||||
<string name="notifications_welcome" fuzzy="true">Velkomin á Wikimedia Commons, %1$s! Við erum ánægð með að þú skulir vera hérna.</string>
|
||||
<string name="notifications_welcome">Velkomin á Wikimedia Commons, %1$s! Við erum ánægð með að þú skulir vera hérna.</string>
|
||||
<string name="notifications_talk_page_message">%1$s skildi eftir skilaboð á spjallsíðunni þinni</string>
|
||||
<string name="notifications_thank_you_edit">Takk fyrir að hafa gert breytingar</string>
|
||||
<string name="notifications_mention" fuzzy="true">%1$s minntist á þig á %2$s.</string>
|
||||
<string name="notifications_mention">%1$s minntist á þig á %2$s.</string>
|
||||
<string name="toggle_view_button">Víxla sýn</string>
|
||||
</resources>
|
||||
|
|
|
|||
|
|
@ -201,9 +201,9 @@
|
|||
<string name="give_permission">לתת הרשאה</string>
|
||||
<string name="use_external_storage">להשתמש באחסון חיצוני</string>
|
||||
<string name="use_external_storage_summary">שמירת תמונות שצולמו באמצעות מצלמה בתוך היישום במכשיר שלך</string>
|
||||
<string name="login_to_your_account">כניסה לחשבון שלך</string>
|
||||
<string name="send_log_file">שליחת קובץ יומן</string>
|
||||
<string name="send_log_file_description">שליחת קובץ יומן למפתחים בדואר אלקטרוני</string>
|
||||
<string name="login_to_your_account">כניסה לחשבון שלך</string>
|
||||
<string name="nearby_location_has_not_changed">המיקום לא השתנה.</string>
|
||||
<string name="nearby_location_not_available">המיקום אינו זמין.</string>
|
||||
<string name="location_permission_rationale_nearby">נדרשת הרשאה כדי להציג רשימה של מקומות בסביבה</string>
|
||||
|
|
|
|||
|
|
@ -41,6 +41,7 @@
|
|||
<string name="login_failed_password">ログインできません - パスワードを確認してください</string>
|
||||
<string name="login_failed_throttled">失敗した回数が多すぎます。数分でもう一度お試しください。</string>
|
||||
<string name="login_failed_blocked">申し訳ありませんが、この利用者はコモンズでブロックされています。</string>
|
||||
<string name="login_failed_2fa_needed">2 要素認証コードを提供する必要があります。</string>
|
||||
<string name="login_failed_generic">ログイン失敗</string>
|
||||
<string name="share_upload_button">アップロード</string>
|
||||
<string name="multiple_share_base_title">このセットに名前をつけてください</string>
|
||||
|
|
@ -150,8 +151,10 @@
|
|||
<string name="become_a_tester_description">Google Playのベータ版チャンネルにオプトインして、新機能やバグ修正プログラムに早期にアクセス</string>
|
||||
<string name="use_wikidata">ウィキデータを使用してください</string>
|
||||
<string name="use_wikidata_summary">(警告:これを無効にすると、モバイルデータを大量に消費する可能性があります)</string>
|
||||
<string name="_2fa_code">2FA コード</string>
|
||||
<string name="number_of_uploads">最近のアップロードファイルに表示する最大件数</string>
|
||||
<string name="maximum_limit">最大限</string>
|
||||
<string name="maximum_limit_alert">500 以上の項目を表示できません</string>
|
||||
<string name="set_limit">最近のアップロードファイルに表示する最大件数</string>
|
||||
<string name="login_failed_2fa_not_supported">2段階認証は現在サポートされていません。</string>
|
||||
<string name="logout_verification">ログアウトしてもよろしいですか?</string>
|
||||
|
|
@ -186,9 +189,9 @@
|
|||
<string name="give_permission">権限を取得</string>
|
||||
<string name="use_external_storage">外部ストレージを使用</string>
|
||||
<string name="use_external_storage_summary">アプリ内のカメラで撮影した写真を端末に保存する</string>
|
||||
<string name="login_to_your_account">自分のアカウントにログイン</string>
|
||||
<string name="send_log_file">ログファイルを送信する</string>
|
||||
<string name="send_log_file_description">メールで開発者にログファイルを送信する</string>
|
||||
<string name="login_to_your_account">自分のアカウントにログイン</string>
|
||||
<string name="nearby_location_has_not_changed">場所は変更されていません。</string>
|
||||
<string name="nearby_location_not_available">位置が無効です。</string>
|
||||
</resources>
|
||||
|
|
|
|||
|
|
@ -202,9 +202,9 @@
|
|||
<string name="give_permission">Mudd tasiregt</string>
|
||||
<string name="use_external_storage">Seqdec asekles azɣaray</string>
|
||||
<string name="use_external_storage_summary">Sekles tiwlafin yettwaṭṭfen s tkamirat yellan deg ibenk</string>
|
||||
<string name="login_to_your_account">Qqen ar umiḍan-ik</string>
|
||||
<string name="send_log_file">Azen afaylu n uɣmis</string>
|
||||
<string name="send_log_file_description">Azen afaylu n uɣmis i yinermisen s yimayl</string>
|
||||
<string name="login_to_your_account">Qqen ar umiḍan-ik</string>
|
||||
<string name="nearby_location_has_not_changed">Adeg ur ibeddel ara.</string>
|
||||
<string name="nearby_location_not_available">Ulac adeg</string>
|
||||
<string name="location_permission_rationale_nearby">Ilaq usireg i uskan tabdart n wadigen iqerben</string>
|
||||
|
|
|
|||
|
|
@ -197,9 +197,9 @@
|
|||
<string name="give_permission">권한 부여</string>
|
||||
<string name="use_external_storage">외부 저장소 사용하기</string>
|
||||
<string name="use_external_storage_summary">장치의 인앱 카메라로 찍은 사진 저장하기</string>
|
||||
<string name="login_to_your_account">자신의 계정으로 로그인</string>
|
||||
<string name="send_log_file">로그 파일 보내기</string>
|
||||
<string name="send_log_file_description">이메일로 개발자에게 로그 파일 보내기</string>
|
||||
<string name="login_to_your_account">자신의 계정으로 로그인</string>
|
||||
<string name="nearby_location_has_not_changed">위치가 변경되지 않았습니다.</string>
|
||||
<string name="nearby_location_not_available">위치를 사용할 수 없습니다.</string>
|
||||
<string name="location_permission_rationale_nearby">주변 장소의 목록을 표시하기 위한 권한이 필요합니다.</string>
|
||||
|
|
|
|||
|
|
@ -189,9 +189,9 @@
|
|||
<string name="give_permission">Autorisatioun ginn</string>
|
||||
<string name="use_external_storage">Externe Späicher benotzen</string>
|
||||
<string name="use_external_storage_summary">Biller späicheren déi mat der in-app Kamera vun Ärem Apparat gemaach goufen</string>
|
||||
<string name="login_to_your_account">An Äre Benotzerkont aloggen</string>
|
||||
<string name="send_log_file">Log-Fichier schécken</string>
|
||||
<string name="send_log_file_description">Log-Fichier per E-Mail un d\'Entwéckler schécken</string>
|
||||
<string name="login_to_your_account">An Äre Benotzerkont aloggen</string>
|
||||
<string name="nearby_location_has_not_changed">De Plaz huet net geännert.</string>
|
||||
<string name="nearby_location_not_available">Plaz ass net disponibel.</string>
|
||||
<string name="read_article">ARTIKEL LIESEN</string>
|
||||
|
|
|
|||
|
|
@ -199,12 +199,14 @@
|
|||
<string name="error_while_cache">Грешка при меѓускладирање на сликите</string>
|
||||
<string name="title_info">Краток и единствен наслов на податотеката, кој ќе служи како нејзин назив. Можете да користите прост јазик со меѓупростор, но не пишувајте ја податотечната наставка</string>
|
||||
<string name="description_info">Објаснете ја податотеката што подобро можете: Каде е направена? Што е прикажано на неа? Кој е контекстот? Опишете ги предметите, објектите и личностите. Дајте сознанија што не можат лесно да се погодат, како на пр. време од денот ако се работи за природен предел. Ако на неа е претставено нешто необично, објаснете зошто прикажаното е необично.</string>
|
||||
<string name="upload_image_too_dark">Сликата ви е претемна. Дали сигурно сакате да ја подигнете? Ризницата е посветена само на слики со енциклопедиска вредност.</string>
|
||||
<string name="upload_image_blurry">Сликата ви е матна. Дали сигурно сакате да ја подигнете? Ризницата е посветена само на слики со енциклопедиска вредност.</string>
|
||||
<string name="give_permission">Дај дозвола</string>
|
||||
<string name="use_external_storage">Користи надворешен склад</string>
|
||||
<string name="use_external_storage_summary">Зачувување на направените слики во прилогот со камерата на вашиот уред</string>
|
||||
<string name="login_to_your_account">Најавете се со вашата сметка</string>
|
||||
<string name="send_log_file">Испрати дневничка податотека</string>
|
||||
<string name="send_log_file_description">Испрати дневничка податотека на разработувачите по е-пошта</string>
|
||||
<string name="login_to_your_account">Најавете се со вашата сметка</string>
|
||||
<string name="nearby_location_has_not_changed">Местоположбата не е сменета.</string>
|
||||
<string name="nearby_location_not_available">Местоположбата е недостапна.</string>
|
||||
<string name="location_permission_rationale_nearby">Се бара дозвола за приказ на список на околни места</string>
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="app_name">कॉमन्स</string>
|
||||
<string name="menu_settings">मांडण्या</string>
|
||||
<string name="menu_settings">सेटिंग्स</string>
|
||||
<string name="username">सदस्यनाव</string>
|
||||
<string name="password">परवलीचा शब्द(पासवर्ड)</string>
|
||||
<string name="login">सनोंद-प्रवेश करा</string>
|
||||
|
|
@ -20,12 +20,12 @@
|
|||
<string name="upload_progress_notification_title_finishing">%1$s अपभारण पूर्ण करीत आहे</string>
|
||||
<string name="upload_failed_notification_title">%1$s अपभारण अयशस्वी</string>
|
||||
<string name="upload_failed_notification_subtitle">बघण्यास अलगद टपली मारा</string>
|
||||
<plurals name="uploads_pending_notification_indicator" fuzzy="true">
|
||||
<item quantity="one">१ संचिका अपभारीत आहे</item>
|
||||
<item quantity="other">%1$d संचिका अपभारीत आहे</item>
|
||||
<plurals name="uploads_pending_notification_indicator">
|
||||
<item quantity="one">१ संचिका अपभारीत होत आहे</item>
|
||||
<item quantity="other">%1$d संचिका अपभारीत होत आहे</item>
|
||||
</plurals>
|
||||
<string name="title_activity_contributions">माझी अपभारणे</string>
|
||||
<string name="contribution_state_queued">प्रतिक्षावलीत ठेवले</string>
|
||||
<string name="contribution_state_queued">रांगेत आहे</string>
|
||||
<string name="contribution_state_failed">अपयशी</string>
|
||||
<string name="contribution_state_in_progress">%1$d%% पूर्ण</string>
|
||||
<string name="contribution_state_starting">अपभारण करीत आहे</string>
|
||||
|
|
@ -41,7 +41,7 @@
|
|||
<string name="login_failed_username">सनोंद प्रवेश अशक्य - कृपया आपले सदस्यनाव तपासा</string>
|
||||
<string name="login_failed_password">सनोंद प्रवेश अशक्य - कृपया आपला परवलीचा शब्द तपासा</string>
|
||||
<string name="login_failed_throttled">अनेक अयशस्वी प्रयत्न.काही मिनीटांनंतर पुन्हा प्रयत्न करा.</string>
|
||||
<string name="login_failed_blocked">माफ करा,कॉमन्सवर हा सदस्य प्रतिबंधित आहे</string>
|
||||
<string name="login_failed_blocked">माफ करा, कॉमन्सवर हा सदस्य प्रतिबंधित आहे</string>
|
||||
<string name="login_failed_2fa_needed">आपण आपल्या दोन कारक प्रमाणिकरण कोड प्रदान करणे आवश्यक आहे.</string>
|
||||
<string name="login_failed_generic">सनोंद प्रवेश अयशस्वी!</string>
|
||||
<string name="share_upload_button">अपभारण करा</string>
|
||||
|
|
@ -50,36 +50,52 @@
|
|||
<string name="menu_upload_single">अपभारण करा</string>
|
||||
<string name="categories_search_text_hint">वर्ग शोधा</string>
|
||||
<string name="menu_save_categories">जतन करा</string>
|
||||
<plurals name="contributions_subtitle" fuzzy="true">
|
||||
<string name="refresh_button">ताजेतवाने करा</string>
|
||||
<string name="gps_disabled">आपल्या मोबाईलचे गिपीएस बंद आहे, तुम्हांला ते चालू करायचे आहे का?</string>
|
||||
<string name="enable_gps">जिपीएस चालू करा</string>
|
||||
<string name="contributions_subtitle_zero">अद्याप काहीही चढवलेले नाही</string>
|
||||
<plurals name="contributions_subtitle">
|
||||
<item quantity="zero">अद्याप अपभारणे नाहीत</item>
|
||||
<item quantity="one">एक अपभारण</item>
|
||||
<item quantity="other">%1$d अपभारणे</item>
|
||||
</plurals>
|
||||
<plurals name="starting_multiple_uploads" fuzzy="true">
|
||||
<plurals name="starting_multiple_uploads">
|
||||
<item quantity="one">१ अपभारण सुरू करीत आहे upload</item>
|
||||
<item quantity="other">%1$d अपभारणे सुरू करीत आहे</item>
|
||||
</plurals>
|
||||
<plurals name="multiple_uploads_title" fuzzy="true">
|
||||
<plurals name="multiple_uploads_title">
|
||||
<item quantity="one">१ अपभारण</item>
|
||||
<item quantity="other">%1$d अपभारणे</item>
|
||||
</plurals>
|
||||
<string name="categories_not_found">%1$s शी जुळणारे कोणतेच वर्ग सापडले नाहीत</string>
|
||||
<string name="categories_skip_explanation" fuzzy="true">विकिमिडिया कॉमन्सवर आपल्या संचिकांना शोधणे सोपी जाण्यासाठी त्यांना वर्ग जोडा.\n\nवर्ग जोडण्यास टंकन सुरू करा.\nही पायरी चुकविण्यास या संदेशावर अलगद टिचका (किंवा बॅक कळ टिचका)</string>
|
||||
<string name="categories_skip_explanation">विकिमिडिया कॉमन्सवर आपल्या संचिकांना शोधणे सोपी जाण्यासाठी त्यांना वर्ग जोडा.\n\nवर्ग जोडण्यास टंकन सुरू करा.\nही पायरी चुकविण्यास या संदेशावर अलगद टिचका (किंवा बॅक कळ टिचका)</string>
|
||||
<string name="categories_activity_title">वर्ग</string>
|
||||
<string name="title_activity_settings">मांडण्या</string>
|
||||
<string name="title_activity_signup">नोंदणी करा</string>
|
||||
<string name="menu_about">आमच्याबद्दल</string>
|
||||
<string name="about_license">विकीमिडीया कॉमन्स अॅप हे एक मुक्तस्त्रोत अॅप असून ते विकीमिडीया समुदायातील स्वयंसेवकांनी आणि अनुदानित सदस्यांकडून निर्माण आणि सांभाळले जाते. विकीमिडीया फ़ांउंडेशनचा ह्या अॅपच्या निर्मिती,सांभाळामध्ये सहभाग नाही.</string>
|
||||
<string name="about_improve">नव्याने तयार करा <a href=\"https://github.com/commons-app/apps-android-commons/issues\">GitHub issue</a> त्रुटी अहवालांसाठी आणि सुचनांसाठी.</string>
|
||||
<string name="about_privacy_policy"><a href=\"https://github.com/commons-app/apps-android-commons/wiki/Privacy-policy\">Privacy policy</a></string>
|
||||
<string name="about_credits"><a href=\"https://github.com/commons-app/apps-android-commons/blob/master/CREDITS\">Credits</a></string>
|
||||
<string name="title_activity_about">च्या विषयी</string>
|
||||
<string name="menu_feedback">प्रतिसाद पाठवा (विपत्राद्वारे)</string>
|
||||
<string name="no_email_client">कोणतेही ईमेल क्लायंट स्थापित नाहीत</string>
|
||||
<string name="provider_categories">अलीकडे वापरलेले वर्ग</string>
|
||||
<string name="waiting_first_sync">प्रथम संकालनाची प्रतीक्षा करीत आहे ...</string>
|
||||
<string name="no_uploads_yet">आपण अद्याप काहीच चित्रे अपभारीत केली नाहीत.</string>
|
||||
<string name="menu_retry_upload">पुन्हा प्रयत्न करा</string>
|
||||
<string name="menu_cancel_upload">रद्द करा</string>
|
||||
<string name="share_license_summary">ही संचिका %1$s या परवान्यांतर्गत राहील</string>
|
||||
<string name="media_upload_policy">हे चित्र इथे चढवत असताना, मी हे घोषीत करतो की हे माझेच काम आहे आणि ह्या कामावर इतर कुणाचाही प्रताधिकार नाही तसेच हे सेल्फ़ी नाहीये, म्हणून हे काम ह्या संकेतांचे पालन करेल <a href=\"https://commons.wikimedia.org/wiki/Commons:Policies_and_guidelines\">Wikimedia Commons policies</a>.</string>
|
||||
<string name="menu_download">अधिभारण करा</string>
|
||||
<string name="preference_license">परवाना</string>
|
||||
<string name="use_previous">मागील शीर्षक/वर्णन वापरा</string>
|
||||
<string name="allow_gps">आपोआप सध्याचे स्थान मिळवा</string>
|
||||
<string name="allow_gps_summary">जर छायाचित्राला जिओटॅग नसल्यास तुम्ही तुमच्या स्थानाची निश्चिती करा जेणे करुन संबंधीत वर्ग सुचवले जातील</string>
|
||||
<string name="preference_theme">रात्रीच्या वेळेच्या व्यवस्था</string>
|
||||
<string name="preference_theme_summary">गडद त्वचा वापरा</string>
|
||||
<string name="license_name_cc_by_sa_four"> Attribution-ShareAlike 3.0</string>
|
||||
<string name="license_name_cc_by_four"> Attribution 3.0</string>
|
||||
<string name="license_name_cc_by_sa"> Attribution-ShareAlike 3.0</string>
|
||||
<string name="license_name_cc_by"> Attribution 3.0</string>
|
||||
<string name="license_name_cc0">CC0</string>
|
||||
|
|
@ -103,10 +119,10 @@
|
|||
<string name="tutorial_2_text">कृपया निव्वळ आपण घेतलेल्या किंवा तयार केलेल्या चित्रांचेच अपभारण करा:</string>
|
||||
<string name="tutorial_2_subtext">- नैसर्गिक गोष्टी (फुले, प्राणी, पर्वत)\n- नित्योपयोगी गोष्टी (दुचाकी, रेल्वे स्थानके)\n- प्रसिद्ध व्यक्ति (आपले महापौर, आपणास भेटलेले ऑलिंपिक खेळाडू)</string>
|
||||
<string name="tutorial_3_text">कृपया अपभारण करू \'\'\'नका\'\'\':</string>
|
||||
<string name="tutorial_3_subtext">-आपल्या किंवा मित्रांच्या सेल्फी\n-आपण आंतरजाल (इंटरनेट) वरुन अधिभारण केलेली चित्रे\n-प्रोप्रायटरी अॲप्सचे स्क्रिनशॉट</string>
|
||||
<string name="tutorial_3_subtext">-आपल्या किंवा मित्रांच्या सेल्फी\n-आपण आंतरजाल (इंटरनेट) वरुन अधिभारण केलेली चित्रे\n-प्रोप्रायटरी अॅप्सचे स्क्रिनशॉट</string>
|
||||
<string name="tutorial_4_text">उदाहरणादाखल अपभारण:</string>
|
||||
<string name="tutorial_4_subtext" fuzzy="true">- शीर्षक: Sydney Opera House\n- वर्णन: Sydney Opera House as viewed from across the bay\n- वर्ग: Sydney Opera House, Sydney Opera House from the west, Sydney Opera House remote views</string>
|
||||
<string name="welcome_wikipedia_text">आपली चित्रे सहभागा. विकिपीडियावरील लेखात जीवंतपणा आणा!</string>
|
||||
<string name="tutorial_4_subtext">- शीर्षक: Sydney Opera House\n- वर्णन: Sydney Opera House as viewed from across the bay\n- वर्ग: Sydney Opera House, Sydney Opera House from the west, Sydney Opera House remote views</string>
|
||||
<string name="welcome_wikipedia_text">आपली चित्रे जोडा. विकिपीडियावरील लेखात जीवंतपणा आणा!</string>
|
||||
<string name="welcome_wikipedia_subtext">विकिपीडियावरची चित्रे विकिमिडिया कॉमन्सवरुन येतात.</string>
|
||||
<string name="welcome_copyright_text">जगातल्या अनेक लोकांना आपल्या चित्राद्वारे शिकता येते.</string>
|
||||
<string name="welcome_copyright_subtext">आपण इंटरनेटवर शोधलेले प्रताधिकारीत साहित्य टाळा तसेच भित्तीपत्रकांची चित्रे, पुस्तकांचे कव्हर इत्यादी.</string>
|
||||
|
|
@ -118,12 +134,87 @@
|
|||
<string name="detail_description_empty">वर्णन नाही.</string>
|
||||
<string name="detail_license_empty">अनोळखी परवाना</string>
|
||||
<string name="menu_refresh">ताजेतवाने करा</string>
|
||||
<string name="read_storage_permission_rationale">परवानगी आवश्यक:बाह्य भंडारण वाचन. याशिवाय अॲप काम करू शकत नाही.</string>
|
||||
<string name="read_storage_permission_rationale">परवानगी आवश्यक:बाह्य भंडारण वाचन. याशिवाय अॅप काम करू शकत नाही.</string>
|
||||
<string name="write_storage_permission_rationale">परवानगी आवश्यक:बाह्य भंडारण वाचन. याशिवाय अॅप काम करू शकत नाही.</string>
|
||||
<string name="location_permission_rationale">ऐच्छिक परवानगी:वर्ग सुचवण्यांसाठी सध्याचे स्थान मिळवा</string>
|
||||
<string name="ok">ठीक आहे</string>
|
||||
<string name="title_activity_nearby">जवळपासची स्थाने</string>
|
||||
<string name="no_nearby">आसपास काहीही सापडले नाही</string>
|
||||
<string name="warning">इशारा</string>
|
||||
<string name="file_exists">ही संचिका पूर्वीच कॉमन्सवर उपलब्ध आहे. आपणास पुढे जायचे याची निश्चिती करता काय?</string>
|
||||
<string name="yes">होय</string>
|
||||
<string name="no">नाही</string>
|
||||
<string name="media_detail_title">शीर्षक</string>
|
||||
<string name="media_detail_media_title">माध्यमाचे शिर्षक</string>
|
||||
<string name="media_detail_description">वर्णन</string>
|
||||
<string name="media_detail_description_explanation">माध्यमाची माहिती इथे दिली आहे. ती बरीच मोठी असू शकते, तरीही आम्हांला वाटते ती आपल्या उपयोगाची असावी.</string>
|
||||
<string name="media_detail_uploaded_date">चढवल्याची तारिख</string>
|
||||
<string name="media_detail_license">परवाना</string>
|
||||
<string name="media_detail_coordinates">अक्षांश-रेखांश</string>
|
||||
<string name="media_detail_coordinates_empty">दिलेले नाही</string>
|
||||
<string name="become_a_tester_title">बिटा आवृत्तीचे तपासक बना</string>
|
||||
<string name="become_a_tester_description">गुगल प्ले वरील आमच्या बिटा चॅनलचा पाठलाग करा आणि आमच्या नव्या सेवा-सुविधांचा तसाच त्रुटी-निरसनांचा फ़ायदा घ्या.</string>
|
||||
<string name="use_wikidata">विकीडाटा वापरा</string>
|
||||
<string name="use_wikidata_summary">(ताकीद: हे बंद केल्यामुळे तुम्हांला मोठ्याप्रमाणात डेटा खर्च करावा लागेल)</string>
|
||||
<string name="_2fa_code">2FA कोड</string>
|
||||
<string name="number_of_uploads">माझ्या अलिकडच्या अपभरणाची मर्यादा</string>
|
||||
<string name="maximum_limit">जास्तीची मर्यादा</string>
|
||||
<string name="maximum_limit_alert">५०० पेक्षा जास्त दाखवण्यास असमर्थ</string>
|
||||
<string name="set_limit">माझ्या अलिकडच्या अपभरणाची मर्यादा</string>
|
||||
<string name="login_failed_2fa_not_supported">दोन पायऱ्यांची वैधता तपासणी सध्या उपलब्ध नाही.</string>
|
||||
<string name="logout_verification">काय आपणास खरेच बंद करायचे आहे?</string>
|
||||
<string name="commons_logo">कॉमन्सचे चिन्ह</string>
|
||||
<string name="commons_website">कॉमन्सचे संकेतस्थळ</string>
|
||||
<string name="commons_facebook">कॉमन्सचे फ़ेसबुक पान</string>
|
||||
<string name="commons_github">कॉमन्सचे गिटहब स्त्रोत कोड</string>
|
||||
<string name="background_image">पार्श्वभूमी चित्र</string>
|
||||
<string name="mediaimage_failed"> चित्र माध्यमे कोसळली</string>
|
||||
<string name="no_image_found">कोणतेही चित्र सापडले नाही</string>
|
||||
<string name="upload_image">चित्र अपभारीत करा</string>
|
||||
<string name="welcome_image_mount_zao">जाओ जान पर्वत</string>
|
||||
<string name="welcome_image_llamas">लामा</string>
|
||||
<string name="welcome_image_rainbow_bridge">रेनबो पूल</string>
|
||||
<string name="welcome_image_tulip">टुलिप</string>
|
||||
<string name="welcome_image_no_selfies">सेल्फ़ी चालणार नाहीत</string>
|
||||
<string name="welcome_image_proprietary">मालकी हक्क प्रतिमा</string>
|
||||
<string name="welcome_image_welcome_wikipedia">विकीपिडीयात स्वागत आहे</string>
|
||||
<string name="welcome_image_welcome_copyright">प्रताधिकार स्वागत आहे</string>
|
||||
<string name="welcome_image_sydney_opera_house">सिडनीचे ओपेरा हाऊस</string>
|
||||
<string name="cancel">रद्द करा</string>
|
||||
<string name="navigation_drawer_open">उघडा</string>
|
||||
<string name="navigation_drawer_close">बंद करा</string>
|
||||
<string name="navigation_item_home">मुख्य</string>
|
||||
<string name="navigation_item_upload">अपभारण करा</string>
|
||||
<string name="navigation_item_nearby">जवळपास</string>
|
||||
<string name="navigation_item_about">आमच्याबद्दल</string>
|
||||
<string name="navigation_item_settings">सेटिंग्स</string>
|
||||
<string name="navigation_item_feedback">प्रतिक्रिया</string>
|
||||
<string name="navigation_item_logout">बाहेर पडा</string>
|
||||
<string name="navigation_item_info">माहिती पुस्तिका</string>
|
||||
<string name="navigation_item_notification">अधिसूचना</string>
|
||||
<string name="nearby_needs_permissions">लोकेशन सेवा वापराची परवानगी दिल्याशिवाय जवळपासची ठिकाणे दाखवली जाउ शकत नाहीत.</string>
|
||||
<string name="no_description_found">कोणतीही माहिती सापडली नाही</string>
|
||||
<string name="nearby_info_menu_commons_article">कॉमन्स फ़ाईलचे पान</string>
|
||||
<string name="nearby_info_menu_wikidata_article">विकिबेस कलम</string>
|
||||
<string name="error_while_cache">चित्र दाखवताना त्रुटी आढळली</string>
|
||||
<string name="title_info">फ़ाईलला असे नाव द्या जे सुयोग्य असेल,चित्राविषयी त्यामधून माहिती कळेल अशी साधी भाषा वापरा,नावामध्ये फ़ाईलचे एक्सटेन्शन लिहू नका.</string>
|
||||
<string name="description_info">माध्यमांची शक्य तितकी जास्त माहिती द्या:छायाचित्र/चलचित्र/ध्वनिमुद्रण कोठे घेतले आहे? त्यात काय दाखवले आहे? त्या माध्यमांचा संदर्भ काय? त्यातील वस्तू,व्यक्ति व इतर माहिती द्या? अशी सगळी माहिती जी त्या माध्यमाकडे पाहून लक्षात येणार नाही पण ती महत्वाचे आहे ती सर्व पुरवा. जर त्या माध्यमामध्ये काहीही वेगळे दिसत असेल तर ते वेगळे का आहे याची माहिती पुरवा.</string>
|
||||
<string name="upload_image_too_dark">हे छायाचित्र खुप अंधारलेले आहे, तुम्ही खरच हे छायाचित्र येथे चढवू इच्छीता का? विकीमिडीया कॉमन्सवर नेहमी विश्वकोषात महत्त्वाची असलेलीच चित्रे चढवली जाऊ शकतात.</string>
|
||||
<string name="upload_image_blurry">हे छायाचित्र खुप फ़िकट आलेले आहे, तुम्ही खरच हे छायाचित्र येथे चढवू इच्छीता का? विकीमिडीया कॉमन्सवर नेहमी विश्वकोषात महत्त्वाची असलेलीच चित्रे चढवली जाऊ शकतात.</string>
|
||||
<string name="give_permission">परवानगी द्या</string>
|
||||
<string name="use_external_storage">बाहेरील स्टोरेज वापरा</string>
|
||||
<string name="use_external_storage_summary">आपल्या डिव्हाइसवरील इन-अॅप्स कॅमेर्यासह घेतलेली चित्रे जतन करा</string>
|
||||
<string name="login_to_your_account">तुमच्या खात्यावरुन सनोंद प्रवेश करा</string>
|
||||
<string name="send_log_file">लॉग फ़ाईल पाठवा</string>
|
||||
<string name="send_log_file_description">विकसकांना लॉग फ़ाईल विपत्राने पाठवा</string>
|
||||
<string name="nearby_location_has_not_changed">लोकेशन बदलली नाहीये.</string>
|
||||
<string name="nearby_location_not_available">ही लोकेशन उपलब्ध नाही</string>
|
||||
<string name="location_permission_rationale_nearby">जवळपासच्या ठिकाणांची यादी दाखवण्यासाठी आपली परवानगी आवश्यक आहे</string>
|
||||
<string name="get_directions">दिशानिर्देश मिळवा</string>
|
||||
<string name="read_article">लेख वाचा</string>
|
||||
<string name="notifications_welcome">विकीमिडीया कॉमन्समध्ये आपले स्वागत आहे,%1$s! आम्हांला आनंद आहे आपण इथे आलात.</string>
|
||||
<string name="notifications_talk_page_message">%1$s यांनी तुमच्या चर्चापानावर संदेश टाकला</string>
|
||||
<string name="notifications_thank_you_edit">तुमच्या संपादनासाठी तुमचे आभार !</string>
|
||||
<string name="notifications_mention">%1$s यांनी तुमचा उल्लेख %2$s येथे केला.</string>
|
||||
<string name="toggle_view_button">टॉगल दृश्य</string>
|
||||
</resources>
|
||||
|
|
|
|||
|
|
@ -20,7 +20,7 @@
|
|||
<string name="upload_progress_notification_title_finishing">Avslutter opplasting av %1$s</string>
|
||||
<string name="upload_failed_notification_title">Opplastingen av %1$s feilet</string>
|
||||
<string name="upload_failed_notification_subtitle">Trykk for å vise</string>
|
||||
<plurals name="uploads_pending_notification_indicator" fuzzy="true">
|
||||
<plurals name="uploads_pending_notification_indicator">
|
||||
<item quantity="one">%1$d fil lastes opp</item>
|
||||
<item quantity="other">%1$d filer lastes opp</item>
|
||||
</plurals>
|
||||
|
|
@ -54,7 +54,7 @@
|
|||
<string name="gps_disabled">GPS er slått av på denne enheten. Ønsker du å slå den på?</string>
|
||||
<string name="enable_gps">Slå på GPS</string>
|
||||
<string name="contributions_subtitle_zero">Ingen opplastinger ennå</string>
|
||||
<plurals name="contributions_subtitle" fuzzy="true">
|
||||
<plurals name="contributions_subtitle">
|
||||
<item quantity="zero">\@string/contributions_subtitle_zero</item>
|
||||
<item quantity="one">%1$d opplasting</item>
|
||||
<item quantity="other">%1$d opplastinger</item>
|
||||
|
|
@ -63,7 +63,7 @@
|
|||
<item quantity="one">Starter %1$d opplasting</item>
|
||||
<item quantity="other">Starter %1$d opplastinger</item>
|
||||
</plurals>
|
||||
<plurals name="multiple_uploads_title" fuzzy="true">
|
||||
<plurals name="multiple_uploads_title">
|
||||
<item quantity="one">%1$d opplasting</item>
|
||||
<item quantity="other">%1$d opplastinger</item>
|
||||
</plurals>
|
||||
|
|
@ -199,12 +199,14 @@
|
|||
<string name="error_while_cache">Feil under mellomlagring av bilder</string>
|
||||
<string name="title_info">En unik beskrivende tittel for fila, som vil fungere som filnavn. Du kan bruke vanlig språk med mellomrom. Ikke ta med filendelsen</string>
|
||||
<string name="description_info">Beskriv bidraget så mye som mulig: Hvor ble det tatt? Hva viser det? Hva er konteksten? Beskriv objektene eller personene. Gi informasjon som ikke kan gjettes lett, for eksempel når på dagen bildet ble tatt om det er et landskapsbilde. Om bildet viser noe uvanlig, forklar hva som gjør det uvanlig.</string>
|
||||
<string name="upload_image_too_dark">Dette bildet er for mørkt, er du sikker på at du ønsker å laste det opp? Wikimedia Commons er kun for bilder med ensyklopedisk verdi.</string>
|
||||
<string name="upload_image_blurry">Dette bildet er uklart, er du sikker på at du ønsker å laste det opp? Wikimedia Commons er bare for bilder med ensyklopedisk verdi.</string>
|
||||
<string name="give_permission">Gi tillatelse</string>
|
||||
<string name="use_external_storage">Bruk ekstern lagring</string>
|
||||
<string name="use_external_storage_summary">Lagre bilder som er tatt med kameraet i appen på enheten din</string>
|
||||
<string name="login_to_your_account">Logg inn med kontoen din</string>
|
||||
<string name="send_log_file">Send loggfil</string>
|
||||
<string name="send_log_file_description">Send loggfil til utviklerne via epost</string>
|
||||
<string name="login_to_your_account">Logg inn med kontoen din</string>
|
||||
<string name="nearby_location_has_not_changed">Stedet har ikke blitt endret.</string>
|
||||
<string name="nearby_location_not_available">Sted ikke tilgjengelig.</string>
|
||||
<string name="location_permission_rationale_nearby">Tillatelse kreves for å vise listen over steder i nærheten</string>
|
||||
|
|
@ -214,4 +216,5 @@
|
|||
<string name="notifications_talk_page_message">%1$s la igjen en beskjed på diskusjonssiden din</string>
|
||||
<string name="notifications_thank_you_edit">Takk for at du har gjort en redigering</string>
|
||||
<string name="notifications_mention">%1$s nevnte deg på %2$s.</string>
|
||||
<string name="toggle_view_button">Skift visning</string>
|
||||
</resources>
|
||||
|
|
|
|||
|
|
@ -199,12 +199,14 @@
|
|||
<string name="error_while_cache">Eror antramentre ch\'as butavo le plance an memòria local</string>
|
||||
<string name="title_info">Un tìtol dëscritiv ùnich për l\'archivi, che a servirà com nòm d\'archivi. A peul dovré un lengagi sempi con djë spassi. Ch\'a ancluda pa l\'estension dl\'archivi</string>
|
||||
<string name="description_info">Për piasì, ch\'a descriva ël mojen mej ch\'a peul: Andoa a l\'é stàit fàit? Për piasì, ch\'a descriva j\'oget o le përson-e. Ch\'a arvela j\'anformassion ch\'a l\'é nen belfé andviné, për esempi l\'ora dël dì, s\'a l\'é un panorama. Si ël mojen a smon cheicòs ëd foravìa, për piasì ch\'a spiega lòn ch\'a lo rend foravìa.</string>
|
||||
<string name="upload_image_too_dark">Sa plancia a l\'é tròp sombra, e-lo sigur ëd vorèj cariela? Wikipedia Comun a l\'é mach për plance con un valor enciclopédich.</string>
|
||||
<string name="upload_image_blurry">Sa plancia a l\'é tërbola, e-lo sigur ëd vorèj cariela? Wikipedia Comun a l\'é mach për plance con un valor enciclopédich.</string>
|
||||
<string name="give_permission">Dé ël përmess</string>
|
||||
<string name="use_external_storage">Dovré n\'anmagasinament estern</string>
|
||||
<string name="use_external_storage_summary">Argistré le plance pijà con la màchina fòto ëd sò angign</string>
|
||||
<string name="login_to_your_account">Ch\'as colega a sò cont</string>
|
||||
<string name="send_log_file">Mandé l\'archivi d\'argistr</string>
|
||||
<string name="send_log_file_description">Mandé l\'archivi d\'argistr ai dësvlupator për pòsta eletrònica</string>
|
||||
<string name="login_to_your_account">Ch\'as colega a sò cont</string>
|
||||
<string name="nearby_location_has_not_changed">Ël leu a l\'é nen cangià.</string>
|
||||
<string name="nearby_location_not_available">Leu nen disponìbil.</string>
|
||||
<string name="location_permission_rationale_nearby">A-i é da manca dël përmess pr\'ësmon-e na lista dij pòst davzin</string>
|
||||
|
|
|
|||
|
|
@ -199,12 +199,14 @@
|
|||
<string name="error_while_cache">Erro durante o cache de imagens</string>
|
||||
<string name="title_info">Um título descritivo exclusivo para o arquivo, que servirá como um nome de arquivo. Você pode usar linguagem simples com espaços. Não inclua a extensão do arquivo</string>
|
||||
<string name="description_info">Por favor, descreva a mídia tanto quanto possível: onde foi tomada? O que isso mostra? Qual é o contexto? Descreva os objetos ou pessoas. Revelar informações que não podem ser facilmente adivinhadas, por exemplo, a hora do dia, se for uma paisagem. Se a mídia mostrar algo incomum, explique o que torna incomum.</string>
|
||||
<string name="upload_image_too_dark">Esta foto está muito escura, você tem certeza de que deseja enviá-la? O Wikimedia Commons é apenas para imagens com valor enciclopédico.</string>
|
||||
<string name="upload_image_blurry">Esta foto está embaçada, tem certeza de que deseja enviá-la? O Wikimedia Commons é apenas para imagens com valor enciclopédico.</string>
|
||||
<string name="give_permission">Dar permissão</string>
|
||||
<string name="use_external_storage">Usar o armazenamento externo</string>
|
||||
<string name="use_external_storage_summary">Salvar as fotos tiradas com a câmera no aplicativo no seu dispositivo</string>
|
||||
<string name="login_to_your_account">Faça login na sua conta</string>
|
||||
<string name="send_log_file">Enviar arquivo de registro</string>
|
||||
<string name="send_log_file_description">Enviar arquivo de log para desenvolvedores por e-mail</string>
|
||||
<string name="login_to_your_account">Faça login na sua conta</string>
|
||||
<string name="nearby_location_has_not_changed">O local não mudou.</string>
|
||||
<string name="nearby_location_not_available">Localização não disponível.</string>
|
||||
<string name="location_permission_rationale_nearby">Permissão necessária para exibir uma lista de locais próximos</string>
|
||||
|
|
|
|||
|
|
@ -199,12 +199,14 @@
|
|||
<string name="error_while_cache">Erro ao colocar imagens na cache</string>
|
||||
<string name="title_info">Um título descritivo exclusivo para o ficheiro, que servirá como um nome de ficheiro. Pode utilizar uma linguagem simples com espaços. Não inclua a extensão do ficheiro</string>
|
||||
<string name="description_info">Por favor, descreva o ficheiro da melhor forma possível: Onde foi tirado? O que isso mostra? Qual é o contexto? Por favor, descreva os objetos ou as pessoas. Indique as informações que não podem ser facilmente adivinhadas, por exemplo, a hora do dia, se for uma paisagem. Se o ficheiro mostrar algo incomum, explique o que torna incomum.</string>
|
||||
<string name="upload_image_too_dark">Esta imagem está demasiada escura, tem a certeza de que deseja carregá-la? O Wikimedia Commons só aceita as imagens de valor enciclopédico.</string>
|
||||
<string name="upload_image_blurry">Esta imagem está desfocada, tem a certeza de que deseja carregá-la? O Wikimedia Commons serve apenas para imagens de valor enciclopédico.</string>
|
||||
<string name="give_permission">Permitir</string>
|
||||
<string name="use_external_storage">Utilizar a armazenagem externa</string>
|
||||
<string name="use_external_storage_summary">Gravar as fotografias tiradas com a câmara da aplicação no seu dispositivo</string>
|
||||
<string name="login_to_your_account">Inicie sessão na sua conta</string>
|
||||
<string name="send_log_file">Enviar ficheiro de registo</string>
|
||||
<string name="send_log_file_description">Enviar o ficheiro de registo aos programadores por correio eletrónico</string>
|
||||
<string name="login_to_your_account">Inicie sessão na sua conta</string>
|
||||
<string name="nearby_location_has_not_changed">A localização não foi alterada.</string>
|
||||
<string name="nearby_location_not_available">A localização não está disponível.</string>
|
||||
<string name="location_permission_rationale_nearby">É necessária a permissão para mostrar uma lista dos sítios aqui perto</string>
|
||||
|
|
|
|||
|
|
@ -203,12 +203,14 @@
|
|||
<string name="error_while_cache">Ошибка при кэшировании картинок</string>
|
||||
<string name="title_info">Уникальное описание, которое будет сохранено как имя файла. Вы можете использовать естественный язык, разделяя слова пробелами. Пожалуйста, не указывайте расширение файла.</string>
|
||||
<string name="description_info">Пожалуйста, подробно опишите загружаемый файл: где он был снят? что на нём изображено? каков его контекст? Пожалуйста опишите изображённых персон или объекты. Добавьте информацию, о которой нельзя легко догадаться, например, время суток, когда снимался файл. Если снято что-то необычное, постарайтесь пояснить, что именно в этом необычного.</string>
|
||||
<string name="upload_image_too_dark">Это изображение слишком тёмное. Вы уверены, что хотите его загрузить? Викисклад подходит только для фотографий, имеющих энциклопедическую ценность.</string>
|
||||
<string name="upload_image_blurry">Это изображение размыто. Вы уверены, что хотите его загрузить? Викисклад подходит только для фотографий, имеющих энциклопедическую ценность.</string>
|
||||
<string name="give_permission">Дать разрешение</string>
|
||||
<string name="use_external_storage">Использовать внешнее хранилище</string>
|
||||
<string name="use_external_storage_summary">Сохранять изображения, сделанные с помощью встроенной камеры на устройстве</string>
|
||||
<string name="login_to_your_account">Войдите в свою учётную запись</string>
|
||||
<string name="send_log_file">Выслать лог-файл</string>
|
||||
<string name="send_log_file_description">Выслать лог-файл разработчикам по е-мейлу</string>
|
||||
<string name="login_to_your_account">Войдите в свою учётную запись</string>
|
||||
<string name="nearby_location_has_not_changed">Местоположение не изменено.</string>
|
||||
<string name="nearby_location_not_available">Местоположение недоступно.</string>
|
||||
<string name="location_permission_rationale_nearby">Необходимо разрешение для отображения списка мест поблизости</string>
|
||||
|
|
|
|||
|
|
@ -176,9 +176,9 @@
|
|||
<string name="give_permission">اجازت ڏيو</string>
|
||||
<string name="use_external_storage">ٻاھري سنڀار استعمال ڪريو</string>
|
||||
<string name="use_external_storage_summary">ايپ ۾ ڪئمرا سان ڪڍيل تصويرون پنھنجي ڊوائيس تي سانڍيو</string>
|
||||
<string name="login_to_your_account">پنھنجي کاتي ۾ داخل ٿيو</string>
|
||||
<string name="send_log_file">لاگ فائيل موڪليو</string>
|
||||
<string name="send_log_file_description">لاگ فائيل سرجڻھارن کي برقٽپال ذريعي موڪليو</string>
|
||||
<string name="login_to_your_account">پنھنجي کاتي ۾ داخل ٿيو</string>
|
||||
<string name="nearby_location_has_not_changed">مڪانيت تبديلي ناھي ٿي.</string>
|
||||
<string name="nearby_location_not_available">مڪانيت موجود ناھي.</string>
|
||||
<string name="location_permission_rationale_nearby">ويجھين جڳھن جي فھرست ڏيکارڻ لاءِ اجازت گھربل آھي</string>
|
||||
|
|
|
|||
|
|
@ -106,6 +106,6 @@
|
|||
<string name="navigation_item_info">ٹیٹوریل</string>
|
||||
<string name="nearby_info_menu_wikidata_article">وکی ڈیٹا آئٹم</string>
|
||||
<string name="give_permission">اجازت ݙیوو</string>
|
||||
<string name="send_log_file">لاگ فائل بھیجو</string>
|
||||
<string name="login_to_your_account">آپݨے کھاتے وچ لاگ ان تھیوو</string>
|
||||
<string name="send_log_file">لاگ فائل بھیجو</string>
|
||||
</resources>
|
||||
|
|
|
|||
|
|
@ -54,12 +54,12 @@
|
|||
<string name="gps_disabled">GPS је онемогућен на Вашем уређају. Желите ли га омогућити?</string>
|
||||
<string name="enable_gps">Омогући GPS</string>
|
||||
<string name="contributions_subtitle_zero">Још увек нема отпремања</string>
|
||||
<plurals name="contributions_subtitle" fuzzy="true">
|
||||
<plurals name="contributions_subtitle">
|
||||
<item quantity="zero">\@string/contributions_subtitle_zero</item>
|
||||
<item quantity="one">%1$d отпремање</item>
|
||||
<item quantity="other">%1$d отпремања</item>
|
||||
</plurals>
|
||||
<plurals name="starting_multiple_uploads" fuzzy="true">
|
||||
<plurals name="starting_multiple_uploads">
|
||||
<item quantity="one">Започни %1$d отпремање</item>
|
||||
<item quantity="other">Започни %1$d отпремања</item>
|
||||
</plurals>
|
||||
|
|
@ -74,7 +74,7 @@
|
|||
<string name="title_activity_signup">Отвори налог</string>
|
||||
<string name="menu_about">О апликацији</string>
|
||||
<string name="about_license">Софтвер отвореног кода доступан под лиценцом <a href=\"https://github.com/commons-app/apps-android-commons/blob/master/COPYING\">Apache вер. 2</a> Викимедијина Остава и њен лого су заштитни знаци Викимедијине Фондације и користе се са дозволом Викимедијине Фондацине. Ми не одобравамо или подржавмо Викимедијину Фондацију.\n\nАпликација за Викимедијину оставу је апликација отвореног кода која је направљена и која се одржава помоћу грантова и волонтера Викимедијине заједнице. Задужбина Викимедија није укључена у стварање, развој или одржавање апликације.</string>
|
||||
<string name="about_improve" fuzzy="true"><a href=\"https://github.com/commons-app/apps-android-commons\">Изворни кôд</a> и <a href=\"https://commons-app.github.io/\">веб-сајт</a> на GitHub-у. Направите нови <a href=\"https://github.com/commons-app/apps-android-commons/issues\">захтев на GitHub-у</a> да бисте пријавили грешке или дали предлоге.</string>
|
||||
<string name="about_improve">Направите нови <a href=\"https://github.com/commons-app/apps-android-commons/issues\">захтев на GitHub-у</a> да бисте пријавили грешке или дали предлоге.</string>
|
||||
<string name="about_privacy_policy"><a href=\"https://github.com/commons-app/apps-android-commons/wiki/Privacy-policy\">Политика приватности</a></string>
|
||||
<string name="about_credits"><a href=\"https://github.com/commons-app/apps-android-commons/blob/master/CREDITS\">Заслуге</a></string>
|
||||
<string name="title_activity_about">О апликацији</string>
|
||||
|
|
@ -164,6 +164,9 @@
|
|||
<string name="login_failed_2fa_not_supported">Двофакторска аутентификација тренутно није подржана.</string>
|
||||
<string name="logout_verification">Заиста желите да се одјавите?</string>
|
||||
<string name="commons_logo">Лого Оставе</string>
|
||||
<string name="commons_website">Веб-сајт Оставе</string>
|
||||
<string name="commons_facebook">Фејсбук страница Оставе</string>
|
||||
<string name="commons_github">Изворни код на Github-у</string>
|
||||
<string name="background_image">Позадинска слика</string>
|
||||
<string name="mediaimage_failed">Медијска слика неуспешна</string>
|
||||
<string name="no_image_found">Нисам пронашла слику</string>
|
||||
|
|
@ -199,12 +202,14 @@
|
|||
<string name="give_permission">Давање дозволе</string>
|
||||
<string name="use_external_storage">Употреба спољашње меморије</string>
|
||||
<string name="use_external_storage_summary">Спремање слика направљених камером апликације на Вашем уређају</string>
|
||||
<string name="login_to_your_account">Пријавите се на Ваш налог</string>
|
||||
<string name="send_log_file">Пошаљи дневничку датотеку</string>
|
||||
<string name="send_log_file_description">Пошаљи дневничку датотеку девелоперима преко имејла</string>
|
||||
<string name="login_to_your_account">Пријавите се на Ваш налог</string>
|
||||
<string name="nearby_location_has_not_changed">Локација није промењена.</string>
|
||||
<string name="nearby_location_not_available">Локација није доступна.</string>
|
||||
<string name="location_permission_rationale_nearby">Потребна је дозвола за приказивање листе локација у близини</string>
|
||||
<string name="get_directions">Добити упутства</string>
|
||||
<string name="read_article">Прочитај чланак</string>
|
||||
<string name="notifications_thank_you_edit">Хвала Вам за прављење измене</string>
|
||||
<string name="toggle_view_button">Пребаци приказ</string>
|
||||
</resources>
|
||||
|
|
|
|||
|
|
@ -198,7 +198,7 @@
|
|||
<string name="give_permission">Béré idin</string>
|
||||
<string name="use_external_storage">Paké panyimpenan éksternal</string>
|
||||
<string name="use_external_storage_summary">Simpen gambar nu nyomotna ku aplikasi kaména na parangkat anjeun</string>
|
||||
<string name="login_to_your_account">Asup log kana akun anjeun</string>
|
||||
<string name="send_log_file">Kirim berkas log</string>
|
||||
<string name="send_log_file_description">Kirim berkas log ka pamekar liwat surélék</string>
|
||||
<string name="login_to_your_account">Asup log kana akun anjeun</string>
|
||||
</resources>
|
||||
|
|
|
|||
|
|
@ -199,12 +199,14 @@
|
|||
<string name="error_while_cache">Fel uppstod när bilder cachelagras</string>
|
||||
<string name="title_info">En unik beskrivande titel för filen, som kommer att fungera som ett filnamn. Du kan använda klarspråk med mellanslag. Ta inte med filändelsen</string>
|
||||
<string name="description_info">Beskriv mediafilen så mycket som möjligt. Var togs den? Vad visar den? Vad är sammanhanget? Beskriv föremålen eller personerna. Ge information som inte kan gissas fram, t.ex. tidpunkten om det är ett landskap. Om mediafilen visar någonting ovanligt, förklara vad som gör den ovanlig.</string>
|
||||
<string name="upload_image_too_dark">Denna bild är för mörk, är du säker på att du vill ladda upp den? Wikimedia Commons är endast till för bilder med encyklopediskt värde.</string>
|
||||
<string name="upload_image_blurry">Denna bild är suddig, är du säker på att du vill ladda upp den? Wikimedia Commons är endast till för bilder med encyklopediskt värde.</string>
|
||||
<string name="give_permission">Ge behörighet</string>
|
||||
<string name="use_external_storage">Använd extern lagring</string>
|
||||
<string name="use_external_storage_summary">Spara bilder som tas med kameran i appen på din enhet</string>
|
||||
<string name="login_to_your_account">Logga in på ditt konto</string>
|
||||
<string name="send_log_file">Skicka loggfil</string>
|
||||
<string name="send_log_file_description">Skicka loggfilen till utvecklarna via e-post</string>
|
||||
<string name="login_to_your_account">Logga in på ditt konto</string>
|
||||
<string name="nearby_location_has_not_changed">Platsen har inte ändrats.</string>
|
||||
<string name="nearby_location_not_available">Platsen är inte tillgänglig.</string>
|
||||
<string name="location_permission_rationale_nearby">Behörighet krävs för att visa en lista över platser i närheten</string>
|
||||
|
|
|
|||
|
|
@ -199,9 +199,9 @@
|
|||
<string name="give_permission">İzin ver</string>
|
||||
<string name="use_external_storage">Harici depolamayı kullanın</string>
|
||||
<string name="use_external_storage_summary">Uygulama kamerası kullanıldığında çekilen fotoğrafları cihazına kaydedin</string>
|
||||
<string name="login_to_your_account">Hesabınızda oturum açın</string>
|
||||
<string name="send_log_file">Kayıt dosyasını gönder</string>
|
||||
<string name="send_log_file_description">Kayıt dosyasını, e-posta aracılığıyla geliştiricilere gönderin</string>
|
||||
<string name="login_to_your_account">Hesabınızda oturum açın</string>
|
||||
<string name="nearby_location_has_not_changed">Konum değiştirilmedi</string>
|
||||
<string name="nearby_location_not_available">Konum kullanılamıyor.</string>
|
||||
<string name="location_permission_rationale_nearby">Yakındaki yerler listesini görüntülemek için izin vermeniz gerekiyor</string>
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="app_name" fuzzy="true">ۋىكى ۋاستە ھەمبەھىر</string>
|
||||
<string name="app_name">بايلىق ھەمبەھىرلەش</string>
|
||||
<string name="menu_settings">تەڭشەكلەر</string>
|
||||
<string name="username">ئىشلەتكۇچى ئىسمى</string>
|
||||
<string name="password">پارول</string>
|
||||
|
|
@ -20,7 +20,7 @@
|
|||
<string name="upload_progress_notification_title_finishing"> %1$s يۈكلەش تاماملىنىۋاتىدۇ</string>
|
||||
<string name="upload_failed_notification_title">يۈكلىنىۋاتىدۇ %1$s مەغلۇپ بولدى</string>
|
||||
<string name="upload_failed_notification_subtitle">چېكىپ كۆرۈش</string>
|
||||
<string name="title_activity_contributions" fuzzy="true">يۈكلىگەنلىرىم</string>
|
||||
<string name="title_activity_contributions">يىقىندا يوللىغىنىم</string>
|
||||
<string name="contribution_state_queued">ئادەم كىردى</string>
|
||||
<string name="contribution_state_failed">مەغلۇپ بولدى</string>
|
||||
<string name="contribution_state_in_progress">%1$d%% تاماملاندى</string>
|
||||
|
|
@ -54,8 +54,8 @@
|
|||
<string name="menu_cancel_upload">ۋاز كەچ</string>
|
||||
<string name="menu_download">چۈشۈرۈڭ</string>
|
||||
<string name="preference_license">ئىجازەتنامە</string>
|
||||
<string name="license_name_cc_by_sa" fuzzy="true">CC Attribution-ShareAlike 3.0</string>
|
||||
<string name="license_name_cc_by" fuzzy="true">CC Attribution 3.0</string>
|
||||
<string name="license_name_cc_by_sa">ئوخشاش ئىمزالىق ئورتاق ھەمبەھىرلىنىش</string>
|
||||
<string name="license_name_cc_by">ئىمزا قويۇش</string>
|
||||
<string name="license_name_cc0">CC0</string>
|
||||
<string name="license_name_cc_by_sa_3_0">CC BY-SA 3.0</string>
|
||||
<string name="license_name_cc_by_sa_3_0_at">CC BY-SA 3.0 (ئاۋستىرىيە)</string>
|
||||
|
|
@ -70,9 +70,11 @@
|
|||
<string name="license_name_cc_zero">CC0</string>
|
||||
<string name="welcome_final_button_text">ھەئە!</string>
|
||||
<string name="detail_panel_cats_label">تۈرلەر</string>
|
||||
<string name="detail_panel_cats_loading" fuzzy="true">يۈكلەۋاتىدۇ…</string>
|
||||
<string name="detail_panel_cats_loading">يۈكلىنۋاتىدۇ…</string>
|
||||
<string name="detail_panel_cats_none">تاللانمىغان</string>
|
||||
<string name="detail_description_empty">چۈشەندۈرۈلۈشى يوق</string>
|
||||
<string name="detail_license_empty">نامەلۇم ئىجازەت كېلىشىمى</string>
|
||||
<string name="menu_refresh">تولۇق يېڭىلاش</string>
|
||||
<string name="ok">جەزملەش</string>
|
||||
<string name="warning">ئاگاھلاندۇرۇش</string>
|
||||
<string name="yes">ھەئە</string>
|
||||
|
|
|
|||
|
|
@ -207,12 +207,14 @@
|
|||
<string name="error_while_cache">Помилка кешування зображень</string>
|
||||
<string name="title_info">Унікальна описова назва файлу. Ви можете використовувати простий текст з пробілами. Не вказуйте розширення файлу</string>
|
||||
<string name="description_info">Будь ласка, докладно опишіть файл: де його було зроблено? що на ньому зображено? який контекст? Будь ласка, опишіть об\'єкти чи осіб. Додайте інформацію, яку не можна легко здогадатися, наприклад, пору доби для фотографії пейзажу. Якщо зображено щось незвичайне, постарайтеся пояснити, що робить його незвичайним.</string>
|
||||
<string name="upload_image_too_dark">Це зображення надто темне. Ви упевнені, що хочете його завантажити? Вікісховище призначене лише для зображень, що мають енциклопедичну цінність.</string>
|
||||
<string name="upload_image_blurry">Це зображення розмите. Ви упевнені, що хочете його завантажити? Вікісховище призначене лише для зображень, що мають енциклопедичну цінність.</string>
|
||||
<string name="give_permission">Надати дозвіл</string>
|
||||
<string name="use_external_storage">Використовувати зовнішнє сховище</string>
|
||||
<string name="use_external_storage_summary">Зберігати зображення, виконані вбудованою камерою Вашого пристрою</string>
|
||||
<string name="login_to_your_account">Увійдіть у свій обліковий запис</string>
|
||||
<string name="send_log_file">Надіслати лог-файл</string>
|
||||
<string name="send_log_file_description">Надіслати лог-файл розробникам електронною поштою</string>
|
||||
<string name="login_to_your_account">Увійдіть у свій обліковий запис</string>
|
||||
<string name="nearby_location_has_not_changed">Розташування не змінено</string>
|
||||
<string name="nearby_location_not_available">Місцезнаходження недоступне</string>
|
||||
<string name="location_permission_rationale_nearby">Потрібний дозвіл для показу списку місць поблизу</string>
|
||||
|
|
|
|||
6
app/src/main/res/values-yue/error.xml
Normal file
6
app/src/main/res/values-yue/error.xml
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="crash_dialog_title">同享壞咗</string>
|
||||
<string name="crash_dialog_text">哎呀。出咗錯!</string>
|
||||
<string name="crash_dialog_ok_toast">多謝你!</string>
|
||||
</resources>
|
||||
|
|
@ -199,12 +199,14 @@
|
|||
<string name="error_while_cache">在快取圖片時發生錯誤</string>
|
||||
<string name="title_info">用於本檔案的唯一描述性標題。您可以使用帶有空格的簡明語言,另外請不要包含副檔名。</string>
|
||||
<string name="description_info">請盡可能說明媒體內容:拍攝於何處?是顯示什麼事物?有什麼脈絡?請描述對象或人物。透露出一些較不易猜測的訊息,例如是風景的話,可以是一天裡的時間。如果媒體顯示出一些不正常的事物,請說明出造成不正常原因。</string>
|
||||
<string name="upload_image_too_dark">此圖片太暗,您確定您要上傳它嗎?維基共享資源僅適用對於百科全書有價值的圖片。</string>
|
||||
<string name="upload_image_blurry">此圖片太模糊,您確定您要上傳它嗎?維基共享資源僅適用對於百科全書有價值的圖片。</string>
|
||||
<string name="give_permission">給予權限</string>
|
||||
<string name="use_external_storage">使用外部存儲裝置</string>
|
||||
<string name="use_external_storage_summary">在您的裝置上使用照相機應用程式來儲存照片</string>
|
||||
<string name="login_to_your_account">登入您的帳號</string>
|
||||
<string name="send_log_file">寄送日誌檔案</string>
|
||||
<string name="send_log_file_description">經由電子郵件寄送日誌檔案給開發人員</string>
|
||||
<string name="login_to_your_account">登入您的帳號</string>
|
||||
<string name="nearby_location_has_not_changed">位置無法更改。</string>
|
||||
<string name="nearby_location_not_available">位置無效。</string>
|
||||
<string name="location_permission_rationale_nearby">需權限來顯示附近地點清單</string>
|
||||
|
|
|
|||
|
|
@ -199,12 +199,14 @@
|
|||
<string name="error_while_cache">缓存图片时出错</string>
|
||||
<string name="title_info">用于文件的唯一描述性标题,它将作为文件名使用。您可以使用有空格的简明语言。请不要包含文件扩展名</string>
|
||||
<string name="description_info">请尽可能详细地描述媒体:拍摄在何地?显示什么?例文是什么?请描述对象或个人。透露一些不易猜想到的信息,例如这幅风景画的具体日期时间。如果媒体显示了一些不寻常的事物,请说明为什么它显得不寻常。</string>
|
||||
<string name="upload_image_too_dark">此图片太暗,您确定要上传它么?维基共享资源只接受对百科全书有价值的图片。</string>
|
||||
<string name="upload_image_blurry">此图片模糊不清,您确定要上传它么?维基共享资源只接受对百科全书有价值的图片。</string>
|
||||
<string name="give_permission">提供权限</string>
|
||||
<string name="use_external_storage">使用外部存储</string>
|
||||
<string name="use_external_storage_summary">在您的设备上,使用应用中的照相机保存照片</string>
|
||||
<string name="login_to_your_account">登录您的账户</string>
|
||||
<string name="send_log_file">发送日志文件</string>
|
||||
<string name="send_log_file_description">通过电子邮件将日志文件发送给开发人员</string>
|
||||
<string name="login_to_your_account">登录您的账户</string>
|
||||
<string name="nearby_location_has_not_changed">位置没有更新。</string>
|
||||
<string name="nearby_location_not_available">位置不可用。</string>
|
||||
<string name="location_permission_rationale_nearby">需要权限以显示附近地点列表</string>
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@
|
|||
<string name="menu_settings">Settings</string>
|
||||
<string name="username">Username</string>
|
||||
<string name="password">Password</string>
|
||||
<string name="login_credential">Log in to your Commons Beta account</string>
|
||||
<string name="login">Log in</string>
|
||||
<string name="signup">Sign up</string>
|
||||
<string name="logging_in_title">Logging in</string>
|
||||
|
|
@ -77,8 +78,8 @@
|
|||
<string name="about_license">The Wikimedia Commons app is an open-source app created and maintained by grantees and volunteers of the Wikimedia community. The Wikimedia Foundation is not involved in the creation, development, or maintenance of the app. </string>
|
||||
<string name="trademarked_name" translatable="false">Wikimedia Commons</string>
|
||||
<string name="about_improve">Create a new <a href=\"https://github.com/commons-app/apps-android-commons/issues\">GitHub issue</a> for bug reports and suggestions.</string>
|
||||
<string name="about_privacy_policy"><a href=\"https://github.com/commons-app/apps-android-commons/wiki/Privacy-policy\">Privacy policy</a></string>
|
||||
<string name="about_credits"><a href=\"https://github.com/commons-app/apps-android-commons/blob/master/CREDITS\">Credits</a></string>
|
||||
<string name="about_privacy_policy"><u>Privacy policy</u></string>
|
||||
<string name="about_credits"><u>Credits</u></string>
|
||||
<string name="title_activity_about">About</string>
|
||||
<string name="menu_feedback">Send Feedback (via Email)</string>
|
||||
<string name="no_email_client">No email client installed</string>
|
||||
|
|
@ -205,12 +206,14 @@
|
|||
<string name="error_while_cache">Error while caching pictures</string>
|
||||
<string name="title_info">A unique descriptive title for the file, which will serve as a filename. You may use plain language with spaces. Do not include the file extension</string>
|
||||
<string name="description_info">Please describe the media as much as possible: Where was it taken? What does it show? What is the context? Please describe the objects or persons. Reveal information that can not be easily guessed, for instance the time of day if it is a landscape. If the media shows something unusual, please explain what makes it unusual.</string>
|
||||
<string name="upload_image_too_dark">This picture is too dark, are you sure you want to upload it? Wikimedia Commons is only for pictures with encyclopedic value.</string>
|
||||
<string name="upload_image_blurry">This picture is blurry, are you sure you want to upload it? Wikimedia Commons is only for pictures with encyclopedic value.</string>
|
||||
<string name="give_permission">Give permission</string>
|
||||
<string name="use_external_storage">Use external storage</string>
|
||||
<string name="use_external_storage_summary">Save pictures taken with the in-app camera on your device</string>
|
||||
<string name="login_to_your_account">Login to your account</string>
|
||||
<string name="send_log_file">Send log file</string>
|
||||
<string name="send_log_file_description">Send log file to developers via email</string>
|
||||
<string name="login_to_your_account">Login to your account</string>
|
||||
|
||||
<string name="nearby_location_has_not_changed">Location has not changed.</string>
|
||||
<string name="nearby_location_not_available">Location not available.</string>
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue