Merge branch 'master' into show-block-status

This commit is contained in:
seannemann21 2018-06-25 14:41:47 -04:00 committed by GitHub
commit c0d86b76e8
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
144 changed files with 1867 additions and 1005 deletions

View file

@ -1,5 +1,8 @@
# Wikimedia Commons for Android # Wikimedia Commons for Android
## v2.7.2
- Modified subtext for "automatically get current location" setting to emphasize that it will reveal user's location
## v2.7.1 ## v2.7.1
- Fixed UI and permission issues with Nearby - Fixed UI and permission issues with Nearby
- Fixed issue with My Recent Uploads being empty - Fixed issue with My Recent Uploads being empty

View file

@ -16,4 +16,4 @@ Tested on {API level & name of device/emulator}, with {build variant, e.g. ProdD
{Only for user interface changes, otherwise remove this section. See [how to take a screenshot](https://android.stackexchange.com/questions/1759/how-to-take-a-screenshot-with-an-android-device)} {Only for user interface changes, otherwise remove this section. See [how to take a screenshot](https://android.stackexchange.com/questions/1759/how-to-take-a-screenshot-with-an-android-device)}
_Note: Please ensure that you have read CONTRIBUTING.md if this is your first pull request._ _Note: Please ensure that you have read CONTRIBUTING.md if this is your first pull request._

View file

@ -7,6 +7,8 @@ apply from: 'quality.gradle'
apply plugin: 'com.getkeepsafe.dexcount' apply plugin: 'com.getkeepsafe.dexcount'
dependencies { dependencies {
implementation 'com.squareup.picasso:picasso:2.71828'
implementation 'com.prof.rssparser:rssparser:1.1'
implementation 'com.github.nicolas-raoul:Quadtree:ac16ea8035bf07' implementation 'com.github.nicolas-raoul:Quadtree:ac16ea8035bf07'
implementation 'fr.avianey.com.viewpagerindicator:library:2.4.1.1@aar' implementation 'fr.avianey.com.viewpagerindicator:library:2.4.1.1@aar'
implementation 'in.yuvi:http.fluent:1.3' implementation 'in.yuvi:http.fluent:1.3'
@ -19,48 +21,37 @@ dependencies {
implementation 'com.jakewharton.timber:timber:4.5.1' implementation 'com.jakewharton.timber:timber:4.5.1'
implementation 'info.debatty:java-string-similarity:0.24' implementation 'info.debatty:java-string-similarity:0.24'
implementation 'com.borjabravo:readmoretextview:2.1.0' implementation 'com.borjabravo:readmoretextview:2.1.0'
implementation 'com.android.support.constraint:constraint-layout:1.1.0' implementation 'com.android.support.constraint:constraint-layout:1.0.2'
implementation ('com.mapbox.mapboxsdk:mapbox-android-sdk:5.4.1@aar'){ implementation('com.mapbox.mapboxsdk:mapbox-android-sdk:5.4.1@aar') {
transitive=true transitive = true
} }
implementation 'com.github.deano2390:MaterialShowcaseView:1.2.0'
implementation "com.github.deano2390:MaterialShowcaseView:1.2.0"
implementation "com.android.support:support-v4:$SUPPORT_LIB_VERSION" implementation "com.android.support:support-v4:$SUPPORT_LIB_VERSION"
implementation "com.android.support:appcompat-v7:$SUPPORT_LIB_VERSION" implementation "com.android.support:appcompat-v7:$SUPPORT_LIB_VERSION"
implementation "com.android.support:design:$SUPPORT_LIB_VERSION" implementation "com.android.support:design:$SUPPORT_LIB_VERSION"
implementation "com.android.support:customtabs:$SUPPORT_LIB_VERSION" implementation "com.android.support:customtabs:$SUPPORT_LIB_VERSION"
implementation "com.android.support:cardview-v7:$SUPPORT_LIB_VERSION" implementation "com.android.support:cardview-v7:$SUPPORT_LIB_VERSION"
implementation "com.jakewharton:butterknife:$BUTTERKNIFE_VERSION" implementation "com.jakewharton:butterknife:$BUTTERKNIFE_VERSION"
kapt "com.jakewharton:butterknife-compiler:$BUTTERKNIFE_VERSION" kapt "com.jakewharton:butterknife-compiler:$BUTTERKNIFE_VERSION"
implementation 'com.squareup.okhttp3:okhttp:3.9.1' implementation 'com.squareup.okhttp3:okhttp:3.9.1'
implementation 'com.squareup.okio:okio:1.13.0' implementation 'com.squareup.okio:okio:1.13.0'
implementation 'io.reactivex.rxjava2:rxandroid:2.0.1' implementation 'io.reactivex.rxjava2:rxandroid:2.0.1'
// Because RxAndroid releases are few and far between, it is recommended you also // 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. // explicitly depend on RxJava's latest version for bug fixes and new features.
implementation 'com.android.support:multidex:1.0.3' implementation 'com.android.support:multidex:1.0.3'
implementation 'io.reactivex.rxjava2:rxjava:2.1.2' implementation 'io.reactivex.rxjava2:rxjava:2.1.2'
implementation 'com.jakewharton.rxbinding2:rxbinding:2.0.0' implementation 'com.jakewharton.rxbinding2:rxbinding:2.0.0'
implementation 'com.jakewharton.rxbinding2:rxbinding-support-v4: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-appcompat-v7:2.0.0'
implementation 'com.jakewharton.rxbinding2:rxbinding-design:2.0.0' implementation 'com.jakewharton.rxbinding2:rxbinding-design:2.0.0'
implementation 'org.jsoup:jsoup:1.11.3' implementation 'org.jsoup:jsoup:1.11.3'
implementation 'com.facebook.fresco:fresco:1.5.0' implementation 'com.facebook.fresco:fresco:1.5.0'
implementation 'com.facebook.stetho:stetho:1.5.0' implementation 'com.facebook.stetho:stetho:1.5.0'
implementation "com.google.dagger:dagger:$DAGGER_VERSION" implementation "com.google.dagger:dagger:$DAGGER_VERSION"
implementation "com.google.dagger:dagger-android-support:$DAGGER_VERSION" implementation "com.google.dagger:dagger-android-support:$DAGGER_VERSION"
kapt "com.google.dagger:dagger-android-processor:$DAGGER_VERSION" kapt "com.google.dagger:dagger-android-processor:$DAGGER_VERSION"
kapt "com.google.dagger:dagger-compiler:$DAGGER_VERSION" kapt "com.google.dagger:dagger-compiler:$DAGGER_VERSION"
testImplementation 'org.robolectric:multidex:3.4.2'
testImplementation "org.robolectric:multidex:3.4.2"
testImplementation "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version" testImplementation "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"
testImplementation "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version" testImplementation "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version"
testImplementation 'junit:junit:4.12' testImplementation 'junit:junit:4.12'
@ -92,8 +83,8 @@ android {
defaultConfig { defaultConfig {
applicationId 'fr.free.nrw.commons' applicationId 'fr.free.nrw.commons'
versionCode 84 versionCode 85
versionName '2.7.1' versionName '2.7.2'
setProperty("archivesBaseName", "app-commons-v$versionName-" + getBranchName()) setProperty("archivesBaseName", "app-commons-v$versionName-" + getBranchName())
minSdkVersion project.minSdkVersion minSdkVersion project.minSdkVersion
@ -134,7 +125,9 @@ android {
flavorDimensions 'tier' flavorDimensions 'tier'
productFlavors { productFlavors {
prod { prod {
buildConfigField "String", "WIKIMEDIA_API_POTD", "\"https://commons.wikimedia.org/w/api.php?action=featuredfeed&feed=potd&feedformat=rss&language=en\""
buildConfigField "String", "WIKIMEDIA_API_HOST", "\"https://commons.wikimedia.org/w/api.php\"" buildConfigField "String", "WIKIMEDIA_API_HOST", "\"https://commons.wikimedia.org/w/api.php\""
buildConfigField "String", "WIKIDATA_API_HOST", "\"https://www.wikidata.org/w/api.php\""
buildConfigField "String", "WIKIMEDIA_FORGE_API_HOST", "\"https://tools.wmflabs.org/\"" buildConfigField "String", "WIKIMEDIA_FORGE_API_HOST", "\"https://tools.wmflabs.org/\""
buildConfigField "String", "IMAGE_URL_BASE", "\"https://upload.wikimedia.org/wikipedia/commons\"" buildConfigField "String", "IMAGE_URL_BASE", "\"https://upload.wikimedia.org/wikipedia/commons\""
buildConfigField "String", "HOME_URL", "\"https://commons.wikimedia.org/wiki/\"" buildConfigField "String", "HOME_URL", "\"https://commons.wikimedia.org/wiki/\""
@ -150,7 +143,9 @@ android {
beta { beta {
// What values do we need to hit the BETA versions of the site / api ? // What values do we need to hit the BETA versions of the site / api ?
buildConfigField "String", "WIKIMEDIA_API_POTD", "\"https://commons.wikimedia.org/w/api.php?action=featuredfeed&feed=potd&feedformat=rss&language=en\""
buildConfigField "String", "WIKIMEDIA_API_HOST", "\"https://commons.wikimedia.beta.wmflabs.org/w/api.php\"" buildConfigField "String", "WIKIMEDIA_API_HOST", "\"https://commons.wikimedia.beta.wmflabs.org/w/api.php\""
buildConfigField "String", "WIKIDATA_API_HOST", "\"https://www.wikidata.org/w/api.php\""
buildConfigField "String", "WIKIMEDIA_FORGE_API_HOST", "\"https://tools.wmflabs.org/\"" buildConfigField "String", "WIKIMEDIA_FORGE_API_HOST", "\"https://tools.wmflabs.org/\""
buildConfigField "String", "IMAGE_URL_BASE", "\"https://upload.beta.wmflabs.org/wikipedia/commons\"" buildConfigField "String", "IMAGE_URL_BASE", "\"https://upload.beta.wmflabs.org/wikipedia/commons\""
buildConfigField "String", "HOME_URL", "\"https://commons.wikimedia.beta.wmflabs.org/wiki/\"" buildConfigField "String", "HOME_URL", "\"https://commons.wikimedia.beta.wmflabs.org/wiki/\""

BIN
app/libs/java-json.jar Normal file

Binary file not shown.

View file

@ -27,10 +27,10 @@
android:theme="@style/LightAppTheme" android:theme="@style/LightAppTheme"
android:supportsRtl="true" > android:supportsRtl="true" >
<activity android:name="org.acra.CrashReportDialog" <activity android:name="org.acra.CrashReportDialog"
android:theme="@android:style/Theme.Dialog" android:theme="@android:style/Theme.Dialog"
android:launchMode="singleInstance" android:launchMode="singleInstance"
android:excludeFromRecents="true" android:excludeFromRecents="true"
android:finishOnTaskLaunch="true" /> android:finishOnTaskLaunch="true" />
<activity android:name=".auth.LoginActivity"> <activity android:name=".auth.LoginActivity">
<intent-filter> <intent-filter>
@ -165,6 +165,16 @@
android:label="@string/provider_categories" android:label="@string/provider_categories"
android:syncable="false" /> android:syncable="false" />
<receiver android:name=".widget.PicOfDayAppWidget">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter>
<meta-data
android:name="android.appwidget.provider"
android:resource="@xml/pic_of_day_app_widget_info" />
</receiver>
</application> </application>
</manifest> </manifest>

View file

@ -9,9 +9,6 @@ import android.os.Bundle;
import android.text.Html; import android.text.Html;
import android.text.SpannableString; import android.text.SpannableString;
import android.text.style.UnderlineSpan; import android.text.style.UnderlineSpan;
import android.util.Log;
import android.support.customtabs.CustomTabsIntent;
import android.support.v4.content.ContextCompat;
import android.view.Menu; import android.view.Menu;
import android.view.MenuInflater; import android.view.MenuInflater;
import android.view.MenuItem; import android.view.MenuItem;
@ -20,7 +17,6 @@ import android.widget.ArrayAdapter;
import android.widget.LinearLayout; import android.widget.LinearLayout;
import android.widget.Spinner; import android.widget.Spinner;
import android.widget.TextView; import android.widget.TextView;
import android.widget.Toast;
import butterknife.BindView; import butterknife.BindView;
import butterknife.ButterKnife; import butterknife.ButterKnife;
@ -28,8 +24,6 @@ import butterknife.OnClick;
import fr.free.nrw.commons.theme.NavigationBaseActivity; import fr.free.nrw.commons.theme.NavigationBaseActivity;
import fr.free.nrw.commons.ui.widget.HtmlTextView; import fr.free.nrw.commons.ui.widget.HtmlTextView;
import static android.widget.Toast.LENGTH_SHORT;
/** /**
* Represents about screen of this app * Represents about screen of this app
*/ */

View file

@ -1,6 +1,5 @@
package fr.free.nrw.commons; package fr.free.nrw.commons;
import android.app.Application;
import android.content.Context; import android.content.Context;
import android.content.SharedPreferences; import android.content.SharedPreferences;
import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteDatabase;
@ -27,7 +26,7 @@ import fr.free.nrw.commons.contributions.ContributionDao;
import fr.free.nrw.commons.data.DBOpenHelper; import fr.free.nrw.commons.data.DBOpenHelper;
import fr.free.nrw.commons.di.ApplicationlessInjection; import fr.free.nrw.commons.di.ApplicationlessInjection;
import fr.free.nrw.commons.modifications.ModifierSequenceDao; import fr.free.nrw.commons.modifications.ModifierSequenceDao;
import fr.free.nrw.commons.utils.FileUtils; import fr.free.nrw.commons.upload.FileUtils;
import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.schedulers.Schedulers; import io.reactivex.schedulers.Schedulers;
import timber.log.Timber; import timber.log.Timber;

View file

@ -178,6 +178,7 @@ public class Utils {
} }
public static void handleWebUrl(Context context, Uri url) { public static void handleWebUrl(Context context, Uri url) {
Timber.d("Launching web url %s", url.toString());
Intent browserIntent = new Intent(Intent.ACTION_VIEW, url); Intent browserIntent = new Intent(Intent.ACTION_VIEW, url);
if (browserIntent.resolveActivity(context.getPackageManager()) == null) { if (browserIntent.resolveActivity(context.getPackageManager()) == null) {
Toast toast = Toast.makeText(context, context.getString(R.string.no_web_browser), LENGTH_SHORT); Toast toast = Toast.makeText(context, context.getString(R.string.no_web_browser), LENGTH_SHORT);

View file

@ -4,8 +4,8 @@ import android.accounts.Account;
import android.accounts.AccountAuthenticatorActivity; import android.accounts.AccountAuthenticatorActivity;
import android.accounts.AccountAuthenticatorResponse; import android.accounts.AccountAuthenticatorResponse;
import android.accounts.AccountManager; import android.accounts.AccountManager;
import android.app.Activity;
import android.app.ProgressDialog; import android.app.ProgressDialog;
import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.content.SharedPreferences; import android.content.SharedPreferences;
import android.net.Uri; import android.net.Uri;
@ -23,7 +23,6 @@ import android.view.MenuInflater;
import android.view.MenuItem; import android.view.MenuItem;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.view.inputmethod.InputMethodManager;
import android.widget.Button; import android.widget.Button;
import android.widget.EditText; import android.widget.EditText;
import android.widget.TextView; import android.widget.TextView;
@ -136,6 +135,11 @@ public class LoginActivity extends AccountAuthenticatorActivity {
} }
} }
public static void startYourself(Context context) {
Intent intent = new Intent(context, LoginActivity.class);
context.startActivity(intent);
}
private void forgotPassword() { private void forgotPassword() {
Utils.handleWebUrl(this, Uri.parse(BuildConfig.FORGOT_PASSWORD_URL)); Utils.handleWebUrl(this, Uri.parse(BuildConfig.FORGOT_PASSWORD_URL));
} }

View file

@ -81,6 +81,12 @@ public class SessionManager {
return sharedPreferences.getBoolean("isUserLoggedIn", false); return sharedPreferences.getBoolean("isUserLoggedIn", false);
} }
public void forceLogin(Context context) {
if (context != null) {
LoginActivity.startYourself(context);
}
}
public Completable clearAllAccounts() { public Completable clearAllAccounts() {
AccountManager accountManager = AccountManager.get(context); AccountManager accountManager = AccountManager.get(context);
Account[] allAccounts = accountManager.getAccountsByType(ACCOUNT_TYPE); Account[] allAccounts = accountManager.getAccountsByType(ACCOUNT_TYPE);

View file

@ -14,7 +14,6 @@ import fr.free.nrw.commons.Media;
import fr.free.nrw.commons.R; import fr.free.nrw.commons.R;
import fr.free.nrw.commons.auth.AuthenticatedActivity; import fr.free.nrw.commons.auth.AuthenticatedActivity;
import fr.free.nrw.commons.media.MediaDetailPagerFragment; import fr.free.nrw.commons.media.MediaDetailPagerFragment;
import timber.log.Timber;
/** /**
* This activity displays pictures of a particular category * This activity displays pictures of a particular category

View file

@ -228,7 +228,7 @@ public class CategoryImagesListFragment extends DaggerFragment {
/** /**
* This method will be called on back pressed of CategoryImagesActivity. * This method will be called on back pressed of CategoryImagesActivity.
* It initializes the grid view by setting adapter. * It initializes the grid view by setting adapter.
\ */ */
@Override @Override
public void onResume() { public void onResume() {
gridView.setAdapter(gridAdapter); gridView.setAdapter(gridAdapter);

View file

@ -45,6 +45,7 @@ public class Contribution extends Media {
private long transferred; private long transferred;
private String decimalCoords; private String decimalCoords;
private boolean isMultiple; private boolean isMultiple;
private String wikiDataEntityId;
public Contribution(Uri contentUri, String filename, Uri localUri, String imageUrl, Date timestamp, public Contribution(Uri contentUri, String filename, Uri localUri, String imageUrl, Date timestamp,
int state, long dataLength, Date dateUploaded, long transferred, int state, long dataLength, Date dateUploaded, long transferred,
@ -222,4 +223,17 @@ public class Contribution extends Media {
throw new RuntimeException("Unrecognized license value: " + license); throw new RuntimeException("Unrecognized license value: " + license);
} }
public String getWikiDataEntityId() {
return wikiDataEntityId;
}
/**
* When the corresponding wikidata entity is known as in case of nearby uploads, it can be set
* using the setter method
* @param wikiDataEntityId
*/
public void setWikiDataEntityId(String wikiDataEntityId) {
this.wikiDataEntityId = wikiDataEntityId;
}
} }

View file

@ -90,7 +90,7 @@ public class ContributionController {
fragment.startActivityForResult(pickImageIntent, SELECT_FROM_GALLERY); fragment.startActivityForResult(pickImageIntent, SELECT_FROM_GALLERY);
} }
public void handleImagePicked(int requestCode, Intent data, boolean isDirectUpload) { public void handleImagePicked(int requestCode, Intent data, boolean isDirectUpload, String wikiDataEntityId) {
FragmentActivity activity = fragment.getActivity(); FragmentActivity activity = fragment.getActivity();
Timber.d("handleImagePicked() called with onActivityResult()"); Timber.d("handleImagePicked() called with onActivityResult()");
Intent shareIntent = new Intent(activity, ShareActivity.class); Intent shareIntent = new Intent(activity, ShareActivity.class);
@ -102,9 +102,6 @@ public class ContributionController {
shareIntent.setType(activity.getContentResolver().getType(imageData)); shareIntent.setType(activity.getContentResolver().getType(imageData));
shareIntent.putExtra(EXTRA_STREAM, imageData); shareIntent.putExtra(EXTRA_STREAM, imageData);
shareIntent.putExtra(EXTRA_SOURCE, SOURCE_GALLERY); shareIntent.putExtra(EXTRA_SOURCE, SOURCE_GALLERY);
if (isDirectUpload) {
shareIntent.putExtra("isDirectUpload", true);
}
break; break;
case SELECT_FROM_CAMERA: case SELECT_FROM_CAMERA:
//FIXME: Find out appropriate mime type //FIXME: Find out appropriate mime type
@ -113,9 +110,6 @@ public class ContributionController {
shareIntent.setType("image/jpeg"); shareIntent.setType("image/jpeg");
shareIntent.putExtra(EXTRA_STREAM, lastGeneratedCaptureUri); shareIntent.putExtra(EXTRA_STREAM, lastGeneratedCaptureUri);
shareIntent.putExtra(EXTRA_SOURCE, SOURCE_CAMERA); shareIntent.putExtra(EXTRA_SOURCE, SOURCE_CAMERA);
if (isDirectUpload) {
shareIntent.putExtra("isDirectUpload", true);
}
break; break;
default: default:
@ -123,6 +117,10 @@ public class ContributionController {
} }
Timber.i("Image selected"); Timber.i("Image selected");
try { try {
shareIntent.putExtra("isDirectUpload", isDirectUpload);
if (wikiDataEntityId != null && !wikiDataEntityId.equals("")) {
shareIntent.putExtra("wikiDataEntityId", wikiDataEntityId);
}
activity.startActivity(shareIntent); activity.startActivity(shareIntent);
} catch (SecurityException e) { } catch (SecurityException e) {
Timber.e(e, "Security Exception"); Timber.e(e, "Security Exception");

View file

@ -8,7 +8,6 @@ import android.net.Uri;
import android.os.RemoteException; import android.os.RemoteException;
import android.support.annotation.Nullable; import android.support.annotation.Nullable;
import android.text.TextUtils; import android.text.TextUtils;
import android.util.Log;
import java.util.Date; import java.util.Date;

View file

@ -276,17 +276,25 @@ public class ContributionsActivity
.getUploadCount(sessionManager.getCurrentAccount().name) .getUploadCount(sessionManager.getCurrentAccount().name)
.subscribeOn(Schedulers.io()) .subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread()) .observeOn(AndroidSchedulers.mainThread())
.subscribe( .subscribe(this::displayUploadCount,
uploadCount -> getSupportActionBar().setSubtitle(getResources()
.getQuantityString(R.plurals.contributions_subtitle,
uploadCount, uploadCount)),
t -> Timber.e(t, "Fetching upload count failed") t -> Timber.e(t, "Fetching upload count failed")
)); ));
} }
public void betaSetUploadCount(int betaUploadCount){ private void displayUploadCount(Integer uploadCount) {
if (isFinishing()
|| getSupportActionBar() == null
|| getResources() == null) {
return;
}
getSupportActionBar().setSubtitle(getResources() getSupportActionBar().setSubtitle(getResources()
.getQuantityString(R.plurals.contributions_subtitle, betaUploadCount, betaUploadCount)); .getQuantityString(R.plurals.contributions_subtitle,
uploadCount, uploadCount));
}
public void betaSetUploadCount(int betaUploadCount) {
displayUploadCount(betaUploadCount);
} }

View file

@ -117,7 +117,7 @@ public class ContributionsListFragment extends CommonsDaggerSupportFragment {
if (resultCode == RESULT_OK) { if (resultCode == RESULT_OK) {
Timber.d("OnActivityResult() parameters: Req code: %d Result code: %d Data: %s", Timber.d("OnActivityResult() parameters: Req code: %d Result code: %d Data: %s",
requestCode, resultCode, data); requestCode, resultCode, data);
controller.handleImagePicked(requestCode, data, false); controller.handleImagePicked(requestCode, data, false, null);
} else { } else {
Timber.e("OnActivityResult() parameters: Req code: %d Result code: %d Data: %s", Timber.e("OnActivityResult() parameters: Req code: %d Result code: %d Data: %s",
requestCode, resultCode, data); requestCode, resultCode, data);

View file

@ -13,8 +13,10 @@ import fr.free.nrw.commons.contributions.ContributionsSyncAdapter;
import fr.free.nrw.commons.delete.DeleteTask; import fr.free.nrw.commons.delete.DeleteTask;
import fr.free.nrw.commons.modifications.ModificationsSyncAdapter; import fr.free.nrw.commons.modifications.ModificationsSyncAdapter;
import fr.free.nrw.commons.nearby.PlaceRenderer; import fr.free.nrw.commons.nearby.PlaceRenderer;
import fr.free.nrw.commons.upload.FileProcessor;
import fr.free.nrw.commons.settings.SettingsFragment; import fr.free.nrw.commons.settings.SettingsFragment;
@Singleton @Singleton
@Component(modules = { @Component(modules = {
CommonsApplicationModule.class, CommonsApplicationModule.class,
@ -46,6 +48,8 @@ public interface CommonsApplicationComponent extends AndroidInjector<Application
void inject(PlaceRenderer placeRenderer); void inject(PlaceRenderer placeRenderer);
void inject(FileProcessor fileProcessor);
@Component.Builder @Component.Builder
@SuppressWarnings({"WeakerAccess", "unused"}) @SuppressWarnings({"WeakerAccess", "unused"})
interface Builder { interface Builder {

View file

@ -11,6 +11,7 @@ import javax.inject.Singleton;
import dagger.Module; import dagger.Module;
import dagger.Provides; import dagger.Provides;
import fr.free.nrw.commons.auth.AccountUtil; import fr.free.nrw.commons.auth.AccountUtil;
import fr.free.nrw.commons.auth.SessionManager; import fr.free.nrw.commons.auth.SessionManager;
import fr.free.nrw.commons.data.DBOpenHelper; import fr.free.nrw.commons.data.DBOpenHelper;
@ -18,6 +19,8 @@ import fr.free.nrw.commons.location.LocationServiceManager;
import fr.free.nrw.commons.mwapi.MediaWikiApi; import fr.free.nrw.commons.mwapi.MediaWikiApi;
import fr.free.nrw.commons.nearby.NearbyPlaces; import fr.free.nrw.commons.nearby.NearbyPlaces;
import fr.free.nrw.commons.upload.UploadController; import fr.free.nrw.commons.upload.UploadController;
import fr.free.nrw.commons.wikidata.WikidataEditListener;
import fr.free.nrw.commons.wikidata.WikidataEditListenerImpl;
import static android.content.Context.MODE_PRIVATE; import static android.content.Context.MODE_PRIVATE;
import static fr.free.nrw.commons.contributions.ContributionsContentProvider.CONTRIBUTION_AUTHORITY; import static fr.free.nrw.commons.contributions.ContributionsContentProvider.CONTRIBUTION_AUTHORITY;
@ -133,4 +136,10 @@ public class CommonsApplicationModule {
public LruCache<String, String> provideLruCache() { public LruCache<String, String> provideLruCache() {
return new LruCache<>(1024); return new LruCache<>(1024);
} }
@Provides
@Singleton
public WikidataEditListener provideWikidataEditListener() {
return new WikidataEditListenerImpl();
}
} }

View file

@ -35,7 +35,7 @@ public class NetworkingModule {
@Named("default_preferences") SharedPreferences defaultPreferences, @Named("default_preferences") SharedPreferences defaultPreferences,
@Named("category_prefs") SharedPreferences categoryPrefs, @Named("category_prefs") SharedPreferences categoryPrefs,
Gson gson) { Gson gson) {
return new ApacheHttpClientMediaWikiApi(context, BuildConfig.WIKIMEDIA_API_HOST, defaultPreferences, categoryPrefs, gson); return new ApacheHttpClientMediaWikiApi(context, BuildConfig.WIKIMEDIA_API_HOST, BuildConfig.WIKIDATA_API_HOST, defaultPreferences, categoryPrefs, gson);
} }
@Provides @Provides

View file

@ -284,6 +284,7 @@ public class LocationServiceManager implements LocationListener {
LOCATION_SIGNIFICANTLY_CHANGED, //Went out of borders of nearby markers LOCATION_SIGNIFICANTLY_CHANGED, //Went out of borders of nearby markers
LOCATION_SLIGHTLY_CHANGED, //User might be walking or driving LOCATION_SLIGHTLY_CHANGED, //User might be walking or driving
LOCATION_NOT_CHANGED, LOCATION_NOT_CHANGED,
PERMISSION_JUST_GRANTED PERMISSION_JUST_GRANTED,
MAP_UPDATED
} }
} }

View file

@ -23,6 +23,9 @@ import android.widget.ScrollView;
import android.widget.TextView; import android.widget.TextView;
import android.widget.Toast; import android.widget.Toast;
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
import java.io.IOException; import java.io.IOException;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.ArrayList; import java.util.ArrayList;
@ -32,9 +35,6 @@ import java.util.Locale;
import javax.inject.Inject; import javax.inject.Inject;
import javax.inject.Provider; import javax.inject.Provider;
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
import fr.free.nrw.commons.License; import fr.free.nrw.commons.License;
import fr.free.nrw.commons.LicenseList; import fr.free.nrw.commons.LicenseList;
import fr.free.nrw.commons.Media; import fr.free.nrw.commons.Media;

View file

@ -2,11 +2,9 @@ package fr.free.nrw.commons.media;
import android.annotation.SuppressLint; import android.annotation.SuppressLint;
import android.app.DownloadManager; import android.app.DownloadManager;
import android.app.WallpaperManager;
import android.content.Intent; import android.content.Intent;
import android.content.SharedPreferences; import android.content.SharedPreferences;
import android.database.DataSetObserver; import android.database.DataSetObserver;
import android.graphics.Bitmap;
import android.net.Uri; import android.net.Uri;
import android.os.Build; import android.os.Build;
import android.os.Bundle; import android.os.Bundle;
@ -28,8 +26,6 @@ import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.Toast; import android.widget.Toast;
import java.io.IOException;
import butterknife.BindView; import butterknife.BindView;
import butterknife.ButterKnife; import butterknife.ButterKnife;
import javax.inject.Inject; import javax.inject.Inject;
@ -50,7 +46,6 @@ import static android.content.Context.DOWNLOAD_SERVICE;
import static android.content.Intent.ACTION_VIEW; import static android.content.Intent.ACTION_VIEW;
import static android.content.pm.PackageManager.PERMISSION_GRANTED; import static android.content.pm.PackageManager.PERMISSION_GRANTED;
import static android.widget.Toast.LENGTH_SHORT; import static android.widget.Toast.LENGTH_SHORT;
import static com.mapbox.mapboxsdk.Mapbox.getApplicationContext;
public class MediaDetailPagerFragment extends CommonsDaggerSupportFragment implements ViewPager.OnPageChangeListener { public class MediaDetailPagerFragment extends CommonsDaggerSupportFragment implements ViewPager.OnPageChangeListener {

View file

@ -25,6 +25,8 @@ import org.apache.http.params.CoreProtocolPNames;
import org.apache.http.util.EntityUtils; import org.apache.http.util.EntityUtils;
import org.mediawiki.api.ApiResult; import org.mediawiki.api.ApiResult;
import org.mediawiki.api.MWApi; import org.mediawiki.api.MWApi;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList; import org.w3c.dom.NodeList;
import java.io.IOException; import java.io.IOException;
@ -63,6 +65,7 @@ public class ApacheHttpClientMediaWikiApi implements MediaWikiApi {
private static final String THUMB_SIZE = "640"; private static final String THUMB_SIZE = "640";
private AbstractHttpClient httpClient; private AbstractHttpClient httpClient;
private MWApi api; private MWApi api;
private MWApi wikidataApi;
private Context context; private Context context;
private SharedPreferences defaultPreferences; private SharedPreferences defaultPreferences;
private SharedPreferences categoryPreferences; private SharedPreferences categoryPreferences;
@ -70,6 +73,7 @@ public class ApacheHttpClientMediaWikiApi implements MediaWikiApi {
public ApacheHttpClientMediaWikiApi(Context context, public ApacheHttpClientMediaWikiApi(Context context,
String apiURL, String apiURL,
String wikidatApiURL,
SharedPreferences defaultPreferences, SharedPreferences defaultPreferences,
SharedPreferences categoryPreferences, SharedPreferences categoryPreferences,
Gson gson) { Gson gson) {
@ -83,6 +87,7 @@ public class ApacheHttpClientMediaWikiApi implements MediaWikiApi {
params.setParameter(CoreProtocolPNames.USER_AGENT, getUserAgent()); params.setParameter(CoreProtocolPNames.USER_AGENT, getUserAgent());
httpClient = new DefaultHttpClient(cm, params); httpClient = new DefaultHttpClient(cm, params);
api = new MWApi(apiURL, httpClient); api = new MWApi(apiURL, httpClient);
wikidataApi = new MWApi(wikidatApiURL, httpClient);
this.defaultPreferences = defaultPreferences; this.defaultPreferences = defaultPreferences;
this.categoryPreferences = categoryPreferences; this.categoryPreferences = categoryPreferences;
this.gson = gson; this.gson = gson;
@ -207,6 +212,15 @@ public class ApacheHttpClientMediaWikiApi implements MediaWikiApi {
return api.getEditToken(); return api.getEditToken();
} }
@Override
public String getCentralAuthToken() throws IOException {
String centralAuthToken = api.action("centralauthtoken")
.get()
.getString("/api/centralauthtoken/@centralauthtoken");
Timber.d("MediaWiki Central auth token is %s", centralAuthToken);
return centralAuthToken;
}
@Override @Override
public boolean fileExistsWithName(String fileName) throws IOException { public boolean fileExistsWithName(String fileName) throws IOException {
return api.action("query") return api.action("query")
@ -352,6 +366,98 @@ public class ApacheHttpClientMediaWikiApi implements MediaWikiApi {
}).flatMapObservable(Observable::fromIterable); }).flatMapObservable(Observable::fromIterable);
} }
/**
* Get the edit token for making wiki data edits
* https://www.mediawiki.org/wiki/API:Tokens
* @return
* @throws IOException
*/
private String getWikidataEditToken() throws IOException {
return wikidataApi.getEditToken();
}
@Override
public String getWikidataCsrfToken() throws IOException {
String wikidataCsrfToken = wikidataApi.action("query")
.param("action", "query")
.param("centralauthtoken", getCentralAuthToken())
.param("meta", "tokens")
.post()
.getString("/api/query/tokens/@csrftoken");
Timber.d("Wikidata csrf token is %s", wikidataCsrfToken);
return wikidataCsrfToken;
}
/**
* Creates a new claim using the wikidata API
* https://www.mediawiki.org/wiki/Wikibase/API
* @param entityId the wikidata entity to be edited
* @param property the property to be edited, for eg P18 for images
* @param snaktype the type of value stored for that property
* @param value the actual value to be stored for the property, for eg filename in case of P18
* @return returns revisionId if the claim is successfully created else returns null
* @throws IOException
*/
@Nullable
@Override
public String wikidatCreateClaim(String entityId, String property, String snaktype, String value) throws IOException {
Timber.d("Filename is %s", value);
ApiResult result = wikidataApi.action("wbcreateclaim")
.param("entity", entityId)
.param("centralauthtoken", getCentralAuthToken())
.param("token", getWikidataCsrfToken())
.param("snaktype", snaktype)
.param("property", property)
.param("value", value)
.post();
if (result == null || result.getNode("api") == null) {
return null;
}
Node node = result.getNode("api").getDocument();
Element element = (Element) node;
if (element != null && element.getAttribute("success").equals("1")) {
return result.getString("api/pageinfo/@lastrevid");
} else {
Timber.e(result.getString("api/error/@code") + " " + result.getString("api/error/@info"));
}
return null;
}
/**
* Adds the wikimedia-commons-app tag to the edits made on wikidata
* @param revisionId
* @return
* @throws IOException
*/
@Nullable
@Override
public boolean addWikidataEditTag(String revisionId) throws IOException {
ApiResult result = wikidataApi.action("tag")
.param("revid", revisionId)
.param("centralauthtoken", getCentralAuthToken())
.param("token", getWikidataCsrfToken())
.param("add", "wikimedia-commons-app")
.param("reason", "Add tag for edits made using Android Commons app")
.post();
if (result == null || result.getNode("api") == null) {
return false;
}
Node node = result.getNode("api").getDocument();
Element element = (Element) node;
if (element != null && element.getAttribute("status").equals("success")) {
return true;
} else {
Timber.e(result.getString("api/error/@code") + " " + result.getString("api/error/@info"));
}
return false;
}
@Override @Override
@NonNull @NonNull
public Observable<String> searchTitles(String title, int searchCatsLimit) { public Observable<String> searchTitles(String title, int searchCatsLimit) {
@ -481,6 +587,8 @@ public class ApacheHttpClientMediaWikiApi implements MediaWikiApi {
.param("format", "xml") .param("format", "xml")
.param("gcmtype", "file") .param("gcmtype", "file")
.param("gcmtitle", categoryName) .param("gcmtitle", categoryName)
.param("gcmsort", "timestamp")//property to sort by;timestamp
.param("gcmdir", "desc")//in which direction to sort;descending
.param("prop", "imageinfo") .param("prop", "imageinfo")
.param("gcmlimit", "10") .param("gcmlimit", "10")
.param("iiprop", "url|extmetadata"); .param("iiprop", "url|extmetadata");
@ -587,6 +695,7 @@ public class ApacheHttpClientMediaWikiApi implements MediaWikiApi {
String resultStatus = result.getString("/api/upload/@result"); String resultStatus = result.getString("/api/upload/@result");
if (!resultStatus.equals("Success")) { if (!resultStatus.equals("Success")) {
String errorCode = result.getString("/api/error/@code"); String errorCode = result.getString("/api/error/@code");
Timber.e(errorCode);
return new UploadResult(resultStatus, errorCode); return new UploadResult(resultStatus, errorCode);
} else { } else {
Date dateUploaded = parseMWDate(result.getString("/api/upload/imageinfo/@timestamp")); Date dateUploaded = parseMWDate(result.getString("/api/upload/imageinfo/@timestamp"));

View file

@ -27,6 +27,10 @@ public interface MediaWikiApi {
String getEditToken() throws IOException; String getEditToken() throws IOException;
String getWikidataCsrfToken() throws IOException;
String getCentralAuthToken() throws IOException;
boolean fileExistsWithName(String fileName) throws IOException; boolean fileExistsWithName(String fileName) throws IOException;
boolean pageExists(String pageName) throws IOException; boolean pageExists(String pageName) throws IOException;
@ -49,6 +53,12 @@ public interface MediaWikiApi {
@Nullable @Nullable
String appendEdit(String editToken, String processedPageContent, String filename, String summary) throws IOException; String appendEdit(String editToken, String processedPageContent, String filename, String summary) throws IOException;
@Nullable
String wikidatCreateClaim(String entityId, String property, String snaktype, String value) throws IOException;
@Nullable
boolean addWikidataEditTag(String revisionId) throws IOException;
@NonNull @NonNull
MediaResult fetchMediaByFilename(String filename) throws IOException; MediaResult fetchMediaByFilename(String filename) throws IOException;

View file

@ -1,6 +1,5 @@
package fr.free.nrw.commons.nearby; package fr.free.nrw.commons.nearby;
import android.content.SharedPreferences;
import android.os.Build; import android.os.Build;
import android.support.v4.app.Fragment; import android.support.v4.app.Fragment;
import android.support.v4.content.ContextCompat; import android.support.v4.content.ContextCompat;

View file

@ -16,7 +16,6 @@ import android.support.design.widget.BottomSheetBehavior;
import android.support.v4.app.FragmentTransaction; import android.support.v4.app.FragmentTransaction;
import android.support.v7.app.AlertDialog; import android.support.v7.app.AlertDialog;
import android.text.TextUtils;
import android.view.Menu; import android.view.Menu;
import android.view.MenuInflater; import android.view.MenuInflater;
import android.view.MenuItem; import android.view.MenuItem;
@ -24,14 +23,9 @@ import android.view.View;
import android.widget.LinearLayout; import android.widget.LinearLayout;
import android.widget.ProgressBar; import android.widget.ProgressBar;
import android.widget.Toast;
import com.google.gson.Gson; import com.google.gson.Gson;
import com.google.gson.GsonBuilder; import com.google.gson.GsonBuilder;
import io.reactivex.functions.Consumer;
import java.io.IOException;
import java.net.ConnectException;
import java.net.UnknownHostException;
import java.util.List; import java.util.List;
import javax.inject.Inject; import javax.inject.Inject;
@ -42,11 +36,13 @@ import butterknife.ButterKnife;
import fr.free.nrw.commons.R; import fr.free.nrw.commons.R;
import fr.free.nrw.commons.location.LatLng; import fr.free.nrw.commons.location.LatLng;
import fr.free.nrw.commons.location.LocationServiceManager; import fr.free.nrw.commons.location.LocationServiceManager;
import fr.free.nrw.commons.location.LocationServiceManager.LocationChangeType;
import fr.free.nrw.commons.location.LocationUpdateListener; import fr.free.nrw.commons.location.LocationUpdateListener;
import fr.free.nrw.commons.theme.NavigationBaseActivity; import fr.free.nrw.commons.theme.NavigationBaseActivity;
import fr.free.nrw.commons.utils.NetworkUtils; import fr.free.nrw.commons.utils.NetworkUtils;
import fr.free.nrw.commons.utils.UriSerializer; import fr.free.nrw.commons.utils.UriSerializer;
import fr.free.nrw.commons.utils.ViewUtil; import fr.free.nrw.commons.utils.ViewUtil;
import fr.free.nrw.commons.wikidata.WikidataEditListener;
import io.reactivex.Observable; import io.reactivex.Observable;
import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.Disposable; import io.reactivex.disposables.Disposable;
@ -55,8 +51,12 @@ import timber.log.Timber;
import uk.co.deanwild.materialshowcaseview.IShowcaseListener; import uk.co.deanwild.materialshowcaseview.IShowcaseListener;
import uk.co.deanwild.materialshowcaseview.MaterialShowcaseView; import uk.co.deanwild.materialshowcaseview.MaterialShowcaseView;
import static fr.free.nrw.commons.location.LocationServiceManager.LocationChangeType.*;
import static fr.free.nrw.commons.location.LocationServiceManager.LocationChangeType.MAP_UPDATED;
public class NearbyActivity extends NavigationBaseActivity implements LocationUpdateListener {
public class NearbyActivity extends NavigationBaseActivity implements LocationUpdateListener,
WikidataEditListener.WikidataP18EditListener {
private static final int LOCATION_REQUEST = 1; private static final int LOCATION_REQUEST = 1;
@ -76,6 +76,8 @@ public class NearbyActivity extends NavigationBaseActivity implements LocationUp
LocationServiceManager locationManager; LocationServiceManager locationManager;
@Inject @Inject
NearbyController nearbyController; NearbyController nearbyController;
@Inject WikidataEditListener wikidataEditListener;
@Inject @Inject
@Named("application_preferences") SharedPreferences applicationPrefs; @Named("application_preferences") SharedPreferences applicationPrefs;
private LatLng curLatLng; private LatLng curLatLng;
@ -110,6 +112,7 @@ public class NearbyActivity extends NavigationBaseActivity implements LocationUp
initBottomSheetBehaviour(); initBottomSheetBehaviour();
initDrawer(); initDrawer();
wikidataEditListener.setAuthenticationStateListener(this);
} }
private void resumeFragment() { private void resumeFragment() {
@ -219,7 +222,7 @@ public class NearbyActivity extends NavigationBaseActivity implements LocationUp
//Still need to check if GPS is enabled //Still need to check if GPS is enabled
checkGps(); checkGps();
lastKnownLocation = locationManager.getLKL(); lastKnownLocation = locationManager.getLKL();
refreshView(LocationServiceManager.LocationChangeType.PERMISSION_JUST_GRANTED); refreshView(PERMISSION_JUST_GRANTED);
} else { } else {
//If permission not granted, go to page that says Nearby Places cannot be displayed //If permission not granted, go to page that says Nearby Places cannot be displayed
hideProgressBar(); hideProgressBar();
@ -279,7 +282,7 @@ public class NearbyActivity extends NavigationBaseActivity implements LocationUp
private void checkLocationPermission() { private void checkLocationPermission() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (locationManager.isLocationPermissionGranted()) { if (locationManager.isLocationPermissionGranted()) {
refreshView(LocationServiceManager.LocationChangeType.LOCATION_SIGNIFICANTLY_CHANGED); refreshView(LOCATION_SIGNIFICANTLY_CHANGED);
} else { } else {
// Should we show an explanation? // Should we show an explanation?
if (locationManager.isPermissionExplanationRequired(this)) { if (locationManager.isPermissionExplanationRequired(this)) {
@ -305,7 +308,7 @@ public class NearbyActivity extends NavigationBaseActivity implements LocationUp
} }
} }
} else { } else {
refreshView(LocationServiceManager.LocationChangeType.LOCATION_SIGNIFICANTLY_CHANGED); refreshView(LOCATION_SIGNIFICANTLY_CHANGED);
} }
} }
@ -314,7 +317,7 @@ public class NearbyActivity extends NavigationBaseActivity implements LocationUp
super.onActivityResult(requestCode, resultCode, data); super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 1) { if (requestCode == 1) {
Timber.d("User is back from Settings page"); Timber.d("User is back from Settings page");
refreshView(LocationServiceManager.LocationChangeType.LOCATION_SIGNIFICANTLY_CHANGED); refreshView(LOCATION_SIGNIFICANTLY_CHANGED);
} }
} }
@ -373,8 +376,7 @@ public class NearbyActivity extends NavigationBaseActivity implements LocationUp
@Override @Override
public void onReceive(Context context, Intent intent) { public void onReceive(Context context, Intent intent) {
if (NetworkUtils.isInternetConnectionEstablished(NearbyActivity.this)) { if (NetworkUtils.isInternetConnectionEstablished(NearbyActivity.this)) {
refreshView(LocationServiceManager refreshView(LOCATION_SIGNIFICANTLY_CHANGED);
.LocationChangeType.LOCATION_SIGNIFICANTLY_CHANGED);
} else { } else {
ViewUtil.showLongToast(NearbyActivity.this, getString(R.string.no_internet)); ViewUtil.showLongToast(NearbyActivity.this, getString(R.string.no_internet));
} }
@ -390,7 +392,7 @@ public class NearbyActivity extends NavigationBaseActivity implements LocationUp
* *
* @param locationChangeType defines if location shanged significantly or slightly * @param locationChangeType defines if location shanged significantly or slightly
*/ */
private void refreshView(LocationServiceManager.LocationChangeType locationChangeType) { private void refreshView(LocationChangeType locationChangeType) {
if (lockNearbyView) { if (lockNearbyView) {
return; return;
} }
@ -403,12 +405,13 @@ public class NearbyActivity extends NavigationBaseActivity implements LocationUp
registerLocationUpdates(); registerLocationUpdates();
LatLng lastLocation = locationManager.getLastLocation(); LatLng lastLocation = locationManager.getLastLocation();
if (curLatLng != null && curLatLng.equals(lastLocation)) { //refresh view only if location has changed if (curLatLng != null && curLatLng.equals(lastLocation)
&& !locationChangeType.equals(MAP_UPDATED)) { //refresh view only if location has changed
return; return;
} }
curLatLng = lastLocation; curLatLng = lastLocation;
if (locationChangeType.equals(LocationServiceManager.LocationChangeType.PERMISSION_JUST_GRANTED)) { if (locationChangeType.equals(PERMISSION_JUST_GRANTED)) {
curLatLng = lastKnownLocation; curLatLng = lastKnownLocation;
} }
@ -417,8 +420,9 @@ public class NearbyActivity extends NavigationBaseActivity implements LocationUp
return; return;
} }
if (locationChangeType.equals(LocationServiceManager.LocationChangeType.LOCATION_SIGNIFICANTLY_CHANGED) if (locationChangeType.equals(LOCATION_SIGNIFICANTLY_CHANGED)
|| locationChangeType.equals(LocationServiceManager.LocationChangeType.PERMISSION_JUST_GRANTED)) { || locationChangeType.equals(PERMISSION_JUST_GRANTED)
|| locationChangeType.equals(MAP_UPDATED)) {
progressBar.setVisibility(View.VISIBLE); progressBar.setVisibility(View.VISIBLE);
//TODO: This hack inserts curLatLng before populatePlaces is called (see #1440). Ideally a proper fix should be found //TODO: This hack inserts curLatLng before populatePlaces is called (see #1440). Ideally a proper fix should be found
@ -440,7 +444,7 @@ public class NearbyActivity extends NavigationBaseActivity implements LocationUp
progressBar.setVisibility(View.GONE); progressBar.setVisibility(View.GONE);
}); });
} else if (locationChangeType } else if (locationChangeType
.equals(LocationServiceManager.LocationChangeType.LOCATION_SLIGHTLY_CHANGED)) { .equals(LOCATION_SLIGHTLY_CHANGED)) {
Gson gson = new GsonBuilder() Gson gson = new GsonBuilder()
.registerTypeAdapter(Uri.class, new UriSerializer()) .registerTypeAdapter(Uri.class, new UriSerializer())
.create(); .create();
@ -685,12 +689,12 @@ public class NearbyActivity extends NavigationBaseActivity implements LocationUp
@Override @Override
public void onLocationChangedSignificantly(LatLng latLng) { public void onLocationChangedSignificantly(LatLng latLng) {
refreshView(LocationServiceManager.LocationChangeType.LOCATION_SIGNIFICANTLY_CHANGED); refreshView(LOCATION_SIGNIFICANTLY_CHANGED);
} }
@Override @Override
public void onLocationChangedSlightly(LatLng latLng) { public void onLocationChangedSlightly(LatLng latLng) {
refreshView(LocationServiceManager.LocationChangeType.LOCATION_SLIGHTLY_CHANGED); refreshView(LOCATION_SLIGHTLY_CHANGED);
} }
public void prepareViewsForSheetPosition(int bottomSheetState) { public void prepareViewsForSheetPosition(int bottomSheetState) {
@ -700,4 +704,9 @@ public class NearbyActivity extends NavigationBaseActivity implements LocationUp
private void showErrorMessage(String message) { private void showErrorMessage(String message) {
ViewUtil.showLongToast(NearbyActivity.this, message); ViewUtil.showLongToast(NearbyActivity.this, message);
} }
@Override
public void onWikidataEditSuccessful() {
refreshView(MAP_UPDATED);
}
} }

View file

@ -2,6 +2,7 @@ package fr.free.nrw.commons.nearby;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.PackageManager; import android.content.pm.PackageManager;
import android.net.Uri; import android.net.Uri;
import android.os.Bundle; import android.os.Bundle;
@ -21,6 +22,9 @@ import java.lang.reflect.Type;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import javax.inject.Inject;
import javax.inject.Named;
import dagger.android.support.AndroidSupportInjection; import dagger.android.support.AndroidSupportInjection;
import dagger.android.support.DaggerFragment; import dagger.android.support.DaggerFragment;
import fr.free.nrw.commons.R; import fr.free.nrw.commons.R;
@ -47,6 +51,11 @@ public class NearbyListFragment extends DaggerFragment {
private RecyclerView recyclerView; private RecyclerView recyclerView;
private ContributionController controller; private ContributionController controller;
@Inject
@Named("direct_nearby_upload_prefs")
SharedPreferences directPrefs;
@Override @Override
public void onCreate(Bundle savedInstanceState) { public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
@ -137,7 +146,7 @@ public class NearbyListFragment extends DaggerFragment {
if (resultCode == RESULT_OK) { if (resultCode == RESULT_OK) {
Timber.d("OnActivityResult() parameters: Req code: %d Result code: %d Data: %s", Timber.d("OnActivityResult() parameters: Req code: %d Result code: %d Data: %s",
requestCode, resultCode, data); requestCode, resultCode, data);
controller.handleImagePicked(requestCode, data, true); controller.handleImagePicked(requestCode, data, true, directPrefs.getString("WikiDataEntityId", null));
} else { } else {
Timber.e("OnActivityResult() parameters: Req code: %d Result code: %d Data: %s", Timber.e("OnActivityResult() parameters: Req code: %d Result code: %d Data: %s",
requestCode, resultCode, data); requestCode, resultCode, data);

View file

@ -731,6 +731,7 @@ public class NearbyMapFragment extends DaggerFragment {
editor.putString("Title", place.getName()); editor.putString("Title", place.getName());
editor.putString("Desc", place.getLongDescription()); editor.putString("Desc", place.getLongDescription());
editor.putString("Category", place.getCategory()); editor.putString("Category", place.getCategory());
editor.putString("WikiDataEntityId", place.getWikiDataEntityId());
editor.apply(); editor.apply();
} }
@ -766,7 +767,7 @@ public class NearbyMapFragment extends DaggerFragment {
if (resultCode == RESULT_OK) { if (resultCode == RESULT_OK) {
Timber.d("OnActivityResult() parameters: Req code: %d Result code: %d Data: %s", Timber.d("OnActivityResult() parameters: Req code: %d Result code: %d Data: %s",
requestCode, resultCode, data); requestCode, resultCode, data);
controller.handleImagePicked(requestCode, data, true); controller.handleImagePicked(requestCode, data, true, directPrefs.getString("WikiDataEntityId", null));
} else { } else {
Timber.e("OnActivityResult() parameters: Req code: %d Result code: %d Data: %s", Timber.e("OnActivityResult() parameters: Req code: %d Result code: %d Data: %s",
requestCode, resultCode, data); requestCode, resultCode, data);

View file

@ -17,7 +17,7 @@ import java.util.regex.Pattern;
import fr.free.nrw.commons.Utils; import fr.free.nrw.commons.Utils;
import fr.free.nrw.commons.location.LatLng; import fr.free.nrw.commons.location.LatLng;
import fr.free.nrw.commons.utils.FileUtils; import fr.free.nrw.commons.upload.FileUtils;
import timber.log.Timber; import timber.log.Timber;
public class NearbyPlaces { public class NearbyPlaces {

View file

@ -3,6 +3,7 @@ package fr.free.nrw.commons.nearby;
import android.graphics.Bitmap; import android.graphics.Bitmap;
import android.net.Uri; import android.net.Uri;
import android.support.annotation.DrawableRes; import android.support.annotation.DrawableRes;
import android.support.annotation.Nullable;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
@ -50,6 +51,20 @@ public class Place {
this.distance = distance; this.distance = distance;
} }
/**
* Extracts the entity id from the wikidata link
* @return returns the entity id if wikidata link exists
*/
@Nullable
public String getWikiDataEntityId() {
if (!hasWikidataLink()) {
return null;
}
String wikiDataLink = siteLinks.getWikidataLink().toString();
return wikiDataLink.replace("http://www.wikidata.org/entity/", "");
}
public boolean hasWikipediaLink() { public boolean hasWikipediaLink() {
return !(siteLinks == null || Uri.EMPTY.equals(siteLinks.getWikipediaLink())); return !(siteLinks == null || Uri.EMPTY.equals(siteLinks.getWikipediaLink()));
} }

View file

@ -25,7 +25,6 @@ import javax.inject.Named;
import butterknife.BindView; import butterknife.BindView;
import butterknife.ButterKnife; import butterknife.ButterKnife;
import fr.free.nrw.commons.CommonsApplication;
import fr.free.nrw.commons.R; import fr.free.nrw.commons.R;
import fr.free.nrw.commons.Utils; import fr.free.nrw.commons.Utils;
import fr.free.nrw.commons.contributions.ContributionController; import fr.free.nrw.commons.contributions.ContributionController;

View file

@ -16,7 +16,6 @@ import android.widget.RelativeLayout;
import com.pedrogomez.renderers.RVRendererAdapter; import com.pedrogomez.renderers.RVRendererAdapter;
import java.lang.ref.WeakReference;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
@ -26,6 +25,7 @@ import butterknife.BindView;
import butterknife.ButterKnife; import butterknife.ButterKnife;
import fr.free.nrw.commons.R; import fr.free.nrw.commons.R;
import fr.free.nrw.commons.Utils; import fr.free.nrw.commons.Utils;
import fr.free.nrw.commons.mwapi.MediaWikiApi;
import fr.free.nrw.commons.theme.NavigationBaseActivity; import fr.free.nrw.commons.theme.NavigationBaseActivity;
import fr.free.nrw.commons.utils.NetworkUtils; import fr.free.nrw.commons.utils.NetworkUtils;
import fr.free.nrw.commons.utils.ViewUtil; import fr.free.nrw.commons.utils.ViewUtil;
@ -46,6 +46,8 @@ public class NotificationActivity extends NavigationBaseActivity {
@BindView(R.id.container) RelativeLayout relativeLayout; @BindView(R.id.container) RelativeLayout relativeLayout;
@Inject NotificationController controller; @Inject NotificationController controller;
@Inject
MediaWikiApi mediaWikiApi;
private static final String TAG_NOTIFICATION_WORKER_FRAGMENT = "NotificationWorkerFragment"; private static final String TAG_NOTIFICATION_WORKER_FRAGMENT = "NotificationWorkerFragment";
private NotificationWorkerFragment mNotificationWorkerFragment; private NotificationWorkerFragment mNotificationWorkerFragment;
@ -81,7 +83,6 @@ public class NotificationActivity extends NavigationBaseActivity {
} }
} }
@SuppressLint("CheckResult") @SuppressLint("CheckResult")
private void addNotifications() { private void addNotifications() {
Timber.d("Add notifications"); Timber.d("Add notifications");

View file

@ -3,13 +3,10 @@ package fr.free.nrw.commons.settings;
import android.Manifest; import android.Manifest;
import android.app.AlertDialog; import android.app.AlertDialog;
import android.content.ActivityNotFoundException; import android.content.ActivityNotFoundException;
import android.content.ComponentName;
import android.content.Context; import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent; import android.content.Intent;
import android.content.SharedPreferences; import android.content.SharedPreferences;
import android.content.pm.PackageManager; import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.net.Uri; import android.net.Uri;
import android.os.Build; import android.os.Build;
import android.os.Bundle; import android.os.Bundle;
@ -24,8 +21,6 @@ import android.support.v4.content.FileProvider;
import android.widget.Toast; import android.widget.Toast;
import java.io.File; import java.io.File;
import java.util.ArrayList;
import java.util.List;
import javax.inject.Inject; import javax.inject.Inject;
import javax.inject.Named; import javax.inject.Named;
@ -35,7 +30,7 @@ import fr.free.nrw.commons.CommonsApplication;
import fr.free.nrw.commons.R; import fr.free.nrw.commons.R;
import fr.free.nrw.commons.Utils; import fr.free.nrw.commons.Utils;
import fr.free.nrw.commons.di.ApplicationlessInjection; import fr.free.nrw.commons.di.ApplicationlessInjection;
import fr.free.nrw.commons.utils.FileUtils; import fr.free.nrw.commons.upload.FileUtils;
public class SettingsFragment extends PreferenceFragment { public class SettingsFragment extends PreferenceFragment {

View file

@ -1,10 +1,8 @@
package fr.free.nrw.commons.upload; package fr.free.nrw.commons.upload;
import android.app.Activity; import android.app.Activity;
import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.graphics.BitmapRegionDecoder; import android.graphics.BitmapRegionDecoder;
import android.net.Uri;
import android.os.AsyncTask; import android.os.AsyncTask;
import android.support.v7.app.AlertDialog; import android.support.v7.app.AlertDialog;

View file

@ -0,0 +1,263 @@
package fr.free.nrw.commons.upload;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.ContentResolver;
import android.content.Context;
import android.content.SharedPreferences;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.os.ParcelFileDescriptor;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.lang.ref.WeakReference;
import java.util.Date;
import java.util.List;
import javax.inject.Inject;
import javax.inject.Named;
import fr.free.nrw.commons.caching.CacheController;
import fr.free.nrw.commons.di.ApplicationlessInjection;
import fr.free.nrw.commons.mwapi.CategoryApi;
import io.reactivex.schedulers.Schedulers;
import timber.log.Timber;
import static com.mapbox.mapboxsdk.Mapbox.getApplicationContext;
/**
* Processing of the image file that is about to be uploaded via ShareActivity is done here
*/
public class FileProcessor implements SimilarImageDialogFragment.onResponse {
@Inject
CacheController cacheController;
@Inject
GpsCategoryModel gpsCategoryModel;
@Inject
CategoryApi apiCall;
@Inject
@Named("default_preferences")
SharedPreferences prefs;
private Uri mediaUri;
private ContentResolver contentResolver;
private GPSExtractor imageObj;
private Context context;
private String decimalCoords;
private boolean haveCheckedForOtherImages = false;
private String filePath;
private boolean useExtStorage;
private boolean cacheFound;
private GPSExtractor tempImageObj;
FileProcessor(Uri mediaUri, ContentResolver contentResolver, Context context) {
this.mediaUri = mediaUri;
this.contentResolver = contentResolver;
this.context = context;
ApplicationlessInjection.getInstance(context.getApplicationContext()).getCommonsApplicationComponent().inject(this);
useExtStorage = prefs.getBoolean("useExternalStorage", true);
}
/**
* Gets file path from media URI.
* In older devices getPath() may fail depending on the source URI, creating and using a copy of the file seems to work instead.
*
* @return file path of media
*/
@Nullable
private String getPathOfMediaOrCopy() {
filePath = FileUtils.getPath(context, mediaUri);
Timber.d("Filepath: " + filePath);
if (filePath == null) {
String copyPath = null;
try {
ParcelFileDescriptor descriptor = contentResolver.openFileDescriptor(mediaUri, "r");
if (descriptor != null) {
if (useExtStorage) {
copyPath = FileUtils.createCopyPath(descriptor);
return copyPath;
}
copyPath = getApplicationContext().getCacheDir().getAbsolutePath() + "/" + new Date().getTime() + ".jpg";
FileUtils.copy(descriptor.getFileDescriptor(), copyPath);
Timber.d("Filepath (copied): %s", copyPath);
return copyPath;
}
} catch (IOException e) {
Timber.w(e, "Error in file " + copyPath);
return null;
}
}
return filePath;
}
/**
* Processes file coordinates, either from EXIF data or user location
*
* @param gpsEnabled if true use GPS
*/
GPSExtractor processFileCoordinates(boolean gpsEnabled) {
Timber.d("Calling GPSExtractor");
try {
ParcelFileDescriptor descriptor = contentResolver.openFileDescriptor(mediaUri, "r");
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
if (descriptor != null) {
imageObj = new GPSExtractor(descriptor.getFileDescriptor(), context, prefs);
}
} else {
String filePath = getPathOfMediaOrCopy();
if (filePath != null) {
imageObj = new GPSExtractor(filePath, context, prefs);
}
}
decimalCoords = imageObj.getCoords(gpsEnabled);
if (decimalCoords == null || !imageObj.imageCoordsExists) {
//Find other photos taken around the same time which has gps coordinates
if (!haveCheckedForOtherImages)
findOtherImages(gpsEnabled);// Do not do repeat the process
} else {
useImageCoords();
}
} catch (FileNotFoundException e) {
Timber.w("File not found: " + mediaUri, e);
}
return imageObj;
}
String getDecimalCoords() {
return decimalCoords;
}
/**
* Find other images around the same location that were taken within the last 20 sec
*
* @param gpsEnabled True if GPS is enabled
*/
private void findOtherImages(boolean gpsEnabled) {
Timber.d("filePath" + getPathOfMediaOrCopy());
long timeOfCreation = new File(filePath).lastModified();//Time when the original image was created
File folder = new File(filePath.substring(0, filePath.lastIndexOf('/')));
File[] files = folder.listFiles();
Timber.d("folderTime Number:" + files.length);
for (File file : files) {
if (file.lastModified() - timeOfCreation <= (120 * 1000) && file.lastModified() - timeOfCreation >= -(120 * 1000)) {
//Make sure the photos were taken within 20seconds
Timber.d("fild date:" + file.lastModified() + " time of creation" + timeOfCreation);
tempImageObj = null;//Temporary GPSExtractor to extract coords from these photos
ParcelFileDescriptor descriptor = null;
try {
descriptor = contentResolver.openFileDescriptor(Uri.parse(file.getAbsolutePath()), "r");
} catch (FileNotFoundException e) {
e.printStackTrace();
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
if (descriptor != null) {
tempImageObj = new GPSExtractor(descriptor.getFileDescriptor(), context, prefs);
}
} else {
if (filePath != null) {
tempImageObj = new GPSExtractor(file.getAbsolutePath(), context, prefs);
}
}
if (tempImageObj != null) {
Timber.d("not null fild EXIF" + tempImageObj.imageCoordsExists + " coords" + tempImageObj.getCoords(gpsEnabled));
if (tempImageObj.getCoords(gpsEnabled) != null && tempImageObj.imageCoordsExists) {
// Current image has gps coordinates and it's not current gps locaiton
Timber.d("This file has image coords:" + file.getAbsolutePath());
SimilarImageDialogFragment newFragment = new SimilarImageDialogFragment();
Bundle args = new Bundle();
args.putString("originalImagePath", filePath);
args.putString("possibleImagePath", file.getAbsolutePath());
newFragment.setArguments(args);
newFragment.show(((AppCompatActivity) context).getSupportFragmentManager(), "dialog");
break;
}
}
}
}
haveCheckedForOtherImages = true; //Finished checking for other images
}
/**
* Initiates retrieval of image coordinates or user coordinates, and caching of coordinates.
* Then initiates the calls to MediaWiki API through an instance of CategoryApi.
*/
@SuppressLint("CheckResult")
public void useImageCoords() {
if (decimalCoords != null) {
Timber.d("Decimal coords of image: %s", decimalCoords);
Timber.d("is EXIF data present:" + imageObj.imageCoordsExists + " from findOther image");
// Only set cache for this point if image has coords
if (imageObj.imageCoordsExists) {
double decLongitude = imageObj.getDecLongitude();
double decLatitude = imageObj.getDecLatitude();
cacheController.setQtPoint(decLongitude, decLatitude);
}
List<String> displayCatList = cacheController.findCategory();
boolean catListEmpty = displayCatList.isEmpty();
// If no categories found in cache, call MediaWiki API to match image coords with nearby Commons categories
if (catListEmpty) {
cacheFound = false;
apiCall.request(decimalCoords)
.subscribeOn(Schedulers.io())
.observeOn(Schedulers.io())
.subscribe(
gpsCategoryModel::setCategoryList,
throwable -> {
Timber.e(throwable);
gpsCategoryModel.clear();
}
);
Timber.d("displayCatList size 0, calling MWAPI %s", displayCatList);
} else {
cacheFound = true;
Timber.d("Cache found, setting categoryList in model to %s", displayCatList);
gpsCategoryModel.setCategoryList(displayCatList);
}
} else {
Timber.d("EXIF: no coords");
}
}
boolean isCacheFound() {
return cacheFound;
}
/**
* Calls the async task that detects if image is fuzzy, too dark, etc
*/
void detectUnwantedPictures() {
String imageMediaFilePath = FileUtils.getPath(context, mediaUri);
DetectUnwantedPicturesAsync detectUnwantedPicturesAsync
= new DetectUnwantedPicturesAsync(new WeakReference<Activity>((Activity) context), imageMediaFilePath);
detectUnwantedPicturesAsync.execute();
}
@Override
public void onPositiveResponse() {
imageObj = tempImageObj;
decimalCoords = imageObj.getCoords(false);// Not necessary to use gps as image already ha EXIF data
Timber.d("EXIF from tempImageObj");
useImageCoords();
}
@Override
public void onNegativeResponse() {
Timber.d("EXIF from imageObj");
useImageCoords();
}
}

View file

@ -15,18 +15,84 @@ import android.provider.MediaStore;
import android.support.annotation.NonNull; import android.support.annotation.NonNull;
import android.support.annotation.Nullable; import android.support.annotation.Nullable;
import java.io.BufferedReader;
import java.io.File; import java.io.File;
import java.io.FileDescriptor; import java.io.FileDescriptor;
import java.io.FileInputStream; import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream; import java.io.FileOutputStream;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.math.BigInteger;
import java.nio.channels.FileChannel; import java.nio.channels.FileChannel;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Date; import java.util.Date;
import timber.log.Timber; import timber.log.Timber;
public class FileUtils { public class FileUtils {
/**
* Get SHA1 of file from input stream
*/
static String getSHA1(InputStream is) {
MessageDigest digest;
try {
digest = MessageDigest.getInstance("SHA1");
} catch (NoSuchAlgorithmException e) {
Timber.e(e, "Exception while getting Digest");
return "";
}
byte[] buffer = new byte[8192];
int read;
try {
while ((read = is.read(buffer)) > 0) {
digest.update(buffer, 0, read);
}
byte[] md5sum = digest.digest();
BigInteger bigInt = new BigInteger(1, md5sum);
String output = bigInt.toString(16);
// Fill to 40 chars
output = String.format("%40s", output).replace(' ', '0');
Timber.i("File SHA1: %s", output);
return output;
} catch (IOException e) {
Timber.e(e, "IO Exception");
return "";
} finally {
try {
is.close();
} catch (IOException e) {
Timber.e(e, "Exception on closing MD5 input stream");
}
}
}
/**
* In older devices getPath() may fail depending on the source URI. Creating and using a copy of the file seems to work instead.
* @return path of copy
*/
@Nullable
static String createCopyPath(ParcelFileDescriptor descriptor) {
try {
String copyPath = Environment.getExternalStorageDirectory().toString() + "/CommonsApp/" + new Date().getTime() + ".jpg";
File newFile = new File(Environment.getExternalStorageDirectory().toString() + "/CommonsApp");
newFile.mkdir();
FileUtils.copy(descriptor.getFileDescriptor(), copyPath);
Timber.d("Filepath (copied): %s", copyPath);
return copyPath;
} catch (IOException e) {
Timber.e(e);
return null;
}
}
/** /**
* Get a file path from a Uri. This will get the the path for Storage Access * Get a file path from a Uri. This will get the the path for Storage Access
* Framework Documents, as well as the _data field for the MediaStore and * Framework Documents, as well as the _data field for the MediaStore and
@ -235,4 +301,80 @@ public class FileUtils {
copy(new FileInputStream(source), new FileOutputStream(destination)); copy(new FileInputStream(source), new FileOutputStream(destination));
} }
/**
* Read and return the content of a resource file as string.
* @param fileName asset file's path (e.g. "/queries/nearby_query.rq")
* @return the content of the file
*/
public static String readFromResource(String fileName) throws IOException {
StringBuilder buffer = new StringBuilder();
BufferedReader reader = null;
try {
InputStream inputStream = FileUtils.class.getResourceAsStream(fileName);
if (inputStream == null) {
throw new FileNotFoundException(fileName);
}
reader = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"));
String line;
while ((line = reader.readLine()) != null) {
buffer.append(line).append("\n");
}
} finally {
if (reader != null) {
reader.close();
}
}
return buffer.toString();
}
/**
* Deletes files.
* @param file context
*/
public static boolean deleteFile(File file) {
boolean deletedAll = true;
if (file != null) {
if (file.isDirectory()) {
String[] children = file.list();
for (String child : children) {
deletedAll = deleteFile(new File(file, child)) && deletedAll;
}
} else {
deletedAll = file.delete();
}
}
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;
}
}
} }

View file

@ -47,6 +47,8 @@ import fr.free.nrw.commons.modifications.TemplateRemoveModifier;
import fr.free.nrw.commons.mwapi.MediaWikiApi; import fr.free.nrw.commons.mwapi.MediaWikiApi;
import timber.log.Timber; import timber.log.Timber;
//TODO: We should use this class to see how multiple uploads are handled, and then REMOVE it.
public class MultipleShareActivity extends AuthenticatedActivity public class MultipleShareActivity extends AuthenticatedActivity
implements MediaDetailPagerFragment.MediaDetailProvider, implements MediaDetailPagerFragment.MediaDetailProvider,
AdapterView.OnItemClickListener, AdapterView.OnItemClickListener,

View file

@ -1,6 +1,5 @@
package fr.free.nrw.commons.upload; package fr.free.nrw.commons.upload;
import android.app.Activity;
import android.content.Context; import android.content.Context;
import android.graphics.Point; import android.graphics.Point;
import android.net.Uri; import android.net.Uri;
@ -17,7 +16,6 @@ import android.view.MenuInflater;
import android.view.MenuItem; import android.view.MenuItem;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.view.inputmethod.InputMethodManager;
import android.widget.AdapterView; import android.widget.AdapterView;
import android.widget.BaseAdapter; import android.widget.BaseAdapter;
import android.widget.EditText; import android.widget.EditText;

View file

@ -74,13 +74,13 @@ public class SingleUploadFragment extends CommonsDaggerSupportFragment {
//What happens when the 'submit' icon is tapped //What happens when the 'submit' icon is tapped
case R.id.menu_upload_single: case R.id.menu_upload_single:
if (titleEdit.getText().toString().isEmpty()) { if (titleEdit.getText().toString().trim().isEmpty()) {
Toast.makeText(getContext(), R.string.add_title_toast, Toast.LENGTH_LONG).show(); Toast.makeText(getContext(), R.string.add_title_toast, Toast.LENGTH_LONG).show();
return false; return false;
} }
String title = titleEdit.getText().toString(); String title = titleEdit.getText().toString().trim();
String desc = descEdit.getText().toString(); String desc = descEdit.getText().toString().trim();
//Save the title/desc in short-lived cache so next time this fragment is loaded, we can access these //Save the title/desc in short-lived cache so next time this fragment is loaded, we can access these
prefs.edit() prefs.edit()

View file

@ -91,7 +91,7 @@ public class UploadController {
* @param decimalCoords the coordinates in decimal. (e.g. "37.51136|-77.602615") * @param decimalCoords the coordinates in decimal. (e.g. "37.51136|-77.602615")
* @param onComplete the progress tracker * @param onComplete the progress tracker
*/ */
public void startUpload(String title, Uri mediaUri, String description, String mimeType, String source, String decimalCoords, ContributionUploadProgress onComplete) { public void startUpload(String title, Uri mediaUri, String description, String mimeType, String source, String decimalCoords, String wikiDataEntityId, ContributionUploadProgress onComplete) {
Contribution contribution; Contribution contribution;
//TODO: Modify this to include coords //TODO: Modify this to include coords
@ -101,6 +101,7 @@ public class UploadController {
contribution.setTag("mimeType", mimeType); contribution.setTag("mimeType", mimeType);
contribution.setSource(source); contribution.setSource(source);
contribution.setWikiDataEntityId(wikiDataEntityId);
//Calls the next overloaded method //Calls the next overloaded method
startUpload(contribution, onComplete); startUpload(contribution, onComplete);

View file

@ -7,7 +7,6 @@ import android.app.PendingIntent;
import android.content.ContentResolver; import android.content.ContentResolver;
import android.content.ContentValues; import android.content.ContentValues;
import android.content.Intent; import android.content.Intent;
import android.content.SharedPreferences;
import android.graphics.BitmapFactory; import android.graphics.BitmapFactory;
import android.os.Bundle; import android.os.Bundle;
import android.support.v4.app.NotificationCompat; import android.support.v4.app.NotificationCompat;
@ -23,7 +22,6 @@ import java.util.regex.Matcher;
import java.util.regex.Pattern; import java.util.regex.Pattern;
import javax.inject.Inject; import javax.inject.Inject;
import javax.inject.Named;
import fr.free.nrw.commons.HandlerService; import fr.free.nrw.commons.HandlerService;
import fr.free.nrw.commons.R; import fr.free.nrw.commons.R;
@ -36,6 +34,7 @@ import fr.free.nrw.commons.contributions.ContributionsContentProvider;
import fr.free.nrw.commons.modifications.ModificationsContentProvider; import fr.free.nrw.commons.modifications.ModificationsContentProvider;
import fr.free.nrw.commons.mwapi.MediaWikiApi; import fr.free.nrw.commons.mwapi.MediaWikiApi;
import fr.free.nrw.commons.mwapi.UploadResult; import fr.free.nrw.commons.mwapi.UploadResult;
import fr.free.nrw.commons.wikidata.WikidataEditService;
import timber.log.Timber; import timber.log.Timber;
public class UploadService extends HandlerService<Contribution> { public class UploadService extends HandlerService<Contribution> {
@ -49,8 +48,8 @@ public class UploadService extends HandlerService<Contribution> {
public static final String EXTRA_CAMPAIGN = EXTRA_PREFIX + ".campaign"; public static final String EXTRA_CAMPAIGN = EXTRA_PREFIX + ".campaign";
@Inject MediaWikiApi mwApi; @Inject MediaWikiApi mwApi;
@Inject WikidataEditService wikidataEditService;
@Inject SessionManager sessionManager; @Inject SessionManager sessionManager;
@Inject @Named("default_preferences") SharedPreferences prefs;
@Inject ContributionDao contributionDao; @Inject ContributionDao contributionDao;
private NotificationManager notificationManager; private NotificationManager notificationManager;
@ -137,6 +136,7 @@ public class UploadService extends HandlerService<Contribution> {
@Override @Override
public void queue(int what, Contribution contribution) { public void queue(int what, Contribution contribution) {
Timber.d("Upload service queue has contribution with wiki data entity id as %s", contribution.getWikiDataEntityId());
switch (what) { switch (what) {
case ACTION_UPLOAD_FILE: case ACTION_UPLOAD_FILE:
@ -231,10 +231,10 @@ public class UploadService extends HandlerService<Contribution> {
Timber.d("Successfully revalidated token!"); Timber.d("Successfully revalidated token!");
} else { } else {
Timber.d("Unable to revalidate :("); Timber.d("Unable to revalidate :(");
// TODO: Put up a new notification, ask them to re-login
stopForeground(true); stopForeground(true);
Toast failureToast = Toast.makeText(this, R.string.authentication_failed, Toast.LENGTH_LONG); Toast failureToast = Toast.makeText(this, R.string.authentication_failed, Toast.LENGTH_LONG);
failureToast.show(); failureToast.show();
sessionManager.forceLogin(this);
return; return;
} }
} }
@ -253,6 +253,7 @@ public class UploadService extends HandlerService<Contribution> {
if (!resultStatus.equals("Success")) { if (!resultStatus.equals("Success")) {
showFailedNotification(contribution); showFailedNotification(contribution);
} else { } else {
wikidataEditService.createClaimWithLogging(contribution.getWikiDataEntityId(), filename);
contribution.setFilename(uploadResult.getCanonicalFilename()); contribution.setFilename(uploadResult.getCanonicalFilename());
contribution.setImageUrl(uploadResult.getImageUrl()); contribution.setImageUrl(uploadResult.getImageUrl());
contribution.setState(Contribution.STATE_COMPLETED); contribution.setState(Contribution.STATE_COMPLETED);

View file

@ -0,0 +1,115 @@
package fr.free.nrw.commons.upload;
import android.content.ContentResolver;
import android.graphics.Bitmap;
import android.graphics.BitmapRegionDecoder;
import android.graphics.Point;
import android.graphics.Rect;
import android.net.Uri;
import android.provider.MediaStore;
import android.support.v4.graphics.BitmapCompat;
import android.view.View;
import android.widget.FrameLayout;
import java.io.IOException;
import java.io.InputStream;
import timber.log.Timber;
/**
* Contains utility methods for the Zoom function in ShareActivity.
*/
public class Zoom {
private View thumbView;
private ContentResolver contentResolver;
private FrameLayout flContainer;
Zoom(View thumbView, FrameLayout flContainer, ContentResolver contentResolver) {
this.thumbView = thumbView;
this.contentResolver = contentResolver;
this.flContainer = flContainer;
}
/**
* Create a scaled bitmap to display the zoomed-in image
* @param input the input stream corresponding to the uploaded image
* @param imageUri the uploaded image's URI
* @return a zoomable bitmap
*/
Bitmap createScaledImage(InputStream input, Uri imageUri) {
Bitmap scaled = null;
BitmapRegionDecoder decoder = null;
Bitmap bitmap = null;
try {
decoder = BitmapRegionDecoder.newInstance(input, false);
bitmap = decoder.decodeRegion(new Rect(10, 10, 50, 50), null);
} catch (IOException e) {
Timber.e(e);
} catch (NullPointerException e) {
Timber.e(e);
}
try {
//Compress the Image
System.gc();
Runtime rt = Runtime.getRuntime();
long maxMemory = rt.freeMemory();
bitmap = MediaStore.Images.Media.getBitmap(contentResolver, imageUri);
int bitmapByteCount = BitmapCompat.getAllocationByteCount(bitmap);
long height = bitmap.getHeight();
long width = bitmap.getWidth();
long calHeight = (long) ((height * maxMemory) / (bitmapByteCount * 1.1));
long calWidth = (long) ((width * maxMemory) / (bitmapByteCount * 1.1));
scaled = Bitmap.createScaledBitmap(bitmap, (int) Math.min(width, calWidth), (int) Math.min(height, calHeight), true);
} catch (IOException e) {
Timber.e(e);
} catch (NullPointerException e) {
Timber.e(e);
scaled = bitmap;
}
return scaled;
}
/**
* Calculate the starting and ending bounds for the zoomed-in image.
* Also set the container view's offset as the origin for the
* bounds, since that's the origin for the positioning animation
* properties (X, Y).
* @param startBounds the global visible rectangle of the thumbnail
* @param finalBounds the global visible rectangle of the container view
* @param globalOffset the container view's offset
* @return scaled start bounds
*/
float adjustStartEndBounds(Rect startBounds, Rect finalBounds, Point globalOffset) {
thumbView.getGlobalVisibleRect(startBounds);
flContainer.getGlobalVisibleRect(finalBounds, globalOffset);
startBounds.offset(-globalOffset.x, -globalOffset.y);
finalBounds.offset(-globalOffset.x, -globalOffset.y);
// Adjust the start bounds to be the same aspect ratio as the final
// bounds using the "center crop" technique. This prevents undesirable
// stretching during the animation. Also calculate the start scaling
// factor (the end scaling factor is always 1.0).
float startScale;
if ((float) finalBounds.width() / finalBounds.height()
> (float) startBounds.width() / startBounds.height()) {
// Extend start bounds horizontally
startScale = (float) startBounds.height() / finalBounds.height();
float startWidth = startScale * finalBounds.width();
float deltaWidth = (startWidth - startBounds.width()) / 2;
startBounds.left -= deltaWidth;
startBounds.right += deltaWidth;
} else {
// Extend start bounds vertically
startScale = (float) startBounds.width() / finalBounds.width();
float startHeight = startScale * finalBounds.height();
float deltaHeight = (startHeight - startBounds.height()) / 2;
startBounds.top -= deltaHeight;
startBounds.bottom += deltaHeight;
}
return startScale;
}
}

View file

@ -1,92 +0,0 @@
package fr.free.nrw.commons.utils;
import android.os.Environment;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import timber.log.Timber;
public class FileUtils {
/**
* Read and return the content of a resource file as string.
*
* @param fileName asset file's path (e.g. "/queries/nearby_query.rq")
* @return the content of the file
*/
public static String readFromResource(String fileName) throws IOException {
StringBuilder buffer = new StringBuilder();
BufferedReader reader = null;
try {
InputStream inputStream = FileUtils.class.getResourceAsStream(fileName);
if (inputStream == null) {
throw new FileNotFoundException(fileName);
}
reader = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"));
String line;
while ((line = reader.readLine()) != null) {
buffer.append(line).append("\n");
}
} finally {
if (reader != null) {
reader.close();
}
}
return buffer.toString();
}
/**
* Deletes files.
* @param file context
*/
public static boolean deleteFile(File file) {
boolean deletedAll = true;
if (file != null) {
if (file.isDirectory()) {
String[] children = file.list();
for (String child : children) {
deletedAll = deleteFile(new File(file, child)) && deletedAll;
}
} else {
deletedAll = file.delete();
}
}
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;
}
}
}

View file

@ -3,14 +3,11 @@ package fr.free.nrw.commons.utils;
import android.app.WallpaperManager; import android.app.WallpaperManager;
import android.content.Context; import android.content.Context;
import android.graphics.Bitmap; import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.BitmapRegionDecoder; import android.graphics.BitmapRegionDecoder;
import android.graphics.Color; import android.graphics.Color;
import android.graphics.Rect; import android.graphics.Rect;
import android.net.Uri; import android.net.Uri;
import android.os.Build;
import android.support.annotation.Nullable; import android.support.annotation.Nullable;
import android.support.annotation.RequiresApi;
import com.facebook.common.executors.CallerThreadExecutor; import com.facebook.common.executors.CallerThreadExecutor;
import com.facebook.common.references.CloseableReference; import com.facebook.common.references.CloseableReference;
@ -27,8 +24,6 @@ import java.io.IOException;
import fr.free.nrw.commons.R; import fr.free.nrw.commons.R;
import timber.log.Timber; import timber.log.Timber;
import static com.mapbox.mapboxsdk.Mapbox.getApplicationContext;
/** /**
* Created by bluesir9 on 3/10/17. * Created by bluesir9 on 3/10/17.
*/ */

View file

@ -0,0 +1,80 @@
package fr.free.nrw.commons.widget;
import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.Context;
import android.widget.RemoteViews;
import com.prof.rssparser.Article;
import com.prof.rssparser.Parser;
import com.squareup.picasso.Picasso;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import java.util.ArrayList;
import fr.free.nrw.commons.BuildConfig;
import fr.free.nrw.commons.R;
/**
* Implementation of App Widget functionality.
*/
public class PicOfDayAppWidget extends AppWidgetProvider {
static void updateAppWidget(Context context, AppWidgetManager appWidgetManager,
int appWidgetId) {
// Construct the RemoteViews object
RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.pic_of_day_app_widget);
String urlString = BuildConfig.WIKIMEDIA_API_POTD;
Parser parser = new Parser();
parser.execute(urlString);
parser.onFinish(new Parser.OnTaskCompleted() {
@Override
public void onTaskCompleted(ArrayList<Article> list) {
String desc = list.get(list.size() - 1).getDescription();
if (desc != null) {
Document document = Jsoup.parse(desc);
Elements elements = document.select("img");
String imageUrl = elements.get(0).attr("src");
if (imageUrl != null && imageUrl.length() > 0) {
Picasso.get().load(imageUrl).into(views, R.id.appwidget_image, new int[]{appWidgetId});
}
}
}
@Override
public void onError() {
}
});
// Instruct the widget manager to update the widget
appWidgetManager.updateAppWidget(appWidgetId, views);
}
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
// There may be multiple widgets active, so update all of them
for (int appWidgetId : appWidgetIds) {
updateAppWidget(context, appWidgetManager, appWidgetId);
}
}
@Override
public void onEnabled(Context context) {
// Enter relevant functionality for when the first widget is created
}
@Override
public void onDisabled(Context context) {
// Enter relevant functionality for when the last widget is disabled
}
}

View file

@ -0,0 +1,16 @@
package fr.free.nrw.commons.wikidata;
public abstract class WikidataEditListener {
protected WikidataP18EditListener wikidataP18EditListener;
public abstract void onSuccessfulWikidataEdit();
public void setAuthenticationStateListener(WikidataP18EditListener wikidataP18EditListener) {
this.wikidataP18EditListener = wikidataP18EditListener;
}
public interface WikidataP18EditListener {
void onWikidataEditSuccessful();
}
}

View file

@ -0,0 +1,20 @@
package fr.free.nrw.commons.wikidata;
/**
* Listener for wikidata edits
*/
public class WikidataEditListenerImpl extends WikidataEditListener {
public WikidataEditListenerImpl() {
}
/**
* Fired when wikidata P18 edit is successful. If there's an active listener, then it is fired
*/
@Override
public void onSuccessfulWikidataEdit() {
if (wikidataP18EditListener != null) {
wikidataP18EditListener.onWikidataEditSuccessful();
}
}
}

View file

@ -0,0 +1,134 @@
package fr.free.nrw.commons.wikidata;
import android.annotation.SuppressLint;
import android.content.Context;
import android.content.SharedPreferences;
import java.util.Locale;
import javax.inject.Inject;
import javax.inject.Named;
import javax.inject.Singleton;
import fr.free.nrw.commons.R;
import fr.free.nrw.commons.mwapi.MediaWikiApi;
import fr.free.nrw.commons.utils.ViewUtil;
import io.reactivex.Observable;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.schedulers.Schedulers;
import timber.log.Timber;
/**
* This class is meant to handle the Wikidata edits made through the app
* It will talk with MediaWikiApi to make necessary API calls, log the edits and fire listeners
* on successful edits
*/
@Singleton
public class WikidataEditService {
private final Context context;
private final MediaWikiApi mediaWikiApi;
private final WikidataEditListener wikidataEditListener;
private final SharedPreferences directPrefs;
@Inject
public WikidataEditService(Context context,
MediaWikiApi mediaWikiApi,
WikidataEditListener wikidataEditListener,
@Named("direct_nearby_upload_prefs") SharedPreferences directPrefs) {
this.context = context;
this.mediaWikiApi = mediaWikiApi;
this.wikidataEditListener = wikidataEditListener;
this.directPrefs = directPrefs;
}
/**
* Create a P18 claim and log the edit with custom tag
* @param wikidataEntityId
* @param fileName
*/
public void createClaimWithLogging(String wikidataEntityId, String fileName) {
if(wikidataEntityId == null
|| fileName == null) {
return;
}
editWikidataProperty(wikidataEntityId, fileName);
}
/**
* Edits the wikidata entity by adding the P18 property to it.
* Adding the P18 edit requires calling the wikidata API to create a claim against the entity
*
* @param wikidataEntityId
* @param fileName
*/
@SuppressLint("CheckResult")
private void editWikidataProperty(String wikidataEntityId, String fileName) {
Timber.d("Upload successful with wiki data entity id as %s", wikidataEntityId);
Timber.d("Attempting to edit Wikidata property %s", wikidataEntityId);
Observable.fromCallable(() -> {
String propertyValue = getFileName(fileName);
return mediaWikiApi.wikidatCreateClaim(wikidataEntityId, "P18", "value", propertyValue);
})
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(revisionId -> handleClaimResult(wikidataEntityId, revisionId), throwable -> {
Timber.e(throwable, "Error occurred while making claim");
ViewUtil.showLongToast(context, context.getString(R.string.wikidata_edit_failure));
});
}
private void handleClaimResult(String wikidataEntityId, String revisionId) {
if (revisionId != null) {
wikidataEditListener.onSuccessfulWikidataEdit();
showSuccessToast();
logEdit(revisionId);
} else {
Timber.d("Unable to make wiki data edit for entity %s", wikidataEntityId);
ViewUtil.showLongToast(context, context.getString(R.string.wikidata_edit_failure));
}
}
/**
* Log the Wikidata edit by adding Wikimedia Commons App tag to the edit
* @param revisionId
*/
@SuppressLint("CheckResult")
private void logEdit(String revisionId) {
Observable.fromCallable(() -> mediaWikiApi.addWikidataEditTag(revisionId))
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(result -> {
if (result) {
Timber.d("Wikidata edit was tagged successfully");
} else {
Timber.d("Wikidata edit couldn't be tagged");
}
}, throwable -> {
Timber.e(throwable, "Error occurred while adding tag to the edit");
});
}
/**
* Show a success toast when the edit is made successfully
*/
private void showSuccessToast() {
String title = directPrefs.getString("Title", "");
String successStringTemplate = context.getString(R.string.successful_wikidata_edit);
String successMessage = String.format(Locale.getDefault(), successStringTemplate, title);
ViewUtil.showLongToast(context, successMessage);
}
/**
* Formats and returns the filename as accepted by the wiki base API
* https://www.mediawiki.org/wiki/Wikibase/API#wbcreateclaim
*
* @param fileName
* @return
*/
private String getFileName(String fileName) {
fileName = String.format("\"%s\"", fileName.replace("File:", ""));
Timber.d("Wikidata property name is %s", fileName);
return fileName;
}
}

View file

@ -0,0 +1,25 @@
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/black"
android:padding="@dimen/widget_margin"
android:orientation="vertical">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColor="@color/white"
android:textSize="20sp"
android:gravity="center"
android:layout_marginTop="10dp"
android:text="@string/app_widget_heading"/>
<ImageView
android:padding="15dp"
android:id="@+id/appwidget_image"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:contentDescription="@string/appwidget_img" />
</LinearLayout>

View file

@ -14,7 +14,7 @@
<string name="login_success">Аҭалара қәҿиарала имҩаҧысит!</string> <string name="login_success">Аҭалара қәҿиарала имҩаҧысит!</string>
<string name="login_failed">Асистемахь аҭалараан агха!</string> <string name="login_failed">Асистемахь аҭалараан агха!</string>
<string name="upload_failed">Афаил ҧшаам. Даҽа фаилк шәахәаҧш.</string> <string name="upload_failed">Афаил ҧшаам. Даҽа фаилк шәахәаҧш.</string>
<string name="authentication_failed">Аутентификациа агха!</string> <string name="authentication_failed" fuzzy="true">Аутентификациа агха!</string>
<string name="uploading_started">Аҭагалара иалагоуп!</string> <string name="uploading_started">Аҭагалара иалагоуп!</string>
<string name="upload_completed_notification_title">%1$s иҭагалоуп!</string> <string name="upload_completed_notification_title">%1$s иҭагалоуп!</string>
<string name="upload_completed_notification_text">Шәақәыӷәӷәа иҭагалоу афаил ахәаҧшраз</string> <string name="upload_completed_notification_text">Шәақәыӷәӷәа иҭагалоу афаил ахәаҧшраз</string>

View file

@ -27,7 +27,7 @@
<string name="login_success">تم الدخول بشكل صحيح!</string> <string name="login_success">تم الدخول بشكل صحيح!</string>
<string name="login_failed">فشل تسجيل الدخول</string> <string name="login_failed">فشل تسجيل الدخول</string>
<string name="upload_failed">الملف غير موجود. فضلا اختر ملفا آخر.</string> <string name="upload_failed">الملف غير موجود. فضلا اختر ملفا آخر.</string>
<string name="authentication_failed">فشل الاستيقان!</string> <string name="authentication_failed" fuzzy="true">فشل الاستيقان!</string>
<string name="uploading_started">بدأ الرفع!</string> <string name="uploading_started">بدأ الرفع!</string>
<string name="upload_completed_notification_title">رُفع %1$s!</string> <string name="upload_completed_notification_title">رُفع %1$s!</string>
<string name="upload_completed_notification_text">انقر لعرض ملفك المرفوع</string> <string name="upload_completed_notification_text">انقر لعرض ملفك المرفوع</string>

View file

@ -21,7 +21,7 @@
<string name="login_success">¡Identificación correuta!</string> <string name="login_success">¡Identificación correuta!</string>
<string name="login_failed">¡Falló l\'aniciu de sesión!</string> <string name="login_failed">¡Falló l\'aniciu de sesión!</string>
<string name="upload_failed">Nun s\'alcontró\'l ficheru. Tenta con otru.</string> <string name="upload_failed">Nun s\'alcontró\'l ficheru. Tenta con otru.</string>
<string name="authentication_failed">¡Falló la identificación!</string> <string name="authentication_failed">Falló la identificación, anicia sesión nuevamente</string>
<string name="uploading_started">Principió la xuba</string> <string name="uploading_started">Principió la xuba</string>
<string name="upload_completed_notification_title">¡%1$s xubíu!</string> <string name="upload_completed_notification_title">¡%1$s xubíu!</string>
<string name="upload_completed_notification_text">Toque pa ver la xuba</string> <string name="upload_completed_notification_text">Toque pa ver la xuba</string>
@ -103,7 +103,7 @@
<string name="preference_license">Llicencia predeterminada</string> <string name="preference_license">Llicencia predeterminada</string>
<string name="use_previous">Usar un títulu/descripción anterior</string> <string name="use_previous">Usar un títulu/descripción anterior</string>
<string name="allow_gps">Llograr automáticamente l\'allugamientu actual</string> <string name="allow_gps">Llograr automáticamente l\'allugamientu actual</string>
<string name="allow_gps_summary">Recuperar l\'allugamientu actual pa ufiertar suxerencies de categoríes si la imaxe nun tien etiquetes xeográfiques</string> <string name="allow_gps_summary">Recupera la posición actual si la imaxe nun tien etiquetes xeográfiques, y marca la imaxe con ella. Atención: Esto revelará\'l to allugamientu actual.</string>
<string name="preference_theme">Mou nocherniegu</string> <string name="preference_theme">Mou nocherniegu</string>
<string name="preference_theme_summary">Usar tema escuru</string> <string name="preference_theme_summary">Usar tema escuru</string>
<string name="license_name_cc_by_sa_four"> Reconocimientu-CompartirIgual 4.0</string> <string name="license_name_cc_by_sa_four"> Reconocimientu-CompartirIgual 4.0</string>
@ -272,6 +272,10 @@
<string name="share_app_title">Compartir app</string> <string name="share_app_title">Compartir app</string>
<string name="share_coordinates_not_present">Nun s\'especificaron les coordenaes al escoyer la imaxe</string> <string name="share_coordinates_not_present">Nun s\'especificaron les coordenaes al escoyer la imaxe</string>
<string name="error_fetching_nearby_places">Error al llograr los llugares cercanos.</string> <string name="error_fetching_nearby_places">Error al llograr los llugares cercanos.</string>
<string name="appwidget_img">Semeya del día</string>
<string name="app_widget_heading">Semeya del día</string>
<string name="successful_wikidata_edit">Añadióse correutamente la imaxe a %1$s en Wikidata.</string>
<string name="wikidata_edit_failure">Nun pudo anovase la entidá de Wikidata correspondiente.</string>
<string name="menu_set_wallpaper">Definir fondu</string> <string name="menu_set_wallpaper">Definir fondu</string>
<string name="wallpaper_set_successfully">Fondu definíu correutamente</string> <string name="wallpaper_set_successfully">Fondu definíu correutamente</string>
</resources> </resources>

View file

@ -16,7 +16,7 @@
<string name="login_success">Uspešno ste prijavljeni.</string> <string name="login_success">Uspešno ste prijavljeni.</string>
<string name="login_failed">Prijavljivanje nije uspelo.</string> <string name="login_failed">Prijavljivanje nije uspelo.</string>
<string name="upload_failed">Datoteka nije pronađena. Pokušajte sa drugom datotekom.</string> <string name="upload_failed">Datoteka nije pronađena. Pokušajte sa drugom datotekom.</string>
<string name="authentication_failed">Provera identiteta nije uspela.</string> <string name="authentication_failed" fuzzy="true">Provera identiteta nije uspela.</string>
<string name="uploading_started">Otpremanje je započeto.</string> <string name="uploading_started">Otpremanje je započeto.</string>
<string name="upload_completed_notification_title">Datoteka „%1$s“ je otpremljena.</string> <string name="upload_completed_notification_title">Datoteka „%1$s“ je otpremljena.</string>
<string name="upload_completed_notification_text">Tapnite da biste videli otpremanje</string> <string name="upload_completed_notification_text">Tapnite da biste videli otpremanje</string>
@ -94,7 +94,7 @@
<string name="preference_license" fuzzy="true">Licenca</string> <string name="preference_license" fuzzy="true">Licenca</string>
<string name="use_previous">Koristi prethodan naslov/opis</string> <string name="use_previous">Koristi prethodan naslov/opis</string>
<string name="allow_gps">Automatski detektuj trenutnu lokaciju</string> <string name="allow_gps">Automatski detektuj trenutnu lokaciju</string>
<string name="allow_gps_summary">Primi trenutnu lokaciju da bi predložili kategoriju ako slika nije geografski označena</string> <string name="allow_gps_summary" fuzzy="true">Primi trenutnu lokaciju da bi predložili kategoriju ako slika nije geografski označena</string>
<string name="preference_theme">Noćni režim</string> <string name="preference_theme">Noćni režim</string>
<string name="preference_theme_summary">Koristiti tamnu temu</string> <string name="preference_theme_summary">Koristiti tamnu temu</string>
<string name="license_name_cc_by_sa_four">Autorstvo-Deliti pod istim uslovima 4.0</string> <string name="license_name_cc_by_sa_four">Autorstvo-Deliti pod istim uslovima 4.0</string>

View file

@ -23,7 +23,7 @@
<string name="login_success">Танышыу уңышлы үтте</string> <string name="login_success">Танышыу уңышлы үтте</string>
<string name="login_failed">Танылыу хатаһы</string> <string name="login_failed">Танылыу хатаһы</string>
<string name="upload_failed">Файл табылманы. Башҡа файлды эҙлә.</string> <string name="upload_failed">Файл табылманы. Башҡа файлды эҙлә.</string>
<string name="authentication_failed">Кем икәнегеҙ танылманы!</string> <string name="authentication_failed" fuzzy="true">Кем икәнегеҙ танылманы!</string>
<string name="uploading_started">Тейәү башланды!</string> <string name="uploading_started">Тейәү башланды!</string>
<string name="upload_completed_notification_title">%1$s тейәлде!</string> <string name="upload_completed_notification_title">%1$s тейәлде!</string>
<string name="upload_completed_notification_text">Ошонда баҫып тейәлгән файлды ҡара</string> <string name="upload_completed_notification_text">Ошонда баҫып тейәлгән файлды ҡара</string>
@ -100,7 +100,7 @@
<string name="preference_license">Нығытылған рөхсәтнамә</string> <string name="preference_license">Нығытылған рөхсәтнамә</string>
<string name="use_previous">Алдағы атама/һәрәтләмәне ҡулланыу</string> <string name="use_previous">Алдағы атама/һәрәтләмәне ҡулланыу</string>
<string name="allow_gps">Автомат рәүешендә сираттағы урынды алыу</string> <string name="allow_gps">Автомат рәүешендә сираттағы урынды алыу</string>
<string name="allow_gps_summary">Әгәр рәсемдең геотегтары булмаһа, категориялар үҙенән-үҙе тәҡдим ителһен өсөн сираттағы урынды алырға</string> <string name="allow_gps_summary" fuzzy="true">Әгәр рәсемдең геотегтары булмаһа, категориялар үҙенән-үҙе тәҡдим ителһен өсөн сираттағы урынды алырға</string>
<string name="preference_theme">Төнгө режим</string> <string name="preference_theme">Төнгө режим</string>
<string name="preference_theme_summary">Ҡараңғы теманы ҡулланыу</string> <string name="preference_theme_summary">Ҡараңғы теманы ҡулланыу</string>
<string name="license_name_cc_by_sa_four"> Attribution-ShareAlike 4.0</string> <string name="license_name_cc_by_sa_four"> Attribution-ShareAlike 4.0</string>

View file

@ -18,7 +18,7 @@
<string name="login_success">Успешно влизане.</string> <string name="login_success">Успешно влизане.</string>
<string name="login_failed">Неуспешно влизане!</string> <string name="login_failed">Неуспешно влизане!</string>
<string name="upload_failed">Файлът не е намерен. Моля, опитайте с друг файл.</string> <string name="upload_failed">Файлът не е намерен. Моля, опитайте с друг файл.</string>
<string name="authentication_failed">Неуспешен опит за удостоверяване!</string> <string name="authentication_failed" fuzzy="true">Неуспешен опит за удостоверяване!</string>
<string name="uploading_started">Качването започна!</string> <string name="uploading_started">Качването започна!</string>
<string name="upload_completed_notification_title">Файл %1$s е качен!</string> <string name="upload_completed_notification_title">Файл %1$s е качен!</string>
<string name="upload_completed_notification_text">Докоснете, за да видите качения файл</string> <string name="upload_completed_notification_text">Докоснете, за да видите качения файл</string>

View file

@ -29,7 +29,7 @@
<string name="login_success">প্রবেশ সফল!</string> <string name="login_success">প্রবেশ সফল!</string>
<string name="login_failed">প্রবেশ ব্যর্থ :(</string> <string name="login_failed">প্রবেশ ব্যর্থ :(</string>
<string name="upload_failed">ফাইল পাওয়া যায়নি। আরেকটি ফাইল চেষ্টা করুন।</string> <string name="upload_failed">ফাইল পাওয়া যায়নি। আরেকটি ফাইল চেষ্টা করুন।</string>
<string name="authentication_failed">প্রমাণীকরণ ব্যর্থ হয়েছে!</string> <string name="authentication_failed">প্রমাণীকরণ ব্যর্থ হয়েছে, আবার প্রবেশ করুন</string>
<string name="uploading_started"> আপলোড আরম্ভ হয়েছে!</string> <string name="uploading_started"> আপলোড আরম্ভ হয়েছে!</string>
<string name="upload_completed_notification_title">%1$s আপলোড হয়েছে!</string> <string name="upload_completed_notification_title">%1$s আপলোড হয়েছে!</string>
<string name="upload_completed_notification_text">আপনার আপলোড দেখতে টোকা দিন</string> <string name="upload_completed_notification_text">আপনার আপলোড দেখতে টোকা দিন</string>
@ -110,7 +110,7 @@
<string name="preference_license">পূর্বনির্ধারিত লাইসেন্স</string> <string name="preference_license">পূর্বনির্ধারিত লাইসেন্স</string>
<string name="use_previous">পূর্ববর্তী শিরোনাম/বিবরণ ব্যবহার করুন</string> <string name="use_previous">পূর্ববর্তী শিরোনাম/বিবরণ ব্যবহার করুন</string>
<string name="allow_gps">স্বয়ংক্রিয়ভাবে বর্তমান অবস্থান পান</string> <string name="allow_gps">স্বয়ংক্রিয়ভাবে বর্তমান অবস্থান পান</string>
<string name="allow_gps_summary">বিষয়শ্রেণীর পরামর্শ দিতে বর্তমান অবস্থান পান যদি ছবিতে ভূ-ট্যাগ না থেকে থাকে</string> <string name="allow_gps_summary" fuzzy="true">বিষয়শ্রেণীর পরামর্শ দিতে বর্তমান অবস্থান পান যদি ছবিতে ভূ-ট্যাগ না থেকে থাকে</string>
<string name="preference_theme">রাত্রি মোড</string> <string name="preference_theme">রাত্রি মোড</string>
<string name="preference_theme_summary">কালো থিম ব্যবহার করুন</string> <string name="preference_theme_summary">কালো থিম ব্যবহার করুন</string>
<string name="license_name_cc_by_sa_four">অ্যাট্রিবিউশন-শেয়ারঅ্যালাইক .</string> <string name="license_name_cc_by_sa_four">অ্যাট্রিবিউশন-শেয়ারঅ্যালাইক .</string>

View file

@ -3,6 +3,7 @@
* Dishual * Dishual
* Fohanno * Fohanno
* Fulup * Fulup
* Gwendal
* Gwenn-Ael * Gwenn-Ael
* Y-M D * Y-M D
--> -->
@ -24,7 +25,7 @@
<string name="login_success">Kevreet oc\'h !</string> <string name="login_success">Kevreet oc\'h !</string>
<string name="login_failed">Kudenn gevreañ !</string> <string name="login_failed">Kudenn gevreañ !</string>
<string name="upload_failed">N\'eo ket bet kavet ar restr. Klask gant unan all.</string> <string name="upload_failed">N\'eo ket bet kavet ar restr. Klask gant unan all.</string>
<string name="authentication_failed">Dilesadur c\'hwitet!</string> <string name="authentication_failed" fuzzy="true">Dilesadur c\'hwitet!</string>
<string name="uploading_started">Kroget da enporzhiañ!</string> <string name="uploading_started">Kroget da enporzhiañ!</string>
<string name="upload_completed_notification_title">%1$s bet enporzhiet !</string> <string name="upload_completed_notification_title">%1$s bet enporzhiet !</string>
<string name="upload_completed_notification_text">Pouezit evit gwelet hoc\'h enporzhiadenn</string> <string name="upload_completed_notification_text">Pouezit evit gwelet hoc\'h enporzhiadenn</string>
@ -102,7 +103,7 @@
<string name="preference_license">Aotre-implijout dre ziouer</string> <string name="preference_license">Aotre-implijout dre ziouer</string>
<string name="use_previous">Ober gant an titl/deskrivadur kent</string> <string name="use_previous">Ober gant an titl/deskrivadur kent</string>
<string name="allow_gps">Tapout al lec\'hiadur red ent emgefre</string> <string name="allow_gps">Tapout al lec\'hiadur red ent emgefre</string>
<string name="allow_gps_summary">Kavout al lec\'hiadur red evit pourchas kinnigoù rummadoù ma n\'eo ket douarlec\'hiet ar skeudenn.</string> <string name="allow_gps_summary" fuzzy="true">Kavout al lec\'hiadur red evit pourchas kinnigoù rummadoù ma n\'eo ket douarlec\'hiet ar skeudenn.</string>
<string name="preference_theme">Mod noz</string> <string name="preference_theme">Mod noz</string>
<string name="preference_theme_summary">Ober gant an tem teñval</string> <string name="preference_theme_summary">Ober gant an tem teñval</string>
<string name="license_name_cc_by_sa_four">Deroadur-RannañHeñvel 4.0</string> <string name="license_name_cc_by_sa_four">Deroadur-RannañHeñvel 4.0</string>
@ -217,4 +218,5 @@
<string name="nearby_location_has_not_changed">N\'eo ket cheñchet al lec\'hiadur.</string> <string name="nearby_location_has_not_changed">N\'eo ket cheñchet al lec\'hiadur.</string>
<string name="get_directions">Kaout urzhioù</string> <string name="get_directions">Kaout urzhioù</string>
<string name="read_article">Lenn ar pennad</string> <string name="read_article">Lenn ar pennad</string>
<string name="appwidget_img">Skeudenn an deiz</string>
</resources> </resources>

View file

@ -16,7 +16,7 @@
<string name="login_success">Prijavljivanje uspješno!</string> <string name="login_success">Prijavljivanje uspješno!</string>
<string name="login_failed">Prijavljivanje nije uspjelo!</string> <string name="login_failed">Prijavljivanje nije uspjelo!</string>
<string name="upload_failed">Datoteka nije pronađena. Pokušajte drugu.</string> <string name="upload_failed">Datoteka nije pronađena. Pokušajte drugu.</string>
<string name="authentication_failed">Provjera identiteta nije uspjela!</string> <string name="authentication_failed" fuzzy="true">Provjera identiteta nije uspjela!</string>
<string name="uploading_started">Postavljanje je započelo!</string> <string name="uploading_started">Postavljanje je započelo!</string>
<string name="upload_completed_notification_title">Datoteka %1$s je postavljena!</string> <string name="upload_completed_notification_title">Datoteka %1$s je postavljena!</string>
<string name="upload_completed_notification_text">Dodirnite da biste vidjeli datoteku</string> <string name="upload_completed_notification_text">Dodirnite da biste vidjeli datoteku</string>
@ -93,7 +93,7 @@
<string name="preference_license" fuzzy="true">Licenca</string> <string name="preference_license" fuzzy="true">Licenca</string>
<string name="use_previous">Koristi prethodni naziv/opis</string> <string name="use_previous">Koristi prethodni naziv/opis</string>
<string name="allow_gps">Automatski dobavi trenutnu lokaciju</string> <string name="allow_gps">Automatski dobavi trenutnu lokaciju</string>
<string name="allow_gps_summary">Dobavi trenutnu lokaciju za davanje prijedloga o kategorijama ako nema geooznaku</string> <string name="allow_gps_summary" fuzzy="true">Dobavi trenutnu lokaciju za davanje prijedloga o kategorijama ako nema geooznaku</string>
<string name="preference_theme">Noćni režim</string> <string name="preference_theme">Noćni režim</string>
<string name="preference_theme_summary">Koristi tamnu temu</string> <string name="preference_theme_summary">Koristi tamnu temu</string>
<string name="license_name_cc_by_sa_four">Autorstvo-Dijeliti pod istim uslovima 4.0</string> <string name="license_name_cc_by_sa_four">Autorstvo-Dijeliti pod istim uslovima 4.0</string>

View file

@ -23,7 +23,7 @@
<string name="login_success">S\'ha iniciat sessió correctament!</string> <string name="login_success">S\'ha iniciat sessió correctament!</string>
<string name="login_failed">Error en iniciar la sessió!</string> <string name="login_failed">Error en iniciar la sessió!</string>
<string name="upload_failed">No s\'ha trobat el fitxer. Proveu-ho amb un altre fitxer.</string> <string name="upload_failed">No s\'ha trobat el fitxer. Proveu-ho amb un altre fitxer.</string>
<string name="authentication_failed">L\'autenticació ha fallat!</string> <string name="authentication_failed">Lautenticació ha fallat. Torneu a provar diniciar una sessió.</string>
<string name="uploading_started">Ha començat la càrrega!</string> <string name="uploading_started">Ha començat la càrrega!</string>
<string name="upload_completed_notification_title">Sha pujat %1$s.</string> <string name="upload_completed_notification_title">Sha pujat %1$s.</string>
<string name="upload_completed_notification_text">Prem per veure la teva càrrega</string> <string name="upload_completed_notification_text">Prem per veure la teva càrrega</string>

View file

@ -33,7 +33,7 @@
<string name="login_success">Přihlášení uspělo!</string> <string name="login_success">Přihlášení uspělo!</string>
<string name="login_failed">Přihlášení se nezdařilo!</string> <string name="login_failed">Přihlášení se nezdařilo!</string>
<string name="upload_failed">Soubor nebyl nalezen. Prosím, zkuste jiný soubor.</string> <string name="upload_failed">Soubor nebyl nalezen. Prosím, zkuste jiný soubor.</string>
<string name="authentication_failed">Ověření se nezdařilo!</string> <string name="authentication_failed">Ověření se nezdařilo, prosím přihlaste se znovu</string>
<string name="uploading_started">Nahrávání začalo!</string> <string name="uploading_started">Nahrávání začalo!</string>
<string name="upload_completed_notification_title">%1$s nahráno!</string> <string name="upload_completed_notification_title">%1$s nahráno!</string>
<string name="upload_completed_notification_text">Klepnutím zobrazíte upload</string> <string name="upload_completed_notification_text">Klepnutím zobrazíte upload</string>
@ -113,7 +113,7 @@
<string name="preference_license">Výchozí licence</string> <string name="preference_license">Výchozí licence</string>
<string name="use_previous">Použít předchozí název a popis</string> <string name="use_previous">Použít předchozí název a popis</string>
<string name="allow_gps">Automaticky získat aktuální polohu</string> <string name="allow_gps">Automaticky získat aktuální polohu</string>
<string name="allow_gps_summary">Nabídnout kategorie na základě aktuální polohy (pokud není obrázek opatřen souřadnicemi)</string> <string name="allow_gps_summary" fuzzy="true">Nabídnout kategorie na základě aktuální polohy (pokud není obrázek opatřen souřadnicemi)</string>
<string name="preference_theme">Noční režim</string> <string name="preference_theme">Noční režim</string>
<string name="preference_theme_summary">Použít tmavý režim</string> <string name="preference_theme_summary">Použít tmavý režim</string>
<string name="license_name_cc_by_sa_four">Uveďte autora-Zachovejte licenci 4.0</string> <string name="license_name_cc_by_sa_four">Uveďte autora-Zachovejte licenci 4.0</string>

View file

@ -14,7 +14,7 @@
<string name="login_success">Ùdałi logòwanié!</string> <string name="login_success">Ùdałi logòwanié!</string>
<string name="login_failed">Logòwanié nie darzëło sã!</string> <string name="login_failed">Logòwanié nie darzëło sã!</string>
<string name="upload_failed">Felënk lopka. Proszã spróbòwac znowa.</string> <string name="upload_failed">Felënk lopka. Proszã spróbòwac znowa.</string>
<string name="authentication_failed">Fela ùdowierzaniô!</string> <string name="authentication_failed" fuzzy="true">Fela ùdowierzaniô!</string>
<string name="uploading_started">Wladënk zrëszony!</string> <string name="uploading_started">Wladënk zrëszony!</string>
<string name="upload_completed_notification_title">%1$s wladowóné!</string> <string name="upload_completed_notification_title">%1$s wladowóné!</string>
<string name="upload_completed_notification_text">Tkni, abë òbôczëc ladowóny lopk</string> <string name="upload_completed_notification_text">Tkni, abë òbôczëc ladowóny lopk</string>

View file

@ -5,18 +5,25 @@
* Robin Owain * Robin Owain
--> -->
<resources> <resources>
<string name="preference_category_appearance">Ymddangosiad</string>
<string name="preference_category_general">Cyffredinol</string>
<string name="preference_category_feedback">Adborth</string>
<string name="preference_category_location">Lleoliad</string>
<string name="app_name">Comin Wicimedia</string> <string name="app_name">Comin Wicimedia</string>
<string name="bullet"></string>
<string name="menu_settings">Gosodiadau</string> <string name="menu_settings">Gosodiadau</string>
<string name="username">Enw defnyddiwr</string> <string name="username">Enw defnyddiwr</string>
<string name="password">Cyfrinair</string> <string name="password">Cyfrinair</string>
<string name="login_credential">Mewngofnodwch i\'ch cyfri Comin Beta</string>
<string name="login">Mewngofnodi</string> <string name="login">Mewngofnodi</string>
<string name="forgot_password">Anghofiwyd y Cyfrinair?</string>
<string name="signup">Cofrestru</string> <string name="signup">Cofrestru</string>
<string name="logging_in_title">Wrthi\'n mewngofnodi</string> <string name="logging_in_title">Wrthi\'n mewngofnodi</string>
<string name="logging_in_message">Disgwyliwch…</string> <string name="logging_in_message">Disgwyliwch…</string>
<string name="login_success">Llwyddodd y mewngofnodi!</string> <string name="login_success">Llwyddodd y mewngofnodi!</string>
<string name="login_failed">Methodd y mewngofnodi!</string> <string name="login_failed">Methodd y mewngofnodi!</string>
<string name="upload_failed">Ni chafwyd hyd i\'r ffeil. Ceisiwch un arall.</string> <string name="upload_failed">Ni chafwyd hyd i\'r ffeil. Ceisiwch un arall.</string>
<string name="authentication_failed">Methodd y dilysu!</string> <string name="authentication_failed">Methodd y dilysu! Mewngofnodwch eto.</string>
<string name="uploading_started">Dechreuodd yr uwchlwytho!</string> <string name="uploading_started">Dechreuodd yr uwchlwytho!</string>
<string name="upload_completed_notification_title">Uwchlwythwyd %1$s!</string> <string name="upload_completed_notification_title">Uwchlwythwyd %1$s!</string>
<string name="upload_completed_notification_text">Tapiwch i weld eich uwchlwythiad</string> <string name="upload_completed_notification_text">Tapiwch i weld eich uwchlwythiad</string>
@ -41,8 +48,10 @@
<string name="menu_share">Rhannu</string> <string name="menu_share">Rhannu</string>
<string name="menu_open_in_browser">Agor yn y Porwr</string> <string name="menu_open_in_browser">Agor yn y Porwr</string>
<string name="share_title_hint">Teitl</string> <string name="share_title_hint">Teitl</string>
<string name="add_title_toast">Rhowch deitl i\'r ffeil</string>
<string name="share_description_hint">Disgrifiad</string> <string name="share_description_hint">Disgrifiad</string>
<string name="login_failed_network">Yn methu mewngofnodi - methodd y rhwydwaith</string> <string name="login_failed_network">Yn methu mewngofnodi - methodd y rhwydwaith</string>
<string name="login_failed_wrong_credentials">Methwyd mewngofnodi - gwirwch eich enw defnyddiwr a\'ch cyfrinair</string>
<string name="login_failed_throttled">Cafwyd gormod o ymgeision aflwyddiannus. Oedwch ennyd cyn ceisio eto.</string> <string name="login_failed_throttled">Cafwyd gormod o ymgeision aflwyddiannus. Oedwch ennyd cyn ceisio eto.</string>
<string name="login_failed_blocked">Ymddiheurwn. Mae\'r defnyddiwr hwn wedi ei flocio ar Gomin Wikimedia</string> <string name="login_failed_blocked">Ymddiheurwn. Mae\'r defnyddiwr hwn wedi ei flocio ar Gomin Wikimedia</string>
<string name="login_failed_2fa_needed">Mae\'n rhaid i chi roi eich cod adnabod 2 ffactor.</string> <string name="login_failed_2fa_needed">Mae\'n rhaid i chi roi eich cod adnabod 2 ffactor.</string>
@ -54,6 +63,7 @@
<string name="categories_search_text_hint">Archwilio\'r categorïau</string> <string name="categories_search_text_hint">Archwilio\'r categorïau</string>
<string name="menu_save_categories">Cadw</string> <string name="menu_save_categories">Cadw</string>
<string name="refresh_button">Ailgyrchu</string> <string name="refresh_button">Ailgyrchu</string>
<string name="display_list_button">Rhestr</string>
<string name="gps_disabled">Ataliwyd GPS ar eich dyfais. Ydych chi am ei droi\'n weithredol?</string> <string name="gps_disabled">Ataliwyd GPS ar eich dyfais. Ydych chi am ei droi\'n weithredol?</string>
<string name="enable_gps">Gweithredu\'r GPS</string> <string name="enable_gps">Gweithredu\'r GPS</string>
<string name="contributions_subtitle_zero">Heb uwchlwytho eto</string> <string name="contributions_subtitle_zero">Heb uwchlwytho eto</string>
@ -75,11 +85,12 @@
<string name="categories_activity_title">Categorïau</string> <string name="categories_activity_title">Categorïau</string>
<string name="title_activity_settings">Gosodiadau</string> <string name="title_activity_settings">Gosodiadau</string>
<string name="title_activity_signup">Cofrestru</string> <string name="title_activity_signup">Cofrestru</string>
<string name="title_activity_featured_images">Delweddau nodwedd</string>
<string name="menu_about">Amdanom</string> <string name="menu_about">Amdanom</string>
<string name="about_license">Ap Cynnwys Agored a grewyd ac a gefnogir gan wirfoddolwyr cymuned Wicimedia yw ap Comin Wicimedia. Does a wnelo Sefydliad Wicimedia ddim byd ag e (ei greu, ei gynnal na\'i ddatblygu).</string> <string name="about_license">Ap Cynnwys Agored a grewyd ac a gefnogir gan wirfoddolwyr cymuned Wicimedia yw ap Comin Wicimedia. Does a wnelo Sefydliad Wicimedia ddim byd ag e (ei greu, ei gynnal na\'i ddatblygu).</string>
<string name="about_improve">\n\nCrewch &lt;a href=\"https://github.com/commons-app/apps-android-commons/issues\"&gt;ymholiad GitHub&lt;/a&gt; os oes gennych fyg, broblem neu awgrym.</string> <string name="about_improve">\n\nCrewch &lt;a href=\"https://github.com/commons-app/apps-android-commons/issues\"&gt;ymholiad GitHub&lt;/a&gt; os oes gennych fyg, broblem neu awgrym.</string>
<string name="about_privacy_policy" fuzzy="true">&lt;a href=\"https://github.com/commons-app/apps-android-commons/wiki/Privacy-policy\"&gt;Polisi Preifatrwydd&lt;/a&gt;</string> <string name="about_privacy_policy">&lt;u&gt;Polisi preifatrwydd&lt;/u&gt;</string>
<string name="about_credits" fuzzy="true">&lt;a href=\"https://github.com/commons-app/apps-android-commons/blob/master/CREDITS\"&gt;Clod&lt;/a&gt;</string> <string name="about_credits">Clod a bri</string>
<string name="title_activity_about">Amdanom</string> <string name="title_activity_about">Amdanom</string>
<string name="menu_feedback">Danfonwch Adborth (drwy Ebost)</string> <string name="menu_feedback">Danfonwch Adborth (drwy Ebost)</string>
<string name="no_email_client">Dim ebost client wedi\'i ganfod</string> <string name="no_email_client">Dim ebost client wedi\'i ganfod</string>
@ -91,10 +102,10 @@
<string name="share_license_summary">Caiff y ddelwedd hon ei thrwyddedu yn ôl termau\'r drwydded %1$s.</string> <string name="share_license_summary">Caiff y ddelwedd hon ei thrwyddedu yn ôl termau\'r drwydded %1$s.</string>
<string name="media_upload_policy">Wrth gynnig y llun yma, rwy\'n datgan mai fy ngwaith i ydyw ac nad yw\'n cynnwys unrhyw beth dan hawlfrain, na hunlun, a\'i fod yn cadw at &lt;a href=\"https://commons.wikimedia.org/wiki/Commons:Policies_and_guidelines\"&gt;Bolisiau Comin Wicimedia&lt;/a&gt;.</string> <string name="media_upload_policy">Wrth gynnig y llun yma, rwy\'n datgan mai fy ngwaith i ydyw ac nad yw\'n cynnwys unrhyw beth dan hawlfrain, na hunlun, a\'i fod yn cadw at &lt;a href=\"https://commons.wikimedia.org/wiki/Commons:Policies_and_guidelines\"&gt;Bolisiau Comin Wicimedia&lt;/a&gt;.</string>
<string name="menu_download">Lawrlwytho</string> <string name="menu_download">Lawrlwytho</string>
<string name="preference_license" fuzzy="true">Trwydded</string> <string name="preference_license">Trwydded Ddiofyn (\'default\')</string>
<string name="use_previous">Defnydiwch y teitl/disgrifiad blaenorol</string> <string name="use_previous">Defnydiwch y teitl/disgrifiad blaenorol</string>
<string name="allow_gps">Defnyddiwch y lleoliad cyfredol</string> <string name="allow_gps">Defnyddiwch y lleoliad cyfredol</string>
<string name="allow_gps_summary">Canfyddwch eich lleoliad, er mwyn i ni gynnig categori (os nad ydych wedi nodi\'r cyfesurynnau).</string> <string name="allow_gps_summary">Adfer eich lleoliad presennol os nad yw\'r ddelwedd yn cynnwys cyfesurynnau. Bydd hyn yn datgelu eich lleoliad chi!</string>
<string name="preference_theme">Modd fin nos</string> <string name="preference_theme">Modd fin nos</string>
<string name="preference_theme_summary">Defnyddiwch thema tywyll</string> <string name="preference_theme_summary">Defnyddiwch thema tywyll</string>
<string name="license_name_cc_by_sa_four"> Attribution-ShareAlike 4.0</string> <string name="license_name_cc_by_sa_four"> Attribution-ShareAlike 4.0</string>
@ -120,9 +131,19 @@
<string name="tutorial_1_text">Cyhelir llawer o luniau ar Gomin Wicimedia sy\'n cael eu defnyddio ar Wicipedia.</string> <string name="tutorial_1_text">Cyhelir llawer o luniau ar Gomin Wicimedia sy\'n cael eu defnyddio ar Wicipedia.</string>
<string name="tutorial_1_subtext">Mae eich lluniau\'n gymorth i addysgu pobl drwy\'r byd mawr crwn!</string> <string name="tutorial_1_subtext">Mae eich lluniau\'n gymorth i addysgu pobl drwy\'r byd mawr crwn!</string>
<string name="tutorial_2_text">Uwchlwythwch lluniau a dynnoch eich hun:</string> <string name="tutorial_2_text">Uwchlwythwch lluniau a dynnoch eich hun:</string>
<string name="tutorial_2_subtext" fuzzy="true">- Natur (blodau, anifeiliaid, mynyddoedd)\n- Pethau defnyddiol (beic, tren, gorsaf drenau)\n- Enwogion (beirdd, athletwyr, blogwyr)</string> <string name="tutorial_2_subtext">Gwrthrychau byd natur (blodau, anifeiliaid, mynyddoedd)\n- Gwrthrychau defnyddiol (beics, trenau, gorsafoedd trenau)\n- Enwogion (beirdd, athletwyr, blogwyr)</string>
<string name="tutorial_2_subtext_1">Gwrthrychau byd natur (blodau, anifeiliaid, mynyddoedd)</string>
<string name="tutorial_2_subtext_2">Gwrthrychau defnyddiol (beics, trenau, gorsafoedd trenau)</string>
<string name="tutorial_2_subtext_3">Enwogion (beirdd, athletwyr, blogwyr)</string>
<string name="tutorial_3_text">Peidiwch ag uwchlwytho:</string> <string name="tutorial_3_text">Peidiwch ag uwchlwytho:</string>
<string name="tutorial_3_subtext">- hunanluniau ohonoch chi na\'ch ffrindiau\n- lluniau a gawsoch o\'r we\n- sgrinluniau o apiau masnachol</string> <string name="tutorial_3_subtext">- hunanluniau ohonoch chi na\'ch ffrindiau\n- lluniau a gawsoch o\'r we\n- sgrinluniau o apiau masnachol</string>
<string name="tutorial_3_subtext_1">Hunanluniau neu luniau o\'ch ffrindiau</string>
<string name="tutorial_3_subtext_2">Lluniau a lawrlwythwyd o\'r we gennych</string>
<string name="tutorial_3_subtext_3">Sgrinluniau o aps</string>
<string name="tutorial_4_text">Enghraifft o uwchlwythiad:</string>
<string name="tutorial_4_subtext_1">Teitl:Tŷ Opera Sydney</string>
<string name="tutorial_4_subtext_2">Disgrifiad: Golygfa o Dŷ Opera Sydney o ochr arall y bae</string>
<string name="tutorial_4_subtext_3">Categoriau: Tŷ Opera Sydney o\'r gorllewin</string>
<string name="welcome_wikipedia_text">Cyfranwch luniau. Cynorthwywch Wicipedia i roi bywyd yn yr erthyglau!</string> <string name="welcome_wikipedia_text">Cyfranwch luniau. Cynorthwywch Wicipedia i roi bywyd yn yr erthyglau!</string>
<string name="welcome_wikipedia_subtext">Mae\'r delweddau ar Wicipedia\'n dod o\nGomin Wikimedia.</string> <string name="welcome_wikipedia_subtext">Mae\'r delweddau ar Wicipedia\'n dod o\nGomin Wikimedia.</string>
<string name="welcome_copyright_text">Mae eich delweddau\'n cynorthwyo i addysgu pobl ledled y byd.</string> <string name="welcome_copyright_text">Mae eich delweddau\'n cynorthwyo i addysgu pobl ledled y byd.</string>
@ -135,6 +156,32 @@
<string name="detail_description_empty">Dim disgrifiad</string> <string name="detail_description_empty">Dim disgrifiad</string>
<string name="detail_license_empty">Trwydded anhysbys</string> <string name="detail_license_empty">Trwydded anhysbys</string>
<string name="menu_refresh">Adnewyddu</string> <string name="menu_refresh">Adnewyddu</string>
<string name="ok">Iawn</string>
<string name="title_activity_nearby">Lleoedd Cyfagos</string>
<string name="no_nearby">Ni chafwyd hyd i leoedd cyfagos</string>
<string name="warning">Rhybudd</string>
<string name="yes">Ydw</string>
<string name="no">Nac ydw</string>
<string name="media_detail_title">Teitl</string> <string name="media_detail_title">Teitl</string>
<string name="media_detail_media_title">teitl y cyfrwng</string>
<string name="media_detail_description">Disgrifiad</string> <string name="media_detail_description">Disgrifiad</string>
<string name="media_detail_author">Awdur</string>
<string name="media_detail_uploaded_date">Dyddiad yr uwchlwythiad</string>
<string name="media_detail_license">Trwydded</string>
<string name="media_detail_coordinates">Cyfesurynnau</string>
<string name="media_detail_coordinates_empty">Dim</string>
<string name="nearby_info_menu_wikidata_article">Eitem Wicidata</string>
<string name="nearby_info_menu_wikipedia_article">Erthygl Wicipedia</string>
<string name="login_to_your_account">Mewngofnodwch i\'ch cyfri</string>
<string name="send_log_file">Danfonwch y ffeil log</string>
<string name="view_browser">Gweld yn y porwr</string>
<string name="nearby_location_has_not_changed">Nid yw\'r lleoliad wedi newid.</string>
<string name="nearby_location_not_available">Nid yw\'r lleoliad ar gael.</string>
<string name="about_translate_proceed">Parhau</string>
<string name="about_translate_cancel">Canslo</string>
<string name="retry">Ailgeisio</string>
<string name="showcase_view_got_it_button">Gwnaed!</string>
<string name="appwidget_img">Llun y Dydd</string>
<string name="app_widget_heading">Llun y Dydd</string>
<string name="successful_wikidata_edit">Mae %1$s o luniau wedi\'u hychwanegu ar Wicidata!</string>
</resources> </resources>

View file

@ -26,7 +26,7 @@
<string name="login_success">Du er nu logget på!</string> <string name="login_success">Du er nu logget på!</string>
<string name="login_failed">Det mislykkedes at logge på!</string> <string name="login_failed">Det mislykkedes at logge på!</string>
<string name="upload_failed">Filen blev ikke fundet. Forsøg med en anden fil.</string> <string name="upload_failed">Filen blev ikke fundet. Forsøg med en anden fil.</string>
<string name="authentication_failed">Godkendelse mislykkedes!</string> <string name="authentication_failed" fuzzy="true">Godkendelse mislykkedes!</string>
<string name="uploading_started">Overførsel begyndt!</string> <string name="uploading_started">Overførsel begyndt!</string>
<string name="upload_completed_notification_title">%1$s overført!</string> <string name="upload_completed_notification_title">%1$s overført!</string>
<string name="upload_completed_notification_text">Tryk for at få vist din upload</string> <string name="upload_completed_notification_text">Tryk for at få vist din upload</string>
@ -105,7 +105,7 @@
<string name="preference_license">Standardlicens</string> <string name="preference_license">Standardlicens</string>
<string name="use_previous">Brug forrige titel/beskrivelse</string> <string name="use_previous">Brug forrige titel/beskrivelse</string>
<string name="allow_gps">Hent automatisk nuværende placering</string> <string name="allow_gps">Hent automatisk nuværende placering</string>
<string name="allow_gps_summary">Hent nuværende placering for at tilbyde kategoriforslag hvis billedet ikke er geografisk mærket</string> <string name="allow_gps_summary" fuzzy="true">Hent nuværende placering for at tilbyde kategoriforslag hvis billedet ikke er geografisk mærket</string>
<string name="preference_theme">Nat-tilstand</string> <string name="preference_theme">Nat-tilstand</string>
<string name="preference_theme_summary">Brug mørkt tema</string> <string name="preference_theme_summary">Brug mørkt tema</string>
<string name="license_name_cc_by_sa_four"> Attribution-ShareAlike 4.0</string> <string name="license_name_cc_by_sa_four"> Attribution-ShareAlike 4.0</string>

View file

@ -25,7 +25,7 @@
<string name="login_success">Anmeldung erfolgreich!</string> <string name="login_success">Anmeldung erfolgreich!</string>
<string name="login_failed">Anmeldung fehlgeschlagen!</string> <string name="login_failed">Anmeldung fehlgeschlagen!</string>
<string name="upload_failed">Datei nicht gefunden. Bitte versuche es mit einer anderen.</string> <string name="upload_failed">Datei nicht gefunden. Bitte versuche es mit einer anderen.</string>
<string name="authentication_failed">Authentifizierung fehlgeschlagen!</string> <string name="authentication_failed">Authentifizierung fehlgeschlagen. Bitte erneut anmelden.</string>
<string name="uploading_started">Hochladen gestartet!</string> <string name="uploading_started">Hochladen gestartet!</string>
<string name="upload_completed_notification_title">„%1$s“ hochgeladen!</string> <string name="upload_completed_notification_title">„%1$s“ hochgeladen!</string>
<string name="upload_completed_notification_text">Tippe, um deinen Upload anzusehen</string> <string name="upload_completed_notification_text">Tippe, um deinen Upload anzusehen</string>
@ -107,7 +107,7 @@
<string name="preference_license">Standardlizenz</string> <string name="preference_license">Standardlizenz</string>
<string name="use_previous">Vorherige(n) Titel/Beschreibung verwenden</string> <string name="use_previous">Vorherige(n) Titel/Beschreibung verwenden</string>
<string name="allow_gps">Aktuellen Standort automatisch abrufen</string> <string name="allow_gps">Aktuellen Standort automatisch abrufen</string>
<string name="allow_gps_summary">Ruft den aktuellen Standort ab, um Kategorievorschläge anzubieten, falls das Bild keine Geotags hat.</string> <string name="allow_gps_summary">Ruft den aktuellen Standort ab, falls das Bild nicht georeferenziert ist und markiert es. Warnung: Diese Aktion verrät deinen aktuellen Standort.</string>
<string name="preference_theme">Nachtmodus</string> <string name="preference_theme">Nachtmodus</string>
<string name="preference_theme_summary">Dunkles Thema verwenden</string> <string name="preference_theme_summary">Dunkles Thema verwenden</string>
<string name="license_name_cc_by_sa_four">Attribution-ShareAlike 4.0</string> <string name="license_name_cc_by_sa_four">Attribution-ShareAlike 4.0</string>
@ -278,6 +278,10 @@
<string name="share_app_title">App teilen</string> <string name="share_app_title">App teilen</string>
<string name="share_coordinates_not_present">Während der Bildauswahl wurden keine Koordinaten angegeben</string> <string name="share_coordinates_not_present">Während der Bildauswahl wurden keine Koordinaten angegeben</string>
<string name="error_fetching_nearby_places">Fehler beim Abrufen der Orte in der Nähe.</string> <string name="error_fetching_nearby_places">Fehler beim Abrufen der Orte in der Nähe.</string>
<string name="appwidget_img">Bild des Tages</string>
<string name="app_widget_heading">Bild des Tages</string>
<string name="successful_wikidata_edit">Bild erfolgreich nach %1$s auf Wikidata hinzugefügt!</string>
<string name="wikidata_edit_failure">Fehler bei der Aktualisierung des dazugehörigen Wikidata-Objekts!</string>
<string name="menu_set_wallpaper">Hintergrundbild festlegen</string> <string name="menu_set_wallpaper">Hintergrundbild festlegen</string>
<string name="wallpaper_set_successfully">Hintergrundbild erfolgreich festgelegt!</string> <string name="wallpaper_set_successfully">Hintergrundbild erfolgreich festgelegt!</string>
</resources> </resources>

View file

@ -25,7 +25,7 @@
<string name="login_success">Cıkewtış hewl bi.</string> <string name="login_success">Cıkewtış hewl bi.</string>
<string name="login_failed">Nidekeweya de</string> <string name="login_failed">Nidekeweya de</string>
<string name="upload_failed">Dosya nêvineya. Dosyê da bine bıcerebnê.</string> <string name="upload_failed">Dosya nêvineya. Dosyê da bine bıcerebnê.</string>
<string name="authentication_failed">Tesdiq kerdış nebı</string> <string name="authentication_failed" fuzzy="true">Tesdiq kerdış nebı</string>
<string name="uploading_started">Barkerdış sertera!</string> <string name="uploading_started">Barkerdış sertera!</string>
<string name="upload_completed_notification_title">%1$s bıbar!</string> <string name="upload_completed_notification_title">%1$s bıbar!</string>
<string name="upload_completed_notification_text">Barkerdışê xo pıro bıde.</string> <string name="upload_completed_notification_text">Barkerdışê xo pıro bıde.</string>

View file

@ -29,7 +29,7 @@
<string name="login_success">Επιτυχής σύνδεση!</string> <string name="login_success">Επιτυχής σύνδεση!</string>
<string name="login_failed">Η είσοδος απέτυχε!</string> <string name="login_failed">Η είσοδος απέτυχε!</string>
<string name="upload_failed">Το αρχείο δεν βρέθηκε. Παρακαλώ δοκιμάστε ένα άλλο αρχείο.</string> <string name="upload_failed">Το αρχείο δεν βρέθηκε. Παρακαλώ δοκιμάστε ένα άλλο αρχείο.</string>
<string name="authentication_failed">Απέτυχε ο έλεγχος ταυτότητας!</string> <string name="authentication_failed">Απέτυχε ο έλεγχος ταυτότητας, παρακαλώ συνδεθείτε ξανά</string>
<string name="uploading_started">Η αποστολή ξεκίνησε!</string> <string name="uploading_started">Η αποστολή ξεκίνησε!</string>
<string name="upload_completed_notification_title">%1$s επιφορτώθηκε!</string> <string name="upload_completed_notification_title">%1$s επιφορτώθηκε!</string>
<string name="upload_completed_notification_text">Πατήστε για να προβάλλετε την αποστολή</string> <string name="upload_completed_notification_text">Πατήστε για να προβάλλετε την αποστολή</string>
@ -111,7 +111,7 @@
<string name="preference_license">Προεπιλεγμένη άδεια</string> <string name="preference_license">Προεπιλεγμένη άδεια</string>
<string name="use_previous">Χρήση προηγούμενου τίτλου/περιγραφής</string> <string name="use_previous">Χρήση προηγούμενου τίτλου/περιγραφής</string>
<string name="allow_gps">Αυτόματη ανάκτηση τρέχουσας θέσης</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">Νυχτερινή λειτουργία</string>
<string name="preference_theme_summary">Χρήση σκοτεινού θέματος</string> <string name="preference_theme_summary">Χρήση σκοτεινού θέματος</string>
<string name="license_name_cc_by_sa_four"> Attribution-ShareAlike 4.0</string> <string name="license_name_cc_by_sa_four"> Attribution-ShareAlike 4.0</string>
@ -282,6 +282,10 @@
<string name="share_app_title">Κοινοποίηση εφαρμογής</string> <string name="share_app_title">Κοινοποίηση εφαρμογής</string>
<string name="share_coordinates_not_present">Οι συντεταγμένες δεν ορίστηκαν κατά την διάρκεια της επιλογής εικόνας</string> <string name="share_coordinates_not_present">Οι συντεταγμένες δεν ορίστηκαν κατά την διάρκεια της επιλογής εικόνας</string>
<string name="error_fetching_nearby_places">Σφάλμα κατά την εύρεση κοντινών μερών.</string> <string name="error_fetching_nearby_places">Σφάλμα κατά την εύρεση κοντινών μερών.</string>
<string name="appwidget_img">Φωτογραφία της Ημέρας</string>
<string name="app_widget_heading">Φωτογραφία της Ημέρας</string>
<string name="successful_wikidata_edit">Η εικόνα προστέθηκε επιτυχώς στο %1$s στο Wikidata!</string>
<string name="wikidata_edit_failure">Αποτυχία ενημέρωσης της αντιστοιχούσας οντότητας του Wikidata!</string>
<string name="menu_set_wallpaper">Ρύθμιση ταπετσαρίας</string> <string name="menu_set_wallpaper">Ρύθμιση ταπετσαρίας</string>
<string name="wallpaper_set_successfully">Η ταπετσαρία ρυθμίστηκε επιτυχώς!</string> <string name="wallpaper_set_successfully">Η ταπετσαρία ρυθμίστηκε επιτυχώς!</string>
</resources> </resources>

View file

@ -30,7 +30,7 @@
<string name="login_success">Acceso correcto.</string> <string name="login_success">Acceso correcto.</string>
<string name="login_failed">Acceso fallido.</string> <string name="login_failed">Acceso fallido.</string>
<string name="upload_failed">No se encontró el archivo. Prueba con otro.</string> <string name="upload_failed">No se encontró el archivo. Prueba con otro.</string>
<string name="authentication_failed">Falló la autenticación.</string> <string name="authentication_failed">Falló la autenticación; prueba a acceder otra vez</string>
<string name="uploading_started">Ha comenzado la carga.</string> <string name="uploading_started">Ha comenzado la carga.</string>
<string name="upload_completed_notification_title">Se ha cargado %1$s.</string> <string name="upload_completed_notification_title">Se ha cargado %1$s.</string>
<string name="upload_completed_notification_text">Pulsa para ver tu subida</string> <string name="upload_completed_notification_text">Pulsa para ver tu subida</string>
@ -112,7 +112,7 @@
<string name="preference_license">Licencia predeterminada</string> <string name="preference_license">Licencia predeterminada</string>
<string name="use_previous">Usar título/descripción anteriores</string> <string name="use_previous">Usar título/descripción anteriores</string>
<string name="allow_gps">Obtener ubicación actual automáticamente</string> <string name="allow_gps">Obtener ubicación actual automáticamente</string>
<string name="allow_gps_summary">Recuperar ubicación actual para ofrecer sugerencias de categorías si la imagen no tiene etiquetas geográficas</string> <string name="allow_gps_summary" fuzzy="true">Recuperar ubicación actual para ofrecer sugerencias de categorías si la imagen no tiene etiquetas geográficas</string>
<string name="preference_theme">Modo nocturno</string> <string name="preference_theme">Modo nocturno</string>
<string name="preference_theme_summary">Usar tema oscuro</string> <string name="preference_theme_summary">Usar tema oscuro</string>
<string name="license_name_cc_by_sa_four"> Atribución-CompartirIgual 4.0</string> <string name="license_name_cc_by_sa_four"> Atribución-CompartirIgual 4.0</string>
@ -276,4 +276,6 @@
<string name="share_app_title">Compartir aplicación</string> <string name="share_app_title">Compartir aplicación</string>
<string name="share_coordinates_not_present">No se especificaron las coordenadas al seleccionar la imagen</string> <string name="share_coordinates_not_present">No se especificaron las coordenadas al seleccionar la imagen</string>
<string name="error_fetching_nearby_places">Error al recuperar los lugares cercanos.</string> <string name="error_fetching_nearby_places">Error al recuperar los lugares cercanos.</string>
<string name="appwidget_img">Foto del día</string>
<string name="app_widget_heading">Foto del día</string>
</resources> </resources>

View file

@ -25,7 +25,7 @@
<string name="login_success">Saio hasiera egina</string> <string name="login_success">Saio hasiera egina</string>
<string name="login_failed">Saio hasieran akatsa!</string> <string name="login_failed">Saio hasieran akatsa!</string>
<string name="upload_failed">Fitxategia ez da aurkitu. Mesedez saiatu beste batekin.</string> <string name="upload_failed">Fitxategia ez da aurkitu. Mesedez saiatu beste batekin.</string>
<string name="authentication_failed">Autentifikazioan akatsa!</string> <string name="authentication_failed" fuzzy="true">Autentifikazioan akatsa!</string>
<string name="uploading_started">Igoera hasi da!</string> <string name="uploading_started">Igoera hasi da!</string>
<string name="upload_completed_notification_title">%1$s igotzen!</string> <string name="upload_completed_notification_title">%1$s igotzen!</string>
<string name="upload_completed_notification_text">Ukitu igotakoa ikusteko</string> <string name="upload_completed_notification_text">Ukitu igotakoa ikusteko</string>

View file

@ -28,7 +28,7 @@
<string name="login_success">ورود موفق!</string> <string name="login_success">ورود موفق!</string>
<string name="login_failed">ورود ناموفق!</string> <string name="login_failed">ورود ناموفق!</string>
<string name="upload_failed">پرونده یافت نشد لطفاً پرونده دیگری را امتحان کنید.</string> <string name="upload_failed">پرونده یافت نشد لطفاً پرونده دیگری را امتحان کنید.</string>
<string name="authentication_failed">تأیید اعتبار انجام نشد!</string> <string name="authentication_failed" fuzzy="true">تأیید اعتبار انجام نشد!</string>
<string name="uploading_started">بارگذاری آغاز شد!</string> <string name="uploading_started">بارگذاری آغاز شد!</string>
<string name="upload_completed_notification_title">%1$s بارگذاری شد!</string> <string name="upload_completed_notification_title">%1$s بارگذاری شد!</string>
<string name="upload_completed_notification_text">برای دیدن بارگذاریتان بر روی صفحه انگشت بزنید</string> <string name="upload_completed_notification_text">برای دیدن بارگذاریتان بر روی صفحه انگشت بزنید</string>
@ -104,7 +104,7 @@
<string name="preference_license">مجوز پیش‌فرض</string> <string name="preference_license">مجوز پیش‌فرض</string>
<string name="use_previous">از عنوان/توضیحات پیشین استفاده کنید</string> <string name="use_previous">از عنوان/توضیحات پیشین استفاده کنید</string>
<string name="allow_gps">دریافت خودکار موقعیت کنونی</string> <string name="allow_gps">دریافت خودکار موقعیت کنونی</string>
<string name="allow_gps_summary">درحال دریافت موقعیت برای پیشنهاد رده در صورتی که برچسب جغرافیایی وجود نداشته باشد.</string> <string name="allow_gps_summary" fuzzy="true">درحال دریافت موقعیت برای پیشنهاد رده در صورتی که برچسب جغرافیایی وجود نداشته باشد.</string>
<string name="preference_theme">حالت شبانه</string> <string name="preference_theme">حالت شبانه</string>
<string name="preference_theme_summary">استفاده از حالت تیره</string> <string name="preference_theme_summary">استفاده از حالت تیره</string>
<string name="license_name_cc_by_sa_four">CC Attribution-ShareAlike 4.0</string> <string name="license_name_cc_by_sa_four">CC Attribution-ShareAlike 4.0</string>

View file

@ -30,7 +30,7 @@
<string name="login_success">Kirjautuminen onnistui!</string> <string name="login_success">Kirjautuminen onnistui!</string>
<string name="login_failed">Kirjautuminen epäonnistui!</string> <string name="login_failed">Kirjautuminen epäonnistui!</string>
<string name="upload_failed">Tiedostoa ei löytynyt. Yritä toista tiedostoa.</string> <string name="upload_failed">Tiedostoa ei löytynyt. Yritä toista tiedostoa.</string>
<string name="authentication_failed">Tunnistautuminen epäonnistui!</string> <string name="authentication_failed" fuzzy="true">Tunnistautuminen epäonnistui!</string>
<string name="uploading_started">Tallentaminen aloitettiin!</string> <string name="uploading_started">Tallentaminen aloitettiin!</string>
<string name="upload_completed_notification_title">%1$s tallennettiin!</string> <string name="upload_completed_notification_title">%1$s tallennettiin!</string>
<string name="upload_completed_notification_text">Napauta katsoaksesi tallennusta</string> <string name="upload_completed_notification_text">Napauta katsoaksesi tallennusta</string>
@ -110,7 +110,7 @@
<string name="preference_license">Oletuslisenssi</string> <string name="preference_license">Oletuslisenssi</string>
<string name="use_previous">Käytä edellistä otsikkoa/kuvausta</string> <string name="use_previous">Käytä edellistä otsikkoa/kuvausta</string>
<string name="allow_gps">Hae tämänhetkinen sijainti automaattisesti</string> <string name="allow_gps">Hae tämänhetkinen sijainti automaattisesti</string>
<string name="allow_gps_summary">Nouda nykyinen sijainti asettaaksesi käyttöön luokkaehdotuksia jos kuva ei ole paikkamerkitty</string> <string name="allow_gps_summary" fuzzy="true">Nouda nykyinen sijainti asettaaksesi käyttöön luokkaehdotuksia jos kuva ei ole paikkamerkitty</string>
<string name="preference_theme">Yötila</string> <string name="preference_theme">Yötila</string>
<string name="preference_theme_summary">Käytä tummaa teemaa</string> <string name="preference_theme_summary">Käytä tummaa teemaa</string>
<string name="license_name_cc_by_sa_four">Nimeä-JaaSamoin 4.0</string> <string name="license_name_cc_by_sa_four">Nimeä-JaaSamoin 4.0</string>

View file

@ -12,7 +12,7 @@
<string name="logging_in_message" fuzzy="true">Vinarliga bíða…</string> <string name="logging_in_message" fuzzy="true">Vinarliga bíða…</string>
<string name="login_success">Innritan væleydnað!</string> <string name="login_success">Innritan væleydnað!</string>
<string name="login_failed">Innritan miseydnaðist</string> <string name="login_failed">Innritan miseydnaðist</string>
<string name="authentication_failed">Góðkenning miseydnaðist!</string> <string name="authentication_failed" fuzzy="true">Góðkenning miseydnaðist!</string>
<string name="uploading_started">Upplóting er byrjað!</string> <string name="uploading_started">Upplóting er byrjað!</string>
<string name="upload_completed_notification_title">%1$s er lagt út!</string> <string name="upload_completed_notification_title">%1$s er lagt út!</string>
<string name="upload_completed_notification_text">Trýst fyri at síggja tað sum tú legði út</string> <string name="upload_completed_notification_text">Trýst fyri at síggja tað sum tú legði út</string>

View file

@ -1,6 +1,7 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<!-- Authors: <!-- Authors:
* Fitoschido * Fitoschido
* Friday83260
* Gomoko * Gomoko
* Happy13241 * Happy13241
* Jean-Frédéric * Jean-Frédéric
@ -37,7 +38,7 @@
<string name="login_success">Connexion réussie !</string> <string name="login_success">Connexion réussie !</string>
<string name="login_failed">Échec de la connexion !</string> <string name="login_failed">Échec de la connexion !</string>
<string name="upload_failed">Fichier non trouvé. Veuillez en essayer un autre.</string> <string name="upload_failed">Fichier non trouvé. Veuillez en essayer un autre.</string>
<string name="authentication_failed">Échec de lauthentification !</string> <string name="authentication_failed">Échec de l\'authentification, veuillez vous reconnecter s\'il vous plait</string>
<string name="uploading_started">Téléversement démarré !</string> <string name="uploading_started">Téléversement démarré !</string>
<string name="upload_completed_notification_title">%1$s téléversés !</string> <string name="upload_completed_notification_title">%1$s téléversés !</string>
<string name="upload_completed_notification_text">Appuyer pour voir votre téléversement</string> <string name="upload_completed_notification_text">Appuyer pour voir votre téléversement</string>
@ -119,7 +120,7 @@
<string name="preference_license">Licence par défaut</string> <string name="preference_license">Licence par défaut</string>
<string name="use_previous">Utiliser le titre ou la description précédent</string> <string name="use_previous">Utiliser le titre ou la description précédent</string>
<string name="allow_gps">Obtenir automatiquement lemplacement actuel</string> <string name="allow_gps">Obtenir automatiquement lemplacement actuel</string>
<string name="allow_gps_summary">Récupérer lemplacement actuel pour proposer des suggestions de catégorie si limage nest pas marquée géographiquement</string> <string name="allow_gps_summary">Récupère lemplacement actuel si limage nest pas marquée géographiquement, et marque géographiquement limage avec. Avertissement : Cela dévoilera votre emplacement actuel.</string>
<string name="preference_theme">Mode de nuit</string> <string name="preference_theme">Mode de nuit</string>
<string name="preference_theme_summary">Utiliser un thème sombre</string> <string name="preference_theme_summary">Utiliser un thème sombre</string>
<string name="license_name_cc_by_sa_four"> Attribution-ShareAlike 4.0</string> <string name="license_name_cc_by_sa_four"> Attribution-ShareAlike 4.0</string>
@ -289,6 +290,10 @@
<string name="share_app_title">Partager les applications</string> <string name="share_app_title">Partager les applications</string>
<string name="share_coordinates_not_present">Les coordonnées n\'ont pas été spécifiées pendant la sélection de l\'image</string> <string name="share_coordinates_not_present">Les coordonnées n\'ont pas été spécifiées pendant la sélection de l\'image</string>
<string name="error_fetching_nearby_places">Erreur durant l\'exploration du voisinage.</string> <string name="error_fetching_nearby_places">Erreur durant l\'exploration du voisinage.</string>
<string name="appwidget_img">Image du jour</string>
<string name="app_widget_heading">Image du jour</string>
<string name="successful_wikidata_edit">Image bien ajoutée à %1$s sur Wikidata!</string>
<string name="wikidata_edit_failure">Échec de la mise à jour de l\'entité Wikidata correspondante!</string>
<string name="menu_set_wallpaper">Définir le papier-peint</string> <string name="menu_set_wallpaper">Définir le papier-peint</string>
<string name="wallpaper_set_successfully">Papier-peint configuré avec succès!</string> <string name="wallpaper_set_successfully">Papier-peint configuré avec succès!</string>
</resources> </resources>

View file

@ -15,7 +15,7 @@
<string name="login_success">Uunmeldin hää loket!</string> <string name="login_success">Uunmeldin hää loket!</string>
<string name="login_failed">Bi\'t uunmeldin as wat skiaf gingen.</string> <string name="login_failed">Bi\'t uunmeldin as wat skiaf gingen.</string>
<string name="upload_failed">Datei ei fünjen. Ferschük det mä en ööder datei.</string> <string name="upload_failed">Datei ei fünjen. Ferschük det mä en ööder datei.</string>
<string name="authentication_failed">Dü küdst ei gudkäänd wurd!</string> <string name="authentication_failed" fuzzy="true">Dü küdst ei gudkäänd wurd!</string>
<string name="uploading_started">Huuchschüüren hää begand!</string> <string name="uploading_started">Huuchschüüren hää begand!</string>
<string name="upload_completed_notification_title">%1$s huuchschüürd!</string> <string name="upload_completed_notification_title">%1$s huuchschüürd!</string>
<string name="upload_completed_notification_text">Tipe, am din huuchschüürd bil uuntulukin</string> <string name="upload_completed_notification_text">Tipe, am din huuchschüürd bil uuntulukin</string>
@ -92,7 +92,7 @@
<string name="preference_license" fuzzy="true">Lisens</string> <string name="preference_license" fuzzy="true">Lisens</string>
<string name="use_previous">Ual tiitel/beskriiwang brük</string> <string name="use_previous">Ual tiitel/beskriiwang brük</string>
<string name="allow_gps">Aktuel plak automaatisk ufrep</string> <string name="allow_gps">Aktuel plak automaatisk ufrep</string>
<string name="allow_gps_summary">Rept di aktuel plak uf, am kategoriin föörtuslauen, wan det bil nian geotags hää.</string> <string name="allow_gps_summary" fuzzy="true">Rept di aktuel plak uf, am kategoriin föörtuslauen, wan det bil nian geotags hää.</string>
<string name="preference_theme">Naacht muude</string> <string name="preference_theme">Naacht muude</string>
<string name="preference_theme_summary">Jonk skak brük</string> <string name="preference_theme_summary">Jonk skak brük</string>
<string name="license_name_cc_by_sa_four">Attribution-ShareAlike 4.0</string> <string name="license_name_cc_by_sa_four">Attribution-ShareAlike 4.0</string>

View file

@ -27,7 +27,7 @@
<string name="login_success">Accedeu correctamente!</string> <string name="login_success">Accedeu correctamente!</string>
<string name="login_failed">Erro durante o inición de sesión!</string> <string name="login_failed">Erro durante o inición de sesión!</string>
<string name="upload_failed">Ficheiro non atopado. Por favor, probe con outro.</string> <string name="upload_failed">Ficheiro non atopado. Por favor, probe con outro.</string>
<string name="authentication_failed">Erro durante a autenticación!</string> <string name="authentication_failed" fuzzy="true">Erro durante a autenticación!</string>
<string name="uploading_started">A carga comezou!</string> <string name="uploading_started">A carga comezou!</string>
<string name="upload_completed_notification_title">Cargouse \"%1$s\"!</string> <string name="upload_completed_notification_title">Cargouse \"%1$s\"!</string>
<string name="upload_completed_notification_text">Prema para ollar a súa carga</string> <string name="upload_completed_notification_text">Prema para ollar a súa carga</string>
@ -55,6 +55,7 @@
<string name="add_title_toast">Por favor, proporcione un título para este ficheiro</string> <string name="add_title_toast">Por favor, proporcione un título para este ficheiro</string>
<string name="share_description_hint">Descrición</string> <string name="share_description_hint">Descrición</string>
<string name="login_failed_network">Erro ao acceder ao sistema: Fallou a rede</string> <string name="login_failed_network">Erro ao acceder ao sistema: Fallou a rede</string>
<string name="login_failed_wrong_credentials">Non se pode acceder. Revise o nome de usuario e o contrasinal</string>
<string name="login_failed_throttled">Demasiados intentos incorrectos. Inténteo de novo nuns minutos.</string> <string name="login_failed_throttled">Demasiados intentos incorrectos. Inténteo de novo nuns minutos.</string>
<string name="login_failed_blocked">Sentímolo, este usuario está bloqueado en Commons</string> <string name="login_failed_blocked">Sentímolo, este usuario está bloqueado en Commons</string>
<string name="login_failed_2fa_needed">Debe proporcionar o seu código de autenticación de dous factores.</string> <string name="login_failed_2fa_needed">Debe proporcionar o seu código de autenticación de dous factores.</string>
@ -108,7 +109,7 @@
<string name="preference_license">Licenza por defecto</string> <string name="preference_license">Licenza por defecto</string>
<string name="use_previous">Usar o título ou a descrición anterior</string> <string name="use_previous">Usar o título ou a descrición anterior</string>
<string name="allow_gps">Obter automaticamente a localización actual</string> <string name="allow_gps">Obter automaticamente a localización actual</string>
<string name="allow_gps_summary">Obter a localización actual para ofrecer suxestións de categoría se a imaxe non está xeolocalizada</string> <string name="allow_gps_summary" fuzzy="true">Obter a localización actual para ofrecer suxestións de categoría se a imaxe non está xeolocalizada</string>
<string name="preference_theme">Modo nocturno</string> <string name="preference_theme">Modo nocturno</string>
<string name="preference_theme_summary">Usar tema escuro</string> <string name="preference_theme_summary">Usar tema escuro</string>
<string name="license_name_cc_by_sa_four"> Recoñecemento-CompartirIgual 4.0</string> <string name="license_name_cc_by_sa_four"> Recoñecemento-CompartirIgual 4.0</string>
@ -267,4 +268,16 @@
<string name="about_translate_proceed">Proceder</string> <string name="about_translate_proceed">Proceder</string>
<string name="about_translate_cancel">Cancelar</string> <string name="about_translate_cancel">Cancelar</string>
<string name="retry">Reintentar</string> <string name="retry">Reintentar</string>
<string name="showcase_view_got_it_button">Entendido!</string>
<string name="showcase_view_whole_nearby_activity">Hai sitios preto de vostede que precisan fotos para ilustrar os seus artigos de Wikipedia</string>
<string name="showcase_view_list_icon">Premendo neste botón aparecerá unha lista destes lugares</string>
<string name="showcase_view_plus_fab">Pode cargar unha imaxe de calquera lugar dende a galería ou a cámara</string>
<string name="no_images_found">Non se atopou ningunha imaxeǃ</string>
<string name="error_loading_images">Houbo un erro ó subir as imaxes.</string>
<string name="image_uploaded_by">Subida porː %1$s</string>
<string name="share_app_title">Compartir a aplicación</string>
<string name="share_coordinates_not_present">Non se indicaron as coordenadas ó seleccionar a imaxe</string>
<string name="error_fetching_nearby_places">Erro ó procurar os lugares próximos.</string>
<string name="menu_set_wallpaper">Definir imaxe de fondo</string>
<string name="wallpaper_set_successfully">A imaxe de fondo configurouse correctamenteǃ</string>
</resources> </resources>

View file

@ -12,7 +12,7 @@
<string name="logging_in_message">E kali ke ʻoluʻolu…</string> <string name="logging_in_message">E kali ke ʻoluʻolu…</string>
<string name="login_success">ʻEʻe kūleʻa</string> <string name="login_success">ʻEʻe kūleʻa</string>
<string name="login_failed">ʻule ka ʻeʻena</string> <string name="login_failed">ʻule ka ʻeʻena</string>
<string name="authentication_failed">ʻule ka hōʻoiaʻiʻo ʻike</string> <string name="authentication_failed" fuzzy="true">ʻule ka hōʻoiaʻiʻo ʻike</string>
<string name="uploading_started">Ua hoʻomaka ka hoʻouka!</string> <string name="uploading_started">Ua hoʻomaka ka hoʻouka!</string>
<string name="upload_completed_notification_title">Ua hoʻouka ʻia ʻo %1$s</string> <string name="upload_completed_notification_title">Ua hoʻouka ʻia ʻo %1$s</string>
<string name="upload_completed_notification_text">Kīkē no ka ʻike ʻana o kāu hoʻouka</string> <string name="upload_completed_notification_text">Kīkē no ka ʻike ʻana o kāu hoʻouka</string>

View file

@ -26,7 +26,7 @@
<string name="login_success">प्रवेश में सफल हुआ!</string> <string name="login_success">प्रवेश में सफल हुआ!</string>
<string name="login_failed">प्रवेश विफल हुआ!</string> <string name="login_failed">प्रवेश विफल हुआ!</string>
<string name="upload_failed">फ़ाइल नहीं मिली, कृपया अन्य फ़ाइल से प्रयास करें।</string> <string name="upload_failed">फ़ाइल नहीं मिली, कृपया अन्य फ़ाइल से प्रयास करें।</string>
<string name="authentication_failed">प्रमाणीकरण विफल!</string> <string name="authentication_failed" fuzzy="true">प्रमाणीकरण विफल!</string>
<string name="uploading_started">अपलोड आरंभ!</string> <string name="uploading_started">अपलोड आरंभ!</string>
<string name="upload_completed_notification_title">%1$s अपलोड हुआ!</string> <string name="upload_completed_notification_title">%1$s अपलोड हुआ!</string>
<string name="upload_completed_notification_text">अपना अपलोड देखने के लिए टैप करें</string> <string name="upload_completed_notification_text">अपना अपलोड देखने के लिए टैप करें</string>
@ -104,7 +104,7 @@
<string name="preference_license" fuzzy="true">लाइसेन्स</string> <string name="preference_license" fuzzy="true">लाइसेन्स</string>
<string name="use_previous">पिछले शीर्षक/विवरण का उपयोग करें</string> <string name="use_previous">पिछले शीर्षक/विवरण का उपयोग करें</string>
<string name="allow_gps">वर्तमान स्थान स्वतः ज्ञात करें</string> <string name="allow_gps">वर्तमान स्थान स्वतः ज्ञात करें</string>
<string name="allow_gps_summary">यदि छवि पर जियोटैग नहीं है तो श्रेणियों के सुझाव हेतु वर्तमान स्थान ज्ञात करें।</string> <string name="allow_gps_summary" fuzzy="true">यदि छवि पर जियोटैग नहीं है तो श्रेणियों के सुझाव हेतु वर्तमान स्थान ज्ञात करें।</string>
<string name="preference_theme">रात्रि मोड</string> <string name="preference_theme">रात्रि मोड</string>
<string name="preference_theme_summary">डार्क थीम का प्रयोग करें</string> <string name="preference_theme_summary">डार्क थीम का प्रयोग करें</string>
<string name="license_name_cc_by_sa_four">एट्रीब्यूशन-शेयरअलाइक 4.0</string> <string name="license_name_cc_by_sa_four">एट्रीब्यूशन-शेयरअलाइक 4.0</string>

View file

@ -21,7 +21,7 @@
<string name="login_success">Prijava uspješna!</string> <string name="login_success">Prijava uspješna!</string>
<string name="login_failed">Prijava neuspješna!</string> <string name="login_failed">Prijava neuspješna!</string>
<string name="upload_failed">Datoteka nije pronađena. Molimo probajte drugu.</string> <string name="upload_failed">Datoteka nije pronađena. Molimo probajte drugu.</string>
<string name="authentication_failed">Autentifikacija neuspješna!</string> <string name="authentication_failed" fuzzy="true">Autentifikacija neuspješna!</string>
<string name="uploading_started">Postavljanje započeto!</string> <string name="uploading_started">Postavljanje započeto!</string>
<string name="upload_completed_notification_title">%1$s postavljeno!</string> <string name="upload_completed_notification_title">%1$s postavljeno!</string>
<string name="upload_completed_notification_text">Dodirnite da biste vidjeli datoteku</string> <string name="upload_completed_notification_text">Dodirnite da biste vidjeli datoteku</string>
@ -103,7 +103,7 @@
<string name="preference_license">Podrazumijevana licencija</string> <string name="preference_license">Podrazumijevana licencija</string>
<string name="use_previous">Rabite prethodni naziv/opis</string> <string name="use_previous">Rabite prethodni naziv/opis</string>
<string name="allow_gps">Automatski pribavi trenutačnu lokaciju</string> <string name="allow_gps">Automatski pribavi trenutačnu lokaciju</string>
<string name="allow_gps_summary">Ako slika nema oznaku lokacije, pribavi trenutačnu lokaciju kako bi se mogle ponuditi kategorije</string> <string name="allow_gps_summary" fuzzy="true">Ako slika nema oznaku lokacije, pribavi trenutačnu lokaciju kako bi se mogle ponuditi kategorije</string>
<string name="preference_theme">Noćni način</string> <string name="preference_theme">Noćni način</string>
<string name="preference_theme_summary">Rabi tamnu temu</string> <string name="preference_theme_summary">Rabi tamnu temu</string>
<string name="license_name_cc_by_sa_four"> Imenovanje-Dijeli pod istim uvjetima 4.0</string> <string name="license_name_cc_by_sa_four"> Imenovanje-Dijeli pod istim uvjetima 4.0</string>

View file

@ -13,7 +13,7 @@
<string name="logging_in_message" fuzzy="true">Bittschön woorte …</string> <string name="logging_in_message" fuzzy="true">Bittschön woorte …</string>
<string name="login_success">Oonmeldung erfollichreich!</string> <string name="login_success">Oonmeldung erfollichreich!</string>
<string name="login_failed">Oonmeldung fehlgeschlooht!</string> <string name="login_failed">Oonmeldung fehlgeschlooht!</string>
<string name="authentication_failed">Authentifizierung fehlgeschlooht!</string> <string name="authentication_failed" fuzzy="true">Authentifizierung fehlgeschlooht!</string>
<string name="uploading_started">Hochloode oongefang!</string> <string name="uploading_started">Hochloode oongefang!</string>
<string name="upload_completed_notification_title">„%1$s“ hochgelood!</string> <string name="upload_completed_notification_title">„%1$s“ hochgelood!</string>
<string name="upload_completed_notification_text">Tippe mit dein Fingerspitze, um dein Upload (Ufflloodung) oonzusiehn</string> <string name="upload_completed_notification_text">Tippe mit dein Fingerspitze, um dein Upload (Ufflloodung) oonzusiehn</string>

View file

@ -12,7 +12,7 @@
<string name="logging_in_message">Prošu čakaj…</string> <string name="logging_in_message">Prošu čakaj…</string>
<string name="login_success">Přizjewjenje wuspěšne!</string> <string name="login_success">Přizjewjenje wuspěšne!</string>
<string name="login_failed">Přizjewjenje je so njeporadźiło!</string> <string name="login_failed">Přizjewjenje je so njeporadźiło!</string>
<string name="authentication_failed">Awtentifikacija je so njeporadźiła!</string> <string name="authentication_failed" fuzzy="true">Awtentifikacija je so njeporadźiła!</string>
<string name="uploading_started">Nahraće je so započało!</string> <string name="uploading_started">Nahraće je so započało!</string>
<string name="upload_completed_notification_title">%1$s nahraty!</string> <string name="upload_completed_notification_title">%1$s nahraty!</string>
<string name="upload_completed_notification_text">Dótkń so, zo by swoje nahraće widźał</string> <string name="upload_completed_notification_text">Dótkń so, zo by swoje nahraće widźał</string>

View file

@ -31,7 +31,7 @@
<string name="login_success">Sikeres bejelentkezés</string> <string name="login_success">Sikeres bejelentkezés</string>
<string name="login_failed">A bejelentkezés nem sikerült.</string> <string name="login_failed">A bejelentkezés nem sikerült.</string>
<string name="upload_failed">A fájl nem található. Próbálkozz másik fájllal.</string> <string name="upload_failed">A fájl nem található. Próbálkozz másik fájllal.</string>
<string name="authentication_failed">Sikertelen hitelesítés.</string> <string name="authentication_failed" fuzzy="true">Sikertelen hitelesítés.</string>
<string name="uploading_started">Feltöltés elindult.</string> <string name="uploading_started">Feltöltés elindult.</string>
<string name="upload_completed_notification_title">%1$s feltöltve.</string> <string name="upload_completed_notification_title">%1$s feltöltve.</string>
<string name="upload_completed_notification_text">Feltöltés megtekintése</string> <string name="upload_completed_notification_text">Feltöltés megtekintése</string>
@ -113,7 +113,7 @@
<string name="preference_license">Alapértelmezett licenc</string> <string name="preference_license">Alapértelmezett licenc</string>
<string name="use_previous">Előző cím/leírás használata</string> <string name="use_previous">Előző cím/leírás használata</string>
<string name="allow_gps">Automatikusan megkapja a jelenlegi helyet</string> <string name="allow_gps">Automatikusan megkapja a jelenlegi helyet</string>
<string name="allow_gps_summary">Lekéri a jelenlegi helyet, hogy lehetőség legyen kategóriajavaslatokra a nem földrajzi címkézett képeknél.</string> <string name="allow_gps_summary" fuzzy="true">Lekéri a jelenlegi helyet, hogy lehetőség legyen kategóriajavaslatokra a nem földrajzi címkézett képeknél.</string>
<string name="preference_theme">Éjszakai mód</string> <string name="preference_theme">Éjszakai mód</string>
<string name="preference_theme_summary">Sötét téma használata</string> <string name="preference_theme_summary">Sötét téma használata</string>
<string name="license_name_cc_by_sa_four">Nevezd meg! Így add tovább! 4.0</string> <string name="license_name_cc_by_sa_four">Nevezd meg! Így add tovább! 4.0</string>

View file

@ -19,7 +19,7 @@
<string name="login_success">Berhasil masuk log!</string> <string name="login_success">Berhasil masuk log!</string>
<string name="login_failed">Masuk log gagal!</string> <string name="login_failed">Masuk log gagal!</string>
<string name="upload_failed" fuzzy="true">Berkas tidak ditemukan, silakan coba berkas lain</string> <string name="upload_failed" fuzzy="true">Berkas tidak ditemukan, silakan coba berkas lain</string>
<string name="authentication_failed">Autentikasi gagal!</string> <string name="authentication_failed" fuzzy="true">Autentikasi gagal!</string>
<string name="uploading_started">Mulai unggah!</string> <string name="uploading_started">Mulai unggah!</string>
<string name="upload_completed_notification_title">%1$s terunggah!</string> <string name="upload_completed_notification_title">%1$s terunggah!</string>
<string name="upload_completed_notification_text">Tekan untuk melihat unggahan Anda</string> <string name="upload_completed_notification_text">Tekan untuk melihat unggahan Anda</string>

View file

@ -21,7 +21,7 @@
<string name="login_success">Innskráning tókst!</string> <string name="login_success">Innskráning tókst!</string>
<string name="login_failed">Innskráning mistókst!</string> <string name="login_failed">Innskráning mistókst!</string>
<string name="upload_failed">Skráin fannst ekki. Prófaðu aðra skrá.</string> <string name="upload_failed">Skráin fannst ekki. Prófaðu aðra skrá.</string>
<string name="authentication_failed">Auðkenning tókst ekki!</string> <string name="authentication_failed" fuzzy="true">Auðkenning tókst ekki!</string>
<string name="uploading_started">Innsending í gangi!</string> <string name="uploading_started">Innsending í gangi!</string>
<string name="upload_completed_notification_title">%1$s var sent inn!</string> <string name="upload_completed_notification_title">%1$s var sent inn!</string>
<string name="upload_completed_notification_text">Bankaðu til að skoða sem þú ert að senda inn</string> <string name="upload_completed_notification_text">Bankaðu til að skoða sem þú ert að senda inn</string>
@ -102,7 +102,7 @@
<string name="preference_license">Sjálfgefið notkunarleyfi</string> <string name="preference_license">Sjálfgefið notkunarleyfi</string>
<string name="use_previous">Nota fyrri titil/lýsingu</string> <string name="use_previous">Nota fyrri titil/lýsingu</string>
<string name="allow_gps">Ná sjálfvirkt í núverandi staðsetningu</string> <string name="allow_gps">Ná sjálfvirkt í núverandi staðsetningu</string>
<string name="allow_gps_summary">Lesa núverandi staðsetningu til að geta stungið upp á flokkum ef myndin er ekki með hnattstaðsetningarhnitum</string> <string name="allow_gps_summary" fuzzy="true">Lesa núverandi staðsetningu til að geta stungið upp á flokkum ef myndin er ekki með hnattstaðsetningarhnitum</string>
<string name="preference_theme">Næturhamur</string> <string name="preference_theme">Næturhamur</string>
<string name="preference_theme_summary">Nota dökkt þema</string> <string name="preference_theme_summary">Nota dökkt þema</string>
<string name="license_name_cc_by_sa_four"> Attribution-ShareAlike 4.0</string> <string name="license_name_cc_by_sa_four"> Attribution-ShareAlike 4.0</string>

View file

@ -26,7 +26,7 @@
<string name="login_success">Accesso effettuato!</string> <string name="login_success">Accesso effettuato!</string>
<string name="login_failed">Accesso non riuscito!</string> <string name="login_failed">Accesso non riuscito!</string>
<string name="upload_failed">File non trovato. Prova con un altro file.</string> <string name="upload_failed">File non trovato. Prova con un altro file.</string>
<string name="authentication_failed">Autenticazione non riuscita!</string> <string name="authentication_failed">Autenticazione non riuscita, si prega di riprovare</string>
<string name="uploading_started">Caricamento iniziato!</string> <string name="uploading_started">Caricamento iniziato!</string>
<string name="upload_completed_notification_title">%1$s caricato!</string> <string name="upload_completed_notification_title">%1$s caricato!</string>
<string name="upload_completed_notification_text">Premi per vedere i tuoi caricamenti</string> <string name="upload_completed_notification_text">Premi per vedere i tuoi caricamenti</string>
@ -228,4 +228,6 @@
<string name="error_loading_images">Si è verificato un errore durante il caricamento delle immagini.</string> <string name="error_loading_images">Si è verificato un errore durante il caricamento delle immagini.</string>
<string name="image_uploaded_by">Caricato da: %1$s</string> <string name="image_uploaded_by">Caricato da: %1$s</string>
<string name="share_app_title">Condividi applicazione</string> <string name="share_app_title">Condividi applicazione</string>
<string name="appwidget_img">Foto del giorno</string>
<string name="app_widget_heading">Foto del giorno</string>
</resources> </resources>

View file

@ -30,7 +30,7 @@
<string name="login_success">הכניסה הצליחה</string> <string name="login_success">הכניסה הצליחה</string>
<string name="login_failed">הכניסה נכשלה!</string> <string name="login_failed">הכניסה נכשלה!</string>
<string name="upload_failed">הקובץ לא נמצא. נא לנסות קובץ אחר.</string> <string name="upload_failed">הקובץ לא נמצא. נא לנסות קובץ אחר.</string>
<string name="authentication_failed">אימות הפרטים נכשל</string> <string name="authentication_failed">אימות הפרטים נכשל, נא להיכנס מחדש</string>
<string name="uploading_started">ההעלאה התחילה!</string> <string name="uploading_started">ההעלאה התחילה!</string>
<string name="upload_completed_notification_title">הקובץ %1$s הועלה!</string> <string name="upload_completed_notification_title">הקובץ %1$s הועלה!</string>
<string name="upload_completed_notification_text">ללחוץ כאן כדי לצפות בהעלאה שלך</string> <string name="upload_completed_notification_text">ללחוץ כאן כדי לצפות בהעלאה שלך</string>
@ -112,7 +112,7 @@
<string name="preference_license">רישיון ברירת מחדל</string> <string name="preference_license">רישיון ברירת מחדל</string>
<string name="use_previous">להשתמש בכותרת ובתיאור קודמים</string> <string name="use_previous">להשתמש בכותרת ובתיאור קודמים</string>
<string name="allow_gps">לקבל אוטומטית את המיקום הנוכחי</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">מצב לילה</string>
<string name="preference_theme_summary">שימוש במצב לילה</string> <string name="preference_theme_summary">שימוש במצב לילה</string>
<string name="license_name_cc_by_sa_four">ייחוס–שיתוף זהה 4.0</string> <string name="license_name_cc_by_sa_four">ייחוס–שיתוף זהה 4.0</string>
@ -282,6 +282,10 @@
<string name="share_app_title">שיתוף היישום</string> <string name="share_app_title">שיתוף היישום</string>
<string name="share_coordinates_not_present">לא צוינו קואורדינטות בעת בחירת התמונה</string> <string name="share_coordinates_not_present">לא צוינו קואורדינטות בעת בחירת התמונה</string>
<string name="error_fetching_nearby_places">שגיאה באחזור המקומות בסביבתך.</string> <string name="error_fetching_nearby_places">שגיאה באחזור המקומות בסביבתך.</string>
<string name="appwidget_img">תמונת היום</string>
<string name="app_widget_heading">תמונת היום</string>
<string name="successful_wikidata_edit">התמונה נוספה בהצלחה ל־%1$s בוויקינתונים!</string>
<string name="wikidata_edit_failure">לא ניתן היה לעדכן הישות המתאימה בוויקינתונים!</string>
<string name="menu_set_wallpaper">הגדרת רקע</string> <string name="menu_set_wallpaper">הגדרת רקע</string>
<string name="wallpaper_set_successfully">הרקע הוגדר בהצלחה!</string> <string name="wallpaper_set_successfully">הרקע הוגדר בהצלחה!</string>
</resources> </resources>

View file

@ -30,7 +30,7 @@
<string name="login_success">ログインしました!</string> <string name="login_success">ログインしました!</string>
<string name="login_failed">ログインに失敗しました!</string> <string name="login_failed">ログインに失敗しました!</string>
<string name="upload_failed">ファイルが見つかりません。別のファイルでお試しください。</string> <string name="upload_failed">ファイルが見つかりません。別のファイルでお試しください。</string>
<string name="authentication_failed">認証に失敗しました!</string> <string name="authentication_failed">認証に失敗しました! もう一度ログインしてください</string>
<string name="uploading_started">アップロードを開始しました!</string> <string name="uploading_started">アップロードを開始しました!</string>
<string name="upload_completed_notification_title">%1$s をアップロードしました!</string> <string name="upload_completed_notification_title">%1$s をアップロードしました!</string>
<string name="upload_completed_notification_text">アップロードしたものを表示するにはタップしてください</string> <string name="upload_completed_notification_text">アップロードしたものを表示するにはタップしてください</string>
@ -58,9 +58,10 @@
<string name="add_title_toast">ファイル名をつけてください</string> <string name="add_title_toast">ファイル名をつけてください</string>
<string name="share_description_hint">説明</string> <string name="share_description_hint">説明</string>
<string name="login_failed_network">ログインできません - ネットワークのエラーです</string> <string name="login_failed_network">ログインできません - ネットワークのエラーです</string>
<string name="login_failed_wrong_credentials">ログインできません - 利用者名とパスワードを確認してください</string>
<string name="login_failed_throttled">失敗した回数が多すぎます。数分待ってからもう一度お試しください。</string> <string name="login_failed_throttled">失敗した回数が多すぎます。数分待ってからもう一度お試しください。</string>
<string name="login_failed_blocked">申し訳ありませんが、この利用者はコモンズでブロックされています。</string> <string name="login_failed_blocked">申し訳ありませんが、この利用者はコモンズでブロックされています。</string>
<string name="login_failed_2fa_needed">2要素認証コードを提供する必要があります。</string> <string name="login_failed_2fa_needed">2段階認証コードを入力する必要があります。</string>
<string name="login_failed_generic">ログイン失敗</string> <string name="login_failed_generic">ログイン失敗</string>
<string name="share_upload_button">アップロード</string> <string name="share_upload_button">アップロード</string>
<string name="multiple_share_base_title">このセットに名前をつけてください</string> <string name="multiple_share_base_title">このセットに名前をつけてください</string>
@ -110,7 +111,7 @@
<string name="preference_license">既定のライセンス</string> <string name="preference_license">既定のライセンス</string>
<string name="use_previous">前回のタイトルと記述を使用</string> <string name="use_previous">前回のタイトルと記述を使用</string>
<string name="allow_gps">現在の位置を自動的に取得</string> <string name="allow_gps">現在の位置を自動的に取得</string>
<string name="allow_gps_summary">画像にジオタグが付いていない場合、現在の位置を取得してカテゴリを提案</string> <string name="allow_gps_summary">Retrieves current location if image is not geotagged, \n画像にジオタグが付いていない場合、現在の位置を取得して画像に添付。ご注意: 自分の現在地が明示されます。</string>
<string name="preference_theme">夜モード</string> <string name="preference_theme">夜モード</string>
<string name="preference_theme_summary">暗いテーマを使う</string> <string name="preference_theme_summary">暗いテーマを使う</string>
<string name="license_name_cc_by_sa_four">表示-継承 4.0</string> <string name="license_name_cc_by_sa_four">表示-継承 4.0</string>
@ -184,7 +185,7 @@
<string name="media_detail_coordinates_empty">情報なし</string> <string name="media_detail_coordinates_empty">情報なし</string>
<string name="become_a_tester_title">ベータ版を使ってみましょう!</string> <string name="become_a_tester_title">ベータ版を使ってみましょう!</string>
<string name="become_a_tester_description">Google Playのベータ版チャンネルにオプトインして、新機能やバグ修正プログラムに早期にアクセス</string> <string name="become_a_tester_description">Google Playのベータ版チャンネルにオプトインして、新機能やバグ修正プログラムに早期にアクセス</string>
<string name="_2fa_code">2FA コード</string> <string name="_2fa_code">2段階認証コード</string>
<string name="number_of_uploads">最近のアップロードファイルに表示する最大件数</string> <string name="number_of_uploads">最近のアップロードファイルに表示する最大件数</string>
<string name="maximum_limit">最大限</string> <string name="maximum_limit">最大限</string>
<string name="maximum_limit_alert">表示できるのは500件以下です</string> <string name="maximum_limit_alert">表示できるのは500件以下です</string>
@ -279,4 +280,10 @@
<string name="share_app_title">アプリをシェアする</string> <string name="share_app_title">アプリをシェアする</string>
<string name="share_coordinates_not_present">画像の選択中に位置情報を特定できませんでした</string> <string name="share_coordinates_not_present">画像の選択中に位置情報を特定できませんでした</string>
<string name="error_fetching_nearby_places">付近の場所を取得しようとしてエラーが発生しました。</string> <string name="error_fetching_nearby_places">付近の場所を取得しようとしてエラーが発生しました。</string>
<string name="appwidget_img">今日の一枚</string>
<string name="app_widget_heading">今日の一枚</string>
<string name="successful_wikidata_edit">ウィキデータの%1$sに画像を追加しました !</string>
<string name="wikidata_edit_failure">対応するウィキデータの更新に失敗しました!</string>
<string name="menu_set_wallpaper">壁紙の設定</string>
<string name="wallpaper_set_successfully">壁紙の設定ができました!</string>
</resources> </resources>

View file

@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<!-- Authors: <!-- Authors:
* Har-wradim
* פוילישער * פוילישער
--> -->
<resources> <resources>
@ -17,7 +18,7 @@
<string name="login_success">אריינלאגירט מיט הצלחה!</string> <string name="login_success">אריינלאגירט מיט הצלחה!</string>
<string name="login_failed">ארײַנלאגירן אדורכגעפאלן!</string> <string name="login_failed">ארײַנלאגירן אדורכגעפאלן!</string>
<string name="upload_failed">טעקע נישט געראפן. פרובירט אפשר אן אנדער טעקע.</string> <string name="upload_failed">טעקע נישט געראפן. פרובירט אפשר אן אנדער טעקע.</string>
<string name="authentication_failed">אויטענטיפֿיצירן דורכגעפֿאלן!</string> <string name="authentication_failed" fuzzy="true">אויטענטיפֿיצירן דורכגעפֿאלן!</string>
<string name="uploading_started">ארויפלאדן אנגעהויבן!</string> <string name="uploading_started">ארויפלאדן אנגעהויבן!</string>
<string name="upload_completed_notification_title">%1$s ארויפגעלאדן!!</string> <string name="upload_completed_notification_title">%1$s ארויפגעלאדן!!</string>
<string name="upload_completed_notification_text">דרוקט צו זען אײַער ארויפֿלאד</string> <string name="upload_completed_notification_text">דרוקט צו זען אײַער ארויפֿלאד</string>
@ -115,4 +116,7 @@
<string name="navigation_item_feedback">פֿידבעק</string> <string name="navigation_item_feedback">פֿידבעק</string>
<string name="navigation_item_logout">אַרויסלאָגירן</string> <string name="navigation_item_logout">אַרויסלאָגירן</string>
<string name="navigation_item_featured_images">רעקאמנדירט</string> <string name="navigation_item_featured_images">רעקאמנדירט</string>
<string name="appwidget_img">בילד פונעם טאָג</string>
<string name="app_widget_heading">בילד פונעם טאָג</string>
<string name="wikidata_edit_failure">ס׳איז ניט געלונגען צו דערהיינטיקן דעם אַנטשפּרעכנדיקן בלאַט אין וויקידאַטן.</string>
</resources> </resources>

View file

@ -14,7 +14,7 @@
<string name="login_success">Kasil mlebu log!</string> <string name="login_success">Kasil mlebu log!</string>
<string name="login_failed">Wurung mlebu log!</string> <string name="login_failed">Wurung mlebu log!</string>
<string name="upload_failed">Barkas ora katemu. Jajalana barkas liyané.</string> <string name="upload_failed">Barkas ora katemu. Jajalana barkas liyané.</string>
<string name="authentication_failed">Wurung otèntifikasi!</string> <string name="authentication_failed" fuzzy="true">Wurung otèntifikasi!</string>
<string name="uploading_started">Wiwit ngunggah!</string> <string name="uploading_started">Wiwit ngunggah!</string>
<string name="upload_completed_notification_title">%1$s kaunggah!</string> <string name="upload_completed_notification_title">%1$s kaunggah!</string>
<string name="upload_completed_notification_text">Dudul saperlu ndeleng unggahané panjenengan</string> <string name="upload_completed_notification_text">Dudul saperlu ndeleng unggahané panjenengan</string>

View file

@ -15,7 +15,7 @@
<string name="login_success">სისტემაში შესვლა წარმატებით განხორციელდა!</string> <string name="login_success">სისტემაში შესვლა წარმატებით განხორციელდა!</string>
<string name="login_failed">სისტემაში შესვლა ვერ განხორციელდა!</string> <string name="login_failed">სისტემაში შესვლა ვერ განხორციელდა!</string>
<string name="upload_failed">ფაილი არ მოიძებნა. გთხოვთ, სცადოთ სხვა ფაილი.</string> <string name="upload_failed">ფაილი არ მოიძებნა. გთხოვთ, სცადოთ სხვა ფაილი.</string>
<string name="authentication_failed">ავთენტიფიკაცია ვერ მოხერხდა!</string> <string name="authentication_failed" fuzzy="true">ავთენტიფიკაცია ვერ მოხერხდა!</string>
<string name="uploading_started">ატვირთვა დაიწყო!</string> <string name="uploading_started">ატვირთვა დაიწყო!</string>
<string name="upload_completed_notification_title">%1$ ატვირთულია!</string> <string name="upload_completed_notification_title">%1$ ატვირთულია!</string>
<string name="upload_completed_notification_text">დააჭირეთ თქვენი ატვირთვის სანახავად</string> <string name="upload_completed_notification_text">დააჭირეთ თქვენი ატვირთვის სანახავად</string>

View file

@ -15,7 +15,7 @@
<string name="login_success">Tuqqna tedda!</string> <string name="login_success">Tuqqna tedda!</string>
<string name="login_failed">Tqqna ur teddi ara!</string> <string name="login_failed">Tqqna ur teddi ara!</string>
<string name="upload_failed">Ulac afaylu. Ɛreḍ wayeḍ ma ulac aɣilif.</string> <string name="upload_failed">Ulac afaylu. Ɛreḍ wayeḍ ma ulac aɣilif.</string>
<string name="authentication_failed">Asesteb yecceḍ!</string> <string name="authentication_failed" fuzzy="true">Asesteb yecceḍ!</string>
<string name="uploading_started">Asali yebda!</string> <string name="uploading_started">Asali yebda!</string>
<string name="upload_completed_notification_title">%1$s yuli!</string> <string name="upload_completed_notification_title">%1$s yuli!</string>
<string name="upload_completed_notification_text">Senned akken ad twaliḍ asali-ik</string> <string name="upload_completed_notification_text">Senned akken ad twaliḍ asali-ik</string>
@ -93,7 +93,7 @@
<string name="preference_license" fuzzy="true">Turagt</string> <string name="preference_license" fuzzy="true">Turagt</string>
<string name="use_previous">Seqdec azwel neɣ aglam yezrin</string> <string name="use_previous">Seqdec azwel neɣ aglam yezrin</string>
<string name="allow_gps">Awi s wudem awurman adig amiran</string> <string name="allow_gps">Awi s wudem awurman adig amiran</string>
<string name="allow_gps_summary">Awi adig amiran akken ad tsumreḍ taggayt ma yella tugna ur tettwacreḍ ara di tirakalt</string> <string name="allow_gps_summary" fuzzy="true">Awi adig amiran akken ad tsumreḍ taggayt ma yella tugna ur tettwacreḍ ara di tirakalt</string>
<string name="preference_theme">Askar n yiḍ</string> <string name="preference_theme">Askar n yiḍ</string>
<string name="preference_theme_summary">Seqdec asentel aberkan</string> <string name="preference_theme_summary">Seqdec asentel aberkan</string>
<string name="license_name_cc_by_sa_four"> Attribution-ShareAlike 4.0</string> <string name="license_name_cc_by_sa_four"> Attribution-ShareAlike 4.0</string>

View file

@ -4,56 +4,75 @@
* វ័ណថារិទ្ធ * វ័ណថារិទ្ធ
--> -->
<resources> <resources>
<string name="app_name" fuzzy="true">Wikimedia Commons</string> <string name="preference_category_appearance">ការ​រចនា</string>
<string name="menu_settings">ការកំណត់​នានា</string> <string name="preference_category_general">ទូទៅ​</string>
<string name="username">ឈ្មោះអ្នកប្រើប្រាស់</string> <string name="preference_category_feedback">មតិយោបល់</string>
<string name="password">លេខ​សម្ងាត់​</string> <string name="preference_category_location">ទីកន្លែង</string>
<string name="login">ឡុកអ៊ីន​</string> <string name="app_name">វិគីមេឌារួម</string>
<string name="logging_in_title">កំពុងឡុកអ៊ីន​</string> <string name="menu_settings">ការកំណត់​</string>
<string name="logging_in_message">សូមរង់ចាំ…</string> <string name="username">អត្តនាម</string>
<string name="login_success">កត់ឈ្មោះចូលបានសំរេច</string> <string name="password">ពាក្យ​សម្ងាត់</string>
<string name="login_failed">កត់ឈ្មោះចូលបរាជ័យ</string> <string name="login_credential">កត់ឈ្មោះចូលទៅក្នុងគណនីវិគីមេឌារួមបេតា</string>
<string name="authentication_failed">Authentication បានបរាជ័យ!</string> <string name="login">កត់ឈ្មោះចូល</string>
<string name="uploading_started">បានចាប់ផ្តើមការផ្ទុកឡើង!</string> <string name="forgot_password">ពេលភ្លេច​ពាក្យ​សម្ងាត់</string>
<string name="upload_completed_notification_title">%1$s បានផ្ទូកឡើងហើយ!</string> <string name="signup">ចុះ​ឈ្មោះ</string>
<string name="upload_completed_notification_text">Tap ដើម្បីមើលការផ្ទុកឡើងរបស់អ្នក</string> <string name="logging_in_title">កំពុងកត់ឈ្មោះចូល</string>
<string name="upload_progress_notification_title_start">កំពុងចាប់ផ្តើម ផ្ទុកឡើង %1$s</string> <string name="logging_in_message">សូមរង់ចាំបន្តិច…</string>
<string name="upload_progress_notification_title_in_progress">%1$s កំពុងផ្ទូកឡើង</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_progress_notification_title_finishing">កំពុងបញ្ចប់ការផ្ទុកឡើង %1$s</string>
<string name="upload_failed_notification_title">ការផ្ទុកឡើង %1$s បានបរាជ័យ</string> <string name="upload_failed_notification_title">ការផ្ទុកឡើង %1$s មិនបានសម្រេច</string>
<string name="upload_failed_notification_subtitle">Tap ដើម្បីមើល</string> <string name="upload_failed_notification_subtitle">ចុចដើម្បីមើល</string>
<string name="title_activity_contributions" fuzzy="true">ការផ្ទុកឡើងរបស់ខ្ញុំ</string> <string name="title_activity_contributions">អ្វីដែលខ្ញុំផ្ទុកឡើងថ្មីៗ</string>
<string name="contribution_state_queued">បានដាក់ក្នុងជួររង់ចាំ</string> <string name="contribution_state_queued">ក្នុងជួររង់ចាំ</string>
<string name="contribution_state_failed">បានបរាជ័យ</string> <string name="contribution_state_failed">មិនបានសម្រេច</string>
<string name="contribution_state_in_progress">%1$d%% រួចរាល់</string> <string name="contribution_state_in_progress">រួចរាល់​បាន %1$d%%</string>
<string name="contribution_state_starting">កំពុង​ផ្ទុកឡើង​</string> <string name="contribution_state_starting">កំពុង​ផ្ទុកឡើង​</string>
<string name="menu_from_gallery">ពីវិចិត្រសាល</string> <string name="menu_from_gallery">ពីវិចិត្រសាល</string>
<string name="menu_from_camera">ថតរូប</string> <string name="menu_from_camera">ថតរូប</string>
<string name="provider_contributions">ការផ្ទុកឡើងរបស់ខ្ញុំ</string> <string name="menu_nearby">ជិតខាង</string>
<string name="menu_share">ចែករំលែក</string> <string name="provider_contributions">អ្វីដែលខ្ញុំផ្ទុកឡើង</string>
<string name="menu_open_in_browser">មើលក្នុង browser</string> <string name="menu_share">ចែកចាយ</string>
<string name="menu_open_in_browser">មើលក្នុងឧបករណ៍រាយរក</string>
<string name="share_title_hint">ចំណងជើង</string> <string name="share_title_hint">ចំណងជើង</string>
<string name="share_description_hint">បរិយាយ</string> <string name="add_title_toast">សូមដាក់ចំណងជើងអោយឯកសារនេះ</string>
<string name="login_failed_network">មិនអាចកត់ឈ្មោះចូល - បណ្តាញ network បរាជ័យ</string> <string name="share_description_hint">ការពិពណ៌នា</string>
<string name="login_failed_throttled" fuzzy="true">ការព្យាយាមមិនបានសម្រេចមានចំនួនច្រើនដងពេក។ សូមព្យាយាមម្តងទៀតនៅប៉ុន្មាននាទីក្រោយ។</string> <string name="login_failed_network">មិនអាចកត់ឈ្មោះចូលបានទេ ព្រោះបណ្ដាញកំពុងមានបញ្ហា។</string>
<string name="login_failed_blocked">សូមអភ័យទោស អ្នកប្រើប្រាស់រូបនេះត្រូវបានហាមឃាត់នៅ Commons</string> <string name="login_failed_wrong_credentials">មិនអាចកត់ឈ្មោះចូលបានទេ។ សូមពិនិត្យអត្តនាមនិងពាក្យសម្ងាត់របស់អ្នកឡើងវិញ។</string>
<string name="login_failed_generic">កត់ឈ្មោះចូលបរាជ័យ</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="share_upload_button">ផ្ទុកឡើង</string>
<string name="multiple_share_base_title">ដាក់ឈ្មោះឲ្យសំនុំនេះ</string> <string name="multiple_share_base_title">ដាក់ឈ្មោះឲ្យសំនុំនេះ</string>
<string name="provider_modifications">បម្រែបម្រួល</string> <string name="provider_modifications">បម្រែបម្រួល</string>
<string name="menu_upload_single">ផ្ទុកឡើង</string> <string name="menu_upload_single">ផ្ទុកឡើង</string>
<string name="categories_search_text_hint">ស្វែងរកចំណាត់ថ្នាក់ក្រុម</string> <string name="categories_search_text_hint">ស្វែងរកចំណាត់ថ្នាក់ក្រុម</string>
<string name="menu_save_categories">រក្សាទុក</string> <string name="menu_save_categories">រក្សាទុក</string>
<string name="refresh_button">ផ្ទុកឡើងវិញ</string>
<string name="display_list_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> <string name="categories_not_found">រកមិនឃើញចំណាត់ថ្នាក់ក្រុមដែលត្រូវនឹង %1$s ទេ</string>
<string name="categories_skip_explanation" fuzzy="true">បន្ថែមចំណាត់ថ្នាក់ក្រុមអោយរូបភាពរបស់អ្នកដើម្បីអោយងាយស្រួលស្វែងរក្នុង Wikimedia Commons។\nចាប់ផ្ដើមវាយបញ្ចូលឈ្មោះចំណាត់ថ្នាក់ក្រុម។\nចុចលើសារនេះ (ឬចុចប៊ូតុងត្រលប់ក្រោយ)ដើម្បីរំលងជំហ៊ាននេះ។</string> <string name="categories_skip_explanation">បន្ថែមចំណាត់ថ្នាក់ក្រុមអោយរូបភាពរបស់អ្នកដើម្បីអោយងាយស្រួលស្វែងរកក្នុងវិគីមេឌារួម។ ចាប់ផ្ដើមវាយបញ្ចូលឈ្មោះចំណាត់ថ្នាក់ក្រុម។</string>
<string name="categories_activity_title">ចំណាត់ថ្នាក់ក្រុម</string> <string name="categories_activity_title">ចំណាត់ថ្នាក់ក្រុម</string>
<string name="title_activity_settings">ការកំណត់</string> <string name="title_activity_settings">ការកំណត់</string>
<string name="title_activity_signup">ចុះឈ្មោះ​</string>
<string name="title_activity_featured_images">រូបភាពឆ្នើម</string>
<string name="menu_about">អំពី</string> <string name="menu_about">អំពី</string>
<string name="about_license" fuzzy="true">សូហ្វវែរប្រភពបើកទូលាយត្រូវបានចេញផ្សាយក្រោមអាជ្ញាបណ្ណ &lt;a href=\"https://github.com/commons-app/apps-android-commons/blob/master/COPYING\"&gt;Apache License v2&lt;/a&gt;</string> <string name="about_license" fuzzy="true">សូហ្វវែរប្រភពបើកទូលាយត្រូវបានចេញផ្សាយក្រោមអាជ្ញាបណ្ណ &lt;a href=\"https://github.com/commons-app/apps-android-commons/blob/master/COPYING\"&gt;Apache License v2&lt;/a&gt;</string>
<string name="about_improve" fuzzy="true">ប្រភពកូដមាននៅ &lt;a href=\"https://github.com/commons-app/apps-android-commons\"&gt;GitHub&lt;/a&gt;. Bugs មាននៅ &lt;a href=\" https://github.com/commons-app/apps-android-commons/issues\"&gt;Github&lt;/a&gt;.</string> <string name="about_improve" fuzzy="true">ប្រភពកូដមាននៅ &lt;a href=\"https://github.com/commons-app/apps-android-commons\"&gt;GitHub&lt;/a&gt;. Bugs មាននៅ &lt;a href=\" https://github.com/commons-app/apps-android-commons/issues\"&gt;Github&lt;/a&gt;.</string>
<string name="about_privacy_policy" fuzzy="true">&lt;a href=\"https://wikimediafoundation.org/wiki/Privacy_policy\"&gt;គោលការភាពជាឯកជន&lt;/a&gt;</string> <string name="about_privacy_policy">&lt;a href=\"https://wikimediafoundation.org/wiki/Privacy_policy\"&gt;គោលការភាពឯកជន&lt;/a&gt;</string>
<string name="title_activity_about">អំពី</string> <string name="title_activity_about">អំពី</string>
<string name="menu_feedback">ផ្ញើមតិកែលម្អ (តាមអ៊ីមែល)</string> <string name="menu_feedback">ផ្ញើមតិយោបល់ (តាមអ៊ីមែល)</string>
<string name="provider_categories">ចំណាត់ថ្នាក់ក្រុមដែលត្រូវបានប្រើថ្មីៗ</string> <string name="provider_categories">ចំណាត់ថ្នាក់ក្រុមដែលត្រូវបានប្រើថ្មីៗ</string>
<string name="waiting_first_sync">កំពុងរង់ចាំ ធ្វើការ sync ជាលើកដំបូង…</string> <string name="waiting_first_sync">កំពុងរង់ចាំ ធ្វើការ sync ជាលើកដំបូង…</string>
<string name="no_uploads_yet">អ្នកមិនទាន់បានផ្ទុករូបថតណាមួយឡើងនៅឡើយទេ។</string> <string name="no_uploads_yet">អ្នកមិនទាន់បានផ្ទុករូបថតណាមួយឡើងនៅឡើយទេ។</string>
@ -90,4 +109,25 @@
<string name="detail_description_empty">គ្មាន​ការ​ពណ៌នា</string> <string name="detail_description_empty">គ្មាន​ការ​ពណ៌នា</string>
<string name="detail_license_empty">Unknown license</string> <string name="detail_license_empty">Unknown license</string>
<string name="menu_refresh">ធ្វើឱ្យស្រស់</string> <string name="menu_refresh">ធ្វើឱ្យស្រស់</string>
<string name="background_image">រូបភាពផ្ទៃខាងក្រោយ</string>
<string name="no_image_found">គ្មានរូបភាព</string>
<string name="upload_image">ផ្ទុករូបភាពឡើង</string>
<string name="welcome_image_mount_zao">ភ្នំហ្សាអូ</string>
<string name="welcome_image_rainbow_bridge">ស្ពានឥន្ទធនូ</string>
<string name="cancel">បោះបង់</string>
<string name="navigation_drawer_open">បើក</string>
<string name="navigation_drawer_close">បិទ</string>
<string name="navigation_item_home">ទំព័រដើម</string>
<string name="navigation_item_upload">ផ្ទុកឡើង​</string>
<string name="navigation_item_nearby">ជិតខាង</string>
<string name="navigation_item_about">អំពី</string>
<string name="navigation_item_settings">ការកំណត់​</string>
<string name="navigation_item_feedback">មតិយោបល់</string>
<string name="navigation_item_logout">កត់ឈ្មោះចេញ</string>
<string name="navigation_item_info">រៀនប្រើ</string>
<string name="navigation_item_notification">សារជូនដំណឹង</string>
<string name="navigation_item_featured_images">ឆ្នើម</string>
<string name="no_description_found">គ្មានការពិពណ៌នា</string>
<string name="nearby_info_menu_wikidata_article">វត្ថុក្នុងវិគីទិន្នន័យ</string>
<string name="nearby_info_menu_wikipedia_article">អត្ថបទវិគីភីឌា</string>
</resources> </resources>

View file

@ -15,7 +15,7 @@
<string name="login_success">가입 성공!</string> <string name="login_success">가입 성공!</string>
<string name="login_failed">가입 실패!</string> <string name="login_failed">가입 실패!</string>
<string name="upload_failed">서류를 찾을수 없습니다. 다른 서류를 사용해주십시오.</string> <string name="upload_failed">서류를 찾을수 없습니다. 다른 서류를 사용해주십시오.</string>
<string name="authentication_failed">인증 실패!</string> <string name="authentication_failed" fuzzy="true">인증 실패!</string>
<string name="uploading_started">올리적재를 시작했습니다!</string> <string name="uploading_started">올리적재를 시작했습니다!</string>
<string name="upload_completed_notification_title">%1$s 서류를 올리적재하였습니다!</string> <string name="upload_completed_notification_title">%1$s 서류를 올리적재하였습니다!</string>
<string name="upload_completed_notification_text">당신의 올리적재를 보려면 두드리세요</string> <string name="upload_completed_notification_text">당신의 올리적재를 보려면 두드리세요</string>
@ -89,7 +89,7 @@
<string name="preference_license" fuzzy="true">허가권</string> <string name="preference_license" fuzzy="true">허가권</string>
<string name="use_previous">이전의 제목/설명을 사용하기</string> <string name="use_previous">이전의 제목/설명을 사용하기</string>
<string name="allow_gps">자동으로 현재 위치 얻기</string> <string name="allow_gps">자동으로 현재 위치 얻기</string>
<string name="allow_gps_summary">화상에 지리정보꼬리표가 달려 있지 않다면, 현재 위치를 검색하여 분류를 제안해주십시오</string> <string name="allow_gps_summary" fuzzy="true">화상에 지리정보꼬리표가 달려 있지 않다면, 현재 위치를 검색하여 분류를 제안해주십시오</string>
<string name="preference_theme">야간방식</string> <string name="preference_theme">야간방식</string>
<string name="preference_theme_summary">어두운 주제 쓰기</string> <string name="preference_theme_summary">어두운 주제 쓰기</string>
<string name="license_name_cc_by_sa_four">저작자표시-동일조건변경허락 4.0</string> <string name="license_name_cc_by_sa_four">저작자표시-동일조건변경허락 4.0</string>

View file

@ -1,6 +1,7 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<!-- Authors: <!-- Authors:
* CYAN * CYAN
* Dlsrks1021
* Doyoon1995 * Doyoon1995
* Garam * Garam
* Jerrykim306 * Jerrykim306
@ -30,7 +31,7 @@
<string name="login_success">로그인 성공!</string> <string name="login_success">로그인 성공!</string>
<string name="login_failed">로그인 실패!</string> <string name="login_failed">로그인 실패!</string>
<string name="upload_failed">파일을 찾을 수 없습니다. 다른 파일을 사용해 주십시오.</string> <string name="upload_failed">파일을 찾을 수 없습니다. 다른 파일을 사용해 주십시오.</string>
<string name="authentication_failed">인증 실패!</string> <string name="authentication_failed">인증을 실패했습니다. 다시 로그인해 주십시오</string>
<string name="uploading_started">올리기를 시작했습니다!</string> <string name="uploading_started">올리기를 시작했습니다!</string>
<string name="upload_completed_notification_title">%1$s 파일을 올렸습니다!</string> <string name="upload_completed_notification_title">%1$s 파일을 올렸습니다!</string>
<string name="upload_completed_notification_text">올린 것을 보려면 탭하세요</string> <string name="upload_completed_notification_text">올린 것을 보려면 탭하세요</string>
@ -110,7 +111,7 @@
<string name="preference_license">기본 라이선스</string> <string name="preference_license">기본 라이선스</string>
<string name="use_previous">이전의 제목/설명을 사용하기</string> <string name="use_previous">이전의 제목/설명을 사용하기</string>
<string name="allow_gps">자동으로 현재 위치 가져오기</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">야간 모드</string>
<string name="preference_theme_summary">어두운 테마 사용</string> <string name="preference_theme_summary">어두운 테마 사용</string>
<string name="license_name_cc_by_sa_four"> 저작자표시-동일조건변경허락 4.0</string> <string name="license_name_cc_by_sa_four"> 저작자표시-동일조건변경허락 4.0</string>
@ -228,6 +229,7 @@
<string name="nearby_info_menu_wikipedia_article">위키백과 문서</string> <string name="nearby_info_menu_wikipedia_article">위키백과 문서</string>
<string name="error_while_cache">그림 캐시 처리 오류</string> <string name="error_while_cache">그림 캐시 처리 오류</string>
<string name="title_info">이 파일을 설명할 수 있는 제목으로, 파일 이름으로 사용됩니다. 띄어쓰기를 포함한 일반적인 단어를 사용할 수 있습니다. 파일 확장자는 포함하지 마세요</string> <string name="title_info">이 파일을 설명할 수 있는 제목으로, 파일 이름으로 사용됩니다. 띄어쓰기를 포함한 일반적인 단어를 사용할 수 있습니다. 파일 확장자는 포함하지 마세요</string>
<string name="description_info">미디어에 대해 가능한 많이 설명하십시오: 어디서 촬영한 것인가? 무엇을 보여주는가? 무슨 문맥을 가지는가? 물건이나 사람에 대해 설명하십시오. 풍경에서 시간을 알려주는 것처럼 쉽게 추측할 수 없는 정보를 제공합니다. 미디어가 평범하지 않다면 무엇이 이를 평범하지 않게 만들었는지 설명하십시오.</string>
<string name="upload_image_too_dark">사진이 너무 어둡습니다. 정말 업로드하겠습니까? 위키미디어 공용은 사전적인 가치가 있는 사진을 위한 공간입니다.</string> <string name="upload_image_too_dark">사진이 너무 어둡습니다. 정말 업로드하겠습니까? 위키미디어 공용은 사전적인 가치가 있는 사진을 위한 공간입니다.</string>
<string name="upload_image_blurry">사진이 흐릿합니다. 정말 업로드하겠습니까? 위키미디어 공용은 사전적인 가치가 있는 사진을 위한 공간입니다.</string> <string name="upload_image_blurry">사진이 흐릿합니다. 정말 업로드하겠습니까? 위키미디어 공용은 사전적인 가치가 있는 사진을 위한 공간입니다.</string>
<string name="give_permission">권한 부여</string> <string name="give_permission">권한 부여</string>
@ -244,10 +246,13 @@
<string name="nearby_location_has_not_changed">위치가 변경되지 않았습니다.</string> <string name="nearby_location_has_not_changed">위치가 변경되지 않았습니다.</string>
<string name="nearby_location_not_available">위치를 사용할 수 없습니다.</string> <string name="nearby_location_not_available">위치를 사용할 수 없습니다.</string>
<string name="location_permission_rationale_nearby">주변 장소의 목록을 표시하기 위한 권한이 필요합니다.</string> <string name="location_permission_rationale_nearby">주변 장소의 목록을 표시하기 위한 권한이 필요합니다.</string>
<string name="get_directions">방향을 잡다</string>
<string name="read_article">문서를 읽으세요</string>
<string name="notifications_welcome">%1$s님, 위키미디어 공용에 오신 것을 환영합니다! 반갑습니다.</string> <string name="notifications_welcome">%1$s님, 위키미디어 공용에 오신 것을 환영합니다! 반갑습니다.</string>
<string name="notifications_talk_page_message">%1$s님이 당신의 사용자 토론 문서에 글을 남겼습니다</string> <string name="notifications_talk_page_message">%1$s님이 당신의 사용자 토론 문서에 글을 남겼습니다</string>
<string name="notifications_thank_you_edit">편집해 주셔서 감사합니다</string> <string name="notifications_thank_you_edit">편집해 주셔서 감사합니다</string>
<string name="notifications_mention">%1$s님이 %2$s에서 나를 언급했습니다.</string> <string name="notifications_mention">%1$s님이 %2$s에서 나를 언급했습니다.</string>
<string name="toggle_view_button">보기 전환</string>
<string name="nearby_directions">방향</string> <string name="nearby_directions">방향</string>
<string name="nearby_wikidata">위키데이터</string> <string name="nearby_wikidata">위키데이터</string>
<string name="nearby_wikipedia">위키백과</string> <string name="nearby_wikipedia">위키백과</string>
@ -275,6 +280,10 @@
<string name="share_app_title">앱 공유</string> <string name="share_app_title">앱 공유</string>
<string name="share_coordinates_not_present">그림 선택 중에 좌표가 지정되지 않았습니다</string> <string name="share_coordinates_not_present">그림 선택 중에 좌표가 지정되지 않았습니다</string>
<string name="error_fetching_nearby_places">주변 장소를 가져오는데 오류가 있습니다.</string> <string name="error_fetching_nearby_places">주변 장소를 가져오는데 오류가 있습니다.</string>
<string name="appwidget_img">오늘의 사진</string>
<string name="app_widget_heading">오늘의 사진</string>
<string name="successful_wikidata_edit">위키데이터의 %1$s에 그림을 성공적으로 추가했습니다!</string>
<string name="wikidata_edit_failure">일치하는 위키데이터 엔티티의 업데이트를 실패했습니다!</string>
<string name="menu_set_wallpaper">배경화면 설정</string> <string name="menu_set_wallpaper">배경화면 설정</string>
<string name="wallpaper_set_successfully">배경화면을 성공적으로 설정했습니다!</string> <string name="wallpaper_set_successfully">배경화면을 성공적으로 설정했습니다!</string>
</resources> </resources>

View file

@ -4,6 +4,7 @@
* Cûndûllah el-Kurdî * Cûndûllah el-Kurdî
* George Animal * George Animal
* Ghybu * Ghybu
* Kur
--> -->
<resources> <resources>
<string name="preference_category_appearance">Xuyabûn</string> <string name="preference_category_appearance">Xuyabûn</string>
@ -79,4 +80,6 @@
<string name="give_permission">Destûr bide</string> <string name="give_permission">Destûr bide</string>
<string name="about_faq">&lt;u&gt;Pirsên ku pir têne pirsîn&lt;/u&gt;</string> <string name="about_faq">&lt;u&gt;Pirsên ku pir têne pirsîn&lt;/u&gt;</string>
<string name="welcome_skip_button">Rênîşandanê derbas bike</string> <string name="welcome_skip_button">Rênîşandanê derbas bike</string>
<string name="appwidget_img">Wêneya rojê</string>
<string name="app_widget_heading">Wêneya rojê</string>
</resources> </resources>

View file

@ -13,7 +13,7 @@
<string name="logging_in_message">Сураныч, күтө туруңуз…</string> <string name="logging_in_message">Сураныч, күтө туруңуз…</string>
<string name="login_success">Сиз ийгиликтүү кирдиңиз</string> <string name="login_success">Сиз ийгиликтүү кирдиңиз</string>
<string name="login_failed">Системага кирүүдө катачылык бар!</string> <string name="login_failed">Системага кирүүдө катачылык бар!</string>
<string name="authentication_failed">Таану катачылыгы!</string> <string name="authentication_failed" fuzzy="true">Таану катачылыгы!</string>
<string name="uploading_started">Жүктөө башталды!</string> <string name="uploading_started">Жүктөө башталды!</string>
<string name="upload_completed_notification_title">%1$s жүктөлүүдө</string> <string name="upload_completed_notification_title">%1$s жүктөлүүдө</string>
<string name="upload_completed_notification_text">Жүктөлгөн файлды көрүү үчүн басыңыз</string> <string name="upload_completed_notification_text">Жүктөлгөн файлды көрүү үчүн басыңыз</string>

View file

@ -23,7 +23,7 @@
<string name="login_success">Umeldung huet geklappt!</string> <string name="login_success">Umeldung huet geklappt!</string>
<string name="login_failed">D\'Aloggen huet net funktionéiert</string> <string name="login_failed">D\'Aloggen huet net funktionéiert</string>
<string name="upload_failed">Fichier net fonnt. probéiert w.e.g. en anere Fichier.</string> <string name="upload_failed">Fichier net fonnt. probéiert w.e.g. en anere Fichier.</string>
<string name="authentication_failed">Authentifizéierung huet net funktionéiert!</string> <string name="authentication_failed">Authentifizéierung huet net funktionéiert, loggt Iech w.e.g. nach eng Kéier an.</string>
<string name="uploading_started">D\'Eroplueden huet ugefaang!</string> <string name="uploading_started">D\'Eroplueden huet ugefaang!</string>
<string name="upload_completed_notification_title">%1$s eropgelueden!</string> <string name="upload_completed_notification_title">%1$s eropgelueden!</string>
<string name="upload_completed_notification_text">Dréckt fir de Fichier ze gesinn deen Dir eropgelueden hutt</string> <string name="upload_completed_notification_text">Dréckt fir de Fichier ze gesinn deen Dir eropgelueden hutt</string>
@ -101,7 +101,7 @@
<string name="preference_license">Standardlizenz</string> <string name="preference_license">Standardlizenz</string>
<string name="use_previous">Viregen Titel/Beschreiwung benotzen</string> <string name="use_previous">Viregen Titel/Beschreiwung benotzen</string>
<string name="allow_gps">Automatesch déi aktuell Plaz kréien</string> <string name="allow_gps">Automatesch déi aktuell Plaz kréien</string>
<string name="allow_gps_summary">Aktuell Plaz ofruffe fir Propose fir Kategorien ze erméigleche wann d\'Bild keng Geotaggen huet</string> <string name="allow_gps_summary" fuzzy="true">Aktuell Plaz ofruffe fir Propose fir Kategorien ze erméigleche wann d\'Bild keng Geotaggen huet</string>
<string name="preference_theme">Nuetsmodus</string> <string name="preference_theme">Nuetsmodus</string>
<string name="preference_theme_summary">Donkele Layout benotzen</string> <string name="preference_theme_summary">Donkele Layout benotzen</string>
<string name="license_name_cc_by_sa_four">Attribution-ShareAlike 4.0</string> <string name="license_name_cc_by_sa_four">Attribution-ShareAlike 4.0</string>
@ -242,6 +242,9 @@
<string name="no_images_found">Keng Biller fonnt!</string> <string name="no_images_found">Keng Biller fonnt!</string>
<string name="error_loading_images">Feeler beim Eropluede vu Biller.</string> <string name="error_loading_images">Feeler beim Eropluede vu Biller.</string>
<string name="image_uploaded_by">Eropgeluede vum: %1$s</string> <string name="image_uploaded_by">Eropgeluede vum: %1$s</string>
<string name="appwidget_img">Bild vum Dag</string>
<string name="app_widget_heading">Bild vum Dag</string>
<string name="wikidata_edit_failure">Déi entspriechend Wikidata-Entitéit konnt net aktualiséiert ginn!</string>
<string name="menu_set_wallpaper">Hannergrondbild festleeën</string> <string name="menu_set_wallpaper">Hannergrondbild festleeën</string>
<string name="wallpaper_set_successfully">Hannergrondbild festgeluecht</string> <string name="wallpaper_set_successfully">Hannergrondbild festgeluecht</string>
</resources> </resources>

View file

@ -22,7 +22,7 @@
<string name="login_success">Aanmelje gelök!</string> <string name="login_success">Aanmelje gelök!</string>
<string name="login_failed">Aanmelje mislök!</string> <string name="login_failed">Aanmelje mislök!</string>
<string name="upload_failed">Bestandj neet gevónje. Perbeer \'n anger bestandj.</string> <string name="upload_failed">Bestandj neet gevónje. Perbeer \'n anger bestandj.</string>
<string name="authentication_failed">Verificatie mislök!</string> <string name="authentication_failed" fuzzy="true">Verificatie mislök!</string>
<string name="uploading_started">Upload begós!</string> <string name="uploading_started">Upload begós!</string>
<string name="upload_completed_notification_title">%1$s upgeloadj!</string> <string name="upload_completed_notification_title">%1$s upgeloadj!</string>
<string name="upload_completed_notification_text">Wies aan veur dienen upload te betrachte</string> <string name="upload_completed_notification_text">Wies aan veur dienen upload te betrachte</string>
@ -103,7 +103,7 @@
<string name="preference_license">Standerdlicentie</string> <string name="preference_license">Standerdlicentie</string>
<string name="use_previous">Gebroek veurige naam/besjrieving</string> <string name="use_previous">Gebroek veurige naam/besjrieving</string>
<string name="allow_gps">Haol autematis de hujige locatie op</string> <string name="allow_gps">Haol autematis de hujige locatie op</string>
<string name="allow_gps_summary">Haol de hujige locatie op veur categorieveurstèlle te make wen \'t bild gein geotags haet</string> <string name="allow_gps_summary" fuzzy="true">Haol de hujige locatie op veur categorieveurstèlle te make wen \'t bild gein geotags haet</string>
<string name="preference_theme">Nachmodus</string> <string name="preference_theme">Nachmodus</string>
<string name="preference_theme_summary">Gebroeker duuster thema</string> <string name="preference_theme_summary">Gebroeker duuster thema</string>
<string name="license_name_cc_by_sa_four"> Naamsvermeljing-GeliekDeile 4.0</string> <string name="license_name_cc_by_sa_four"> Naamsvermeljing-GeliekDeile 4.0</string>

View file

@ -7,18 +7,25 @@
* Zygimantus * Zygimantus
--> -->
<resources> <resources>
<string name="preference_category_appearance">Išvaizda</string>
<string name="preference_category_general">Bendra</string>
<string name="preference_category_feedback">Atsiliepimai</string>
<string name="preference_category_location">Vietovė</string>
<string name="app_name">Vikiteka</string> <string name="app_name">Vikiteka</string>
<string name="bullet"></string>
<string name="menu_settings">Nustatymai</string> <string name="menu_settings">Nustatymai</string>
<string name="username">Naudotojo vardas</string> <string name="username">Naudotojo vardas</string>
<string name="password">Slaptažodis</string> <string name="password">Slaptažodis</string>
<string name="login_credential">Prisijunkite prie savo Commons Beta paskyros</string>
<string name="login">Prisijungti</string> <string name="login">Prisijungti</string>
<string name="forgot_password">Pamiršote Slaptažodį?</string>
<string name="signup">Užsiregistruoti</string> <string name="signup">Užsiregistruoti</string>
<string name="logging_in_title">Jungiamasi</string> <string name="logging_in_title">Jungiamasi</string>
<string name="logging_in_message">Prašome palaukti…</string> <string name="logging_in_message">Prašome palaukti…</string>
<string name="login_success">Sėkmingai prisijungėte!</string> <string name="login_success">Sėkmingai prisijungėte!</string>
<string name="login_failed">Prisijungti nepavyko!</string> <string name="login_failed">Prisijungti nepavyko!</string>
<string name="upload_failed">Failas nerastas. Prašome pabandyti kitą failą.</string> <string name="upload_failed">Failas nerastas. Prašome pabandyti kitą failą.</string>
<string name="authentication_failed">Autentifikavimas nepavyko!</string> <string name="authentication_failed">Autentifikavimas nepavyko, prašome prisijungti dar kartą</string>
<string name="uploading_started">Įkėlimas prasidėjo!</string> <string name="uploading_started">Įkėlimas prasidėjo!</string>
<string name="upload_completed_notification_title">%1$s įkelta!</string> <string name="upload_completed_notification_title">%1$s įkelta!</string>
<string name="upload_completed_notification_text">Bakstelėkite norėdami peržiūrėti jūsų įkėlimą</string> <string name="upload_completed_notification_text">Bakstelėkite norėdami peržiūrėti jūsų įkėlimą</string>
@ -43,10 +50,13 @@
<string name="menu_share">Dalintis</string> <string name="menu_share">Dalintis</string>
<string name="menu_open_in_browser">Atidaryti naršyklėje</string> <string name="menu_open_in_browser">Atidaryti naršyklėje</string>
<string name="share_title_hint">Pavadinimas</string> <string name="share_title_hint">Pavadinimas</string>
<string name="add_title_toast">Prašome pateikti šiam failui pavadinimą</string>
<string name="share_description_hint">Aprašymas</string> <string name="share_description_hint">Aprašymas</string>
<string name="login_failed_network">Negalima prisijungti - tinklo klaida</string> <string name="login_failed_network">Negalima prisijungti - tinklo klaida</string>
<string name="login_failed_wrong_credentials">Nepavyko prisijungti - prašome patikrinti savo naudotojo vardą ir slaptažodį</string>
<string name="login_failed_throttled">Per daug nesėkmingų bandymų. Pabandykite dar kartą po keleto minučių.</string> <string name="login_failed_throttled">Per daug nesėkmingų bandymų. Pabandykite dar kartą po keleto minučių.</string>
<string name="login_failed_blocked">Atsiprašome, šis vartotojas buvo užblokuotas Commons</string> <string name="login_failed_blocked">Atsiprašome, šis vartotojas buvo užblokuotas Commons</string>
<string name="login_failed_2fa_needed">Turite pateikti savo dviejų žingsnių patvirtinimo kodą.</string>
<string name="login_failed_generic">Prisijungti nepavyko</string> <string name="login_failed_generic">Prisijungti nepavyko</string>
<string name="share_upload_button">Įkelti</string> <string name="share_upload_button">Įkelti</string>
<string name="multiple_share_base_title">Pavadinkite šį rinkinį</string> <string name="multiple_share_base_title">Pavadinkite šį rinkinį</string>
@ -55,6 +65,7 @@
<string name="categories_search_text_hint">Ieškoti kategorijas</string> <string name="categories_search_text_hint">Ieškoti kategorijas</string>
<string name="menu_save_categories">Išsaugoti</string> <string name="menu_save_categories">Išsaugoti</string>
<string name="refresh_button">Atnaujinti</string> <string name="refresh_button">Atnaujinti</string>
<string name="display_list_button">Sąrašas</string>
<string name="gps_disabled">GPS išjungta jūsų įrenginyje. Ar norite įjungti?</string> <string name="gps_disabled">GPS išjungta jūsų įrenginyje. Ar norite įjungti?</string>
<string name="enable_gps">Išjungti GPS</string> <string name="enable_gps">Išjungti GPS</string>
<string name="contributions_subtitle_zero">Nėra įkėlimų kol kas</string> <string name="contributions_subtitle_zero">Nėra įkėlimų kol kas</string>
@ -76,8 +87,10 @@
<string name="categories_activity_title">Kategorijos</string> <string name="categories_activity_title">Kategorijos</string>
<string name="title_activity_settings">Nustatymai</string> <string name="title_activity_settings">Nustatymai</string>
<string name="title_activity_signup">Užsiregistruoti</string> <string name="title_activity_signup">Užsiregistruoti</string>
<string name="title_activity_featured_images">Rinktiniai Paveikslėliai</string>
<string name="menu_about">Apie</string> <string name="menu_about">Apie</string>
<string name="about_privacy_policy" fuzzy="true">&lt;a href=\"https://github.com/commons-app/apps-android-commons/wiki/Privacy-policy\"&gt;Privatumo politika&lt;/a&gt;</string> <string name="about_privacy_policy">&lt;u&gt;Privatumo politika&lt;/u&gt;</string>
<string name="about_credits">&lt;u&gt;Kūrėjai&lt;/u&gt;</string>
<string name="title_activity_about">Apie</string> <string name="title_activity_about">Apie</string>
<string name="menu_feedback">Siųsti Atsiliepimą (El. paštu)</string> <string name="menu_feedback">Siųsti Atsiliepimą (El. paštu)</string>
<string name="no_email_client">Nėra įdiegtos el. pašto tvarkyklės</string> <string name="no_email_client">Nėra įdiegtos el. pašto tvarkyklės</string>
@ -88,10 +101,10 @@
<string name="menu_cancel_upload">Atšaukti</string> <string name="menu_cancel_upload">Atšaukti</string>
<string name="share_license_summary">Šio paveikslėlio licencija bus %1$s</string> <string name="share_license_summary">Šio paveikslėlio licencija bus %1$s</string>
<string name="menu_download">Parsisiųsti</string> <string name="menu_download">Parsisiųsti</string>
<string name="preference_license" fuzzy="true">Licencija</string> <string name="preference_license">Numatytoji Licencija</string>
<string name="use_previous">Naudoti ankstesnį pavadinimą/aprašymą</string> <string name="use_previous">Naudoti ankstesnį pavadinimą/aprašymą</string>
<string name="allow_gps">Automatiškai gauti dabartinę vietą</string> <string name="allow_gps">Automatiškai gauti dabartinę vietą</string>
<string name="allow_gps_summary">Gauti dabartinę vietove, kad būtų pasiūlytos kategorijos, jei paveikslėlis neturi geografinės žymės</string> <string name="allow_gps_summary" fuzzy="true">Gauti dabartinę vietove, kad būtų pasiūlytos kategorijos, jei paveikslėlis neturi geografinės žymės</string>
<string name="preference_theme">Naktinis režimas</string> <string name="preference_theme">Naktinis režimas</string>
<string name="preference_theme_summary">Naudoti tamsią temą</string> <string name="preference_theme_summary">Naudoti tamsią temą</string>
<string name="license_name_cc_by_sa_4_0">CC BY-SA 4.0</string> <string name="license_name_cc_by_sa_4_0">CC BY-SA 4.0</string>
@ -99,8 +112,15 @@
<string name="tutorial_1_text">Vikimedija Commons talpina daugumą paveikslėlių, kurie yra naudojami Vikipedijoje.</string> <string name="tutorial_1_text">Vikimedija Commons talpina daugumą paveikslėlių, kurie yra naudojami Vikipedijoje.</string>
<string name="tutorial_1_subtext">Jūsų paveikslėliai padeda šviesti žmones visame pasaulyje!</string> <string name="tutorial_1_subtext">Jūsų paveikslėliai padeda šviesti žmones visame pasaulyje!</string>
<string name="tutorial_2_text">Prašome kelti nuotraukos, kurios yra padarytos ar sukurtos tik jūsų:</string> <string name="tutorial_2_text">Prašome kelti nuotraukos, kurios yra padarytos ar sukurtos tik jūsų:</string>
<string name="tutorial_2_subtext" fuzzy="true">- Gamtos objektai (gėlės, gyvūnai, kalnai)\n- Naudingi objektai (dviračiai, traukinių stotys)\n- Įžymūs žmonės (merai, Olimpiniai atletai)</string> <string name="tutorial_2_subtext">Gamtos objektai (gėlės, gyvūnai, kalnai)\n• Naudingi objektai (dviračiai, traukinių stotys)\n• Įžymūs žmonės (jūsų meras, Olimpiniai atletai, kurios sutikote)</string>
<string name="tutorial_2_subtext_1">Gamtos objektai (gėlės, gyvūnai, kalnai)</string>
<string name="tutorial_2_subtext_2">Naudingi objektai (dviračiai, traukinių stotys)</string>
<string name="tutorial_2_subtext_3">Įžymūs žmonės (jūsų meras, Olimpiniai atletai, kurios sutikote)</string>
<string name="tutorial_3_text">Prašome NEkelti:</string> <string name="tutorial_3_text">Prašome NEkelti:</string>
<string name="tutorial_3_subtext">- Asmenukės ar jūsų draugų nuotraukos\n- Nuotraukos, kurias atsisiuntėte iš interneto\n- Patentuotų programėlių nuotraukos</string>
<string name="tutorial_3_subtext_1">Asmenukės ar jūsų draugų nuotraukos</string>
<string name="tutorial_3_subtext_2">Nuotraukos, kurias atsisiuntėte iš interneto</string>
<string name="tutorial_3_subtext_3">Patentuotų programėlių nuotraukos</string>
<string name="tutorial_4_text">Pavyzdinis įkėlimas:</string> <string name="tutorial_4_text">Pavyzdinis įkėlimas:</string>
<string name="welcome_wikipedia_text">Įkelkite savo paveikslėlius. Padėkite Vikipedijos straipsniams būti spalvingesniems!</string> <string name="welcome_wikipedia_text">Įkelkite savo paveikslėlius. Padėkite Vikipedijos straipsniams būti spalvingesniems!</string>
<string name="welcome_wikipedia_subtext">Paveikslėliai Vikipedijoje yra iš Vikimedija Commons.</string> <string name="welcome_wikipedia_subtext">Paveikslėliai Vikipedijoje yra iš Vikimedija Commons.</string>

View file

@ -16,7 +16,7 @@
<string name="logging_in_message">Lūdzu, uzgaidiet…</string> <string name="logging_in_message">Lūdzu, uzgaidiet…</string>
<string name="login_success">Ieiešana veiksmīga</string> <string name="login_success">Ieiešana veiksmīga</string>
<string name="login_failed">Pieteikšanās neizdevās.</string> <string name="login_failed">Pieteikšanās neizdevās.</string>
<string name="authentication_failed">Autentifikācija neizdevās!</string> <string name="authentication_failed" fuzzy="true">Autentifikācija neizdevās!</string>
<string name="uploading_started">Augšupielāde sākās!</string> <string name="uploading_started">Augšupielāde sākās!</string>
<string name="upload_completed_notification_title">%1$s augšupielādēti!</string> <string name="upload_completed_notification_title">%1$s augšupielādēti!</string>
<string name="upload_progress_notification_title_start">Uzsāk %1$s augšupielādi</string> <string name="upload_progress_notification_title_start">Uzsāk %1$s augšupielādi</string>

Some files were not shown because too many files have changed in this diff Show more