diff --git a/.circleci/config.yml b/.circleci/config.yml index 35c230f897bf..32f6b9ffcae8 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -23,10 +23,14 @@ commands: name: Setup gradle.properties command: cp gradle.properties-example gradle.properties && cp libs/utils/WordPressUtils/gradle.properties-example libs/utils/WordPressUtils/gradle.properties update-gradle-memory: + parameters: + jvmargs: + type: string + default: "Xmx2048m" steps: - run: name: Update memory setting - command: sed -i "s/org.gradle.jvmargs=.*/org.gradle.jvmargs=-Xmx2048m -XX:+HeapDumpOnOutOfMemoryError -Dkotlin.compiler.execution.strategy=in-process -Dkotlin.incremental=false /" gradle.properties + command: sed -i "s/org.gradle.jvmargs=.*/org.gradle.jvmargs=-<< parameters.jvmargs >> -XX:+HeapDumpOnOutOfMemoryError -Dkotlin.compiler.execution.strategy=in-process -Dkotlin.incremental=false /" gradle.properties npm-install: steps: - restore_cache: @@ -320,7 +324,8 @@ jobs: - checkout-submodules - android/restore-gradle-cache - copy-gradle-properties - - update-gradle-memory + - update-gradle-memory: + jvmargs: "Xmx1024m" - restore-gutenberg-bundle-cache - run: name: Ensure assets folder exists @@ -331,7 +336,12 @@ jobs: name: Build environment: SUPPRESS_GUTENBERG_MOBILE_JS_BUNDLE_BUILD: 1 - command: ./gradlew WordPress:assembleVanillaDebug WordPress:assembleVanillaDebugAndroidTest --stacktrace + command: ./gradlew WordPress:assembleVanillaDebug --stacktrace + - run: + name: Build Tests + environment: + SUPPRESS_GUTENBERG_MOBILE_JS_BUNDLE_BUILD: 1 + command: ./gradlew WordPress:assembleVanillaDebugAndroidTest --stacktrace - run: name: Decrypt credentials command: openssl aes-256-cbc -md sha256 -d -in .circleci/.firebase.secrets.json.enc -out .circleci/.firebase.secrets.json -k "${FIREBASE_SECRETS_ENCRYPTION_KEY}" @@ -368,7 +378,8 @@ jobs: cache_key_prefix: v1-raw-screenshots - android/restore-gradle-cache - copy-gradle-properties - - update-gradle-memory + - update-gradle-memory: + jvmargs: "Xmx1024m" - restore-gutenberg-bundle-cache - run: name: Ensure assets folder exists @@ -385,7 +396,12 @@ jobs: name: Build environment: SUPPRESS_GUTENBERG_MOBILE_JS_BUNDLE_BUILD: 1 - command: ./gradlew WordPress:assembleVanillaDebug WordPress:assembleVanillaDebugAndroidTest --stacktrace + command: ./gradlew WordPress:assembleVanillaDebug --stacktrace + - run: + name: Build Tests + environment: + SUPPRESS_GUTENBERG_MOBILE_JS_BUNDLE_BUILD: 1 + command: ./gradlew WordPress:assembleVanillaDebugAndroidTest --stacktrace - run: name: Decrypt credentials command: openssl aes-256-cbc -md sha256 -d -in .circleci/.firebase.secrets.json.enc -out .circleci/.firebase.secrets.json -k "${FIREBASE_SECRETS_ENCRYPTION_KEY}" diff --git a/RELEASE-NOTES.txt b/RELEASE-NOTES.txt index 61fec15d7bb4..bd1e326cb621 100644 --- a/RELEASE-NOTES.txt +++ b/RELEASE-NOTES.txt @@ -2,6 +2,10 @@ ----- * [***] Block Editor: Faster editor start and overall operation. [https://github.com/wordpress-mobile/gutenberg-mobile/pull/2780] * [*] Block Editor: Enable multiple upload support for Image block. [https://github.com/wordpress-mobile/gutenberg-mobile/pull/2530] +* [*] Posts List: fixed bug that prevented showing the Featured Image of a post for pure self-hosted sites [https://github.com/wordpress-mobile/WordPress-Android/pull/13323] +* [**] Media picker: New media picker is now used in all the places where the user selects any kind of file (featured image, site icon, gravatar, in posts or media library) except stories [https://github.com/wordpress-mobile/WordPress-Android/pull/13368] +* [*] Reader: Fixes an infinite loading indicator on Discover tab in Reader. +* [*] My Site: Hide Activity Log, Themes and Plans for P2 sites. 16.1 ----- diff --git a/WordPress/build.gradle b/WordPress/build.gradle index 50b55228eb91..58bb84059cfb 100644 --- a/WordPress/build.gradle +++ b/WordPress/build.gradle @@ -54,9 +54,9 @@ android { if (project.hasProperty("versionName")) { versionName project.property("versionName") } else { - versionName "alpha-255" + versionName "alpha-257" } - versionCode 950 + versionCode 955 minSdkVersion rootProject.minSdkVersion targetSdkVersion rootProject.targetSdkVersion @@ -76,7 +76,10 @@ android { buildConfigField "boolean", "WP_STORIES_AVAILABLE", "true" buildConfigField "boolean", "ANY_FILE_UPLOAD", "true" buildConfigField "boolean", "CONSOLIDATED_MEDIA_PICKER", "false" + buildConfigField "boolean", "ACTIVITY_LOG_FILTERS", "false" + buildConfigField "boolean", "SCAN_AVAILABLE", "false" buildConfigField "boolean", "ENABLE_FEATURE_CONFIGURATION", "true" + buildConfigField "boolean", "MY_SITE_IMPROVEMENTS", "false" } // Gutenberg's dependency - react-native-video is using @@ -93,9 +96,9 @@ android { dimension "buildType" // Only set the release version if one isn't provided if (!project.hasProperty("versionName")) { - versionName "16.1-rc-2" + versionName "16.1-rc-4" } - versionCode 949 + versionCode 954 buildConfigField "boolean", "ME_ACTIVITY_AVAILABLE", "false" buildConfigField "boolean", "TENOR_AVAILABLE", "false" buildConfigField "long", "REMOTE_CONFIG_FETCH_INTERVAL", "3600" @@ -242,7 +245,6 @@ dependencies { implementation 'com.facebook.shimmer:shimmer:0.5.0' implementation ("com.github.yalantis:ucrop:$uCropVersion") { - exclude group: 'com.squareup.okhttp3' exclude group: 'androidx.core', module: 'core' exclude group: 'androidx.constraintlayout', module: 'constraintlayout' exclude group: 'androidx.appcompat', module: 'appcompat' diff --git a/WordPress/src/androidTest/java/org/wordpress/android/e2e/pages/EditorPage.java b/WordPress/src/androidTest/java/org/wordpress/android/e2e/pages/EditorPage.java index 3a6657b9eae1..7f6adce75e5b 100644 --- a/WordPress/src/androidTest/java/org/wordpress/android/e2e/pages/EditorPage.java +++ b/WordPress/src/androidTest/java/org/wordpress/android/e2e/pages/EditorPage.java @@ -73,7 +73,7 @@ public void enterImage() { waitForElementToBeDisplayed(onView(withText("WordPress media"))); // wait for images to load before clicking idleFor(2000); - onView(withIndex(withId(R.id.media_grid_item_image), 0)).perform(click()); + onView(withIndex(withId(R.id.image_thumbnail), 0)).perform(click()); // Click the confirm button clickOn(confirmButton); @@ -107,7 +107,7 @@ public void addATag(String tag) { public void setFeaturedImage() { clickOn(onView(withId(R.id.post_add_featured_image_button))); clickOn(onView(withId(R.id.icon_wpmedia))); - onView(withIndex(withId(R.id.media_grid_item_image), 0)).perform(click()); + onView(withIndex(withId(R.id.image_thumbnail), 0)).perform(click()); } public boolean publishPost() { diff --git a/WordPress/src/androidTest/java/org/wordpress/android/support/MockingInterceptor.kt b/WordPress/src/androidTest/java/org/wordpress/android/support/MockingInterceptor.kt index d16bbd809a3a..a22ddf0dfbb6 100644 --- a/WordPress/src/androidTest/java/org/wordpress/android/support/MockingInterceptor.kt +++ b/WordPress/src/androidTest/java/org/wordpress/android/support/MockingInterceptor.kt @@ -12,8 +12,8 @@ class MockingInterceptor : Interceptor { val request = chain.request() // Redirect all WordPress.com API requests to local mock server - if (request.url().host() == "public-api.wordpress.com") { - val newUrl = request.url().newBuilder() + if (request.url.host == "public-api.wordpress.com") { + val newUrl = request.url.newBuilder() .scheme("http") .host("localhost") .port(BaseTest.WIREMOCK_PORT) diff --git a/WordPress/src/androidTest/java/org/wordpress/android/ui/screenshots/WPScreenshotTest.java b/WordPress/src/androidTest/java/org/wordpress/android/ui/screenshots/WPScreenshotTest.java index 5833357a20b7..dc7549318cf7 100644 --- a/WordPress/src/androidTest/java/org/wordpress/android/ui/screenshots/WPScreenshotTest.java +++ b/WordPress/src/androidTest/java/org/wordpress/android/ui/screenshots/WPScreenshotTest.java @@ -146,7 +146,7 @@ private void manageMedia() { clickOn(R.id.nav_sites); clickOn(R.id.quick_action_media_button); - waitForElementToBeDisplayedWithoutFailure(R.id.media_grid_item_image); + waitForElementToBeDisplayedWithoutFailure(R.id.image_thumbnail); takeScreenshot("5-share-from-anywhere"); diff --git a/WordPress/src/main/java/org/wordpress/android/ui/accounts/LoginActivity.java b/WordPress/src/main/java/org/wordpress/android/ui/accounts/LoginActivity.java index d5d56126770e..d68025d7ffce 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/accounts/LoginActivity.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/accounts/LoginActivity.java @@ -932,6 +932,10 @@ private void dismissSignupSheet() { return mDispatchingAndroidInjector; } + @Override public void startOver() { + // Not used in WordPress app + } + @Override public void showHelpFindingConnectedEmail() { // Not used in WordPress app diff --git a/WordPress/src/main/java/org/wordpress/android/ui/accounts/UnifiedLoginTracker.kt b/WordPress/src/main/java/org/wordpress/android/ui/accounts/UnifiedLoginTracker.kt index da510218447e..8affb8167a32 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/accounts/UnifiedLoginTracker.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/accounts/UnifiedLoginTracker.kt @@ -107,6 +107,10 @@ class UnifiedLoginTracker currentFlow = Flow.values().find { it.value == value } } + fun setStep(step: Step) { + currentStep = step + } + fun setFlowAndStep(flow: Flow, step: Step) { currentFlow = flow currentStep = step diff --git a/WordPress/src/main/java/org/wordpress/android/ui/accounts/login/LoginAnalyticsTracker.java b/WordPress/src/main/java/org/wordpress/android/ui/accounts/login/LoginAnalyticsTracker.java index 86fba8887e71..145bc39fa54f 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/accounts/login/LoginAnalyticsTracker.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/accounts/login/LoginAnalyticsTracker.java @@ -375,4 +375,24 @@ public void trackSocialSignupConfirmationViewed() { public void trackCreateAccountClick() { mUnifiedLoginTracker.trackClick(Click.CREATE_ACCOUNT); } + + @Override public void emailPasswordFormScreenResumed() { + mUnifiedLoginTracker.setStep(Step.START); + } + + @Override public void siteAddressFormScreenResumed() { + mUnifiedLoginTracker.setStep(Step.START); + } + + @Override public void magicLinkRequestScreenResumed() { + mUnifiedLoginTracker.setStep(Step.START); + } + + @Override public void magicLinkSentScreenResumed() { + mUnifiedLoginTracker.setStep(Step.MAGIC_LINK_REQUESTED); + } + + @Override public void usernamePasswordScreenResumed() { + mUnifiedLoginTracker.setStep(Step.USERNAME_PASSWORD); + } } diff --git a/WordPress/src/main/java/org/wordpress/android/ui/activitylog/list/ActivityLogListFragment.kt b/WordPress/src/main/java/org/wordpress/android/ui/activitylog/list/ActivityLogListFragment.kt index db1e8d4d3c15..8fc265918afe 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/activitylog/list/ActivityLogListFragment.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/activitylog/list/ActivityLogListFragment.kt @@ -18,6 +18,7 @@ import org.wordpress.android.WordPress import org.wordpress.android.fluxc.model.SiteModel import org.wordpress.android.ui.ActivityLauncher import org.wordpress.android.ui.posts.BasicFragmentDialog +import org.wordpress.android.ui.utils.UiHelpers import org.wordpress.android.util.NetworkUtils import org.wordpress.android.util.WPSwipeToRefreshHelper.buildSwipeToRefreshHelper import org.wordpress.android.util.helpers.SwipeToRefreshHelper @@ -29,6 +30,7 @@ import javax.inject.Inject class ActivityLogListFragment : Fragment() { @Inject lateinit var viewModelFactory: ViewModelProvider.Factory + @Inject lateinit var uiHelpers: UiHelpers private lateinit var viewModel: ActivityLogViewModel private lateinit var swipeToRefreshHelper: SwipeToRefreshHelper @@ -94,6 +96,10 @@ class ActivityLogListFragment : Fragment() { refreshProgressBars(listStatus) }) + viewModel.dateRangePickerVisibility.observe(viewLifecycleOwner, Observer { visibility -> + uiHelpers.updateVisibility(date_range_picker, visibility) + }) + viewModel.showItemDetail.observe(viewLifecycleOwner, Observer { if (it is ActivityLogListItem.Event) { ActivityLauncher.viewActivityLogDetailForResult(activity, viewModel.site, it.activityId) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/main/MySiteFragment.kt b/WordPress/src/main/java/org/wordpress/android/ui/main/MySiteFragment.kt index b116866fd762..0677904549a0 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/main/MySiteFragment.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/main/MySiteFragment.kt @@ -151,6 +151,7 @@ import org.wordpress.android.util.QuickStartUtils.Companion.getNextUncompletedQu import org.wordpress.android.util.QuickStartUtils.Companion.isQuickStartInProgress import org.wordpress.android.util.QuickStartUtils.Companion.removeQuickStartFocusPoint import org.wordpress.android.util.QuickStartUtils.Companion.stylizeQuickStartPrompt +import org.wordpress.android.util.ScanFeatureConfig import org.wordpress.android.util.SiteUtils import org.wordpress.android.util.ToastUtils import org.wordpress.android.util.ToastUtils.Duration.SHORT @@ -162,6 +163,7 @@ import org.wordpress.android.util.image.ImageManager import org.wordpress.android.util.image.ImageType.BLAVATAR import org.wordpress.android.util.image.ImageType.USER import org.wordpress.android.util.requestEmailValidation +import org.wordpress.android.util.setVisible import org.wordpress.android.widgets.WPDialogSnackbar import org.wordpress.android.widgets.WPSnackbar import java.io.File @@ -197,6 +199,8 @@ class MySiteFragment : Fragment(), @Inject lateinit var mediaPickerLauncher: MediaPickerLauncher @Inject lateinit var storiesMediaPickerResultHandler: StoriesMediaPickerResultHandler @Inject lateinit var consolidatedMediaPickerFeatureConfig: ConsolidatedMediaPickerFeatureConfig + @Inject lateinit var scanFeatureConfig: ScanFeatureConfig + val selectedSite: SiteModel? get() { return (activity as? WPMainActivity)?.selectedSite @@ -232,11 +236,13 @@ class MySiteFragment : Fragment(), // Site details may have changed (e.g. via Settings and returning to this Fragment) so update the UI refreshSelectedSiteDetails(selectedSite) selectedSite?.let { site -> + updateScanMenuVisibility() + val isNotAdmin = !site.hasCapabilityManageOptions val isSelfHostedWithoutJetpack = !SiteUtils.isAccessedViaWPComRest( site ) && !site.isJetpackConnected - if (isNotAdmin || isSelfHostedWithoutJetpack) { + if (isNotAdmin || isSelfHostedWithoutJetpack || site.isWpForTeamsSite) { row_activity_log.visibility = View.GONE } else { row_activity_log.visibility = View.VISIBLE @@ -251,6 +257,10 @@ class MySiteFragment : Fragment(), showQuickStartNoticeIfNecessary() } + private fun updateScanMenuVisibility() { + row_scan.setVisible(scanFeatureConfig.isEnabled()) + } + private fun showQuickStartNoticeIfNecessary() { if (!isQuickStartInProgress(quickStartStore) || !AppPrefs.isQuickStartNoticeRequired()) { return @@ -774,12 +784,7 @@ class MySiteFragment : Fragment(), isDomainCreditAvailable = false } RequestCodes.PHOTO_PICKER -> if (resultCode == Activity.RESULT_OK && data != null) { - if (consolidatedMediaPickerFeatureConfig.isEnabled() || - !storiesMediaPickerResultHandler.handleMediaPickerResultForStories( - data, - activity, - selectedSite - )) { + if (!storiesMediaPickerResultHandler.handleMediaPickerResultForStories(data, activity, selectedSite)) { if (data.hasExtra(MediaPickerConstants.EXTRA_MEDIA_ID)) { val mediaId = data.getLongExtra(MediaPickerConstants.EXTRA_MEDIA_ID, 0).toInt() showSiteIconProgressBar(true) @@ -1014,7 +1019,7 @@ class MySiteFragment : Fragment(), // Hide the Plan item if the Plans feature is not available for this blog val planShortName = site.planShortName - if (!TextUtils.isEmpty(planShortName) && site.hasCapabilityManageOptions) { + if (!TextUtils.isEmpty(planShortName) && site.hasCapabilityManageOptions && !site.isWpForTeamsSite) { if (site.isWPCom || site.isAutomatedTransfer) { my_site_current_plan_text_view.text = planShortName row_plan.visibility = View.VISIBLE diff --git a/WordPress/src/main/java/org/wordpress/android/ui/main/WPMainActivity.java b/WordPress/src/main/java/org/wordpress/android/ui/main/WPMainActivity.java index d2e193482809..3497981fa0ec 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/main/WPMainActivity.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/main/WPMainActivity.java @@ -126,6 +126,7 @@ import org.wordpress.android.util.analytics.AnalyticsUtils; import org.wordpress.android.util.analytics.service.InstallationReferrerServiceStarter; import org.wordpress.android.util.config.ModalLayoutPickerFeatureConfig; +import org.wordpress.android.util.config.MySiteImprovementsFeatureConfig; import org.wordpress.android.viewmodel.main.WPMainActivityViewModel; import org.wordpress.android.viewmodel.mlp.ModalLayoutPickerViewModel; import org.wordpress.android.widgets.AppRatingDialog; @@ -210,6 +211,7 @@ public class WPMainActivity extends LocaleAwareActivity implements @Inject ModalLayoutPickerFeatureConfig mModalLayoutPickerFeatureConfig; @Inject ReaderTracker mReaderTracker; @Inject MediaPickerLauncher mMediaPickerLauncher; + @Inject MySiteImprovementsFeatureConfig mMySiteImprovementsFeatureConfig; /* * fragments implement this if their contents can be scrolled, called when user @@ -237,7 +239,7 @@ public void onCreate(Bundle savedInstanceState) { mBottomNav = findViewById(R.id.bottom_navigation); - mBottomNav.init(getSupportFragmentManager(), this); + mBottomNav.init(getSupportFragmentManager(), this, mMySiteImprovementsFeatureConfig.isEnabled()); mConnectionBar = findViewById(R.id.connection_bar); mConnectionBar.setOnClickListener(v -> { @@ -1085,6 +1087,7 @@ public void onClick(View v) { case RequestCodes.STORIES_PHOTO_PICKER: case RequestCodes.PHOTO_PICKER: Fragment fragment = mBottomNav.getActiveFragment(); + // TODO move this logic directly to the fragment if (fragment instanceof MySiteFragment) { fragment.onActivityResult(requestCode, resultCode, data); } @@ -1146,6 +1149,8 @@ private MySiteFragment getMySiteFragment() { if (fragment instanceof MySiteFragment) { return (MySiteFragment) fragment; } + + // TODO consider the new my site fragment return null; } diff --git a/WordPress/src/main/java/org/wordpress/android/ui/main/WPMainNavigationView.kt b/WordPress/src/main/java/org/wordpress/android/ui/main/WPMainNavigationView.kt index cb6d2606aaf3..abb9159c7c5a 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/main/WPMainNavigationView.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/main/WPMainNavigationView.kt @@ -24,6 +24,7 @@ import org.wordpress.android.ui.main.WPMainActivity.OnScrollToTopListener import org.wordpress.android.ui.main.WPMainNavigationView.PageType.MY_SITE import org.wordpress.android.ui.main.WPMainNavigationView.PageType.NOTIFS import org.wordpress.android.ui.main.WPMainNavigationView.PageType.READER +import org.wordpress.android.ui.mysite.ImprovedMySiteFragment import org.wordpress.android.ui.notifications.NotificationsListFragment import org.wordpress.android.ui.prefs.AppPrefs import org.wordpress.android.ui.reader.ReaderFragment @@ -67,11 +68,11 @@ class WPMainNavigationView @JvmOverloads constructor( fun onNewPostButtonClicked() } - fun init(fm: FragmentManager, listener: OnPageListener) { + fun init(fm: FragmentManager, listener: OnPageListener, showNewMySiteFragment: Boolean) { fragmentManager = fm pageListener = listener - navAdapter = NavAdapter() + navAdapter = NavAdapter(showNewMySiteFragment) assignNavigationListeners(true) disableShiftMode() @@ -278,10 +279,14 @@ class WPMainNavigationView @JvmOverloads constructor( return position in 0 until numPages() } - private inner class NavAdapter { + private inner class NavAdapter(val showNewMySiteFragment: Boolean) { private fun createFragment(pageType: PageType): Fragment { val fragment = when (pageType) { - MY_SITE -> MySiteFragment.newInstance() + MY_SITE -> if (showNewMySiteFragment) { + ImprovedMySiteFragment.newInstance() + } else { + MySiteFragment.newInstance() + } READER -> ReaderFragment() NOTIFS -> NotificationsListFragment.newInstance() } diff --git a/WordPress/src/main/java/org/wordpress/android/ui/mediapicker/MediaPickerActivity.kt b/WordPress/src/main/java/org/wordpress/android/ui/mediapicker/MediaPickerActivity.kt index a7de91beec52..05dc7c34b7bf 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/mediapicker/MediaPickerActivity.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/mediapicker/MediaPickerActivity.kt @@ -24,7 +24,6 @@ import org.wordpress.android.ui.gif.GifPickerActivity import org.wordpress.android.ui.media.MediaBrowserActivity import org.wordpress.android.ui.mediapicker.MediaItem.Identifier import org.wordpress.android.ui.mediapicker.MediaPickerActivity.MediaPickerMediaSource.ANDROID_CAMERA -import org.wordpress.android.ui.mediapicker.MediaPickerActivity.MediaPickerMediaSource.ANDROID_PICKER import org.wordpress.android.ui.mediapicker.MediaPickerActivity.MediaPickerMediaSource.APP_PICKER import org.wordpress.android.ui.mediapicker.MediaPickerFragment.Companion.newInstance import org.wordpress.android.ui.mediapicker.MediaPickerFragment.MediaPickerAction @@ -185,18 +184,9 @@ class MediaPickerActivity : LocaleAwareActivity(), MediaPickerListener { val intent: Intent? = when (requestCode) { MEDIA_LIBRARY -> { data?.let { - val intent = Intent() val uris = WPMediaUtils.retrieveMediaUris(data) - if (mediaPickerSetup.queueResults) { - intent.putQueuedUris(uris) - } else { - intent.putUris(uris) - } - intent.putExtra( - EXTRA_MEDIA_SOURCE, - ANDROID_PICKER.name - ) - intent + pickerFragment?.urisSelectedFromSystemPicker(uris) + return } } TAKE_PHOTO -> { diff --git a/WordPress/src/main/java/org/wordpress/android/ui/mediapicker/MediaPickerFragment.kt b/WordPress/src/main/java/org/wordpress/android/ui/mediapicker/MediaPickerFragment.kt index 4ef9128396af..1a392f1d910a 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/mediapicker/MediaPickerFragment.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/mediapicker/MediaPickerFragment.kt @@ -4,6 +4,7 @@ import android.Manifest.permission import android.app.Activity import android.content.Intent.ACTION_GET_CONTENT import android.content.Intent.ACTION_OPEN_DOCUMENT +import android.net.Uri import android.os.Bundle import android.os.Parcelable import android.text.Html @@ -68,6 +69,7 @@ import org.wordpress.android.util.SnackbarItem import org.wordpress.android.util.SnackbarItem.Action import org.wordpress.android.util.SnackbarItem.Info import org.wordpress.android.util.SnackbarSequencer +import org.wordpress.android.util.UriWrapper import org.wordpress.android.util.WPLinkMovementMethod import org.wordpress.android.util.WPMediaUtils import org.wordpress.android.util.WPPermissionUtils @@ -384,6 +386,10 @@ class MediaPickerFragment : Fragment() { return true } + fun urisSelectedFromSystemPicker(uris: List) { + viewModel.urisSelectedFromSystemPicker(uris.map { UriWrapper(it) }) + } + private fun initializeSearchView(actionMenuItem: MenuItem) { var isExpanding = false actionMenuItem.setOnActionExpandListener(object : OnActionExpandListener { diff --git a/WordPress/src/main/java/org/wordpress/android/ui/mediapicker/MediaPickerViewModel.kt b/WordPress/src/main/java/org/wordpress/android/ui/mediapicker/MediaPickerViewModel.kt index d6d31c215061..c95828d77f51 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/mediapicker/MediaPickerViewModel.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/mediapicker/MediaPickerViewModel.kt @@ -8,8 +8,8 @@ import kotlinx.coroutines.Job import kotlinx.coroutines.channels.Channel import kotlinx.coroutines.delay import kotlinx.coroutines.flow.collect +import kotlinx.coroutines.flow.flowOn import kotlinx.coroutines.launch -import kotlinx.coroutines.withContext import org.wordpress.android.R import org.wordpress.android.fluxc.model.MediaModel import org.wordpress.android.fluxc.model.SiteModel @@ -74,6 +74,7 @@ import org.wordpress.android.ui.utils.UiString.UiStringResWithParams import org.wordpress.android.ui.utils.UiString.UiStringText import org.wordpress.android.util.LocaleManagerWrapper import org.wordpress.android.util.MediaUtilsWrapper +import org.wordpress.android.util.UriWrapper import org.wordpress.android.util.WPPermissionUtils import org.wordpress.android.util.distinct import org.wordpress.android.util.merge @@ -348,15 +349,15 @@ class MediaPickerViewModel @Inject constructor( mediaPickerTracker.trackMediaPickerOpened(mediaPickerSetup) this.mediaLoader = mediaLoaderFactory.build(mediaPickerSetup, site) this.mediaInsertHandler = mediaInsertHandlerFactory.build(mediaPickerSetup, site) - launch(bgDispatcher) { - mediaLoader.loadMedia(loadActions).collect { domainModel -> - withContext(mainDispatcher) { - _domainModel.value = domainModel - } + launch { + mediaLoader.loadMedia(loadActions).flowOn(bgDispatcher).collect { domainModel -> + _domainModel.value = domainModel } } - launch(bgDispatcher) { - loadActions.send(LoadAction.Start()) + if (permissionsHandler.hasStoragePermission()) { + launch(bgDispatcher) { + loadActions.send(LoadAction.Start()) + } } } if (mediaPickerSetup.defaultSearchView) { @@ -416,10 +417,14 @@ class MediaPickerViewModel @Inject constructor( fun performInsertAction() { val ids = selectedIdentifiers() + insertIdentifiers(ids) + } + + private fun insertIdentifiers(ids: List) { var job: Job? = null job = launch { var progressDialogJob: Job? = null - mediaInsertHandler.insertMedia(ids).collect { + mediaInsertHandler.insertMedia(ids).flowOn(bgDispatcher).collect { when (it) { is InsertModel.Progress -> { progressDialogJob = launch { @@ -635,6 +640,13 @@ class MediaPickerViewModel @Inject constructor( searchJob?.cancel() } + fun urisSelectedFromSystemPicker(uris: List) { + launch { + delay(100) + insertIdentifiers(uris.map { LocalUri(it) }) + } + } + data class MediaPickerUiState( val photoListUiModel: PhotoListUiModel, val softAskViewUiModel: SoftAskViewUiModel, diff --git a/WordPress/src/main/java/org/wordpress/android/ui/mediapicker/insert/DeviceListInsertUseCase.kt b/WordPress/src/main/java/org/wordpress/android/ui/mediapicker/insert/DeviceListInsertUseCase.kt index db36f5cf1e7d..0c71c85ca133 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/mediapicker/insert/DeviceListInsertUseCase.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/mediapicker/insert/DeviceListInsertUseCase.kt @@ -14,25 +14,20 @@ class DeviceListInsertUseCase( ) : MediaInsertUseCase { override suspend fun insert(identifiers: List) = flow { val localUris = identifiers.mapNotNull { it as? LocalUri } - val result = if (queueResults) { - emit(InsertModel.Progress(actionTitle)) - var failed = false - val fetchedUris = localUris.mapNotNull { localUri -> - val fetchedUri = wpMediaUtilsWrapper.fetchMedia(localUri.value.uri) - if (fetchedUri == null) { - failed = true - } - fetchedUri - } - if (failed) { - InsertModel.Error("Failed to fetch local media") - } else { - InsertModel.Success(fetchedUris.map { LocalUri(UriWrapper(it), queueResults) }) + emit(InsertModel.Progress(actionTitle)) + var failed = false + val fetchedUris = localUris.mapNotNull { localUri -> + val fetchedUri = wpMediaUtilsWrapper.fetchMedia(localUri.value.uri) + if (fetchedUri == null) { + failed = true } + fetchedUri + } + if (failed) { + emit(InsertModel.Error("Failed to fetch local media")) } else { - InsertModel.Success(localUris) + emit(InsertModel.Success(fetchedUris.map { LocalUri(UriWrapper(it), queueResults) })) } - emit(result) } class DeviceListInsertUseCaseFactory diff --git a/WordPress/src/main/java/org/wordpress/android/ui/mlp/LayoutViewHolder.kt b/WordPress/src/main/java/org/wordpress/android/ui/mlp/LayoutViewHolder.kt index 4d6d7a338458..53d17155ec80 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/mlp/LayoutViewHolder.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/mlp/LayoutViewHolder.kt @@ -2,11 +2,11 @@ package org.wordpress.android.ui.mlp import android.graphics.drawable.Drawable import android.view.LayoutInflater -import android.view.View import android.view.ViewGroup import android.widget.ImageView import android.widget.ImageView.ScaleType.FIT_CENTER import androidx.recyclerview.widget.RecyclerView +import com.google.android.material.card.MaterialCardView import kotlinx.android.synthetic.main.modal_layout_picker_layouts_card.view.* import org.wordpress.android.R import org.wordpress.android.util.image.ImageManager @@ -25,7 +25,7 @@ class LayoutViewHolder(internal val parent: ViewGroup) : false ) ) { - private val container: View = itemView.layout_container + private val container: MaterialCardView = itemView.layout_container private val preview: ImageView = itemView.preview private val selected: ImageView = itemView.selected_overlay @@ -45,6 +45,10 @@ class LayoutViewHolder(internal val parent: ViewGroup) : selected.setVisible(uiState.selectedOverlayVisible) preview.contentDescription = parent.context.getString(uiState.contentDescriptionResId, uiState.title) + preview.context?.let { ctx -> + container.strokeWidth = if (uiState.selectedOverlayVisible) + ctx.resources.getDimensionPixelSize(R.dimen.picker_header_selection_overlay_width) else 0 + } container.setOnClickListener { uiState.onItemTapped.invoke() } diff --git a/WordPress/src/main/java/org/wordpress/android/ui/mysite/ImprovedMySiteFragment.kt b/WordPress/src/main/java/org/wordpress/android/ui/mysite/ImprovedMySiteFragment.kt new file mode 100644 index 000000000000..6a009ee6140a --- /dev/null +++ b/WordPress/src/main/java/org/wordpress/android/ui/mysite/ImprovedMySiteFragment.kt @@ -0,0 +1,11 @@ +package org.wordpress.android.ui.mysite + +import androidx.fragment.app.Fragment + +class ImprovedMySiteFragment : Fragment() { + companion object { + fun newInstance(): ImprovedMySiteFragment { + return ImprovedMySiteFragment() + } + } +} diff --git a/WordPress/src/main/java/org/wordpress/android/ui/photopicker/MediaPickerLauncher.kt b/WordPress/src/main/java/org/wordpress/android/ui/photopicker/MediaPickerLauncher.kt index 23f0f91f0d2f..28c0b39a3b6b 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/photopicker/MediaPickerLauncher.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/photopicker/MediaPickerLauncher.kt @@ -13,6 +13,7 @@ import org.wordpress.android.ui.media.MediaBrowserType import org.wordpress.android.ui.media.MediaBrowserType.FEATURED_IMAGE_PICKER import org.wordpress.android.ui.media.MediaBrowserType.GRAVATAR_IMAGE_PICKER import org.wordpress.android.ui.media.MediaBrowserType.SITE_ICON_PICKER +import org.wordpress.android.ui.media.MediaBrowserType.WP_STORIES_MEDIA_PICKER import org.wordpress.android.ui.mediapicker.MediaPickerActivity import org.wordpress.android.ui.mediapicker.MediaPickerSetup import org.wordpress.android.ui.mediapicker.MediaPickerSetup.CameraSetup.ENABLED @@ -129,20 +130,9 @@ class MediaPickerLauncher @Inject constructor( fun showStoriesPhotoPickerForResult( activity: Activity, - site: SiteModel?, - requestCode: Int = RequestCodes.STORIES_PHOTO_PICKER + site: SiteModel? ) { - val browserType = MediaBrowserType.WP_STORIES_MEDIA_PICKER - if (consolidatedMediaPickerFeatureConfig.isEnabled()) { - val intent = MediaPickerActivity.buildIntent( - activity, - buildLocalMediaPickerSetup(browserType), - site - ) - activity.startActivityForResult(intent, requestCode) - } else { - ActivityLauncher.showPhotoPickerForResult(activity, browserType, site, null) - } + ActivityLauncher.showPhotoPickerForResult(activity, WP_STORIES_MEDIA_PICKER, site, null) } fun showGravatarPicker(fragment: Fragment) { diff --git a/WordPress/src/main/java/org/wordpress/android/ui/photopicker/PhotoPickerActivity.java b/WordPress/src/main/java/org/wordpress/android/ui/photopicker/PhotoPickerActivity.java index 29b9d0d12d0a..70b3c4eb9646 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/photopicker/PhotoPickerActivity.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/photopicker/PhotoPickerActivity.java @@ -187,7 +187,8 @@ protected void onActivityResult(int requestCode, int resultCode, Intent data) { case RequestCodes.PICTURE_LIBRARY: case RequestCodes.VIDEO_LIBRARY: if (data != null) { - doMediaUrisSelected(WPMediaUtils.retrieveMediaUris(data), PhotoPickerMediaSource.ANDROID_PICKER); + List mediaUris = WPMediaUtils.retrieveMediaUris(data); + getPickerFragment().urisSelectedFromSystemPicker(mediaUris); } break; case RequestCodes.TAKE_PHOTO: diff --git a/WordPress/src/main/java/org/wordpress/android/ui/photopicker/PhotoPickerFragment.kt b/WordPress/src/main/java/org/wordpress/android/ui/photopicker/PhotoPickerFragment.kt index acea8f44d981..00a764baa0f4 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/photopicker/PhotoPickerFragment.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/photopicker/PhotoPickerFragment.kt @@ -9,12 +9,15 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.PopupMenu +import androidx.appcompat.app.AlertDialog +import androidx.appcompat.app.AlertDialog.Builder import androidx.appcompat.app.AppCompatActivity import androidx.fragment.app.Fragment import androidx.lifecycle.Observer import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.ViewModelProviders import androidx.recyclerview.widget.GridLayoutManager +import com.google.android.material.dialog.MaterialAlertDialogBuilder import kotlinx.android.synthetic.main.photo_picker_fragment.* import kotlinx.android.synthetic.main.photo_picker_fragment.view.* import org.wordpress.android.R @@ -24,6 +27,8 @@ import org.wordpress.android.ui.ActivityLauncher import org.wordpress.android.ui.media.MediaBrowserActivity import org.wordpress.android.ui.media.MediaBrowserType import org.wordpress.android.ui.media.MediaPreviewActivity +import org.wordpress.android.ui.mediapicker.MediaPickerViewModel.ProgressDialogUiModel +import org.wordpress.android.ui.mediapicker.MediaPickerViewModel.ProgressDialogUiModel.Visible import org.wordpress.android.ui.photopicker.PhotoPickerFragment.PhotoPickerIcon.WP_MEDIA import org.wordpress.android.ui.photopicker.PhotoPickerViewModel.ActionModeUiModel import org.wordpress.android.ui.photopicker.PhotoPickerViewModel.BottomBarUiModel @@ -41,6 +46,7 @@ import org.wordpress.android.util.AniUtils.Duration.MEDIUM import org.wordpress.android.util.AppLog import org.wordpress.android.util.AppLog.T.POSTS import org.wordpress.android.util.DisplayUtils +import org.wordpress.android.util.UriWrapper import org.wordpress.android.util.ViewWrapper import org.wordpress.android.util.WPMediaUtils import org.wordpress.android.util.WPPermissionUtils @@ -197,6 +203,8 @@ class PhotoPickerFragment : Fragment() { } }) + setupProgressDialog() + viewModel.start(selectedIds, browserType, lastTappedIcon, site) } @@ -304,6 +312,35 @@ class PhotoPickerFragment : Fragment() { } } + private fun setupProgressDialog() { + var progressDialog: AlertDialog? = null + viewModel.uiState.observe(viewLifecycleOwner, Observer { + it?.progressDialogUiModel?.apply { + when (this) { + is Visible -> { + if (progressDialog == null || progressDialog?.isShowing == false) { + val builder: Builder = MaterialAlertDialogBuilder(requireContext()) + builder.setTitle(this.title) + builder.setView(R.layout.media_picker_progress_dialog) + builder.setNegativeButton( + R.string.cancel + ) { _, _ -> this.cancelAction() } + builder.setCancelable(false) + progressDialog = builder.show() + } + } + ProgressDialogUiModel.Hidden -> { + progressDialog?.let { dialog -> + if (dialog.isShowing) { + dialog.dismiss() + } + } + } + } + } + }) + } + private fun canShowMediaSourceBottomBar( hideMediaBottomBarInPortrait: Boolean ): Boolean { @@ -433,6 +470,10 @@ class PhotoPickerFragment : Fragment() { viewModel.clickIcon(wpMedia) } + fun urisSelectedFromSystemPicker(uris: List) { + viewModel.urisSelectedFromSystemPicker(uris.map { UriWrapper(it) }) + } + companion object { private const val KEY_LAST_TAPPED_ICON = "last_tapped_icon" private const val KEY_SELECTED_POSITIONS = "selected_positions" diff --git a/WordPress/src/main/java/org/wordpress/android/ui/photopicker/PhotoPickerViewModel.kt b/WordPress/src/main/java/org/wordpress/android/ui/photopicker/PhotoPickerViewModel.kt index 467690fe5906..548ca7d91d30 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/photopicker/PhotoPickerViewModel.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/photopicker/PhotoPickerViewModel.kt @@ -4,6 +4,8 @@ import android.Manifest.permission import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import kotlinx.coroutines.CoroutineDispatcher +import kotlinx.coroutines.cancel +import kotlinx.coroutines.isActive import kotlinx.coroutines.launch import org.wordpress.android.R import org.wordpress.android.analytics.AnalyticsTracker @@ -21,6 +23,7 @@ import org.wordpress.android.ui.media.MediaBrowserType import org.wordpress.android.ui.media.MediaBrowserType.AZTEC_EDITOR_PICKER import org.wordpress.android.ui.media.MediaBrowserType.GRAVATAR_IMAGE_PICKER import org.wordpress.android.ui.media.MediaBrowserType.SITE_ICON_PICKER +import org.wordpress.android.ui.mediapicker.MediaPickerViewModel.ProgressDialogUiModel import org.wordpress.android.ui.photopicker.PhotoPickerFragment.PhotoPickerIcon import org.wordpress.android.ui.photopicker.PhotoPickerFragment.PhotoPickerIcon.ANDROID_CAPTURE_PHOTO import org.wordpress.android.ui.photopicker.PhotoPickerFragment.PhotoPickerIcon.ANDROID_CAPTURE_VIDEO @@ -37,6 +40,7 @@ import org.wordpress.android.ui.photopicker.PhotoPickerViewModel.BottomBarUiMode import org.wordpress.android.ui.photopicker.PhotoPickerViewModel.BottomBarUiModel.BottomBar.MEDIA_SOURCE import org.wordpress.android.ui.photopicker.PhotoPickerViewModel.BottomBarUiModel.BottomBar.NONE import org.wordpress.android.ui.photopicker.PhotoPickerViewModel.PopupMenuUiModel.PopupMenuItem +import org.wordpress.android.ui.posts.editor.media.CopyMediaToAppStorageUseCase import org.wordpress.android.ui.utils.UiString import org.wordpress.android.ui.utils.UiString.UiStringRes import org.wordpress.android.ui.utils.UiString.UiStringText @@ -58,8 +62,10 @@ import java.util.HashMap import javax.inject.Inject import javax.inject.Named -@Deprecated("This class is being refactored, if you implement any change, please also update " + - "{@link org.wordpress.android.ui.mediapicker.MediaPickerViewModel}") +@Deprecated( + "This class is being refactored, if you implement any change, please also update " + + "{@link org.wordpress.android.ui.mediapicker.MediaPickerViewModel}" +) class PhotoPickerViewModel @Inject constructor( @Named(UI_THREAD) private val mainDispatcher: CoroutineDispatcher, @Named(BG_THREAD) private val bgDispatcher: CoroutineDispatcher, @@ -68,7 +74,8 @@ class PhotoPickerViewModel @Inject constructor( private val analyticsTrackerWrapper: AnalyticsTrackerWrapper, private val permissionsHandler: PermissionsHandler, private val tenorFeatureConfig: TenorFeatureConfig, - private val resourceProvider: ResourceProvider + private val resourceProvider: ResourceProvider, + private val copyMediaToAppStorageUseCase: CopyMediaToAppStorageUseCase ) : ScopedViewModel(mainDispatcher) { private val _navigateToPreview = MutableLiveData>() private val _onInsert = MutableLiveData>>() @@ -78,6 +85,7 @@ class PhotoPickerViewModel @Inject constructor( private val _onIconClicked = MutableLiveData>() private val _onPermissionsRequested = MutableLiveData>() private val _softAskRequest = MutableLiveData() + private val _showProgressDialog = MutableLiveData() val onNavigateToPreview: LiveData> = _navigateToPreview val onInsert: LiveData>> = _onInsert @@ -91,8 +99,9 @@ class PhotoPickerViewModel @Inject constructor( val uiState: LiveData = merge( _photoPickerItems.distinct(), _selectedIds.distinct(), - _softAskRequest - ) { photoPickerItems, selectedIds, softAskRequest -> + _softAskRequest, + _showProgressDialog + ) { photoPickerItems, selectedIds, softAskRequest, progressDialogModel -> PhotoPickerUiState( buildPhotoPickerUiModel(photoPickerItems, selectedIds), buildBottomBar( @@ -101,10 +110,11 @@ class PhotoPickerViewModel @Inject constructor( softAskRequest?.show == true ), buildSoftAskView(softAskRequest), - FabUiModel(browserType.isWPStoriesPicker) { + FabUiModel(browserType.isWPStoriesPicker && selectedIds.isNullOrEmpty()) { clickIcon(WP_STORIES_CAPTURE) }, - buildActionModeUiModel(selectedIds) + buildActionModeUiModel(selectedIds), + progressDialogModel ?: ProgressDialogUiModel.Hidden ) } @@ -440,10 +450,12 @@ class PhotoPickerViewModel @Inject constructor( if (softAskRequest != null && softAskRequest.show) { val appName = "${resourceProvider.getString(R.string.app_name)}" val label = if (softAskRequest.isAlwaysDenied) { - val permissionName = ("${WPPermissionUtils.getPermissionName( - resourceProvider, - permission.WRITE_EXTERNAL_STORAGE - )}") + val permissionName = ("${ + WPPermissionUtils.getPermissionName( + resourceProvider, + permission.WRITE_EXTERNAL_STORAGE + ) + }") String.format( resourceProvider.getString(R.string.photo_picker_soft_ask_permissions_denied), appName, permissionName @@ -465,12 +477,27 @@ class PhotoPickerViewModel @Inject constructor( } } + fun urisSelectedFromSystemPicker(uris: List) { + launch { + _showProgressDialog.value = ProgressDialogUiModel.Visible(R.string.uploading_title) { + _showProgressDialog.postValue(ProgressDialogUiModel.Hidden) + cancel() + } + val localUris = copyMediaToAppStorageUseCase.copyFilesToAppStorageIfNecessary(uris.map { it.uri }) + _showProgressDialog.postValue(ProgressDialogUiModel.Hidden) + if (isActive) { + _onInsert.value = Event(localUris.permanentlyAccessibleUris.map { UriWrapper(it) }) + } + } + } + data class PhotoPickerUiState( val photoListUiModel: PhotoListUiModel, val bottomBarUiModel: BottomBarUiModel, val softAskViewUiModel: SoftAskViewUiModel, val fabUiModel: FabUiModel, - val actionModeUiModel: ActionModeUiModel + val actionModeUiModel: ActionModeUiModel, + val progressDialogUiModel: ProgressDialogUiModel ) sealed class PhotoListUiModel { diff --git a/WordPress/src/main/java/org/wordpress/android/ui/posts/EditPostActivity.java b/WordPress/src/main/java/org/wordpress/android/ui/posts/EditPostActivity.java index d26ec7285468..d6d0029bcaed 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/posts/EditPostActivity.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/posts/EditPostActivity.java @@ -830,7 +830,9 @@ private void startObserving() { return null; })); mEditPostRepository.getPostChanged().observe(this, postEvent -> postEvent.applyIfNotHandled(post -> { - mViewModel.savePostToDb(mEditPostRepository, mSite); + if (!mIsPreview) { + mViewModel.savePostToDb(mEditPostRepository, mSite); + } return null; })); } @@ -3278,6 +3280,7 @@ private boolean isRemoteAutoSaveError() { @Nullable private PostModel handleRemoteAutoSave(boolean isError, PostModel post) { + mViewModel.hideSavingDialog(); // We are in the process of remote previewing a post from the editor if (!isError && isUploadingPostForPreview()) { mViewModel.hideSavingDialog(); diff --git a/WordPress/src/main/java/org/wordpress/android/ui/posts/FeaturedImageHelper.kt b/WordPress/src/main/java/org/wordpress/android/ui/posts/FeaturedImageHelper.kt index a28b43ba73a3..0b6fd2e1613d 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/posts/FeaturedImageHelper.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/posts/FeaturedImageHelper.kt @@ -169,8 +169,7 @@ class FeaturedImageHelper @Inject constructor( mediaUri, maxDimen, maxDimen, - !siteUtilsWrapper.isPhotonCapable(site), - site.isPrivateWPComAtomic + siteUtilsWrapper.getAccessibilityInfoFromSite(site) ) return FeaturedImageData(FeaturedImageState.REMOTE_IMAGE_LOADING, photonUrl) } diff --git a/WordPress/src/main/java/org/wordpress/android/ui/posts/PostsListActivity.kt b/WordPress/src/main/java/org/wordpress/android/ui/posts/PostsListActivity.kt index 8a6b1abaa36c..ab1b535e36d1 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/posts/PostsListActivity.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/posts/PostsListActivity.kt @@ -60,7 +60,6 @@ import org.wordpress.android.ui.utils.UiString import org.wordpress.android.util.AppLog import org.wordpress.android.util.SnackbarItem import org.wordpress.android.util.SnackbarSequencer -import org.wordpress.android.util.config.ConsolidatedMediaPickerFeatureConfig import org.wordpress.android.util.redirectContextClickToLongPressListener import org.wordpress.android.util.setLiftOnScrollTargetViewIdAndRequestLayout import org.wordpress.android.viewmodel.posts.PostListCreateMenuViewModel @@ -91,7 +90,6 @@ class PostsListActivity : LocaleAwareActivity(), @Inject internal lateinit var editPostRepository: EditPostRepository @Inject internal lateinit var mediaPickerLauncher: MediaPickerLauncher @Inject internal lateinit var storiesMediaPickerResultHandler: StoriesMediaPickerResultHandler - @Inject internal lateinit var consolidatedMediaPickerFeatureConfig: ConsolidatedMediaPickerFeatureConfig private lateinit var site: SiteModel @@ -447,13 +445,7 @@ class PostsListActivity : LocaleAwareActivity(), viewModel.handleEditPostResult(data) } else if (requestCode == RequestCodes.REMOTE_PREVIEW_POST) { viewModel.handleRemotePreviewClosing() - } else if (!consolidatedMediaPickerFeatureConfig.isEnabled() && - requestCode == RequestCodes.PHOTO_PICKER && - resultCode == Activity.RESULT_OK && - data != null) { - storiesMediaPickerResultHandler.handleMediaPickerResultForStories(data, this, site) - } else if (consolidatedMediaPickerFeatureConfig.isEnabled() && - requestCode == RequestCodes.STORIES_PHOTO_PICKER && + } else if (requestCode == RequestCodes.PHOTO_PICKER && resultCode == Activity.RESULT_OK && data != null) { storiesMediaPickerResultHandler.handleMediaPickerResultForStories(data, this, site) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/posts/editor/media/CopyMediaToAppStorageUseCase.kt b/WordPress/src/main/java/org/wordpress/android/ui/posts/editor/media/CopyMediaToAppStorageUseCase.kt index 2fe6c8246314..68e36d7c7d75 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/posts/editor/media/CopyMediaToAppStorageUseCase.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/posts/editor/media/CopyMediaToAppStorageUseCase.kt @@ -4,7 +4,7 @@ import android.net.Uri import dagger.Reusable import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.withContext -import org.wordpress.android.modules.UI_THREAD +import org.wordpress.android.modules.BG_THREAD import org.wordpress.android.util.AppLog import org.wordpress.android.util.AppLog.T.UTILS import org.wordpress.android.util.MediaUtilsWrapper @@ -14,18 +14,23 @@ import javax.inject.Named @Reusable class CopyMediaToAppStorageUseCase @Inject constructor( private val mediaUtilsWrapper: MediaUtilsWrapper, - @Named(UI_THREAD) private val mainDispatcher: CoroutineDispatcher + @Named(BG_THREAD) private val bgDispatcher: CoroutineDispatcher ) { /* * Some media providers (eg. Google Photos) give us a limited access to media files just so we can copy them and then * they revoke the access. Copying these files must be performed on the UI thread, otherwise the access might be * revoked before the action completes. See https://github.com/wordpress-mobile/WordPress-Android/issues/5818 + * they revoke the access. Copying these files must be performed within the context (Activity) that requested the + * files, otherwise the access might be revoked before the action completes. + * See https://github.com/wordpress-mobile/WordPress-Android/issues/5818 */ suspend fun copyFilesToAppStorageIfNecessary(uriList: List): CopyMediaResult { - return withContext(mainDispatcher) { + return withContext(bgDispatcher) { uriList .map { mediaUri -> - if (!mediaUtilsWrapper.isInMediaStore(mediaUri)) { + if (!mediaUtilsWrapper.isInMediaStore(mediaUri) && + // don't copy existing local files + !mediaUtilsWrapper.isFile(mediaUri)) { copyToAppStorage(mediaUri) } else { mediaUri diff --git a/WordPress/src/main/java/org/wordpress/android/ui/reader/discover/ReaderDiscoverFragment.kt b/WordPress/src/main/java/org/wordpress/android/ui/reader/discover/ReaderDiscoverFragment.kt index 0c5c5e9c2645..1f1300732907 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/reader/discover/ReaderDiscoverFragment.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/reader/discover/ReaderDiscoverFragment.kt @@ -12,10 +12,7 @@ import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import com.google.android.material.dialog.MaterialAlertDialogBuilder import com.google.android.material.snackbar.Snackbar -import kotlinx.android.synthetic.main.main_activity.* import kotlinx.android.synthetic.main.reader_discover_fragment_layout.* -import kotlinx.android.synthetic.main.reader_fullscreen_empty_with_action.* -import kotlinx.android.synthetic.main.reader_fullscreen_error_with_retry.* import org.wordpress.android.R import org.wordpress.android.R.dimen import org.wordpress.android.WordPress @@ -29,7 +26,6 @@ import org.wordpress.android.ui.reader.ReaderActivityLauncher.OpenUrlType import org.wordpress.android.ui.reader.ReaderPostWebViewCachingFragment import org.wordpress.android.ui.reader.discover.ReaderDiscoverViewModel.DiscoverUiState.ContentUiState import org.wordpress.android.ui.reader.discover.ReaderDiscoverViewModel.DiscoverUiState.EmptyUiState -import org.wordpress.android.ui.reader.discover.ReaderDiscoverViewModel.DiscoverUiState.ErrorUiState import org.wordpress.android.ui.reader.discover.ReaderNavigationEvents.OpenEditorForReblog import org.wordpress.android.ui.reader.discover.ReaderNavigationEvents.OpenPost import org.wordpress.android.ui.reader.discover.ReaderNavigationEvents.SharePost @@ -40,6 +36,7 @@ import org.wordpress.android.ui.reader.discover.ReaderNavigationEvents.ShowNoSit import org.wordpress.android.ui.reader.discover.ReaderNavigationEvents.ShowPostDetail import org.wordpress.android.ui.reader.discover.ReaderNavigationEvents.ShowPostsByTag import org.wordpress.android.ui.reader.discover.ReaderNavigationEvents.ShowReaderComments +import org.wordpress.android.ui.reader.discover.ReaderNavigationEvents.ShowReaderSubs import org.wordpress.android.ui.reader.discover.ReaderNavigationEvents.ShowReportPost import org.wordpress.android.ui.reader.discover.ReaderNavigationEvents.ShowSitePickerForResult import org.wordpress.android.ui.reader.discover.ReaderNavigationEvents.ShowVideoViewer @@ -86,12 +83,6 @@ class ReaderDiscoverFragment : ViewPagerFragment(R.layout.reader_discover_fragme WPSwipeToRefreshHelper.buildSwipeToRefreshHelper(ptr_layout) { viewModel.swipeToRefresh() } - error_retry.setOnClickListener { - viewModel.onRetryButtonClick() - } - empty_action.setOnClickListener { - viewModel.onEmptyActionClick() - } } private fun initViewModel() { @@ -105,19 +96,21 @@ class ReaderDiscoverFragment : ViewPagerFragment(R.layout.reader_discover_fragme recycler_view.scrollToPosition(0) } } - is ErrorUiState -> { - uiHelpers.setTextOrHide(error_title, it.titleResId) - } is EmptyUiState -> { - uiHelpers.setTextOrHide(empty_title, it.titleResId) + uiHelpers.setTextOrHide(actionable_empty_view.title, it.titleResId) + uiHelpers.setTextOrHide(actionable_empty_view.subtitle, it.subTitleRes) + uiHelpers.setImageOrHide(actionable_empty_view.image, it.illustrationResId) + uiHelpers.setTextOrHide(actionable_empty_view.button, it.buttonResId) + actionable_empty_view.button.setOnClickListener { _ -> + it.action.invoke() + } } } uiHelpers.updateVisibility(recycler_view, it.contentVisiblity) uiHelpers.updateVisibility(progress_bar, it.fullscreenProgressVisibility) uiHelpers.updateVisibility(progress_text, it.fullscreenProgressVisibility) - uiHelpers.updateVisibility(error_layout, it.fullscreenErrorVisibility) uiHelpers.updateVisibility(progress_loading_more, it.loadMoreProgressVisibility) - uiHelpers.updateVisibility(empty_layout, it.fullscreenEmptyVisibility) + uiHelpers.updateVisibility(actionable_empty_view, it.fullscreenEmptyVisibility) ptr_layout.isEnabled = it.swipeToRefreshEnabled ptr_layout.isRefreshing = it.reloadProgressVisibility }) @@ -151,6 +144,9 @@ class ReaderDiscoverFragment : ViewPagerFragment(R.layout.reader_discover_fragme OpenUrlType.INTERNAL ) } + is ShowReaderSubs -> { + ReaderActivityLauncher.showReaderSubs(context) + } } } }) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/reader/discover/ReaderDiscoverViewModel.kt b/WordPress/src/main/java/org/wordpress/android/ui/reader/discover/ReaderDiscoverViewModel.kt index a6d64fc001a9..f3b9701f9b53 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/reader/discover/ReaderDiscoverViewModel.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/reader/discover/ReaderDiscoverViewModel.kt @@ -6,7 +6,6 @@ import androidx.lifecycle.Observer import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.launch import org.wordpress.android.R -import org.wordpress.android.R.string import org.wordpress.android.analytics.AnalyticsTracker import org.wordpress.android.analytics.AnalyticsTracker.Stat.READER_DISCOVER_PAGINATED import org.wordpress.android.analytics.AnalyticsTracker.Stat.READER_DISCOVER_TOPIC_TAPPED @@ -27,11 +26,13 @@ import org.wordpress.android.ui.reader.discover.ReaderCardUiState.ReaderPostUiSt import org.wordpress.android.ui.reader.discover.ReaderCardUiState.ReaderRecommendedBlogsCardUiState.ReaderRecommendedBlogUiState import org.wordpress.android.ui.reader.discover.ReaderCardUiState.ReaderWelcomeBannerCardUiState import org.wordpress.android.ui.reader.discover.ReaderDiscoverViewModel.DiscoverUiState.ContentUiState -import org.wordpress.android.ui.reader.discover.ReaderDiscoverViewModel.DiscoverUiState.EmptyUiState.ShowFollowInterestsEmptyUiState -import org.wordpress.android.ui.reader.discover.ReaderDiscoverViewModel.DiscoverUiState.ErrorUiState.RequestFailedErrorUiState +import org.wordpress.android.ui.reader.discover.ReaderDiscoverViewModel.DiscoverUiState.EmptyUiState.RequestFailedUiState +import org.wordpress.android.ui.reader.discover.ReaderDiscoverViewModel.DiscoverUiState.EmptyUiState.ShowNoFollowedTagsUiState +import org.wordpress.android.ui.reader.discover.ReaderDiscoverViewModel.DiscoverUiState.EmptyUiState.ShowNoPostsUiState import org.wordpress.android.ui.reader.discover.ReaderDiscoverViewModel.DiscoverUiState.LoadingUiState import org.wordpress.android.ui.reader.discover.ReaderNavigationEvents.ShowBlogPreview import org.wordpress.android.ui.reader.discover.ReaderNavigationEvents.ShowPostsByTag +import org.wordpress.android.ui.reader.discover.ReaderNavigationEvents.ShowReaderSubs import org.wordpress.android.ui.reader.discover.ReaderNavigationEvents.ShowSitePickerForResult import org.wordpress.android.ui.reader.reblog.ReblogUseCase import org.wordpress.android.ui.reader.repository.ReaderDiscoverCommunication @@ -54,7 +55,7 @@ import javax.inject.Inject import javax.inject.Named const val INITIATE_LOAD_MORE_OFFSET = 3 -const val PHOTON_WIDTH_QUALITY_RATION = 0.5 // load images in 1/2 screen width to save users's data +const val PHOTON_WIDTH_QUALITY_RATION = 0.5 // load images in 1/2 screen width to save users' data const val FEATURED_IMAGE_HEIGHT_WIDTH_RATION = 0.56 // 9:16 class ReaderDiscoverViewModel @Inject constructor( @@ -128,19 +129,19 @@ class ReaderDiscoverViewModel @Inject constructor( launch { val userTags = getFollowedTagsUseCase.get() if (userTags.isEmpty()) { - _uiState.value = ShowFollowInterestsEmptyUiState + _uiState.value = ShowNoFollowedTagsUiState { parentViewModel.onShowReaderInterests() } } else { if (posts != null && posts.cards.isNotEmpty()) { - val discoverFeedContainsOnlyWelcomeCard = posts.cards.size == 1 && - posts.cards.filterIsInstance().isNotEmpty() - if (!discoverFeedContainsOnlyWelcomeCard) { - _uiState.value = ContentUiState( - convertCardsToUiStates(posts), - reloadProgressVisibility = false, - loadMoreProgressVisibility = false, - scrollToTop = swipeToRefreshTriggered - ) - swipeToRefreshTriggered = false + _uiState.value = ContentUiState( + convertCardsToUiStates(posts), + reloadProgressVisibility = false, + loadMoreProgressVisibility = false, + scrollToTop = swipeToRefreshTriggered + ) + swipeToRefreshTriggered = false + } else { + _uiState.value = ShowNoPostsUiState { + _navigationEvents.value = Event(ShowReaderSubs) } } } @@ -171,7 +172,7 @@ class ReaderDiscoverViewModel @Inject constructor( return posts.cards.map { card -> when (card) { is WelcomeBannerCard -> ReaderWelcomeBannerCardUiState( - titleRes = string.reader_welcome_banner + titleRes = R.string.reader_welcome_banner ) is ReaderPostCard -> postUiStateBuilder.mapPostToUiState( post = card.post, @@ -240,7 +241,7 @@ class ReaderDiscoverViewModel @Inject constructor( when (uiState) { is LoadingUiState -> { // show fullscreen error - _uiState.value = RequestFailedErrorUiState + _uiState.value = RequestFailedUiState { onRetryButtonClick() } } is ContentUiState -> { _uiState.value = uiState.copy( @@ -251,7 +252,7 @@ class ReaderDiscoverViewModel @Inject constructor( _snackbarEvents.postValue( Event( SnackbarMessageHolder( - UiStringRes(string.reader_error_request_failed_title) + UiStringRes(R.string.reader_error_request_failed_title) ) ) ) @@ -425,14 +426,9 @@ class ReaderDiscoverViewModel @Inject constructor( } } - fun onEmptyActionClick() { - parentViewModel.onShowReaderInterests() - } - sealed class DiscoverUiState( val contentVisiblity: Boolean = false, val fullscreenProgressVisibility: Boolean = false, - open val fullscreenErrorVisibility: Boolean = false, val swipeToRefreshEnabled: Boolean = false, open val fullscreenEmptyVisibility: Boolean = false, open val scrollToTop: Boolean = false @@ -448,15 +444,32 @@ class ReaderDiscoverViewModel @Inject constructor( ) : DiscoverUiState(contentVisiblity = true, swipeToRefreshEnabled = true) object LoadingUiState : DiscoverUiState(fullscreenProgressVisibility = true) - sealed class ErrorUiState constructor(val titleResId: Int) : DiscoverUiState(fullscreenErrorVisibility = true) { - object RequestFailedErrorUiState : ErrorUiState( - titleResId = R.string.reader_error_request_failed_title - ) - } - sealed class EmptyUiState constructor(val titleResId: Int) : DiscoverUiState(fullscreenEmptyVisibility = true) { - object ShowFollowInterestsEmptyUiState : EmptyUiState( - titleResId = R.string.reader_discover_empty_title - ) + + sealed class EmptyUiState : DiscoverUiState(fullscreenEmptyVisibility = true) { + abstract val titleResId: Int + abstract val buttonResId: Int + open val subTitleRes: Int? = null + abstract val action: () -> Unit + open val illustrationResId: Int? = null + + data class RequestFailedUiState(override val action: () -> Unit) : EmptyUiState() { + override val titleResId = R.string.connection_error + override val subTitleRes = R.string.reader_error_request_failed_title + override val buttonResId = R.string.retry + } + + data class ShowNoFollowedTagsUiState(override val action: () -> Unit) : EmptyUiState() { + override val titleResId = R.string.reader_discover_empty_title + override val subTitleRes = R.string.reader_discover_empty_subtitle + override val buttonResId = R.string.reader_discover_empty_button_text + } + + data class ShowNoPostsUiState(override val action: () -> Unit) : EmptyUiState() { + override val titleResId = R.string.reader_discover_no_posts_title + override val buttonResId = R.string.reader_discover_no_posts_button_text + override val subTitleRes = R.string.reader_discover_no_posts_subtitle + override val illustrationResId = R.drawable.img_illustration_empty_results_216dp + } } } } diff --git a/WordPress/src/main/java/org/wordpress/android/ui/reader/discover/ReaderNavigationEvents.kt b/WordPress/src/main/java/org/wordpress/android/ui/reader/discover/ReaderNavigationEvents.kt index eff4174b261f..a30fc13db57e 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/reader/discover/ReaderNavigationEvents.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/reader/discover/ReaderNavigationEvents.kt @@ -33,4 +33,5 @@ sealed class ReaderNavigationEvents { data class ShowVideoViewer(val videoUrl: String) : ReaderNavigationEvents() data class ShowBlogPreview(val siteId: Long, val feedId: Long) : ReaderNavigationEvents() data class ShowReportPost(val url: String) : ReaderNavigationEvents() + object ShowReaderSubs : ReaderNavigationEvents() } diff --git a/WordPress/src/main/java/org/wordpress/android/ui/reader/repository/ReaderDiscoverDataProvider.kt b/WordPress/src/main/java/org/wordpress/android/ui/reader/repository/ReaderDiscoverDataProvider.kt index 3723fea6f94a..f706afc42f7f 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/reader/repository/ReaderDiscoverDataProvider.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/reader/repository/ReaderDiscoverDataProvider.kt @@ -12,6 +12,7 @@ import org.greenrobot.eventbus.ThreadMode.BACKGROUND import org.wordpress.android.models.ReaderTag import org.wordpress.android.models.discover.ReaderDiscoverCards import org.wordpress.android.modules.IO_THREAD +import org.wordpress.android.modules.UI_THREAD import org.wordpress.android.ui.reader.ReaderEvents.FetchDiscoverCardsEnded import org.wordpress.android.ui.reader.ReaderEvents.FollowedTagsChanged import org.wordpress.android.ui.reader.actions.ReaderActions.UpdateResult.CHANGED @@ -33,6 +34,7 @@ import org.wordpress.android.util.AppLog import org.wordpress.android.util.AppLog.T.READER import org.wordpress.android.util.EventBusWrapper import org.wordpress.android.util.perform +import org.wordpress.android.util.throttle import org.wordpress.android.viewmodel.Event import org.wordpress.android.viewmodel.ReactiveMutableLiveData import java.util.concurrent.atomic.AtomicBoolean @@ -40,8 +42,11 @@ import javax.inject.Inject import javax.inject.Named import kotlin.coroutines.CoroutineContext +private const val DISCOVER_FEED_THROTTLE = 500L + class ReaderDiscoverDataProvider @Inject constructor( @Named(IO_THREAD) private val ioDispatcher: CoroutineDispatcher, + @Named(UI_THREAD) private val mainDispatcher: CoroutineDispatcher, private val eventBusWrapper: EventBusWrapper, private val readerTagWrapper: ReaderTagWrapper, private val getDiscoverCardsUseCase: GetDiscoverCardsUseCase, @@ -60,6 +65,16 @@ class ReaderDiscoverDataProvider @Inject constructor( private val _discoverFeed = ReactiveMutableLiveData( onActive = { onActiveDiscoverFeed() }, onInactive = { onInactiveDiscoverFeed() }) val discoverFeed: LiveData = _discoverFeed + /* Since we listen to all updates of the database the feed is sometimes updated several times within a few + ms. For example, when we are about to insert posts, we delete them first. However, we don't need/want + to propagate this state to the VM. */ + .throttle( + this, + offset = DISCOVER_FEED_THROTTLE, + backgroundDispatcher = ioDispatcher, + mainDispatcher = mainDispatcher + ) + private var hasMoreCards = true private val _communicationChannel = MutableLiveData>() @@ -117,7 +132,9 @@ class ReaderDiscoverDataProvider @Inject constructor( val refresh = shouldAutoUpdateTagUseCase.get(readerTag) if (forceReload || !existsInMemory) { val result = getDiscoverCardsUseCase.get() - _discoverFeed.postValue(result) + if (result.cards.isNotEmpty()) { + _discoverFeed.postValue(result) + } } if (refresh) { @@ -193,10 +210,8 @@ class ReaderDiscoverDataProvider @Inject constructor( @Subscribe(threadMode = BACKGROUND) fun onFollowedTagsChanged(event: FollowedTagsChanged) { - if (event.didSucceed()) { - launch { - refreshCards() - } + launch { + refreshCards() } } } diff --git a/WordPress/src/main/java/org/wordpress/android/ui/reader/repository/usecases/GetDiscoverCardsUseCase.kt b/WordPress/src/main/java/org/wordpress/android/ui/reader/repository/usecases/GetDiscoverCardsUseCase.kt index 7ad5f24c079b..5dbdc45b6327 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/reader/repository/usecases/GetDiscoverCardsUseCase.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/reader/repository/usecases/GetDiscoverCardsUseCase.kt @@ -39,10 +39,6 @@ class GetDiscoverCardsUseCase @Inject constructor( cardJsonList ) - if (!appPrefsWrapper.readerDiscoverWelcomeBannerShown) { - cards.add(WelcomeBannerCard) - } - forLoop@ for (i in 0 until jsonObjects.length()) { val cardJson = jsonObjects.getJSONObject(i) when (cardJson.getString(ReaderConstants.JSON_CARD_TYPE)) { @@ -72,6 +68,10 @@ class GetDiscoverCardsUseCase @Inject constructor( } } } + + if (cards.isNotEmpty() && !appPrefsWrapper.readerDiscoverWelcomeBannerShown) { + cards.add(0, WelcomeBannerCard) + } } return@withContext ReaderDiscoverCards(cards) } diff --git a/WordPress/src/main/java/org/wordpress/android/ui/reader/services/discover/ReaderDiscoverLogic.kt b/WordPress/src/main/java/org/wordpress/android/ui/reader/services/discover/ReaderDiscoverLogic.kt index 9b54ec0ebf41..023188f2a4ff 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/reader/services/discover/ReaderDiscoverLogic.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/reader/services/discover/ReaderDiscoverLogic.kt @@ -150,7 +150,11 @@ class ReaderDiscoverLogic( val nextPageHandle = parseDiscoverCardsJsonUseCase.parseNextPageHandle(json) appPrefsWrapper.readerCardsPageHandle = nextPageHandle - readerTagTableWrapper.setTagLastUpdated(ReaderTag.createDiscoverPostCardsTag()) + if (cards.isEmpty()) { + readerTagTableWrapper.clearTagLastUpdated(ReaderTag.createDiscoverPostCardsTag()) + } else { + readerTagTableWrapper.setTagLastUpdated(ReaderTag.createDiscoverPostCardsTag()) + } resultListener.onUpdateResult(HAS_NEW) } diff --git a/WordPress/src/main/java/org/wordpress/android/ui/reader/utils/ReaderUtils.java b/WordPress/src/main/java/org/wordpress/android/ui/reader/utils/ReaderUtils.java index 3acdf75876a0..980a830bd2d8 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/reader/utils/ReaderUtils.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/reader/utils/ReaderUtils.java @@ -49,17 +49,55 @@ public static String getResizedImageUrl(final String imageUrl, if (isPrivate && !isPrivateAtomic) { - return getPrivateImageForDisplay(unescapedUrl, width, height); + return getImageForDisplayWithoutPhoton(unescapedUrl, width, height, true); } else { return PhotonUtils.getPhotonImageUrl(unescapedUrl, width, height, quality, isPrivateAtomic); } } + public static String getResizedImageUrl(final String imageUrl, + int width, + int height, + SiteAccessibilityInfo siteAccessibilityInfo) { + return getResizedImageUrl(imageUrl, width, height, siteAccessibilityInfo, PhotonUtils.Quality.MEDIUM); + } + + public static String getResizedImageUrl(final String imageUrl, + int width, + int height, + SiteAccessibilityInfo siteAccessibilityInfo, + PhotonUtils.Quality quality) { + final String unescapedUrl = StringEscapeUtils.unescapeHtml4(imageUrl); + + if (siteAccessibilityInfo.isPhotonCapable()) { + return PhotonUtils.getPhotonImageUrl( + unescapedUrl, + width, + height, + quality, + siteAccessibilityInfo.getSiteVisibility() == SiteVisibility.PRIVATE_ATOMIC + ); + } else { + return getImageForDisplayWithoutPhoton( + unescapedUrl, + width, + height, + siteAccessibilityInfo.getSiteVisibility() == SiteVisibility.PRIVATE + ); + } + } + /* - * use this to request a reduced size image from a private post - images in private posts can't - * use photon but these are usually wp images so they support the h= and w= query params + * use this to request a reduced size image from not photon capable sites + * (i.e. a private post - images in private posts can't use photon + * but these are usually wp images so they support the h= and w= query params) */ - private static String getPrivateImageForDisplay(final String imageUrl, int width, int height) { + private static String getImageForDisplayWithoutPhoton( + final String imageUrl, + int width, + int height, + boolean forceHttps + ) { if (TextUtils.isEmpty(imageUrl)) { return ""; } @@ -74,8 +112,14 @@ private static String getPrivateImageForDisplay(final String imageUrl, int width } else { query = ""; } - // remove the existing query string, add the new one, and make sure the url is https: - return UrlUtils.removeQuery(UrlUtils.makeHttps(imageUrl)) + query; + + if (forceHttps) { + // remove the existing query string, add the new one, and make sure the url is https: + return UrlUtils.removeQuery(UrlUtils.makeHttps(imageUrl)) + query; + } else { + // remove the existing query string, add the new one + return UrlUtils.removeQuery(imageUrl) + query; + } } /* diff --git a/WordPress/src/main/java/org/wordpress/android/ui/reader/utils/ReaderUtilsWrapper.kt b/WordPress/src/main/java/org/wordpress/android/ui/reader/utils/ReaderUtilsWrapper.kt index d720cf996ded..371dac9a1d4c 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/reader/utils/ReaderUtilsWrapper.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/reader/utils/ReaderUtilsWrapper.kt @@ -22,6 +22,13 @@ class ReaderUtilsWrapper @Inject constructor( fun getResizedImageUrl(imageUrl: String?, width: Int, height: Int, isPrivate: Boolean, isAtomic: Boolean): String? = ReaderUtils.getResizedImageUrl(imageUrl, width, height, isPrivate, isAtomic) + fun getResizedImageUrl( + imageUrl: String?, + width: Int, + height: Int, + siteAccessibilityInfo: SiteAccessibilityInfo + ): String? = ReaderUtils.getResizedImageUrl(imageUrl, width, height, siteAccessibilityInfo) + fun getTagFromTagName(tagName: String, tagType: ReaderTagType): ReaderTag = ReaderUtils.getTagFromTagName(tagName, tagType) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/reader/utils/SiteAccessibilityInfo.kt b/WordPress/src/main/java/org/wordpress/android/ui/reader/utils/SiteAccessibilityInfo.kt new file mode 100644 index 000000000000..9f328bfaac55 --- /dev/null +++ b/WordPress/src/main/java/org/wordpress/android/ui/reader/utils/SiteAccessibilityInfo.kt @@ -0,0 +1,9 @@ +package org.wordpress.android.ui.reader.utils + +enum class SiteVisibility { + PRIVATE, + PRIVATE_ATOMIC, + PUBLIC +} + +data class SiteAccessibilityInfo(val siteVisibility: SiteVisibility, val isPhotonCapable: Boolean) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/sitecreation/SiteCreationActivity.kt b/WordPress/src/main/java/org/wordpress/android/ui/sitecreation/SiteCreationActivity.kt index 97f305414ed3..d5a62b29869c 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/sitecreation/SiteCreationActivity.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/sitecreation/SiteCreationActivity.kt @@ -34,6 +34,7 @@ import org.wordpress.android.ui.sitecreation.previews.SitePreviewViewModel.Creat import org.wordpress.android.ui.sitecreation.segments.SegmentsScreenListener import org.wordpress.android.ui.sitecreation.segments.SiteCreationSegmentsFragment import org.wordpress.android.ui.sitecreation.theme.HomePagePickerFragment +import org.wordpress.android.ui.sitecreation.theme.HomePagePickerViewModel import org.wordpress.android.ui.utils.UiHelpers import org.wordpress.android.util.config.HomePagePickerFeatureConfig import org.wordpress.android.util.wizard.WizardNavigationTarget @@ -50,13 +51,16 @@ class SiteCreationActivity : LocaleAwareActivity(), @Inject internal lateinit var uiHelpers: UiHelpers @Inject internal lateinit var homePagePickerFeatureConfig: HomePagePickerFeatureConfig private lateinit var mainViewModel: SiteCreationMainVM + private lateinit var hppViewModel: HomePagePickerViewModel override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) (application as WordPress).component().inject(this) setContentView(R.layout.site_creation_activity) mainViewModel = ViewModelProviders.of(this, viewModelFactory).get(SiteCreationMainVM::class.java) + hppViewModel = ViewModelProviders.of(this, viewModelFactory).get(HomePagePickerViewModel::class.java) mainViewModel.start(savedInstanceState) + hppViewModel.loadSavedState(savedInstanceState) observeVMState() } @@ -64,6 +68,7 @@ class SiteCreationActivity : LocaleAwareActivity(), override fun onSaveInstanceState(outState: Bundle) { super.onSaveInstanceState(outState) mainViewModel.writeToBundle(outState) + hppViewModel.writeToBundle(outState) } private fun observeVMState() { @@ -103,6 +108,12 @@ class SiteCreationActivity : LocaleAwareActivity(), mainViewModel.onBackPressedObservable.observe(this, Observer { super.onBackPressed() }) + hppViewModel.onBackButtonPressed.observe(this, Observer { + mainViewModel.onBackPressed() + }) + hppViewModel.onDesignActionPressed.observe(this, Observer { design -> + mainViewModel.onSiteDesignSelected(design.template, design.segmentId) + }) } override fun onSegmentSelected(segmentId: Long) { @@ -128,11 +139,11 @@ class SiteCreationActivity : LocaleAwareActivity(), private fun showStep(target: WizardNavigationTarget) { val screenTitle = getScreenTitle(target.wizardStep) val fragment = when (target.wizardStep) { - SEGMENTS -> if (homePagePickerFeatureConfig.isEnabled()) HomePagePickerFragment() // FIXME: Only for #13192 + SEGMENTS -> if (homePagePickerFeatureConfig.isEnabled()) HomePagePickerFragment() else SiteCreationSegmentsFragment.newInstance(screenTitle) DOMAINS -> SiteCreationDomainsFragment.newInstance( screenTitle, - target.wizardState.segmentId!! + target.wizardState.segmentId ) SITE_PREVIEW -> SiteCreationPreviewFragment.newInstance(screenTitle, target.wizardState) } diff --git a/WordPress/src/main/java/org/wordpress/android/ui/sitecreation/SiteCreationMainVM.kt b/WordPress/src/main/java/org/wordpress/android/ui/sitecreation/SiteCreationMainVM.kt index 180efd580be3..d317506bc2e1 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/sitecreation/SiteCreationMainVM.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/sitecreation/SiteCreationMainVM.kt @@ -34,6 +34,7 @@ const val KEY_SITE_CREATION_STATE = "key_site_creation_state" @SuppressLint("ParcelCreator") data class SiteCreationState( val segmentId: Long? = null, + val siteDesign: String? = null, val domain: String? = null ) : WizardState, Parcelable @@ -96,6 +97,11 @@ class SiteCreationMainVM @Inject constructor( wizardManager.showNextStep() } + fun onSiteDesignSelected(siteDesign: String, segmentId: Long?) { + siteCreationState = siteCreationState.copy(siteDesign = siteDesign, segmentId = segmentId) + wizardManager.showNextStep() + } + fun onBackPressed() { return if (wizardManager.isLastStep()) { if (siteCreationCompleted) { diff --git a/WordPress/src/main/java/org/wordpress/android/ui/sitecreation/domains/SiteCreationDomainsFragment.kt b/WordPress/src/main/java/org/wordpress/android/ui/sitecreation/domains/SiteCreationDomainsFragment.kt index 6fe9820b0544..420c70d3f6c0 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/sitecreation/domains/SiteCreationDomainsFragment.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/sitecreation/domains/SiteCreationDomainsFragment.kt @@ -122,11 +122,7 @@ class SiteCreationDomainsFragment : SiteCreationBaseFormFragment() { (recycler_view.adapter as SiteCreationDomainsAdapter).update(contentState.items) } - private fun getSegmentIdFromArguments(): Long { - return requireNotNull(arguments?.getLong(EXTRA_SEGMENT_ID)) { - "SegmentId is missing. Have you created the fragment using SiteCreationDomainsFragment.newInstance(..)?" - } - } + private fun getSegmentIdFromArguments(): Long? = arguments?.getLong(EXTRA_SEGMENT_ID) override fun onDestroyView() { super.onDestroyView() @@ -137,11 +133,13 @@ class SiteCreationDomainsFragment : SiteCreationBaseFormFragment() { const val TAG = "site_creation_domains_fragment_tag" private const val EXTRA_SEGMENT_ID = "extra_segment_id" - fun newInstance(screenTitle: String, segmentId: Long): SiteCreationDomainsFragment { + fun newInstance(screenTitle: String, segmentId: Long?): SiteCreationDomainsFragment { val fragment = SiteCreationDomainsFragment() val bundle = Bundle() bundle.putString(EXTRA_SCREEN_TITLE, screenTitle) - bundle.putLong(EXTRA_SEGMENT_ID, segmentId) + if (segmentId != null) { + bundle.putLong(EXTRA_SEGMENT_ID, segmentId) + } fragment.arguments = bundle return fragment } diff --git a/WordPress/src/main/java/org/wordpress/android/ui/sitecreation/domains/SiteCreationDomainsViewModel.kt b/WordPress/src/main/java/org/wordpress/android/ui/sitecreation/domains/SiteCreationDomainsViewModel.kt index 4d6a955a85e8..f41c6c605a02 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/sitecreation/domains/SiteCreationDomainsViewModel.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/sitecreation/domains/SiteCreationDomainsViewModel.kt @@ -59,7 +59,7 @@ class SiteCreationDomainsViewModel @Inject constructor( override val coroutineContext: CoroutineContext get() = bgDispatcher + job private var isStarted = false - private var segmentId by Delegates.notNull() + private var segmentId: Long? = null private val _uiState: MutableLiveData = MutableLiveData() val uiState: LiveData = _uiState @@ -90,7 +90,7 @@ class SiteCreationDomainsViewModel @Inject constructor( dispatcher.unregister(fetchDomainsUseCase) } - fun start(segmentId: Long) { + fun start(segmentId: Long?) { if (isStarted) { return } diff --git a/WordPress/src/main/java/org/wordpress/android/ui/sitecreation/misc/SiteCreationTracker.kt b/WordPress/src/main/java/org/wordpress/android/ui/sitecreation/misc/SiteCreationTracker.kt index 0e891818b59e..2445f585aabc 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/sitecreation/misc/SiteCreationTracker.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/sitecreation/misc/SiteCreationTracker.kt @@ -89,4 +89,37 @@ class SiteCreationTracker @Inject constructor(val tracker: AnalyticsTrackerWrapp fun trackSiteCreationServiceStateUpdated(props: Map) { tracker.track(AnalyticsTracker.Stat.ENHANCED_SITE_CREATION_BACKGROUND_SERVICE_UPDATED, props) } + + fun trackSiteDesignViewed() { + tracker.track(AnalyticsTracker.Stat.ENHANCED_SITE_CREATION_SITE_DESIGN_VIEWED) + } + + fun trackSiteDesignSkipped() { + tracker.track(AnalyticsTracker.Stat.ENHANCED_SITE_CREATION_SITE_DESIGN_SKIPPED) + } + + fun trackSiteDesignSelected(template: String) { + tracker.track(AnalyticsTracker.Stat.ENHANCED_SITE_CREATION_SITE_DESIGN_SELECTED, mapOf("template" to template)) + } + + fun trackSiteDesignPreviewViewed(template: String) { + tracker.track( + AnalyticsTracker.Stat.ENHANCED_SITE_CREATION_SITE_DESIGN_PREVIEW_VIEWED, + mapOf("template" to template) + ) + } + + fun trackSiteDesignPreviewLoading(template: String) { + tracker.track( + AnalyticsTracker.Stat.ENHANCED_SITE_CREATION_SITE_DESIGN_PREVIEW_LOADING, + mapOf("template" to template) + ) + } + + fun trackSiteDesignPreviewLoaded(template: String) { + tracker.track( + AnalyticsTracker.Stat.ENHANCED_SITE_CREATION_SUCCESS_PREVIEW_LOADED, + mapOf("template" to template) + ) + } } diff --git a/WordPress/src/main/java/org/wordpress/android/ui/sitecreation/previews/SitePreviewViewModel.kt b/WordPress/src/main/java/org/wordpress/android/ui/sitecreation/previews/SitePreviewViewModel.kt index 908c1c03f2f4..094720f6c3bd 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/sitecreation/previews/SitePreviewViewModel.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/sitecreation/previews/SitePreviewViewModel.kt @@ -134,6 +134,7 @@ class SitePreviewViewModel @Inject constructor( siteCreationState.apply { val serviceData = SiteCreationServiceData( segmentId, + siteDesign, urlWithoutScheme ) _startCreateSiteService.value = SitePreviewStartServiceData(serviceData, previousState) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/sitecreation/services/SiteCreationServiceData.kt b/WordPress/src/main/java/org/wordpress/android/ui/sitecreation/services/SiteCreationServiceData.kt index edef246e6d90..d6fcfc12f7e4 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/sitecreation/services/SiteCreationServiceData.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/sitecreation/services/SiteCreationServiceData.kt @@ -8,5 +8,6 @@ import kotlinx.android.parcel.Parcelize @SuppressLint("ParcelCreator") data class SiteCreationServiceData( val segmentId: Long?, + val siteDesign: String?, val domain: String ) : Parcelable diff --git a/WordPress/src/main/java/org/wordpress/android/ui/sitecreation/theme/HomePagePickerFragment.kt b/WordPress/src/main/java/org/wordpress/android/ui/sitecreation/theme/HomePagePickerFragment.kt index e97f19cdfdd4..c565aa04fc38 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/sitecreation/theme/HomePagePickerFragment.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/sitecreation/theme/HomePagePickerFragment.kt @@ -19,7 +19,6 @@ import kotlinx.android.synthetic.main.modal_layout_picker_subtitle_row.* import kotlinx.android.synthetic.main.modal_layout_picker_title_row.* import org.wordpress.android.R import org.wordpress.android.WordPress -import org.wordpress.android.fluxc.model.StarterDesignModel import org.wordpress.android.ui.sitecreation.theme.HomePagePickerViewModel.UiState import org.wordpress.android.util.AniUtils import org.wordpress.android.util.AniUtils.Duration @@ -39,11 +38,6 @@ class HomePagePickerFragment : Fragment() { @Inject lateinit var viewModelFactory: ViewModelProvider.Factory private lateinit var viewModel: HomePagePickerViewModel - companion object { - const val FETCHED_LAYOUTS = "FETCHED_LAYOUTS" - const val SELECTED_LAYOUT = "SELECTED_LAYOUT" - } - override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, @@ -68,8 +62,8 @@ class HomePagePickerFragment : Fragment() { } setupUi() + setupViewModel() setupActionListeners() - setupViewModel(savedInstanceState) } override fun onAttach(context: Context) { @@ -77,15 +71,7 @@ class HomePagePickerFragment : Fragment() { (requireActivity().applicationContext as WordPress).component().inject(this) } - override fun onSaveInstanceState(outState: Bundle) { - (viewModel.uiState.value as? UiState.Content)?.let { - outState.putParcelableArrayList(FETCHED_LAYOUTS, ArrayList(viewModel.layouts)) - outState.putString(SELECTED_LAYOUT, it.selectedLayoutSlug) - } - super.onSaveInstanceState(outState) - } - - private fun setupViewModel(savedInstanceState: Bundle?) { + private fun setupViewModel() { viewModel = ViewModelProviders.of(requireActivity(), viewModelFactory) .get(HomePagePickerViewModel::class.java) @@ -97,7 +83,8 @@ class HomePagePickerFragment : Fragment() { layoutsRecyclerView.setVisible(!uiState.loadingIndicatorVisible && !uiState.errorViewVisible) AniUtils.animateBottomBar(bottomToolbar, uiState.isToolbarVisible) when (uiState) { - is UiState.Loading -> {} + is UiState.Loading -> { // Nothing more to do here + } is UiState.Content -> { (layoutsRecyclerView.adapter as? HomePagePickerAdapter)?.setData(uiState.layouts) } @@ -107,13 +94,7 @@ class HomePagePickerFragment : Fragment() { } }) - savedInstanceState?.let { - val layouts = it.getParcelableArrayList(FETCHED_LAYOUTS) - val selected = it.getString(SELECTED_LAYOUT) - viewModel.loadSavedState(layouts, selected) - } ?: run { - viewModel.start() - } + viewModel.start() } private fun setupUi() { @@ -127,10 +108,7 @@ class HomePagePickerFragment : Fragment() { chooseButton.setOnClickListener { viewModel.onChooseTapped() } skipButton.setOnClickListener { viewModel.onSkippedTapped() } errorView.button.setOnClickListener { viewModel.onRetryClicked() } - backButton.setOnClickListener { - requireActivity().onBackPressed() // FIXME: This is temporary for PR #13192 - viewModel.onBackPressed() - } + backButton.setOnClickListener { viewModel.onBackPressed() } setScrollListener() } @@ -140,6 +118,7 @@ class HomePagePickerFragment : Fragment() { appBarLayout.addOnOffsetChangedListener(AppBarLayout.OnOffsetChangedListener { _, verticalOffset -> viewModel.onAppBarOffsetChanged(verticalOffset, scrollThreshold) }) + viewModel.onAppBarOffsetChanged(0, scrollThreshold) } private fun setTitleVisibility(visible: Boolean) { diff --git a/WordPress/src/main/java/org/wordpress/android/ui/sitecreation/theme/HomePagePickerViewHolder.kt b/WordPress/src/main/java/org/wordpress/android/ui/sitecreation/theme/HomePagePickerViewHolder.kt index d91e1e57c239..4fc17a36814d 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/sitecreation/theme/HomePagePickerViewHolder.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/sitecreation/theme/HomePagePickerViewHolder.kt @@ -6,14 +6,16 @@ import android.view.ViewGroup import android.widget.ImageView import android.widget.ImageView.ScaleType.FIT_CENTER import androidx.recyclerview.widget.RecyclerView +import com.google.android.material.card.MaterialCardView import kotlinx.android.synthetic.main.home_page_picker_item.view.* +import org.wordpress.android.R import org.wordpress.android.util.image.ImageManager import org.wordpress.android.util.image.ImageManager.RequestListener import org.wordpress.android.util.image.ImageType import org.wordpress.android.util.setVisible class HomePagePickerViewHolder(view: View, val parent: ViewGroup) : RecyclerView.ViewHolder(view) { - private val container: View = itemView.layout_container + private val container: MaterialCardView = itemView.layout_container private val preview: ImageView = itemView.preview private val selected: ImageView = itemView.selected_overlay @@ -33,6 +35,10 @@ class HomePagePickerViewHolder(view: View, val parent: ViewGroup) : RecyclerView selected.setVisible(uiState.selectedOverlayVisible) preview.contentDescription = parent.context.getString(uiState.contentDescriptionResId, uiState.title) + preview.context?.let { ctx -> + container.strokeWidth = if (uiState.selectedOverlayVisible) + ctx.resources.getDimensionPixelSize(R.dimen.picker_header_selection_overlay_width) else 0 + } container.setOnClickListener { uiState.onItemTapped() } diff --git a/WordPress/src/main/java/org/wordpress/android/ui/sitecreation/theme/HomePagePickerViewModel.kt b/WordPress/src/main/java/org/wordpress/android/ui/sitecreation/theme/HomePagePickerViewModel.kt index 22683d864cac..e9c4bec9ce9e 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/sitecreation/theme/HomePagePickerViewModel.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/sitecreation/theme/HomePagePickerViewModel.kt @@ -1,5 +1,6 @@ package org.wordpress.android.ui.sitecreation.theme +import android.os.Bundle import androidx.annotation.StringRes import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData @@ -14,16 +15,27 @@ import org.wordpress.android.fluxc.Dispatcher import org.wordpress.android.fluxc.model.StarterDesignModel import org.wordpress.android.modules.BG_THREAD import org.wordpress.android.modules.UI_THREAD +import org.wordpress.android.ui.sitecreation.misc.SiteCreationErrorType.INTERNET_UNAVAILABLE_ERROR +import org.wordpress.android.ui.sitecreation.misc.SiteCreationErrorType.UNKNOWN +import org.wordpress.android.ui.sitecreation.misc.SiteCreationTracker import org.wordpress.android.ui.sitecreation.usecases.FetchHomePageLayoutsUseCase import org.wordpress.android.util.NetworkUtilsWrapper +import org.wordpress.android.viewmodel.SingleLiveEvent import javax.inject.Inject import javax.inject.Named import kotlin.coroutines.CoroutineContext +const val defaultTemplateSlug = "default" + +private const val ERROR_CONTEXT = "design" +private const val FETCHED_LAYOUTS = "FETCHED_LAYOUTS" +private const val SELECTED_LAYOUT = "SELECTED_LAYOUT" + class HomePagePickerViewModel @Inject constructor( private val networkUtils: NetworkUtilsWrapper, private val dispatcher: Dispatcher, private val fetchHomePageLayoutsUseCase: FetchHomePageLayoutsUseCase, + private val analyticsTracker: SiteCreationTracker, @Named(BG_THREAD) private val bgDispatcher: CoroutineDispatcher, @Named(UI_THREAD) private val mainDispatcher: CoroutineDispatcher ) : ViewModel(), CoroutineScope { @@ -36,6 +48,17 @@ class HomePagePickerViewModel @Inject constructor( private val _uiState: MutableLiveData = MutableLiveData() val uiState: LiveData = _uiState + private val _onDesignActionPressed = SingleLiveEvent() + val onDesignActionPressed: LiveData = _onDesignActionPressed + + private val _onBackButtonPressed = SingleLiveEvent() + val onBackButtonPressed: LiveData = _onBackButtonPressed + + sealed class DesignSelectionAction(val template: String, val segmentId: Long?) { + object Skip : DesignSelectionAction(defaultTemplateSlug, null) + class Choose(template: String, segmentId: Long?) : DesignSelectionAction(template, segmentId) + } + init { dispatcher.register(fetchHomePageLayoutsUseCase) } @@ -47,7 +70,10 @@ class HomePagePickerViewModel @Inject constructor( } fun start() { - fetchLayouts() + if (uiState.value !is UiState.Content) { + analyticsTracker.trackSiteDesignViewed() + fetchLayouts() + } } private fun fetchLayouts() { @@ -56,6 +82,7 @@ class HomePagePickerViewModel @Inject constructor( val event = fetchHomePageLayoutsUseCase.fetchStarterDesigns() withContext(mainDispatcher) { if (event.isError) { + analyticsTracker.trackErrorShown(ERROR_CONTEXT, UNKNOWN, "Error fetching designs") updateUiState(UiState.Error()) } else { layouts = event.designs @@ -98,26 +125,40 @@ class HomePagePickerViewModel @Inject constructor( } fun onChooseTapped() { - // TODO + (uiState.value as? UiState.Content)?.let { state -> + layouts.firstOrNull { it.slug != null && it.slug == state.selectedLayoutSlug }?.let { layout -> + val template = layout.slug!! + analyticsTracker.trackSiteDesignSelected(template) + _onDesignActionPressed.value = DesignSelectionAction.Choose(template, layout.segmentId) + return + } + } + analyticsTracker.trackErrorShown(ERROR_CONTEXT, UNKNOWN, "Error choosing design") + updateUiState(UiState.Error(toast = R.string.hpp_choose_error)) } fun onSkippedTapped() { - // TODO + analyticsTracker.trackSiteDesignSkipped() + _onDesignActionPressed.value = DesignSelectionAction.Skip } fun onBackPressed() { - // TODO + _onBackButtonPressed.call() } fun onRetryClicked() { if (networkUtils.isNetworkAvailable()) { fetchLayouts() } else { + analyticsTracker.trackErrorShown(ERROR_CONTEXT, INTERNET_UNAVAILABLE_ERROR, "Retry error") updateUiState(UiState.Error(toast = R.string.hpp_retry_error)) } } - fun loadSavedState(layouts: List?, selected: String?) { + fun loadSavedState(savedInstanceState: Bundle?) { + if (savedInstanceState == null) return + val layouts = savedInstanceState.getParcelableArrayList(FETCHED_LAYOUTS) + val selected = savedInstanceState.getString(SELECTED_LAYOUT) if (layouts == null || layouts.isEmpty()) { fetchLayouts() return @@ -128,6 +169,13 @@ class HomePagePickerViewModel @Inject constructor( loadLayouts() } + fun writeToBundle(outState: Bundle) { + (uiState.value as? UiState.Content)?.let { + outState.putParcelableArrayList(FETCHED_LAYOUTS, ArrayList(layouts)) + outState.putString(SELECTED_LAYOUT, it.selectedLayoutSlug) + } + } + private fun updateUiState(uiState: UiState) { _uiState.value = uiState } diff --git a/WordPress/src/main/java/org/wordpress/android/ui/sitecreation/usecases/CreateSiteUseCase.kt b/WordPress/src/main/java/org/wordpress/android/ui/sitecreation/usecases/CreateSiteUseCase.kt index 1165ed0691b1..f80f6deb8f76 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/sitecreation/usecases/CreateSiteUseCase.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/sitecreation/usecases/CreateSiteUseCase.kt @@ -53,6 +53,7 @@ class CreateSiteUseCase @Inject constructor( languageWordPressId, siteVisibility, siteData.segmentId, + siteData.siteDesign, dryRun ) continuation = cont diff --git a/WordPress/src/main/java/org/wordpress/android/ui/sitecreation/usecases/FetchDomainsUseCase.kt b/WordPress/src/main/java/org/wordpress/android/ui/sitecreation/usecases/FetchDomainsUseCase.kt index 58eb4e6a2a47..0973d333ea93 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/sitecreation/usecases/FetchDomainsUseCase.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/sitecreation/usecases/FetchDomainsUseCase.kt @@ -33,7 +33,7 @@ class FetchDomainsUseCase @Inject constructor( suspend fun fetchDomains( query: String, - segmentId: Long, + segmentId: Long?, includeVendorDot: Boolean = FETCH_DOMAINS_SHOULD_INCLUDE_DOT_BLOG_VENDOR, size: Int = FETCH_DOMAINS_SIZE ): OnSuggestedDomains { @@ -43,6 +43,14 @@ class FetchDomainsUseCase @Inject constructor( size, includeVendorDot ) + + /** + * Depending on the payload the server may override the following values. Setting this values here to get + * reasonable results in case SKIP button is pressed ("default" template) + */ + payload.includeWordpressCom = true + payload.onlyWordpressCom = true + return suspendCancellableCoroutine { cont -> pair = Pair(payload.query, cont) dispatcher.dispatch(SiteActionBuilder.newSuggestDomainsAction(payload)) diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stories/StoriesMediaPickerResultHandler.kt b/WordPress/src/main/java/org/wordpress/android/ui/stories/StoriesMediaPickerResultHandler.kt index 8c17b60d2ce0..1ce2fb4b42ab 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/stories/StoriesMediaPickerResultHandler.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/stories/StoriesMediaPickerResultHandler.kt @@ -10,11 +10,10 @@ import org.wordpress.android.ui.media.MediaBrowserType import org.wordpress.android.ui.photopicker.MediaPickerConstants import org.wordpress.android.util.AppLog import org.wordpress.android.util.AppLog.T.UTILS -import org.wordpress.android.util.config.ConsolidatedMediaPickerFeatureConfig import javax.inject.Inject class StoriesMediaPickerResultHandler -@Inject constructor(private val consolidatedMediaPickerFeatureConfig: ConsolidatedMediaPickerFeatureConfig) { +@Inject constructor() { /* return true if MediaPickerResult was handled */ fun handleMediaPickerResultForStories( data: Intent, @@ -28,7 +27,7 @@ class StoriesMediaPickerResultHandler PagePostCreationSourcesDetail.STORY_FROM_MY_SITE ) return true - } else if (consolidatedMediaPickerFeatureConfig.isEnabled() || isWPStoriesMediaBrowserTypeResult(data)) { + } else if (isWPStoriesMediaBrowserTypeResult(data)) { if (data.hasExtra(MediaBrowserActivity.RESULT_IDS)) { ActivityLauncher.addNewStoryWithMediaIdsForResult( activity, diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stories/StoryComposerActivity.kt b/WordPress/src/main/java/org/wordpress/android/ui/stories/StoryComposerActivity.kt index 67e28e829481..de571566113b 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/stories/StoryComposerActivity.kt +++ b/WordPress/src/main/java/org/wordpress/android/ui/stories/StoryComposerActivity.kt @@ -260,13 +260,9 @@ class StoryComposerActivity : ComposeLoopFrameActivity(), } override fun showProvidedMediaPicker() { - // the ComposeLoopFrameActivity currently only knows about RequestCodes.PHOTO_PICKER and not about - // RequestCodes.STORIES_PHOTO_PICKER; as a temporary solution we are feeding the ComposeLoopFragmentActivity - // with the PHOTO_PICKER. We should add the STORIES_PHOTO_PICKER to the stories lib mediaPickerLauncher.showStoriesPhotoPickerForResult( this, - site, - RequestCodes.PHOTO_PICKER + site ) } @@ -396,6 +392,11 @@ class StoryComposerActivity : ComposeLoopFrameActivity(), viewModel.onStoryDiscarded() } + override fun onFrameRemove(storyIndex: StoryIndex, storyFrameIndex: Int) { + // no op + // TODO this will be implemented after the Story block support lands in develop + } + private fun openPrepublishingBottomSheet() { val fragment = supportFragmentManager.findFragmentByTag(PrepublishingBottomSheetFragment.TAG) if (fragment == null) { diff --git a/WordPress/src/main/java/org/wordpress/android/ui/themes/ThemeBrowserActivity.java b/WordPress/src/main/java/org/wordpress/android/ui/themes/ThemeBrowserActivity.java index e3668f9a13a1..8a6e60daf2e8 100644 --- a/WordPress/src/main/java/org/wordpress/android/ui/themes/ThemeBrowserActivity.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/themes/ThemeBrowserActivity.java @@ -48,7 +48,8 @@ public class ThemeBrowserActivity extends LocaleAwareActivity implements ThemeBrowserFragmentCallback { public static boolean isAccessible(SiteModel site) { // themes are only accessible to admin wordpress.com users - return site != null && site.isUsingWpComRestApi() && site.getHasCapabilityEditThemeOptions(); + return site != null && site.isUsingWpComRestApi() && site.getHasCapabilityEditThemeOptions() + && !site.isWpForTeamsSite(); } public static final int ACTIVATE_THEME = 1; diff --git a/WordPress/src/main/java/org/wordpress/android/ui/uploads/MediaUploadHandler.java b/WordPress/src/main/java/org/wordpress/android/ui/uploads/MediaUploadHandler.java index f50e936e1a5a..51f4b83af306 100755 --- a/WordPress/src/main/java/org/wordpress/android/ui/uploads/MediaUploadHandler.java +++ b/WordPress/src/main/java/org/wordpress/android/ui/uploads/MediaUploadHandler.java @@ -196,6 +196,9 @@ private void handleOnMediaUploadedError(@NonNull OnMediaUploaded event) { Map properties = new HashMap<>(); properties.put("error_type", event.error.type.name()); + properties.put("error_message", event.error.message); + properties.put("error_log", event.error.logMessage); + properties.put("error_status_code", event.error.statusCode); trackUploadMediaEvents(AnalyticsTracker.Stat.MEDIA_UPLOAD_ERROR, media, properties); completeUploadWithId(event.media.getId()); diff --git a/WordPress/src/main/java/org/wordpress/android/util/LiveDataUtils.kt b/WordPress/src/main/java/org/wordpress/android/util/LiveDataUtils.kt index 195d35e08fd9..a15ef18584cd 100644 --- a/WordPress/src/main/java/org/wordpress/android/util/LiveDataUtils.kt +++ b/WordPress/src/main/java/org/wordpress/android/util/LiveDataUtils.kt @@ -4,7 +4,9 @@ import androidx.lifecycle.LiveData import androidx.lifecycle.MediatorLiveData import androidx.lifecycle.Observer import androidx.lifecycle.Transformations +import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import org.wordpress.android.viewmodel.SingleMediatorLiveEvent @@ -376,9 +378,16 @@ fun LiveData.fold(action: (previous: T, current: T) -> T): MediatorLiveDa fun LiveData.throttle( coroutineScope: CoroutineScope, distinct: Boolean = false, - offset: Long = 100 + offset: Long = 100, + backgroundDispatcher: CoroutineDispatcher = Dispatchers.Default, + mainDispatcher: CoroutineDispatcher = Dispatchers.Main ): ThrottleLiveData { - val mediatorLiveData: ThrottleLiveData = ThrottleLiveData(coroutineScope = coroutineScope, offset = offset) + val mediatorLiveData: ThrottleLiveData = ThrottleLiveData( + coroutineScope = coroutineScope, + offset = offset, + backgroundDispatcher = backgroundDispatcher, + mainDispatcher = mainDispatcher + ) mediatorLiveData.addSource(this) { if ((it != mediatorLiveData.value || !distinct) && it != null) { mediatorLiveData.postValue(it) diff --git a/WordPress/src/main/java/org/wordpress/android/util/MediaUtilsWrapper.kt b/WordPress/src/main/java/org/wordpress/android/util/MediaUtilsWrapper.kt index ed5be3b2e539..c9687515590d 100644 --- a/WordPress/src/main/java/org/wordpress/android/util/MediaUtilsWrapper.kt +++ b/WordPress/src/main/java/org/wordpress/android/util/MediaUtilsWrapper.kt @@ -49,4 +49,6 @@ class MediaUtilsWrapper @Inject constructor(private val appContext: Context) { fun isLocalFile(uploadState: String): Boolean = MediaUtils.isLocalFile(uploadState) fun getExtensionForMimeType(mimeType: String?): String = MediaUtils.getExtensionForMimeType(mimeType) + + fun isFile(mediaUri: Uri): Boolean = MediaUtils.isFile(mediaUri) } diff --git a/WordPress/src/main/java/org/wordpress/android/util/ScanFeatureConfig.kt b/WordPress/src/main/java/org/wordpress/android/util/ScanFeatureConfig.kt new file mode 100644 index 000000000000..26ed0f19cc35 --- /dev/null +++ b/WordPress/src/main/java/org/wordpress/android/util/ScanFeatureConfig.kt @@ -0,0 +1,17 @@ +package org.wordpress.android.util + +import org.wordpress.android.BuildConfig +import org.wordpress.android.annotation.FeatureInDevelopment +import org.wordpress.android.util.config.AppConfig +import org.wordpress.android.util.config.FeatureConfig +import javax.inject.Inject + +/** + * Configuration of the Scan feature. + */ +@FeatureInDevelopment +class ScanFeatureConfig +@Inject constructor(appConfig: AppConfig) : FeatureConfig( + appConfig, + BuildConfig.SCAN_AVAILABLE +) diff --git a/WordPress/src/main/java/org/wordpress/android/util/SiteUtils.java b/WordPress/src/main/java/org/wordpress/android/util/SiteUtils.java index 9f2b9d0bb389..571c279effde 100644 --- a/WordPress/src/main/java/org/wordpress/android/util/SiteUtils.java +++ b/WordPress/src/main/java/org/wordpress/android/util/SiteUtils.java @@ -5,6 +5,7 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import org.jetbrains.annotations.NotNull; import org.wordpress.android.WordPress; import org.wordpress.android.analytics.AnalyticsTracker.Stat; import org.wordpress.android.fluxc.Dispatcher; @@ -16,6 +17,8 @@ import org.wordpress.android.fluxc.store.SiteStore.DesignateMobileEditorPayload; import org.wordpress.android.ui.plans.PlansConstants; import org.wordpress.android.ui.prefs.AppPrefs; +import org.wordpress.android.ui.reader.utils.SiteAccessibilityInfo; +import org.wordpress.android.ui.reader.utils.SiteVisibility; import org.wordpress.android.util.analytics.AnalyticsUtils; import org.wordpress.android.util.analytics.AnalyticsUtils.BlockEditorEnabledSource; import org.wordpress.android.util.helpers.Version; @@ -27,8 +30,7 @@ public class SiteUtils { public static final String GB_EDITOR_NAME = "gutenberg"; public static final String AZTEC_EDITOR_NAME = "aztec"; public static final String WP_STORIES_CREATOR_NAME = "wp_stories_creator"; - // TODO Update to the first version with the story block as a production and not a beta block - public static final String WP_STORIES_JETPACK_VERSION = "8.8"; + public static final String WP_STORIES_JETPACK_VERSION = "9.1"; private static final int GB_ROLLOUT_PERCENTAGE_PHASE_1 = 100; private static final int GB_ROLLOUT_PERCENTAGE_PHASE_2 = 100; @@ -246,6 +248,20 @@ public static String getSiteIconUrl(SiteModel site, int size) { site.isPrivateWPComAtomic()); } + public static SiteAccessibilityInfo getAccessibilityInfoFromSite(@NotNull SiteModel site) { + SiteVisibility siteVisibility; + + if (site.isPrivateWPComAtomic()) { + siteVisibility = SiteVisibility.PRIVATE_ATOMIC; + } else if (site.isPrivate()) { + siteVisibility = SiteVisibility.PRIVATE; + } else { + siteVisibility = SiteVisibility.PUBLIC; + } + + return new SiteAccessibilityInfo(siteVisibility, isPhotonCapable(site)); + } + public static ArrayList getCurrentSiteIds(SiteStore siteStore, boolean selfhostedOnly) { ArrayList siteIDs = new ArrayList<>(); List sites = selfhostedOnly ? siteStore.getSitesAccessedViaXMLRPC() : siteStore.getSites(); diff --git a/WordPress/src/main/java/org/wordpress/android/util/SiteUtilsWrapper.kt b/WordPress/src/main/java/org/wordpress/android/util/SiteUtilsWrapper.kt index 5bb5c4dbc8ad..6d4a7f21d214 100644 --- a/WordPress/src/main/java/org/wordpress/android/util/SiteUtilsWrapper.kt +++ b/WordPress/src/main/java/org/wordpress/android/util/SiteUtilsWrapper.kt @@ -2,6 +2,7 @@ package org.wordpress.android.util import dagger.Reusable import org.wordpress.android.fluxc.model.SiteModel +import org.wordpress.android.ui.reader.utils.SiteAccessibilityInfo import javax.inject.Inject /** @@ -14,4 +15,6 @@ import javax.inject.Inject @Reusable class SiteUtilsWrapper @Inject constructor() { fun isPhotonCapable(site: SiteModel): Boolean = SiteUtils.isPhotonCapable(site) + fun getAccessibilityInfoFromSite(site: SiteModel): SiteAccessibilityInfo = + SiteUtils.getAccessibilityInfoFromSite(site) } diff --git a/WordPress/src/main/java/org/wordpress/android/util/config/ActivityLogFiltersFeatureConfig.kt b/WordPress/src/main/java/org/wordpress/android/util/config/ActivityLogFiltersFeatureConfig.kt new file mode 100644 index 000000000000..33bd8fe19a9d --- /dev/null +++ b/WordPress/src/main/java/org/wordpress/android/util/config/ActivityLogFiltersFeatureConfig.kt @@ -0,0 +1,15 @@ +package org.wordpress.android.util.config + +import org.wordpress.android.BuildConfig +import org.wordpress.android.annotation.FeatureInDevelopment +import javax.inject.Inject + +/** + * Configuration of the Activity Log Filters feature. + */ +@FeatureInDevelopment +class ActivityLogFiltersFeatureConfig +@Inject constructor(appConfig: AppConfig) : FeatureConfig( + appConfig, + BuildConfig.ACTIVITY_LOG_FILTERS +) diff --git a/WordPress/src/main/java/org/wordpress/android/util/config/ConsolidatedMediaPickerFeatureConfig.kt b/WordPress/src/main/java/org/wordpress/android/util/config/ConsolidatedMediaPickerFeatureConfig.kt index 72b19eac6453..7ed88d6e494f 100644 --- a/WordPress/src/main/java/org/wordpress/android/util/config/ConsolidatedMediaPickerFeatureConfig.kt +++ b/WordPress/src/main/java/org/wordpress/android/util/config/ConsolidatedMediaPickerFeatureConfig.kt @@ -1,15 +1,21 @@ package org.wordpress.android.util.config import org.wordpress.android.BuildConfig -import org.wordpress.android.annotation.FeatureInDevelopment +import org.wordpress.android.annotation.Feature +import org.wordpress.android.util.config.ConsolidatedMediaPickerFeatureConfig.Companion.CONSOLIDATED_MEDIA_PICKER_REMOTE_FIELD import javax.inject.Inject /** * Configuration of the Consolidated media picker */ -@FeatureInDevelopment +@Feature(CONSOLIDATED_MEDIA_PICKER_REMOTE_FIELD, true) class ConsolidatedMediaPickerFeatureConfig @Inject constructor(appConfig: AppConfig) : FeatureConfig( appConfig, - BuildConfig.CONSOLIDATED_MEDIA_PICKER -) + BuildConfig.CONSOLIDATED_MEDIA_PICKER, + CONSOLIDATED_MEDIA_PICKER_REMOTE_FIELD +) { + companion object { + const val CONSOLIDATED_MEDIA_PICKER_REMOTE_FIELD = "consolidated_media_picker_enabled" + } +} diff --git a/WordPress/src/main/java/org/wordpress/android/util/config/MySiteImprovementsFeatureConfig.kt b/WordPress/src/main/java/org/wordpress/android/util/config/MySiteImprovementsFeatureConfig.kt new file mode 100644 index 000000000000..c3dda5b697b4 --- /dev/null +++ b/WordPress/src/main/java/org/wordpress/android/util/config/MySiteImprovementsFeatureConfig.kt @@ -0,0 +1,15 @@ +package org.wordpress.android.util.config + +import org.wordpress.android.BuildConfig +import org.wordpress.android.annotation.FeatureInDevelopment +import javax.inject.Inject + +/** + * Configuration of the my site infrastructure improvements + */ +@FeatureInDevelopment +class MySiteImprovementsFeatureConfig +@Inject constructor(appConfig: AppConfig) : FeatureConfig( + appConfig, + BuildConfig.MY_SITE_IMPROVEMENTS +) diff --git a/WordPress/src/main/java/org/wordpress/android/viewmodel/activitylog/ActivityLogViewModel.kt b/WordPress/src/main/java/org/wordpress/android/viewmodel/activitylog/ActivityLogViewModel.kt index 0a0293451109..d140ef1a7ee7 100644 --- a/WordPress/src/main/java/org/wordpress/android/viewmodel/activitylog/ActivityLogViewModel.kt +++ b/WordPress/src/main/java/org/wordpress/android/viewmodel/activitylog/ActivityLogViewModel.kt @@ -21,6 +21,7 @@ import org.wordpress.android.ui.activitylog.list.ActivityLogListItem.Footer import org.wordpress.android.ui.activitylog.list.ActivityLogListItem.Header import org.wordpress.android.ui.activitylog.list.ActivityLogListItem.Loading import org.wordpress.android.util.AppLog +import org.wordpress.android.util.config.ActivityLogFiltersFeatureConfig import org.wordpress.android.viewmodel.ResourceProvider import org.wordpress.android.viewmodel.ScopedViewModel import org.wordpress.android.viewmodel.SingleLiveEvent @@ -33,6 +34,7 @@ class ActivityLogViewModel @Inject constructor( private val activityLogStore: ActivityLogStore, private val rewindStatusService: RewindStatusService, private val resourceProvider: ResourceProvider, + private val activityLogFiltersFeatureConfig: ActivityLogFiltersFeatureConfig, @param:Named(UI_THREAD) private val uiDispatcher: CoroutineDispatcher ) : ScopedViewModel(uiDispatcher) { enum class ActivityLogListStatus { @@ -53,6 +55,10 @@ class ActivityLogViewModel @Inject constructor( val eventListStatus: LiveData get() = _eventListStatus + private val _dateRangePickerVisibility = MutableLiveData() + val dateRangePickerVisibility: LiveData + get() = _dateRangePickerVisibility + private val _showRewindDialog = SingleLiveEvent() val showRewindDialog: LiveData get() = _showRewindDialog @@ -116,6 +122,8 @@ class ActivityLogViewModel @Inject constructor( reloadEvents(done = true) requestEventsUpdate(false) + _dateRangePickerVisibility.value = activityLogFiltersFeatureConfig.isEnabled() + isStarted = true } diff --git a/WordPress/src/main/java/org/wordpress/android/viewmodel/posts/PostListViewModel.kt b/WordPress/src/main/java/org/wordpress/android/viewmodel/posts/PostListViewModel.kt index ba20cd0e63ce..31bd86d90471 100644 --- a/WordPress/src/main/java/org/wordpress/android/viewmodel/posts/PostListViewModel.kt +++ b/WordPress/src/main/java/org/wordpress/android/viewmodel/posts/PostListViewModel.kt @@ -395,8 +395,7 @@ class PostListViewModel @Inject constructor( featuredImageUrl, photonWidth, photonHeight, - !SiteUtils.isPhotonCapable(connector.site), - connector.site.isPrivateWPComAtomic + SiteUtils.getAccessibilityInfoFromSite(connector.site) ) fun updateAuthorFilterIfNotSearch(authorFilterSelection: AuthorFilterSelection): Boolean { diff --git a/WordPress/src/main/res/drawable/ic_layout_selection_check_24dp.xml b/WordPress/src/main/res/drawable/ic_layout_selection_check_24dp.xml new file mode 100644 index 000000000000..e4287dc460cc --- /dev/null +++ b/WordPress/src/main/res/drawable/ic_layout_selection_check_24dp.xml @@ -0,0 +1,6 @@ + + + + diff --git a/WordPress/src/main/res/drawable/ic_layout_selection_overlay_153dp.xml b/WordPress/src/main/res/drawable/ic_layout_selection_overlay_153dp.xml deleted file mode 100644 index 65a797a638ba..000000000000 --- a/WordPress/src/main/res/drawable/ic_layout_selection_overlay_153dp.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - diff --git a/WordPress/src/main/res/drawable/ic_scan_alt_white_24dp.xml b/WordPress/src/main/res/drawable/ic_scan_alt_white_24dp.xml new file mode 100644 index 000000000000..23bfd937c8de --- /dev/null +++ b/WordPress/src/main/res/drawable/ic_scan_alt_white_24dp.xml @@ -0,0 +1,9 @@ + + + diff --git a/WordPress/src/main/res/drawable/img_illustration_email_alert_120dp.xml b/WordPress/src/main/res/drawable/img_illustration_email_alert_120dp.xml deleted file mode 100644 index 240923e34c09..000000000000 --- a/WordPress/src/main/res/drawable/img_illustration_email_alert_120dp.xml +++ /dev/null @@ -1,270 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/WordPress/src/main/res/layout-land/modal_layout_picker_titlebar.xml b/WordPress/src/main/res/layout-land/modal_layout_picker_titlebar.xml index ac5f485007b6..6ed1bdfa8843 100644 --- a/WordPress/src/main/res/layout-land/modal_layout_picker_titlebar.xml +++ b/WordPress/src/main/res/layout-land/modal_layout_picker_titlebar.xml @@ -11,7 +11,7 @@ android:backgroundTint="@color/transparent" android:contentDescription="@string/navigate_back_desc" android:src="@drawable/ic_arrow_left_white_24dp" - android:tint="?attr/colorControlNormal" /> + android:tint="?attr/colorOnSurface" /> diff --git a/WordPress/src/main/res/layout/activity_log_list_fragment.xml b/WordPress/src/main/res/layout/activity_log_list_fragment.xml index 0d70dc379e1c..20d0a7a07bd9 100644 --- a/WordPress/src/main/res/layout/activity_log_list_fragment.xml +++ b/WordPress/src/main/res/layout/activity_log_list_fragment.xml @@ -5,10 +5,19 @@ android:layout_width="match_parent" android:layout_height="match_parent"> + + + android:layout_height="match_parent" + android:layout_below="@id/date_range_picker"> diff --git a/WordPress/src/main/res/layout/home_page_picker_fragment.xml b/WordPress/src/main/res/layout/home_page_picker_fragment.xml index 2c08e8b98c9c..c7aaa3da1882 100644 --- a/WordPress/src/main/res/layout/home_page_picker_fragment.xml +++ b/WordPress/src/main/res/layout/home_page_picker_fragment.xml @@ -69,7 +69,7 @@ android:layout_gravity="center|top" android:paddingStart="@dimen/hpp_card_padding" android:paddingEnd="0dp" - android:paddingBottom="@dimen/toolbar_height" + android:paddingBottom="@dimen/toolbar_content_offset" android:background="?attr/categoriesBackground" android:clipToPadding="false" android:descendantFocusability="beforeDescendants" diff --git a/WordPress/src/main/res/layout/home_page_picker_item.xml b/WordPress/src/main/res/layout/home_page_picker_item.xml index a19e7f2c6ea3..d63e23686f42 100644 --- a/WordPress/src/main/res/layout/home_page_picker_item.xml +++ b/WordPress/src/main/res/layout/home_page_picker_item.xml @@ -1,10 +1,12 @@ @@ -18,10 +20,12 @@ diff --git a/WordPress/src/main/res/layout/home_page_picker_titlebar.xml b/WordPress/src/main/res/layout/home_page_picker_titlebar.xml index 3b4a0325bd4a..1c7cb36355d4 100644 --- a/WordPress/src/main/res/layout/home_page_picker_titlebar.xml +++ b/WordPress/src/main/res/layout/home_page_picker_titlebar.xml @@ -11,7 +11,7 @@ android:backgroundTint="@color/transparent" android:contentDescription="@string/navigate_back_desc" android:src="@drawable/ic_arrow_left_white_24dp" - android:tint="?attr/colorControlNormal" /> + android:tint="?attr/colorOnSurface" /> @@ -17,10 +19,12 @@ diff --git a/WordPress/src/main/res/layout/modal_layout_picker_titlebar.xml b/WordPress/src/main/res/layout/modal_layout_picker_titlebar.xml index c1039c8c4529..2548148cbe8d 100644 --- a/WordPress/src/main/res/layout/modal_layout_picker_titlebar.xml +++ b/WordPress/src/main/res/layout/modal_layout_picker_titlebar.xml @@ -11,7 +11,7 @@ android:backgroundTint="@color/transparent" android:contentDescription="@string/navigate_back_desc" android:src="@drawable/ic_arrow_left_white_24dp" - android:tint="?attr/colorControlNormal" /> + android:tint="?attr/colorOnSurface" /> + + + + + + + + + @@ -28,9 +29,16 @@ app:layout_constraintTop_toBottomOf="@+id/progress_bar" app:layout_constraintVertical_bias="0" /> - - - + - - - - - - - - - - diff --git a/WordPress/src/main/res/values-ar/strings.xml b/WordPress/src/main/res/values-ar/strings.xml index 06d3e0aa80bb..23fb13058a8d 100644 --- a/WordPress/src/main/res/values-ar/strings.xml +++ b/WordPress/src/main/res/values-ar/strings.xml @@ -1,18 +1,72 @@ + تخطي + اختيار + اختر تخطيط الصفحة الرئيسية المفضَّل لديك. يمكنك تخصيصه أو تغييره لاحقًا. + اختيار تصميم + أضف تصنيفاً جديداً + التصنيفات + لم يتم التعيين + التصنيفات + إضافة تصنيف + التخطيطات غير متوفرة بسبب خطأ + التخطيطات غير متوفرة دون اتصال انترنت + أخبار الويب + باميلا نجوين + الطهي + الفن + زراعة الحدائق + الموسيقى + السياسة + أفضل عشرة مقاهي + أفضل المعجبين بالعالم + المتاحف في لندن + كرة القدم + موسيقى Rock n\' Roll الأسبوعية + الحصول على الإلهام + مرحبًا بك في أداة إنشاء مواقع الويب الأكثر رواجًا في العالم. + باستخدام المحرر الضخم والقوي، يمكنك النشر أثناء التنقّل. + شاهد التعليقات والإشعارات في الوقت الفعلي. + مواقع لمتابعتها + فشل تحميل الوسائط + نعمل بجد لإضافة المزيد من المكوِّنات مع كل إصدار. + لم يتم دعم \"%s\" بالكامل زر المساعدة تحرير باستخدام محرر الويب اختيار الصور + إنشاء مقالة قصة + تُنشر المقالة كمقالة جديدة على موقعك حتى لا يفوِّت جمهورك أي شيء. + اجمع بين الصور ومقاطع الفيديو والنصوص لإنشاء مقالات قصة جذابة وقابلة للنقر سيحبها زائروك. + مقالات القصة لا تختفي + تتوافر القصص الآن للجميع + مثال لعنوان قصة + كيفية إنشاء مقالة قصة + يحق لك الوصول مبكرًا إلى مقالات القصص، ويسعدنا أن نجربها. + مقدمة لمقالات القصص + تم إنشاء صفحة فارغة + تم إنشاء صفحة + معاينة التخطيط + ⁦%1$s⁩ تم رفض الوصول إلى صورك. لإصلاح هذا، حرِّر صلاحياتك وشغِّل ⁦%2$s⁩ و⁦%3$s⁩. + فشل إدراج الوسائط. + فشل إدراج الوسائط: %s + الاختيار من مكتبة وسائط ووردبريس رجوع البدء بواسطة + اتباع الموضوعات لاكتشاف مدونات جديدة فتح الموقع الإلكتروني + يتعر وسم هذا المرجع بأنه بريد مزعج + عدم الوسم بأنه بريد مزعج + وضع علامة مزعج + رفع وسائط بتنسيق gif + رفع وسائط المخزون + رفع الوسائط ابحث أو اكتب رابطاً تحديد عنصر أضف رابط الهاتف هذا @@ -129,14 +183,13 @@ Language: ar استبدال صورة أو فيديو استبدال الفيديو المتابعة باستخدام WordPress.com - أدخل رابط موقعك - شعار ووردبريس تم إزالة المكوّن اختيار صورة اختيار صورة أو فيديو اختيار فيديو إذا تابعت مع Google وليس لديك حساب WordPress.com بالفعل، فأنت تقوم بإنشاء حساب وتوافق على %1$sشروط الخدمة%2$s. تأكيد التسجيل + أدخل رابط موقعك الحالي بالمتابعة، أنت توافق على %1$sشروط الخدمة%2$s. سنرسل لك عبر البريد الإلكتروني رابطًا لإنشاء حسابك الجديد على WordPress.com. سنستخدم عنوان البريد الإلكتروني هذا لإنشاء حسابك الجديد على WordPress.com. @@ -150,8 +203,6 @@ Language: ar لم تشاهد البريد الإلكتروني؟ تحقّق من مجلد البريد المزعج أو البريد العشوائي. سنرسل لك عبر البريد الإلكتروني رابطًا يسجّل دخولك على الفور، دون الحاجة إلى كلمة مرور. إعادة تعيين كلمة المرور الخاصة بك - 37\% من مواقع الويب مبنية على ووردبريس. - أطلق العنان لقدرات منشئ المواقع الأكثر مرونة. إرسال الرابط عبر البريد الإلكتروني إنشاء حساب أو اكتب كلمة المرور الخاصة بك @@ -461,7 +512,6 @@ Language: ar ستتم مزامنة هذه المقالة فورًا. هل أنت جاهز للمزامنة؟ هذا النطاق غير متاح. - المقدمة -%s تعذر علينا الوصول إلى موقعك. سيتعين عليك الوصول إلى مضيفك لحل هذا الأمر. تعذر علينا الوصول إلى موقعك بسبب حدوث مشكلة في <b>شهادة SSL</b>. سيتعين عليك الوصول إلى مضيفك لحل هذا الأمر. @@ -1286,7 +1336,6 @@ Language: ar تحرير الصورة اختيار الموقع حساب جديد - تسجيل الدخول إذا كنت بحاجة إلى مزيد من المساحة، ففكر في ترقية خطة ووردبريس الخاصة بك. تم تسجيل الدخول كـ تفاصيل الشخص @@ -2221,7 +2270,6 @@ Language: ar تم نسخ سجلات التطبيق إلى الحافظة مقالات جديدة حدث خطأ أثناء نسخ النص إلى الحافظة - مواقع قد تحوز إعجابك هذا الموقع فارغ جاري رفع المقالة %1$d من الشهور @@ -2343,7 +2391,6 @@ Language: ar التغيرات المحلية إعدادات المقالة تمت الموافقة - مطلوب ترخيص هذه المدونة مخفية و لايمكن تحميلها . قم بتفعيلها مرة اخرى من الإعدادات وأعد المحاولة. حدث خطأ اثناء إنشاء قاعدة بيانات التطبيق. حاول إعادة تنصيب التطبيق. سلة المهملات @@ -2366,6 +2413,7 @@ Language: ar إلغاء التحرير غير قادر على إزالة هذا الموضوع غير قادر على إضافة هذا الموضوع + التخويل مطلوب مشاركة الرابط يتم الآن جلب المقالات … رد diff --git a/WordPress/src/main/res/values-bg/strings.xml b/WordPress/src/main/res/values-bg/strings.xml index 6dc094a03946..06745b9fbb98 100644 --- a/WordPress/src/main/res/values-bg/strings.xml +++ b/WordPress/src/main/res/values-bg/strings.xml @@ -663,7 +663,6 @@ Language: bg Нови публикации Качване Възникна грешка при копиране на текста в clipboard-а - Блогове които бихте харесали Логовете на приложението бяха копирани в буфера за обмен на данни Видеа Ден diff --git a/WordPress/src/main/res/values-cs/strings.xml b/WordPress/src/main/res/values-cs/strings.xml index 22d128f6ccf2..9651adec0374 100644 --- a/WordPress/src/main/res/values-cs/strings.xml +++ b/WordPress/src/main/res/values-cs/strings.xml @@ -419,7 +419,6 @@ Language: cs_CZ Upravit fotku Vybrat stránku Nový účet - Přihlášení Přihlášen jako Osobní profil Detail souboru @@ -1348,7 +1347,6 @@ Language: cs_CZ Aplikační protokoly byly zkopírovány do schránky Tento web je prázdný Nové příspěvky - Stránky které by se vám mohly líbit Při kopírování textu do schránky nastala chyba Nahrávám příspěvek %1$d roky diff --git a/WordPress/src/main/res/values-cy/strings.xml b/WordPress/src/main/res/values-cy/strings.xml index d467024f85b7..42b8c884594e 100644 --- a/WordPress/src/main/res/values-cy/strings.xml +++ b/WordPress/src/main/res/values-cy/strings.xml @@ -422,7 +422,6 @@ Language: cy_GB Cofnodion y rhaglen wedi\'u copïo i\'r clipfwrdd Cofnodion newydd Digwyddodd gwall wrth gopïo testun i\'r clipfwrdd - Gwefannau fyddech chi\'n eu hoffi %1$d mis Blwyddyn %1$d blwyddyn diff --git a/WordPress/src/main/res/values-da/strings.xml b/WordPress/src/main/res/values-da/strings.xml index 2cb09b1f779d..b16136acba0d 100644 --- a/WordPress/src/main/res/values-da/strings.xml +++ b/WordPress/src/main/res/values-da/strings.xml @@ -105,7 +105,6 @@ Language: da_DK Nye indlæg Log-filerne er kopieret til udklipsholderen Der skete en fejl under kopieringen af teksten til udklipsholderen - Websteder du måske vil synes om sekunder siden et minut siden En dag diff --git a/WordPress/src/main/res/values-de/strings.xml b/WordPress/src/main/res/values-de/strings.xml index e58ca2dcde5c..ba225e4a92d7 100644 --- a/WordPress/src/main/res/values-de/strings.xml +++ b/WordPress/src/main/res/values-de/strings.xml @@ -1,6 +1,6 @@ + <b>Johan Brandt</b> responded to your post + You received <b>50 likes</b> on your site today + <b>Madison Ruiz</b> liked your post + Scrollable block menu opened. Select a block. + Scrollable block menu closed. + Skip + Choose + Pick your favourite homepage layout. You can customise or change it later. + Choose a design + Tap retry when you\'re back online, or create a blank page using the button below. + Layouts not available while offline + Tap retry or create a blank page using the button below. + Layouts not available due to an error + Add Category + Add New Category + Categories + Not set + Categories + Museums in London + The World\'s Best Fans + My Top Ten Cafés + Politics + Music + Gardening + Football + Cooking + Art + Rock ‘n’ Roll Weekly + Web News + Pamela Nguyen + I am so inspired by photographer Cameron Karsten’s work. I will be trying these techniques on my next + Getting Inspired + Follow your favourite sites and discover new reads. + Watch your audience grow with in-depth analytics. + See comments and notifications in real time. + With the powerful editor, you can post on the go. + Welcome to the world’s most popular website builder. + Media loading failed + Sites to follow We are working hard to add more blocks with each release. \'%s\' is not fully supported Help button @@ -20,7 +59,6 @@ Language: en_GB How to create a story post You\'ve got early access to Story Posts and we\'d love for you to give it a try. Introducing Story Posts - An error occurred while fetching the layouts Blank page created Page created Layout Preview @@ -158,8 +196,7 @@ Language: en_GB Choose image or video Choose image Block removed - WordPress Logo - Enter your site address + Enter your existing site address Continue with WordPress.com Signup confirmation If you continue with Google and don\'t already have a WordPress.com account, you are creating an account and you agree to our %1$sTerms of Service%2$s. @@ -181,8 +218,6 @@ Language: en_GB Or type your password Create account Send link by email - Unlock the power of the most flexible website builder. - 37\% of the web is built on WordPress. Reset your password There was a problem handling the request. Please try again later. Give your site a name that reflects its personality and topic. First impressions count! @@ -487,7 +522,6 @@ Language: en_GB This post will be synced immediately. Ready to Sync? This domain is unavailable - Introduction -%s We were unable to access your site. You will need to reach out to your host to resolve this. We were unable to access your site because of a problem with the <b>SSL Certificate</b>. You will need to reach out to your host to resolve this. @@ -1313,7 +1347,6 @@ Language: en_GB Edit Photo Pick site New account - Login Logged in as Person detail File details @@ -2247,7 +2280,6 @@ Language: en_GB Application logs have been copied to the clipboard This site is empty New posts - Sites you may like An error occurred while copying text to clipboard Uploading post %1$d years diff --git a/WordPress/src/main/res/values-es-rCL/strings.xml b/WordPress/src/main/res/values-es-rCL/strings.xml index 247bd255b33d..e9d693764c57 100644 --- a/WordPress/src/main/res/values-es-rCL/strings.xml +++ b/WordPress/src/main/res/values-es-rCL/strings.xml @@ -485,7 +485,6 @@ Language: es_CL Comentario marcado como no spam Comentario marcado como spam Cuenta nueva - Iniciar Sesión Comentario aprobado Comentario eliminado Me gusta el comentario @@ -1421,7 +1420,6 @@ Language: es_CL Los informes de la aplicación se han copiado al portapapeles Nuevas entradas Ocurrió un error al copiar el texto en el portapapeles - Sitios que te podrían gustar Este sitio está vacío Subiendo entrada Obteniendo temas… diff --git a/WordPress/src/main/res/values-es-rCO/strings.xml b/WordPress/src/main/res/values-es-rCO/strings.xml index 57802f345a9e..578788760f6b 100644 --- a/WordPress/src/main/res/values-es-rCO/strings.xml +++ b/WordPress/src/main/res/values-es-rCO/strings.xml @@ -1,24 +1,1570 @@ + Se ha abierto el menú de bloques desplazable. Selecciona un bloque. + Se ha cerrado el menú de bloques desplazable. + Omitir + Elegir + Elige tu diseño de página de inicio favorito. Puedes personalizarlo o cambiarlo más tarde. + Elige un diseño + Toca «Reintentar» cuando vuelvas a estar en línea o crea una página en blanco usando el botón a continuación. + Los diseños no están disponibles sin conexión + Toca «Reintentar» o crea una página en blanco usando el botón a continuación. + Los diseños no están disponibles debido a un error + Añadir categoría + Añadir una nueva categoría + Categorías + No establecido + Categorías + Museos en Londres + Los mejores fanáticos del mundo + Mis diez mejores cafés + Política + Música + Jardinería + Fútbol + Cocina + Arte + Rock n\' roll semanal + Noticias web + Pamela Nguyen + Estoy muy inspirado por el trabajo del fotógrafo Cameron Karsten. Probaré estas técnicas en mi próximo + Inspírate + Sigue tus sitios favoritos y descubre nuevas lecturas. + Observa cómo crece tu audiencia con analíticas avanzadas. + Con el potente editor puedes publicar sobre la marcha. + Bienvenido al maquetador web más popular del mundo. + La carga del medio ha fallado + Sitios a seguir + Estamos trabajando duro para añadir más bloques con cada versión. + «%s» no es totalmente compatible + Botón de ayuda + Editar usando el editor web + Elegir las imágenes + Crear una entrada de historia + Son publicados como una nueva entrada de blog en tu sitio para que tu audiencia nunca se pierda nada. + Las entradas de historias no desaparecen + Combina fotos, vídeos y texto para crear entradas de historias atractivas y accesibles que les encantarán a tus visitantes. + Ahora las historias son para todos + Título de la entrada de historia + Cómo crear una entrada de historias + Tienes acceso anticipado a las entradas de historias y nos encantaría que las probaras. + Presentación de las entradas de historias + Página en blanco creada + Página creada + Vista previa del diseño + %1$s ha denegado el acceso a tus fotos. Para corregirlo, edita tus permisos y activa %2$s y %3$s. + Inserción del medio fallida. + Ha fallado la inserción del medio: %s + Elige desde la biblioteca de medios de WordPress + Volver + Primeros pasos + Sigue temáticas y descubre nuevos blogs + Por + Este referido no puede ser marcado como spam + Desmarcar como spam + Marcar como spam + Abrir la web + Subiendo medios GIF + Subiendo medios de inventarios + Subiendo medios + Seleccionar un elemento + Busca o escribe la URL + Añadir este enlace de teléfono + Añadir este enlace + Añadir este enlace de correo electrónico + «No hay conexión a Internet.\nNo están disponibles las sugerencias.» + Negrita + Moderno + Alegre + Fuerte + Clásico + Casual + Tienes que conceder permisos de grabación de audio a la aplicación para grabar vídeo + %s + %s seleccionado + Obtener un enlace de acceso por correo electrónico + Vaya, no encontramos una cuenta de WordPress.com conectada a esta dirección de correo electrónico. + Micrófono + No se puede mostrar este comentario + Navegar por elementos Informar de esta entrada Ángulo Bienvenido al Lector. Descubre millones de blogs a tu alcance. Ha ocurrido un error interno del servidor Tu acción no está permitida %1$s elementos más + Seleccionar un diseño + Nota: el diseño de la columna puede variar entre temas y tamaños de pantalla + Crear una entrada o historia + Crear una página + Crear una entrada + \@string/contact_support + Puede que te guste + Ocultar + Leyenda del vídeo. Vacía + Actualiza el título. + Pegar el bloque después + Título de la página. %s + Título de la página. Vacío + Ha ocurrido un error al reproducir tu vídeo + Este dispositivo no es compatible con la API de Camera2. + No se ha podido guardar el vídeo + Error al guardar la imagen + Operación en progreso, inténtalo de nuevo + No se ha podido encontrar la diapositiva de la historia + Ver el almacenamiento + Tenemos que guardar la historia en tu dispositivo antes de que pueda ser publicada. Revisa tus ajustes de almacenamiento y elimina archivos para ganar espacio. + Insuficiente almacenamiento en el dispositivo + Intenta volver a guardar o borrar las diapositivas y, después, intenta volver a publicar tu historia. + No se han podido guardar %1$d diapositivas + No se ha podido guardar 1 diapositiva + Gestionar + %1$d diapositivas necesitan una acción + 1 diapositiva necesita una acción + No se ha podido subir «%1$s» + No se ha podido subir «%1$s» + Publicado «%1$s» + Subiendo «%1$s»… + Quedan %1$d diapositivas + Queda 1 diapositiva + varias historias + Guardando «%1$s»… + Sin título + Descartar + La entrada de tu historia no se guardará como borrador. + ¿Descartar la entrada de la historia? + Borrar + Esta diapositiva aún no ha sido guardada. Si borras esta diapositiva, perderás cualquier edición que hayas hecho. + Esta diapositiva será eliminada de tu historia. + ¿Borrar la diapositiva de la historia? + Borrar la diapositiva + Cambiar el color del texto + Cambiar la alineación del texto + con error + seleccionado + sin seleccionar + Diapositiva + Reintentar + Guardado + Cerrar + Siguiente + Hecho + Compartir con + COMPARTIR + Guardado en fotos + Reintentar + Guardado + Guardando + Flash + Girar + Sonido + Texto + Más + Pegatinas + Flash + Girar la cámara + Capturar + Vista previa + Crear una página + Crear una página en blanco + Empieza eligiendo entre una amplia variedad de diseños de página prefabricados. O simplemente empieza con una página en blanco. + Elegir un diseño + Pon un título a tu historia + Crear una entrada o historia + Crear una entrada, página o historia + Toca crear %1$s. %2$s Después selecciona <b>Entrada del blog</b> + Elegir el dispositivo + Entrada de la historia + Para la edición de los iconos del sitio en sitios WordPress autoalojados se necesita el plugin Jetpack. + No se ha podido encontrar el salto de página enlazado + No se puede subir el archivo.\nSe ha superado la cuota de almacenamiento. + Cuota de almacenamiento superada + Añadir un archivo + Reemplazar el vídeo + Reemplazar la imagen o vídeo + Elegir un vídeo + Elegir una imagen o vídeo + Elegir una imagen + Bloque eliminado + Introduce la dirección de tu sitio existente + Continuar con WordPress.com + Confirmación del registro + Si continúas con Google y aún no tienes una cuenta de WordPress.com, crearás una cuenta y aceptas nuestros %1$stérminos del servicio%2$s. + Si continúas, aceptas nuestros %1$stérminos del servicio%2$s. + Te enviaremos por correo electrónico un enlace de registro para crear tu nueva cuenta de WordPress.com. + Usaremos esta dirección de correo electrónico para crear tu nueva cuenta de WordPress.com. + Te hemos enviado por correo electrónico un enlace de registro para crear tu nueva cuenta de WordPress.com. Comprueba tu correo electrónico en este dispositivo y toca el enlace en el correo electrónico que has recibido de WordPress.com. + Introduce la información de tu cuenta para %1$s. + o + Continuar con Google + Encuentra la dirección de tu sitio + Hecho + ¿No ves el correo electrónico? Comprueba tu carpeta de spam o correo no deseado. + Comprueba tu correo electrónico en este dispositivo y toca el enlace en el correo electrónico que has recibido de WordPress.com. + Te enviaremos por correo electrónico un enlace que te hará acceder automáticamente, sin necesidad de contraseña. + Comprobar el correo electrónico + Primeros pasos + Introduce tu dirección de correo electrónico para acceder o crear una cuenta de WordPress.com. + O escribe tu contraseña + Crear una cuenta + Enviar el enlace por correo electrónico + Restablecer tu contraseña + Ha habido un problema al gestionar la solicitud. Por favor, inténtalo de nuevo más tarde. + Dale a tu sitio un nombre que refleje su personalidad y temática. ¡Las primeras impresiones cuentan! + Configura el título de tu sitio + Toca <b>%1$s</b> para configurar un nuevo título + Al enviar esta entrada a la papelera también se descartarán los cambios locales, ¿estás seguro de que quieres continuar? + Opciones del bloque %s + Duplicar bloque + Copiar bloque + Bloque copiado + Ajustes del bloque + Bloque pegado + Bloque duplicado + Bloque cortado + Bloque copiado + El título del sitio solo puede ser cambiado por un usuario con el perfil de administrador. + El título del sitio se muestra en la barra de título de un navegador web y en la cabecera de la mayoría de los temas. + Debate + No se ha podido actualizar el título del sitio. Comprueba tu conexión de red e inténtalo nuevamente. + Cambios sin guardar + Abrir el enlace en un navegador + Navega para personalizar el degradado + Navega al selector de color personalizado + Tipo de degradado + Toca dos veces para seleccionar la opción + Personalizar el degradado + %1$s · %2$s · %3$s + Autor de la página + Usar este GIF + La miniatura del medio no se ha podido cargar + Estructura del contenido + Todos + Yo + Descartar + No establecido + Las etiquetas ayudan a los lectores diciéndoles de qué se trata la entrada. + Fecha de publicación + Añadir etiquetas + Volver + Guardar ahora + Enviar ahora + Programar ahora + Publicando en + Etiquetas + Fecha de publicación + Cancelar + Mover a borradores + Las entradas en la papelera no se pueden editar. ¿Deseas cambiar el estado de esta entrada a «borrador» para poder trabajar en ella? + ¿Mover entrada a borradores? + Elige tus intereses + Elige tus intereses + Hecho + Selecciona algunos para continuar + Publicado + En la papelera + Programada + Fecha de publicación + Lee el aviso de privacidad de CCPA + La Ley de Privacidad del Consumidor de California («CCPA») nos obliga a que proporcionemos información adicional a los residentes de California sobre las categorías de información personal que recopilamos y compartimos, dónde obtenemos esa información personal y cómo y por qué la usamos. + Aviso de privacidad para usuarios de California + Estado y visibilidad + Actualizar ahora + %1$s · %2$s + Prueba un diseño de inicio + Abrir el menú de acciones de bloques + Insertar una mención + Toca dos veces para abrir la hoja inferior con las opciones disponibles + Toca dos veces para abrir la hoja de acción con las opciones disponibles + No podemos abrir las páginas en este momento. Por favor, inténtalo de nuevo más tarde + Establecer como página de entradas + Establecer como página de inicio + «No hay disponibles usuarios que coincidan.» + «%s no es un usuario válido» + Seleccionar la página + Página de entradas + Página de inicio estática + Blog clásico + La página de inicio seleccionada y la página de entradas no pueden ser la misma. + Ha fallado la actualización de la página de inicio, comprueba tu conexión a internet + No se pueden guardar los ajustes de la página de inicio antes de que las páginas estén cargadas + No se pueden guardar los ajustes de la página de inicio + Aceptar + Ha fallado la carga de las páginas + Elige entre una página de inicio que muestre tus últimas publicaciones (blog clásico) o una página fija/estática. + Ajustes de la página de inicio + Página de inicio + Ha fallado la actualización de la página de entradas + Página de entradas actualizada correctamente + Ha fallado la actualización de la página de inicio + Página de inicio actualizada correctamente + Para establecer la página de entradas, activa «Página de inicio estática» en los ajustes del sitio + Para establecer la página de inicio, activa «Página de inicio estática» en los ajustes del sitio + Bienvenido a nuestro nuevo blog + Seleccionar un color + Toca dos veces para ir a los ajustes del color + Cuando sigas sitios, verás aquí su contenido + Saber más + Qué hay de nuevo en WordPress + Insertar %d + recortar + Fallo al cargar en el archivo, por favor, inténtalo de nuevo. + Vista previa de la miniatura de la imagen + Usar este medio + Usar este video + Elegir el medio + Elegir el video + No se ha podido seleccionar el sitio. Por favor, inténtalo de nuevo. + Continuar + Ha fallado reblog + Gestionar los sitios + Una vez que crees un sitio en WordPress.com, puedes volver a publicar el contenido que te gusta en tu propio sitio. + No hay disponibles sitios WordPress.com + Qué hay de nuevo + Copiada la dirección del enlace + Copiar la dirección del enlace + Compartir en + No se ha podido compartir + Insertar + Continuar + Copiar + Mover el bloque a la derecha desde la posición %1$s a la posición %2$s + Mover el bloque a la derecha + Mover el bloque a la izquierda desde la posición %1$s a la posición %2$s + Mover bloque a la izquierda + Toca dos veces para mover el bloque hacia la derecha + Toca dos veces para mover el bloque hacia la izquierda + Blog + Creando el escritorio + Configurar el tema + Añadiendo las características del sitio + Obteniendo la URL del sitio + Tu sitio estará listo en breve + ¡Hurra!\nCasi está hecho + Cancelar la subida + Ha habido un problema al gestionar la petición + Funciona con Tenor + Buscar en Tenor + Elegir desde Tenor + Sábado + Viernes + Jueves + Miércoles + Martes + Lunes + Domingo + Ha fallado el acceso al contenido de un sitio privado. Algunos medios pueden no estar disponibles + Accediendo al contenido de un sitio privado + No se pudo recortar y guardar la imagen, inténtalo de nuevo. + Fallo al cargar la imagen.\nPor favor, toca para volver a intentarlo. + Previsualizar la imagen + Formato de página desconocido + No hemos podido completar esta acción y no se ha enviado esta página a revisión. + No hemos podido completar esta acción y no se ha programado esta página. + No hemos podido completar esta acción y no se ha enviado esta página privada. + No hemos podido completar esta acción y no se ha publicado esta página. + No hemos podido enviar esta página a revisión, pero lo intentaremos de nuevo más tarde. + No hemos podido programar esta página, pero lo intentaremos de nuevo más tarde. + No hemos podido publicar esta página privada, pero lo intentaremos de nuevo más tarde. + No hemos podido publicar esta página, pero lo intentaremos de nuevo más tarde. + No hemos podido subir este medio y no se ha enviado esta página a revisión. + No hemos podido subir este medio y no se ha programado esta página. + No hemos podido subir este medio y no se ha publicado esta página privada. + No hemos podido subir este medio y no se ha publicado la página. + Guardaremos tu borrador cuando tu dispositivo vuelva a estar online + Publicaremos tu página privada cuando tu dispositivo vuelva a estar online. + Programaremos tu página cuando tu dispositivo vuelva a estar online. + Enviaremos tu página para revisión cuando tu dispositivo vuelva a estar online. + Publicaremos la página cuando tu dispositivo vuelva a estar online. + Página a la espera + Subiendo página + El dispositivo está desconectado. La página se guardará localmente. + Has hecho cambios no guardados en esta página + Tu página se está subiendo + La página falló al subir los medios y se ha guardado localmente + Página guardada en el dispositivo + La página se ha guardado online + Selecciona un blog para el atajo a la publicación rápida + Establecido por el ahorrador de batería + Oscuro + Claro + Apariencia + Recientemente has hecho cambios en esta página, pero no los has guardado. Elige una versión para cargar:\n\n + Lo que dice la gente + Ofrecemos una gama de servicios para ayudarte a conseguir los resultados que buscas. ¿No estás seguro de lo que necesitas o de lo que cuesta? Podemos explicarte qué servicios son los adecuados para ti y decirte nuestros honorarios. Ponte en contacto con nosotros a continuación. + Somos un pequeño equipo de profesionales con talento con una amplia gama de habilidades y experiencia. Nos encanta lo que hacemos y lo hacemos con pasión. Esperamos poder trabajar contigo. + Mensaje de advertencia + ¿Quieres trabajar con nosotros? + Walt Disney + Los visitantes querrán saber quién está al otro lado de la página. Usa este espacio para escribir sobre ti, tu sitio, tu negocio o sobre cualquier cosa que quieras. Usa las recomendaciones que aparecen a continuación para citar a otros hablando de lo mismo - con sus propias palabras. + EE.UU. + Este es un contenido de ejemplo, incluido con la plantilla, para ilustrar sus características. Elimínalo o sustitúyelo con tus propias palabras y medios. + La forma de comenzar es dejar de hablar y empezar a hacer. + Equipo + Mensaje de éxito + Estrategia + Mostrar el contenido de la entrada + Servicios + Samuel el Perro + Sally Smith + Nombre del proyecto + Puesto o título del trabajo + Porfolio + Mostrar solo el extracto + Mi porfolio presenta varios proyectos creados a lo largo de mi carrera. Mira a continuación mi información de contacto y ponte en contacto. + Enlazar a + Hablemos 👋 No dudes en contactar en la siguiente información de contacto o envía un mensaje usando el formulario. + ¡Vamos a construir algo juntos! + ¡Vamos a construir algo juntos! + Juan Pérez + J.K. Rowling + Son nuestras elecciones, Harry, las que muestran lo que realmente somos, mucho más que nuestras habilidades. + Inspiración + Ponte en contacto + Longitud del extracto (palabras) + Envíame un correo electrónico: <a href=\"mailto:correo@ejemplo.com\">correo@ejemplo.com</a> + Dr. Seuss + No llores porque se ha acabado, sonríe porque ha pasado. + PERSONALIZAR + 00000, Ciudad + Añadir un bloque de párrafo + Una breve descripción de los servicios que ofreces. + Una breve biografía sobre tu historial personal, tus logros clave o un hecho interesante. + <a href=\"mailto:correo@ejemplo.com\">correo@ejemplo.com</a> + Una descripción del proyecto y de los trabajos presentados. + (212)123–4567 + Calle Mayor, 10 + Crear una entrada + En la papelera + Programada + Publicada + La conexión de Facebook no puede encontrar ninguna página. «Divulgar» no se puede conectar con los perfiles de Facebook, solo con las páginas publicadas. + No conectado + Dirección del sitio + Me gusta + Seguimientos + Comentarios + No leído + No enviar a la papelera + Papelera + Actividad + Entradas y páginas + General + Añadir una nueva tarjeta + Añadir una nueva tarjeta de estadísticas + Usa el botón de filtro para encontrar entradas sobre temas específicos + Selecciona una etiqueta o sitio, ventana emergente + Seleccionado + Selecciona un sitio o etiqueta para filtrar entradas + Quitar el filtro actual + Gestionar temas y sitios + Acceder a WordPress.com + Accede a WordPress.com para ver las últimas entradas de los temas que sigues + Accede a WordPress.com para ver las últimas entradas de los sitios que sigues + Vista previa de la plantilla + Reemplazar el bloque actual + Añadir al final + Añadir al principio + Añadir el bloque antes + Añadir el bloque después + Añadir un tema + Seguir un sitio + Puedes seguir entradas sobre un tema específico añadiendo un tema + Mira las entradas más recientes de los sitios que sigues + Siguiendo + Filtrar + Leyenda del vídeo. %s + Editar el vídeo + Toca dos veces para seleccionar el diseño + Añadir un shortcode… + Autor de la entrada + Crear una entrada + Has escuchado todas las estadísticas de este período.\n Si vuelves a tocar, se reiniciará desde el principio. + No hay estadísticas en este período. + Actividad de publicación para %1$s + Los días con visitas %1$s para %2$s son: %2$s %3$s. Toca para más. + explora todas las estadísticas para este período + muy altas + altas + medias + bajas +   y %1$d %2$s + %1$s, %2$d %3$s + Mover la imagen hacia adelante + Mover la imagen hacia atrás + Leyenda de la galería. %s + %1$s. El valor actual es %2$s + Crear una entrada o página + Creador de la web + Ahora no + Cualquier cosa que quieras crear o compartir, te ayudaremos a hacerlo aquí mismo. + Bienvenido a WordPress + Biblioteca de fotos + Imagen no seleccionada + , seleccionada + Imagen seleccionada + Miniatura de la imagen + Entrada del blog + Añadir nueva + Publicar + Hemos hecho grandes mejoras en el editor de bloques y creemos que ¡vale la pena probarlo! Lo hemos activado para nuevas entradas y páginas, pero si quieres cambiar al editor clásico, ve a «Mi sitio > Ajustes del sitio». + Sincronizar ahora + Esta entrada se sincronizará inmediatamente. + ¿Preparado para sincronizar? + El dominio no está disponible + -%s + No hemos podido acceder a tu sitio. Tendrás que contactar con tu alojamiento para solucionarlo. + No hemos podido acceder a tu sitio debido a un problema con el <b>certificado SSL</b>. Tendrás que contactar con tu alojamiento para solucionarlo. + No hemos podido acceder a tu sitio porque necesita <b>identificación HTTP</b>. Tendrás que contactar con tu alojamiento para solucionarlo. + No hemos podido acceder en tu sitio al <b>archivo XMLRCP</b>. Tendrás que contactar con tu alojamiento para solucionarlo. + ¡Ya casi estamos! Solo necesitamos verificar tu dirección de correo electrónico conectada a Jetpack <b>%1$s</b> + Accede con las credenciales del sitio. + Accede con las credenciales del sitio %1$s + Enviar el correo electrónico de verificación + Página del sitio + Siguiendo + Me gusta + Descubrir + Guardado + Temas + Sitios + %sQ + %sC + %sT + %sB + %sM + %sk + No podemos abrir las entradas en este momento. Por favor, inténtalo de nuevo más tarde + No podemos cargar los datos para tu sitio en este momento. Por favor, inténtalo de nuevo más tarde + Biblioteca de medios de WordPress + Desagrupar + Traducir + Título: + Toca para ocultar el teclado + Toca aquí para mostrar la ayuda + Haz un vídeo + Haz una foto o un vídeo + Haz una foto + Empieza a escribir… + Tamaño + Título del plugin en la barra lateral + Mostrar la sección + Bloque %s. Este bloque tiene contenido no válido + Bloque %s. Vacío + Cortar bloque + Restablecer el bloque + Eliminar las notas + Problema al abir el video + Problema al mostrar el bloque + Título de la entrada. %s + Título de la entrada. Vacío + Pegar la URL + Bloque de salto de página. %s + Abrir los ajustes + Ninguna aplicación puede manejar esta petición. Por favor, instala un navegador web. + Navegar arriba + Mi panel de prepublicación + Información del estado de mi entrada + Mi panel de publicación de entradas + Panel de ajustes de mis documentos + Mover el bloque hacia arriba, desde la fila %1$s a la fila %2$s + Mover el bloque arriba + Mover el bloque hacia abajo, desde la fila %1$s a la fila %2$s + Mover el bloque abajo + Leyenda de la imagen. %s + Ocultar el teclado + ¡Aquí está el panel de contenido! + Icono de ayuda + Fallo al insertar los medios.\nPor favor, toca para ver las opciones. + Toca dos veces para deshacer el último cambio + Toca dos veces para alternar los ajustes + Toca dos veces para seleccionar una imagen + Toca dos veces para seleccionar un vídeo + Toca dos veces para seleccionar + Toca dos veces para rehacer el último cambio + Toca dos veces para mover el bloque hacia arriba + Toca dos veces para mover el bloque hacia abajo + Toca dos veces para editar este valor + Toca dos veces para cambiar el valor usando el control deslizante + Toca dos veces para añadir un bloque + El valor actual es %s + Contenido… + Elegir desde el dispositivo + Barra lateral de notas + Ha ocurrido un error desconocido. Por favor, inténtalo de nuevo. + Texto alternativo + AÑADIR UN VÍDEO + Añadir la URL + AÑADIR UNA IMAGEN O UN VÍDEO + AÑADIR UNA IMAGEN + AÑADIR EL BLOQUE AQUÍ + Añadir una nota + Añadir una descripción + Toca el botón «Añadir a las entradas guardadas» para guardar una entrada en tu lista. + La lista se ha cargado con %1$d elementos. + Avisos + Desactivados + Activados + Al desactivar los avisos para este sitio, se desactivarán los avisos que se muestran en la pestaña de avisos de este sitio. Puedes ajustar el tipo de aviso que ves después de activar los avisos para este sitio. + Para ver los avisos en la pestaña de avisos de este sitio, activa los avisos para este sitio. + Activar los avisos mostrados en la pestaña de avisos de este sitio + Desactivar los avisos mostrados en la pestaña de avisos de este sitio + Avisos para este sitio + Avisos para este sitio + Ahora estás usando el editor de bloques para las nuevas páginas, ¡genial! Si quieres cambiar al editor clásico, ve a «Mi sitio > Ajustes del sitio». + Ahora estás usando el editor de bloques para las nuevas entradas, ¡genial! Si quieres cambiar al editor clásico, ve a «Mi sitio > Ajustes del sitio». + Añadir imagen o video + No hemos podido enviar esta entrada a revisión, pero lo intentaremos de nuevo más tarde. + No hemos podido programar esta entrada, pero lo intentaremos de nuevo más tarde. + No hemos podido publicar esta entrada privada, pero lo intentaremos de nuevo más tarde. + No hemos podido publicar esta entrada, pero lo intentaremos de nuevo más tarde. + No hemos podido completar esta acción y no se ha enviado esta entrada a revisión. + No hemos podido completar esta acción y no se ha programado esta entrada. + No hemos podido completar esta acción y no se ha enviado esta entrada privada. + No hemos podido completar esta acción y no se ha publicado esta entrada. + No hemos podido subir este medio y no se ha enviado esta entrada a revisión. + No hemos podido subir este medio y no se ha programado esta entrada. + No hemos podido subir este medio y no se ha publicado esta entrada privada. + No hemos podido subir este medio y no se ha publicado la entrada. + No hemos podido subir este medio. + No hemos podido completar esta acción, pero lo intentaremos de nuevo más tarde. + No hemos podido completar esta acción. + No se puede previsualizar un borrador vacío + No se puede previsualizar una página vacía + No se puede previsualizar una entrada vacía + Vista previa no disponible + Error al intentar guardar la entrada antes de previsualizarla + Generando la vista previa… + Guardando… + Has hecho cambios no guardados en esta entrada + La versión desde esta aplicación + La versión desde otro dispositivo + Desde esta aplicación\nGuardado en %s\n\nDesde otro dispositivo\nGuardado en %s\n + Recientemente has hecho cambios en esta entrada, pero no los has guardado. Elige una versión para cargar:\n\n + ¿Qué versión te gustaría editar? + Borrar permanentemente + No guardaremos los últimos cambios en tu borrador. + No programaremos estos cambios. + No enviaremos estos cambios para revisión. + No publicaremos estos cambios. + Guardaremos tu borrador cuando tu dispositivo vuelva a estar online + Publicaremos tu entrada privada cuando tu dispositivo vuelva a estar online. + Programaremos tu entrada cuando tu dispositivo vuelva a estar online. + Enviaremos tu entrada para revisión cuando tu dispositivo vuelva a estar online. + Publicaremos la entrada cuando tu dispositivo vuelva a estar online. + Esta acción no puede cancelarse. Es posible que el nombre de usuario ya haya sido actualizado. + Tu nuevo nombre de usuario es %1$s + Guardando el nombre de usuario… + Cambiar el nombre de usuario + Estás cambiando tu nombre de usuario a %1$s%2$s%3$s. Cambiar tu nombre de usuario también afectará a tu perfil de Gravatar y a las direcciones de perfil de Intense Debate. Para continuar, confirma tu nuevo nombre de usuario. + ¡Cuidado! + Estás a punto de cambiar tu nombre de usuario, que actualmente es %1$s%2$s%3$s. No podrás volver a recuperar tu nombre de usuario. + Ver y cambiar los ajustes de rendimiento de Jetpack + Rendimiento y velocidad + Más + Reemplaza la búsqueda integrada en WordPress con una experiencia mejorada de búsqueda + Búsqueda mejorada + Búsqueda de Jetpack + Alojamiento de vídeo sin anuncios + Medios + Carga las páginas más rápido al permitir a Jetpack optimizar tus imágenes y archivos estáticos (como CSS y JavaScript). + Archivos estáticos más rápidos + Imágenes más rápidas + Desactivado + Activado + Acelerador de sitios + Mejora la velocidad de tu sitio al cargar solo las imágenes visibles en la pantalla. + Rendimiento + Descargas + Archivo + Descargas de archivos + Las estadísticas de descarga de archivos no se registraron antes del 28 de Junio de 2019. + Zona horaria del sitio (UTC -%s) + Zona horaria del sitio (UTC +%s) + Zona horaria del sitio (UTC) + Escritorio + Por defecto + Cerrar el diálogo + Seleccionar el tipo de vista previa + Compartir + Volver + Avanzar + «%s» programado para publicar el «%s» en tu aplicación de WordPress\n%s + Entrada programada de WordPress: «%s» + «%s» se publicará en 10 minutos + «%s» se publicará en 1 hora + «%s» ha sido publicado + Entrada programada: recordatorio de 10 minutos + Entrada programada: recordatorio de 1 hora + Entrada programada + El aviso no puede crearse cuando la fecha de publicación ha pasado. + Cuando se publique + 10 minutos antes + 1 hora antes + Desactivado + Añadir al calendario + Aviso + Fecha y hora + ¿Necesitas ayuda para encontrar el correo electrónico con el que te conectaste? + La web en esa dirección no es un sitio WordPress. Para conectarnos a él, el sitio debe tener instalado WordPress. + Por favor, introduce una dirección completa de una web, como example.com. + Accede con WordPress.com para conectar con %1$s + Visitas + Entrada + %1$s: %2$s, %3$s: %4$s + Elemento contraído + Elemento expandido + Contraer + Expandir + Gráfico actualizado. + %1$s %2$s del período: %3$s, cambio desde el período anterior - %4$s + Cargando los datos de la tarjeta seleccionada + Editor + Expandir + Cerrar + Verifica tu dirección de correo electrónico - las instrucciones se enviaron a tu correo electrónico + Verifica tu dirección de correo electrónico - las instrucciones se enviaron a %s + Cancelar + Aceptar + http(s):// + Quitar enlace + Insertar enlace + Reintentar la subida + Subiendo medios.\nPor favor, toca para ver las opciones. + Abrir enlace en una nueva ventana/pestaña + Para ver tus estadísticas accede a la cuenta de WordPress.com. + Ninguna entrada coincide con tu búsqueda + Buscar entradas + Aquí es donde la gente te encuentra en Internet. + Elige un nombre de dominio premium + Todos los planes de WordPress.com incluyen un nombre de dominio personalizado. Registra ahora tu dominio premium gratuito. + De un vistazo + Hoy + Histórico + Visitas esta semana + Por favor, accede a la aplicación WordPress para añadir un widget. + No hay ninguna red disponible + No se pudieron cargar los datos + Tipo + Color + Selecciona tu sitio + Oscuro + Claro + Color + Selecciona tu sitio + Sitio + Histórico + Visitas esta semana + Añadir widget + Está tardando más tiempo del normal recargar los detalles del plugin. Por favor, compruébalo de nuevo más tarde. + Si acabas de registrar un nombre de dominio, por favor, espera hasta que terminemos de configurarlo e inténtalo de nuevo.\n\nEn caso contrario, parece que algo fue mal y la característica del plugin podría no estar disponible para este sitio. + Estado (no disponible) + Al registrar este dominio aceptas nuestros %1$stérminos y condiciones%2$s + Comprueba tu conexión a la red e inténtalo de nuevo. + No se ha podido cargar esta página en este momento. + No se pudieron recuperar los ajustes. Algunas APIs no están disponibles para la cuenta e ID de esta aplicación OAuth. + Al configurar Jetpack aceptas nuestros %1$stérminos y condiciones%2$s + No hay ninguna conexión. La edición está desactivada. + Para volver a conectar la aplicación a tu sitio alojado, introduce aquí la nueva contraseña del sitio. + Contraseña actualizada + Actualizar contraseña + Registrando el nombre de dominio… + Selecciona la provincia + Selecciona el país + seguir + tu nuevo dominio <b>%s</b> se está configurando. ¡Tu sitio está\n dando saltos mortales de emoción! + Felicitaciones + Registrar dominio + Código postal + Provincia + Ciudad + Dirección 2 + Dirección + País + Código del país + Teléfono + Organización (opcional) + Para tu comodidad, hemos precompletado tu información de contacto\n de WordPress.com. Por favor, comprueba que es la información correcta que quieres usar para este dominio. + Información de contacto del dominio + Registrar públicamente + Registrar privadamente con protección de privacidad + Lo propietarios de dominios tienen que compartir información en una base de datos pública de todos los dominios.\n Con la protección de privacidad publicamos nuestra propia información en vez de la tuya, y te redirigiremos de forma privada cualquier comunicación dirigida a ti. + Protección de privacidad + Por favor, introduce un %s válido + Elegir dominio + Nuevo + Descartar + Pruébalo ahora + Elige qué estadísticas ver, y céntrate en los datos que más te preocupen. Toca en %1$s al fondo de las estadísticas para personalizarlas. + Gestiona tus estadísticas + Recuperando revisiones… + Fallo al insertar los medios.\nPor favor, toca para volver a intentarlo. + Tu borrador se está subiendo + Subiendo borrador + Borradores + Ocurrió un error mientras se restauraba la entrada + Retroceder a: %s + Solo ves las estadísticas más relevantes. Añade y organiza tus detalles abajo. + Social + Estadísticas anuales del sitio + Seguidores totales + No se pudieron cargar las sugerencias de dominios + Teclea una palabra clave para más ideas + No se han encontrado sugerencias + Registrar dominio + Ahora que está instalado Jetpack, solo necesitamos que lo configures. Esto solo te llevará un minuto. + Quitar de los detalles + Mover abajo + Mover arriba + Ajustes de los parámetros de las estadísticas + La entrada se está moviendo a borradores + La entrada se está restaurando + Entrada restaurada + La entrada se está enviando a la papelera + Al enviar esta entrada a la papelera también se descartarán los cambios sin guardar, ¿estás seguro de querer continuar? + Cambios locales + Mover a borradores + Cambiar a la vista de lista + Cambiar a la vista de tarjetas + No tienes ninguna entrada en la papelera + No tienes ninguna entrada en borrador + No tienes ninguna entrada programada + Aún no has publicado ninguna entrada + Por favor, accede con tu nombre de usuario y contraseña. + Por favor, accede usando tu nombre de usuario de WordPress.com en vez de tu dirección de correo electrónico. + Promedio de palabras/entrada + Total de palabras + Promedio de me gusta/entrada + Total de me gusta + Promedio de comentarios/entrada + Total de comentarios + Entradas + Año + Este año + El sitio de esta dirección no es un sitio WordPress. Para que nos podamos conectar el sitio debe usar WordPress. + Fallo al comprobar los créditos de dominio disponibles + Comprobando créditos de dominio + Registrar dominio + Para instalar plugins necesitas tener un dominio personalizado asociado a tu sitio. + Instalar plugin + Podrás personalizar la apariencia de tu sitio más adelante + Publicar el: %s + Programa para el: %s + Publicado el: %s + Programado para el: %s + Últimas semanas + Vistas medias por dia + Vistas + Período + Meses y años + Cargar más + Hoy + Mejor hora + Mejor día + Estadísticas del: + No, gracias + Más tarde + Valorar ahora + ¡Qué gusto verte de nuevo! Si estás trabajando con la aplicación nos encantaría que nos puntuases en la Google Play Store. + ¿Estás disfrutando de WordPress? + Entrada devuelta a borrador + Actividad de publicación + El sitio no se ha cargado todavía + Más entradas + Menos entradas + Puedes perder lo que llevas hecho. ¿Estás seguro de que quieres salir? + Ver los planes + Se requiere una conexión a Internet para ver los planes, así que los detalles podrían estar desactualizados. + Se requiere una conexión a Internet para ver los planes. + No podemos cargar los planes en este momento. Por favor, inténtalo de nuevo. + No se pueden cargar los planes + No hay conexión + Cambiar al editor de bloques + Cambiar al editor clásico + Hubo un problema al cargar tus datos, recarga la página e inténtalo de nuevo. + Datos no cargados + Edita las nuevas entradas y páginas con el editor de bloques + Usar editor de bloques + Editor de bloques activado + salir + %1$d de %2$d completo + Haz crecer tu audiencia + Personaliza tu sitio + Siguientes pasos + Completo (%d) + ¡Disfruta tu producto terminado! + Sube un icono del sitio + Tus visitantes verán tu icono en su navegador. Añade un icono personalizado para conseguir un aspecto profesional y refinado. + Toca en %1$s Plan %2$s para ver tu plan actual y otros planes disponibles + Toca en %1$s Añadir página %2$s para crear una nueva página. + Toca en %1$s Páginas %2$s para continuar. + Toca en %1$s Estadísticas %2$s para ver cómo está rindiendo tu sitio. + Toca en %1$s Icono de tu sitio %2$s para subir uno nuevo + Guarda en borrador y publica tu primera entrada. + Te llevaremos por los básicos sobre cómo crear y hacer crecer tu sitio. + Hemos realizado algunos cambios en tu lista de comprobación + Hemos añadido más tareas para ayudarte a hacer crecer tu audiencia. + Explorar planes + Aprende sobre las herramientas de marketing y SEO de nuestros planes de pago. + Activar compartir entradas + Comparte automáticamente las nuevas entradas en tus cuentas de medios sociales. + Configura fuentes, añade imágenes, y más. + Crea una nueva página + Añade una página con contenido clave - una página «Acerca de» es un gran comienzo. + Revisa las estadísticas de tu sitio + Mantente al día sobre el rendimiento de tu sitio. + Explorar temas + Explora docenas de opciones de diseño y descubre el que se ajuste a ti. + Quitar los siguiente pasos ocultará todas las visitas guiadas de este sitio. Esta acción es irreversible. + Quitar los siguientes pasos + Quitar esto + Enhorabuena por completar tu lista. Un trabajo bien hecho. + ¡Todas las tareas están completas! + Saltar tarea + contraer + expandir + Recordatorio + Elige el siguiente periodo + Elige el periodo anterior + %1$d%% de visitas + Hora más popular + %1$s (%2$s%%) + +%1$s (%2$s%%) + Mostrando la vista previa + Vaciar + Parece que tienes una conexión lenta. Si no ves tu nuevo sitio en la lista, inténtalo actualizando. + Cancelar el asistente de creación de sitios + Estamos creando tu nuevo sitio + Hubo un problema + Creación de un sitio + Crear sitio + Buscar dominios + Aquí es donde la gente te encontrará en Internet. + Selecciona un nombre de dominio para tu sitio + No hay direcciones disponibles que coincidan con tu búsqueda + Error durante la comunicación con el servidor. Inténtalo de nuevo + Hubo un problema + Hubo un problema + Esto nos ayuda a hacer recomendaciones. Pero no tienes que estar siempre ahí; ¡los sitios evolucionan! + Cuéntanos qué tipo de sitio te gustaría crear + ¡Se ha creado tu sitio! + %1$d de %2$d + Crear sitio + Sugerencias actualizadas + No se ha podido seleccionar el sitio auto-hospedado que acabas de añadir. + Conflicto de versiones + Activa los informes de errores automáticos para ayudarnos a mejorar el rendimiento de la app. + Informes de errores + Deshacer + Versión web descartada + Versión local descartada + Actualizando contenido + Descartar Web + Descartar local + Local\nGuardado el %s\n\nWeb\nGuardado el %s\n + Este contenido tiene dos versiones en conflicto. Selecciona qué versión quieres descartar.\n + Resolver conflicto de sincronización + No hay datos en este periodo + Eliminar la ubicación de los medios + No podemos abrir las estadísticas en este momento. Por favor, inténtalo de nuevo más tarde + Algunos medios fallan al cargar debido a un error de red. + Ningún medio coincide con tu búsqueda + ¡Busca para encontrar GIF para añadir a tu biblioteca de medios! + Vistas + Autor + Autores + Vistas + Buscar término + Buscar términos + Vistas + Título + Videos + Vistas + País + Paises + Clics + Enlace + Clics + Vistas + Referente + Referentes + Entradas y páginas + Ruta + LinkedIn + Google+ + Tumblr + Twitter + Facebook + Ver más + Compartir entrada + Crear entrada + Han pasado %1$s desde que se publicó %2$s. Así es como ha funcionado la entrada hasta ahora: + Han pasado %1$s desde que se publicó %2$s. Pon la bola a rodar y aumenta las vistas de las entradas compartiendo tu entrada: + Aún no has publicado ninguna entrada. Una vez que empieces a publicar, el resumen de tu última entrada aparecerá aquí: + Etiquetas y categorías + Histórico + %1$s - %2$s + Seguidores + Servicio + %1$s | %2$s + Vistas + Título + Vistas + Título + Comentarios + Título + Autor + Entradas y páginas + Autores + Desde + Seguidor + Total %1$s seguidores: %2$s + Correo electrónico + WordPress.com + Gestionar datos + Aún no se han añadido impresiones + Aún no hay datos + Menú de depuración + Cambiando contraseña… + Tu contraseña debe tener al menos seis caracteres de longitud. Para hacerla más fuerte, use letras mayúsculas y minúsculas, números y símbolos como ! \" ? $ % ^ & ). + Contraseña cambiada con éxito + Cambiar contraseña + Nombre + (sin título) + Vista previa HTML + Vista previa visual + Revisión + Anterior + Siguiente + %1$s utilizado + Por favor, introduce un sitio WordPress WordPress.com o alojado conectado a Jetpack + Cargando revisión + Revisión cargada + Cargar + Entrada creada el %1$s a las %2$s + Página creada el %1$s a las %2$s + Aún no hay histórico + Cuando haces cambios a tu entrada podrás ver aquí el histórico + Cuando haces cambios a tu página podrás ver aquí el histórico + Avatar del usuario + Tamaño completo + Grande + Mediano + Miniatura + Historia + La página seleccionada no está disponible + Pendiente de revisión + No tienes ninguna página en la papelera + No tienes ninguna página programada + No tienes ninguna página en probador + Todavía no has publicado ninguna página + Buscar páginas + Ninguna página coincide con tu búsqueda + Borrar permanentemente + Mover a la papelera + Mover a borradores + Hacer superior + Ver + En la papelera + Programada + Borradores + Publicadas + Hemos hecho demasiados intentos para enviar un código de verificación por SMS - tómate un descanso y solicita uno nuevo dentro de un minuto. + No hay ninguna cuenta de WordPress.com que coincida con esta cuenta de Google. + Ningún sitio coincide con tu búsqueda + Ningún sitio coincide con tu búsqueda + La página superior ha cambiado + La página se ha borrado permanentemente + La página se ha programado + La página se ha publicado + La página se ha enviado a la papelera + La página se ha movido a borradores + Nivel superior + ¿Estás seguro de querer borrar la página %s? + Hubo un problema al cambiar la página superior + Hubo un problema al cambiar el estado de la página + Hubo un problema al borrar la página + Hacer superior + toca aquí + Crea tu sitio + Pon tu sitio en marcha. + Ver tu sitio + Toca en %1$s Ver sitio %2$s para previsualizar tu sitio + Comparte tu sitio + Toca en %1$s Compartir %2$s para continuar + Toca en %1$s Conexiones %2$s para añadir tus cuentas de medios sociales + Conecta a tus cuentas de medios sociales - tu sitio compartirá automáticamente las nuevas entradas. + Publica una entrada + Toca en %1$s Crear entrada %2$s para crear una nueva entrada + ¿Quieres un poco de ayuda para empezar? + Acepto + Nunca + No gracias + Sigue otros sitios + Toca en %1$s Buscar %2$s para buscar sitios con intereses similares + Toca en %1$s Lector %2$s para seguir + Descubre sitios que te inspiren, y síguelos para obtener actualizaciones cuando publiquen. + Personaliza tu sitio + Toca en %1$s Temas %2$s para seguir + Toca en %1$s Personalizar %2$s para empezar a personalizar tu sitio + Elige un tema + Toca en %1$s Temas %2$s para descubrir nuevos temas + Revisa todos nuestros temas para encontrar el que se te ajuste a la perfección. + Ir + Cancelar + Ahora no + Más + No tienes sitios + Temas no seguidos + Añade aquí temas para descubrir entradas sobre tus temáticas favoritas + Accede a la cuenta de WordPress.com que usaste para conectar Jetpack. + Reintentar + Configurar + Jetpack no se pudo instalar en este momento. + Hubo un problema + Jetpack instalado + Instalando Jetpack en tu sitio. Esto puede llevar unos minutos completarse. + Instalando Jetpack + Las credenciales de tu web no se almacenarán, y solo se utilizan para instalar Jetpack. + Instala Jetpack + Jetpack + FAQ de Jetpack + Para usar las estadísticas en tu sitio WordPress necesitas instalar el plugin Jetpack. + No hay temas que coincidan con tu búsqueda + ¿Que te gustaría encontrar? + No hay etiquetas que coincidan con tu búsqueda + No tienes ninguna etiqueta + Añade aquí las etiquetas que uses frecuentemente para poder seleccionarlas rápidamente al etiquetar tus entradas + Crea una etiqueta + No hay medios que coincidan con tu búsqueda + ¿Salir de WordPress? + Tienes cambios en entradas que no se han subido a tu sitio. Salir ahora borrará esos cambios de tu dispositivo. ¿Quieres salir de todos modos? + No hay lectores aún + No hay seguidores por correo electrónico aún + No hay seguidores aún + No hay usuarios aún + Las entradas que te gusten aparecerán aquí + Nada que te gustó aún + Ir a los siguientes + Descubre sitios + Sitios a los que no sigues + No hay me gusta aún + No hay seguidores aún + Como estás en un plan gratuito verás eventos limitados en tu actividad. + Cuando hagas cambios en tu sitio podrás ver el historial de tu actividad aquí + No hay actividad aún + Crea una entrada + Crea una página + Sube medios + No tienes ningún medio + galería de imágenes + icono del sitio + imagen del tema + imagen destacada + Descartar + foto de perfil + Dato transitorio + Correo electrónico + Por favor, introduce tu dirección de correo electrónico + Para continuar, por favor, introduce tu dirección de correo electrónico y nombre + Nuevo mensaje de \'Ayuda y soporte\' + WordPress + No establecido + Correo electrónico de contacto + Registro de la aplicación + Mis tickets + ¿Quieres rebobinar tu sitio al %1$s a las %2$s? Esto borrará todo el contenido y opciones creadas o cambiadas desde entonces. + Rebobinar sitio + Rebobinado en curso + Rebobinando a %1$s %2$s + Actualmente restaurando tu sitio + Tu sitio ha sido restaurado satisfactoriamente + Tu sitio ha sido restaurado satisfactoriamente\nRebobinado a %1$s %2$s + Tu sitio está siendo restaurado\nRebobinando a %1$s %2$s + Botón de acción del registro de actividad + Gestionado automáticamente + Guarda esta entrada y vuelve cuando quieras para leerla. Solo estará disponible en este dispositivo — las entradas guardadas no se sincronizan con otros dispositivos. + Guardar entradas para más tarde + No ha sido posible realizar la búsqueda + No se han encontrado resultados + Lee la entrada de origen + Sitios + Enlace mágico enviado + Registro por correo electrónico + Verificación del código + Credenciales de acceso + Enlace mágico enviado + Acceso por enlace mágico + Acceso mediante la dirección del sitio + Acceso mediante dirección de correo electrónico + Alternativamente: + Toca %s para guardar una entrada en tu lista. + ¡Aún no hay entradas guardadas! + Entrada guardada + Ver todas + Guardada + Guardar + Borrada de las entradas guardadas + Añadir a las entradas guardadas + Entradas guardadas + Borrado + Cambiar icono del sitio + Cancelar + Eliminar + Cambiar + No tienes permiso para editar el icono del sitio. + No tienes permiso para añadir un icono al sitio. + ¿Cómo te gustaría editar el icono? + ¿Te gustaría añadir un icono de sitio? + Icono del sitio + este sitio + Activar + ¿Activar avisos para %1$s%2$s%3$s? + Activar los avisos del sitio + Desactivar los avisos del sitio + Icono de Jetpack + Rebobinar + Evento + Icono de actividad + Registro de actividad + Actividad + Lee la política de privacidad + Usamos otras herramientas de seguimiento, incluidas algunas de terceros. Lee acerca de estas y cómo controlarlas. + Política de terceros + Esta información nos ayuda a mejorar nuestros productos, hacer que el marketing sea más relevante, personalizar tu experiencia en WordPress.com y más, tal como se detalla en nuestra política de privacidad. + Política de privacidad + Comparte información con nuestra herramienta de análisis acerca del uso que haces de los servicios mientras estás conectado a tu cuenta de WordPress.com. + Política de cookies + Ajustes de privacidad + Recopilar información + Entrada enviada + ¿No tienes una cuenta? %1$s Regístrate %2$s + Una característica del plugin requiere que el sitio esté en buen estado. + Una característica del plugin necesita que la suscripción principal del dominio esté asociada con este usuario. + Una característica del plugin necesita privilegios de administrador. + El plugin no puede instalarse en sitios VIP. + El plugin no se puede instalar debido a las limitaciones de espacio del disco. + Una característica del plugin requiere una dirección de correo electrónico verificada. + Una característica del plugin requiere que el sitio sea público. + Una característica del plugin requiere un plan business. + Una característica del plugin requiere un dominio personalizado. + Estamos haciendo la configuración final, está casi listo… + Instalando plugin… + Instalar + Instalar el primer plugin en tu sitio puede tomar hasta 1 minuto. Durante este tiempo, no podrás realizar cambios en tu sitio. + Instalar plugin + Avisos + Enviarme nuevos comentarios por correo electrónico + Semanalmente + Instantáneamente + Diariamente + Entradas nuevas + Recibe avisos de las nuevas entradas de este sitio + Enviarme nuevas entradas por correo electrónico + Todos mis sitios seguidos + Sitios seguidos + Dispositivo de lectura personal con avisos + Gente mirando gráficos y tablas + %s en %s + ¿Seguro que quieres eliminar definitivamente esta publicación? + Importante + General + Utilizar esta foto + %1$d de %2$d + Fotografías facilitadas por %s + Busca para encontrar fotografías gratuitas para añadir a tu biblioteca de medios + Búsqueda gratuita en la biblioteca de fotos + Selecciona de la biblioteca gratuita de fotos + No se puede guardar un borrador vacío + %1$s de ilimitado + Vista previa %d + Añadir %d + Crear etiqueta + navegar hacia arriba + Avisos + Abrir enlace externo + mostrar más + foto + borrar + Reproducir video + reproducir video destacado + logo del plugin + banner del plugin + elige desde medios de WordPress + abrir cámara + elige desde el dispositivo + información del perfil + reproduce + previsualizar imagen + vista previa + audio + reproducir video + papelera + reintentar + vista previa de medios, nombre de archivo %s + eliminar %s + Imagen de perfil de %s + marca de verificación + Registrarse con Google… + Se ha producido un error en la conexión a Jetpack: %s + Ya estás conectado a Jetpack + DESHACER + Cambiado a modo visual + Modo visual + Cambiado a modo HTML + Modo HTML + Vista previa + Guardar como borrador + %s TB + %s GB + %s MB + %s kB + %s B + %1$s de %2$s + Si necesitas más espacio, considera actualizar tu plan de WordPress. + Espacio utilizado + Medios + Comentario marcado como no spam + Comentario marcado como spam + Comentario borrado + Comentario restaurado + Comentario enviado a la papelera + El comentario no ha gustado + El comentario ha gustado + Comentario sin aprobar + Comentario aprobado + Detalle de notificación %s + Editar foto + Elige el sitio + Cuenta nueva + Conectado como + Detalle de la persona + Detalles del archivo + Botones de compartir + Avisos + Lector + Yo + Mi sitio + Ajustes de avisos + Ayuda y soporte + Licencia + Notas de la versión + Tu avatar se ha subido y estará disponible en breve. + Parece que has desactivado los permisos necesarios para esta característica.<br/><br/>Si deseas usarla, edita tus permisos y comprueba que <strong>%s</strong> se ha activado. + Permisos + Destacados + No puedes acceder a los ajustes compartidos porque el módulo Compartir de Jetpack está desactivado. + Módulo Compartir desactivado + Versión %s + © %1$d %2$s + Editor: %s + El sonido escogido tiene una ruta incorrecta. Por favor, elige uno distinto. + QP %s + quedan %1$d páginas / entradas + Queda 1 página + quedan %1$d páginas + quedan %1$d entradas + %1$d páginas / entradas y 1 archivo restantes + %1$d entradas y 1 archivo restantes + %1$d páginas y 1 archivo restantes + 1 entrada y 1 archivo restantes + 1 página y 1 archivo restantes + %1$d páginas / entradas y %2$d de %3$d archivos restantes + %1$d entradas y %2$d de %3$d archivos restantes + quedan %1$d páginas y %2$d de %3$d archivos + queda 1 entrada y %1$d de %2$d archivos + queda 1 página y %1$d de %2$d archivos + %1$d entradas / páginas sin subir + %1$d páginas sin subir + 1 página sin subir + %1$d entradas sin subir + 1 entrada sin subir + %1$d entradas / páginas con %2$d archivos sin subir + %1$d páginas %2$d archivos sin subir + 1 página con %1$d archivos sin subir + %1$d entradas con %2$d archivos sin subir + 1 entrada con %1$d archivos sin subir + %1$d entradas / páginas con 1 archivo sin subir + %1$d páginas con 1 archivo sin subir + 1 página con 1 archivo sin subir + %1$d entradas con 1 archivo sin subir + 1 entrada con 1 archivo sin subir + (sin título) + \@%s + %1$f, %2$f + Crear sitio + Toca para continuar. + ¡Sitio creado! + A Google le llevó demasiado tiempo responder. Puede que tengas que esperar hasta que tengas una conexión a internet más rápida. + Cambiar nombre de usuario + Teclea para obtener más sugerencias + Tu nombre de usuario actual es %1$s%2$s%3$s. Con pocas excepciones, otros solo verán tu nombre a mostrar, %4$s%5$s%6$s. + No se ha sugerido ningún nombre de usuario desde %1$s%2$s%3$s. Por favor, introduce más letras o números para obtener sugerencias. + Ocurrió un error al recuperar sugerencias de nombres de usuario. + ¿Descartas cambiar de nombre de usuario? + Descartar + Guardar + Añadir avatar + Registro con Google + Registro con correo electrónico + El correo electrónico ya existe en WordPress.com.\nAcceder. + Actualizando cuenta… + Al registrarte aceptas nuestros %1$sTérminos del servicio%2$s. + Enviando correo + Reintentar + Cerrar + Hubo algún problema al enviar el correo. Puedes reintentarlo ahora o cerrar e intentarlo más tarde. + Nombre de usuario + Siempre puedes acceder con un enlace como el que acabas de usar, pero también puedes configurar una contraseña si lo prefieres. + Contraseña (opcional) + Nombre a mostrar + Reintentar + Revertir + Hubo algún problema al actualizar tu cuenta. Puedes reintentarlo o revertir tus cambios para continuar. + Hubo algún problema al subir tu avatar. + Para crear tu nueva cuenta de WordPress.com, por favor, introduce tu dirección de correo electrónico. + Hubo algún problema al comprobar la dirección de correo. + Registro en WordPress.com + Accede con tu nombre de usuario. + Accede introduciendo la dirección de tu sitio. + Necesita actualizarse + Buscar plugins + Nuevo + Populares + Ninguna coincidencia + Ver todos + Gestionar + No ha sido posible buscar plugins + Error al instalar %s + %s instalado con éxito + Instalar + Me gusta + Añadir nuevo sitio + Crea un nuevo sitio para tu negocio, revista o blog personal; o conecta con una instalación de WordPress existente. + Para obtener avisos útiles en tu dispositivo desde tu sitio WordPress tendrás que instalar el plugin Jetpack. ¿Te gustaría configurar Jetpack? + Carga diferida de imágenes + Instalar Jetpack + Alternar texto + Tu versión de WordPress + Requiere la versión de WordPress + Actualizado por última vez + Versión + 5 estrellas + 4 estrellas + 3 estrellas + 2 estrellas + 1 estrella + Ninguno + %s descargas + %s valoraciones + Leer valoraciones + Preguntas frecuentes + Novedades + Instalación + Descripción + Ajustes + Instalado + Versión %s instalada + Versión %s + por %s + Cambiar foto + No es posible cargar plugins + Páginas del sitio + Gestiona las etiquetas de tu sitio + Guardando + Borrando + ¿Borrar permanentemente la etiqueta \'%s\'? + Ya existe una etiqueta con este nombre + Añadir nueva etiqueta + Descripción + Etiqueta + Tu sitio WordPress.com es compatible con el uso de páginas aceleradas para móviles, una iniciativa de Google que acelera enormemente la carga de las páginas en dispositivos móviles + Páginas móviles aceleradas (AMP) + No es posible cargar las zonas horarias + Aprende más sobre formatos de fecha y hora + Formato personalizado + Personalizador + Entradas por página + Elige una ciudad en tu zona horaria + Zona horaria + Formato de hora + Formato de fecha + La semana empieza el + Etiquetas + Tráfico + Borrar + Enlace externo + Icono del plugin + Web del plugin + Página del plugin en WordPress.org + ¿Estás seguro de querer borrar %1$s de %2$s?\n\nEsto desactivará el plugin y todos los archivos y datos asociados. + Borrar plugin + Borrando %s… + Desactivando %s… + Ocurrió un error al configurar el plugin: %s + Error al borrar %s + %s borrado con éxito + Error al actualizar %1$s: %2$s + Error al actualzar %s. + %s se ha actualizado correctamente + La versión %s está disponible + Actualizaciones automáticas + Activo + Inactivo + Activo + Plugins + Plugins + Abrir enlace en nueva ventana/pestaña + Enlace a + Ocurrió un error. + Por favor, facilita un código de identificación para continuar. + Por favor, vuelve a teclear tu contraseña para continuar. + Acceso detenido + Por favor, espera mientras se accede. + Acceso en progreso… + Toca para continuar. + ¡Conectado! + No se pudo iniciar el acceso desde Google. + Por favor, introduce una contraseña + Envíame un mensaje con otro código en su lugar + Hemos enviado un mensaje de texto al número de teléfono terminado en %s. Por favor, introduce el código de verificación del SMS. + Tamaño + Queda 1 archivo + Quedan %1$d de %2$d archivos + Quedan 1 entrada + Subiendo… + Escribir entrada + %d archivos subidos con éxito + , %d subido con éxito + 1 archivo subido + 1 archivo no subido + %d archivos subidos + %d archivos no subidos + Quitar de la entrada + ¿Quitamos esta imagen de la entrada? + Personalizar + Detalles del archivo + \n¿Quizás probando con otra cuenta? + Hubo algún problema al conectar con la cuenta de Google. + Cerrar + Acceder con Google. + Para seguir con esta cuenta de Google, por favor, facilita la contraseña correspondiente de WordPress.com. Solo se te pedirá una vez. + Ocurrió un error en la red. Por favor, revisa tu conexión e inténtalo de nuevo. + Quitar imagen destacada + Elegir imagen destacada Accede a WordPress.com para compartir el contenido. Introduce la dirección de tu sitio WordPress en el que quieras compartir el contenido. Error al desconectar el sitio Sitio desconectado Desconectar ¿Estás seguro de querer desconectar Jetpack del sitio? - \"Desconecta de WordPress.com\" + «Desconecta de WordPress.com» Puedes poner en lista blanca una dirección IP o series de direcciones, evitando que las bloquee Jetpack. Se aceptan IPv4 y IPv6. Para especificar un rango introduce un valor inferior y un valor superior separados por guiones. Ejemplo: 12.12.12.1–12.12.12.100 Requiere la identificación en dos pasos Relacionar cuentas usando el correo electrónico @@ -43,7 +1589,7 @@ Language: es_CO ¿Eliminar esta imagen? Detalles del documento Detalles del audio - Detalles del vídeo: + Detalles del video Detalles de la imagen Vista previa Fecha de actualización @@ -54,6 +1600,7 @@ Language: es_CO Nombre del archivo URL Texto alternativo + Conectar un sitio Luz parpadeante Vibración del dispositivo Elige sonido @@ -78,7 +1625,7 @@ Language: es_CO Vista %s para saber más No se pudo encontrar la página en el servidor No se puede publicar una página vacía - La subida de \"%s\" falló + La subida de «%s» ha fallado Los medios se han borrados. ¿Los borramos de esta entrada? Error al abrir el navegador web por defecto. Por favor, elige otra aplicación: No fue posible abrir el enlace @@ -88,11 +1635,12 @@ Language: es_CO Hubo un error al subir los medios a esta página: %s. Hubo un error al subir esta página: %s. Tu entrada se está subiendo + Subiendo medios… Página programada Entrada programada Reintentar Entrada a la espera - Subiendo \"%s\" + Subiendo «%s» Se ha perdido la conexión al servidor Mis sitios Mi sitio @@ -107,12 +1655,15 @@ Language: es_CO ¿Cuál es la dirección de mi sitio? ¿Necesitas ayuda para encontrar la dirección de tu sitio? Dirección del sitio + Introduce la dirección del sitio WordPress con el que te gustaría conectar. Ya estás conectado a WordPress.com Seguir - Introduce tu contraseña de WordPress.com + Conectar otro sitio + Introduce tu contraseña de WordPress.com. Solicitando el correo electrónico de acceso Parece que esta contraseña es incorrecta. Por favor, vuelve a comprobar tu información e inténtalo de nuevo. Solicitando un código de verificación por SMS. + Envíame un mensaje con un código en su lugar ¡Casi lo tenemos! Por favor, introduce un código de verificación desde tu aplicación Authenticator. Abrir correo electrónico Siguiente @@ -136,7 +1687,7 @@ Language: es_CO Privada Borrador Pendiente de revisión - Publicada + Publicar Cambiar ubicación Borrar ubicación No se ha podido abrir el selector de ubicación, no disponible Google Play Services @@ -165,7 +1716,7 @@ Language: es_CO Vídeo demasiado grande para subir La imagen es demasiado grande para subirla. Trata de cambiar la optimización de imágenes en los ajustes de la aplicación Audio - Vídeos + Videos Documentos Imágenes Todos @@ -192,8 +1743,8 @@ Language: es_CO Me gusta Permite que tú y tus lectores den me gusta a todos los comentarios Botones - Editar los botones \"Más\" - Un botón \"Más\" contiene un desplegable que muestra botones de compartir + Editar los botones «Más» + Un botón «Más» contiene un desplegable que muestra botones de compartir Elige qué botones se mostrarán debajo de tus entradas Usuario de Twitter Me gusta a comentarios @@ -214,7 +1765,7 @@ Language: es_CO Reconectar Desconectar Conectar - Conéctate para compartir automáticamente las entradas de tu blog en %s + Conéctate para compartir automáticamente las entradas de tu blog en %s. Divulgar en %s Cuentas conectadas Conecta con tus servicios de medios sociales favoritos para compartir automáticamente las nuevas entradas con tus amigos. @@ -260,6 +1811,7 @@ Language: es_CO La entrada falló al subir los medios y se ha guardado localmente ¿Borrar este sitio de la aplicación? Elegir foto + El dispositivo está desconectado. La entrada se guardará localmente. La entrada se ha guardado online Calidad de las imágenes: cuanto más alto es el valor, más calidad tienen las imágenes. Activa la opción para cambiar el tamaño de las imágenes y comprimirlas @@ -269,6 +1821,7 @@ Language: es_CO Media Baja Se ha subido + Fallo al subir Se ha eliminado Eliminando Subiendo @@ -278,8 +1831,8 @@ Language: es_CO Formato de entrada desconocido Enviar Se ha detectado un sitio duplicado. - Este sitio ya existe en la aplicación, no se puede Agregar. - Ya estás registrado en una cuenta de WordPress.com, no se puede agregar un sitio de WordPress.com a otra cuenta. + Este sitio ya existe en la aplicación, no puedes añadirlo. + Ya estás registrado en una cuenta de WordPress.com, no se puede añadir un sitio de WordPress.com a otra cuenta. No se puede cargar archivos multimedia Se necesita estar conectado para actualizar la biblioteca No tienes permiso para ver o editar archivos multimedia @@ -290,14 +1843,16 @@ Language: es_CO Hubo un error al cargar el archivo multimedia Reintentar Confirmar + No se pudo conectar. Se ha recibido un error 403 cuando se intenta acceder a \n tu endpoint del XMLRPC de sitio. La aplicación lo necesita para comunicarse con tu sitio. Ponte en contacto con tu proveedor para solucionar este problema. No se pudo conectar. Su alojamiento está bloqueando las peticiones POST, y la aplicación las necesita \n para comunicarse con su sitio. Póngase en contacto con su alojamiento para solucionar este problema. Busca en los sitios que sigues - No dejes el trabajo a medias; \"%1$s\" está pendiente de publicarse. - No dejes el trabajo a medias; \"%1$s\" está pendiente de publicarse. - \"%1$s\" se ha guardado como borrador. Acuérdate de publicarla. - El borrador \"%1$s\" te está esperando; no te olvides de publicarlo. - ¿Sabías que \"%1$s\" aún es un borrador? No esperes más y publícala. + ¡No dejes el trabajo a medias! «%1$s» está pendiente de publicarse. + ¡No dejes el trabajo a medias! «%1$s» está pendiente de publicarse. + «%1$s» se ha guardado como borrador. ¡Acuérdate de publicarla! + El borrador «%1$s» te está esperando - ¡asegúrate de publicarlo! + ¿Sabías que «%1$s» está aún en borrador? ¡Publícala! Ayer guardaste \'%1$s\' como borrador. ¡No olvides publicarla! + Visitar el sitio Deslizar para ver más No estás autorizado a ver esta publicación. Prueba a iniciar sesión en WordPress.com primero o en su lugar usa el botón de acción arriba para abrir un navegador. No estás autorizado a ver esta publicación. Prueba a iniciar sesión en WordPress.com primero. @@ -310,7 +1865,7 @@ Language: es_CO No se pudo aprobar el comentario. Por favor, inténtalo de nuevo más tarde. No se puede marcar como me gusta el comentario. Por favor inténtalo de nuevo más tarde. Pulsa para mostrarlos - Nuevas notificaciones + Nuevos avisos Respondiendo… Aprobando… Enlazando… @@ -347,17 +1902,17 @@ Language: es_CO Equipo Invita como máximo a 10 personas con sus correos electrónicos o nombre de usuarios de WordPress.com. A aquellos que necesiten un nombre de usuario se le enviará instrucciones sobre cómo hacerlo. Si eliminas a este espectador, no podrá visitar tu sitio\n\n¿Todavía quieres eliminar a este espectador? - Si lo eliminas, este seguidor dejará de recibir informaciones de tu sitio, a no ser que vuelta a seguirte. \n\n¿Todavía quieres eliminar a este seguidor? + Si lo eliminas, este seguidor dejará de recibir informaciones de tu sitio, a no ser que vuelta a seguirte. \n\n¿Todavía quieres eliminar a este seguidor? Desde %1$s No se pudo quitar el espectador No se pudo quitar al seguidor No se pudieron recuperar los correos electrónicos de los seguidores del sitio No se pudieron recuperar los seguidores del sitio Algunas subidas de medios han fallado. Puedes cambiar al modo HTML \ncuando esto pasa. ¿Borramos todas las subidas fallidas y seguimos? - Cambios guardados Ancho Enlazado a Leyenda + Cambios guardados ¿Descartar cambios sin guardar? ¿Parar la subida? ¡Toca para probar de nuevo! @@ -365,7 +1920,7 @@ Language: es_CO %1$s: %2$s ¡Se han enviado las invitaciones pero ha habido errores! ¡Hubo un error al tratar de enviar la invitación! - No se pudo enviar: Hay nombres de usuario o correos electrónicos no válidos. + No se pudo enviar: Hay nombres de usuario o correos electrónicos no válidos No se pudo enviar: Un nombre de usuario o correo electrónico no es válido Por favor, añade al menos un nombre de usuario (Opcional) Puedes introducir un mensaje personalizado de hasta 500 caracteres que se incluirá en la invitación. @@ -380,14 +1935,16 @@ Language: es_CO Enviar enlace Borrar historial de búsqueda ¿Borrar historial de búsqueda? - Los enlaces están inhabilitados en la pantalla de vista previa + No se han encontrado resultados con %s para tu idioma + Buscar en WordPress + Los enlaces están desactivados en la pantalla de vista previa Enviar - \@%1$s eliminado correctamente. + %1$s se ha eliminado correctamente Si eliminas %1$s, ese usuario ya no será capaz de acceder a este sitio, pero cualquier contenido que fuera creado por %1$s permanecerá en el sitio.\n\n¿Aún te gustaría eliminar este usuario? Eliminar %1$s - Gente Rol - Los sitios de esta lista no han publicado nada últimamente. + Gente + Los sitios de esta lista no han publicado nada últimamente No se pudo eliminar el usuario No se ha podido actualizar el rol del usuario No se pudieron recuperar los espectadores del sitio @@ -399,7 +1956,7 @@ Language: es_CO Actualmente no disponible. Por favor, introduce tu contraseña Accediendo Introduce tu contraseña - Cuando comentes se hará público + Cuando comentes se hará público. Captura o elige imagen Planes Plan @@ -409,17 +1966,19 @@ Language: es_CO Exportando contenido… Comprobando compras Mostrar compras - Tienes mejoras premium en tu sitio. Por favor, cancela tus mejoras antes de eliminar tu sitio. + Tienes mejoras premium en tu sitio. Por favor, cancela tus mejoras antes de eliminar tu sitio. Mejoras premium Algo fue mal. No se pudo realizar la compra. Borrando sitio… Eliminar el sitio Exportar tu sitio a un archivo XML Dominio principal + Hubo un error al eliminar tu sitio. Por favor, contacta con el soporte para más asistencia. Error borrando sitio Exportar contenido - Por favor, escribe en %1$s en el campo arriba para confirmar. Tu sitio desaparecerá para siempre. + Por favor, escribe: %1$s en el campo de abajo para confirmar. Tu sitio desaparecerá para siempre. Confirmar borrado del sitio + Contactar con el soporte Si quieres un sitio, pero no quieres ninguna de las entradas y las páginas que tiene ahora, nuestro equipo de soporte puede borrar sus mensajes, páginas, archivos multimedia y tus comentarios.\n\nEsto mantendrá su sitio y la URL activos, pero tendrás un nuevo comienzo en la creación de contenidos. Sólo tienes que contactar con nosotros para limpiar tu contenido actual.. Déjanos ayudarte Comienza tu sitio encima @@ -427,21 +1986,24 @@ Language: es_CO Ajustes de la app Eliminar subidas fallidas Avanzado + No hay comentarios en la papelera + No hay comentarios pendientes + No hay comentarios aprobados No se pudo conectar. Los métodos requeridos en el XML-RPC faltan en el servidor. - Estado - Video Centrado - Chat - Imagen - Enlace + Video + Estado Estándar Cita + Enlace + Imagen Galería + Chat Audio Minientrada Información sobre cursos y eventos de WordPress.com (online y presenciales). Oportunidades para participar en investigaciones y encuestas en WordPress. - Consejos para sacar el máximo partido a WordPress.com + Consejos para sacar el máximo partido a WordPress.com. Comunidad Investigación Sugerencias @@ -449,13 +2011,13 @@ Language: es_CO Menciones del nombre de usuario Logros del sitio Seguidores del sitio - \"Me gusta\" en mis entradas - \"Me gusta\" en mis comentarios + «Me gusta» en mis entradas + «Me gusta» en mis comentarios Comentarios en mi sitio %d elementos 1 elemento - Comentarios de usuarios conocidos Todos los usuarios + Comentarios de usuarios conocidos Sin comentarios %d comentarios por página 1 comentario por página @@ -467,6 +2029,7 @@ Language: es_CO Se requiere aprobación manual de los comentarios de todos. %d días 1 día + Dirección web Sitio principal Haz click en el enlace de verificación del correo electrónica enviado a %1$s para confirmar tu nueva dirección Actualmente estás subiendo archivos multimedia. Por favor, espera hasta que se complete. @@ -477,8 +2040,9 @@ Language: es_CO ¿Eliminar de forma permanente estos comentarios? ¿Eliminar de forma permanente este comentario? Eliminar - Comentario eliminado Restaurar + Comentario eliminado + No hay comentarios spam Todos No se pudo cargar la página Off @@ -508,20 +2072,20 @@ Language: es_CO No pudo guardar la información del sitio No pudo recuperar la información del sitio Cierra automáticamente - Cierra automáticamente los comentarios en artículos - Rompe los hilos de comentarios en múltiples páginas + Cierra automáticamente los comentarios en artículos. + Rompe los hilos de comentarios en múltiples páginas. Comentarios por página Cerrar los comentarios - Cuando un comentario contenga alguna de estas palabras en su contenido, nombre, URL, correo electrónico o IP, será marcado como spam. Puedes introducir palabras parciales, así \"press\" coincidirá con \"WordPress.\" - Cuando un comentario contenga alguna de las estas palabras en su contenido, nombre, URL, correo electrónico o IP, será puesto en la cola para moderar. Puedes introducir palabras parciales, así \"press\" coincidirá como \"Wordpress\" + Cuando un comentario contenga alguna de estas palabras en su contenido, nombre, URL, correo electrónico o IP, será marcado como spam. Puedes introducir palabras parciales, así «press» coincidirá con «WordPress». + Cuando un comentario contenga alguna de las estas palabras en su contenido, nombre, URL, correo electrónico o IP, será puesto en la cola para moderar. Puedes introducir palabras parciales, así «press» coincidirá con «Wordpress». Introduce una palabra o frase Sin elementos - Puedes sobreescribir esta configuración para entradas individuales - en \"Mejora\" + Puedes sobrescribir estos ajustes en las entradas individuales. + en «Actualización» Novedades: VideoPress para bodas - en \"Aplicaciones\" + en «Aplicaciones» La aplicación WordPress para Android consigue un gran lavado de cara - en \"Móvil\" + en «Móvil» Gran actualización disponible ahora para iPhone/iPad Mostrar imágenes Mostrar cabecera @@ -537,7 +2101,7 @@ Language: es_CO Permitir comentarios anidados hasta cierto nivel Determina el orden de los comentarios mostrados No permitir los comentarios después de un tiempo - Permitir notificaciones de enlace de otros sitios + Permitir avisos de enlace de otros sitios Intenta notificar cualquier sitio enlazado desde el artículo Permitir a los lectores publicar comentarios Ver y cambiar la configuración de discusiones de tu sitio @@ -575,7 +2139,7 @@ Language: es_CO Formato por defecto Categoría por defecto Dirección - Lema + Descripción corta Título del sitio Por defecto para nuevas entradas Escribiendo @@ -620,8 +2184,15 @@ Language: es_CO Entrada publicada Lo sentimos, no se han encontrados temas. Cargar más entradas - Ningún sitio coincide con \"%s\" + Ningún sitio coincide con «%s» Buscar sitios + Ir al Lector + Recibe avisos: comenta en entradas que has leído + Unirse a una conversación: comentar en entradas de blogs que sigues + Reinicia la conversación: escribe una entrada nueva + ¡Actívate! Comenta en entradas de blogs que sigues. + No hay comentarios aún + ¡Te has puesto al día! %s Comentarios 1 Comentario Responder a la entrada… @@ -630,29 +2201,33 @@ Language: es_CO Originalmente publicado por %s Originalmente publicado por %1$s en %2$s %s Me gusta - Me gusta 1 Me gusta + Me gusta + %,d seguidores + Editar temas y sitios Entrada del lector - Opciones para las notificaciones que aparecen en tu dispositivo. - Opciones para las notificaciones que se envían al correo electrónico ligado a tu cuenta. - Opciones para las notificaciones que aparecen en la pestaña de notificaciones. - Las notificaciones de la App han sido desativadas. Pulsa aquí para activarlas en Opciones. - Tipos de notificaciones + Ajustes para los avisos que aparecen en tu dispositivo. + Ajustes para los avisos que se envían al correo electrónico ligado a tu cuenta. + Ajustes para las avisos que aparecen en la pestaña de avisos. + Los avisos de la aplicación han sido desactivados. Toca aquí para activarlos en los ajustes. + Tipos de avisos No se han podido cargar los ajustes de avisos Me gusta al comentario + Avisos de la aplicación Correo electrónico Pestaña de avisos - Avisos de la aplicación Siempre mandamos correos electrónicos importantes relativos a tu cuenta, pero también obtendrás extras útiles. Sumario de la última entrada Sin conexión - Publicar - Editar - Ver - Vista previa + Entrada enviada a la papelera Papelera Estadísticas - Entrada enviada a la papelera + Vista previa + Ver + Publicar + Editar + No tienes autorización para acceder a este sitio + No se pudo encontrar este sitio Deshacer La solicitud ha expirado. Accede a WordPress.com para volver a intentarlo. Ignorar @@ -661,99 +2236,114 @@ Language: es_CO Entradas, vistas y visitantes de todos los tiempos Detalles Salir de WordPress.com - Iniciar/Cerrar sesión Acceder a WordPress.com - \"%s\" no se ocultó porque es el sitio actual + Iniciar/Cerrar sesión Ayuda y soporte Configuración de la cuenta - Mostrar/Ocultar sitios + «%s» no se ha ocultado porque es el sitio actual + Crear sitio en WordPress.com Añadir sitio autoalojado - Cambiar sitio + Añadir sitio nuevo + Mostrar/Ocultar sitios Elegir sitio Ver sitio Ver Administrador - Publicar - Aspecto + Cambiar sitio Ajustes Entradas del blog - Toca para mostrarlos + Publicar + Aspecto Configuración + Toca para mostrarlos + Anular todas las selecciones Seleccionar todo Ocultar Mostrar - Anular todas las selecciones - Idioma - Código de verificación Accede de nuevo para continuar. Código de verificación no válido + Código de verificación + Idioma + No se pudieron recuperar las entradas + Autor: + No se pudo abrir la notificación Términos de búsqueda desconocidos - Recuperando medios… - Recuperando entradas… - Recuperando páginas… - Recuperando comentarios… Términos de búsqueda Autores - No se pudo abrir la notificación - Autor: - No se pudieron recuperar las entradas - Sitios que te podrían gustar - Ocurrió un error al copiar el texto en el portapapeles - Nuevas entradas + Recuperando comentarios… + Recuperando páginas… + Recuperando entradas… + Recuperando medios… Los informes de la aplicación se han copiado al portapapeles + Este sitio está vacío + Nuevas entradas + Ocurrió un error al copiar el texto en el portapapeles Subiendo entrada - Visitantes - Vistas - Años - Me gusta - Países - Seguidores - Difundir - Vídeos - Entradas y páginas - hace unos segundos - hace un minuto + %1$d años + Un año + %1$d meses + Un mes %1$d días Un día %1$d horas hace una hora %1$d minutos - Un mes - %1$d años - Un año - %1$d meses + hace un minuto + hace unos segundos + Seguidores + Difundir + Videos + Entradas y páginas + Países + Me gusta + Visitantes + Vistas + Años Obteniendo temas… Detalles %d seleccionados - Cerrando sesión… - Responder a %s - Aún no se han publicado entradas. ¿Por qué no crear una? - El comentario se ha enviado a la papelera. - Comentario - Me gustó - Hace más de 1 semana - Hace más de 2 días - Más - Hace más de 1 mes - No tienes permiso para ver o editar comentarios. - No tienes permiso para ver o editar páginas. - No tienes permiso para ver o editar entradas. - No se puede publicar una entrada vacía. - %1$d de %2$d - Los comentarios están cerrados + Explora nuestras Preguntas frecuentes + Aún no hay comentarios + No hay entradas con esta temática Me gusta Ver artículo original - Aún no hay comentarios - Explora nuestras Preguntas frecuentes. - No es posible realizar esta acción + Los comentarios están cerrados + %1$d de %2$d + No se puede publicar una entrada vacía + No tienes permisos para ver o editar entradas + No tienes permisos para ver o editar páginas + No tienes permisos para ver o editar comentarios + Más + Hace más de 1 mes + Hace más de 1 semana + Hace más de 2 días + Me gustó + Comentario + El comentario se ha enviado a la papelera + Responder a %s + Aún no se han publicado entradas. ¿Por qué no crear una? + Cerrando sesión… + No ha sido posible realizar esta acción + No es posible bloquear este sitio + Las entradas de este sitio no volverán a mostrarse + Bloquear este sitio Programación Actualizar + Sin sitios recomendados + No se puede dejar de seguir este sitio + No se puede seguir este sitio + Ya estás siguiendo este sitio + No se puede mostrar este sitio + Sitio seguido + Introduce una URL o tema para seguir Sitios que sigues - SI normalmente se conecta sin problemas a este sitio sin problemas, este error puede significar que alguien están intentando suplantar el sitio, por lo que no deberías continuar. ¿Quieres, de todas formas, confiar en el certificado? + Temas seguidos + Sitio del lector + Si normalmente se conecta a este sitio sin problemas, este error puede significar que alguien están intentando suplantar el sitio, por lo que no deberías continuar. ¿Quieres, de todas formas, confiar en el certificado? Certificado SSL no válido ¿Has olvidado la contraseña? Ayuda - El usuario o contraseña que ingresaste no son correctos. - Ingresa una dirección de correo electrónico válida + El nombre de usuario o contraseña que has introducido son incorrectos + Introduce una dirección de correo electrónico válida Tu dirección de correo electrónico no es válida Error al descargar la imagen No se pudo cargar el comentario @@ -761,21 +2351,23 @@ Language: es_CO Ocurrió un error al moderar el comentario Ocurrió un error No se pudieron actualizar los comentarios - Las páginas no pueden ser actualizadas en este momento. + Las páginas no se pudieron actualizar en este momento Las entradas no pueden ser actualizadas en este momento Ocurrió un error al eliminar la entrada - Sin notificaciones + Sin avisos Se necesita una tarjeta SD montada para subir medios - El campo nombre de categoría es necesario - Categoría agregada correctamente. + El campo nombre de categoría es obligatorio + La categoría se ha añadido correctamente No se pudo añadir la categoría No es spam - Ocurrió un error al obtener los temas. + Ha ocurrido un error al obtener los temas Ha ocurrido un error mientras se accedía a este blog - El elemento multimedia no ha podido ser recuperado - No hay ninguna conexión de red disponible + El elemento multimedia no se ha podido recuperar + No hay conexiones de red disponible + No se ha podido eliminar este tema + No se ha podido añadir este tema Registro de la aplicación - Hubo un error al crear la base de datos de la app. Por favor, intenta reinstalar la app. + Ha ocurrido un error al crear la base de datos de la aplicación. Por favor, intenta reinstalar la aplicación. Este blog está oculto y no se puede cargar. Actívalo de nuevo en ajustes y prueba de nuevo. No se pueden actualizar los medios en este momento Blog de WordPress @@ -784,17 +2376,17 @@ Language: es_CO Política de privacidad Nuevo elemento multimedia Nueva entrada - No hay notificaciones… todavía. + No hay avisos… aún. Se necesita autorización Comprueba que la URL del sitio introducida es válida - Licencias Open source + Licencias de código abierto No se pudo crear un archivo temporal para subir el archivo multimedia. Asegúrate que haya suficiente espacio libre en tu dispositivo. Nombre de la categoría Añadir nueva categoría Ver en el navegador Eliminar sitio El comentario no ha cambiado - Comentario obligatorio + El comentario es obligatorio ¿Cancelar la edición de este comentario? Guardando cambios Papelera @@ -812,114 +2404,126 @@ Language: es_CO Spam Pendiente Aprobado - Ajustes de entrada + ¿Borrar página? + ¿Borrar entrada? + Ajustes de la entrada + No ha sido posible encontrar el archivo a cargar. ¿Se ha borrado o cambiado de ubicación? Borrador local Ajustes de página Texto del enlace (opcional) - Algunos elementos multimedia no pudieron ser borrados. Prueba más tarde + Algunos elementos multimedia no se pudieron borrar en este momento. Intenta de nuevo más tarde. No tienes permiso para ver la librería multimedia - Malla (red) de miniaturas + Cuadrícula de miniaturas Aprender más Ocurrió un error al cargar la entrada. Actualiza tus entradas e intenta nuevamente. + Ocurrió un error al acceder a este plugin Cancelar edición Error de conexión Seleccionar categorías Compartir enlace Recuperando entradas… + A ti, y a %,d personas más les gusta esto A %,d personas les gusta esto Responder No se puede compartir en WordPress si no tienes un blog visible Comentado marcado como spam - A ti, y a %,d personas más les gusta esto No fue posible recuperar esta entrada + A ti y a otra persona les gusta esto Elige un vídeo Elige una foto - A ti y a otra persona os gusta esto. - Eliminado %s - A una persona le gusta esto - Compartir - Seguir - Siguiendo - Te gusta esto + Registro Imposible abrir %s Imposible ver la imágen Imposible compartir - No se pudo publicar tu comentario + Este no es un tema válido + Ya estás siguiendo este tema + No se pudo publicar tu comentario + Te gusta esto + A una persona le gusta esto + Eliminado %s Añadido %s - Contestar al comentario + Responder al comentario… + Siguiendo + Seguir + Compartir + Reblog Sin título + No hay comentarios aún Esta lista esta vacía - Días - Semanas Meses - Activar - Compartir - Estadísticas - Clics - Hoy + Semanas + Días Ayer - Círculos - Título - Descripción - Cuadrados + Hoy Referentes Etiquetas y categorías + Clics + Estadísticas + Compartir + Activar No se pudo actualizar + Descripción Leyenda - Pase de diapositivas + Título + Presentación de diapositivas + Círculos Mosaico + Cuadrados Temas Descartar Gestionar - Respuesta publicada - %d nuevas notificaciones y %d más. + %d nuevos avisos Seguimientos + Respuesta publicada Acceder Cargando… Contraseña HTTP Usuario HTTP Se ha producido un error al cargar los archivos - Nombre de usuario o contraseña incorrecta - Contraseña - Nombre de usuario + Nombre de usuario o contraseña incorrecta. Acceder + Nombre de usuario + Contraseña Lector - Anónimo Páginas Entradas + Anónimo No hay red disponible + hecho OK URL + Términos del servicio Versión WordPress para Android - Términos del servicio - Alineamiento + Alineación Refrescar - Sin Título + Sin título Editar Inmediatamente - Nombre del Acceso Directo + Establecer nombre del atajo Ajustes - El nombre del acceso directo no puede ser vacío. + El nombre del atajo no puede estar vacío + Privado Título - Categorías Separa las etiquetas con comas + Categorías Eliminando comentarios - Requiere tarjeta SD + Requiere una tarjeta SD Multimedia Aprobar Eliminar Ninguno - Error - Cancelar - No - Guardar - Vista previa + Publicar ahora Responder en + Vista previa + Error de actualización de categorías + Error + No Ajustes de avisos - Error de actualización de categorías Añadir + Guardar + Cancelar diff --git a/WordPress/src/main/res/values-es-rMX/strings.xml b/WordPress/src/main/res/values-es-rMX/strings.xml index db5f4328e364..9e9f2fa3576a 100644 --- a/WordPress/src/main/res/values-es-rMX/strings.xml +++ b/WordPress/src/main/res/values-es-rMX/strings.xml @@ -1,11 +1,50 @@ + A <b>Madison Ruíz</b> le ha gustado tu entrada + Hoy has recibido <b>50 me gusta</b> en tu sitio + <b>Juan Gómez</b> ha respondido en tu entrada + Se ha abierto el menú de bloques desplazable. Selecciona un bloque. + Se ha cerrado el menú de bloques desplazable. + Omitir + Elegir + Elige tu layout de página de inicio favorito. Puedes personalizarlo o cambiarlo más tarde. + Elige un diseño + Los layouts no están disponibles debido a un error + Añadir categoría + Añadir una nueva categoría + Categorías + No establecido + Categorías + Toca \"Reintentar\" cuando vuelvas a estar en línea o crea una página en blanco usando el botón a continuación. + Toca \"Reintentar\" o crea una página en blanco usando el botón a continuación. + Los layouts no están disponibles offline + Museos en Londres + Los mejores fanáticos del mundo + Mis diez mejores cafés + Política + Música + Jardinería + Fútbol + Cocina + Arte + Rock n\' roll semanal + Noticias web + Pamela Nguyen + Estoy muy inspirado por el trabajo del fotógrafo Cameron Karsten. Probaré estas técnicas en mi próximo + Inspírate + Sigue tus sitios favoritos y descubre nuevas lecturas. + Observa cómo crece tu audiencia con analíticas avanzadas. + Con el potente editor puedes publicar sobre la marcha. + Bienvenido al maquetador web más popular del mundo. + Mira los comentarios y avisos en tiempo real. + La carga del medio ha fallado + Sitios a seguir \"%s\" no es totalmente compatible Estamos trabajando duro para añadir más bloques con cada versión. Son publicados como una nueva entrada de blog en tu sitio para que tu audiencia nunca se pierda nada. @@ -19,7 +58,6 @@ Language: es_MX Vista previa del layout Página creada Página en blanco creada - Ha ocurrido un error al obtener los layouts Presentación de las entradas de historias Tienes acceso anticipado a las entradas de historias y nos encantaría que las probaras. Cómo crear una entrada de historias @@ -157,12 +195,11 @@ Language: es_MX Si continúas con Google y aún no tienes una cuenta de WordPress.com, crearás una cuenta y aceptas nuestros %1$stérminos del servicio%2$s. Confirmación del registro Continuar con WordPress.com - Introduce la dirección de tu sitio - Logotipo de WordPress Bloque eliminado Elegir una imagen Elegir una imagen o video Elegir un video + Ingresa la dirección de tu sitio existente Si continúas, aceptas nuestros %1$stérminos del servicio%2$s. Te enviaremos por correo electrónico un enlace de registro para crear tu nueva cuenta de WordPress.com. Usaremos esta dirección de correo electrónico para crear tu nueva cuenta de WordPress.com. @@ -176,8 +213,6 @@ Language: es_MX o Te enviaremos por correo electrónico un enlace que te hará acceder automáticamente, sin necesidad de contraseña. Restablecer tu contraseña - El 37\% de la web está creada con WordPress. - Desbloquea el poder del creador de webs más flexible. Enviar el enlace por correo electrónico Crear una cuenta O escribe tu contraseña @@ -487,7 +522,6 @@ Language: es_MX Esta entrada se sincronizará inmediatamente. ¿Preparado para sincronizar? Este dominio no está disponible - Introducción -%s No hemos podido acceder a tu sitio. Tendrás que contactar con tu alojamiento para solucionarlo. No hemos podido acceder a tu sitio debido a un problema con el <b>certificado SSL</b>. Tendrás que contactar con tu alojamiento para solucionarlo. @@ -1313,7 +1347,6 @@ Language: es_MX Editar foto Elige el sitio Cuenta nueva - Iniciar sesión Conectado como Detalle de la persona Detalles del archivo @@ -2245,7 +2278,6 @@ Language: es_MX Términos de búsqueda desconocidos No se pudieron recuperar las entradas Subiendo entrada - Sitios que te podrían gustar Ocurrió un error al copiar el texto en el portapapeles Este sitio está vacío Nuevas entradas diff --git a/WordPress/src/main/res/values-es-rVE/strings.xml b/WordPress/src/main/res/values-es-rVE/strings.xml index 4b4e3d96e84d..3a64c06ff865 100644 --- a/WordPress/src/main/res/values-es-rVE/strings.xml +++ b/WordPress/src/main/res/values-es-rVE/strings.xml @@ -1,11 +1,50 @@ + <b>Juan Gómez</b> ha respondido en tu entrada + Hoy has recibido <b>50 me gusta</b> en tu sitio + A <b>Madison Ruíz</b> le ha gustado tu entrada + Se ha abierto el menú de bloques desplazable. Selecciona un bloque. + Se ha cerrado el menú de bloques desplazable. + Omitir + Elegir + Elige tu diseño de página de inicio favorito. Puedes personalizarlo o cambiarlo más tarde. + Elige un diseño + Toca «Reintentar» cuando vuelvas a estar en línea o crea una página en blanco usando el botón a continuación. + Los diseños no están disponibles sin conexión + Toca «Reintentar» o crea una página en blanco usando el botón a continuación. + Los diseños no están disponibles debido a un error + Añadir categoría + Añadir una nueva categoría + Categorías + No establecido + Categorías + Museos en Londres + Los mejores fanáticos del mundo + Mis diez mejores cafés + Política + Música + Jardinería + Fútbol + Cocina + Arte + Rock n\' roll semanal + Noticias web + Pamela Nguyen + Estoy muy inspirado por el trabajo del fotógrafo Cameron Karsten. Probaré estas técnicas en mi próximo + Inspírate + Sigue tus sitios favoritos y descubre nuevas lecturas. + Observa cómo crece tu audiencia con analíticas avanzadas. + Mira los comentarios y avisos en tiempo real. + Con el potente editor puedes publicar sobre la marcha. + Bienvenido al maquetador web más popular del mundo. + La carga del medio ha fallado + Sitios a seguir Estamos trabajando duro para añadir más bloques con cada versión. «%s» no es totalmente compatible Botón de ayuda @@ -20,7 +59,6 @@ Language: es_VE Cómo crear una entrada de historias Tienes acceso anticipado a las entradas de historias y nos encantaría que las probaras. Presentación de las entradas de historias - Ha ocurrido un error al obtener los diseños Página en blanco creada Página creada Vista previa del diseño @@ -158,8 +196,7 @@ Language: es_VE Elegir una imagen o vídeo Elegir una imagen Bloque eliminado - Logotipo de WordPress - Introduce la dirección de tu sitio + Introduce la dirección de tu sitio existente Continuar con WordPress.com Confirmación del registro Si continúas con Google y aún no tienes una cuenta de WordPress.com, crearás una cuenta y aceptas nuestros %1$stérminos del servicio%2$s. @@ -181,8 +218,6 @@ Language: es_VE O escribe tu contraseña Crear una cuenta Enviar el enlace por correo electrónico - Desbloquea el poder del creador de webs más flexible. - El 37\% de la web está creada con WordPress. Restablecer tu contraseña Ha habido un problema al gestionar la solicitud. Por favor, inténtalo de nuevo más tarde. Dale a tu sitio un nombre que refleje su personalidad y temática. ¡Las primeras impresiones cuentan! @@ -487,7 +522,6 @@ Language: es_VE Esta entrada se sincronizará inmediatamente. ¿Preparado para sincronizar? El dominio no está disponible - Introducción -%s No hemos podido acceder a tu sitio. Tendrás que contactar con tu alojamiento para solucionarlo. No hemos podido acceder a tu sitio debido a un problema con el <b>certificado SSL</b>. Tendrás que contactar con tu alojamiento para solucionarlo. @@ -1313,7 +1347,6 @@ Language: es_VE Editar foto Elige el sitio Cuenta nueva - Iniciar sesión Conectado como Detalle de la persona Detalles del archivo @@ -2247,7 +2280,6 @@ Language: es_VE Los informes de la aplicación se han copiado al portapapeles Este sitio está vacío Nuevas entradas - Sitios que te podrían gustar Ocurrió un error al copiar el texto en el portapapeles Subiendo entrada %1$d años diff --git a/WordPress/src/main/res/values-es/strings.xml b/WordPress/src/main/res/values-es/strings.xml index 401d72924172..49084ead8791 100644 --- a/WordPress/src/main/res/values-es/strings.xml +++ b/WordPress/src/main/res/values-es/strings.xml @@ -1,11 +1,50 @@ + <b>Juan Gómez</b> ha respondido en tu entrada + Hoy has recibido <b>50 me gusta</b> en tu sitio + A <b>Madison Ruíz</b> le ha gustado tu entrada + Se ha abierto el menú de bloques desplazable. Selecciona un bloque. + Se ha cerrado el menú de bloques desplazable. + Omitir + Elegir + Elige el diseño de página de inicio que prefieras. Puedes personalizarlo o cambiarlo más adelante. + Elige un diseño + Toca «Reintentar» cuando vuelvas a estar en línea o crea una página en blanco usando el botón a continuación. + Los diseños no están disponibles sin conexión + Toca «Reintentar» o crea una página en blanco usando el botón a continuación. + Los diseños no están disponibles debido a un error + Añadir una categoría + Añadir una nueva categoría + Categorías + No establecido + Categorías + Museos en Londres + Los mejores fanáticos del mundo + Mis diez mejores cafés + Política + Música + Jardinería + Fútbol + Cocina + Arte + Rock n\' roll semanal + Noticias web + Pamela Nguyen + Estoy muy inspirado por el trabajo del fotógrafo Cameron Karsten. Probaré estas técnicas en mi próximo + Inspírate + Sigue tus sitios favoritos y descubre nuevas lecturas. + Observa cómo crece tu audiencia con analíticas avanzadas. + Mira los comentarios y avisos en tiempo real. + Con el potente editor puedes publicar sobre la marcha. + Bienvenido al maquetador web más popular del mundo. + La carga del medio ha fallado + Sitios a seguir Estamos trabajando duro para añadir más bloques con cada versión. «%s» no es totalmente compatible Botón de ayuda @@ -20,7 +59,6 @@ Language: es Cómo crear una entrada de historias Tienes acceso anticipado a las entradas de historias y nos encantaría que las probaras. Presentación de las entradas de historias - Ha ocurrido un error al obtener los diseños Página en blanco creada Página creada Vista previa del diseño @@ -158,8 +196,7 @@ Language: es Elegir una imagen o vídeo Elegir una imagen Bloque eliminado - Logotipo de WordPress - Introduce la dirección de tu sitio + Introduce la dirección de tu sitio existente Continuar con WordPress.com Confirmación del registro Si continúas con Google y aún no tienes una cuenta de WordPress.com, crearás una cuenta y aceptas nuestros %1$stérminos del servicio%2$s. @@ -181,8 +218,6 @@ Language: es O escribe tu contraseña Crear una cuenta Enviar el enlace por correo electrónico - Desbloquea el poder del creador de webs más flexible. - El 37\% de la web está creada con WordPress. Restablecer tu contraseña Ha habido un problema al gestionar la solicitud. Por favor, inténtalo de nuevo más tarde. Dale a tu sitio un nombre que refleje su personalidad y temática. ¡Las primeras impresiones cuentan! @@ -487,7 +522,6 @@ Language: es Esta entrada se sincronizará inmediatamente. ¿Preparado para sincronizar? Este dominio no está disponible - Introducción -%s No hemos podido acceder a tu sitio. Tendrás que contactar con tu alojamiento para solucionarlo. No hemos podido acceder a tu sitio debido a un problema con el <b>certificado SSL</b>. Tendrás que contactar con tu alojamiento para solucionarlo. @@ -1313,7 +1347,6 @@ Language: es Editar foto Elige el sitio Cuenta nueva - Iniciar sesión Conectado como Detalle de la persona Detalles del archivo @@ -2247,7 +2280,6 @@ Language: es Los informes de la aplicación se han copiado al portapapeles Este sitio está vacío Nuevas entradas - Sitios que te podrían gustar Ha ocurrido un error al copiar el texto en el portapapeles Subiendo entrada %1$d años diff --git a/WordPress/src/main/res/values-eu/strings.xml b/WordPress/src/main/res/values-eu/strings.xml index 5c096aefb61d..6801db8d14ad 100644 --- a/WordPress/src/main/res/values-eu/strings.xml +++ b/WordPress/src/main/res/values-eu/strings.xml @@ -273,7 +273,6 @@ Language: eu_ES Bilaketa terminoak Bidalketa berriak Errore bat gertatu da testua arbelera kopiatzean - Gogoko izan ditzakezun guneak Bidalketa igotzen Bidalketak eta orrialdeak Bideoak diff --git a/WordPress/src/main/res/values-fr/strings.xml b/WordPress/src/main/res/values-fr/strings.xml index 9a45de3a2f5c..cf0de24165cb 100644 --- a/WordPress/src/main/res/values-fr/strings.xml +++ b/WordPress/src/main/res/values-fr/strings.xml @@ -1,11 +1,50 @@ + <b>Johan Brandt</b> a répondu à votre article + Vous avez reçu <b>50 « J’aime »</b> sur votre site aujourd\'hui + <b>Madison Ruiz</b> a aimé votre article + Menu de bloc déroulant ouvert. Sélectionner un bloc. + Menu de bloc déroulant fermé. + Passer + Choisir + Sélectionnez votre mise en page de la page d’accueil préférée. Vous pourrez la personnaliser ou la modifier ultérieurement. + Choisir un design + Touchez réessayer quand vous serez de nouveau en ligne ou créer un page blanche en utilisant le bouton ci-dessous. + Les mises en page ne sont pas disponibles hors connexion + Touchez réessayer ou créez une page blanche en utilisant le bouton ci-dessous. + Les mises en page ne sont pas disponibles suite à une erreur. + Ajouter une catégorie + Ajouter une nouvelle catégorie + Catégories + Non définie + Catégories + Musées à Londres + Les meilleurs fans du monde + Mon top 10 des cafés + Politique + Musique + Jardinage + Football + Cuisine + Art + Semaine du Rock n’ Roll + Infos du web + Pamela Nguyen + J’apprécie le travail du photographe Cameron Karsten. J’essaierai ses techniques sur mes prochaines photos. + Inspiration + Suivez vos sites préférés et découvrez de nouvelles lectures. + Regardez votre audience grossir avec les statistiques approfondies. + Voir les commentaires et notifications en temps réel. + Avec cet éditeur puissant, vous pouvez publier de n’importe où. + Bienvenue sur le constructeur de site le plus populaire au monde. + Échec du chargement du média + Sites à suivre Nous travaillons dur pour ajouter plus de blocs à chaque version. « %s » n’est pas entièrement pris en charge Bouton d’aide @@ -20,7 +59,6 @@ Language: fr Comment créer une publication de story Vous avez un accès anticipé aux publications de story et nous aimerions que vous l’essayiez. Présentation des publications de story - Une erreur est survenue lors de l’extraction des mises en page Page vide créée Page créée Aperçu de la mise en page @@ -29,7 +67,7 @@ Language: fr L’insertion du média a échoué : %s Choisir dans la bibliothèque des médias WordPress Retour - Commencer + Premiers pas Suivre des thèmes pour découvrir de nouveaux blogs Par Ce référent ne peut pas être marqué comme indésirable @@ -158,8 +196,7 @@ Language: fr Choisir une image ou une vidéo Choisir une image Bloc supprimé - Logo WordPress - Saisissez l’adresse de votre site + Saisissez l’adresse de votre site actuel Continuer avec WordPress.com Confirmation de l’inscription Si vous continuez avec Google sans disposer au préalable d’un compte WordPress.com, vous créez un compte et acceptez nos %1$sconditions d’utilisation%2$s. @@ -176,13 +213,11 @@ Language: fr Consultez vos e-mails sur cet appareil et appuyez sur le lien dans l’e-mail que vous avez reçu de WordPress.com. Nous vous enverrons par e-mail un lien qui vous connectera instantanément, sans mot de passe. Vérifier les e-mails - Commencer + Premiers pas Entrez votre adresse e-mail pour vous connecter ou créez un compte WordPress.com. Vous pouvez également saisir votre mot de passe Créer un compte Envoyer un lien par e-mail - Libérez la puissance de l’outil de création de sites Web le plus flexible. - 37\% du Web est intégré à WordPress. Réinitialiser votre mot de passe Un problème est survenu lors du traitement de la demande. Veuillez réessayer plus tard. Donnez à votre site un nom qui reflète sa personnalité et son thème. La première impression est importante ! @@ -487,7 +522,6 @@ Language: fr Cet article sera synchronisé immédiatement. Prêt à synchroniser ? Ce domaine n’est pas disponible - Introduction -%s Nous n’avons pas pu accéder à votre site. Vous devrez contacter votre hébergeur pour résoudre ce problème. Nous n’avons pas pu accéder à votre site à cause d’un problème avec le <b>certificat SSL</b>. Vous devrez contacter votre hébergeur pour résoudre ce problème. @@ -1313,7 +1347,6 @@ Language: fr Éditer photo Sélectionner le site Nouveau compte - Connexion Connecté en tant que Détail sur la personne Détails sur le fichier @@ -2247,7 +2280,6 @@ Language: fr Les logs de l\'application ont été copiés dans le presse papier Ce site est vide Nouveaux articles - Sites que vous aimerez Une erreur s\'est produite lors de la copie dans le presse papier Article en cours de téléversement %1$d années diff --git a/WordPress/src/main/res/values-gd/strings.xml b/WordPress/src/main/res/values-gd/strings.xml index caeda511ba0b..3af0901d0cf5 100644 --- a/WordPress/src/main/res/values-gd/strings.xml +++ b/WordPress/src/main/res/values-gd/strings.xml @@ -76,7 +76,6 @@ Language: gd_GB Chaidh lethbhreac de logaichean na h-aplacaid a chur air an stòr-bhòrd Puist ùra Thachair mearachd nuair a chaidh lethbhreac dha na faidhlichean a chur air an stòr-bhòrd - Bidh ùidh agad sna leanas is dòcha A’ faighinn nan ùrlaran… %1$d mìos(an) Bliadhna diff --git a/WordPress/src/main/res/values-gl/strings.xml b/WordPress/src/main/res/values-gl/strings.xml index 434a1e813a67..02ab9e5102c2 100644 --- a/WordPress/src/main/res/values-gl/strings.xml +++ b/WordPress/src/main/res/values-gl/strings.xml @@ -277,7 +277,6 @@ Language: gl_ES Esta entrada sincronizarase inmediatamente. Preparado para sincronizar? Este dominio non está dispoñible - Introdución -%s Non puidemos acceder ao teu sitio. Terás que contactar co teu aloxamento para solucionalo. Non puidemos acceder ao teu sitio debido a un problema co <b>certificado SSL</b>. Terás que contactar co teu aloxamento para solucionalo. @@ -1095,7 +1094,6 @@ Language: gl_ES Editar foto Elixe o sitio Nova conta - Iniciar sesión Conectado como Detalle da persoa Detalles do arquivo @@ -2020,7 +2018,6 @@ Language: gl_ES Os rexistros da aplicación foron copiados no portapapeis Este blogue está baleiro Artigos novos - Sitios que poden gustarche Houbo un erro ao copiar o texto no portapapeis Cargando %1$d anos diff --git a/WordPress/src/main/res/values-he/strings.xml b/WordPress/src/main/res/values-he/strings.xml index 2142e26f9033..2ee352d1e433 100644 --- a/WordPress/src/main/res/values-he/strings.xml +++ b/WordPress/src/main/res/values-he/strings.xml @@ -20,7 +20,6 @@ Language: he_IL כיצד ליצור פוסט של סטורי אנו מעניקים לך גישה מוקדמת אל \'פוסטים של סטורי\' ונשמח לראות אותך מתנסה בהם. אנו שמחים להציג את האפשרות \'פוסטים של סטורי\' - אירעה שגיאה בעת הבאת הפריסות נוצר עמוד ריק העמוד נוצר תצוגה מקדימה של הפריסה @@ -155,8 +154,6 @@ Language: he_IL לבחור תמונה או וידאו לבחור תמונה הבלוק הוסר - הלוגו של WordPress - יש להזין את כתובת האתר שלך להמשיך עם WordPress.com אישור הרשמה אם בחרת להמשיך עם Google או ועדיין אין לך חשבון ב-WordPress.com, חשבון ייווצר עבורך ויש הסכמה מצידך ⁦%1$s⁩לתנאי השירות⁦%2$s⁩ שלנו. @@ -178,8 +175,6 @@ Language: he_IL או להקליד את הסיסמה שלך ליצור חשבון לשלוח את הקישור באימייל - לעבוד עם בונה האתרים הכי הגמיש שיש. - 37\% מהאתרים ברשת בנויים על הפלטפורמה של WordPress. יש לאפס את הסיסמה שלך כדאי לתת לאתר שלך שם שמשקף את האישיות שלו והנושאים שמוצגים בו. הרושם הראשוני חשוב! להגדיר את שם האתר שלך @@ -483,7 +478,6 @@ Language: he_IL הפוסט הנוכחי יסונכרן באופן מיידי. הכול מוכן לסנכרון? הדומיין לא זמין - הקדמה -%s לא הייתה לנו אפשרות לגשת לאתר שלך. עליך ליצור קשר עם חברת האחסון שלך כדי לפתור את הבעיה. לא הייתה לנו אפשרות לגשת לאתר שלך עקב בעיה <b>בתעודת SSL</b>. עליך ליצור קשר עם חברת האחסון שלך כדי לפתור את הבעיה. @@ -1306,7 +1300,6 @@ Language: he_IL עריכת תמונה בחר אתר חשבון חדש - כניסה מחובר בתור פרטי המשתמש פרטי הקובץ @@ -2237,7 +2230,6 @@ Language: he_IL הלוגים של האפליקציה הועתקו אל ה-clipboard האתר הזה ריק פוסטים חדשים - אתרים מומלצים עבורך אירעה שגיאה בעת העתקת הטקסט אל ה-clipboard מעלה פוסט %1$d שנים diff --git a/WordPress/src/main/res/values-hr/strings.xml b/WordPress/src/main/res/values-hr/strings.xml index 00d3a8e81eab..2a0d7875ee99 100644 --- a/WordPress/src/main/res/values-hr/strings.xml +++ b/WordPress/src/main/res/values-hr/strings.xml @@ -309,7 +309,6 @@ Language: hr Došlo je do pogreške prilikom kopiranja teksta u međuspremnik Nove objave Zapisi aplikacije su kopirani međuspremnik - Web-stranice koje bi vam se mogle sviđati Objava se prenosi Ova web-stranica je prazna Prije sat vremena diff --git a/WordPress/src/main/res/values-id/strings.xml b/WordPress/src/main/res/values-id/strings.xml index 7d8d05971079..66cd3d531d01 100644 --- a/WordPress/src/main/res/values-id/strings.xml +++ b/WordPress/src/main/res/values-id/strings.xml @@ -1,11 +1,43 @@ + Kami berusaha keras untuk menambahkan banyak blok setiap rilis. + \'%s\' tidak sepenuhnya didukung + Tombol Bantuan + Edit menggunakan editor web + Pilih gambar + Buat Pos Cerita + Pos tersebut diterbitkan sebagai pos blog baru pada situs agar audiens Anda tidak ketinggalan hal-hal baru. + Pos Cerita tidak menghilang + Kombinasikan foto, video, dan teks untuk membuat pos cerita, yang menarik dan memancing pengunjung Anda untuk mengetuk, yang pasti disukai pengunjung Anda. + Sekarang cerita tersedia untuk semua orang + Contoh judul cerita + Cara membuat pos cerita + Anda memiliki akses awal e Pos Cerita dan kami ingin Anda mencobanya. + Memperkenalkan Pos Cerita + Halaman kosong dibuat + Halaman dibuat + Pratinjau Tata Letak + %1$s ditolak untuk mengakses foto Anda. Untuk memperbaiki ini, edit perizinan Anda dan aktifkan %2$s dan %3$s. + Penyisipan media gagal. + Penyisipan media gagal: %s + Pilih dari Pustaka Media WordPress + Kembali + Memulai + Ikuti topik untuk menemukan blog baru + Oleh + Perujuk ini tidak dapat ditandai sebagai spam + Hilangkan tanda sebagai Spam + Tandai sebagai Spam + Buka Situs Web + Mengunggah media gif + Mengunggah media stok + Mengunggah media Pilih item Cari atau ketik URL Tambahkan link telepon ini @@ -124,8 +156,6 @@ Language: id Pilih gambar atau video Pilih gambar Blok dihapus - Logo WordPress - Masukkan alamat situs Anda Lanjutkan dengan WordPress.com Konfirmasi pendaftaran Jika Anda melanjutkan dengan Google dan belum memiliki akun WordPress.com, Anda akan membuat akun dan menyetujui %1$sKetentuan Layanan%2$s kami. @@ -147,8 +177,6 @@ Language: id Atau ketik kata sandi Anda Buat akun Kirim tautan lewat email - Kenali kekuatan dari pembuat situs web yang paling andal. - 37\% dari situs web dikembangkan dari WordPress. Reset kata sandi Ada masalah saat menangani permintaan. Silakan coba lagi nanti. Berikan nama situs yang mencerminkan karakteristik dan topik situs Anda. Kesan pertama sangat berarti! @@ -399,7 +427,9 @@ Language: id Pilih Situs atau Tag untuk menyaring pos Hapus penyaring saat ini Login ke WordPress.com + Kelola Topik & Situs Login ke WordPress.com untuk melihat pos terbaru dari situs yang Anda ikuti + Masuk ke WordPress.com untuk melihat pos terbaru dari topik yang Anda ikuti Pratinjau Template Ganti Blok Saat Ini Tambahkan ke Akhir @@ -408,6 +438,8 @@ Language: id Tambahkan Blok Setelah Ikuti situs Lihat pos terbaru dari situs yang Anda ikuti + Tambahkan topik + Anda dapat mengikuti pos dengan subjek tertentu dengan menambahkan topik Mengikuti Penyaring Keterangan video. %s @@ -449,7 +481,6 @@ Language: id Pos ini akan segera disinkronisasi. Siap Mensinkronkan? Domain ini tidak tersedia - Perkenalan -%s Kami tidak dapat mengakses situs Anda. Anda harus menghubungi host untuk mengatasi masalah ini. Kami tidak dapat mengakses situs Anda karena ada masalah dengan <b>Sertifikat SSL</b>. Anda harus menghubungi host untuk mengatasi masalah ini. @@ -473,6 +504,7 @@ Language: id Temukan Suka Kami saat ini tidak dapat memuat data untuk situs Anda. Harap coba lagi nanti + Topik Pustaka Media WordPress Batalkan pengelompokan Terjemahan @@ -1052,6 +1084,8 @@ Language: id Anda belum memiliki situs Lainnya Ketuk %1$s Tema %2$s untuk menemukan tema baru + Tidak ada topi yang diikuti + Tambahkan topik di sini untuk menemukan pos tentang topik favorit Anda. Login ke akun WordPress.com yang Anda gunakan untuk menghubungkan Jetpack. Coba lagi Ada masalah @@ -1272,7 +1306,6 @@ Language: id Edit Foto Pilih situs Akun baru - Login Sudah login sebagai Detail orang Detail file @@ -2133,6 +2166,7 @@ Language: id 1 Suka %,d pengikut Suka + Edit topik dan situs Pos Pembaca Pengaturan pemberitahuan yang muncul di perangkat Anda. Pengaturan pemberitahuan yang dikirim melalui email yang terhubung dengan akun Anda. @@ -2204,7 +2238,6 @@ Language: id Log aplikasi sudah disalin ke clipboard Terjadi kesalahan saat menyalin teks ke clipboard Pos baru - Situs yang mungkin Anda sukai Mengunggah pos Situs ini kosong %1$d bulan @@ -2250,6 +2283,7 @@ Language: id Belum ada pos. Mengapa tidak membuatnya? Balas ke %s Log out… + Tidak ada pos dengan topik ini Tidak bisa menjalankan proses ini Tidak bisa memblokir situs ini Blokir situs ini @@ -2264,6 +2298,8 @@ Language: id Tidak dapat berhenti mengikuti situs ini Tidak ada situs yang disarankan Situs Pembaca + Topik yang diikuti + Masukkan URL atau topik yang ingin Anda follow Bantuan Sertifikat SSL tidak sah Jika biasanya Anda bisa terhubung dengan situs ini tanpa masalah, galat ini bisa berarti seseorang sedang mencoba meniru situs, dan Anda sebaiknya tidak melanjutkannya. Apakah Anda ingin mempercayai sertifikat ini? @@ -2344,6 +2380,8 @@ Language: id Tidak dapat menemukan file yang akan diunggah. Apakah file dihapus atau dipindahkan? Hapus pos? Hapus halaman? + Tidak dapat menambahkan topik ini + Tidak dapat menghapus topik ini Bagikan tautan Mengambil pos… Anda dan %,d lainnya menyukai ini @@ -2372,6 +2410,8 @@ Language: id Balas komentar… Belum ada komentar Reblog + Anda telah mengikuti topik ini + Topik tersebut tidak valid Tema Judul Subjudul diff --git a/WordPress/src/main/res/values-is/strings.xml b/WordPress/src/main/res/values-is/strings.xml index ba4c4102c2be..a3b972d37189 100644 --- a/WordPress/src/main/res/values-is/strings.xml +++ b/WordPress/src/main/res/values-is/strings.xml @@ -455,7 +455,6 @@ Language: is Gat ekki sótt færslur Atburðarskrá forritsins hefur verið afrituð í klemmuspjaldið Villa kom upp við að afrita texta í klemmuspjaldið - Vefir sem þér gæti líkað við Nýjar færslur %1$d mánuðir Á ári diff --git a/WordPress/src/main/res/values-it/strings.xml b/WordPress/src/main/res/values-it/strings.xml index ece921739d98..4a9dc70194f7 100644 --- a/WordPress/src/main/res/values-it/strings.xml +++ b/WordPress/src/main/res/values-it/strings.xml @@ -1,11 +1,42 @@ + Stiamo lavorando duramente per aggiungere più blocchi con ogni versione. + \"%s\" non è pienamente supportato + Pulsante di assistenza + Modifica utilizzando l\'editor web + Crea articolo della storia + Vengono pubblicati come un nuovo articolo del blog sul sito, quindi il pubblico non perderà nulla. + Gli articoli della storia non scompaiono + Combina foto, video e testo per creare articoli della storia coinvolgenti e che si possono toccare che i visitatori ameranno. + Le storie ora sono per tutti + Esempio titolo storia + Come creare un articolo della storia + Hai accesso anticipato agli articoli della storia e ci piacerebbe che tu facessi una prova. + Introduzione agli articoli della storia + Pagina bianca creata + Pagina creata + Anteprima layout + %1$s è stato negato l\'accesso alle tue foto. Per risolvere questo problema, modifica le tue autorizzazioni e attiva %2$s e %3$s. + Inserimento degli elementi multimediali non riuscito. + Inserimento degli elementi multimediali non riuscito: %s + Scegli dalla Libreria multimediale di WordPress + Indietro + Inizia ora + Segui gli argomenti per scoprire nuovi blog + Da + Questo referrer non può essere contrassegnato come spam + Annulla contrassegno come spam + Contrassegna come spam + Apri sito web + Caricamento GIF multimediale + Caricamento magazzino multimediale + Caricamento elemento multimediale Seleziona elemento Cerca o digita URL Aggiungi questo link del telefono @@ -125,8 +156,6 @@ Language: it Scegli immagine o video Scegli immagine Blocco rimosso - Logo WordPress - Inserisci l\'indirizzo del sito Continua con WordPress.com Conferma dell\'iscrizione Se continui con Google e non hai già un account WordPress.com, crei un account e accetti i nostri %1$sTermini di servizio%2$s. @@ -148,8 +177,6 @@ Language: it In alternativa, digita la tua password Crea account Invia link tramite e-mail - Libera tutto il potenziale del costruttore di siti più flessibile al mondo. - Il 37\% del web viene costruito con WordPress. Reimposta la password Si è verificato un errore durante la gestione della richiesta. Riprova più tardi. Dai al tuo sito un nome che rifletta la tua personalità e l\'argomento. La prima impressione conta. @@ -454,7 +481,6 @@ Language: it Questo articolo verrà sincronizzato immediatamente. Pronto per la sincronizzazione? Questo dominio non è disponibile - Introduzione -%s Non siamo stati in grado di accedere al tuo sito. Dovrai contattare il tuo fornitore di hosting per risolvere questo problema. Non siamo stati in grado di accedere al tuo sito perché abbiamo riscontrato un problema con il <b>certificato SSL</b>. Dovrai contattare il tuo fornitore di hosting per risolvere questo problema. @@ -1280,7 +1306,6 @@ Language: it Modifica foto Scegli sito Nuovo account - Accesso Autenticato come Dettaglio persona Dettagli file @@ -2214,7 +2239,6 @@ Language: it I log dell\'applicazione sono stati copiati negli appunti Questo sito è vuoto Nuovi articoli - Siti che potrebbero piacerti Si è verificato un errore durante la copia del testo negli appunti Caricamento dell\'articolo %1$d anni diff --git a/WordPress/src/main/res/values-ja/strings.xml b/WordPress/src/main/res/values-ja/strings.xml index 446d9521926b..162ff37f51a0 100644 --- a/WordPress/src/main/res/values-ja/strings.xml +++ b/WordPress/src/main/res/values-ja/strings.xml @@ -1,11 +1,43 @@ + リリースごとにブロックを追加できるよう努めています。 + 「%s」は完全にはサポートされていません + ヘルプボタン + Web エディターを使って編集 + 画像を選択 + ストーリー投稿を作成 + 新しいブログ投稿としてサイトに公開されるため、読者が見逃すことはありません。 + ストーリー投稿は消えません + 写真、動画、文章を組み合わせて、見た人が心をつかまれタップしたくなるような、好感を持たれるストーリー投稿を作ります。 + いまやストーリーはみなさんのためのものです + ストーリーのタイトルの例 + ストーリー投稿の作り方 + ストーリー投稿への早期アクセスへの権利を得ました。ぜひお試しください。 + ストーリー投稿の紹介 + 空白ページが作成されました + ページが作成されました + レイアウトのプレビュー + %1$s は写真へのアクセスを拒否されました。 これを解決するには、権限を編集して%2$sと%3$sをオンにしてください。 + メディアの挿入に失敗しました。 + メディアの挿入に失敗しました : %s + WordPress メディアライブラリから選択 + 戻る + 今すぐ始める + トピックをフォローして新しいブログを見つける + By + このリファラーはスパムとしてマークできません + スパムとしてのマークを解除 + スパムとしてマーク + サイトを開く + GIF メディアをアップロード中 + ストックメディアをアップロード中 + メディアをアップロード中 項目を選択 検索または URL を入力 この電話リンクを追加 @@ -125,8 +157,6 @@ Language: ja_JP 画像または動画を選択 画像を選択 削除したブロック - WordPress のロゴ - サイトアドレスを入力 WordPress.com で続ける 登録の確認 Google を引き続き使用し、WordPress.com アカウントをまだお持ちでない場合は、アカウントを作成して WordPress.com の%1$s利用規約%2$sに同意します。 @@ -148,8 +178,6 @@ Language: ja_JP または、パスワードを入力してください。 アカウントを作成 リンクをメールで送信 - 柔軟性の高いサイトビルダー機能を活用しましょう。 - Web の37\% が WordPress で構築されています。 パスワードをリセット リクエストの処理中に問題が発生しました。 後ほど、もう一度お試しください。 サイトにその特徴とトピックがわかるような名前を付けてください。 第一印象が大事です。 @@ -399,7 +427,9 @@ Language: ja_JP 選択済 投稿を絞り込むためのサイトまたはタグを選択 現在のフィルターを削除 + トピックとサイトを管理 WordPress.com にログイン + WordPress.com にログインし、フォロー中のトピックの最新投稿をチェック WordPress.com にログインし、フォロー中のサイトの最新投稿をチェック テンプレートのプレビュー 現在のブロックを置き換え @@ -407,7 +437,9 @@ Language: ja_JP 先頭に追加 前にブロックを追加 後にブロックを追加 + トピックを追加 サイトをフォロー + トピックを追加すると、特定の内容に関する投稿をフォローできます フォローしているサイトの最新の投稿を表示 フォロー中 フィルター @@ -450,7 +482,6 @@ Language: ja_JP この投稿はすぐに同期されます。 同期しても良いですか ? このドメインは利用できません - はじめに -%s サイトにアクセスできませんでした。ホストに問い合わせてこの問題を解決してください。 <b>SSL 証明書</b>の問題により、サイトにアクセスできませんでした。ホストに問い合わせてこの問題を解決してください。 @@ -465,6 +496,7 @@ Language: ja_JP いいね ディスカバー 保存しました + トピック サイト %sQi %sQa @@ -1053,6 +1085,8 @@ Language: ja_JP 後で もっと見る サイトがありません + フォローしているトピックがありません + ここでトピックを追加して、お気に入りのトピックに関する投稿を検索します Jetpack を接続するのに使用した WordPress.com アカウントにログインします。 再試行 設定 @@ -1273,7 +1307,6 @@ Language: ja_JP 写真の編集 サイトの選択 新しいアカウント - ログイン 現在のユーザーアカウント: ユーザーの詳細 ファイルの詳細 @@ -2135,6 +2168,7 @@ Language: ja_JP 1個の「いいね」 いいね %,d人のフォロワー + トピックとサイトを編集 Reader 投稿 端末に表示される通知の設定。 アカウントに結び付けられているメールに送信される通知の設定。 @@ -2206,7 +2240,6 @@ Language: ja_JP アプリケーションログをクリップボードにコピーしました このサイトは空です 新規投稿 - おすすめのサイト テキストをクリップボードにコピーする際にエラーが発生しました 投稿をアップロード中 %1$d年 @@ -2234,6 +2267,7 @@ Language: ja_JP %d件選択 よく聞かれる質問を表示 コメントはまだありません + このトピックには投稿がありません いいね 元の記事を表示 コメントは受け付けていません @@ -2264,7 +2298,9 @@ Language: ja_JP このサイトをすでにフォローしています このサイトを表示できません サイトをフォローしました + フォローする URL またはトピックを入力 フォロー中のサイト + フォローしているトピック Reader サイト 通常問題なくサイトに接続できる場合、このエラーは誰かがあなたのサイトになりすましていることを意味しているかもしれないので、そのまま進むべきではありません。それでもこの証明書を信頼してもよいですか ? 無効な SSL 証明書 @@ -2292,6 +2328,8 @@ Language: ja_JP このブログにアクセスする際にエラーが発生しました メディア項目を読み込めませんでした。 利用可能なネットワークがありません + このトピックを削除できません + このトピックを追加できません アプリケーションログ アプリのデータベースを作成する際にエラーが発生しました。アプリをもう一度インストールしてみてください。 このブログは非表示になっており読み込めません。設定画面から再有効化してもう一度お試しください。 @@ -2361,6 +2399,8 @@ Language: ja_JP %sを開けませんでした 画像を表示できません 共有に失敗しました + 有効なトピックではありません + このトピックをすでにフォローしています コメントを投稿できませんでした 「いいね」をつけました 1人がいいねをつけました diff --git a/WordPress/src/main/res/values-kmr/strings.xml b/WordPress/src/main/res/values-kmr/strings.xml index 547bc1c1aadc..f631014b1557 100644 --- a/WordPress/src/main/res/values-kmr/strings.xml +++ b/WordPress/src/main/res/values-kmr/strings.xml @@ -1,31 +1,63 @@ - Qalind + Ji bo em karibin bi her guhertoyê re blokên zêdetir tevlî bikin, em pir dixebitin. + \'%s\' bi temamî nayê piştgirîkirin + Bişkoka alîkariyê + Wêneyan hilbijêre + Şandiya Çîrokî Biafirîne + Bi bikaranîna webê sererast bike + Şandiyên çîrokî wenda nabin + Rûpel hat afirandin + Pêşdîtina rêkxistinê + Niha çîrok ji bo her kesî ne + Sernavê çîrokê - mînak + Şandiya çîrokî çawa tê afirandin + Rûpela vala hat afirandin + %1$s red kir ku bigihe wêneyên te. Bo çarekirina vê, destûrên xwe biguherîne û %2$s û %3$s veke. + Tevlîkirina medyayê bi ser neket. + Tevlîkirina medyayê bi ser neket: %s + Ji Medyageha WordPressê Hilbijêre + Paşve + Dest Pê Bike + Ji bo blogên nû keşf bikî, mijaran bişopîne + Ji hêla + Wekî Spam nîşan bike + Malperê Veke + Hilxistina medyaya gif\'ê + Hilxistina \"stock medya\"yê + Medya tê hilxistin + Hêmanê hilbijêre + Li URL\'yê bigere an jî binivîse + Girêdana vê telefonê tevlî bike + \"Înternet tune ye.\nPêşniyar nayên bikaranîn.\" + Vê girêdanê tevlî bike + Girêdana vê emailê tevlî bike Modern - Lîstikî Bihêz Klasîk - Serabera - Ji bo tomarkirina vîdyoyê divê tu destûra tomarkirina dengî bidî sepanê %s + Lîstikî %s hat hilbijartin - Bi E_name\'yê girêdanekê werbigire. - Hmm, em nikarin ti hesabekî WordPress.com\'ê ku bi vê navnîşana emailê ve girêdayî ye bibînin. + Serabera + Ji bo tomarkirina vîdyoyê divê tu destûra tomarkirina dengî bidî sepanê + Qalind Mîkrofon + Hmm, em nikarin ti hesabekî WordPress.com\'ê ku bi vê navnîşana emailê ve girêdayî ye bibînin. Ev şîrove nayê nîşandan - Hêmanên bo gerokê + Bi emailê girêdaneke têketinê bistîne + Hêmanan bibîne Vê şandiyê rapor bike Qozî - Tu bi xêr hatî Xwînerê. Li bin tiliyên xwe bi hezaran blogan keşf bike. Çewtiya servera navxweyî rû da - Ji bo çalakiya te destûr nayê dayîn %1$s hêmanên zêdetir + Tu bi xêr hatî Xwînerê. Bi milyonan blog li benda keşfkirina te ne. + Destûr ji bo çalakiya te nayê dayîn Planekê hilbijêre Nîşe: Di navbera pergala sitûnî, rûkar û ebatên ekranan de dibê ku cudabûn xwuya bikin Şandî an jî çîrokekê biafirîne @@ -34,26 +66,26 @@ Language: ku_TR \@string/contact_support Dibe ku tu biecibînî Veşêre + Pêvajo didome, dîsa biceribîne + Pêşeka Çîrokî nehat dîtin + Bîrgehê Bibîne + Çewtiya tomarkirina wêneyê Sernivîsa vîdyoyê. Vala Sernavê hildidemîne. - Blokê li peyê bizeliqîne + Blokê li dawiya wê bizeliqîne Sernavê rûpelê. %s Sernavê rûpelê. Vala Di jenandina vîdeoya te de çewtiyek rû da - Ev navgîna piştevaniya Camera2 API\'ê nake. - Vîdyo qeyd nebû - Çewtiya tomarkirina wêneyê - Pêvajo didome, dîsa biceribîne - Pêşeka Çîrokî nehat dîtin - Bîrgehê Bibîne + Ev cîhaz piştgiriya Camera2 API\'ê nake. + Vîdyo nehat tomarkirin + Pêşekek nehat tomarkirin + Bi rê ve bibe + Ji bo pêşekekê çalakî hewce ye Berî weşandinê divê em çîrokê li cîhaza te tomar bikin. Sazkariyên bîrgehê kontrol bike û ji bo ciyê vala çê bibe, hin dosyeyan rake. Bîrgeha cîhazê nêzî tijebûnê ye Jêbirin an jî tomarkirina pêşekan dîsa biceribîne, piştre dîsa weşandina çîroka xwe biceribîne. %1$d pêşek nehatin tomarkirin - Pêşekek nehat tomarkirin - Bi rê ve bibe - Ji bo %1$d pêşekan çalakî hewce ye - Ji bo pêşekekê çalakî hewce ye + Ji bo %1$d pêşekan çalakî hewce ne \"%1$s\" nehat hilxistin \"%1$s\" nehat hilxistin \"%1$s\" hat weşandin @@ -65,24 +97,24 @@ Language: ku_TR Bêsernav Biavêje Şandiya te ya çîrokî ew ê wekî reşnivîs neyê tomarkirin. - Şandiya çîrokî biavêje? Jê bibe Ev pêşek hîn nehatiye tomarkirin. Heke tu vê pêşekê jê bibî tu yê hemû guhertinan ji dest bidî. Ev pêşek ew ê ji çîroka te were rakirin. Pêşeka çîrokî jê bibe? Pêşekê jê bibe Rengê nivîsê biguherîne - Paldayîna nivîsê biguherîne çewtî derket hat hilbijartin nehat hilbijartin + Bila şandiya çîrokî were avêtin? + Spartina nivîsê biguherîne + Stickers Pêşek Dîsa biceribîne Hat tomarkirin Bigire Pêşve Qediya - Parve bike bi: PARVE BIKE Li wêneyan tomar bû Dîsa biceribîne @@ -92,65 +124,61 @@ Language: ku_TR Berovajî bike Deng Nivîs - Zêdetir - Stickers Flaş Kamerayê bizîvirîne - Bigire Pêşdîtin Rûpelekê biafirîne Rûpeleke vala biafirîne - Ji nav rûpelsaziyên berê hilbijêrin û destpê bikin. An ji pelekî vala dest pê bikin. - Rêkxistinekê Hilbijêre Sernavekî bide çîroka xwe Şandî an jî çîrokekê biafirîne Şandî, rûpel an jî çîrokekê biafirîne - Li %1$s Biafirîne bitikîne. %2$s Piştre<b>Şandiya Blogê</b> hilbijêre + Bigire + Ji nav rûpelsaziyên berê hilbijêrin û destpê bikin. An ji pelekî vala dest pê bikin. + Parve bike bi: + Zêdetir + Rêkxistinekê Hilbijêre + Li %1$s Biafirîne\'yê bitikîne. %2$s Piştre<b>Şandiya Blogê</b> hilbijêre Ji cîhazê hilbijêre Şandiya çîrokî + Bi ser kotaya Bîrgehê ket guhertina gotûbêja îkona malpera min pêdivî bi peyamek jetpack heye. Pengizîna rûpela girêdayî nayê dîtin Dosye nayê barkirin.\nBi ser kotaya Bîrgehê ket. - Bi ser kotaya Bîrgehê ket - Dosye tevlê bike + Dosye tevlî bike Vîdeoyê Dîscihke Vîdyo an wêneyê dîscihke Vîdyo Hilbijêre Vîdyo an jî wêne hilbijêre Wêne Hilbijêre Blok hat rakirin - Logoya WordPress\'ê - Navnîşana malpera xwe binivîse - Bi WordPress.com\'ê re dewam bike Pejirandina tomarbûnê + Bi WordPress.com\'ê re dewam bike Heke tu bi Googleê re dewam bikî û hesabê te yê WordPress\'ê tune be, dema tu ajimêrekê biafirînî tu pê re %1$sMercên Xizmetê%2$s yên me qebûl dikî. Bi domandinê re tu %1$sMercên Xizmetê%2$s yên me qebûl dikî. Em ê girêdaneke tomarbûnê bi emailê ji te re bişînin da ku tu hesabê xwe yê nû yê WordPress.com\'ê biafirînî. Em ê vê navnîşana emailê ji bo afirandina hesabê te yê nû yê WordPress.com\'ê bi kar bînin. Me girêdaneke tomarbûnê ji te re şand ji bo ku tu hesabê xwe yê WordPress.com\'ê biafirînî. Li ser vê cîhazê emaila xwe kontrol bike û li girêdana ji WordPress.com\'ê hatiye, bitikîne. - Ji bo %1$s agahiyên hesabê xwe bikevê. + Ji bo %1$sê agahiyên hesabê xwe bikevê. an jî Bi Googleê re dewam bike Navnîşana malpera xwe bibîne Qediya Ma tu emailê nabînî? Peldanka emailên nexwestî(spam) kontrol bike. Li ser vê cîhazê emaila xwe kontrol bike û li girêdana ji WordPress.com\'ê hatiye, bitikîne. - Em ê girêdaneke tu pê karibî rasterast têketinê bikî, ji te re bi emaîlê bişînin, hewceyî bi pêborînê tune ye. - Emaîlê kontrol bike + Em ê girêdaneke tu pê karibî rasterast têketinê bikî, ji te re bi emailê bişînin, hewceyî bi pêborînê tune ye. Dest Pê Bike - Ji bo têketinê an jî afirandina hesabekî WordPress.com\'ê navnîşana emaîla xwe bikevê. An jî pêborîna xwe binivîse Hesabekî biafirîne - Girêdanê bi emaîlê re bişîne - Hêza malpersaza herî kêrhatî derxe meydanê. - 37% ê webê li ser WordPressê hatiye avakirin. Pêborîna xwe nûsaz bike - Di hênana daxwazê de pirsgirêkek derket. Ji kerema xwe paşê dîsa biceribîne. - Nevekî bide malpera xwe bila li kesayet û mijarê wê were. Dîtina ewil girîng e! + Emailê kontrol bike + Ji bo têketinê an jî afirandina hesabekî WordPress.com\'ê navnîşana emaila xwe bikevê. + Girêdanê bi emailê re bişîne + Di hêrana daxwazê de pirsgirêkek derket. Ji kerema xwe paşê dîsa biceribîne. Sernavê malpera xwe saz bike Ji bo sazkirina sernavekî nû, li <b>%1$s</b>ê bitikîne - Jêbirina vê şandiyê ew ê guhertinên derhêlî jî rake. Bi rastî jî tu dixwazî dewam bikî? - Vebijarkên bloka %sê + Nevekî bide malpera xwe bila li kesayet û mijara wê were. Dîtina ewil girîng e! + Jêbirina vê şandiyê ew ê guhertinên derhêlî jî rake. Tu bi rastî jî dixwazî dewam bikî? + Vebijarkên bloka %s\'ê Blokê pir bike Blokê kopî bike Blok hat kopîkirin @@ -160,78 +188,78 @@ Language: ku_TR Blokê jê bike Blok hat kopîkirin Sernavê Malperê tenê ji aliyê rêveberekî dikare were guhertin. - Sernavê Malperê, li benda-sernavê ya geroka webê tê xuyan û di pirî rûkaran de jî li sermalperê tê xuyan. Mijar Sernavê malperê nehat hildemandin. Girêdana tora xwe kontrol bike û dîsa biceribîne. Guhertinên netomarkirî + Sernavê Malperê, li benda-sernavê ya geroka webê tê xuyan û di pirî rûkaran de jî li sermalperê tê xuyan. Girêdanê di gerokê de veke + %1$s · %2$s · %3$s Diçe beşa taybetkirina gradyanê + Gradyanê taybet bike Diçe bijêra rengê taybet Cûreya Gradyanê Ji bo vebijarkekê hilbijêrî, ducar bitikîne - Gradyanê taybet bike - %1$s · %2$s · %3$s Nivîskarê rûpelê - Vê GIF\'ê bi kar bîne Wêneyê biçûk ê medyayê nehat barkirin Awaya naverokê Hemû kes Ez + Vê GIF\'ê bi kar bîne Veşêre Nesazkirî - Etîket di derbarê çi bûna şandiyê de ji xwîneran re dibin alîkar. Demweşan - Etîketan tevlê bike Paşve Aniha tomar bike - Aniha bişîne Aniha demsaz bike Tê weşandin li - Etîket Demweşan Betal bike Vegerîne Reşnîvîsê + Etîket Şandiyên ketine jêbirdankê nayên sererastkirin. Ji bo tu karibî li ser wê bixebitî em rewşa şandiyê bikin \"reşnivîs\"? - Bila şandî veguheze Reşnivîsan? - Mijarên bala te dikişîne hilbijêre + Etîket di derbarê mijara şandiyan de ji xwîneran re dibin alîkar. + Aniha Bişîne + Etîketan tevlî bike Mijarên bala te dikişîne hilbijêre Qediya - Ji bo domandinê çend heban hilbijêre - Weşandî Çû jêbirdankê - Demsazkirî Demweşan + Weşandî + Demsazkirî Hişyariya nihêniyê ya CCPA\'yê bixwîne Qanûna Nihênîtiya Xerîdaran ya Californiayê (\"CCPA\") me mecbûr dike em şêniyên Californiayê agahdar bikin; derbarê wan kategoriyên agahiyên kesane de yên ku em kom dikin û parve dikin, herwiha ka em wan agahiyên kesane ji kû distînin û em wan çawa û çima bi kar tînin. + Bila şandî veguheze nav Reşnivîsan? + Hobiyên xwe hilbijêre + Ji bo domandinê hinekan hilbijêre Hişyariya nihêniyê ji bo bikarhênerên Kalîforniyayê - Rewş û Xuyanî - Aniha hildemîne + Rewş & Xuyanî + Aniha Hildemîne %1$s · %2$s - Rûpelsaziya destpêkê biceribînin Menuya çalakiyên blokê veke + Rûpelsaziya destpêkê biceribînin Behskirinê tevlîke Ji bo Pelê Jêrîn yê bi vebijêrkên berdest vebe, du caran bitepîne Ji bo Pelê Çalakiyan yê bi vebijêrkên berdest vebe, du caran bitepîne - Em aniha nikarin rûpelan vekin. Ji kerema xwe piştre dîsa biceribîne Bike Rûpela Şandiyan - Wekî Serrûpel saz bike \"Bikarhênerên wiha tune ne.\" - \"%s ne navekî derbasdar yê bikarhênerekî ye\" Rûpelê hilbijêre - Rûpela şandiyan + Em aniha nikarin rûpelan vekin. Ji kerema xwe piştre dîsa biceribîne + Wekî Serrûpel saz bike Serrûpela Sabît - Bloga klasîk Serrûpela hilbijartî û rûpela şandiyan nabe wekî hev bin. + Rûpela Şandiyan + Bloga Klasîk + \"%s ne bikarhênerekî derbasdar e\" + Bipejirîne Sazkariyên serrûpelê nehat hildemandin, girêdana înterneta xwe kontrol bike Heta rûpel neyên barkirin sazkariyên serrûpelê nayên tomarkirin Sazkariyên serrûpelê nayên tomarkirin - Bipejirîne - Barkirina rûpelan têk çû An serrûpeleke şandiyên te yên herî dawî nîşan dide (bloga klasîk) an jî rûpeleke sabit/statîk hilbijêre. Sazkariyên Serrûpelê - Serrûpel + Barkirina rûpelan bi ser neket Rûpela şandiyan nehat hildemandin Rûpela Şandiyan bi serkevtî hat hildemandin + Serrûpel Serrûpel nehat hildemandin Serrûpel bi serkevtî hat hildemandin Ji bo sazkirina rûpela Şandiyan, di Sazkariyên Malperê de \"Serrûpela Sabît\" biçalakîne @@ -241,47 +269,44 @@ Language: ku_TR Ji bo biçî sazkariyên rengan, ducar bitikîne Dema ku te malper şopandin tu yê naverokên wan li vira bibînî Zêdetirî wê bibîne - Di WordPress\'ê De Çi Nû Ne - %dê tevlê bike - biqusîne Pelge nehat barkirin, jkx dîsa biceribîne. - Pêşdîtina Wêneyê Biçûk Vê medyayê bi kar bîne Vê vîdyoyê bi kar bîne Medya hilbijêre Vîdyo Hilbijêre Malper nehat bijartin. Jkx, dîsa biceribîne. + Di WordPress\'ê De Çi Nû Ne + biqusîne + Pêşdîtina Wêneyê Biçûk + %d\'ê tevlî bike Bidomîne - Dîsblog bi ser neket - Malperan Birêve Bibe - Piştî te malpereke WordPress.com\'ê saz kir, tu dikarî naverokên kêfa te ji wan re tê li malpera xwe dîsblog bikî. - Ti malperên WordPress.com\'ê yên berdest nîn in Çi Nû Ne - Girêdan hat kopîkirin Navnîşana girêdanê kopî bike Parve bike bi Nehat parvekirin - Tevlê bike Bidomîne Kopî bike - Blokê ji pozisyona %1$sê, ber bi rastê ve bikişîne pozisyona %2$sê + Dîsblog bi ser neket + Malperan Birêve Bibe + Piştî te malpereke WordPress.com\'ê saz kir, tu dikarî naverokên kêfa te ji wan re tê li malpera xwe dîsblog bikî. + Ti malperên WordPress.com\'ê yên berdest nîn in + Girêdan hat kopîkirin + Tevlî bike Blokê veguhezîne rastê - Blokê ji pozisyona %1$sê, ber bi çepê ve bikişîne pozisyona %2$sê Blokê veguhezîne çepê Ji bo blokê veguhezînî rastê, ducar bitikîne Ji bo blokê veguhezînî çepê, ducar bitikîne - Blog + Blokê ji pozisyona %1$sê, ber bi rastê ve bikişîne pozisyona %2$sê + Blokê ji pozisyona %1$sê, ber bi çepê ve bikişîne pozisyona %2$sê Afirandina destgehê Sazkirina rûkarê Tevlêkirina taybetiyên malperê - Sitendina URL\'ya malperê - Malpera te ew ê di demeke kin de amade be Bijî!\nHindik ma biqede + Blog + Malpera te ew ê di demeke kin de amade be + Stendina URL\'ya malperê Hilxistinê betal bike Gava ev daxwaz dihat pêkanîn pirsgirêkek çêbû - Bihêzkirin: Tenor - Di Tenorê de lêgerînê bike - Ji Tenorê hilbijêre Şemî În Pêncşem @@ -289,268 +314,270 @@ Language: ku_TR Sêşem Duşem Yekşem + Bihêzkirin ji aliyê Tenor + Di Tenor\'ê de lê bigere + Ji Tenor\'ê hilbijêre Gihînî naveroka malpereke taybet nebû. Dibe ku hinek medya neyên bikaranîn Gihînî naveroka malpereke taybet dibe Wêne nehat qirpandin û tomarkirin, jkx dîsa biceribîne. - Barkirina wêneyê pêk nehat.\nJi bo dîsa biceribîne, bitepîne. Wêneyê pêş bibîne Formata rûpela nenas - Me nekarî vê çalakiya temam bikin û vê rûpelê bişinînin ji bo vekolînê. + Barkirina wêneyê pêk nehat.\nJi bo dîsa biceribîne, bitepîne. Me nekarî vê çalakiyê temam bikin û vê rûpelê demsaz bikin. Me nekarî vê çalakiyê temam bikin û vê rûpela taybet biweşînin. - Me nekarî vê çalakiyê temam bikin û vê rûpela biweşînin. + Me nekarî vê çalakiyê temam bikin û vê rûpelê bişinînin ji bo vekolînê. Me nekarî vê rûpelê bişînin ji bo vekolînê lê em ê piştre dîsa biceribînin. Me nekarî vê rûpelê demsaz bikin lê em ê piştre dîsa biceribînin. Me nekarî vê rûpela taybet biweşînin lê em ê piştre dîsa biceribînin. Me nekarî vê rûpelê biweşînin lê em ê piştre dîsa biceribînin. Me nekarî vê medyayê lê hilxin û vê rûpelê bişînin ji bo vekolînê. + Me nekarî vê çalakiyê temam bikin û vê rûpelê biweşînin. Me nekarî vê medyayê lê hilxin û vê rûpelê demsaz bikin. Me nekarî vê medyayê lê hilxin û vê rûpela taybet biweşînin. Me nekarî vê medyayê lê hilxin û vê rûpelê biweşînin. Dema ku cîhaza te dîsa serhêl bû em ê reşnivîsa te tomar bikin Dema ku cîhaza te dîsa serhêl bû em ê rûpela te ya taybet biweşînin. - Dema ku cîhaza te dîsa serhêl bû em ê rûpela te demsaz bikin. - Dema ku cîhaza te dîsa serhêl bû em ê rûpela te ji bo vekolînê bişînin. - Dema ku cîhaza te dîsa serhêl bû em ê rûpela te biweşînin. Rûpel ket dorê Rûpel tê hilxistin Cîhaz derhêl e. Rûpel bi cîgehî hat tomarkirin. Te li ser vê rûpelê guhertinên netomarkirî çêkir + Dema ku cîhaza te dîsa serhêl bû em ê rûpela te demsaz bikin. + Dema ku cîhaza te dîsa serhêl bû em ê rûpela te ji bo vekolînê bişînin. + Dema ku cîhaza te dîsa serhêl bû em ê rûpela te biweşînin. Rûpela te tê hilxistin - Rûpelê hilxistinên medyayê bi ser nexist û bi ew derhêlî hatin tomarkirin - Rûpel li cîhazê hat tomarkirin Rûpel bi serhêlî hat tomarkirin - Ji bo kurterêya QuickPress\'ê blogê hilbijêre - Sazandian Teserrufa Beteryayê Tarî Ronî Xuyang + Rûpel li cîhazê hat tomarkirin + Sazandian Teserrufa Beteryayê Te berî niha di vê rûpelê de hinek guhertin kir lê te ew guhertin tomar nekirin. Guhertoya were barkirin hilbijêre:\n\n + Rûpelê, hilxistinên medyayê bi ser nexist û bi ew derhêlî hatin tomarkirin + Ji bo kurterêya QuickPress\'ê, blogê hilbijêre Mirov Çi Dibêjin Em xizmetên cûrbicûr pêşkeş dikin ji bo tu bikarî encamên dixwazî bi dest bixî. Gelo baş nizanî ji te re çi divên an bihayên wan çend in? Em dikarin ji te re îzah bikin kîjan xizmet ji bo te baş in û behsa fiyetên xwe bikin. Li jêrê bi me re têkilî dayîne. - Em komeke biçûk ya pisporên jêhatî yên xwedî huner û tecrûbeyên cûrbicûr in. Em ji karê xwe hez dikin û wî bi dilxwazî dikin. Em ji dil li hêviyê ne ji bo bi te re bixebitin. + Em komeke biçûk a pisporên jêhatî yên xwedî huner û tecrûbeyên cûrbicûr in. Em ji karê xwe hez dikin û wî bi dilxwazî dikin. Em ji dil li hêviyê ne ji bo bi te re bixebitin. + Walt Disney Peyama Hişyariyê Tu dixwazî bi me re bixebitî? - Walt Disney Dê serdêr bixwazin pê bizanin yê li wî aliyê rûpelê kî ye. Ji bo li ser xwe, malpera xwe, karê xwe an jî her çi tiştê dixwazî binivîsînî vê qadê bi kar bîne. Ji bo ji ber gotinên xelkê yên li ser heman tiştan dipeyivin bigirî, helwestên li jêrê bi kar bîne. + Samuel the Dog + Sally Smith DYA - Ev naverokên nimûneyî ne, ji bo taybetiyên wî nîşan bidin li Kirasî hatine tevlîkirin. Wan jê bibe an jî li şûna wan peyv û medyayên xwe dayîne. - Ji bo mirov dest pê bike, divê dev ji axiftinê berde û dest bi kar bike. - Tîm Peyama Serkevtinê Stratejî Naveroka şandiyê nîşan bide Xizmet - Samuel the Dog - Sally Smith Navê Projeyê Pozisyon an jî Nasnav + Ev naverokên nimûneyî ne, ji bo taybetiyên wî nîşan bidin li Kirasî hatine tevlîkirin. Wan jê bibe an jî li şûna wan peyv û medyayên xwe dayîne. + Ji bo mirov dest pê bike, divê dev ji axiftinê berde û dest bi kar bike. + Tîm Portfolyo Tenê jêgirê nîşan bide Portfolyoya min çendîn projeyên min di seranserê kariyera xwe de ava kirine nîşan dide. Li jêrê agahiyên min yên têkiliyê bibîne û bi min re têkilî dayîne. Girêdana: - Ka em biaxivin 👋. Dudilî nebe, tu dikarî ji agahiyên têkiliyê yên li jêr xwe bigihînî me an jî bi bikaranîna formê peyamekê ji me re bişîne. + Ka em biaxivin 👋 Dudilî nebe, tu dikarî ji agahiyên têkiliyê yên li jêr xwe bigihînî me an jî bi bikaranîna formê, peyamekê ji me re bişînî. Ka were em bi hev re tiştekî ava bikin! Ka were em bi hev re tiştekî ava bikin! Juan Pérez J.K. Rowling - Harry, bijartinên me ji qabiliyetên me zêdetir, me bi rastî didin nîşan ka em kî ne. + Dr. Seuss + Dirêjahiya jêgirtinê (peyv) Îlham + Harry, bijartinên me ji qabiliyetên me zêdetir, me bi rastî didin nîşan ka em kî ne. Têkeve Têkiliyê - Dirêjahiya jêgirtinê (peyv) Ji min re email bişîne:<a href=\"mailto:mail@example.com\">mail@minak.com</a> - Dr. Seuss Negirî ji bo ku qediya, bikene ji bo pêk hat. - KESANE BIKE Bajar, 10100 - Bloka Pragrafê tevlê bike + BITAYBETÎNE Îzaheke kurt ji xizmetên tu pêşkêş dikî. - Biyografiyeke kurt ku raboriya kesane, serkevtinên girîng an jî rastiyek balkêş, bihewîne. <a href=\"mailto:mail@example.com\">mail@minak.com</a> Danasîna projeyê û xebatên tên pêşkêşkirin. + Biyografiyeke kurt ku raboriya kesane, serkevtinên girîng an jî rastiyeke balkêş, bihewîne. + Bloka Pragrafê tevlî bike (555)555–1234 - Rêya Kolana 10ê + Rêya Kolana 10 Şandiyekê biafirîne + Navnîşana Malperê Jêçûyî Demsazkirî Weşandî Girêdana Facebookê nikare ti Rûpelan bibîne. Bangewazî, bi Profîlên Facebookê ve nayê girêdan, tenê dikare bi Rûpelên weşandî ve bê girêdan. Nehatiye girêdan - Navnîşana Malperê - Ecibandin Şopîner Şîrove Nexwendî Neşîne jêbirdankê Jêbirdank + Ecibandin Çalakî Şandî û Rûpel Giştî - Karta nû tevlê bike - Karta amaranên nû tevlê bike + Karta nû tevlî bike + Karta amarên nû tevlî bike + Hilbijartî + Fîltreya heyî rake Ji bo şandiyên ji mijarên spesifîk bibînî bişkoka fîtreyê bi kar bîne Malper an Etîketê Hilbijêrin, Paceya Hilpekok - Hilbijartî Ji bo şandiyan fîltre bikî Malperekê an Etîketekê bibijêre - Fîltreya heyî rake - Etîket & Malperan bi rê ve bibe Têkeve WordPress.com\'ê - Têkeve WordPress.comê ji bo şandiyên ji etîketên tu wan dişopînî bibînî - Têkeve WordPress.comê ji bo şandiyên ji malperên tu wan dişopînî bibînî + Etîket û Malperan bi rê ve bibe + Ji bo tu şandiyên herî dawî yên ji mijarên tên şopandin bibînî têkeve WordPress.com\'ê + Ji bo tu şandiyên herî dawî yên ji malperên tên şopandin bibînî têkeve WordPress.com\'ê Pêşdîtina Kirês Bloka heyî biguherîne Tevlî dawiyê bike Tevlî serî bike Tevlî pêşiya blokê bike Tevlî paşiya blokê bike - Etîketekê tevlê bike Malperekê bişopîne - Tu dikarî etîketekê tevlî bikî ji bo şandiyên mijareke spesifîk bişopînî Şandiyên herî nû yên ji malperên tu wan dişopînî bibîne + Mijarekê tevlî bike + Tu dikarî bi lêzêdekirina mijarekê şandiyên eleqedarî babeteke diyar bişopînî Şopandinên Te Fîltre bike Sernivîsa vîdyoyê. %s Vîdyoyê sererast bike Ji bo rêkxistinekê bibijêrî du caran bitepîne - Kurtekodekê tevlê bike… + Kurtekodekê tevlî bike… Nivîskarê şandiyê - Şandiyekê biafirîne - Te hemû statîstîkên vê serdemê bihîstin.\n Heke dîsa bitepînî dê ji serî ve dest pê bike. - Di vê serdemê de qet statîstîk nîn in. - Ji bo %1$s Çalakiya Şandiyan - %1$s dîtin ji bo %2$sê di ev qas rojan de pêk hatine: %2$s %3$s . Ji bo agahiyên bêhtir bitepîne. - here hemû statîstîkên vê serdemê pir bilind bilind navîn nizm -   û %1$d %2$s + Şandiyekê biafirîne + %1$s dîtin ji bo %2$sê di ev qas rojan de pêk hatine: %2$s %3$s . Ji bo agahiyên bêhtir bitepîne. +   & %1$d %2$s + Te hemû amarên vê heyamê bihîstin.\n Heke dîsa bitepînî dê ji serî ve dest pê bike. + Di vê heyamê de ti amar nîn in. + Ji bo %1$s\'ê Çalakiya Şandiyan + here hemû amarên vê heyamê %1$s, %2$d %3$s - Wênêyê veguhezîne pêşiyê - Wêneyê veguhezîne paşiyê - Sernivîsa pêşangehê. %s %1$s. Nirxê heyî %2$s ye Şandî an jî rûpelekê biafirîne + Wênêyê veguhezîne pêşiyê + Wêneyê veguhezîne paşiyê + Sernivîsa galeriyê. %s Malpera ji destê mirovan - Niha na Em ê alî te bikin ji bo her çi tiştên dixwazî li vê derê ava bikî an parve bikî. - Bi xêr hatî WordPress\'ê + Ne niha Wênegeh Wêne nehat hilbijartin - , Hat hilbijartin + Tu bi xêr hatî WordPress\'ê Wêne hat hilbijartin Wêneyê Biçûk Şandiya blogê - Nû tevlê bike + ,Hat hilbijartin + Nû tevlî bike Biweşîne - Me gelek pêşxistinên mezin pêk anîn li ser edîtora blokî û bi ya me divê tu wê biceribînî! Me ew ji bo şandî û rûpelên nû çalak kir, lê heke dixwazî vegerî edîtora klasîk, here \'Malpera Min\'> \'Sazkariyên Malperê\'. + Me gelek pêşxistinên mezin li ser edîtora blokî pêk anîn û bi ya me divê tu wê biceribînî! Me ew ji bo şandî û rûpelên nû çalak kir, lê heke dixwazî vegerî edîtora klasîk, here \'Malpera Min\' \'Sazkariyên Malperê\'. Aniha senkronîze bike Ev şandî ew ê yekser were senkronîzekirin. Tu ji bo senkronîzekirinê amade yî? - Ev navper(domain) nayê bikaranîn - Pêşgotin -%s + Ev navper(domain) nayê bikaranîn Me nekarî xwe bigihînin malpera te. Ji bo çareserkirina vê pirsgirêkê hewce ye tu xwe bigihînî hewangeha(host) xwe. Ji ber pirsgirêkeke eleqedarî <b>Sertîfîkaya SSL</b>ê me nekarî xwe bigihînin malpera te. Ji bo çareserkirina vê pirsgirêkê hewce ye tu xwe bigihînî hewangeha(host) xwe. Me nekarî xwe bigihînin malpera te ji ber ku hewceyî bi <b>Rastandina HTTP</b>ê heye. Ji bo vê çareser bikî divê tu bi hewangerê xwe re têkilî dayînî. + Rûpela malperê + Şopandî Me nekarî xwe bigihînin </b>dosyeya XMLPRC<b>ê ya li ser malpera te. Divê tu bi hewangerê xwe re têkilî dayînî ji bo vê çareser bikî. Hindikek ma! Tenê divê em navnîşana emaila te ya bi Jetpack\'ê ve girêdayî piştrast bikin <b>%1$s</b> Bi agahiyên xwe yên malperê têkeve. - Bi agahiyên xwe yên malperê %1$s têkeve Emaila pejirandinê bişîne - Rûpela malperê - Şopandî - Ecibandî - Keşf bike - Hat tomarkirin - Etîket - Malper + Bi agahiyên xwe yên malpera %1$sê têkeve %sQi %sQa %sT %sB %sM %sk + Ecibandî + Keşf bike + Malper Em aniha nikarin şandiyan vekin. Ji kerema xwe piştre dîsa biceribîne Em aniha nikarin daneyan ji bo malpera te bar bikin. Piştre dîsa biceribîne + Hat tomarkirin + Mijar Medyageha WordPress\'ê - Komê Jihev Veqetîne Wergerîne Sernav: + Dest bi nivîsandinê bike… + Komê Jihev Veqetîne + Vîdyo an jî Wêne Bikişîne Ji bo klavyeyê veşêrî, bitikîne Ji bo alîkariyê nişan bidî, bitikîne - Vîdyo bikişîne - Vîdyo an jî Wêne Bikişîne - Wêneyekî bikişîne - Dest bi nivîsandinê bike… + Vîdyo Bikişîne + Wêneyekî Bikişîne Mezinahî - Pêveka sernavê kêlekbendê Beşê nîşan bide + Blokê jê bike Bloka %s. Di vê blokê de naveroka nederbasdar heye Bloka %s. Vala - Blokê jê bike + Pêveka sernavê kêlekbendê Bilokê Nûsaz Bike - Têbîniyan rake Pirsgirêk di vekirina vîdyoyê de derket + Bloka dawiya rûpelê. %s + Sazkariyan Veke + Têbîniyan rake Pirsgirêk di nîşandana blokê de derket Sernavê şandiyê. %s Sernavê şandiyê. Vala - URL\'ê bizeliqîne - Bloka dawiya rûpelê. %s - Sazkariyan Veke - Ti sepan nikare vê daxwazê birêve bibe. Ji kerema xwe gerokeke webê saz bike. - Here Jorê + URL\'yê bizeliqîne + Ti sepan nikare vê daxwazê birêve bibe. Ji kerema xwe gerokeke Webê saz bike. Panela min a berî-weşanê Agahiyên rewşa şandiya min Panela min a piştî-weşanê + Here Jorê Panela sazkariyên dosyeya min Blokê ji rêzika %1$sem veguhezîne rêzika %2$sem Blokê veguhezîne jorê Blokê ji rêzika %1$sem bi jêr ve veguhezîne rêzika %2$sem - Blokê bikişîne jêrê Sernivîsa wêneyê. %s Klavyeyê veşêre - Naveroka panelê li vir e! Îkona alîkariyê Tevlîkirina medyayê bi ser neket.\nJi bo vebijarkan, bitepîne. + Blokê bikişîne jêrê + Naveroka panelê li vir e! Ji bo guhertina dawî vegerînî, ducar bitikîne + Ji bo bijartinê, ducar bitikîne Ji bo sazkariyê biguherînî, ducar bitikîne Ji bo wêneyekî hilbijêrî, ducar bitikîne Ji bo vîdyoyekê hilbijêrî, ducar bitikîne - Ji bo bijartinê, ducar bitikîne Ji bo guhertina dawî dubare bikî, ducar bitikîne Ji bo blokê veguhezînî jorê, ducar bitikîne Ji bo blokê veguhezînî jêrê, ducar bitikîne Ji bo vî nirxî sererast bikî, ducar bitikîne - Ji bo bi rêya kaşokê nirxî biguherînî ducar bitepîne Ji bo blokekê tevlê bikî, ducar bitikîne - Nirxê heyî %s ye + Ji bo bi rêya kaşokê nirxî biguherînî, ducar bitepîne Naverok… Ji cîhazê hilbijêre + Nirxê heyî %s ye Kêlekbenda Şerhan - Çewtiyeke nenas qewimî. Jkx dîsa hewl bide. Nivîsa alternatîv - VÎDYO TEVLÊ BIKE - URL tevlê bike - WÊNE AN VÎDYO TEVLÊ BIKE - WÊNE TEVLÊ BIKE - BLOKÊ TEVLÎ VIR BIKE Tebîniyeke zêde devlîke - Raveyekê tevlê bike + Çewtiyeke nenas qewimî. Jkx dîsa hewl bide. + BLOKÊ TEVLÎ VIR BIKE + VÎDYO TEVLÎ BIKE + URL tevlî bike + WÊNE AN VÎDYO TEVLÎ BIKE + WÊNE TEVLÎ BIKE + Raveyekê tevlî bike Ji bo şandiyekê li lîsteya xwe qeyd bikî bitikîne bişkoka Tevlî Şandiyên Qeydkirî Bike. - %1$d hêman li lîsteyê hatin barkirin. + \"%1$d hêman li lîsteyê hatin barkirin.\" Danezan Girtî Vekirî Heke tu ji bo vê malperê danezanan bigirî, ew ê danezanên li ser \"hilpeka danezanan\" tên xuyan neçalak bike. Piştî ku te ji bo vê malperê danezan çalak kirin, tu dikarî cûreya danezanan saz bikî. - Ji bo danezanên vê malperê di hilpeka danezanan de bibînî, danezanên vê malperê çalak bike. Ji hilpeka danezanan ji bo vê malperê nîşandana danezanan çalak bike Ji hilpeka danezanan ji bo vê malperê nîşandana danezanan neçalak bike Danezanên ji bo vê malperê Danezanên ji bo vê malperê + Ji bo danezanên vê malperê di hilpeka danezanan de bibînî, danezanên vê malperê veke. Tu aniha ji bo rûpelên nû edîtora blokê bi kar tînî, bijî! Heke tu bixwazî vegere edîtora klasîk, here \'Malpera Min\' > \'Sazkariyên Malperê\'. - Tu aniha ji bo şandiyên nû edîtora blokê bi kar tînî, bijî! Heke tu bixwazî vegere edîtora klasîk, here \'Malpera Min\' > \'Sazkariyên Malperê\'. - Vîdyo an wêne tevlê bike + Tu ji bo şandiyên nû aniha edîtora blokê bi kar tînî, bijî! Heke tu bixwazî vegere edîtora klasîk, here \'Malpera Min\' > \'Sazkariyên Malperê\'. + Vîdyo an jî wêne tevlî bike Me nekarî vê şandiyê bişînin ji bo vekolînê lê em ê piştre dîsa biceribînin. Me nekarî vê şandiyê demsaz bikin lê em ê piştre dîsa biceribînin. Me nekarî vê şandiya taybet biweşînin lê em ê piştre dîsa biceribînin. @@ -564,355 +591,350 @@ Language: ku_TR Me nekarî vê medyayê lê hilxin û vê şandiya taybet biweşînin. Me nekarî vê medyayê lê hilxin û vê şandiyê biweşînin. Me nekarî vê medyayê lê hilxin. - Me nekarî vê çalakiyê temam bikin lê em ê piştre dîsa biceribînin. - Me nekarî ev çalakî temam bikin. Reşnivîseke vala nayê pêşdîtin Rûpeleke vala nayê pêşdîtin Şandiyeke vala nayê pêşdîtin Pêşdîtin nayê bikaranîn Çewtî: di tomarkirina şandiyê ya berî pêşdîtinê de + Me nekarî vê çalakiyê temam bikin lê em ê piştre dîsa biceribînin. + Me nekarî vê çalakiyê temam bikin. Pêşdîtin tê çêkirin… - Tê tomarkirin… Te li ser vê şandiyê guhertinên netomarkirî çêkir + Tomar dibe… Guhertoya ji vê sepanê Guhertoya ji cîhazeke din - Bi vê sepanê\nDi %san de hatiye qeydkirin\n\nBi amûreke din\nDi %san de hatiye qeydkirin\n Te berî niha di vê şandiyê de hinek guhertin kir lê te ew guhertin tomar nekirin. Guhertoya were barkirin hilbijêre:\n\n Tu dixwazî kîjan guhertoyê sererast bikî? - Bêveger jê bibe - Em ê guhertinên herî dawîn ên reşnivîsa te tomar nekin. + Bi Mayînde Jê Bîbe + Ji vê sepanê\nDi %san de hat tomarkirin\n\nJi cîhazeke din\nDi %san de hat tomarkirin\n + Em guhertinên herî dawîn ên reşnivîsa te tomar nakin. Em ê van guhertinan demsaz nekin. Em ê van guhertinan ji bo vekolînê neşînin. - Em ê van guhertinan neweşînin. Dema ku cîhaza te dîsa serhêl bû em ê reşnivîsa te tomar bikin Dema ku cîhaza te dîsa serhêl bû em ê şandiya te ya taybet biweşînin. + Em ê van guhertinan neweşînin. Dema ku cîhaza te dîsa serhêl bû em ê şandiya te demsaz bikin. Dema ku cîhaza te dîsa serhêl bû em ê şandiya te ji bo vekolînê bişînin. Dema ku cîhaza te dîsa serhêl bû em ê şandiya te biweşînin. - Ev çalakî nikare bê betalkirin. Dibe ku navê bikarhêner hatibe hildemandin. Navê te yê bikarhêneriyê yê nû %1$s e Navê bikarhêner tê tomarkirin… - Navê bikarhêner biguherîne - Tu navê xwe yê bikarhêneriyê dikî %1$s%2$s%3$s. Guhertina navê bikarhêneriyê dê bandorê li ser profîla te ya Gravatarê û navnîşanên te yên profîla Intense Debateyê jî bike.\nJi bo dewamkirinê, navê xwe yê bikarhêneriyê yê nû bipejirîne. + Ev çalakî nayê betalkirin. Dibe ku navê bikarhêner ji berê ve hatibe hildemandin. Baldar be! - Tu dikî navê xwe yê bikarhêneriyê yê ku niha %1$s%2$s%3$s ye, biguherînî. Tu yê careke din nekaribî navê xwe yê bikarhêneriyê bikî yê berê. - Sazkariyên performansa Jetpack\'ê bibîne û biguherîne Performans û Lez - Zêdetir - Li şûna lêgerîna WordPress\'ê ya cihgirtî tecrûbeyeke lêgerînê ya pêşketîtir saz bike + Navê bikarhêner biguherîne + Sazkariyên performansa Jetpack\'ê bibîne û biguherîne + Tu navê xwe yê bikarhêneriyê dikî %1$s%2$s%3$s. Guhertina navê bikarhêneriyê dê bandorê li ser profîla te ya Gravatarê û navnîşanên te yên profîla Intense Debateyê jî bike.\nJi bo dewamkirinê, navê xwe yê bikarhêneriyê yê nû bipejirîne. + Tu dikî navê xwe yê bikarhêneriyê yê ku niha %1$s%2$s%3$s ye, biguherînî. Tu yê nekaribî navê xwe yê bikarhêneriyê vegerînî yê berê. Lêgerîna Pêşketî - Lêgerîna Jetpack\'ê - Hewandina Vîdyoyên Bêreklam Medya - Bihêle bila Jetpack wêne û dosyeyên te yên statîk (wek CSS û JavaScriptê) optîmîze bike ji bo rûpelên te zûtir werin barkirin. - Dosyeyên statîk ên leztir - Wêneyên bilez Girtî + Wêneyên bilez + Zêdetir + Li şûna lêgerîna WordPress\'ê ya cihgirtî tecrûbeyeke lêgerînê ya pêşketîtir saz bike + Lêgerîna Jetpack\'ê + Hewandina Vîdyoyên Bê-reklam + Ji bo rûpelên te zûtir werin barkirin bihêle bila Jetpack wêne û dosyeyên te yên statîk (wek CSS û JavaScriptê) optîmîze bike. + Dosyeyên statîk ên bilez Vekirî + Performans Lezkera Malperê Tenê bi barkirina wêneyên li ser ekranê dixuyin re leza malperê xwe zêde bike. - Performans Daxistin - Dosye + Navçedema malperê (UTC) + Navçedema malperê (UTC + %s) + Navçedema malperê (UTC - %s) Daxistinên pelgeyan Rêjejimarên daxistina pelgeyan berî 28ê Pûşpera 2019an nehatiye tomarkirin. - Navçedema malperê (UTC - %s) - Navçedema malperê (UTC + %s) - Navçedema malperê (UTC) + Dosye Sermase Jixweber - Gotûbêjê Bigire - Cûreya pêşdîtinê hilbijêre Parve bike - Paşve here Pêşve here - Ji bo li ser \"%s\" ê biweşînî di sepana te %s ya WordPressê de\n\"%s\" hat demsazkirin - Şandiya Demsazkirî ya WordPressê: \"%s\" + Paşve here \"%s\" dê di 10 xulekan de were weşandin + Şandiya Demsazkirî ya WordPressê: \"%s\" + Cûreya pêşdîtinê hilbijêre + Ji bo li ser \"%s\" ê biweşînî di sepana te %s ya WordPressê de\n\"%s\" hat demsazkirin + Kodika Gotûbêjê Bigire + Dema ku hat weşandin \"%s\" dê di demjimêrekê de were weşandin \"%s\" hat weşandin - Şandiya demsazkirî: Bîranîna 10 xulekî - Şandiya demsazkirî: Bîranîna 1 demjimêrî Şandiya demsazkirî Heke dema weşanandinê di roboriyê de be, danezan nayê afirandin. - Dema ku hat weşandin + Şandiya demsazkirî: Bibîrxistina10 xulekî + Şandiya demsazkirî: Bibîrxistina 1 demjimêrî + Danezan + Girtî Berî 10 xulekan Berî demjimêrekê - Girtî - Salnameyê tevlê bike - Danezan Dem û Dîrok - Alîkarî hewce ye ji bo dîtina e-peyama ku tu pê dihate girêdan? + Tevlî salnameyê bike Malpera di vê adrêsê de ne malpereke WordPressê ye. Ji bo ku em karibin pê re têkiliyê deynin divê ser malperê WordPress sazkirî be. Xêra xwe temamiya adrêsa malperê têkeve, mîna \"example.com\". + Alîkarî hewce ye ji bo dîtina e-peyama ku tu pê dihate girêdan? Bi WordPressê têkeve, ji bo girêdana %1$s Dîtin Şandî %1$s: %2$s, %3$s: %4$s - Hêman hate tengkirin - Hêman hate firehkirin - Veşêre Fireh bike - Grafîk hate hildemandin. %1$s %2$s bo dewra %3$s, ji dewra berê hate guhertin - %4$s - Daneya karta bijartî tê barkirin - Sererastker + Veşêre + Hêman hat tengkirin + Hêman hat firehkirin + Grafîk hat hildemandin. + Daneyên karta bijartî tê barkirin + Edîtor Fireh bike Teng bike - Navnîşana epeyama xwe piştrast bike - rêname bo epeyama te hat şandin - Navnîşana epeyama xwe piştrast bike - rêname bo %s hate şandin - Betal + Navnîşana emaila xwe piştrast bike - rêwerz ji emaila te re hat şandin + Navnîşana emaila xwe piştrast bike - rêwerz ji %s\'ê re hat şandin BAŞ e http(s):// Girêdanê Rake Girêdanê tevlî bike Hilxistinê dîsa biceribîne - Medya tê hilxistin.\nJi kerema xwe bo vebijêrkan, bitepîne. - Girêdanê di paceyek/hilpekek nû de veke + Betal bike + Medya tê hilxistin.\nJi kerema xwe ji bo vebijêrkan, bitepîne. + Girêdanê di pencereyeke/hilpekeke nû de veke Ji bo amarên xwe bibînî, têkeve hesabê WordPress.com\'ê. + Îro Li gor lêgerîna te ti şandî nehatin dîtin Li şandiyan bigere - Mirov ew ê di înternetê de te li vir bibînin. - Navê navpereke(domain) premiûm bibijêre Di hemû planên WordPress.com\'ê de navperên(domain) taybet hene. Aniha navpera xwe ya premiûm bêpere tomar bike. Bi nêrînekê - Îro Hemû-dem + Mirov di înternetê de ew ê te li vir bibînin. + Navê navpereke(domain) premiûm hilbijêre Dîtinên vê hefteyê - Ji bo tevlîkirina alavokekê, ji kerema xwe têkeve sepana WordPressê. - Înternet tune ye Dane nehatin barkirin - Cûre Reng - Malpera xwe bibijêre - Tarî - Ronî Reng - Malpera xwe bibijêre Malper - Hemû-dem Dîtinên vê hefteyê Alavok tevlî bike + Ji bo tevlîkirina alavokekê, ji kerema xwe têkeve sepana WordPressê. + Tarî + Ronî + Înternet tune ye + Cûre + Hemû-dem + Malpera xwe hilbijêre + Malpera xwe hilbijêre Nûyandina hûrgiliyên pêvekan ji her tim bêhtir dewam dike. Ji kerema xwe paşê dîsa kontrol bike. Eger te navperek nû tomar kiribe, ji kerema xwe li bende be heta em sazkirina wê biqedînin û paşê dîsa biceribîne.\n\nEger na, wisa dixuyê ku şaşiyek pêk hatiye û dibe ku taybetiya pêvekê ji bo vê malperê ne guncan be. - Herêm (Tune Ye) Bi tomarkirina vê navperê tu %1$sşert û merc%2$s ên me dipejirînî. - Li girêdana xwe ya torê venêre û dîsa biceribîne. Ev rûpel niha nayê barkirin. + Li girêdana xwe ya torê venêre û dîsa biceribîne. Sazkarî nehatin wergirtin: Hin API ji bo vê tevîhevkirina IDya sepana OAuthê û ajimêrê ne guncan in. Bi sazkirina Jetpackê tu %1$smerc û rêbazên%2$s me dipejirînî. - Girêdan tune ye. Serastkirin hat neçalakkirin. - Ji bo sepanê dîsa girê bidî malpera xwe yî xwe-hewandî, pêborîna nû ya malperê binivîse vir. + Herêm (Tune ye) Pêborîn hat hildemandin + Ji bo sepanê dîsa girê bidî malpera xwe yî xwe-hewandî, pêborîna nû ya malperê binivîse vir. Pêborînê hildemîne + Înternet tune ye. Sererastkirin hat neçalakkirin. Navê navperê(domain) tê tomarkirin… - Herêmê Hilbijêre Welat Hilbijêre + Herêmê Hilbijêre + Bajar + Navnîşan 2 bidomîne navê navpera we <b>%s</b> tê sazkirin.\nMalpera we ji coşê dide çirifîtka! - Pîrozbahî - Navperê Tomar Bike - Koda posteyê Herêm - Bajar - Navnîşan 2 Navnîşan Welat Koda Welêt Telefon - Organîzasyon (li gor daxwazê) + Koda Posteyê + Bijî! + Domain\'ê Tomar Bike Ji bo rehetiya te, me agahiyên te yên pêwendiya WordPress.comê\n ji berê de tije kir. Ji kerema xwe bala xwe bidê, bê ka ji dil agahiyên tu dixwazî ji bo vê navperê bi kar bînî ew in an na. - Agahiyên têkiliya navperê + Organîzasyon (li gor daxwazê) Bi eşkereyî tomar bike Bi Parastina Nepenîtiyê, veşartî tomar bike Divê xwediyên navperan di agahîdankek giştî ya hemû navperan de agahiyên xwe yî pêwendiyê parve bikin. Bi Parastina Nepenîtiyê, em agahiyên xwe di şûna yên te de parve dikin û hemû danûstandinan radigihînin te. + Agahiyên têkiliyê yên navperê(domain) Parastina Nihêniyê - Ji kerema xwe %s yeka derbasdar têxîne - Navper Bibijêre + Ji kerema xwe %s a derbasdar bikevê - Veşêre Aniha biceribîne - Rêjejimarên(statîstîkên) ku dixwazî bibînî bibijêre û bala xwe bide agahiyên bi kêrî te tên. Ji bo rêjejimaran(statîstîkan) xwemalî bikî, bitepîne %1$s di binê \"Kûrbînî\"yê de. - Rêjejimarên xwe bi rê ve bibe - Guherto tê anîn… - Tevlîkirina medyayê bi serneket.\nJi bo ceribandineke din, bitepîne. + Veşêre + Domain\'ê Hilbijêre + Amarên ku tu dixwazî bibînî hilbijêrî û bala xwe bide daneyên bi kêrî te tên. Ji bo amarên xwe kesane bikî, li hêmana %1$s\'ê ya di binê \"Kûrbînî\"yê de ye bitikîne. + Amarên xwe bi rê ve bibe + Guherto tên stendin… Reşnivîsa te tê hilxistin + Tevlîkirina medyayê bi ser neket.\nJi bo dîsa biceribînî, bitikîne. Reşnivîs tê hilxistin Reşnivîs - Di vegerandina şandiyê de çewtiyek pêk hat - Vegeriya ser: %s - Tenê rêjejimarên herî pêwendîdar bibîne. Kûrbînên xwe tevlî jêr bike û serast bike. + Di vegerandina şandiyê de çewtiyek derket Civakî - Rêjejimarên Salane ya Malperê - Tevahiya Şopîneran - Pêşniyarên navperê nehate barkirin - Ji bo fikrên zêdetir peyvkilîdekê binivîse Ti pêşniyar nehatin dîtin - Navperê Tomar Bike - Ev Jetpack niha hate sazkirin, tene divê em sazkariyên te temam bikin. Ev, dê tenê xulekekê bigire. - Ji nav kûrbînan derxe - Daxe jêr - Bibe jor - Sazkariyên hêmana rêjejimaran - Şandî vedigere reşnivîsê - Şandî tê vegerandin + Vegeriya ser: %s + Tevahiya Şopîneran + Tenê amarên herî eleqedardar bibîne. Kûrbînên xwe tevlî jêrê bike û sererast bike. + Amarên malperê yên salane + Pêşniyarên navperê(domain) nehatin barkirin + Ji bo fikrên zêdetir, peyvkilîdekê binivîse + Domain\'ê Tomar Bike + Va ye Jetpack hate sazkirin, îja divê em sazkariyên te temam bikin. Ev ê tenê xulekekê bigire. Şandî hat vegerandin + Şandî tê vegerandin Şandî tê jêbirin - Jêbirina vê şandiyê dê guhertinên neqeydkirî jî rake. Bi rastî jî tu dixwazî dewam bikî? - Guhertinên xwecihî - Vegerîne Reşnîvîsê - Derbasî xuyanga lîsteyê bibe - Derbasî xuyanga kardan bibe - Şandiyên te yên hatine jêbirin tune - Şandiyên te yên reşnivîsî tune - Şandiyên te yên demsazkirî tune + Şandî vedigere reşnivîsê + Jêbirina vê şandiyê dê guhertinên netomarkirî jî rake. Bi rastî jî tu dixwazî dewam bikî? + Ji nav kûrbînan rake + Veguhezîne jêrê + Veguhezîne jorê + Sazkariyên hêmana amaran + Guhertinên cîgehî Te hîn ti şandî neweşandiye - Ji kerema xwe bi navê bikarhêner û pêborînê têkevê. - Ji kerema xwe li şûna navnîşana epeyama xwe, bi navê bikarhêner ya WordPress.comê têkevê. - Navîna peyvan/şandiyê + Veguhezîne Reşnivîsê + Derbasî xuyanga lîsteyî bibe + Derbasî xuyanga kartan bibe + Şandiyên te yên hatine jêbirin tune ne + Ti şandiyên te yên reşnivîsî tune ne + Ti şandiyên te yên demsazkirî tune ne + Ji kerema xwe bi navê bikarhêner û pêborînê têkeve. + Ji kerema xwe li şûna navnîşana emaila xwe bi navê bikarîner ê WordPress.com\'ê têkeve. Tevahiya peyvan - Navîna ecibandinan/şandiyê Tevahiya ecibandinan - Navîna şîroveyan/şandiyê - Tevahiya şîroveyan - Şandî Sal Îsal - Malpera li ser vê navnîşanê ne malpereke WordPressê ye. Ji bo girêdana bi pê re divê malper WordPressê bi kar bîne. + Tevahiya şîroveyan + Navîna peyvan/şandiyê + Navîna ecibandinan/şandiyê + Navîna şîroveyan/şandiyê + Şandî + Malpera li ser vê navnîşanê ne malpereke WordPressê ye. Ji bo em lê bên girêdan divê malper WordPressê bi kar bîne. Çavdêriya krediyên navper a berdest bi serneket. Krediyên navperê têne çavdêrîkirin - Navperê tomar bike Bo sazkirina pêvekan divê tu bibe xwediyê navpereke taybet ya ku têkîldarî malpera te yî. - Pêvek bisazîne - Tê piştre karibî xuyanga malpera xwe kesane bikî - Dema weşanê: %s + Domain\'ê tomar bike + Pêvekê saz bike Demsaz bike bo: %s - Di vê de hat weşand: %s Hat demsazkirin bo: %s Hefteyên Dawî - Pêşandinên Navîn yê Rojane - Pêşandin Heyam Meh û Sal - Bêhtir bar bike + Pêşandinên Navîn yê Rojane + Tu yê piştre karibî xuyanga malpera xwe kesane bikî + Demweşan: %s + Demweşan: %s + Dîtin + Zêdetir bar bike Îro - Demjimêra Herî Baş Roja Herî Baş + Demjimêra Herî Baş Rêjêjimarên têne pêşandayîn: Na spas Piştre - Niha deng bide - Dîsa hatina te çi xweş e! Heke kêfa te ji sepanê re hatibe, ji dengdayîna te ya li Google Play Storeê em ê kêfxweş bin. - Kêfa te ji WordPressê re hat? - Şandî vegeriya rewşa reşnivîsê + Aniha deng bidê + Çavê me li rêya betilî! Heke kêfa te ji sepanê re hatibe, ji dengdayîna te ya li Google Play Storeê em ê kêfxweş bibin. Çalakiya Şandinê + Kêfa te ji WordPressê re hat? Malper hîn nehatiye barkirin - Şandiyên bêhtir Şandiyên kêmtir - Gengaz e tu pêşveçûnê winda bike. Bi rastî jî tu dixwazî derkeve? - Dîsa jî Planan Nîşan Bide - Ji bo dîtina Planan girêdana torekê pêwîst e, ji ber wê dibe ku hûrgilî kevn bin. - Ji bo dîtina Planan girêdana torê pêwist e. - Niha em nikarin Planên te bar bikin. Piştre dîsa biceribîne. - Plan nayên barkirin - Girêdan nîn e - Derbasî Serrastgeha Blokê Bibe - Derbasî Serrastgeha Klasîk Bibe - Di dema barkirina daneyên te de pirsgirêkek pêk hat, rûpela xwe nû bike û dîsa biceribîne. - Dane nehat barkirin - Bi serrastgeha bloke şandî û rûpelên nû serrast bike - Serrastgeha Blokê bi kar bîne - Serrastgeha Blokê Hat Çalakkirin - derkeve - Ji %1$d/%2$d hat qedandin + Şandî veguherî rewşa reşnivîsê + Şandiyên zêdetir + Dibe ku tu pêşveçûnê wenda bikî. Tu bi rastî jî dixwazî derkevî? + Dîsa jî Pakêtan Nîşan Bide + Ji bo Pakêtan bibînî girêdana înternetê pêwîst e, ji ber wê dibe ku hûrgilî ne hildem bin. + Ji bo Pakêtan bibînî girêdana înternetê pêwîst e. + Niha em nikarin Pakêtên te bar bikin. Piştre dîsa biceribîne. + Pakêt nayên barkirin + Înternet tune ye + Derbasî edîtora blokê bibe + Derbasî edîtora klasîk bibe + Di dema barkirina daneyên te de pirsgirêkek derket, rûpela xwe nû bike û dîsa biceribîne. + Dane nehatin barkirin + Bi edîtora bloke şandî û rûpelên nû sererast bike + Edîtora blokê bi kar bîne + Edîtora Blokê Hat Çalakkirin + derketin + Ji bo plana derbasdar û ên din ên berdest bibînî pê li %1$s Plan %2$s ê bike Girseya Xwe Mezin Bike - Malpera Xwe Kesane Bike Gavên Pêşve (%d) Qediya Kêfa xwe bi berhema qediyayî bîne! - Nîşanekeke malperê hilbar bike - Mêvanên te dê nîşaneka te di gerokên xwe de bibînin. Ji bo xuyangeke birqonek û profesyonel nîşanekeke taybet tevlî bike. - Ji bo plana derbasdar û ên din ên berdest bibînî pê li %1$s Plan %2$s ê bike Ji bo rûpeleke nû biafirînî pêlî %1$s Rûpel Tevlî Bike %2$s yê bike. - Ji bo domandinê %1$s Rûpel %2$sê bitepîne. + %1$d / %2$d qediya + Malpera Xwe Taybet Bike + Îkona malperekê hilxîne + Mêvanên te ew ê îkona te di gerokên xwe de bibînin. Ji bo xuyangeke profesyonel û balkêş îkoneke taybet tevlî bike. Ji bo performansa malpera xwe bibîne pêlî %1$s Rêjejimar %2$sê bike. Ji bo yeka din bar bike, pêlî %1$s Nîşaneka Te ya Malperê %2$s bike Yekem şandiya xwe bike reşnivîs û biweşîne. Em ê ji bo binyadên avakirin û mezinkirina malpera te ji te re rêberiyê bikin. Me hinek guhertin di lîsteya te ya çavdêriyê de kir. - Ji bo alikariya mezinkirina girseya te, me zêdetir peywir tevlî kir. + Ji bo domandinê %1$s Rûpel %2$sê bitepîne. Planan venasîne Di planên mûçekarî de agahî derbarê alavên bazargerî û SEOyê bi dest bixe. + Ji bo alikariya mezinkirina girseya te, me zêdetir peywir tevlî kir. Parvekirina şandiyê biçalakîne - Ji bo ajimêrên xwe yên medyayên civakî, şandiyên nû bi otomatîkî parve bike. Fontên nivîsan eyar bike, wêneyan tevlî bike û zêdetir. Rûpeleke nû biafirîne - Ji bo naveroka sereke, rûpelekê tevlî bike — rûpela \"Derbar\" destpêkeke mezin e. - Rêjejimarên malpera xwe kontrol bike + Ji bo ajimêrên xwe yên medyayên civakî, şandiyên nû bi otomatîkî parve bike. + Ji bo naverokên girîng rûpelekê tevlî bike. Çêkirina rûpela \"Derbar\"ê ew ê destpêkeke mezin be. Di derbarê performansa malpera xwe de agahiyên rojane bi dest bixe. - Li rûkaran bigere Bi dehan vebijêrkên pergalê vebibîne û ahengiya bêkêmasî bibîne. Rakirina Gavên Pêş dê hemû gerên vê malperê veşêre. Ev çalakî nayê vegerandin. Gavên Pêş Rake + Li rûkaran bigere Vêya rake - Temamkirina lîsteya te pîroz be. Her bijî, karekî baş e. - Hemû peywir hat temamkirin! + Amarên malpera xwe kontrol bike + Te lîsteya xwe temam kir. Her bijî te karekî baş kir. Peywirê derbas bike - teng bike - fireh bike Bîranînok - Heyama pêşî hilbijêre + fireh bike + Hemû peywir hatin temamkirin! + teng bike Heyama paşî hilbijêre - %1$d%% ji dîtinan Dema Herî Populer %1$s (%2$s%%) +%1$s (%2$s%%) - Pêşdîtina malperê tê nişandan + %1$d%% ji dîtinan + Heyama pêş hilbijêre Paqij bike - Xuya ye girêdana te hêdî ye. Heke tu malpera xwe ya nû di lîsteyê de nabînî, venûkirinê biceribîne. - Efsûnbaza Afirandina Malperê Betal Bike Em malpera te ya nû diafirînin - Pirsgirêkek hebû Malperê Biafirîne Malperê Biafirîne - Li Navpêran Bigere Vê derê ew cih e ku dê mirov te li înternetê têde bibînîn. - Ji bo malpera xwe navekî navperê hilbijêre - Tu navnîşana derbasdar û lêgerîna te li hev nayên + Efsûnbaza Afirandina Malperê Betal Bike + Pirsgirêkek hebû + Pêşdîtina malperê tê nîşandan + Xuya ye înterneta te hêdî ye. Heke tu malpera xwe ya nû di lîsteyê de nabînî, nûkirinê biceribîne. + Li Domainan Bigere Şaşiyeke di ragihandina rajekarê de pêk hat, ji kerema xwe dîsa biceribîne Pirsgirêkek hebû - Pirsgirêkek hebû + Tu navnîşana derbasdar û lêgerîna te li hev nayên + Ji bo malpera xwe navekî navperê hilbijêre Ev ê ji bo pêşniyardayînê alîkariya me bike. Lê, tê qet sînordar nebe — wiha dê hemû malper pêşkevin! + Pirsgirêkek hebû Tu dixwazî malpereke çawa çê bike ji mere bibêje - malpera te hat afirandin! - %1$d ji %2$d - Malperê Biafirîne - Pêşniyar hatin hildemandin Malpera xwe-hewandî ya nû hatiye tevlîkirin, nehat hilbijartin. Nakokiya guhertoyê - Ji bo alîkariya pêşxistinê ya performansa sepanê, desture bide raporê hilweşînên otomatîk. - Raporên hilweşînê + Malperê Biafirîne + Pêşniyar hatin hildemandin + Malpera te hat afirandin! + %1$d / %2$d Vegerîne Guhertoya webê hat avêtin - Guhertoya cîgehî hat avêtin + Raporên hilweşînê + Ji bo alîkariya pêşxistinê ya performansa sepanê, desture bide raporê hilweşînên otomatîk. Şandî tê hildemandin - Webê Biavêje - Xwecihiyê Biavêje - Xwecihî\nDi %s an de hat tomarkirin\n\nWeb\nDi %s an de hat tomarkirin\n + Guhertoya cîgehî hat avêtin + Web\'ê Biavêje Du guhertoyên nakok yê vê şandiyê hene. Guhertoya tu dixwazî ya avêtinê hilbijêre.\n\n\n - Nakokiya hevdemiyê çareser bike + Cîgehiyê Biavêje + Cîgehî\nDi %s\'an de hat tomarkirin\n\nWeb\nDi %s\'an de hat tomarkirin\n + Nakokiya senkronîzeyê çareser bike Ji bo vê heyamê dane tune Ji medyayê cih rake Rêjejimar vêga nayên vekirin. Paştre dîsa biceribîne. - Ji ber çewtiya torê hinek medya nehatin barkirin. - Lêgerîna te û ti medya li hev nehat - Ji bo tu GIF\'an tevlî Medyageha xwe bikî, lê bigere! Dîtin Nivîskar Nivîskar Dîtin - Têgeha Lêgerînê - Têgehên Lêgerînê Dîtin Sernav Vîdyo @@ -920,12 +942,12 @@ Language: ku_TR Welat Welat Tikandin + Ji weşana %2$s vir ve %1$s. Heta nuha şandeya te çawa performans kiriye, li vir e: Girêdan Tikandin Dîtin Şander Şander - Şandî û Rûpel LinkedIn Google+ @@ -933,13 +955,18 @@ Language: ku_TR Twitter Facebook Zêdetir bibîne - Şandî parve bike - Şandî biafirîne - Ji weşana %2$s vir ve %1$s. Heta nuha şandeya te çawa performans kiriye, li vir e: + Şandî û Rûpel + Lêgerîna te û ti medya li hev nehat + Ji ber çewtiya torê hinek medya nehatin barkirin. + Ji bo tu GIF\'an tevlî Medyageha xwe bikî, lê bigere! + Têgiha Lêgerînê + Têgihên Lêgerînê + Şandiyê parve bike + Şandiya biafirîne Ji weşana %2$s vir ve %1$s. Topa xwe bigindire û bi riya parvekirinê dîtinên şandeya xwe zêde bike: - Te hîn ti şandî neweşandiye. Dema te dest bi weşanê kir dê kurteya şandiya te ya dawî li vir xuya bike: Etîket û Kategorî - Her-dem + Te hîn ti şandî neweşandiye. Dema te dest bi weşanê kir dê kurteya şandiya te ya dawî li vir xuya bike: + Hemû-dem %1$s - %2$s Şopîner Xizmet @@ -951,541 +978,540 @@ Language: ku_TR Şîrove Sernav Nivîskar - Şandî û Rûpel Nivîskar Ji vir ve Şopîner Tevahî %1$s Şopîner: %2$s - E-peyam WordPress.com Kûrbînan bi rê ve bibe - Hîn kûrbîn nehatine tevlîkirin + Şandî û Rûpel + Email Hîn dane tune ye + Hîn kûrbîn nehatine tevlîkirin Menuya Debugê Pêborîn tê guhertin… - Divê pêborîna te bi qasî dirêjiya şeş karekteran be. Ji bo bihêztirbûnê tîpên mezin û biçûk, hejmar û nîşanên wekî ! \" ? $ % ^ & ) bi kar bîne. - Pêborîn bi serkeftî hat guherandin Pêborînê biguherîne + Divê pêborîna te bi qasî dirêjiya şeş karekteran be. Ji bo bihêztirbûnê tîpên mezin û biçûk, hejmar û nîşanên wekî ! \" ? $ % ^ ) bi kar bîne. + Pêborîn bi serkeftî hat guhertin Nav - (sernav tune) - Pêşdîtina HTML Pêşdîtina dîtbarî - Serrastkirî + (sernav tune) + Pêşdîtina HTML\'î Paşve Pêşve + Revizyon %1$s hat bikaranîn Ji kerema xwe têkeve WordPress.com-ekê an jî malpereke WordPressê ya xwe-hewandî û girêdayî Jetpackê. - Serrastkirin tê barkirin - Serrastkirin hat barkirin - Bar bike - Şandî li ser %1$s di %2$s de hat afirandin Rûpel li ser %1$s di %2$s de hat afirandin + Bar bike Hîn raborî tune ye - Dema te guhertinek li ser şandiya xwe kir, tê bikaribî raboriyê li vir bibînî - Dema te guhertinek li ser rûpela xwe kir, tê bikaribî raboriyê li vir bibînî + Şandî li ser %1$s di %2$s de hat afirandin + Revizyon tê barkirin + Revizyon hat barkirin + Dema ku te guhertin li ser şandiya xwe kir, tu yê karibî raboriyê li vir bibînî + Dema ku te guhertinek li ser rûpela xwe kir, tu yê karibî raboriyê li vir bibînî Avatara bikarhêner Mezinahiya Tije Mezin Navîn - Wêneya biçûk Raborî - Rûpela hilbijartî ne li berdeste + Wêneyê biçûk Vekolîna Hilawîstî - Ti rûpelên te yên hatine jêbirin nîn e + Rûpela hilbijartî ne berdest e + Li rûpelan bigere + Bi Mayînde Jê Bîbe Ti rûpelên te yên demsazkirî nîn e Ti rûpelên te yên reşnivîs nîn e Te hîn ti rûpel neweşandiye. - Li rûpelan bigere Lêgerînên te bi ti rûpelan re hevber nebû - Bi Mayînde Jê Bîbe - Veguhezîne Jêbirdankê Vegerîne Reşnivîsê - Dêûbavan diyar bike + Rûpelên we yên jêbirî tune + Veguhêze jêbirdnakê Bibîne - Jêçûyî - Demsazkirî Reşnivîs - Weşandî Me gelek caran koda piştrastkirinê a SMSê şand — navberekî bide û di nav xulekekî de dîsa bixwaze. - Ti ajimêrên WordPress.comê bi vê ajimêra Googleê re hevberî hev nehatin. + Dêûbavan diyar bike + Demsazkirî + Weşandî + Bo jêbirdankê hat veguhêstin + Rûpela mak hat guhertin Lêgerînên te bi ti malperan re hevber nebû Lêgerînên te bi ti malperan re hevber nebû - Rûpela mak hat guhertin - Rûpel bi awayekî mayînde hate jêbirin + Ti ajimêrên WordPress.comê bi vê ajimêra Googleê re hevberî hev nehatin. Rûpel hat demsazkirin Rûpel hat weşandin + Di guhertina rûpela mak de pirsgirêkek heye + Makê Saz Bike + Rûpel bi awayekî mayînde hate jêbirin Rûpel hat jêbirin Rûpel bo reşnivîsê hate vegerandin Asta bilind Bi rastî jî tu dixwazî rûpela %s jê bibe? - Di guhertina rûpela mak de pirsgirêkek heye Di guhartina rewşa rûpelê de pirsgirêkek çê bû Di jêbirina rûpelê de pirsgirêkek çê bû - Makê Saz Bike vira bitepîne - Malpera xwe biafirîne Malpera xwe bînin rewşa xebitînê + Malpera xwe biafirîne + Malpera xwe parve bike Malpera xwe bibîne Ji bo tu pêşdîtina malpera xwe bibînî %1$s Malperê Bibîne %2$s yê bitepîne - Malpera xwe parve bike Ji bo domandinê %1$s Parvekirin %2$s ê bitepîne Ji bo tevlîkirina ajimêrên medyaya civakî %1$s Pêwendî %2$s yê bitepîne Ajimêrên xwe yên medyaya civakî girê bide – malpera te dê şandiyên nû wekî otomatîk parve bike. + Bipejirîne Şandiyekê biweşîne Ji bo şandiyeke nû biafirînî %1$s Şandî Biafirîne %2$s yê bitepîne - Ji bo destpêkirinê hinek alîkarî dixwazî? - Bipejirîne - Qet - Na Spas + Ji bo dest pê bikî alîkariyeke biçûk dixwazî? Malperên din bişopîne Ji bo malperên heman berjewendîdar bibînî li %1$s Lêbigere %2$s yê bitepîne - Ji bo domandinê %1$s Xwîner %2$s ê bitepîne + Na Spas Li malperan bigere ên dinûqûtin dilê te û wan bişopîne bo rojanekirinên şandeyên wan. - Malpera xwe besane bike + Qet + Ji bo domandinê %1$s Xwîner %2$s ê bitepîne Ji bo domandinê %1$s Rûkar %2$s ê bitepîne - Ji bo dest bi kesanekirina malpera xwe bike %1$s Kesane Bike %2$s yê bitepîne - Rûkarekê hilbijêre + Ji bo dest bi kesanekirina malpera xwe bike %1$s Kesane Bike %2$s yê bitepîne + Malpera xwe taybet bike + Here Ji bo rûkarên nû vebibîne %1$s Rûkar %2$s ê bitepîne Ji bo ahengeke bêkêmasî, çavekî li hemû rûkarên me bigerîne. - Here - Betal Ne niha - Zêdetir Ti malperên te nîn e Etîketa şopkirî tune ye Etîketan tevlî vir bike ji bo dîtina şandeyan ên ku favoriyên te ne + Betal bike + Rûkarekî hilbijêre + Zêdetir Ji bo girêdana Jetpackê di ajimêra xwe ya WordPress.comê keve. Dîsa Biceribîne Bidomîne - Jetpack di vêgavê de nehat sazkirin. Pirsgirêkek hebû - Jetpack sazkirî ye - Jetpack li malperate tê sazkirin. Qedandina vê kirariyê dê çend xulekan bigire Jetpack tê sazkirin - Dê agahiyên nasnameya malpera te neyê veşartin wê tenê ji bo sazkirina Jetpackê were bi kar anîn. - Jetpackê Saz Bike Jetpack - Jetpack PPTP + Jetpack di vêgavê de nehat sazkirin. + Jetpack li malperate tê sazkirin. Qedandina vê kirariyê dê çend xulekan bigire + Dê agahiyên nasnameya malpera te neyê veşartin wê tenê ji bo sazkirina Jetpackê were bi kar anîn. + Jetpack hat sazkirin + Jetpack\'ê Saz Bike + Jetpack PPP Ji bo bikaranîna rêjejimarên malpera te ya WordPressê, divê tu pêvekên Jetpackê saz bikî. - Lêgerînen te bi ti rûkaran re hevber nebû - Tu dixwazî çi bibînî? Tu etîket û lêgerîna te li hev nayên - Tu etîketên te tune ye. + Tu dixwazî çi bibînî? Etîketên xwe yên tu pir bi kar tînî tevlî vir bike, bi saya vê dikarin nivîsên te yên etîketkirî bi hêsanî hilbijêrin - Etîketek biafirîne + Lêgerînen te bi ti rûkaran re hevber nebû Lêgerîna te û ti medya li hev nayên - Tu yê ji WordPressê derkeve? - Guhertinên di şandiyan de hatiye kirin li malpera te nehatiye hilxistin. Heke tu aniha derkevî dê ev guhertin ji amûrê biçe. Dîsa jî tê derkevî? - Hîna kesî temaşe nekiriye - Hîna şopînerên epeyamê tune ne - Hîna şopîner tune - Hîna bikarhêner tune - Şandiyên te ecibandî dê li vir xuya bibe + Ti etîketên te tune ye + Etîketekê biafirîne + Tu yê ji WordPressê derkevî? + Guhertinên di şandiyan de hatine kirin li malpera te nehatine hilxistin. Heke tu aniha derkevî dê ev guhertin ji cîhazê bên jêbirin. Dîsa jî tu yê derkevî? + Hîn ti kesî temaşe nekiriye + Hîn şopînerên emailê tune ne + Hîn şopîner tune ye + Hîn bikarhêner tune ye + Şandiyên ku te ecibandine ew ê li vir xuya bibin Hîn ti tişt nehatiye ecibandin - Here şopandinên xwe Malperan keşf bike - Malperên tu dişopîne tune - Hîn ecibandin tune - Hîna şopîner tune + Here şopandinan + Malperên tu dişopînî tune ye Ji ber ku tu di plana azad de yî, tu yê di çalakiyên xwe de bûyerên sînorkirî bibînî. + Hîn ecibandin tune ye + Hîn şopîner tune ye Dema ku te guhertin li malpera xwe kir, dê bikaribî raboriya çalakiyên xwe li vir bibînî - Hîn çalakî tune - Şandiyekê biafirîne + Hîn çalakî tune ye Rûpelekê biafirîne - Medya hilbar bike - Ti medya tune - pêşengeha wêneyan - Nîşaneka malperê - wêneya rûkarê + Şandiyekê biafirîne + Medyayê lê hilxîne + Ti medyayên tune ye taybetiyên wêneyê + galeriya wêneyan + îkona malperê + wêneyê rûkarê Biavêje wêneyê profîlê - Demkî - Emaîl - Ji kerema xwe navnîşan xwe ya epeyamê têxîne - Ji bo domandinê ji kerema xwe navnîşana xwe ya epeyamê û nav têxîne - Ji \'Alîkarî & Piştgirî\'yê peyameke nû WordPress - Saz nebû - Têkiliya epeyamê - Tomarên sepanê - Bilêtên min Tu bawer î malpera xwe vegerînî li şûna %1$s berê %2$s? Dê ev, hemû naverok û vebijarkên ku hatine çêkirin an guhertin ji wê demê ve rake. Malperê Vegerîne Vegerandin didome - Li şûna %1$s %2$s ê tê vegerandin - Malpera te niha tê vegerandin + Demkî + Ji bo domandinê ji kerema xwe navnîşana xwe ya epeyamê û nav têxîne + Saz nebû + Ji \'Alîkarî & Piştgirîyê ve peyameke nû + Email + Ji kerema xwe navnîşana emaila xwe bikevê + Emaila têkiliyê + Tomargeha sepanê + Bilêtên Min + Vedigere rewşa %1$s %2$s\'ê Malpera te bi serkeftî hat vegerandin - Malpera te bi serkeftî hat vegerandin\nLi şûna %1$s %2$s ê hat vegerandin - Malpera te bi serkeftî hat vegerandin\nLi şûna %1$s %2$s ê tê vegerandin - Bişkoka çalakiyê ya Tomarên Çalakê + Malpera te niha tê vegerandin + Malpera te bi serkeftî hat vegerandin\nVegeriya rewşa %1$s %2$s\'ê + Malpera te bi serkeftî hat vegerandin\nVedigere rewşa %1$s %2$s\'ê + Bişkoka Tomargeha Çalakiyan Yên bi otomatikî tê rêvebirin - Vê şandiyê qeyd bike û kengî tu bixwazî wê bixwînî lê vegere. Ew ê tenê li ser vê cîhazê berdest be, şandiyên qeydkirî bi cîhazên te yên din re senkronîze nabe. - Şandiyan ji bo Piştre Tomar Bike + Vê şandiyê tomar bike û kengî tu bixwazî wê bixwînî lê vegere. Ew ê tenê li ser vê cîhazê berdest be, şandiyên qeydkirî bi cîhazên te yên din re senkronîze nabin. Lêgerîn nayê kirin Ti encam nehatin dîtin - Çavkaniya şandiyê bixwîne + Şandiyan ji bo Piştre Tomar Bike Malper + Çavkaniya şandiyê bixwîne Girêdana sêhrî hat şandin - Bi epeyamê têkevê - Piştrastkirina kodê - Agahiyên nasnameyê ya têketinê + Bi emailê têkeve Girêdana sêhrî hat şandin Têketina girêdana sêhrî Têketina navnîşanê ya malperê Têketina navnîşanê ya epeyamê Vebijêrkek din: + Pejirandina kodê + Agahiyên têketinê + Tomar bike Li %s ê bitepîne ji bo tomarkirina şandeyeke li lîsteya te. - Şandeyên tomarkirî tune ye — hîn! - Şandeya tomarkirî - Hemûyan Bibîne Tomarkirî - Tomar bike + Hemûyan Bibîne Ji nav şandiyên tomarkirî rake Tevlî şandiyên tomarkirî bike Şandiyên tomarkirî Hat rakirin - Nîşaneka malperê biguherîne - Betal + Heta niha ti şandî nehatiye tomarkirin! + Şandî hat tomarkirin Rake Biguherîne + Tu dixwazî nîşanekeke malperê tevlî bikî? + ev malper Destûra te bo serrastkirina nîşaneka malperê tune ye. Destûra te bo tevlîkirina nîşaneka malperê tune ye. Tu çawa dixwazî nîşanekê serrast bike? - Tu dixwazî nîşanekeke malperê tevlî bikî? - Nîşaneka Malperê - ev malper Biçalakîne - Bila ji bo \"%1$s%2$s%3$s\"ê danezan çalak bibin? - Danezanên malperê veke - Danezanên malperê bigire - Nîşaneka Jetpackê + Betal bike + Îkona malperê biguherîne + Îkona Malperê + Ev agahî alîkariya me dikin ji bo pêşverbirina berhemên me, ji bo kêrhatîtirkirina bazariya me, ji bo taybetkirina ceribeyên te yên WordPress.comê û ji bo bi dûrûdirêj qalkirina me di rêbaza me ya veşariyê de. + Dema têketina te ya ajimêra WordPress.comê, di derheqê bikaranîna xizmetan de bi alavê me ya analîzê re agahî parve bikin. + Rêbaza Xurekê Vegerîne - Bûyer - Nîşaneka çalakiyê - Tomara çalakiyê Çalakî + Danezanên malperê veke + Danezanên malperê bigire + Agahî berhev bike + Bila ji bo \"%1$s%2$s%3$s\"ê danezan çalak bibin? Polîtîkaya nihêniyê bixwîne - Hin aliyên sêyemîn jî tê de, em alavên şopandinê ya din bi kar tînin. Di derheqê wan û kontrolkirina wan de bixwîne. Polîtîkaya Aliyên Sêyem - Ev agahî alîkariya me dikin ji bo pêşverbirina berhemên me, ji bo kêrhatîtirkirina bazariya me, ji bo taybetkirina ceribeyên te yên WordPress.comê û ji bo bi dûrûdirêj qalkirina me di rêbaza me ya veşariyê de. Polîtîkaya Nihêniyê - Dema têketina te ya ajimêra WordPress.comê, di derheqê bikaranîna xizmetan de bi alavê me ya analîzê re agahî parve bikin. - Rêbaza Xurekê Sazkariyên nihêniyê - Agahî berhev bike + Îkona Jetpackê + Çalakî + Îkona çalakiyê + Tomargeha Çalakiyan + Hin aliyên sêyem jî tê de, em alavên şopandinê yên din bi kar tînin. Di derheqê wan û kontrolkirina wan de bixwîne. Şandî hat şandin - Ajimêra te tune ye? %1$sTomar Bibe%2$s - Taybetiya pêvekê pêwîstî bi rewşa baş a malperê dike. Taybetiya pêvekê pêwîst dike ku endamtiya bingehîn a navperê bi vê bikarhênerê ve girêdayî be. + Taybetiya pêvekê pêwîstî bi rewşa baş a malperê dike. + Hesabê te tune ye? %1$sTomar Bibe%2$s Taybetiya pêvekê pêwîstî bi berjewendiya rêvebirê dike. Pêvek li malperên VIPê nayê sazkirin. - Ji ber sînordarkirinên qada dîskê pêvek nayê sazkirin. Taybetiya pêvekê pêwîstî bi navnîşana epeyameke piştrastkirî dike. Taybetiya pêvekê pêwist dike ku malper gelemperî be. - Taybetiya pêvekê pêwistî bi planeke business dike. Taybetiya pêvekê pêwistî bi navpereke taybet dike. + Ji ber sînordarkirinên qada dîskê pêvek nayê sazkirin. + Taybetiya pêvekê pêwistî bi planeke business dike. Em sazkirina dawî dikin — hema hema qediya… Pêvek tê sazkirin… Saz Bike Dibe ku sazkirina pêveka yekem xulekekê bigire. Di vê demê de tê nikaribî guhertinan li ser malpera xwe bikî. + Rojane Pêvekê saz bike Danezan - Şîroveyên nû bi emailê ji min re bîşîne Heftane Demildest - Rojane Şandiyên nû Ji bo şandiyên nû yên vê malperê danezanan bistîne + Şîroveyên nû bi emailê ji min re bîşîne Şandiyên nû bi emalê ji min re bişîne Hemû Malperên Ez Dişopînim - Malperên Hatine Şopandin Kesê bi cîhazê danezanan dixwîne Mirovên li grafîk û planan dinêrin %s li ser %s Bi rastî jî tu dixwazî vê şandiyê bi awayekî mayînde jê bibî? + Malperên Şopandî Girîng Giştî Vî wêneyî bi kar bîne - %1$d / %2$d - Wêne ji aliyê %s ve tên peydakirin - Ji bo wêneyên belaş tevlî Medyagehê bikî, li wêneyan bigere - Di wênegeha serhêl de bigere - Ji wênegeha serhêl hilbijêre Reşnivîsa vala nayê tomarkirin - Ji %1$s bêsînor - %d pêşdîtin - %d Tevlê Bike + %1$d / %2$d + Ji aliyê %s ve tê peydakirin + Ji bo wêneyên belaş tevlî Medyageha xwe bikî, li wêneyan bigere + Li wênegeha belaş bigere + Ji nav Wênegeha Belaş hilbijêre + %1$s / bêsînor + Pêşdîtin %d + %d Tevlî Bike Etîketekê Biafirîne - here jorê - Danezan - Girêdana derveyî veke - zêdetir nîşan bide + deng + jê bibe + dîsa biceribîne + %s rake + nîşana pejirandinê wêne jê bibe - Vîdyoyê bilîzîne - Vîdyoya berpêş bilîzîne logoya pêvekê sernavê pêvekê - ji medyayên WordPress\'ê hilbijêre kamerayê veke - ji cîhazê hilbijêre agahiya rolê + Danezan + Vîdyoyê bilîzîne + Vîdyoya berpêş bilîzîne bilîzîne pêşdîtina wêneyê pêşdîtin - deng vîdyoyê bilîzîne - jê bibe - dîsa biceribîne + here jorê + Girêdana derveyî veke + zêdetir nîşan bide + ji cîhazê hilbijêre pêşdîtina medyayê, navê dosyeyê %s - %s rake wêneyê profîla %s - nîşana pejirandinê Bi Googleê tomar dibe… + ji nav medyayên WordPress\'ê hilbijêre Bi Jetpack\'ê ve nehat girêdan: %s Jixwe tu bi Jetpack\'ê ve girêdayî ye - VEGERÎNE - Derbasî moda Dîtbarî bû Moda Dîtbarî - Derbasî moda HTML bû - Moda HTML Pêşdîtin - Wekî reşnivîs tomar bike %s TB + Derbasî moda Dîtbarî bû + VEGERÎNE + Wekî reşnivîs tomar bike + Derbasî moda HTML\'ê bû + Moda HTML\'ê + Ecibandina şîroveyê hat rakirin + Şîrove hat ecibandin + Pejira şîroveyê hat rakirin + Şîrove hat pejirandin %s GB %s MB %s kB %s B - %1$s / %2$s - Heke pêwistiya te bi valahiya zêdetir hebe, bilindkirina plana WordPress\'ê bifikire. - Qada Hatiye Bikaranîn Medya - Şîrove wekî nespam hat nîşankirin Şîrove wekî spam hat nîşankirin Şîrove hat jêbirin Şîrove hat vegerandin - Şîrove hate şandin jêbirdankê - Ecibandina şîroveyê hat rakirin - Şîrove hat ecibandin - Pejira şîroveyê hat rakirin - Şîrove hat pejirandin + Qada Hatiye Bikaranîn Hûrgiliya danezanê %s + %1$s / %2$s + Heke pêwistiya te bi valahiya zêdetir hebe, bilindkirina plana WordPress\'ê bifikire. Wêneyê Sererast Bike Malper hilbijêre Hesabê nû - Têkeve - Bi vî hesabî têketî ye + Şîrove wekî ne spam hat nîşankirin + Şîrove hat jêbirin Hûrgiliya kesê - Hûrgiliya dosyeyê Bişkokên parvekirinê + Xwîner + Alîkarî û Piştgirî + Lîsans Danezan - Xwîner Ez Malpera Min + Bi vî hesabî têketî ye + Hûrgiliya dosyeyê Sazkariyên danezanan - Alîkarî û Piştgirî - Lîsans Notên guhertoyê Avatara te hat hilxistin û di demeke nêzîk de ew ê berdest bibe. - Xuya ye te destûrên pêdivî yên ji bo vê taybetiyê girtiye.<br/><br/>Ji bo guhertina wê destûrên xwe serrast bike û ji çalakbûna <strong>%s</strong>ê piştrast bibe. + © %1$d %2$s Destûr + Guherto %s + Xuya ye te destûrên pêdivî yên ji bo vê taybetiyê girtiye.<br/><br/>Ji bo guhertina wê destûrên xwe serrast bike û ji çalakbûna <strong>%s</strong>ê piştrast bibe. Berpêş Ji ber ku modula Jetpacka te ya Parvekirinê neçalak e, tu nikare bigihêje sazkariyên pervekirinê. Modula parvekirinê neçalak e - Guherto %s - © %1$d %2$s Weşanger: %s - Rêya dengê hilbijartî ne derbasdar e. Ji kerema xwe yeka din hilbijêre. + Rêya dengê hilbijartî nederbasdar e. Ji kerema xwe yeka din hilbijêre. QP %s - %1$d rûpel / şandî maye Rûpelek maye - %1$d rûpel maye - %1$d şandî maye - %1$d rûpel / şandî û pelgeyek maye - %1$d şandî û pelgeyek maye - %1$d rûpel û pelgeyek maye - Şandî û pelgeyek maye - Rûpel û pelgeyek maye - %1$d rûpel / şande û %2$d ji %3$d ê pelgeh man - %1$d şande û %2$d ji %3$d ê pelgeh man - %1$d rûpel û %2$d ji %3$d ê pelgeh man - 1 şande û %1$d ji %2$d ê pelgeh man - 1 rûpel û %1$d ji %2$d ê pelgeh man - %1$d şandî / rûpel nehatin hilxistin + %1$d rûpel / şandî mane + %1$d rûpel mane + %1$d şandî mane + %1$d rûpel / şandî û dosyayek mane + %1$d şandî û dosyayek mane + %1$d rûpel û dosyayek mane + Şandiyek û dosyeyek mane + Rûpelek û dosyeyek mane + %1$d rûpel / şandî û %2$d / %3$d dosye man + %1$d şandî û %2$d / %3$d dosye man + %1$d rûpel û %2$d / %3$d dosye man + Şandiyek û %1$d / %2$d dosye mane + Rûpelek û %1$d / %2$d dosye mane %1$d rûpel nehatin hilxistin + %1$d şandî / rûpel nehatin hilxistin Rûpelek nehat hilxistin - %1$d şandî nehatin hilxistin Şandiyek nehat hilxistin - %1$d şande / rûpel bi %2$d pel ve nehat barkirin - %1$d rûpel bi %2$d pel ve nehatin barkirin - 1 rûpel bi %1$d pel ve nehatin barkirin - %1$d şande bi %2$d pel ve nehatin barkirin - 1 şande bi %1$d pelgeh ve nehatin barkirin - %1$d şande / rûpel bi 1 pelgeh ve nehatin barkirin - %1$d rûpel bi 1 pelgeh ve nehatin barkirin - 1 rûpel bi 1 pelgeh ve nehatin barkirin - %1$d şande bi 1 pelgeh ve nehatin barkirin - 1 şande bi 1 pelgeh ve nehatin barkirin + %1$d şandî nehatin hilxistin + %1$d şandî / rûpel û %2$d dosye nehatin hilxistin + %1$d rûpel û %2$d dosye nehatin hilxistin + Rûpelek û %1$d dosye nehatin hilxistin + %1$d şandî û %2$d dosye nehatin hilxistin + Şandiyek û %1$d dosye nehatin hilxistin (Bêsernav) \@%s %1$f, %2$f + %1$d şandî / rûpel û dosyeyek nehatin hilxistin + %1$d rûpel û dosyeyek nehatin hilxistin + Rûpelek û dosyeyek nehatin hilxistin + %1$d şandî û dosyeyek nehatin hilxistin + Şandiyek û dosyeyek nehatin hilxistin Malperê biafirîne - Ji bo domandinê bitepîne. Malper hat afirandin! - Bersivdana Googleê gelek dereng ma. Heta ku girêdana te ya torê bihêztir bibe, dibe ku tu li bendê bisekine. - Navê bikarhênerê biguherîne - Ji bo zêdetir pêşniyazan binivîsîne Navê te ya heyî %1$s%2$s%3$s e/ye. Ji xeynî çend awarteyan, kesên din dê tenê navê te ya dîtinê %4$s%5$s%6$s bibînin. Ji %1$s%2$s%3$s ê navê bikarhêner nehat pêşniyazkirin. Ji bo ku pêşniyazan bistîne, ji kerema xwe zêdetir tîp an jî hejmar binivîse. - Dema ku pêşniyarên navên bikarhêneran dihat stendin çewtiyek pêk hat. - Bila guhertina navê bikarhêner betal bibe? - Bavêje Tomar bike Avatar tevlî bike + Dema ku pêşniyarên navên bikarhêneran dihat stendin çewtiyek pêk hat. + Bila guhertina navê bikarhêner betal bibe? Bi Google\'ê Tomar Bibe - Bi Epeyamê Tomar Bibe - Epeyam ji xwe li ser WordPress.comê heye.\nBi têketinê kar tê kirin. - Ajimêr tê hildemandin… - Bi tomarbûnê re tu %1$sMercên Xizmetê%2$s yên me dipejirînî. - Epeyam tê şandin + Ji bo domandinê, bitepîne. + Googleê pir dereng bersiv da. Dibe ku heta girêdana te ya înternetê bihêztir bibe tu bisekinî. + Navê bikarhêner biguherîne + Ji bo pêşniyarên zêdetir, binivîse + Biavêje + Bi Emailê Tomar Bibe + Jixwe email li ser WordPress.com\'ê heye.\nDerbasî têketinê dibe. + Hesab tê hildemandin… + Bi tomarbûnê re tu %1$sMercên Xizmetê%2$s qebûl dikî. + Email tê şandin Dîsa Bîceribîne Bigire + Dîsa biceribîne Di şandina epeyamê de pirsgirêk çebû. Tu dikarî niha dîsa biceribîne an jî bigire û piştre biceribîne. Navê bikarhêner - Tu her timî dikarî wekî berî niha bi girêdanekê têketinê bike lê heke tu bixwazî em dikarin pêborînekê jî ji te re saz bikin. Pêborîn (li gor daxwazê) Navê Xuya - Dîsa biceribîne Vegerîne Di hildemandina ajimêra te de hinek pirsgirêk çêbûn. Ji bo domandinê tu dikarî guhertinên xwe vegerîne an jî dîsa biceribîne. Di hilxistina avatara te de hinek pirsgirêk derketin. - Ji bo afirandina ajimêra xwe ya nû a WordPress.comê ji kerema xwe navnîşana epeyamê binivîse. - Di kontrolkirina navnîşana epeyamê de pirsgirêk çêbû.. - Li WordPress.comê Tomar Bibe - Bi navê xwe yê bikarhêner têkevê. - Bi navnîşana malperê xwe têkevê. - Pêwîstî hildemandinê heye + Tu her timî dikarî wekî berî niha bi girêdanekê têketinê bike lê heke tu bixwazî em dikarin pêborînekê jî ji te re saz bikin. + Ji bo tu hesabê xwe yê nû yê WordPress.com\'ê biafirînî, ji kerema xwe navnîşana emaila xwe bikevê. + Di kontrolkirina navnîşana emailê de hinek pirsgirêk derketin. + Li WordPress.com\'ê Tomar Bibe + Bi navê xwe yê bikarhêner têkeve. + Bi navnîşana malperê xwe têkeve. Li Pêvekan Bigere - - Populer - Lihevhatin tune ye - Hemûyan Bibîne - Bi rê ve bibe Lêgerîna pêvekan nayê kirin - Dema sazkirina %s ê şaşiyek pêk hat %s bi serkeftî hat sazkirin Saz Bike Biecibîne - Malpereke nû tevlê bike + + Populer Ji bo karsazî, kovar an jî bologeke şexsî malpereke nû biafirîne; an jî bi sazkirineke WordPressê ya heyî re girê bidin. + Hemûyan Bibîne + Lihevhatin tune ye + Divê bê hildemandin + Birêve bibe + Di sazkirina %s\'ê de çewtî derket + Malpera nû tevlî bike Ji bo agahiyên kêrhatî ji malpera te ya WordPressê bê amûra te, divê tu pêveka Jetpackê saz bike. Tu dixwazî Jetpackê saz bikî? Wêneyên dereng barkirinê Jetpack\'ê saz bike Nivîsê biguherîne Guhertoya WordPress\'a Te - Guhertoya WordPress\'ê ya Pêwîst - Hildema Dawîn + Guhertoya WordPress\'ê ya Hewce + Hildema Dawî Guherto 5 stêrk 4 stêrk 3 stêrk 2 stêrk stêrkek - Ti tişt nehat peydakirin %s daxistin %s puan Nirxandinan Bixwîne Pirsên Pir Tên Pirsîn - Çi Nû Ne + Ti tişt nehat peydakirin Sazkirin Daxuyanî + Çi Tiştên Nû Hene Sazkarî - Sazkirî Guhertaya %s hat sazkirin + Hat sazkirin Guherto %s ji aliye %s - Wêneyê biguherîne Pêvek nehatin barkirin + Wêneyê biguherîne Rûpelên Malperê - Etîketên malpera xwe birêve bibe Tê tomarkirin Tê jêbirin - Etîketa \'%s\' bi mayînde bê jêbirin? - Bi vê navê ji xwe etîketeke heye - Etîketeke Nû Tevlî Bike + Etîketên malpera xwe birêve bibe + Bila etîketa \'%s\' bi temamî bê jêbirin? + Jixwe bi vî navî etîketek heye Daxuyanî Etîket Malpera te ya WordPress.com piştgiriyê dide bikaranîna Rûpelên Mobîlê yên Lezandî ku peyaneke bi serokatiya Googleê ye û di amûrên mobîlan de mudeta barkirinê bibandorî dilezîne + Etîketa Nû Tevlî Bike Rûpelên Mobîlê yên Lezandî (RML) - Herêma demê nayê barkirin - Di derbarê dirûva(format) dem û dîrokê de zêdetir bizane - Dirûva taybet + Navçedem nehatin barkirin + Di derbarê formata dem û dîrokê de zêdetir bizane Taybet - Serê rûpelê, şandî + Formata taybet + Serê rûpelê şandî Bajarekî bibijêre li qada xwe ya demê - Qada demê - Dirûva Demê - Dirûva Dîrokê + Navçedem + Formata Demê + Formata Dîrokê Destpêka hefteyê - Nîşank Trafîk + Etîket Jê bibe Girêdana derveyî - Nîşaneka Pêvekê + Îkona pêvekê Serrûpela Pêvekan - WordPress.org Rûpela pêvekan + Rûpela pêvekan a WordPress.org\'ê Bi rastî jî tu dixwazî ji %2$s\'ê %1$s rake?\n\n\nEv, dê pêvekê neçalak bike û hemû dane û pelgeyên têkildar jê bibe. Pêvekê Rake - %s tê rakirin… - %s tê neçalakkirin… - Di pevsazandina pêvekê de çewtiyek pêk hat: %s - Di rakirina %s de çewtî pêk hat - %s biserkeftî hat rakirin - Di hildemandina %1$s de çêwtî pêk hat: %2$s - Çewtiya hildemandina %sê. - %s biserkeftî hat hildemandin + Tê rakirin %s… + Tê neçalakkirin %s… + Di pevsazandina pêvekê de çewtiyek derket: %s + Di rakirina %s\'ê de çewtî derket + %s bi serkeftî hat rakirin + Di hildemandina %1$s\'ê de çêwtî derket: %2$s + Di hildemandina %s\'ê de çewtî derket. + %s bi serkeftî hat hildemandin Guhertoya %s berdest e - Hildemandinên otomatîk + Hildemandinên otomatîkî Çalak Neçalak Çalak Pêvek Pêvek - Di hilpekîn/paceya nû de girêdanê veke + Di hilpeka/paceya nû de girêdanê veke Giredan: - Çewtiyek çêbû. + Çewtiyek derket. Ji kerema xwe bo domandinê kodeke rastandinê peyda bike. Ji kerema xwe bo domandinê pêborîna xwe du cara kontrol bike. Têketin rawestiya - Ji kerema xwe benda têketinê be. + Ji kerema xwe li benda têketinê be. Pêvojoya têketinê didome… - Bo domandinê bitepîne. + Ji bo domandinê, bitepîne. Têketin pêk hat! Têketina Googleê nehat destpêkirin. - Ji kerema xwe pêborînekê têxîne - Jê dêvla wê kodeke din ji min re bişîne + Ji kerema xwe pêborînekê bikevê + Ji dêvla wê kodeke din ji min re bişîne Em ji telefona te yê ku bi %s re diqede re peyameke nivîsî şandin. Xêra xwe koda rastandinê yê di SMSê de têkeve. Mezinahî - Pelgeyek maye Ji %2$d pelgeyan %1$d maye + Dosyeyek maye Şandiyek maye Tê hilxistin… - Şandî Binivîse + Nivîsekê Binivîse %d pelge biserkeftî hatin hilxistin - , %d biserkeftî hat hilxistin - Pelgeyek hat hilxistin - Pelgeyek nehat hilxistin - %d pelge hat hilxistin - %d pelge nehatin hilxistin + , %d bi serkeftî hat hilxistin + Dosyeyek hat hilxistin + Dosyeyek nehat hilxistin + %d dosye hatin hilxistin + %d dosye nehatin hilxistin Ji şandiyê rake Bila ev wêne ji şandiyê were rakirin? - Kesane bike - Hûrgiliyên Pelgeyê + Taybet bike + Hûrgiliyên Dosyeyê \nBelkî tu ajimêreke cuda biceribîne? Di girêdana bi ajimêra Googleê re hinek pirsgirêk pêk hatin. Bigire - Bi Googleê têkevê. + Bi Google\'ê têkeve. Ji bo bi vê ajimêra Googleê bidomînî, ji keram xwe peyvborîna li WordPress.comê peyda bikin. Ev ê careke bê pirsîn. Çewtiyeke girêdanê pêk hat. Ji kerema xwe girêdana xwe kontrol bike û dîsa biceribîne. Wêneyê bijarte rake @@ -1501,105 +1527,105 @@ Language: ku_TR Rastandina du-gavî ferz bike Bi bikaranîna epeyamê ajimêran hevber bike Destûrê bide bo têketina WordPress.comê - Têketina WordPress.comê + Têketina WordPress.com\'ê Navnîşanên IPê yên lîsteya spî Hewldanên têketinê ên niyetxirab asteng bike Parastina ji erişa Brute forceê Danezanên demkî bişîne - Danezanan bi epeyamê bişîne - Wextê xizmetê ya malpera xwe temaşe bike + Danezanan bi emailê bişîne Ewlehî - Sazkariyên Jetpackê + Dema kar a malpera xwe kontrol bike Tevlî vê dibe - Malper hilbijêre Tevlî medyagehê bike + Sazkariyên Jetpack\'ê + Malperê hilbijêre Tevlî şandiya nû bike Ji bo parvekirina wêne an jî vîdyoyan destûrên hewce. IP an navbera IPyê ya nederbasdar Tê jêbirin Bila ev vîdyo jê biçe? - Bila ev wêne jê biçe - Hûrgiliyên pelgeyê + Bila ev wêne jê biçe? Hûrgiliyên deng + Hûrgiliyên dosyeyê Hûrgiliyên vîdyoyê Hûrgiliyên wêneyê Pêşdîtin Dîroka Hilxistinê - Dirêjî Pîvanên Vîdyoyê + Dirêjî Pîvanên Wêneyê - Cureya Pelgeyê - Navê Pelgeyê URL + Cûreya Dosyeyê + Navê Dosyeyê Nivîsa alternatîv - Malperekê lê girêde Şewqê veke - bigire - Amûrê biricifîne - Deng bibijêre + Malperekê lê girêde + Cîhazê biricifîne + Deng hilbijêre Dîmen û deng - Epeyama ji WordPress.comê - Derbarê reşnivîsen li bendê min agahdar bike + Emaila ji WordPress.com\'ê + Di derbarê reşnivîsen hilwestî min agahdar bike Şîroveyên di malperên din de - Yên din Hemû Malperên Min + Ya din Malperên Te Girtina Sazkariyên Danezanan wê hemû agahdariyên ji vê sepanê neçalak bike, bêyî dîqetkirina cureya danezanê. Piştî ku te Sazkariyên Danezanan vekir, tu yê karibî agahdariyên ku tu dixwazî werbigirî bisazînî. - Ji bo di vê amûrê de danezanan bistîne, Sazkariya Danezanan biçalakîne. + Ji bo di vê cîhazê de danezanan bistînî, Sazkariya Danezanan biçalakîne. Danezanan biçalakîne Danezanan neçalak bike Girtî Vekirî Mezinahiya Vîdeoyê ya Maksîmum Mezinahiya Wêneyê ya Maksîmum - Gava medya li vê şandiyê dihate hilxistin çewtiyeke derket holê: %s. - Gava ev şandî dihate hilxistin çewtiyeke derket holê: %s. + Dema ku medya li vê şandiyê dihat hilxistin çewtiyek derket: %s. + Dema ku ev şandî dihat hilxistin çewtiyek derket: %s. Medya tê tevlîkirin Ji bo zêdetir, seredana %s\'ê bike - Rûpel di rajekarê de nehat dîtin + Rûpel di serverê de nehat dîtin Rûpela vala nayê weşandin - Hilxistin ji bo \"%s\" bi serneket - Medya hate rakirin. Bila ji vê şandiyê biçe? - Di vekirina geroka webe de çewtî pêk hat. Ji kerema xwe sepaneke din bibijêre: - Girêdan venabe - Şandî di rajekarê de nehat dîtin - Êdî ev şandî ne li berdest e - Hilxistina medyayê hate betalkirin + Hilxistina ji bo \"%s\"ê bi ser neket + Medya hat rakirin. Bila ji vê şandiyê bê rakirin? + Di vekirina geroka webê ya jixweberî de çewtî derket. Jkx, sepaneke din hilbijêre: + Girêdan nayê vekirin + Şandî di serverê de nehat dîtin + Êdî ev şandî ne berdest e + Hilxistina medyayê hat betalkirin Hilxistina medyayê di vê rûpelê de rastî çewtiyekê hat: %s. Di hilxistina vê rûpelê de çewtiyek pêk hat: %s. Şandiya te tê hilxistin - Medya tê hilxistin + Medya tê hilxistin… Rûpel hat demsazkirin Şandî hat demsazkirin Dîsa biceribîne - Şandiya rêzkirî + Şandî ket dorê \"%s\" tê hilxistin Girêdana bi rajakerê re qut bû - Malperên min Malpera min - Sepana te ya epeyam-wergir bikare were tesbîtkirin + Malperên min Ji kerema xwe kodeke rastandinê têxîne + Sepana te ya epeyam-wergir bikare were tesbîtkirin Ji kerema xwe navekî bikarhêner têxîne Ji bo bigihêje şandiyê di WordPress.comê de têketinê bike. Dema malper dihat tevlîkirin çewtî çêbû. Koda çewtiyê: %s Navnîşana malperê tê kontrolkirin - Alîkariya zêdetir pêwîst e? Malpera te li benda jor a ekranê wê bê xuyan gava ku te di Chrome-ê de malpera xwe seredan kir. + Alîkariya zêdetir hewce ye? Navnîşana Malpera min çi ye? - Ji bo dîtina navnîşana malpera te alîkarî hewce ye? + Ji bo tu navnîşana malpera xwe bibînî alîkarî lazim e? Navnîşana malperê Navnîşana Malpera WordPressê ya ku tu dixwaze pê gire bide têxîne. Jixwe di WordPress.comê de têketin pêk hatiye Bidomîne Malpereke din girêde - Pêborîna xwe ya WordPress.comê têxîne. + Pêborîna xwe ya WordPress.com\'ê bikevê. Xwestina emaila têketinê Wisa dixuye ku ev pêborîn xelet e. Ji kerema xwe agahiyên xwe du caran kontrol bike û careke din biceribîne. Xwestina kodeke rastandinê bi riya SMSê. Jê dêvla wê kodekê ji min re bişîne Hema bêje temam bû. Xêra xwe koda rastandinê têkeve ji sepana xwe ya rastkar. - Epeyamê veke Pêşve Ji bo ku tu hemû malperên xwe yên WordPressê bi rê ve bibî di WordPress.com\'ê de bi navnîşaneke emailê têketinê bike. + Emailê veke Optîmîzasyona wêneyan, wêneyan biçûk dike ji bo hilxistina zûtir\nTu herdem dikarî vê biguherînî ji sazkariyên malperê. Bila optimizasyona wêneyê vebe? Girtî bihêle @@ -1607,14 +1633,14 @@ Language: ku_TR Wêneyê Profîlê Cewaba nehêvîkirî ji rajekarê Hilxistin nayê rawestandin ji ber ku ji zû ve qediya ye - Sernav - Dubare bike Vegerîne + Dubare bike + Sernav Ji bo nîşandanê medya pir biçûk e Hişyarî: Hemû hêmanên ku hatine hiştin nayên piştgirîkirin! Destûr nayê dayîn ku wêne li Serikê bêne danîn - Çewtiyeke derket holê gava danîna nivîsê Di moda HTMLê de destûra hiştina wêneyan nayê dayîn + Çewtiyeke derket holê gava danîna nivîsê Çîroka xwe li vir parve bike… Taybet Reşnivîs @@ -1625,22 +1651,22 @@ Language: ku_TR Bijêra Lokasyonê nikare veke, Xizmetên Google Playê ne berdest e Cîgeh Aniha - Tenê kesên xwediyê vê pêborînê karin vê şandiyê bibînin + Tenê kesên xwediyê vê pêborînê dikarin vê şandiyê bibînin Kurte, kurteyên naveroka te yên ku bi destan hatiye amadekirin e. Kurtenav versiyona URL-hez ya serikê şandiyê ye. - Dirûva Şandiyê - Etîket Kurtenav Kurte + Etîket + Formata Şandiyê Nesazkirî - Vebijêrkên Zêdetir - Kategorî & Etîket + Vebijarkên Zêdetir + Kategorî û Etîket Hemû - Asta jor - Beşa sereke (li gor daxwazê): + Asta bilind + Kategoriya sereke (li gor daxwazê): Ti dosyeya te ya dengî tune ye - Ti dosyeyên te tune ye Hîç vîdyoyên te tune ye + Ti dosyeyên te tune ye Hîç wêneyên te tune ye Serverê pir dereng bersiv da Ji bo li hilxistina vê malperê pelge pir mezin e @@ -1649,9 +1675,9 @@ Language: ku_TR Wêne pir mezin e bo hilxistinê. Biceribîne ku ji sazkariyên sepana xwe vebijêrka \"Wêneyan Optîmîze Bike\" biguherînî Deng Vîdyo - Pelge Wêne Hemû + Dosye %1$s red kir ku bigihe wêneyên te. Bo çarekirina vê, destûrên xwe biguherîne û %2$s veke. Şîroveyan bibîne Qalîteya vîdyoyan. Nirxên bilindtir tê wateya vîdyoyên qalîteya çêtir. @@ -1660,54 +1686,54 @@ Language: ku_TR Vîdyoyan Optîmîze Bike Reşnivîs hate hilxistin Çewtî ragihîne - Qalîteya Vîdyoyê + Kalîteya Vîdyoyê Kamera - Bîrbar + Bîrgeh Destûran serast bike Destûr bide Hewcedariya %s bi destûra te heye bo gihîna wêneyên te Wê ev tevlî nava twîtan bibe gava ku însan bi bişkoka Twîtterê parve kirin Nivîsa bişkokên parvekirinê biguherîne. Ev nivîs wê neyê xuyan heta ku te bi kêmanî yek bişkokek parvekirinê lê zêde kir. - Ajimêr tê girêdan + Hesab tê girêdan Girêdana %s nikare çêbe ji ber ku ti ajimêrek nehatiye bijartin. - Hat girêdan Twitter Ecibandin Destûr bide ku hemû şîrove ji hêla te û xwendevanên te ve were ecibandin - Bişkok + Hat girêdan Bişkokên \"Bêhtir\" serast bike Bişkokeke \"Zêdetir\" daketokekê dihewîne ku ew bişkokên parvekirinê nîşan dide + Bişkok Bibijêre ku ka bila kîjan bişkok bêne xuyan li bin şandiyên te - Navê bikarhêner yê Twitterê Ecibandinên şîroveyê - Şêwaza Bişkokê - Lêgerîn bo: + Navê bikarhêner ê Twitterê Bişkokên parvekirinê Bişkoka Ecibandinê Nîşan Bide + Etîket + Stîla Bişkokê Bişkoka Dîsblogê Nîşan Bide - Dîsblog û Ecibandin + Dîsblog bike û Biecibîne Bişkokên Fermî Tenê Nivîs - Tenê Nîşanek - Nîşanek û Nivîs - Ajimêra ku tu dixwazî destûrdar bikî bibijêre. Bi bîr bixe ku şandiyên te wê li ajimêrên bijartî bi otomatî werin parvekirin. - Girêdan bi %s re pêk tê + Tenê Îkon + Îkon û Nivîs + Ajimêra ku tu dixwazî destûrdar bikî hilbijêre. Bi bîr bixe ku şandiyên te wê li ajimêrên hilbijartî bi otomatîk werin parvekirin. Bila girêdan ji %s qut bibe? - Ajimereke din gire bide + Bi %s ve tê girêdan + Hesabekî din girêde Dîsa girêde Girêdanê qut bike - Girêdan Ji bo ku tu şandiyên blogê yên li ser %s otomatik parve bikî, gire bide. - Ji bo %s belav bike - Ajimêrên Girêdayî + Girêde + Li ser %sê belav bike Servîsên medyayên civakî yên kêfa te ji wan re tê gire bide û bila bi awayekî otomatik şandiyên nû bi hevalên te re were parvekirin. + Hesabên girêdayî Girêdan Parvekirin Danezan. Danezanên xwe bi rê ve bibe. Xwîner. Ji malperên din naverokan bişopîne. - Malpera Min. Malpera xwe bibine, bi rê ve bibe û li rêjejimaran meyzîne. + Malpera Min. Malpera xwe bibîne, bi rê ve bibe û amaran kontrol bike. Parvekirin - Ne aniha + Ne niha Çewtiya hilxistinê. Ji sazkariyên sepana xwe guhertina vebijêrka \"Wêneyan Optîmîze Bike\" biceribîne Medya di vê amûrê de tê tomarkirin Medya nayê tomarkirin @@ -1718,13 +1744,13 @@ Language: ku_TR Ji bo pirtir şîroveyan hilbijêre, bitepîne û li ser bihêle Ji amûrê vîdyo bibijêre Ji amûrê wêne bibijêre - Medyayên WordPressê - Wekî pêşangeh tevlî bike Yekane tevlî bike + Medyayên WP\'ê + Wekî galerî tevlî bike Wêneyan bi piranî tevlî bike %d stûn Stûnek - Epeyamê dîsa bişîne + Emailê dîsa bişîne Em epeyamekê şandin %s, gava ku te cara pêşîn têket. Xêra xwe peyamê vebike û bitikîne bişkoka şîn, ji bo çalakkirina weşandinê. Em epeyamekê şandin te, gava ku te cara pêşîn têket. Xêra xwe peyamê vebike û bitikîne bişkoka şîn, ji bo çalakkirina weşandinê. Ji kerema xwe navnîşana epeyama xwe bipejirîne @@ -1741,41 +1767,41 @@ Language: ku_TR Bi malpera %s re dest pê bike Di rakirina malperê de çewtî çêbû, piştre dîsa biceribîne Şandî bi ser neket ku medyayê hilbixe û wek herêmî hate qeydkirin - Bila ji sepanê ev malpera rabe? + Bila ev malper ji sepanê bê rakirin? Wêne hilbijêre - Cîhaz derhêl e. Şandî cîgehî hat tomarkirin. - Peyam bi serhêl hat tomarkirin. - Qalîteya wêneyan. Nirxên bilindtir tê wateya wêneyên qalîteya çêtir. + Cîhaz derhêl e. Şandî bi cîgehî hat tomarkirin. + Şandî bi serhêlî hat tomarkirin + Kalîteya wêneyan. Nirxên bilindtir tê wateya wêneyên kalîteya wan çêtir. Verehandin û dewisandina wêneyan, biçalakîne Herî bilind Pir bilind Bilind Navîn Nizm - Hilxistî - Hilxistin bi Serneket + Hat hilxistin Hat jêbirin Tê jêbirin Tê hilxistin Di dorê de - Qalîteya Wêneyê - Ji ber sedema çewtiyeke nediyar hilxistina hemû medayayan betal bû. Ji kerema xwe hilxistinê dîsa biceribîne - Dirûva şandiya nenas + Hilxistin bi ser neket + Kalîteya Wêneyê + Ji ber çewtiyeke nenas hilxistina hemû medayayan hatin betalkirin. Ji kerema xwe hilxistinê dîsa biceribîne + Formata şandiya nenas Bişîne - Malpereke dubarekirî hate tesbîtkirin - Ev malper jixwe heye di sepanê de, tu nikarî lê zêde bikî. + Malpereke dubareyî hat tesbîtkirin. + Jixwe ev malper di sepanê de heye, tu nikarî wê tevlê bikî. Te jixwe têketiye ajimêreke WordPress.comê, tu nikarî malpereke WordPress.comê yê ku girêdayî ajimêke din e lê zêde bikî. Medya nayê barkirin Ji bo nûkirina medyagehê înternet hewce ye - Ji bo dîtin an jî serastkirina medyayê destûra te nîn e + Ji bo tu medyayê bibinî an jî wê sererast bikî îzina te tune ye Medya nehat dîtin Ser medyaya amûrê destûra xwendinaê hate redkirin Wêneyan optîmîze bike - Çewtiya medyayê qewimî - Çewtiya hilxistinê ya medyayê qewimî - Dîsa biceribîne + Çewtiya medyayê derket + Çewtiya hilxistina medyayê derket Bipejirîne Nikare were girêdan. Em çewtiya 403 wergirtin gava ku diceribandin\n xwe bigihînin nuqteya dawîn ya XMLRPC. Hewcehiya sepanê pê heye da ku bi malpera te re têkiliyê deyîne. Bo çareserkirina vê pirsgirêkê\n têkiliyê deyîne bi hewandera xwe re. + Dîsa biceribîne Nikare were girêdan. Hewandera te daxwazên POSTê asteng dike, \n û hewcedariya sepanê pê heye ji bo ku bi malpera te re têkiliyê deyîne. Ji bo çareserkirina vê pirsgirêkê bi pêşkêşkera hewangeha xwe re têkiliyê deyîne. Li malperên şopandî bigere Wê daliqandî nehêle! \'%1$s\' li benda weşandinê te. @@ -1796,12 +1822,12 @@ Language: ku_TR Şîrove nayê bersivandin. Ji kerema xwe piştre dîsa biceribîne. Şîrove nayê pejirandin. Ji kerema xwe piştre dîsa biceribîne. Şîrove nayê ecibandin. Ji kerema xwe piştre dîsa biceribîne. - Ji bo wan nîşan bide, bitikîne + Ji bo nîşandanê, bitikîne Danezanên nû Tê bersivandin… Tê pejirandin… Tê ecibandin… - Tê xebitandin… + Tê hêran… Çalakî qediya! Şîrove hat ecibandin Derkeve @@ -1809,32 +1835,32 @@ Language: ku_TR Zêdetir li ser WordPress.com\'ê Zêdetir li ser %s\'ê Sazkariyên cîhazê veke - %s: Emaila nederbasdar %s: Vexwendinên bikarhêner astengkirî + %s: Emaila nederbasdar %s: Jixwe tê şopandin - %s: Jixwe endamek e %s: Bikarhêner nehat dîtin + %s: Jixwe endamek e Şîrove hat pejirandin! Biecibîne Aniha Bîner Şopîner - Girêdan tune ye, profîla te nehat tomarkirin + Înternet tune ye, profîla te nehat tomarkirin Rast Çep Hîç %1$d hat hilbijartin Bikarhênerên malperê nehatin stendin - Şopînerê Emailê Şopîner Bikarhêner tên stendin… + Şopînera Emailê Bîner Şopînerên Emailê Şopîner - Kom - Heya 10 heb navnîşanên emailê û/an jî bikarhênerên WordPress.com\'ê, vexwîne. Ji bo kesên hewcedariya wan bi navê bikarhêner heyî re di derbarê afirandinê de ew ê rêwerz were şandin. - Heke tu vî/vê bînerî/ê rakî êdî ew dê nikaribî seredana vê malperê bike.\n\nDîsa jî tu dixwazî vî/vê binerî/ê rake? - Heke ev şopîner were rakirin dê di derbarê vê malperê de danezanan nestîne, heta ku dîsa bişopînî.\n\nDîsa jî tu dixwazî ev şopîner were rakirin? + Tîm + Heta 10 heb navnîşanên emailê û/an jî bikarhênerên WordPress.com\'ê, vexwîne. Ji bo kesên ku hewcedariya wan bi navê bikarhêneriyê hene re di derbarê afirandinê de ew ê rêwerz were şandin. + Heke tu vî bînerî rakî êdî ew ê nikaribe seredana vê malperê bike.\n\nTu dîsa jî dixwazî vî binerî rakî? + Heke ev şopîner were rakirin ew ê danezanan di derbarê vê malperê de nestîne, heta ku dîsa bişopînî.\n\nTu dîsa jî dixwazî vî şopînerî rakî? Ji %1$s\'an vir de Bîner nayê rakirin Şopîner nayê rakirin @@ -1845,7 +1871,7 @@ Language: ku_TR Giredan Binnivîs Guhertin hatin tomarkirin - Bila guhertinên netomarkirî were avêtin? + Bila guhertinên netomarkirî bên avêtin? Bila hilxistin raweste? Ji bo dîsa biceribîne, bitepîne Vexwendin bi serkeftî hat şandin @@ -1853,62 +1879,62 @@ Language: ku_TR Vexwendin hat şandin lê hin(ek) çewtî rû dan! Dema vexwendin dihat şandin çewtiyek çêbû! Nikare bişîne: Epeyam an jî navên bikarhêneran nederbasdar e - Nikare bişîne: Navek an jî epeyamek nederbasdar e - Ji kerema xwe herî kêm navekî bikarhêner tevlî bike + Nikare bişîne: Navek an jî email nederbasdar e + Ji kerema xwe herî kêm navê bikarhênerekî tevlî bike (Girêdayî daxwazê) Tu dikarî peyameke xisûsî têkevî heya 500 karakteran, ku ev wê tevlî vexwendina bo bikarhêner(an)ê were kirin. %d karakter mane Karakterek maye 0 karakter maye Peyama Taybet Vexwîne - Epeyam an jî navên bikarhêneran + Email an jî navê bikarhêneran Mirovan Vexwîne Derveyî Girêdanê bişîne Raboriya lêgerînê paqij bike Raboriya lêgerînê paqij bike? Di zimanê te de ji bo \"%s\"ê ti encam nehatin dîtin - Li ser WordPress bigere + Li ser WordPress\'ê bigere Girêdanên li ser ekrana pêşdîtinê neçalak in Bişîne %1$s bi serkeftî hat rakirin - Heke tu bikarhêner %1$s rake, ew dê nikaribe bigihêje vê malperê lê naverokên ji hêla %1$s wî/ê hatiye afirandin dê li malperê bimîne.\n\nDîsa jî tu dixwazî vî/ê bikarhênerî/ê rake? + Heke tu %1$s rakî, ew ê êdî nikaribe bigihîje vê malperê, lê naverokên ji hêla %1$s ve hatine afirandin ew ê li ser malperê bimînin.\n\nTu dîsa jî dixwazî vî bikarhênerî rakî? %1$s rake Rol Kes - Malperên di vê lîsteyê de vê gavê ti şandî nekirine + Malperên di vê lîsteyê de vê gavê ti şandî neweşandine Bikarhêner nayê rakirin Rola bikarhêner nayê hildemandin Bînerên malperê nehat stendin - Di hildemandina Gravatara te de çewtî çêbû - Di ji nû ve hildemandina Gravatara te de çewtî çêbû - Di bicîhkirina wêneyên qusandî de çewtî çêbû - Di qusandina wêneyê de çewtî çêbû - Epeyam tê kontrolkirin - Niha ne li berdest e. Ji kerema xwe pêborîna xwe têxîne + Di hildemandina Gravatara te de çewtî derket + Di nûkirina Gravatara te de çewtî derket + Di bicîkirina wêneyên qusandî de çewtî derket + Di qusandina wêneyê de çewtî derket + Email tê kontrolkirin + Niha ne guncav e. Ji kerema xwe pêborîna xwe bikevê Têketin pêk tê - Li şûnê pêborîna xwe têxîne + Ji şûna wê pêborîna xwe bikevê Dema te şîrove kir wê her kes bibîne - Wêne hilbijêre an jî bikşîne + Wêne hilbijêre an jî bigire Plan Plan - Rûpel, şandî û sazkariyên te dê ji navnîşana %s re bi epayamê were şandin. - Naverokên xwe derxîne derve - Epeyama derxistinê hat şandin! + Rûpel, şandî û sazkariyên te ew ê bi emailê ji ser %s\'ê ji te re bên şandin. + Naverokên xwe derxîne + Emaila derxistinê hat şandin! Naverok tê derxistin… - Kirînên te tê kontrolkirin Kirînan nîşan bide Li ser malpera te bilindkirinên premium yên çalak hene. Ji kerema xwe berî tu malpera xwe jê bibî bilinkirinên xwe betal bike. + Kirînên te tên kontrolkirin Bilindkirinên Premium Hinek tişt çewt çû. Daxwazên kirînan pêk nehat. Malper tê jêbirin… - Malperê jê bibe? - Malpera xwe wekî pelgeya XML derxe - Navpera Sereke + Malperê jê bibe + Malpera xwe wekî dosyeya XML\'ê derxîne + Navpera (Domain) Sereke Dema malpera te dihat jêbirin çewtiyek çêbû. Ji kerema xwe bo zêdetir alîkariyê bi timên alîkariyê re têkilî deyne. Di jêbirina malperê de çewtî - Naverokê derxe - Ji kerema xwe bo pejirandinê di qasa jêrîn de %1$s binivîsîne. Malpera te dê piştî vê heta hetayê winda bibe. + Ji kerema xwe bo pejirandinê di qasa jêrîn de %1$s binivîsîne. Malpera te dê piştî vê bi hemîşeyî winda bibe. + Naverokê derxîne Jêbirina Malperê Bipejirîne Têkîlîya Alîkariyê Tu malpereke nû bixwazî, lê nexwazî ku ti rûpel û şandiyeke te ya niha tê de nîn bin, tîma me ya alîkariyê dikare ji bo te şandî, rûpel, medya û şiroveyên te jê bibe.\n\nEv wê malpera te û URLya te aktîv bigire, lêbelê ji bo te destpêkek teze bide ji bo çêkirina naverokan. Tenê bi me re têkiliyê deyîne ji bo paqijkirina hemû naverokên xwe yên vê gavê. @@ -1916,30 +1942,30 @@ Language: ku_TR Ji serî ve dest bi malpera xwe bike Ji serî ve dest pê bike Sazkariyên Sepanê - Hilxistinên bi serneketî rake + Hilxistinên serneketî rake Pêşketî - Şîroveyên hatine jêbirin tune ye - Şîroveyên hilawîstî tune ye + Di jêbirdankê de şîrove tune ye + Şîroveyên hilawestî tune ye Şîroveyên pejirandî tune ye - Girêdan pêk nehat. Rêbazên XML-RPC yên pêwist li ser serverê kêm in. - Navîn bike + Girêdan pêk nehat. Fonksiyonên XML-RPC yên pêwîst di serverê de kêm in. Vîdyo Rewş - Standard - Jêgirtin + Navend Girêdan Wêne - Pêşangeh Gotûbêj + Standard + Jêgirtin + Galerî Deng Kêlekbend - Agahdariya li ser qurs û çalakiyên WordPress.comê (serhêl û şexsî). - Derfetên beşdarbûnê yên ji bo lêkolîn û vekolîna WordPress.comê. + Agahdariya li ser kurs û çalakiyên WordPress.comê (serhêl û şexsî). + Derfetên beşdarbûnê yên ji bo lêkolîn û vekolîna WordPress.comê. Bendên ji bo fêdedîtina ji WordPress.comê. Civak Lêkolîn Pêşniyar - Bersivên li ser şîroveyên min + Bersivên şîroveyên min Qalkirinên li ser navê bikarhêner Serkevtinên malperê Şopandinên malperê @@ -1949,8 +1975,8 @@ Language: ku_TR %d hêman Hêmanek Hemû bikarhêner - Şîroveyên bikarhênerên naskirirî - Şîrove nîn e + Şîroveyên bikarhênerên navnas + Şîrove tune ye Serê rûpelê %d şîrove Serê rûpelê şîroveyek Zêdeyî %d girêdanan be pejirandin pêwîst e @@ -1963,9 +1989,9 @@ Language: ku_TR Rojek Navnîşana webê Malpera sereke - Ji bo navnîşana nû ya te were pejirandin, li girêdana rastandinê ya ji epeyama %1$s re hatiye şandin bitikîîne - Vê gavê tu medya hldixîne. Ji kerema xwe heta qedandinê bisekine. - Şîrove vê gavê nayê nûkirin - şîroveyên kevn tên nîşandan + Ji bo navnîşana te ya nû were pejirandin, li girêdana rastandinê ya ji emaila %1$s re hatiye şandin, bitikîne + Tu niha medyayê hildixîne. Ji kerema xwe heta biqede bisekine. + Şîrove vê gavê nayên nûkirin - şîroveyên kevn tên nîşandan Wêneya bijarde saz bike Wêneya Bijarde Navnîşana emailê @@ -1974,39 +2000,39 @@ Language: ku_TR Jê bibe Vegerîne Şîrove hat jêbirin - Şîroveyên nexwestî nîn e + Şîroveyên spam tune ye Hemû Rûpel nayê barkirin Girtî Zimanê Navrûyê Derbarê sepanê - Sazkariyên ajimêra te nehat tomarkirin - Sazkariyên ajimêra te nehat stendin + Sazkariyên hesabê te nehat tomarkirin + Sazkariyên hesabê te nehat stendin Profîla te nehat stendin - Koda ziman nehat naskirin + Koda zimên nehat naskirin Destûr bide ku şîrove di nav hev de wek deziyan bêne rêzkirin Hejmara meztirîn yê deziyan Neçalak - Lêgerîn Rake - Mezinahiya Resen + Lê bigere + Mezinahiya Orijînal Malpera te tenê ji bo te û bikarhênerên ku te pejirandî ye xuya ye Malpera te ji her kesî re tê xuyan lê ji motorên lêgerînê daxwaz dike ku ew neyê navnîşkirin Malpera te ji her kesî re tê xuyan û dibe ku hatibe navnîşkirin ji aliyê motorên lêgerînan ve Çend gotin di derbarê te de… - Derbarê min de Ger nehatibe sazandin, navê berdest wê bibe navê jixweber + Derbarê min de Navê xuyabûnê ya giştî Paşnav Nav Profîla Min Risma pêşdîtina şandiyê ya eleqedar - Nebû ku agahiyên malperê qeyd bike - Nikare agahiyên malparê werbigire. + Agahiyên malperê nehat tomarkirin + Agahiyên malperê nehat standin Bi otomatîkî bigire - Şiroveyên ser gotaran bi otomatîkî bigire + Şîroveyên li ser gotaran bixweber bigire. Zincîreyên şiroveyan li nava rûpelên pirhejmar belav bike - Şiroveyên bo her rûpelek + Serê rûpelê şîrove Şirovekirinê bigire Gava şiroveyek di naverok, nav, URL, e-name, an jî IPya xwe de yek ji van peyvan bihewîne, wê ew wek nexwestî (spam) were nîşankirin. Tu dikarî peyvên qismî têkevî, wek \"press\", wê ew bibe \"Wordpress\". Gava şiroveyek di naverok, nav, URL, e-name, an jî IPya xwe de yek ji van peyvan bihewîne, wê ew şirove bigirin nav dûvika teftîşê. Tu dikarî peyvên qismî têkevî, wek \"press\", wê ew bibe \"Wordpress\". @@ -2015,7 +2041,7 @@ Language: ku_TR Tu dikarî van sazkariyan ji bo şandiyên taybet bêhukm bikî di \"Bilindkirin\"ê de Nîvenda Bilindkirinê: Videopress ji bo Zewacan - di \"Sepan\"ê de + di \"Sepanan\" de Sepana WordPressê ya bo Androîdan Ji Aliyê Xuyaniyê ve Gelekî Bi Pêş Ket di \"Mobîl\"ê de Hildemandina Mezin ya iPhone/iPadê Vêga Hazir e @@ -2040,101 +2066,101 @@ Language: ku_TR Hemû sazkariyên berdest yên Gotûbêjê nîşan bide Nîşan bide an biveşêre şandiyên eleqedar di xwînerê de Mezinahiya wêneyên di şandiyê de dike bi qasî vê mezinahiyê - Sazkariyên dirûva şandiyên nû - Sazkariyên kategoriya şandiyên nû - Pêborîna xwe bigherîne - Ajimêra bikarhêner ya derbasdar + Formata şandiya nû saz dike + Kategoriya şandiya nû saz dike + Pêborîna xwe biguherîne + Hesabê bikarhêner ê niha Zimanê sereke yê ev blog pê hatiye nivîsîn - Kontrol dike ku kî dikare malpera te bibîne + Kesên dikarin malpera te bibînin kontrol dike Guherandina navnîşana te vê gavê nayê piştgirîkirin Danasîneke kurt an gotineke cazib yê ku bloga te dide naskirin Bi hin peyvan, îzah bike ku ev malper derbarê çi de ye Şîroveyên ji bikarhênerên nas Şîroveyên ji hemû bikarhêneran - asta %d + asta %d Taybet Veşartî - Giştî Malperê jê bibe + Gelerî Reşlîste Bisekinîne bo Kontrolê Girêdanên di şîroveyan de - Otomatîk bipejirîne + Bi otomatîkî bipejirîne Rûpelkirin Zincîrkirin Rêz bike Divê bikarhêneran têketin kiribin - Divê epeyam û nav vehewîne + Divê nav û emailê vehewîne \"Pingback\"an werbigire \"Pingback\"an bişîne - Destûr bide şîroveyan - Dirûva Jixweberî + Destûrê bide şîroveyan + Formata Jixweberî Kategoriya Jixweberî Navnîşan Rêza etîketê Sernavê Malperê - Ji bo şandiyên nû jixweberî + Jixweberiyên ji bo şandiyên nû Nivîsîn Hesab Giştî Yekema herî nû - Yekema herî kevn + Nihênî Piştre bigire Şîrove Şandiyên Têkildar - Nihênî - Nîqaş + Yekema herî kevn + Gotûbêj Destûra te nîn e ji bo hilxistina medyayê ya li malperê Nenas Oet Ev şandî êdî ne berdest e Bo xuyakirina vê şandiyê destûra te tune - Ev nivîs cardin nayê anîn + Ev şandî nayê anîn Malperên tu dişopîne di vê dawiyê de ti şandî nekirine - Nivîsên nû tune + Şandiyên nû tune ye URL li rûnûsgehê hat kopîkirin Rûkara Hilbijartî - Rûkar nayê hilbarkirin - Hinek tişt çewt çû. Rûkar nayê çalakkirin. - ji aliyê %1$s - Ji bo bijartina %1$s spas + Rûkar nayê barkirin + Hinek çewtî derketin. Rûkar nayê çalakkirin + ji hêla %1$s ve + Spas ji bo bijartina %1$s\'ê + Hûrgilî MALPERÊ BI RÊ VE BIBE - QEDIYA Piştgirî - Hûrgilî Xuyang - Biceribîne & Kesane Bike - Çalak bike - Çalak - Piştgirî + QEDIYA + Biceribîne & Taybet Bike + Biçalakîne Hûrgilî - Kesanekirin + Piştgirî Rûkara Derbasdar - Rûpel hate hildemandin - Şandî hate hildemandin - Rûpel hate weşandin - Şandî hate weşandin + Taybet bike + Biçalakîne + Rûpel hat hildemandin + Şandî hat hildemandin + Rûpel hat weşandin + Şandî hat weşandin Bibore, rûkar nehatin dîtin. - Şandiyên bêhtir bar bike + Şandiyên zêdetir bar bike \'%s\' û tu malper nehat li hev Li malperan bigere - Biçe Xwînerê - Ji bîr neke: şandiyên hatine xwendin şîrove bike - Beşdarî gotûbêjekê bibe: şandiyên blogan şîrove bike + Here Xwînerê + Ji bîr neke: şandiyên ku te xwendine şîrove bike + Beşdarî gotûbêjan bibe: şandiyên blogan şîrove bike Gotûbêjan gûr bike: şandiyeke nû binivîse - Çalak be! Li şandiyên di blogên tu dişopîne de şîrove bike - Hîn ti şîrove tune ne + Çalak be! Li şandiyên di blogên tu dişopînî de şîrove bikî. + Hîn ti şîrove tune ye Hemû hildem in! %s Şîrove Şîroveyek - Şandiyê bibersivîne - Serdana %s bike - Eslen li ser %s hate weşandin - Eslen ji aliyê %s ve hate weşandin - Eslen ji aliyê %1$s ve li ser %2$s hate weşandin + Şandiyê bibersivîne… + Serdana %s\'ê bike + Bi awayekî orijînal li %s\'ê hat weşandin + Bi orijînalî ji aliyê %s ve hat weşandin + Bi orijînalî ji aliyê %1$s ve li %2$s\'ê hate weşandin %s Ecibandin - Ecibandinek Biecibîne + Ecibandinek %,d Şopîner Malper û etîketan sererast bike Şandiya Xwînerê @@ -2143,291 +2169,290 @@ Language: ku_TR Sazkariyên danezanan ên di hilpeka Danezanan de dixuyin. Danezanên sepanê hatin neçalakkirin. Bitepîne vir ji bo çalakkirina wan di Sazkariyan de Cûreyên Danezanan - Sazkariyên danezana nehat barkirin + Sazkariyên danezanan nehat barkirin Ecibandinên şîroveyê - Danezanên Sepanê - Emaîl Hilpeka danezanan + Danezanên sepanê + Email Em ê hertim epeyamên girîng bişînin te yên derbarê ajimêra te de, lê belê tu yê karibî hin zêdekên alîkar jî werbigirî. - Kurteya Şandiya dawî - Girêdan tune - Şande hate şandin jêbirdankê - Bavêje jêbirdankê - Amar - Pêşdîtin + Kurteya Şandiya Dawî + Înternet tune ye Bibîne - Biweşîne + Pêşdîtin + Amar Sererast bike - Bo gihîna vê malperê destura te tune + Şande hate şandin bo jêbirdankê + Jêbirdank + Biweşîne + Ji bo gihana vê malperê destûra te tune Ev malper nehat dîtin Vegerîne Daxwaza te demborî bû. Ji bo ku cardin biceribînî têkeve WordPress.comê. Piştguh bike Dîtinên Çêtirîn ya Heya Vêga - Rêjejimarên Îro - Şandî, dîtin û serlêderên bo hemû deman + Amarên Îro + Şandî, dîtin û mêvanên hemû deman Kûrbînî - Ji WordPress.comê derkeve - Têketinê di WordPress.com de bike + Ji WordPress.com\'ê derkeve Têketin/Derketin + Têkeve WordPress.com\'ê + \"%s\" nehate veşartin çimkî ew malpera berdest e Alîkarî & Piştgirî Sazkariyên Hesêb - \"%s\" nehate veşartin çimkî ew malpera berdest e - Malpera WordPress.com Biafirîne + Malpera WordPress.com\'ê biafirîne Malpereke xwe-hewander tevlî bike - Malpera nû tevlê bike - Maperan nîşan bide/veşêre - Malper hilbijêre + Malpera nû tevlî bike + Maperan veşêre/nîşan bide + Malperê Biguherîne Malperê Bîbîne Revebir Bibîne - Malperê Biguherîne + Malperê hilbijêre + Biweşîne Sazkarî Şandiyên Blogê - Biweşîne - Xuyanî û Şêwaz + Xuyang û Şêwaz Pevsazî - Bo nîşandanê bitepîne - Temamiya bijartinan rake - Teva bijêre + Ji bo wan nîşan bide, bitikîne Veşêre Nîşan bide - Bo domandinê dîsa têkevê - Koda rastandinê ya nederbasdar - Koda rastandinê + Hemû bijartinan rake + Hemûyan hilbijêre Ziman - Nikare şandiyan cardin bîne - Weşanger: - Danezan nehat vekirin - Têgehên Lêgerînê yên Nenas - Têgehên Lêgerînê + Koda rastandinê + Ji bo dewamkirinê, dîsa têkeve. + Koda rastandinê nederbasdar e Nivîskar + Danezan nehat vekirin + Weşanger: Şîrove tên stendin… - Rûpel tên stendin + Şandî nayên vegerandin + Têgihên Lêgerînê yên Nenas + Têgihên Lêgerînê + Şandî tên stendin… Şandî tên stendin… Medya tê stendin… - Tomarên sepanê li rûnûsgehê hatin kopîkirin + Dema nivîs li rûnûsgehê dihat kopîkirin çewtî pêk hat Ev malper vala ye Şandiyên nû - Malperên dibe ku tu biecibîne - Dema nivîs li rûnûsgehê dihat kopîkirin çewtî pêk hat - Şandî tê hilbarkirin - %1$d sal - Salek - %1$d meh - Mehek + Tomarên sepanê li rûnûsgehê hatin kopîkirin + Şandî tê hilxistin + Mêvan + Sal + Ecibandin + Welat + Şopîner + Vîdyo + berî xulekekê %1$d roj Rojek %1$d demjimêr berî demjimêrekê %1$d xulek - berî xulekekê - çirke berê - Şopîner - Bangewazî - Vîdyo - Şandî û Rûpel - Welat - Ecibandin - Mêvan + Mehek + %1$d sal + Salek + %1$d meh Dîtin - Sal + saniye berê + Belavok + Şandî & Rûpel Rûkar tên stendin… Hûrgilî %d hilbijartî - Çav li rûpela PPP bigerîne - Hîn ti şîrove tune ne - Ti şandiyeke tine bi vê nîşankê - Biecibîne - Gotara resen bixwîne + Şîrove bike Şîrove hatin girtin + Biecibîne %1$d / %2$d - Nikare biweşîne şandiyeke vala - Ji bo dîtin an jî serastkirina şandiyan destûra te nîn e - Ji bo dîtin an jî serastkirina rûpelan destûra te nîn e - Destûra te nîn e ji bo dîtin an sererastkirina şîroveyan - Bêhtir Ji mehekê kevintir Ji hefteyekê kevintir Ji 2 rojan kevintir - Ecibandî - Şîrove bike - Şîrove hate jêbirin. - Vê %s bibersivîne - Hêj ti şandiyek tine ye. Çima yek çênakî? - Derdikeve… - Nikare vê çalakiyê bi cîh bîne - Nikare vê malperê asteng bike - Şandiyên ji vê malperê wê êdî neyên nîşandan + Rûpela me ya PPP bibîne + Gotara orijînal bixwîne + Hat ecibandin + Tê derketin… + Hîn ti şîrove tune ye + Ti şandiyên eleqedarî vê mijarê tune ye + Şandiya vala nayê weşandin + Ji bo dîtin an jî sererastkirina şandiyan destûra te nîn e + Ji bo dîtin an jî sererastkirina rûpelan destûra te nîn e + Ji bo dîtin an jî sererastkirina şîroveyan destûra te nîn e + Zêdetir + Şîrove betal bû + Vêya %s bibersivîne + Hîn ti şandî tune ye. Ka em şandiyekê çêkin? Vê malperê asteng bike + Şandiyên ji vê malperê wê êdî neyên nîşandan + Nikare vê çalakiyê bi cîh bîne + Ev malper nayê astengkirin Demsaz bike - Bihildemîne + Hildemîne Malperên pêşniyarkirî nîn in Nikare dev ji şopa vê malperê berde - Nkare vê malperê bişopîne + Malperên şopandî Jixwe tu vê malperê dişopînî Ev malper nayê nîşandan Malper hat şopandin - Ji bo şopandinê URL an etîketekê binivîse - Malperên şopandî - Etîketên şopandî Malpera Xwînerê + Ev malper nayê şopandin + Ji bo şopandinê URL an jî mijarekê bikevê + Mijarên şopandî + Alîkarî Eger tu bi pirranî bêyî pirsgirêkek karibî werî girêdan li vê malperê, ev dibe ku were maneya yek dixwaze malpera te teqlîd bike, û tu nikaribî dewam bikî. Dîsa jî dixwazî bi sertîfîkayê bawer bibî? Sertîfîkaya SSL\'ê ya nederbasdar Te pêborîna xwe wenda kir? - Alîkarî + Çewtiya daxistina wêneyê + Toreke berdest nîn e Navê bikarhêner an pêborîn xelet e - Navnîşaneke emailê ya derbasdar têkeve Navnîşana emaila te nederbasdar e - Çewtiya daxistina wêneyê Şîrove nehat barkirin - Di sererastkirina şandiyê de çewtiyek qewimî - Di sererastkirinê de çewtiyek qewimî Çewtiyek derket Vê gavê şîrove nehatin nûkirin - Rûpel nikarin werin nûkirin vê gavê - Şandî nikarin werin nûkirin vê gavê - Çewtiyeke rû da gava jêbirina şandiyê - Ti danezanek tine - Hewcedariya hilxistina medyayê heye ya karteke SDyê ya bicîhkirî - Qada navê pêwîst e bo beşê - Beş bi serkeftî hate tevlîkirin - Tevlîkirina beşê bi ser neket - Ne nexwestî - Bi ser neket ku rûkaran bîne - Çewtiyeke rû da wextê gihîna vê blogê - Hêmana medyayê nikare were anîn - Toreke berdest nîn e - Nikare vê nîşankê rabike - Nikare vê nîşankê tevlî bike - Qeyda sepanê - Çewtiyeke rû da wextê çêkirina danegeha sepanê. Jinûvesazkirina sepanê biceribîne. - Ev blog veşartî ye û nikare were barkirin. Ji sazkariyan wê çalak bike û cardin biceribîne. - Medya nikare were nûkirin vê gavê + Di jêbirina şandiyê de çewtiyek derket + Danezan tune + Ji bo medya were hilxistin SD karta girêdayî pêwîst e + Navê kategoriyê pêwîst e + Kategorî bi serkevtî hat tevlîkirin + Tevlîkirina kategoriyê bi ser neket + Ne spam e + Stendina rûkaran bi ser neket + Navnîşana emaileke derbasdar têkeve + Di sererastkirina şandiyê de çewtiyek derket + Di sererastkirinê de çewtiyek derket + Rûpel niha nayên nûkirin + Şandî niha nayên nûkirin + Di gihîna vê blogê de çewtiyek derket + Hêmana medyayê nehat vegerandin + Sazkariyên rûpelê + Çewtiya girêdanê + Sazkariyên şandiyê + Şandiyê jê bibe? + Pejirandî + Rûpelê jê bibe? + Nexwestî + Bipejirîne + Tê pejirandin + Red bike + Tê redkirin + Şîrove pêwîst e + Malperê rake + Di gerokê de bibîne + Navê kategoriyê Bloga WordPressê - Sazkariyên Wêneya - Guherînên xwecihî - Rênimaya nihêniyê Medyaya nû Şandiya nû - Danezan tune…hîna. - Destûrdarkirin pêwîste - Kontrol bike ku URLya têketî derbasdar be Lîsansên çavkaniya vekirî - Ji bo hilxistina medyayê nikare pelgeya demkî çêbike. Jê bawer be ku ser amûra te têra xwe cihê vala hebe. - Navê kategoriyê - Kategoriya nû tevlê bike - Di gerokê de bibîne - Malperê rake - Şîrove nehat guherandin - Şîrove pêwîst e - Bila sererastkirina vê şîroveyê were betalkirin? - Guhertin tên tomarkirin + Jêbirdank Jêbirdank - Bila biçe jêbirdankê? - Diçe jêbirdankê + Kontrol bike ku URLya têketî derbasdar be + Guhertin tên tomarkirin Wekî spam tê nîşankirin - Tê redkirin - Tê pejirandin - Jêbirdank Spam - Red bike - Bipejirîne Şîroveyê sererast bike - Çû jêbirdankê - Nexwestî Hilawestî - Pejirandî - Rûpelê jê bibe? - Şandiyê jê bibe? - Sazkariyên şandiyê - Ji bo hilxistinê dosye nehat dîtin. Ew hatiye jêbirin an veguheztin? - Reşnivîsa Cîgehî - Sazkariyên rûpelê Nivîsa girêdanê (li gor daxwazê) Hinek medya nehatin jêbirin. Piştre dîsa biceribîne. Destûra te ji bo dîtina medyagehê tune ye Wêneyê biçûk Zêdetir bizane - Di barkirina şandiyê de çewtiyek rû da. Şandiyê nû bike û dîsa biceribîne. - Di gihîştina vê pêvekê de çewtiyek rû da - Serrastkirinê betal bike - Çewtiya girêdanê - Kategoriyan Hilbijêre + Tomargeha sepanê + Sazkariyên wêneyê + Guhertinên cîgehî + Polîtîkaya nihêniyê + Danezan tune ye…heta niha. + Ji bo hilxistinê dosye nehat dîtin. Ew hatiye jêbirin an jî veguheztin? + Reşnivîsa cîgehî + Sererastkirinê betal bike + Kategoriyan hilbijêre + Ev mijar nayê rakirin + Ev mijar nayê tevlîkirin + Dema danegeha sepanê dihat afirandin çewtiyek derket. Sepanê ji nû ve saz bike. + Ev blog veşartî ye û nayê barkirin. Di sazkariyan de wê dîsa çalak bike û dîsa biceribîne. + Medya niha nayên nûkirin + Destûrdarkirin pêwîst e + Ji bo hilxistina medyayê dosyeya demkî nayê afirandin. Jê bawer be bila di cîhaza te de têra xwe ciyê vala hebe. + Kategoriya nû tevlî bike + Şîrove nehat guhertin + Sererastkirina vê şîroveyê betal bike? + Bişîne jêbirdankê? + Dişîne jêbirdankê + Çû jêbirdankê + Di barkirina şandiyê de çewtiyek derket. Şandiyê nû bike û dîsa biceribîne. + Di gihîna vê pêvekê de çewtiyek derket Girêdanê parve bike - Şandî tên anîn… - Te û %,d kesên din ev eciband - %,d kes ev eciband + Şandî tên stendin… Bibersivîne - Tu nikarî bi WordPressê parve bikî bêyî blogeke berçav + %,d kes ev eciband + Te û %,d kesên din ev eciband Şîrove wekî nexwestî hat nîşankirin - Ev şandî cardin nayê anîn - Te û kesekî din ev eciband + Tu nikarî bi WordPressê parve bikî bêyî blogeke berçav Vîdyo hilbijêre Wêne hilbijêre + Te û kesekî din ev eciband + Ev şandî cardin nayê anîn + Parve bike + Bişopîne + Şîroveya te nehat şandin + (Bêsernav) Bibe Endam - %s nehate vekirin + Tê şopandin Wêne nehat nîşandan Nehat parvekirin - Ew etîket ne derbasdar e - Jixwe tu vê etîketê dişopînî - Şîroveya te nehat şandin Te vêya eciband Kesekî vêya eciband %s hat rakirin - %s hat tevlîkirin Şîroveyê bibersivîne… - Tê şopandin - Bişopîne - Parve bike Dîsblog bike - (Bêsernav) - Hîn ti şîrove tune ne Ev lîste vala ye + Ew etîket ne derbasdar e + Jixwe tu vê etîketê dişopînî + %s hat tevlêkirin + Hîn ti şîrove tune ye + %s nehat vekirin + Parve bike + Biçalakîne + Rûkar + Doh + Îro Meh Hefte Roj - Doh - Îro - Şander - Etîket û Kategorî - Tikandin - Amar - Parve bike - Biçalakîne - Çewtiya hildemandinê - Daxuyanî + Çargoşe + Çember + Pêşekerî Sernûçe + Daxuyanî + Tikandin + Şander Sernav - Pêşekerî - Çember Mozaîk - Çargoşe - Rûkar - Biavêje + Amar + Etîket û Kategorî + Çewtiya hildemandinê Bi rê ve bibe - û %d zêdetir. + Biavêje %d danezanên nû Şopîner Bersiv hat weşandin + û %d zêdetir. Têkeve Tê barkirin… Pêborîna HTTP\'ê Navê bikarhêner ê HTTP\'ê - Di hilxistina medyayê de çewtiyek rû da + Di hilxistina medyayê de çewtiyek derket Navê bikarhêner an jî pêborîn çewt e. - Têkeve Navê bikarhêner Pêborîn + Têkeve Xwîner Rûpel - şandî Anonîm - Tora berdest nîn e - qediya + Şandî + Înternet tune ye BAŞ e - Navnîşan - Mercên Xizmetê + qediya + URL Guherto + Mercên Xizmetê WordPress ji bo Android\'ê Bicîkirin Nû bike @@ -2440,23 +2465,23 @@ Language: ku_TR Veşartî Sernav Etîketan bi bêhnokê(,) ji hev veqetîne - Herî Zêde Bikarhatî + Kategorî Şîrove tên jêbirin SD Kart Pêwîst e - Parçeyê vîdeoyê rake - Bipejirîne + Medya Jê bibe + Bipejirîne Hîç - Aniha Biweşîne - Bibersivîne - li ser - Pêşdîtin - Çewtiya nûkirina kategoriyê Çewtî Na Erê + Bibersivîne + Pêşdîtin + li ser Sazkariyên Danezanan - Tevlê bike + Aniha Biweşîne + Çewtiya nûkirina kategoriyê Tomar bike - Betal + Betal bike + Tevlî bike diff --git a/WordPress/src/main/res/values-ko/strings.xml b/WordPress/src/main/res/values-ko/strings.xml index 2af7f7ebc1bc..4142001ff4ff 100644 --- a/WordPress/src/main/res/values-ko/strings.xml +++ b/WordPress/src/main/res/values-ko/strings.xml @@ -1,13 +1,52 @@ + <b>요한 브란트</b>가 글에 답했습니다 + 오늘 사이트에서 <b>50개의 좋아요</b>를 받았습니다 + <b>메디슨 루이즈</b>가 글을 좋아합니다 + 스크롤 할 수 있는 블록 메뉴가 열렸습니다. 블록을 선택하세요. + 스크롤 할 수 있는 블록 메뉴를 닫았습니다. + 건너뛰기 + 선택하기 + 좋아하는 홈페이지 레이아웃을 고르세요. 사용자 정의하거나 나중에 바꿀 수 있습니다. + 디자인 선택하기 + 온라인으로 돌아가면 재시도를 누르거나 아래의 단추를 이용하여 빈 페이지를 만드세요. + 레이아웃은 오프라인 중에 사용할 수 없습니다 + 재시도를 누르거나 아래의 버튼을 이용하여 빈 페이지를 만드세요. + 오류가 있어 레이아웃을 사용할 수 없습니다 + 카테고리 추가하기 + 새 카테고리 추가하기 + 카테고리 + 설정하지 않았습니다 + 카테고리 + 런던의 박물관 + 세계 최고의 팬 + 상위 10개 카페 + 정치 + 음악 + 원예 + 축구 + 요리 + 예술 + 주간 락앤롤 + 웹 뉴스 + 파멜라 응우옌 + 사진가 카메론 카르스텐의 작업에서 깊은 영감을 받았습니다. 다음 번에 이 기법을 시도할 것입니다 + 영감받기 + 좋아하는 사이트를 팔로우하고 새 읽을 거리를 발견하세요. + 깊이 있는 분석으로 독자가 늘어나는 것을 확인하세요. + 댓글과 알림을 실시간으로 보세요. + 강력한 편집기로 이동 중에도 글을 쓸 수 있습니다. + 세계적으로 가장 잘 알려진 웹사이트 제작기에 오신 것을 환영합니다. + 미디어 로딩을 실패했습니다 + 팔로우한 사이트 매 릴리즈마다 더 많은 블록을 추가하려고 열심히 일하고 있습니다. - \'%s\'을(를) 완전히 지원하지 않습니다 + ‘%s’을(를) 완전히 지원하지 않습니다 도움 버튼 웹 편집기를 이용하여 편집하기 이미지 고르기 @@ -20,7 +59,6 @@ Language: ko_KR 이야기 글을 만드는 방법 이야기 글을 일찍 접근할 수 있게 되었으니 한 번 사용해 보시기 바랍니다. 이야기 글 소개 - 레이아웃을 가져오는 동안 오류가 생겼습니다 빈 페이지를 만들었습니다 페이지를 만들었습니다 레이아웃 미리보기 @@ -158,8 +196,7 @@ Language: ko_KR 이미지나 비디오 고르기 이미지 고르기 블록을 제거했습니다 - 워드프레스 로고 - 새로 만들 사이트 주소 입력하기 + 이미 있는 사이트 주소 입력하기 워드프레스닷컴으로 계속하기 등록 확인 워드프레스닷컴 계정이 없는 상태에서 Google로 계속하기를 선택하는 경우, 계정을 만들고 %1$s서비스 약관%2$s에 동의하는 것으로 간주됩니다. @@ -181,8 +218,6 @@ Language: ko_KR 또는 비밀번호 입력하기 계정 만들기 이메일로 링크 보내기 - 가장 유연한 웹사이트 제작 도구의 능력을 직접 경험해보세요. - 웹의 37\%가 워드프레스로 만들어졌습니다. 비밀번호 재설정하기 요청을 처리하는 중에 문제가 있었습니다. 나중에 다시 시도하시기 바랍니다. 개성과 주제를 반영할 사이트 이름을 주세요. 첫 인상이 중요합니다! @@ -487,7 +522,6 @@ Language: ko_KR 이 글은 즉시 동기화됩니다. 동기화할 준비가 되셨습니까? 이 도메인을 사용할 수 없습니다. - 소개 -%s 사이트에 액세스할 수 없습니다. 이 문제를 해결하려면 호스트에게 연락해야 합니다. <b>SSL 인증서</b> 문제로 인해 사이트에 액세스할 수 없습니다. 이 문제를 해결하려면 호스트에게 연락해야 합니다. @@ -1313,7 +1347,6 @@ Language: ko_KR 사진 편집 사이트 선택 새 계정 - 로그인 다음 계정으로 로그인됨 사용자 세부정보 파일 세부정보 @@ -2247,7 +2280,6 @@ Language: ko_KR 애플리케이션 로그가 클립보드에 복사되었습니다. 이 블로그는 비었습니다. 새 게시물 - 회원님이 좋아할 만한 블로그 텍스트를 클립보드에 복사하는 동안 오류가 발생했습니다. 업로드 %1$d년 diff --git a/WordPress/src/main/res/values-ms/strings.xml b/WordPress/src/main/res/values-ms/strings.xml index 679fe829a13e..bee8ed6f1f13 100644 --- a/WordPress/src/main/res/values-ms/strings.xml +++ b/WordPress/src/main/res/values-ms/strings.xml @@ -726,7 +726,6 @@ Language: ms Ralat berlaku semasa menyalin teks ke papan keratan Log aplikasi telah disalin ke papan keratan Kiriman baharu - Laman yang anda mungkin suka Memuat naik kiriman %1$d hari %1$d jam diff --git a/WordPress/src/main/res/values-nb/strings.xml b/WordPress/src/main/res/values-nb/strings.xml index b49eadfa9f04..ae376c29cf8e 100644 --- a/WordPress/src/main/res/values-nb/strings.xml +++ b/WordPress/src/main/res/values-nb/strings.xml @@ -1,11 +1,38 @@ + Hopp over + Velg + Legg til kategori + Legg til ny kategori + Kategorier + Ikke angitt + Kategorier + Museer i London + Politikk + Musikk + Hagestell + Fotball + Matlaging + Kunst + Nettsteder å følge + Velg bilder + Side opprettet + Tilbake + Kom i gang + Følg emner for å oppdage nye nettsteder + Av + Åpne nettstedet + Velg element + Søk eller skriv inn URL + Legg til denne telefonlenken + Legg til denne lenken + Legg til denne e-postlenken Fet Moderne Lekende @@ -15,10 +42,12 @@ Language: nb_NO %s %s valgt Få en innloggingslenke med e-post + Mikrofon Velg et oppsett Lag et innlegg eller en fortelling Lag en side Lag et innlegg + Du liker kanskje Skjul Videobildetekst. Tom. Oppdaterer tittelen. @@ -84,8 +113,7 @@ Language: nb_NO Velg bilde eller video Velg bilde Blokk fjernet - WordPress-logo - Oppgi din nettstedsadresse + Oppgi din eksisterende nettstedsadresse Fortsett med WordPress.com Registreringsbekreftelse Vi vil sende deg en registreringslenke for å opprette din nye WordPress.com-konto. @@ -102,8 +130,6 @@ Language: nb_NO Eller oppgi dit passord Opprett konto Send lenke med e-post - Lås opp kraften til en mest fleksible nettstedsbyggeren. - 37\% av alle nettsteder er bygget på WordPress. Tilbakestill ditt passord Gi ditt nettsted et navn som reflekterer des personlighet og emne Førsteinntrykket teller! Bestem din nettstedstittel @@ -359,7 +385,6 @@ Language: nb_NO Dette innlegget vil synkroniseres straks. Klar til å synkronisere? Dette domenet er ikke tilgengelig - Introduksjon -%s Vi klarte ikke å få tilgang til nettstedet ditt. Du må kontakte din nettvert for å løse dette. Straks ferdig! Vi må bare få bekreftet din e-postadresse koblet til Jetpack <b>%1$s</b> @@ -1164,7 +1189,6 @@ Language: nb_NO Rediger bilde Velg nettsted Ny konto - Logg inn Logget inn som Persondetalj Fildetaljer @@ -2086,7 +2110,6 @@ Language: nb_NO App-loggbøker har blitt kopiert til utklippstavlen Dette nettstedet er tomt Nye innlegg - Du vil kanskje like En feil oppstod under kopiering av tekst til utklippstavlen Laster opp innlegg %1$d år @@ -2241,6 +2264,7 @@ Language: nb_NO Du og en annen har likt dette Velg video Velg bilde + Registrer deg Klarte ikke å åpne %s Klarte ikke å vise bilde Klarte ikke å dele diff --git a/WordPress/src/main/res/values-nl/strings.xml b/WordPress/src/main/res/values-nl/strings.xml index c4b9685a52a2..a9c7e22fc5aa 100644 --- a/WordPress/src/main/res/values-nl/strings.xml +++ b/WordPress/src/main/res/values-nl/strings.xml @@ -1,11 +1,34 @@ + Kies + Overslaan + Niet ingesteld + Nieuwe categorie toevoegen + Categorie toevoegen + Lay-outs niet beschikbaar vanwege een fout + Lay-outs niet beschikbaar indien offline + Kies een ontwerp + Kunst + Koken + Voetbal + Tuinieren + Muziek + Politiek + Mijn toptien café\'s + Museums in Londen + Welkom bij de wereld\'s meest populaire sitebouwer. + Met deze krachtige editor kun je onderweg publiceren. + Bekijk reacties en berichten in real time. + Bekijk hoe je publiek groeit met in-dept analytics. + Volg je favoriete sites en ontdek nieuwe reads. + Sites om te volgen + Media laden is mislukt \'%s\' wordt niet volledig ondersteund We werken hard om meer blokken toe te voegen bij elke release. Ze worden als een nieuw blogbericht op je site gepubliceerd, zodat je publiek nooit iets mist. @@ -19,7 +42,6 @@ Language: nl Lay-out voorbeeld Pagina aangemaakt Blanco pagina aangemaakt - Er is een fout ontstaan bij het ophalen van de lay-outs Hoe maak je een verhaal bericht Je hebt vroege toegang tot verhaal berichten en we zouden het heel leuk vinden als je het eens probeert. Verhaal berichten introductie @@ -157,12 +179,11 @@ Language: nl Als je doorgaat met Google en nog geen WordPress.com account hebt, maakt je een account aan en gaat je akkoord met onze %1$sServicevoorwaarden%2$s. Inschrijfbevestiging Ga verder met WordPress.com - Voer je site adres in - WordPress logo Blok verwijderd Kies afbeelding Kies afbeelding of video Video kiezen + Voer je bestaande site adres in Als je doorgaat, ga je akkoord met onze %1$sServicevoorwaarden%2$s. We sturen je een link per e-mail om je nieuwe WordPress.com account aan te maken. We gebruiken dit e-mailadres om je nieuwe WordPress.com account aan te maken. @@ -176,8 +197,6 @@ Language: nl of We e-mailen je een link waarmee je direct kan inloggen, geen wachtwoord nodig. Stel je wachtwoord opnieuw in - 37\% van het web is gebouwd op WordPress. - Ontgrendel de kracht van de meest flexibele sitebouwer. Link per e-mail verzenden Account aanmaken Of typ je wachtwoord @@ -487,7 +506,6 @@ Language: nl Dit bericht wordt onmiddellijk gesynchroniseerd. Klaar om te synchroniseren? Dit domein is niet beschikbaar - Inleiding -%s We konden geen toegang krijgen tot je site. Neem contact op met je host om dit probleem te verhelpen. We konden geen toegang krijgen tot je site vanwege een probleem met het <b>SSL-certificaat</b>. Neem contact op met je host om dit probleem te verhelpen. @@ -1313,7 +1331,6 @@ Language: nl Foto bewerken Site kiezen Nieuw account - Inloggen Ingelogd als Persoonsgegevens Bestandsgegevens @@ -2247,7 +2264,6 @@ Language: nl Applicatielogs zijn gekopieerd naar het klembord Nieuwe berichten Er is een fout opgetreden tijdens het kopiëren van de tekst naar het klembord - Sites die je misschien ook leuk vindt Uploaden bericht Deze site is leeg Thema\'s ophalen … diff --git a/WordPress/src/main/res/values-pl/strings.xml b/WordPress/src/main/res/values-pl/strings.xml index 0032189a749b..801ff7fbc46e 100644 --- a/WordPress/src/main/res/values-pl/strings.xml +++ b/WordPress/src/main/res/values-pl/strings.xml @@ -1,11 +1,37 @@ + Pomiń + Wybierz + Wybierz wzór + Dodaj kategorię + Kategorie + Nie ustawiono + Kategorie + Dodaj nową kategorię + Szablony nie są dostępne z powodu błędu + Szablony nie są dostępne w trybie offline + Polityka + Muzyka + Ogrodnictwo + Piłka nożna + Gotowanie + Sztuka + Pamela Nguyen + Muzea w Londynie + Najlepsi na świecie fani + Moje dziesięć ulubionych kawiarni + Wiadomości Web + Dzięki potężnemu edytorowi możesz w locie dodawać nowe wpisy. + Witaj na najbardziej popularnej platformie do tworzenia witryny internetowej + Obserwuj jak rośnie twoja publiczność dzięki zaawansowanej analityce. + Nie udało się wczytać plików mediów + Witryny do obserwacji \'%s\' nie jest w pełni wspierana Z każdym wydaniem pracujemy nad dodawaniem większej ilości bloków. Utwórz wpis z relacją @@ -20,7 +46,6 @@ Language: pl Uzyskałeś/aś wczesny dostęp do wpisów z relacjami. Zachęcamy ciebie do wypróbowania tej funkcji. Wprowadzamy wpisy z relacjami Nowe relacje są dla każdego - Wystąpił błąd podczas pobierania układów Utworzono pustą stronę Utworzono stronę Podgląd układu @@ -158,11 +183,10 @@ Language: pl Wybierz zdjęcie lub film Wybierz obrazek Blok usunięto - Logo WordPressa - Wprowadź adres witryny Kontynuuj z WordPress.com Potwierdzenie rejestracji Jeśli kontynuujesz z logowamiem poprzez Google, a nie masz jeszcze konta na WordPress.com, zakładasz automatycznie konto i zgadzasz się z naszymi %1$sWarunkami świadczenia usługi%2$s. + Wprowadź adres swojej istniejącej witryny Kontynuując, zgadzasz się z naszymi %1$sWarunkami świadczenia usługi%2$s. Prześlemy tobie odnośnik, za pomocą którego utworzysz nowe konto na WordPress.com. Twój adres email będzie użyty to utworzenia twojego nowego konta na WordPress.com. @@ -181,8 +205,6 @@ Language: pl Lub wprowadź hasło Utwórz konto Wyślij odnośnik przez email - Wykorzystaj możliwości najbardziej elastycznego kreatora witryny. - 37\% internetu jest oparte na WordPressie. Zresetuj hasło Wystąpił błąd podczas obsługi tego zapytania. Proszę spróbować ponownie później. Ustaw tytuł witryny @@ -487,7 +509,6 @@ Language: pl Ten wpis będzie natychmiast zsynchronizowany. Gotowe do synchronizacji? Domena nie jest dostępna - Wprowadzenie -%s Nie byliśmy w stanie uzyskać dostępu do twojej witryny. Aby rozwiązać ten problem, sprawdź dostęp do hosta. Nie byliśmy w stanie uzyskać dostępu do twojej witryny z powodu problemu z <b>SSL Certificatem</b>. Aby rozwiązać ten problem, sprawdź dostęp do hosta. @@ -1309,7 +1330,6 @@ Language: pl Edytuj zdjęcie Wybierz witrynę Nowe konto - Zaloguj się Jeśli potrzebujesz więcej przestrzeni, rozważ rozszerzenie subskrypcji WordPress. Cofnięto dodanie polubienia Szczegóły powiadomienia %s @@ -2247,7 +2267,6 @@ Language: pl Wystąpił błąd podczas kopiowania tekstu do schowka Dziennik aplikacji został skopiowany do schowka Nowe wpisy - Blogi, które mogą ciebie zainteresować Przesyłanie wpisu Ta witryna jest pusta %1$d minut diff --git a/WordPress/src/main/res/values-pt-rBR/strings.xml b/WordPress/src/main/res/values-pt-rBR/strings.xml index c7ba78ca41e5..d762bbf2be15 100644 --- a/WordPress/src/main/res/values-pt-rBR/strings.xml +++ b/WordPress/src/main/res/values-pt-rBR/strings.xml @@ -1,11 +1,43 @@ + Estamos trabalhando arduamente para adicionar mais blocos a cada lançamento. + \'%s\' não é totalmente suportado + Botão de ajuda + Editar usando o editor web + Escolher imagens + Criar um post de Story + São publicados como novos posts em seu site para que sua audiência não perca nada. + Posts de Stories não desaparecem + Combine fotos, vídeos e texto para criar stories clicáveis e com alto engajamento que seus visitantes vão adorar. + Agora stories são para todo mundo + Título de exemplo to story + Como criar um post de story + Agora você tem acesso a posts de story e adoraríamos que você desse uma olhada nesse recurso. + Apresentando os posts de Story + Página vazia criada + Página criada + Visualizar layout + %1$s teve o acesso negado às suas fotos. Para corrigir, edite suas permissões e habilite %2$s e %3$s. + Inserção de imagem falhou. + Inserção de imagem com falha: %s + Escolher da biblioteca de mídias do WordPress + Voltar + Comece agora + Siga tópicos para descobrir novos blogs + Por + Este referenciador não pode ser marcado como spam + Desmarcar como spam + Marcar como spam + Abrir site + Enviando o arquivo gif + Enviando mídia + Enviando mídia Selecionar item Pesquisar ou digitar o URL Adicionar este telefone como link @@ -125,8 +157,6 @@ Language: pt_BR Escolher imagem ou vídeo Escolher imagem Bloco removido - Logo do WordPress - Digite o endereço de seu site Continuar com WordPress.com Confirmação de inscrição Se você continuar com o Google e ainda não tiver uma conta no WordPress.com, você criará uma conta e concordará com nossos %1$sTermos de Serviços%2$s. @@ -148,8 +178,6 @@ Language: pt_BR Ou digite sua senha Criar conta Enviar link por e-mail - Descubra o poder do criador de sites mais flexível. - 37\% da internet é construída com o WordPress. Redefinir sua senha Houve um problema ao completar a solicitação. Tente novamente mais tarde. Dê ao seu site um nome que reflita sua personalidade e tópico. As primeiras impressões contam! @@ -400,7 +428,9 @@ Language: pt_BR Remover o filtro atual Selecione um site ou tag para filtrar posts, janela popup Acessar o WordPress.com + Gerenciar tópicos e sites Acesse com o WordPress.com para ver os posts mais recentes dos sites que você segue + Acesse com o WordPress.com para ver os posts mais recentes dos tópicos que você segue Adicionar bloco antes Adicionar bloco depois Seguir um site @@ -409,6 +439,8 @@ Language: pt_BR Visualizar modelo Adicionar ao final Adicionar no início + Adicionar um tópico + Você pode seguir posts de um assunto específico adicionando um tópico Seguindo Filtrar Adicionar um shortcode… @@ -450,7 +482,6 @@ Language: pt_BR Este post será sincronizado imediatamente. Pronto para sincronizar? Este domínio não está disponível - Introdução -%s Não foi possível acessar seu site. Entre em contato com sua hospedagem para resolver isso. Não foi possível acessar seu site devido a um problema com o <b>certificado SSL</b>. Entre em contato com sua hospedagem para resolver isso. @@ -474,6 +505,7 @@ Language: pt_BR Explorar Curtidas Não conseguimos carregar os dados de seu site no momento. Tente novamente mais tarde. + Tópicos Biblioteca de mídia do WordPress Desagrupar Traduzir @@ -1053,6 +1085,8 @@ Language: pt_BR Escolha um tema Mais Toque em %1$s Temas %2$s para descobrir novos temas + Nenhum tópico seguido + Adicione tópicos aqui para encontrar posts sobre seus assuntos favoritos Tentar novamente Jetpack Jetpack instalado @@ -1272,7 +1306,6 @@ Language: pt_BR Comentário desaprovado Comentário aprovado Escolher site - Acessar Informações da notificação %s Notificações Botões de compartilhamento @@ -2135,6 +2168,7 @@ Language: pt_BR 1 curtida %,d seguidores Curtir + Editar tópicos e sites Post do leitor Configurações de notificações que são exibidas em seu dispositivo. Configurações de notificações que são enviadas ao e-mail vinculado à sua conta. @@ -2206,7 +2240,6 @@ Language: pt_BR Ocorreu um erro ao copiar o texto para a área de transferência Novos posts O logs do aplicativo foram copiados para a área de transferência - Talvez você goste destes sites Fazendo upload do post Este site está vazio Obtendo temas… @@ -2252,6 +2285,7 @@ Language: pt_BR Responder %s Saindo… Veja nossa seção de Perguntas Frequentes + Nenhum post neste tópico Não é possível executar esta ação Os posts deste blog não serão mais exibidos Bloquear este site @@ -2266,6 +2300,8 @@ Language: pt_BR Não é possível deixar de seguir este site Nenhum site recomendado Leitor do site + Tópicos seguidos + Digite um URL ou tópico para seguir Ajuda Perdeu a senha? Certificado SSL inválido @@ -2346,6 +2382,8 @@ Language: pt_BR Excluir página? Alterações locais Abrir licenças dos arquivos fonte + Não é possível adicionar este tópico + Não é possível remover este tópico Compartilhar link Coletando posts… Você e %,d outros curtiram isso @@ -2374,6 +2412,8 @@ Language: pt_BR Nenhum comentário ainda Reblogar Inscrever-se + Você já segue esse tópico + Esta tópico não é válido Temas Título Legenda diff --git a/WordPress/src/main/res/values-ro/strings.xml b/WordPress/src/main/res/values-ro/strings.xml index 39c2cc1ba1bc..addfab4dccbc 100644 --- a/WordPress/src/main/res/values-ro/strings.xml +++ b/WordPress/src/main/res/values-ro/strings.xml @@ -1,11 +1,50 @@ + <b>Johan Brandt</b> a răspuns la articolul tău + Azi ai primit <b>50 de aprecieri</b> pe sit + <b>Madison Ruiz</b> ți-a apreciat articolul + Meniul de blocuri care poate fi derulat este deschis. Selectează un bloc. + Meniul de blocuri care poate fi derulat este închis. + Sari + Alege + Alege aranjamentul preferat pentru prima pagină. Îl poți personaliza sau modifica mai târziu. + Alege un design + Atinge reîncearcă când ești din nou online sau creează o pagină goală folosind butonul de mai jos. + Aranjamentele nu sunt disponibile când ești offline + Atinge reîncearcă sau creează o pagină goală folosind butonul de mai jos. + Aranjamentele nu sunt disponibile din cauza unei erori + Adaugă o categorie + Adaugă o categorie nouă + Categorii + Nesetată + Categorii + Muzee din Londra + Cei mai buni fani din lume + Primele zece cafenele, pe gustul meu + Politică + Muzică + Grădinărit + Fotbal + Bucătărie + Artă + Rock and Roll în fiecare săptămână + Știri pe web + Pamela Nguyen + M-au inspirat foarte mult lucrările fotografului Cameron Karsten. Voi încerca aceste tehnici pe viitor + Inspiră-te + Urmărește-ți siturile preferate și descoperi lecturi noi. + Urmărești cum îți crește audiența cu analitice detaliate. + Vezi comentariile și notificările în timp real. + Cu acest editor puternic poți publica din mers. + Bine ai venit la cel mai popular constructor de situri web din lume. + Încărcarea media a eșuat + Situri de urmărit Lucrăm continuu pentru a adăuga mai multe blocuri la fiecare lansare. „%s” nu este acceptat în totalitate Buton pentru ajutor @@ -18,9 +57,8 @@ Language: ro Acum narațiunile sunt pentru toată lumea Exemplu de titlu narațiune Cum să creezi un articol narațiune - Acum ai acces Articole narațiune și ne-ar plăcea să le încerci. + Acum ai acces la Articole narațiune și ne-ar plăcea să le încerci. Prezentăm Articole narațiune - A apărut o eroare în timpul aducerii aranjamentelor A fost creată o pagină goală A fost creată o pagină Previzualizare aranjament @@ -158,8 +196,7 @@ Language: ro Alege o imagine sau un video Alege o imagine Bloc înlăturat - Logo WordPress - Introdu adresa sitului tău + Introdu adresa sitului tău de acum Continuă cu WordPress.com Confirmare înregistrare Dacă continui cu Google și nu ai deja un cont WordPress.com, îți creezi un cont și ești de acord cu %1$stermenii de utilizare ai serviciului%2$s nostru. @@ -181,8 +218,6 @@ Language: ro Sau tastează parola Creează un cont Trimite legătura prin email - Deblochează puterea celui mai flexibil constructor de situri web. - 37\% din web este construit cu WordPress. Resetează-ți parola A fost o problemă la gestionarea cererii. Te rog reîncearcă mai târziu. Dă-i sitului un nume care să-i reflecte personalitatea și subiectul (tema). Prima impresie este foarte importantă! @@ -487,7 +522,6 @@ Language: ro Acest articol va fi sincronizat imediat. Ești gata pentru sincronizare? Acest domeniu nu este disponibil - Introducere -%s Nu am putut să-ți accesăm situl. Pentru a rezolva acest lucru, va trebui să contactezi serviciul tău de găzduire. Nu am putut să-ți accesăm situl din cauza unei probleme cu <b>certificatul SSL</b>. Pentru a rezolva acest lucru, va trebui să contactezi serviciul tău de găzduire. @@ -1313,7 +1347,6 @@ Language: ro Editează fotografia Alege situl Cont nou - Autentificare Autentificat ca Detalii personale Detalii fișier @@ -2247,7 +2280,6 @@ Language: ro Jurnalele aplicației au fost copiate în clipbord Acest sit este gol Articole noi - Situri care s-ar putea să-ți placă A apărut o eroare în timp ce copiam textul în clipbord Încarc articolul %1$d ani diff --git a/WordPress/src/main/res/values-ru/strings.xml b/WordPress/src/main/res/values-ru/strings.xml index 250a42003251..203a15541546 100644 --- a/WordPress/src/main/res/values-ru/strings.xml +++ b/WordPress/src/main/res/values-ru/strings.xml @@ -1,11 +1,50 @@ + <b>Вася Пупкин</b> ответил на вашу запись + <b>Юля Петрова</b> отмечает вашу запись как понравившуюся + Вы сегодня получили <b>50 отметок \"нравится\"</b> на сайте + Выберите макет главной страницы. Его можно настроить или изменить позже. + Выбрать + Пропустить + Прокручиваемое меню блоков закрыто. + Прокручиваемое меню блоков открыто. Выберите блок. + Рубрики + Не указано + Рубрики + Добавить новую рубрику + Добавить рубрику + Макеты недоступны из-за ошибки + Нажмите повторить или создайте пустую страницу нажав на кнопку ниже. + Макеты недоступны при отсутствии подключения к сети + Нажмите повторить при восстановлении подключения к сети или создайте пустую страницу нажав на кнопку ниже. + Выбрать оформление + Меня восхищают работы фотографа Кэмерона Карстена. Я попробую его техники в будущем + Памела Нгуен + Новости веб + Еженедельный рок-н-ролл + Искусство + Кулинария + Футбол + Садоводство + Музыка + Политика + Мой выбор лучших 10 кафе + Лучшие мировые фанаты + Музеи Лондона + Добро пожаловать в самый популярный в мире конструктор сайтов. + С настолько мощным редактором вы можете создавать публикации на ходу. + Следите в реальном времени за комментариями и уведомлениями. + Следите за ростом вашей аудитории с глубокой аналитикой. + Подписывайтесь на избранные сайты и находите новое чтиво. + Вдохновляйтесь + Сайты для подписки + Загрузка медиафайла неудалась \'%s\' полностью не поддерживается Мы стараемся добавить как можно больше блоков в каждом выпуске. Они публикуются как новые записи блога на вашем сайте, ваша аудитория их не пропустит, это точно! @@ -19,7 +58,6 @@ Language: ru Просмотр макета Страница создана Создана пустая страница - Произошла ошибка при получении макетов Вам предоставлен ранний доступ к Историям, и мы хотим чтобы вы их попробовали. Представляем записи-истории Пример названия истории @@ -157,12 +195,11 @@ Language: ru Если вы продолжите работу с учетной записью Google, не имея учётной записи WordPress.com, вы создадите учётную запись и примете наши %1$sУсловия обслуживания%2$s. Подтверждение регистрации Продолжить с WordPress.com - Введите адрес вашего сайта - Логотип WordPress Блок удалён Выбор изображения Выбор изображения или видео Выбор видео + Введите адрес вашего сайта Продолжив, вы соглашаетесь с нашими %1$sПравилами пользования%2$s. Мы пришлём вам ссылку для создания учётной записи WordPress.com. Этот адрес эл.почты будет использован при создании вашей новой учётной записи WordPress.com. @@ -176,8 +213,6 @@ Language: ru или Мы пришлём вам ссылку для входа, которая позволит вам сразу войти без пароля. Сбросить пароль - 37\% всех сайтов сети основаны на WordPress. - Раскройте потенциал самой гибкой платформы для создания сайтов. Прислать ссылку по электронной почте Создать учётную запись или введите ваш пароль @@ -486,7 +521,6 @@ Language: ru Синхронизировать сейчас Эта запись будет синхронизирована прямо сейчас. Готовы начать синхронизацию? - Вступление -%s Этот домен недоступен Мы не смогли подключиться к сайту, поскольку он требует <b>HTTP авторизации</b>. Возможно потребуется обратиться в техподдержку хостинга, чтобы решить эту проблему. @@ -1292,7 +1326,6 @@ Language: ru Визуальный режим Переход в визуальный режим. ОТМЕНИТЬ - Войти Новая учетная запись Выберите сайт Изменить фото @@ -2248,7 +2281,6 @@ Language: ru Журналы приложения скопированы в буфер обмена. Новые записи Произошла ошибка при копировании текста в буфер обмена. - Сайты, подобранные для вас Этот сайт пуст. Получение тем… %1$d месяцев diff --git a/WordPress/src/main/res/values-sk/strings.xml b/WordPress/src/main/res/values-sk/strings.xml index 8203ffc9f4cb..d6e6886610d7 100644 --- a/WordPress/src/main/res/values-sk/strings.xml +++ b/WordPress/src/main/res/values-sk/strings.xml @@ -410,7 +410,6 @@ Language: sk Upraviť fotku Vybrať webovú stránku Nový účet - Prihlásenie Prihlásený ako Detail osoby Detaily súboru @@ -1340,7 +1339,6 @@ Language: sk Záznamy aplikácie boli skopírované do schránky Táto webová stránka je prázdna Nové príspevky - Webové stránky, ktoré sa vám možno páčia Pri kopírovaní textu do schránky nastala chyba Nahrávanie príspevku počet rokov: %1$d diff --git a/WordPress/src/main/res/values-sq/strings.xml b/WordPress/src/main/res/values-sq/strings.xml index 714a77515cf4..914cc79160f1 100644 --- a/WordPress/src/main/res/values-sq/strings.xml +++ b/WordPress/src/main/res/values-sq/strings.xml @@ -1,11 +1,46 @@ + U hap me blloqesh. Përzgjidhni një bllok. + Menuja e blloqeve u mbyll. + Anashkaloje + Zgjidhni + Zgjidhni skemën e parapëlqyer për faqen tuaj hyrëse. Mund ta përshtatni ose ndryshoni më vonë. + Zgjidhni një skemë + Prekni <code>Retry</code>, kur të jeni prapë të lidhur, ose krijoni një faqe të zbrazët duke përdorur butonin më poshtë. + S’mund të kihen skema, teksa jeni jashtë linje + Prekni <code>Retry</code>, ose krijoni një faqe të zbrazët duke përdorur butonin më poshtë. + Skema jo të passhme, për shkak të një gabimi + Shtoni Kategori + Shtoni Kategori të Re + Kategori + S’është caktuar + Kategori + Muzeume në Londër + Tifozët Më të Zjarrtë të Botës + Dhjetë Kafehanet e Mia Më të Mira + Politikë + Muzikë + Lulishtari + Futboll + Gatim + Art + Fyejt Gjatë Javës + Lajme Në Internet + Xhike Baulja + Jam kaq i frymëzuar nga vepra e gdhendësit Çome Çomanga. Do t’i provoj këto teknika në veprën time të ardhshme + Frymëzohuni + Ndiqni sajtet tuaj të parapëlqyer dhe zbuloni gjëra të reja për të lexuar. + Vëzhgoni shtimin e publikut tuaj, me mjete analizimi në thellësi. + Me fuqinë e përpunuesit mund të postoni kudo që ndodheni. + Mirë se vini te krijuesi më popullor në botë i sajteve. + Dështoi ngarkimi i medias + Sajte për t’u ndjekur Po punojmë fort për të shtuar më tepër blloqe me çdo hedhje në qarkullim. \'%s\' s’mbulohet plotësisht Buton ndihme @@ -15,12 +50,11 @@ Language: sq_AL Botohen si postim i ri blogu në sajtin tuaj, që kështu publiku juaj kurrë të mos humbë një gjë. Postimet e shkrimeve s’zhduken Ndërthurni foto, video dhe tekst, që të krijoni postime shkrimesh tërheqës, që vizitorët tuaj do t’i duan fort. - Tani më shkrimet janë për këdo + Tanimë shkrimet janë për këdo Titull shembulli shkrimi Si të krijohet një postim shkrimi Ju është dhënë mundësia e përdorimit të hershëm të Postimeve të Shkrimeve dhe do të donim ta provonit. Ju Paraqesim Postime Shkrimesh - Ndodhi një gabim teksa silleshin skemat U krijua faqe e zbrazët Faqja u krijua Paraparje Skeme @@ -157,8 +191,7 @@ Language: sq_AL Zgjidhni figurë ose video Zgjidhni figurë Blloku u hoq - Stema e WordPress-it - Jepni adresën e sajtit tuaj + Jepni adresën e sajtit tuaj ekzistues Vazhdoni me WordPress.com Ripohim regjistrimi Nëse vazhdoni me Google dhe ende s’keni një llogari WordPress.com, po krijoni një llogari dhe pajtoheni me %1$sKushtet tona të Shërbimit%2$s. @@ -180,8 +213,6 @@ Language: sq_AL Ose shtypni fjalëkalimin tuaj Krijo llogari Dërgoje lidhjen me email - Çlironi fuqinë e krijuesit më të zhdërvjellët të sajteve. - 37\% e web-it ngrihet mbi WordPress. Ricaktoni fjalëkalimi tuaj Pati një problem me trajtimin e kërkesës. Ju lutemi, riprovoni. Jepini sajtit tuaj një emër që pasqyron personalitetin dhe subjektin e tij. Përshtypja e parë ka vlerë! @@ -486,7 +517,6 @@ Language: sq_AL Ky postim do të njëkohësohet menjëherë. Gati për Njëkohësim? Kjo përkatësi s’është e lirë - Hyrje -%s S’qemë në gjendje të hyjmë në sajtin tuaj. Do t’ju duhet të lidheni me strehuesin tuaj që ta zgjidhni këtë problem. S’qemë në gjendje të hyjmë në sajtin tuaj, për shkak të një problemi me <b>Dëshminë SSL</b>. Do t’ju duhet të lidheni me strehuesin tuaj që ta zgjidhni këtë problem. @@ -1312,7 +1342,6 @@ Language: sq_AL Përpunoni Foto Zgjidhni sajt Llogari e re - Hyrje I futur si Hollësi personi Hollësi kartele @@ -2246,7 +2275,6 @@ Language: sq_AL Regjistrat e aplikacionit u kopjuan te e papastra Ky sajt është i zbrazët Postime të reja - Sajte që mund t’ju pëlqejnë Ndodhi një gabim gjatë kopjimit të tekstit te e papastra Po ngarkohet postimi %1$d vjet diff --git a/WordPress/src/main/res/values-sr/strings.xml b/WordPress/src/main/res/values-sr/strings.xml index 654286f6e9c9..e2ac88064d78 100644 --- a/WordPress/src/main/res/values-sr/strings.xml +++ b/WordPress/src/main/res/values-sr/strings.xml @@ -1,11 +1,1567 @@ + Прескочи + Одабери + Одаберите дизајн + Додај категорију + Додај нову категорију + Категорије + Није постављено + Категорије + Музеји у Лондону + Политика + Музика + Баштованство + Фудбал + Кување + Уметност + Pamela Nguyen + Учитавање садржаја није успело + \'%s\' није у потпуности подржан + Дајемо све од себе да додамо нове блокове са сваком објавом. + Дугме помоћи + Уреди помоћу веб уређивача + Одабери слике + Направи чланак приче + Чланци приче не нестају + Приче су сада за све + Пример наслова приче + Како направити чланак приче + Представљамо чланке приче + Празна страница је направљена + Страница направљена + Претпреглед распореда + Назад + Од + %s одабрано + Микрофон + Пријави овај чланак + Угао + Ваша акција није дозвољена + Добродошли у читач. Откријте милионе блогова на дохват руке. + Дошло је до интерне грешке сервера + још %1$s ставки + Изаберите распоред + Сакрити + Направити страницу + Направити чланак или причу + Направити чланак + Можда Вам се свиди + Натпис видео записа. Празно + Ажурира наслов. + Залепи блок након + Наслов странице. %s + Наслов странице. Празно + Грешка се појавила током пуштања Вашег видео записа + Овај уређај не подржава Camera2 API. + Видео запис није могао бити сачуван + Грешка приликом чувања слике + Види складиште + Операција у току, покушајте поново + Није могуће пронаћи слајд Приче + Недеовољно складишта на уређају + Није могуће сачувати %1$d слајдове + Није могуће сачувати 1 слајд + Управљај + %1$d слајдова захтева радњу + 1 слајд захтева радњу + Покушајте поново да сачувате или обришете слајдове, затим покушајте поново да објавите Вашу причу. + Није могуће отпремити \"%1$s\" + Није могуће отпремити \"%1$s\" + \"%1$s\" је објављен + Отпремање \"%1$s\"… + %1$d преосталих слајдова + 1 преостао слајд + неколико прича + Снимање \"%1$s\"… + Без наслова + Одбаци + Ваш чланак Приче се неће сачувати као нацрт. + Одбаци чланак приче? + Обриши + Овај слајд ће бити уклоњен из Ваше приче. + Овај слајд још увек није сачуван. Ако обришете овај слајд, изгубићете сва уређивања која сте направили. + Обриши слајд приче? + Обриши слајд + Измени боју текста + Измени поравнање текста + има грешку + одабрано + није одабрано + Напарвити страницу + Направити чланак или причу + Направити празну страницу + Направите чланак, страницу или причу + Слајд + Покушај поново + Сачувано + Затвори + Следећи + Готово + Подели + ПОДЕЛИ + Сачувано међу фотографијама + Покушај поново + Сачувано + Чува се + Окрени + Блиц + Звук + Текст + Више + Налепнице + Блиц + Окрени камеру + Ухвати + Преглед + Одабери распоред + Доделите својој причи наслов + Одабери са уређаја + Чланак приче + Прекорачено ограничење складиштења + Додај датотеку + Замени видео запис + Замени слику или видео запис + Одабери видео запис + Одабери слику или видео запис + Одабери слику + Уклоњен блок + Настави са WordPress.com + Потврда пријаве + Унесите постојећу адресу свој сајта + Наставком, прихваћате наше %1$sУслове коришћења%2$s. + или + Настави са Google-ом + Готово + Направите налог + Провери електронску пошту + Започните + Или укуцајте своју лозинку + Пошаљи повезницу електронском поштом + Ресетујте своју лозинку + Дајте својој веб локацији назив који одражава њену личност и тему. Први утисци се рачунају! + Поставите наслов свог сајта + Додирни <b>%1$s</b> за постављање новог наслова + опције блока %s + Дуплирај блок + Копирај блок + Ископиран блок + Подешавања блока + Блок залепљен + Блок дуплиран + Блок исечен + Блок копиран + Наслов сајта може да измени само корисник са администраторском улогом. + Тема + Несачуване измене + Отвори везу у прегледачу + Двапут тапни за одабир опције + %1$s · %2$s · %3$s + Аутор странице + Користи овај GIF + Сви + Ја + Одбаци + Није постављено + Датум објаве + Додај ознаке + Назад + Сачувај сада + Предај сада + Закажи сада + Објављује се + Ознаке + Датум објаве + Откажи + Пребаци у Нацрте + Пребаци чланак у Нацрте? + Одаберите своја интересовања + Одаберите своја интересовања + Готово + Одаберите неколико за наставак + Објављено + У отпаду + Заказано + Датум објаве + Прочитај објаву CCPA везану за приватност + Објава везана за приватност за кориснике из Калифорније + Статус & Видљивост + Ажурирај сада + %1$s · %2$s + Постави страницу чланака + Постави почетну страницу + \"%s није исправан корисник\" + Одабери страницу + Страница чланака + Статична почетна страница + Класичан блог + Прихвати + Неуспело учитавање страница + Подешавања почетне странице + Почетна страница + Неуспело ажурирање странице чланака + Страница чланак успешно ажурирана + Неуспело ажурирање почетне странице + Почетна страница успешно ажурирана + Добродошли на наш нови блог + Одабери боју + Додирни двапут за подешавања боја + исеци + Шта има ново у Вордпресу + Сазнај више + Убаци %d + Користи овај видео запис + Изабери видео запис + Копирајте адресу линка + Поделите путем + Није могуће поделити + Адреса везе је копирана + Настави + Управљај сајтовима + Шта има ново + Убаци + Настави + Копирај + Блог + Ура!\nСкоро готово + Откажи отпремање + субота + петак + четвртак + среда + уторак + понедељак + недеља + Тамна + Светла + Изглед + Шта људи кажу + Име пројекта + Не плачи јер је готово, насмеши се јер се догодило. + Заказано + Објављено + Направите чланак + Није повезано + Адреса сајта + Коментари + Праћења + Свиђања + Непрочитано + Не шаљи на отпад + Помери на отпад + Активност + Чланци и Странице + Опште + Додај нову картицу + Додај нову картицу статистике + Замени тренутни блок + Додај на крај + Додај на почетак + Додај блок пре + Додај блок после + Додај ознаку + Прати сајт + Филтрирај + Уреди видео запис + Аутор чланка + Креирај чланак + врло високо + високо + средње + ниско +   & %1$d %2$s + %1$s, %2$d %3$s + Направити чланак или страницу + %1$s. Тренутна вредност је %2$s + Померите слику напред + Померите слику назад + Особа која прави веб место + Не сад + Добро дошли у Вордпрес + Библиотека фотографија + Уклоњен одабир слике + ,Одабрано + Слика одабрана + Чланак блога + Додај нови + Објави + Синхронизуј сада + Овај чланак ће бити одмах синхронизован. + Спремни за синхронизацију? + Домен није доступан + -%s + Пошаљи верификациону електронску пошту + Страница сајта + Прати + Сачувано + Откриј + Свиђања + Ознаке + Веб места + %sQi + %sQa + %sT + %sB + %sM + %sk + Разгрупиши + Преведи + Наслов: + Додирни да сакријеш тастатуру + Додирни овде да се прикаже помоћ + Почни да пишеш… + Направи видео запис + Направи фотографију или видео запис + Направи фотографију + Величина + Исеци блок + Ресетуј блок + Прикажи одељак + %s блок. Празно + Наслов чланка. %s + Наслов чланка. Празно + Залепи URL + Отвори подешавања + Помери блок доле од реда %1$s до реда %2$s + Помери блок горе од реда %1$s до реда %2$s + Помери блок горе + Иконица помоћи + Сакриј тастатуру + Помери блок доле + Садржај… + Тренутна вредност је %s + Одабери свој уређај + Алтернативни текст + ДОДАЈ ВИДЕО ЗАПИС + Додај URL + ДОДАЈ СЛИКУ ИЛИ ВИДЕО ЗАПИС + ДОДАЈ СЛИКУ + ДОДАЈ БЛОК ОВДЕ + Додај опис + Јавила се непозната грешка. Молимо вас да покушате поново касније. + Обавештења + Искључи + Укључи + Обавештења за ову веб локацију + Обавештења за ову веб локацију + Додај слику или видео запис + Нисмо успели да закажемо чланак, али ћемо покушати поново касније. + Нисмо могли да отпремимо овај садржај. + Прављење прегледа… + Чување… + Направили сте измене на овом чланку које нису сачуване + Издање ове апликације + Обриши трајно + Верзија са другог уређаја + Ова радња се не може отказати. Корисничко име је можда већ ажурирано. + Ваше ново корисничко име је %1$s + Чување корисничког имена … + Промените корисничко име + Пажљиво! + Спремате се да промените своје корисничко име, које је тренутно %1$s%2$s%3$s. Нећете моћи да вратите своје корисничко име назад. + Перформансе и Брзина + Више + Побољшана Претрага + Jetpack Претрага + Искључено + Садржај + Видео хостинг без реклама + Укључено + Убрзавач сајта + Перформанса + Преузимања + Датотека + Преузимања датотеке + Статистика преузимања датотеке није бележена пре 28. јуна 2019. године. + Подели + Подразумевано + Десктоп + Иди назад + Иди напред + Датум и време + Искључено + 10 минута раније + 1 сат раније + Додај у календар + Обавештење + Прегледи + Чланак + %1$s: %2$s, %3$s: %4$s + Скупи + Рашири + Ставка скупљена + Ставка раширена + Уређивач + Скупи + Прошири + Потврдите адресу своје е-поште - упутства су послата на вашу е-пошту. + Потврдите адресу своје е-поште - упутства су послата на %s + Откажи + У реду + Уклонити везу + Уметнути везу + Отпремање медија.\nДодирните за опције. + Покушајте поново да отпремите + http(s):// + Отвори везу у новом прозору/језичку + Да би видели своју статистику, пријавите се на WordPress.com налог. + Нема чланака које се подударају са твојом претрагом + Овде ће вас људи наћи на интернету. + Изабери премиум назив домене + На први поглед + Данас + Све време + Сви WordPress.com пакети укључују жељени назив домена. Региструјте свој бесплатни премиум домен одмах. + Претражи чланке + Све време + Прегледи ове недеље + Тип + Боја + Одаберите свој сајт + Тамно + Светло + Боја + Одаберите свој сајт + Сајт + Прегледи ове седмице + Додај виџет + Покрајина (није доступно) + Лозинка ажурирана + Ажурирај лозинку + Одабери државу + Одабери покрајину + Честитамо + Региструјте домен + Поштански број + Покрајина + Град + Адреса 2 + Адреса + Држава + Код државе + Телефон + настави + Организација (опционо) + Региструј јавно + Региструј приватно са Заштитом приватности + Заштита приватности + Молимо унесите исправан %s + Одаберите домен + Ново + Одбаци + Испробајте сада + Управљајте својим статистикама + Ваш нарцт се отпрема + Отпремање нацрта + Нацрти + Региструј домен + Нема пронађених предлога + Годишње статистике сајта + Друштвено + Помери доле + Помери горе + Чланак враћен + Чланак се пребацује у нацрт + Чланак се враћа + Чланак се пребацује у отпад + Локалне измене + Уклони из увида + Пребаци у Нацрт + Немате чланке у нацртима + Немате чланке у отпаду + Немате заказане чланке + Још увек нисте објавили ниједан чланак + Молимо, пријавите се са својим корисничким именом и лозинком. + Укупно коментара + Просечно коментара / чланак + Просечно речи по чланку + Укупно речи + Просечно свиђања по чланку + Укупно свиђања + Чланци + Година + Ове године + Инсталирај додатак + Региструј домен + Просечно прегледа по дану + Прегледи + Период + Месечна и годишња + Објави: %s + Објављено: %s + Заказано за: %s + Закажи за: %s + Учитај више + Скорашње седмице + Данас + Најбољи дан + Најбоље време + Приказивање статистике за: + Не, хвала + Касније + Оцените сада + Лепо је видети те опет! Ако копате по апликацији, волели бисмо оцену у Гугл Плеј продавници. + Уживате у Вордпресу? + Више чланака + Мање чланака + Сајт још увек није учитан + Користи блоковски уређивач + Нема везе + Пребаци на блоковски уређивач + Пребаци на класични уређивач + Подаци нису учитани + Блоковски уређивач омогућен + излаз + Увећајте свој аудиторијум + Прилагодите свој сајт + Наредни кораци + Завршено (%d) + Уживајте у свом готовом производу! + Отпреми иконицу сајта + %1$d од %2$d завршено + Направи нацрт и објави свој први чланак + Истражи планове + Омогући дељење чланака + Направити нову страницу + Уклони наредне кораке + Уклони ово + Провери статистику свог сајта + Прескочи задатак + Сви задаци су завршени! + скупи + прошири + Подсетник + Најпопуларније време + Одабери наредни период + Одабери претходни период + %1$d%% од прегледа + %1$s (%2$s%%) + +%1$s (%2$s%%) + Очисти + Дошло је до проблема + Креирај сајт + Креирај сајт + Претражи домене + Дошло је до проблема + Дошло је до проблема + Ваша страница је креирана! + %1$d од %2$d + Креирај сајт + Предлози ажурирани + Конфликт верзија + Омогућите аутоматске извештаје о падовима који ће нам помоћи да побољшамо перформансе апликације. + Врати + Ажурирање чланка + Локална верзија одбачена + Веб верзија одбачена + Одбаци веб + Одбаци локално + Реши синхронизациони конфликт + Нема података за овај период + Уклони локацију из садржаја + Tumblr + Twitter + Facebook + Види више + Подели чланак + Креирај чланак + Прошло је %1$s од када је %2$s објављен. Ево какви су досадашњи резултати чланка: + Прегледи + Нема садржаја који се поклапају са Вашом претрагом + Аутор + Аутори + Прегледи + Термин за претрагу + Термини за претрагу + Прегледи + Наслов + Видео записи + Прегледи + Држава + Државе + Кликови + Веза + Кликови + Прегледи + Препоручилац + Препоручиоци + Чланци и Странице + Путања + LinkedIn + Google+ + Све време + Прошло је %1$s од када је %2$s објављен. Покрени причу и увећај прегледе свог чланка дељећи га: + Ознаке и категорије + Нисте до сада објавили ни један чланак. Кад почнете да објављујете, резиме Вашег најновијег чланка ће се појавити овде: + Коментари + Наслов + Аутор + Чланци и странице + Аутори + %1$s | %2$s + Пратиоци + %1$s - %2$s + Услуга + Прегледи + Наслов + Прегледи + Наслов + Од + Пратилац + Укупно %1$s пратилаца: %2$s + Електронска пошта + WordPress.com + Управљај увидима + Још нема података + Ниједан увид још увек није додан + Изборник отклањања грешака + Лозинка се мења… + Лозинка успешно промењена + Промени лозинку + Назив + (без наслова) + HTML преглед + Визуални преглед + Ревизија + Претходно + Следеће + %1$s искоришћено + Учитај + Чланак креиран %1$s у %2$s + Страница креирана %1$s у %2$s + Ревизије се учитавају + Ревизије су учитане + Још увек нема историјата + Када направите измене на свом чланку, бићете у могућности да видите историјат овде + Када направите измене на својој страници, бићете у могућности да видите историјат овде + Кориснички аватар + Пуна величина + Велико + Средње + Умањена слика + Историја + Одабрана страница није доступна + Чека се рецензија + Претражи странице + Трајно обриши + Пребаци у Отпад + Пребаци у Нацрт + Нема страница које одговарају Вашој претрази + Немате страница у отпаду + Немате заказаних страница + Немате страница у нацртима + Још увек немате ниједну објављену страницу + У отпаду + Заказано + Нацрти + Објављено + Постави родитеља + Види + Нема сајтова који се поклапају са Вашом претрагом + Не постоји WordPress.com налог који се поклапа са овим Google налогом. + Нема сајтова који се поклапају са Вашом претрагом + Родитељ странице је промењен + Страница је заказана + Страница је трајно обрисана + Страница је објављена + Страница је бачена у отпад + Страница је премештена у Нацрте + Највиши ниво + Постави родитеља + Догодио се проблем приликом брисања странице + Догодио се проблем приликом промене статуса странице + Догодио се проблем приликом промене родитеља странице + Да ли сте сигурни да желите да обришете страницу %s? + додирни овде + Направите и покрените своју веб локацију. + Креирај свој сајт + Види свој сајт + Подели свој сајт + Додирни %1$s Види сајт %2$s за преглед свог сајта + Додирни %1$s Дељење %2$s за наставак + Прихвати + Објави чланак + Прилагодите свој сајт + Никад + Не хвала + Прати друге сајтове + Одаберите тему + Крени + Откажи + Не сада + Више + Немате ниједан сајт + Нема праћених ознака + Додајте ознаке како бисте пронашли чланке о својим омиљеним темама + Покушај поново + Јавио се проблем + Jetpack инсталиран + Jetpack се инсталира + Инсталирај Jetpack + Jetpack + Jetpack Често Постављана Питања + Jetpack није могуће инсталирати у овом тренутку. + Jetpack се инсталира на Ваш сајт. Ово може да потраје неколико минута. + Пријавите се на WordPress.com налог који сте користили за повезивање Jetpack-а. + Постави + Одјавите се из Вордпреса? + Направити ознаку + Немате ниједну ознаку + Нема ознака које се поклапају са Вашом претрагом + Шта бисте желели да пронађете? + Нема тема које се поклапају са Вашом претрагом + Нема садржаја који се поклапа са Вашом претрагом + Још увек нема пратилаца + Још увек нема корисника + Још увек нема пратилаца електронске поште + Још увек нема гледалаца + Чланци који Вам се свиђају ће се појавити овде + Откриј сајтове + Нема праћених сајтова + Још нема свиђања + Још нема пратилаца + Још увек нема активности + Направити чланак + Направити страницу + Отпреми садржај + Немате никакав садржај + Галерија слика + иконица сајта + слика теме + издвојена слика + Одбаци + профилна слика + Да бисте наставили, унесите своју адресу е-поште и име + Молимо, унесите вашу адресу е-поште + Електронска пошта + Нова порука од \"Помоћи и Подршке\" + Вордпрес + Није подешено + Моји тикети + Пролазан + Дневник апликације + Премотавање у току + Премотавање на %1$s %2$s + Премотај сајт + Тренутно се Ваш сајт враћа у претходно стање + Ваш сајт је успешно враћен у претходно стање + Ваш сајт је успешно враћен у претходно стање\nПремотан на %1$s %2$s + Ваш сајт се враћа у претходно стање\nПремотавање на %1$s %2$s + Акционо дугме дневника активности + Аутоматско управљање + Нема пронађених резултата + Сачувај чланке за касније + Није могуће извршити претрагу + Прочитајте изворни чланак + Сајтови + Регистрација електронском поштом + Верификација кодом + Креденцијали за пријаву + Алтернативно: + Уклоњено + Сачувани чланци + Додато у сачуване чланке + Уклоњено из сачуваних чланака + Види све + Сачувано + Сачувај + Чланак сачуван + Нема сачуваних чланака - још увек! + Омогући + ово веб место + Иконица сајта + Немате дозволу да додате иконицу сајта. + Да ли желите да додате иконицу сајта? + Како бисте желели да уредите иконицу? + Уклони + Промени иконицу сајта + Откажи + Промени + Немате дозволу да уређујете иконицу сајта + Активност + Иконица активности + Омогући обавештења за %1$s%2$s%3$s? + Укључи обавештења сајта + Искључи обавештења сајта + Иконица Jetpack-а + Догађај + Дневник активности + Прочитај политику приватности + Политика приватности + Политика колачића + Подешавања приватности + Прикупи информације + Премотај + Чланак је предат + Немате налог? %1$sРегиструјте се%2$s + Могућност додатка захтева да сајт буде добро позициониран. + Могућност додатка захтева да претплата на главни домен буде везана за корисника. + Функција додатка захтева да страница буде јавна. + Могућност додатка захтева администраторске привилегије. + Додатак не може бити инсталиран на VIP сајтове. + Додатак не може бити инсталиран због ограничења простора на диску. + Могућност додатка захтева верификовану адресу електронске поште. + Могућност додатка захтева бизнис план. + Могућност додатка захтева поседовање сопственог домена. + Финална подешавања су у току - још мало, па готово… + Инсталирање додатка… + Инсталирај + Обавештења + Примајте обавештења о новим чланцима са ове странице + Пошаљите ми нове коментаре е-поштом + Инсталирај додатак + Седмично + Истог тренутка + Дневно + Нови чланци + ошаљи ми нове чланке електронском поштом + %s на %s + Сви моји праћени сајтови + Праћени сајтови + Да ли сте сигурни да желите да трајно обришете овај чланак? + Важно + Опште + Користи ову фотографију + %1$d од %2$d + Фотографије обезбеђене од стране %s + Додај %d + Прегледај %d + Претражите библиотеку бесплатних фотографија + Одаберите из библиотеке бесплатних фотографија + Није могуће сачувати празан нацрт + %1$s од неограниченог + Направити ознаку + Обавештења + квачица + Профилна слика од %s + прикажи више + Отвори спољну везу + фотографија + обриши + Пусти видео запис + пусти издвојени видео запис + лого додатка + банер додатка + покрени камеру + одабери са уређаја + информације о улози + пусти + преглед слике + преглед + звучни запис + пусти видео запис + отпад + покушај поново + уклони %s + Регистровање са Google-ом… + Већ сте повезани на Jetpack + Неуспело повезивање на Jetpack: %s + %s TB + Сачувај као нацрт + Преглед + ВРАТИ + Пребачено на HTML режим + HTML режим + Пребачено на визуални режим + Визуални режим + Нови налог + Коментар није одобрен + Коментар је одобрен + Коментар је означен да није нежељен + Коментар је означен као непожељан + Коментар је обрисан + Коментар је враћен + Коментар је послат у смеће + Коментар свиђан + Детаљ обавештења %s + Уреди фотографију + Одабери сајт + %s GB + %s MB + %s kB + %s B + %1$s од %2$s + Искоришћен простор + Ако Вам је потребан додатни простор, размислите о надоградњи Вордпрес плана. + Садржај + Обавештења + Дугмићи за дељење + Пријављен као + Детаљи особе + Детаљи датотеке + Читач + Ја + Мој сајт + Подешавања обавештења + Помоћ и Подршка + Лиценца + Издање %s + Допуштења + Издвојено + © %1$d %2$s + Модул дељења је онемогућен + Објављивач: %s + QP %s + Преостало %1$d страница / чланака + Преостала 1 страница + Преостало %1$d страница + Преостало %1$d чланака + Преостало %1$d страница / чланака и 1 датотека + Преостало %1$d чланака и 1 датотека + Преостало %1$d страница и 1 датотека + Преостао 1 чланак и 1 датотека + Преостала 1 страница и 1 датотека + Преостало %1$d страница / чланака и %2$d од %3$d датотека + Преостало %1$d чланака и %2$d од %3$d датотека + Преостало %1$d страница и %2$d од %3$d датотека + Преостао 1 чланак и %1$d од %2$d датотека + Преостала 1 страница и %1$d од %2$d датотека + %1$d чланака / страница није отпремљено + %1$d страница није отпремљено + 1 страница није отпремљена + %1$d чланака није отпремљено + 1 чланак није отпремљен + %1$d чланака / страница са %2$d датотека није отпремљено + %1$d страница са %2$d датотека није отпремљено + 1 страница са %1$d датотека није отпремљена + %1$d чланака са %2$d датотека није отпремљено + 1 чланак са %1$d датотека није отпремљен + %1$d чланака / страница са 1 датотеком није отпремљено + %1$d страница са 1 датотеком није отпремљено + 1 страница са 1 датотеком није отпремљена + %1$d чланака са 1 датотеком није отпремљено + 1 чланак са 1 датотеком није отпремљен + (Без наслова) + \@%s + %1$f, %2$f + Направити веб локацију + Додирните за наставак. + Веб локација направљена! + Промени корисничко име + Куцај за више предлога + Одбаци + Одбаци промену корисничког имена? + Сачувај + Додај аватар + Региструј се са Google-ом + Региструј се са електронском поштом + Електронска пошта већ постоји на WordPress.com.\nНаставите са пријавом. + Ажурирање налога… + Слање електронске поште + Регистровањем, прихватате наша %1$sПравила коришћења%2$s. + Да бисте креирали нови WordPress.com налог, унесите своју адресу е-поште. + Покушај поново + Затвори + Корисничко име + Лозинка (опционо) + Име које се приказује + Покушај поново + Врати претходно + Региструј се за WordPress.com + Пријави се са својим корисничким именом + Пријави се уношењем адресе свог сајта + Нема резултата + Направите нову веб локацију за своје предузеће, часопис или лични блог; или повежите постојећу Вордпрес инсталацију. + Потребно је ажурирање + Претражи додатке + Нови + Популарни + Види све + Управљај + Претрага додатака није успела + Грешка приликом инсталирања %s + Успешно инсталиран %s + Инсталирај + Свиђа ми се + Додај нови сајт + Инсталирај Jetpack + Ваша верзија Вордпреса + Захтева Вордпрес верзију + Последњи пут ажурирано + Верзија + 5 звездица + 4 звездице + 3 звездице + 2 звездице + 1 звездица + %s преузимања + %s оцена + Читај рецензије + Често постављана питања + Шта је ново + Инсталација + Опис + Подешавања + Инсталирано + Верзија %s инсталирана + Верзија %s + од %s + Промените фотографију + Није у могућности да учита додатке + Странице сајта + Снимање + Брисање + Трајно обриши ознаку \'%s\'? + Ознака са овим именом већ постоји + Ознака + Додај нову ознаку + Опис + Није могуће учитати временске зоне + Прилагођен облик + Прилагођено + Чланака по страници + Одаберите град у Вашој временској зони + Временска зона + Облик времена + Облик датума + Седмица почиње у + Ознаке + Саобраћај + Обриши + Спољна веза + Иконица додатка + Почетна страница додатка + WordPress.org страница додатка + Уклони додатак + Уклања се %s… + Онемогућава се %s… + Појавила се грешка приликом конфигурисања додатка: %s + Грешка приликом уклањања %s + Успешно уклоњен %s + Грешка приликом ажурирања %1$s: %2$s + Грешка приликом ажурирања %s. + Успешно ажуриран %s + Верзија %s је доступна + Аутоматска ажурирања + Укључено + Додаци + Додаци + Укључен + Искључен + Отвори везу у новом прозору/језичку + Веза ка + Дошло је до грешке. + Молимо проверите своју лозинку за наставак. + Пријављивање обустављено + Молимо сачекајте док траје пријављивање. + Пријављивање у току… + Додирни за наставак. + Успешна пријава! + Молимо унесите лозинку + Величина + Преостала 1 датотека + Преостало %1$d од %2$d датотека + Преостао 1 чланак + Отпремање… + Напиши чланак + %d датотека успешно отпремљено + , %d успешно отпремљено + 1 датотека отпремљена + 1 датотека није отпремљена + %d датотека отпремљено + %d датотека није отпремљено + Уклони из чланка + Уклони ову слику из чланка? + Прилагоди + Детаљи датотеке + Улогуј се са Google-ом. + Затвори + Уклони издвојену слику + Одабери издвојену слику + Улогуј се на WordPress.com како би поделио садржај. + Прекинута веза сајта + Грешка приликом прекида везе сајта + Прекини везу + Да ли сте сигурни да желите да прекинете везу Jetpack-а са сајтом? + Дозволи WordPress.com пријаву + WordPress.com пријава + Пошаљите пуш обавештења + Пошаљите обавештења е-поштом + Безбедност + Jetpack подешавања + Додаје се + Одабери сајт + Додај у библиотеку садржаја + Додај новом чланку + Неисправан IP или IP распон + Брише се + Обриши овај видео запис? + Обриши ову слику? + Детаљи документа + Детаљи звучног записа + Детаљи видео записа + Детаљи слике + Преглед + Датум отпремања + Трајање + Димензије видео записа + Димензије слике + Тип датотеке + Име датотеке + URL + Резервни текст + Трептање светла + Повежи сајт + Вибрација уређаја + Одабери звук + Електронска пошта од WordPress.com + Обавести ме о нацртима на чекању + Коментари на другим сајтовима + Остало + Сви моји сајтови + Ваши сајтови + Омогући обавештења + Онемогући обавештења + Искључено + Укључено + Највећа величина видео записа + Највећа величина слике + Посети %s за више + Додавање садржаја + Отпремање неуспело за \"%s\" + Ваш чланак се отпрема + Отпремање садржаја… + Чланак заказан + Страница заказана + Покушај поново + Чланак на чекању + Отпремање \"%s\" + Веза са сервером је изгубљена + Моји сајтови + Мој сајт + Молимо унесите верификациони код + Унесите корисничко име + Улогујте се на WordPress.com како би приступили чланку. + Грешка приликом додавања сајта. Код грешке: %s + Потребна додатна помоћ? + Која је адреса мог сајта? + Потребна помоћ приликом тражења адресе сајта? + Адреса сајта + Унесите адресу Вордпрес сајта који бисте желели да повежете. + Већ сте пријављени на WordPress.com + Унесите своју WordPress.com лозинку. + Настави + Повежи други сајт + Скоро смо тамо! Унесите верификациони код из апликације Authenticator. + Следећи + Отвори пошту + Укључи оптимизацију слика + Профилна слика + Остави искључено + Укључи + Неочекивани одговор од сервера + Наслов + Понови + Врати + Поделите своју причу овде… + Приватно + Нацрт + Чека рецензију + Објави + Промени локацију + Уклони локацију + Локација + Сада + Ознаке + Облик чланка + Подложак + Одломак + Није подешено + Више опција + Категорије & ознаке + Све + Највиши ниво + Родитељска категорија (опционо): + Немате ниједан звучни запис + Немате ниједан документ + Немате ниједан видео запис + Немате ниједну слику + Одзив сервера је трајао предуго + Датотека је превелика да би се отпрмила на овај сајт + Датотека премашује максималну величину за отпремање на овом сајту + Видео запис је превелик за отпремање + Звучни запис + Видео записи + Документи + Слике + Све + Погледајте коментаре + Оптимизуј видео записе + Нацрти отпремљени + Пријави грешку + Квалитет видео записа + Камера + Складиште + Уреди допуштења + Дозволи + Потребна дозвола за %s за приступ Вашим фотографијама + Повезивање налога + Повезано + Twitter + Свиђања + Дугмад + Уреди дугме \"Више\" + Дугме \"Више\" садржи падајући мени који приказује дугмад за дељење + Корисничко име на Твитеру + Свиђања коментара + Дугмићи за дељење + Етикета + Стил дугмета + Прикажи дугме свиђања + Само текст + Званична дугмад + Само иконица + Иконица & текст + Повезивање %s + Прекини повезаност са %s? + Повежи други налог? + Поново повежи + Прекини повезаност + Повежи + Повезани налози + Дељење + Обавештења. Управљајте обавештењима. + Повезаности + Дељење + Не сада + Нацрт сачуван на уређају + Нацрт сачуван онлајн + Чланак сачуван на уређају + Синхронизуј + Одабери видео запис са уређаја + Одабери фотографију са уређаја + Додај као галерију + Додај више фотографија + %d колоне + 1 колона + Поново пошаљи електронску пошту + Молим вас потврдите вашу адресу е-поште + Чување чланка као нацрт + Направи видео запис + Направи фотографију + Обриши сајт? + Није могуће послати електронску пошту + Одабери фотографију + Максималан + Врло висок + Висок + Средњи + Низак + Отпремљено + Неуспело отпремање + Обрисано + Брише се + Отпрема се + На чекању + Квалитет слике + Непознат облик чланка + Предај + Није могуће учитати садржај + Садржај није могуће пронаћи + Оптимизуј слике + Покушај поново + Потврди + Претражи праћене сајтове + Ваш нацрт \'%1$s\' Вас чека - не заборавите да га објавите! + Да ли сте знали да је \'%1$s\' још увек нацрт? Објавите га! + Посети + Превуците за више + Није вам дозвољено да погледате овај пост. Пробајте да се пријавите у WordPress.com прво или искористите дугме на врху да отворите пост у интернет прегледачу. + Није вам дозвољено да гледате овај пост. Пробајте да се пријавите у WordPress.com прво. + Није вам дозвољено да гледате овај пост. Кликните на дугме на врху да отворите пост у интернет прегледачу. + Не можете да лајкујете док се не улогујете у WordPress.com + Већ сте лајковали овај коментар + Коментар није пронађен! + Пост није лајкован + Није одговорено на коментар. Молимо вас да покушате касније. + Коментар није одобрен. Молимо вас да покушате касније. + Коментар није лајкован. Молимо вас да покушате касније. + Додирните екран да бисте их приказали + Нова обавештења + Одговарам… + Одобравам… + Лајкујем… + Обрађујем… + Акција одрађена! + Коментар лајкован + Одјави се + Пријави се у WordPress.com + Више на WordPress.com + Више у %s + Отвори подешавања телефона + %s: Неисправан емаил + %s: Корисник је блокирао позивнице + %s: Већ прати + %s: Већ је члан + %s: Корисник није пронађен + Коментар одобрен! + Лајк + сада + Посетилац + Пратилац + Нема конекције, нисмо могли да сачувамо ваш профил + Десно + Лево + Без + Изабрани %1$d + Нисмо могли да прикажемо кориснике сајта + Емаил Пратилац + Пратилац + Преузимам кориснике… + Гледаоци + Пошаљите е-пошту пратиоцима + Пратиоци + Тим + Позовите до 10 адреса е-поште и/или корисничких имена са WordPress.com. Онима којима је потребно корисничко име биће послата упутства како да га креирају. + Ако га уклоните, овај пратилац ће престати да добија обавештења о овом сајту, осим уколико не крену поново да га прате. Да ли и даље желите да уклоните овог пратиоца? + Од %1$s + Пратилац није уклоњен + Није могуће уклонити прегледач + Нисмо могли да преузмемо емаилове пратиоца сајта + Нисмо могли да преузмемо пратиоце сајта + Неки од медија које сте послали нису успешно послати. У овом тренутку не можете да се пребаците у HTML мод.\nЖелите ли да уклоните све неуспешне медије и да наставите? + Ширина + Линк ка + Натпис + Промене сачуване + Одбаци сачуване промене? + Заустави слање? + %1$s: %2$s + Притисните да пробате поново! + Позивница је успешно послата + Позивнице су послате али је дошло до грешака! + Дошло је до грешке приликом слања позивница! + Неисправни емаил-ови или корисничка имена: позивнице нису познате + Корисничко име или емаил нису исправни: позивница није послата + Молимо вас додајте бар једно корисничко име + (Опционо) Можете да додате личну поруку дужине до 500 карактера која ће бити укључена у позивницу корисницима. + %d карактера је преостало + 1 карактер је преостао + 0 карактера је преостало + Лична порука + Позови + Корисничка имена или емаилови + Позови људе + Пошаљи линк + Спољни + Обриши историју претраге + Обриши историју претраге? + Претражи WordPress.com + Линкови су искључени на демо екрану + Пошаљи + Успешно уклоњен %1$s + Ако уклоните %1$s, тај корисник више неће моћи да приступи сајту, али ће сав садржај који је креирао %1$s остати на сајту. \n\nДа ли и даље желите да уклоните овог корисника? + Уклони %1$s + Улога + Људи + Сајтови на овој листи нису ништа објавили неко време + Корисник није уклоњен + Није промењена улога корисника + Грешка приликом мењања вашег Граватара + Грешка током учитавања вашег Граватара + Грешка приликом налажења исечене слике + Грешка током сечења слике + Проверавам емаил + Тренутно недоступно. Молимо вас унесите вашу шифру + Пријављивање + Унесите вашу шифру + Приказано свима када коментаришете. + Сликај камером или изабери слику + Планови + План + Ваши постови, стране и подешавања ће вам бити послата емаилом на %s. + Извезите ваш садржај + Извозим садржај… + Прикажи купљено + Премијум унапређења + Бришем сајт… + Обриши сајт + Главни домен + Дошло је до грешке приликом брисања вашег сајта. Молимо вас контактирајте подршку за више информација + Грешка током брисања сајта + Молимо вас унесите %1$s у поље испод да потврдите. Ваш сајт ће затим бити заувек обрисан. + Извези садржај + Потврди брисање сајта + Контактирајте подршку + Ако желите веб локацију, али не желите чланке и странице које имате сада, наш тим за подршку може за вас избрисати ваше чланке, странице, медије и коментаре.\n\nОво ће одржавати вашу веб локацију и УРЛ активним, али ће вам дати нови почетак стварања садржаја. Само нас контактирајте како бисмо уклонили ваш тренутни садржај. + Пустите нас да помогнемо + Почни поново + Подешавања апликације + Уклони неуспела слања + Напредно + Нема коментара у смећу + Нема коментара који чекају + Нема одобрених коментара + Центар + Видео + Статус + Стандардни + Цитат + Линк + Слика + Галерија + Ћаскање + Звук + Са стране + Заједница + Предлози + Одговори на моје коментаре + Истражи + Предлози корисничког имена + Достигнућа интернет места + Свиђања мојих чланака + Праћена сајта + Лајкови на мојим коментарима + Коментари на мом веб месту + %d предмета + 1 предемт + Сви корисници + Коментари познатих корисника + Нема коментара + %d коментара по страни + 1 коментар по страни + Потребно допуштење за више од 0 веза + Аутоматски одобри коментаре свих. + Аутоматски одобри ако корисник има претходно одобрени коментар + Захтевајте ручно одобрење за коментаре свих. + 1 дан + %d дана + Веб адреса + Примарно веб место + Тренутно није могуће освежити коментаре - приказују се старији коментари + Постави издвојену слику + Издвојена слика + Адреса е-поште + Трајно избрисати ове коментаре? + Трајно обриши овај коментар + Обриши + Коментар обрисан + Поврати + Нема нежељених коментара + Сви + Није могуће учитати страницу + Искључено + Језик интерфејса + О апликацији + Није било могуће сачувати Ваша подешавања налога + Није било могуће повратити Ваша подешавања налога + Није било могуће повратити Ваш налог + Код језика није препознат + Онемогућено + Претрага + Уклони + Изворна величина + Ваша локација је видљива свима, али тражи од претраживача да је не индексирају + Ваша локација је видљива свима и претраживачи је могу индексирати + Неколико речи о вама … + Име за приказ подразумевано ће бити ваше корисничко име ако није другачије постављено + О мени + Јавно име за приказ + Мој профил + Презиме + Име + Није могуће сачувати информације о сајту + Није било могуће повратити информације о сајту + Аутоматски затвори + Аутоматски затвори коментаре на чланцима. + Коментара по страници + Затвори коментарисање + Унесите реч или фразу + Нема ставки + У \"Ажурирању\" + У \"Апликацијама\" + У \"Мобилном\" + Прикажи слике + Прикажи заглавље + Прикажи везане чланке + Аутор коментара мора имати претходно одобрени коментар + Корисници морају бити регистровани и пријављени да би могли коментарисати + Аутор коментара мора попунити име и адресу е-поште + Прикажите коментаре у комадима одређене величине + Омогућите угнежђене коментаре до одређене дубине + Утврђује редослед приказа коментара + Забрани коментаре након наведеног времена + Омогућите читаоцима да постављају коментаре + Види сва могућа подешавања Расправе + Прикажи или сакриј везане чланке у читачу + Поставља нови облик чланка + Поставља нову категорију чланка + Измените своју лозинку + Тренутни кориснички налог + Језик у ком је овај блог првенствено написан + Контролише ко може да види Ваш сајт + Промена адресе тренутно није подржана + Коментари познатих корисника + Коментари свих корисника + Нивои %d + Приватно + Сакривено + Јавно + Обриши сајт + Црна листа + Везе у коментарима + Аутоматски одобри + Сортирај по + Корисници морају бити улоговани + Мора да садржи име и е-пошту + Примај повратне везе + Шаљи повратне везе + Дозволите коментаре + Подразумевани облик + Подразумевана категорија + Адреса + Наслов сајта + Подразумеване ствари за нове чланке + Писање + Налог + Уопштено + Прво најновије + Коментари + Прво најстарије + Затвори након + Везани чланци + Приватност + Расправа + Непознато + Никад + Овај чланак више не постоји + Нема скорашњих чланака + Одабрана тема + Није могуће учитати тему + Нешто је пошло по злу. Није било могуће активирати тему + од стране %1$s + Хвала што сте одабрали %1$s + УПРАВЉАЈ САЈТОМ + ГОТОВО + Подршка + Детаљи + Види + Испробај & Прилагоди + Укључи + Укључено + Подршка + Детаљи + Прилагоди + Тренутна тема + Чланак је објављен + Страница ажурирана + Чланак ажуриран + Страница објављена + Жао нам је, ниједна тема није пронађена + Учитај више чланака + Претражи сајтове + Идите у Читач + Будите примећени: коментаришите чланке које сте прочитали + Придружите се разговору: коментаришите чланке блогова које пратите + Будите активни! Коментaришите чланке блогова које пратите. + Још увек нема коментара + У току сте са свим! %s коментара 1 коментар Одговор на чланак… @@ -16,6 +1572,8 @@ Language: sr_RS %s свиђања 1 свиђање Свиђање + %,d пратилаца + Уреди ознаке и сајтове Чланак читача Подешавања за обавештења која се појављују на вашем уређају. Подешавања за обавештења која су послата на е-пошту повезану са вашим налогом. @@ -27,26 +1585,35 @@ Language: sr_RS Е-пошта Обавештења апликације Језичак обавештења + Увек ћемо слати важну е-пошту везану за ваш налог, али такође можете да добијете неке додатке који могу да Вам помогну. Резиме последњег чланка Нема везе Чланак је послат на отпад - Статистике Отпад Предпреглед Поглед Уређивање Објављивање + Статистика + Нисте овлашћени да приступите овом веб месту + Овај сајт не може бити пронађен Врати - Најбољи погледи икада + Захтев је истекао. Пријавите се на WordPress.com да бисте покушали поново. Занемари - Данашње статистике - Чланци, погледи и посетиоци целог времена + Најбољи прегледи икад + Данашња статистика + Чланци, прегледи и посетиоци за све време Увиди + Одјави се са WordPress.com Пријава/одјава - \"%s\" није сакривен зато што је тренутно веб место + Пријави се на WordPress.com Помоћ и подршка + „%s“ није сакривен зато што је тренутно веб место + Подешавања налога + Направи WordPress.com сајт Прикажи/сакриј веб места Додај самостално угошћено веб место + Додај нови сајт Види управљање Види веб место Одабери веб место @@ -64,6 +1631,7 @@ Language: sr_RS Језик Код за потврђивање Погрешан верификациони код + Пријавите се поново за наставак. Објављивач: Није могуће отворити обавештење Непознати термини за претрагу @@ -77,7 +1645,8 @@ Language: sr_RS Извештај о променама у апликацији је копиран у оставу Нови чланци Дошло је до грешке приликом копирања текста у оставу - Веб места која би могла да вам се свиде + Отпремање чланка + Овај сајт је празан Добављам теме… %1$d месеци Година @@ -94,11 +1663,11 @@ Language: sr_RS Пратиоци Државе Свиђања - Година Прегледа Посетиоци Чланци и стране - Publicize + Објави + Годишња Детаљи %d изабрано Нема коментара @@ -117,13 +1686,27 @@ Language: sr_RS Коментар Коментар померен на отпад Не постоје чланци. Зашто не бисте направили нови? - Одговор %s Немате дозволу да прегледате или уређујете стране Прегледајте наша ЧПП - Није могуће обавити ову радњу + Одјава… + Одговорите %s + Нема чланака са овом темом + Није могуће обавити овај поступак + Није могуће блокирати ову страницу + Блокирај овај сајт + Чланци са овог сајта више неће бити приказивани Заказати Ажурирај Веб места која пратите + Унесите URL или ознаку за праћење + Сајт запраћен + Није могуће приказати овај сајт + Већ пратите овај сајт + Није могуће пратити овај сајт + Није могуће отпратити овај сајт + Нема препоручених сајтова + Сајт читача + Праћене теме Помоћ Изгубили сте лозинку? Неисправна SSL потврда @@ -149,6 +1732,7 @@ Language: sr_RS Уграђена SD картица је неопходна за отпремање медија Чланци тренутно не могу бити освежени Није непожељен коментар + Дошло је до грешке приликом брисања чланка Одаберите категорије Подешавања стране Грешка у успостављању везе @@ -175,16 +1759,13 @@ Language: sr_RS Неопходно овлашћење Нови чланак Нови медиј - Полиса приватности Локалне измене Подешавања слике Неки медији тренутно не могу бити обрисани. Пробајте поново касније. Текст везе (опционо) Локални нацрт Подешавања чланка - Дозволе Отвореног кода Вордпрес блог - Овај блог је сакривен и не може се учитати. У подешавањима поново омогућите да буде видљив и пробајте поново. Додај нову категорију Име категорије Није могуће направити привремену датотеку за отпремање медија. Потврдите да имате довољно слободног простора за складиштење на свом уређају. @@ -196,13 +1777,25 @@ Language: sr_RS Непожељни коментар Дошло је до грешке током учитавања чланка. Освежите списак чланака и пробајте поново. Уклони веб место + Дошло је до грешке приликом приступа овом додатку. + Није могуће пронаћи датотеку за отпремање. Да ли је можда обрисана или померена? + Проверите да ли је унета УРЛ адреса тачна + Тренутно није могуће освежити медије + Политика приватности + Лиценце отвореног кода + Овај блог је скривен и не може се учитати. Поново га омогућите у подешавањима и покушајте поново. + Нема обавештења … још увек. + Обриши страницу? + Обриши чланак? + Није могуће додати ову тему + Није могуће уклонити ову тему Подели везу Добављам чланке… Коментар означен као непожељан Одговор - Не можете делити на Вордпрес без видљивог блога Вама и %,d других се ово свиђа - %,d људи се ово свиђа + Не можете делити на Вордпресу без видљивог блога + %,d људи ово воли Одаберите фотографију Одаберите видео снимак Није могуће добавити овај чланак @@ -221,7 +1814,10 @@ Language: sr_RS Није могуће отворити %s Овај списак је празан Одговор на коментар… - Недељу дана + Још увек нема коментара + Пријави се + Већ пратите ову тему + Ово није исправна тема Квадрати Кругови Наслов @@ -230,21 +1826,25 @@ Language: sr_RS Извори упућивања Данас Јуче - Дани - Месеци Подели - Статистике - Притискања Теме - Поплочан Ажурирање неуспешно Укључи Приказ слајдова Ознаке и категорије + Статистика + Кликови + Плочице + Месечна + Недељна + Дневна Управљајте + Одбаци Успешно одговорено %d нових обавештења и %d још. + Пријава + Праћења Учитавање… HTTP корисничко име HTTP лозинка @@ -252,12 +1852,14 @@ Language: sr_RS Неисправно корисничко име или лозинка. Лозинка Корисничко име + Пријавите се Читач Стране Нема доступне мреже Чланци Анониман У реду + обављено URL Вордпрес за Андроид Услови сервиса @@ -270,11 +1872,15 @@ Language: sr_RS Подеси име пречице Подешавања Име пречице не може бити празно + Приватна Наслов Категорије + Одвојите ознаке зарезима + Брисање коментара SD картица неопходна Медији Обриши + Одобри Ниједан Грешка Откажи @@ -287,4 +1893,5 @@ Language: sr_RS Да Не Подешавања обавештења + Објави одмах diff --git a/WordPress/src/main/res/values-sv/strings.xml b/WordPress/src/main/res/values-sv/strings.xml index 7cf8a8c34ebd..b37d2a68f26e 100644 --- a/WordPress/src/main/res/values-sv/strings.xml +++ b/WordPress/src/main/res/values-sv/strings.xml @@ -1,11 +1,50 @@ + Du har fått <b>50 gilla-markeringar</b> på webbplatsen i dag + <b>Erik S</b> har svarat på ditt inlägg + <b>Anna S</b> gillade ditt inlägg + Hoppa över + Välj + Välj favoritlayout på din startsida Du kan anpassa eller ändra det senare. + Den rullningsbara blockmenyn har stängts. + Den rullningsbara blockmenyn har öppnats. Välj ett block. + Välj en design + Lägg till kategori + Lägg till ny kategori + Kategorier + Inte inställd + Kategorier + Layouter är inte tillgängliga på grund av ett fel + Tryck på ”Försök igen” eller skapa en tom sida med hjälp av knappen nedan. + Layouter är inte tillgängliga när du saknar internetförbindelse + Tryck på ”Försök igen” när du har internetuppkoppling igen eller skapa en tom sida med knappen nedan. + Musik + Matlagning + Konst + Webbnyheter + Pamela Nguyen + Jag inspireras verkligen av fotografen Cameron Karstens verk. Jag tänker prova mig på dessa tekniker snart + Veckans nytt om rock’n roll + Fotboll + Trädgårdsskötsel + Politik + Mina tio favoritcaféer + Världens bästa fans + Muséer i London + Välkommen till världens populäraste webbplatsbyggare. + Med den kraftfulla redigeringsmiljön kan du skapa inlägg på rörlig fot. + Se hur din publik växer med hjälp av detaljerad statistik. + Följ dina favoritwebbplatser och hitta nya saker att läsa. + Låt dig inspireras + Se kommentarer och aviseringar i realtid. + Webbplatser att följa + Hämtningen av mediafiler misslyckades ”%s” stöds inte fullt ut Vi arbetar för fullt med att lägga till fler block i varje utgåva. Välj bilder @@ -19,7 +58,6 @@ Language: sv_SE %1$s nekades åtkomst till dina bilder. Korrigera genom att redigera dina rättigheter och aktivera %2$s och %3$s. Sidan har skapats En blank sida har skapats - Ett fel inträffade när layouterna skulle hämtas Lär känna berättelseinlägg Du har fått förhandsåtkomst till berättelseinlägg och det vore härligt om du ville prova dem. Du kanske vill skapa ett berättelseinlägg @@ -155,14 +193,13 @@ Language: sv_SE Byt video Ersätt en bild eller ett videoklipp Fortsätt med WordPress.com - Ange din webbplatsadress Välj bild Välj video Välj bild eller video Om du fortsätter med Google och inte redan har ett WordPress.com-konto, skapar du ett konto och samtycker till våra %1$sanvändarvillkor%2$s. Bekräftelse av registrering - WordPress-logga Blocket har tagits bort + Ange din befintliga webbplatsadress Genom att gå vidare accepterar du våra %1$sanvändarvillkor%2$s. Vi kommer att skicka e-post med en registreringslänk som låter dig skapa ett nytt WordPress.com-konto. Vi kommer att använda den här e-postadressen för att skapa ditt nya WordPress.com-konto. @@ -181,9 +218,7 @@ Language: sv_SE Kom igång Ange din e-postadress för att logga in eller skapa ett WordPress.com-konto. Skicka länk via e-post - Ta vara på kraften hos den mest flexibla webbplatsskaparen. Kolla din e-post - 37\% av webben är byggd på WordPress. Ett problem inträffade när din begäran skulle behandlas. Försök igen senare. Ge din webbplats ett namn som återspeglar dess personlighet och ämne. Första intrycket har betydelse! Tryck <b>%1$s</b> för att ange en ny rubrik @@ -487,7 +522,6 @@ Language: sv_SE Inlägget kommer att synkroniseras direkt. Är du klar att synkronisera? -%s - Inledning Denna domän är inte tillgänglig Vi kunde inte nå din webbplats eftersom den kräver <b>HTTP-autentisering</b>. För att lösa detta behöver du kontakta ditt webbhotell. Vi kunde inte nå din webbplats på grund av ett problem med <b>SSL-certifikatet</b>. För att lösa detta behöver du kontakta ditt webbhotell. @@ -1301,7 +1335,6 @@ Language: sv_SE Använt utrymme Media Kommentaren är markerad som ”inte skräppost” - Inloggning Nytt konto Välj webbplats Redigera foto @@ -2247,7 +2280,6 @@ Language: sv_SE App-loggar har kopierats till urklipp Nya inlägg Ett fel uppstod när text skulle kopieras till urklipp - Webbplatser du kanske gillar Laddar upp inlägg Denna webbplats är tom Hämtar teman… diff --git a/WordPress/src/main/res/values-th/strings.xml b/WordPress/src/main/res/values-th/strings.xml index 21c2267f0eb3..fa1bf61b37b5 100644 --- a/WordPress/src/main/res/values-th/strings.xml +++ b/WordPress/src/main/res/values-th/strings.xml @@ -191,7 +191,6 @@ Language: th เรื่องใหม่ มีความผิดพลาดเกิดขึ้นขณะกำลังคัดลอกข้อความไปยังคลิปบอร์ด ปูมแอพพลิเคชั่นถูกคัดลอกลงคลิปบอร์ด - เว็บที่คุณอาจจะชอบ เรื่องและหน้า วีดีโอ ผู้ติดตาม diff --git a/WordPress/src/main/res/values-tr/strings.xml b/WordPress/src/main/res/values-tr/strings.xml index 7ebb7d77cd22..12f0d12654b2 100644 --- a/WordPress/src/main/res/values-tr/strings.xml +++ b/WordPress/src/main/res/values-tr/strings.xml @@ -1,11 +1,43 @@ + Her sürümde daha fazla blok eklemek için elimizden geleni yapıyoruz. + \"%s\" tamamen desteklenmiyor + Yardım düğmesi + Web düzenleyicisini kullanarak düzenle + Görsel seç + Öykü Yayını Oluştur + Sitenizde yeni bir blog yazısı olarak yayınlanırlar, böylece kitleniz hiçbir şeyi kaçırmaz. + Öykü yayınları kaybolmaz + Ziyaretçilerinizin seveceği ilgi çekici ve dokunulabilir öykü yayınları oluşturmak için fotoğrafları, videoları ve metinleri birleştirin. + Artık herkes öykülere erişebilir + Öykü başlığı örneği + Öykü yayını nasıl oluşturulur? + Öykü yayınlarına erken erişiminiz var ve denemenizi çok isteriz. + Öykü Yayınlarına Giriş + Boş sayfa oluşturuldu + Sayfa oluşturuldu + Düzen Önizlemesi + %1$s fotoğraflarınıza erişimi reddedildi. Bunu düzeltmek için izinlerinizi düzenleyip %2$s ve %3$s özelliklerini açın. + Medya eklenemedi. + Medya eklenemedi: %s + WordPress Ortam Kütüphanesi\'nden seçin + Geri + Başlayın + Yeni bloglar keşfetmek için konular takip edin + gönderen: + Bu yönlendiren, istenmeyen posta olarak işaretlenemez + İstenmeyen posta işaretini kaldır + Spam Olarak İşaretle + Web Sitesini Aç + Gif medyası yükleme + Stok medya yükleme + Ortam dosyası yükleniyor URL arayın veya yazın Öğeyi seç Bu telefon bağlantısını ekle @@ -122,8 +154,6 @@ Language: tr Video veya görseli değiştir Videoyu değiştir WordPress.com ile devam et - Site adresinizi girin - WordPress logosu Blok kaldırıldı Görsel seç Görsel veya video seç @@ -143,11 +173,9 @@ Language: tr E-postayı görmüyor musunuz? İstenmeyen posta klasörünüzü kontrol edin. Size anında giriş yapacağınız bir bağlantıyı e-posta ile göndereceğiz, hiç bir parolaya gerek yok. Parolanızı sıfırlayın - En esnek web sitesi oluşturma platformunun gücünü açığa çıkarın. Hesap oluştur Başlayın E-postayı kontrol et - Web\'in %37\'si WordPress üzerine kurulmuştur. Bağlantıyı e-postayla gönder Veya parolanızı yazın Giriş yapmak veya bir WordPress.com hesabı oluşturmak için e-posta adresinizi girin. @@ -400,7 +428,9 @@ Language: tr Yazıları filtrelemek için bir Site veya Etiket seçin Geçerli filtreyi kaldır WordPress.com\'da oturum aç + Konuları ve Siteleri Yönetme Takip ettiğiniz sitelerdeki en son yazıları görmek için WordPress.com\'da oturum açın + Takip ettiğiniz konulardaki en yeni yazıları görmek için WordPress.com\'da oturum açın Bir siteyi takip et Blok sonrasına ekle Blok öncesine ekle @@ -409,6 +439,8 @@ Language: tr Mevcut bloğu değiştir Şablon ön izlemesi Takip ettiğiniz sitelerdeki en yeni yazıları görün + Bir konu ekle + Bir konu ekleyerek o konudaki yazıları takip edebilirsiniz Filtrele Takip edilen Video yazısı. %s @@ -450,7 +482,6 @@ Language: tr Senkronize etmeye hazır mısınız? Şimdi senkronize et -%s - Önsöz Bu alan adı kullanılamaz. Sitenize erişimi başaramadık. Bu sorunu çözmek için sunucunuza ulaşmanız gerekecektir. <b>SSL Sertifikası</b> ile ilgili bir sorun nedeniyle sitenize erişemedik. Bu sorunu çözmek için sunucunuza ulaşmanız gerekecektir. @@ -474,6 +505,7 @@ Language: tr Keşfet Beğeniler Şu anda siteniz için veri yüklemesi yapamıyoruz. Lütfen daha sonra tekrar deneyin + Konular WordPress Ortam Kütüphanesi Fotoğraf Çek Yazmaya başlayın… @@ -1053,6 +1085,8 @@ Language: tr Bir tema seç Yeni temalar keşfetmek için %1$s Temalar %2$s seçeneğine dokunun Daha fazlası + Takip edilen konu yok + En sevdiğiniz konularla ilgili yazıları bulmak için buraya konu ekleyin Jetpack SSS Jetpack Jetpack\'i kur @@ -1271,7 +1305,6 @@ Language: tr Bildirim ayrıntısı %s Site seç Yeni hesap - Oturum aç Fotoğrafı düzenle Kullanılan alan Oturum açmak için kullanılan hesap: @@ -2135,6 +2168,7 @@ Language: tr Beğen 1 beğeni %,d takipçi + Konu ve site düzenleme Okuyucu yazısı Cihazınızda görünen bildirimlerin ayarları. Hesabınıza bağlı e-posta adresine gönderilen bildirimlerin ayarları. @@ -2205,7 +2239,6 @@ Language: tr Yazılar alınıyor… Uygulama günlükleri panoya kopyalandı Metin panoya kopyalanırken bir hata oluştu - Hoşunuza gidebilecek siteler Yazı yükleniyor Bu site boş Yeni yazılar @@ -2252,6 +2285,7 @@ Language: tr Şunu cevapla: %s Boş bir yazı yayımlanamaz Yorum yap + Bu konuyla ilgili hiç yazı yok Bu eylemi gerçekleştirilemiyor Bu site engellenemiyor Bu siteden yazılar artık gösterilmeyecek @@ -2266,6 +2300,8 @@ Language: tr Bu sitenin takibi bırakılamıyor Önerilen site yok Okuyucu sitesi + Takip edilen konular + Bir URL veya takip etmek istediğiniz konuyu girin Yardım Parolanızı mı kaybettiniz? Geçersiz SSL setifikası @@ -2346,6 +2382,8 @@ Language: tr Yazıyı silinsin mi? Yazı yüklenirken hata oluştu. Yazıyı yenileyin ve tekrar deneyin Bağlantı yazısı (opsiyonel) + Bu konu eklenemiyor + Bu konu silinemiyor Bağlantıyı paylaş Yazılar getiriliyor… Yanıtla @@ -2374,6 +2412,8 @@ Language: tr Henüz yorum yok Görsel görüntülenemedi Üye ol + Bu konuyu zaten takip ediyorsunuz + Bu geçerli bir konu değil Temalar Başlık Manşet diff --git a/WordPress/src/main/res/values-vi/strings.xml b/WordPress/src/main/res/values-vi/strings.xml index 36382348a463..91ad4ab6708e 100644 --- a/WordPress/src/main/res/values-vi/strings.xml +++ b/WordPress/src/main/res/values-vi/strings.xml @@ -435,7 +435,6 @@ Language: vi_VN Người xuất bản: Không biết Điều kiện tìm kiếm Một lỗi đã xảy ra trong khi sao chép văn bản vào bộ nhớ tạm - Các site bạn có thể thích Bài viết mới Bản ghi ứng dụng đã được sao chép vào clipboard Site này không có gì diff --git a/WordPress/src/main/res/values-zh-rCN/strings.xml b/WordPress/src/main/res/values-zh-rCN/strings.xml index 3a88380cbed8..1cd1d1a19b93 100644 --- a/WordPress/src/main/res/values-zh-rCN/strings.xml +++ b/WordPress/src/main/res/values-zh-rCN/strings.xml @@ -20,7 +20,6 @@ Language: zh_CN 如何创作故事文章 您可以抢先体验故事文章,我们也希望您能亲身感受一下故事文章的创作乐趣。 故事文章简介 - 获取布局时出错 创建了空白页面 页面已创建 布局预览 @@ -152,8 +151,6 @@ Language: zh_CN 选择图片或视频 选择图像 区块已删除 - WordPress 徽标 - 输入您的站点地址 继续使用 WordPress.com 注册确认 如果您继续使用 Google,并且还没有 WordPress.com 帐户,则需要创建一个帐户,并同意我们的%1$s服务条款%2$s。 @@ -175,8 +172,6 @@ Language: zh_CN 或者输入您的密码 创建帐户 通过电子邮件发送链接 - 发挥最灵活的网站生成器的强大功能。 - 网上有 37\% 的内容是在 WordPress 上构建的。 重置密码 为您的站点提供一个反映其个性和主题的名称。 第一印象很重要! 设置您的站点标题 @@ -478,7 +473,6 @@ Language: zh_CN 此文章将立即同步。 准备好同步了? 此域不可用 - 简介 -%s 我们无法访问您的站点。您需要联系您的主机来解决这个问题。 由于 <b>SSL 证书</b>的问题,我们无法访问您的站点。您需要联系您的主机来解决这个问题。 @@ -1304,7 +1298,6 @@ Language: zh_CN 编辑照片 选择站点 新建帐户 - 登录 登录身份为 个人详情 文件详情 @@ -2233,7 +2226,6 @@ Language: zh_CN 已将应用程序日志复制到剪贴板 新文章 复制文本到剪贴板时出错 - 您可能喜欢的博客 正在上传文章 此站点为空 正在获取主题… diff --git a/WordPress/src/main/res/values-zh-rHK/strings.xml b/WordPress/src/main/res/values-zh-rHK/strings.xml index 238eee7497e4..96bf127ce436 100644 --- a/WordPress/src/main/res/values-zh-rHK/strings.xml +++ b/WordPress/src/main/res/values-zh-rHK/strings.xml @@ -1,11 +1,43 @@ + 我們正在努力開發,讓每次版本更新都可以新增更多區塊。 + 無法完全支援「%s」 + 「協助」按鈕 + 使用網頁編輯器編輯 + 選擇圖片 + 建立限時動態文章 + 它們會以新網誌文章的形式發佈在你的網站上,這樣你的讀者群永遠不會錯過任何精彩內容。 + 故事文章不會消失 + 結合相片、視訊和文字,建立吸睛又可點按的故事,你的訪客一定會喜歡。 + 現在人人都可以發佈限時動態 + 限時動態標題例子 + 如何建立限時動態文章 + 你可以搶先使用「限時動態文章」 (Story Posts),我們很樂意為你開放試用。 + 限時動態文章介紹 + 已建立空白頁面 + 已建立頁面 + 版面配置預覽 + %1$s 存取你的相片時遭拒絕。 若要解決此問題,請編輯存取權限並開啟 %2$s 和 %3$s。 + 媒體插入失敗。 + 媒體插入失敗:%s + 從 WordPress 媒體庫選擇 + 返回 + 開始使用 + 關注主題以探索新網誌 + 發表者: + 此推薦連結不能被標記為垃圾郵件 + 取消標記為垃圾郵件 + 標記為垃圾 + 開啟網站 + 正在上傳 GIF 媒體 + 正在上傳庫存媒體 + 正在上傳媒體 選取項目 搜尋或輸入 URL 新增此電話連結 @@ -122,8 +154,6 @@ Language: zh_TW 選擇圖片或視訊 選擇圖片 已移除區塊 - WordPress 標誌 - 請輸入你的網站位址 繼續使用 WordPress.com 註冊確認 如果你繼續使用 Google 操作且尚未擁有 WordPress.com 帳號,即表示你正在建立帳號,並同意我們的%1$s服務條款%2$s。 @@ -145,8 +175,6 @@ Language: zh_TW 或輸入你的密碼 建立帳號 以電子郵件傳送連結 - 最具彈性、功能最強大的網站建置系統,釋放無限可能。 - 37\% 的網站皆選用 WordPress 建置。 重設密碼 為網站取一個能反映出自我風格和主題的名稱。 第一印象很重要! 設定你的網站標題 @@ -395,7 +423,9 @@ Language: zh_TW 已選取 選擇網站或標籤以篩選文章 移除目前的篩選條件 + 管理主題和網站 登入 WordPress.com + 登入 WordPress.com,查看你關注主題的最新文章 登入 WordPress.com,查看關注網站的最新文章 範例預覽 取代目前區塊 @@ -403,7 +433,9 @@ Language: zh_TW 新增至「開始」 在之前新增區塊 在之後新增區塊 + 新增主題 關注網站 + 你可以新增主題以關注特定主題的文章 查看你關注網站的最新聞張 關注中 篩選 @@ -446,7 +478,6 @@ Language: zh_TW 此文章會立即同步。 準備好要同步了嗎? 此網域不可使用 - 簡介 -%s 無法存取你的網站。你必須聯絡主機商以解決此問題。 由於 <b>SSL 憑證</b>發生問題,我們無法存取你的網站。你必須聯絡主機商以解決此問題。 @@ -461,6 +492,7 @@ Language: zh_TW 按讚數 探索 已儲存 + 主題 網站 %sQi %sQa @@ -1038,6 +1070,8 @@ Language: zh_TW 現在不要 更多 你沒有任何網站 + 沒有關注任何主題 + 請在此處新增主題,以尋找你最愛的主題文章 請登入你用來連結 Jetpack 的 WordPress.com 帳號。 重試 設定 @@ -1256,7 +1290,6 @@ Language: zh_TW 編輯照片 挑選網站 新增帳號 - 登入 已登入為 個人詳細資料 檔案詳細資料 @@ -2107,6 +2140,7 @@ Language: zh_TW %s 個讚 1 個讚 + 編輯主題和網站 讀者文章 在裝置上顯示通知的相關設定。 將通知傳送至帳號所繫結之電子郵件地址的相關設定。 @@ -2175,7 +2209,6 @@ Language: zh_TW 應用程式記錄已複製到剪貼簿 這個網站沒有內容 新文章 - 你或許也會喜歡以下網站: 將文字複製到剪貼簿時發生錯誤 正在上傳文章 %1$d 年 @@ -2203,6 +2236,7 @@ Language: zh_TW 已選取:%d 瀏覽常見問題集 尚未有留言 + 沒有任何與此主題相關的文章 按讚 查看原始文章 留言已關閉 @@ -2233,7 +2267,9 @@ Language: zh_TW 你已經關注此網站 無法顯示此網站 已關注的網站 + 輸入要關注的 URL 或主題 關注的網站 + 已關注的主題 讀者網站 如果你通常能夠順利連線至此網站,則此錯誤可能代表有人正嘗試冒充該網站,因此請勿繼續操作。是否仍然要信任憑證? 無效的 SSL 憑證 @@ -2261,6 +2297,8 @@ Language: zh_TW 存取此網誌時發生錯誤 無法擷取媒體項目 沒有可用的網路 + 無法移除此主題 + 無法新增此主題 應用程式記錄檔 建立應用程式資料庫時發生錯誤。請嘗試重新安裝應用程式。 此網誌已隱藏,無法載入。請在設定中啟用網誌,然後再試一次。 @@ -2330,6 +2368,8 @@ Language: zh_TW 無法開啟 %s 無法檢視圖片 無法分享 + 這不是有效的主題 + 你已經關注了此主題 無法張貼你的回應 你說這個讚 1 人說這個讚 diff --git a/WordPress/src/main/res/values-zh-rTW/strings.xml b/WordPress/src/main/res/values-zh-rTW/strings.xml index 1eaf81d9fb27..96bf127ce436 100644 --- a/WordPress/src/main/res/values-zh-rTW/strings.xml +++ b/WordPress/src/main/res/values-zh-rTW/strings.xml @@ -1,11 +1,43 @@ + 我們正在努力開發,讓每次版本更新都可以新增更多區塊。 + 無法完全支援「%s」 + 「協助」按鈕 + 使用網頁編輯器編輯 + 選擇圖片 + 建立限時動態文章 + 它們會以新網誌文章的形式發佈在你的網站上,這樣你的讀者群永遠不會錯過任何精彩內容。 + 故事文章不會消失 + 結合相片、視訊和文字,建立吸睛又可點按的故事,你的訪客一定會喜歡。 + 現在人人都可以發佈限時動態 + 限時動態標題例子 + 如何建立限時動態文章 + 你可以搶先使用「限時動態文章」 (Story Posts),我們很樂意為你開放試用。 + 限時動態文章介紹 + 已建立空白頁面 + 已建立頁面 + 版面配置預覽 + %1$s 存取你的相片時遭拒絕。 若要解決此問題,請編輯存取權限並開啟 %2$s 和 %3$s。 + 媒體插入失敗。 + 媒體插入失敗:%s + 從 WordPress 媒體庫選擇 + 返回 + 開始使用 + 關注主題以探索新網誌 + 發表者: + 此推薦連結不能被標記為垃圾郵件 + 取消標記為垃圾郵件 + 標記為垃圾 + 開啟網站 + 正在上傳 GIF 媒體 + 正在上傳庫存媒體 + 正在上傳媒體 選取項目 搜尋或輸入 URL 新增此電話連結 @@ -122,8 +154,6 @@ Language: zh_TW 選擇圖片或視訊 選擇圖片 已移除區塊 - WordPress 標誌 - 請輸入你的網站位址 繼續使用 WordPress.com 註冊確認 如果你繼續使用 Google 操作且尚未擁有 WordPress.com 帳號,即表示你正在建立帳號,並同意我們的%1$s服務條款%2$s。 @@ -145,7 +175,6 @@ Language: zh_TW 或輸入你的密碼 建立帳號 以電子郵件傳送連結 - 最具彈性、功能最強大的網站建置系統,釋放無限可能。 重設密碼 為網站取一個能反映出自我風格和主題的名稱。 第一印象很重要! 設定你的網站標題 @@ -394,7 +423,9 @@ Language: zh_TW 已選取 選擇網站或標籤以篩選文章 移除目前的篩選條件 + 管理主題和網站 登入 WordPress.com + 登入 WordPress.com,查看你關注主題的最新文章 登入 WordPress.com,查看關注網站的最新文章 範例預覽 取代目前區塊 @@ -402,7 +433,9 @@ Language: zh_TW 新增至「開始」 在之前新增區塊 在之後新增區塊 + 新增主題 關注網站 + 你可以新增主題以關注特定主題的文章 查看你關注網站的最新聞張 關注中 篩選 @@ -445,7 +478,6 @@ Language: zh_TW 此文章會立即同步。 準備好要同步了嗎? 此網域不可使用 - 簡介 -%s 無法存取你的網站。你必須聯絡主機商以解決此問題。 由於 <b>SSL 憑證</b>發生問題,我們無法存取你的網站。你必須聯絡主機商以解決此問題。 @@ -460,6 +492,7 @@ Language: zh_TW 按讚數 探索 已儲存 + 主題 網站 %sQi %sQa @@ -1037,6 +1070,8 @@ Language: zh_TW 現在不要 更多 你沒有任何網站 + 沒有關注任何主題 + 請在此處新增主題,以尋找你最愛的主題文章 請登入你用來連結 Jetpack 的 WordPress.com 帳號。 重試 設定 @@ -1255,7 +1290,6 @@ Language: zh_TW 編輯照片 挑選網站 新增帳號 - 登入 已登入為 個人詳細資料 檔案詳細資料 @@ -2106,6 +2140,7 @@ Language: zh_TW %s 個讚 1 個讚 + 編輯主題和網站 讀者文章 在裝置上顯示通知的相關設定。 將通知傳送至帳號所繫結之電子郵件地址的相關設定。 @@ -2174,7 +2209,6 @@ Language: zh_TW 應用程式記錄已複製到剪貼簿 這個網站沒有內容 新文章 - 你或許也會喜歡以下網站: 將文字複製到剪貼簿時發生錯誤 正在上傳文章 %1$d 年 @@ -2202,6 +2236,7 @@ Language: zh_TW 已選取:%d 瀏覽常見問題集 尚未有留言 + 沒有任何與此主題相關的文章 按讚 查看原始文章 留言已關閉 @@ -2232,7 +2267,9 @@ Language: zh_TW 你已經關注此網站 無法顯示此網站 已關注的網站 + 輸入要關注的 URL 或主題 關注的網站 + 已關注的主題 讀者網站 如果你通常能夠順利連線至此網站,則此錯誤可能代表有人正嘗試冒充該網站,因此請勿繼續操作。是否仍然要信任憑證? 無效的 SSL 憑證 @@ -2260,6 +2297,8 @@ Language: zh_TW 存取此網誌時發生錯誤 無法擷取媒體項目 沒有可用的網路 + 無法移除此主題 + 無法新增此主題 應用程式記錄檔 建立應用程式資料庫時發生錯誤。請嘗試重新安裝應用程式。 此網誌已隱藏,無法載入。請在設定中啟用網誌,然後再試一次。 @@ -2329,6 +2368,8 @@ Language: zh_TW 無法開啟 %s 無法檢視圖片 無法分享 + 這不是有效的主題 + 你已經關注了此主題 無法張貼你的回應 你說這個讚 1 人說這個讚 diff --git a/WordPress/src/main/res/values/dimens.xml b/WordPress/src/main/res/values/dimens.xml index e0aad713e178..137a9711bbeb 100644 --- a/WordPress/src/main/res/values/dimens.xml +++ b/WordPress/src/main/res/values/dimens.xml @@ -19,6 +19,7 @@ @dimen/fab_margin_default 16dp + 64dp 24dp 56dp @@ -365,7 +366,6 @@ 4dp - 120dp 5dp @@ -547,6 +547,7 @@ -54dp @dimen/margin_extra_large + 2dp 281dp diff --git a/WordPress/src/main/res/values/drawables.xml b/WordPress/src/main/res/values/drawables.xml deleted file mode 100644 index 3ecca15ada27..000000000000 --- a/WordPress/src/main/res/values/drawables.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - @drawable/img_illustration_email_alert_120dp - - diff --git a/WordPress/src/main/res/values/strings.xml b/WordPress/src/main/res/values/strings.xml index a588aedeade4..bbe75e919e93 100644 --- a/WordPress/src/main/res/values/strings.xml +++ b/WordPress/src/main/res/values/strings.xml @@ -1026,6 +1026,9 @@ Are you sure you want to rewind your site back to %1$s at %2$s? This will remove all content and options created or changed since then. Since you\'re on a free plan, you\'ll see limited events in your activity. + + Scan + Today Yesterday @@ -1333,8 +1336,12 @@ Sites to follow By %1$s more items - Follow topics to discover new blogs + Welcome! + Follow topics to discover new blogs + No recent posts + Try following more topics to broaden the search Get Started + Follow topics Post saved online @@ -2466,6 +2473,7 @@ Your site address appears in the bar at the top of the screen when you visit your site in Chrome. Need more help? Find your site address + Find your connected email Checking site address Error while adding site. Error code: %s Log in to WordPress.com to access the post. @@ -2480,6 +2488,7 @@ My sites Log in with Google. Continue with Google + Continue with store credentials or Close There\'s no WordPress.com account matching this Google account. @@ -2490,7 +2499,6 @@ Please enter a WordPress.com or Jetpack-connected self-hosted WordPress site The website at this address is not a WordPress site. For us to connect to it, the site must have WordPress installed. Need help finding the email you connected with? - Send verification email Log in with your %1$s site credentials Enter your account information for %1$s. Log in with site credentials. @@ -2932,12 +2940,12 @@ Layouts not available while offline Tap retry when you\'re back online. Please Check your internet connection and retry. + There was an error while selecting the design. Capture Flip camera Flash Stickers - More Text Sound Flip @@ -2948,8 +2956,6 @@ Saved to photos SHARE Share to - Done - Next Close Saved Retry @@ -2959,7 +2965,6 @@ errored Change text alignment Change text color - Delete slide Delete story slide? This slide will be removed from your story. This slide has not been saved yet. If you delete this slide, you will lose any edits you have made. diff --git a/WordPress/src/test/java/org/wordpress/android/CoroutinesUtils.kt b/WordPress/src/test/java/org/wordpress/android/CoroutinesUtils.kt index 09805610db47..9c7ffb0fa0ac 100644 --- a/WordPress/src/test/java/org/wordpress/android/CoroutinesUtils.kt +++ b/WordPress/src/test/java/org/wordpress/android/CoroutinesUtils.kt @@ -6,7 +6,6 @@ import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Delay import kotlinx.coroutines.Dispatchers.Unconfined -import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.InternalCoroutinesApi import kotlinx.coroutines.runBlocking import org.mockito.Mockito @@ -24,7 +23,7 @@ fun KStubbing.onBlocking(methodCall: suspend T.() -> R): Ongoing return runBlocking { Mockito.`when`(mock.methodCall()) } } -@ExperimentalCoroutinesApi val TEST_SCOPE = CoroutineScope(Unconfined) +val TEST_SCOPE = CoroutineScope(Unconfined) @InternalCoroutinesApi val TEST_DISPATCHER: CoroutineDispatcher = TestDispatcher() @InternalCoroutinesApi diff --git a/WordPress/src/test/java/org/wordpress/android/ui/photopicker/PhotoPickerViewModelTest.kt b/WordPress/src/test/java/org/wordpress/android/ui/photopicker/PhotoPickerViewModelTest.kt index 3f8ee49751c4..1c1fdcec10a2 100644 --- a/WordPress/src/test/java/org/wordpress/android/ui/photopicker/PhotoPickerViewModelTest.kt +++ b/WordPress/src/test/java/org/wordpress/android/ui/photopicker/PhotoPickerViewModelTest.kt @@ -28,6 +28,7 @@ import org.wordpress.android.ui.photopicker.PhotoPickerViewModel.BottomBarUiMode import org.wordpress.android.ui.photopicker.PhotoPickerViewModel.PhotoListUiModel import org.wordpress.android.ui.photopicker.PhotoPickerViewModel.PhotoPickerUiState import org.wordpress.android.ui.photopicker.PhotoPickerViewModel.SoftAskViewUiModel +import org.wordpress.android.ui.posts.editor.media.CopyMediaToAppStorageUseCase import org.wordpress.android.ui.utils.UiString import org.wordpress.android.ui.utils.UiString.UiStringRes import org.wordpress.android.ui.utils.UiString.UiStringText @@ -48,6 +49,7 @@ class PhotoPickerViewModelTest : BaseUnitTest() { @Mock lateinit var tenorFeatureConfig: TenorFeatureConfig @Mock lateinit var context: Context @Mock lateinit var resourceProvider: ResourceProvider + @Mock lateinit var copyMediaToAppStorageUseCase: CopyMediaToAppStorageUseCase private lateinit var viewModel: PhotoPickerViewModel private var uiStates = mutableListOf() private var navigateEvents = mutableListOf>() @@ -68,7 +70,8 @@ class PhotoPickerViewModelTest : BaseUnitTest() { analyticsTrackerWrapper, permissionsHandler, tenorFeatureConfig, - resourceProvider + resourceProvider, + copyMediaToAppStorageUseCase ) uiStates.clear() firstItem = PhotoPickerItem(1, uriWrapper1, false) diff --git a/WordPress/src/test/java/org/wordpress/android/ui/posts/FeaturedImageHelperTest.kt b/WordPress/src/test/java/org/wordpress/android/ui/posts/FeaturedImageHelperTest.kt index 9379846e44d9..d2a001f62b58 100644 --- a/WordPress/src/test/java/org/wordpress/android/ui/posts/FeaturedImageHelperTest.kt +++ b/WordPress/src/test/java/org/wordpress/android/ui/posts/FeaturedImageHelperTest.kt @@ -1,6 +1,7 @@ package org.wordpress.android.ui.posts import com.nhaarman.mockitokotlin2.KArgumentCaptor +import com.nhaarman.mockitokotlin2.any import com.nhaarman.mockitokotlin2.anyOrNull import com.nhaarman.mockitokotlin2.argThat import com.nhaarman.mockitokotlin2.argumentCaptor @@ -13,7 +14,6 @@ import org.assertj.core.api.Assertions.assertThat import org.junit.Before import org.junit.Test import org.junit.runner.RunWith -import org.mockito.ArgumentMatchers.anyBoolean import org.mockito.ArgumentMatchers.anyInt import org.mockito.ArgumentMatchers.anyLong import org.mockito.junit.MockitoJUnitRunner @@ -29,6 +29,7 @@ import org.wordpress.android.fluxc.store.UploadStore import org.wordpress.android.ui.posts.FeaturedImageHelper.EnqueueFeaturedImageResult import org.wordpress.android.ui.posts.FeaturedImageHelper.FeaturedImageState import org.wordpress.android.ui.reader.utils.ReaderUtilsWrapper +import org.wordpress.android.ui.reader.utils.SiteAccessibilityInfo import org.wordpress.android.ui.uploads.UploadServiceFacade import org.wordpress.android.util.FluxCUtilsWrapper import org.wordpress.android.util.SiteUtilsWrapper @@ -43,12 +44,14 @@ class FeaturedImageHelperTest { private val readerUtilsWrapper: ReaderUtilsWrapper = mock() private val fluxCUtilsWrapper: FluxCUtilsWrapper = mock() private val siteUtilsWrapper: SiteUtilsWrapper = mock() + private val siteAccessibilityInfo: SiteAccessibilityInfo = mock() private val dispatcher: Dispatcher = mock() private lateinit var featuredImageHelper: FeaturedImageHelper @Before fun setUp() { + whenever(siteUtilsWrapper.getAccessibilityInfoFromSite(any())).thenReturn(siteAccessibilityInfo) featuredImageHelper = FeaturedImageHelper( uploadStore, mediaStore, @@ -318,8 +321,7 @@ class FeaturedImageHelperTest { eq("https://testing.com/url.jpg"), anyInt(), anyInt(), - anyBoolean(), - anyBoolean() + eq(siteAccessibilityInfo) ) } @@ -344,8 +346,7 @@ class FeaturedImageHelperTest { "https://testing.com/thumbnail.jpg"), anyInt(), anyInt(), - anyBoolean(), - anyBoolean() + eq(siteAccessibilityInfo) ) } diff --git a/WordPress/src/test/java/org/wordpress/android/ui/posts/PostListMainViewModelTest.kt b/WordPress/src/test/java/org/wordpress/android/ui/posts/PostListMainViewModelTest.kt index 0658af6c6500..32686979359b 100644 --- a/WordPress/src/test/java/org/wordpress/android/ui/posts/PostListMainViewModelTest.kt +++ b/WordPress/src/test/java/org/wordpress/android/ui/posts/PostListMainViewModelTest.kt @@ -9,7 +9,6 @@ import com.nhaarman.mockitokotlin2.times import com.nhaarman.mockitokotlin2.verify import com.nhaarman.mockitokotlin2.whenever import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.InternalCoroutinesApi import org.assertj.core.api.Assertions.assertThat import org.junit.Before @@ -39,7 +38,6 @@ class PostListMainViewModelTest : BaseUnitTest() { private lateinit var viewModel: PostListMainViewModel @InternalCoroutinesApi - @UseExperimental(ExperimentalCoroutinesApi::class) @Before fun setUp() { val prefs = mock { diff --git a/WordPress/src/test/java/org/wordpress/android/ui/posts/editor/media/CopyMediaToAppStorageUseCaseTest.kt b/WordPress/src/test/java/org/wordpress/android/ui/posts/editor/media/CopyMediaToAppStorageUseCaseTest.kt index 149c17f744c5..8623ca68fc51 100644 --- a/WordPress/src/test/java/org/wordpress/android/ui/posts/editor/media/CopyMediaToAppStorageUseCaseTest.kt +++ b/WordPress/src/test/java/org/wordpress/android/ui/posts/editor/media/CopyMediaToAppStorageUseCaseTest.kt @@ -16,7 +16,7 @@ import org.wordpress.android.test import org.wordpress.android.util.MediaUtilsWrapper @RunWith(MockitoJUnitRunner::class) -@UseExperimental(InternalCoroutinesApi::class) +@InternalCoroutinesApi class CopyMediaToAppStorageUseCaseTest : BaseUnitTest() { @Test fun `do NOT copy files which are present in media store`() = test { @@ -88,6 +88,7 @@ class CopyMediaToAppStorageUseCaseTest : BaseUnitTest() { } private companion object Fixtures { + @InternalCoroutinesApi fun createCopyMediaToAppStorageUseCase(mediaUtilsWrapper: MediaUtilsWrapper = createMediaUtilsWrapper()) = CopyMediaToAppStorageUseCase(mediaUtilsWrapper, TEST_DISPATCHER) diff --git a/WordPress/src/test/java/org/wordpress/android/ui/reader/discover/ReaderDiscoverViewModelTest.kt b/WordPress/src/test/java/org/wordpress/android/ui/reader/discover/ReaderDiscoverViewModelTest.kt index b0715fa86fe0..a11c01b6d1a9 100644 --- a/WordPress/src/test/java/org/wordpress/android/ui/reader/discover/ReaderDiscoverViewModelTest.kt +++ b/WordPress/src/test/java/org/wordpress/android/ui/reader/discover/ReaderDiscoverViewModelTest.kt @@ -41,11 +41,14 @@ import org.wordpress.android.ui.reader.discover.ReaderCardUiState.ReaderRecommen import org.wordpress.android.ui.reader.discover.ReaderCardUiState.ReaderWelcomeBannerCardUiState import org.wordpress.android.ui.reader.discover.ReaderDiscoverViewModel.DiscoverUiState import org.wordpress.android.ui.reader.discover.ReaderDiscoverViewModel.DiscoverUiState.ContentUiState -import org.wordpress.android.ui.reader.discover.ReaderDiscoverViewModel.DiscoverUiState.EmptyUiState.ShowFollowInterestsEmptyUiState +import org.wordpress.android.ui.reader.discover.ReaderDiscoverViewModel.DiscoverUiState.EmptyUiState.RequestFailedUiState +import org.wordpress.android.ui.reader.discover.ReaderDiscoverViewModel.DiscoverUiState.EmptyUiState.ShowNoFollowedTagsUiState +import org.wordpress.android.ui.reader.discover.ReaderDiscoverViewModel.DiscoverUiState.EmptyUiState.ShowNoPostsUiState import org.wordpress.android.ui.reader.discover.ReaderDiscoverViewModel.DiscoverUiState.LoadingUiState import org.wordpress.android.ui.reader.discover.ReaderNavigationEvents.OpenEditorForReblog import org.wordpress.android.ui.reader.discover.ReaderNavigationEvents.ShowBlogPreview import org.wordpress.android.ui.reader.discover.ReaderNavigationEvents.ShowPostsByTag +import org.wordpress.android.ui.reader.discover.ReaderNavigationEvents.ShowReaderSubs import org.wordpress.android.ui.reader.discover.ReaderNavigationEvents.ShowSitePickerForResult import org.wordpress.android.ui.reader.discover.ReaderPostCardAction.PrimaryAction import org.wordpress.android.ui.reader.discover.ReaderPostCardActionType.BOOKMARK @@ -201,7 +204,7 @@ class ReaderDiscoverViewModelTest { } @Test - fun `ShowFollowInterestsEmptyUiState is shown when the user does NOT follow any tags `() = test { + fun `ShowFollowInterestsEmptyUiState is shown when the user does NOT follow any tags`() = test { // Arrange whenever(getFollowedTagsUseCase.get()).thenReturn(ReaderTagList()) val uiStates = init().uiStates @@ -209,7 +212,17 @@ class ReaderDiscoverViewModelTest { viewModel.start(parentViewModel) // Assert assertThat(uiStates.size).isEqualTo(2) - assertThat(uiStates[1]).isInstanceOf(ShowFollowInterestsEmptyUiState::class.java) + assertThat(uiStates[1]).isInstanceOf(ShowNoFollowedTagsUiState::class.java) + } + + @Test + fun `ShowNoPostsUiState is shown when the discoverFeed does not contain any posts`() = test { + // Arrange + val uiStates = init(autoUpdateFeed = false).uiStates + // Act + fakeDiscoverFeed.value = createDummyReaderCardsList(numberOfItems = 0) + // Assert + assertThat(uiStates[1]).isInstanceOf(ShowNoPostsUiState::class.java) } @Test @@ -275,7 +288,7 @@ class ReaderDiscoverViewModelTest { } @Test - fun `if welcome card exists with other cards, it is present in ContentUiState`() = test { + fun `if welcome card exists then ReaderWelcomeBannerCardUiState will be present`() = test { // Arrange val uiStates = init(autoUpdateFeed = false).uiStates // Act @@ -288,17 +301,6 @@ class ReaderDiscoverViewModelTest { assertThat(contentUiState.cards.first()).isInstanceOf(ReaderWelcomeBannerCardUiState::class.java) } - @Test - fun `if welcome card exists as the only card in the feed then ContentUiState is not shown`() = test { - // Arrange - val uiStates = init(autoUpdateFeed = false).uiStates - // Act - fakeDiscoverFeed.value = ReaderDiscoverCards(createWelcomeBannerCard()) - // Assert - assertThat(uiStates.size).isEqualTo(1) - assertThat(uiStates[0]).isInstanceOf(LoadingUiState::class.java) - } - @Test fun `WelcomeBannerCard has welcome title set to it`() = test { // Arrange @@ -357,7 +359,7 @@ class ReaderDiscoverViewModelTest { // Act fakeCommunicationChannel.postValue(Event(NetworkUnavailable(mock()))) // Assert - assertThat(uiStates.last().fullscreenErrorVisibility).isTrue() + assertThat(uiStates.last()).isInstanceOf(RequestFailedUiState::class.java) } @Test @@ -562,15 +564,40 @@ class ReaderDiscoverViewModelTest { } @Test - fun `OnEmptyActionClicked shows select interests screen`() = test { + fun `Action button on no tags empty screen opens reader interests screen`() = test { // Arrange + whenever(getFollowedTagsUseCase.get()).thenReturn(ReaderTagList()) init() + fakeDiscoverFeed.value = ReaderDiscoverCards(listOf()) // Act - viewModel.onEmptyActionClick() + (viewModel.uiState.value as ShowNoFollowedTagsUiState).action.invoke() // Assert verify(parentViewModel).onShowReaderInterests() } + @Test + fun `Action button on no posts empty screen opens subs screen`() = test { + // Arrange + val navigation = init().navigation + fakeDiscoverFeed.value = ReaderDiscoverCards(listOf()) + // Act + (viewModel.uiState.value as ShowNoPostsUiState).action.invoke() + // Assert + assertThat(navigation[0].peekContent()).isInstanceOf(ShowReaderSubs::class.java) + } + + @Test + fun `Action button on error empty screen invokes refresh cards`() = test { + // Arrange + val uiStates = init(autoUpdateFeed = false).uiStates + viewModel.start(parentViewModel) + fakeCommunicationChannel.postValue(Event(NetworkUnavailable(mock()))) + // Act + (viewModel.uiState.value as RequestFailedUiState).action.invoke() + // Assert + verify(readerDiscoverDataProvider).refreshCards() + } + private fun init(autoUpdateFeed: Boolean = true): Observers { val uiStates = mutableListOf() viewModel.uiState.observeForever { @@ -594,8 +621,12 @@ class ReaderDiscoverViewModelTest { // since we are adding an InterestsYouMayLikeCard we remove one item from the numberOfItems since it counts as 1. private fun createDummyReaderCardsList(numberOfItems: Long = NUMBER_OF_ITEMS): ReaderDiscoverCards { return ReaderDiscoverCards( - createInterestsYouMayLikeCardList() - .plus(createDummyReaderPostCardList(numberOfItems - 1)) + if (numberOfItems != 0L) { + createInterestsYouMayLikeCardList() + .plus(createDummyReaderPostCardList(numberOfItems - 1)) + } else { + listOf() + } ) } diff --git a/WordPress/src/test/java/org/wordpress/android/ui/reader/discover/ReaderPostCardActionsHandlerTest.kt b/WordPress/src/test/java/org/wordpress/android/ui/reader/discover/ReaderPostCardActionsHandlerTest.kt index 71bcd79318c9..2ddcbd73b077 100644 --- a/WordPress/src/test/java/org/wordpress/android/ui/reader/discover/ReaderPostCardActionsHandlerTest.kt +++ b/WordPress/src/test/java/org/wordpress/android/ui/reader/discover/ReaderPostCardActionsHandlerTest.kt @@ -6,7 +6,6 @@ import com.nhaarman.mockitokotlin2.eq import com.nhaarman.mockitokotlin2.mock import com.nhaarman.mockitokotlin2.verify import com.nhaarman.mockitokotlin2.whenever -import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.InternalCoroutinesApi import kotlinx.coroutines.flow.flowOf import org.assertj.core.api.Assertions.assertThat @@ -73,7 +72,6 @@ import org.wordpress.android.ui.utils.HtmlMessageUtils import org.wordpress.android.util.analytics.AnalyticsTrackerWrapper import org.wordpress.android.viewmodel.ResourceProvider -@ExperimentalCoroutinesApi @InternalCoroutinesApi @RunWith(MockitoJUnitRunner::class) class ReaderPostCardActionsHandlerTest { diff --git a/WordPress/src/test/java/org/wordpress/android/ui/reader/repository/ReaderDiscoverDataProviderTest.kt b/WordPress/src/test/java/org/wordpress/android/ui/reader/repository/ReaderDiscoverDataProviderTest.kt index 39af102d519a..b4614c996bf5 100644 --- a/WordPress/src/test/java/org/wordpress/android/ui/reader/repository/ReaderDiscoverDataProviderTest.kt +++ b/WordPress/src/test/java/org/wordpress/android/ui/reader/repository/ReaderDiscoverDataProviderTest.kt @@ -4,7 +4,6 @@ import androidx.arch.core.executor.testing.InstantTaskExecutorRule import androidx.lifecycle.Observer import com.nhaarman.mockitokotlin2.verify import com.nhaarman.mockitokotlin2.whenever -import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.InternalCoroutinesApi import org.assertj.core.api.Assertions import org.junit.Before @@ -16,7 +15,6 @@ import org.mockito.junit.MockitoJUnitRunner import org.wordpress.android.MainCoroutineScopeRule import org.wordpress.android.TEST_DISPATCHER import org.wordpress.android.models.ReaderPost -import org.wordpress.android.models.ReaderTag import org.wordpress.android.models.discover.ReaderDiscoverCard.ReaderPostCard import org.wordpress.android.models.discover.ReaderDiscoverCards import org.wordpress.android.test @@ -50,7 +48,6 @@ class ReaderDiscoverDataProviderTest { @JvmField val coroutineScope = MainCoroutineScopeRule() private lateinit var dataProvider: ReaderDiscoverDataProvider - private lateinit var readerTag: ReaderTag @Mock private lateinit var eventBusWrapper: EventBusWrapper @Mock private lateinit var getDiscoverCardsUseCase: GetDiscoverCardsUseCase @@ -61,6 +58,7 @@ class ReaderDiscoverDataProviderTest { @Before fun setUp() { dataProvider = ReaderDiscoverDataProvider( + TEST_DISPATCHER, TEST_DISPATCHER, eventBusWrapper, readerTagWrapper, @@ -70,7 +68,6 @@ class ReaderDiscoverDataProviderTest { ) } - @ExperimentalCoroutinesApi @Test fun `when refreshCards is requested started gets posted on comm channel`() = test { whenever(fetchDiscoverCardsUseCase.fetch(REQUEST_FIRST_PAGE)).thenReturn(Started(REQUEST_FIRST_PAGE)) @@ -83,7 +80,6 @@ class ReaderDiscoverDataProviderTest { .isEqualTo(Started(REQUEST_FIRST_PAGE)) } - @ExperimentalCoroutinesApi @Test fun `when fetch request fails then failure gets posted to comm channel`() = test { // Arrange @@ -97,7 +93,6 @@ class ReaderDiscoverDataProviderTest { .isEqualTo(RemoteRequestFailure(REQUEST_FIRST_PAGE)) } - @ExperimentalCoroutinesApi @Test fun `when fetch request succeeds success gets posted to comm channel`() = test { // Arrange @@ -111,7 +106,6 @@ class ReaderDiscoverDataProviderTest { .isEqualTo(Success(REQUEST_FIRST_PAGE)) } - @ExperimentalCoroutinesApi @Test fun `when fetch request unchanged success gets posted to comm channel`() = test { // Arrange @@ -125,25 +119,46 @@ class ReaderDiscoverDataProviderTest { .isEqualTo(Success(REQUEST_FIRST_PAGE)) } - @ExperimentalCoroutinesApi @Test - fun `on cards updated has new the data gets posted to discover feed`() = test { - // Arrange + fun `when new observer added and db is empty, does NOT post anything to discover feed`() = test { + whenever(shouldAutoUpdateTagUseCase.get(dataProvider.readerTag)).thenReturn(false) + whenever(getDiscoverCardsUseCase.get()).thenReturn(ReaderDiscoverCards(listOf())) + val event = FetchDiscoverCardsEnded(REQUEST_FIRST_PAGE, HAS_NEW) + + dataProvider.discoverFeed.observeForever { } + + Assertions.assertThat(dataProvider.discoverFeed.value).isNull() + } + @Test + fun `when new observer added and db is NOT empty, the data gets posted to discover feed`() = test { + whenever(shouldAutoUpdateTagUseCase.get(dataProvider.readerTag)).thenReturn(false) whenever(getDiscoverCardsUseCase.get()).thenReturn(createDummyReaderCardsList()) + val event = FetchDiscoverCardsEnded(REQUEST_FIRST_PAGE, HAS_NEW) + + dataProvider.discoverFeed.observeForever { } + + Assertions.assertThat(dataProvider.discoverFeed.value).isNotNull + } + @Test + fun `when request first page finishes, the data gets posted to discover feed`() = test { + // Make sure the provider doesn't emit any values when a new observer is added + whenever(getDiscoverCardsUseCase.get()).thenReturn(ReaderDiscoverCards(listOf())) + whenever(shouldAutoUpdateTagUseCase.get(dataProvider.readerTag)).thenReturn(false) + dataProvider.discoverFeed.observeForever { } + // Make sure the db returns some data + whenever(getDiscoverCardsUseCase.get()).thenReturn(createDummyReaderCardsList()) val event = FetchDiscoverCardsEnded(REQUEST_FIRST_PAGE, HAS_NEW) dataProvider.onCardsUpdated(event) Assertions.assertThat(requireNotNull(dataProvider.discoverFeed.value)) .isInstanceOf(ReaderDiscoverCards::class.java) - Assertions.assertThat(requireNotNull(dataProvider.discoverFeed.value).cards.size) .isEqualTo(NUMBER_OF_ITEMS) } - @ExperimentalCoroutinesApi @Test fun `when loadMoreRequest in progress another started not posted to comm channel`() = test { whenever(fetchDiscoverCardsUseCase.fetch(REQUEST_MORE)).thenReturn(Started(REQUEST_MORE)) @@ -168,7 +183,6 @@ class ReaderDiscoverDataProviderTest { } // The following test the loadData(), which is kicked off when discoverFeed obtains observers - @ExperimentalCoroutinesApi @Test fun `when loadData with refresh request is started and posted to comm channel`() = test { whenever(fetchDiscoverCardsUseCase.fetch(REQUEST_FIRST_PAGE)).thenReturn(Started(REQUEST_FIRST_PAGE)) @@ -182,7 +196,6 @@ class ReaderDiscoverDataProviderTest { Assertions.assertThat(requireNotNull(started)).isEqualTo(Started(REQUEST_FIRST_PAGE)) } - @ExperimentalCoroutinesApi @Test fun `when loadData without refresh no start message posted to comm channel`() = test { whenever(getDiscoverCardsUseCase.get()).thenReturn(createDummyReaderCardsList()) @@ -195,7 +208,6 @@ class ReaderDiscoverDataProviderTest { Assertions.assertThat(started).isNull() } - @ExperimentalCoroutinesApi @Test fun `when loadData with forceReload true data posted to discover channel`() = test { whenever(getDiscoverCardsUseCase.get()).thenReturn(createDummyReaderCardsList()) @@ -211,7 +223,6 @@ class ReaderDiscoverDataProviderTest { Assertions.assertThat(data).isNotNull } - @ExperimentalCoroutinesApi @Test fun `when loadData with existsInMemory data posted to discover feed`() = test { val discoverFeedObserver = Observer { } @@ -240,7 +251,6 @@ class ReaderDiscoverDataProviderTest { Assertions.assertThat(data?.cards?.size).isEqualTo(NUMBER_OF_ITEMS) } - @ExperimentalCoroutinesApi @Test fun `when followed tags change the discover feed gets refreshed`() = test { // Act diff --git a/WordPress/src/test/java/org/wordpress/android/ui/reader/repository/usecases/GetDiscoverCardsUseCaseTest.kt b/WordPress/src/test/java/org/wordpress/android/ui/reader/repository/usecases/GetDiscoverCardsUseCaseTest.kt index 377a43111138..bee12a284b2c 100644 --- a/WordPress/src/test/java/org/wordpress/android/ui/reader/repository/usecases/GetDiscoverCardsUseCaseTest.kt +++ b/WordPress/src/test/java/org/wordpress/android/ui/reader/repository/usecases/GetDiscoverCardsUseCaseTest.kt @@ -97,6 +97,16 @@ class GetDiscoverCardsUseCaseTest { assertThat(result.cards.filterIsInstance()).size().isEqualTo(0) } + @Test + fun `welcome card is not added to the list of cards when there are no other cards`() = test { + // Arrange + whenever(mockedJsonArray.length()).thenReturn(0) + // Act + val result = useCase.get() + // Assert + assertThat(result.cards.filterIsInstance()).size().isEqualTo(0) + } + @Test fun `interest you might like card json is transformed into InterestsYouMayLikeCard object`() = test { // Arrange diff --git a/WordPress/src/test/java/org/wordpress/android/ui/sitecreation/previews/CreateSiteUseCaseTest.kt b/WordPress/src/test/java/org/wordpress/android/ui/sitecreation/previews/CreateSiteUseCaseTest.kt index e1ca0edea434..c78f5cf4319e 100644 --- a/WordPress/src/test/java/org/wordpress/android/ui/sitecreation/previews/CreateSiteUseCaseTest.kt +++ b/WordPress/src/test/java/org/wordpress/android/ui/sitecreation/previews/CreateSiteUseCaseTest.kt @@ -26,7 +26,8 @@ import org.wordpress.android.util.UrlUtilsWrapper private val DUMMY_SITE_DATA: SiteCreationServiceData = SiteCreationServiceData( 123, - "slug" + "slug", + "domain" ) private const val LANGUAGE_ID = "lang_id" diff --git a/WordPress/src/test/java/org/wordpress/android/ui/sitecreation/previews/SitePreviewViewModelTest.kt b/WordPress/src/test/java/org/wordpress/android/ui/sitecreation/previews/SitePreviewViewModelTest.kt index a18514ebb84b..201abe9fd4a8 100644 --- a/WordPress/src/test/java/org/wordpress/android/ui/sitecreation/previews/SitePreviewViewModelTest.kt +++ b/WordPress/src/test/java/org/wordpress/android/ui/sitecreation/previews/SitePreviewViewModelTest.kt @@ -40,6 +40,7 @@ import org.wordpress.android.ui.sitecreation.services.SiteCreationServiceState import org.wordpress.android.ui.sitecreation.services.SiteCreationServiceState.SiteCreationStep.CREATE_SITE import org.wordpress.android.ui.sitecreation.services.SiteCreationServiceState.SiteCreationStep.FAILURE import org.wordpress.android.ui.sitecreation.services.SiteCreationServiceState.SiteCreationStep.SUCCESS +import org.wordpress.android.ui.sitecreation.theme.defaultTemplateSlug import org.wordpress.android.util.NetworkUtilsWrapper import org.wordpress.android.util.UrlUtilsWrapper @@ -48,7 +49,7 @@ private const val DOMAIN = ".wordpress.com" private const val URL = "$SUB_DOMAIN$DOMAIN" private const val REMOTE_SITE_ID = 1L private const val LOCAL_SITE_ID = 2 -private val SITE_CREATION_STATE = SiteCreationState(1, URL) +private val SITE_CREATION_STATE = SiteCreationState(1, defaultTemplateSlug, URL) @InternalCoroutinesApi @ExperimentalCoroutinesApi diff --git a/WordPress/src/test/java/org/wordpress/android/ui/sitecreation/services/SiteCreationServiceManagerTest.kt b/WordPress/src/test/java/org/wordpress/android/ui/sitecreation/services/SiteCreationServiceManagerTest.kt index 32bb8708c83d..ef44fdb15dfd 100644 --- a/WordPress/src/test/java/org/wordpress/android/ui/sitecreation/services/SiteCreationServiceManagerTest.kt +++ b/WordPress/src/test/java/org/wordpress/android/ui/sitecreation/services/SiteCreationServiceManagerTest.kt @@ -33,7 +33,8 @@ private const val NEW_SITE_REMOTE_ID = 1234L private val DUMMY_SITE_DATA: SiteCreationServiceData = SiteCreationServiceData( 123, - "slug" + "slug", + "domain" ) private val IDLE_STATE = SiteCreationServiceState(IDLE) diff --git a/WordPress/src/test/java/org/wordpress/android/ui/sitecreation/theme/HomePagePickerViewModelTest.kt b/WordPress/src/test/java/org/wordpress/android/ui/sitecreation/theme/HomePagePickerViewModelTest.kt index 70206f350bf6..85e17737a557 100644 --- a/WordPress/src/test/java/org/wordpress/android/ui/sitecreation/theme/HomePagePickerViewModelTest.kt +++ b/WordPress/src/test/java/org/wordpress/android/ui/sitecreation/theme/HomePagePickerViewModelTest.kt @@ -20,11 +20,16 @@ import org.wordpress.android.fluxc.store.ThemeStore.OnStarterDesignsFetched import org.wordpress.android.fluxc.store.ThemeStore.ThemeErrorType import org.wordpress.android.fluxc.store.ThemeStore.ThemesError import org.wordpress.android.test +import org.wordpress.android.ui.sitecreation.misc.SiteCreationTracker +import org.wordpress.android.ui.sitecreation.theme.HomePagePickerViewModel.DesignSelectionAction import org.wordpress.android.ui.sitecreation.theme.HomePagePickerViewModel.UiState import org.wordpress.android.ui.sitecreation.usecases.FetchHomePageLayoutsUseCase import org.wordpress.android.util.NetworkUtilsWrapper import org.wordpress.android.util.NoDelayCoroutineDispatcher +private const val mockedDesignSlug = "mockedDesignSlug" +private const val mockedDesignSegmentId = 1L + @RunWith(MockitoJUnitRunner::class) class HomePagePickerViewModelTest { @Rule @@ -34,6 +39,8 @@ class HomePagePickerViewModelTest { @Mock lateinit var networkUtils: NetworkUtilsWrapper @Mock lateinit var fetchHomePageLayoutsUseCase: FetchHomePageLayoutsUseCase @Mock lateinit var uiStateObserver: Observer + @Mock lateinit var onDesignActionObserver: Observer + @Mock lateinit var analyticsTracker: SiteCreationTracker private lateinit var viewModel: HomePagePickerViewModel @@ -43,16 +50,29 @@ class HomePagePickerViewModelTest { networkUtils, dispatcher, fetchHomePageLayoutsUseCase, + analyticsTracker, NoDelayCoroutineDispatcher(), NoDelayCoroutineDispatcher() ) viewModel.uiState.observeForever(uiStateObserver) + viewModel.onDesignActionPressed.observeForever(onDesignActionObserver) } private fun mockResponse(isError: Boolean = false, block: suspend CoroutineScope.() -> T) = test { val response = if (isError) OnStarterDesignsFetched(emptyList(), ThemesError(ThemeErrorType.GENERIC_ERROR)) else OnStarterDesignsFetched( - listOf(StarterDesignModel(0, "slug", "title", "site", "demo", "theme", "image")), + listOf( + StarterDesignModel( + 0, + mockedDesignSlug, + "title", + "site", + "demo", + "theme", + mockedDesignSegmentId, + "image" + ) + ), null ) whenever(fetchHomePageLayoutsUseCase.fetchStarterDesigns()).thenReturn(response) @@ -99,24 +119,25 @@ class HomePagePickerViewModelTest { @Test fun `when the user taps on a layout the layout is selected if the thumbnail has loaded`() = mockResponse { viewModel.start() - viewModel.onThumbnailReady("slug") - viewModel.onLayoutTapped("slug") - assertThat(requireNotNull(viewModel.uiState.value as UiState.Content).selectedLayoutSlug).isEqualTo("slug") + viewModel.onThumbnailReady(mockedDesignSlug) + viewModel.onLayoutTapped(mockedDesignSlug) + assertThat(requireNotNull(viewModel.uiState.value as UiState.Content).selectedLayoutSlug) + .isEqualTo(mockedDesignSlug) } @Test fun `when the user taps on a layout the layout is not selected if the thumbnail has not loaded`() = mockResponse { viewModel.start() - viewModel.onLayoutTapped("slug") + viewModel.onLayoutTapped(mockedDesignSlug) assertThat(requireNotNull(viewModel.uiState.value as UiState.Content).selectedLayoutSlug).isNull() } @Test fun `when the user taps on a selected layout the layout is deselected`() = mockResponse { viewModel.start() - viewModel.onThumbnailReady("slug") - viewModel.onLayoutTapped("slug") - viewModel.onLayoutTapped("slug") + viewModel.onThumbnailReady(mockedDesignSlug) + viewModel.onLayoutTapped(mockedDesignSlug) + viewModel.onLayoutTapped(mockedDesignSlug) assertThat(requireNotNull(viewModel.uiState.value as UiState.Content).selectedLayoutSlug).isNull() } @@ -127,10 +148,32 @@ class HomePagePickerViewModelTest { } @Test - fun `when the user selects a layout the toolbar is shown`() = mockResponse { + fun `when the user selects a design the toolbar is shown`() = mockResponse { viewModel.start() - viewModel.onThumbnailReady("slug") - viewModel.onLayoutTapped("slug") + viewModel.onThumbnailReady(mockedDesignSlug) + viewModel.onLayoutTapped(mockedDesignSlug) assertThat(viewModel.uiState.value?.isToolbarVisible).isEqualTo(true) } + + @Test + fun `when the user presses skip the default design is selected`() = mockResponse { + viewModel.start() + viewModel.onSkippedTapped() + val captor = ArgumentCaptor.forClass(DesignSelectionAction::class.java) + verify(onDesignActionObserver).onChanged(captor.capture()) + assertThat(captor.value.template).isEqualTo(defaultTemplateSlug) + assertThat(captor.value.segmentId).isNull() + } + + @Test + fun `when the user chooses a design the design info is passed to the next step`() = mockResponse { + viewModel.start() + viewModel.onThumbnailReady(mockedDesignSlug) + viewModel.onLayoutTapped(mockedDesignSlug) + viewModel.onChooseTapped() + val captor = ArgumentCaptor.forClass(DesignSelectionAction::class.java) + verify(onDesignActionObserver).onChanged(captor.capture()) + assertThat(captor.value.template).isEqualTo(mockedDesignSlug) + assertThat(captor.value.segmentId).isEqualTo(mockedDesignSegmentId) + } } diff --git a/WordPress/src/test/java/org/wordpress/android/ui/stats/refresh/StatsViewModelTest.kt b/WordPress/src/test/java/org/wordpress/android/ui/stats/refresh/StatsViewModelTest.kt index 8cfa3cf6d9a4..453b36f92b5f 100644 --- a/WordPress/src/test/java/org/wordpress/android/ui/stats/refresh/StatsViewModelTest.kt +++ b/WordPress/src/test/java/org/wordpress/android/ui/stats/refresh/StatsViewModelTest.kt @@ -5,7 +5,6 @@ import androidx.lifecycle.MutableLiveData import com.nhaarman.mockitokotlin2.verify import com.nhaarman.mockitokotlin2.whenever import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.ExperimentalCoroutinesApi import org.assertj.core.api.Assertions.assertThat import org.junit.Before import org.junit.Test @@ -48,7 +47,6 @@ class StatsViewModelTest : BaseUnitTest() { private lateinit var viewModel: StatsViewModel private val _liveSelectedSection = MutableLiveData() private val liveSelectedSection: LiveData = _liveSelectedSection - @ExperimentalCoroutinesApi @Before fun setUp() { whenever(baseListUseCase.snackbarMessage).thenReturn(MutableLiveData()) diff --git a/WordPress/src/test/java/org/wordpress/android/ui/stats/refresh/lists/UiModelMapperTest.kt b/WordPress/src/test/java/org/wordpress/android/ui/stats/refresh/lists/UiModelMapperTest.kt index da954058cbca..ca5c168e988f 100644 --- a/WordPress/src/test/java/org/wordpress/android/ui/stats/refresh/lists/UiModelMapperTest.kt +++ b/WordPress/src/test/java/org/wordpress/android/ui/stats/refresh/lists/UiModelMapperTest.kt @@ -1,6 +1,5 @@ package org.wordpress.android.ui.stats.refresh.lists -import kotlinx.coroutines.ExperimentalCoroutinesApi import org.assertj.core.api.Assertions.assertThat import org.junit.Before import org.junit.Test @@ -18,7 +17,6 @@ import org.wordpress.android.util.NetworkUtilsWrapper class UiModelMapperTest : BaseUnitTest() { @Mock lateinit var networkUtilsWrapper: NetworkUtilsWrapper private lateinit var mapper: UiModelMapper - @ExperimentalCoroutinesApi @Before fun setUp() { mapper = UiModelMapper(networkUtilsWrapper) diff --git a/WordPress/src/test/java/org/wordpress/android/viewmodel/activitylog/ActivityLogViewModelTest.kt b/WordPress/src/test/java/org/wordpress/android/viewmodel/activitylog/ActivityLogViewModelTest.kt index b9cade3b7486..e9ca0d0fe9d2 100644 --- a/WordPress/src/test/java/org/wordpress/android/viewmodel/activitylog/ActivityLogViewModelTest.kt +++ b/WordPress/src/test/java/org/wordpress/android/viewmodel/activitylog/ActivityLogViewModelTest.kt @@ -36,6 +36,7 @@ import org.wordpress.android.ui.activitylog.list.ActivityLogListItem.Event import org.wordpress.android.ui.activitylog.list.ActivityLogListItem.Footer import org.wordpress.android.ui.activitylog.list.ActivityLogListItem.Header import org.wordpress.android.ui.activitylog.list.ActivityLogListItem.Loading +import org.wordpress.android.util.config.ActivityLogFiltersFeatureConfig import org.wordpress.android.viewmodel.ResourceProvider import org.wordpress.android.viewmodel.activitylog.ActivityLogViewModel.ActivityLogListStatus import java.util.Calendar @@ -48,6 +49,7 @@ class ActivityLogViewModelTest { @Mock private lateinit var site: SiteModel @Mock private lateinit var rewindStatusService: RewindStatusService @Mock private lateinit var resourceProvider: ResourceProvider + @Mock private lateinit var activityLogFiltersFeatureConfig: ActivityLogFiltersFeatureConfig private lateinit var fetchActivityLogCaptor: KArgumentCaptor private var events: MutableList?> = mutableListOf() @@ -96,7 +98,13 @@ class ActivityLogViewModelTest { @Before fun setUp() = runBlocking { - viewModel = ActivityLogViewModel(store, rewindStatusService, resourceProvider, Dispatchers.Unconfined) + viewModel = ActivityLogViewModel( + store, + rewindStatusService, + resourceProvider, + activityLogFiltersFeatureConfig, + Dispatchers.Unconfined + ) viewModel.site = site viewModel.events.observeForever { events.add(it) } viewModel.eventListStatus.observeForever { eventListStatuses.add(it) } @@ -318,6 +326,24 @@ class ActivityLogViewModelTest { assertFetchEvents(true) } + @Test + fun dateRangePickerIsNotVisibleWhenFiltersFeatureFlagIsDisabled() = runBlocking { + whenever(activityLogFiltersFeatureConfig.isEnabled()).thenReturn(false) + + viewModel.start(site) + + assertEquals(false, viewModel.dateRangePickerVisibility.value) + } + + @Test + fun dateRangePickerIsVisibleWhenFiltersFeatureFlagIsEnabled() = runBlocking { + whenever(activityLogFiltersFeatureConfig.isEnabled()).thenReturn(true) + + viewModel.start(site) + + assertEquals(true, viewModel.dateRangePickerVisibility.value) + } + private suspend fun assertFetchEvents(canLoadMore: Boolean = false) { verify(store).fetchActivities(fetchActivityLogCaptor.capture()) diff --git a/build.gradle b/build.gradle index bbba39c675eb..acc65fa51871 100644 --- a/build.gradle +++ b/build.gradle @@ -1,8 +1,9 @@ buildscript { - ext.kotlinVersion = '1.3.61' - ext.serializationVersion = '0.14.0' + ext.kotlinVersion = '1.4.10' + ext.serializationVersion = '1.0-M1-1.4.0-rc' ext.navComponentVersion = '2.0.0' - ext.kotlin_coroutines_version = '1.3.3' + ext.kotlin_coroutines_version = '1.3.9' + ext.coroutinesVersion = '1.3.9' ext.kotlin_ktx_version = '1.2.0' ext.androidx_work_version = "2.0.1" ext.buildGutenbergMobileJSBundle = 1 @@ -125,12 +126,11 @@ ext { minSdkVersion = 21 targetSdkVersion = 29 - coroutinesVersion = '1.3.3' + coroutinesVersion = '1.3.9' androidxWorkVersion = "2.0.1" daggerVersion = '2.29.1' - fluxCVersion = '1.6.26-beta-3' - + fluxCVersion = '1.6.26-beta-7' appCompatVersion = '1.0.2' coreVersion = '1.2.0' diff --git a/libs/WordPressAnnotations/build.gradle b/libs/WordPressAnnotations/build.gradle index f827f544e24a..dbdee96d9592 100644 --- a/libs/WordPressAnnotations/build.gradle +++ b/libs/WordPressAnnotations/build.gradle @@ -1,9 +1,9 @@ apply plugin: 'kotlin' dependencies { - ext.kotlinVersion = '1.3.61' + ext.kotlinVersion = '1.4.10' - implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlinVersion" + implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlinVersion" } sourceCompatibility = "7" diff --git a/libs/analytics/WordPressAnalytics/src/main/java/org/wordpress/android/analytics/AnalyticsTracker.java b/libs/analytics/WordPressAnalytics/src/main/java/org/wordpress/android/analytics/AnalyticsTracker.java index 7067c8e624e6..c509b7429660 100644 --- a/libs/analytics/WordPressAnalytics/src/main/java/org/wordpress/android/analytics/AnalyticsTracker.java +++ b/libs/analytics/WordPressAnalytics/src/main/java/org/wordpress/android/analytics/AnalyticsTracker.java @@ -447,6 +447,12 @@ public enum Stat { ENHANCED_SITE_CREATION_EXITED, ENHANCED_SITE_CREATION_ERROR_SHOWN, ENHANCED_SITE_CREATION_BACKGROUND_SERVICE_UPDATED, + ENHANCED_SITE_CREATION_SITE_DESIGN_VIEWED, + ENHANCED_SITE_CREATION_SITE_DESIGN_SELECTED, + ENHANCED_SITE_CREATION_SITE_DESIGN_SKIPPED, + ENHANCED_SITE_CREATION_SITE_DESIGN_PREVIEW_VIEWED, + ENHANCED_SITE_CREATION_SITE_DESIGN_PREVIEW_LOADING, + ENHANCED_SITE_CREATION_SITE_DESIGN_PREVIEW_LOADED, // This stat is part of a funnel that provides critical information. Before // making ANY modification to this stat please refer to: p4qSXL-35X-p2 SITE_CREATED, diff --git a/libs/analytics/WordPressAnalytics/src/main/java/org/wordpress/android/analytics/AnalyticsTrackerNosara.java b/libs/analytics/WordPressAnalytics/src/main/java/org/wordpress/android/analytics/AnalyticsTrackerNosara.java index 143e42dd3bde..ed10fbfead68 100644 --- a/libs/analytics/WordPressAnalytics/src/main/java/org/wordpress/android/analytics/AnalyticsTrackerNosara.java +++ b/libs/analytics/WordPressAnalytics/src/main/java/org/wordpress/android/analytics/AnalyticsTrackerNosara.java @@ -1379,6 +1379,18 @@ public static String getEventNameForStat(AnalyticsTracker.Stat stat) { return "enhanced_site_creation_error_shown"; case ENHANCED_SITE_CREATION_BACKGROUND_SERVICE_UPDATED: return "enhanced_site_creation_background_service_updated"; + case ENHANCED_SITE_CREATION_SITE_DESIGN_VIEWED: + return "enhanced_site_creation_site_design_viewed"; + case ENHANCED_SITE_CREATION_SITE_DESIGN_SELECTED: + return "enhanced_site_creation_site_design_selected"; + case ENHANCED_SITE_CREATION_SITE_DESIGN_SKIPPED: + return "enhanced_site_creation_site_design_skipped"; + case ENHANCED_SITE_CREATION_SITE_DESIGN_PREVIEW_VIEWED: + return "enhanced_site_creation_site_design_preview_viewed"; + case ENHANCED_SITE_CREATION_SITE_DESIGN_PREVIEW_LOADING: + return "enhanced_site_creation_site_design_preview_loading"; + case ENHANCED_SITE_CREATION_SITE_DESIGN_PREVIEW_LOADED: + return "enhanced_site_creation_site_design_preview_loaded"; case SITE_CREATED: // This stat is part of a funnel that provides critical information. Before // making ANY modification to this stat please refer to: p4qSXL-35X-p2 diff --git a/libs/editor/WordPressEditor/build.gradle b/libs/editor/WordPressEditor/build.gradle index 8bd81f0b8cb6..45c1fd6e2ad5 100644 --- a/libs/editor/WordPressEditor/build.gradle +++ b/libs/editor/WordPressEditor/build.gradle @@ -80,7 +80,6 @@ dependencies { api ("com.github.wordpress-mobile.WordPress-Aztec-Android:wordpress-comments:$aztecVersion") implementation (project(':@wordpress_react-native-bridge')) { - exclude group: 'com.squareup.okhttp3' exclude group: "com.android.volley" exclude group: 'com.google.code.findbugs' } diff --git a/libs/login/WordPressLoginFlow/build.gradle b/libs/login/WordPressLoginFlow/build.gradle index 36a16c494a3d..8595a9cb2015 100644 --- a/libs/login/WordPressLoginFlow/build.gradle +++ b/libs/login/WordPressLoginFlow/build.gradle @@ -51,6 +51,7 @@ dependencies { implementation 'androidx.legacy:legacy-support-v13:1.0.0' implementation 'androidx.gridlayout:gridlayout:1.0.0' implementation "com.google.android.material:material:1.2.1" + implementation 'androidx.constraintlayout:constraintlayout:1.1.3' implementation "androidx.core:core-ktx:$kotlin_ktx_version" implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" diff --git a/libs/login/WordPressLoginFlow/src/main/java/org/wordpress/android/login/Login2FaFragment.java b/libs/login/WordPressLoginFlow/src/main/java/org/wordpress/android/login/Login2FaFragment.java index 96b494a59c56..c638379afc2b 100644 --- a/libs/login/WordPressLoginFlow/src/main/java/org/wordpress/android/login/Login2FaFragment.java +++ b/libs/login/WordPressLoginFlow/src/main/java/org/wordpress/android/login/Login2FaFragment.java @@ -379,7 +379,7 @@ public void onTextChanged(CharSequence s, int start, int before, int count) { updateContinueButtonEnabledStatus(); } - private void show2FaError(String message) { + private void show2FaError(@Nullable String message) { if (!TextUtils.isEmpty(message)) { mAnalyticsListener.trackFailure(message); } diff --git a/libs/login/WordPressLoginFlow/src/main/java/org/wordpress/android/login/LoginAnalyticsListener.kt b/libs/login/WordPressLoginFlow/src/main/java/org/wordpress/android/login/LoginAnalyticsListener.kt index 3aeb38264e43..379923d31946 100644 --- a/libs/login/WordPressLoginFlow/src/main/java/org/wordpress/android/login/LoginAnalyticsListener.kt +++ b/libs/login/WordPressLoginFlow/src/main/java/org/wordpress/android/login/LoginAnalyticsListener.kt @@ -68,6 +68,11 @@ interface LoginAnalyticsListener { fun trackEmailSignupConfirmationViewed() fun trackSocialSignupConfirmationViewed() fun trackCreateAccountClick() + fun emailPasswordFormScreenResumed() + fun siteAddressFormScreenResumed() + fun magicLinkRequestScreenResumed() + fun magicLinkSentScreenResumed() + fun usernamePasswordScreenResumed() enum class CreatedAccountSource { EMAIL, diff --git a/libs/login/WordPressLoginFlow/src/main/java/org/wordpress/android/login/LoginBaseFormFragment.java b/libs/login/WordPressLoginFlow/src/main/java/org/wordpress/android/login/LoginBaseFormFragment.java index 574ca638e050..f48c32057ef9 100644 --- a/libs/login/WordPressLoginFlow/src/main/java/org/wordpress/android/login/LoginBaseFormFragment.java +++ b/libs/login/WordPressLoginFlow/src/main/java/org/wordpress/android/login/LoginBaseFormFragment.java @@ -232,6 +232,17 @@ public void onDestroy() { super.onDestroy(); } + @Override public void onDestroyView() { + mPrimaryButton = null; + mSecondaryButton = null; + + if (mProgressDialog != null) { + mProgressDialog.setOnCancelListener(null); + mProgressDialog = null; + } + super.onDestroyView(); + } + protected void startProgressIfNeeded() { if (!isInProgress()) { startProgress(); diff --git a/libs/login/WordPressLoginFlow/src/main/java/org/wordpress/android/login/LoginEmailFragment.java b/libs/login/WordPressLoginFlow/src/main/java/org/wordpress/android/login/LoginEmailFragment.java index c18032d51c81..4f6b9ff9b25a 100644 --- a/libs/login/WordPressLoginFlow/src/main/java/org/wordpress/android/login/LoginEmailFragment.java +++ b/libs/login/WordPressLoginFlow/src/main/java/org/wordpress/android/login/LoginEmailFragment.java @@ -84,8 +84,11 @@ public class LoginEmailFragment extends LoginBaseFormFragment imp private static final String ARG_SIGNUP_FROM_LOGIN_ENABLED = "ARG_SIGNUP_FROM_LOGIN_ENABLED"; private static final String ARG_SITE_LOGIN_ENABLED = "ARG_SITE_LOGIN_ENABLED"; private static final String ARG_SHOULD_USE_NEW_LAYOUT = "ARG_SHOULD_USE_NEW_LAYOUT"; + private static final String ARG_OPTIONAL_SITE_CREDS_LAYOUT = "ARG_OPTIONAL_SITE_CREDS_LAYOUT"; + private static final String ARG_HIDE_TOS = "ARG_HIDE_TOS"; public static final String TAG = "login_email_fragment_tag"; + public static final String TAG_SITE_CREDS_LAYOUT = "login_email_fragment_site_creds_layout_tag"; public static final int MAX_EMAIL_LENGTH = 100; private ArrayList mOldSitesIDs = new ArrayList<>(); @@ -97,6 +100,8 @@ public class LoginEmailFragment extends LoginBaseFormFragment imp private boolean mIsSignupFromLoginEnabled; private boolean mIsSiteLoginEnabled; private boolean mShouldUseNewLayout; + private boolean mOptionalSiteCredsLayout; + private boolean mHideTos; protected WPLoginInputRow mEmailInput; protected boolean mHasDismissedEmailHints; @@ -111,18 +116,47 @@ public static LoginEmailFragment newInstance(String url) { return fragment; } - public static LoginEmailFragment newInstance(boolean isSignupFromLoginEnabled, boolean isSiteLoginEnabled, + public static LoginEmailFragment newInstance(String url, boolean optionalSiteCredsLayout) { + LoginEmailFragment fragment = new LoginEmailFragment(); + Bundle args = new Bundle(); + args.putString(ARG_LOGIN_SITE_URL, url); + args.putBoolean(ARG_OPTIONAL_SITE_CREDS_LAYOUT, optionalSiteCredsLayout); + fragment.setArguments(args); + return fragment; + } + + public static LoginEmailFragment newInstance(boolean isSignupFromLoginEnabled, + boolean isSiteLoginEnabled, boolean shouldUseNewLayout) { - return newInstance(isSignupFromLoginEnabled, isSiteLoginEnabled, shouldUseNewLayout, null); + return newInstance( + isSignupFromLoginEnabled, isSiteLoginEnabled, shouldUseNewLayout, null); + } + + public static LoginEmailFragment newInstance(boolean isSignupFromLoginEnabled, + boolean isSiteLoginEnabled, + boolean shouldUseNewLayout, + boolean hideTos) { + LoginEmailFragment fragment = new LoginEmailFragment(); + Bundle args = new Bundle(); + args.putBoolean(ARG_SIGNUP_FROM_LOGIN_ENABLED, isSignupFromLoginEnabled); + args.putBoolean(ARG_SITE_LOGIN_ENABLED, isSiteLoginEnabled); + args.putBoolean(ARG_SHOULD_USE_NEW_LAYOUT, shouldUseNewLayout); + args.putBoolean(ARG_HIDE_TOS, hideTos); + args.putString(ARG_LOGIN_SITE_URL, null); + fragment.setArguments(args); + return fragment; } - public static LoginEmailFragment newInstance(boolean isSignupFromLoginEnabled, boolean isSiteLoginEnabled, - boolean shouldUseNewLayout, String url) { + public static LoginEmailFragment newInstance(boolean isSignupFromLoginEnabled, + boolean isSiteLoginEnabled, + boolean shouldUseNewLayout, + String url) { LoginEmailFragment fragment = new LoginEmailFragment(); Bundle args = new Bundle(); args.putBoolean(ARG_SIGNUP_FROM_LOGIN_ENABLED, isSignupFromLoginEnabled); args.putBoolean(ARG_SITE_LOGIN_ENABLED, isSiteLoginEnabled); args.putBoolean(ARG_SHOULD_USE_NEW_LAYOUT, shouldUseNewLayout); + args.putBoolean(ARG_HIDE_TOS, false); args.putString(ARG_LOGIN_SITE_URL, url); fragment.setArguments(args); return fragment; @@ -130,7 +164,13 @@ public static LoginEmailFragment newInstance(boolean isSignupFromLoginEnabled, b @Override protected @LayoutRes int getContentLayout() { - return mShouldUseNewLayout ? R.layout.login_email_screen : R.layout.login_email_screen_old; + if (mShouldUseNewLayout) { + return R.layout.login_email_screen; + } else if (mOptionalSiteCredsLayout) { + return R.layout.login_email_optional_site_creds_screen; + } else { + return R.layout.login_email_screen_old; + } } @Override @@ -159,7 +199,11 @@ protected void setupLabel(@NonNull TextView label) { } break; case WOO_LOGIN_MODE: - label.setText(getString(R.string.enter_email_for_site, mLoginSiteUrl)); + if (mOptionalSiteCredsLayout) { + label.setText(getString(R.string.enter_email_for_site, mLoginSiteUrl)); + } else { + label.setText(getString(R.string.enter_email_wordpress_com)); + } break; case JETPACK_STATS: label.setText(R.string.login_to_to_connect_jetpack); @@ -183,6 +227,11 @@ protected void setupContent(ViewGroup rootView) { (Button) rootView.findViewById(R.id.continue_tos), (Button) rootView.findViewById(R.id.continue_with_google_tos)); setupSocialButtons((Button) rootView.findViewById(R.id.continue_with_google)); + } else if (mOptionalSiteCredsLayout) { + setupContinueButton((Button) rootView.findViewById(R.id.login_continue_button)); + setupSiteCredsButton((Button) rootView.findViewById(R.id.login_site_creds)); + setupFindEmailHelpButton( + (Button) rootView.findViewById(R.id.login_find_connected_email)); } else { setupAlternativeButtons( (LinearLayout) rootView.findViewById(R.id.login_google_button), @@ -240,21 +289,38 @@ private void updateContinueButtonEnabledStatus() { } } + @Override public void onDestroyView() { + mEmailInput = null; + + super.onDestroyView(); + } + private void setupTosButtons(Button continueTosButton, Button continueWithGoogleTosButton) { - OnClickListener onClickListener = new OnClickListener() { - public void onClick(View view) { - Context context = getContext(); - if ((context instanceof SignupSheetListener)) { - ((SignupSheetListener) context).onSignupSheetTermsOfServiceClicked(); + if (mHideTos) { + // Hide the TOS buttons + continueTosButton.setVisibility(View.GONE); + continueWithGoogleTosButton.setVisibility(View.GONE); + } else { + // Show the TOS buttons + continueTosButton.setVisibility(View.VISIBLE); + continueWithGoogleTosButton.setVisibility(View.VISIBLE); + + OnClickListener onClickListener = new OnClickListener() { + public void onClick(View view) { + Context context = getContext(); + if ((context instanceof SignupSheetListener)) { + ((SignupSheetListener) context).onSignupSheetTermsOfServiceClicked(); + } } - } - }; + }; - continueTosButton.setOnClickListener(onClickListener); - continueTosButton.setText(formatTosText(R.string.continue_terms_of_service_text)); + continueTosButton.setOnClickListener(onClickListener); + continueTosButton.setText(formatTosText(R.string.continue_terms_of_service_text)); - continueWithGoogleTosButton.setOnClickListener(onClickListener); - continueWithGoogleTosButton.setText(formatTosText(R.string.continue_with_google_terms_of_service_text)); + continueWithGoogleTosButton.setOnClickListener(onClickListener); + continueWithGoogleTosButton + .setText(formatTosText(R.string.continue_with_google_terms_of_service_text)); + } } private void setupSocialButtons(Button continueWithGoogleButton) { @@ -266,6 +332,22 @@ public void onClick(View view) { }); } + private void setupSiteCredsButton(Button continueWithSiteCreds) { + continueWithSiteCreds.setOnClickListener(new OnClickListener() { + @Override public void onClick(View v) { + mLoginListener.loginViaSiteCredentials(mLoginSiteUrl); + } + }); + } + + private void setupFindEmailHelpButton(Button findConnectedEmail) { + findConnectedEmail.setOnClickListener(new OnClickListener() { + @Override public void onClick(View v) { + mLoginListener.showHelpFindingConnectedEmail(); + } + }); + } + private void setupAlternativeButtons(LinearLayout googleLoginButton, LinearLayout siteLoginButton) { googleLoginButton.setOnClickListener(new OnClickListener() { @Override @@ -318,7 +400,7 @@ public void onClick(View view) { @Override protected void setupBottomButtons(Button secondaryButton, Button primaryButton) { - if (mShouldUseNewLayout) { + if (mShouldUseNewLayout || mOptionalSiteCredsLayout) { secondaryButton.setVisibility(View.GONE); primaryButton.setVisibility(View.GONE); } else { @@ -420,6 +502,8 @@ public void onCreate(Bundle savedInstanceState) { mIsSignupFromLoginEnabled = args.getBoolean(ARG_SIGNUP_FROM_LOGIN_ENABLED, false); mIsSiteLoginEnabled = args.getBoolean(ARG_SITE_LOGIN_ENABLED, true); mShouldUseNewLayout = args.getBoolean(ARG_SHOULD_USE_NEW_LAYOUT, false); + mOptionalSiteCredsLayout = args.getBoolean(ARG_OPTIONAL_SITE_CREDS_LAYOUT, false); + mHideTos = args.getBoolean(ARG_HIDE_TOS, false); } } @@ -468,7 +552,7 @@ public void onActivityCreated(@Nullable Bundle savedInstanceState) { public void onResume() { super.onResume(); mAnalyticsListener.emailFormScreenResumed(); - if (mShouldUseNewLayout) { + if (mShouldUseNewLayout || mOptionalSiteCredsLayout) { updateContinueButtonEnabledStatus(); } } @@ -491,6 +575,8 @@ public void onSaveInstanceState(Bundle outState) { protected void buildToolbar(Toolbar toolbar, ActionBar actionBar) { if (mShouldUseNewLayout) { actionBar.setTitle(R.string.get_started); + } else if (mOptionalSiteCredsLayout) { + actionBar.setTitle(R.string.log_in); } else { super.buildToolbar(toolbar, actionBar); } @@ -561,7 +647,7 @@ public void onTextChanged(CharSequence s, int start, int before, int count) { mEmailInput.setError(null); mIsSocialLogin = false; clearEmailError(); - if (mShouldUseNewLayout) { + if (mShouldUseNewLayout || mOptionalSiteCredsLayout) { updateContinueButtonEnabledStatus(); } } @@ -613,7 +699,18 @@ public void onAuthOptionsFetched(OnAuthOptionsFetched event) { switch (event.error.type) { case UNKNOWN_USER: // This email does not correspond to an existing account - if (mIsSignupFromLoginEnabled) { + + // Will be true if in the Woo app and currently in the WPcom login + // flow. We need to check this to know if we should display the + // 'No WPcom account found' error screen. + boolean isWooWPcomLoginFlow = false; + if (mLoginListener != null + && mLoginListener.getLoginMode() == LoginMode.WOO_LOGIN_MODE + && !mOptionalSiteCredsLayout) { + isWooWPcomLoginFlow = true; + } + + if (mIsSignupFromLoginEnabled || isWooWPcomLoginFlow) { if (mLoginListener != null) { mLoginListener.gotUnregisteredEmail(email); } diff --git a/libs/login/WordPressLoginFlow/src/main/java/org/wordpress/android/login/LoginEmailPasswordFragment.java b/libs/login/WordPressLoginFlow/src/main/java/org/wordpress/android/login/LoginEmailPasswordFragment.java index 9bb55e76d748..77a77d190199 100644 --- a/libs/login/WordPressLoginFlow/src/main/java/org/wordpress/android/login/LoginEmailPasswordFragment.java +++ b/libs/login/WordPressLoginFlow/src/main/java/org/wordpress/android/login/LoginEmailPasswordFragment.java @@ -125,6 +125,7 @@ public void onCreate(Bundle savedInstanceState) { @Override public void onResume() { super.onResume(); + mAnalyticsListener.emailPasswordFormScreenResumed(); updatePrimaryButtonEnabledStatus(); // connect to the Service. We'll receive updates via EventBus. diff --git a/libs/login/WordPressLoginFlow/src/main/java/org/wordpress/android/login/LoginListener.java b/libs/login/WordPressLoginFlow/src/main/java/org/wordpress/android/login/LoginListener.java index 0f04d4a9f33b..571c41d70769 100644 --- a/libs/login/WordPressLoginFlow/src/main/java/org/wordpress/android/login/LoginListener.java +++ b/libs/login/WordPressLoginFlow/src/main/java/org/wordpress/android/login/LoginListener.java @@ -16,6 +16,7 @@ interface SelfSignedSSLCallback { } LoginMode getLoginMode(); + void startOver(); // Login Email input callbacks void gotWpcomEmail(String email, boolean verifyEmail, @Nullable AuthOptions authOptions); diff --git a/libs/login/WordPressLoginFlow/src/main/java/org/wordpress/android/login/LoginMagicLinkRequestFragment.java b/libs/login/WordPressLoginFlow/src/main/java/org/wordpress/android/login/LoginMagicLinkRequestFragment.java index d8d23bdd2815..ccf6f94482cc 100644 --- a/libs/login/WordPressLoginFlow/src/main/java/org/wordpress/android/login/LoginMagicLinkRequestFragment.java +++ b/libs/login/WordPressLoginFlow/src/main/java/org/wordpress/android/login/LoginMagicLinkRequestFragment.java @@ -11,7 +11,6 @@ import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; -import android.view.ViewGroup.LayoutParams; import android.widget.Button; import android.widget.ImageView; import android.widget.TextView; @@ -162,21 +161,15 @@ public void onClick(View v) { // Design changes added to the Woo Magic link sign-in if (mVerifyMagicLinkEmail) { - View avatarContainerView = view.findViewById(R.id.avatar_container); - - LayoutParams lp = avatarContainerView.getLayoutParams(); - lp.width = LayoutParams.WRAP_CONTENT; - lp.height = getContext().getResources().getDimensionPixelSize(R.dimen.magic_link_sent_illustration_sz); - avatarContainerView.setLayoutParams(lp); - - mAvatarProgressBar.setVisibility(View.GONE); - avatarView.setImageResource(R.drawable.login_email_alert); + AvatarHelper.loadAvatarFromEmail(this, mEmail, avatarView, new AvatarRequestListener() { + @Override public void onRequestFinished() { + mAvatarProgressBar.setVisibility(View.GONE); + } + }); TextView labelTextView = view.findViewById(R.id.label); labelTextView.setText(Html.fromHtml(String.format(getResources().getString( R.string.login_site_credentials_magic_link_label), mEmail))); - - mRequestMagicLinkButton.setText(getString(R.string.send_verification_email)); } else { AvatarHelper.loadAvatarFromEmail(this, mEmail, avatarView, new AvatarRequestListener() { @Override public void onRequestFinished() { @@ -224,12 +217,23 @@ public void onActivityCreated(@Nullable Bundle savedInstanceState) { getActivity().setTitle(R.string.magic_link_login_title); } + @Override public void onResume() { + super.onResume(); + mAnalyticsListener.magicLinkRequestScreenResumed(); + } + @Override public void onDetach() { super.onDetach(); mLoginListener = null; } + @Override public void onDestroyView() { + mRequestMagicLinkButton = null; + + super.onDestroyView(); + } + @Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); diff --git a/libs/login/WordPressLoginFlow/src/main/java/org/wordpress/android/login/LoginMagicLinkSentFragment.java b/libs/login/WordPressLoginFlow/src/main/java/org/wordpress/android/login/LoginMagicLinkSentFragment.java index 12594a21c17c..54fb001e851b 100644 --- a/libs/login/WordPressLoginFlow/src/main/java/org/wordpress/android/login/LoginMagicLinkSentFragment.java +++ b/libs/login/WordPressLoginFlow/src/main/java/org/wordpress/android/login/LoginMagicLinkSentFragment.java @@ -137,6 +137,11 @@ public void onAttach(Context context) { } } + @Override public void onResume() { + super.onResume(); + mAnalyticsListener.magicLinkSentScreenResumed(); + } + @Override public void onDetach() { super.onDetach(); diff --git a/libs/login/WordPressLoginFlow/src/main/java/org/wordpress/android/login/LoginSiteAddressFragment.java b/libs/login/WordPressLoginFlow/src/main/java/org/wordpress/android/login/LoginSiteAddressFragment.java index 767ae90b256b..9d98a57c99a3 100644 --- a/libs/login/WordPressLoginFlow/src/main/java/org/wordpress/android/login/LoginSiteAddressFragment.java +++ b/libs/login/WordPressLoginFlow/src/main/java/org/wordpress/android/login/LoginSiteAddressFragment.java @@ -177,6 +177,12 @@ public void onActivityCreated(@Nullable Bundle savedInstanceState) { }); } + @Override public void onResume() { + super.onResume(); + + mAnalyticsListener.siteAddressFormScreenResumed(); + } + @Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); @@ -185,8 +191,10 @@ public void onSaveInstanceState(Bundle outState) { } @Override public void onDestroyView() { - super.onDestroyView(); mLoginSiteAddressValidator.dispose(); + mSiteAddressInput = null; + + super.onDestroyView(); } protected void discover() { diff --git a/libs/login/WordPressLoginFlow/src/main/java/org/wordpress/android/login/LoginUsernamePasswordFragment.java b/libs/login/WordPressLoginFlow/src/main/java/org/wordpress/android/login/LoginUsernamePasswordFragment.java index c620d0eef349..2e324bb5cace 100644 --- a/libs/login/WordPressLoginFlow/src/main/java/org/wordpress/android/login/LoginUsernamePasswordFragment.java +++ b/libs/login/WordPressLoginFlow/src/main/java/org/wordpress/android/login/LoginUsernamePasswordFragment.java @@ -198,6 +198,20 @@ protected void onHelp() { } } + @Override public void onDestroyView() { + if (mPasswordInput != null) { + mPasswordInput.setOnEditorCommitListener(null); + mPasswordInput = null; + } + if (mUsernameInput != null) { + mUsernameInput.setOnEditorCommitListener(null); + mUsernameInput = null; + } + mScrollView = null; + + super.onDestroyView(); + } + @Override public void onAttach(Context context) { AndroidSupportInjection.inject(this); @@ -256,6 +270,7 @@ public void onSaveInstanceState(Bundle outState) { @Override public void onResume() { super.onResume(); + mAnalyticsListener.usernamePasswordScreenResumed(); updatePrimaryButtonEnabledStatus(); } @@ -611,7 +626,7 @@ public void onSiteChanged(OnSiteChanged event) { return; } - if (mLoginListener.getLoginMode() == LoginMode.WOO_LOGIN_MODE) { + if (!mIsWpcom && mLoginListener.getLoginMode() == LoginMode.WOO_LOGIN_MODE) { SiteModel lastAddedXMLRPCSite = SiteUtils.getXMLRPCSiteByUrl(mSiteStore, mInputSiteAddress); if (lastAddedXMLRPCSite != null) { // the wp.getOptions endpoint is already called @@ -672,3 +687,4 @@ public void onProfileFetched(OnProfileFetched event) { finishLogin(); } } + diff --git a/libs/login/WordPressLoginFlow/src/main/java/org/wordpress/android/login/SignupEmailFragment.java b/libs/login/WordPressLoginFlow/src/main/java/org/wordpress/android/login/SignupEmailFragment.java index c6c69c5b5023..8f5c3349772e 100644 --- a/libs/login/WordPressLoginFlow/src/main/java/org/wordpress/android/login/SignupEmailFragment.java +++ b/libs/login/WordPressLoginFlow/src/main/java/org/wordpress/android/login/SignupEmailFragment.java @@ -218,6 +218,13 @@ public void onDetach() { mLoginListener = null; } + @Override + public void onDestroyView() { + mEmailInput = null; + + super.onDestroyView(); + } + private String getCleanedEmail() { return EditTextUtils.getText(mEmailInput.getEditText()).trim(); } diff --git a/libs/login/WordPressLoginFlow/src/main/res/layout/login_email_optional_site_creds_screen.xml b/libs/login/WordPressLoginFlow/src/main/res/layout/login_email_optional_site_creds_screen.xml new file mode 100644 index 000000000000..756018137097 --- /dev/null +++ b/libs/login/WordPressLoginFlow/src/main/res/layout/login_email_optional_site_creds_screen.xml @@ -0,0 +1,87 @@ + + + + + + + + + + + + + + + + + diff --git a/libs/login/WordPressLoginFlow/src/main/res/layout/login_email_screen.xml b/libs/login/WordPressLoginFlow/src/main/res/layout/login_email_screen.xml index 040074a6960a..ba182e221a8c 100644 --- a/libs/login/WordPressLoginFlow/src/main/res/layout/login_email_screen.xml +++ b/libs/login/WordPressLoginFlow/src/main/res/layout/login_email_screen.xml @@ -1,104 +1,141 @@ - + android:layout_height="match_parent"> - + android:layout_height="wrap_content"> - - - - + - + + - + - + - + android:layout_height="0dp" + android:layout_weight="1" + app:layout_constraintTop_toBottomOf="@+id/login_continue_button" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintEnd_toEndOf="parent"/> - + android:layout_marginBottom="@dimen/margin_small_medium" + app:layout_constraintTop_toBottomOf="@+id/spacer" + app:layout_constraintBottom_toTopOf="@+id/continue_with_google" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintVertical_bias="1.0"> - + - + - + + + + + + + - + diff --git a/libs/login/WordPressLoginFlow/src/main/res/layout/login_magic_link_sent_screen.xml b/libs/login/WordPressLoginFlow/src/main/res/layout/login_magic_link_sent_screen.xml index 504ddb57b725..f9192b18a9eb 100644 --- a/libs/login/WordPressLoginFlow/src/main/res/layout/login_magic_link_sent_screen.xml +++ b/libs/login/WordPressLoginFlow/src/main/res/layout/login_magic_link_sent_screen.xml @@ -6,6 +6,7 @@ 20dp 92dp 4dp - 120dp 24dp 9dp diff --git a/libs/login/WordPressLoginFlow/src/main/res/values/strings.xml b/libs/login/WordPressLoginFlow/src/main/res/values/strings.xml index 8677081533d5..3bc927d63110 100644 --- a/libs/login/WordPressLoginFlow/src/main/res/values/strings.xml +++ b/libs/login/WordPressLoginFlow/src/main/res/values/strings.xml @@ -6,7 +6,6 @@ Send link Send link by email Create account - Send verification email Enter your password instead Or type your password Username @@ -55,6 +54,7 @@ Your site address appears in the bar at the top of the screen when you visit your site in Chrome. Need more help? Find your site address + Find your connected email Checking site address Error while adding site. Error code: %s Log in to WordPress.com to access the post. @@ -67,6 +67,7 @@ Can\'t detect your email client app Log in with Google. Continue with Google + Continue with store credentials or Close There\'s no WordPress.com account matching this Google account. diff --git a/libs/stories-android b/libs/stories-android index b05f8197dbc1..0946cae3a775 160000 --- a/libs/stories-android +++ b/libs/stories-android @@ -1 +1 @@ -Subproject commit b05f8197dbc144fc024379c462c76efbb7c5440c +Subproject commit 0946cae3a775ea9c49b2ceb57324bd4f4ce228d9 diff --git a/libs/utils/.circleci/config.yml b/libs/utils/.circleci/config.yml index a54887b167e1..b863a75292c5 100644 --- a/libs/utils/.circleci/config.yml +++ b/libs/utils/.circleci/config.yml @@ -12,7 +12,7 @@ commands: jobs: Lint: - executor: + executor: name: android/default api-version: "27" steps: @@ -24,8 +24,20 @@ jobs: command: ./gradlew --stacktrace lint checkstyle - android/save-gradle-cache - android/save-lint-results + Test: + executor: + name: android/default + api-version: "27" + steps: + - checkout + - copy-gradle-properties + - android/restore-gradle-cache + - run: + name: Test + command: ./gradlew --stacktrace test + - android/save-gradle-cache Build: - executor: + executor: name: android/default api-version: "27" steps: @@ -41,4 +53,7 @@ workflows: WordPress-Utils-Android: jobs: - Lint - - Build + - Test + - Build: + requires: + - Test diff --git a/libs/utils/WordPressUtils/build.gradle b/libs/utils/WordPressUtils/build.gradle index ed07b1e0e290..5cb460031f40 100644 --- a/libs/utils/WordPressUtils/build.gradle +++ b/libs/utils/WordPressUtils/build.gradle @@ -1,5 +1,5 @@ buildscript { - ext.kotlinVersion = '1.3.61' + ext.kotlinVersion = '1.4.10' ext.kotlin_ktx_version = '1.2.0' repositories { @@ -111,6 +111,7 @@ project.afterEvaluate { publishing { publications { UtilsPublication(MavenPublication) { + from components.release groupId 'org.wordpress' artifactId 'utils' version android.defaultConfig.versionName diff --git a/libs/utils/WordPressUtils/src/main/java/org/wordpress/android/util/MediaUtils.java b/libs/utils/WordPressUtils/src/main/java/org/wordpress/android/util/MediaUtils.java index d052d0758dc1..88ec0f53f755 100644 --- a/libs/utils/WordPressUtils/src/main/java/org/wordpress/android/util/MediaUtils.java +++ b/libs/utils/WordPressUtils/src/main/java/org/wordpress/android/util/MediaUtils.java @@ -169,6 +169,10 @@ public static boolean isInMediaStore(Uri mediaUri) { return mediaUri != null && mediaUri.toString().startsWith("content://media/"); } + public static boolean isFile(Uri mediaUri) { + return mediaUri != null && mediaUri.toString().startsWith("file://"); + } + public static @Nullable String getFilenameFromURI(Context context, Uri uri) { Cursor cursor = context.getContentResolver().query(uri, new String[]{OpenableColumns.DISPLAY_NAME}, null, null, null); @@ -182,6 +186,10 @@ public static boolean isInMediaStore(Uri mediaUri) { result = cursor.getString(columnIndexDisplayName); } return result; + } catch (IllegalArgumentException exception) { + // This exception happens when Google Photos tries to retrieve latitude for videos even if it's not + // a requested column + return null; } finally { if (cursor != null) { cursor.close(); diff --git a/libs/utils/gradle.properties-example b/libs/utils/gradle.properties-example new file mode 100644 index 000000000000..5bac8ac50462 --- /dev/null +++ b/libs/utils/gradle.properties-example @@ -0,0 +1 @@ +android.useAndroidX=true