Merge branch 'master' into dependency-injection
13
.travis.yml
|
|
@ -17,14 +17,17 @@ jdk:
|
|||
|
||||
android:
|
||||
components:
|
||||
- platform-tools
|
||||
- tools
|
||||
- build-tools-26.0.1
|
||||
- platform-tools
|
||||
- build-tools-26.0.2
|
||||
- extra-google-m2repository
|
||||
- extra-android-m2repository
|
||||
- ${ANDROID_TARGET}
|
||||
- android-25
|
||||
- android-26
|
||||
- sys-img-${ANDROID_ABI}-${ANDROID_TARGET}
|
||||
licenses:
|
||||
- 'android-sdk-license-.+'
|
||||
|
||||
before_script:
|
||||
- echo no | android create avd --force -n test -t $ANDROID_TARGET --abi $ANDROID_ABI
|
||||
|
|
@ -38,8 +41,10 @@ after_success:
|
|||
- bash <(curl -s https://codecov.io/bash)
|
||||
|
||||
after_failure:
|
||||
- echo '*** Connected Test Rsults ***'
|
||||
- w3m -dump ${TRAVIS_BUILD_DIR}/app/build/reports/androidTests/connected/*Test.html
|
||||
- echo '*** Debug Unit Test Results ***'
|
||||
- w3m -dump ${TRAVIS_BUILD_DIR}/app/build/reports/tests/*/classes/*Test.html
|
||||
- echo '*** Connected Test Results ***'
|
||||
- w3m -dump ${TRAVIS_BUILD_DIR}/app/build/reports/androidTests/connected/flavors/*/*Test.html
|
||||
|
||||
before_cache:
|
||||
- rm -f $HOME/.gradle/caches/modules-2/modules-2.lock
|
||||
|
|
|
|||
1
CREDITS
|
|
@ -29,6 +29,7 @@ their contribution to the product.
|
|||
* Jan Piotrowski
|
||||
* Bruke Mekuria Mulugeta
|
||||
* Paul Hawke
|
||||
* Vishan Seru
|
||||
|
||||
3rd party open source libraries used:
|
||||
* Butterknife
|
||||
|
|
|
|||
|
|
@ -2,9 +2,7 @@
|
|||
|
||||
The Wikimedia Commons Android app allows users to upload pictures from their Android phone/tablet to Wikimedia Commons. Download the app [here][1], or view our [website][2].
|
||||
|
||||
Initially started by the Wikimedia Foundation, this app is now maintained by volunteers. Anyone is welcome to improve it, just choose among the [open issues][3] and send us a pull request :-)
|
||||
|
||||
We are currently applying for an [IEG renewal][10] to work on the app for the next 6 months. Feedback is very much welcomed.
|
||||
Initially started by the Wikimedia Foundation, this app is now maintained by grantees and volunteers of the Wikimedia community. Anyone is welcome to improve it, just choose among the [open issues][3] and send us a pull request :-)
|
||||
|
||||
<a href="https://f-droid.org/repository/browse/?fdid=fr.free.nrw.commons" target="_blank">
|
||||
<img src="https://f-droid.org/badge/get-it-on.png" alt="Get it on F-Droid" height="90"/></a>
|
||||
|
|
|
|||
104
app/build.gradle
|
|
@ -1,65 +1,75 @@
|
|||
apply from: '../gitutils.gradle'
|
||||
apply plugin: 'com.android.application'
|
||||
apply plugin: 'me.tatarka.retrolambda'
|
||||
apply plugin: 'kotlin-android'
|
||||
apply plugin: 'kotlin-kapt'
|
||||
apply plugin: 'jacoco-android'
|
||||
apply from: 'quality.gradle'
|
||||
apply plugin: 'com.getkeepsafe.dexcount'
|
||||
|
||||
dependencies {
|
||||
compile 'com.github.nicolas-raoul:Quadtree:ac16ea8035bf07'
|
||||
compile 'fr.avianey.com.viewpagerindicator:library:2.4.1.1@aar'
|
||||
compile 'in.yuvi:http.fluent:1.3'
|
||||
compile 'com.android.volley:volley:1.0.0'
|
||||
compile 'ch.acra:acra:4.7.0'
|
||||
compile 'org.mediawiki:api:1.3'
|
||||
compile 'commons-codec:commons-codec:1.10'
|
||||
compile 'com.github.pedrovgs:renderers:3.3.3'
|
||||
compile 'com.google.code.gson:gson:2.8.1'
|
||||
compile 'com.jakewharton.timber:timber:4.5.1'
|
||||
compile 'info.debatty:java-string-similarity:0.24'
|
||||
compile ('com.mapbox.mapboxsdk:mapbox-android-sdk:5.1.0@aar'){
|
||||
implementation 'com.github.nicolas-raoul:Quadtree:ac16ea8035bf07'
|
||||
implementation 'fr.avianey.com.viewpagerindicator:library:2.4.1.1@aar'
|
||||
implementation 'in.yuvi:http.fluent:1.3'
|
||||
implementation 'com.android.volley:volley:1.0.0'
|
||||
implementation 'ch.acra:acra:4.7.0'
|
||||
implementation 'org.mediawiki:api:1.3'
|
||||
implementation 'commons-codec:commons-codec:1.10'
|
||||
implementation 'com.github.pedrovgs:renderers:3.3.3'
|
||||
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.1.0@aar'){
|
||||
transitive=true
|
||||
}
|
||||
|
||||
compile "com.android.support:support-v4:${project.supportLibVersion}"
|
||||
compile "com.android.support:appcompat-v7:${project.supportLibVersion}"
|
||||
compile "com.android.support:design:${project.supportLibVersion}"
|
||||
|
||||
compile "com.android.support:cardview-v7:${project.supportLibVersion}"
|
||||
implementation "com.android.support:support-v4:${project.supportLibVersion}"
|
||||
implementation "com.android.support:appcompat-v7:${project.supportLibVersion}"
|
||||
implementation "com.android.support:design:${project.supportLibVersion}"
|
||||
|
||||
compile "com.jakewharton:butterknife:$BUTTERKNIFE_VERSION"
|
||||
annotationProcessor "com.jakewharton:butterknife-compiler:$BUTTERKNIFE_VERSION"
|
||||
implementation "com.android.support:cardview-v7:${project.supportLibVersion}"
|
||||
|
||||
compile 'com.squareup.okhttp3:okhttp:3.8.1'
|
||||
compile 'com.squareup.okio:okio:1.13.0'
|
||||
implementation "com.jakewharton:butterknife:$BUTTERKNIFE_VERSION"
|
||||
kapt "com.jakewharton:butterknife-compiler:$BUTTERKNIFE_VERSION"
|
||||
|
||||
compile 'io.reactivex.rxjava2:rxandroid:2.0.1'
|
||||
implementation 'com.squareup.okhttp3:okhttp:3.8.1'
|
||||
implementation 'com.squareup.okio:okio:1.13.0'
|
||||
|
||||
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'
|
||||
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'
|
||||
implementation 'com.jakewharton.rxbinding2:rxbinding-appcompat-v7:2.0.0'
|
||||
implementation 'com.jakewharton.rxbinding2:rxbinding-design:2.0.0'
|
||||
|
||||
compile 'com.facebook.fresco:fresco:1.3.0'
|
||||
compile 'com.facebook.stetho:stetho:1.5.0'
|
||||
implementation 'com.facebook.fresco:fresco:1.3.0'
|
||||
implementation 'com.facebook.stetho:stetho:1.5.0'
|
||||
|
||||
testCompile 'junit:junit:4.12'
|
||||
testCompile 'org.robolectric:robolectric:3.4'
|
||||
implementation "com.google.dagger:dagger:$DAGGER_VERSION"
|
||||
implementation "com.google.dagger:dagger-android-support:$DAGGER_VERSION"
|
||||
|
||||
testCompile 'com.squareup.okhttp3:mockwebserver:3.8.1'
|
||||
androidTestCompile 'com.squareup.okhttp3:mockwebserver:3.8.1'
|
||||
androidTestCompile "com.android.support:support-annotations:${project.supportLibVersion}"
|
||||
androidTestCompile ('com.android.support.test.espresso:espresso-core:3.0.1'){
|
||||
exclude group: 'com.google.code.findbugs'
|
||||
}
|
||||
kapt "com.google.dagger:dagger-android-processor:$DAGGER_VERSION"
|
||||
kapt "com.google.dagger:dagger-compiler:$DAGGER_VERSION"
|
||||
|
||||
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'
|
||||
testImplementation "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"
|
||||
androidTestImplementation "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"
|
||||
|
||||
compile 'com.google.dagger:dagger:2.11'
|
||||
compile 'com.google.dagger:dagger-android-support:2.11'
|
||||
testImplementation 'junit:junit:4.12'
|
||||
testImplementation 'org.robolectric:robolectric:3.4'
|
||||
|
||||
testImplementation 'com.squareup.okhttp3:mockwebserver:3.8.1'
|
||||
androidTestImplementation 'com.squareup.okhttp3:mockwebserver:3.8.1'
|
||||
androidTestImplementation "com.android.support:support-annotations:${project.supportLibVersion}"
|
||||
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'
|
||||
|
||||
debugImplementation 'com.squareup.leakcanary:leakcanary-android:1.5.1'
|
||||
releaseImplementation 'com.squareup.leakcanary:leakcanary-android-no-op:1.5.1'
|
||||
testImplementation 'com.squareup.leakcanary:leakcanary-android-no-op:1.5.1'
|
||||
|
||||
implementation 'com.google.dagger:dagger:2.11'
|
||||
implementation 'com.google.dagger:dagger-android-support:2.11'
|
||||
annotationProcessor 'com.google.dagger:dagger-compiler:2.11'
|
||||
annotationProcessor 'com.google.dagger:dagger-android-processor:2.11'
|
||||
}
|
||||
|
|
@ -74,12 +84,17 @@ android {
|
|||
applicationId 'fr.free.nrw.commons'
|
||||
versionCode 74
|
||||
versionName '2.5.0'
|
||||
setProperty("archivesBaseName", "app-commons-v$versionName-" + getBranchName())
|
||||
minSdkVersion project.minSdkVersion
|
||||
targetSdkVersion project.targetSdkVersion
|
||||
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
|
||||
vectorDrawables.useSupportLibrary = true
|
||||
}
|
||||
|
||||
sourceSets {
|
||||
test.java.srcDirs += 'src/test/kotlin'
|
||||
}
|
||||
|
||||
buildTypes {
|
||||
release {
|
||||
minifyEnabled false // See https://stackoverflow.com/questions/40232404/google-play-apk-and-android-studio-apk-usb-debug-behaving-differently - proguard.cfg modification alone insufficient.
|
||||
|
|
@ -87,9 +102,11 @@ android {
|
|||
}
|
||||
debug {
|
||||
testCoverageEnabled true
|
||||
versionNameSuffix "-debug-" + getBranchName() + "~" + getBuildVersion()
|
||||
}
|
||||
}
|
||||
|
||||
flavorDimensions 'tier'
|
||||
productFlavors {
|
||||
prod {
|
||||
buildConfigField "String", "WIKIMEDIA_API_HOST", "\"https://commons.wikimedia.org/w/api.php\""
|
||||
|
|
@ -101,6 +118,7 @@ android {
|
|||
buildConfigField "String", "EVENTLOG_WIKI", "\"commonswiki\""
|
||||
buildConfigField "String", "SIGNUP_LANDING_URL", "\"https://commons.m.wikimedia.org/w/index.php?title=Special:CreateAccount&returnto=Main+Page&returntoquery=welcome%3Dyes\""
|
||||
buildConfigField "String", "SIGNUP_SUCCESS_REDIRECTION_URL", "\"https://commons.m.wikimedia.org/w/index.php?title=Main_Page&welcome=yes\""
|
||||
dimension 'tier'
|
||||
}
|
||||
|
||||
beta {
|
||||
|
|
@ -114,6 +132,7 @@ android {
|
|||
buildConfigField "String", "EVENTLOG_WIKI", "\"commonswiki\""
|
||||
buildConfigField "String", "SIGNUP_LANDING_URL", "\"https://commons.m.wikimedia.beta.wmflabs.org/w/index.php?title=Special:CreateAccount&returnto=Main+Page&returntoquery=welcome%3Dyes\""
|
||||
buildConfigField "String", "SIGNUP_SUCCESS_REDIRECTION_URL", "\"https://commons.m.wikimedia.beta.wmflabs.org/w/index.php?title=Main_Page&welcome=yes\""
|
||||
dimension 'tier'
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -132,4 +151,5 @@ android {
|
|||
configurations.all {
|
||||
resolutionStrategy.force 'com.android.support:support-annotations:25.2.0'
|
||||
}
|
||||
buildToolsVersion buildToolsVersion
|
||||
}
|
||||
|
|
|
|||
|
|
@ -14,6 +14,7 @@
|
|||
<uses-permission android:name="android.permission.MANAGE_ACCOUNTS" />
|
||||
<uses-permission android:name="android.permission.MANAGE_DOCUMENTS" />
|
||||
<uses-permission android:name="com.google.android.apps.photos.permission.GOOGLE_PHOTOS" />
|
||||
<uses-permission android:name="android.permission.READ_LOGS"/>
|
||||
|
||||
<application
|
||||
android:name=".CommonsApplication"
|
||||
|
|
|
|||
|
|
@ -1,7 +1,5 @@
|
|||
package fr.free.nrw.commons;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.widget.TextView;
|
||||
|
||||
|
|
@ -27,9 +25,4 @@ public class AboutActivity extends NavigationBaseActivity {
|
|||
versionText.setText(BuildConfig.VERSION_NAME);
|
||||
initDrawer();
|
||||
}
|
||||
|
||||
public static void startYourself(Context context) {
|
||||
Intent settingsIntent = new Intent(context, AboutActivity.class);
|
||||
context.startActivity(settingsIntent);
|
||||
}
|
||||
}
|
||||
|
|
@ -7,6 +7,7 @@ import android.database.sqlite.SQLiteDatabase;
|
|||
import com.facebook.drawee.backends.pipeline.Fresco;
|
||||
import com.facebook.stetho.Stetho;
|
||||
import com.squareup.leakcanary.LeakCanary;
|
||||
import com.squareup.leakcanary.RefWatcher;
|
||||
|
||||
import org.acra.ACRA;
|
||||
import org.acra.ReportingInteractionMode;
|
||||
|
|
@ -60,17 +61,15 @@ public class CommonsApplication extends DaggerApplication {
|
|||
public static final String FEEDBACK_EMAIL_SUBJECT = "Commons Android App (%s) Feedback";
|
||||
|
||||
private CommonsApplicationComponent component;
|
||||
private RefWatcher refWatcher;
|
||||
|
||||
@Override
|
||||
public void onCreate() {
|
||||
super.onCreate();
|
||||
|
||||
if (LeakCanary.isInAnalyzerProcess(this)) {
|
||||
// This process is dedicated to LeakCanary for heap analysis.
|
||||
// You should not init your app in this process.
|
||||
if (setupLeakCanary() == RefWatcher.DISABLED) {
|
||||
return;
|
||||
}
|
||||
LeakCanary.install(this);
|
||||
|
||||
Timber.plant(new Timber.DebugTree());
|
||||
|
||||
|
|
@ -86,6 +85,18 @@ public class CommonsApplication extends DaggerApplication {
|
|||
Fresco.initialize(this);
|
||||
}
|
||||
|
||||
protected RefWatcher setupLeakCanary() {
|
||||
if (LeakCanary.isInAnalyzerProcess(this)) {
|
||||
return RefWatcher.DISABLED;
|
||||
}
|
||||
return LeakCanary.install(this);
|
||||
}
|
||||
|
||||
public static RefWatcher getRefWatcher(Context context) {
|
||||
CommonsApplication application = (CommonsApplication) context.getApplicationContext();
|
||||
return application.refWatcher;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected AndroidInjector<? extends DaggerApplication> applicationInjector() {
|
||||
return injector();
|
||||
|
|
|
|||
|
|
@ -120,8 +120,9 @@ public class Media implements Parcelable {
|
|||
return localUri;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public String getImageUrl() {
|
||||
if (imageUrl == null) {
|
||||
if (imageUrl == null && this.getFilename() != null) {
|
||||
imageUrl = Utils.makeThumbBaseUrl(this.getFilename());
|
||||
}
|
||||
return imageUrl;
|
||||
|
|
|
|||
|
|
@ -11,7 +11,6 @@ import org.xml.sax.SAXException;
|
|||
import java.io.ByteArrayInputStream;
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.regex.Matcher;
|
||||
|
|
@ -39,7 +38,6 @@ public class MediaDataExtractor {
|
|||
private String filename;
|
||||
private ArrayList<String> categories;
|
||||
private Map<String, String> descriptions;
|
||||
private Date date;
|
||||
private String license;
|
||||
private @Nullable LatLng coordinates;
|
||||
private LicenseList licenseList;
|
||||
|
|
@ -181,7 +179,7 @@ public class MediaDataExtractor {
|
|||
}
|
||||
|
||||
private static abstract class TemplateChildNodeComparator {
|
||||
abstract public boolean match(Node node);
|
||||
public abstract boolean match(Node node);
|
||||
}
|
||||
|
||||
private Node findTemplateParameter(Node templateNode, String name) throws IOException {
|
||||
|
|
|
|||
|
|
@ -2,18 +2,22 @@ package fr.free.nrw.commons;
|
|||
|
||||
import android.content.Context;
|
||||
import android.preference.PreferenceManager;
|
||||
import android.support.annotation.NonNull;
|
||||
|
||||
import org.apache.commons.codec.binary.Hex;
|
||||
import org.apache.commons.codec.digest.DigestUtils;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStreamReader;
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.net.URLEncoder;
|
||||
import java.util.Locale;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
import fr.free.nrw.commons.auth.LoginActivity;
|
||||
import fr.free.nrw.commons.settings.Prefs;
|
||||
import timber.log.Timber;
|
||||
|
||||
public class Utils {
|
||||
|
||||
|
|
@ -33,7 +37,7 @@ public class Utils {
|
|||
}
|
||||
}
|
||||
|
||||
public static String makeThumbBaseUrl(String filename) {
|
||||
public static String makeThumbBaseUrl(@NonNull String filename) {
|
||||
String name = new PageTitle(filename).getPrefixedText();
|
||||
String sha = new String(Hex.encodeHex(DigestUtils.md5(name)));
|
||||
return String.format("%s/%s/%s/%s", BuildConfig.IMAGE_URL_BASE, sha.substring(0, 1), sha.substring(0, 2), urlEncode(name));
|
||||
|
|
@ -89,4 +93,37 @@ public class Utils {
|
|||
public static boolean isDarkTheme(Context context) {
|
||||
return PreferenceManager.getDefaultSharedPreferences(context).getBoolean("theme", false);
|
||||
}
|
||||
|
||||
/**
|
||||
* Will be used to fetch the logs generated by the app ever since the beginning of times....
|
||||
* i.e. since the time the app started.
|
||||
*
|
||||
* @return String containing all the logs since the time the app started
|
||||
*/
|
||||
public static String getAppLogs() {
|
||||
final String processId = Integer.toString(android.os.Process.myPid());
|
||||
|
||||
StringBuilder stringBuilder = new StringBuilder();
|
||||
|
||||
try {
|
||||
String[] command = new String[] {"logcat","-d","-v","threadtime"};
|
||||
|
||||
Process process = Runtime.getRuntime().exec(command);
|
||||
|
||||
BufferedReader bufferedReader = new BufferedReader(
|
||||
new InputStreamReader(process.getInputStream())
|
||||
);
|
||||
|
||||
String line;
|
||||
while ((line = bufferedReader.readLine()) != null) {
|
||||
if (line.contains(processId)) {
|
||||
stringBuilder.append(line);
|
||||
}
|
||||
}
|
||||
} catch (IOException ioe) {
|
||||
Timber.e("getAppLogs failed", ioe);
|
||||
}
|
||||
|
||||
return stringBuilder.toString();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@ import static android.accounts.AccountManager.KEY_ACCOUNT_TYPE;
|
|||
|
||||
public class AccountUtil {
|
||||
|
||||
static final String ACCOUNT_TYPE = "fr.free.nrw.commons";
|
||||
public static final String ACCOUNT_TYPE = "fr.free.nrw.commons";
|
||||
private final Context context;
|
||||
|
||||
public AccountUtil(Context context) {
|
||||
|
|
|
|||
|
|
@ -34,6 +34,7 @@ import fr.free.nrw.commons.Utils;
|
|||
import fr.free.nrw.commons.WelcomeActivity;
|
||||
import fr.free.nrw.commons.contributions.ContributionsActivity;
|
||||
import fr.free.nrw.commons.mwapi.MediaWikiApi;
|
||||
import fr.free.nrw.commons.theme.NavigationBaseActivity;
|
||||
import timber.log.Timber;
|
||||
|
||||
import static android.view.KeyEvent.KEYCODE_ENTER;
|
||||
|
|
@ -199,7 +200,7 @@ public class LoginActivity extends AccountAuthenticatorActivity {
|
|||
}
|
||||
|
||||
public void startMainActivity() {
|
||||
ContributionsActivity.startYourself(this);
|
||||
NavigationBaseActivity.startActivityWithFlags(this, ContributionsActivity.class, Intent.FLAG_ACTIVITY_CLEAR_TOP);
|
||||
finish();
|
||||
}
|
||||
|
||||
|
|
@ -253,8 +254,8 @@ public class LoginActivity extends AccountAuthenticatorActivity {
|
|||
|
||||
@Override
|
||||
public void afterTextChanged(Editable editable) {
|
||||
boolean enabled = usernameEdit.getText().length() != 0 && passwordEdit.getText().length() != 0 &&
|
||||
(BuildConfig.DEBUG || twoFactorEdit.getText().length() != 0 || twoFactorEdit.getVisibility() != View.VISIBLE);
|
||||
boolean enabled = usernameEdit.getText().length() != 0 && passwordEdit.getText().length() != 0
|
||||
&& (BuildConfig.DEBUG || twoFactorEdit.getText().length() != 0 || twoFactorEdit.getVisibility() != View.VISIBLE);
|
||||
loginButton.setEnabled(enabled);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -149,10 +149,13 @@ public class ContributionsActivity
|
|||
if (savedInstanceState != null) {
|
||||
mediaDetails = (MediaDetailPagerFragment)supportFragmentManager
|
||||
.findFragmentById(R.id.contributionsFragmentContainer);
|
||||
|
||||
getSupportLoaderManager().initLoader(0, null, this);
|
||||
}
|
||||
requestAuthToken();
|
||||
initDrawer();
|
||||
setTitle(getString(R.string.title_activity_contributions));
|
||||
setUploadCount();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -242,6 +245,8 @@ public class ContributionsActivity
|
|||
|
||||
@Override
|
||||
public void onLoadFinished(Loader<Cursor> cursorLoader, Cursor cursor) {
|
||||
contributionsList.changeProgressBarVisibility(false);
|
||||
|
||||
if (contributionsList.getAdapter() == null) {
|
||||
contributionsList.setAdapter(new ContributionsListAdapter(getApplicationContext(),
|
||||
cursor, 0));
|
||||
|
|
@ -249,8 +254,6 @@ public class ContributionsActivity
|
|||
((CursorAdapter) contributionsList.getAdapter()).swapCursor(cursor);
|
||||
}
|
||||
|
||||
setUploadCount();
|
||||
|
||||
contributionsList.clearSyncMessage();
|
||||
notifyAndMigrateDataSetObservers();
|
||||
}
|
||||
|
|
@ -281,8 +284,7 @@ public class ContributionsActivity
|
|||
|
||||
@SuppressWarnings("ConstantConditions")
|
||||
private void setUploadCount() {
|
||||
compositeDisposable.add(
|
||||
mediaWikiApi
|
||||
compositeDisposable.add(mediaWikiApi
|
||||
.getUploadCount(sessionManager.getCurrentAccount().name)
|
||||
.subscribeOn(Schedulers.io())
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
|
|
@ -291,8 +293,7 @@ public class ContributionsActivity
|
|||
.getQuantityString(R.plurals.contributions_subtitle,
|
||||
uploadCount, uploadCount)),
|
||||
t -> Timber.e(t, "Fetching upload count failed")
|
||||
)
|
||||
);
|
||||
));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -344,9 +345,4 @@ public class ContributionsActivity
|
|||
public void refreshSource() {
|
||||
getSupportLoaderManager().restartLoader(0, null, this);
|
||||
}
|
||||
|
||||
public static void startYourself(Context context) {
|
||||
context.startActivity(new Intent(context, ContributionsActivity.class));
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,7 +5,6 @@ import android.content.SharedPreferences;
|
|||
import android.content.pm.PackageManager;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.preference.PreferenceManager;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.v4.content.ContextCompat;
|
||||
import android.support.v7.app.AlertDialog;
|
||||
|
|
@ -18,6 +17,7 @@ import android.view.ViewGroup;
|
|||
import android.widget.AdapterView;
|
||||
import android.widget.GridView;
|
||||
import android.widget.ListAdapter;
|
||||
import android.widget.ProgressBar;
|
||||
import android.widget.TextView;
|
||||
|
||||
import javax.inject.Inject;
|
||||
|
|
@ -42,10 +42,12 @@ public class ContributionsListFragment extends DaggerFragment {
|
|||
GridView contributionsList;
|
||||
@BindView(R.id.waitingMessage)
|
||||
TextView waitingMessage;
|
||||
@BindView(R.id.emptyMessage)
|
||||
TextView emptyMessage;
|
||||
@BindView(R.id.loadingContributionsProgressBar)
|
||||
ProgressBar progressBar;
|
||||
|
||||
@Inject @Named("prefs") SharedPreferences prefs;
|
||||
@Inject @Named("default_preferences") SharedPreferences defaultPrefs;
|
||||
|
||||
private ContributionController controller;
|
||||
|
||||
@Override
|
||||
|
|
@ -69,6 +71,7 @@ public class ContributionsListFragment extends DaggerFragment {
|
|||
waitingMessage.setVisibility(GONE);
|
||||
}
|
||||
|
||||
changeProgressBarVisibility(true);
|
||||
return v;
|
||||
}
|
||||
|
||||
|
|
@ -80,6 +83,10 @@ public class ContributionsListFragment extends DaggerFragment {
|
|||
this.contributionsList.setAdapter(adapter);
|
||||
}
|
||||
|
||||
public void changeProgressBarVisibility(boolean isVisible) {
|
||||
this.progressBar.setVisibility(isVisible ? View.VISIBLE : View.GONE);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSaveInstanceState(Bundle outState) {
|
||||
if (outState == null) {
|
||||
|
|
|
|||
|
|
@ -57,6 +57,9 @@ public class ContributionsSyncAdapter extends AbstractThreadedSyncAdapter {
|
|||
}
|
||||
|
||||
private boolean fileExists(ContentProviderClient client, String filename) {
|
||||
if (filename == null) {
|
||||
return false;
|
||||
}
|
||||
Cursor cursor = null;
|
||||
try {
|
||||
cursor = client.query(BASE_URI,
|
||||
|
|
|
|||
|
|
@ -15,6 +15,7 @@ import fr.free.nrw.commons.auth.AccountUtil;
|
|||
import fr.free.nrw.commons.auth.SessionManager;
|
||||
import fr.free.nrw.commons.caching.CacheController;
|
||||
import fr.free.nrw.commons.data.DBOpenHelper;
|
||||
import fr.free.nrw.commons.location.LocationServiceManager;
|
||||
import fr.free.nrw.commons.mwapi.ApacheHttpClientMediaWikiApi;
|
||||
import fr.free.nrw.commons.mwapi.MediaWikiApi;
|
||||
import fr.free.nrw.commons.nearby.NearbyPlaces;
|
||||
|
|
@ -71,6 +72,12 @@ public class CommonsApplicationModule {
|
|||
return new ApacheHttpClientMediaWikiApi(BuildConfig.WIKIMEDIA_API_HOST);
|
||||
}
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
public LocationServiceManager provideLocationServiceManager() {
|
||||
return new LocationServiceManager(application);
|
||||
}
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
public CacheController provideCacheController() {
|
||||
|
|
|
|||
|
|
@ -7,22 +7,33 @@ import android.location.LocationListener;
|
|||
import android.location.LocationManager;
|
||||
import android.os.Bundle;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.concurrent.CopyOnWriteArrayList;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
|
||||
import timber.log.Timber;
|
||||
|
||||
public class LocationServiceManager implements LocationListener {
|
||||
|
||||
private String provider;
|
||||
private LocationManager locationManager;
|
||||
private LatLng latestLocation;
|
||||
private LatLng lastLocation;
|
||||
private Float latestLocationAccuracy;
|
||||
private final List<LocationUpdateListener> locationListeners = new CopyOnWriteArrayList<>();
|
||||
|
||||
public LocationServiceManager(Context context) {
|
||||
this.locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
|
||||
provider = locationManager.getBestProvider(new Criteria(), true);
|
||||
}
|
||||
|
||||
public LatLng getLatestLocation() {
|
||||
return latestLocation;
|
||||
public boolean isProviderEnabled() {
|
||||
return locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
|
||||
}
|
||||
|
||||
public LatLng getLastLocation() {
|
||||
return lastLocation;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -64,6 +75,16 @@ public class LocationServiceManager implements LocationListener {
|
|||
}
|
||||
}
|
||||
|
||||
public void addLocationListener(LocationUpdateListener listener) {
|
||||
if (!locationListeners.contains(listener)) {
|
||||
locationListeners.add(listener);
|
||||
}
|
||||
}
|
||||
|
||||
public void removeLocationListener(LocationUpdateListener listener) {
|
||||
locationListeners.remove(listener);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onLocationChanged(Location location) {
|
||||
double currentLatitude = location.getLatitude();
|
||||
|
|
@ -71,8 +92,11 @@ public class LocationServiceManager implements LocationListener {
|
|||
latestLocationAccuracy = location.getAccuracy();
|
||||
Timber.d("Latitude: %f Longitude: %f Accuracy %f",
|
||||
currentLatitude, currentLongitude, latestLocationAccuracy);
|
||||
lastLocation = new LatLng(currentLatitude, currentLongitude, latestLocationAccuracy);
|
||||
|
||||
latestLocation = new LatLng(currentLatitude, currentLongitude, latestLocationAccuracy);
|
||||
for (LocationUpdateListener listener : locationListeners) {
|
||||
listener.onLocationChanged(lastLocation);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
|||
|
|
@ -0,0 +1,5 @@
|
|||
package fr.free.nrw.commons.location;
|
||||
|
||||
public interface LocationUpdateListener {
|
||||
void onLocationChanged(LatLng latLng);
|
||||
}
|
||||
|
|
@ -152,8 +152,14 @@ public class MediaDetailPagerFragment extends DaggerFragment implements ViewPage
|
|||
private void downloadMedia(Media m) {
|
||||
String imageUrl = m.getImageUrl(),
|
||||
fileName = m.getFilename();
|
||||
|
||||
if (imageUrl == null || fileName == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Strip 'File:' from beginning of filename, we really shouldn't store it
|
||||
fileName = fileName.replaceFirst("^File:", "");
|
||||
|
||||
Uri imageUri = Uri.parse(imageUrl);
|
||||
|
||||
DownloadManager.Request req = new DownloadManager.Request(imageUri);
|
||||
|
|
|
|||
|
|
@ -388,7 +388,12 @@ public class ApacheHttpClientMediaWikiApi implements MediaWikiApi {
|
|||
|
||||
@Override
|
||||
@NonNull
|
||||
public UploadResult uploadFile(String filename, InputStream file, long dataLength, String pageContents, String editSummary, final ProgressListener progressListener) throws IOException {
|
||||
public UploadResult uploadFile(String filename,
|
||||
@NonNull InputStream file,
|
||||
long dataLength,
|
||||
String pageContents,
|
||||
String editSummary,
|
||||
final ProgressListener progressListener) throws IOException {
|
||||
ApiResult result = api.upload(filename, file, dataLength, pageContents, editSummary, progressListener::onProgress);
|
||||
|
||||
Log.e("WTF", "Result: " + result.toString());
|
||||
|
|
|
|||
|
|
@ -5,9 +5,7 @@ import android.content.Context;
|
|||
import android.content.Intent;
|
||||
import android.content.SharedPreferences;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.location.LocationManager;
|
||||
import android.net.Uri;
|
||||
import android.os.AsyncTask;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.preference.PreferenceManager;
|
||||
|
|
@ -30,34 +28,42 @@ import com.google.gson.GsonBuilder;
|
|||
import java.util.List;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Named;
|
||||
|
||||
import butterknife.BindView;
|
||||
import butterknife.ButterKnife;
|
||||
import fr.free.nrw.commons.R;
|
||||
import fr.free.nrw.commons.location.LatLng;
|
||||
import fr.free.nrw.commons.location.LocationServiceManager;
|
||||
import fr.free.nrw.commons.location.LocationUpdateListener;
|
||||
import fr.free.nrw.commons.theme.NavigationBaseActivity;
|
||||
import fr.free.nrw.commons.utils.UriSerializer;
|
||||
import fr.free.nrw.commons.utils.ViewUtil;
|
||||
import io.reactivex.Observable;
|
||||
import io.reactivex.android.schedulers.AndroidSchedulers;
|
||||
import io.reactivex.disposables.Disposable;
|
||||
import io.reactivex.schedulers.Schedulers;
|
||||
import timber.log.Timber;
|
||||
|
||||
public class NearbyActivity extends NavigationBaseActivity {
|
||||
|
||||
@BindView(R.id.progressBar)
|
||||
ProgressBar progressBar;
|
||||
@Inject NearbyPlaces nearbyPlaces;
|
||||
@Inject @Named("default_preferences") SharedPreferences prefs;
|
||||
public class NearbyActivity extends NavigationBaseActivity implements LocationUpdateListener {
|
||||
|
||||
private boolean isMapViewActive = false;
|
||||
private static final int LOCATION_REQUEST = 1;
|
||||
private static final String MAP_LAST_USED_PREFERENCE = "mapLastUsed";
|
||||
|
||||
private LocationServiceManager locationManager;
|
||||
@BindView(R.id.progressBar)
|
||||
ProgressBar progressBar;
|
||||
|
||||
@Inject
|
||||
LocationServiceManager locationManager;
|
||||
@Inject
|
||||
NearbyController nearbyController;
|
||||
|
||||
private LatLng curLatLang;
|
||||
private Bundle bundle;
|
||||
private NearbyAsyncTask nearbyAsyncTask;
|
||||
private SharedPreferences sharedPreferences;
|
||||
private NearbyActivityMode viewMode;
|
||||
private Disposable placesDisposable;
|
||||
private boolean lockNearbyView; //Determines if the nearby places needs to be refreshed
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
|
|
@ -97,7 +103,8 @@ public class NearbyActivity extends NavigationBaseActivity {
|
|||
// Handle item selection
|
||||
switch (item.getItemId()) {
|
||||
case R.id.action_refresh:
|
||||
refreshView();
|
||||
lockNearbyView = false;
|
||||
refreshView(true);
|
||||
return true;
|
||||
case R.id.action_toggle_view:
|
||||
viewMode = viewMode.toggle();
|
||||
|
|
@ -109,19 +116,11 @@ public class NearbyActivity extends NavigationBaseActivity {
|
|||
}
|
||||
}
|
||||
|
||||
private void startLookingForNearby() {
|
||||
locationManager = new LocationServiceManager(this);
|
||||
locationManager.registerLocationManager();
|
||||
curLatLang = locationManager.getLatestLocation();
|
||||
nearbyAsyncTask = new NearbyAsyncTask(this, new NearbyController(nearbyPlaces, prefs));
|
||||
nearbyAsyncTask.execute();
|
||||
}
|
||||
|
||||
private void checkLocationPermission() {
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
|
||||
if (ContextCompat.checkSelfPermission(this,
|
||||
Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
|
||||
startLookingForNearby();
|
||||
refreshView(false);
|
||||
} else {
|
||||
if (ContextCompat.checkSelfPermission(this,
|
||||
Manifest.permission.ACCESS_FINE_LOCATION)
|
||||
|
|
@ -162,7 +161,7 @@ public class NearbyActivity extends NavigationBaseActivity {
|
|||
}
|
||||
}
|
||||
} else {
|
||||
startLookingForNearby();
|
||||
refreshView(false);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -171,16 +170,10 @@ public class NearbyActivity extends NavigationBaseActivity {
|
|||
switch (requestCode) {
|
||||
case LOCATION_REQUEST: {
|
||||
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
|
||||
startLookingForNearby();
|
||||
refreshView(false);
|
||||
} else {
|
||||
//If permission not granted, go to page that says Nearby Places cannot be displayed
|
||||
if (nearbyAsyncTask != null) {
|
||||
nearbyAsyncTask.cancel(true);
|
||||
}
|
||||
if (progressBar != null) {
|
||||
progressBar.setVisibility(View.GONE);
|
||||
}
|
||||
|
||||
hideProgressBar();
|
||||
showLocationPermissionDeniedErrorDialog();
|
||||
}
|
||||
}
|
||||
|
|
@ -205,8 +198,7 @@ public class NearbyActivity extends NavigationBaseActivity {
|
|||
}
|
||||
|
||||
private void checkGps() {
|
||||
LocationManager manager = (LocationManager) getSystemService(LOCATION_SERVICE);
|
||||
if (!manager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
|
||||
if (!locationManager.isProviderEnabled()) {
|
||||
Timber.d("GPS is not enabled");
|
||||
new AlertDialog.Builder(this)
|
||||
.setMessage(R.string.gps_disabled)
|
||||
|
|
@ -231,78 +223,76 @@ public class NearbyActivity extends NavigationBaseActivity {
|
|||
super.onActivityResult(requestCode, resultCode, data);
|
||||
if (requestCode == 1) {
|
||||
Timber.d("User is back from Settings page");
|
||||
refreshView();
|
||||
refreshView(false);
|
||||
}
|
||||
}
|
||||
|
||||
private void toggleView() {
|
||||
if (nearbyAsyncTask != null) {
|
||||
if (nearbyAsyncTask.getStatus() == AsyncTask.Status.FINISHED) {
|
||||
if (viewMode.isMap()) {
|
||||
setMapFragment();
|
||||
} else {
|
||||
setListFragment();
|
||||
}
|
||||
}
|
||||
sharedPreferences.edit().putBoolean(MAP_LAST_USED_PREFERENCE, viewMode.isMap()).apply();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onStart() {
|
||||
super.onStart();
|
||||
locationManager.registerLocationManager();
|
||||
locationManager.addLocationListener(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onStop() {
|
||||
super.onStop();
|
||||
locationManager.removeLocationListener(this);
|
||||
locationManager.unregisterLocationManager();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onDestroy() {
|
||||
super.onDestroy();
|
||||
if (placesDisposable != null) {
|
||||
placesDisposable.dispose();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onResume() {
|
||||
super.onResume();
|
||||
lockNearbyView = false;
|
||||
checkGps();
|
||||
refreshView(false);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onPause() {
|
||||
super.onPause();
|
||||
if (nearbyAsyncTask != null) {
|
||||
nearbyAsyncTask.cancel(true);
|
||||
private void refreshView(boolean isHardRefresh) {
|
||||
if (lockNearbyView) {
|
||||
return;
|
||||
}
|
||||
LatLng lastLocation = locationManager.getLastLocation();
|
||||
if (curLatLang != null && curLatLang.equals(lastLocation)) { //refresh view only if location has changed
|
||||
if (isHardRefresh) {
|
||||
ViewUtil.showLongToast(this, R.string.nearby_location_has_not_changed);
|
||||
}
|
||||
|
||||
private void refreshView() {
|
||||
nearbyAsyncTask = new NearbyAsyncTask(this, new NearbyController(nearbyPlaces, prefs));
|
||||
nearbyAsyncTask.execute();
|
||||
return;
|
||||
}
|
||||
curLatLang = lastLocation;
|
||||
|
||||
@Override
|
||||
protected void onDestroy() {
|
||||
super.onDestroy();
|
||||
if (locationManager != null) {
|
||||
locationManager.unregisterLocationManager();
|
||||
}
|
||||
}
|
||||
|
||||
private class NearbyAsyncTask extends AsyncTask<Void, Integer, List<Place>> {
|
||||
|
||||
private final Context mContext;
|
||||
private final NearbyController nearbyController;
|
||||
|
||||
private NearbyAsyncTask(Context context, NearbyController nearbyController) {
|
||||
this.mContext = context;
|
||||
this.nearbyController = nearbyController;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onProgressUpdate(Integer... values) {
|
||||
super.onProgressUpdate(values);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected List<Place> doInBackground(Void... params) {
|
||||
return nearbyController.loadAttractionsFromLocation(curLatLang, NearbyActivity.this);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onPostExecute(List<Place> placeList) {
|
||||
super.onPostExecute(placeList);
|
||||
|
||||
if (isCancelled()) {
|
||||
if (curLatLang == null) {
|
||||
Timber.d("Skipping update of nearby places as location is unavailable");
|
||||
return;
|
||||
}
|
||||
|
||||
progressBar.setVisibility(View.VISIBLE);
|
||||
placesDisposable = Observable.fromCallable(() -> nearbyController
|
||||
.loadAttractionsFromLocation(curLatLang, this))
|
||||
.subscribeOn(Schedulers.io())
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.subscribe(this::populatePlaces);
|
||||
}
|
||||
|
||||
private void populatePlaces(List<Place> placeList) {
|
||||
Gson gson = new GsonBuilder()
|
||||
.registerTypeAdapter(Uri.class, new UriSerializer())
|
||||
.create();
|
||||
|
|
@ -311,7 +301,7 @@ public class NearbyActivity extends NavigationBaseActivity {
|
|||
|
||||
if (placeList.size() == 0) {
|
||||
int duration = Toast.LENGTH_SHORT;
|
||||
Toast toast = Toast.makeText(mContext, R.string.no_nearby, duration);
|
||||
Toast toast = Toast.makeText(this, R.string.no_nearby, duration);
|
||||
toast.show();
|
||||
}
|
||||
|
||||
|
|
@ -319,6 +309,7 @@ public class NearbyActivity extends NavigationBaseActivity {
|
|||
bundle.putString("PlaceList", gsonPlaceList);
|
||||
bundle.putString("CurLatLng", gsonCurLatLng);
|
||||
|
||||
lockNearbyView = true;
|
||||
// Begin the transaction
|
||||
if (viewMode.isMap()) {
|
||||
setMapFragment();
|
||||
|
|
@ -326,11 +317,14 @@ public class NearbyActivity extends NavigationBaseActivity {
|
|||
setListFragment();
|
||||
}
|
||||
|
||||
hideProgressBar();
|
||||
}
|
||||
|
||||
private void hideProgressBar() {
|
||||
if (progressBar != null) {
|
||||
progressBar.setVisibility(View.GONE);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Calls fragment for map view.
|
||||
|
|
@ -354,8 +348,8 @@ public class NearbyActivity extends NavigationBaseActivity {
|
|||
fragmentTransaction.commitAllowingStateLoss();
|
||||
}
|
||||
|
||||
public static void startYourself(Context context) {
|
||||
Intent settingsIntent = new Intent(context, NearbyActivity.class);
|
||||
context.startActivity(settingsIntent);
|
||||
@Override
|
||||
public void onLocationChanged(LatLng latLng) {
|
||||
refreshView(false);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -14,6 +14,9 @@ import java.util.List;
|
|||
import java.util.Locale;
|
||||
import java.util.Map;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Named;
|
||||
|
||||
import fr.free.nrw.commons.R;
|
||||
import fr.free.nrw.commons.location.LatLng;
|
||||
import fr.free.nrw.commons.utils.UiUtils;
|
||||
|
|
@ -22,13 +25,14 @@ import timber.log.Timber;
|
|||
import static fr.free.nrw.commons.utils.LengthUtils.computeDistanceBetween;
|
||||
import static fr.free.nrw.commons.utils.LengthUtils.formatDistanceBetween;
|
||||
|
||||
|
||||
public class NearbyController {
|
||||
private static final int MAX_RESULTS = 1000;
|
||||
private final NearbyPlaces nearbyPlaces;
|
||||
private final SharedPreferences prefs;
|
||||
|
||||
public NearbyController(NearbyPlaces nearbyPlaces, SharedPreferences prefs) {
|
||||
@Inject
|
||||
public NearbyController(NearbyPlaces nearbyPlaces,
|
||||
@Named("default_preferences") SharedPreferences prefs) {
|
||||
this.nearbyPlaces = nearbyPlaces;
|
||||
this.prefs = prefs;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -46,7 +46,7 @@ public class NearbyPlaces {
|
|||
|
||||
try {
|
||||
// increase the radius gradually to find a satisfactory number of nearby places
|
||||
while (radius < MAX_RADIUS) {
|
||||
while (radius <= MAX_RADIUS) {
|
||||
places = getFromWikidataQuery(curLatLng, lang, radius);
|
||||
Timber.d("%d results at radius: %f", places.size(), radius);
|
||||
if (places.size() >= MIN_RESULTS) {
|
||||
|
|
@ -62,6 +62,11 @@ public class NearbyPlaces {
|
|||
Timber.d("back to initial radius: %f", radius);
|
||||
radius = INITIAL_RADIUS;
|
||||
}
|
||||
// make sure we will be able to send at least one request next time
|
||||
if (radius > MAX_RADIUS) {
|
||||
radius = MAX_RADIUS;
|
||||
}
|
||||
|
||||
return places;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,7 +1,5 @@
|
|||
package fr.free.nrw.commons.settings;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.preference.PreferenceManager;
|
||||
import android.support.v7.app.AppCompatDelegate;
|
||||
|
|
@ -54,9 +52,4 @@ public class SettingsActivity extends NavigationBaseActivity {
|
|||
return super.onOptionsItemSelected(item);
|
||||
}
|
||||
}
|
||||
|
||||
public static void startYourself(Context context) {
|
||||
Intent settingsIntent = new Intent(context, SettingsActivity.class);
|
||||
context.startActivity(settingsIntent);
|
||||
}
|
||||
}
|
||||
|
|
@ -1,23 +1,41 @@
|
|||
package fr.free.nrw.commons.settings;
|
||||
|
||||
import android.Manifest;
|
||||
import android.app.AlertDialog;
|
||||
import android.content.ActivityNotFoundException;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.SharedPreferences;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.net.Uri;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.preference.CheckBoxPreference;
|
||||
import android.preference.EditTextPreference;
|
||||
import android.preference.ListPreference;
|
||||
import android.preference.Preference;
|
||||
import android.preference.PreferenceFragment;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.v4.content.ContextCompat;
|
||||
import android.support.v4.content.FileProvider;
|
||||
import android.widget.Toast;
|
||||
|
||||
import java.io.File;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Named;
|
||||
|
||||
import dagger.android.AndroidInjection;
|
||||
import fr.free.nrw.commons.BuildConfig;
|
||||
import fr.free.nrw.commons.CommonsApplication;
|
||||
import fr.free.nrw.commons.R;
|
||||
import fr.free.nrw.commons.Utils;
|
||||
import fr.free.nrw.commons.utils.FileUtils;
|
||||
|
||||
public class SettingsFragment extends PreferenceFragment {
|
||||
|
||||
private static final int REQUEST_CODE_WRITE_EXTERNAL_STORAGE = 100;
|
||||
|
||||
@Inject @Named("default_preferences") SharedPreferences prefs;
|
||||
|
||||
@Override
|
||||
|
|
@ -76,6 +94,63 @@ public class SettingsFragment extends PreferenceFragment {
|
|||
return true;
|
||||
});
|
||||
|
||||
Preference sendLogsPreference = findPreference("sendLogFile");
|
||||
sendLogsPreference.setOnPreferenceClickListener(preference -> {
|
||||
//first we need to check if we have the necessary permissions
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
|
||||
if (ContextCompat.checkSelfPermission(
|
||||
getActivity(),
|
||||
Manifest.permission.WRITE_EXTERNAL_STORAGE)
|
||||
==
|
||||
PackageManager.PERMISSION_GRANTED) {
|
||||
sendAppLogsViaEmail();
|
||||
} else {
|
||||
//first get the necessary permission
|
||||
requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
|
||||
REQUEST_CODE_WRITE_EXTERNAL_STORAGE);
|
||||
}
|
||||
} else {
|
||||
sendAppLogsViaEmail();
|
||||
}
|
||||
|
||||
return true;
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
|
||||
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
|
||||
if (requestCode == REQUEST_CODE_WRITE_EXTERNAL_STORAGE) {
|
||||
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
|
||||
sendAppLogsViaEmail();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void sendAppLogsViaEmail() {
|
||||
String appLogs = Utils.getAppLogs();
|
||||
File appLogsFile = FileUtils.createAndGetAppLogsFile(appLogs);
|
||||
|
||||
Context applicationContext = getActivity().getApplicationContext();
|
||||
Uri appLogsFilePath = FileProvider.getUriForFile(
|
||||
getActivity(),
|
||||
applicationContext.getPackageName() + ".provider",
|
||||
appLogsFile
|
||||
);
|
||||
|
||||
Intent feedbackIntent = new Intent(Intent.ACTION_SEND);
|
||||
feedbackIntent.setType("message/rfc822");
|
||||
feedbackIntent.putExtra(Intent.EXTRA_EMAIL,
|
||||
new String[]{CommonsApplication.FEEDBACK_EMAIL});
|
||||
feedbackIntent.putExtra(Intent.EXTRA_SUBJECT,
|
||||
String.format(CommonsApplication.FEEDBACK_EMAIL_SUBJECT,
|
||||
BuildConfig.VERSION_NAME));
|
||||
feedbackIntent.putExtra(Intent.EXTRA_STREAM,appLogsFilePath);
|
||||
|
||||
try {
|
||||
startActivity(feedbackIntent);
|
||||
} catch (ActivityNotFoundException e) {
|
||||
Toast.makeText(getActivity(), R.string.no_email_client, Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,6 +1,9 @@
|
|||
package fr.free.nrw.commons.theme;
|
||||
|
||||
import android.accounts.Account;
|
||||
import android.accounts.AccountManager;
|
||||
import android.content.ActivityNotFoundException;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.design.widget.NavigationView;
|
||||
|
|
@ -9,7 +12,9 @@ import android.support.v7.app.ActionBarDrawerToggle;
|
|||
import android.support.v7.app.AlertDialog;
|
||||
import android.support.v7.widget.Toolbar;
|
||||
import android.view.MenuItem;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.TextView;
|
||||
import android.widget.Toast;
|
||||
|
||||
import butterknife.BindView;
|
||||
|
|
@ -18,6 +23,7 @@ import fr.free.nrw.commons.BuildConfig;
|
|||
import fr.free.nrw.commons.CommonsApplication;
|
||||
import fr.free.nrw.commons.R;
|
||||
import fr.free.nrw.commons.WelcomeActivity;
|
||||
import fr.free.nrw.commons.auth.AccountUtil;
|
||||
import fr.free.nrw.commons.auth.LoginActivity;
|
||||
import fr.free.nrw.commons.contributions.ContributionsActivity;
|
||||
import fr.free.nrw.commons.nearby.NearbyActivity;
|
||||
|
|
@ -47,6 +53,22 @@ public abstract class NavigationBaseActivity extends BaseActivity
|
|||
toggle.setDrawerIndicatorEnabled(true);
|
||||
toggle.syncState();
|
||||
setDrawerPaneWidth();
|
||||
setUserName();
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the username in navigationHeader.
|
||||
*/
|
||||
private void setUserName() {
|
||||
|
||||
View navHeaderView = navigationView.getHeaderView(0);
|
||||
TextView username = navHeaderView.findViewById(R.id.username);
|
||||
|
||||
AccountManager accountManager = AccountManager.get(this);
|
||||
Account[] allAccounts = accountManager.getAccountsByType(AccountUtil.ACCOUNT_TYPE);
|
||||
if (allAccounts.length != 0) {
|
||||
username.setText(allAccounts[0].name);
|
||||
}
|
||||
}
|
||||
|
||||
public void initBackButton() {
|
||||
|
|
@ -70,30 +92,25 @@ public abstract class NavigationBaseActivity extends BaseActivity
|
|||
|
||||
@Override
|
||||
public boolean onNavigationItemSelected(@NonNull final MenuItem item) {
|
||||
switch (item.getItemId()) {
|
||||
final int itemId = item.getItemId();
|
||||
switch (itemId) {
|
||||
case R.id.action_home:
|
||||
drawerLayout.closeDrawer(navigationView);
|
||||
if (!(this instanceof ContributionsActivity)) {
|
||||
ContributionsActivity.startYourself(this);
|
||||
}
|
||||
startActivityWithFlags(
|
||||
this, ContributionsActivity.class, Intent.FLAG_ACTIVITY_CLEAR_TOP,
|
||||
Intent.FLAG_ACTIVITY_SINGLE_TOP);
|
||||
return true;
|
||||
case R.id.action_nearby:
|
||||
drawerLayout.closeDrawer(navigationView);
|
||||
if (!(this instanceof NearbyActivity)) {
|
||||
NearbyActivity.startYourself(this);
|
||||
}
|
||||
startActivityWithFlags(this, NearbyActivity.class, Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
|
||||
return true;
|
||||
case R.id.action_about:
|
||||
drawerLayout.closeDrawer(navigationView);
|
||||
if (!(this instanceof AboutActivity)) {
|
||||
AboutActivity.startYourself(this);
|
||||
}
|
||||
startActivityWithFlags(this, AboutActivity.class, Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
|
||||
return true;
|
||||
case R.id.action_settings:
|
||||
drawerLayout.closeDrawer(navigationView);
|
||||
if (!(this instanceof SettingsActivity)) {
|
||||
SettingsActivity.startYourself(this);
|
||||
}
|
||||
startActivityWithFlags(this, SettingsActivity.class, Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
|
||||
return true;
|
||||
case R.id.action_introduction:
|
||||
drawerLayout.closeDrawer(navigationView);
|
||||
|
|
@ -127,6 +144,7 @@ public abstract class NavigationBaseActivity extends BaseActivity
|
|||
.show();
|
||||
return true;
|
||||
default:
|
||||
Timber.e("Unknown option [%s] selected from the navigation menu", itemId);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
|
@ -143,4 +161,12 @@ public abstract class NavigationBaseActivity extends BaseActivity
|
|||
finish();
|
||||
}
|
||||
}
|
||||
|
||||
public static <T> void startActivityWithFlags(Context context, Class<T> cls, int... flags) {
|
||||
Intent intent = new Intent(context, cls);
|
||||
for (int flag: flags) {
|
||||
intent.addFlags(flag);
|
||||
}
|
||||
context.startActivity(intent);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -123,9 +123,10 @@ public class FileUtils {
|
|||
} catch (IllegalArgumentException e) {
|
||||
Timber.d(e);
|
||||
} finally {
|
||||
if (cursor != null)
|
||||
if (cursor != null) {
|
||||
cursor.close();
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -185,7 +185,7 @@ public class UploadService extends HandlerService<Contribution> {
|
|||
|
||||
@SuppressLint("StringFormatInvalid")
|
||||
private void uploadContribution(Contribution contribution) {
|
||||
InputStream file = null;
|
||||
InputStream file;
|
||||
|
||||
String notificationTag = contribution.getLocalUri().toString();
|
||||
|
||||
|
|
@ -196,6 +196,14 @@ public class UploadService extends HandlerService<Contribution> {
|
|||
Timber.d("File not found");
|
||||
Toast fileNotFound = Toast.makeText(this, R.string.upload_failed, Toast.LENGTH_LONG);
|
||||
fileNotFound.show();
|
||||
return;
|
||||
}
|
||||
|
||||
//As the file is null there's no point in continuing the upload process
|
||||
//mwapi.upload accepts a NonNull input stream
|
||||
if(file == null) {
|
||||
Timber.d("File not found");
|
||||
return;
|
||||
}
|
||||
|
||||
Timber.d("Before execution!");
|
||||
|
|
|
|||
|
|
@ -1,11 +1,16 @@
|
|||
package fr.free.nrw.commons.utils;
|
||||
|
||||
import android.os.Environment;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.File;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStreamReader;
|
||||
import java.io.OutputStreamWriter;
|
||||
|
||||
import fr.free.nrw.commons.CommonsApplication;
|
||||
import timber.log.Timber;
|
||||
|
||||
public class FileUtils {
|
||||
/**
|
||||
|
|
@ -53,5 +58,32 @@ public class FileUtils {
|
|||
return deletedAll;
|
||||
}
|
||||
|
||||
|
||||
public static File createAndGetAppLogsFile(String logs) {
|
||||
try {
|
||||
File commonsAppDirectory = new File(Environment.getExternalStorageDirectory().toString() + "/CommonsApp");
|
||||
if (!commonsAppDirectory.exists()) {
|
||||
commonsAppDirectory.mkdir();
|
||||
}
|
||||
|
||||
File logsFile = new File(commonsAppDirectory,"logs.txt");
|
||||
if (logsFile.exists()) {
|
||||
//old logs file is useless
|
||||
logsFile.delete();
|
||||
}
|
||||
|
||||
logsFile.createNewFile();
|
||||
|
||||
FileOutputStream outputStream = new FileOutputStream(logsFile);
|
||||
OutputStreamWriter outputStreamWriter = new OutputStreamWriter(outputStream);
|
||||
outputStreamWriter.append(logs);
|
||||
outputStreamWriter.close();
|
||||
outputStream.flush();
|
||||
outputStream.close();
|
||||
|
||||
return logsFile;
|
||||
} catch (IOException ioe) {
|
||||
Timber.e(ioe);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -23,8 +23,8 @@ public class FragmentUtils {
|
|||
.commitNow();
|
||||
return true;
|
||||
} catch (IllegalStateException e) {
|
||||
Timber.e(e, "Could not add & commit fragment. " +
|
||||
"Did you mean to call commitAllowingStateLoss?");
|
||||
Timber.e(e, "Could not add & commit fragment. "
|
||||
+ "Did you mean to call commitAllowingStateLoss?");
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
|
|
|||
17
app/src/main/java/fr/free/nrw/commons/utils/ViewUtil.java
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
package fr.free.nrw.commons.utils;
|
||||
|
||||
import android.content.Context;
|
||||
import android.support.annotation.StringRes;
|
||||
import android.widget.Toast;
|
||||
|
||||
public class ViewUtil {
|
||||
|
||||
public static void showLongToast(final Context context, @StringRes final int stringResId) {
|
||||
ExecutorUtils.uiExecutor().execute(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
Toast.makeText(context, context.getString(stringResId), Toast.LENGTH_LONG).show();
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
Before Width: | Height: | Size: 37 KiB |
BIN
app/src/main/res/drawable-hdpi/welcome_copyright.webp
Normal file
|
After Width: | Height: | Size: 5.1 KiB |
|
Before Width: | Height: | Size: 12 KiB |
BIN
app/src/main/res/drawable-hdpi/welcome_wikipedia.webp
Normal file
|
After Width: | Height: | Size: 1.8 KiB |
|
Before Width: | Height: | Size: 17 KiB |
BIN
app/src/main/res/drawable-ldpi/welcome_copyright.webp
Normal file
|
After Width: | Height: | Size: 2.5 KiB |
|
Before Width: | Height: | Size: 7.5 KiB |
BIN
app/src/main/res/drawable-ldpi/welcome_wikipedia.webp
Normal file
|
After Width: | Height: | Size: 1 KiB |
|
Before Width: | Height: | Size: 20 KiB |
BIN
app/src/main/res/drawable-mdpi/welcome_copyright.webp
Normal file
|
After Width: | Height: | Size: 3.4 KiB |
|
Before Width: | Height: | Size: 8.1 KiB |
BIN
app/src/main/res/drawable-mdpi/welcome_wikipedia.webp
Normal file
|
After Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 41 KiB |
BIN
app/src/main/res/drawable-xhdpi/welcome_copyright.webp
Normal file
|
After Width: | Height: | Size: 6.8 KiB |
|
Before Width: | Height: | Size: 12 KiB |
BIN
app/src/main/res/drawable-xhdpi/welcome_wikipedia.webp
Normal file
|
After Width: | Height: | Size: 2.2 KiB |
|
Before Width: | Height: | Size: 864 B |
BIN
app/src/main/res/drawable/empty_photo.webp
Normal file
|
After Width: | Height: | Size: 294 B |
|
Before Width: | Height: | Size: 21 KiB |
BIN
app/src/main/res/drawable/llamas.webp
Normal file
|
After Width: | Height: | Size: 4.2 KiB |
|
Before Width: | Height: | Size: 19 KiB |
BIN
app/src/main/res/drawable/mount_zao.webp
Normal file
|
After Width: | Height: | Size: 4.8 KiB |
|
Before Width: | Height: | Size: 19 KiB |
BIN
app/src/main/res/drawable/rainbow_bridge.webp
Normal file
|
After Width: | Height: | Size: 5.3 KiB |
|
Before Width: | Height: | Size: 26 KiB |
BIN
app/src/main/res/drawable/selfie_x.webp
Normal file
|
After Width: | Height: | Size: 8.1 KiB |
|
Before Width: | Height: | Size: 83 KiB |
BIN
app/src/main/res/drawable/sydney_opera_house.webp
Normal file
|
After Width: | Height: | Size: 24 KiB |
|
Before Width: | Height: | Size: 28 KiB |
BIN
app/src/main/res/drawable/tulip.webp
Normal file
|
After Width: | Height: | Size: 13 KiB |
|
|
@ -137,6 +137,7 @@
|
|||
</android.support.design.widget.TextInputLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/buttonFrame"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_below="@id/two_factor_container"
|
||||
|
|
@ -170,6 +171,28 @@
|
|||
|
||||
</LinearLayout>
|
||||
|
||||
<RelativeLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_below="@id/buttonFrame"
|
||||
android:layout_marginBottom="16dp"
|
||||
android:layout_marginEnd="16dp"
|
||||
android:layout_marginLeft="16dp"
|
||||
android:layout_marginRight="16dp"
|
||||
android:layout_marginStart="16dp">
|
||||
|
||||
<fr.free.nrw.commons.ui.widget.HtmlTextView
|
||||
android:id="@+id/about_privacy_policy"
|
||||
style="?android:textAppearanceSmall"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="16dp"
|
||||
android:layout_gravity="center_horizontal"
|
||||
android:text="@string/about_privacy_policy"
|
||||
android:layout_centerHorizontal="true"/>
|
||||
|
||||
</RelativeLayout>
|
||||
|
||||
</RelativeLayout>
|
||||
</android.support.v7.widget.CardView>
|
||||
|
||||
|
|
|
|||
|
|
@ -137,6 +137,7 @@
|
|||
</android.support.design.widget.TextInputLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/buttonFrame"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_below="@id/two_factor_container"
|
||||
|
|
@ -170,6 +171,28 @@
|
|||
|
||||
</LinearLayout>
|
||||
|
||||
<RelativeLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_below="@id/buttonFrame"
|
||||
android:layout_marginBottom="16dp"
|
||||
android:layout_marginEnd="16dp"
|
||||
android:layout_marginLeft="16dp"
|
||||
android:layout_marginRight="16dp"
|
||||
android:layout_marginStart="16dp">
|
||||
|
||||
<fr.free.nrw.commons.ui.widget.HtmlTextView
|
||||
android:id="@+id/about_privacy_policy"
|
||||
style="?android:textAppearanceSmall"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="16dp"
|
||||
android:layout_gravity="center_horizontal"
|
||||
android:text="@string/about_privacy_policy"
|
||||
android:layout_centerHorizontal="true"/>
|
||||
|
||||
</RelativeLayout>
|
||||
|
||||
</RelativeLayout>
|
||||
</android.support.v7.widget.CardView>
|
||||
|
||||
|
|
|
|||
|
|
@ -137,6 +137,7 @@
|
|||
</android.support.design.widget.TextInputLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/buttonFrame"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_below="@id/two_factor_container"
|
||||
|
|
@ -170,6 +171,28 @@
|
|||
|
||||
</LinearLayout>
|
||||
|
||||
<RelativeLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_below="@id/buttonFrame"
|
||||
android:layout_marginBottom="16dp"
|
||||
android:layout_marginEnd="16dp"
|
||||
android:layout_marginLeft="16dp"
|
||||
android:layout_marginRight="16dp"
|
||||
android:layout_marginStart="16dp">
|
||||
|
||||
<fr.free.nrw.commons.ui.widget.HtmlTextView
|
||||
android:id="@+id/about_privacy_policy"
|
||||
style="?android:textAppearanceSmall"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="16dp"
|
||||
android:layout_gravity="center_horizontal"
|
||||
android:text="@string/about_privacy_policy"
|
||||
android:layout_centerHorizontal="true"/>
|
||||
|
||||
</RelativeLayout>
|
||||
|
||||
</RelativeLayout>
|
||||
</android.support.v7.widget.CardView>
|
||||
|
||||
|
|
|
|||
|
|
@ -1,8 +1,28 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_width="match_parent"
|
||||
android:background="@android:color/darker_gray">
|
||||
<ImageView xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:id="@+id/pictureOfTheDay"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="172dp"
|
||||
android:background="@android:color/darker_gray"
|
||||
android:padding="16dp"
|
||||
android:paddingLeft="16dp"
|
||||
android:paddingTop="16dp"
|
||||
android:paddingRight="16dp"
|
||||
android:paddingBottom="5dp"
|
||||
android:src="@drawable/commons_logo_large"/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/username"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="TextView"
|
||||
android:textColor="@color/item_white_background"
|
||||
android:textSize="22sp"
|
||||
android:layout_below="@+id/pictureOfTheDay"
|
||||
android:layout_centerHorizontal="true"
|
||||
android:paddingBottom="5dp"/>
|
||||
|
||||
</RelativeLayout>
|
||||
|
|
@ -1,5 +1,6 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
<RelativeLayout
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:orientation="vertical"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
|
|
@ -13,15 +14,14 @@
|
|||
android:id="@+id/waitingMessage"
|
||||
android:layout_gravity="center"
|
||||
android:visibility="gone"
|
||||
android:layout_centerHorizontal="true"
|
||||
/>
|
||||
|
||||
<TextView
|
||||
<ProgressBar
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/no_uploads_yet"
|
||||
android:id="@+id/emptyMessage"
|
||||
android:layout_gravity="center"
|
||||
android:visibility="gone"
|
||||
android:layout_centerInParent="true"
|
||||
android:id="@+id/loadingContributionsProgressBar"
|
||||
/>
|
||||
|
||||
<GridView
|
||||
|
|
@ -36,4 +36,4 @@
|
|||
android:fastScrollEnabled="true"
|
||||
/>
|
||||
|
||||
</LinearLayout>
|
||||
</RelativeLayout>
|
||||
|
|
@ -20,7 +20,10 @@
|
|||
<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="uploads_pending_notification_indicator" fuzzy="true">متبقى %d</string>
|
||||
<plurals name="uploads_pending_notification_indicator">
|
||||
<item quantity="one">%d رفع ملف</item>
|
||||
<item quantity="other">%d رفع ملفات</item>
|
||||
</plurals>
|
||||
<string name="title_activity_contributions">مرفوعاتي الأخيرة</string>
|
||||
<string name="contribution_state_queued">في قائمة الانتظار</string>
|
||||
<string name="contribution_state_failed">فشل</string>
|
||||
|
|
@ -39,6 +42,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">يجب توفير رمز التحقق المزدوج.</string>
|
||||
<string name="login_failed_generic">فشل تسجيل الدخول</string>
|
||||
<string name="share_upload_button">ارفع</string>
|
||||
<string name="multiple_share_base_title">اسم هذه المجموعة</string>
|
||||
|
|
@ -47,6 +51,7 @@
|
|||
<string name="categories_search_text_hint">تصنيفات البحث</string>
|
||||
<string name="menu_save_categories">احفظ</string>
|
||||
<string name="refresh_button">أنعش</string>
|
||||
<string name="gps_disabled">عطل نظام الملاحة العالمي GPS بجهازك. أترغب في التنشيط؟</string>
|
||||
<string name="enable_gps">تفعيل GPS</string>
|
||||
<string name="contributions_subtitle_zero">لا مرفوعات بعد</string>
|
||||
<string name="categories_not_found">لا توجد تصنيفات تطابق %1$s</string>
|
||||
|
|
@ -61,6 +66,7 @@
|
|||
<string name="about_credits" fuzzy="true"><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>
|
||||
|
|
@ -70,6 +76,10 @@
|
|||
<string name="menu_download">نزّل</string>
|
||||
<string name="preference_license">الرخصة</string>
|
||||
<string name="preference_theme">الوضع الليلي</string>
|
||||
<string name="preference_theme_summary">استخدم النمط الغامق</string>
|
||||
<string name="tutorial_3_text">الرجاء عدم رفع</string>
|
||||
<string name="tutorial_3_subtext">- صور ذاتية أو صور لأصدقاء\n- صور محملة من الانترنت\n- لقطات شاشة ذات ملكية خاصة</string>
|
||||
<string name="tutorial_4_text">مثال رفع:</string>
|
||||
<string name="welcome_wikipedia_text">ساهم بصورك. أنعش مقالات ويكيبيديا!</string>
|
||||
<string name="welcome_wikipedia_subtext">تأتي صور ويكيبيديا من ويكيميديا كومنز.</string>
|
||||
<string name="welcome_copyright_text">صورك تساعد الناس في شتى أنحاء العالم على التعلم.</string>
|
||||
|
|
@ -84,16 +94,26 @@
|
|||
<string name="menu_refresh">تحديث</string>
|
||||
<string name="ok">موافق</string>
|
||||
<string name="title_activity_nearby">الأماكن القريبة</string>
|
||||
<string name="no_nearby">الأماكن القريبة غير متوفرة</string>
|
||||
<string name="warning">تحذير</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_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">انضم لمختبري اصدارات Beta (بيتا)</string>
|
||||
<string name="use_wikidata">استخدم ويكي بيانات</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">التحقق المزدودج 2FA غير مدعوم حاليا</string>
|
||||
<string name="logout_verification">أترغب فعلا في الخروج؟</string>
|
||||
<string name="navigation_item_home">الرئيسية</string>
|
||||
<string name="navigation_item_upload">رفع</string>
|
||||
<string name="navigation_item_nearby">بالقرب من هنا</string>
|
||||
|
|
|
|||
|
|
@ -73,9 +73,9 @@
|
|||
<string name="title_activity_settings">Configuración</string>
|
||||
<string name="title_activity_signup">Date d\'alta</string>
|
||||
<string name="menu_about">Tocante a</string>
|
||||
<string name="about_license" fuzzy="true">Software de códigu abiertu lliberáu baxo la <a href=\"https://github.com/commons-app/apps-android-commons/blob/master/COPYING\">Llicencia Apache v2</a>. %1$s ya\'l so logotipu son marques rexistraes de la Fundación Wikimedia y utilícense col so permisu. Nun tamos acreditaos pola Fundación Wikimedia nin tamos afiliaos con ella.</string>
|
||||
<string name="about_license">La app de Wikimedia Commons ye software de códigu abiertu, creáu y calteníu por becaos y voluntarios de la comunidá de Wikimedia. La Fundación Wikimedia nun participa na creación, desendolcu nin caltenimientu de la app.</string>
|
||||
<string name="about_improve">El <a href=\"https://github.com/commons-app/apps-android-commons\">códigu fonte</a> ya\'l <a href=\"https://commons-app.github.io/\">sitiu web</a> tán en GitHub. Crea una nueva <a href=\"https://github.com/commons-app/apps-android-commons/issues\">incidencia en GitHub</a> pa informar de problemes y suxerencies.</string>
|
||||
<string name="about_privacy_policy" fuzzy="true">Wikimedia:Commons-android-strings-about privacy policy/ast</string>
|
||||
<string name="about_privacy_policy"><a href=\"https://github.com/commons-app/apps-android-commons/wiki/Privacy-policy\">Política d\'intimidá</a></string>
|
||||
<string name="about_credits"><a href=\"https://github.com/commons-app/apps-android-commons/blob/master/CREDITS\">Créditos</a></string>
|
||||
<string name="title_activity_about">Tocante a</string>
|
||||
<string name="menu_feedback">Unviar comentarios (per corréu)</string>
|
||||
|
|
@ -147,7 +147,7 @@
|
|||
<string name="media_detail_title">Títulu</string>
|
||||
<string name="media_detail_media_title">Títulu del mediu</string>
|
||||
<string name="media_detail_description">Descripción</string>
|
||||
<string name="media_detail_description_explanation">Equí va la descripción del mediu. Posiblemente pué ser llargo enforma, y necesitará espardese per delles llinies. Sicasí, esperamos que se vea guapo.</string>
|
||||
<string name="media_detail_description_explanation">Equí va la descripción del mediu. Esto pué ser llargo enforma, y necesitará espardese per delles llinies. Sicasí, esperamos que se vea bien.</string>
|
||||
<string name="media_detail_uploaded_date">Data d\'unviu</string>
|
||||
<string name="media_detail_license">Llicencia</string>
|
||||
<string name="media_detail_coordinates">Coordenaes</string>
|
||||
|
|
@ -198,4 +198,7 @@
|
|||
<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="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>
|
||||
</resources>
|
||||
|
|
|
|||
|
|
@ -42,6 +42,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">অাপনাকে অবশ্যই অাপনার দু\'স্তরের সত্যায়নকরণ কোড দিতে হবে।</string>
|
||||
<string name="login_failed_generic">প্রবেশ ব্যর্থ</string>
|
||||
<string name="share_upload_button">আপলোড</string>
|
||||
<string name="multiple_share_base_title">এই সেটের নাম</string>
|
||||
|
|
@ -72,7 +73,7 @@
|
|||
<string name="title_activity_settings">সেটিং</string>
|
||||
<string name="title_activity_signup">নিবন্ধন করুন</string>
|
||||
<string name="menu_about">পরিচিতি</string>
|
||||
<string name="about_license" fuzzy="true">ওপেন সোর্স সফটওয়্যার <a href=\"https://github.com/commons-app/apps-android-commons/blob/master/COPYING\">এ্যাপাচি লাইসেন্স v2</a> অধীনে প্রকাশিত</string>
|
||||
<string name="about_license">উইকিমিডিয়া কমন্স অ্যাপ হচ্ছে একটি উন্মুক্ত উৎস সম্বলিত অ্যাপ যা উইকিমিডিয়া সম্প্রদায়ের ব্যবহারকারী ও সেচ্ছাসেবকবৃন্দ কর্তৃক তৈরিকৃত এবং পরিচালিত। উইকিমিডিয়া ফাউন্ডেশন এই অ্যাপ তৈরি, উন্নয়ন বা রক্ষণাবেক্ষণে জড়িত নয়।</string>
|
||||
<string name="about_improve"><a href=\"https://github.com/commons-app/apps-android-commons\">উৎস</a> ও <a href=\"https://commons-app.github.io/\">ওয়েবসাইট</a> GitHub এ</a>। কোন সমস্যা ও পরামর্শের জন্য <a href=\"https://github.com/commons-app/apps-android-commons/issues\">গিটহাব ইস্যু</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>
|
||||
|
|
@ -134,6 +135,7 @@
|
|||
<string name="detail_license_empty">অজানা লাইসেন্স</string>
|
||||
<string name="menu_refresh">পুনঃসতেজ</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>
|
||||
|
|
@ -151,12 +153,15 @@
|
|||
<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="background_image">পটভূমির চিত্র</string>
|
||||
|
|
@ -187,7 +192,13 @@
|
|||
<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="give_permission">অনুমতি দিন</string>
|
||||
<string name="use_external_storage">বাহ্যিক সঞ্চয়স্থান ব্যবহার করুন</string>
|
||||
<string name="use_external_storage_summary">অাপনার ডিভাইসের নিজস্ব ক্যামেরায় ধারণকৃত ছবি সংরক্ষণ করুন</string>
|
||||
<string name="send_log_file">লগ ফাইল পাঠান</string>
|
||||
<string name="send_log_file_description">ইমেইলের মাধ্যমে উন্নয়নকারীর কাছে লগ ফাইল পাঠান</string>
|
||||
<string name="login_to_your_account">আপনার অ্যাকাউন্টে প্রবেশ করুন</string>
|
||||
</resources>
|
||||
|
|
|
|||
|
|
@ -20,11 +20,11 @@
|
|||
<string name="upload_progress_notification_title_finishing">Acabant la càrrega al servidor de %1$s</string>
|
||||
<string name="upload_failed_notification_title">Error al carregar %1$s</string>
|
||||
<string name="upload_failed_notification_subtitle">Prem per veure-ho</string>
|
||||
<plurals name="uploads_pending_notification_indicator" fuzzy="true">
|
||||
<plurals name="uploads_pending_notification_indicator">
|
||||
<item quantity="one">s\'està carregant 1 fitxer</item>
|
||||
<item quantity="other">s\'estan carregant %d fitxers</item>
|
||||
</plurals>
|
||||
<string name="title_activity_contributions" fuzzy="true">Les meves càrregues</string>
|
||||
<string name="title_activity_contributions">Les meves càrregues recents</string>
|
||||
<string name="contribution_state_queued">En cua</string>
|
||||
<string name="contribution_state_failed">Ha fallat</string>
|
||||
<string name="contribution_state_in_progress">%1$d%% completat</string>
|
||||
|
|
@ -42,6 +42,7 @@
|
|||
<string name="login_failed_password">No s’ha pogut iniciar la sessió. Comproveu la vostra contrasenya</string>
|
||||
<string name="login_failed_throttled">Massa intents erronis – Proveu-ho de nou d\'aquí uns minuts.</string>
|
||||
<string name="login_failed_blocked">Ho sentim, aquest usuari ha estat blocat a Commons</string>
|
||||
<string name="login_failed_2fa_needed">Heu de proporcionar el vostre codi d\'autenticació de dos factors.</string>
|
||||
<string name="login_failed_generic">Ha fallat l\'inici de sessió</string>
|
||||
<string name="share_upload_button">Carrega</string>
|
||||
<string name="multiple_share_base_title">Anomena aquest conjunt</string>
|
||||
|
|
@ -50,17 +51,19 @@
|
|||
<string name="categories_search_text_hint">Categories de cerca</string>
|
||||
<string name="menu_save_categories">Desa</string>
|
||||
<string name="refresh_button">Refresca</string>
|
||||
<string name="gps_disabled">El vostre dispositiu no té el GPS habilitat. El voleu habilitar?</string>
|
||||
<string name="enable_gps">Habilita el GPS</string>
|
||||
<string name="contributions_subtitle_zero">Encara no hi ha cap càrrega</string>
|
||||
<plurals name="contributions_subtitle" fuzzy="true">
|
||||
<item quantity="zero">No hi ha cap càrrega encara</item>
|
||||
<item quantity="one">1 càrrega</item>
|
||||
<plurals name="contributions_subtitle">
|
||||
<item quantity="zero">\@string/contributions_subtitle_zero</item>
|
||||
<item quantity="one">%d càrrega</item>
|
||||
<item quantity="other">%d càrregues</item>
|
||||
</plurals>
|
||||
<plurals name="starting_multiple_uploads" fuzzy="true">
|
||||
<item quantity="one">S\'està iniciant 1 càrrega</item>
|
||||
<plurals name="starting_multiple_uploads">
|
||||
<item quantity="one">S\'està iniciant %d càrrega</item>
|
||||
<item quantity="other">S\'estan iniciant %d càrregues</item>
|
||||
</plurals>
|
||||
<plurals name="multiple_uploads_title" fuzzy="true">
|
||||
<plurals name="multiple_uploads_title">
|
||||
<item quantity="one">1 càrrega</item>
|
||||
<item quantity="other">%d càrregues</item>
|
||||
</plurals>
|
||||
|
|
@ -85,8 +88,10 @@
|
|||
<string name="preference_license">Llicència</string>
|
||||
<string name="preference_theme">Mode nocturn</string>
|
||||
<string name="preference_theme_summary">Utilitza el tema fosc</string>
|
||||
<string name="license_name_cc_by_sa" fuzzy="true">CC Reconeixement-CompartirIgual 3.0</string>
|
||||
<string name="license_name_cc_by" fuzzy="true">CC Reconeixement 3.0</string>
|
||||
<string name="license_name_cc_by_sa_four">Reconeixement-CompartirIgual 4.0</string>
|
||||
<string name="license_name_cc_by_four">Reconeixement 4.0</string>
|
||||
<string name="license_name_cc_by_sa">Reconeixement-CompartirIgual 3.0</string>
|
||||
<string name="license_name_cc_by">Reconeixement 3.0</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 (Àustria)</string>
|
||||
|
|
@ -100,7 +105,10 @@
|
|||
<string name="license_name_cc_by_sa_3_0_pl">CC BY-SA 3.0 (Polònia)</string>
|
||||
<string name="license_name_cc_by_sa_3_0_ro">CC BY-SA 3.0 (Romania)</string>
|
||||
<string name="license_name_cc_by_3_0">CC BY 3.0</string>
|
||||
<string name="license_name_cc_by_sa_4_0">CC BY-SA 4.0</string>
|
||||
<string name="license_name_cc_by_4_0">CC BY 4.0</string>
|
||||
<string name="license_name_cc_zero">CC Zero</string>
|
||||
<string name="tutorial_3_text">NO carregueu:</string>
|
||||
<string name="tutorial_4_text">Exemple de càrrega:</string>
|
||||
<string name="welcome_wikipedia_text">Doneu les vostres imatges. Ajudeu a donar vida als articles de la Viquipèdia!</string>
|
||||
<string name="welcome_wikipedia_subtext">Les imatges de la Viquipèdia vénen de la Wikimedia Commons.</string>
|
||||
|
|
@ -116,14 +124,20 @@
|
|||
<string name="menu_refresh">Refresca</string>
|
||||
<string name="ok">D\'acord</string>
|
||||
<string name="title_activity_nearby">Llocs propers</string>
|
||||
<string name="no_nearby">No s\'han trobat llocs propers</string>
|
||||
<string name="warning">Avís</string>
|
||||
<string name="file_exists">El fitxer ja existeix a Commons. Segur que voleu procedir?</string>
|
||||
<string name="yes">Sí</string>
|
||||
<string name="no">No</string>
|
||||
<string name="media_detail_title">Títol</string>
|
||||
<string name="media_detail_media_title">Títol del fitxer multimèdia</string>
|
||||
<string name="media_detail_description">Descripció</string>
|
||||
<string name="media_detail_uploaded_date">Data de càrrega</string>
|
||||
<string name="media_detail_license">Llicència</string>
|
||||
<string name="media_detail_coordinates">Coordenades</string>
|
||||
<string name="media_detail_coordinates_empty">No s\'ha proporcionat cap</string>
|
||||
<string name="use_wikidata">Utilitza Wikidata</string>
|
||||
<string name="_2fa_code">Codi 2FA</string>
|
||||
<string name="maximum_limit">Límit màxim</string>
|
||||
<string name="logout_verification">Realment voleu finalitzar la sessió?</string>
|
||||
<string name="commons_logo">Logo de Commons</string>
|
||||
|
|
@ -142,6 +156,6 @@
|
|||
<string name="navigation_item_feedback">Comentaris</string>
|
||||
<string name="navigation_item_logout">Finalitza la sessió</string>
|
||||
<string name="no_description_found">no s\'ha trobat cap descripció</string>
|
||||
<string name="nearby_info_menu_commons_article" fuzzy="true">Article al Commons</string>
|
||||
<string name="nearby_info_menu_commons_article">Article del fitxer a Commons</string>
|
||||
<string name="nearby_info_menu_wikidata_article">Element del Wikidata</string>
|
||||
</resources>
|
||||
|
|
|
|||
|
|
@ -198,5 +198,7 @@
|
|||
<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="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>
|
||||
</resources>
|
||||
|
|
|
|||
|
|
@ -198,5 +198,7 @@
|
|||
<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="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>
|
||||
</resources>
|
||||
|
|
|
|||
|
|
@ -20,11 +20,11 @@
|
|||
<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">
|
||||
<plurals name="uploads_pending_notification_indicator">
|
||||
<item quantity="one">1 αρχείο επιφορτώνεται</item>
|
||||
<item quantity="other">%d αρχεία επιφορτώνονται</item>
|
||||
</plurals>
|
||||
<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>
|
||||
|
|
@ -42,6 +42,7 @@
|
|||
<string name="login_failed_password">Δεν είναι δυνατή η σύνδεση - παρακαλούμε ελέγξτε τον κωδικό σας</string>
|
||||
<string name="login_failed_throttled">Πάρα πολλές ανεπιτυχείς προσπάθειες. Παρακαλώ δοκιμάστε ξανά σε λίγα λεπτά.</string>
|
||||
<string name="login_failed_blocked">Συγνώμη, αυτός ο χρήστης έχει αποκλειστεί από τα Commons</string>
|
||||
<string name="login_failed_2fa_needed">Πρέπει να δώσετε τον κωδικό πιστοποίησης με δύο παράγοντες</string>
|
||||
<string name="login_failed_generic">Η είσοδος απέτυχε</string>
|
||||
<string name="share_upload_button">Ανέβασμα</string>
|
||||
<string name="multiple_share_base_title">Ονομάστε το σύνολο</string>
|
||||
|
|
@ -50,6 +51,9 @@
|
|||
<string name="categories_search_text_hint">Αναζήτηση κατηγοριών</string>
|
||||
<string name="menu_save_categories">Αποθήκευση</string>
|
||||
<string name="refresh_button">Ανανέωση</string>
|
||||
<string name="gps_disabled">Το GPS στην συσκευή είναι απενεργοποιημένο. Θέλετε να το ενεργοποιήσετε;</string>
|
||||
<string name="enable_gps"> Ενεργοποιήσετε το GPS</string>
|
||||
<string name="contributions_subtitle_zero">Δεν υπάρχουν ακόμα φορτωμένα αρχεία</string>
|
||||
<plurals name="contributions_subtitle" fuzzy="true">
|
||||
<item quantity="zero">Δεν υπάρχουν επιφορτώσεις ακόμη</item>
|
||||
<item quantity="one">1 επιφόρτωση</item>
|
||||
|
|
@ -69,9 +73,9 @@
|
|||
<string name="title_activity_settings">Ρυθμίσεις</string>
|
||||
<string name="title_activity_signup">Εγγραφή</string>
|
||||
<string name="menu_about">Σχετικά</string>
|
||||
<string name="about_license" fuzzy="true">Λογισμικό ανοικτού κώδικα και κυκλοφορεί υπό την <a href=\"https://github.com/commons-app/apps-android-commons/blob/master/COPYING\">Άδεια Apache v2</a>. Το Wikimedia Commons και το λογότυπο είναι εμπορικά σήματα του Ιδρύματος Wikimedia και χρησιμοποιούνται με άδεια από το Ίδρυμα Wikimedia. Δεν προτεινόμαστε ή συνδεόμαστε με το Ίδρυμα Wikimedia.</string>
|
||||
<string name="about_license">Λογισμικό ανοικτού κωδικού που κυκλοφορεί υπό την <a href=\"https://github.com/commons-app/apps-android-commons/blob/master/COPYING\">Άδεια Apache v2</a>. Το Wikimedia Commons και το λογότυπο είναι εμπορικά σήματα του Ιδρύματος Wikimedia και χρησιμοποιούνται με άδεια από το Ίδρυμα Wikimedia. Δεν συμμετέχουμε στην δημιουργία, ανάπτυξη ή συντήρηση του Ιδρύματος Wikimedia.</string>
|
||||
<string name="about_improve"><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_privacy_policy" fuzzy="true"><a href=\"https://wikimediafoundation.org/wiki/Privacy_policy\">Πολιτική προσωπικών δεδομένων</a></string>
|
||||
<string name="about_privacy_policy"><a href=\"https://wikimediafoundation.org/wiki/Privacy_policy\">Πολιτική Απορρήτου και προσωπικών δεδομένων</a></string>
|
||||
<string name="about_credits" fuzzy="true"><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">Αποστολή σχολίων (μέσω Email)</string>
|
||||
|
|
@ -82,6 +86,7 @@
|
|||
<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">Αποστέλλοντας αυτήν την εικόνα, δηλώνω πως αυτή η εργασία είναι δική μου, και δεν περιέχει υλικό άλλου συγγραφέα, και εκτός αυτού πρόσκειται στο , thathref=\"https://commons.wikimedia.org/wiki/Commons:Policies_and_guidelines\">Κοινές πολιτικές της Wikipedia</a>.</string>
|
||||
<string name="menu_download">Λήψη</string>
|
||||
<string name="preference_license">Άδεια χρήσης</string>
|
||||
<string name="use_previous">Χρήση προηγούμενου τίτλου/περιγραφής</string>
|
||||
|
|
@ -124,15 +129,17 @@
|
|||
<string name="welcome_final_text">Νομίζεις ότι έχεις;</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="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">Αυτό το αρχείο υπάρχει ήδη στα Commons. Είστε σίγουρος ότι θέλετε να συνεχίσετε;</string>
|
||||
<string name="yes">Ναι</string>
|
||||
|
|
@ -141,8 +148,55 @@
|
|||
<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">Γίνετε Δοκιμαστής Beta</string>
|
||||
<string name="become_a_tester_description">Συμμετέχετε στο κανάλι beta μας στο Google Play και αποκτήστε πρώιμη πρόσβαση σε νέες λειτουργίες και διορθώσεις σφαλμάτων</string>
|
||||
<string name="use_wikidata">χρήση wikidata</string>
|
||||
<string name="use_wikidata_summary">(Προσοχή: η απενεργοποίηση αυτή μπορεί να προκαλέσει μεγάλη κατανάλωση κινητὠν δεδομένων)</string>
|
||||
<string name="_2fa_code">Κωδικός 2FA</string>
|
||||
<string name="number_of_uploads">To Όριο του Πρόσφατα Φορτωμένου Αρχείου μου</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">Πιστοποίηση με δύο παράγοντες δεν υποστηρίζεται προς το παρόν.</string>
|
||||
<string name="logout_verification">Θέλετε πράγματι να αποσυνδεθείτε;</string>
|
||||
<string name="commons_logo">Κοινό Λογότυπο</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">Mount Zao</string>
|
||||
<string name="welcome_image_llamas">Llamas</string>
|
||||
<string name="welcome_image_rainbow_bridge">Γέφυρα Ουρανίου Τόξου</string>
|
||||
<string name="welcome_image_tulip">Τουλίπα</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">Κτίρια Όπερας Sidney</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="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">Τεμάχιο Wikidata</string>
|
||||
<string name="error_while_cache">Υπήρξε σφάλμα κατά την σκίαση εικόνων</string>
|
||||
<string name="title_info">Ένας μοναδικός τίτλος περιγραφής του φακέλλου, που θα χρησιμεύσει ως όνομα φακέλλου. Μπορείτε να χρησιμοποιήσετε τις ήδη υπάρχουσες γλώσσες με διαστήματα. Μην συμπεριλάβετε την επέκταση φακέλλου</string>
|
||||
<string name="description_info">\nΠαρακαλώ περιγράψετε τα μέσα το δυνατό περισσότερο : Πού οδηγήθηκε αυτό; Τι δείχνει; Ποιο είναι το περιεχόμενο του; Παρακαλώ περιγράψετε τα αντικείμενα ή τα πρόσωπα. Αποκαλύψετε πληροφορίες που δεν μπορούν εύκολο να μαντέψει κανείς, για παράδειγμα την ώρα εντός της ημέρας αν πρόκειται για τοπίο. Αν τα μέσα δείξουν κάτι ασύνηθες, παρακαλώ εξηγήστε τι το καθιστά μη συνηθισμένα.</string>
|
||||
<string name="give_permission">Χορηγήστε άδεια</string>
|
||||
<string name="use_external_storage">Χρησιμοποιήσετε την εξωτερική αποθήκευση</string>
|
||||
<string name="use_external_storage_summary">Αποθηκεύσετε εικόνες που παίρνονται στην κάμερα εφαρμογής στην συσκευή σας</string>
|
||||
<string name="send_log_file">Αποστείλατε τον φάκελλο σύνδεσης</string>
|
||||
<string name="send_log_file_description">Στείλατε τον φάκελλο σύνδεσης στους δημιουργούς μέσω email</string>
|
||||
</resources>
|
||||
|
|
|
|||
|
|
@ -198,5 +198,7 @@
|
|||
<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="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>
|
||||
</resources>
|
||||
|
|
|
|||
|
|
@ -198,5 +198,7 @@
|
|||
<string name="give_permission">اجازه بده</string>
|
||||
<string name="use_external_storage">استفاده از حافظهٔ خارجی</string>
|
||||
<string name="use_external_storage_summary">ذخیرهٔ تصویرهای گرفته شده توسط دوربین درونکار اپلیکیشن بر روی دستگاه شما</string>
|
||||
<string name="send_log_file">ارسال فایل سیاهه</string>
|
||||
<string name="send_log_file_description">ارسال فایل سیاهه بهوسیلهٔ ایمیل برای توسعهدهندگان</string>
|
||||
<string name="login_to_your_account">ورود به حساب کاربریتان</string>
|
||||
</resources>
|
||||
|
|
|
|||
|
|
@ -73,7 +73,7 @@
|
|||
<string name="title_activity_settings">Paramètres</string>
|
||||
<string name="title_activity_signup">S’inscrire</string>
|
||||
<string name="menu_about">À propos</string>
|
||||
<string name="about_license">L\'application Wikimedia Commons est une application open-source crée et maintenue par les bénéficiaires et volontaires de la communauté Wikimedia. La fondation Wikimedia n\'est pas associée à la création, le développement ou la maintenance de l\'application.</string>
|
||||
<string name="about_license">L’application Wikimedia Commons est une application ouverte créée et tenue à jour par les bénéficiaires et volontaires de la communauté Wikimedia. La fondation Wikimedia n’est pas associée à la création, le développement ou l’entretien de l’application.</string>
|
||||
<string name="about_improve"><a href=\"https://github.com/commons-app/apps-android-commons\">Sources</a> et <a href=\"https://commons-app.github.io/\">site web</a> sur GitHub. Créer un nouveau <a href=\"https://github.com/commons-app/apps-android-commons/issues\">signalement GitHub</a> pour signales des bogues ou des suggestions.</string>
|
||||
<string name="about_privacy_policy"><a href=\"https://github.com/commons-app/apps-android-commons/wiki/Privacy-policy\">Politique de confidentialité</a></string>
|
||||
<string name="about_credits"><a href=\"https://github.com/commons-app/apps-android-commons/blob/master/CREDITS\">Remerciements</a></string>
|
||||
|
|
@ -198,5 +198,7 @@
|
|||
<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="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>
|
||||
</resources>
|
||||
|
|
|
|||
|
|
@ -198,5 +198,7 @@
|
|||
<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="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>
|
||||
</resources>
|
||||
|
|
|
|||
|
|
@ -75,7 +75,7 @@
|
|||
<string name="menu_about">Névjegy</string>
|
||||
<string name="about_license">A Wikimedia Commons applikáció egy nyílt forráskódú szoftver, amit a Wikimedia-közösség önkéntesei készítettek és tartanak karban. A Wikimédia Alapítvány nem vesz részt az applikáció megalkotásában, fejlesztésében és üzemeltetésében.</string>
|
||||
<string name="about_improve"><a href=\"https://github.com/commons-app/apps-android-commons\">Forráskód</a> és <a href=\"https://commons-app.github.io/\">weboldal</a> a GitHubon. Nyiss egy új <a href=\"https://github.com/commons-app/apps-android-commons/issues\">GitHub-problémát</a> hibabejelentéssel vagy fejlesztési javaslattal.</string>
|
||||
<string name="about_privacy_policy" fuzzy="true"><a href=\"https://wikimediafoundation.org/wiki/Adatvédelmi_irányelv\">Adatvédelmi irányelvek</a></string>
|
||||
<string name="about_privacy_policy"><a href=\"https://github.com/commons-app/apps-android-commons/wiki/Privacy-policy\">Adatvédelmi irányelvek</a></string>
|
||||
<string name="about_credits"><a href=\"https://github.com/commons-app/apps-android-commons/blob/master/CREDITS\">Köszönetnyilvánítás</a></string>
|
||||
<string name="title_activity_about">Névjegy</string>
|
||||
<string name="menu_feedback">Visszajelzés küldése (e-mailben)</string>
|
||||
|
|
@ -190,6 +190,7 @@
|
|||
<string name="no_description_found">nincs leírás</string>
|
||||
<string name="nearby_info_menu_commons_article">Commons leírólap</string>
|
||||
<string name="nearby_info_menu_wikidata_article">Wikidata-elem</string>
|
||||
<string name="title_info">Egy egyedi, leíró cím a fájlnak, ami fájlnévként fog szolgálni. Egyszerű nyelvezetet használhatsz szóközökkel. Ne tedd bele a kiterjesztést.</string>
|
||||
<string name="description_info">Kérlek a lehető legteljesebb módon írd le a fájlt: hol készült, mit ábrázol, mi a kontextus? Kérlek add meg az objektumokat vagy személyeket a képen, valamint a nehezen kitalálható információkat (például a kép készítésének dátumát, ha az egy tájkép). Amennyiben a média valami szokatlant ábrázol, kérlek fejtsd ki, hogy mi teszi szokatlanná.</string>
|
||||
<string name="give_permission">Engedély adása</string>
|
||||
<string name="use_external_storage">Külső tárhely használata</string>
|
||||
|
|
|
|||
|
|
@ -72,9 +72,9 @@
|
|||
<string name="title_activity_settings">הגדרות</string>
|
||||
<string name="title_activity_signup">רישום</string>
|
||||
<string name="menu_about">אודות</string>
|
||||
<string name="about_license" fuzzy="true">תכנת קוד פתוח המתפרסמת לפי תנאי <a href=\"https://github.com/commons-app/apps-android-commons/blob/master/COPYING\">Apache License v2</a>. השם %1$s והסמל שמשויך אליו הם סימני מסחר של קרן ויקימדיה ומשמשים באישור קרן ויקימדיה. איננו נתמכים על־ידי קרן ויקימדיה או קשורים אליה בשותפות.</string>
|
||||
<string name="about_license">יישום ויקישיתוף (Wikimedia Commons app) הוא יישום קוד פתוח שמפותח ומתוחזק על־ידי מקבלי מלגות ומתנדבים של קהילת ויקימדיה. קרן ויקימדיה אינה מעורבת ביצירה, פיתוח, או תחזוקה של היישום.</string>
|
||||
<string name="about_improve"><a href=\"https://github.com/commons-app/apps-android-commons\">קוד מקור</a> ו<a href=\"https://commons-app.github.io/\">אתר</a> בגיטהאב. נא ליצור <a href=\"https://github.com/commons-app/apps-android-commons/issues\">דיווח בגיטהאב</a> בשביל באגים והצעות.</string>
|
||||
<string name="about_privacy_policy" fuzzy="true"/>
|
||||
<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>
|
||||
<string name="menu_feedback">שליחת משוב (בדוא\"ל)</string>
|
||||
|
|
@ -172,6 +172,7 @@
|
|||
<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_sydney_opera_house">בית האופרה של סידני</string>
|
||||
<string name="cancel">ביטול</string>
|
||||
<string name="navigation_drawer_open">פתיחה</string>
|
||||
|
|
@ -191,6 +192,10 @@
|
|||
<string name="error_while_cache">שגיאה במשירת תמונות במטמון</string>
|
||||
<string name="title_info">כותרת מתארת ייחודית לקובץ, שתשמש שם קובץ. אפשר להשתמש בשפה פשוטה עם רווחים. אין לכלול סיומת קובץ</string>
|
||||
<string name="description_info">נא לתאר את המדיה כמה שיותר: איפה היא נוצרה? מה היא מראה? מה ההקשר? נא לתאר את העצמים או את האנשים. נא לחשוף מידע שאי־אפשר לנחש בקלות, למשל, הזמן ביום אם זאת תמונת נוף. אם המדיה מציגה משהו בלתי־רגיל, נא להסביר מה מיוחד בה.</string>
|
||||
<string name="give_permission">לתת הרשאה</string>
|
||||
<string name="use_external_storage">להשתמש באחסון חיצוני</string>
|
||||
<string name="use_external_storage_summary">שמירת תמונות שצולמו באמצעות מצלמה בתוך היישום במכשיר שלך</string>
|
||||
<string name="send_log_file">שליחת קובץ יומן</string>
|
||||
<string name="send_log_file_description">שליחת קובץ יומן למפתחים בדואר אלקטרוני</string>
|
||||
<string name="login_to_your_account">כניסה לחשבון שלך</string>
|
||||
</resources>
|
||||
|
|
|
|||
|
|
@ -198,5 +198,7 @@
|
|||
<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="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>
|
||||
</resources>
|
||||
|
|
|
|||
|
|
@ -72,7 +72,7 @@
|
|||
<string name="title_activity_settings">설정</string>
|
||||
<string name="title_activity_signup">가입하기</string>
|
||||
<string name="menu_about">정보</string>
|
||||
<string name="about_license" fuzzy="true">오픈 소스 소프트웨어는 <a href=\"https://github.com/commons-app/apps-android-commons/blob/master/COPYING\">아파치 라이선스 v2</a>에 따라 공개됩니다. %1$s 및 관련 로고는 위키미디어 재단의 상표이며 위키미디어 재단의 허가를 통해 사용될 수 있습니다. 저희는 위키미디어 재단에 의해 보증되거나 제휴되어 있지 않습니다.</string>
|
||||
<string name="about_license">위키미디어 공용 앱은 오픈 소스 애플리케이션이며 위키미디어 공동체 내의 자원봉사자에 의해 유지됩니다. 위키미디어 재단은 애플리케이션의 생성, 개발, 유지보수에 관여하지 않습니다.</string>
|
||||
<string name="about_improve">소스 코드는 <a href=\"https://github.com/commons-app/apps-android-commons\">GitHub</a>에 있으며, 웹사이트는 <a href=\"https://commons-app.github.io/\">GitHub</a>에 있습니다. 버그나 기타 제안은 <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>
|
||||
|
|
@ -195,5 +195,7 @@
|
|||
<string name="give_permission">권한 부여</string>
|
||||
<string name="use_external_storage">외부 저장소 사용하기</string>
|
||||
<string name="use_external_storage_summary">장치의 인앱 카메라로 찍은 사진 저장하기</string>
|
||||
<string name="send_log_file">로그 파일 보내기</string>
|
||||
<string name="send_log_file_description">이메일로 개발자에게 로그 파일 보내기</string>
|
||||
<string name="login_to_your_account">자신의 계정으로 로그인</string>
|
||||
</resources>
|
||||
|
|
|
|||
|
|
@ -72,7 +72,7 @@
|
|||
<string name="title_activity_settings">Astellungen</string>
|
||||
<string name="title_activity_signup">Mellt Iech un</string>
|
||||
<string name="menu_about">Iwwer</string>
|
||||
<string name="about_license" fuzzy="true">\'Open-Source-Software\' verëffentlecht ënner der <a href=\"https://github.com/commons-app/apps-android-commons/blob/master/COPYING\">Apache Lizenz v2</a>. %1$s a säi Logo si Markenzeeche vun der Wikimedia Foundation a gi mat der Autorisatioun vun der Wikimedia Foundation benotzt. Mir sinn net confirméiert vun oder liéiert mat der Wikimedia Foundation.</string>
|
||||
<string name="about_license">D\'App Wikimedia Commons ass eng \'Open-Source-App\' déi vu Fräiwëllege vun der Wikimedia Foundation entwéckelt gouf an och vun hinnen ënnerhal gëtt. D\'Wikimedia Foundation ass net an d\'Entwécklung oder den Ënnerhalt vun der App implizéiert.</string>
|
||||
<string name="about_improve"><a href=\"https://github.com/commons-app/apps-android-commons\">Quell</a> an <a href=\"https://commons-app.github.io/\">Internetsite</a> vu GitHub.\nLeet w.e.g. <a href=\"https://github.com/commons-app/apps-android-commons/issues\"> e GitHub Problem</a> fir Problemer ze mellen a Proposen ze maachen.</string>
|
||||
<string name="about_privacy_policy"><a href=\"https://github.com/commons-app/apps-android-commons/wiki/Privacy-policy\">Dateschutzerklärung</a></string>
|
||||
<string name="about_credits"><a href=\"https://github.com/commons-app/apps-android-commons/blob/master/CREDITS\">Merci</a></string>
|
||||
|
|
@ -188,5 +188,7 @@
|
|||
<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="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>
|
||||
</resources>
|
||||
|
|
|
|||
|
|
@ -42,8 +42,8 @@
|
|||
<string name="title_activity_settings">Iestatījumi</string>
|
||||
<string name="title_activity_signup">Reģistrēties</string>
|
||||
<string name="menu_about">Par</string>
|
||||
<string name="about_improve" fuzzy="true">Izejas kods pieejams <a href=\"https://github.com/commons-app/apps-android-commons\">GitHub</a>. Kļūdas ziņot <a href=\" https://github.com/commons-app/apps-android-commons/issues\">Github</a>.</string>
|
||||
<string name="about_privacy_policy" fuzzy="true"><a href=\"https://wikimediafoundation.org/wiki/Privacy_policy\">Privātuma politika</a></string>
|
||||
<string name="about_improve"><a href=\"https://github.com/commons-app/apps-android-commons\">Izejas kods</a> un <a href=\"https://commons-app.github.io/\">tīmekļa vietne</a> GitHub. Izveido jaunu <a href=\"https://github.com/commons-app/apps-android-commons/issues\">GitHub pieteikumu</a> kļūdas ziņojumam vai ieteikumam.</string>
|
||||
<string name="about_privacy_policy"><a href=\"https://github.com/commons-app/apps-android-commons/wiki/Privacy-policy\">Privātuma politika</a></string>
|
||||
<string name="title_activity_about">Par</string>
|
||||
<string name="menu_feedback">Nosūtīt atsauksmes (pa e-pastu)</string>
|
||||
<string name="provider_categories">Nesen lietotās kategorijas</string>
|
||||
|
|
|
|||
|
|
@ -198,5 +198,7 @@
|
|||
<string name="give_permission">Дај дозвола</string>
|
||||
<string name="use_external_storage">Користи надворешен склад</string>
|
||||
<string name="use_external_storage_summary">Зачувување на направените слики во прилогот со камерата на вашиот уред</string>
|
||||
<string name="send_log_file">Испрати дневничка податотека</string>
|
||||
<string name="send_log_file_description">Испрати дневничка податотека на разработувачите по е-пошта</string>
|
||||
<string name="login_to_your_account">Најавете се со вашата сметка</string>
|
||||
</resources>
|
||||
|
|
|
|||
|
|
@ -198,5 +198,7 @@
|
|||
<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="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>
|
||||
</resources>
|
||||
|
|
|
|||
|
|
@ -198,5 +198,7 @@
|
|||
<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="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>
|
||||
</resources>
|
||||
|
|
|
|||
|
|
@ -73,9 +73,9 @@
|
|||
<string name="title_activity_settings">Configurações</string>
|
||||
<string name="title_activity_signup">Criar conta</string>
|
||||
<string name="menu_about">Sobre</string>
|
||||
<string name="about_license" fuzzy="true">Software livre distribuído sob a <a href=\"https://github.com/commons-app/apps-android-commons/blob/master/COPYING\">Apache License v2</a>. %1$s e seu logotipo são marcas registradas da Wikimedia Foundation e são usadas com a permissão da Wikimedia Foundation. Não somos endossados nem afiliados à Wikimedia Foundation.</string>
|
||||
<string name="about_license">O Wikimedia Commons é um aplicativo de código aberto criado e mantido por beneficiários e voluntários da comunidade Wikimedia. A Wikimedia Foundation não está envolvida na criação, desenvolvimento ou manutenção do aplicativo.</string>
|
||||
<string name="about_improve"><a href=\"https://github.com/commons-app/apps-android-commons\">Fonte</a> e <a href=\"https://commons-app.github.io/\">site</a> em GitHub. Crie um novo <a href=\"https://github.com/commons-app/apps-android-commons/issues\">GitHub issue</a> para relatórios de bugs e sugestões.</string>
|
||||
<string name="about_privacy_policy" fuzzy="true"><a href=\"https://wikimediafoundation.org/wiki/Privacy_policy\">Política de privacidade</a></string>
|
||||
<string name="about_privacy_policy"><a href=\"https://github.com/commons-app/apps-android-commons/wiki/Privacy-policy\">Política de privacidade</a></string>
|
||||
<string name="about_credits"><a href=\"https://github.com/commons-app/apps-android-commons/blob/master/CREDITS\">Créditos</a></string>
|
||||
<string name="title_activity_about">Sobre</string>
|
||||
<string name="menu_feedback">Enviar comentários (por e-mail)</string>
|
||||
|
|
@ -198,4 +198,7 @@
|
|||
<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="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>
|
||||
</resources>
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@
|
|||
<string name="signup">Зарегистрироваться</string>
|
||||
<string name="logging_in_title">Вход в систему</string>
|
||||
<string name="logging_in_message">Пожалуйста, подождите…</string>
|
||||
<string name="login_success">Опознание прошло успешно</string>
|
||||
<string name="login_success">Вход выполнен успешно!</string>
|
||||
<string name="login_failed">Ошибка входа в систему!</string>
|
||||
<string name="upload_failed">Файл не найден. Попробуйте другой файл.</string>
|
||||
<string name="authentication_failed">Ошибка аутентификации!</string>
|
||||
|
|
@ -26,7 +26,7 @@
|
|||
<item quantity="other">%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>
|
||||
|
|
@ -52,7 +52,7 @@
|
|||
<string name="categories_search_text_hint">Выбор категорий</string>
|
||||
<string name="menu_save_categories">Сохранить</string>
|
||||
<string name="refresh_button">Обновить</string>
|
||||
<string name="gps_disabled">GPS отключен в вашем устройстве. Вы хотите включить его?</string>
|
||||
<string name="gps_disabled">GPS отключен в вашем устройстве. Хотите включить его?</string>
|
||||
<string name="enable_gps">Включить GPS</string>
|
||||
<string name="contributions_subtitle_zero">Загрузок пока нет</string>
|
||||
<plurals name="contributions_subtitle">
|
||||
|
|
@ -77,7 +77,7 @@
|
|||
<string name="title_activity_settings">Настройки</string>
|
||||
<string name="title_activity_signup">Зарегистрироваться</string>
|
||||
<string name="menu_about">О приложении</string>
|
||||
<string name="about_license" fuzzy="true">Приложение с открытым исходным кодом, выпущено по лицензии <a href=\"https://github.com/commons-app/apps-android-commons/blob/master/COPYING\">Apache License v2</a>. %1$s и его логотип являются товарными знаками Фонда Викимедиа и используются с разрешения Фонда Викимедиа. Мы не поддерживаемся и не связаны с Фондом Викимедиа.</string>
|
||||
<string name="about_license">Приложение «Викисклад» - это программа с открытым кодом, которую создали волонтёры и участники грантов Викимедиа. Фонд Викимедиа не участвует в создании, разработке или обслуживании этого приложения.</string>
|
||||
<string name="about_improve"><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_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>
|
||||
|
|
@ -90,11 +90,12 @@
|
|||
<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/ru\">правилам Викисклада</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="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 4.0</string>
|
||||
|
|
@ -120,7 +121,7 @@
|
|||
<string name="tutorial_1_text">Викисклад содержит большую часть изображений, которые используются в Википедии.</string>
|
||||
<string name="tutorial_1_subtext">Ваши изображения помогают образованию людей во всём мире!</string>
|
||||
<string name="tutorial_2_text">Пожалуйста, загрузите фотографии, которые были сняты или созданы исключительно вами:</string>
|
||||
<string name="tutorial_2_subtext">— Природные объекты (цветы, животные, горы)\n— Полезные предметы (велосипеды, вокзалы)\n— Известные люди (ваш мэр, спортсмены-олимпийцы, которых вы встретили)</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_4_text">Пример загрузки:</string>
|
||||
|
|
@ -128,7 +129,7 @@
|
|||
<string name="welcome_wikipedia_text">Загрузите свои изображения. Помогите Википедии оживить статьи!</string>
|
||||
<string name="welcome_wikipedia_subtext">Изображения в Википедии хранятся на Викискладе.</string>
|
||||
<string name="welcome_copyright_text">Ваши изображения помогают образованию людей во всём мире.</string>
|
||||
<string name="welcome_copyright_subtext">Избегайте материалов, найденных в Интернете и защищённых авторским правом, а также изображений плакатов, книжных обложек и т.п.</string>
|
||||
<string name="welcome_copyright_subtext">Избегайте материалов, защищённых авторским правом, например, найденных в Интернете, изображений плакатов, книжных обложек и т.п.</string>
|
||||
<string name="welcome_final_text">Вам это понятно?</string>
|
||||
<string name="welcome_final_button_text">Да!</string>
|
||||
<string name="detail_panel_cats_label">Категории</string>
|
||||
|
|
@ -158,7 +159,7 @@
|
|||
<string name="become_a_tester_title">Стать бета-тестером</string>
|
||||
<string name="become_a_tester_description">Подпишитесь на наш канал бета-версии на Google Play и получите ранний доступ к новым функциям и исправлениям ошибок</string>
|
||||
<string name="use_wikidata">Использовать Викиданные</string>
|
||||
<string name="use_wikidata_summary">(Предупреждение: отключение может привести к большому потреблению мобильных данных)</string>
|
||||
<string name="use_wikidata_summary">(Предупреждение: отключение может привести к значительному расходу мобильных данных)</string>
|
||||
<string name="_2fa_code">Код 2ФА</string>
|
||||
<string name="number_of_uploads">Лимит моих недавних загрузок</string>
|
||||
<string name="maximum_limit">Максимальный лимит</string>
|
||||
|
|
@ -196,7 +197,12 @@
|
|||
<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="give_permission">Дать разрешение</string>
|
||||
<string name="use_external_storage">Использовать внешнее хранилище</string>
|
||||
<string name="use_external_storage_summary">Сохранять изображения, сделанные с помощью встроенной камеры на устройстве</string>
|
||||
<string name="send_log_file">Выслать лог-файл</string>
|
||||
<string name="send_log_file_description">Выслать лог-файл разработчикам по е-мейлу</string>
|
||||
<string name="login_to_your_account">Войдите в свою учётную запись</string>
|
||||
</resources>
|
||||
|
|
|
|||
|
|
@ -11,6 +11,7 @@
|
|||
<string name="login_success">لاگ ان کامیاب!</string>
|
||||
<string name="login_failed">لاگ ان ناکام!</string>
|
||||
<string name="upload_failed">فائل کائنی لبھی،ٻئی فائل کیتے کوشش کرو۔</string>
|
||||
<string name="authentication_failed">تصدیق ناکام!</string>
|
||||
<string name="uploading_started">اپ لوڈ شروع!</string>
|
||||
<string name="upload_completed_notification_title">%1$s اپ لوڈ تھی ڳیا!</string>
|
||||
<string name="upload_progress_notification_title_start">اپ لوڈ %1$s شروع تھیندا پئے</string>
|
||||
|
|
@ -98,7 +99,9 @@
|
|||
<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="nearby_info_menu_wikidata_article">وکی ڈیٹا آئٹم</string>
|
||||
<string name="give_permission">اجازت ݙیوو</string>
|
||||
<string name="send_log_file">لاگ فائل بھیجو</string>
|
||||
<string name="login_to_your_account">آپݨے کھاتے وچ لاگ ان تھیوو</string>
|
||||
</resources>
|
||||
|
|
|
|||
|
|
@ -198,4 +198,7 @@
|
|||
<string name="give_permission">Давање дозволе</string>
|
||||
<string name="use_external_storage">Употреба спољашњег складишта</string>
|
||||
<string name="use_external_storage_summary">Спремање слика направљених камером апликације на Вашем уређају</string>
|
||||
<string name="send_log_file">Пошаљи дневничку датотеку</string>
|
||||
<string name="send_log_file_description">Пошаљи дневничку датотеку девелоперима преко имејла</string>
|
||||
<string name="login_to_your_account">Пријавите се на свој налог</string>
|
||||
</resources>
|
||||
|
|
|
|||
|
|
@ -73,9 +73,9 @@
|
|||
<string name="title_activity_settings">Séting</string>
|
||||
<string name="title_activity_signup">Daptar</string>
|
||||
<string name="menu_about">Ngeunaan</string>
|
||||
<string name="about_license" fuzzy="true">Pakakas lemes kodeu nembrak dirilis di handapeun <a href=\"https://github.com/commons-app/apps-android-commons/blob/master/COPYING\">Lisénsi Apache v2</a>. %1$s sarta logona téh mérk dagang anu Yayasan Wikimédia ogé dipakéna kudu meunang widi ti Yayasan Wikimédia. Kami teu disatujuan ku atawa digawé bareng jeung Yayasan Wikimédia.</string>
|
||||
<string name="about_license">Aplikasi Wikimédia Commons mangrupa aplikasi sumber nembrak nu dijieun jeung dikokolakeun ku panampa hibah sarta rélawan komunitas Wikimédia. Wikimedia Foundation teu pépérodeun dina nyieun, ngamekarkeun, atawa mulasara ieu aplikasi.</string>
|
||||
<string name="about_improve"><a href=\"https://github.com/commons-app/apps-android-commons\">Sumber</a> sarta <a href=\"https://commons-app.github.io/\">situ wéb</a> dina GitHub. Jieun anyar <a href=\"https://github.com/commons-app/apps-android-commons/issues\">perkara GitHub</a> pikeun saran jeung laporan kutu.</string>
|
||||
<string name="about_privacy_policy" fuzzy="true"><a href=\"https://wikimediafoundation.org/wiki/Privacy_policy\">Kawijakan privasi</a></string>
|
||||
<string name="about_privacy_policy"><a href=\"https://github.com/commons-app/apps-android-commons/wiki/Privacy-policy\">Kawijakan privasi</a></string>
|
||||
<string name="about_credits"><a href=\"https://github.com/commons-app/apps-android-commons/blob/master/CREDITS\">Pangajén</a></string>
|
||||
<string name="title_activity_about">Ngeunaan</string>
|
||||
<string name="menu_feedback">Kirim eupan balik (via Surélék)</string>
|
||||
|
|
@ -195,6 +195,10 @@
|
|||
<string name="error_while_cache">Kasalahan nalika muat gambar</string>
|
||||
<string name="title_info">Judul déskriptif anu unik pikeun berkas, anu bakal miboga fungsi minangka ngaran berkas. Anjeun bisa maké basa basajan kalawan spasi. Ulah ngawuwuhkeun éksténsi berkas</string>
|
||||
<string name="description_info">Pék émbarkeun wincikan média saloba-lobabana: Dimana éta dicokot? Naon nu titojokeunna? Naon kontéksna? Pék jéntrékeun obyék atawa jalmana. Ébré informasi anu teu gampang kajudi, kawas wayah mun éta mangrupa pamandangan. Ari média nu némbongkeun perkara nu teu guyub, pék jéntrékeun naon nu ngabalukarkeun éta téh teu guyub.</string>
|
||||
<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="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>
|
||||
|
|
|
|||
|
|
@ -198,5 +198,7 @@
|
|||
<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="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>
|
||||
</resources>
|
||||
|
|
|
|||
109
app/src/main/res/values-th/strings.xml
Normal file
|
|
@ -0,0 +1,109 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="app_name">คอมมอนส์</string>
|
||||
<string name="menu_settings">การตั้งค่า</string>
|
||||
<string name="username">ชื่อผู้ใช้</string>
|
||||
<string name="password">รหัสผ่าน</string>
|
||||
<string name="login">เข้าสู่ระบบ</string>
|
||||
<string name="signup">สมัครสมาชิก</string>
|
||||
<string name="logging_in_title">กำลังเข้าสู่ระบบ</string>
|
||||
<string name="logging_in_message">กรุณารอสักครู่…</string>
|
||||
<string name="login_success">การเข้าสู่ระบบสำเร็จแล้ว!</string>
|
||||
<string name="login_failed">การเข้าสู่ระบบล้มเหลว!</string>
|
||||
<string name="upload_failed">ไม่พบไฟล์ กรุณาลองใช้ไฟล์อื่น</string>
|
||||
<string name="authentication_failed">การตรวจสอบความถูกต้องล้มเหลว!</string>
|
||||
<string name="uploading_started">เริ่มการอัปโหลดแล้ว!</string>
|
||||
<string name="upload_completed_notification_title">อัปโหลด %1$s แล้ว!</string>
|
||||
<string name="upload_completed_notification_text">แตะเพื่อดูการอัปโหลดของคุณ</string>
|
||||
<string name="upload_progress_notification_title_start">กำลังเริ่มการอัปโหลด %1$s</string>
|
||||
<string name="upload_progress_notification_title_in_progress">กำลังอัปโหลด %1$s</string>
|
||||
<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="uploads_pending_notification_indicator">กำลังอัปโหลดไฟล์ %d ไฟล์</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>
|
||||
<string name="contribution_state_starting">กำลังอัปโหลด</string>
|
||||
<string name="menu_from_gallery">จากคลังภาพ</string>
|
||||
<string name="menu_from_camera">ถ่ายรูปภาพ</string>
|
||||
<string name="menu_nearby">ใกล้เคียง</string>
|
||||
<string name="provider_contributions">การอัปโหลดของฉัน</string>
|
||||
<string name="menu_share">แชร์</string>
|
||||
<string name="menu_open_in_browser">ดูในเบราว์เซอร์</string>
|
||||
<string name="share_title_hint">ชื่อเรื่อง</string>
|
||||
<string name="share_description_hint">คำอธิบาย</string>
|
||||
<string name="login_failed_network">ไม่สามารถเข้าสู่ระบบได้ - ความล้มเหลวของเครือข่าย</string>
|
||||
<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_2fa_needed">คุณต้องระบุโค้ดการตรวจสอบความถูกต้องสองปัจจัยของคุณ</string>
|
||||
<string name="login_failed_generic">การเข้าสู่ระบบล้มเหลว</string>
|
||||
<string name="share_upload_button">อัปโหลด</string>
|
||||
<string name="multiple_share_base_title">ตั้งชื่อชุดนี้</string>
|
||||
<string name="provider_modifications">การแก้ไข</string>
|
||||
<string name="menu_upload_single">อัปโหลด</string>
|
||||
<string name="categories_search_text_hint">ค้นหาหมวดหมู่</string>
|
||||
<string name="menu_save_categories">บันทึก</string>
|
||||
<string name="refresh_button">รีเฟรช</string>
|
||||
<string name="gps_disabled">GPS ถูกปิดใช้งานในอุปกรณ์ของคุณอยู่ คุณต้องการเปิดใช้งานหรือไม่?</string>
|
||||
<string name="enable_gps">เปิดใช้งาน GPS</string>
|
||||
<string name="contributions_subtitle_zero">ยังไม่มีการอัปโหลด</string>
|
||||
<string name="contributions_subtitle">การอัปโหลด %d รายการ</string>
|
||||
<string name="starting_multiple_uploads">กำลังเริ่มการอัปโหลด %d รายการ</string>
|
||||
<plurals name="multiple_uploads_title">
|
||||
<item quantity="one">การอัปโหลด %d รายการ</item>
|
||||
<item quantity="other">การอัปโหลด %d รายการ</item>
|
||||
</plurals>
|
||||
<string name="categories_not_found">ไม่พบหมวดหมู่ที่ตรงกับ %$1s</string>
|
||||
<string name="categories_skip_explanation">เพิ่มหมวดหมู่เพื่อทำให้รูปภาพของคุณค้นพบได้ง่ายขึ้นบน Wikimedia Commons\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">แอป Wikimedia Commons เป็นแอปโอเพนซอร์สที่สร้างขึ้นและดูแลโดยผู้มีสิทธิและอาสาสมัครของชุมชนวิกิมีเดีย มูลนิธิวิกิมีเดียไม่มีส่วนเกี่ยวข้องในการสร้าง พัฒนา หรือการบำรุงรักษาแอปใดๆ ทั้งสิ้น</string>
|
||||
<string name="about_improve"><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 issue</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>
|
||||
<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</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="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_4_text">ตัวอย่างการอัปโหลด:</string>
|
||||
<string name="welcome_final_button_text">ใช่!</string>
|
||||
<string name="detail_panel_cats_label">หมวดหมู่</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="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>
|
||||
</resources>
|
||||
|
|
@ -206,5 +206,7 @@
|
|||
<string name="give_permission">Надати дозвіл</string>
|
||||
<string name="use_external_storage">Використовувати зовнішнє сховище</string>
|
||||
<string name="use_external_storage_summary">Зберігати зображення, виконані вбудованою в додатку камерою Вашого пристрою</string>
|
||||
<string name="send_log_file">Надіслати лог-файл</string>
|
||||
<string name="send_log_file_description">Надіслати лог-файл розробникам електронною поштою</string>
|
||||
<string name="login_to_your_account">Увійдіть у свій обліковий запис</string>
|
||||
</resources>
|
||||
|
|
|
|||
121
app/src/main/res/values-ur/strings.xml
Normal file
|
|
@ -0,0 +1,121 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="app_name">کامنز</string>
|
||||
<string name="menu_settings">ترتیبات</string>
|
||||
<string name="username">صارف نام</string>
|
||||
<string name="password">پاس ورڈ</string>
|
||||
<string name="login">داخل ہوں</string>
|
||||
<string name="signup">کھاتہ بنائیں</string>
|
||||
<string name="logging_in_title">لاگ آن</string>
|
||||
<string name="logging_in_message">براہ مہربانی کچھ دیر انتظار کریں۔۔۔</string>
|
||||
<string name="login_success">لاگ ان کامیاب۔</string>
|
||||
<string name="login_failed">داخل ہونے میں ناکامی ہوئی!</string>
|
||||
<string name="upload_failed">فائل نہیں ملی، براہ کرم دوسری فائل آزمائیں۔</string>
|
||||
<string name="authentication_failed">تصدیق ناکام!</string>
|
||||
<string name="uploading_started">اپلوڈ شروع!</string>
|
||||
<string name="upload_completed_notification_title">%1$s اپلوڈ شد!</string>
|
||||
<string name="upload_completed_notification_text">اپنی اپلوڈ دیکھنے کے لیے ٹیپ کریں۔</string>
|
||||
<string name="upload_progress_notification_title_start">%1$s کی اپلوڈنگ شروع ہو رہی ہے</string>
|
||||
<string name="upload_progress_notification_title_in_progress">%1$s اپلوڈ جاری</string>
|
||||
<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">
|
||||
<item quantity="one">%d فائل اپلوڈ ہورہی ہے</item>
|
||||
<item quantity="other">%d فائلیں اپلوڈ ہورہی ہے</item>
|
||||
</plurals>
|
||||
<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>
|
||||
<string name="contribution_state_starting">اپلوڈ جاری ہے</string>
|
||||
<string name="menu_from_gallery">از نگار خانہ</string>
|
||||
<string name="menu_from_camera">تصویر لیں</string>
|
||||
<string name="menu_nearby">قریبی</string>
|
||||
<string name="provider_contributions">میری اپلوڈ</string>
|
||||
<string name="menu_share">شیئر</string>
|
||||
<string name="menu_open_in_browser">براؤزر میں کھولیں</string>
|
||||
<string name="share_title_hint">عنوان</string>
|
||||
<string name="share_description_hint">وضاحت</string>
|
||||
<string name="login_failed_network">لاگ ان ہونے میں ناکام - نیٹ ورک ناکامی</string>
|
||||
<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_2fa_needed">آپ کو اپنے دو عامل کے تصدیق کوڈ فراہم کرنا چاہیے۔</string>
|
||||
<string name="login_failed_generic">داخل ہونے میں ناکام</string>
|
||||
<string name="share_upload_button">اپلوڈ کریں</string>
|
||||
<string name="multiple_share_base_title">سیٹ کو نام دیں</string>
|
||||
<string name="provider_modifications">اصلاحات</string>
|
||||
<string name="menu_upload_single">اپلوڈ کریں</string>
|
||||
<string name="categories_search_text_hint">زمرہ جات تلاش کریں</string>
|
||||
<string name="menu_save_categories">محفوظ کریں</string>
|
||||
<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">\@string/contributions_subtitle_zero</item>
|
||||
<item quantity="one">%d اپلوڈ</item>
|
||||
<item quantity="other">%d اپلوڈ</item>
|
||||
</plurals>
|
||||
<plurals name="starting_multiple_uploads">
|
||||
<item quantity="one">شروع %d اپلوڈ</item>
|
||||
<item quantity="other">شروع %d اپلوڈ</item>
|
||||
</plurals>
|
||||
<plurals name="multiple_uploads_title">
|
||||
<item quantity="one">%d اپلوڈ</item>
|
||||
<item quantity="other">%d اپلوڈ</item>
|
||||
</plurals>
|
||||
<string name="categories_not_found">%1$s سے کوئی زمرہ جات میل نہیں کھاتے</string>
|
||||
<string name="categories_skip_explanation">ویکیمیڈیا کامنز پر اپنی تصاویر کو قابل دریافت بنانے کے لیے زمرے شامل کریں۔\n\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\">ماخذ</a> اور <a href=\"https://commons-app.github.io/\">ویب سائٹ</a> در گٹ ہب۔<a href=\"https://github.com/commons-app/apps-android-commons/issues\">نیا گٹ ہب اجرا بنائیں</a> تاکہ آپ bug شکایتیں اور تجایز دیں سکیں</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>
|
||||
<string name="menu_feedback">فیڈبیک بھیجیے (براستہ ای میل)</string>
|
||||
<string name="no_email_client">ای میل کلائنٹ انسٹال نہیں</string>
|
||||
<string name="provider_categories">حال ہی میں استعمال کیے گئے زمرے</string>
|
||||
<string name="waiting_first_sync">سب سے پہلے 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\">ویکیمیڈیا کامنز پالیسیوں</a> کا پابند ہوں۔</string>
|
||||
<string name="menu_download">ڈاؤنلوڈ</string>
|
||||
<string name="preference_license">اجازت نامہ</string>
|
||||
<string name="use_previous">گزشتہ عنوان/وضاحت استعمال کریں</string>
|
||||
<string name="allow_gps">خودکارانہ طریقے سے حالیہ جگہ حاصل کریں</string>
|
||||
<string name="preference_theme">نائٹ موڈ</string>
|
||||
<string name="preference_theme_summary">کالا تھیم استعمال کریں</string>
|
||||
<string name="license_name_cc_by_sa_3_0_at">CC BY-SA 3.0 (آسٹریا)</string>
|
||||
<string name="license_name_cc_by_sa_3_0_de">CC BY-SA 3.0 (جرمنی)</string>
|
||||
<string name="license_name_cc_by_sa_3_0_ee">CC BY-SA 3.0 (اسٹونیا)</string>
|
||||
<string name="license_name_cc_by_sa_3_0_es">CC BY-SA 3.0 (اسپین)</string>
|
||||
<string name="license_name_cc_by_sa_3_0_hr">CC BY-SA 3.0 (کرویئشا)</string>
|
||||
<string name="license_name_cc_by_sa_3_0_lu">CC BY-SA 3.0 (لکسمبرگ)</string>
|
||||
<string name="welcome_final_button_text">ہاں!</string>
|
||||
<string name="detail_panel_cats_label">زمرہ جات</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="yes">جی</string>
|
||||
<string name="no">نہیں</string>
|
||||
<string name="media_detail_license">اجازت نامہ</string>
|
||||
<string name="media_detail_coordinates">متناسقات</string>
|
||||
<string name="commons_logo">کامنز لوگو</string>
|
||||
<string name="welcome_image_no_selfies">کوئی سیلفی نہیں</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>
|
||||
</resources>
|
||||
|
|
@ -198,5 +198,7 @@
|
|||
<string name="give_permission">給予權限</string>
|
||||
<string name="use_external_storage">使用外部存儲裝置</string>
|
||||
<string name="use_external_storage_summary">在您的裝置上使用照相機應用程式來儲存照片</string>
|
||||
<string name="send_log_file">寄送日誌檔案</string>
|
||||
<string name="send_log_file_description">經由電子郵件寄送日誌檔案給開發人員</string>
|
||||
<string name="login_to_your_account">登入您的帳號</string>
|
||||
</resources>
|
||||
|
|
|
|||
|
|
@ -198,5 +198,7 @@
|
|||
<string name="give_permission">提供权限</string>
|
||||
<string name="use_external_storage">使用外部存储</string>
|
||||
<string name="use_external_storage_summary">在您的设备上,使用应用中的照相机保存照片</string>
|
||||
<string name="send_log_file">发送日志文件</string>
|
||||
<string name="send_log_file_description">通过电子邮件将日志文件发送给开发人员</string>
|
||||
<string name="login_to_your_account">登录您的账户</string>
|
||||
</resources>
|
||||
|
|
|
|||
|
|
@ -207,5 +207,10 @@ Tap this message (or hit back) to skip this step.</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="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>
|
||||
</resources>
|
||||
|
|
|
|||
|
|
@ -53,4 +53,9 @@
|
|||
android:summary="@string/use_external_storage_summary"
|
||||
/>
|
||||
|
||||
<Preference
|
||||
android:key="sendLogFile"
|
||||
android:title="@string/send_log_file"
|
||||
android:summary="@string/send_log_file_description"/>
|
||||
|
||||
</PreferenceScreen>
|
||||
|
|
@ -1,4 +1,5 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<paths>
|
||||
<cache-path name="images" path="images/" />
|
||||
<external-path name="logs"/>
|
||||
</paths>
|
||||