diff --git a/README.md b/README.md
index 410d386bb9c..811eac96ce8 100644
--- a/README.md
+++ b/README.md
@@ -5,8 +5,8 @@
A Jetpack-powered mobile app for WooCommerce.
-
-
+
+
@@ -38,7 +38,7 @@
$ cd woocommerce-android
```
-1. Create a new `~/.configure/woocommerce-android/secrets.properties` file. See the [Configuration Files](docs/project-overview.md#configuration-files) section for a breakdown of the properties.
+1. Copy `defaults.properties` to the secrets directory: `cp defaults.properties ~/.configure/woocommerce-android/secrets/secrets.properties`. See the [Configuration Files](docs/project-overview.md#configuration-files) section for a breakdown of the properties.
1. Generate the developer oauth2 tokens. These values get copied into the `~/.configure/woocommerce-android/secrets.properties` file in the next step. See the [OAuth2 Authentication](docs/project-overview.md#oauth2-authentication) section for details.
1. In Android Studio, open the project from the local repository. This will auto-generate `local.properties` with the SDK location.
1. Optional: Go to Tools → Device Manager and create an emulated device.
diff --git a/RELEASE-NOTES.txt b/RELEASE-NOTES.txt
index ec0483b2ff5..1c7e864c2ae 100644
--- a/RELEASE-NOTES.txt
+++ b/RELEASE-NOTES.txt
@@ -4,9 +4,16 @@
21.3
-----
- [*] "One time shipping" label in Product Subscriptions now matches its availability state correctly. [https://github.com/woocommerce/woocommerce-android/pull/13021]
+- [*] "One time shipping" label should not be shown in Simple product after conversion from Subscriptions product. [https://github.com/woocommerce/woocommerce-android/pull/13032]
+- [*] Fixed a bug related to incorrect Shipping settings in Product details when converting from Subscriptions to Simple product. [https://github.com/woocommerce/woocommerce-android/pull/13035]
- [Internal] Refactored IPP Payment flow to allow customizing payment collection UI in POS [https://github.com/woocommerce/woocommerce-android/pull/13014]
- [*] Blaze Campaign Intro screen now offers creating a new product if the site has no products yet [https://github.com/woocommerce/woocommerce-android/pull/13001]
+- [Internal] Updated androidx-lifecycle to 2.8.7. [https://github.com/woocommerce/woocommerce-android/pull/13046/]
- [*] When entering a wrong WordPress.com account for login, retrying will bring the step back to the email input screen [https://github.com/woocommerce/woocommerce-android/pull/13024]
+- [Internal] Replaces a function in WCSSRExt that then removes the need for commons-io dependency. [https://github.com/woocommerce/woocommerce-android/pull/13073]
+- [Internal] Removes coupons feature announcement banner [https://github.com/woocommerce/woocommerce-android/pull/13077]
+
+- [Internal] Updated androidx-compose-bom to 2024.09.00 [https://github.com/woocommerce/woocommerce-android/pull/13060]
-----
21.2
diff --git a/WooCommerce/build.gradle b/WooCommerce/build.gradle
index 8959fc8e102..4522df7b4f9 100644
--- a/WooCommerce/build.gradle
+++ b/WooCommerce/build.gradle
@@ -429,7 +429,6 @@ dependencies {
// ViewModel and LiveData
implementation(libs.androidx.fragment.ktx)
- implementation(libs.androidx.activity.ktx)
implementation(libs.androidx.lifecycle.viewmodel.savedstate)
implementation(libs.androidx.lifecycle.process)
@@ -442,7 +441,6 @@ dependencies {
testImplementation(libs.cashapp.turbine)
implementation(libs.apache.commons.text)
- implementation(libs.commons.io)
implementation(libs.tinder.statemachine)
diff --git a/WooCommerce/src/androidTest/kotlin/com/woocommerce/android/e2e/screens/orders/SingleOrderScreen.kt b/WooCommerce/src/androidTest/kotlin/com/woocommerce/android/e2e/screens/orders/SingleOrderScreen.kt
index 57e19b9ddee..3732a78167b 100644
--- a/WooCommerce/src/androidTest/kotlin/com/woocommerce/android/e2e/screens/orders/SingleOrderScreen.kt
+++ b/WooCommerce/src/androidTest/kotlin/com/woocommerce/android/e2e/screens/orders/SingleOrderScreen.kt
@@ -6,7 +6,6 @@ import androidx.test.espresso.matcher.ViewMatchers
import androidx.test.espresso.matcher.ViewMatchers.hasDescendant
import androidx.test.espresso.matcher.ViewMatchers.isDisplayed
import androidx.test.espresso.matcher.ViewMatchers.withId
-import androidx.test.espresso.matcher.ViewMatchers.withParentIndex
import androidx.test.espresso.matcher.ViewMatchers.withText
import com.woocommerce.android.R
import com.woocommerce.android.e2e.helpers.util.NestedScrollViewExtension
@@ -17,7 +16,7 @@ import org.hamcrest.Matchers
class SingleOrderScreen : Screen(R.id.orderDetail_container) {
fun goBackToOrdersScreen(): OrderListScreen {
- if (isElementDisplayed(R.id.orderDetail_container)) {
+ if (!isElementDisplayed(R.id.order_list_view_root) && isElementDisplayed(R.id.orderDetail_container)) {
pressBack()
}
@@ -44,7 +43,9 @@ class SingleOrderScreen : Screen(R.id.orderDetail_container) {
}
fun assertOrderId(orderId: Int): SingleOrderScreen {
- Espresso.onView(Matchers.allOf(withId(R.id.toolbar), withParentIndex(0)))
+ Espresso.onView(
+ Matchers.allOf(withId(R.id.toolbar), ViewMatchers.isDescendantOfA(withId(R.id.orderRefreshLayout)))
+ )
.check(ViewAssertions.matches(hasDescendant(withText("Order #$orderId"))))
.check(ViewAssertions.matches(isDisplayed()))
return this
diff --git a/WooCommerce/src/androidTest/kotlin/com/woocommerce/android/e2e/screens/products/ProductListScreen.kt b/WooCommerce/src/androidTest/kotlin/com/woocommerce/android/e2e/screens/products/ProductListScreen.kt
index e293154f5b8..14a70b395bd 100644
--- a/WooCommerce/src/androidTest/kotlin/com/woocommerce/android/e2e/screens/products/ProductListScreen.kt
+++ b/WooCommerce/src/androidTest/kotlin/com/woocommerce/android/e2e/screens/products/ProductListScreen.kt
@@ -1,7 +1,9 @@
package com.woocommerce.android.e2e.screens.products
+import androidx.compose.ui.test.junit4.ComposeTestRule
+import androidx.compose.ui.test.onNodeWithText
+import androidx.compose.ui.test.performClick
import androidx.test.espresso.Espresso
-import androidx.test.espresso.Espresso.onView
import androidx.test.espresso.action.ViewActions.click
import androidx.test.espresso.assertion.ViewAssertions.matches
import androidx.test.espresso.matcher.ViewMatchers
@@ -16,8 +18,7 @@ import org.hamcrest.Matchers
import org.hamcrest.Matchers.allOf
import org.hamcrest.Matchers.instanceOf
-class ProductListScreen : Screen {
- constructor() : super(R.id.productsRecycler)
+class ProductListScreen : Screen(R.id.productsRecycler) {
fun scrollToProduct(productTitle: String): ProductListScreen {
scrollToListItem(productTitle, R.id.productsRecycler)
@@ -35,6 +36,12 @@ class ProductListScreen : Screen {
return this
}
+ fun tapOnAddManually(composeTestRule: ComposeTestRule): ProductListScreen {
+ val buttonText = getTranslatedString(R.string.product_creation_ai_entry_sheet_manual_option_title)
+ composeTestRule.onNodeWithText(buttonText).performClick()
+ return this
+ }
+
fun goBackToProductList(): ProductListScreen {
while (!isElementDisplayed(R.id.productsRecycler)) {
pressBack()
@@ -114,8 +121,8 @@ class ProductListScreen : Screen {
}
fun leaveSearchMode(): ProductListScreen {
- var isProductDetailsErrorDisplayed = Screen.isElementDisplayed(R.id.productDetailsErrorImage)
- var isSearchTextBarDisplayed = Screen.isElementDisplayed(androidx.appcompat.R.id.search_src_text)
+ val isProductDetailsErrorDisplayed = Screen.isElementDisplayed(R.id.productDetailsErrorImage)
+ val isSearchTextBarDisplayed = Screen.isElementDisplayed(androidx.appcompat.R.id.search_src_text)
if (isProductDetailsErrorDisplayed && isSearchTextBarDisplayed) {
clearSearchBar(androidx.appcompat.R.id.search_src_text)
diff --git a/WooCommerce/src/androidTest/kotlin/com/woocommerce/android/e2e/tests/screenshot/ScreenshotTest.kt b/WooCommerce/src/androidTest/kotlin/com/woocommerce/android/e2e/tests/screenshot/ScreenshotTest.kt
index af704a04dba..1dca2a95827 100644
--- a/WooCommerce/src/androidTest/kotlin/com/woocommerce/android/e2e/tests/screenshot/ScreenshotTest.kt
+++ b/WooCommerce/src/androidTest/kotlin/com/woocommerce/android/e2e/tests/screenshot/ScreenshotTest.kt
@@ -121,6 +121,7 @@ class ScreenshotTest : TestBase(failOnUnmatchedWireMockRequests = false) {
TabNavComponent()
.gotoProductsScreen()
.tapOnCreateProduct()
+ .tapOnAddManually(composeTestRule)
.thenTakeScreenshot("add-product")
.goBackToProductList()
diff --git a/WooCommerce/src/androidTest/kotlin/com/woocommerce/android/e2e/tests/ui/OrdersRealAPI.kt b/WooCommerce/src/androidTest/kotlin/com/woocommerce/android/e2e/tests/ui/OrdersRealAPI.kt
index e3c9e31b92e..dd4c4154345 100644
--- a/WooCommerce/src/androidTest/kotlin/com/woocommerce/android/e2e/tests/ui/OrdersRealAPI.kt
+++ b/WooCommerce/src/androidTest/kotlin/com/woocommerce/android/e2e/tests/ui/OrdersRealAPI.kt
@@ -21,7 +21,6 @@ import org.junit.After
import org.junit.AfterClass
import org.junit.Before
import org.junit.BeforeClass
-import org.junit.Ignore
import org.junit.Rule
import org.junit.Test
@@ -71,11 +70,7 @@ class OrdersRealAPI : TestBase() {
@After
fun tearDown() {
- OrderListScreen()
- .leaveOrClearSearchMode()
-
- WelcomeScreen
- .logoutIfNeeded(composeTestRule)
+ WelcomeScreen.logoutIfNeeded(composeTestRule)
}
@Retry(numberOfTimes = 1)
@@ -122,9 +117,7 @@ class OrdersRealAPI : TestBase() {
.assertOrdersCount(2)
}
- @Retry(numberOfTimes = 1)
@Test
- @Ignore
fun e2eRealApiOrderDetails() {
try {
OrderListScreen()
diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/AppPrefs.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/AppPrefs.kt
index 0b0a4c61232..5dc87271cfc 100644
--- a/WooCommerce/src/main/kotlin/com/woocommerce/android/AppPrefs.kt
+++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/AppPrefs.kt
@@ -6,6 +6,7 @@ import android.annotation.SuppressLint
import android.content.Context
import android.content.SharedPreferences
import android.content.SharedPreferences.Editor
+import android.content.SharedPreferences.OnSharedPreferenceChangeListener
import androidx.preference.PreferenceManager
import com.woocommerce.android.AppPrefs.CardReaderOnboardingStatus.CARD_READER_ONBOARDING_NOT_COMPLETED
import com.woocommerce.android.AppPrefs.CardReaderOnboardingStatus.valueOf
@@ -39,7 +40,7 @@ import com.woocommerce.android.notifications.NotificationChannelType
import com.woocommerce.android.tools.SelectedSite
import com.woocommerce.android.ui.payments.cardreader.onboarding.PersistentOnboardingData
import com.woocommerce.android.ui.payments.cardreader.onboarding.PluginType
-import com.woocommerce.android.ui.prefs.DeveloperOptionsViewModel.DeveloperOptionsViewState.UpdateOptions
+import com.woocommerce.android.ui.prefs.developer.DeveloperOptionsViewModel.DeveloperOptionsViewState.UpdateFrequencyUiModel
import com.woocommerce.android.ui.prefs.domain.DomainFlowSource
import com.woocommerce.android.ui.products.ProductType
import com.woocommerce.android.ui.products.ai.AiTone
@@ -47,6 +48,9 @@ import com.woocommerce.android.ui.promobanner.PromoBannerType
import com.woocommerce.android.util.ThemeOption
import com.woocommerce.android.util.ThemeOption.DEFAULT
import com.woocommerce.commons.prefs.PreferenceUtils
+import kotlinx.coroutines.channels.awaitClose
+import kotlinx.coroutines.flow.Flow
+import kotlinx.coroutines.flow.callbackFlow
import java.util.Calendar
import java.util.Date
@@ -260,7 +264,7 @@ object AppPrefs {
set(value) = setBoolean(DeletablePrefKey.ENABLE_SIMULATED_INTERAC, value)
var updateReaderOptionSelected: String
- get() = getString(UPDATE_SIMULATED_READER_OPTION, UpdateOptions.RANDOM.toString())
+ get() = getString(UPDATE_SIMULATED_READER_OPTION, UpdateFrequencyUiModel.RANDOM.toString())
set(option) = setString(UPDATE_SIMULATED_READER_OPTION, option)
var isEUShippingNoticeDismissed: Boolean
@@ -1276,6 +1280,22 @@ object AppPrefs {
fun exists(key: PrefKey) = getPreferences().contains(key.toString())
+ /**
+ * Observes changes to the preferences
+ */
+ fun observePrefs(): Flow {
+ return callbackFlow {
+ val listener = OnSharedPreferenceChangeListener { _, _ ->
+ trySend(Unit)
+ }
+ getPreferences().registerOnSharedPreferenceChangeListener(listener)
+
+ awaitClose {
+ getPreferences().unregisterOnSharedPreferenceChangeListener(listener)
+ }
+ }
+ }
+
/**
* Methods used to store values in SharedPreferences that are not backed up
* when app is installed/uninstalled. Currently, only used for storing appVersionCode.
diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/AppPrefsWrapper.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/AppPrefsWrapper.kt
index 792e871d6a0..2c8fdc3f07d 100644
--- a/WooCommerce/src/main/kotlin/com/woocommerce/android/AppPrefsWrapper.kt
+++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/AppPrefsWrapper.kt
@@ -1,14 +1,11 @@
package com.woocommerce.android
-import android.content.SharedPreferences.OnSharedPreferenceChangeListener
import com.woocommerce.android.notifications.NotificationChannelType
import com.woocommerce.android.ui.payments.cardreader.onboarding.PersistentOnboardingData
import com.woocommerce.android.ui.payments.cardreader.onboarding.PluginType
import com.woocommerce.android.ui.prefs.domain.DomainFlowSource
import com.woocommerce.android.ui.promobanner.PromoBannerType
-import kotlinx.coroutines.channels.awaitClose
import kotlinx.coroutines.flow.Flow
-import kotlinx.coroutines.flow.callbackFlow
import javax.inject.Inject
class AppPrefsWrapper @Inject constructor() {
@@ -325,18 +322,7 @@ class AppPrefsWrapper @Inject constructor() {
/**
* Observes changes to the preferences
*/
- fun observePrefs(): Flow {
- return callbackFlow {
- val listener = OnSharedPreferenceChangeListener { _, _ ->
- trySend(Unit)
- }
- AppPrefs.getPreferences().registerOnSharedPreferenceChangeListener(listener)
-
- awaitClose {
- AppPrefs.getPreferences().unregisterOnSharedPreferenceChangeListener(listener)
- }
- }
- }
+ fun observePrefs(): Flow = AppPrefs.observePrefs()
fun updateOnboardingCompletedStatus(siteId: Int, completed: Boolean) {
AppPrefs.updateOnboardingCompletedStatus(siteId, completed)
diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/AppUrls.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/AppUrls.kt
index db28fd289cf..fe58f2decbf 100644
--- a/WooCommerce/src/main/kotlin/com/woocommerce/android/AppUrls.kt
+++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/AppUrls.kt
@@ -61,9 +61,6 @@ object AppUrls {
"https://automattic.survey.fm/order-creation-shipping-lines-survey-production"
}
- // Will be used later when the feature is fully launched.
- const val COUPONS_SURVEY = "https://automattic.survey.fm/woo-app-coupon-management-production"
-
const val WOOCOMMERCE_USER_ROLES =
"https://woocommerce.com/posts/a-guide-to-woocommerce-user-roles-permissions-and-security/"
const val SHIPPING_LABEL_CUSTOMS_ITN = "https://pe.usps.com/text/imm/immc5_010.htm"
diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/analytics/AnalyticsEvent.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/analytics/AnalyticsEvent.kt
index 28c504ac55b..4fe88f817f7 100644
--- a/WooCommerce/src/main/kotlin/com/woocommerce/android/analytics/AnalyticsEvent.kt
+++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/analytics/AnalyticsEvent.kt
@@ -167,10 +167,7 @@ enum class AnalyticsEvent(override val siteless: Boolean = false) : IAnalyticsEv
DASHBOARD_SHARE_YOUR_STORE_BUTTON_TAPPED,
DASHBOARD_MAIN_STATS_DATE,
DASHBOARD_MAIN_STATS_LOADED,
- DASHBOARD_TOP_PERFORMERS_DATE,
DASHBOARD_TOP_PERFORMERS_LOADED,
- DASHBOARD_NEW_STATS_REVERTED_BANNER_DISMISS_TAPPED,
- DASHBOARD_NEW_STATS_REVERTED_BANNER_LEARN_MORE_TAPPED,
DASHBOARD_WAITING_TIME_LOADED,
DASHBOARD_SEE_MORE_ANALYTICS_TAPPED,
DASHBOARD_STORE_TIMEZONE_DIFFER_FROM_DEVICE,
@@ -178,7 +175,6 @@ enum class AnalyticsEvent(override val siteless: Boolean = false) : IAnalyticsEv
STATS_UNEXPECTED_FORMAT,
DASHBOARD_STATS_CUSTOM_RANGE_ADD_BUTTON_TAPPED,
DASHBOARD_STATS_CUSTOM_RANGE_CONFIRMED,
- DASHBOARD_STATS_CUSTOM_RANGE_TAB_SELECTED,
DASHBOARD_STATS_CUSTOM_RANGE_EDIT_BUTTON_TAPPED,
DASHBOARD_STATS_CUSTOM_RANGE_INTERACTED,
DYNAMIC_DASHBOARD_EDIT_LAYOUT_BUTTON_TAPPED,
diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/analytics/AnalyticsTracker.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/analytics/AnalyticsTracker.kt
index cefa336c1f8..4b4661f6b3d 100644
--- a/WooCommerce/src/main/kotlin/com/woocommerce/android/analytics/AnalyticsTracker.kt
+++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/analytics/AnalyticsTracker.kt
@@ -359,7 +359,6 @@ class AnalyticsTracker private constructor(
const val VALUE_FEEDBACK_GIVEN = "gave_feedback"
const val VALUE_SHIPPING_LABELS_M4_FEEDBACK = "shipping_labels_m4"
const val VALUE_PRODUCT_ADDONS_FEEDBACK = "product_addons"
- const val VALUE_COUPONS_FEEDBACK = "coupons"
const val VALUE_ANALYTICS_HUB_FEEDBACK = "analytics_hub"
const val VALUE_ORDER_SHIPPING_LINES_FEEDBACK = "order_shipping_lines"
const val VALUE_STATE_ON = "on"
diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/datastore/DashboardDataStoreModule.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/datastore/DashboardDataStoreModule.kt
index f6ae4cdf078..2fd5755091f 100644
--- a/WooCommerce/src/main/kotlin/com/woocommerce/android/datastore/DashboardDataStoreModule.kt
+++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/datastore/DashboardDataStoreModule.kt
@@ -3,7 +3,9 @@ package com.woocommerce.android.datastore
import android.content.Context
import androidx.datastore.core.DataStore
import androidx.datastore.core.DataStoreFactory
+import androidx.datastore.core.handlers.ReplaceFileCorruptionHandler
import androidx.datastore.dataStoreFile
+import com.automattic.android.tracks.crashlogging.CrashLogging
import com.woocommerce.android.di.SiteComponent
import com.woocommerce.android.di.SiteCoroutineScope
import com.woocommerce.android.di.SiteScope
@@ -23,12 +25,17 @@ object DashboardDataStoreModule {
@SiteScope
fun provideDashboardDataStore(
appContext: Context,
+ crashLogging: CrashLogging,
@SiteCoroutineScope siteCoroutineScope: CoroutineScope,
site: SiteModel
): DataStore = DataStoreFactory.create(
produceFile = {
appContext.dataStoreFile("dashboard_configuration_${site.id}")
},
+ corruptionHandler = ReplaceFileCorruptionHandler {
+ crashLogging.recordEvent("Corrupted data store. DataStore Type: DASHBOARD")
+ DashboardDataModel.getDefaultInstance()
+ },
scope = CoroutineScope(siteCoroutineScope.coroutineContext + Dispatchers.IO),
serializer = DashboardSerializer
)
diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/datastore/DataStoreModule.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/datastore/DataStoreModule.kt
index 2d8dee4c113..ce8c27e25b4 100644
--- a/WooCommerce/src/main/kotlin/com/woocommerce/android/datastore/DataStoreModule.kt
+++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/datastore/DataStoreModule.kt
@@ -3,12 +3,17 @@ package com.woocommerce.android.datastore
import android.content.Context
import androidx.datastore.core.DataStore
import androidx.datastore.core.DataStoreFactory
+import androidx.datastore.core.handlers.ReplaceFileCorruptionHandler
import androidx.datastore.preferences.core.PreferenceDataStoreFactory
import androidx.datastore.preferences.core.Preferences
+import androidx.datastore.preferences.core.emptyPreferences
import androidx.datastore.preferences.preferencesDataStoreFile
+import com.automattic.android.tracks.crashlogging.CrashLogging
import com.woocommerce.android.datastore.DataStoreType.ANALYTICS_CONFIGURATION
import com.woocommerce.android.datastore.DataStoreType.ANALYTICS_UI_CACHE
+import com.woocommerce.android.datastore.DataStoreType.COUPONS
import com.woocommerce.android.datastore.DataStoreType.DASHBOARD_STATS
+import com.woocommerce.android.datastore.DataStoreType.LAST_UPDATE
import com.woocommerce.android.datastore.DataStoreType.TOP_PERFORMER_PRODUCTS
import com.woocommerce.android.datastore.DataStoreType.TRACKER
import com.woocommerce.android.di.AppCoroutineScope
@@ -30,11 +35,16 @@ class DataStoreModule {
@DataStoreQualifier(TRACKER)
fun provideTrackerDataStore(
appContext: Context,
+ crashLogging: CrashLogging,
@AppCoroutineScope appCoroutineScope: CoroutineScope
): DataStore = PreferenceDataStoreFactory.create(
produceFile = {
appContext.preferencesDataStoreFile("tracker")
},
+ corruptionHandler = ReplaceFileCorruptionHandler {
+ crashLogging.recordEvent("Corrupted data store. DataStore Type: ${TRACKER.name}")
+ emptyPreferences()
+ },
scope = CoroutineScope(appCoroutineScope.coroutineContext + Dispatchers.IO)
)
@@ -43,11 +53,16 @@ class DataStoreModule {
@DataStoreQualifier(ANALYTICS_UI_CACHE)
fun provideAnalyticsDataStore(
appContext: Context,
+ crashLogging: CrashLogging,
@AppCoroutineScope appCoroutineScope: CoroutineScope
): DataStore = PreferenceDataStoreFactory.create(
produceFile = {
appContext.preferencesDataStoreFile("analytics")
},
+ corruptionHandler = ReplaceFileCorruptionHandler {
+ crashLogging.recordEvent("Corrupted data store. DataStore Type: ${ANALYTICS_UI_CACHE.name}")
+ emptyPreferences()
+ },
scope = CoroutineScope(appCoroutineScope.coroutineContext + Dispatchers.IO)
)
@@ -56,11 +71,16 @@ class DataStoreModule {
@DataStoreQualifier(ANALYTICS_CONFIGURATION)
fun provideAnalyticsConfigurationDataStore(
appContext: Context,
+ crashLogging: CrashLogging,
@AppCoroutineScope appCoroutineScope: CoroutineScope
): DataStore = PreferenceDataStoreFactory.create(
produceFile = {
appContext.preferencesDataStoreFile("analytics_configuration")
},
+ corruptionHandler = ReplaceFileCorruptionHandler {
+ crashLogging.recordEvent("Corrupted data store. DataStore Type: ${ANALYTICS_CONFIGURATION.name}")
+ emptyPreferences()
+ },
scope = CoroutineScope(appCoroutineScope.coroutineContext + Dispatchers.IO)
)
@@ -69,11 +89,16 @@ class DataStoreModule {
@DataStoreQualifier(DASHBOARD_STATS)
fun provideCustomDateRangeDataStore(
appContext: Context,
+ crashLogging: CrashLogging,
@AppCoroutineScope appCoroutineScope: CoroutineScope
): DataStore = DataStoreFactory.create(
produceFile = {
appContext.preferencesDataStoreFile("custom_date_range_configuration")
},
+ corruptionHandler = ReplaceFileCorruptionHandler {
+ crashLogging.recordEvent("Corrupted data store. DataStore Type: ${DASHBOARD_STATS.name}")
+ CustomDateRange.getDefaultInstance()
+ },
scope = CoroutineScope(appCoroutineScope.coroutineContext + Dispatchers.IO),
serializer = CustomDateRangeSerializer
)
@@ -83,39 +108,54 @@ class DataStoreModule {
@DataStoreQualifier(TOP_PERFORMER_PRODUCTS)
fun provideTopPerformersCustomDateRangeDataStore(
appContext: Context,
+ crashLogging: CrashLogging,
@AppCoroutineScope appCoroutineScope: CoroutineScope
): DataStore = DataStoreFactory.create(
produceFile = {
appContext.preferencesDataStoreFile("top_performers_custom_date_range_configuration")
},
+ corruptionHandler = ReplaceFileCorruptionHandler {
+ crashLogging.recordEvent("Corrupted data store. DataStore Type: ${TOP_PERFORMER_PRODUCTS.name}")
+ CustomDateRange.getDefaultInstance()
+ },
scope = CoroutineScope(appCoroutineScope.coroutineContext + Dispatchers.IO),
serializer = CustomDateRangeSerializer
)
@Provides
@Singleton
- @DataStoreQualifier(DataStoreType.COUPONS)
+ @DataStoreQualifier(COUPONS)
fun provideCouponsCustomDateRangeDataStore(
appContext: Context,
+ crashLogging: CrashLogging,
@AppCoroutineScope appCoroutineScope: CoroutineScope
): DataStore = DataStoreFactory.create(
produceFile = {
appContext.preferencesDataStoreFile("dashboard_coupons_custom_date_range_configuration")
},
+ corruptionHandler = ReplaceFileCorruptionHandler {
+ crashLogging.recordEvent("Corrupted data store. DataStore Type: ${COUPONS.name}")
+ CustomDateRange.getDefaultInstance()
+ },
scope = CoroutineScope(appCoroutineScope.coroutineContext + Dispatchers.IO),
serializer = CustomDateRangeSerializer
)
@Provides
@Singleton
- @DataStoreQualifier(DataStoreType.LAST_UPDATE)
+ @DataStoreQualifier(LAST_UPDATE)
fun provideLastUpdateDataStore(
appContext: Context,
+ crashLogging: CrashLogging,
@AppCoroutineScope appCoroutineScope: CoroutineScope
) = PreferenceDataStoreFactory.create(
produceFile = {
appContext.preferencesDataStoreFile("update")
},
+ corruptionHandler = ReplaceFileCorruptionHandler {
+ crashLogging.recordEvent("Corrupted data store. DataStore Type: ${LAST_UPDATE.name}")
+ emptyPreferences()
+ },
scope = CoroutineScope(appCoroutineScope.coroutineContext + Dispatchers.IO)
)
}
diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/extensions/StringExt.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/extensions/StringExt.kt
index 66d7d747612..ac493d8cb62 100644
--- a/WooCommerce/src/main/kotlin/com/woocommerce/android/extensions/StringExt.kt
+++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/extensions/StringExt.kt
@@ -1,7 +1,12 @@
package com.woocommerce.android.extensions
import org.apache.commons.text.StringEscapeUtils
+import java.text.DecimalFormat
import java.util.Locale
+import kotlin.math.log10
+import kotlin.math.pow
+
+const val BYTES_IN_KILOBYTE = 1024.0
/**
* Checks if a given string is a Float
@@ -100,3 +105,27 @@ fun String.toCamelCase(delimiter: String = " "): String {
fun String.capitalize(locale: Locale = Locale.getDefault()) = replaceFirstChar {
if (it.isLowerCase()) it.titlecase(locale) else it.toString()
}
+
+/**
+ * Converts a numeric string representing bytes into a human-readable file size string.
+ *
+ * Source: https://stackoverflow.com/a/5599842
+ *
+ * Examples:
+ * "1024".readableFileSize() -> "1 kB"
+ * "1500000".readableFileSize() -> "1.4 MB"
+ * "0".readableFileSize() -> "0"
+ * Invalid input returns "0"
+ *
+ * @return Formatted string with size and unit (e.g., "1.5 GB")
+ */
+fun String.readableFileSize(): String {
+ val size = this.toLongOrNull()
+ if (size == null || size <= 0) return "0"
+
+ val units = arrayOf("B", "kB", "MB", "GB", "TB", "PB", "EB")
+ val digitGroups = (log10(size.toDouble()) / log10(BYTES_IN_KILOBYTE)).toInt()
+
+ return DecimalFormat("#,##0.#")
+ .format(size / BYTES_IN_KILOBYTE.pow(digitGroups.toDouble())) + " " + units[digitGroups]
+}
diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/extensions/WCSSRModelExt.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/extensions/WCSSRModelExt.kt
index b226692b3fe..29bee6443af 100644
--- a/WooCommerce/src/main/kotlin/com/woocommerce/android/extensions/WCSSRModelExt.kt
+++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/extensions/WCSSRModelExt.kt
@@ -4,7 +4,6 @@ package com.woocommerce.android.extensions
import androidx.core.text.HtmlCompat
import com.woocommerce.android.util.WooLog
-import org.apache.commons.io.FileUtils.byteCountToDisplaySize
import org.json.JSONArray
import org.json.JSONException
import org.json.JSONObject
@@ -38,7 +37,7 @@ fun WCSSRModel.formatResult(): String {
sb.append(HEADING_SSR)
// Environment
- environment?.let { it ->
+ environment?.let {
try {
sb.append(formatEnvironmentData(JSONObject(it)))
} catch (e: JSONException) {
@@ -110,7 +109,7 @@ private fun formatEnvironmentData(data: JSONObject): String {
val memoryLimit = data.optString("wp_memory_limit", MISSING_VALUE)
if (memoryLimit != MISSING_VALUE) {
- sb.append("WP Memory Limit: ${byteCountToDisplaySize(memoryLimit.toLong())}\n")
+ sb.append("WP Memory Limit: ${memoryLimit.readableFileSize()}\n")
}
sb.append("WP Debug Mode: ${checkIfTrue(data.optBoolean("wp_debug_mode", false))}\n")
@@ -123,7 +122,7 @@ private fun formatEnvironmentData(data: JSONObject): String {
val postMaxSize = data.optString("php_post_max_size", MISSING_VALUE)
if (postMaxSize != MISSING_VALUE) {
- sb.append("PHP Post Max Size: ${byteCountToDisplaySize(postMaxSize.toLong())}\n")
+ sb.append("PHP Post Max Size: ${postMaxSize.readableFileSize()}\n")
}
sb.append("PHP Time Limit: ${data.optString("php_max_execution_time", MISSING_VALUE)} s\n")
@@ -134,7 +133,7 @@ private fun formatEnvironmentData(data: JSONObject): String {
val maxUploadSize = data.optString("max_upload_size", MISSING_VALUE)
if (maxUploadSize != MISSING_VALUE) {
- sb.append("PHP Post Max Size: ${byteCountToDisplaySize(maxUploadSize.toLong())}\n")
+ sb.append("Max Upload Size: ${maxUploadSize.readableFileSize()}\n")
}
sb.append("Default Timezone: ${data.optString("default_timezone", MISSING_VALUE)}\n")
diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/model/FeatureFeedbackSettings.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/model/FeatureFeedbackSettings.kt
index 76deaa20287..c9b99b8c2e0 100644
--- a/WooCommerce/src/main/kotlin/com/woocommerce/android/model/FeatureFeedbackSettings.kt
+++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/model/FeatureFeedbackSettings.kt
@@ -27,7 +27,6 @@ data class FeatureFeedbackSettings(
SHIPPING_LABEL_M4,
PRODUCT_ADDONS,
SIMPLE_PAYMENTS_AND_ORDER_CREATION,
- COUPONS,
ANALYTICS_HUB,
TAP_TO_PAY,
ORDER_SHIPPING_LINES
diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/barcodescanner/BarcodeScanner.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/barcodescanner/BarcodeScanner.kt
index d658881b540..90a964d46bf 100644
--- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/barcodescanner/BarcodeScanner.kt
+++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/barcodescanner/BarcodeScanner.kt
@@ -24,7 +24,6 @@ import androidx.compose.runtime.remember
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext
-import androidx.compose.ui.platform.LocalLifecycleOwner
import androidx.compose.ui.res.colorResource
import androidx.compose.ui.res.dimensionResource
import androidx.compose.ui.res.stringResource
@@ -33,6 +32,7 @@ import androidx.compose.ui.viewinterop.AndroidView
import androidx.core.content.ContextCompat
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.LifecycleEventObserver
+import androidx.lifecycle.compose.LocalLifecycleOwner
import com.woocommerce.android.R
import com.woocommerce.android.ui.compose.theme.WooThemeWithBackground
import java.util.concurrent.TimeUnit
diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/blaze/creation/destination/BlazeCampaignCreationAdDestinationParametersScreen.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/blaze/creation/destination/BlazeCampaignCreationAdDestinationParametersScreen.kt
index b032817ac2b..fd7bb651401 100644
--- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/blaze/creation/destination/BlazeCampaignCreationAdDestinationParametersScreen.kt
+++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/blaze/creation/destination/BlazeCampaignCreationAdDestinationParametersScreen.kt
@@ -126,14 +126,14 @@ fun AdDestinationParametersScreen(
key = key,
value = value,
onDeleteParameterTapped = onDeleteParameterTapped,
- modifier = Modifier.animateItemPlacement()
+ modifier = Modifier.animateItem()
)
}
item(key = "footer") {
Column(
modifier = Modifier
- .animateItemPlacement()
+ .animateItem()
.fillMaxWidth()
) {
Text(
diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/blaze/creation/intro/BlazeCampaignCreationIntroScreen.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/blaze/creation/intro/BlazeCampaignCreationIntroScreen.kt
index 1e87c6e843c..9193744b89b 100644
--- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/blaze/creation/intro/BlazeCampaignCreationIntroScreen.kt
+++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/blaze/creation/intro/BlazeCampaignCreationIntroScreen.kt
@@ -30,7 +30,7 @@ import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Clear
import androidx.compose.material.icons.filled.Close
import androidx.compose.material.rememberModalBottomSheetState
-import androidx.compose.material.ripple.rememberRipple
+import androidx.compose.material.ripple
import androidx.compose.runtime.Composable
import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberCoroutineScope
@@ -49,7 +49,7 @@ import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import com.woocommerce.android.R
-import com.woocommerce.android.ui.compose.annotatedStringRes
+import com.woocommerce.android.ui.compose.annotatedStringResLegacy
import com.woocommerce.android.ui.compose.component.BottomSheetHandle
import com.woocommerce.android.ui.compose.component.Toolbar
import com.woocommerce.android.ui.compose.component.WCColoredButton
@@ -242,11 +242,11 @@ private fun BlazeCampaignBottomSheetContent(
onDismissClick: () -> Unit
) {
val learnMoreItems = listOf(
- annotatedStringRes(R.string.blaze_campaign_creation_new_intro_learn_item_1),
- annotatedStringRes(R.string.blaze_campaign_creation_new_intro_learn_item_2),
- annotatedStringRes(R.string.blaze_campaign_creation_new_intro_learn_item_3),
- annotatedStringRes(R.string.blaze_campaign_creation_new_intro_learn_item_4),
- annotatedStringRes(R.string.blaze_campaign_creation_new_intro_learn_item_5),
+ annotatedStringResLegacy(R.string.blaze_campaign_creation_new_intro_learn_item_1),
+ annotatedStringResLegacy(R.string.blaze_campaign_creation_new_intro_learn_item_2),
+ annotatedStringResLegacy(R.string.blaze_campaign_creation_new_intro_learn_item_3),
+ annotatedStringResLegacy(R.string.blaze_campaign_creation_new_intro_learn_item_4),
+ annotatedStringResLegacy(R.string.blaze_campaign_creation_new_intro_learn_item_5),
)
Column(
@@ -300,7 +300,7 @@ private fun CloseButton(onDismissClick: () -> Unit, modifier: Modifier = Modifie
onClick = onDismissClick,
role = Role.Button,
interactionSource = remember { MutableInteractionSource() },
- indication = rememberRipple(bounded = false, radius = dimensionResource(id = R.dimen.major_150))
+ indication = ripple(bounded = false, radius = dimensionResource(id = R.dimen.major_150))
)
) {
Icon(
diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/blaze/creation/objective/BlazeCampaignObjectiveScreen.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/blaze/creation/objective/BlazeCampaignObjectiveScreen.kt
index 216f462a25d..07aacef8e0f 100644
--- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/blaze/creation/objective/BlazeCampaignObjectiveScreen.kt
+++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/blaze/creation/objective/BlazeCampaignObjectiveScreen.kt
@@ -34,7 +34,7 @@ import androidx.compose.ui.unit.dp
import com.woocommerce.android.R
import com.woocommerce.android.ui.blaze.creation.objective.BlazeCampaignObjectiveViewModel.ObjectiveItem
import com.woocommerce.android.ui.blaze.creation.objective.BlazeCampaignObjectiveViewModel.ObjectiveViewState
-import com.woocommerce.android.ui.compose.annotatedStringRes
+import com.woocommerce.android.ui.compose.annotatedStringResLegacy
import com.woocommerce.android.ui.compose.component.BottomSheetSwitchColors
import com.woocommerce.android.ui.compose.component.Toolbar
import com.woocommerce.android.ui.compose.component.WCSwitch
@@ -184,7 +184,7 @@ fun ObjectiveListItem(
)
if (isSelected) {
Text(
- text = annotatedStringRes(
+ text = annotatedStringResLegacy(
stringResId = R.string.blaze_campaign_objective_good_for,
suitableForDescription
),
diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/blaze/creation/payment/BlazeCampaignPaymentSummaryScreen.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/blaze/creation/payment/BlazeCampaignPaymentSummaryScreen.kt
index caadcc342db..78261042b2a 100644
--- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/blaze/creation/payment/BlazeCampaignPaymentSummaryScreen.kt
+++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/blaze/creation/payment/BlazeCampaignPaymentSummaryScreen.kt
@@ -12,7 +12,6 @@ import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
-import androidx.compose.foundation.text.ClickableText
import androidx.compose.material.CircularProgressIndicator
import androidx.compose.material.ContentAlpha
import androidx.compose.material.Divider
@@ -39,7 +38,6 @@ import com.woocommerce.android.R
import com.woocommerce.android.model.CreditCardType
import com.woocommerce.android.ui.blaze.BlazeRepository
import com.woocommerce.android.ui.blaze.creation.payment.BlazeCampaignPaymentSummaryViewModel.CampaignCreationState
-import com.woocommerce.android.ui.compose.URL_ANNOTATION_TAG
import com.woocommerce.android.ui.compose.annotatedStringRes
import com.woocommerce.android.ui.compose.component.Toolbar
import com.woocommerce.android.ui.compose.component.ToolbarWithHelpButton
@@ -146,30 +144,26 @@ private fun PaymentSummaryContent(
)
val termsOfServices = annotatedStringRes(
- stringResId = R.string.blaze_campaign_payment_summary_terms_and_conditions
+ stringResId = R.string.blaze_campaign_payment_summary_terms_and_conditions,
+ onUrlClick = { url ->
+ when (url) {
+ "termsOfService" ->
+ ChromeCustomTabUtils.launchUrl(context, AppUrls.WORPRESS_COM_TERMS)
+
+ "advertisingPolicy" ->
+ ChromeCustomTabUtils.launchUrl(context, AppUrls.ADVERTISING_POLICY)
+
+ "learnMore" ->
+ ChromeCustomTabUtils.launchUrl(context, AppUrls.BLAZE_SUPPORT)
+ }
+ }
)
- ClickableText(
+
+ Text(
text = termsOfServices,
- style = MaterialTheme.typography.caption.copy(
- textAlign = TextAlign.Center,
- color = MaterialTheme.colors.onSurface.copy(alpha = ContentAlpha.medium)
- ),
- onClick = { offset ->
- termsOfServices.getStringAnnotations(tag = URL_ANNOTATION_TAG, start = offset, end = offset)
- .firstOrNull()
- ?.let { annotation ->
- when (annotation.item) {
- "termsOfService" ->
- ChromeCustomTabUtils.launchUrl(context, AppUrls.WORPRESS_COM_TERMS)
-
- "advertisingPolicy" ->
- ChromeCustomTabUtils.launchUrl(context, AppUrls.ADVERTISING_POLICY)
-
- "learnMore" ->
- ChromeCustomTabUtils.launchUrl(context, AppUrls.BLAZE_SUPPORT)
- }
- }
- },
+ style = MaterialTheme.typography.caption,
+ textAlign = TextAlign.Center,
+ color = MaterialTheme.colors.onSurface.copy(alpha = ContentAlpha.medium),
modifier = Modifier.padding(horizontal = dimensionResource(id = R.dimen.major_100))
)
}
diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/blaze/creation/targets/BlazeCampaignTargetSelectionScreen.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/blaze/creation/targets/BlazeCampaignTargetSelectionScreen.kt
index 46445ef8f22..6e5d170d0cd 100644
--- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/blaze/creation/targets/BlazeCampaignTargetSelectionScreen.kt
+++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/blaze/creation/targets/BlazeCampaignTargetSelectionScreen.kt
@@ -145,7 +145,7 @@ private fun TargetSelectionScreen(
onSearchActiveStateChanged(state.isFocused)
}
.focusRequester(focusRequester), // Request focus
- keyboardOptions = KeyboardOptions(autoCorrect = false),
+ keyboardOptions = KeyboardOptions(autoCorrectEnabled = false),
)
}
diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/compose/TextExts.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/compose/TextExts.kt
index 42251c80d52..2064441068c 100644
--- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/compose/TextExts.kt
+++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/compose/TextExts.kt
@@ -9,14 +9,19 @@ import android.text.style.UnderlineSpan
import androidx.annotation.StringRes
import androidx.compose.material.MaterialTheme
import androidx.compose.runtime.Composable
+import androidx.compose.runtime.remember
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.AnnotatedString
+import androidx.compose.ui.text.LinkAnnotation
+import androidx.compose.ui.text.LinkInteractionListener
import androidx.compose.ui.text.SpanStyle
+import androidx.compose.ui.text.TextLinkStyles
import androidx.compose.ui.text.TextStyle
import androidx.compose.ui.text.buildAnnotatedString
import androidx.compose.ui.text.font.FontStyle
import androidx.compose.ui.text.font.FontWeight
+import androidx.compose.ui.text.fromHtml
import androidx.compose.ui.text.style.TextDecoration
import androidx.core.text.HtmlCompat
@@ -28,7 +33,7 @@ const val URL_ANNOTATION_TAG = "url"
* Source: https://stackoverflow.com/a/70757314 with some adjustments
*/
@Composable
-fun annotatedStringRes(@StringRes stringResId: Int, vararg args: Any): AnnotatedString {
+fun annotatedStringResLegacy(@StringRes stringResId: Int, vararg args: Any): AnnotatedString {
val string = stringResource(id = stringResId, *args)
val spanned = HtmlCompat.fromHtml(string, HtmlCompat.FROM_HTML_MODE_LEGACY)
@@ -43,9 +48,11 @@ fun annotatedStringRes(@StringRes stringResId: Int, vararg args: Any): Annotated
is StyleSpan -> span.toSpanStyle()?.let {
addStyle(style = it, start = startIndex, end = endIndex)
}
+
is UnderlineSpan -> {
addStyle(SpanStyle(textDecoration = TextDecoration.Underline), start = startIndex, end = endIndex)
}
+
is URLSpan -> {
addStyle(
style = TextStyle.Default.copy(color = MaterialTheme.colors.primary).toSpanStyle(),
@@ -64,6 +71,45 @@ fun annotatedStringRes(@StringRes stringResId: Int, vararg args: Any): Annotated
}
}
+/**
+ * Creates an [AnnotatedString] from the passed String resource.
+ *
+ * @param stringResId The resource ID of the string to be converted to an [AnnotatedString].
+ * @param onUrlClick Allows overriding the default behavior of URL clicks, by default it will open the URL in an
+ * external browser.
+ * @param args The arguments to be used in the string resource.
+ */
+@Composable
+fun annotatedStringRes(
+ @StringRes stringResId: Int,
+ onUrlClick: ((String) -> Unit)? = null,
+ vararg args: Any
+): AnnotatedString {
+ val linkInteractionListener = remember(onUrlClick) {
+ if (onUrlClick == null) return@remember null
+
+ LinkInteractionListener { linkAnnotation ->
+ val url = when (linkAnnotation) {
+ is LinkAnnotation.Url -> linkAnnotation.url
+ is LinkAnnotation.Clickable -> linkAnnotation.tag
+ else -> error("Unsupported LinkAnnotation type: $linkAnnotation")
+ }
+ onUrlClick.invoke(url)
+ }
+ }
+
+ return AnnotatedString.fromHtml(
+ stringResource(id = stringResId, *args),
+ linkInteractionListener = linkInteractionListener,
+ linkStyles = TextLinkStyles(
+ style = SpanStyle(
+ color = MaterialTheme.colors.primary,
+ textDecoration = TextDecoration.None
+ ),
+ )
+ )
+}
+
private fun StyleSpan.toSpanStyle(): SpanStyle? {
return when (style) {
Typeface.BOLD -> SpanStyle(fontWeight = FontWeight.Bold)
diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/compose/component/Buttons.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/compose/component/Buttons.kt
index e5834c433a8..eac871cdcab 100644
--- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/compose/component/Buttons.kt
+++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/compose/component/Buttons.kt
@@ -20,22 +20,21 @@ import androidx.compose.material.Button
import androidx.compose.material.ButtonColors
import androidx.compose.material.ButtonDefaults
import androidx.compose.material.ButtonElevation
+import androidx.compose.material.ExperimentalMaterialApi
import androidx.compose.material.Icon
+import androidx.compose.material.LocalRippleConfiguration
import androidx.compose.material.MaterialTheme
import androidx.compose.material.OutlinedButton
import androidx.compose.material.ProvideTextStyle
+import androidx.compose.material.RippleConfiguration
import androidx.compose.material.Text
import androidx.compose.material.TextButton
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Add
import androidx.compose.material.icons.filled.Check
import androidx.compose.material.icons.filled.Edit
-import androidx.compose.material.ripple.LocalRippleTheme
-import androidx.compose.material.ripple.RippleAlpha
-import androidx.compose.material.ripple.RippleTheme
import androidx.compose.runtime.Composable
import androidx.compose.runtime.CompositionLocalProvider
-import androidx.compose.runtime.getValue
import androidx.compose.runtime.remember
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
@@ -51,6 +50,7 @@ import androidx.compose.ui.unit.dp
import com.woocommerce.android.R
import com.woocommerce.android.ui.compose.theme.WooThemeWithBackground
+@OptIn(ExperimentalMaterialApi::class)
@Composable
fun WCColoredButton(
onClick: () -> Unit,
@@ -66,23 +66,9 @@ fun WCColoredButton(
shape: Shape = MaterialTheme.shapes.small,
content: @Composable RowScope.() -> Unit,
) {
- val contentColor by colors.contentColor(enabled = enabled)
- val rippleTheme = remember(rippleColor, contentColor) {
- object : RippleTheme {
- @Composable
- override fun defaultColor(): Color = RippleTheme.defaultRippleColor(
- rippleColor,
- MaterialTheme.colors.isLight
- )
+ val rippleConfiguration = RippleConfiguration(color = rippleColor)
- @Composable
- override fun rippleAlpha(): RippleAlpha = RippleTheme.defaultRippleAlpha(
- rippleColor,
- MaterialTheme.colors.isLight
- )
- }
- }
- CompositionLocalProvider(LocalRippleTheme provides rippleTheme) {
+ CompositionLocalProvider(LocalRippleConfiguration provides rippleConfiguration) {
Button(
onClick = onClick,
enabled = enabled,
diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/compose/component/SearchLayoutWithParams.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/compose/component/SearchLayoutWithParams.kt
index c101f1b6b34..1f911abd932 100644
--- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/compose/component/SearchLayoutWithParams.kt
+++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/compose/component/SearchLayoutWithParams.kt
@@ -59,7 +59,7 @@ fun SearchLayoutWithParams(
)
.onFocusChanged { isFocused.value = it.isFocused }
.focusRequester(focusRequester),
- keyboardOptions = KeyboardOptions(autoCorrect = false),
+ keyboardOptions = KeyboardOptions(autoCorrectEnabled = false),
)
if (isFocused.value || state.areSearchTypesAlwaysVisible) {
if (paramsFillWidth) {
diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/compose/component/aztec/AztecEditor.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/compose/component/aztec/AztecEditor.kt
index 780b6902aba..54eda6fae37 100644
--- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/compose/component/aztec/AztecEditor.kt
+++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/compose/component/aztec/AztecEditor.kt
@@ -31,9 +31,6 @@ import androidx.compose.runtime.snapshotFlow
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext
-import androidx.compose.ui.platform.LocalTextInputService
-import androidx.compose.ui.text.InternalTextApi
-import androidx.compose.ui.text.input.TextInputService
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import androidx.compose.ui.viewinterop.AndroidView
@@ -42,7 +39,6 @@ import com.google.android.material.textfield.TextInputLayout
import com.woocommerce.android.databinding.ViewAztecBinding
import com.woocommerce.android.databinding.ViewAztecOutlinedBinding
import com.woocommerce.android.ui.compose.theme.WooThemeWithBackground
-import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.coroutineScope
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow
@@ -257,7 +253,6 @@ private fun InternalAztecEditor(
) {
val localContext = LocalContext.current
val bringIntoViewRequester = remember { BringIntoViewRequester() }
- val textInputService = LocalTextInputService.current
val viewsHolder = remember(localContext, enableSourceEditor) { aztecViewsProvider(localContext) }
val listener = remember { createToolbarListener { state.toggleHtmlEditor() } }
@@ -309,8 +304,7 @@ private fun InternalAztecEditor(
handleFocus(
focusState = focusState,
imeVisibility = isImeVisible,
- bringIntoViewRequester = bringIntoViewRequester,
- textInputService = textInputService
+ bringIntoViewRequester = bringIntoViewRequester
)
}
@@ -380,30 +374,12 @@ private fun InternalAztecEditor(
}
}
-@OptIn(ExperimentalFoundationApi::class, InternalTextApi::class)
+@OptIn(ExperimentalFoundationApi::class)
private suspend fun handleFocus(
focusState: StateFlow,
imeVisibility: State,
bringIntoViewRequester: BringIntoViewRequester,
- textInputService: TextInputService?
) = coroutineScope {
- launch(Dispatchers.Main.immediate) {
- // In Compose, text fields use input sessions to manage the input, when focus moves to a non-input field
- // the session is closed and this hides the keyboard.
- // This behavior doesn't work well when focus moves to a non-Compose input field, like the Aztec editor.
- // see: https://issuetracker.google.com/issues/318530776 and https://issuetracker.google.com/issues/363544352
- // To get around the issue, we are using the internal API to start/stop the input session.
- // This is safe to do because even if the API changes, we can remove the logic temporarily until the bug is
- // fixed, as this bug is not critical for the editor.
- focusState.collect {
- if (it) {
- textInputService?.startInput()
- } else {
- textInputService?.stopInput()
- }
- }
- }
-
launch {
// Use collectLatest to make sure the nested collection is cancelled when the focus state changes
focusState.collectLatest { hasFocus ->
diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/coupons/CouponListFragment.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/coupons/CouponListFragment.kt
index 05246f1e438..11a7261acd3 100644
--- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/coupons/CouponListFragment.kt
+++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/coupons/CouponListFragment.kt
@@ -12,25 +12,18 @@ import android.widget.SearchView.OnQueryTextListener
import androidx.appcompat.widget.SearchView
import androidx.compose.ui.platform.ViewCompositionStrategy
import androidx.core.view.MenuProvider
-import androidx.core.view.isVisible
import androidx.fragment.app.viewModels
import androidx.lifecycle.Lifecycle.State
import androidx.navigation.fragment.findNavController
import com.woocommerce.android.FeedbackPrefs
-import com.woocommerce.android.NavGraphMainDirections
import com.woocommerce.android.R
-import com.woocommerce.android.analytics.AnalyticsEvent
-import com.woocommerce.android.analytics.AnalyticsTracker
import com.woocommerce.android.databinding.FragmentCouponListBinding
import com.woocommerce.android.extensions.navigateSafely
-import com.woocommerce.android.model.FeatureFeedbackSettings
-import com.woocommerce.android.model.FeatureFeedbackSettings.Feature.COUPONS
import com.woocommerce.android.ui.base.BaseFragment
import com.woocommerce.android.ui.base.UIMessageResolver
import com.woocommerce.android.ui.compose.theme.WooThemeWithBackground
import com.woocommerce.android.ui.coupons.CouponListViewModel.NavigateToCouponDetailsEvent
import com.woocommerce.android.ui.coupons.CouponListViewModel.NavigateToCouponTypePicker
-import com.woocommerce.android.ui.feedback.SurveyType
import com.woocommerce.android.viewmodel.MultiLiveEvent
import dagger.hilt.android.AndroidEntryPoint
import javax.inject.Inject
@@ -49,9 +42,6 @@ class CouponListFragment : BaseFragment(R.layout.fragment_coupon_list) {
private lateinit var searchView: SearchView
private var _binding: FragmentCouponListBinding? = null
private val binding get() = _binding!!
- private val feedbackState
- get() = feedbackPrefs.getFeatureFeedbackSettings(COUPONS)?.feedbackState
- ?: FeatureFeedbackSettings.FeedbackState.UNANSWERED
private val viewModel: CouponListViewModel by viewModels()
@@ -122,11 +112,6 @@ class CouponListFragment : BaseFragment(R.layout.fragment_coupon_list) {
)
}
- override fun onViewStateRestored(savedInstanceState: Bundle?) {
- super.onViewStateRestored(savedInstanceState)
- displayCouponsWIPCard(true)
- }
-
override fun getFragmentTitle(): String = getString(R.string.coupons)
private fun initSearch() {
@@ -186,58 +171,6 @@ class CouponListFragment : BaseFragment(R.layout.fragment_coupon_list) {
)
}
- private fun displayCouponsWIPCard(show: Boolean) {
- if (!show ||
- feedbackState == FeatureFeedbackSettings.FeedbackState.DISMISSED
- ) {
- binding.couponsWIPcard.isVisible = false
- return
- }
-
- binding.couponsWIPcard.isVisible = true
- binding.couponsWIPcard.initView(
- getString(R.string.coupon_list_wip_title),
- getString(R.string.coupon_list_wip_message_enabled),
- onGiveFeedbackClick = { onGiveFeedbackClicked() },
- onDismissClick = { onDismissWIPCardClicked() },
- showFeedbackButton = true
- )
- }
-
- private fun onGiveFeedbackClicked() {
- AnalyticsTracker.track(
- AnalyticsEvent.FEATURE_FEEDBACK_BANNER,
- mapOf(
- AnalyticsTracker.KEY_FEEDBACK_CONTEXT to AnalyticsTracker.VALUE_COUPONS_FEEDBACK,
- AnalyticsTracker.KEY_FEEDBACK_ACTION to AnalyticsTracker.VALUE_FEEDBACK_GIVEN
- )
- )
- registerFeedbackSetting(FeatureFeedbackSettings.FeedbackState.GIVEN)
-
- NavGraphMainDirections
- .actionGlobalFeedbackSurveyFragment(SurveyType.COUPONS)
- .apply { findNavController().navigateSafely(this) }
- }
-
- private fun onDismissWIPCardClicked() {
- AnalyticsTracker.track(
- AnalyticsEvent.FEATURE_FEEDBACK_BANNER,
- mapOf(
- AnalyticsTracker.KEY_FEEDBACK_CONTEXT to AnalyticsTracker.VALUE_COUPONS_FEEDBACK,
- AnalyticsTracker.KEY_FEEDBACK_ACTION to AnalyticsTracker.VALUE_FEEDBACK_DISMISSED
- )
- )
- registerFeedbackSetting(FeatureFeedbackSettings.FeedbackState.DISMISSED)
- displayCouponsWIPCard(false)
- }
-
- private fun registerFeedbackSetting(state: FeatureFeedbackSettings.FeedbackState) {
- FeatureFeedbackSettings(
- COUPONS,
- state
- ).registerItself(feedbackPrefs)
- }
-
override fun onDestroyView() {
super.onDestroyView()
_binding = null
diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/customfields/list/CustomFieldsScreen.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/customfields/list/CustomFieldsScreen.kt
index a260613073a..cda32e412e4 100644
--- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/customfields/list/CustomFieldsScreen.kt
+++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/customfields/list/CustomFieldsScreen.kt
@@ -20,7 +20,6 @@ import androidx.compose.foundation.layout.size
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.items
import androidx.compose.foundation.rememberScrollState
-import androidx.compose.foundation.text.ClickableText
import androidx.compose.foundation.verticalScroll
import androidx.compose.material.Divider
import androidx.compose.material.ExperimentalMaterialApi
@@ -49,12 +48,12 @@ import androidx.compose.ui.platform.LocalConfiguration
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.ExperimentalTextApi
+import androidx.compose.ui.text.LinkAnnotation
import androidx.compose.ui.text.SpanStyle
-import androidx.compose.ui.text.UrlAnnotation
+import androidx.compose.ui.text.TextLinkStyles
import androidx.compose.ui.text.buildAnnotatedString
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.text.style.TextOverflow
-import androidx.compose.ui.text.withStyle
import androidx.compose.ui.unit.dp
import androidx.compose.ui.window.Dialog
import com.woocommerce.android.R
@@ -288,26 +287,21 @@ private fun CustomFieldItem(
if (customField.contentType != CustomFieldContentType.TEXT) {
val text = buildAnnotatedString {
- withStyle(SpanStyle(color = MaterialTheme.colors.primary)) {
- pushUrlAnnotation(UrlAnnotation(customField.value))
- append(customField.value)
- }
+ pushLink(
+ LinkAnnotation.Url(
+ url = customField.value,
+ styles = TextLinkStyles(style = SpanStyle(color = MaterialTheme.colors.primary)),
+ linkInteractionListener = { onValueClicked(customField) }
+ )
+ )
+ append(customField.value)
}
- ClickableText(
+ Text(
text = text,
- style = MaterialTheme.typography.body2.copy(
- color = MaterialTheme.colors.onSurface
- ),
+ style = MaterialTheme.typography.body2,
+ color = MaterialTheme.colors.onSurface,
maxLines = 2,
- overflow = TextOverflow.Ellipsis,
- onClick = { offset ->
- text.getUrlAnnotations(
- start = offset,
- end = offset
- ).firstOrNull()?.let { _ ->
- onValueClicked(customField)
- }
- }
+ overflow = TextOverflow.Ellipsis
)
} else {
Text(
diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/dashboard/WidgetError.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/dashboard/WidgetError.kt
index 532c6b0c868..493bf802e18 100644
--- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/dashboard/WidgetError.kt
+++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/dashboard/WidgetError.kt
@@ -5,7 +5,6 @@ import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
-import androidx.compose.foundation.text.ClickableText
import androidx.compose.material.LocalContentColor
import androidx.compose.material.MaterialTheme
import androidx.compose.material.Text
@@ -14,13 +13,11 @@ import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
-import androidx.compose.ui.text.TextStyle
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import com.woocommerce.android.R
-import com.woocommerce.android.ui.compose.URL_ANNOTATION_TAG
import com.woocommerce.android.ui.compose.annotatedStringRes
import com.woocommerce.android.ui.compose.component.WCOutlinedButton
@@ -46,25 +43,16 @@ fun WidgetError(
style = MaterialTheme.typography.h6
)
- val errorMessage = annotatedStringRes(R.string.dynamic_dashboard_widget_error_description)
-
- ClickableText(
- modifier = Modifier.padding(horizontal = 32.dp),
+ val errorMessage = annotatedStringRes(
+ stringResId = R.string.dynamic_dashboard_widget_error_description,
+ onUrlClick = { onContactSupportClicked() }
+ )
+ Text(
text = errorMessage,
- style = TextStyle(
- textAlign = TextAlign.Center,
- fontSize = 18.sp,
- color = LocalContentColor.current
- ),
- onClick = { offset ->
- errorMessage.getStringAnnotations(tag = URL_ANNOTATION_TAG, start = offset, end = offset)
- .firstOrNull()
- ?.let { annotation ->
- when (annotation.item) {
- "support" -> onContactSupportClicked()
- }
- }
- },
+ textAlign = TextAlign.Center,
+ fontSize = 18.sp,
+ color = LocalContentColor.current,
+ modifier = Modifier.padding(horizontal = 32.dp),
)
WCOutlinedButton(
diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/dashboard/blaze/DashboardBlazeCard.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/dashboard/blaze/DashboardBlazeCard.kt
index cd8e7295e91..d51546bf2f2 100644
--- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/dashboard/blaze/DashboardBlazeCard.kt
+++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/dashboard/blaze/DashboardBlazeCard.kt
@@ -20,7 +20,6 @@ import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
-import androidx.compose.ui.platform.LocalLifecycleOwner
import androidx.compose.ui.res.colorResource
import androidx.compose.ui.res.dimensionResource
import androidx.compose.ui.res.painterResource
@@ -29,6 +28,7 @@ import androidx.compose.ui.text.font.FontWeight
import androidx.hilt.navigation.compose.hiltViewModel
import androidx.lifecycle.LiveData
import androidx.lifecycle.Observer
+import androidx.lifecycle.compose.LocalLifecycleOwner
import com.woocommerce.android.NavGraphMainDirections
import com.woocommerce.android.R
import com.woocommerce.android.R.string
diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/dashboard/coupons/DashboardCouponsCard.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/dashboard/coupons/DashboardCouponsCard.kt
index f109537a3ab..8f0e835e4e1 100644
--- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/dashboard/coupons/DashboardCouponsCard.kt
+++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/dashboard/coupons/DashboardCouponsCard.kt
@@ -20,7 +20,6 @@ import androidx.compose.runtime.DisposableEffect
import androidx.compose.runtime.livedata.observeAsState
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
-import androidx.compose.ui.platform.LocalLifecycleOwner
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.style.TextAlign
@@ -28,6 +27,7 @@ import androidx.compose.ui.unit.dp
import androidx.hilt.navigation.compose.hiltViewModel
import androidx.lifecycle.LiveData
import androidx.lifecycle.Observer
+import androidx.lifecycle.compose.LocalLifecycleOwner
import androidx.navigation.navOptions
import com.woocommerce.android.R
import com.woocommerce.android.extensions.navigateSafely
diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/dashboard/google/DashboardGoogleAdsCard.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/dashboard/google/DashboardGoogleAdsCard.kt
index 251dc503695..78edd6afcd4 100644
--- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/dashboard/google/DashboardGoogleAdsCard.kt
+++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/dashboard/google/DashboardGoogleAdsCard.kt
@@ -22,7 +22,6 @@ import androidx.compose.runtime.livedata.observeAsState
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
-import androidx.compose.ui.platform.LocalLifecycleOwner
import androidx.compose.ui.res.colorResource
import androidx.compose.ui.res.dimensionResource
import androidx.compose.ui.res.painterResource
@@ -32,6 +31,7 @@ import androidx.compose.ui.unit.dp
import androidx.hilt.navigation.compose.hiltViewModel
import androidx.lifecycle.LiveData
import androidx.lifecycle.Observer
+import androidx.lifecycle.compose.LocalLifecycleOwner
import com.woocommerce.android.NavGraphMainDirections
import com.woocommerce.android.R
import com.woocommerce.android.extensions.navigateSafely
diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/dashboard/inbox/DashboardInboxCard.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/dashboard/inbox/DashboardInboxCard.kt
index 67edbd80498..a48f0cd88a5 100644
--- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/dashboard/inbox/DashboardInboxCard.kt
+++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/dashboard/inbox/DashboardInboxCard.kt
@@ -16,7 +16,6 @@ import androidx.compose.runtime.livedata.observeAsState
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext
-import androidx.compose.ui.platform.LocalLifecycleOwner
import androidx.compose.ui.res.dimensionResource
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
@@ -26,6 +25,7 @@ import androidx.compose.ui.unit.dp
import androidx.hilt.navigation.compose.hiltViewModel
import androidx.lifecycle.LiveData
import androidx.lifecycle.Observer
+import androidx.lifecycle.compose.LocalLifecycleOwner
import com.woocommerce.android.R
import com.woocommerce.android.extensions.navigateSafely
import com.woocommerce.android.ui.compose.rememberNavController
diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/dashboard/onboarding/DashboardOnboardingCard.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/dashboard/onboarding/DashboardOnboardingCard.kt
index 5a1d23eb18e..26c0cff3361 100644
--- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/dashboard/onboarding/DashboardOnboardingCard.kt
+++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/dashboard/onboarding/DashboardOnboardingCard.kt
@@ -25,7 +25,6 @@ import androidx.compose.runtime.remember
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
-import androidx.compose.ui.platform.LocalLifecycleOwner
import androidx.compose.ui.res.colorResource
import androidx.compose.ui.res.dimensionResource
import androidx.compose.ui.res.stringResource
@@ -33,6 +32,7 @@ import androidx.compose.ui.unit.dp
import androidx.hilt.navigation.compose.hiltViewModel
import androidx.lifecycle.LiveData
import androidx.lifecycle.Observer
+import androidx.lifecycle.compose.LocalLifecycleOwner
import com.woocommerce.android.NavGraphMainDirections
import com.woocommerce.android.R
import com.woocommerce.android.extensions.navigateSafely
diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/dashboard/orders/DashboardOrdersCard.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/dashboard/orders/DashboardOrdersCard.kt
index 2cf8b88f823..649e4917c82 100644
--- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/dashboard/orders/DashboardOrdersCard.kt
+++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/dashboard/orders/DashboardOrdersCard.kt
@@ -18,7 +18,6 @@ import androidx.compose.runtime.DisposableEffect
import androidx.compose.runtime.livedata.observeAsState
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
-import androidx.compose.ui.platform.LocalLifecycleOwner
import androidx.compose.ui.res.colorResource
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
@@ -30,6 +29,7 @@ import androidx.constraintlayout.compose.ConstraintLayout
import androidx.hilt.navigation.compose.hiltViewModel
import androidx.lifecycle.LiveData
import androidx.lifecycle.Observer
+import androidx.lifecycle.compose.LocalLifecycleOwner
import androidx.navigation.NavController
import androidx.navigation.NavGraph.Companion.findStartDestination
import androidx.navigation.navOptions
diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/dashboard/reviews/DashboardReviewsCard.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/dashboard/reviews/DashboardReviewsCard.kt
index 03a747eeb8c..b1d9e82b0b4 100644
--- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/dashboard/reviews/DashboardReviewsCard.kt
+++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/dashboard/reviews/DashboardReviewsCard.kt
@@ -21,7 +21,6 @@ import androidx.compose.runtime.livedata.observeAsState
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext
-import androidx.compose.ui.platform.LocalLifecycleOwner
import androidx.compose.ui.res.colorResource
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
@@ -34,6 +33,7 @@ import androidx.compose.ui.viewinterop.AndroidView
import androidx.hilt.navigation.compose.hiltViewModel
import androidx.lifecycle.LiveData
import androidx.lifecycle.Observer
+import androidx.lifecycle.compose.LocalLifecycleOwner
import com.woocommerce.android.R
import com.woocommerce.android.extensions.fastStripHtml
import com.woocommerce.android.extensions.navigateSafely
diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/dashboard/stats/DashboardStatsCard.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/dashboard/stats/DashboardStatsCard.kt
index 244c14dc219..da92128cf56 100644
--- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/dashboard/stats/DashboardStatsCard.kt
+++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/dashboard/stats/DashboardStatsCard.kt
@@ -11,13 +11,13 @@ import androidx.compose.runtime.livedata.observeAsState
import androidx.compose.runtime.remember
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext
-import androidx.compose.ui.platform.LocalLifecycleOwner
import androidx.compose.ui.platform.testTag
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.viewinterop.AndroidView
import androidx.hilt.navigation.compose.hiltViewModel
import androidx.lifecycle.LiveData
import androidx.lifecycle.Observer
+import androidx.lifecycle.compose.LocalLifecycleOwner
import androidx.lifecycle.lifecycleScope
import com.woocommerce.android.R
import com.woocommerce.android.extensions.navigateSafely
@@ -98,7 +98,7 @@ fun DashboardStatsCard(
currencyFormatter = viewModel.currencyFormatter,
usageTracksEventEmitter = viewModel.usageTracksEventEmitter,
onAddCustomRangeClick = viewModel::onAddCustomRangeClicked,
- onTabSelected = viewModel::onTabSelected,
+ onTabSelected = viewModel::onRangeChanged,
onChartDateSelected = viewModel::onChartDateSelected
)
}
diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/dashboard/stats/DashboardStatsViewModel.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/dashboard/stats/DashboardStatsViewModel.kt
index 6e9a3c5f111..e1cbe2a4f25 100644
--- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/dashboard/stats/DashboardStatsViewModel.kt
+++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/dashboard/stats/DashboardStatsViewModel.kt
@@ -123,7 +123,7 @@ class DashboardStatsViewModel @AssistedInject constructor(
trackLocalTimezoneDifferenceFromStore()
}
- fun onTabSelected(selectionType: SelectionType) {
+ fun onRangeChanged(selectionType: SelectionType) {
parentViewModel.trackCardInteracted(DashboardWidget.Type.STATS.trackingIdentifier)
usageTracksEventEmitter.interacted()
if (selectionType != SelectionType.CUSTOM) {
@@ -134,7 +134,7 @@ class DashboardStatsViewModel @AssistedInject constructor(
} else {
appPrefsWrapper.setActiveStatsTab(SelectionType.CUSTOM.name)
analyticsTrackerWrapper.track(
- AnalyticsEvent.DASHBOARD_STATS_CUSTOM_RANGE_TAB_SELECTED
+ AnalyticsEvent.DASHBOARD_STATS_CUSTOM_RANGE_ADD_BUTTON_TAPPED
)
}
}
@@ -151,7 +151,7 @@ class DashboardStatsViewModel @AssistedInject constructor(
viewModelScope.launch {
customDateRangeDataStore.updateDateRange(range)
if (dateRangeState.value?.rangeSelection?.selectionType != SelectionType.CUSTOM) {
- onTabSelected(SelectionType.CUSTOM)
+ onRangeChanged(SelectionType.CUSTOM)
}
}
}
diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/dashboard/stock/DashboardProductStockCard.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/dashboard/stock/DashboardProductStockCard.kt
index 6d135725d89..732d3dc616c 100644
--- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/dashboard/stock/DashboardProductStockCard.kt
+++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/dashboard/stock/DashboardProductStockCard.kt
@@ -21,7 +21,6 @@ import androidx.compose.runtime.livedata.observeAsState
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
-import androidx.compose.ui.platform.LocalLifecycleOwner
import androidx.compose.ui.res.colorResource
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
@@ -32,6 +31,7 @@ import androidx.compose.ui.unit.dp
import androidx.hilt.navigation.compose.hiltViewModel
import androidx.lifecycle.LiveData
import androidx.lifecycle.Observer
+import androidx.lifecycle.compose.LocalLifecycleOwner
import com.woocommerce.android.NavGraphMainDirections
import com.woocommerce.android.R
import com.woocommerce.android.extensions.navigateSafely
diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/dashboard/topperformers/DashboardTopPerformersViewModel.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/dashboard/topperformers/DashboardTopPerformersViewModel.kt
index 5bbafb6b035..f279156a4fb 100644
--- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/dashboard/topperformers/DashboardTopPerformersViewModel.kt
+++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/dashboard/topperformers/DashboardTopPerformersViewModel.kt
@@ -140,7 +140,7 @@ class DashboardTopPerformersViewModel @AssistedInject constructor(
}
}
- fun onTabSelected(selectionType: SelectionType) {
+ fun onRangeChanged(selectionType: SelectionType) {
parentViewModel.trackCardInteracted(DashboardWidget.Type.POPULAR_PRODUCTS.trackingIdentifier)
usageTracksEventEmitter.interacted()
if (selectionType != SelectionType.CUSTOM) {
@@ -150,7 +150,7 @@ class DashboardTopPerformersViewModel @AssistedInject constructor(
onEditCustomRangeTapped()
} else {
appPrefsWrapper.setActiveTopPerformersTab(SelectionType.CUSTOM.name)
- analyticsTrackerWrapper.track(AnalyticsEvent.DASHBOARD_STATS_CUSTOM_RANGE_TAB_SELECTED)
+ analyticsTrackerWrapper.track(AnalyticsEvent.DASHBOARD_STATS_CUSTOM_RANGE_ADD_BUTTON_TAPPED)
}
}
}
@@ -287,7 +287,7 @@ class DashboardTopPerformersViewModel @AssistedInject constructor(
viewModelScope.launch {
customDateRangeDataStore.updateDateRange(statsTimeRange)
if (selectedDateRange.value?.rangeSelection?.selectionType != SelectionType.CUSTOM) {
- onTabSelected(SelectionType.CUSTOM)
+ onRangeChanged(SelectionType.CUSTOM)
}
}
}
diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/dashboard/topperformers/DashboardTopPerformersWidgetCard.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/dashboard/topperformers/DashboardTopPerformersWidgetCard.kt
index 9a06d8d7352..602af379e78 100644
--- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/dashboard/topperformers/DashboardTopPerformersWidgetCard.kt
+++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/dashboard/topperformers/DashboardTopPerformersWidgetCard.kt
@@ -20,7 +20,6 @@ import androidx.compose.runtime.livedata.observeAsState
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
-import androidx.compose.ui.platform.LocalLifecycleOwner
import androidx.compose.ui.platform.testTag
import androidx.compose.ui.res.colorResource
import androidx.compose.ui.res.painterResource
@@ -32,6 +31,7 @@ import androidx.compose.ui.unit.dp
import androidx.hilt.navigation.compose.hiltViewModel
import androidx.lifecycle.LiveData
import androidx.lifecycle.Observer
+import androidx.lifecycle.compose.LocalLifecycleOwner
import com.woocommerce.android.NavGraphMainDirections
import com.woocommerce.android.R
import com.woocommerce.android.extensions.navigateSafely
@@ -95,7 +95,7 @@ fun DashboardTopPerformersWidgetCard(
topPerformersState = topPerformersState,
selectedDateRange = selectedDateRange,
lastUpdateState = lastUpdateState,
- onTabSelected = topPerformersViewModel::onTabSelected,
+ onTabSelected = topPerformersViewModel::onRangeChanged,
onEditCustomRangeTapped = topPerformersViewModel::onEditCustomRangeTapped
)
}
diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/feedback/FeedbackSurveyFragment.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/feedback/FeedbackSurveyFragment.kt
index 61d8b89ab0c..27a4135f02b 100644
--- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/feedback/FeedbackSurveyFragment.kt
+++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/feedback/FeedbackSurveyFragment.kt
@@ -17,7 +17,6 @@ import com.woocommerce.android.analytics.AnalyticsTracker
import com.woocommerce.android.analytics.AnalyticsTracker.Companion.KEY_FEEDBACK_ACTION
import com.woocommerce.android.analytics.AnalyticsTracker.Companion.KEY_FEEDBACK_CONTEXT
import com.woocommerce.android.analytics.AnalyticsTracker.Companion.VALUE_ANALYTICS_HUB_FEEDBACK
-import com.woocommerce.android.analytics.AnalyticsTracker.Companion.VALUE_COUPONS_FEEDBACK
import com.woocommerce.android.analytics.AnalyticsTracker.Companion.VALUE_FEEDBACK_CANCELED
import com.woocommerce.android.analytics.AnalyticsTracker.Companion.VALUE_FEEDBACK_GENERAL_CONTEXT
import com.woocommerce.android.analytics.AnalyticsTracker.Companion.VALUE_FEEDBACK_OPENED
@@ -55,7 +54,6 @@ class FeedbackSurveyFragment : BaseFragment(R.layout.fragment_feedback_survey) {
SurveyType.STORE_ONBOARDING -> VALUE_FEEDBACK_STORE_SETUP_CONTEXT
SurveyType.ORDER_CREATION -> VALUE_SIMPLE_PAYMENTS_FEEDBACK
SurveyType.SHIPPING_LABELS -> VALUE_SHIPPING_LABELS_M4_FEEDBACK
- SurveyType.COUPONS -> VALUE_COUPONS_FEEDBACK
SurveyType.ADDONS -> VALUE_PRODUCT_ADDONS_FEEDBACK
SurveyType.ANALYTICS_HUB -> VALUE_ANALYTICS_HUB_FEEDBACK
SurveyType.PAYMENTS_HUB_TAP_TO_PAY -> VALUE_TAP_TO_PAY_FEEDBACK
diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/feedback/SurveyType.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/feedback/SurveyType.kt
index c8b1ace1056..d1123314384 100644
--- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/feedback/SurveyType.kt
+++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/feedback/SurveyType.kt
@@ -9,7 +9,6 @@ enum class SurveyType(private val untaggedUrl: String, private val milestone: In
SHIPPING_LABELS(AppUrls.CROWDSIGNAL_SHIPPING_LABELS_SURVEY, 4),
ORDER_CREATION(AppUrls.ORDER_CREATION_SURVEY, 1),
MAIN(AppUrls.CROWDSIGNAL_MAIN_SURVEY),
- COUPONS(AppUrls.COUPONS_SURVEY),
ADDONS(AppUrls.ADDONS_SURVEY),
STORE_ONBOARDING(AppUrls.CROWDSIGNAL_STORE_SETUP_SURVEY),
ANALYTICS_HUB(AppUrls.CROWDSIGNAL_ANALYTICS_HUB_SURVEY),
diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/login/accountmismatch/AccountMismatchErrorScreen.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/login/accountmismatch/AccountMismatchErrorScreen.kt
index 49d8baf2646..6d49bde5ea3 100644
--- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/login/accountmismatch/AccountMismatchErrorScreen.kt
+++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/login/accountmismatch/AccountMismatchErrorScreen.kt
@@ -4,7 +4,6 @@ import android.annotation.SuppressLint
import android.content.res.Configuration
import androidx.activity.compose.BackHandler
import androidx.compose.animation.AnimatedContent
-import androidx.compose.animation.ExperimentalAnimationApi
import androidx.compose.animation.core.updateTransition
import androidx.compose.foundation.Image
import androidx.compose.foundation.background
@@ -19,7 +18,6 @@ import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.shape.CircleShape
-import androidx.compose.foundation.text.ClickableText
import androidx.compose.foundation.text.KeyboardActions
import androidx.compose.foundation.text.KeyboardOptions
import androidx.compose.foundation.verticalScroll
@@ -49,7 +47,6 @@ import coil.request.ImageRequest.Builder
import com.woocommerce.android.AppUrls
import com.woocommerce.android.R
import com.woocommerce.android.ui.common.wpcomwebview.WPComWebViewAuthenticator
-import com.woocommerce.android.ui.compose.URL_ANNOTATION_TAG
import com.woocommerce.android.ui.compose.annotatedStringRes
import com.woocommerce.android.ui.compose.component.ProgressDialog
import com.woocommerce.android.ui.compose.component.ToolbarWithHelpButton
@@ -66,7 +63,6 @@ import com.woocommerce.android.ui.login.accountmismatch.AccountMismatchErrorView
import com.woocommerce.android.util.ChromeCustomTabUtils
import org.wordpress.android.fluxc.network.UserAgent
-@OptIn(ExperimentalAnimationApi::class)
@Composable
fun AccountMismatchErrorScreen(viewModel: AccountMismatchErrorViewModel) {
val webViewNavigator = rememberWebViewNavigator()
@@ -201,24 +197,23 @@ fun AccountMismatchErrorScreen(viewState: ViewState.MainState, modifier: Modifie
)
if (viewState.showJetpackTermsConsent) {
- val consent = annotatedStringRes(stringResId = R.string.login_jetpack_connection_consent)
val context = LocalContext.current
- ClickableText(
- text = consent,
- style = MaterialTheme.typography.caption.copy(
- textAlign = TextAlign.Center,
- color = MaterialTheme.colors.onSurface
- )
- ) {
- consent.getStringAnnotations(tag = URL_ANNOTATION_TAG, start = it, end = it)
- .firstOrNull()
- ?.let { annotation ->
- when (annotation.item) {
- "terms" -> ChromeCustomTabUtils.launchUrl(context, AppUrls.WORPRESS_COM_TERMS)
- "sync" -> ChromeCustomTabUtils.launchUrl(context, AppUrls.JETPACK_SYNC_POLICY)
- }
+ val consent = annotatedStringRes(
+ stringResId = R.string.login_jetpack_connection_consent,
+ onUrlClick = { url ->
+ when (url) {
+ "terms" -> ChromeCustomTabUtils.launchUrl(context, AppUrls.WORPRESS_COM_TERMS)
+ "sync" -> ChromeCustomTabUtils.launchUrl(context, AppUrls.JETPACK_SYNC_POLICY)
}
- }
+ }
+ )
+
+ Text(
+ text = consent,
+ style = MaterialTheme.typography.caption,
+ textAlign = TextAlign.Center,
+ color = MaterialTheme.colors.onSurface
+ )
}
}
}
diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/login/jetpack/components/JetpackConsent.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/login/jetpack/components/JetpackConsent.kt
index 6689ab26af1..67fdf75bd2c 100644
--- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/login/jetpack/components/JetpackConsent.kt
+++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/login/jetpack/components/JetpackConsent.kt
@@ -1,36 +1,35 @@
package com.woocommerce.android.ui.login.jetpack.components
-import androidx.compose.foundation.text.ClickableText
import androidx.compose.material.MaterialTheme
+import androidx.compose.material.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.text.style.TextAlign
import com.woocommerce.android.AppUrls
import com.woocommerce.android.R
-import com.woocommerce.android.ui.compose.URL_ANNOTATION_TAG
import com.woocommerce.android.ui.compose.annotatedStringRes
import com.woocommerce.android.util.ChromeCustomTabUtils
@Composable
fun JetpackConsent(modifier: Modifier = Modifier) {
- val consent = annotatedStringRes(stringResId = R.string.login_jetpack_connection_consent)
val context = LocalContext.current
- ClickableText(
+
+ val consent = annotatedStringRes(
+ stringResId = R.string.login_jetpack_connection_consent,
+ onUrlClick = { url ->
+ when (url) {
+ "terms" -> ChromeCustomTabUtils.launchUrl(context, AppUrls.WORPRESS_COM_TERMS)
+ "sync" -> ChromeCustomTabUtils.launchUrl(context, AppUrls.JETPACK_SYNC_POLICY)
+ }
+ }
+ )
+
+ Text(
text = consent,
- style = MaterialTheme.typography.caption.copy(
- textAlign = TextAlign.Center,
- color = MaterialTheme.colors.onSurface
- ),
+ style = MaterialTheme.typography.caption,
+ textAlign = TextAlign.Center,
+ color = MaterialTheme.colors.onSurface,
modifier = modifier
- ) {
- consent.getStringAnnotations(tag = URL_ANNOTATION_TAG, start = it, end = it)
- .firstOrNull()
- ?.let { annotation ->
- when (annotation.item) {
- "terms" -> ChromeCustomTabUtils.launchUrl(context, AppUrls.WORPRESS_COM_TERMS)
- "sync" -> ChromeCustomTabUtils.launchUrl(context, AppUrls.JETPACK_SYNC_POLICY)
- }
- }
- }
+ )
}
diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/login/jetpack/main/JetpackActivationMainScreen.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/login/jetpack/main/JetpackActivationMainScreen.kt
index 26e60c5e991..01425db74d7 100644
--- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/login/jetpack/main/JetpackActivationMainScreen.kt
+++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/login/jetpack/main/JetpackActivationMainScreen.kt
@@ -56,7 +56,7 @@ import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.tooling.preview.PreviewParameter
import androidx.compose.ui.tooling.preview.PreviewParameterProvider
import com.woocommerce.android.R
-import com.woocommerce.android.ui.compose.annotatedStringRes
+import com.woocommerce.android.ui.compose.annotatedStringResLegacy
import com.woocommerce.android.ui.compose.component.Toolbar
import com.woocommerce.android.ui.compose.component.WCColoredButton
import com.woocommerce.android.ui.compose.component.WCOutlinedButton
@@ -169,7 +169,7 @@ private fun ProgressState(
R.string.login_jetpack_steps_screen_subtitle
}
Text(
- text = annotatedStringRes(stringResId = subtitle, viewState.siteUrl),
+ text = annotatedStringResLegacy(stringResId = subtitle, viewState.siteUrl),
style = MaterialTheme.typography.body1
)
Spacer(modifier = Modifier.height(dimensionResource(id = R.dimen.major_100)))
diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/login/jetpack/sitecredentials/JetpackActivationSiteCredentialsScreen.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/login/jetpack/sitecredentials/JetpackActivationSiteCredentialsScreen.kt
index 3f5cf3f5fab..70dbd797bfd 100644
--- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/login/jetpack/sitecredentials/JetpackActivationSiteCredentialsScreen.kt
+++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/login/jetpack/sitecredentials/JetpackActivationSiteCredentialsScreen.kt
@@ -25,7 +25,7 @@ import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.text.input.ImeAction
import androidx.compose.ui.tooling.preview.Preview
import com.woocommerce.android.R
-import com.woocommerce.android.ui.compose.annotatedStringRes
+import com.woocommerce.android.ui.compose.annotatedStringResLegacy
import com.woocommerce.android.ui.compose.component.ProgressDialog
import com.woocommerce.android.ui.compose.component.Toolbar
import com.woocommerce.android.ui.compose.component.WCColoredButton
@@ -95,7 +95,7 @@ fun JetpackActivationSiteCredentialsScreen(
)
Spacer(modifier = Modifier.height(dimensionResource(id = R.dimen.minor_100)))
Text(
- text = annotatedStringRes(
+ text = annotatedStringResLegacy(
stringResId = if (viewState.isJetpackInstalled) {
R.string.login_jetpack_connection_enter_site_credentials
} else {
diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/main/MainActivity.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/main/MainActivity.kt
index 8b5f17d864e..84bcc116432 100644
--- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/main/MainActivity.kt
+++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/main/MainActivity.kt
@@ -395,7 +395,7 @@ class MainActivity :
super.onPause()
}
- override fun onNewIntent(intent: Intent?) {
+ override fun onNewIntent(intent: Intent) {
super.onNewIntent(intent)
// Verify authenticated session
diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/onboarding/payments/PaymentsPreSetupScreen.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/onboarding/payments/PaymentsPreSetupScreen.kt
index 5f40c77a079..2418ba30acf 100644
--- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/onboarding/payments/PaymentsPreSetupScreen.kt
+++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/onboarding/payments/PaymentsPreSetupScreen.kt
@@ -9,7 +9,6 @@ import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.rememberScrollState
-import androidx.compose.foundation.text.ClickableText
import androidx.compose.foundation.verticalScroll
import androidx.compose.material.Divider
import androidx.compose.material.MaterialTheme
@@ -26,7 +25,6 @@ import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview
import com.woocommerce.android.R
-import com.woocommerce.android.ui.compose.URL_ANNOTATION_TAG
import com.woocommerce.android.ui.compose.annotatedStringRes
import com.woocommerce.android.ui.compose.component.Toolbar
import com.woocommerce.android.ui.compose.component.WCColoredButton
@@ -112,21 +110,19 @@ private fun PaymentsPreSetupContent(
R.string.store_onboarding_wcpay_setup_description
} else {
R.string.store_onboarding_payments_setup_description
+ },
+ onUrlClick = { url ->
+ when (url) {
+ "termsOfService" -> onTermsOfServiceClick()
+ "privacyPolicy" -> onPrivacyPolicyClick()
+ }
}
)
- ClickableText(
+ Text(
text = bodyText,
- style = MaterialTheme.typography.body1.copy(color = colorResource(id = R.color.color_on_surface_medium))
- ) {
- bodyText.getStringAnnotations(tag = URL_ANNOTATION_TAG, start = it, end = it)
- .firstOrNull()
- ?.let { annotation ->
- when (annotation.item) {
- "termsOfService" -> onTermsOfServiceClick()
- "privacyPolicy" -> onPrivacyPolicyClick()
- }
- }
- }
+ style = MaterialTheme.typography.body1,
+ color = colorResource(id = R.color.color_on_surface_medium)
+ )
}
}
diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/onboarding/payments/WooPaymentsSetupInstructionsScreen.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/onboarding/payments/WooPaymentsSetupInstructionsScreen.kt
index 15b4ef32de6..65e5eef49fd 100644
--- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/onboarding/payments/WooPaymentsSetupInstructionsScreen.kt
+++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/onboarding/payments/WooPaymentsSetupInstructionsScreen.kt
@@ -15,7 +15,6 @@ import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.width
import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.shape.CircleShape
-import androidx.compose.foundation.text.ClickableText
import androidx.compose.foundation.verticalScroll
import androidx.compose.material.Divider
import androidx.compose.material.Icon
@@ -38,7 +37,6 @@ import androidx.compose.ui.unit.dp
import com.woocommerce.android.R
import com.woocommerce.android.R.color
import com.woocommerce.android.R.string
-import com.woocommerce.android.ui.compose.URL_ANNOTATION_TAG
import com.woocommerce.android.ui.compose.annotatedStringRes
import com.woocommerce.android.ui.compose.component.Toolbar
import com.woocommerce.android.ui.compose.component.WCColoredButton
@@ -124,17 +122,17 @@ private fun WooPaymentsSetupInstructionsContent(
modifier = Modifier.padding(bottom = dimensionResource(id = R.dimen.major_100))
)
- val text = annotatedStringRes(stringResId = R.string.store_onboarding_wcpay_instructions_content_step_1_content)
+ val text = annotatedStringRes(
+ stringResId = R.string.store_onboarding_wcpay_instructions_content_step_1_content,
+ onUrlClick = { onWPComAccountMoreDetailsClick() }
+ )
+
WooPaymentsSetupInstructionsStep(stepNumber = 1) {
- ClickableText(
+ Text(
text = text,
- style = MaterialTheme.typography.subtitle1
- .copy(color = colorResource(id = color.color_on_surface)),
- ) {
- text.getStringAnnotations(tag = URL_ANNOTATION_TAG, start = it, end = it)
- .firstOrNull()
- ?.let { onWPComAccountMoreDetailsClick() }
- }
+ style = MaterialTheme.typography.subtitle1,
+ color = colorResource(id = color.color_on_surface)
+ )
}
WooPaymentsSetupInstructionsStep(
@@ -217,16 +215,15 @@ private fun WooPaymentsSetupInstructionsFooter(
.align(Alignment.CenterVertically)
.padding(end = 8.dp)
)
- val text = annotatedStringRes(stringResId = R.string.store_onboarding_wcpay_instructions_content_learn_more)
- ClickableText(
+ val text = annotatedStringRes(
+ stringResId = R.string.store_onboarding_wcpay_instructions_content_learn_more,
+ onUrlClick = { onLearnMoreClick() }
+ )
+ Text(
text = text,
- style = MaterialTheme.typography.subtitle2
- .copy(color = colorResource(id = R.color.color_on_surface_medium)),
- ) {
- text.getStringAnnotations(tag = URL_ANNOTATION_TAG, start = it, end = it)
- .firstOrNull()
- ?.let { onLearnMoreClick() }
- }
+ style = MaterialTheme.typography.subtitle2,
+ color = colorResource(id = R.color.color_on_surface_medium)
+ )
}
}
}
diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/creation/OrderCreateEditViewModel.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/creation/OrderCreateEditViewModel.kt
index 35bd1026ebf..876dac6bf74 100644
--- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/creation/OrderCreateEditViewModel.kt
+++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/creation/OrderCreateEditViewModel.kt
@@ -141,7 +141,7 @@ import com.woocommerce.android.ui.products.ParameterRepository
import com.woocommerce.android.ui.products.ProductRestriction
import com.woocommerce.android.ui.products.ProductStatus
import com.woocommerce.android.ui.products.ProductType
-import com.woocommerce.android.ui.products.inventory.FetchProductBySKU
+import com.woocommerce.android.ui.products.inventory.FetchProductByIdentifier
import com.woocommerce.android.ui.products.selector.ProductSelectorViewModel.SelectedItem
import com.woocommerce.android.ui.products.selector.ProductSelectorViewModel.SelectedItem.Product
import com.woocommerce.android.ui.products.selector.variationIds
@@ -209,7 +209,7 @@ class OrderCreateEditViewModel @Inject constructor(
private val currencySymbolFinder: CurrencySymbolFinder,
private val totalsHelper: OrderCreateEditTotalsHelper,
private val feedbackRepository: FeedbackRepository,
- private val fetchProductBySKU: FetchProductBySKU,
+ private val fetchProductByIdentifier: FetchProductByIdentifier,
dateUtils: DateUtils,
autoSyncOrder: AutoSyncOrder,
autoSyncPriceModifier: AutoSyncPriceModifier,
@@ -917,7 +917,7 @@ class OrderCreateEditViewModel @Inject constructor(
}.orEmpty()
viewModelScope.launch {
viewState = viewState.copy(isUpdatingOrderDraft = true)
- val result = fetchProductBySKU(barcodeOptions.sku, barcodeOptions.barcodeFormat)
+ val result = fetchProductByIdentifier(barcodeOptions.sku, barcodeOptions.barcodeFormat)
if (result.isSuccess) {
val product = result.getOrNull()
if (product != null) {
diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/creation/shipping/AmountBigDecimalTextField.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/creation/shipping/AmountBigDecimalTextField.kt
index 72c08577d7a..8d29bafe251 100644
--- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/creation/shipping/AmountBigDecimalTextField.kt
+++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/creation/shipping/AmountBigDecimalTextField.kt
@@ -2,8 +2,8 @@ package com.woocommerce.android.ui.orders.creation.shipping
import android.util.TypedValue
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
-import androidx.compose.ui.platform.LocalLifecycleOwner
import androidx.compose.ui.viewinterop.AndroidView
+import androidx.lifecycle.compose.LocalLifecycleOwner
import com.google.android.material.textfield.TextInputLayout
import com.woocommerce.android.R
import com.woocommerce.android.extensions.filterNotNull
diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/creation/views/ExpandableGroupedProductCard.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/creation/views/ExpandableGroupedProductCard.kt
index a57640a3658..4af34ac2f68 100644
--- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/creation/views/ExpandableGroupedProductCard.kt
+++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/creation/views/ExpandableGroupedProductCard.kt
@@ -4,8 +4,8 @@ import android.annotation.SuppressLint
import androidx.compose.animation.AnimatedVisibility
import androidx.compose.animation.core.MutableTransitionState
import androidx.compose.animation.core.animateFloat
+import androidx.compose.animation.core.rememberTransition
import androidx.compose.animation.core.tween
-import androidx.compose.animation.core.updateTransition
import androidx.compose.animation.expandVertically
import androidx.compose.animation.fadeIn
import androidx.compose.animation.fadeOut
@@ -240,7 +240,7 @@ fun ExpandableChildrenProductCard(
val transitionState = remember {
MutableTransitionState(isExpanded).apply { targetState = !isExpanded }
}
- val transition = updateTransition(transitionState, "expandableChildProductCard")
+ val transition = rememberTransition(transitionState, "expandableChildProductCard")
val chevronRotation by transition.animateFloat(
transitionSpec = { tween(durationMillis = ANIM_DURATION_MILLIS) },
label = "childChevronRotation"
diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/creation/views/ExpandableProductCard.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/creation/views/ExpandableProductCard.kt
index 21ed47ac3c8..b9f61d48e43 100644
--- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/creation/views/ExpandableProductCard.kt
+++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/creation/views/ExpandableProductCard.kt
@@ -7,8 +7,8 @@ import androidx.compose.animation.core.MutableTransitionState
import androidx.compose.animation.core.animateDpAsState
import androidx.compose.animation.core.animateFloat
import androidx.compose.animation.core.animateFloatAsState
+import androidx.compose.animation.core.rememberTransition
import androidx.compose.animation.core.tween
-import androidx.compose.animation.core.updateTransition
import androidx.compose.animation.expandVertically
import androidx.compose.animation.fadeIn
import androidx.compose.animation.fadeOut
@@ -108,7 +108,7 @@ fun ExpandableProductCard(
val transitionState = remember {
MutableTransitionState(isExpanded).apply { targetState = !isExpanded }
}
- val transition = updateTransition(transitionState, "expandableProductCard")
+ val transition = rememberTransition(transitionState, "expandableProductCard")
val chevronRotation by transition.animateFloat(
transitionSpec = { tween(durationMillis = ANIM_DURATION_MILLIS) },
label = "chevronRotation"
diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/AddressSection.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/AddressSection.kt
index 329658ee43b..6c45ce2c838 100644
--- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/AddressSection.kt
+++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/AddressSection.kt
@@ -6,7 +6,10 @@ import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
+import androidx.compose.foundation.layout.sizeIn
import androidx.compose.material.Divider
+import androidx.compose.material.DropdownMenu
+import androidx.compose.material.DropdownMenuItem
import androidx.compose.material.Icon
import androidx.compose.material.IconButton
import androidx.compose.material.MaterialTheme
@@ -14,24 +17,33 @@ import androidx.compose.material.Text
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.MoreHoriz
import androidx.compose.runtime.Composable
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.remember
+import androidx.compose.runtime.setValue
+import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.res.dimensionResource
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
import androidx.constraintlayout.compose.ConstraintLayout
import com.woocommerce.android.R
import com.woocommerce.android.model.Address
import com.woocommerce.android.model.AmbiguousLocation
import com.woocommerce.android.model.Location
import com.woocommerce.android.ui.compose.theme.WooThemeWithBackground
+import com.woocommerce.android.ui.orders.wooshippinglabels.models.OriginShippingAddress
@Composable
-@Suppress("DestructuringDeclarationWithTooManyEntries")
-internal fun AddressSection(
- shipFrom: Address,
- shipTo: Address,
+@Suppress("DestructuringDeclarationWithTooManyEntries", "UnusedParameter")
+internal fun AddressSectionPortrait(
+ shippingAddresses: WooShippingAddresses,
+ originAddresses: List,
+ onShippingFromAddressChange: (OriginShippingAddress) -> Unit,
+ onShippingToAddressChange: (Address) -> Unit,
modifier: Modifier = Modifier
) {
RoundedCornerBoxWithBorder(modifier.fillMaxWidth()) {
@@ -47,6 +59,7 @@ internal fun AddressSection(
) = createRefs()
val barrier = createEndBarrier(shipFromLabel, shipToLabel)
+ var expanded by remember { mutableStateOf(false) }
Text(
text = stringResource(id = R.string.orderdetail_shipping_label_item_shipfrom),
@@ -63,7 +76,7 @@ internal fun AddressSection(
)
Text(
- text = shipFrom.toShippingFromString().uppercase(),
+ text = shippingAddresses.shipFrom.toShippingFromString().uppercase(),
maxLines = 1,
overflow = TextOverflow.Ellipsis,
color = MaterialTheme.colors.primary,
@@ -82,7 +95,7 @@ internal fun AddressSection(
)
)
IconButton(
- onClick = { },
+ onClick = { expanded = true },
modifier = Modifier
.constrainAs(shipFromSelect) {
top.linkTo(shipFromLabel.top)
@@ -98,6 +111,24 @@ internal fun AddressSection(
contentDescription = null,
tint = MaterialTheme.colors.primary
)
+ DropdownMenu(
+ expanded = expanded,
+ onDismissRequest = { expanded = false },
+ modifier = Modifier.sizeIn(minWidth = 150.dp)
+ ) {
+ originAddresses.forEach { option ->
+ DropdownMenuItem(onClick = {
+ onShippingFromAddressChange(option)
+ expanded = false
+ }) {
+ Text(
+ text = option.toShippingFromString().uppercase(),
+ style = MaterialTheme.typography.subtitle1,
+ modifier = Modifier.padding(8.dp)
+ )
+ }
+ }
+ }
}
Divider(
modifier = Modifier.constrainAs(divider) {
@@ -119,7 +150,7 @@ internal fun AddressSection(
)
)
Text(
- text = shipTo.toString(),
+ text = shippingAddresses.shipTo.toString(),
modifier = Modifier
.constrainAs(shipToValue) {
top.linkTo(shipToLabel.top)
@@ -140,11 +171,9 @@ internal fun AddressSection(
.constrainAs(shipToEdit) {
top.linkTo(shipToLabel.top)
end.linkTo(parent.end)
+ bottom.linkTo(shipToLabel.bottom)
}
- .padding(
- top = dimensionResource(R.dimen.major_100),
- end = dimensionResource(R.dimen.minor_100)
- )
+ .padding(end = dimensionResource(R.dimen.minor_100))
) {
Icon(
painter = painterResource(id = R.drawable.ic_edit_pencil),
@@ -158,64 +187,43 @@ internal fun AddressSection(
@Preview
@Composable
-private fun AddressSectionPreview() {
+private fun AddressSectionPortraitPreview() {
WooThemeWithBackground {
Box(modifier = Modifier.padding(dimensionResource(R.dimen.major_100))) {
- AddressSection(
- shipFrom = getShipFrom(),
- shipTo = getShipTo()
+ AddressSectionPortrait(
+ shippingAddresses = WooShippingAddresses(
+ shipFrom = getShipFrom(),
+ shipTo = getShipTo(),
+ originAddresses = listOf(getShipFrom())
+ ),
+ originAddresses = listOf(getShipFrom()),
+ onShippingFromAddressChange = {},
+ onShippingToAddressChange = {}
)
}
}
}
@Composable
+@Suppress("UnusedParameter")
internal fun AddressSectionLandscape(
- shipFrom: Address,
- shipTo: Address,
+ shippingAddresses: WooShippingAddresses,
+ onShippingFromAddressChange: (OriginShippingAddress) -> Unit,
+ onShippingToAddressChange: (Address) -> Unit,
modifier: Modifier = Modifier
) {
RoundedCornerBoxWithBorder(modifier) {
- Row(modifier = Modifier.fillMaxWidth().height(IntrinsicSize.Min)) {
- Row(modifier = Modifier.weight(1f)) {
- Text(
- text = stringResource(id = R.string.orderdetail_shipping_label_item_shipfrom),
- modifier = Modifier
- .padding(
- start = dimensionResource(R.dimen.major_100),
- top = dimensionResource(R.dimen.major_100),
- end = dimensionResource(R.dimen.major_100)
- )
- )
- Text(
- text = shipFrom.toShippingFromString().uppercase(),
- maxLines = 1,
- overflow = TextOverflow.Ellipsis,
- color = MaterialTheme.colors.primary,
- modifier = Modifier
- .padding(
- top = dimensionResource(R.dimen.major_100),
- end = dimensionResource(R.dimen.major_100),
- start = dimensionResource(R.dimen.major_100),
- bottom = dimensionResource(R.dimen.minor_100)
- )
- .weight(1f)
- )
- IconButton(
- onClick = { },
- modifier = Modifier
- .padding(
- top = dimensionResource(R.dimen.minor_50),
- end = dimensionResource(R.dimen.minor_100)
- )
- ) {
- Icon(
- imageVector = Icons.Filled.MoreHoriz,
- contentDescription = null,
- tint = MaterialTheme.colors.primary
- )
- }
- }
+ Row(
+ modifier = Modifier
+ .fillMaxWidth()
+ .height(IntrinsicSize.Min)
+ ) {
+ ShipFromSelection(
+ shipFrom = shippingAddresses.shipFrom,
+ originAddresses = shippingAddresses.originAddresses,
+ onShippingFromAddressChange = onShippingFromAddressChange,
+ modifier = Modifier.weight(1f)
+ )
VerticalDivider()
Row(modifier = Modifier.weight(1f)) {
Text(
@@ -227,8 +235,9 @@ internal fun AddressSectionLandscape(
bottom = dimensionResource(R.dimen.major_100)
)
)
+
Text(
- text = shipTo.toString(),
+ text = shippingAddresses.shipTo.toString(),
modifier = Modifier
.padding(
top = dimensionResource(R.dimen.major_100),
@@ -238,13 +247,22 @@ internal fun AddressSectionLandscape(
)
.weight(1f)
)
- IconButton(
- onClick = { },
- modifier = Modifier
+
+ val iconModifier = if (shippingAddresses.shipTo == Address.EMPTY) {
+ Modifier
+ .padding(end = dimensionResource(R.dimen.minor_100))
+ .align(Alignment.CenterVertically)
+ } else {
+ Modifier
.padding(
top = dimensionResource(R.dimen.minor_100),
end = dimensionResource(R.dimen.minor_100)
)
+ }
+
+ IconButton(
+ onClick = { },
+ modifier = iconModifier
) {
Icon(
painter = painterResource(id = R.drawable.ic_edit_pencil),
@@ -257,20 +275,92 @@ internal fun AddressSectionLandscape(
}
}
+@Composable
+private fun ShipFromSelection(
+ shipFrom: OriginShippingAddress,
+ originAddresses: List,
+ onShippingFromAddressChange: (OriginShippingAddress) -> Unit,
+ modifier: Modifier = Modifier
+) {
+ var expanded by remember { mutableStateOf(false) }
+ Row(modifier = modifier) {
+ Text(
+ text = stringResource(id = R.string.orderdetail_shipping_label_item_shipfrom),
+ modifier = Modifier
+ .padding(
+ start = dimensionResource(R.dimen.major_100),
+ top = dimensionResource(R.dimen.major_100),
+ end = dimensionResource(R.dimen.major_100)
+ )
+ )
+ Text(
+ text = shipFrom.toShippingFromString().uppercase(),
+ maxLines = 1,
+ overflow = TextOverflow.Ellipsis,
+ color = MaterialTheme.colors.primary,
+ modifier = Modifier
+ .padding(
+ top = dimensionResource(R.dimen.major_100),
+ end = dimensionResource(R.dimen.major_100),
+ start = dimensionResource(R.dimen.major_100),
+ bottom = dimensionResource(R.dimen.minor_100)
+ )
+ .weight(1f)
+ )
+ IconButton(
+ onClick = { expanded = true },
+ modifier = Modifier
+ .padding(
+ top = dimensionResource(R.dimen.minor_50),
+ end = dimensionResource(R.dimen.minor_100)
+ )
+ ) {
+ Icon(
+ imageVector = Icons.Filled.MoreHoriz,
+ contentDescription = null,
+ tint = MaterialTheme.colors.primary
+ )
+ DropdownMenu(
+ expanded = expanded,
+ onDismissRequest = { expanded = false },
+ modifier = Modifier.sizeIn(minWidth = 150.dp)
+ ) {
+ originAddresses.forEach { option ->
+ DropdownMenuItem(onClick = {
+ onShippingFromAddressChange(option)
+ expanded = false
+ }) {
+ Text(
+ text = option.toShippingFromString().uppercase(),
+ style = MaterialTheme.typography.subtitle1,
+ modifier = Modifier.padding(8.dp)
+ )
+ }
+ }
+ }
+ }
+ }
+}
+
@Preview(widthDp = 750, heightDp = 200)
@Composable
private fun AddressSectionLandscapePreview() {
WooThemeWithBackground {
Box(modifier = Modifier.padding(dimensionResource(R.dimen.major_100))) {
AddressSectionLandscape(
- shipFrom = getShipFrom(),
- shipTo = getShipTo()
+ shippingAddresses = WooShippingAddresses(
+ shipFrom = getShipFrom(),
+ shipTo = getShipTo(),
+ originAddresses = listOf(getShipFrom())
+ ),
+ onShippingFromAddressChange = {},
+ onShippingToAddressChange = {}
)
}
}
}
-internal fun getShipFrom() = Address(
+internal fun getShipFrom() = OriginShippingAddress(
firstName = "first name",
lastName = "last name",
company = "Company",
@@ -280,8 +370,11 @@ internal fun getShipFrom() = Address(
city = "City",
postcode = "",
email = "email",
- country = Location("US", "USA"),
- state = AmbiguousLocation.Defined(Location("CA", "California", "USA"))
+ country = "USA",
+ state = "California",
+ id = "id_1",
+ isDefault = true,
+ isVerified = true
)
internal fun getShipTo() = Address(
diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/ObserveOriginAddresses.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/ObserveOriginAddresses.kt
new file mode 100644
index 00000000000..1a86d2d2bfe
--- /dev/null
+++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/ObserveOriginAddresses.kt
@@ -0,0 +1,65 @@
+package com.woocommerce.android.ui.orders.wooshippinglabels
+
+import com.woocommerce.android.ui.orders.wooshippinglabels.models.OriginShippingAddress
+import kotlinx.coroutines.delay
+import kotlinx.coroutines.flow.Flow
+import kotlinx.coroutines.flow.flowOf
+import javax.inject.Inject
+
+class ObserveOriginAddresses @Inject constructor() {
+ @Suppress("MagicNumber")
+ suspend operator fun invoke(): Flow> {
+ delay(200)
+ val addresses = listOf(
+ OriginShippingAddress(
+ firstName = "first name",
+ lastName = "last name",
+ company = "Company",
+ phone = "",
+ address1 = "A huge address that should be truncated",
+ address2 = "",
+ city = "San Francisco",
+ postcode = "",
+ email = "email",
+ country = "USA",
+ state = "California",
+ id = "id_1",
+ isDefault = false,
+ isVerified = true
+ ),
+ OriginShippingAddress(
+ firstName = "first name",
+ lastName = "last name",
+ company = "Company",
+ phone = "",
+ address1 = "Another huge address that should be truncated",
+ address2 = "",
+ city = "Oakland",
+ postcode = "",
+ email = "email",
+ country = "USA",
+ state = "California",
+ id = "id_1",
+ isDefault = false,
+ isVerified = true
+ ),
+ OriginShippingAddress(
+ firstName = "first name",
+ lastName = "last name",
+ company = "Company",
+ phone = "",
+ address1 = "Small address",
+ address2 = "",
+ city = "Palo Alto",
+ postcode = "",
+ email = "email",
+ country = "USA",
+ state = "California",
+ id = "id_1",
+ isDefault = true,
+ isVerified = true
+ )
+ )
+ return flowOf(addresses)
+ }
+}
diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/ShipmentDetails.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/ShipmentDetails.kt
index 44d7c1bc88a..8608d77e205 100644
--- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/ShipmentDetails.kt
+++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/ShipmentDetails.kt
@@ -42,9 +42,11 @@ import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.dp
import com.woocommerce.android.R
+import com.woocommerce.android.extensions.appendWithIfNotEmpty
import com.woocommerce.android.model.Address
import com.woocommerce.android.ui.compose.animations.SkeletonView
import com.woocommerce.android.ui.compose.theme.WooThemeWithBackground
+import com.woocommerce.android.ui.orders.wooshippinglabels.models.OriginShippingAddress
import com.woocommerce.android.util.StringUtils
import kotlinx.coroutines.launch
@@ -54,9 +56,12 @@ fun ShipmentDetails(
scaffoldState: BottomSheetScaffoldState,
shippableItems: ShippableItemsUI,
shippingLines: List,
+ shippingAddresses: WooShippingAddresses,
markOrderComplete: Boolean,
onMarkOrderCompleteChange: (Boolean) -> Unit,
modifier: Modifier = Modifier,
+ onShippingFromAddressChange: (OriginShippingAddress) -> Unit = {},
+ onShippingToAddressChange: (Address) -> Unit = {},
handlerModifier: Modifier = Modifier,
) {
val scope = rememberCoroutineScope()
@@ -103,6 +108,9 @@ fun ShipmentDetails(
ShipmentDetailsLandscape(
shippableItems = shippableItems,
shippingLines = shippingLines,
+ shippingAddresses = shippingAddresses,
+ onShippingFromAddressChange = onShippingFromAddressChange,
+ onShippingToAddressChange = onShippingToAddressChange,
modifier = modifier
)
} else {
@@ -111,6 +119,9 @@ fun ShipmentDetails(
shippingLines = shippingLines,
markOrderComplete = markOrderComplete,
onMarkOrderCompleteChange = onMarkOrderCompleteChange,
+ shippingAddresses = shippingAddresses,
+ onShippingFromAddressChange = onShippingFromAddressChange,
+ onShippingToAddressChange = onShippingToAddressChange,
modifier = modifier
)
}
@@ -120,6 +131,9 @@ fun ShipmentDetails(
private fun ShipmentDetailsPortrait(
shippableItems: ShippableItemsUI,
shippingLines: List,
+ shippingAddresses: WooShippingAddresses,
+ onShippingFromAddressChange: (OriginShippingAddress) -> Unit = {},
+ onShippingToAddressChange: (Address) -> Unit = {},
markOrderComplete: Boolean,
onMarkOrderCompleteChange: (Boolean) -> Unit,
modifier: Modifier = Modifier,
@@ -134,8 +148,9 @@ private fun ShipmentDetailsPortrait(
) {
OrderDetailsSection(
- shipFrom = getShipFrom(),
- shipTo = getShipTo(),
+ shippingAddresses = shippingAddresses,
+ onShippingFromAddressChange = onShippingFromAddressChange,
+ onShippingToAddressChange = onShippingToAddressChange,
totalItems = shippableItems.shippableItems.size,
totalItemsCost = shippableItems.formattedTotalPrice,
shippingLines = shippingLines
@@ -159,6 +174,9 @@ private fun ShipmentDetailsPortrait(
private fun ShipmentDetailsLandscape(
shippableItems: ShippableItemsUI,
shippingLines: List,
+ shippingAddresses: WooShippingAddresses,
+ onShippingFromAddressChange: (OriginShippingAddress) -> Unit = {},
+ onShippingToAddressChange: (Address) -> Unit = {},
modifier: Modifier = Modifier,
) {
Column(modifier) {
@@ -171,8 +189,9 @@ private fun ShipmentDetailsLandscape(
) {
AddressSectionLandscape(
- shipFrom = getShipFrom(),
- shipTo = getShipTo(),
+ shippingAddresses = shippingAddresses,
+ onShippingFromAddressChange = onShippingFromAddressChange,
+ onShippingToAddressChange = onShippingToAddressChange,
modifier = Modifier.padding(horizontal = dimensionResource(R.dimen.major_100))
)
Row(
@@ -222,8 +241,9 @@ private fun ShipmentDetailsSectionTitlePreview() {
@Composable
private fun OrderDetailsSection(
- shipFrom: Address,
- shipTo: Address,
+ shippingAddresses: WooShippingAddresses,
+ onShippingFromAddressChange: (OriginShippingAddress) -> Unit,
+ onShippingToAddressChange: (Address) -> Unit,
totalItems: Int,
totalItemsCost: String,
shippingLines: List,
@@ -235,9 +255,11 @@ private fun OrderDetailsSection(
modifier = Modifier.padding(start = dimensionResource(R.dimen.major_100))
)
Spacer(modifier = Modifier.height(dimensionResource(R.dimen.major_100)))
- AddressSection(
- shipFrom = shipFrom,
- shipTo = shipTo,
+ AddressSectionPortrait(
+ shippingAddresses = shippingAddresses,
+ originAddresses = shippingAddresses.originAddresses,
+ onShippingFromAddressChange = onShippingFromAddressChange,
+ onShippingToAddressChange = onShippingToAddressChange,
modifier = Modifier.padding(horizontal = dimensionResource(R.dimen.major_100))
)
TotalCard(
@@ -284,7 +306,12 @@ fun ShipmentDetailsLandscapePreview() {
formattedTotalWeight = "8.5kg",
formattedTotalPrice = "$92.78"
),
- shippingLines = getShippingLines()
+ shippingLines = getShippingLines(),
+ shippingAddresses = WooShippingAddresses(
+ shipFrom = getShipFrom(),
+ shipTo = getShipTo(),
+ originAddresses = listOf(getShipFrom())
+ )
)
}
}
@@ -471,7 +498,13 @@ fun getShippingLines(number: Int = 3) = List(number) { i ->
)
}
-fun Address.toShippingFromString() = this.getEnvelopeAddress().replace("\n", " ")
+fun OriginShippingAddress.toShippingFromString() = StringBuilder()
+ .appendWithIfNotEmpty(this.address1)
+ .appendWithIfNotEmpty(this.address2)
+ .appendWithIfNotEmpty(this.city)
+ .appendWithIfNotEmpty(this.state)
+ .appendWithIfNotEmpty(this.postcode)
+ .toString()
data class ShippingLineSummaryUI(
val title: String,
diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/WooShippingLabelCreationScreen.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/WooShippingLabelCreationScreen.kt
index f87c6065b98..37610eabe8b 100644
--- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/WooShippingLabelCreationScreen.kt
+++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/WooShippingLabelCreationScreen.kt
@@ -43,9 +43,11 @@ import androidx.compose.ui.tooling.preview.Devices
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import com.woocommerce.android.R
+import com.woocommerce.android.model.Address
import com.woocommerce.android.ui.compose.component.WCColoredButton
import com.woocommerce.android.ui.compose.modifiers.dashedBorder
import com.woocommerce.android.ui.compose.theme.WooThemeWithBackground
+import com.woocommerce.android.ui.orders.wooshippinglabels.models.OriginShippingAddress
@Composable
fun WooShippingLabelCreationScreen(viewModel: WooShippingLabelCreationViewModel) {
@@ -61,9 +63,16 @@ fun WooShippingLabelCreationScreen(viewModel: WooShippingLabelCreationViewModel)
onSelectPackageClick = viewModel::onSelectPackageClicked,
onPurchaseShippingLabel = viewModel::onPurchaseShippingLabel,
shippableItems = viewState.shippableItems,
- shippingLines = viewState.shippingLines
+ shippingLines = viewState.shippingLines,
+ shippingAddresses = viewState.shippingAddresses,
+ onShippingFromAddressChange = viewModel::onShippingFromAddressChange,
+ onShippingToAddressChange = viewModel::onShippingToAddressChange
)
}
+
+ WooShippingLabelCreationViewModel.WooShippingViewState.Error -> {
+ TODO()
+ }
}
}
@@ -72,9 +81,12 @@ fun WooShippingLabelCreationScreen(viewModel: WooShippingLabelCreationViewModel)
fun WooShippingLabelCreationScreen(
shippableItems: ShippableItemsUI,
shippingLines: List,
- modifier: Modifier = Modifier,
+ shippingAddresses: WooShippingAddresses,
+ onShippingFromAddressChange: (OriginShippingAddress) -> Unit,
+ onShippingToAddressChange: (Address) -> Unit,
onSelectPackageClick: () -> Unit,
- onPurchaseShippingLabel: () -> Unit
+ onPurchaseShippingLabel: () -> Unit,
+ modifier: Modifier = Modifier
) {
val scaffoldState = rememberBottomSheetScaffoldState()
Box(modifier = Modifier.fillMaxSize()) {
@@ -83,7 +95,10 @@ fun WooShippingLabelCreationScreen(
modifier = modifier,
onSelectPackageClick = onSelectPackageClick,
scaffoldState = scaffoldState,
- shippingLines = shippingLines
+ shippingLines = shippingLines,
+ shippingAddresses = shippingAddresses,
+ onShippingFromAddressChange = onShippingFromAddressChange,
+ onShippingToAddressChange = onShippingToAddressChange
)
val isDarkTheme = isSystemInDarkTheme()
val isCollapsed = scaffoldState.bottomSheetState.isCollapsed
@@ -119,9 +134,12 @@ fun WooShippingLabelCreationScreen(
private fun LabelCreationScreenWithBottomSheet(
shippableItems: ShippableItemsUI,
shippingLines: List,
- modifier: Modifier = Modifier,
onSelectPackageClick: () -> Unit,
- scaffoldState: BottomSheetScaffoldState
+ shippingAddresses: WooShippingAddresses,
+ onShippingFromAddressChange: (OriginShippingAddress) -> Unit,
+ onShippingToAddressChange: (Address) -> Unit,
+ scaffoldState: BottomSheetScaffoldState,
+ modifier: Modifier = Modifier
) {
BottomSheetScaffold(
sheetContent = {
@@ -132,6 +150,9 @@ private fun LabelCreationScreenWithBottomSheet(
scaffoldState = scaffoldState,
markOrderComplete = markOrderComplete.value,
onMarkOrderCompleteChange = { markOrderComplete.value = it },
+ shippingAddresses = shippingAddresses,
+ onShippingFromAddressChange = onShippingFromAddressChange,
+ onShippingToAddressChange = onShippingToAddressChange,
modifier = Modifier.padding(bottom = 74.dp),
)
},
@@ -213,7 +234,14 @@ private fun WooShippingLabelCreationScreenPreview() {
shippingLines = getShippingLines(),
modifier = Modifier.fillMaxSize(),
onSelectPackageClick = {},
- onPurchaseShippingLabel = {}
+ onPurchaseShippingLabel = {},
+ shippingAddresses = WooShippingAddresses(
+ shipFrom = getShipFrom(),
+ shipTo = getShipTo(),
+ originAddresses = listOf(getShipFrom())
+ ),
+ onShippingFromAddressChange = {},
+ onShippingToAddressChange = {}
)
}
}
diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/WooShippingLabelCreationViewModel.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/WooShippingLabelCreationViewModel.kt
index aaa6614c2dd..d7f8eccce6c 100644
--- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/WooShippingLabelCreationViewModel.kt
+++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/WooShippingLabelCreationViewModel.kt
@@ -3,8 +3,10 @@ package com.woocommerce.android.ui.orders.wooshippinglabels
import androidx.lifecycle.SavedStateHandle
import com.woocommerce.android.extensions.formatToString
import com.woocommerce.android.extensions.sumByFloat
+import com.woocommerce.android.model.Address
import com.woocommerce.android.model.Order
import com.woocommerce.android.ui.orders.details.OrderDetailRepository
+import com.woocommerce.android.ui.orders.wooshippinglabels.models.OriginShippingAddress
import com.woocommerce.android.ui.orders.wooshippinglabels.models.ShippableItemModel
import com.woocommerce.android.ui.orders.wooshippinglabels.models.StoreOptionsModel
import com.woocommerce.android.util.CurrencyFormatter
@@ -13,6 +15,8 @@ import com.woocommerce.android.viewmodel.ScopedViewModel
import com.woocommerce.android.viewmodel.navArgs
import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.flow.MutableStateFlow
+import kotlinx.coroutines.flow.combine
+import kotlinx.coroutines.flow.flowOf
import kotlinx.coroutines.launch
import javax.inject.Inject
@@ -21,7 +25,8 @@ class WooShippingLabelCreationViewModel @Inject constructor(
savedState: SavedStateHandle,
private val orderDetailRepository: OrderDetailRepository,
private val getShippableItems: GetShippableItems,
- private val currencyFormatter: CurrencyFormatter
+ private val currencyFormatter: CurrencyFormatter,
+ private val observeOriginAddresses: ObserveOriginAddresses
) : ScopedViewModel(savedState) {
private val navArgs: WooShippingLabelCreationFragmentArgs by savedState.navArgs()
private val storeOptions = StoreOptionsModel(
@@ -35,8 +40,16 @@ class WooShippingLabelCreationViewModel @Inject constructor(
val viewState: MutableStateFlow = MutableStateFlow(WooShippingViewState.Loading)
init {
- launch {
- orderDetailRepository.getOrderById(navArgs.orderId)?.let { order ->
+ launch { observeShippingLabelInformation() }
+ }
+
+ private suspend fun observeShippingLabelInformation() {
+ flowOf(orderDetailRepository.getOrderById(navArgs.orderId))
+ .combine(observeOriginAddresses()) { order, originAddresses ->
+ val selectedOriginAddress = getSelectedOriginAddress(originAddresses)
+ if (order == null || selectedOriginAddress == null) {
+ return@combine WooShippingViewState.Error
+ }
val items = getShippableItems(order)
shippableItems.value = items
@@ -46,15 +59,47 @@ class WooShippingLabelCreationViewModel @Inject constructor(
val shippingLineSummary = getShippingLinesSummary(order)
- viewState.value = WooShippingViewState.DataState(
+ return@combine WooShippingViewState.DataState(
shippableItems = ShippableItemsUI(
shippableItems = shippableItemsUI,
formattedTotalWeight = formattedTotalWeight,
formattedTotalPrice = formattedTotalPrice
),
- shippingLines = shippingLineSummary
+ shippingLines = shippingLineSummary,
+ shippingAddresses = WooShippingAddresses(
+ shipFrom = selectedOriginAddress,
+ originAddresses = originAddresses,
+ shipTo = order.shippingAddress
+ )
)
+ }.collect {
+ viewState.value = it
}
+ }
+
+ private fun getSelectedOriginAddress(originAddresses: List): OriginShippingAddress? {
+ return (viewState as? WooShippingViewState.DataState)?.let {
+ it.shippingAddresses.shipFrom
+ } ?: originAddresses.firstOrNull { it.isDefault } ?: originAddresses.firstOrNull()
+ }
+
+ fun onShippingFromAddressChange(address: OriginShippingAddress) {
+ (viewState.value as? WooShippingViewState.DataState)?.let { currentData ->
+ viewState.value = currentData.copy(
+ shippingAddresses = currentData.shippingAddresses.copy(
+ shipFrom = address
+ )
+ )
+ }
+ }
+
+ fun onShippingToAddressChange(address: Address) {
+ (viewState.value as? WooShippingViewState.DataState)?.let { currentData ->
+ viewState.value = currentData.copy(
+ shippingAddresses = currentData.shippingAddresses.copy(
+ shipTo = address
+ )
+ )
}
}
@@ -92,10 +137,18 @@ class WooShippingLabelCreationViewModel @Inject constructor(
data object LabelPurchased : Event()
sealed class WooShippingViewState {
+ data object Error : WooShippingViewState()
data object Loading : WooShippingViewState()
data class DataState(
val shippableItems: ShippableItemsUI,
- val shippingLines: List
+ val shippingLines: List,
+ val shippingAddresses: WooShippingAddresses,
) : WooShippingViewState()
}
}
+
+data class WooShippingAddresses(
+ val shipFrom: OriginShippingAddress,
+ val shipTo: Address,
+ val originAddresses: List
+)
diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/models/OriginShippingAddress.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/models/OriginShippingAddress.kt
new file mode 100644
index 00000000000..e8603563248
--- /dev/null
+++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/models/OriginShippingAddress.kt
@@ -0,0 +1,18 @@
+package com.woocommerce.android.ui.orders.wooshippinglabels.models
+
+data class OriginShippingAddress(
+ val id: String,
+ val company: String?,
+ val firstName: String?,
+ val lastName: String?,
+ val email: String?,
+ val address1: String?,
+ val address2: String?,
+ val city: String?,
+ val state: String?,
+ val postcode: String,
+ val country: String,
+ val phone: String?,
+ val isDefault: Boolean,
+ val isVerified: Boolean
+)
diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/packages/WooShippingLabelPackageCreationScreen.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/packages/WooShippingLabelPackageCreationScreen.kt
index be2d715990a..82808a44459 100644
--- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/packages/WooShippingLabelPackageCreationScreen.kt
+++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/packages/WooShippingLabelPackageCreationScreen.kt
@@ -109,17 +109,22 @@ fun WooShippingLabelsPackageCreationScreenPreview() {
),
createCustomPackageScreen = {
WooShippingCustomPackageCreationScreen(
+ packageName = "Custom Package Name",
packageType = "Envelope",
packageLength = "10",
packageWidth = "10",
packageHeight = "10",
+ packageWeight = "10",
isAddPackageEnabled = true,
+ isSaveAsTemplateChecked = true,
onAddPackageClick = {},
onPackageTypeClick = {},
onLengthChange = {},
onWidthChange = {},
onHeightChange = {},
- onSavePackageChanged = { }
+ onWeightChange = {},
+ onPackageNameChange = {},
+ onSavePackageChanged = {}
)
},
createSavedPackageScreen = {
@@ -127,19 +132,22 @@ fun WooShippingLabelsPackageCreationScreenPreview() {
savedPackages = listOf(
PackageData(
name = "Small Flat Rate Box",
- dimensions = "10 x 10 x 10 cm",
+ dimensions = "10 x 10 x 10",
+ weight = "10",
isSelected = true,
isLetter = true
),
PackageData(
name = "Small Flat Rate Box",
- dimensions = "20 x 20 x 20 cm",
+ dimensions = "20 x 20 x 20",
+ weight = "10",
isSelected = false,
isLetter = false
),
PackageData(
name = "Small Flat Rate Box",
- dimensions = "30 x 30 x 30 cm",
+ dimensions = "30 x 30 x 30",
+ weight = "10",
isSelected = false,
isLetter = false
)
diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/packages/WooShippingLabelPackageCreationViewModel.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/packages/WooShippingLabelPackageCreationViewModel.kt
index 46df8e85ff4..1ec4b77b0b3 100644
--- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/packages/WooShippingLabelPackageCreationViewModel.kt
+++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/packages/WooShippingLabelPackageCreationViewModel.kt
@@ -5,7 +5,10 @@ import androidx.lifecycle.SavedStateHandle
import androidx.lifecycle.asLiveData
import androidx.lifecycle.viewModelScope
import com.woocommerce.android.R
+import com.woocommerce.android.tools.SelectedSite
import com.woocommerce.android.ui.orders.wooshippinglabels.packages.datasource.FetchPredefinedPackagesFromStore
+import com.woocommerce.android.ui.orders.wooshippinglabels.packages.datasource.WooShippingLabelPackageRepository
+import com.woocommerce.android.ui.orders.wooshippinglabels.packages.networking.CustomPackageCreationRequestData
import com.woocommerce.android.ui.orders.wooshippinglabels.packages.ui.Carrier
import com.woocommerce.android.ui.orders.wooshippinglabels.packages.ui.CarrierPackageGroup
import com.woocommerce.android.ui.orders.wooshippinglabels.packages.ui.CarrierPackageSelection
@@ -20,13 +23,16 @@ import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.flow.update
import kotlinx.coroutines.launch
import kotlinx.parcelize.Parcelize
+import org.wordpress.android.fluxc.model.SiteModel
import javax.inject.Inject
@HiltViewModel
class WooShippingLabelPackageCreationViewModel @Inject constructor(
savedState: SavedStateHandle,
+ private val selectedSite: SelectedSite,
private val resourceProvider: ResourceProvider,
- private val fetchPredefinedPackages: FetchPredefinedPackagesFromStore
+ private val fetchPredefinedPackages: FetchPredefinedPackagesFromStore,
+ private val packageRepository: WooShippingLabelPackageRepository
) : ScopedViewModel(savedState) {
private val _viewState = savedState.getStateFlow(
@@ -97,9 +103,13 @@ class WooShippingLabelPackageCreationViewModel @Inject constructor(
?.let { triggerEvent(PackageSelected(it)) }
}
- fun onAddCustomPackageClick() {
- _viewState.value.customPackageCreationData
- .toPackageData()
+ fun onAddCustomPackageClick(savePackageAsTemplate: Boolean) {
+ val customPackage = _viewState.value.customPackageCreationData
+ selectedSite.getOrNull()
+ ?.takeIf { savePackageAsTemplate }
+ ?.let { customPackage.submitToStore(it) }
+
+ customPackage.toPackageData()
.let { triggerEvent(PackageSelected(it)) }
}
@@ -135,6 +145,20 @@ class WooShippingLabelPackageCreationViewModel @Inject constructor(
}
}
+ fun onPackageNameChange(name: String) {
+ _viewState.update {
+ val newPackageData = it.customPackageCreationData.copy(name = name)
+ it.copy(customPackageCreationData = newPackageData)
+ }
+ }
+
+ fun onWeightChange(weight: String) {
+ _viewState.update {
+ val newPackageData = it.customPackageCreationData.copy(weight = weight)
+ it.copy(customPackageCreationData = newPackageData)
+ }
+ }
+
fun onSavePackageChanged(checked: Boolean) {
_viewState.update {
val newPackageData = it.customPackageCreationData.copy(saveAsTemplate = checked)
@@ -163,6 +187,24 @@ class WooShippingLabelPackageCreationViewModel @Inject constructor(
?.let { set(it, updatedPackage) }
}
+ private fun CustomPackageCreationData.submitToStore(site: SiteModel) {
+ launch {
+ packageRepository.createCustomPackage(
+ site = site,
+ requestData = this@submitToStore.let {
+ CustomPackageCreationRequestData(
+ name = it.name,
+ isLetter = it.type == PackageType.ENVELOPE,
+ innerDimensions = it.dimensions,
+ boxWeight = it.weight?.toDoubleOrNull() ?: 0.0,
+ isUserDefined = true,
+ maxWeight = 0.0
+ )
+ }.let { listOf(it) }
+ )
+ }
+ }
+
@Parcelize
data class ViewState(
val pageTabs: List = emptyList(),
diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/packages/components/WooShippingPackageListItem.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/packages/components/WooShippingPackageListItem.kt
index a14de381e29..c6ff4c75a4a 100644
--- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/packages/components/WooShippingPackageListItem.kt
+++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/packages/components/WooShippingPackageListItem.kt
@@ -49,7 +49,10 @@ fun WooSavedPackageListItem(
style = MaterialTheme.typography.body1
)
Text(
- text = packageData.dimensions,
+ text = packageData.weight
+ .takeIf { it.isNotEmpty() }
+ ?.let { "${packageData.dimensionForDisplay} • ${packageData.weightForDisplay}" }
+ ?: packageData.dimensionForDisplay,
style = MaterialTheme.typography.body2
)
}
diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/packages/datasource/FetchPredefinedPackagesFromStore.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/packages/datasource/FetchPredefinedPackagesFromStore.kt
index 42155986aec..d61b44ef4cd 100644
--- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/packages/datasource/FetchPredefinedPackagesFromStore.kt
+++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/packages/datasource/FetchPredefinedPackagesFromStore.kt
@@ -35,8 +35,11 @@ class FetchPredefinedPackagesFromStore @Inject constructor(
PackageData(
name = packageDAO.name,
dimensions = packageDAO.dimensions,
+ weight = packageDAO.weight,
isSelected = false,
- isLetter = packageDAO.isLetter
+ isLetter = packageDAO.isLetter,
+ dimensionUnit = packageDAO.dimensionUnit,
+ weightUnit = packageDAO.weightUnit
)
}
@@ -60,8 +63,11 @@ class FetchPredefinedPackagesFromStore @Inject constructor(
PackageData(
name = packageItem.name,
dimensions = packageItem.dimensions,
+ weight = packageItem.weight,
isSelected = false,
- isLetter = packageItem.isLetter
+ isLetter = packageItem.isLetter,
+ dimensionUnit = packageItem.dimensionUnit,
+ weightUnit = packageItem.weightUnit
)
}
)
diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/packages/datasource/PackageDAOs.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/packages/datasource/PackageDAOs.kt
index 1e37f06efd5..828d0753b82 100644
--- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/packages/datasource/PackageDAOs.kt
+++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/packages/datasource/PackageDAOs.kt
@@ -9,7 +9,10 @@ data class PackageDAO(
val id: String,
val name: String,
val dimensions: String,
- val isLetter: Boolean
+ val weight: String,
+ val isLetter: Boolean,
+ val dimensionUnit: String,
+ val weightUnit: String
)
data class CarrierDAO(
diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/packages/datasource/WooShippingLabelPackageMapper.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/packages/datasource/WooShippingLabelPackageMapper.kt
index 3ea362d7fea..a491240f716 100644
--- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/packages/datasource/WooShippingLabelPackageMapper.kt
+++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/packages/datasource/WooShippingLabelPackageMapper.kt
@@ -4,46 +4,71 @@ import com.woocommerce.android.ui.orders.wooshippinglabels.packages.datasource.C
import com.woocommerce.android.ui.orders.wooshippinglabels.packages.datasource.CarrierType.USPS
import com.woocommerce.android.ui.orders.wooshippinglabels.packages.networking.CarrierPackageGroupDTO
import com.woocommerce.android.ui.orders.wooshippinglabels.packages.networking.CarrierPredefinedPackagesDTO
+import com.woocommerce.android.ui.orders.wooshippinglabels.packages.networking.CustomPackageCreationResponse
+import com.woocommerce.android.ui.orders.wooshippinglabels.packages.networking.CustomPackageDTO
import com.woocommerce.android.ui.orders.wooshippinglabels.packages.networking.PackageResponse
-import com.woocommerce.android.ui.orders.wooshippinglabels.packages.networking.PredefinedPackageDTO
+import com.woocommerce.android.ui.orders.wooshippinglabels.packages.networking.PackageStoreOptionsDTO
import javax.inject.Inject
class WooShippingLabelPackageMapper @Inject constructor() {
operator fun invoke(response: PackageResponse): StorePackagesDAO {
- val savedPackagesResponse = response.packages?.saved?.predefined ?: emptyList()
+ val savedPackagesResponse = response.packages?.saved?.custom ?: emptyList()
return StorePackagesDAO(
- savedPackages = mapSavedPackages(savedPackagesResponse),
- carrierPackages = mapCarrierPackages(response.packages?.predefined)
+ savedPackages = mapSavedPackages(savedPackagesResponse, response.storeOptions),
+ carrierPackages = mapCarrierPackages(response.packages?.predefined, response.storeOptions)
)
}
- private fun mapSavedPackages(savedResponse: List): List {
+ operator fun invoke(
+ response: CustomPackageCreationResponse
+ ): List {
+ return response.custom?.map {
+ PackageDAO(
+ id = it.id.orEmpty(),
+ name = it.name.orEmpty(),
+ dimensions = it.dimensions.orEmpty(),
+ weight = it.boxWeight?.toString().orEmpty(),
+ isLetter = it.isLetter ?: false,
+ dimensionUnit = "",
+ weightUnit = ""
+ )
+ } ?: emptyList()
+ }
+
+ private fun mapSavedPackages(
+ savedResponse: List,
+ storeOptions: PackageStoreOptionsDTO?
+ ): List {
return savedResponse.map {
PackageDAO(
id = it.id.orEmpty(),
name = it.name.orEmpty(),
dimensions = it.dimensions.orEmpty(),
- isLetter = it.isLetter ?: false
+ weight = it.boxWeight?.toString().orEmpty(),
+ isLetter = it.isLetter ?: false,
+ dimensionUnit = storeOptions?.dimensionUnit.orEmpty(),
+ weightUnit = storeOptions?.weightUnit.orEmpty()
)
}
}
private fun mapCarrierPackages(
- carrierPackagesResponse: CarrierPredefinedPackagesDTO?
+ carrierPackagesResponse: CarrierPredefinedPackagesDTO?,
+ storeOptions: PackageStoreOptionsDTO?
): Map {
val uspsPackages = mutableListOf().apply {
carrierPackagesResponse?.usps?.let { usps ->
- usps.flatBoxes?.toCarrierGroup()?.let { add(it) }
- usps.boxes?.toCarrierGroup()?.let { add(it) }
- usps.expressBoxes?.toCarrierGroup()?.let { add(it) }
- usps.envelopes?.toCarrierGroup()?.let { add(it) }
+ usps.flatBoxes?.toCarrierGroup(storeOptions)?.let { add(it) }
+ usps.boxes?.toCarrierGroup(storeOptions)?.let { add(it) }
+ usps.expressBoxes?.toCarrierGroup(storeOptions)?.let { add(it) }
+ usps.envelopes?.toCarrierGroup(storeOptions)?.let { add(it) }
}
}.let { CarrierDAO(it) }
val dhlPackages = mutableListOf().apply {
carrierPackagesResponse?.dhlExpress?.let { dhl ->
- dhl.domesticAndInternationalPackages?.toCarrierGroup()?.let { add(it) }
+ dhl.domesticAndInternationalPackages?.toCarrierGroup(storeOptions)?.let { add(it) }
}
}.let { CarrierDAO(it) }
@@ -53,14 +78,19 @@ class WooShippingLabelPackageMapper @Inject constructor() {
)
}
- private fun CarrierPackageGroupDTO.toCarrierGroup() = CarrierPackageGroupDAO(
+ private fun CarrierPackageGroupDTO.toCarrierGroup(
+ storeOptions: PackageStoreOptionsDTO?
+ ) = CarrierPackageGroupDAO(
description = title.orEmpty(),
packages = definitions?.map {
PackageDAO(
id = it.id.orEmpty(),
name = it.name.orEmpty(),
- dimensions = it.dimensions.orEmpty(),
- isLetter = it.isLetter ?: false
+ dimensions = it.outerDimensions.orEmpty(),
+ weight = it.boxWeight?.toString().orEmpty(),
+ isLetter = it.isLetter ?: false,
+ dimensionUnit = storeOptions?.dimensionUnit.orEmpty(),
+ weightUnit = storeOptions?.weightUnit.orEmpty()
)
} ?: emptyList()
)
diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/packages/datasource/WooShippingLabelPackageRepository.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/packages/datasource/WooShippingLabelPackageRepository.kt
index ad844dfafa8..ce35afe3ebf 100644
--- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/packages/datasource/WooShippingLabelPackageRepository.kt
+++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/packages/datasource/WooShippingLabelPackageRepository.kt
@@ -1,6 +1,7 @@
package com.woocommerce.android.ui.orders.wooshippinglabels.packages.datasource
import com.woocommerce.android.tools.SelectedSite
+import com.woocommerce.android.ui.orders.wooshippinglabels.packages.networking.CustomPackageCreationRequestData
import com.woocommerce.android.ui.orders.wooshippinglabels.packages.networking.WooShippingLabelPackageRestClient
import org.wordpress.android.fluxc.model.SiteModel
import org.wordpress.android.fluxc.network.rest.wpcom.wc.WooResult
@@ -21,4 +22,14 @@ class WooShippingLabelPackageRepository @Inject constructor(
?.let { WooResult(it) }
?: WooResult(error)
}
+
+ suspend fun createCustomPackage(
+ site: SiteModel = selectedSite.get(),
+ requestData: List
+ ) = with(packageRestClient.postNewCustomPackage(site, requestData)) {
+ result.takeIf { isError.not() }
+ ?.let { packageMapper(it) }
+ ?.let { WooResult(it) }
+ ?: WooResult(error)
+ }
}
diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/packages/networking/CarrierPackageDTOs.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/packages/networking/CarrierPackageDTOs.kt
index 4b4af8a5ebb..dcbe14bf809 100644
--- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/packages/networking/CarrierPackageDTOs.kt
+++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/packages/networking/CarrierPackageDTOs.kt
@@ -1,19 +1,33 @@
package com.woocommerce.android.ui.orders.wooshippinglabels.packages.networking
+import com.google.gson.annotations.SerializedName
+
class CarrierPredefinedPackagesDTO {
val usps: USPSPackageDTO? = null
+
+ @SerializedName("dhlexpress")
val dhlExpress: DHLPackageDTO? = null
}
class USPSPackageDTO {
+ @SerializedName("pri_flat_boxes")
val flatBoxes: CarrierPackageGroupDTO? = null
+
+ @SerializedName("pri_boxes")
val boxes: CarrierPackageGroupDTO? = null
+
+ @SerializedName("pri_express_boxes")
val expressBoxes: CarrierPackageGroupDTO? = null
+
+ @SerializedName("pri_envelopes")
val envelopes: CarrierPackageGroupDTO? = null
+
+ @SerializedName("pri_express_envelopes")
val expressEnvelopes: CarrierPackageGroupDTO? = null
}
class DHLPackageDTO {
+ @SerializedName("domestic_and_international")
val domesticAndInternationalPackages: CarrierPackageGroupDTO? = null
}
@@ -23,15 +37,30 @@ class CarrierPackageGroupDTO {
}
class PredefinedPackageDTO {
+ val id: String? = null
+ val name: String? = null
+
+ @SerializedName("inner_dimensions")
val innerDimensions: String? = null
+
+ @SerializedName("outer_dimensions")
val outerDimensions: String? = null
+
+ @SerializedName("box_weight")
val boxWeight: Double? = null
+
+ @SerializedName("is_flat_rate")
val isFlatRate: Boolean? = null
- val id: String? = null
- val name: String? = null
- val dimensions: String? = null
+
+ @SerializedName("max_weight")
val maxWeight: Double? = null
+
+ @SerializedName("is_letter")
val isLetter: Boolean? = null
+
+ @SerializedName("group_id")
val groupId: String? = null
+
+ @SerializedName("can_ship_international")
val canShipInternational: Boolean? = null
}
diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/packages/networking/PackageResponseDTOs.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/packages/networking/PackageResponseDTOs.kt
index 8c8aad9853b..9e59b8235ca 100644
--- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/packages/networking/PackageResponseDTOs.kt
+++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/packages/networking/PackageResponseDTOs.kt
@@ -1,14 +1,36 @@
package com.woocommerce.android.ui.orders.wooshippinglabels.packages.networking
+import com.google.gson.annotations.SerializedName
+
+class CustomPackageCreationResponse {
+ val custom: List? = null
+}
+
+data class CustomPackageCreationRequestData(
+ val name: String? = null,
+ @SerializedName("is_letter") val isLetter: Boolean? = null,
+ @SerializedName("inner_dimensions") val innerDimensions: String? = null,
+ @SerializedName("box_weight") val boxWeight: Double? = null,
+ @SerializedName("is_user_defined") val isUserDefined: Boolean? = null,
+ @SerializedName("max_weight") val maxWeight: Double? = null
+)
+
class PackageResponse {
val storeOptions: PackageStoreOptionsDTO? = null
val packages: PackagesInfoDTO? = null
}
class PackageStoreOptionsDTO {
+ @SerializedName("currency_symbol")
val currencySymbol: String? = null
+
+ @SerializedName("dimension_unit")
val dimensionUnit: String? = null
+
+ @SerializedName("weight_unit")
val weightUnit: String? = null
+
+ @SerializedName("origin_country")
val originCountry: String? = null
}
diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/packages/networking/StorePackageDTOs.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/packages/networking/StorePackageDTOs.kt
index 9b868b3db22..a9b4260c925 100644
--- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/packages/networking/StorePackageDTOs.kt
+++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/packages/networking/StorePackageDTOs.kt
@@ -1,8 +1,9 @@
package com.woocommerce.android.ui.orders.wooshippinglabels.packages.networking
+import com.google.gson.annotations.SerializedName
+
class SavedPackageInfoDTO {
val custom: List? = null
- val predefined: List? = null
}
class CustomPackageDTO {
@@ -12,8 +13,14 @@ class CustomPackageDTO {
val length: Double? = null
val width: Double? = null
val height: Double? = null
+ val type: String? = null
+
+ @SerializedName("box_weight")
val boxWeight: Double? = null
+
+ @SerializedName("is_letter")
val isLetter: Boolean? = null
+
+ @SerializedName("is_user_defined")
val isUserDefined: Boolean? = null
- val type: String? = null
}
diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/packages/networking/WooShippingLabelPackageRestClient.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/packages/networking/WooShippingLabelPackageRestClient.kt
index 53affd96616..502f00fb490 100644
--- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/packages/networking/WooShippingLabelPackageRestClient.kt
+++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/packages/networking/WooShippingLabelPackageRestClient.kt
@@ -12,12 +12,26 @@ class WooShippingLabelPackageRestClient @Inject constructor(
suspend fun fetchShippingLabelPackages(
site: SiteModel
): WooPayload {
- val url = "/wcshipping/v1/packages"
-
return wooNetwork.executeGetGsonRequest(
site = site,
- path = url,
+ path = URL,
clazz = PackageResponse::class.java,
).toWooPayload()
}
+
+ suspend fun postNewCustomPackage(
+ site: SiteModel,
+ requestData: List
+ ): WooPayload {
+ return wooNetwork.executePostGsonRequest(
+ site = site,
+ path = URL,
+ body = mapOf("custom" to requestData),
+ clazz = CustomPackageCreationResponse::class.java,
+ ).toWooPayload()
+ }
+
+ companion object {
+ private const val URL = "/wcshipping/v1/packages"
+ }
}
diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/packages/ui/UIModels.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/packages/ui/UIModels.kt
index 9971cbe781a..2e41ba3c487 100644
--- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/packages/ui/UIModels.kt
+++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/packages/ui/UIModels.kt
@@ -2,6 +2,7 @@ package com.woocommerce.android.ui.orders.wooshippinglabels.packages.ui
import android.os.Parcelable
import com.woocommerce.android.R
+import com.woocommerce.android.extensions.isNotNullOrEmpty
import com.woocommerce.android.ui.orders.wooshippinglabels.packages.WooShippingLabelPackageCreationViewModel.PackageType
import kotlinx.parcelize.Parcelize
@@ -9,28 +10,24 @@ import kotlinx.parcelize.Parcelize
data class PackageData(
val name: String,
val dimensions: String,
+ val weight: String,
val isSelected: Boolean,
- val isLetter: Boolean
+ val isLetter: Boolean,
+ val dimensionUnit: String = "cm",
+ val weightUnit: String = "kg"
) : Parcelable {
val descriptionResId: Int
get() = when (isLetter) {
true -> R.string.woo_shipping_labels_package_creation_envelope_type
false -> R.string.woo_shipping_labels_package_creation_box_type
}
-}
-@Parcelize
-data class PredefinedPackage(
- val boxWeight: Double,
- val isFlatRate: Boolean,
- val id: String,
- val name: String,
- val dimensions: String,
- val maxWeight: Double,
- val isLetter: Boolean,
- val groupId: String,
- val canShipInternational: Boolean
-) : Parcelable
+ val dimensionForDisplay
+ get() = "$dimensions $dimensionUnit"
+
+ val weightForDisplay
+ get() = "$weight $weightUnit"
+}
@Parcelize
data class CustomPackageCreationData(
@@ -38,14 +35,27 @@ data class CustomPackageCreationData(
val length: String,
val width: String,
val height: String,
- val saveAsTemplate: Boolean
+ val saveAsTemplate: Boolean,
+ val weight: String? = null,
+ val name: String? = null
) : Parcelable {
val isValid: Boolean
- get() = height.isNotEmpty() && length.isNotEmpty() && width.isNotEmpty()
+ get() = height.isNotEmpty() && length.isNotEmpty() && width.isNotEmpty() && isTemplateConfigured
+
+ val dimensions: String
+ get() = "$length x $width x $height"
+
+ private val isTemplateConfigured: Boolean
+ get() {
+ if (saveAsTemplate.not()) return true
+
+ return name.isNotNullOrEmpty() && weight.isNotNullOrEmpty()
+ }
fun toPackageData(dimensionUnit: String = "cm") = PackageData(
name = "",
dimensions = "$length x $width x $height $dimensionUnit",
+ weight = weight.orEmpty(),
isSelected = true,
isLetter = type == PackageType.ENVELOPE
)
@@ -56,6 +66,7 @@ data class CustomPackageCreationData(
length = "",
width = "",
height = "",
+ weight = "",
saveAsTemplate = false
)
}
diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/packages/ui/WooShippingCarrierPackageScreen.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/packages/ui/WooShippingCarrierPackageScreen.kt
index e105d5f4c78..8aa8d6ae64f 100644
--- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/packages/ui/WooShippingCarrierPackageScreen.kt
+++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/packages/ui/WooShippingCarrierPackageScreen.kt
@@ -231,13 +231,15 @@ fun WooShippingCarrierPackageScreenPreview() {
packages = listOf(
PackageData(
name = "Package 1 - Carrier 1",
- dimensions = "10 x 10 x 10 cm",
+ dimensions = "10 x 10 x 10",
+ weight = "10",
isSelected = false,
isLetter = false
),
PackageData(
name = "Package 2 - Carrier 1",
- dimensions = "20 x 20 x 20 cm",
+ dimensions = "20 x 20 x 20",
+ weight = "20",
isSelected = false,
isLetter = false
)
@@ -248,13 +250,15 @@ fun WooShippingCarrierPackageScreenPreview() {
packages = listOf(
PackageData(
name = "Package 3 - Carrier 1",
- dimensions = "30 x 30 x 30 cm",
+ dimensions = "30 x 30 x 30",
+ weight = "30",
isSelected = false,
isLetter = false
),
PackageData(
name = "Package 4 - Carrier 1",
- dimensions = "40 x 40 x 40 cm",
+ dimensions = "40 x 40 x 40",
+ weight = "40",
isSelected = false,
isLetter = false
)
@@ -267,13 +271,15 @@ fun WooShippingCarrierPackageScreenPreview() {
packages = listOf(
PackageData(
name = "Package 1 - Carrier 2",
- dimensions = "10 x 10 x 10 cm",
+ dimensions = "10 x 10 x 10",
+ weight = "10",
isSelected = false,
isLetter = false
),
PackageData(
name = "Package 2 Carrier - 2",
- dimensions = "20 x 20 x 20 cm",
+ dimensions = "20 x 20 x 20",
+ weight = "20",
isSelected = false,
isLetter = false
)
diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/packages/ui/WooShippingCustomPackageScreen.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/packages/ui/WooShippingCustomPackageScreen.kt
index 92b66513eb1..d2e91b9298d 100644
--- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/packages/ui/WooShippingCustomPackageScreen.kt
+++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/packages/ui/WooShippingCustomPackageScreen.kt
@@ -11,6 +11,8 @@ import androidx.compose.foundation.text.KeyboardOptions
import androidx.compose.foundation.verticalScroll
import androidx.compose.material.Button
import androidx.compose.material.Checkbox
+import androidx.compose.material.CheckboxDefaults
+import androidx.compose.material.MaterialTheme
import androidx.compose.material.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
@@ -19,6 +21,7 @@ import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.input.ImeAction
+import androidx.compose.ui.text.input.KeyboardType
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import com.woocommerce.android.R
@@ -35,15 +38,20 @@ fun WooShippingCustomPackageCreationScreen(viewModel: WooShippingLabelPackageCre
WooShippingCustomPackageCreationScreen(
packageType = packageType,
+ packageName = viewState?.customPackageCreationData?.name.orEmpty(),
packageHeight = viewState?.customPackageCreationData?.height.orEmpty(),
packageLength = viewState?.customPackageCreationData?.length.orEmpty(),
packageWidth = viewState?.customPackageCreationData?.width.orEmpty(),
+ packageWeight = viewState?.customPackageCreationData?.weight.orEmpty(),
isAddPackageEnabled = viewState?.customPackageCreationData?.isValid ?: false,
+ isSaveAsTemplateChecked = viewState?.customPackageCreationData?.saveAsTemplate ?: false,
onAddPackageClick = viewModel::onAddCustomPackageClick,
onPackageTypeClick = viewModel::onPackageTypeSpinnerClick,
onLengthChange = viewModel::onLengthChange,
onWidthChange = viewModel::onWidthChange,
onHeightChange = viewModel::onHeightChange,
+ onWeightChange = viewModel::onWeightChange,
+ onPackageNameChange = viewModel::onPackageNameChange,
onSavePackageChanged = viewModel::onSavePackageChanged
)
}
@@ -51,16 +59,21 @@ fun WooShippingCustomPackageCreationScreen(viewModel: WooShippingLabelPackageCre
@Composable
fun WooShippingCustomPackageCreationScreen(
modifier: Modifier = Modifier,
+ packageName: String,
packageType: String,
packageLength: String,
packageWidth: String,
packageHeight: String,
+ packageWeight: String,
isAddPackageEnabled: Boolean,
- onAddPackageClick: () -> Unit,
+ isSaveAsTemplateChecked: Boolean,
+ onAddPackageClick: (saveAsTemplate: Boolean) -> Unit,
onPackageTypeClick: () -> Unit,
onLengthChange: (String) -> Unit,
onWidthChange: (String) -> Unit,
onHeightChange: (String) -> Unit,
+ onWeightChange: (String) -> Unit,
+ onPackageNameChange: (String) -> Unit,
onSavePackageChanged: (Boolean) -> Unit
) {
Column(
@@ -90,7 +103,10 @@ fun WooShippingCustomPackageCreationScreen(
onValueChange = onLengthChange,
label = stringResource(id = R.string.woo_shipping_labels_package_creation_length),
singleLine = true,
- keyboardOptions = KeyboardOptions(imeAction = ImeAction.Next),
+ keyboardOptions = KeyboardOptions(
+ keyboardType = KeyboardType.Number,
+ imeAction = ImeAction.Next
+ ),
modifier = modifier.weight(1f)
)
@@ -99,7 +115,10 @@ fun WooShippingCustomPackageCreationScreen(
onValueChange = onWidthChange,
label = stringResource(id = R.string.woo_shipping_labels_package_creation_width),
singleLine = true,
- keyboardOptions = KeyboardOptions(imeAction = ImeAction.Next),
+ keyboardOptions = KeyboardOptions(
+ keyboardType = KeyboardType.Number,
+ imeAction = ImeAction.Next
+ ),
modifier = modifier.weight(1f)
)
@@ -108,7 +127,10 @@ fun WooShippingCustomPackageCreationScreen(
onValueChange = onHeightChange,
label = stringResource(id = R.string.woo_shipping_labels_package_creation_height),
singleLine = true,
- keyboardOptions = KeyboardOptions(imeAction = ImeAction.Next),
+ keyboardOptions = KeyboardOptions(
+ keyboardType = KeyboardType.Number,
+ imeAction = ImeAction.Next
+ ),
modifier = modifier.weight(1f)
)
}
@@ -120,13 +142,45 @@ fun WooShippingCustomPackageCreationScreen(
text = stringResource(id = R.string.woo_shipping_labels_package_creation_save_package_option),
modifier = modifier.align(Alignment.CenterVertically)
)
- Checkbox(checked = false, onCheckedChange = onSavePackageChanged)
+ Checkbox(
+ checked = isSaveAsTemplateChecked,
+ onCheckedChange = onSavePackageChanged,
+ colors = CheckboxDefaults.colors(
+ checkedColor = MaterialTheme.colors.primary,
+ uncheckedColor = MaterialTheme.colors.onSurface
+ ),
+ )
+ }
+ if (isSaveAsTemplateChecked) {
+ Column(modifier = modifier) {
+ WCOutlinedTextField(
+ value = packageWeight,
+ onValueChange = onWeightChange,
+ label = stringResource(id = R.string.woo_shipping_labels_package_creation_weight),
+ singleLine = true,
+ keyboardOptions = KeyboardOptions(
+ keyboardType = KeyboardType.Number,
+ imeAction = ImeAction.Next
+ ),
+ modifier = modifier.fillMaxWidth()
+ )
+ }
+ Column(modifier = modifier) {
+ WCOutlinedTextField(
+ value = packageName,
+ onValueChange = onPackageNameChange,
+ label = stringResource(id = R.string.woo_shipping_labels_package_creation_package_name),
+ singleLine = true,
+ keyboardOptions = KeyboardOptions(imeAction = ImeAction.Next),
+ modifier = modifier.fillMaxWidth()
+ )
+ }
}
}
Button(
modifier = modifier.fillMaxWidth(),
enabled = isAddPackageEnabled,
- onClick = onAddPackageClick
+ onClick = { onAddPackageClick(isSaveAsTemplateChecked) }
) {
Text(stringResource(id = R.string.woo_shipping_labels_package_creation_add_package))
}
@@ -138,16 +192,21 @@ fun WooShippingCustomPackageCreationScreen(
fun PreviewWooShippingCustomPackageCreationScreen() {
WooThemeWithBackground {
WooShippingCustomPackageCreationScreen(
+ packageName = "Custom Package",
packageType = "Box",
packageLength = "10",
packageWidth = "10",
packageHeight = "10",
+ packageWeight = "10",
isAddPackageEnabled = true,
+ isSaveAsTemplateChecked = true,
onAddPackageClick = {},
onPackageTypeClick = {},
onLengthChange = {},
onWidthChange = {},
onHeightChange = {},
+ onWeightChange = {},
+ onPackageNameChange = {},
onSavePackageChanged = {}
)
}
diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/packages/ui/WooShippingSavedPackageScreen.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/packages/ui/WooShippingSavedPackageScreen.kt
index 29577581f72..06a854e50ea 100644
--- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/packages/ui/WooShippingSavedPackageScreen.kt
+++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/orders/wooshippinglabels/packages/ui/WooShippingSavedPackageScreen.kt
@@ -82,18 +82,21 @@ fun WooShippingSavedPackageScreenPreview() {
PackageData(
name = "Small Flat Rate Box",
dimensions = "10 x 10 x 10 cm",
+ weight = "10",
isSelected = true,
isLetter = true
),
PackageData(
name = "Small Flat Rate Box",
dimensions = "20 x 20 x 20 cm",
+ weight = "20",
isSelected = false,
isLetter = false
),
PackageData(
name = "Small Flat Rate Box",
dimensions = "30 x 30 x 30 cm",
+ weight = "30",
isSelected = false,
isLetter = false
)
diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/payments/cardreader/connect/CardReaderConnectViewModel.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/payments/cardreader/connect/CardReaderConnectViewModel.kt
index 1abbf6ba085..c036b5bb2ab 100644
--- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/payments/cardreader/connect/CardReaderConnectViewModel.kt
+++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/payments/cardreader/connect/CardReaderConnectViewModel.kt
@@ -69,7 +69,7 @@ import com.woocommerce.android.ui.payments.cardreader.onboarding.PluginType
import com.woocommerce.android.ui.payments.cardreader.update.CardReaderUpdateViewModel
import com.woocommerce.android.ui.payments.tracking.CardReaderTrackingInfoKeeper
import com.woocommerce.android.ui.payments.tracking.PaymentsFlowTracker
-import com.woocommerce.android.ui.prefs.DeveloperOptionsRepository
+import com.woocommerce.android.ui.prefs.developer.DeveloperOptionsRepository
import com.woocommerce.android.util.CoroutineDispatchers
import com.woocommerce.android.util.WooLog
import com.woocommerce.android.viewmodel.MultiLiveEvent.Event
@@ -243,7 +243,7 @@ class CardReaderConnectViewModel @Inject constructor(
private fun onReadyToStartScanning() {
if (!cardReaderManager.initialized) {
cardReaderManager.initialize(
- updateFrequency = mapUpdateOptions(appPrefs.selectedUpdateReaderOption()),
+ updateFrequency = developerOptionsRepository.getUpdateSimulatedReaderOption(),
useInterac = developerOptionsRepository.isInteracPaymentEnabled(),
BuildConfig.DEBUG,
)
@@ -253,10 +253,6 @@ class CardReaderConnectViewModel @Inject constructor(
}
}
- private fun mapUpdateOptions(updateFrequency: String): CardReaderManager.SimulatorUpdateFrequency {
- return CardReaderManager.SimulatorUpdateFrequency.valueOf(updateFrequency)
- }
-
private suspend fun startScanningIfNotStarted() {
launch { listenToConnectionStatus() }
launch { listenToSoftwareUpdateStatus() }
diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/prefs/DeveloperOptionsAdapter.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/prefs/DeveloperOptionsAdapter.kt
deleted file mode 100644
index 860ed13a139..00000000000
--- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/prefs/DeveloperOptionsAdapter.kt
+++ /dev/null
@@ -1,79 +0,0 @@
-package com.woocommerce.android.ui.prefs
-
-import android.view.ViewGroup
-import androidx.recyclerview.widget.DiffUtil
-import androidx.recyclerview.widget.ListAdapter
-import com.woocommerce.android.ui.prefs.DeveloperOptionsViewModel.DeveloperOptionsViewState.ListItem
-import com.woocommerce.android.ui.prefs.DeveloperOptionsViewModel.DeveloperOptionsViewState.ListItem.NonToggleableListItem
-import com.woocommerce.android.ui.prefs.DeveloperOptionsViewModel.DeveloperOptionsViewState.ListItem.SpinnerListItem
-import com.woocommerce.android.ui.prefs.DeveloperOptionsViewModel.DeveloperOptionsViewState.ListItem.ToggleableListItem
-
-class DeveloperOptionsAdapter : ListAdapter(ListItemDiffCallback) {
-
- override fun getItemViewType(position: Int): Int {
- return when (getItem(position)) {
- is ToggleableListItem -> {
- VIEW_TYPE_TOGGLEABLE
- }
- is NonToggleableListItem -> {
- VIEW_TYPE_NON_TOGGLEABLE
- }
- is SpinnerListItem -> {
- VIEW_TYPE_RADIO_BUTTONS_DIALOG
- }
- }
- }
-
- override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): DeveloperOptionsViewHolder {
- return when (viewType) {
- VIEW_TYPE_TOGGLEABLE -> {
- DeveloperOptionsViewHolder.ToggleableViewHolder(parent)
- }
-
- VIEW_TYPE_NON_TOGGLEABLE -> {
- DeveloperOptionsViewHolder.RowViewHolder(parent)
- }
-
- VIEW_TYPE_RADIO_BUTTONS_DIALOG -> {
- DeveloperOptionsViewHolder.SpinnerViewHolder(parent)
- }
- else -> error("Unknown section")
- }
- }
-
- override fun onBindViewHolder(holder: DeveloperOptionsViewHolder, position: Int) {
- holder.onBind(getItem(position))
- }
-
- fun setItems(rows: List) {
- submitList(rows)
- }
-
- @Suppress("ReturnCount")
- object ListItemDiffCallback : DiffUtil.ItemCallback() {
- override fun areItemsTheSame(oldItem: ListItem, newItem: ListItem): Boolean {
- if (oldItem is ToggleableListItem && newItem is ToggleableListItem) {
- return oldItem.label == newItem.label
- }
- if (oldItem is NonToggleableListItem && newItem is NonToggleableListItem) {
- return oldItem.label == newItem.label
- }
- return false
- }
-
- override fun areContentsTheSame(oldItem: ListItem, newItem: ListItem): Boolean {
- return oldItem == newItem
- }
-
- // Remove the Recyclerview animation to avoid rows blinking
- override fun getChangePayload(oldItem: ListItem, newItem: ListItem): Any {
- return false
- }
- }
-
- companion object {
- const val VIEW_TYPE_NON_TOGGLEABLE = 0
- const val VIEW_TYPE_TOGGLEABLE = 1
- const val VIEW_TYPE_RADIO_BUTTONS_DIALOG = 2
- }
-}
diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/prefs/DeveloperOptionsRepository.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/prefs/DeveloperOptionsRepository.kt
deleted file mode 100644
index 3e80e3a7171..00000000000
--- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/prefs/DeveloperOptionsRepository.kt
+++ /dev/null
@@ -1,38 +0,0 @@
-package com.woocommerce.android.ui.prefs
-
-import com.woocommerce.android.AppPrefs
-import com.woocommerce.android.ui.payments.cardreader.ClearCardReaderDataAction
-import com.woocommerce.android.ui.prefs.DeveloperOptionsViewModel.DeveloperOptionsViewState.UpdateOptions
-import javax.inject.Inject
-
-class DeveloperOptionsRepository @Inject constructor(
- private val appPrefs: AppPrefs,
- private val clearCardReaderDataAction: ClearCardReaderDataAction
-) {
- fun isSimulatedCardReaderEnabled(): Boolean {
- return appPrefs.isSimulatedReaderEnabled
- }
-
- fun changeSimulatedReaderState(isChecked: Boolean) {
- appPrefs.isSimulatedReaderEnabled = isChecked
- }
-
- suspend fun clearSelectedCardReader() {
- clearCardReaderDataAction.invoke()
- }
-
- fun getUpdateSimulatedReaderOption(): UpdateOptions {
- return UpdateOptions.valueOf(appPrefs.updateReaderOptionSelected)
- }
- fun updateSimulatedReaderOption(selectedOption: UpdateOptions) {
- appPrefs.updateReaderOptionSelected = selectedOption.toString()
- }
-
- fun isInteracPaymentEnabled(): Boolean {
- return appPrefs.isInteracEnabled
- }
-
- fun changeEnableInteracPaymentState(isChecked: Boolean) {
- appPrefs.isInteracEnabled = isChecked
- }
-}
diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/prefs/DeveloperOptionsViewHolder.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/prefs/DeveloperOptionsViewHolder.kt
deleted file mode 100644
index fb1d101ad0c..00000000000
--- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/prefs/DeveloperOptionsViewHolder.kt
+++ /dev/null
@@ -1,66 +0,0 @@
-package com.woocommerce.android.ui.prefs
-
-import android.view.LayoutInflater
-import android.view.ViewGroup
-import androidx.annotation.LayoutRes
-import androidx.recyclerview.widget.RecyclerView
-import com.woocommerce.android.R
-import com.woocommerce.android.databinding.DeveloperOptionsListItemBinding
-import com.woocommerce.android.databinding.DeveloperOptionsTogglableItemBinding
-import com.woocommerce.android.databinding.DeveloperOptionsUpdateReaderItemBinding
-import com.woocommerce.android.ui.prefs.DeveloperOptionsViewModel.DeveloperOptionsViewState.ListItem
-import com.woocommerce.android.ui.prefs.DeveloperOptionsViewModel.DeveloperOptionsViewState.ListItem.SpinnerListItem
-import com.woocommerce.android.ui.prefs.DeveloperOptionsViewModel.DeveloperOptionsViewState.ListItem.ToggleableListItem
-import com.woocommerce.android.util.UiHelpers
-
-abstract class DeveloperOptionsViewHolder(val parent: ViewGroup, @LayoutRes layout: Int) :
- RecyclerView.ViewHolder(LayoutInflater.from(parent.context).inflate(layout, parent, false)) {
- abstract fun onBind(uiState: ListItem)
-
- class RowViewHolder(parent: ViewGroup) : DeveloperOptionsViewHolder(parent, R.layout.developer_options_list_item) {
- var binding: DeveloperOptionsListItemBinding = DeveloperOptionsListItemBinding.bind(itemView)
- override fun onBind(uiState: ListItem) {
- TODO("Not yet implemented")
- }
- }
-
- class ToggleableViewHolder(parent: ViewGroup) :
- DeveloperOptionsViewHolder(parent, R.layout.developer_options_togglable_item) {
- var binding: DeveloperOptionsTogglableItemBinding = DeveloperOptionsTogglableItemBinding.bind(itemView)
- override fun onBind(uiState: ListItem) {
- uiState as ToggleableListItem
- binding.developerOptionsToggleableListItemLabel.text = UiHelpers.getTextOfUiString(
- itemView.context,
- uiState.label
- )
- binding.developerOptionsToggleableIcon.setImageResource(uiState.icon)
- binding.developerOptionsSwitch.isEnabled = uiState.isEnabled
- binding.developerOptionsSwitch.isChecked = uiState.isChecked
- binding.developerOptionsSwitch.setOnCheckedChangeListener { _, isChecked ->
- if (uiState.isEnabled) {
- uiState.onToggled(isChecked)
- }
- }
- binding.root.setOnClickListener {
- binding.developerOptionsSwitch.isChecked = !uiState.isChecked
- }
- }
- }
-
- class SpinnerViewHolder(parent: ViewGroup) :
- DeveloperOptionsViewHolder(parent, R.layout.developer_options_update_reader_item) {
- var binding: DeveloperOptionsUpdateReaderItemBinding = DeveloperOptionsUpdateReaderItemBinding.bind(itemView)
- override fun onBind(uiState: ListItem) {
- uiState as SpinnerListItem
- binding.developerOptionsSpinnerIcon.setImageResource(uiState.icon)
- binding.developerOptionsSpinnerEndIcon.setImageResource(uiState.endIcon)
- binding.developerOptionsSpinnerListItemLabel.text = UiHelpers.getTextOfUiString(
- itemView.context,
- uiState.label
- )
- binding.root.setOnClickListener {
- uiState.onClick.invoke()
- }
- }
- }
-}
diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/prefs/DeveloperOptionsViewModel.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/prefs/DeveloperOptionsViewModel.kt
deleted file mode 100644
index 02b4ba6cc42..00000000000
--- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/prefs/DeveloperOptionsViewModel.kt
+++ /dev/null
@@ -1,224 +0,0 @@
-package com.woocommerce.android.ui.prefs
-
-import androidx.annotation.DrawableRes
-import androidx.annotation.StringRes
-import androidx.lifecycle.LiveData
-import androidx.lifecycle.MutableLiveData
-import androidx.lifecycle.SavedStateHandle
-import com.woocommerce.android.AppPrefsWrapper
-import com.woocommerce.android.R.drawable
-import com.woocommerce.android.R.string
-import com.woocommerce.android.cardreader.CardReaderManager
-import com.woocommerce.android.model.UiString
-import com.woocommerce.android.model.UiString.UiStringRes
-import com.woocommerce.android.ui.prefs.DeveloperOptionsViewModel.DeveloperOptionsViewState.ListItem
-import com.woocommerce.android.ui.prefs.DeveloperOptionsViewModel.DeveloperOptionsViewState.ListItem.SpinnerListItem
-import com.woocommerce.android.ui.prefs.DeveloperOptionsViewModel.DeveloperOptionsViewState.ListItem.ToggleableListItem
-import com.woocommerce.android.ui.prefs.DeveloperOptionsViewModel.DeveloperOptionsViewState.UpdateOptions
-import com.woocommerce.android.viewmodel.MultiLiveEvent
-import com.woocommerce.android.viewmodel.ScopedViewModel
-import dagger.hilt.android.lifecycle.HiltViewModel
-import kotlinx.coroutines.launch
-import javax.inject.Inject
-
-@HiltViewModel
-class DeveloperOptionsViewModel @Inject constructor(
- savedState: SavedStateHandle,
- private val developerOptionsRepository: DeveloperOptionsRepository,
- private val cardReaderManager: CardReaderManager,
- private val appPrefsWrapper: AppPrefsWrapper,
-) : ScopedViewModel(savedState) {
-
- private val savedPrivacySettingsOnDialogItem = ToggleableListItem(
- icon = drawable.ic_more_screen_settings,
- label = UiString.UiStringText("Saved privacy settings on dialog?"),
- key = UiString.UiStringText(""),
- isEnabled = true,
- isChecked = appPrefsWrapper.savedPrivacyBannerSettings,
- onToggled = { appPrefsWrapper.savedPrivacyBannerSettings = it }
- )
-
- private val _viewState = MutableLiveData(
- DeveloperOptionsViewState(
- rows = if (developerOptionsRepository.isSimulatedCardReaderEnabled()) {
- getListItemsForSimulatedReader()
- } else {
- getListItemsForHardwareReader()
- } + savedPrivacySettingsOnDialogItem,
- )
- )
-
- val viewState: LiveData = _viewState
-
- private fun getListItemsForHardwareReader(): List = mutableListOf(
- ToggleableListItem(
- icon = drawable.img_card_reader_connecting,
- label = UiStringRes(string.enable_card_reader),
- key = UiStringRes(string.simulated_reader_key),
- isEnabled = true,
- isChecked = developerOptionsRepository.isSimulatedCardReaderEnabled(),
- onToggled = ::onSimulatedReaderToggled
- ),
- )
-
- private fun createReaderUpdateFrequencyItem() =
- SpinnerListItem(
- icon = drawable.img_card_reader_update_progress,
- endIcon = drawable.ic_arrow_drop_down,
- label = UiStringRes(string.update_simulated_reader),
- key = UiStringRes(string.update_simulated_reader_key),
- isEnabled = true,
- onClick = ::onUpdateSimulatedReaderClicked,
- )
-
- private fun createEnableInteractItem() =
- ToggleableListItem(
- icon = drawable.ic_credit_card_give,
- label = UiStringRes(string.enable_interac_payment),
- key = UiStringRes(string.enable_interac_key),
- isEnabled = true,
- isChecked = developerOptionsRepository.isInteracPaymentEnabled(),
- onToggled = ::onEnableInteracToggled
- )
-
- private fun onSimulatedReaderToggled(isChecked: Boolean) {
- if (!isChecked) {
- viewState.value?.rows = getListItemsForHardwareReader()
- disconnectAndClearSelectedCardReader()
- triggerEvent(
- DeveloperOptionsEvents.ShowToastString(string.simulated_reader_toast)
- )
- } else {
- viewState.value?.rows =
- getListItemsForSimulatedReader()
- }
- simulatedReaderStateChanged(isChecked)
- }
-
- private fun disconnectAndClearSelectedCardReader() {
- launch {
- developerOptionsRepository.clearSelectedCardReader()
- }
- }
-
- private fun simulatedReaderStateChanged(isChecked: Boolean) {
- developerOptionsRepository.changeSimulatedReaderState(isChecked)
- val currentViewState = viewState.value
- (
- currentViewState?.rows?.find {
- it.key == UiStringRes(string.simulated_reader_key)
- } as? ToggleableListItem
- )?.let { originalListItem ->
- val newState = originalListItem.copy(isChecked = isChecked)
- _viewState.value = currentViewState.copy(
- rows = currentViewState.rows.map {
- if (it.label == newState.label) {
- newState
- } else {
- it
- }
- }
- )
- }
- }
-
- private fun onEnableInteracToggled(isChecked: Boolean) {
- developerOptionsRepository.changeEnableInteracPaymentState(isChecked)
-
- reinitializeSimulatedReaderIfNotInitialized()
- }
-
- private fun reinitializeSimulatedReaderIfNotInitialized() {
- if (cardReaderManager.initialized) {
- cardReaderManager.reinitializeSimulatedTerminal(
- updateFrequency = mapUpdateOptions(developerOptionsRepository.getUpdateSimulatedReaderOption()),
- useInterac = developerOptionsRepository.isInteracPaymentEnabled()
- )
- }
- }
-
- private fun onUpdateSimulatedReaderClicked() {
- triggerEvent(
- DeveloperOptionsEvents.ShowUpdateOptionsDialog(
- UpdateOptions.values().toList(),
- developerOptionsRepository.getUpdateSimulatedReaderOption()
- )
- )
- }
-
- fun onUpdateReaderOptionChanged(selectedOption: UpdateOptions) {
- developerOptionsRepository.updateSimulatedReaderOption(selectedOption)
-
- reinitializeSimulatedReaderIfNotInitialized()
- }
-
- private fun mapUpdateOptions(updateFrequency: UpdateOptions): CardReaderManager.SimulatorUpdateFrequency {
- return when (updateFrequency) {
- UpdateOptions.ALWAYS -> CardReaderManager.SimulatorUpdateFrequency.ALWAYS
- UpdateOptions.NEVER -> CardReaderManager.SimulatorUpdateFrequency.NEVER
- UpdateOptions.LOW_BATTERY_ERROR -> CardReaderManager.SimulatorUpdateFrequency.LOW_BATTERY_ERROR
- UpdateOptions.LOW_BATTERY_SUCCEED_CONNECT -> {
- CardReaderManager.SimulatorUpdateFrequency.LOW_BATTERY_SUCCEED_CONNECT
- }
- UpdateOptions.RANDOM -> CardReaderManager.SimulatorUpdateFrequency.RANDOM
- }
- }
-
- sealed class DeveloperOptionsEvents : MultiLiveEvent.Event() {
- data class ShowToastString(val message: Int) : DeveloperOptionsEvents()
- data class ShowUpdateOptionsDialog(
- val options: List,
- var selectedValue: UpdateOptions,
- ) : DeveloperOptionsEvents()
- }
-
- private fun getListItemsForSimulatedReader(): List {
- return getListItemsForHardwareReader() + createReaderUpdateFrequencyItem() + createEnableInteractItem()
- }
-
- data class DeveloperOptionsViewState(
- var rows: List
- ) {
- sealed class ListItem {
- abstract val label: UiString
- abstract val icon: Int?
- abstract var isEnabled: Boolean
- abstract var key: UiString
-
- data class ToggleableListItem(
- @DrawableRes override val icon: Int,
- override val label: UiString,
- override var isEnabled: Boolean = false,
- override var key: UiString,
- val onToggled: (Boolean) -> Unit,
- val isChecked: Boolean
- ) : ListItem()
-
- data class NonToggleableListItem(
- @DrawableRes override val icon: Int,
- override val label: UiString,
- override var isEnabled: Boolean = false,
- override var key: UiString,
- val onClick: () -> Unit
- ) : ListItem()
-
- data class SpinnerListItem(
- @DrawableRes override val icon: Int,
- @DrawableRes val endIcon: Int,
- override val label: UiString,
- override var isEnabled: Boolean = false,
- override var key: UiString,
- val onClick: () -> Unit,
-
- ) : ListItem()
- }
-
- enum class UpdateOptions(@StringRes val title: Int) {
- ALWAYS(string.always_update_reader),
- NEVER(string.never_update_reader),
- LOW_BATTERY_ERROR(string.low_battery_error_update_reader),
- LOW_BATTERY_SUCCEED_CONNECT(string.low_battery_succeed_connect_update_reader),
- RANDOM(string.randomly_update_reader)
- }
- }
-}
diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/prefs/DeveloperOptionsFragment.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/prefs/developer/DeveloperOptionsFragment.kt
similarity index 61%
rename from WooCommerce/src/main/kotlin/com/woocommerce/android/ui/prefs/DeveloperOptionsFragment.kt
rename to WooCommerce/src/main/kotlin/com/woocommerce/android/ui/prefs/developer/DeveloperOptionsFragment.kt
index 8c07fb94e28..7e1af080bde 100644
--- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/prefs/DeveloperOptionsFragment.kt
+++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/prefs/developer/DeveloperOptionsFragment.kt
@@ -1,41 +1,35 @@
-package com.woocommerce.android.ui.prefs
+package com.woocommerce.android.ui.prefs.developer
import android.os.Bundle
import android.view.ContextThemeWrapper
+import android.view.LayoutInflater
import android.view.View
+import android.view.ViewGroup
import androidx.fragment.app.viewModels
-import androidx.recyclerview.widget.DividerItemDecoration
-import androidx.recyclerview.widget.LinearLayoutManager
import com.google.android.material.dialog.MaterialAlertDialogBuilder
import com.woocommerce.android.R
-import com.woocommerce.android.databinding.FragmentDeveloperOptionsBinding
import com.woocommerce.android.ui.base.BaseFragment
-import com.woocommerce.android.ui.prefs.DeveloperOptionsViewModel.DeveloperOptionsViewState.UpdateOptions
+import com.woocommerce.android.ui.compose.composeView
+import com.woocommerce.android.ui.prefs.developer.DeveloperOptionsViewModel.DeveloperOptionsViewState.UpdateFrequencyUiModel
import dagger.hilt.android.AndroidEntryPoint
import org.wordpress.android.util.ToastUtils
@AndroidEntryPoint
-class DeveloperOptionsFragment : BaseFragment(R.layout.fragment_developer_options) {
+class DeveloperOptionsFragment : BaseFragment() {
val viewModel: DeveloperOptionsViewModel by viewModels()
+ override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
+ return composeView {
+ DeveloperOptionsScreen(viewModel)
+ }
+ }
+
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
- val binding = FragmentDeveloperOptionsBinding.bind(view)
-
- initViews(binding)
- observeViewState(binding)
observeEvents()
}
- private fun initViews(binding: FragmentDeveloperOptionsBinding) {
- binding.developerOptionsRv.layoutManager = LinearLayoutManager(requireContext())
- binding.developerOptionsRv.addItemDecoration(
- DividerItemDecoration(requireContext(), DividerItemDecoration.VERTICAL)
- )
- binding.developerOptionsRv.adapter = DeveloperOptionsAdapter()
- }
-
private fun observeEvents() {
viewModel.event.observe(
viewLifecycleOwner
@@ -44,6 +38,7 @@ class DeveloperOptionsFragment : BaseFragment(R.layout.fragment_developer_option
is DeveloperOptionsViewModel.DeveloperOptionsEvents.ShowToastString -> {
ToastUtils.showToast(context, event.message)
}
+
is DeveloperOptionsViewModel.DeveloperOptionsEvents.ShowUpdateOptionsDialog -> {
showUpdateOptionsDialog(
values = event.options,
@@ -56,9 +51,9 @@ class DeveloperOptionsFragment : BaseFragment(R.layout.fragment_developer_option
}
private fun showUpdateOptionsDialog(
- values: List,
- mapper: (UpdateOptions) -> String,
- selectedValue: UpdateOptions
+ values: List,
+ mapper: (UpdateFrequencyUiModel) -> String,
+ selectedValue: UpdateFrequencyUiModel
) {
var currentlySelectedValue = selectedValue
val textValues = values.map(mapper).toTypedArray()
@@ -76,11 +71,5 @@ class DeveloperOptionsFragment : BaseFragment(R.layout.fragment_developer_option
}.show()
}
- private fun observeViewState(binding: FragmentDeveloperOptionsBinding) {
- viewModel.viewState.observe(viewLifecycleOwner) { state ->
- (binding.developerOptionsRv.adapter as DeveloperOptionsAdapter).setItems(state.rows)
- }
- }
-
override fun getFragmentTitle() = resources.getString(R.string.dev_options)
}
diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/prefs/developer/DeveloperOptionsRepository.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/prefs/developer/DeveloperOptionsRepository.kt
new file mode 100644
index 00000000000..d72dea84f16
--- /dev/null
+++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/prefs/developer/DeveloperOptionsRepository.kt
@@ -0,0 +1,74 @@
+package com.woocommerce.android.ui.prefs.developer
+
+import com.woocommerce.android.AppPrefs
+import com.woocommerce.android.cardreader.CardReaderManager
+import com.woocommerce.android.di.AppCoroutineScope
+import com.woocommerce.android.ui.payments.cardreader.ClearCardReaderDataAction
+import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.flow.SharingStarted
+import kotlinx.coroutines.flow.distinctUntilChanged
+import kotlinx.coroutines.flow.map
+import kotlinx.coroutines.flow.onStart
+import kotlinx.coroutines.flow.shareIn
+import javax.inject.Inject
+
+class DeveloperOptionsRepository @Inject constructor(
+ private val appPrefs: AppPrefs,
+ private val clearCardReaderDataAction: ClearCardReaderDataAction,
+ private val cardReaderManager: CardReaderManager,
+ @AppCoroutineScope appScope: CoroutineScope
+) {
+ private val appPrefsTrigger = appPrefs.observePrefs().shareIn(appScope, started = SharingStarted.WhileSubscribed())
+ .onStart { emit(Unit) }
+
+ fun isSimulatedCardReaderEnabled(): Boolean = appPrefs.isSimulatedReaderEnabled
+
+ fun observeSimulatedCardReaderEnabled() = appPrefsTrigger
+ .map { appPrefs.isSimulatedReaderEnabled }
+ .distinctUntilChanged()
+
+ fun changeSimulatedReaderState(isChecked: Boolean) {
+ appPrefs.isSimulatedReaderEnabled = isChecked
+ }
+
+ suspend fun clearSelectedCardReader() {
+ clearCardReaderDataAction.invoke()
+ }
+
+ fun getUpdateSimulatedReaderOption(): CardReaderManager.SimulatorUpdateFrequency {
+ return CardReaderManager.SimulatorUpdateFrequency.valueOf(appPrefs.updateReaderOptionSelected)
+ }
+
+ fun updateSimulatedReaderOption(selectedOption: CardReaderManager.SimulatorUpdateFrequency) {
+ appPrefs.updateReaderOptionSelected = selectedOption.toString()
+ reinitializeSimulatedReaderIfNeeded()
+ }
+
+ fun isInteracPaymentEnabled(): Boolean = appPrefs.isInteracEnabled
+
+ fun observeInteracPaymentEnabled() = appPrefsTrigger
+ .map { appPrefs.isInteracEnabled }
+ .distinctUntilChanged()
+
+ fun changeEnableInteracPaymentState(isChecked: Boolean) {
+ appPrefs.isInteracEnabled = isChecked
+ reinitializeSimulatedReaderIfNeeded()
+ }
+
+ fun observeSavedPrivacyBannerSettings() = appPrefsTrigger
+ .map { appPrefs.savedPrivacySettings }
+ .distinctUntilChanged()
+
+ fun changeSavedPrivacyBannerSettings(isChecked: Boolean) {
+ appPrefs.savedPrivacySettings = isChecked
+ }
+
+ private fun reinitializeSimulatedReaderIfNeeded() {
+ if (cardReaderManager.initialized) {
+ cardReaderManager.reinitializeSimulatedTerminal(
+ updateFrequency = getUpdateSimulatedReaderOption(),
+ useInterac = appPrefs.isInteracEnabled
+ )
+ }
+ }
+}
diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/prefs/developer/DeveloperOptionsScreen.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/prefs/developer/DeveloperOptionsScreen.kt
new file mode 100644
index 00000000000..fd238d34ab0
--- /dev/null
+++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/prefs/developer/DeveloperOptionsScreen.kt
@@ -0,0 +1,118 @@
+package com.woocommerce.android.ui.prefs.developer
+
+import androidx.compose.foundation.Image
+import androidx.compose.foundation.background
+import androidx.compose.foundation.clickable
+import androidx.compose.foundation.layout.Arrangement
+import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.layout.Row
+import androidx.compose.foundation.layout.fillMaxWidth
+import androidx.compose.foundation.layout.padding
+import androidx.compose.foundation.layout.size
+import androidx.compose.foundation.lazy.LazyColumn
+import androidx.compose.foundation.lazy.items
+import androidx.compose.material.Divider
+import androidx.compose.material.Icon
+import androidx.compose.material.MaterialTheme
+import androidx.compose.material.Switch
+import androidx.compose.material.SwitchDefaults
+import androidx.compose.material.Text
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.livedata.observeAsState
+import androidx.compose.ui.Alignment
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.ColorFilter
+import androidx.compose.ui.res.colorResource
+import androidx.compose.ui.res.painterResource
+import androidx.compose.ui.unit.dp
+import com.woocommerce.android.ui.compose.component.getText
+import com.woocommerce.android.ui.prefs.developer.DeveloperOptionsViewModel.DeveloperOptionsViewState
+
+@Composable
+fun DeveloperOptionsScreen(viewModel: DeveloperOptionsViewModel) {
+ viewModel.viewState.observeAsState().value?.let {
+ DeveloperOptionsScreen(it)
+ }
+}
+
+@Composable
+fun DeveloperOptionsScreen(viewState: DeveloperOptionsViewState) {
+ LazyColumn {
+ items(viewState.rows) { row ->
+ when (row) {
+ is DeveloperOptionsViewState.ListItem.ToggleableListItem -> {
+ ToggleableListItem(row)
+ }
+
+ is DeveloperOptionsViewState.ListItem.NonToggleableListItem -> {
+ NonToggleableListItem(row)
+ }
+ }
+ }
+ }
+}
+
+@Composable
+private fun ToggleableListItem(
+ item: DeveloperOptionsViewState.ListItem.ToggleableListItem,
+ modifier: Modifier = Modifier
+) {
+ CommonItemLayout(item, modifier.clickable { item.onToggled(!item.isChecked) }) {
+ Switch(
+ checked = item.isChecked,
+ onCheckedChange = item.onToggled,
+ colors = SwitchDefaults.colors(checkedThumbColor = MaterialTheme.colors.primary)
+ )
+ }
+}
+
+@Composable
+private fun NonToggleableListItem(
+ item: DeveloperOptionsViewState.ListItem.NonToggleableListItem,
+ modifier: Modifier = Modifier
+) {
+ CommonItemLayout(item, modifier.clickable { item.onClick() }) {
+ item.endIcon?.let {
+ Icon(
+ painter = painterResource(id = it),
+ contentDescription = null
+ )
+ }
+ }
+}
+
+@Composable
+private fun CommonItemLayout(
+ item: DeveloperOptionsViewState.ListItem,
+ modifier: Modifier = Modifier,
+ additionalContent: (@Composable () -> Unit)? = null,
+) {
+ Column(
+ modifier = modifier
+ .fillMaxWidth()
+ .background(MaterialTheme.colors.surface)
+ ) {
+ Row(
+ horizontalArrangement = Arrangement.spacedBy(16.dp),
+ verticalAlignment = Alignment.CenterVertically,
+ modifier = Modifier.padding(16.dp)
+ ) {
+ Image(
+ painter = painterResource(item.icon),
+ contentDescription = null,
+ colorFilter = item.iconTint?.let { ColorFilter.tint(colorResource(id = it)) },
+ modifier = Modifier
+ .size(72.dp)
+ )
+
+ Text(
+ text = item.label.getText(),
+ modifier = Modifier.weight(1f)
+ )
+
+ additionalContent?.invoke()
+ }
+
+ Divider()
+ }
+}
diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/prefs/developer/DeveloperOptionsViewModel.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/prefs/developer/DeveloperOptionsViewModel.kt
new file mode 100644
index 00000000000..3e7738b412f
--- /dev/null
+++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/prefs/developer/DeveloperOptionsViewModel.kt
@@ -0,0 +1,170 @@
+package com.woocommerce.android.ui.prefs.developer
+
+import androidx.annotation.ColorRes
+import androidx.annotation.DrawableRes
+import androidx.annotation.StringRes
+import androidx.lifecycle.SavedStateHandle
+import androidx.lifecycle.asLiveData
+import com.woocommerce.android.R
+import com.woocommerce.android.cardreader.CardReaderManager
+import com.woocommerce.android.model.UiString
+import com.woocommerce.android.model.UiString.UiStringRes
+import com.woocommerce.android.ui.prefs.developer.DeveloperOptionsViewModel.DeveloperOptionsViewState.ListItem.NonToggleableListItem
+import com.woocommerce.android.ui.prefs.developer.DeveloperOptionsViewModel.DeveloperOptionsViewState.ListItem.ToggleableListItem
+import com.woocommerce.android.ui.prefs.developer.DeveloperOptionsViewModel.DeveloperOptionsViewState.UpdateFrequencyUiModel
+import com.woocommerce.android.viewmodel.MultiLiveEvent
+import com.woocommerce.android.viewmodel.ScopedViewModel
+import dagger.hilt.android.lifecycle.HiltViewModel
+import kotlinx.coroutines.flow.combine
+import kotlinx.coroutines.flow.map
+import kotlinx.coroutines.launch
+import javax.inject.Inject
+
+@HiltViewModel
+class DeveloperOptionsViewModel @Inject constructor(
+ savedState: SavedStateHandle,
+ private val developerOptionsRepository: DeveloperOptionsRepository
+) : ScopedViewModel(savedState) {
+ private val isSimulatedReaderEnabled = developerOptionsRepository.observeSimulatedCardReaderEnabled()
+
+ private val simulatedCardReaderFlow = isSimulatedReaderEnabled.map { simulated ->
+ ToggleableListItem(
+ icon = R.drawable.img_card_reader,
+ label = UiStringRes(R.string.enable_card_reader),
+ isEnabled = true,
+ isChecked = simulated,
+ onToggled = ::onSimulatedReaderToggled
+ )
+ }
+
+ private val readerUpdateFrequencyFlow = isSimulatedReaderEnabled.map { simulatedReader ->
+ if (!simulatedReader) return@map null
+
+ NonToggleableListItem(
+ icon = R.drawable.img_card_reader_update_progress,
+ iconTint = R.color.color_primary,
+ endIcon = R.drawable.ic_arrow_drop_down,
+ label = UiStringRes(R.string.update_simulated_reader),
+ isEnabled = true,
+ onClick = ::onUpdateSimulatedReaderClicked,
+ )
+ }
+
+ private val interacPaymentEnabledFlow = combine(
+ isSimulatedReaderEnabled,
+ developerOptionsRepository.observeInteracPaymentEnabled()
+ ) { simulatedReader, useInterac ->
+ if (!simulatedReader) return@combine null
+
+ ToggleableListItem(
+ icon = R.drawable.ic_credit_card_give,
+ label = UiStringRes(R.string.enable_interac_payment),
+ isEnabled = true,
+ isChecked = useInterac,
+ onToggled = developerOptionsRepository::changeEnableInteracPaymentState
+ )
+ }
+
+ private val savedPrivacySettingsOnDialogFlow = developerOptionsRepository
+ .observeSavedPrivacyBannerSettings()
+ .map { isChecked ->
+ ToggleableListItem(
+ icon = R.drawable.ic_more_screen_settings,
+ label = UiString.UiStringText("Saved privacy settings on dialog?"),
+ isEnabled = true,
+ isChecked = isChecked,
+ onToggled = developerOptionsRepository::changeSavedPrivacyBannerSettings
+ )
+ }
+
+ val viewState = combine(
+ simulatedCardReaderFlow,
+ readerUpdateFrequencyFlow,
+ interacPaymentEnabledFlow,
+ savedPrivacySettingsOnDialogFlow
+ ) { items ->
+ DeveloperOptionsViewState(
+ rows = items.filterNotNull()
+ )
+ }.asLiveData()
+
+ private fun onSimulatedReaderToggled(isChecked: Boolean) {
+ developerOptionsRepository.changeSimulatedReaderState(isChecked)
+ if (!isChecked) {
+ disconnectAndClearSelectedCardReader()
+ triggerEvent(
+ DeveloperOptionsEvents.ShowToastString(R.string.simulated_reader_toast)
+ )
+ }
+ }
+
+ private fun disconnectAndClearSelectedCardReader() {
+ launch {
+ developerOptionsRepository.clearSelectedCardReader()
+ }
+ }
+
+ private fun onUpdateSimulatedReaderClicked() {
+ triggerEvent(
+ DeveloperOptionsEvents.ShowUpdateOptionsDialog(
+ UpdateFrequencyUiModel.entries,
+ UpdateFrequencyUiModel.fromDomainModel(developerOptionsRepository.getUpdateSimulatedReaderOption())
+ )
+ )
+ }
+
+ fun onUpdateReaderOptionChanged(selectedOption: UpdateFrequencyUiModel) {
+ developerOptionsRepository.updateSimulatedReaderOption(selectedOption.toDomainModel())
+ }
+
+ sealed class DeveloperOptionsEvents : MultiLiveEvent.Event() {
+ data class ShowToastString(val message: Int) : DeveloperOptionsEvents()
+ data class ShowUpdateOptionsDialog(
+ val options: List,
+ var selectedValue: UpdateFrequencyUiModel,
+ ) : DeveloperOptionsEvents()
+ }
+
+ data class DeveloperOptionsViewState(
+ var rows: List
+ ) {
+ sealed class ListItem {
+ abstract val label: UiString
+ abstract val icon: Int
+ abstract val iconTint: Int?
+ abstract var isEnabled: Boolean
+
+ data class ToggleableListItem(
+ @DrawableRes override val icon: Int,
+ @ColorRes override val iconTint: Int? = null,
+ override val label: UiString,
+ override var isEnabled: Boolean = false,
+ val onToggled: (Boolean) -> Unit,
+ val isChecked: Boolean
+ ) : ListItem()
+
+ data class NonToggleableListItem(
+ @DrawableRes override val icon: Int,
+ @ColorRes override val iconTint: Int? = null,
+ @DrawableRes val endIcon: Int? = null,
+ override val label: UiString,
+ override var isEnabled: Boolean = false,
+ val onClick: () -> Unit
+ ) : ListItem()
+ }
+
+ enum class UpdateFrequencyUiModel(@StringRes val title: Int) {
+ ALWAYS(R.string.always_update_reader),
+ NEVER(R.string.never_update_reader),
+ LOW_BATTERY_ERROR(R.string.low_battery_error_update_reader),
+ LOW_BATTERY_SUCCEED_CONNECT(R.string.low_battery_succeed_connect_update_reader),
+ RANDOM(R.string.randomly_update_reader);
+
+ fun toDomainModel() = CardReaderManager.SimulatorUpdateFrequency.valueOf(name)
+
+ companion object {
+ fun fromDomainModel(model: CardReaderManager.SimulatorUpdateFrequency) = valueOf(model.name)
+ }
+ }
+ }
+}
diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/prefs/domain/DomainDashboardScreen.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/prefs/domain/DomainDashboardScreen.kt
index a490f6218c7..279cdca1c2d 100644
--- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/prefs/domain/DomainDashboardScreen.kt
+++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/prefs/domain/DomainDashboardScreen.kt
@@ -18,7 +18,6 @@ import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.items
import androidx.compose.foundation.shape.RoundedCornerShape
-import androidx.compose.foundation.text.ClickableText
import androidx.compose.material.Divider
import androidx.compose.material.Icon
import androidx.compose.material.MaterialTheme
@@ -49,7 +48,6 @@ import com.woocommerce.android.R.color
import com.woocommerce.android.R.dimen
import com.woocommerce.android.R.drawable
import com.woocommerce.android.R.string
-import com.woocommerce.android.ui.compose.URL_ANNOTATION_TAG
import com.woocommerce.android.ui.compose.annotatedStringRes
import com.woocommerce.android.ui.compose.component.ProgressIndicator
import com.woocommerce.android.ui.compose.component.ToolbarWithHelpButton
@@ -139,18 +137,17 @@ private fun DomainDashboard(
imageVector = ImageVector.vectorResource(id = drawable.ic_info_outline_20dp),
contentDescription = stringResource(string.domains_learn_more)
)
- val text = annotatedStringRes(stringResId = string.domains_learn_more)
- ClickableText(
- modifier = Modifier.padding(start = dimensionResource(id = dimen.minor_100)),
+ val text = annotatedStringRes(
+ stringResId = string.domains_learn_more,
+ onUrlClick = { onLearnMoreButtonTapped() }
+ )
+
+ Text(
text = text,
- style = MaterialTheme.typography.caption.copy(
- color = colorResource(id = color.color_on_surface_medium)
- ),
- ) {
- text.getStringAnnotations(tag = URL_ANNOTATION_TAG, start = it, end = it)
- .firstOrNull()
- ?.let { onLearnMoreButtonTapped() }
- }
+ style = MaterialTheme.typography.caption,
+ color = colorResource(id = color.color_on_surface_medium),
+ modifier = Modifier.padding(start = dimensionResource(id = dimen.minor_100)),
+ )
}
} else {
LazyColumn(
diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/products/ai/AddProductWithAIBottomSheet.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/products/ai/AddProductWithAIBottomSheet.kt
index be7bfbb9461..89289de6236 100644
--- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/products/ai/AddProductWithAIBottomSheet.kt
+++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/products/ai/AddProductWithAIBottomSheet.kt
@@ -18,7 +18,7 @@ import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.width
import androidx.compose.foundation.shape.RoundedCornerShape
-import androidx.compose.foundation.text.ClickableText
+import androidx.compose.material.ContentAlpha
import androidx.compose.material.Divider
import androidx.compose.material.Icon
import androidx.compose.material.MaterialTheme
@@ -44,7 +44,6 @@ import com.woocommerce.android.R
import com.woocommerce.android.analytics.AnalyticsEvent
import com.woocommerce.android.analytics.AnalyticsTracker
import com.woocommerce.android.extensions.navigateSafely
-import com.woocommerce.android.ui.compose.URL_ANNOTATION_TAG
import com.woocommerce.android.ui.compose.annotatedStringRes
import com.woocommerce.android.ui.compose.component.BottomSheetHandle
import com.woocommerce.android.ui.compose.theme.WooTheme
@@ -132,18 +131,16 @@ private fun AddProductWithAIContent(
Spacer(Modifier.height(dimensionResource(id = R.dimen.minor_100)))
- val learnMoreText = annotatedStringRes(stringResId = R.string.product_creation_ai_entry_sheet_learn_more)
- ClickableText(
+ val learnMoreText = annotatedStringRes(
+ stringResId = R.string.product_creation_ai_entry_sheet_learn_more,
+ onUrlClick = { onLearnMoreClick() }
+ )
+ Text(
text = learnMoreText,
- style = MaterialTheme.typography.caption.copy(
- color = colorResource(id = R.color.color_on_surface_medium)
- ),
+ style = MaterialTheme.typography.caption,
+ color = MaterialTheme.colors.onSurface.copy(alpha = ContentAlpha.medium),
modifier = Modifier.padding(start = dimensionResource(id = R.dimen.major_325))
- ) {
- learnMoreText.getStringAnnotations(tag = URL_ANNOTATION_TAG, start = it, end = it)
- .firstOrNull()
- ?.let { onLearnMoreClick() }
- }
+ )
Divider(Modifier.padding(dimensionResource(id = R.dimen.major_100)))
diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/products/ai/productinfo/AiProductPromptScreen.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/products/ai/productinfo/AiProductPromptScreen.kt
index 4e9709a49a5..1ee568b8183 100644
--- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/products/ai/productinfo/AiProductPromptScreen.kt
+++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/products/ai/productinfo/AiProductPromptScreen.kt
@@ -64,7 +64,7 @@ import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import com.woocommerce.android.R
import com.woocommerce.android.mediapicker.MediaPickerDialog
-import com.woocommerce.android.ui.compose.annotatedStringRes
+import com.woocommerce.android.ui.compose.annotatedStringResLegacy
import com.woocommerce.android.ui.compose.component.Toolbar
import com.woocommerce.android.ui.compose.component.WCColoredButton
import com.woocommerce.android.ui.compose.component.WCOutlinedTextField
@@ -413,7 +413,7 @@ private fun PromptSuggestions(
color = colorResource(id = promptSuggestionBarState.progressBarColorRes)
)
Text(
- text = annotatedStringRes(promptSuggestionBarState.messageRes),
+ text = annotatedStringResLegacy(promptSuggestionBarState.messageRes),
modifier = Modifier
.fillMaxSize()
.padding(top = 8.dp),
diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/products/details/ProductDetailCardBuilder.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/products/details/ProductDetailCardBuilder.kt
index 5c87ce44d74..3dbdaaa5200 100644
--- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/products/details/ProductDetailCardBuilder.kt
+++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/products/details/ProductDetailCardBuilder.kt
@@ -474,21 +474,26 @@ class ProductDetailCardBuilder(
@Suppress("LongMethod")
private fun ProductAggregate.shipping(): ProductProperty? {
- return if (!this.product.isVirtual && hasShipping) {
+ val currentProduct = this.product
+ return if (!currentProduct.isVirtual && hasShipping) {
val weightWithUnits = product.getWeightWithUnits(parameters.weightUnit)
val sizeWithUnits = product.getSizeWithUnits(parameters.dimensionUnit)
- val shippingGroup = mapOf(
- Pair(resources.getString(string.product_weight), weightWithUnits),
- Pair(resources.getString(string.product_dimensions), sizeWithUnits),
- Pair(
+ val shippingGroup = buildMap {
+ put(resources.getString(string.product_weight), weightWithUnits)
+ put(resources.getString(string.product_dimensions), sizeWithUnits)
+ put(
resources.getString(string.product_shipping_class),
- viewModel.getShippingClassByRemoteShippingClassId(this.product.shippingClassId)
- ),
- Pair(
- resources.getString(string.subscription_one_time_shipping),
- buildOneTimeShippingDescription(subscription)
+ viewModel.getShippingClassByRemoteShippingClassId(currentProduct.shippingClassId)
)
- )
+
+ // Only add "One time shipping" info if product is Subscription types
+ if (currentProduct.productType == SUBSCRIPTION || currentProduct.productType == VARIABLE_SUBSCRIPTION) {
+ put(
+ resources.getString(string.subscription_one_time_shipping),
+ buildOneTimeShippingDescription(subscription)
+ )
+ }
+ }
PropertyGroup(
string.product_shipping,
diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/products/details/ProductDetailViewModel.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/products/details/ProductDetailViewModel.kt
index daaaef496d4..553c75c000c 100644
--- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/products/details/ProductDetailViewModel.kt
+++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/products/details/ProductDetailViewModel.kt
@@ -1229,13 +1229,22 @@ class ProductDetailViewModel @Inject constructor(
updateProductDraft(type = productType.value, isVirtual = isVirtual)
viewState.productAggregateDraft?.let { productAggregateDraft ->
- if (productType == ProductType.SUBSCRIPTION && productAggregateDraft.subscription == null) {
- viewState = viewState.copy(
- subscriptionDraft = ProductHelper.getDefaultSubscriptionDetails().copy(
- price = productAggregateDraft.product.regularPrice
- )
- )
- }
+ viewState = viewState.copy(
+ subscriptionDraft = when {
+ // If converting to subscription product, set the default subscription details
+ productType == ProductType.SUBSCRIPTION && productAggregateDraft.subscription == null ->
+ ProductHelper.getDefaultSubscriptionDetails().copy(
+ price = productAggregateDraft.product.regularPrice
+ )
+
+ // If converting to non-subscription products, reset subscription data that might have existed
+ // (e.g: if the original product is of subscription type).
+ // This avoids any Product Details card conflicts that can happen after conversion.
+ productType !in setOf(ProductType.SUBSCRIPTION, ProductType.VARIABLE_SUBSCRIPTION) -> null
+
+ else -> viewState.subscriptionDraft
+ }
+ )
}
}
@@ -2731,7 +2740,7 @@ class ProductDetailViewModel @Inject constructor(
}
)
- fun copy(subscriptionDraft: SubscriptionDetails) = copy(
+ fun copy(subscriptionDraft: SubscriptionDetails?) = copy(
productAggregateDraft = productAggregateDraft?.copy(subscription = subscriptionDraft)
)
diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/products/inventory/FetchProductByIdentifier.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/products/inventory/FetchProductByIdentifier.kt
new file mode 100644
index 00000000000..ae56e634426
--- /dev/null
+++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/products/inventory/FetchProductByIdentifier.kt
@@ -0,0 +1,94 @@
+package com.woocommerce.android.ui.products.inventory
+
+import com.woocommerce.android.model.Product
+import com.woocommerce.android.ui.orders.creation.CheckDigitRemoverFactory
+import com.woocommerce.android.ui.orders.creation.GoogleBarcodeFormatMapper
+import com.woocommerce.android.ui.products.list.ProductListRepository
+import kotlinx.coroutines.async
+import kotlinx.coroutines.coroutineScope
+import org.wordpress.android.fluxc.store.WCProductStore
+import javax.inject.Inject
+
+class FetchProductByIdentifier @Inject constructor(
+ private val productRepository: ProductListRepository,
+ private val checkDigitRemoverFactory: CheckDigitRemoverFactory,
+) {
+ suspend operator fun invoke(
+ codeScannerResultCode: String,
+ codeScannerResultFormat: GoogleBarcodeFormatMapper.BarcodeFormat
+ ): Result = coroutineScope {
+ val globalUniqueIdentifierSearch = async {
+ searchProductByGlobalUniqueIdentifier(
+ codeScannerResultCode,
+ codeScannerResultFormat
+ )
+ }
+ val skuSearch = async { searchProductBySku(codeScannerResultCode, codeScannerResultFormat) }
+
+ val product = globalUniqueIdentifierSearch.await() ?: skuSearch.await()
+
+ if (product != null) {
+ Result.success(product)
+ } else {
+ Result.failure(Exception("Product not found"))
+ }
+ }
+
+ private suspend fun searchProductBySku(
+ codeScannerResultCode: String,
+ codeScannerResultFormat: GoogleBarcodeFormatMapper.BarcodeFormat
+ ): Product? {
+ val product = productRepository.searchProductList(
+ searchQuery = codeScannerResultCode,
+ skuSearchOptions = WCProductStore.SkuSearchOptions.ExactSearch
+ )?.firstOrNull()
+ ?: removeCheckDigitIfPossible(
+ codeScannerResultCode = codeScannerResultCode,
+ codeScannerResultFormat = codeScannerResultFormat
+ )?.let {
+ productRepository.searchProductList(
+ searchQuery = it,
+ skuSearchOptions = WCProductStore.SkuSearchOptions.ExactSearch
+ )?.firstOrNull()
+ }
+ return product
+ }
+
+ private suspend fun searchProductByGlobalUniqueIdentifier(
+ codeScannerResultCode: String,
+ codeScannerResultFormat: GoogleBarcodeFormatMapper.BarcodeFormat
+ ): Product? {
+ val product = productRepository.searchProductListByGlobalUniqueId(
+ globalUniqueId = codeScannerResultCode
+ )?.firstOrNull() ?: removeCheckDigitIfPossible(
+ codeScannerResultCode = codeScannerResultCode,
+ codeScannerResultFormat = codeScannerResultFormat
+ )?.let {
+ productRepository.searchProductListByGlobalUniqueId(
+ globalUniqueId = codeScannerResultCode
+ )?.firstOrNull()
+ }
+
+ return product
+ }
+
+ private fun removeCheckDigitIfPossible(
+ codeScannerResultCode: String,
+ codeScannerResultFormat: GoogleBarcodeFormatMapper.BarcodeFormat
+ ): String? {
+ if (codeScannerResultFormat.isEAN() || codeScannerResultFormat.isUPC()) {
+ return checkDigitRemoverFactory.getCheckDigitRemoverFor(codeScannerResultFormat)
+ .getSKUWithoutCheckDigit(codeScannerResultCode)
+ }
+
+ return null
+ }
+
+ private fun GoogleBarcodeFormatMapper.BarcodeFormat.isUPC() =
+ this == GoogleBarcodeFormatMapper.BarcodeFormat.FormatUPCA ||
+ this == GoogleBarcodeFormatMapper.BarcodeFormat.FormatUPCE
+
+ private fun GoogleBarcodeFormatMapper.BarcodeFormat.isEAN() =
+ this == GoogleBarcodeFormatMapper.BarcodeFormat.FormatEAN13 ||
+ this == GoogleBarcodeFormatMapper.BarcodeFormat.FormatEAN8
+}
diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/products/inventory/FetchProductBySKU.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/products/inventory/FetchProductBySKU.kt
deleted file mode 100644
index 7dd9d354b3b..00000000000
--- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/products/inventory/FetchProductBySKU.kt
+++ /dev/null
@@ -1,46 +0,0 @@
-package com.woocommerce.android.ui.products.inventory
-
-import com.woocommerce.android.model.Product
-import com.woocommerce.android.ui.orders.creation.CheckDigitRemoverFactory
-import com.woocommerce.android.ui.orders.creation.GoogleBarcodeFormatMapper
-import com.woocommerce.android.ui.products.list.ProductListRepository
-import org.wordpress.android.fluxc.store.WCProductStore
-import javax.inject.Inject
-
-class FetchProductBySKU @Inject constructor(
- private val productRepository: ProductListRepository,
- private val checkDigitRemoverFactory: CheckDigitRemoverFactory,
-) {
- suspend operator fun invoke(
- codeScannerResultCode: String,
- codeScannerResultFormat: GoogleBarcodeFormatMapper.BarcodeFormat
- ): Result {
- val product = productRepository.searchProductList(
- searchQuery = codeScannerResultCode,
- skuSearchOptions = WCProductStore.SkuSearchOptions.ExactSearch
- )?.firstOrNull()
- ?: if (codeScannerResultFormat.isEAN() || codeScannerResultFormat.isUPC()) {
- val sku = checkDigitRemoverFactory.getCheckDigitRemoverFor(codeScannerResultFormat)
- .getSKUWithoutCheckDigit(codeScannerResultCode)
- productRepository.searchProductList(
- searchQuery = sku,
- skuSearchOptions = WCProductStore.SkuSearchOptions.ExactSearch
- )?.firstOrNull()
- } else {
- null
- }
- return if (product != null) {
- Result.success(product)
- } else {
- Result.failure(Exception("Product not found"))
- }
- }
-
- private fun GoogleBarcodeFormatMapper.BarcodeFormat.isUPC() =
- this == GoogleBarcodeFormatMapper.BarcodeFormat.FormatUPCA ||
- this == GoogleBarcodeFormatMapper.BarcodeFormat.FormatUPCE
-
- private fun GoogleBarcodeFormatMapper.BarcodeFormat.isEAN() =
- this == GoogleBarcodeFormatMapper.BarcodeFormat.FormatEAN13 ||
- this == GoogleBarcodeFormatMapper.BarcodeFormat.FormatEAN8
-}
diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/products/inventory/ScanToUpdateInventoryViewModel.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/products/inventory/ScanToUpdateInventoryViewModel.kt
index a6d0df2ef84..94366a2d26f 100644
--- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/products/inventory/ScanToUpdateInventoryViewModel.kt
+++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/products/inventory/ScanToUpdateInventoryViewModel.kt
@@ -31,7 +31,7 @@ import javax.inject.Inject
@HiltViewModel
class ScanToUpdateInventoryViewModel @Inject constructor(
savedState: SavedStateHandle,
- private val fetchProductBySKU: FetchProductBySKU,
+ private val fetchProductByIdentifier: FetchProductByIdentifier,
private val resourceProvider: ResourceProvider,
private val productRepository: ProductDetailRepository,
private val variationRepository: VariationDetailRepository,
@@ -62,7 +62,7 @@ class ScanToUpdateInventoryViewModel @Inject constructor(
private fun handleBarcodeScanningSuccess(status: CodeScannerStatus.Success) = launch {
_viewState.value = ViewState.Loading
- val productResult: Result = fetchProductBySKU(status.code, status.format)
+ val productResult: Result = fetchProductByIdentifier(status.code, status.format)
if (productResult.isSuccess) {
val product = productResult.getOrNull()
if (product != null) {
diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/products/list/ProductListFragment.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/products/list/ProductListFragment.kt
index 4100aef1c54..9daa53edf3b 100644
--- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/products/list/ProductListFragment.kt
+++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/products/list/ProductListFragment.kt
@@ -225,7 +225,7 @@ class ProductListFragment :
}
private fun enableProductsRefresh(enable: Boolean) {
- binding.productsRefreshLayout.isEnabled = enable
+ _binding?.productsRefreshLayout?.isEnabled = enable
}
private fun initAddProductFab(fabButton: FloatingActionButton) {
diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/products/list/ProductListRepository.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/products/list/ProductListRepository.kt
index aeddc1285b0..7608665bfc9 100644
--- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/products/list/ProductListRepository.kt
+++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/products/list/ProductListRepository.kt
@@ -28,6 +28,7 @@ import org.wordpress.android.fluxc.action.WCProductAction
import org.wordpress.android.fluxc.generated.WCProductActionBuilder
import org.wordpress.android.fluxc.model.WCProductModel
import org.wordpress.android.fluxc.store.WCProductStore
+import org.wordpress.android.fluxc.store.WCProductStore.SkuSearchOptions
import javax.inject.Inject
class ProductListRepository @Inject constructor(
@@ -42,7 +43,8 @@ class ProductListRepository @Inject constructor(
private const val PRODUCT_PAGE_SIZE = WCProductStore.DEFAULT_PRODUCT_PAGE_SIZE
}
- private var searchContinuation = ContinuationWrapper>(WooLog.T.PRODUCTS)
+ private var searchBySKUContinuation = ContinuationWrapper>(WooLog.T.PRODUCTS)
+ private var searchByGlobalUniqueIdContinuation = ContinuationWrapper>(WooLog.T.PRODUCTS)
private var trashContinuation = ContinuationWrapper(WooLog.T.PRODUCTS)
private var offset = 0
@@ -132,7 +134,7 @@ class ProductListRepository @Inject constructor(
excludedProductIds: List? = null,
productFilterOptions: Map = emptyMap(),
): List? {
- val result = searchContinuation.callAndWaitUntilTimeout(AppConstants.REQUEST_TIMEOUT) {
+ val result = searchBySKUContinuation.callAndWaitUntilTimeout(AppConstants.REQUEST_TIMEOUT) {
offset = if (loadMore) offset + PRODUCT_PAGE_SIZE else 0
lastSearchQuery = searchQuery
lastIsSkuSearch = skuSearchOptions
@@ -155,6 +157,32 @@ class ProductListRepository @Inject constructor(
}
}
+ suspend fun searchProductListByGlobalUniqueId(
+ globalUniqueId: String,
+ loadMore: Boolean = false,
+ excludedProductIds: List? = null,
+ productFilterOptions: Map = emptyMap(),
+ ): List? {
+ val result = searchByGlobalUniqueIdContinuation.callAndWaitUntilTimeout(AppConstants.REQUEST_TIMEOUT) {
+ offset = if (loadMore) offset + PRODUCT_PAGE_SIZE else 0
+ val payload = WCProductStore.SearchProductsByGlobalUniqueIdPayload(
+ site = selectedSite.get(),
+ globalUniqueId = globalUniqueId,
+ pageSize = PRODUCT_PAGE_SIZE,
+ offset = offset,
+ sorting = productSortingChoice,
+ excludedProductIds = excludedProductIds,
+ filterOptions = productFilterOptions
+ )
+ dispatcher.dispatch(WCProductActionBuilder.newSearchProductsByGlobalUniqueIdAction(payload))
+ }
+
+ return when (result) {
+ is ContinuationWrapper.ContinuationResult.Cancellation -> null
+ is ContinuationWrapper.ContinuationResult.Success -> result.value
+ }
+ }
+
/**
* Dispatches a request to trash a specific product
*/
@@ -241,12 +269,18 @@ class ProductListRepository @Inject constructor(
@Suppress("unused")
@Subscribe(threadMode = ThreadMode.MAIN)
fun onProductsSearched(event: WCProductStore.OnProductsSearched) {
+ val continuation = if (event.globalUniqueIdSearchQuery != null) {
+ searchByGlobalUniqueIdContinuation
+ } else {
+ searchBySKUContinuation
+ }
+
if (event.isError) {
- searchContinuation.continueWith(emptyList())
+ continuation.continueWith(emptyList())
} else {
canLoadMoreProducts = event.canLoadMore
val products = event.searchResults.map { it.toAppModel() }
- searchContinuation.continueWith(products)
+ continuation.continueWith(products)
}
}
diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/products/variations/selector/VariationListHandler.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/products/variations/selector/VariationListHandler.kt
index d38947fdda8..30ca51f878c 100644
--- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/products/variations/selector/VariationListHandler.kt
+++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/products/variations/selector/VariationListHandler.kt
@@ -6,7 +6,7 @@ import javax.inject.Inject
class VariationListHandler @Inject constructor(private val repository: VariationSelectorRepository) {
companion object {
- private const val PAGE_SIZE = 10
+ private const val PAGE_SIZE = 25
}
private val mutex = Mutex()
@@ -15,8 +15,15 @@ class VariationListHandler @Inject constructor(private val repository: Variation
fun getVariationsFlow(productId: Long) = repository.observeVariations(productId)
- fun canLoadMore(): Boolean {
- return canLoadMore
+ suspend fun resetState() {
+ mutex.withLock {
+ offset = 0
+ canLoadMore = false
+ }
+ }
+
+ fun canLoadMore(numOfVariations: Int): Boolean {
+ return canLoadMore || (offset + PAGE_SIZE < numOfVariations)
}
suspend fun fetchVariations(productId: Long, forceRefresh: Boolean = false): Result = mutex.withLock {
@@ -41,8 +48,4 @@ class VariationListHandler @Inject constructor(private val repository: Variation
offset += PAGE_SIZE
}.map { }
}
-
- fun resetLoadMoreState() {
- canLoadMore = false
- }
}
diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/cashpayment/WooPosCashPaymentNavigation.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/cashpayment/WooPosCashPaymentNavigation.kt
new file mode 100644
index 00000000000..097b6275c1b
--- /dev/null
+++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/cashpayment/WooPosCashPaymentNavigation.kt
@@ -0,0 +1,43 @@
+package com.woocommerce.android.ui.woopos.cashpayment
+
+import androidx.compose.animation.slideInHorizontally
+import androidx.compose.animation.slideOutHorizontally
+import androidx.navigation.NavController
+import androidx.navigation.NavGraphBuilder
+import androidx.navigation.NavType
+import androidx.navigation.compose.composable
+import androidx.navigation.navArgument
+import com.woocommerce.android.ui.woopos.home.HOME_ROUTE
+import com.woocommerce.android.ui.woopos.root.navigation.WooPosNavigationEvent
+
+const val CASH_ROUTE_ORDER_ID_KEY = "orderId"
+private const val CASH_ROUTE = "$HOME_ROUTE/cash_payment/{$CASH_ROUTE_ORDER_ID_KEY}"
+
+fun NavController.navigateToCashPaymentScreen(orderId: Long) {
+ navigate(CASH_ROUTE.replace("{$CASH_ROUTE_ORDER_ID_KEY}", orderId.toString()))
+}
+
+fun NavGraphBuilder.cashPaymentScreen(
+ onNavigationEvent: (WooPosNavigationEvent) -> Unit
+) {
+ composable(
+ route = CASH_ROUTE,
+ arguments = listOf(
+ navArgument(CASH_ROUTE_ORDER_ID_KEY) { type = NavType.LongType }
+ ),
+ enterTransition = {
+ slideInHorizontally(
+ initialOffsetX = { fullWidth -> fullWidth },
+ )
+ },
+ exitTransition = {
+ slideOutHorizontally(
+ targetOffsetX = { fullWidth -> fullWidth },
+ )
+ },
+ ) { backStackEntry ->
+ WooPosCashPaymentScreen(
+ onNavigationEvent = onNavigationEvent,
+ )
+ }
+}
diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/cashpayment/WooPosCashPaymentRepository.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/cashpayment/WooPosCashPaymentRepository.kt
new file mode 100644
index 00000000000..fcaf1f4154f
--- /dev/null
+++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/cashpayment/WooPosCashPaymentRepository.kt
@@ -0,0 +1,61 @@
+package com.woocommerce.android.ui.woopos.cashpayment
+
+import com.woocommerce.android.model.Order
+import com.woocommerce.android.model.OrderMapper
+import com.woocommerce.android.tools.SelectedSite
+import com.woocommerce.android.util.WooLog
+import com.woocommerce.android.util.WooLog.T
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.flow.filterIsInstance
+import kotlinx.coroutines.flow.first
+import kotlinx.coroutines.flow.map
+import kotlinx.coroutines.withContext
+import org.wordpress.android.fluxc.model.WCOrderStatusModel
+import org.wordpress.android.fluxc.store.WCGatewayStore
+import org.wordpress.android.fluxc.store.WCOrderStore
+import javax.inject.Inject
+
+class WooPosCashPaymentRepository @Inject constructor(
+ private val selectedSite: SelectedSite,
+ private val orderStore: WCOrderStore,
+ private val orderMapper: OrderMapper,
+ private val gatewayStore: WCGatewayStore,
+) {
+ suspend fun getOrderById(orderId: Long) = withContext(Dispatchers.IO) {
+ orderStore.getOrderByIdAndSite(orderId, selectedSite.get())?.let {
+ orderMapper.toAppModel(it)
+ }
+ }
+
+ suspend fun completeOrder(orderId: Long): Result = withContext(Dispatchers.IO) {
+ val codGateway = gatewayStore.getGateway(selectedSite.get(), CASH_ON_DELIVERY_PAYMENT_TYPE)
+
+ val statusModel = orderStore.getOrderStatusForSiteAndKey(
+ selectedSite.get(),
+ Order.Status.Completed.value
+ ) ?: WCOrderStatusModel(statusKey = Order.Status.Completed.value).apply {
+ label = statusKey
+ }
+
+ orderStore.updateOrderStatusAndPaymentMethod(
+ orderId = orderId,
+ site = selectedSite.get(),
+ newStatus = statusModel,
+ newPaymentMethodId = CASH_ON_DELIVERY_PAYMENT_TYPE,
+ newPaymentMethodTitle = codGateway?.title ?: "Pay in Person",
+ )
+ .filterIsInstance()
+ .map { result ->
+ if (result.event.isError) {
+ WooLog.e(T.POS, "Order completion failed - ${result.event.error.message}")
+ Result.failure(Exception(result.event.error.message))
+ } else {
+ Result.success(Unit)
+ }
+ }.first()
+ }
+
+ private companion object {
+ const val CASH_ON_DELIVERY_PAYMENT_TYPE = "cod"
+ }
+}
diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/cashpayment/WooPosCashPaymentScreen.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/cashpayment/WooPosCashPaymentScreen.kt
new file mode 100644
index 00000000000..2e4e8f8363d
--- /dev/null
+++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/cashpayment/WooPosCashPaymentScreen.kt
@@ -0,0 +1,213 @@
+package com.woocommerce.android.ui.woopos.cashpayment
+
+import androidx.compose.foundation.layout.Box
+import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.layout.Spacer
+import androidx.compose.foundation.layout.fillMaxSize
+import androidx.compose.foundation.layout.fillMaxWidth
+import androidx.compose.foundation.layout.height
+import androidx.compose.foundation.layout.padding
+import androidx.compose.foundation.layout.size
+import androidx.compose.foundation.layout.width
+import androidx.compose.material.Icon
+import androidx.compose.material.IconButton
+import androidx.compose.material.MaterialTheme
+import androidx.compose.material.Text
+import androidx.compose.material.TextField
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.collectAsState
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.res.stringResource
+import androidx.compose.ui.res.vectorResource
+import androidx.compose.ui.text.font.FontWeight
+import androidx.compose.ui.unit.dp
+import androidx.constraintlayout.compose.ConstraintLayout
+import androidx.hilt.navigation.compose.hiltViewModel
+import com.woocommerce.android.R
+import com.woocommerce.android.ui.woopos.common.composeui.WooPosPreview
+import com.woocommerce.android.ui.woopos.common.composeui.WooPosTheme
+import com.woocommerce.android.ui.woopos.common.composeui.component.WooPosButton
+import com.woocommerce.android.ui.woopos.common.composeui.toAdaptivePadding
+import com.woocommerce.android.ui.woopos.root.navigation.WooPosNavigationEvent
+
+@Composable
+fun WooPosCashPaymentScreen(onNavigationEvent: (WooPosNavigationEvent) -> Unit) {
+ val viewModel = hiltViewModel()
+ val state = viewModel.state.collectAsState().value
+
+ WooPosCashPaymentScreen(
+ state = state,
+ onAmountChanged = { viewModel.onUIEvent(WooPosCashPaymentUIEvent.AmountChanged(it)) },
+ onCompleteOrderClicked = { viewModel.onUIEvent(WooPosCashPaymentUIEvent.CompleteOrderClicked) },
+ onBackClicked = { onNavigationEvent(WooPosNavigationEvent.BackFromCashPayment) },
+ onOrderComplete = { onNavigationEvent(WooPosNavigationEvent.OpenHomeFromCashPaymentAfterSuccessfulPayment) },
+ )
+}
+
+@Composable
+fun WooPosCashPaymentScreen(
+ state: WooPosCashPaymentState,
+ onAmountChanged: (String) -> Unit,
+ onCompleteOrderClicked: () -> Unit,
+ onBackClicked: () -> Unit,
+ onOrderComplete: () -> Unit,
+) {
+ Column(
+ modifier = Modifier
+ .fillMaxSize()
+ ) {
+ Toolbar(onBackClicked)
+
+ when (state) {
+ is WooPosCashPaymentState.Collecting -> {
+ Collecting(
+ state = state,
+ onAmountChanged = onAmountChanged,
+ onCompleteOrderClicked = onCompleteOrderClicked,
+ )
+ }
+
+ WooPosCashPaymentState.Complete -> onOrderComplete()
+ WooPosCashPaymentState.Initiating -> {
+ // show nothing
+ }
+ }
+ }
+}
+
+@Composable
+private fun Collecting(
+ state: WooPosCashPaymentState.Collecting,
+ onAmountChanged: (String) -> Unit,
+ onCompleteOrderClicked: () -> Unit,
+) {
+ Box(
+ modifier = Modifier.fillMaxSize()
+ ) {
+ Column(
+ modifier = Modifier
+ .width(540.dp)
+ .padding(32.dp)
+ ) {
+ Spacer(modifier = Modifier.weight(1f))
+
+ Text(
+ text = "Cash payment",
+ style = MaterialTheme.typography.h2,
+ )
+
+ Spacer(modifier = Modifier.height(16.dp))
+
+ Text(
+ text = "Total",
+ style = MaterialTheme.typography.h5,
+ )
+
+ Spacer(modifier = Modifier.height(8.dp))
+
+ Text(
+ text = state.total,
+ style = MaterialTheme.typography.h6,
+ )
+
+ Spacer(modifier = Modifier.height(16.dp))
+
+ Text(
+ text = "Change due",
+ style = MaterialTheme.typography.h5,
+ )
+
+ Spacer(modifier = Modifier.height(8.dp))
+
+ Text(
+ text = state.changeDue,
+ style = MaterialTheme.typography.h5,
+ )
+
+ Spacer(modifier = Modifier.height(16.dp))
+
+ TextField(
+ value = state.enteredAmount,
+ onValueChange = onAmountChanged,
+ label = { Text("Given amount") },
+ )
+
+ Spacer(modifier = Modifier.height(16.dp))
+
+ WooPosButton(
+ text = state.button.text,
+ onClick = onCompleteOrderClicked,
+ enabled = state.button.status == WooPosCashPaymentState.Collecting.Button.Status.ENABLED,
+ )
+
+ Spacer(modifier = Modifier.weight(1f))
+ }
+ }
+}
+
+@Composable
+private fun Toolbar(onBackClicked: () -> Unit) {
+ ConstraintLayout(
+ modifier = Modifier
+ .fillMaxWidth()
+ .padding(top = 40.dp.toAdaptivePadding())
+ .height(40.dp)
+ ) {
+ val (backButton, title) = createRefs()
+ IconButton(
+ onClick = { onBackClicked() },
+ modifier = Modifier
+ .constrainAs(backButton) {
+ start.linkTo(parent.start)
+ top.linkTo(parent.top)
+ centerVerticallyTo(parent)
+ }
+ .padding(start = 8.dp.toAdaptivePadding())
+ ) {
+ Icon(
+ imageVector = ImageVector.vectorResource(R.drawable.ic_back_24dp),
+ contentDescription = stringResource(R.string.woopos_cart_back_content_description),
+ tint = MaterialTheme.colors.onBackground,
+ modifier = Modifier.size(28.dp)
+ )
+ }
+
+ val iconTitlePadding = 8.dp.toAdaptivePadding()
+ Text(
+ text = stringResource(R.string.woopos_cash_payment_title),
+ style = MaterialTheme.typography.h4,
+ color = MaterialTheme.colors.onBackground,
+ fontWeight = FontWeight.Bold,
+ maxLines = 1,
+ modifier = Modifier
+ .constrainAs(title) {
+ top.linkTo(backButton.top)
+ start.linkTo(backButton.end, margin = iconTitlePadding)
+ centerVerticallyTo(parent)
+ }
+ )
+ }
+}
+
+@WooPosPreview
+@Composable
+fun WooPosTotalsPaymentCashScreenScreen() {
+ WooPosTheme {
+ WooPosCashPaymentScreen(
+ state = WooPosCashPaymentState.Collecting(
+ enteredAmount = "5$",
+ changeDue = "5$",
+ total = "10$",
+ button = WooPosCashPaymentState.Collecting.Button(
+ text = "Complete order",
+ status = WooPosCashPaymentState.Collecting.Button.Status.ENABLED
+ )
+ ),
+ onAmountChanged = {},
+ onCompleteOrderClicked = {},
+ onBackClicked = {},
+ onOrderComplete = {},
+ )
+ }
+}
diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/cashpayment/WooPosCashPaymentState.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/cashpayment/WooPosCashPaymentState.kt
new file mode 100644
index 00000000000..6bc80795122
--- /dev/null
+++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/cashpayment/WooPosCashPaymentState.kt
@@ -0,0 +1,31 @@
+package com.woocommerce.android.ui.woopos.cashpayment
+
+import android.os.Parcelable
+import kotlinx.parcelize.Parcelize
+
+@Parcelize
+sealed class WooPosCashPaymentState : Parcelable {
+ data class Collecting(
+ val enteredAmount: String,
+ val changeDue: String,
+ val total: String,
+ val button: Button
+ ) : WooPosCashPaymentState() {
+ @Parcelize
+ data class Button(
+ val text: String,
+ val status: Status,
+ ) : Parcelable {
+ @Parcelize
+ enum class Status : Parcelable {
+ ENABLED,
+ DISABLED,
+ LOADING
+ }
+ }
+ }
+
+ object Complete : WooPosCashPaymentState()
+
+ object Initiating : WooPosCashPaymentState()
+}
diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/cashpayment/WooPosCashPaymentUIEvent.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/cashpayment/WooPosCashPaymentUIEvent.kt
new file mode 100644
index 00000000000..8d83c0904ad
--- /dev/null
+++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/cashpayment/WooPosCashPaymentUIEvent.kt
@@ -0,0 +1,6 @@
+package com.woocommerce.android.ui.woopos.cashpayment
+
+sealed class WooPosCashPaymentUIEvent {
+ object CompleteOrderClicked : WooPosCashPaymentUIEvent()
+ data class AmountChanged(val newAmount: String) : WooPosCashPaymentUIEvent()
+}
diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/cashpayment/WooPosCashPaymentViewModel.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/cashpayment/WooPosCashPaymentViewModel.kt
new file mode 100644
index 00000000000..c3c91c05e4f
--- /dev/null
+++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/cashpayment/WooPosCashPaymentViewModel.kt
@@ -0,0 +1,77 @@
+package com.woocommerce.android.ui.woopos.cashpayment
+
+import androidx.lifecycle.SavedStateHandle
+import androidx.lifecycle.ViewModel
+import androidx.lifecycle.viewModelScope
+import com.woocommerce.android.R
+import com.woocommerce.android.ui.woopos.util.format.WooPosFormatPrice
+import com.woocommerce.android.viewmodel.ResourceProvider
+import com.woocommerce.android.viewmodel.getStateFlow
+import dagger.hilt.android.lifecycle.HiltViewModel
+import kotlinx.coroutines.flow.StateFlow
+import kotlinx.coroutines.launch
+import java.math.BigDecimal
+import javax.inject.Inject
+
+@HiltViewModel
+class WooPosCashPaymentViewModel @Inject constructor(
+ private val repository: WooPosCashPaymentRepository,
+ private val priceFormat: WooPosFormatPrice,
+ private val resourceProvider: ResourceProvider,
+ savedState: SavedStateHandle,
+) : ViewModel() {
+ private val orderId = savedState.get(CASH_ROUTE_ORDER_ID_KEY)!!
+
+ private val _state = savedState.getStateFlow(
+ scope = viewModelScope,
+ initialValue = WooPosCashPaymentState.Initiating,
+ key = "woo_pos_cash_payment_state"
+ )
+
+ val state: StateFlow = _state
+
+ init {
+ viewModelScope.launch {
+ val order = repository.getOrderById(orderId)!!
+ _state.value = WooPosCashPaymentState.Collecting(
+ enteredAmount = "",
+ changeDue = priceFormat(BigDecimal.ZERO),
+ total = priceFormat(order.total),
+ button = WooPosCashPaymentState.Collecting.Button(
+ text = resourceProvider.getString(R.string.woopos_complete_cash_order_button),
+ status = WooPosCashPaymentState.Collecting.Button.Status.ENABLED
+ )
+ )
+ }
+ }
+
+ fun onUIEvent(event: WooPosCashPaymentUIEvent) {
+ when (event) {
+ is WooPosCashPaymentUIEvent.AmountChanged -> TODO()
+ WooPosCashPaymentUIEvent.CompleteOrderClicked -> handleOrderCompletion()
+ }
+ }
+
+ private fun handleOrderCompletion() {
+ viewModelScope.launch {
+ val stateBeforeCompleting = _state.value as WooPosCashPaymentState.Collecting
+ _state.value = stateBeforeCompleting.copy(
+ button = stateBeforeCompleting.button.copy(
+ status = WooPosCashPaymentState.Collecting.Button.Status.LOADING
+ )
+ )
+
+ val result = repository.completeOrder(orderId)
+ if (result.isSuccess) {
+ _state.value = WooPosCashPaymentState.Complete
+ } else {
+ val currentState = _state.value as? WooPosCashPaymentState.Collecting ?: return@launch
+ _state.value = currentState.copy(
+ button = currentState.button.copy(
+ status = WooPosCashPaymentState.Collecting.Button.Status.ENABLED
+ )
+ )
+ }
+ }
+ }
+}
diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/WooPosHomeChildToParentCommunication.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/WooPosHomeChildToParentCommunication.kt
index 9ca39cd5ec3..7fe48efcf47 100644
--- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/WooPosHomeChildToParentCommunication.kt
+++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/WooPosHomeChildToParentCommunication.kt
@@ -32,7 +32,7 @@ sealed class ChildToParentEvent {
data object FullScreen : ProductsStatusChanged()
data object WithCart : ProductsStatusChanged()
}
- data object NoInternet : ChildToParentEvent()
+ data class ToastMessageDisplayed(val message: String) : ChildToParentEvent()
}
interface WooPosChildrenToParentEventReceiver {
diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/WooPosHomeNavigation.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/WooPosHomeNavigation.kt
index 6b59231834f..7dd2cc6e583 100644
--- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/WooPosHomeNavigation.kt
+++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/WooPosHomeNavigation.kt
@@ -3,17 +3,28 @@ package com.woocommerce.android.ui.woopos.home
import androidx.compose.animation.core.FastOutSlowInEasing
import androidx.compose.animation.core.tween
import androidx.compose.animation.fadeIn
+import androidx.compose.animation.slideInHorizontally
+import androidx.compose.animation.slideOutHorizontally
import androidx.navigation.NavController
import androidx.navigation.NavGraphBuilder
import androidx.navigation.compose.composable
import com.woocommerce.android.ui.woopos.root.navigation.WooPosNavigationEvent
-private const val HOME_ROUTE = "home"
+const val HOME_ROUTE = "home"
+const val HOME_PAYMENT_COMPLETED_VIA_CASH_KEY = "home_payment_completed_via_cash_key"
fun NavController.navigateToHomeScreen() {
navigate(HOME_ROUTE)
}
+fun NavController.navigateToHomeScreenAfterSuccessfulCashPayment() {
+ previousBackStackEntry
+ ?.savedStateHandle
+ ?.set(HOME_PAYMENT_COMPLETED_VIA_CASH_KEY, true)
+
+ popBackStack()
+}
+
fun NavGraphBuilder.homeScreen(
onNavigationEvent: (WooPosNavigationEvent) -> Unit
) {
@@ -27,8 +38,27 @@ fun NavGraphBuilder.homeScreen(
easing = FastOutSlowInEasing
)
)
+ },
+ exitTransition = {
+ slideOutHorizontally(
+ targetOffsetX = { fullWidth -> -fullWidth },
+ )
+ },
+ popEnterTransition = {
+ slideInHorizontally(
+ initialOffsetX = { fullWidth -> -fullWidth },
+ )
+ },
+ ) { entry ->
+ val savedStateHandle = entry.savedStateHandle
+ val isPaymentCompletedViaCash = savedStateHandle.get(HOME_PAYMENT_COMPLETED_VIA_CASH_KEY) == true
+ if (isPaymentCompletedViaCash) {
+ savedStateHandle[HOME_PAYMENT_COMPLETED_VIA_CASH_KEY] = false
}
- ) {
- WooPosHomeScreen(onNavigationEvent)
+
+ WooPosHomeScreen(
+ isPaymentCompletedViaCash = isPaymentCompletedViaCash,
+ onNavigationEvent = onNavigationEvent,
+ )
}
}
diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/WooPosHomeScreen.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/WooPosHomeScreen.kt
index 11972135e4c..f209bdf1e68 100644
--- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/WooPosHomeScreen.kt
+++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/WooPosHomeScreen.kt
@@ -42,20 +42,30 @@ import com.woocommerce.android.ui.woopos.home.toolbar.WooPosFloatingToolbar
import com.woocommerce.android.ui.woopos.home.totals.WooPosTotalsScreen
import com.woocommerce.android.ui.woopos.home.totals.WooPosTotalsScreenPreview
import com.woocommerce.android.ui.woopos.root.navigation.WooPosNavigationEvent
+import kotlinx.coroutines.delay
import org.wordpress.android.util.ToastUtils
@Composable
fun WooPosHomeScreen(
+ isPaymentCompletedViaCash: Boolean,
onNavigationEvent: (WooPosNavigationEvent) -> Unit
) {
val viewModel: WooPosHomeViewModel = hiltViewModel()
val state = viewModel.state.collectAsState().value
val context = LocalContext.current
+
+ LaunchedEffect(Unit) {
+ if (isPaymentCompletedViaCash) {
+ delay(800)
+ viewModel.onUIEvent(WooPosHomeUIEvent.OnPaymentCompletedViaCash)
+ }
+ }
+
LaunchedEffect(viewModel.toastEvent) {
viewModel.toastEvent.collect { message ->
ToastUtils.showToast(
context,
- context.getString(message.message),
+ message,
ToastUtils.Duration.LONG
)
}
@@ -112,7 +122,8 @@ private fun WooPosHomeScreen(
productsWidthDp = productsWidthAnimatedDp,
cartWidthDp = cartWidthDp,
totalsWidthDp = totalsWidthAnimatedDp,
- onHomeUIEvent,
+ onHomeUIEvent = onHomeUIEvent,
+ onNavigationEvent = onNavigationEvent,
)
WooPosExitConfirmationDialog(
@@ -133,6 +144,7 @@ private fun WooPosHomeScreen(
cartWidthDp: Dp,
totalsWidthDp: Dp,
onHomeUIEvent: (WooPosHomeUIEvent) -> Unit,
+ onNavigationEvent: (WooPosNavigationEvent) -> Unit,
) {
Box(
modifier = Modifier
@@ -155,7 +167,8 @@ private fun WooPosHomeScreen(
)
WooPosHomeScreenTotals(
modifier = Modifier
- .width(totalsWidthDp)
+ .width(totalsWidthDp),
+ onNavigationEvent = onNavigationEvent,
)
}
@@ -201,11 +214,17 @@ private fun WooPosHomeScreenCart(modifier: Modifier) {
}
@Composable
-private fun WooPosHomeScreenTotals(modifier: Modifier) {
+private fun WooPosHomeScreenTotals(
+ modifier: Modifier,
+ onNavigationEvent: (WooPosNavigationEvent) -> Unit
+) {
if (isPreviewMode()) {
WooPosTotalsScreenPreview(modifier)
} else {
- WooPosTotalsScreen(modifier)
+ WooPosTotalsScreen(
+ modifier = modifier,
+ onNavigationEvent = onNavigationEvent
+ )
}
}
diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/WooPosHomeUIEvent.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/WooPosHomeUIEvent.kt
index 0c5fdbeeb7b..47647b51cee 100644
--- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/WooPosHomeUIEvent.kt
+++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/WooPosHomeUIEvent.kt
@@ -4,4 +4,5 @@ sealed class WooPosHomeUIEvent {
data object SystemBackClicked : WooPosHomeUIEvent()
data object ExitConfirmationDialogDismissed : WooPosHomeUIEvent()
data object DismissProductsInfoDialog : WooPosHomeUIEvent()
+ data object OnPaymentCompletedViaCash : WooPosHomeUIEvent()
}
diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/WooPosHomeViewModel.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/WooPosHomeViewModel.kt
index a6931e94369..f68e85ee473 100644
--- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/WooPosHomeViewModel.kt
+++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/WooPosHomeViewModel.kt
@@ -1,10 +1,11 @@
package com.woocommerce.android.ui.woopos.home
-import androidx.annotation.StringRes
import androidx.lifecycle.SavedStateHandle
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
-import com.woocommerce.android.R
+import com.woocommerce.android.ui.woopos.home.WooPosHomeState.ExitConfirmationDialog
+import com.woocommerce.android.ui.woopos.home.WooPosHomeState.ProductsInfoDialog
+import com.woocommerce.android.ui.woopos.home.WooPosHomeState.ScreenPositionState
import com.woocommerce.android.viewmodel.getStateFlow
import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.flow.MutableSharedFlow
@@ -23,19 +24,15 @@ class WooPosHomeViewModel @Inject constructor(
scope = viewModelScope,
key = "home_state",
initialValue = WooPosHomeState(
- screenPositionState = WooPosHomeState.ScreenPositionState.Cart.Visible,
- productsInfoDialog = WooPosHomeState.ProductsInfoDialog(isVisible = false),
- exitConfirmationDialog = WooPosHomeState.ExitConfirmationDialog(isVisible = false),
+ screenPositionState = ScreenPositionState.Cart.Visible,
+ productsInfoDialog = ProductsInfoDialog(isVisible = false),
+ exitConfirmationDialog = ExitConfirmationDialog(isVisible = false),
)
)
val state: StateFlow = _state
- private val _toastEvent = MutableSharedFlow()
- val toastEvent: SharedFlow = _toastEvent
-
- data class Toast(
- @StringRes val message: Int,
- )
+ private val _toastEvent = MutableSharedFlow()
+ val toastEvent: SharedFlow = _toastEvent
init {
listenBottomEvents()
@@ -45,23 +42,22 @@ class WooPosHomeViewModel @Inject constructor(
return when (event) {
WooPosHomeUIEvent.SystemBackClicked -> {
when (_state.value.screenPositionState) {
- WooPosHomeState.ScreenPositionState.Checkout.NotPaid -> {
+ ScreenPositionState.Checkout.NotPaid -> {
_state.value = _state.value.copy(
- screenPositionState = WooPosHomeState.ScreenPositionState.Cart.Visible
+ screenPositionState = ScreenPositionState.Cart.Visible
)
sendEventToChildren(ParentToChildrenEvent.BackFromCheckoutToCartClicked)
}
- WooPosHomeState.ScreenPositionState.Checkout.Paid -> {
+ ScreenPositionState.Checkout.Paid -> {
_state.value = _state.value.copy(
- screenPositionState = WooPosHomeState.ScreenPositionState.Cart.Visible
+ screenPositionState = ScreenPositionState.Cart.Visible
)
- sendEventToChildren(ParentToChildrenEvent.OrderSuccessfullyPaid)
}
- is WooPosHomeState.ScreenPositionState.Cart -> {
+ is ScreenPositionState.Cart -> {
_state.value = _state.value.copy(
- exitConfirmationDialog = WooPosHomeState.ExitConfirmationDialog(isVisible = true)
+ exitConfirmationDialog = ExitConfirmationDialog(isVisible = true)
)
}
}
@@ -69,15 +65,17 @@ class WooPosHomeViewModel @Inject constructor(
WooPosHomeUIEvent.ExitConfirmationDialogDismissed -> {
_state.value = _state.value.copy(
- exitConfirmationDialog = WooPosHomeState.ExitConfirmationDialog(isVisible = false)
+ exitConfirmationDialog = ExitConfirmationDialog(isVisible = false)
)
}
WooPosHomeUIEvent.DismissProductsInfoDialog -> {
_state.value = _state.value.copy(
- productsInfoDialog = WooPosHomeState.ProductsInfoDialog(isVisible = false)
+ productsInfoDialog = ProductsInfoDialog(isVisible = false)
)
}
+
+ WooPosHomeUIEvent.OnPaymentCompletedViaCash -> onOrderSuccessfullyPaid()
}
}
@@ -87,14 +85,14 @@ class WooPosHomeViewModel @Inject constructor(
when (event) {
is ChildToParentEvent.CheckoutClicked -> {
_state.value = _state.value.copy(
- screenPositionState = WooPosHomeState.ScreenPositionState.Checkout.NotPaid
+ screenPositionState = ScreenPositionState.Checkout.NotPaid
)
sendEventToChildren(ParentToChildrenEvent.CheckoutClicked(event.itemClickedDataList))
}
is ChildToParentEvent.BackFromCheckoutToCartClicked -> {
_state.value = _state.value.copy(
- screenPositionState = WooPosHomeState.ScreenPositionState.Cart.Visible
+ screenPositionState = ScreenPositionState.Cart.Visible
)
}
@@ -106,20 +104,15 @@ class WooPosHomeViewModel @Inject constructor(
is ChildToParentEvent.NewTransactionClicked -> {
_state.value = _state.value.copy(
- screenPositionState = WooPosHomeState.ScreenPositionState.Cart.Visible
+ screenPositionState = ScreenPositionState.Cart.Visible
)
- sendEventToChildren(ParentToChildrenEvent.OrderSuccessfullyPaid)
}
- is ChildToParentEvent.OrderSuccessfullyPaid -> {
- _state.value = _state.value.copy(
- screenPositionState = WooPosHomeState.ScreenPositionState.Checkout.Paid
- )
- }
+ is ChildToParentEvent.OrderSuccessfullyPaid -> onOrderSuccessfullyPaid()
ChildToParentEvent.ExitPosClicked -> {
_state.value = _state.value.copy(
- exitConfirmationDialog = WooPosHomeState.ExitConfirmationDialog(isVisible = true)
+ exitConfirmationDialog = ExitConfirmationDialog(isVisible = true)
)
}
@@ -127,13 +120,13 @@ class WooPosHomeViewModel @Inject constructor(
ChildToParentEvent.ProductsDialogInfoIconClicked -> {
_state.value = _state.value.copy(
- productsInfoDialog = WooPosHomeState.ProductsInfoDialog(isVisible = true)
+ productsInfoDialog = ProductsInfoDialog(isVisible = true)
)
}
- ChildToParentEvent.NoInternet -> {
+ is ChildToParentEvent.ToastMessageDisplayed -> {
viewModelScope.launch {
- _toastEvent.emit(Toast(R.string.woopos_no_internet_message))
+ _toastEvent.emit(event.message)
}
}
}
@@ -146,18 +139,18 @@ class WooPosHomeViewModel @Inject constructor(
val newScreenPositionState = when (event) {
ChildToParentEvent.ProductsStatusChanged.FullScreen -> {
when (screenPosition) {
- is WooPosHomeState.ScreenPositionState.Cart -> WooPosHomeState.ScreenPositionState.Cart.Hidden
- is WooPosHomeState.ScreenPositionState.Checkout -> screenPosition
+ is ScreenPositionState.Cart -> ScreenPositionState.Cart.Hidden
+ is ScreenPositionState.Checkout -> screenPosition
}
}
ChildToParentEvent.ProductsStatusChanged.WithCart -> {
when (screenPosition) {
- WooPosHomeState.ScreenPositionState.Cart.Hidden ->
- WooPosHomeState.ScreenPositionState.Cart.Visible
+ ScreenPositionState.Cart.Hidden ->
+ ScreenPositionState.Cart.Visible
- WooPosHomeState.ScreenPositionState.Cart.Visible,
- WooPosHomeState.ScreenPositionState.Checkout.NotPaid,
- WooPosHomeState.ScreenPositionState.Checkout.Paid -> screenPosition
+ ScreenPositionState.Cart.Visible,
+ ScreenPositionState.Checkout.NotPaid,
+ ScreenPositionState.Checkout.Paid -> screenPosition
}
}
}
@@ -169,4 +162,11 @@ class WooPosHomeViewModel @Inject constructor(
parentToChildrenEventSender.sendToChildren(event)
}
}
+
+ private fun onOrderSuccessfullyPaid() {
+ _state.value = _state.value.copy(
+ screenPositionState = ScreenPositionState.Checkout.Paid
+ )
+ sendEventToChildren(ParentToChildrenEvent.OrderSuccessfullyPaid)
+ }
}
diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/items/WooPosItemsList.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/items/WooPosItemsList.kt
index 4240fdfec42..ccef08f1995 100644
--- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/items/WooPosItemsList.kt
+++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/items/WooPosItemsList.kt
@@ -72,7 +72,7 @@ fun WooPosItemList(
when (product) {
is SimpleProduct -> {
ProductItem(
- modifier = Modifier.animateItemPlacement(),
+ modifier = Modifier.animateItem(),
item = product,
onItemClicked = onItemClicked
)
@@ -80,7 +80,7 @@ fun WooPosItemList(
is VariableProduct -> {
VariableProductItem(
- modifier = Modifier.animateItemPlacement(),
+ modifier = Modifier.animateItem(),
item = product,
onItemClicked = onItemClicked
)
@@ -88,7 +88,7 @@ fun WooPosItemList(
is Variation -> {
VariationItem(
- modifier = Modifier.animateItemPlacement(),
+ modifier = Modifier.animateItem(),
item = product,
onItemClicked = onItemClicked
)
diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/items/WooPosItemsViewModel.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/items/WooPosItemsViewModel.kt
index 91f5511daa8..43fe26eeb25 100644
--- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/items/WooPosItemsViewModel.kt
+++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/items/WooPosItemsViewModel.kt
@@ -183,7 +183,13 @@ class WooPosItemsViewModel @Inject constructor(
result.productsResult.isSuccess -> {
val products = result.productsResult.getOrThrow()
if (products.isNotEmpty()) {
- products.toContentState()
+ products.toContentState(
+ paginationState = if (loadMoreProductsJob?.isActive == true) {
+ PaginationState.Loading
+ } else {
+ PaginationState.None
+ }
+ )
} else {
WooPosItemsViewState.Empty()
}
@@ -205,7 +211,9 @@ class WooPosItemsViewModel @Inject constructor(
is WooPosItemsViewState.Empty -> state.copy(reloadingProductsWithPullToRefresh = true)
}
- private suspend fun List.toContentState() = WooPosItemsViewState.Content(
+ private suspend fun List.toContentState(
+ paginationState: PaginationState = PaginationState.None
+ ) = WooPosItemsViewState.Content(
items = map { product ->
if (product.isVariable()) {
VariableProduct(
@@ -225,7 +233,7 @@ class WooPosItemsViewModel @Inject constructor(
)
}
},
- paginationState = PaginationState.None,
+ paginationState = paginationState,
reloadingProductsWithPullToRefresh = false,
bannerState = WooPosItemsViewState.Content.BannerState(
isBannerHiddenByUser = isBannerHiddenByUser(),
diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/items/variations/VariationsLRUCache.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/items/variations/VariationsLRUCache.kt
index a13ffbf5878..2caac421aa6 100644
--- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/items/variations/VariationsLRUCache.kt
+++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/items/variations/VariationsLRUCache.kt
@@ -1,48 +1,23 @@
package com.woocommerce.android.ui.woopos.home.items.variations
+import android.util.LruCache
import kotlinx.coroutines.sync.Mutex
import kotlinx.coroutines.sync.withLock
-class VariationsLRUCache(private val maxSize: Int) {
-
- companion object {
- private const val LOAD_FACTOR = 0.75f
- }
- private val cache = object : LinkedHashMap(maxSize, LOAD_FACTOR, true) {
- override fun removeEldestEntry(eldest: Map.Entry): Boolean {
- return size > maxSize
- }
- }
+class VariationsLRUCache(maxSize: Int) {
+ private val cache = LruCache(maxSize)
private val mutex = Mutex()
suspend fun get(key: K): V? {
return mutex.withLock {
- cache[key]
+ cache.get(key)
}
}
suspend fun put(key: K, value: V) {
mutex.withLock {
- cache[key] = value
- }
- }
-
- suspend fun remove(key: K) {
- mutex.withLock {
- cache.remove(key)
- }
- }
-
- suspend fun clear() {
- mutex.withLock {
- cache.clear()
- }
- }
-
- suspend fun containsKey(key: K): Boolean {
- return mutex.withLock {
- cache.containsKey(key)
+ cache.put(key, value)
}
}
}
diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/items/variations/WooPosVariationsDataSource.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/items/variations/WooPosVariationsDataSource.kt
index b27e477c28e..8910f1edf88 100644
--- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/items/variations/WooPosVariationsDataSource.kt
+++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/items/variations/WooPosVariationsDataSource.kt
@@ -9,7 +9,6 @@ import kotlinx.coroutines.flow.first
import kotlinx.coroutines.flow.firstOrNull
import kotlinx.coroutines.flow.flow
import kotlinx.coroutines.flow.flowOn
-import kotlinx.coroutines.sync.withLock
import kotlinx.coroutines.withContext
import javax.inject.Inject
import javax.inject.Singleton
@@ -19,20 +18,21 @@ class WooPosVariationsDataSource @Inject constructor(
private val handler: VariationListHandler
) {
private val variationCache = VariationsLRUCache>(maxSize = 50)
- private val cacheMutex = kotlinx.coroutines.sync.Mutex()
private suspend fun getCachedVariations(productId: Long): List {
- return cacheMutex.withLock { variationCache.get(productId) ?: emptyList() }
+ return variationCache.get(productId) ?: emptyList()
}
private suspend fun updateCache(productId: Long, variations: List) {
- cacheMutex.withLock {
- variationCache.put(productId, variations)
- }
+ variationCache.put(productId, variations)
+ }
+
+ suspend fun resetState() {
+ handler.resetState()
}
- fun canLoadMore(): Boolean {
- return handler.canLoadMore()
+ fun canLoadMore(numOfVariations: Int): Boolean {
+ return handler.canLoadMore(numOfVariations)
}
fun fetchFirstPage(
@@ -76,10 +76,6 @@ class WooPosVariationsDataSource @Inject constructor(
)
}
}
-
- fun resetLoadMoreState() {
- handler.resetLoadMoreState()
- }
}
private fun Result.logFailure() {
diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/items/variations/WooPosVariationsScreen.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/items/variations/WooPosVariationsScreen.kt
index 29fb025699f..2c668fef7d5 100644
--- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/items/variations/WooPosVariationsScreen.kt
+++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/items/variations/WooPosVariationsScreen.kt
@@ -53,8 +53,9 @@ fun WooPosVariationsScreen(
variableProductData: VariableProductData,
onBackClicked: () -> Unit
) {
- val viewModel: WooPosVariationsViewModel = hiltViewModel()
-
+ val viewModel: WooPosVariationsViewModel = hiltViewModel(
+ key = variableProductData.id.toString()
+ )
LaunchedEffect(variableProductData.id) {
viewModel.init(variableProductData.id)
}
@@ -66,7 +67,12 @@ fun WooPosVariationsScreen(
viewModel.onUIEvent(WooPosVariationsUIEvents.OnItemClicked(productId, variationId))
},
onEndOfItemListReached = {
- viewModel.onUIEvent(WooPosVariationsUIEvents.EndOfItemsListReached(variableProductData.id))
+ viewModel.onUIEvent(
+ WooPosVariationsUIEvents.EndOfItemsListReached(
+ variableProductData.id,
+ variableProductData.numOfVariations
+ )
+ )
},
onPullToRefresh = {
viewModel.onUIEvent(WooPosVariationsUIEvents.PullToRefreshTriggered(variableProductData.id))
diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/items/variations/WooPosVariationsUIEvents.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/items/variations/WooPosVariationsUIEvents.kt
index 322ae5460f3..7d3eae2b25f 100644
--- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/items/variations/WooPosVariationsUIEvents.kt
+++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/items/variations/WooPosVariationsUIEvents.kt
@@ -1,7 +1,7 @@
package com.woocommerce.android.ui.woopos.home.items.variations
sealed class WooPosVariationsUIEvents {
- data class EndOfItemsListReached(val productId: Long) : WooPosVariationsUIEvents()
+ data class EndOfItemsListReached(val productId: Long, val numOfVariations: Int) : WooPosVariationsUIEvents()
data class PullToRefreshTriggered(val productId: Long) : WooPosVariationsUIEvents()
data class VariationsLoadingErrorRetryButtonClicked(val productId: Long) : WooPosVariationsUIEvents()
data class OnItemClicked(val productId: Long, val variationId: Long) : WooPosVariationsUIEvents()
diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/items/variations/WooPosVariationsViewModel.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/items/variations/WooPosVariationsViewModel.kt
index 149bb707a4b..3349356f1ba 100644
--- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/items/variations/WooPosVariationsViewModel.kt
+++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/items/variations/WooPosVariationsViewModel.kt
@@ -1,5 +1,6 @@
package com.woocommerce.android.ui.woopos.home.items.variations
+import androidx.annotation.VisibleForTesting
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import com.woocommerce.android.model.ProductVariation
@@ -37,31 +38,31 @@ class WooPosVariationsViewModel @Inject constructor(
initialValue = _viewState.value,
)
- private var flowJob: Job? = null
- private var loadMoreJob: Job? = null
+ private var fetchJob: Job? = null
- fun init(productId: Long, withPullToRefresh: Boolean = false, withCart: Boolean = true) {
- resetState()
+ @VisibleForTesting(otherwise = VisibleForTesting.PRIVATE)
+ internal var loadMoreJob: Job? = null
+
+ fun init(productId: Long) {
+ viewModelScope.launch {
+ variationsDataSource.resetState()
+ }
loadVariations(
productId = productId,
- withPullToRefresh = withPullToRefresh,
- withCart = withCart,
+ withPullToRefresh = false,
+ withCart = true,
forceRefresh = false
)
}
- private fun resetState() {
- flowJob?.cancel()
- variationsDataSource.resetLoadMoreState()
- }
-
private fun loadVariations(
productId: Long,
forceRefresh: Boolean,
withPullToRefresh: Boolean,
withCart: Boolean,
) {
- viewModelScope.launch {
+ fetchJob?.cancel()
+ fetchJob = viewModelScope.launch {
_viewState.value = if (withPullToRefresh) {
buildProductsReloadingState()
} else {
@@ -90,6 +91,11 @@ class WooPosVariationsViewModel @Inject constructor(
price = priceFormat(it.price),
imageUrl = it.image?.source
)
+ },
+ paginationState = if (loadMoreJob?.isActive == true) {
+ PaginationState.Loading
+ } else {
+ PaginationState.None
}
)
} else {
@@ -131,13 +137,13 @@ class WooPosVariationsViewModel @Inject constructor(
is WooPosVariationsViewState.Empty -> state.copy(reloadingProductsWithPullToRefresh = true)
}
- private fun loadMore(productId: Long) {
+ private fun loadMore(productId: Long, numOfVariations: Int) {
val currentState = _viewState.value
if (currentState !is WooPosVariationsViewState.Content) {
return
}
- if (!variationsDataSource.canLoadMore()) {
+ if (!variationsDataSource.canLoadMore(numOfVariations)) {
return
}
@@ -167,7 +173,7 @@ class WooPosVariationsViewModel @Inject constructor(
fun onUIEvent(event: WooPosVariationsUIEvents) {
when (event) {
is WooPosVariationsUIEvents.EndOfItemsListReached -> {
- onEndOfVariationsListReached(event.productId)
+ onEndOfVariationsListReached(event.productId, event.numOfVariations)
}
is WooPosVariationsUIEvents.PullToRefreshTriggered -> {
@@ -196,7 +202,7 @@ class WooPosVariationsViewModel @Inject constructor(
viewModelScope.launch { fromChildToParentEventSender.sendToParent(event) }
}
- private fun onEndOfVariationsListReached(productId: Long) {
- loadMore(productId)
+ private fun onEndOfVariationsListReached(productId: Long, numOfVariations: Int) {
+ loadMore(productId, numOfVariations)
}
}
diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/toolbar/WooPosToolbarViewModel.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/toolbar/WooPosToolbarViewModel.kt
index 5f83dd9bc22..64853db53ab 100644
--- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/toolbar/WooPosToolbarViewModel.kt
+++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/toolbar/WooPosToolbarViewModel.kt
@@ -16,6 +16,7 @@ import com.woocommerce.android.ui.woopos.home.toolbar.WooPosToolbarUIEvent.OnOut
import com.woocommerce.android.ui.woopos.home.toolbar.WooPosToolbarUIEvent.OnToolbarMenuClicked
import com.woocommerce.android.ui.woopos.support.WooPosGetSupportFacade
import com.woocommerce.android.ui.woopos.util.WooPosNetworkStatus
+import com.woocommerce.android.viewmodel.ResourceProvider
import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow
@@ -28,6 +29,7 @@ class WooPosToolbarViewModel @Inject constructor(
private val childrenToParentEventSender: WooPosChildrenToParentEventSender,
private val getSupportFacade: WooPosGetSupportFacade,
private val networkStatus: WooPosNetworkStatus,
+ private val resourceProvider: ResourceProvider,
) : ViewModel() {
private val _state = MutableStateFlow(
WooPosToolbarState(
@@ -97,7 +99,11 @@ class WooPosToolbarViewModel @Inject constructor(
WooPosToolbarState.WooPosCardReaderStatus.NotConnected -> {
if (!networkStatus.isConnected()) {
viewModelScope.launch {
- childrenToParentEventSender.sendToParent(ChildToParentEvent.NoInternet)
+ childrenToParentEventSender.sendToParent(
+ ChildToParentEvent.ToastMessageDisplayed(
+ message = resourceProvider.getString(R.string.woopos_no_internet_message)
+ )
+ )
}
} else {
cardReaderFacade.connectToReader()
diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/totals/WooPosTotalsScreen.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/totals/WooPosTotalsScreen.kt
index a6e52b037ea..a257c2aa522 100644
--- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/totals/WooPosTotalsScreen.kt
+++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/totals/WooPosTotalsScreen.kt
@@ -42,31 +42,47 @@ import com.woocommerce.android.R
import com.woocommerce.android.ui.woopos.common.composeui.WooPosPreview
import com.woocommerce.android.ui.woopos.common.composeui.WooPosTheme
import com.woocommerce.android.ui.woopos.common.composeui.component.Button
+import com.woocommerce.android.ui.woopos.common.composeui.component.WooPosButton
import com.woocommerce.android.ui.woopos.common.composeui.component.WooPosButtonLarge
import com.woocommerce.android.ui.woopos.common.composeui.component.WooPosErrorScreen
import com.woocommerce.android.ui.woopos.common.composeui.component.WooPosShimmerBox
import com.woocommerce.android.ui.woopos.common.composeui.toAdaptivePadding
+import com.woocommerce.android.ui.woopos.home.totals.WooPosTotalsViewState.Totals.CashPaymentAvailability
import com.woocommerce.android.ui.woopos.home.totals.payment.receipt.WooPosTotalsPaymentReceiptScreen
import com.woocommerce.android.ui.woopos.home.totals.payment.success.WooPosPaymentSuccessScreen
+import com.woocommerce.android.ui.woopos.root.navigation.WooPosNavigationEvent
import kotlinx.coroutines.delay
@Composable
-fun WooPosTotalsScreen(modifier: Modifier = Modifier) {
+fun WooPosTotalsScreen(
+ onNavigationEvent: (WooPosNavigationEvent) -> Unit,
+ modifier: Modifier = Modifier
+) {
val viewModel: WooPosTotalsViewModel = hiltViewModel()
val state = viewModel.state.collectAsState().value
- WooPosTotalsScreen(modifier, state, viewModel::onUIEvent)
+ WooPosTotalsScreen(
+ modifier = modifier,
+ state = state,
+ onUIEvent = viewModel::onUIEvent,
+ onNavigationEvent = onNavigationEvent
+ )
}
@Composable
private fun WooPosTotalsScreen(
modifier: Modifier = Modifier,
state: WooPosTotalsViewState,
- onUIEvent: (WooPosTotalsUIEvent) -> Unit
+ onUIEvent: (WooPosTotalsUIEvent) -> Unit,
+ onNavigationEvent: (WooPosNavigationEvent) -> Unit,
) {
Box(modifier = modifier) {
StateChangeAnimated(visible = state is WooPosTotalsViewState.Totals) {
if (state is WooPosTotalsViewState.Totals) {
- TotalsLoaded(state = state, onUIEvent = onUIEvent)
+ TotalsLoaded(
+ state = state,
+ onUIEvent = onUIEvent,
+ onNavigationEvent = onNavigationEvent,
+ )
}
}
@@ -124,7 +140,8 @@ private fun StateChangeAnimated(
@Composable
private fun TotalsLoaded(
state: WooPosTotalsViewState.Totals,
- onUIEvent: (WooPosTotalsUIEvent) -> Unit
+ onUIEvent: (WooPosTotalsUIEvent) -> Unit,
+ onNavigationEvent: (WooPosNavigationEvent) -> Unit,
) {
var isButtonVisible by remember { mutableStateOf(false) }
@@ -152,6 +169,23 @@ private fun TotalsLoaded(
TotalsGrid(state)
+ when (val cashPaymentAvailability = state.cashPaymentAvailability) {
+ is CashPaymentAvailability.Available -> {
+ WooPosButton(
+ text = stringResource(R.string.woopos_payment_take_cash_payment_label),
+ onClick = {
+ onNavigationEvent(
+ WooPosNavigationEvent.OpenCashPayment(
+ orderId = cashPaymentAvailability.orderId
+ )
+ )
+ },
+ )
+ }
+ CashPaymentAvailability.Unavailable -> {
+ }
+ }
+
Spacer(modifier = Modifier.weight(1f))
}
@@ -296,8 +330,28 @@ fun WooPosTotalsScreenPreview(modifier: Modifier = Modifier) {
orderSubtotalText = "$420.00",
orderTotalText = "$462.00",
orderTaxText = "$42.00",
+ cashPaymentAvailability = CashPaymentAvailability.Unavailable
),
- onUIEvent = {}
+ onUIEvent = {},
+ onNavigationEvent = {}
+ )
+ }
+}
+
+@Composable
+@WooPosPreview
+fun WooPosTotalsScreenPreviewWithCashPaymentAvailable() {
+ WooPosTheme {
+ WooPosTotalsScreen(
+ modifier = Modifier,
+ state = WooPosTotalsViewState.Totals(
+ orderSubtotalText = "$420.00",
+ orderTotalText = "$462.00",
+ orderTaxText = "$42.00",
+ cashPaymentAvailability = CashPaymentAvailability.Available(orderId = 1)
+ ),
+ onUIEvent = {},
+ onNavigationEvent = {}
)
}
}
@@ -308,7 +362,8 @@ fun WooPosTotalsScreenLoadingPreview() {
WooPosTheme {
WooPosTotalsScreen(
state = WooPosTotalsViewState.Loading,
- onUIEvent = {}
+ onUIEvent = {},
+ onNavigationEvent = {}
)
}
}
diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/totals/WooPosTotalsViewModel.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/totals/WooPosTotalsViewModel.kt
index 26d28bed983..d61e33cb931 100644
--- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/totals/WooPosTotalsViewModel.kt
+++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/totals/WooPosTotalsViewModel.kt
@@ -8,13 +8,17 @@ import com.woocommerce.android.R
import com.woocommerce.android.model.Order
import com.woocommerce.android.ui.woopos.cardreader.WooPosCardReaderFacade
import com.woocommerce.android.ui.woopos.cardreader.WooPosCardReaderPaymentStatus
+import com.woocommerce.android.ui.woopos.featureflags.WooPosIsCashPaymentsEnabled
+import com.woocommerce.android.ui.woopos.featureflags.WooPosIsReceiptsEnabled
import com.woocommerce.android.ui.woopos.home.ChildToParentEvent
import com.woocommerce.android.ui.woopos.home.ParentToChildrenEvent
import com.woocommerce.android.ui.woopos.home.WooPosChildrenToParentEventSender
import com.woocommerce.android.ui.woopos.home.WooPosParentToChildrenEventReceiver
import com.woocommerce.android.ui.woopos.home.items.WooPosItemsViewModel
import com.woocommerce.android.ui.woopos.home.items.navigation.WooPosItemsNavigator
-import com.woocommerce.android.ui.woopos.home.totals.payment.receipt.WooPosTotalsPaymentReceiptIsSendingAvailable
+import com.woocommerce.android.ui.woopos.home.totals.WooPosTotalsViewState.ReceiptSending
+import com.woocommerce.android.ui.woopos.home.totals.payment.receipt.WooPosTotalsPaymentReceiptIsSendingSupported
+import com.woocommerce.android.ui.woopos.home.totals.payment.receipt.WooPosTotalsPaymentReceiptIsSendingSupported.Companion.WC_VERSION_SUPPORTS_SENDING_RECEIPTS_BY_EMAIL
import com.woocommerce.android.ui.woopos.home.totals.payment.receipt.WooPosTotalsPaymentReceiptRepository
import com.woocommerce.android.ui.woopos.util.WooPosNetworkStatus
import com.woocommerce.android.ui.woopos.util.analytics.WooPosAnalyticsEvent
@@ -25,10 +29,14 @@ import com.woocommerce.android.util.WooLog.T
import com.woocommerce.android.viewmodel.ResourceProvider
import com.woocommerce.android.viewmodel.getStateFlow
import dagger.hilt.android.lifecycle.HiltViewModel
+import kotlinx.coroutines.Deferred
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.async
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.launch
import kotlinx.parcelize.Parcelize
+import java.math.BigDecimal
import javax.inject.Inject
@HiltViewModel
@@ -43,7 +51,9 @@ class WooPosTotalsViewModel @Inject constructor(
private val analyticsTracker: WooPosAnalyticsTracker,
private val networkStatus: WooPosNetworkStatus,
private val wooPosItemsNavigator: WooPosItemsNavigator,
- private val isReceiptSendingAvailable: WooPosTotalsPaymentReceiptIsSendingAvailable,
+ private val isReceiptSendingSupported: WooPosTotalsPaymentReceiptIsSendingSupported,
+ private val isReceiptsEnabled: WooPosIsReceiptsEnabled,
+ private val isCashPaymentsEnabled: WooPosIsCashPaymentsEnabled,
savedState: SavedStateHandle,
) : ViewModel() {
@@ -53,6 +63,10 @@ class WooPosTotalsViewModel @Inject constructor(
private val InitialState = WooPosTotalsViewState.Loading
}
+ private val isReceiptSendingSupportedValue: Deferred by lazy {
+ viewModelScope.async((Dispatchers.IO)) { isReceiptSendingSupported() }
+ }
+
private val uiState = savedState.getStateFlow(
scope = viewModelScope,
initialValue = InitialState,
@@ -70,6 +84,8 @@ class WooPosTotalsViewModel @Inject constructor(
init {
listenUpEvents()
listenToPaymentsStatus()
+
+ initIsReceiptSendingSupportedValue()
}
fun onUIEvent(event: WooPosTotalsUIEvent) {
@@ -87,10 +103,23 @@ class WooPosTotalsViewModel @Inject constructor(
}
WooPosTotalsUIEvent.OnSendReceiptClicked -> sendReceiptByEmail()
WooPosTotalsUIEvent.OnStartReceiptFlowClicked -> {
- uiState.value = WooPosTotalsViewState.ReceiptSending(email = "")
+ viewModelScope.launch {
+ if (isReceiptSendingSupportedValue.await()) {
+ uiState.value = ReceiptSending(email = "")
+ } else {
+ childrenToParentEventSender.sendToParent(
+ ChildToParentEvent.ToastMessageDisplayed(
+ message = resourceProvider.getString(
+ R.string.woopos_receipt_sending_not_supported,
+ WC_VERSION_SUPPORTS_SENDING_RECEIPTS_BY_EMAIL,
+ )
+ )
+ )
+ }
+ }
}
is WooPosTotalsUIEvent.OnEmailChanged -> {
- uiState.value = WooPosTotalsViewState.ReceiptSending(email = event.email)
+ uiState.value = ReceiptSending(email = event.email)
}
}
}
@@ -98,7 +127,11 @@ class WooPosTotalsViewModel @Inject constructor(
private fun collectPayment() {
if (!networkStatus.isConnected()) {
viewModelScope.launch {
- childrenToParentEventSender.sendToParent(ChildToParentEvent.NoInternet)
+ childrenToParentEventSender.sendToParent(
+ ChildToParentEvent.ToastMessageDisplayed(
+ message = resourceProvider.getString(R.string.woopos_no_internet_message)
+ )
+ )
}
} else {
val orderId = dataState.value.orderId
@@ -108,7 +141,7 @@ class WooPosTotalsViewModel @Inject constructor(
}
private fun sendReceiptByEmail() {
- val viewState = uiState.value as WooPosTotalsViewState.ReceiptSending
+ val viewState = uiState.value as ReceiptSending
val email = viewState.email
val orderId = dataState.value.orderId
check(orderId != EMPTY_ORDER_ID)
@@ -130,8 +163,9 @@ class WooPosTotalsViewModel @Inject constructor(
uiState.value = InitialState
}
- is ParentToChildrenEvent.ItemClickedInProductSelector,
- ParentToChildrenEvent.OrderSuccessfullyPaid -> Unit
+ ParentToChildrenEvent.OrderSuccessfullyPaid -> showSuccessfulPaymentState()
+
+ is ParentToChildrenEvent.ItemClickedInProductSelector -> Unit
}
}
}
@@ -142,19 +176,9 @@ class WooPosTotalsViewModel @Inject constructor(
cardReaderFacade.paymentStatus.collect { status ->
when (status) {
is WooPosCardReaderPaymentStatus.Success -> {
- val state = uiState.value
wooPosItemsNavigator.sendNavigationEvent(
WooPosItemsNavigator.WooPosItemsScreenNavigationEvent.NavigateBackToItemListScreen
)
- check(state is WooPosTotalsViewState.Totals)
- val orderTotalText = resourceProvider.getString(
- R.string.woopos_success_screen_total,
- state.orderTotalText
- )
- uiState.value = WooPosTotalsViewState.PaymentSuccess(
- orderTotalText = orderTotalText,
- isReceiptAvailable = isReceiptSendingAvailable()
- )
childrenToParentEventSender.sendToParent(ChildToParentEvent.OrderSuccessfullyPaid)
}
is WooPosCardReaderPaymentStatus.Failure,
@@ -171,7 +195,10 @@ class WooPosTotalsViewModel @Inject constructor(
totalsRepository.createOrderWithProducts(itemClickedDataList = itemClickedDataList)
.fold(
onSuccess = { order ->
- dataState.value = dataState.value.copy(orderId = order.id)
+ dataState.value = dataState.value.copy(
+ orderId = order.id,
+ orderTotal = order.total
+ )
uiState.value = buildWooPosTotalsViewState(order)
analyticsTracker.track(WooPosAnalyticsEvent.Event.OrderCreationSuccess)
},
@@ -192,6 +219,21 @@ class WooPosTotalsViewModel @Inject constructor(
}
}
+ private fun showSuccessfulPaymentState() {
+ viewModelScope.launch {
+ val state = uiState.value
+ check(state is WooPosTotalsViewState.Totals)
+ val orderTotalText = resourceProvider.getString(
+ R.string.woopos_success_screen_total,
+ state.orderTotalText
+ )
+ uiState.value = WooPosTotalsViewState.PaymentSuccess(
+ orderTotalText = orderTotalText,
+ isReceiptAvailable = isReceiptsEnabled()
+ )
+ }
+ }
+
private suspend fun buildWooPosTotalsViewState(order: Order): WooPosTotalsViewState.Totals {
val subtotalAmount = order.productsTotal
val taxAmount = order.totalTax
@@ -201,12 +243,24 @@ class WooPosTotalsViewModel @Inject constructor(
orderSubtotalText = priceFormat(subtotalAmount),
orderTaxText = priceFormat(taxAmount),
orderTotalText = priceFormat(totalAmount),
+ cashPaymentAvailability = if (isCashPaymentsEnabled()) {
+ WooPosTotalsViewState.Totals.CashPaymentAvailability.Available(order.id)
+ } else {
+ WooPosTotalsViewState.Totals.CashPaymentAvailability.Unavailable
+ }
)
}
+ private fun initIsReceiptSendingSupportedValue() {
+ viewModelScope.launch {
+ isReceiptSendingSupportedValue.await()
+ }
+ }
+
@Parcelize
private data class TotalsDataState(
val orderId: Long = EMPTY_ORDER_ID,
+ val orderTotal: BigDecimal? = null,
val itemClickedDataList: List = emptyList()
) : Parcelable
}
diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/totals/WooPosTotalsViewState.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/totals/WooPosTotalsViewState.kt
index c5b44f4b746..4facabe324b 100644
--- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/totals/WooPosTotalsViewState.kt
+++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/totals/WooPosTotalsViewState.kt
@@ -11,7 +11,14 @@ sealed class WooPosTotalsViewState : Parcelable {
val orderSubtotalText: String,
val orderTaxText: String,
val orderTotalText: String,
- ) : WooPosTotalsViewState()
+ val cashPaymentAvailability: CashPaymentAvailability,
+ ) : WooPosTotalsViewState() {
+ @Parcelize
+ sealed class CashPaymentAvailability : Parcelable {
+ data class Available(val orderId: Long) : CashPaymentAvailability()
+ object Unavailable : CashPaymentAvailability()
+ }
+ }
data class PaymentSuccess(
val orderTotalText: String,
diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/totals/payment/receipt/WooPosTotalsPaymentReceiptIsSendingAvailable.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/totals/payment/receipt/WooPosTotalsPaymentReceiptIsSendingSupported.kt
similarity index 66%
rename from WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/totals/payment/receipt/WooPosTotalsPaymentReceiptIsSendingAvailable.kt
rename to WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/totals/payment/receipt/WooPosTotalsPaymentReceiptIsSendingSupported.kt
index ac269e81514..fe0ceefe584 100644
--- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/totals/payment/receipt/WooPosTotalsPaymentReceiptIsSendingAvailable.kt
+++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/totals/payment/receipt/WooPosTotalsPaymentReceiptIsSendingSupported.kt
@@ -1,22 +1,15 @@
package com.woocommerce.android.ui.woopos.home.totals.payment.receipt
import com.woocommerce.android.extensions.semverCompareTo
-import com.woocommerce.android.ui.woopos.featureflags.WooPosIsReceiptsEnabled
import com.woocommerce.android.util.GetWooCorePluginCachedVersion
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
import javax.inject.Inject
-class WooPosTotalsPaymentReceiptIsSendingAvailable @Inject constructor(
- private val isReceiptsEnabled: WooPosIsReceiptsEnabled,
+class WooPosTotalsPaymentReceiptIsSendingSupported @Inject constructor(
private val getWooCoreVersion: GetWooCorePluginCachedVersion,
) {
- suspend operator fun invoke() =
- if (!isReceiptsEnabled()) {
- false
- } else {
- isWooCoreSupportsSendingReceiptsByEmail()
- }
+ suspend operator fun invoke() = isWooCoreSupportsSendingReceiptsByEmail()
private suspend fun isWooCoreSupportsSendingReceiptsByEmail() = withContext(Dispatchers.IO) {
val wooCoreVersion = getWooCoreVersion()
@@ -27,7 +20,7 @@ class WooPosTotalsPaymentReceiptIsSendingAvailable @Inject constructor(
}
}
- private companion object {
+ companion object {
const val WC_VERSION_SUPPORTS_SENDING_RECEIPTS_BY_EMAIL = "9.5.0"
}
}
diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/root/navigation/WooPosMainFlowGraph.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/root/navigation/WooPosMainFlowGraph.kt
index df5b0bc35bc..acd9533b364 100644
--- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/root/navigation/WooPosMainFlowGraph.kt
+++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/root/navigation/WooPosMainFlowGraph.kt
@@ -2,6 +2,7 @@ package com.woocommerce.android.ui.woopos.root.navigation
import androidx.navigation.NavGraphBuilder
import androidx.navigation.compose.navigation
+import com.woocommerce.android.ui.woopos.cashpayment.cashPaymentScreen
import com.woocommerce.android.ui.woopos.home.homeScreen
import com.woocommerce.android.ui.woopos.splash.SPLASH_ROUTE
import com.woocommerce.android.ui.woopos.splash.splashScreen
@@ -17,5 +18,6 @@ fun NavGraphBuilder.mainGraph(
) {
splashScreen(onNavigationEvent = onNavigationEvent)
homeScreen(onNavigationEvent = onNavigationEvent)
+ cashPaymentScreen(onNavigationEvent = onNavigationEvent)
}
}
diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/root/navigation/WooPosNavigationEvent.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/root/navigation/WooPosNavigationEvent.kt
index 7c57b8c6838..60e2c69b10d 100644
--- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/root/navigation/WooPosNavigationEvent.kt
+++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/root/navigation/WooPosNavigationEvent.kt
@@ -4,4 +4,7 @@ sealed class WooPosNavigationEvent {
data object ExitPosClicked : WooPosNavigationEvent()
data object BackFromSplashClicked : WooPosNavigationEvent()
data object OpenHomeFromSplash : WooPosNavigationEvent()
+ data class OpenCashPayment(val orderId: Long) : WooPosNavigationEvent()
+ data object BackFromCashPayment : WooPosNavigationEvent()
+ data object OpenHomeFromCashPaymentAfterSuccessfulPayment : WooPosNavigationEvent()
}
diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/root/navigation/WooPosNavigationEventHandler.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/root/navigation/WooPosNavigationEventHandler.kt
index 867b71b97f9..29f9e16562d 100644
--- a/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/root/navigation/WooPosNavigationEventHandler.kt
+++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/root/navigation/WooPosNavigationEventHandler.kt
@@ -2,7 +2,9 @@ package com.woocommerce.android.ui.woopos.root.navigation
import androidx.activity.ComponentActivity
import androidx.navigation.NavHostController
+import com.woocommerce.android.ui.woopos.cashpayment.navigateToCashPaymentScreen
import com.woocommerce.android.ui.woopos.home.navigateToHomeScreen
+import com.woocommerce.android.ui.woopos.home.navigateToHomeScreenAfterSuccessfulCashPayment
fun NavHostController.handleNavigationEvent(
event: WooPosNavigationEvent,
@@ -13,5 +15,9 @@ fun NavHostController.handleNavigationEvent(
is WooPosNavigationEvent.BackFromSplashClicked -> activity.finish()
is WooPosNavigationEvent.OpenHomeFromSplash -> navigateToHomeScreen()
+ is WooPosNavigationEvent.OpenCashPayment -> navigateToCashPaymentScreen(event.orderId)
+ is WooPosNavigationEvent.BackFromCashPayment -> popBackStack()
+ is WooPosNavigationEvent.OpenHomeFromCashPaymentAfterSuccessfulPayment ->
+ navigateToHomeScreenAfterSuccessfulCashPayment()
}
}
diff --git a/WooCommerce/src/main/kotlin/com/woocommerce/android/viewmodel/ScopedViewModel.kt b/WooCommerce/src/main/kotlin/com/woocommerce/android/viewmodel/ScopedViewModel.kt
index 66b459af7dc..3650e420abd 100644
--- a/WooCommerce/src/main/kotlin/com/woocommerce/android/viewmodel/ScopedViewModel.kt
+++ b/WooCommerce/src/main/kotlin/com/woocommerce/android/viewmodel/ScopedViewModel.kt
@@ -12,7 +12,6 @@ import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.SharingStarted
import kotlinx.coroutines.flow.stateIn
import kotlinx.coroutines.launch
-import java.io.Closeable
import kotlin.coroutines.CoroutineContext
/**
@@ -23,9 +22,7 @@ import kotlin.coroutines.CoroutineContext
*/
abstract class ScopedViewModel(
protected val savedState: SavedStateHandle,
- closeable: Closeable? = null,
-) : ViewModel(closeable), CoroutineScope {
-
+) : ViewModel(), CoroutineScope {
protected open val _event: MutableLiveData = MultiLiveEvent()
open val event: LiveData = _event
diff --git a/WooCommerce/src/main/res/layout/developer_options_list_item.xml b/WooCommerce/src/main/res/layout/developer_options_list_item.xml
deleted file mode 100644
index 7729cb6bee0..00000000000
--- a/WooCommerce/src/main/res/layout/developer_options_list_item.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-
-
-
-
-
-
-
diff --git a/WooCommerce/src/main/res/layout/developer_options_togglable_item.xml b/WooCommerce/src/main/res/layout/developer_options_togglable_item.xml
deleted file mode 100644
index 0da4a34f189..00000000000
--- a/WooCommerce/src/main/res/layout/developer_options_togglable_item.xml
+++ /dev/null
@@ -1,40 +0,0 @@
-
-
-
-
-
-
-
-
-
diff --git a/WooCommerce/src/main/res/layout/developer_options_update_reader_item.xml b/WooCommerce/src/main/res/layout/developer_options_update_reader_item.xml
deleted file mode 100644
index 830d45bb570..00000000000
--- a/WooCommerce/src/main/res/layout/developer_options_update_reader_item.xml
+++ /dev/null
@@ -1,45 +0,0 @@
-
-
-
-
-
-
-
-
-
-
diff --git a/WooCommerce/src/main/res/layout/fragment_coupon_list.xml b/WooCommerce/src/main/res/layout/fragment_coupon_list.xml
index 1144edfa4c3..0964e3861d4 100644
--- a/WooCommerce/src/main/res/layout/fragment_coupon_list.xml
+++ b/WooCommerce/src/main/res/layout/fragment_coupon_list.xml
@@ -1,39 +1,25 @@
-
-
+ app:layout_constraintTop_toTopOf="parent" />
+ app:layout_constraintRight_toRightOf="parent" />
diff --git a/WooCommerce/src/main/res/layout/fragment_developer_options.xml b/WooCommerce/src/main/res/layout/fragment_developer_options.xml
deleted file mode 100644
index 534bdc1b11c..00000000000
--- a/WooCommerce/src/main/res/layout/fragment_developer_options.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-
-
-
-
-
-
diff --git a/WooCommerce/src/main/res/navigation/nav_graph_settings.xml b/WooCommerce/src/main/res/navigation/nav_graph_settings.xml
index 61d8ba6fdb3..41056b472ce 100644
--- a/WooCommerce/src/main/res/navigation/nav_graph_settings.xml
+++ b/WooCommerce/src/main/res/navigation/nav_graph_settings.xml
@@ -168,7 +168,7 @@
app:destination="@id/WPComWebViewFragment" />
+ خطأ في تحميل الأشكال
+ \"فشل تحميل مزيد من العناصر. يرجى المحاولة مرة أخرى\".
+ رجوع
+ %1$d من الأشكال
+ الشكل %s، الشعر %s
+ المنتج المتغير %s، السعر %s
+ يتعذر أن يكون الوصف فارغًا
+ حثّ على المبادرة
+ يتعذر أن يكون الشعار فارغًا
+ تأكد من أن بريدك الإلكتروني صحيح وتحقق مجددًا من مجلد البريد المزعج.
+ لا يمكننا العثور على حساب ووردبريس.كوم متصلاً باسم المستخدم هذا. يمكنك إدخال بريد إلكتروني لإنشاء حساب جديد.
+ أدخل كود المرور أو أي معرِّف آخر فريد لهذا المنتج. قد يساعدك ذلك على إدراج هذا المنتج على القنوات الأخرى أو الأسواق.
+ GTIN، وUPC، وEAN، وISBN
+ آخر المدفوعات
+ بعد شراء ملصق، ضع علامة على هذا الطلب على أنه مكتمل وأخطر العميل بذلك.
+ إذا لم يكن لديك حساب، فإننا سنستخدم هذا البريد الإلكتروني لإنشاء واحد.
ظرف
صندوق
إضافة طرد
@@ -30,7 +46,6 @@ Language: ar
الأرخص
ملصق الشراء
ملصق الشراء · %1$s
- وضع علامة على هذا الطلب على أنه مكتمل وإخطار العميل
تكلفة الشحنة
تفاصيل الطلب
تفاصيل الشحنة
@@ -559,7 +574,6 @@ Language: ar
اللغة
الميزانية
تفاصيل
- التسوق الآن
تحرير الإعلان
معاينة
تعطيل المزامنة
@@ -585,7 +599,6 @@ Language: ar
جاهز للترويج
تمكين الملايين من مشاهدة منتجاتك
استخدام %1$s
- الوديعة الأخيرة
توسيع إجماليات طلبات الطي
تحصيل المدفوعات
ينبغي أن يكون الكود بتنسيق XXXX-XXXX-XXXX-XXXX
@@ -667,9 +680,9 @@ Language: ar
الوثائق والملفات الأخرى على الجهاز
✨ إنشاء ملحوظة \"تقديم الشكر إليك\"
فرض الضرائب
- يتم إيداع الأموال المتوافرة تلقائيًا في كل %s.
- يتم إيداع الأموال المتوافرة تلقائيًا في كل يوم.
- تصبح الأموال متوافرة بعد تعليقها لمدة %d من الأيام.
+ يتم دفع الأموال المتوفرة تلقائيًا في كل %s.
+ يتم دفع الأموال المتوفرة تلقائيًا في كل يوم.
+ تصبح الأموال متوفرة بعد تعليقها لمدة %d من الأيام.
تحديد شكل
اختيار الشكل
\" %1$s \" -> %2$s
@@ -708,19 +721,19 @@ Language: ar
الفترة
الفاصل الزمني للفوترة
تخفيض
- غير معروف
- فشل
- تم الإلغاء
- قيد النقل
- معلق
- مدفوع
- المقدَّر
- طي/توسيع ملخص الإيداع
- معرفة المزيد حول موعد الحصول على أموالك
- يتم إيداع الأموال المتوافرة تلقائيًا في كل شهر على %s.
- تصبح الأموال متوافرة بعد تعليقها لمدة %d من الأيام.
- الأموال المعلّقة
- الأموال المتوافرة
+ غير معروف
+ فشل
+ تم الإلغاء
+ قيد النقل
+ معلق
+ مدفوع
+ المقدَّر
+ طي/توسيع ملخص المدفوعات
+ معرفة المزيد حول موعد الحصول على أموالك
+ يتم دفع الأموال المتوفرة تلقائيًا في كل شهر على %s.
+ تصبح الأموال متوافرة بعد تعليقها لمدة %d من الأيام.
+ الأموال المعلّقة
+ الأموال المتوفرة
الضرائب
المنتجات
إجماليات المدفوعات
diff --git a/WooCommerce/src/main/res/values-de/strings.xml b/WooCommerce/src/main/res/values-de/strings.xml
index 4abe5086eab..e12c900e51d 100644
--- a/WooCommerce/src/main/res/values-de/strings.xml
+++ b/WooCommerce/src/main/res/values-de/strings.xml
@@ -1,11 +1,27 @@
+ Beim Laden der Varianten ist ein Fehler aufgetreten
+ „Es ist ein Fehler beim Laden weiterer Artikel aufgetreten. Bitte versuche es erneut.“
+ Zurück
+ %1$d Varianten
+ Variante: %s, Preis: %s
+ Variables Produkt: %s, Preis: %s
+ Beschreibung darf nicht leer sein
+ Call-to-Action
+ Untertitel darf nicht leer sein
+ Stelle sicher, dass deine E-Mail-Adresse korrekt ist, und überprüfe deinen Spam-Ordner.
+ Wir können kein WordPress.com-Konto finden, das mit diesem Benutzernamen verknüpft ist. Gib eine E-Mail-Adresse ein, um ein neues Konto zu erstellen.
+ Gib einen Barcode oder einen anderen eindeutigen Identifikator für dieses Produkt ein. So kannst du dieses Produkt auch über andere Kanäle oder Marktplätze anbieten.
+ GTIN, UPC, EAN, ISBN
+ LETZTE AUSZAHLUNG
+ Markiere diese Bestellung nach dem Kauf des Etiketts als abgeschlossen und benachrichtige den Kunden.
+ Wenn du noch kein Konto hast, benutzen wir diese E-Mail-Adresse, um ein neues zu erstellen.
Umschlag
Karton
Paket hinzufügen
@@ -37,7 +53,6 @@ Language: de
Paket auswählen, damit Versandtarife angezeigt werden
Paket auswählen
Versendest du Gefahrgut oder gefährliche Stoffe?
- Diese Bestellung als abgeschlossen markieren und den Kunden benachrichtigen
Artikelkarte einklappen/aufklappen
%1$s · %2$s
Nein.
@@ -559,7 +574,6 @@ Language: de
Sprache
Budget
Details
- Jetzt einkaufen
Vorschau
Werbung bearbeiten
Deaktiviert
@@ -585,7 +599,6 @@ Language: de
Bereit zum Bewerben
Präsentiere deine Produkte Millionen von Interessenten
Verwende %1$s
- LETZTE AUSZAHLUNG
Bestellsumme aufklappen/zuklappen
Zahlung empfangen
Der Code muss folgendes Format haben: XXXX-XXXX-XXXX-XXXX
@@ -667,9 +680,9 @@ Language: de
Dokumente und andere Dateien auf dem Gerät
✨ Dankeschön-Nachricht erstellen
Steuern erheben
- Verfügbares Guthaben wird automatisch an jedem %s ausgezahlt.
- Verfügbares Guthaben wird automatisch jeden Tag ausgezahlt.
- Guthaben, das seit %d Tagen aussteht, wird zur Verfügung gestellt.
+ Verfügbares Guthaben wird automatisch an jedem %s ausgezahlt.
+ Verfügbares Guthaben wird automatisch jeden Tag ausgezahlt.
+ Guthaben, das seit %d Tagen aussteht, wird zur Verfügung gestellt.
Variante auswählen
„%1$s“ -> %2$s
Bitte wähle eine Variante aus
@@ -708,21 +721,21 @@ Language: de
Periode
Zahlungsintervall
Angebot
- Unbekannt
- Fehlgeschlagen
- Abgebrochen
- Unterwegs
- Ausstehend
- Bezahlt
- Geschätzt
- Zusammenfassung der Auszahlungen aus-/einblenden
- Weitere Informationen zum Erhalt deiner Zahlungen
- Ausstehendes Guthaben
- Verfügbares Guthaben
+ Unbekannt
+ Fehlgeschlagen
+ Abgebrochen
+ Unterwegs
+ Ausstehend
+ Bezahlt
+ Geschätzt
+ Zusammenfassung der Auszahlungen aus-/einblenden
+ Weitere Informationen zum Erhalt deiner Zahlungen
Steuern
Produkte
- Verfügbares Guthaben wird automatisch am %s jedes Monats ausgezahlt.
- Guthaben, das seit %d Tag aussteht, wird zur Verfügung gestellt.
+ Ausstehendes Guthaben
+ Verfügbares Guthaben
+ Verfügbares Guthaben wird automatisch am %s jedes Monats ausgezahlt.
+ Guthaben, das seit %d Tag aussteht, wird zur Verfügung gestellt.
Zahlungsübersicht
E-Mail-Adresse oder Benutzername
Bestellung mit individuellem Betrag konnte nicht erstellt werden
diff --git a/WooCommerce/src/main/res/values-es/strings.xml b/WooCommerce/src/main/res/values-es/strings.xml
index 125f533d43c..acca62280c0 100644
--- a/WooCommerce/src/main/res/values-es/strings.xml
+++ b/WooCommerce/src/main/res/values-es/strings.xml
@@ -1,11 +1,27 @@
+ Error al cargar variaciones
+ \"No se han podido cargar más elementos. Inténtalo de nuevo\".
+ Volver
+ %1$d variaciones
+ Variación: %s; Precio: %s
+ Producto variable: %s; Precio: %s
+ La descripción no puede estar vacía.
+ Llamada a la acción
+ La descripción corta no puede estar vacía.
+ Comprueba que tu correo electrónico está bien escrito y vuelve a mirar en tu carpeta de spam.
+ No encontramos una cuenta de WordPress.com asociada a este nombre de usuario. Puedes introducir un correo electrónico para crear una cuenta.
+ Introduce un código de barras o cualquier otro identificador único de este producto. Podría resultarte útil poner este producto en otros canales o mercados.
+ GTIN, UPC, EAN o ISBN
+ ÚLTIMO PAGO
+ Después de comprar una etiqueta, marca este pedido como completado y notifícaselo al cliente.
+ Si no tienes una cuenta, usaremos este correo electrónico para crear una.
Envoltorio
Caja
Añadir paquete
@@ -30,7 +46,6 @@ Language: es
Más barata
Etiqueta de compra
Etiqueta de compra %1$s
- Marcar este pedido como completado y avisar al cliente
Coste de envío
Detalles del pedido
Detalles del envío
@@ -559,7 +574,6 @@ Language: es
Idioma
Presupuesto
Detalles
- Comprar ahora
Editar anuncio
Vista previa
Desactivado
@@ -585,7 +599,6 @@ Language: es
Lista para ser promocionada
Haz que millones de personas vean tus productos
Usa %1$s
- ÚLTIMO DEPÓSITO
Ampliar contraer total de pedidos
Recibir pago
El código debe tener el formato XXXX-XXXX-XXXX-XXXX
@@ -667,9 +680,9 @@ Language: es
Documentos y otros archivos en el dispositivo
✨Crear nota de agradecimiento
Cobrar impuestos
- Los fondos disponibles se depositan automáticamente, cada %s.
- Los fondos disponibles se depositan automáticamente, cada día.
- Los fondos estarán disponibles después de estar pendientes durante %d días.
+ Los fondos disponibles se pagan automáticamente cada %s.
+ Los fondos disponibles se pagan automáticamente cada día.
+ Los fondos estarán disponibles después de estar pendientes durante %d días.
Seleccionar una variación
Elegir variación
« %1$s » -> %2$s
@@ -708,19 +721,19 @@ Language: es
Periodo
Intervalo de facturación
Oferta
- Desconocido
- Fallido
- Cancelado
- En tránsito
- Pendiente
- De pago
- Estimado
- Contraer/ampliar resumen de depósitos
- Obtén más información acerca de cuándo recibirás tus fondos.
- Los fondos disponibles se depositan automáticamente cada mes en %s.
- Los fondos estarán disponibles después de estar pendientes durante %d día.
- Fondos pendientes
- Fondos disponibles
+ Desconocido
+ Fallido
+ Cancelado
+ En tránsito
+ Pendiente
+ De pago
+ Estimado
+ Contraer/ampliar el resumen de pagos
+ Obtén más información acerca de cuándo recibirás tus fondos.
+ Los fondos disponibles se pagan automáticamente el %s de cada mes.
+ Los fondos estarán disponibles después de estar pendientes durante %d día.
+ Fondos pendientes
+ Fondos disponibles
Impuestos
Productos
Cantidad total del pago
diff --git a/WooCommerce/src/main/res/values-fr/strings.xml b/WooCommerce/src/main/res/values-fr/strings.xml
index f01f9efa169..a0c7381ed9e 100644
--- a/WooCommerce/src/main/res/values-fr/strings.xml
+++ b/WooCommerce/src/main/res/values-fr/strings.xml
@@ -1,11 +1,27 @@
+ Erreur lors du chargement des variantes
+ « Échec du chargement d’éléments supplémentaires. Veuillez réessayer. »
+ Retour
+ %1$d variantes
+ Variante %s, prix %s
+ Produit variable %s, prix %s
+ La description ne peut pas être vide
+ Appel à l’action
+ La description ne peut pas être vide
+ Assurez-vous que votre adresse e-mail est correcte et vérifiez votre dossier de courrier indésirable.
+ Nous n’avons pas trouvé de compte WordPress.com relié à cet identifiant. Vous pouvez saisir une adresse e-mail pour créer un nouveau compte.
+ Saisissez un code-barres ou tout autre identifiant unique à ce produit. Cela peut vous aider à lister ce produit sur d’autres canaux ou places de marché.
+ GTIN, UPC, EAN, ISBN
+ DERNIER PAIEMENT
+ Après l’achat d’une étiquette, marquez cette commande comme terminée et informez-en le client.
+ Si vous n’avez pas de compte, nous utiliserons cette adresse e-mail pour en créer un.
Enveloppe
Boîte
Ajouter un colis
@@ -30,7 +46,6 @@ Language: fr
Le moins cher
Acheter une étiquette
Acheter une étiquette · %1$s
- Marquer cette commande comme terminée et informer le client
Frais d’expédition
Détails de la commande
Détails de l’expédition
@@ -559,7 +574,6 @@ Language: fr
Langue
Budget
Détails
- Acheter maintenant
Modifier la publicité
Aperçu
Désactivé
@@ -585,7 +599,6 @@ Language: fr
Prêt à promouvoir
Faire en sorte que vos produits soient vus par des millions de personnes
Utiliser %1$s
- DERNIER DÉPÔT
Développer / réduire les totaux de commande
Percevoir le paiement
Le code doit respecter le format XXXX-XXXX-XXXX-XXXX
@@ -667,9 +680,9 @@ Language: fr
Documents et autres fichiers sur l’appareil
✨ Créer un mot de remerciement
Facturer les taxes
- Les fonds disponibles sont versés automatiquement, chaque %s.
- Les fonds disponibles sont versés automatiquement, chaque jour.
- Les fonds sont disponibles après avoir passé %d jours en attente.
+ Les fonds disponibles sont versés automatiquement, chaque %s.
+ Les fonds disponibles sont versés automatiquement, chaque jour.
+ Les fonds sont disponibles après avoir passé %d jours en attente.
Sélectionner une variante
Sélectionner la variante
\" %1$s \" -> %2$s
@@ -708,19 +721,19 @@ Language: fr
Période
Intervalle de facturation
Promo
- Inconnu
- Échec
- Annulé
- En transit
- En attente
- Payé
- Estimé
- Réduire/développer le récapitulatif du dépôt
- En savoir plus sur le moment où vous recevrez vos fonds
- Les fonds disponibles sont versés automatiquement, tous les %s du mois.
- Les fonds sont disponibles après avoir passé %d jour en attente.
- Fonds en attente
- Fonds disponibles
+ Inconnu
+ Échec
+ Annulé
+ En transit
+ En attente
+ Payé
+ Estimé
+ Réduire / développer le récapitulatif du paiement
+ En savoir plus sur le moment où vous recevrez vos fonds
+ Les fonds disponibles sont versés automatiquement, tous les %s du mois.
+ Les fonds sont disponibles après avoir passé %d jour en attente.
+ Fonds en attente
+ Fonds disponibles
Taxes
Produits
Totaux des paiements
diff --git a/WooCommerce/src/main/res/values-he/strings.xml b/WooCommerce/src/main/res/values-he/strings.xml
index 957d48beb9c..ca5fe40b9a1 100644
--- a/WooCommerce/src/main/res/values-he/strings.xml
+++ b/WooCommerce/src/main/res/values-he/strings.xml
@@ -1,11 +1,27 @@
+ שגיאה בטעינת הסוגים
+ \"הטעינה של פריטים נוספים נכשלה. יש לנסות שוב.\"
+ חזרה
+ %1$d סוגים
+ סוג %s, מחיר %s
+ מוצר עם סוגים %s, מחיר %s
+ התיאור לא יכול להיות ריק
+ קריאות לפעולה
+ תיאור האתר לא יכול להיות ריק
+ יש לוודא שכתובת האימייל שלך נכונה ולבדוק שוב את התיבה של דואר הזבל.
+ לא הצלחנו לאתר חשבון WordPress.com שמקושר לשם המשתמש הזה. באפשרותך להזין אימייל כדי ליצור חשבון חדש.
+ יש להזין ברקוד או כל מזהה אחר ייחודי למוצר הזה. הנתון יעזור לך לרשום את המוצר הזה בערוצים או בשווקים אחרים.
+ GTIN, UPC, EAN, ISBN
+ תשלום אחרון
+ לאחר רכישת תווית, יש לסמן את ההזמנה כ\'הושלמה\' ולהודיע ללקוח.
+ אם אין לך חשבון, אנחנו נשתמש בכתובת האימייל הזאת כדי ליצור אחד.
מעטפה
קופסה
להוסיף חבילה
@@ -30,7 +46,6 @@ Language: he_IL
הזול ביותר
לרכוש תווית
לרכוש תווית %1$s
- לסמן את ההזמנה כ\'הושלמה\' ולהודיע ללקוח
עלות משלוח
פרטי הזמנה
פרטי המשלוח
@@ -559,7 +574,6 @@ Language: he_IL
שפה
תקציב
פרטים
- לרכישה כעת
לערוך את הפרסומת
תצוגה מקדימה
נָכֶה
@@ -585,7 +599,6 @@ Language: he_IL
מוכן לקידום
בדרך זו מיליונים יראו את המוצרים שלך
להשתמש ב-%1$s
- הפקדה אחרונה
להרחיב / לכווץ סכומי הזמנות
לגבות תשלום
הקוד אמור להיות בפורמט XXXX-XXXX-XXXX-XXXX
@@ -667,9 +680,9 @@ Language: he_IL
מסמכים וקבצים אחרים במכשיר
✨ליצור פתק תודות
לגבות מיסים
- כספים זמינים יופקדו באופן אוטומטי, מדי %s.
- כספים זמינים יופקדו באופן אוטומטי, מדי יום.
- כספים ייעשו זמינים לאחר תקופת המתנה בת %d ימים.
+ יתרות זמינות משולמות באופן אוטומטי בכל %s.
+ יתרות זמינות משולמות באופן אוטומטי בכל יום.
+ היתרות יהיו זמינות לאחר תקופת המתנה בת %d ימים.
נא לבחור וריאציה
לבחור סוג
\" %1$s \" -> %2$s
@@ -708,19 +721,19 @@ Language: he_IL
פרק זמן
תדירות החיוב
מבצע
- לא ידוע
- נכשל
- בוטל
- במעבר
- בהמתנה
- שולם
- משוער
- לכווץ/להרחיב סיכום פיקדון
- למידע נוסף על עיתוי הזמינות של הכספים שלך
- כספים זמינים יופקדו באופן אוטומטי, ביום ה-%s של כל חודש.
- כספים ייעשו זמינים לאחר תקופת המתנה בת יום %d.
- כספים בהמתנה לאישור
- כספים זמינים
+ לא ידוע
+ נכשל
+ בוטל
+ במעבר
+ בהמתנה
+ שולם
+ משוער
+ לכווץ/להרחיב את סיכום התשלום
+ למידע נוסף על המועד לקבלת היתרות שלך
+ יתרות זמינות משולמות באופן אוטומטי בכל חודש ביום ה-%s.
+ היתרות יהיו זמינות לאחר תקופת המתנה בת יום %d.
+ יתרות בהמתנה לאישור
+ יתרות זמינות
מיסים
מוצרים
סכומים כוללים לתשלום
diff --git a/WooCommerce/src/main/res/values-id/strings.xml b/WooCommerce/src/main/res/values-id/strings.xml
index dfa22854789..766b8c2f058 100644
--- a/WooCommerce/src/main/res/values-id/strings.xml
+++ b/WooCommerce/src/main/res/values-id/strings.xml
@@ -1,11 +1,27 @@
+ Error saat memuat variasi
+ \"Gagal memuat item lain. Harap coba lagi.\"
+ Kembali
+ %1$d variasi
+ Variasi %s, Harga %s
+ Produk Variabel %s, Harga %s
+ Deskripsi tidak boleh kosong
+ Call to action
+ Slogan tidak boleh kosong
+ Pastikan email Anda sudah benar dan periksa kembali folder spam Anda.
+ Kami tidak dapat menemukan akun WordPress.com yang terhubung dengan nama pengguna ini. Anda dapat memasukkan email untuk membuat akun baru.
+ Masukkan kode batang atau pengenal lainnya yang bersifat unik untuk produk ini. Pengenal semacam ini dapat membantu Anda mencantumkan produk ini di saluran atau marketplace lain.
+ GTIN, UPC, EAN, atau ISBN
+ PEMBAYARAN TERAKHIR
+ Setelah membeli label, tandai pesanan ini selesai dan kirim pemberitahuan ke pelanggan.
+ Jika Anda belum mempunyai akun, kami akan menggunakan email ini untuk membuat akun.
Amplop
Kotak
Tambah Paket
@@ -30,7 +46,6 @@ Language: id
Termurah
Beli Label
Beli Label · %1$s
- Tandai pesanan ini selesai dan kirim pemberitahuan ke pelanggan
Biaya pengiriman
Rincian pesanan
Rincian pengiriman
@@ -38,10 +53,10 @@ Language: id
Pilih paket untuk melihat tarif pengiriman
Pilih Paket
Apakah Anda mengirim barang berisiko atau bahan berbahaya?
- %1$s · %2$s
Ciutkan/perluas kartu item
- Tidak
+ %1$s · %2$s
Diurutkan berdasarkan 1%s
+ Tidak
Simpan pilihan saya untuk kampanye mendatang.
<b>Cocok untuk:</b> %s
Pilih tujuan %s
@@ -70,12 +85,12 @@ Language: id
Kunci tidak valid: hapus karakter \"_\" dari awal.
Kunci ini sudah digunakan untuk kolom kustom yang lain. \nSaat ini aplikasi tidak mendukung pembuatan kunci duplikat. Bila perlu, gunakan wp-admin untuk membuat duplikat kunci.
Tambahkan kolom khusus
+ Kolom Kustom telah dihapus
+ Gagal menyimpan perubahan, coba lagi
Perubahan tersimpan
Menyimpan perubahan
Tampaknya Anda tidak terhubung ke internet. Pastikan Wi-Fi Anda aktif. Jika Anda menggunakan data seluler, aktifkan di pengaturan perangkat Anda.
Pemindaian gagal. Coba lagi nanti
- Kolom Kustom telah dihapus
- Gagal menyimpan perubahan, coba lagi
Nilai
Kunci
Jenis produk lain, seperti variabel dan virtual, akan tersedia dalam pembaruan mendatang.
@@ -89,21 +104,21 @@ Language: id
Pengeluaran per hari
Berapa banyak dana yang ingin Anda belanjakan untuk kampanye, dan berapa lama durasinya?
%1$s ➔ %2$s
- Ingin meningkatkan penjualan Anda?
Perlihatkan produk Anda kepada jutaan orang dengan Blaze dan tingkatkan penjualan Anda
+ Ingin meningkatkan penjualan Anda?
Error saat memuat kolom khusus
Kolom Khusus
Latar belakang diredupkan. Ketuk untuk menutup dialog.
%1$s per minggu
Jalankan terus sampai saya nonaktifkan
+ Berjalan sejak %1$s
+ pengeluaran per minggu
%1$s per minggu, mulai dari %2$s
Per minggu
Tersisa
Total
Klik-tayang
Sepertinya perangkat Anda dalam mode Penghemat Baterai. \nKami tidak dapat memberikan informasi toko selama mode ini aktif.
- Berjalan sejak %1$s
- pengeluaran per minggu
Menu popup yang memuat sejumlah opsi. Geser untuk mengakses aneka item.
Buka menu bilah alat
Bilah alat dengan status pembaca kartu. Menu terbuka. Ketuk dua kali untuk berinteraksi.
@@ -135,28 +150,28 @@ Language: id
Pesanan baru
Oke
+ Buat pesanan di manajemen toko
+ Untuk memproses pembayaran atas produk non-sederhana, keluar dari POS, kemudian buat pesanan baru dari tab pesanan.
Mengapa produk saya tidak muncul?
Info
Tutup
- Menunjukkan produk sederhana saja
- Saat ini, hanya produk fisik sederhana yang kompatibel dengan POS. Jenis produk lain, seperti variabel dan virtual, akan tersedia dalam pembaruan mendatang.
- Untuk memproses pembayaran atas produk non-sederhana, keluar dari POS, kemudian buat pesanan baru dari tab pesanan.
Pelajari\u00A0selengkapnya
+ Saat ini, hanya produk fisik sederhana yang kompatibel dengan POS. Jenis produk lain, seperti variabel dan virtual, akan tersedia dalam pembaruan mendatang.
+ Menunjukkan produk sederhana saja
Alamat Situs
+ Google for WooCommerce
Tambahkan kampanye berbayar
Tingkatkan penjualan dan tarik lebih banyak pengunjung dengan Google Ads.
Kampanye Google
- Google for WooCommerce
Selesai
Kampanye baru sudah dibuat. Bersiaplah, penjualan Anda akan meroket!
Semua Siap!
Tidak dapat membuat pesanan
+ Coba lagi
Ikon indikasi error
Ingin mencoba sekali lagi?
Terjadi error saat memuat produk
POS saat ini hanya mendukung produk sederhana
POS saat ini hanya mendukung produk sederhana – \nbuat untuk memulai.
- Coba lagi
Produk yang didukung tidak ditemukan
Tidak ada produk
Dapatkan Dukungan
@@ -228,8 +243,8 @@ Language: id
Nama, Ringkasan, & Deskripsi
Anda dapat menyunting atau membuat ulang detail produk sebelum menyimpan.
Program
- Tidak ada program pada periode ini
Kampanye Google
+ Tidak ada program pada periode ini
Hubungkan sekarang
Keranjang
Buat Detail Produk
@@ -240,23 +255,23 @@ Language: id
Kami buatkan detail produk untuk Anda.
Terima Pembayaran dengan Kartu
Total
+ Pajak
Subtotal
Pembayaran berhasil
Pembayaran gagal. Coba lagi.
Ikon keranjang
Produk
- Google untuk WooCommerce
- Tidak Ada Aturan Jumlah
- Tingkatkan penjualan dan dorong lalu lintas dengan Google Ads
%d item
Hapus
- Pajak
+ Tingkatkan penjualan dan dorong lalu lintas dengan Google Ads
+ Google untuk WooCommerce
+ Tidak Ada Aturan Jumlah
Audiens
Batal
+ Keluar
Keluar dari POS
- Checkout
Hapus %s dari keranjang
- Keluar
+ Checkout
Status Pembaca Tidak Diketahui
Checkout
Pembaca Terhubung
@@ -297,13 +312,13 @@ Language: id
Uang tunai diterima
Kupon paling aktif
Terima pembayaran (%s)
- Status
- Ulasan terbaru
- Lihat semua pesanan
Lihat semua ulasan
Tidak ada ulasan yang memenuhi penyaring yang dipilih, silakan ganti penyaring
Tidak ada ulasan yang ditemukan
+ Status
+ Ulasan terbaru
Pesanan terbaru
+ Lihat semua pesanan
Buka menu tarik-turun penyaring
Hapus kategori induk
Terjadi error saat mengambil produk!
@@ -312,9 +327,9 @@ Language: id
Nama
Metode
Tambahkan Pengiriman
+ Terjadi error saat mengambil metode pengiriman. Silakan coba lagi
Metode
Nilai tidak valid
- Terjadi error saat mengambil metode pengiriman. Silakan coba lagi
Penyiapan toko
Sesuaikan
Lihat semua kampanye
@@ -324,8 +339,8 @@ Language: id
Sembunyikan %s
Selesai
Feedback
- Kami tidak dapat menampilkan \n Anda analitik toko
Pastikan Anda mengoperasikan WooCommerce versi terbaru di situs Anda dan telah mengaktifkan WooCommerce Analytics.
+ Kami tidak dapat menampilkan \n Anda analitik toko
Lihat semua tugas
Analitik sesi bergantung pada jumlah pengunjung unik yang tidak tersedia untuk rentang tanggal kustom
Data sesi tidak tersedia
@@ -338,11 +353,11 @@ Language: id
Batalkan
Keluar
Anda sepertinya belum menyetujui koneksi aplikasi. Anda yakin ingin keluar?
+ Pilih gambar dengan ukuran minimal 400x400 piksel
Gambar tidak valid
Nama pengguna atau kata sandi Anda sepertinya salah. Periksa kembali kredensial Anda dan coba lagi.
Jika data Anda masih belum dimuat, hubungi tim dukungan untuk mendapatkan bantuan.
Tidak ada masalah koneksi
- Pilih gambar dengan ukuran minimal 400x400 piksel
Kembali ke layar sebelumnya
Coba sambungkan lagi
Menyambungkan ke situs Anda
@@ -355,23 +370,23 @@ Language: id
Hubungi Dukungan
Lanjutkan
Jika ada masalah, silakan hubungi tim dukungan.
+ 3. Setelah koneksi selesai, Anda akan login ke toko Anda.
2. Jika diminta, setujui koneksi dengan mengetuk tombol konfirmasi
1. Pertama, login dengan kredensial situs Anda.
+ Ikuti langkah-langkah berikut untuk menghubungkan aplikasi Woo langsung ke toko Anda dengan kata sandi aplikasi.
Alasannya mungkin karena Anda menerapkan beberapa langkah keamanan ekstra di toko Anda.
Tidak dapat login ke toko Anda
+ Setelah memesan, detail pesanan akan tertampil di sini.
Belum Ada Detail Pesanan
Tambahkan Jumlah Kustom
Untuk menentukan jumlah pembayaran, tambahkan\njumlah kustom ke pesanan baru Anda.
- 3. Setelah koneksi selesai, Anda akan login ke toko Anda.
- Ikuti langkah-langkah berikut untuk menghubungkan aplikasi Woo langsung ke toko Anda dengan kata sandi aplikasi.
- Setelah memesan, detail pesanan akan tertampil di sini.
Kami mengintegrasikan penagihan dengan\npembuatan pesanan agar proses lebih mudah diakses\ndan efisien.
+ Tagih Pembayaran \ntelah dipindahkan
Paket
Paket terjual
Paket
Paket terjual
Kampanye Blaze
- Tagih Pembayaran \ntelah dipindahkan
Produk dengan performa tertinggi
Anda yakin ingin mengabaikan perubahan yang Anda buat pada produk ini?
Anda akan mengabaikan perubahan pada %s
@@ -396,6 +411,7 @@ Language: id
Saran
Ketik domain
Pilih domain
+ Lihat semua analitik toko
Tahunan
Bulanan
Mingguan
@@ -405,7 +421,6 @@ Language: id
Hubungi toko lain
Membuat toko baru?
Nama toko
- Lihat semua analitik toko
Harap tunggu…
Memperbarui status stok
Terjadi masalah. Coba lagi.
@@ -436,17 +451,17 @@ Language: id
Error saat memindahkan pesanan ke tempat sampah
Pesanan dipindahkan ke tempat sampah
Situs Anda tampaknya mengalami masalah.\n\nHubungi penyedia hosting Anda untuk mendapatkan bantuan lebih lanjut.
- Tampaknya Anda tidak terhubung ke internet.\n\nPastikan Wi-Fi Anda aktif. Jika Anda menggunakan data seluler, aktifkan di pengaturan perangkat Anda.
Koneksi Jetpack Anda tampaknya bermasalah.\n\nTenang, tim dukungan kami siap membantu. Hubungi kami. Kami siap membantu Anda.
Tampaknya kami tidak dapat menangani respons situs Anda.\n\nTenang, tim dukungan kami siap membantu. Hubungi kami. Kami siap membantu Anda.
Situs Anda tampaknya merespons terlalu lama.\n\nHubungi penyedia hosting Anda untuk mendapatkan bantuan lebih lanjut.
+ Tampaknya Anda tidak terhubung ke internet.\n\nPastikan Wi-Fi Anda aktif. Jika Anda menggunakan data seluler, aktifkan di pengaturan perangkat Anda.
Produk tidak dipilih
Baca Selengkapnya
Hubungi Dukungan
- Koneksi Internet
- Tambahkan statistik rentang tanggal kustom
Mengambil pesanan situs Anda
Menyambungkan ke server WordPress.com
+ Koneksi Internet
+ Tambahkan statistik rentang tanggal kustom
Lokasi tidak ditemukan.\nCoba lagi.
Kunjungan halaman sesi
Jenis perangkat
@@ -513,9 +528,9 @@ Language: id
Parameter URL
URL Tujuan
Masukkan secara manual
+ Gagal mencari.\nCoba lagi
Mulai ketik negara, provinsi, atau kota untuk melihat pilihan yang tersedia
Dengan mengeklik \"Kirim kampanye\", Anda menyetujui <a href=\'termsOfService\'><u>Ketentuan Layanan</u></a> dan <a href=\'advertisingPolicy\'><u>Kebijakan Iklan</u></a> serta menyepakati metode pembayaran untuk penagihan sesuai anggaran dan durasi yang dipilih. <a href=\'learnMore\'><u>Baca selengkapnya</u></a> tentang cara kerja anggaran dan pembayaran untuk Pos Dipromosikan.
- Gagal mencari.\nCoba lagi
Kirim kampanye
Pemuatan metode pembayaran gagal, coba lagi dengan klik di sini!
Tambahkan metode pembayaran
@@ -535,7 +550,9 @@ Language: id
Slogan
Ganti gambar
Terapkan
+ Tanggal mulai
%1$s hari
+ Tayangan menunjukkan frekuensi iklan ditampilkan kepada calon pembeli.\n\n\n Meskipun jumlah persisnya tidak dapat dijamin karena fluktuasi lalu lintas online dan perilaku pengguna, kami berupaya agar tayangan aktual iklan Anda sedekat mungkin dengan jumlah yang Anda targetkan.\n\n\n Jangan lupa, tayangan berhubungan dengan visibilitas, bukan tindakan yang dilakukan pembaca.
Selesai
Tayangan
Perbarui
@@ -546,8 +563,6 @@ Language: id
Tentukan anggaran
Semua
%1$s hari sejak %2$s
- Tayangan menunjukkan frekuensi iklan ditampilkan kepada calon pembeli.\n\n\n Meskipun jumlah persisnya tidak dapat dijamin karena fluktuasi lalu lintas online dan perilaku pengguna, kami berupaya agar tayangan aktual iklan Anda sedekat mungkin dengan jumlah yang Anda targetkan.\n\n\n Jangan lupa, tayangan berhubungan dengan visibilitas, bukan tindakan yang dilakukan pembaca.
- Tanggal mulai
Jangan Tampilkan Lagi
Ingatkan Saya Nanti
Boleh minta waktunya sebentar? Bantu kami memperbaiki fitur berbantuan AI dengan feedback cepat.
@@ -559,9 +574,8 @@ Language: id
Bahasa
Anggaran
Detail
- Belanja sekarang
- Pratinjau
Edit iklan
+ Pratinjau
Non-aktif
Pilihan produk
Pilih produk %s
@@ -572,12 +586,12 @@ Language: id
<b>Pilih produk:</b> Pilih produk yang ingin dipromosikan dengan Blaze.
Kelola Stok
Stok tidak dikelola
+ Ketahui cara kerja Blaze
Buat kampanye Anda
Jutaan situs dalam jaringan WordPress.com dan Tumblr jadi ruang iklan Anda.
Jangkau audiens yang besar
\"Berkat alat kami, pembeli yang tertarik dengan produk Anda bisa lebih mudah menemukannya.\"
Seluruh dunia dalam jangkauan
- Ketahui cara kerja Blaze
Pasang iklan dalam hitungan menit — tanpa perlu jadi ahli atau banyak biaya, dari $5 USD saja per hari.
Pasang praktis, hasil strategis
Menghadirkan proses penyiapan iklan yang cepat nan ringkas, alat kami membantu para penjual memaksimalkan pengunjung situsnya.
@@ -585,7 +599,6 @@ Language: id
Siap mempromosikan
Tampilkan produk ke jutaan pasang mata
Pakai %1$s
- DEPOSIT TERAKHIR
Buka tutup rincian total pesanan
Terima Pembayaran
Kode harus dalam format XXXX-XXXX-XXXX-XXXX
@@ -667,32 +680,32 @@ Language: id
Dokumen dan berkas lain di perangkat
✨Buat ucapan terima kasih
Kenakan Pajak
- Deposit dana yang tersedia dilakukan secara otomatis tiap %s.
- Deposit dana yang tersedia dilakukan secara otomatis tiap hari.
- Dana akan tersedia setelah tertunda selama %d hari.
+ Dana yang tersedia dibayar secara otomatis tiap %s.
+ Dana yang tersedia dibayar secara otomatis tiap hari.
+ Dana akan tersedia setelah tertunda selama %d hari.
Pilih variasi
+ Pilih variasi
\" %1$s \" -> %2$s
+ pilih satu variasi
%1$s item dipilih
%1$s item dipilih
+ Pilih %1$s
lebih dari %1$s item
lebih dari %1$s item
kurang dari %1$s item
antara %1$s dan %2$s item
%d item
%d item
- pilih satu variasi
- Pilih %1$s
- Pilih variasi
Ubah jumlah produk dari %1$.2f menjadi %2$.2f
Simpan konfigurasi
Konfigurasi
Produk %s
Konfigurasikan
+ Opsional: biaya pendaftaran akan langsung dikenakan walaupun produk termasuk percobaan gratis atau tanggal pembayaran tersinkron.
Langganan produk dengan variasi
Produk langganan variabel
Langganan produk unik yang memungkinkan pembayaran berulang
Produk langganan sederhana
- Opsional: biaya pendaftaran akan langsung dikenakan walaupun produk termasuk percobaan gratis atau tanggal pembayaran tersinkron.
Periode waktu tunggu opsional sebelum menagih pembayaran berulang pertama. Semua biaya pendaftaran akan tetap dikenakan di awal berlangganan. Periode percobaan tidak boleh melebihi: 90 hari, 52 minggu, 24 bulan, atau 5 tahun.
Percobaan langganan gratis
Tanggal kedaluwarsa langganan
@@ -708,21 +721,21 @@ Language: id
Periode
Rentang penagihan
Obral
- Tidak diketahui
- Gagal
- Dibatalkan
- Sedang transit
- Ditangguhkan
- Berbayar
- Estimasi
- Ciutkan/perluas ringkasan deposit
- Baca selengkapnya tentang kapan Anda akan menerima dana
- Dana yang tertunda
- Dana yang tersedia
+ Tidak diketahui
+ Gagal
+ Dibatalkan
+ Sedang transit
+ Ditangguhkan
+ Berbayar
+ Estimasi
+ Ciutkan/perluas ringkasan pembayaran
+ Baca selengkapnya tentang kapan Anda akan menerima dana
+ Dana yang tersedia dibayar secara otomatis tiap bulan pada %s.
+ Dana akan tersedia setelah tertunda selama %d hari.
+ Dana yang tertunda
+ Dana yang tersedia
Pajak
Produk
- Deposit dana yang tersedia dilakukan secara otomatis tiap bulan pada %s.
- Dana akan tersedia setelah tertunda selama %d hari.
Total pembayaran
Alamat email atau Nama Pengguna
Tidak dapat membuat pesanan berjumlah kustom
@@ -738,22 +751,22 @@ Language: id
Saya mengerti
Iklan telah dikirimkan untuk disetujui. Kami akan mengirimkan email konfirmasi untuk Anda setelah iklan disetujui dan ditayangkan.
Semua sudah siap!
+ Mulai kampanye Blaze sekarang
Lacak performa, mulai, dan hentikan kampanye Blaze Anda kapan saja.
Jangkau jutaan pengguna di situs WordPress dan Tumblr.
Ambil kendali hanya dengan beberapa dolar per hari. Harganya terjangkau.
- Mulai kampanye Blaze sekarang
Promosikan produk Anda hanya dalam hitungan menit.
- Pilih Sumber Media
- Tidak ada teks yang terdeteksi. Pilih foto kemasan lainnya atau masukkan detail produk secara manual.
Tingkatkan penjualan toko Anda dengan Blaze
Terjadi error ketika menyegarkan daftar kampanye. Silakan coba lagi nanti.
+ Pilih Sumber Media
+ Tidak ada teks yang terdeteksi. Pilih foto kemasan lainnya atau masukkan detail produk secara manual.
Tambahkan produk
Pindai barcode
Ciutkan/perluas kartu produk
Kurangi kuantitas produk
- Harga setelah diskon
Tingkatkan kuantitas produk
Tambahkan jumlah kustom
+ Harga setelah diskon
Pesanan sebelumnya
Pesanan berikutnya
Detail kampanye
@@ -778,12 +791,12 @@ Language: id
5. Setelah tanda centang “Selesai” terlihat, toko Anda akan memproses pembayaran dan transaksi akan selesai.
3. Tunjukkan iPhone Anda kepada pelanggan.
2. Ketuk “Terima Pembayaran” dan pilih “Ketuk untuk Bayar”.
+ 1. Buat pesanan
Ini cara kerjanya
Baca selengkapnya tentang pembaca kartu
- Di %1$s, beberapa kartu mensyaratkan PIN untuk transaksi nirsentuh di atas %2$s.
Untuk menerima pembayaran di atas batas ini, pertimbangkan pembelian pembaca kartu yang menerima entri PIN.
Kami tidak mendukung entri PIN dengan fitur Ketuk untuk Bayar di Android.
- 1. Buat pesanan
+ Di %1$s, beberapa kartu mensyaratkan PIN untuk transaksi nirsentuh di atas %2$s.
Informasi penting
Dengan Ketuk untuk Bayar, Anda dapat menerima semua jenis pembayaran nirsentuh – dari kartu debit dan kredit fisik hingga dompet digital lainnya – tanpa perlu membeli pembaca kartu fisik.
Apa Itu Ketuk untuk Bayar?
@@ -827,18 +840,18 @@ Language: id
Tambahkan tarif ini ke semua pesanan yang dibuat
Sunting Tarif Pajak
Sunting Tarif Pajak di Admin
+ Tambahkan tarif pajak di admin. Hanya tarif pajak dengan informasi lokasi yang akan ditunjukkan di sini.
Kami tidak dapat menemukan tarif pajak
Jelajahi penyedia pembayaran lainnya dan \npilih penyedia pembayaran.
Metode Pembayaran
- Tambahkan tarif pajak di admin. Hanya tarif pajak dengan informasi lokasi yang akan ditunjukkan di sini.
Gambar dan video di perangkat
Selesaikan sekarang
Selesaikan penyiapan
Atur Tarif Pajak
Aktifkan
Atur Tarif Pajak Baru
- Siapkan
WooPayments
+ Siapkan
Edit tarif pajak di admin
Langkah ini akan mengganti alamat pelanggan menjadi lokasi tarif pajak yang Anda pilih.
Tombol untuk membuka dialog info tarif pajak
@@ -886,8 +899,8 @@ Language: id
Total pesanan
Persentase Terhitung
Jumlah Terhitung
- Menyesuaikan nama toko Anda juga dapat membantu optimisasi mesin pencari toko Anda.
Nama toko
+ Menyesuaikan nama toko Anda juga dapat membantu optimisasi mesin pencari toko Anda.
Beri nama untuk toko Anda
Aktifkan NFC
Paket Pengadaan Kuantitas Kecil (wajib ditandai)
@@ -956,15 +969,15 @@ Language: id
Cari pelanggan berdasarkan
Alasan lain (sebutkan)
Saya adalah bagian dari sebuah tim, dan keputusan harus dibuat secara kolektif.
+ Harga layanan merupakan faktor penting dalam keputusan ini.
Saya sedang mengevaluasi dan membandingkan layanan Anda dengan penyedia layanan lainnya di pasar.
Saya masih menjelajahi dan menilai berbagai fitur dan manfaat aplikasi.
Bantu kami memahami keputusan berlangganan Anda. Feedback dari Anda sangat berharga.
- Harga layanan merupakan faktor penting dalam keputusan ini.
Tidak ada alamat email
Tidak ada nama
+ Cari pelanggan yang sudah ada atau
Pembaruan terakhir %s (Diperbarui setiap 30 menit)
Pembaruan terakhir %s
- Cari pelanggan yang sudah ada atau
<a href=\'\'>Pelajari selengkapnya</a> tentang menerima pembayaran dengan Tap To Tap di Android
Terima Pembayaran
Anda tidak dapat menambahkan produk tanpa menentukan harga
@@ -975,10 +988,10 @@ Language: id
Izinkan
Anda telah menolak izin Kamera secara permanen. Izin diperlukan untuk memindai barcode. Harap izinkan di pengaturan aplikasi
Izin kamera diperlukan untuk memindai barcode
+ Izinkan Akses Kamera
Terjadi kesalahan saat validasi kode kupon Anda. Coba lagi
Kami tidak dapat menemukan kupon dengan kode tersebut. Coba lagi
Jumlah (%1$s)
- Izinkan Akses Kamera
Diskon %1$s
- %1$s
Total Diskon
@@ -1005,13 +1018,15 @@ Language: id
Ketuk untuk Bayar tidak tersedia
Lihat Persyaratan
Pemecahan Masalah
- Data Anda tidak dapat dimuat.
Hal ini mungkin karena adanya konflik dengan plugin. Coba lagi nanti atau hubungi kami dan dengan senang hati kami akan membantu Anda!
+ Data Anda tidak dapat dimuat.
Saya mengerti
Harap perhatikan bahwa deskripsi produk ini dibuat dengan alat berbasis teknologi AI. Harap periksa dan edit isinya agar sesuai dengan citra dan pesan yang ingin Anda sampaikan.
+ Mantap!
Apakah deskripsi\nyang dibuat bermanfaat?
Buat Ulang
Soroti fitur unik dan audiens produk Anda dengan kata kunci untuk menghasilkan deskripsi yang pas dan khas.
+ Contoh: Dalam Pot, Kaktus, Tanaman, Dekoratif, Mudah Dirawat
Masukkan nama produk Anda
Tulis deskripsi
Izin kamera diperlukan untuk memindai barcode.
@@ -1022,8 +1037,6 @@ Language: id
Kupon diterapkan
Pengaturan selengkapnya
Mungkin nanti
- Mantap!
- Contoh: Dalam Pot, Kaktus, Tanaman, Dekoratif, Mudah Dirawat
Tulis lagi
Meski diperlukan, kode PIN belum dapat digunakan pada Ketuk untuk Bayar. Coba gunakan pembaca kartu eksternal
Beli pembaca kartu
@@ -1031,12 +1044,12 @@ Language: id
Tidak dapat membuat pesan berbagi. Coba lagi!
Baca selengkapnya tentang fitur AI
Tambah pesan opsional
+ Menulis…
Tulis dengan AI
Promosikan produk dengan Blaze
Blaze
Pembuat konten AI tersedia
Promosikan dengan Blaze
- Menulis…
Bagikan produk
Selamat! Anda selangkah lebih dekat untuk mewujudkan toko baru.
Produk pertama dibuat 🎉
@@ -1044,6 +1057,7 @@ Language: id
Sistem menghentikan aplikasi Woo sewaktu berjalan di latar belakang. Anda dapat mencoba untuk kembali menggunakannya.
Kartu dihapus terlalu dini
Produk variasi
+ Kebijakan cookie kami menjelaskan bagaimana kami dan pihak lain menggunakan cookie serta bagaimana Anda dapat mengelolanya.
Kebijakan Cookie
Informasi Anda membantu kami meningkatkan dan memasarkan produk kami serta mempersonalisasi pengalaman Anda di WooCommerce.
Kebijakan Privasi
@@ -1054,7 +1068,6 @@ Language: id
Analitik
Kelola privasi
Privasi Anda selalu kami utamakan. Kami menggunakan, menyimpan, dan memproses data pribadi Anda untuk mengoptimalkan aplikasi kami (dan pengalaman Anda) dengan beragam cara. Sebagian penggunaan data Anda sangat kami butuhkan agar aplikasi berjalan optimal, dan sisanya dapat Anda sesuaikan dari Pengaturan.
- Kebijakan cookie kami menjelaskan bagaimana kami dan pihak lain menggunakan cookie serta bagaimana Anda dapat mengelolanya.
Untuk membantu kami meningkatkan performa aplikasi dan memperbaiki bug, aktifkan laporan otomatis untuk masalah crash.
Laporkan Masalah Crash
Laporan
@@ -1063,6 +1076,7 @@ Language: id
Privasi
Pelajari selengkapnya tentang data yang kami kumpulkan seputar toko Anda dan pilihan Anda dalam mengelola pembagian data.
Pelacakan Penggunaan
+ Pilihan privasi lainnya tersedia untuk pengguna woocommerce.com. Lihat di sini untuk membaca selengkapnya.
Pilihan Web
Pilihan privasi lainnya
Terjadi error saat memperbarui pengaturan privasi Anda
@@ -1075,41 +1089,40 @@ Language: id
Anda tidak dapat menambahkan produk bervariasi secara langsung. Pilih sebuah variasi secara spesifik.
Pemindaian gagal. Coba lagi nanti
Produk dengan SKU %s tidak ditemukan. Tidak dapat menambahkan ke pesanan
- Pilihan privasi lainnya tersedia untuk pengguna woocommerce.com. Lihat di sini untuk membaca selengkapnya.
Pemindaian gagal. Coba lagi nanti
Pindai Barcode
Sekarang, pengiriman ke negara yang memberlakukan aturan bea cukai Uni Eropa (UE) mewajibkan Anda menguraikan setiap item. Contohnya, jika Anda mengirim pakaian, Anda harus menerangkan jenis pakaiannya (seperti, baju pria, rompi wanita, jaket pria) dalam deskripsinya untuk dapat diterima. Jika tidak, pengiriman akan tertunda atau tertahan di bea cukai.
Hubungi Dukungan
- Terjadi error saat mencoba menutup akun.
- Menutup akun…
Akun ini tidak dapat ditutup jika memiliki toko aktif.
+ Terjadi error saat mencoba menutup akun.
Tidak dapat menutup akun
+ Menutup akun…
Tutup Akun Permanen
Untuk mengonfirmasi, silakan masukkan lagi nama pengguna Anda sebelum menutup.
Konfirmasi Penutupan Akun
Tutup Akun
- -%1$s
Pindai kode QR dan ikuti petunjuk
Pindai untuk Membayar
Hapus kupon dari pesanan
Kupon (%1$s)
+ -%1$s
Tambah kupon
Stok tidak cukup
Anda harus memberikan deskripsi yang spesifik dan jelas untuk tiap item.
Tambahkan produk-produk melalui pemindai
Tutup
Pelajari Selengkapnya
+ Ketika mengirimkan barang ke negara yang menerapkan aturan bea cukai Uni Eropa (UE), Anda harus memberikan deskripsi yang jelas dan spesifik tentang setiap item. Jika tidak, pengiriman akan tertunda atau tertahan di bea cukai.
Terus dapatkan pembaruan dan tingkatkan keamanan toko. Jelajahi Jetpack sekarang.
Dapatkan pemberitahuan pesanan dan aneka fitur lainnya
- Ketika mengirimkan barang ke negara yang menerapkan aturan bea cukai Uni Eropa (UE), Anda harus memberikan deskripsi yang jelas dan spesifik tentang setiap item. Jika tidak, pengiriman akan tertunda atau tertahan di bea cukai.
- Sembunyikan daftar penyiapan toko
- Sembunyikan daftar penyiapan toko
- Lihat Pesanan
- Pengembalian dana gagal. Coba pengembalian dana secara manual
Tampilkan atau sembunyikan daftar penyiapan toko
Daftar Penyiapan Toko
Anda dapat memulihkannya jika dibutuhkan dari Menu > Pengaturan > Toko
+ Sembunyikan daftar penyiapan toko
+ Sembunyikan daftar penyiapan toko
+ Lihat Pesanan
Uji coba pembayaran menggunakan Ketuk untuk Bayar berhasil dikembalikan
+ Pengembalian dana gagal. Coba pengembalian dana secara manual
Mengembalikan dana uji coba pembayaran…
Dengan melanjutkan, Anda menyetujui <a href=\'termsOfService\'><u>Ketentuan Layanan kami.</u></a>
Pertama-tama, mari buat akun Anda.
@@ -1127,9 +1140,9 @@ Language: id
Pemberitahuan
Produk gabungan
Pustaka Media Perangkat
- Izinkan
Uji pengembalian dana otomatis pembayaran Ketuk untuk Bayar
Uji pembayaran Ketuk untuk Bayar
+ Izinkan
Perbarui preferensi Anda
Pengaturan
Dapatkan ulasan untuk toko Anda
@@ -1159,8 +1172,10 @@ Language: id
Pelajari lebih lanjut tentang peran dan izin
Sepertinya peran pengguna Anda tidak mengizinkan Anda menginstal Jetpack. \nHubungi administrator Anda untuk mendapatkan bantuan.
Coba Ketuk untuk Bayar
+ Percobaan gratis
Biaya pendaftaran
Kedaluwarsa setelah
+ Harga langganan
tahun
bulan
minggu
@@ -1175,8 +1190,6 @@ Language: id
Dibatalkan
Ditangguhkan
Aktif
- Percobaan gratis
- Harga langganan
Anda dapat menyunting langganan produk di dasbor web.
Tidak ada periode percobaan
Tidak ada biaya pendaftaran
@@ -1187,22 +1200,22 @@ Language: id
Langganan #%1$d
Langganan
OK
- Langganan
- Langganan
Woo selalu menyertai mulai dari rintisan hingga jutaan penjualan Anda. Inilah alasan kami dipercaya para penjual untuk memperkuat 3,4 juta toko online mereka.
+ Langganan
Kode OTP salah. Periksa kembali informasi Anda dan coba lagi.
Permintaan SMS gagal. Harap coba lagi.
SMS diajukan, harap cek pesan Anda untuk melihat kodenya.
+ Langganan
Pembaca kartu menerima pembayaran dengan chip serta secara mengetuk dan menggesek menggunakan kartu debit atau kartu kredit.
Terima pembayaran nirsentuh dengan aman langsung dari ponsel Anda.
- Tidak dapat login karena pembuatan kata sandi aplikasi tidak disetujui.
- Mengambil situs…
Gunakan ponsel Anda untuk menerima pembayaran\nkartu. Coba sekarang.
Bagikan Feedback
- Memuat…
+ Tidak dapat login karena pembuatan kata sandi aplikasi tidak disetujui.
+ Mengambil situs…
+ Terjadi error saat mengambil situs web Anda.
Coba lagi menggunakan halaman WP Admin
Login
- Terjadi error saat mengambil situs web Anda.
+ Memuat…
%s berakhir
Langganan Anda berakhir dan Anda dapat mengakses semua fitur secara terbatas.
%1$d hari
@@ -1215,11 +1228,19 @@ Language: id
objek
barang
Error saat mengambil detail paket
+ Sekarang Anda menjadi pelanggan %1$s! Anda memiliki akses ke semua fitur kami hingga %2$s.
+ Masa percobaan gratis Anda telah berakhir, menyisakan akses fitur secara terbatas. Berlangganan %1$s sekarang.
+ Masa percobaan gratis Anda adalah %1$d hari. Percobaan gratis Anda akan berakhir dalam %2$s. Upgrade untuk membuka fitur-fitur baru dan membuat toko Anda tetap berjalan.
Status langganan
Pemecahan Masalah
Saat ini: %s
Laporkan masalah langganan
Upgrade Sekarang
+ %1$s tersisa dalam periode percobaan Anda.
+ Masa percobaan berakhir
+ Masa percobaan Anda telah berakhir.
+ Waduh, terjadi error tak terduga.
+ Error tak terduga
Kami mendapati bahwa toko telah diluncurkan.
Tidak dapat meluncurkan toko Anda
Tidak dapat membagikan url toko
@@ -1229,16 +1250,8 @@ Language: id
Kembali ke Toko Saya
Bagikan URL
Publikasikan toko saya
- Cari domain
- Sekarang Anda menjadi pelanggan %1$s! Anda memiliki akses ke semua fitur kami hingga %2$s.
- Masa percobaan gratis Anda telah berakhir, menyisakan akses fitur secara terbatas. Berlangganan %1$s sekarang.
- Masa percobaan berakhir
- Masa percobaan Anda telah berakhir.
- Waduh, terjadi error tak terduga.
- Error tak terduga
Untuk meluncurkan toko, Anda perlu upgrade ke paket kami. <u>Upgrade</u>
- Masa percobaan gratis Anda adalah %1$d hari. Percobaan gratis Anda akan berakhir dalam %2$s. Upgrade untuk membuka fitur-fitur baru dan membuat toko Anda tetap berjalan.
- %1$s tersisa dalam periode percobaan Anda.
+ Cari domain
Login gagal dengan kode status %1$s
Tidak dapat login karena kami tidak dapat mengidentifikasi URL admin toko Anda
Tidak dapat login karena kami tidak dapat mengidentifikasi URL login toko Anda
@@ -1256,11 +1269,13 @@ Language: id
Permintaan dukungan Anda sudah masuk ke inbox kami. Kami akan mengirimkan email balasan secepatnya.
Permintaan terkirim!
Harap tunggu…
+ Mengirim permintaan
Ekstensi/Plugin lainnya
Plugin WooCommerce
Pembayaran WooCommerce
Pembaca Kartu/Pembayaran Langsung
Aplikasi Seluler
+ Mulai menulis
Pesan
Daftarkan Permohonan Dukungan
Subjek
@@ -1268,6 +1283,7 @@ Language: id
Mari atasi masalahnya
Saya butuh bantuan untuk
Permintaan Dukungan
+ Bagikan feedback
Penyiapan dengan daftar diciutkan
Penyiapan dengan layar penuh
Lihat semua (%1$d)
@@ -1275,49 +1291,46 @@ Language: id
Hadirkan metode pembayaran yang praktis dan mudah untuk pelanggan!
Terima pembayaran
Kami akan menggunaakan data tersebut untuk menyetel pengaturan terkait pengiriman, pajak, dan pembayaran.
- Mengirim permintaan
- Mulai menulis
- Bagikan feedback
Bisa berikan info lebih lanjut tentang toko Anda?
Tautan ajaib sudah berhasil dikirim ke alamat email yang terdaftar untuk akun Anda
+ Login untuk Melanjutkan
Akses semua toko WooCommerce Anda.
Banyak toko
Memuat Status Jetpack
Ada yang salah! Silakan coba lagi nanti.
Uji coba pembayaran
- Login untuk Melanjutkan
- Mendaftarkan nama domain…
- Pilih Negara
- Pilih Provinsi
+ Terima pembayaran dengan kartu\nmenggunakan ponsel Anda
Ketuk Untuk Membayar
TINDAKAN
Terjadi error saat registrasi domain
- Terima pembayaran dengan kartu\nmenggunakan ponsel Anda
- Telepon
- Kode negara
- Negara
- Alamat
- Alamat 2
- Kota
- Provinsi
- Negara Bagian (Tidak Tersedia)
- Kode pos
+ Pilih Provinsi
+ Pilih Negara
+ Mendaftarkan nama domain…
Daftarkan Domain
- Demi kenyamanan Anda, kami telah mengisi informasi kontak WordPress.com Anda\n terlebih dahulu. Harap tinjau kembali untuk memastikan informasi yang ingin Anda gunakan untuk domain ini sudah benar.
+ Kode pos
+ Negara Bagian (Tidak Tersedia)
+ Provinsi
+ Kota
+ Alamat 2
+ Alamat
+ Negara
+ Kode negara
+ Telepon
Organisasi (opsional)
- Pemilik domain harus berbagi informasi kontak di database publik semua domain.\n Dengan Perlindungan Privasi, kami memublikasikan informasi kami sendiri, bukan informasi Anda, dan meneruskan segala komunikasi kepada Anda secara pribadi.
- Dengan mendaftarkan domain ini, Anda menyetujui %1$ssyarat dan ketentuan%2$s kami
- Masukkan %s yang valid
- Daftarkan secara pribadi dengan Perlindungan Privasi
- Daftarkan secara publik
+ Demi kenyamanan Anda, kami telah mengisi informasi kontak WordPress.com Anda\n terlebih dahulu. Harap tinjau kembali untuk memastikan informasi yang ingin Anda gunakan untuk domain ini sudah benar.
Informasi kontak domain
+ Daftarkan secara publik
+ Daftarkan secara pribadi dengan Perlindungan Privasi
+ Masukkan %s yang valid
+ Dengan mendaftarkan domain ini, Anda menyetujui %1$ssyarat dan ketentuan%2$s kami
+ Pemilik domain harus berbagi informasi kontak di database publik semua domain.\n Dengan Perlindungan Privasi, kami memublikasikan informasi kami sendiri, bukan informasi Anda, dan meneruskan segala komunikasi kepada Anda secara pribadi.
Perlindungan Privasi
Pengaturan domain hanya bisa diakses oleh administrator toko
Atau lanjut dengan Tautan Ajaib
Masukkan kata sandi akun WordPress.com Anda untuk memasang Jetpack
+ Masukkan kata sandi akun WordPress.com Anda untuk menghubungkan Jetpack
Login dengan akun WordPress.com Anda untuk memasang Jetpack
Login dengan akun WordPress.com Anda untuk menghubungkan Jetpack
- Masukkan kata sandi akun WordPress.com Anda untuk menghubungkan Jetpack
Pengaturan domain bisa ditemukan di Pengaturan -> Domain
Alamat situs Anda sedang diatur. Perlu waktu hingga 30 menit bagi domain Anda untuk mulai berfungsi.
Selamat atas pembelian Anda
@@ -1327,9 +1340,9 @@ Language: id
%1$d/%2$d selesai
Miliki URL khusus untuk menjadi host toko Anda sendiri.
Sesuaikan domain Anda
+ Publikasikan situs Anda ke seluruh dunia kapan pun yang Anda mau!
Luncurkan toko Anda
Mulai berjualan dengan menambahkan produk atau layanan ke toko Anda.
- Publikasikan situs Anda ke seluruh dunia kapan pun yang Anda mau!
Tambahkan produk pertama Anda
Penyiapan toko
Terjadi masalah dengan pengaturan aplikasinya. Hubungi dukungan untuk informasi selengkapnya
@@ -1341,13 +1354,13 @@ Language: id
Tambah domain
Domain situs Anda
Alamat situs utama
+ <a href=\'\'><u>Baca selengkapnya</u></a> tentang domain dan cara bertindak terkait domain.
Cari domain
Domain yang dibeli akan mengalihkan pengguna ke alamat utama Anda.
Klaim Domain
+ Anda memiliki registrasi domain gratis selama satu tahun bersama paket Anda.
Klaim domain gratis Anda
Alamat toko gratis Anda
- <a href=\'\'><u>Baca selengkapnya</u></a> tentang domain dan cara bertindak terkait domain.
- Anda memiliki registrasi domain gratis selama satu tahun bersama paket Anda.
Domain
Jangan tampilkan lagi
Ingatkan saya nanti
@@ -1369,40 +1382,40 @@ Language: id
Tidak butuh waktu lama
Mempersiapkan pembaca bawaan…
Pembaca bawaan telah siap
+ Pembaca Kartu
Ketuk Untuk Membayar
Angka Konversi
Sesi
Tidak ada sesi dalam periode ini
Bandingkan dengan
Domain
- Pembaca Kartu
Apa itu Kata Sandi Aplikasi?
Sepertinya fitur Kata Sandi Aplikasi dinonaktifkan di situs Anda %1$s.\n Aktifkan Kata Sandi untuk menggunakan aplikasi WooCommerce.
Buka halaman instalasi
- Balas
- Balasan dikirim!
Terjadi kendala saat mengirimkan balasan
+ Balasan dikirim!
+ Balas
Pilih semua
Perbarui harga
Perbarui status
- Perbarui status
- Perbarui harga normal
Status diperbarui!
+ Perbarui status
Harga diperbarui!
+ Perbarui harga normal
Semua variasi telah dibuat.
Tidak ada variasi yang bisa dibuat
Pilih beberapa sekaligus
+ Tidak ada domain tersedia untuk pencarian ini
Membuat variasi
Ini akan membuat variasi baru untuk setiap kemungkinan kombinasi atribut variasi (%1$d variasi).
Buat semua variasi?
Saat ini, pembuatan mendukung maksimal %1$d variasi. Pembuatan variasi untuk produk ini akan membuat %2$d variasi.
Melebihi batas pembuatan
Membuat variasi untuk semua kombinasi atribut Anda.
+ Buat semua variasi
Buat satu variasi baru. Menetapkan atribut yang termasuk dalam produk variabel secara manual.
Tambah variasi baru
Tambah variasi
- Buat semua variasi
- Tidak ada domain tersedia untuk pencarian ini
Keluar Tanpa Menyambungkan
Lanjutkan penyambungan
Coba sambungkan lagi untuk mengakses toko Anda.
@@ -1414,6 +1427,7 @@ Language: id
Coba aktifkan ulang
Coba instal ulang
Dapatkan dukungan
+ Harap coba lagi dan hubungi dukungan jika error ini berlanjut.
Terjadi error saat berkomunikasi dengan situs Anda.
Anda tidak memiliki izin untuk mengelola plugin di toko ini
Terjadi error saat memberi izin penyambungan ke Jetpack
@@ -1437,7 +1451,6 @@ Language: id
Menginstal Jetpack
Login ke <b>%1$s</b> dengan kredensial toko Anda untuk menyambungkan Jetpack.
Login ke <b>%1$s</b> dengan kredensial toko Anda untuk menginstal Jetpack.
- Harap coba lagi dan hubungi dukungan jika error ini berlanjut.
Siapkan kredensial toko Anda.
Sambungkan toko Anda ke Jetpack untuk mengaksesnya di aplikasi ini.
Instal plugin Jetpack gratis untuk mengakses toko Anda di aplikasi ini.
@@ -1450,8 +1463,9 @@ Language: id
Perbarui Pembaca Kartu Simulasi
Sambungkan ke Jetpack
Hubungkan Toko
- Pengunjung
Inilah tempat orang-orang dapat menemukan Anda di Internet. Jangan khawatir! Anda dapat mengubahnya kembali.
+ Pengunjung
+ Atau, login dengan kata sandi
Pembaca Kartu Simulasi telah dinonaktifkan
Kunci Pembaca Simulasi
Jumlah stok diperbarui
@@ -1460,7 +1474,6 @@ Language: id
Memperbarui jumlah stok
Jumlah stok untuk %d variasi akan diperbarui
Persediaan
- Atau, login dengan kata sandi
Cari dari produk yang disaring
Cari dari pesanan yang disaring
Sambungkan toko yang sudah ada
@@ -1488,17 +1501,18 @@ Language: id
Coba Alamat Lainnya
Rentang tanggal kustom
Kustom
+ Apa itu WordPress.com?
Membuat akun baru
Pilih kata sandi
Alamat email Anda
Memulai \ndalam hitungan menit
Dengan mengetuk tombol Hubungkan Jetpack, Anda menyetujui <a href=\'terms\'>Ketentuan Layanan</a> kami dan bersedia <a href=\'sync\'>membagikan detail</a> kepada WordPress.com.
- Apa itu WordPress.com?
Aktifkan Pembaca Kartu Simulasi
Hubungi pemilik situs untuk menerima undangan ke situs sebagai manajer toko atau administrator untuk menggunakan aplikasi.
Menghubungkan ke situs WordPress.com
Hubungkan ke situs
Hubungkan Jetpack ke akun Anda
+ Edit izin
Untuk menggunakan fitur ini, berikan izin untuk menggunakan kamera Anda.
Akses Kamera Diperlukan
Pemindai Barcode Kamera
@@ -1506,7 +1520,6 @@ Language: id
2FA tidak didukung untuk situs yang dihosting sendiri. Gunakan kata sandi aplikasi.
Tunjukkan kata sandi
Sembunyikan password
- Edit izin
Sejak %1$s
Tidak dapat memuat data
Statistik WooCommerce Hari Ini
@@ -1527,55 +1540,57 @@ Language: id
Error Koneksi
Ada masalah yang perlu Anda perhatikan. Harap <a href=\'\'>diperiksa</a>
Coba alamat lainnya
- Aktifkan Pembayaran Langsung
Gagal mengaktifkan bayar di tempat. Silakan coba lagi nanti.
+ Aktifkan Pembayaran Langsung
<a href=\'\'>Pelajari selengkapnya</a> tentang Pembayaran Langsung
Baru menggunakan WooCommerce
Terjadi kegagalan, silakan hubungi dukungan
Masukkan alamat situs
- Lupa kata sandi Anda?
Dapatkan tautan untuk login melalui email
+ Lupa kata sandi Anda?
Kami mendapati bahwa Anda belum menyelesaikan penyiapan Pembayaran Langsung. <a href=\'\'>Lanjutkan penyiapan</a>
- Admin WC
- Login dengan alamat toko Anda
- Situs lain
- Pembayaran dari tab Menu
- Sekarang, Anda dapat mengakses Pembayaran Langsung dan fitur-fitur lain dengan cepat dan mudah
- Mantap!
Pembayaran
+ Mantap!
+ Sekarang, Anda dapat mengakses Pembayaran Langsung dan fitur-fitur lain dengan cepat dan mudah
+ Pembayaran dari tab Menu
Email Anda tidak digunakan dengan akun WordPress.com.
- Login dengan kredensial situs Anda
- Kami baru saja mengirimkan tautan ajaib ke alamat email Anda. Ketuk tautan di email tersebut untuk login.
- Login dengan tautan ajaib
- Gunakan kata sandi untuk login
- Periksa email Anda di perangkat ini!
+ Situs lain
+ Login dengan alamat toko Anda
+ Admin WC
Kami baru saja mengirimkan tautan ajaib ke
- Siapkan sekarang
- Tips
- Apa yang mendorong Anda membuka WooCommerce?
- Hanya menjelajahi
- Mencoba untuk menyiapkan toko
- Memeriksa analitik saya
- Membuat atau memperbarui produk saya
- Mengelola pesanan saya
- Beralih dari satu toko ke toko lain
- Tampaknya %1$s bukan situs WooCommerce.
- Instal WooCommerce
- Tandai\nselesai
- Pesanan #%1$d ditandai selesai
- Error saat memperbarui Pesanan #%1$d
- Mulai berjualan secara langsung dalam waktu kurang dari 20 menit dengan pembaca kartu kami.
- Tingkatkan penjualan Anda dengan produk tertaut
+ Periksa email Anda di perangkat ini!
+ Gunakan kata sandi untuk login
+ Login dengan tautan ajaib
+ Kami baru saja mengirimkan tautan ajaib ke alamat email Anda. Ketuk tautan di email tersebut untuk login.
+ Login dengan kredensial situs Anda
Berikan rekomendasi produk yang membantu dan relevan bagi pelanggan Anda dengan menambahkan upsell dan cross-sell
+ Tingkatkan penjualan Anda dengan produk tertaut
+ Mulai berjualan secara langsung dalam waktu kurang dari 20 menit dengan pembaca kartu kami.
+ Error saat memperbarui Pesanan #%1$d
+ Pesanan #%1$d ditandai selesai
+ Tandai\nselesai
+ Instal WooCommerce
+ Tampaknya %1$s bukan situs WooCommerce.
+ Beralih dari satu toko ke toko lain
+ Mengelola pesanan saya
+ Membuat atau memperbarui produk saya
+ Memeriksa analitik saya
+ Mencoba untuk menyiapkan toko
+ Hanya menjelajahi
+ Apa yang mendorong Anda membuka WooCommerce?
+ Tips
+ Siapkan sekarang
Mari kita mulai!
Login dengan WordPress.com
Hubungi dukungan
+ Login dengan akun WordPress.com Anda
Minta bantuan!
Mengalami masalah terkait login?
SKU
Semua produk
JANGAN TAMPILKAN LAGI
INGATKAN SAYA NANTI
+ Jangan khawatir! Anda bisa memulai Pembayaran Langsung kapan saja di Pengaturan.
Pembayaran Langsung
Beli Pembaca Kartu
Terima pembayaran dengan mudah
@@ -1586,12 +1601,10 @@ Language: id
Tidak dapat menyimpan perubahan
Pesanan akan ditandai sebagai dibayar jika Anda telah menerima pembayaran tanpa melalui WooCommerce
Instal Jetpack
+ Kami membuat Anda bisa memprosesnya dengan mudah
Anda dapat mengelolanya dengan cepat dan mudah
Kami tahu bahwa hal ini penting untuk kelangsungan bisnis Anda
Baru menggunakan WooCommerce
- Jangan khawatir! Anda bisa memulai Pembayaran Langsung kapan saja di Pengaturan.
- Kami membuat Anda bisa memprosesnya dengan mudah
- Login dengan akun WordPress.com Anda
Pesanan baru senilai $50 di Toko WooCommerce Anda
Ada pesanan baru! 🎉
detail
@@ -1600,10 +1613,10 @@ Language: id
Bagikan laporan status sistem
Salin laporan status sistem ke clipboard
Terus Mencari
+ Pembayaran Langsung untuk Pesanan #%1$s di %2$s blog_id %3$s.
Ubah Penyedia Pembayaran
Dana dikembalikan: %1$s
Menunggu pembayaran
- Pembayaran Langsung untuk Pesanan #%1$s di %2$s blog_id %3$s.
Lanjutkan Penginstalan
Hal yang harus diketahui sebelum menginstal
Instal ekstensi
@@ -1613,26 +1626,29 @@ Language: id
Gagal mencari produk
Gagal memuat produk
Mencari Produk
- Daftar email penagihan yang diizinkan untuk pencocokan saat pesanan dilakukan. Pisahkan alamat email dengan koma. Anda juga dapat menggunakan tanda bintang (*) untuk mencocokkan bagian-bagian dari email. Misalnya \"*@gmail.com\" akan cocok dengan semua alamat gmail.
Penyaring (%d)
Beberapa alamat email tidak valid. Harap perbaiki alamat email.
+ Daftar email penagihan yang diizinkan untuk pencocokan saat pesanan dilakukan. Pisahkan alamat email dengan koma. Anda juga dapat menggunakan tanda bintang (*) untuk mencocokkan bagian-bagian dari email. Misalnya \"*@gmail.com\" akan cocok dengan semua alamat gmail.
+ Maaf, tidak ada produk yang cocok dengan penyaring yang dipilih\"
Konfirmasi Metode Pembayaran
Stripe
Pembayaran WooCommerce
Pembayaran Langsung dapat diproses melalui penyedia pembayaran berikut. Penyedia mana yang ingin Anda gunakan?
- Untuk mengedit Detail Produk atau Pembayaran, ganti status ke Pembayaran Tertunda.
- Tidak ada pelanggan ditemukan
- Maaf, tidak ada produk yang cocok dengan penyaring yang dipilih\"
Pilih Penyedia Pembayaran Anda
terkunci
+ Untuk mengedit Detail Produk atau Pembayaran, ganti status ke Pembayaran Tertunda.
Beberapa bagian dalam pesanan ini tidak dapat diedit
Cari pelanggan
+ Tidak ada pelanggan ditemukan
Lain Kali
Tambahkan Ekstensi Ke Toko
Apa itu WooCommerce Shipping?
Akses tarif diskon pengiriman. Saat ini tersedia dengan DHL dan USPS, dan akan segera hadir lebih banyak lagi!
Tarif diskon
+ Buat pesanan, lalu cukup bayar, cetak, kemas, dan kirimkan.
Cetak dari telepon Anda
+ Tidak perlu repot menstok perangko.
+ Beli perangko jika perlu saja.
Hemat waktu dan uang
Penuhi pesanan Anda dengan WooCommerce Shipping
Tampilkan detail
@@ -1658,6 +1674,8 @@ Language: id
Harga saat ini berbeda-beda
Harga saat ini adalah %s
Harga untuk %d variasi akan diperbarui
+ Campuran
+ TIdak ada
Harga obral
Harga normal
Harga
@@ -1665,11 +1683,6 @@ Language: id
Pembaruan massal
Oke
Pembaruan massal…
- Buat pesanan, lalu cukup bayar, cetak, kemas, dan kirimkan.
- Tidak perlu repot menstok perangko.
- Beli perangko jika perlu saja.
- Campuran
- TIdak ada
Memuat variasi…
Pencarian kategori produk gagal
Pemuatan kategori produk gagal
@@ -1682,12 +1695,13 @@ Language: id
Pilih kategori
Tutup banner untuk menginstal WC Shipping
Dapatkan WooCommerce Shipping
- Perlu label pengiriman?
Cetak label dari ponsel dengan WooCommerce Shipping.
+ Perlu label pengiriman?
+ Ubah jumlah produk dari %1$d menjadi %2$d
Perbarui Harga Normal
Perbarui Harga Obral
- Ubah jumlah produk dari %1$d menjadi %2$d
Kami tidak mendukung ekstensi WooCommerce Stripe di %1$s
+ Penyaring
Hapus Pilihan
Pilih %d Produk
Pilih %d Produk
@@ -1699,7 +1713,6 @@ Language: id
Aktifkan ini jika kupon tidak berlaku untuk barang obral. Kupon per item hanya dapat digunakan jika barang tidak diobral. Kupon per keranjang hanya dapat digunakan jika ada barang di keranjang yang tidak diobral.
Kecualikan Barang Obral
Aktifkan ini jika kupon tidak dapat digunakan bersamaan dengan kupon lainnya.
- Penyaring
Hanya untuk penggunaan individu
Batas Penggunaan Per Pengguna
Batasi Penggunaan Hingga X Item
@@ -1774,12 +1787,12 @@ Language: id
Coba metode pengembalian dana lainnya
Pengembalian dana ditolak untuk alasan yang tidak diketahui
Maaf, pengembalian dana ini tidak dapat diproses.
- Salin
Pengembalian dana berhasil
Memproses pengembalian dana
Pembayaran pengembalian dana
Pengembalian dana gagal
Mempersiapkan pengembalian dana pembayaran
+ Salin
Cari Kupon
Tidak dapat membuat pesan berbagi kode kupon
Error saat membagikan kode kupon.
@@ -1804,9 +1817,18 @@ Language: id
Checkout - %s
Bagikan tautan pembayaran
Jumlah
+ Jumlah
+ Pesanan yang Didiskon
+ Performa
+ Belanja maksimum%s
+ Belanja minimum%s
+ Ringkasan Kupon
Lihat ringkasan kupon
+ Kini Anda dapat melihat dan mengedit kupon dengan perangkat Anda!
Lihat dan edit kupon
Tidak ada kupon ditemukan
+ %1$s excl. %2$s
+ %1$s dan %2$s
semua
Kedaluwarsa
Aktif
@@ -1824,15 +1846,6 @@ Language: id
\u2022 satu ulasan disetujui
\u2022 %d ulasan disetujui
%1$s (%2$s%%)
- Jumlah
- Pesanan yang Didiskon
- Performa
- Belanja maksimum%s
- Belanja minimum%s
- Ringkasan Kupon
- Kini Anda dapat melihat dan mengedit kupon dengan perangkat Anda!
- %1$s excl. %2$s
- %1$s dan %2$s
Kini Anda dapat membuat pesanan dengan perangkat Anda! Anda dapat mencoba fitur ini dengan mengetuk tombol \"+\"
Kembali lagi nanti untuk mendapatkan lebih banyak tips dan wawasan tentang cara mengembangkan toko Anda
Selamat, Anda telah membaca semuanya!
@@ -1847,20 +1860,20 @@ Language: id
Layanan XML-RPC tidak tersedia di situs ini.
Harap gunakan email non-Automattic untuk mengirimkan tiket dukungan
Kami tidak mendukung akun Stripe yang terdaftar di %1$s
+ Kami tidak mendukung ekstensi WooCommerce Payments di %1$s
Tekan tombol daya di pembaca Anda
Tanda terima dikirimkan ke <strong>%s</strong>
Persentase (%)
- Kami tidak mendukung ekstensi WooCommerce Payments di %1$s
Hapus biaya dari pesanan
Hapus pengiriman dari pesanan
Pengiriman
Tambahkan cara pengiriman
Tambahkan Pengiriman
Nama
+ Jumlah
Biaya
Detail pelanggan
Tambahkan biaya
- Jumlah
Sunting catatan pelanggan
Sunting detail pelanggan
Sunting status pesanan
@@ -1877,12 +1890,12 @@ Language: id
Segarkan setelah memperbarui
Kelola Plugin
Pembayaran WooCommerce
- Pembayaran Langsung hanya akan berfungsi jika salah satu plugin berikut diaktifkan. Harap nonaktifkan salah satu plugin berikut untuk melanjutkan:
- Konflik plugin pembayaran terdeteksi
- atau
WooCommerce Stripe Gateway
Pembayaran Langsung hanya akan berfungsi jika salah satu plugin berikut diaktifkan. Hubungi administrator situs untuk menonaktifkan salah satu plugin berikut untuk melanjutkan:
+ Pembayaran Langsung hanya akan berfungsi jika salah satu plugin berikut diaktifkan. Harap nonaktifkan salah satu plugin berikut untuk melanjutkan:
+ Konflik plugin pembayaran terdeteksi
Total Pajak
+ atau
Menginstal Jetpack
Pembayaran Langsung saat ini tidak tersedia
Pesanan dibuat
@@ -1911,9 +1924,9 @@ Language: id
Kode Sumber
Pemberitahuan Privasi untuk California
Kebijakan Privasi
+ Ketentuan Layanan
Bekerja dari Mana Saja
Berkarya Bersama Kami
- Ketentuan Layanan
Keluarga Automattic
Informasi Hukum dan Lainnya
Twitter
@@ -1935,12 +1948,12 @@ Language: id
aktivasi
instalasi
Maaf, terjadi kesalahan selama %s
- WooCommerce
Hei! Berikut tautan untuk mengunduh aplikasi WooCommerce. Saya sangat suka aplikasi ini dan saya rasa Anda juga akan suka. %1$s
- review_card_%1$s
- review_card_detail
- product_card_%1$s
+ WooCommerce
product_card_detail
+ product_card_%1$s
+ review_card_detail
+ review_card_%1$s
Perbarui Stripe
Hampir jadi! Harap selesaikan pengaturan Stripe untuk mulai menerima Pembayaran dengan Kartu.
Selesaikan penyiapan Stripe di admin toko Anda
@@ -1953,7 +1966,9 @@ Language: id
Tambahkan alamat pengiriman lain
Tersedia
%s tersedia
+ Tambahkan produk
Produk
+ Tambahkan Detail Pelanggan
Pelanggan
Tandai sebagai dibayar
Pesanan akan dibuat dan ditandai sebagai dibayar jika Anda telah menerima pembayaran tanpa melalui WooCommerce
@@ -1961,18 +1976,16 @@ Language: id
Pilih metode pembayaran Anda
Pajak dihitung otomatis berdasarkan alamat toko Anda
Pajak (%s%%)
- Tambahkan Detail Pelanggan
- Tambahkan produk
Terima pembayaran (%s)
Kena pajak
Jumlah kustom
Masukkan email
Simple payment
+ order_card_detail
+ order_card_%1$s
Uang Tunai
Kartu
Pajak
- order_card_%1$s
- order_card_detail
Email
Tambahkan catatan
Catatan Pelanggan
@@ -2026,8 +2039,9 @@ Language: id
Masukkan jumlah
Terima pembayaran
Simple payment
- Analytics
Buat pesanan dari perangkat Anda!
+ Analytics
+ Semua selesai
Menyambungkan ke toko Anda
Mengaktifkan
Menginstal Jetpack
@@ -2039,17 +2053,17 @@ Language: id
Error saat memuat ulasan produk
Sambungan pembaca terputus
Pembaca terhubung
- Semua selesai
Membatalkan pembaruan perangkat lunak yang sedang berlangsung tidak dianjurkan. Pembatalan akan memblok sambungan pembaca Anda.
Pembaruan perangkat lunak pembaca gagal karena daya baterai pembaca tidak cukup. Isi daya pembaca di atas 50%% sebelum mencoba lagi.
- Isi daya pembaca
Pembaruan perangkat lunak pembaca gagal karena daya baterai hanya terisi %1$s%%. Isi daya pembaca di atas 50%% sebelum mencoba lagi.
+ Isi daya pembaca
Perangkat lunak pembaca kartu Anda perlu diperbarui agar dapat berfungsi normal
Cantumkan kode pos yang valid pada pengaturan toko Anda lalu coba lagi
Kode pos alamat toko tidak valid
Masukan alamat:
Cantumkan alamat toko Anda untuk melanjutkan
Periksa perangkat seluler Anda
+ Tidak dapat memperbarui alamat dengan alamat email kosong. Pastikan Anda menggunakan WooCommerce versi terbaru.
30 hari terakhir
7 hari terakhir
2 Hari Terakhir
@@ -2058,7 +2072,6 @@ Language: id
Semua
Pesanan disaring
Semua Pesanan
- Tidak dapat memperbarui alamat dengan alamat email kosong. Pastikan Anda menggunakan WooCommerce versi terbaru.
Lain Kali
Menginstal Jetpack
Izinkan banyak pengguna untuk mengakses WooCommerce Mobile.
@@ -2111,8 +2124,8 @@ Language: id
Laporan status sistem
Selamat, Anda sekarang dapat menerima pembayaran kartu debit dan kredit menggunakan WooCommerce Payments!
Kumpulkan pembayaran dengan pembaca kartu
- Oke
Jumlah minimal %1$s
+ Oke
Gambar ikon fitur baru
Beralih toko
Gagal memperbarui produk %1$s
@@ -2140,23 +2153,23 @@ Language: id
Add-on Produk
Menyimpan produk Anda
Menunggu Peninjauan
+ Mohon pastikan pembaca kartu sudah terhubung.
Coba lagi dengan kartu lainnya
Coba ketuk, masukkan, atau gesek kartu Anda lagi
Beberapa kartu terdeteksi. Coba lagi dengan satu kartu
+ Ambil kartu
Coba lagi dengan kartu yang sama
%d objek
%d item
%d hari kerja
%d hari kerja
- Mohon pastikan pembaca kartu sudah terhubung.
- Ambil kartu
+ Kami tidak dapat secara otomatis memverifikasi alamat pengiriman: %s
Kami tidak dapat memverifikasi alamat pengirim secara otomatis. Lihat di Google Maps untuk memastikan alamat sudah benar.
Kami berupaya untuk lebih memudahkan Anda melihat add-on produk dari perangkat! Untuk sekarang, Anda akan dapat melihat add-on untuk pesanan Anda. Anda dapat membuat dan menyunting add-on ini pada dasbor web Anda.
- Kami tidak dapat secara otomatis memverifikasi alamat pengiriman: %s
- Simpan
Lihat add-on dari perangkat Anda!
Jika ingin mengubah nama add-on pada dasbor web, harap perhatikan bahwa pesanan sebelumnya tidak akan menampilkan add-on tersebut dalam aplikasi.
Lihat Add-on
+ Simpan
Unggah detail (%d)
File %d tidak dapat diunggah
File %d tidak dapat diunggah
@@ -2176,6 +2189,7 @@ Language: id
Cetak label pengiriman
Pembayaran langsung
Pembaca Anda memerlukan waktu sekitar tiga jam untuk terisi penuh
+ Pastikan pembaca selalu memiliki daya
Pembaca Anda akan masuk mode tidur setelah 10 menit tidak aktif. Cukup tekan tombol daya untuk menghubungkannya kembali.
Penghubungan kembali Automattic
Untuk menerima pembayaran, cukup geser, ketuk, atau sisipkan kartu pada pembaca
@@ -2187,11 +2201,10 @@ Language: id
Pembayaran Langsung tidak tersedia dalam Mode Pengujian. Harap matikan untuk melanjutkan.
Pembayaran Langsung saat ini tidak tersedia
Ada persyaratan yang tertunda di akun Anda. Penuhi persyaratan tersebut dengan %1$s agar dapat tetap menerima Pembayaran Langsung.
+ Ada persyaratan untuk Akun Anda yang belum dipenuhi
Anda memiliki setidaknya satu persyaratan yang terlambat di akun Anda. Harap penuhi persyaratan tersebut untuk dapat terus menggunakan Pembayaran Langsung
Pembayaran Langsung saat ini tidak tersedia
Anda akan dapat menerima Pembayaran Langsung segera setelah kami selesai meninjau akun Anda.
- Pastikan pembaca selalu memiliki daya
- Ada persyaratan untuk Akun Anda yang belum dipenuhi
Pembayaran Langsung saat ini tidak tersedia
Mohon maaf, kami tidak dapat mendukung Pembayaran Langsung untuk toko ini.
Segarkan setelah memperbarui
@@ -2208,6 +2221,7 @@ Language: id
<a href=\'\'>Pelajari lebih lanjut</a> tentang penerimaan pembayaran dengan perangkat seluler Anda dan pemesanan pembaca kartu
Butuh bantuan? <a href=\'\'>Hubungi dukungan</a>
Anda masih dapat menerima Pembayaran Tunai secara Langsung dengan mengaktifkan metode pembayaran \"bayar di tempat\" di toko Anda
+ Kami tidak mendukung Pembayaran Langsung Kartu di %1$s
Menghubungkan ke akun Anda
Pembayaran langsung
Pastikan kembali dimensi dan berat paket atau coba gunakan paket lain di Detail Paket
@@ -2215,7 +2229,6 @@ Language: id
Semua paket yang tersedia telah diaktifkan
Mengaktifkan paket
Pilih paket yang ingin diaktifkan.
- Kami tidak mendukung Pembayaran Langsung Kartu di %1$s
Kolom wajib diisi
Tutup
Variasi Dibuat
@@ -2224,11 +2237,11 @@ Language: id
Buat Variasi
Karena atribut sudah ditambahkan, Anda sekarang bisa membuat variasi pertama Anda!
Atribut dibuat
+ %1$s%% selesai
Membatalkan pembaruan perangkat lunak yang sedang berlangsung tidak dianjurkan
Maaf, pembayaran ini tidak dapat diproses
Tidak ada koneksi ke server
Tidak ada koneksi internet
- %1$s%% selesai
Kirim menggunakan kemasan asli
Tambah ke paket baru
Item ini saat ini berada di %s. Ke mana Anda ingin memindahkannya?
@@ -2239,6 +2252,7 @@ Language: id
Gagal membuat paket. Harap coba lagi.
Gagal membuat paket: ada masalah API yang tidak diketahui.
Gagal membuat paket: %1$s
+ Harap tunggu…
Membuat paket baru
Nilai tidak valid.
Kolom ini harus diisi.
@@ -2252,11 +2266,10 @@ Language: id
Kotak
Pilih jenis paket
Jenis paket
+ Siapkan paket yang akan digunakan untuk mengirim produk Anda. Kami akan menyimpannya untuk pesanan selanjutnya.
Tambah paket baru
Buat paket baru
Dimensi paket harus lebih besar dari nol. Untuk melanjutkan, silakan perbarui dimensi item di bagian Pengiriman halaman produk Anda.
- Harap tunggu…
- Siapkan paket yang akan digunakan untuk mengirim produk Anda. Kami akan menyimpannya untuk pesanan selanjutnya.
Kemasan asli
Dimensi Item
Item yang Dikirim Terpisah
@@ -2269,11 +2282,11 @@ Language: id
Pemeriksaan pembaruan versi perangkat lunak gagal
<a href=\'\'>Pelajari lebih lanjut</a> tentang menerima pembayaran dengan perangkat seluler dan memesan pembaca kartu
Aktifkan Bluetooth
+ Tidak ada pembaca yang terhubung
Tidak dapat menyambungkan pembaca
Hubungkan
Ditemukan beberapa pembaca
Pesanan sudah dibayar
- Tidak ada pembaca yang terhubung
Terima kasih atas pembelian Anda! Klik tautan di bawah untuk melihat tanda terima pembayaran Anda.\n\n%s
Terjadi error saat mengunduh formulir bea cukai
Cetak faktur bea cukai
@@ -2289,11 +2302,12 @@ Language: id
Tambahkan produk
Atribut variasi
Aktifkan bluetooth perangkat seluler
+ Terjadi error saat mengambil pesanan. Status pesanan pada aplikasi mungkin telah usang.
Tanda terima Anda dari %s
Menyegarkan pesanan
Memperbarui status aplikasi
Pelanggan Anda memilih %1$s
- Terjadi error saat mengambil pesanan. Status pesanan pada aplikasi mungkin telah usang.
+ Formulir bea cukai wajib menyertakan nomor telepon 10 digit
Formulir bea-cukai diisi
Jika mengalami masalah pencetakan dari perangkat Anda, hubungi dukungan pelanggan untuk mesin cetak Anda.
Jika pencetakan tidak tersedia, Anda bisa selalu menyimpan tanda terima ke dalam format PDF dan mengirimkannya melalui email untuk mencetaknya dari perangkat lain.
@@ -2306,16 +2320,19 @@ Language: id
Untuk membuat variasi, Anda perlu mengatur atributnya (yaitu \"Warna\", \"Ukuran\") terlebih dahulu
1 variasi
%1$s variasi
- Formulir bea cukai wajib menyertakan nomor telepon 10 digit
Pelacakan USPS
Memperbarui perangkat lunak pembaca Anda
Pembaruan perangkat lunak
Perangkat lunak pembaca diperbarui
NAMA PEMBACA KARTU TIDAK DIKENALI
+ Putus sambungan pembaca
Harap perbarui perangkat lunak pembaca Anda untuk dapat terus menerima pembayaran
Perbarui perangkat lunak pembaca
+ %s%% baterai
PEMBACA KARTU TERHUBUNG
Hubungkan pembaca kartu
+ Aktifkan pembaca kartu dan pasang di sebelah perangkat seluler
+ Pastikan pembaca kartu telah terisi daya
Hubungkan pembaca kartu Anda
Kartu ditolak
Menyambungkan ke pembaca
@@ -2328,8 +2345,10 @@ Language: id
Berat (%1$s per unit)
Nilai (%1$s per unit)
%1$s mengenai nomor Tarif HS
+ %1$s mengenai Nomor Transaksi Internal (ITN)
Baris Kustom %1$d
Lainnya
+ Pemeriksaan Sanitasi/Fitosanitasi
Karantina
Tiada
Lainnya
@@ -2352,12 +2371,6 @@ Language: id
Jenis isi
Kembalikan ke pengirim jika paket tidak dapat dikirimkan
hingga %s
- Putus sambungan pembaca
- %s%% baterai
- Aktifkan pembaca kartu dan pasang di sebelah perangkat seluler
- Pastikan pembaca kartu telah terisi daya
- %1$s mengenai Nomor Transaksi Internal (ITN)
- Pemeriksaan Sanitasi/Fitosanitasi
Jika Anda mengaktifkan pengaturan ini, pelanggan akan menerima email konfirmasi setelah pesanan selesai
Tinjau pesanan
🎉 Pesanan selesai!
@@ -2366,16 +2379,20 @@ Language: id
Pelajari lebih lanjut tentang peran dan izin
Aplikasi ini hanya mendukung peran pengguna Administrator dan Manajer Toko. Harap hubungi pemilik toko Anda untuk mengupgrade peran Anda.
Edit dan tambahkan produk baru dari mana saja
- Lewati
Kelola dan sunting pesanan dari mana saja
Lacak penjualan dan produk dengan performa tinggi
+ Lewati
Produk eksternal
Produk yang dikelompokkan
Produk variabel
Produk digital unik, seperti layanan atau buku, musik, dan video yang dapat diunduh
+ Produk fisik unik yang mungkin perlu dikirimkan kepada pelanggan
Produk fisik sederhana
Buka pengaturan
Buka pengaturan
+ Bluetooth dinonaktifkan
+ Lokasi dinonaktifkan
+ Izin lokasi tepat tidak ditemukan
Tidak dapat menyambungkan ke pembaca.
Menyambungkan ke pembaca
Sambungkan ke pembaca
@@ -2383,11 +2400,9 @@ Language: id
Memindai pembaca
Jumlah item
Buat label pengiriman baru
- Produk fisik unik yang mungkin perlu dikirimkan kepada pelanggan
- Bluetooth dinonaktifkan
- Lokasi dinonaktifkan
- Izin lokasi tepat tidak ditemukan
+ Produk virtual sederhana
Apakah Anda ingin menghapus Variasi ini?
+ Membuat variasi
Menghapus produk
Kirimkan tanda terima
Cetak tanda terima
@@ -2401,16 +2416,14 @@ Language: id
TIdak dapat mempratinjau label pengiriman. Instal aplikasi penampil PDF, lalu coba lagi.
Kami tidak dapat mendeteksi situs WordPress di alamat yang Anda masukkan. Pastikan WordPress terinstal dan Anda menggunakan versi terbaru yang tersedia.
sejumlah baris pengiriman
- Produk virtual sederhana
- Membuat variasi
Tidak dapat menandai pesanan telah selesai
Terjadi error saat membeli label
Harap tunggu…
Membeli label
+ Gambar label yang disimpan lebih dari 180 hari akan dihapus menggunakan mitra teknologi kami demi alasan keamanan umum dan privasi data.
Cetak label pengiriman
Simpan untuk nanti
Label pengiriman dibeli!
- Gambar label yang disimpan lebih dari 180 hari akan dihapus menggunakan mitra teknologi kami demi alasan keamanan umum dan privasi data.
Label yang sudah disimpan lebih dari 30 hari tidak bisa mendapatkan pengembalian dana
Jenis
Ubah Nama
@@ -2431,66 +2444,69 @@ Language: id
Hanya pemilik situs yang dapat mengelola metode pembayaran label pengiriman. Silakan hubungi Pemilik Toko %1$s (%2$s) untuk mengelola metode pembayaran.
Tambah variasi
Tambahkan Variasi
+ Buat variasi pertama Anda
Total %s
%s tarif dipilih
+ Memenuhi syarat untuk diproses tanpa tanda tangan
Memenuhi syarat untuk penjemputan gratis
+ Asuransi (%s)
+ pelacakan
Sertakan %s
Tanda tangan orang dewasa wajib diisi (%s)
Tanda tangan wajib diisi (%s)
- Memenuhi syarat untuk diproses tanpa tanda tangan
- Asuransi (%s)
- pelacakan
Pelanggan membayar %1$s dari %2$s untuk pengiriman
- Buat variasi pertama Anda
+ Ketika membeli label pengiriman dengan WooCommerce, Anda bisa berhemat 5% hingga 40% dibandingkan dengan tarif kantor pos.
+ Apa itu diskon WooCommerce Services?
+ Terjadi error saat memuat pilihan pengiriman
Operator dan tarif
Beli label pengiriman
Tandai pesanan ini selesai dan kirim pemberitahuan ke pelanggan
Total pesanan
+ Pelajari selengkapnya tentang diskon WooCommerce Services
+ Diskon WooCommerce Services
Subtotal
Ringkasan pesanan label pengiriman
gratis
Lainnya
Opsi dengan nama ini sudah ada.
Atribut dengan nama ini sudah ada.
+ Tambahkan tiap nama opsi lalu tekan enter
Atau ketuk untuk memilih opsi yang sudah ada
Nama pilihan
- Apa itu diskon WooCommerce Services?
- Terjadi error saat memuat pilihan pengiriman
- Pelajari selengkapnya tentang diskon WooCommerce Services
- Diskon WooCommerce Services
- Tambahkan tiap nama opsi lalu tekan enter
- Ketika membeli label pengiriman dengan WooCommerce, Anda bisa berhemat 5% hingga 40% dibandingkan dengan tarif kantor pos.
- Harap tunggu…
- %1$s****%2$s
- Tambahkan kartu kredit lain
- Harap tunggu…
Terjadi error saat menyimpan pengaturan Anda
+ Harap tunggu…
Menyimpan pengaturan Anda
Berakhir pada %1$s
Kirimkan email tanda terima pembelian label ke %1$s (%2$s) di %3$s
Kartu kredit diambil dari akun WordPress.com berikut: %1$s <%2$s>
+ %1$s****%2$s
+ Tambahkan kartu kredit lain
Metode pembayaran dipilih
+ Harap tunggu…
Mengambil pengaturan Anda
+ Kartu kredit berakhir dalam %1$s
Paypal
VISA
MasterCard
Temukan
American Express
- Tambahkan Fitur
- Atribut
- Kartu kredit berakhir dalam %1$s
Atau ketuk untuk memilih atribut yang sudah ada
Nama atribut baru
+ Tambahkan Fitur
+ Atribut
Sunting atribut
+ Total berat paket: %1$s %2$s
%1$d item pada paket %2$d
Total berat paket: %1$s %2$s
Paket khusus
Tidak dapat mengambil produk
+ Beberapa kolom wajib belum diisi.
Berat tidak valid
Paket yang Dipilih
Harap tunggu…
Memuat Paket!
Paket %1$d
+ %d objek
Tidak dapat memuat definisi paket
Mencakup berat paket
Total berat paket (%1$s)
@@ -2503,17 +2519,16 @@ Language: id
Kami sedikit mengubah alamat yang dimasukkan. Jika sudah benar, gunakan alamat yang disarankan untuk memastikan pengiriman yang akurat.
Sunting alamat yang dipilih
Gunakan alamat yang dipilih
- Beberapa kolom wajib belum diisi.
- Total berat paket: %1$s %2$s
- %d objek
Memuat data alamat
Tersedia fitur baru!
+ Temukan di Peta
Hubungi Pelanggan
Nama jalan tidak valid
Nomor rumah tidak ada
Alamat tidak ditemukan
Kami tidak dapat memverifikasi alamat pengiriman secara otomatis. Lihat di Google Maps atau coba hubungi pelanggan untuk memastikan alamat sudah benar.
Validasi alamat gagal
+ Harap tunggu…
Validasi alamat sedang berlangsung
Tidak dapat memuat data alamat
Gunakan alamat yang dimasukkan
@@ -2524,8 +2539,6 @@ Language: id
Telepon
Perusahaan
Nama
- Harap tunggu…
- Temukan di Peta
Aplikasi Google Maps tidak ditemukan
Harap tunggu…
Maaf, penghapusan gambar pada variasi produk baru bisa dilakukan di WooCommerce 4.7 atau yang lebih baru.
@@ -2541,30 +2554,31 @@ Language: id
Informasi kemasan
Buat label pengiriman
Pelajari lebih lanjut
+ Tak perlu antre saat di kantor pos dengan mencetak label pengiriman di rumah dari perangkat seluler dengan harga diskon!
Hemat waktu dan biaya dengan memproses pesanan menggunakan WooCommerce Shipping
Pengiriman WooCommerce
Tandai pesanan selesai
+ Pelajari selengkapnya tentang membuat label menggunakan perangkat seluler
Buat label pengiriman
- Buat label pengiriman dari perangkat Anda!
Sekarang Anda dapat membuat label pengiriman untuk semua pesanan fisik langsung dari perangkat Anda dengan plugin WooCommerce Shipping gratis. Ketuk \"Buat label pengiriman\" untuk mencoba fitur beta kami!
- Tak perlu antre saat di kantor pos dengan mencetak label pengiriman di rumah dari perangkat seluler dengan harga diskon!
- Pelajari selengkapnya tentang membuat label menggunakan perangkat seluler
- Sunting
+ Buat label pengiriman dari perangkat Anda!
Biaya
Pembayaran Bersih
Berbayar
Pelajari selengkapnya tentang cara menghubungkan Jetpack
+ Sunting
Validasi
Tarik dan lepas untuk mengurutkan foto
- Hapus
Pengaturan Unduh
Harap masukkan nama yang valid
Masukkan URL file
+ Pustaka Media WordPress
Pastikan url yang dimasukkan valid
Harap tunggu…
Mengunggah file
Error saat mengunggah file
Tambahkan file yang dapat diunduh
+ Tambahkan berkas yang dapat diunduh dari
Termasuk file yang dapat diunduh dengan pembelian
Batal
Ya, ubah
@@ -2573,6 +2587,7 @@ Language: id
File
Anda yakin ingin menghapus file ini?
Produk yang dapat diunduh
+ Hapus
Masa berlaku unduhan
Batas unduhan
Masukkan jumlah hari sebelum tautan unduhan kedaluwarsa, atau biarkan kosong jika tidak ada masa berlaku
@@ -2587,13 +2602,11 @@ Language: id
Anda mungkin perlu <b>mengonfigurasi pencetakan melalui WiFi langsung dari mesin cetak.</b> Pastikan firmware mesin cetak sudah diperbarui dan lihat manual mesin cetak untuk mengetahui petunjuknya.
Anda dapat memilih <b>layanan cetak default</b> perangkat atau pasang <b>aplikasi khusus mesin cetak</b> Anda (ini akan muncul sebagai opsi yang disarankan)
Pastikan mesin cetak dan perangkat Anda terhubung ke <b>jaringan WiFi yang sama</b>
- Pustaka Media WordPress
- Tambahkan berkas yang dapat diunduh dari
+ Gunakan pembuatan produk baru yang sederhana, ditautkan, dan dikelompokkan saat kami bersiap untuk meluncurkan
Tingkatkan penjualan dengan upsell dan cross-sell
Edit produk
Tambahkan produk
Produk dipromosikan dalam keranjang saat produk tersebut dipilih
- Gunakan pembuatan produk baru yang sederhana, ditautkan, dan dikelompokkan saat kami bersiap untuk meluncurkan
Cross-sells
Produk akan dipromosikan dari produk yang sedang dilihat (yaitu: produk yang lebih menguntungkan)
Upsell
@@ -2601,6 +2614,7 @@ Language: id
%1$s%2$s x %3$s
Dapatkan tautan masuk lewat email
Hmm, kami tidak dapat menemukan akun WordPress.com yang terhubung dengan alamat email ini.
+ Uji coba fitur melihat Add-on Pesanan menjelang peluncuran
Membuat produk
Preferensi
Kesalahan saat membuang produk
@@ -2612,25 +2626,24 @@ Language: id
Menambahkan opsi seperti ukuran dan warna saat ini hanya tersedia pada web. Pilihan tersebut akan muncul sebagai opsi pada halaman produk situs Anda.
Buat produk dari aplikasi!
Produk tidak ditemukan
+ Jika masih mengalami masalah mencetak dari perangkat, Anda dapat <b>menyimpan label Anda dalam format PDF</b> dan mengirimkannya melalui email ke perangkat lain untuk dicetak.
+ Setelah memilih <b>\"Cetak label pengiriman\"</b>, Anda harus memilih dan menambahkan mesin cetak jika belum pernah mencetak dari perangkat ini sebelumnya.
Opsi format Label
+ Cetak dari perangkat Anda
Label (4 x 6 inci)
Letter (8,5 x 11 inci)
Legal (8,5 x 14 inci)
Kesalahan saat menampilkan pratinjau label pengiriman
+ Tidak tahu cara mencetak dari perangkat seluler Anda?
Lihat tata letak label dan opsi ukuran kertas
Cetak label pengiriman
Pilih ukuran kertas
Ukuran kertas
+ Jika Anda telah menggunakan label pada kemasan, mencetak dan menggunakannya kembali merupakan pelanggaran terhadap ketentuan layanan kami.
Jika terjadi kesalahan mencetak saat Anda membeli label, Anda dapat mencetaknya kembali.
Kami berusaha mempermudah Anda agar dapat mencetak label pengiriman langsung dari perangkat Anda! Untuk saat ini, jika telah membuat label pengiriman untuk pesanan ini di admin toko Anda dengan Pengiriman WooCommerce, Anda dapat mencetaknya di Detail Pesanan di sini.
Cetak label pengiriman dari perangkat Anda!
- Cetak dari perangkat Anda
- Jika Anda telah menggunakan label pada kemasan, mencetak dan menggunakannya kembali merupakan pelanggaran terhadap ketentuan layanan kami.
- Jika masih mengalami masalah mencetak dari perangkat, Anda dapat <b>menyimpan label Anda dalam format PDF</b> dan mengirimkannya melalui email ke perangkat lain untuk dicetak.
- Setelah memilih <b>\"Cetak label pengiriman\"</b>, Anda harus memilih dan menambahkan mesin cetak jika belum pernah mencetak dari perangkat ini sebelumnya.
Cetak label pengiriman
- Uji coba fitur melihat Add-on Pesanan menjelang peluncuran
- Tidak tahu cara mencetak dari perangkat seluler Anda?
\u0022%1$s\u0022
Draf produk disimpan
Kesalahan saat menyimpan draf produk
@@ -2678,12 +2691,12 @@ Language: id
Login dengan akun lain
Pilih toko untuk menghubungkan
Lanjutkan dengan WordPress.com
+ Produk dengan variasi seperti warna atau ukuran
%d produk dipilih
%d produk dipilih
Tambahkan produk ke grup
Tambahkan produk
Masukkan kata sandi
- Produk dengan variasi seperti warna atau ukuran
Kembali ke toko
Hubungi kami di sini
Harap perhatikan bahwa ini bukan tiket dukungan, kami tidak dapat merespons umpan balik secara perorangan.\n\nButuh bantuan? %1$s
@@ -2708,8 +2721,8 @@ Language: id
Tidak ada harga yang ditentukan
Diaktifkan
Anda harus menentukan harga obral jika ada obral yang dijadwalkan
- %1$s berikan ulasan
Anda kini dapat menyunting produk yang dikelompokkan, eksternal, dan variabel; mengubah jenis produk; serta memperbarui kategori dan tag.
+ %1$s berikan ulasan
Saya suka
Perlu ditingkatkan
Suka dengan aplikasi WooCommerce?
@@ -2718,24 +2731,24 @@ Language: id
Terjadi error saat menambahkan tag
Menambahkan tag
Pengembalian dana Anda sedang diproses. Harap tunggu…
+ Permintaan pengembalian dana berhasil dikirim
Kembalikan dana label (-%1$s)
Jumlah yang memenuhi syarat pengembalian dana
Tanggal pembelian
+ Anda dapat meminta pengembalian dana untuk label pengiriman yang belum digunakan untuk mengirim paket. Pengembalian dana akan diproses paling cepat dalam 14 hari.
Minta pengembalian dana
Kembalikan dana label pengiriman
- Anda dapat meminta pengembalian dana untuk label pengiriman yang belum digunakan untuk mengirim paket. Pengembalian dana akan diproses paling cepat dalam 14 hari.
- Permintaan pengembalian dana berhasil dikirim
Fisik
Kutipan singkat tentang produk Anda
Buat produk Anda lebih mudah ditemukan dengan tag
Tata produk Anda ke dalam kelompok yang berkaitan
- Dinonaktifkan
Tambahkan berat dan dimensi
Tambahkan detail selengkapnya
Atur produk Anda dalam tag
Tambahkan tag pertama Anda
Tag
Tambahkan tag
+ Dinonaktifkan
Produk virtual
Tambahkan detail selengkapnya
%1$s produk
@@ -2743,7 +2756,9 @@ Language: id
%s produk
Produk yang tersisa
%1$s \u2022 %2$s
+ Label %1$s diminta pengembalian dananya
Lacak pengiriman
+ %1$s\n%2$s
Sembunyikan detail pengiriman
Tampilkan detail pengiriman
Kartu Kredit
@@ -2753,8 +2768,6 @@ Language: id
Dikirim ke
Dikirim dari
Paket %d
- %1$s\n%2$s
- Label %1$s diminta pengembalian dananya
SKU: %1$s
%1$s (%2$s opsi)
Label Pengiriman
@@ -2775,8 +2788,8 @@ Language: id
Pemberitahuan privasi untuk pengguna di California
Simpan perubahan
Sampai %1$s
- Tersedia pilihan penyuntingan baru
Kami telah menambahkan lebih banyak fungsi penyuntingan ke produk! Sekarang Anda dapat memperbarui gambar, melihat pratinjau, dan berbagi produk Anda.
+ Tersedia pilihan penyuntingan baru
Penyuntingan terbatas tersedia
Produk
%1$s x %2$s
@@ -2870,11 +2883,11 @@ Language: id
Lebar
Panjang
Produk yang dananya dikembalikan
+ %1$s (%2$s x %3$d)
%1$s melalui %2$s
Apakah Anda yakin ingin meminta pengembalian dana? Hal ini tidak dapat dibatalkan.
Produk yang dananya dikembalikan
Pengembalian dana
- %1$s (%2$s x %3$d)
Daftar ke WordPress.com
Maaf, kami tidak dapat menemukan hasil untuk \"%s\"
Tangkap ulasan produk kualitas tinggi untuk toko Anda
@@ -2895,32 +2908,33 @@ Language: id
Tambahkan inventaris
Mencari pesanan Anda…
Masukkan teks
+ Masukkan Nama Produk
+ Produk disimpan
Error saat memperbarui produk
Harap tunggu…
Deskripsikan produk Anda
Deskripsi
Sunting deskripsi
- Masukkan Nama Produk
- Produk disimpan
- Selesai
Ingin membuang perubahan?
Perbarui
+ Selesai
Pengembalian dana sedang berlangsung, harap tunggu…
+ Kembalikan dana pengiriman
Pilih jumlah
Pengembalian dana pengiriman
Pengembalian dana produk
+ %1$s x %2$s tiap buah
%d item terpilih
Tidak memilih
Pilih semua
Menunggu konfirmasi pengembalian dana…
- Kembalikan dana pengiriman
- %1$s x %2$s tiap buah
Ubah ukuran dan kompres gambar agar pengunggahan lebih cepat
Optimasi gambar
Ambil foto
Pilih dari perangkat
Pilih metode pengunggahan
Unggahan
+ Mengunggah gambar…%1$d dari %2$d
Mengunggah gambar…
Tidak dapat mengakses kamera
Anda yakin ingin menghapus gambar ini?
@@ -2935,7 +2949,6 @@ Language: id
Tambahkan gambar
Mendatang
Buang
- Mengunggah gambar…%1$d dari %2$d
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.
Kami tidak dapat mengakses situs Anda akrena hal ini membutuhkan <b>Autentikasi HTTP</b>. Anda harus menghubungi host untuk mengatasi masalah ini.
@@ -2944,8 +2957,8 @@ Language: id
Login dengan kredensial situs.
Login dengan kredensial situs %1$s
Kirim email verifikasi
- Penyuntingan produk
Uji fungsionalitas penyuntingan produk baru saat kami mempersiapkan peluncuran
+ Penyuntingan produk
Ada masalah saat mengambil akun Anda. Anda dapat mencoba lagi sekarang atau menutupnya dan mencoba lagi nanti.
Terjadi error. Harap login untuk melanjutkan
Menyambungkan ke situs Anda…
@@ -2980,15 +2993,20 @@ Language: id
Tidak ada produk yang cocok
Belum ada produk
%s tersedia
+ Tersedia \u2022 %d variasi
Gambar produk
%1$s memberikan ulasan di %2$s
Tidak disetujui
Error saat memuat ulasan produk baru
Error saat memuat ulasan produk
- Tersedia \u2022 %d variasi
+ Ada masalah dengan pengembalian dananya. Coba lagi.
+ Pengembalian dana tidak berhasil dikirim.
+ Pengembalian dana Anda untuk %s sedang diproses. Harap tunggu…
Ikon kutipan
Pengembalian dana manual
Rincian pengembalian dana
+ Dana dikembalikan melalui %s
+ Kembalikan dana melalui
Alasan pengembalian dana (opsional)
Alasan pengembalian dana
Jumlah pengembalian dana
@@ -3001,11 +3019,6 @@ Language: id
Pengembalian dana %s
%s tersedia untuk pengembalian dana
Keluarkan pengembalian dana
- Dana dikembalikan melalui %s
- Kembalikan dana melalui
- Ada masalah dengan pengembalian dananya. Coba lagi.
- Pengembalian dana tidak berhasil dikirim.
- Pengembalian dana Anda untuk %s sedang diproses. Harap tunggu…
%1$s melalui %2$s
Statistik yang disempurnakan
Fitur-fitur Beta
@@ -3019,12 +3032,12 @@ Language: id
Statistik Hari Ini
Masuk
Sudah punya Jetpack? %1$s
+ Mencoba login dengan Jetpack…
segarkan aplikasi untuk melanjutkan
+ Untuk menggunakan aplikasi ini untuk %1$s Anda perlu melakukan penyiapan plugin Jetpack dan terhubung ke akun ini. \n\nSetelah disiapkan, segarkan aplikasi
Coba toko lain
Database di-downgrade, membuat ulang tabel dan memuat toko
Memuat toko
- Mencoba login dengan Jetpack…
- Untuk menggunakan aplikasi ini untuk %1$s Anda perlu melakukan penyiapan plugin Jetpack dan terhubung ke akun ini. \n\nSetelah disiapkan, segarkan aplikasi
Tidak ditemukan operator
Masukkan alamat situs web lengkap, seperti contoh.com.
Belum ada ulasan!
@@ -3035,11 +3048,12 @@ Language: id
Tidak dapat memuat pengaturan: Beberapa API tidak tersedia untuk kombinasi ID aplikasi OAuth + akun ini.
Kami membuka lowongan!
Salin nomor pelacakan
- segarkan aplikasi
Memeriksa WooCommerce…
+ segarkan aplikasi
Tidak ada alamat yang dicantumkan
Perlu bantuan untuk menemukan email yang terhubung dengan Anda?
Situs web di alamat ini bukan situs WordPress. Agar kami dapat terhubung ke situs tersebut, situs harus menggunakan WordPress.
+ Login dengan WordPress.com untuk terhubung ke <b>%1$s</b>
Zimbabwe
Zambia
Yaman
@@ -3176,7 +3190,6 @@ Language: id
Jamaika
Pantai Gading
Italia
- Login dengan WordPress.com untuk terhubung ke <b>%1$s</b>
Israel
Pulau Man
Irlandia
@@ -3283,15 +3296,24 @@ Language: id
Afghanistan
Kepulauan Åland
Ulasan
+ Operator Kustom
Kustom
+ Silakan masukkan nama operator
Silakan masukkan nomor pelacakan
+ Silakan pilih operator
Anda yakin ingin membuang pelacakan ini?
Tidak dapat menambahkan pelacakan
Pelacakan pengiriman ditambahkan
+ Error saat memuat operator
+ Operator Pengiriman Terpilih
+ Operator Pengiriman
Tanggal pengiriman
Masukkan tautan pelacakan
+ Masukkan nama operator
Masukkan nomor Pelacakan
+ Pilih operator
Tautan pelacakan (opsional)
+ Nama operator
Nomor pelacakan
Carrier
Tambahkan Pelacakan
@@ -3304,25 +3326,19 @@ Language: id
Lacak pengiriman
Di admin situs, Anda bisa menemukan email yang Anda gunakan untuk terhubung ke WordPress.com dari %1$sDasbor Jetpack%2$s di bagian %3$sKoneksi > Koneksi akun%4$s
Email apa yang saya gunakan untuk masuk?
+ Perlu bantuan untuk menemukan email yang dibutuhkan?
Jetpack merupakan plugin WordPress gratis yang menghubungkan toko Anda dengan peralatan yang diperlukan agar dapat memberikan pengalaman seluler terbaik, mencakup pemberitahuan push dan statistik
Apa itu Jetpack?
Lihat toko terhubung
- Lanjutkan menyunting
- Operator Kustom
- Silakan masukkan nama operator
- Silakan pilih operator
- Error saat memuat operator
- Operator Pengiriman Terpilih
- Operator Pengiriman
- Masukkan nama operator
- Pilih operator
- Nama operator
Sepertinya %1$s terhubung ke akun WordPress.com lain.
- Perlu bantuan untuk menemukan email yang dibutuhkan?
+ Lanjutkan menyunting
Silakan login dengan nama pengguna dan kata sandi Anda.
Silakan login menggunakan nama pengguna WordPress.com sebagai ganti alamat email Anda.
Situs di alamat ini bukan situs WordPress. Agar kami dapat menghubungkannya, situs harus menggunakan WordPress.
Pusat Bantuan
+ Virtual
+ Dikelompokkan
+ Variabel
Izinkan, tetapi beri tahu pelanggan
Izinkan
Jangan izinkan
@@ -3330,9 +3346,6 @@ Language: id
Tidak ada stok
Tersedia
Baca selengkapnya
- Dikelompokkan
- Variabel
- Virtual
Tidak dapat memuat gambar
Konsep
Privat
@@ -3378,11 +3391,11 @@ Language: id
Coba sekarang
Saya mengerti
Ketuk untuk beralih toko
+ Pilih toko
Logout
Ubah status pesanan
Klik untuk mengubah status pesanan
Terapkan
- Pilih toko
Tidak, terima kasih
Nanti
Beri penilaian sekarang
@@ -3396,11 +3409,11 @@ Language: id
Perbarui Toko ke WooCommerce 3.5
Tidak dapat terhubung ke %s
Selesai
+ Terjadi error saat menandai semua ulasan sudah dibaca
Tandai semua sudah dibaca
Pesan
Telepon
Telepon atau kirim pesan ke pelanggan
- Terjadi error saat menandai semua ulasan sudah dibaca
Terjadi error saat memperbarui status ulasan produk
Terjadi error saat memuat detail ulasan produk
Buang
@@ -3413,16 +3426,16 @@ Language: id
Kelola pemberitahuan
Pemberitahuan
Anda yakin ingin logout dari akun %s?
- Jika dinonaktifkan, catatan akan diatur sebagai pribadi
Ulasan ditandai %1$s
+ Jika dinonaktifkan, catatan akan diatur sebagai pribadi
Terjadi error saat mengambil pesanan
Kembali
Pemberitahuan ulasan produk
Pemberitahuan pesanan baru
Ke pelanggan
+ Memverifikasi situs…
Petunjuk pembaruan
Cari
- Memverifikasi situs…
Segarkan
dan %d lainnya.
%d pemberitahuan baru
@@ -3454,9 +3467,9 @@ Language: id
Laporan masalah crash
Bagikan
Versi %s
- Kami terlalu banyak melakukan upaya pengiriman kode verifikasi SMS. Tunggu sebentar, dan minta kode yang baru beberapa saat lagi.
- Tidak ada akun WordPress.com yang cocok dengan akun Google ini.
- Login ke akun WordPress.com yang Anda gunakan untuk menghubungkan Jetpack.
+ Kata sandi HTTP
+ Nama pengguna HTTP
+ Otorisasi diwajibkan
Tautan ajaib terkirim
Pendaftaran email
Verifikasi kode
@@ -3465,66 +3478,55 @@ Language: id
Login tautan ajaib
Login alamat situs
Login alamat email
- Belum memiliki akun? %1$sDaftar%2$s
- Mendaftar dengan Google…
+ Terjadi error.
+ Masukkan kode autentikasi untuk melanjutkan.
+ Periksa lagi kata sandi Anda sebelum melanjutkan.
+ Login dihentikan
+ Harap tunggu proses login.
+ Login sedang berlangsung…
+ Ketuk untuk melanjutkan.
+ Sudah login!
+ Terjadi error jaringan. Periksa koneksi Anda dan coba lagi.
+ Masukkan situs WordPress dihosting sendiri yang terhubung ke Jetpack atau WordPress.com
+ Tidak dapat terhubung. Kami menerima error 403 saat mencoba mengakses\n titik akhir XMLRPC situs Anda. Aplikasi ini memerlukannya agar dapat berkomunikasi dengan situs Anda. Hubungi host Anda untuk mengatasi\n masalah ini.
+ Tidak dapat terhubung. Host Anda memblokir permintaan POST yang dibutuhkan aplikasi\n agar dapat berkomunikasi dengan situs Anda. Hubungi host Anda untuk mengatasi masalah ini.
+ Tidak dapat terhubung. Metode XML-RPC yang diperlukan tidak ditemukan di server.
+ Pastikan URL situs yang dimasukkan sudah valid
+ Terjadi galat
+ Lupa password Anda?
+ Masukkan alamat email yang sah
+ Memeriksa surat elektronik
+ Log in lagi untuk melanjutkan.
+ Login ke akun WordPress.com yang Anda gunakan untuk menghubungkan Jetpack.
+ Tidak dapat mengambil profil Anda
+ Situs duplikat terdeteksi.
+ Situs ini sudah ada dalam aplikasi, Anda tidak bisa menambahkannya.
+ Nama pengguna atau password yang Anda masukkan tidak tepat
Google terlalu lama dalam merespons. Anda mungkin harus menunggu sampai memiliki koneksi internet yang lebih kuat.
+ Mendaftar dengan Google…
Daftar dengan Google
Daftar dengan Email
Dengan mendaftar, berarti Anda menyetujui %1$sKetentuan Layanan%2$s kami.
Mengirim email
Coba lagi
Tutup
+ Ada beberapa masalah saat mengirim email. Anda dapat mencoba lagi sekarang atau menutupnya dan mencoba lagi nanti.
Untuk membuat akun WordPress.com yang baru, masukkan alamat email Anda.
Ada beberapa masalah saat memeriksa alamat email.
- Terjadi error.
- Masukkan kode autentikasi untuk melanjutkan.
- Periksa lagi kata sandi Anda sebelum melanjutkan.
- Login dihentikan
- Harap tunggu proses login.
- Login sedang berlangsung…
- Ketuk untuk melanjutkan.
- Sudah login!
- Login Google tidak dapat dimulai.
- Masukkan kata sandi
\nCoba masuk dengan akun lain?
+ Login Google tidak dapat dimulai.
+ Kami terlalu banyak melakukan upaya pengiriman kode verifikasi SMS. Tunggu sebentar, dan minta kode yang baru beberapa saat lagi.
Ada masalah saat menyambungkan ke akun Google.
+ Tidak ada akun WordPress.com yang cocok dengan akun Google ini.
Tutup
Login dengan Google.
- Terjadi error jaringan. Periksa koneksi Anda dan coba lagi.
Sudah login sebagai
Tidak dapat mendeteksi aplikasi klien email Anda
+ Belum memiliki akun? %1$sDaftar%2$s
Masukkan kode verifikasi
- Situs duplikat terdeteksi.
- Situs ini sudah ada dalam aplikasi, Anda tidak bisa menambahkannya.
- Tidak dapat terhubung. Host Anda memblokir permintaan POST yang dibutuhkan aplikasi\n agar dapat berkomunikasi dengan situs Anda. Hubungi host Anda untuk mengatasi masalah ini.
- Memeriksa surat elektronik
- Tidak dapat terhubung. Metode XML-RPC yang diperlukan tidak ditemukan di server.
- Tidak dapat mengambil profil Anda
- Log in lagi untuk melanjutkan.
- Lupa password Anda?
- Nama pengguna atau password yang Anda masukkan tidak tepat
- Masukkan alamat email yang sah
- Terjadi galat
- Otorisasi diwajibkan
- Pastikan URL situs yang dimasukkan sudah valid
- Kata sandi HTTP
- Nama pengguna HTTP
- Masukkan situs WordPress dihosting sendiri yang terhubung ke Jetpack atau WordPress.com
- Tidak dapat terhubung. Kami menerima error 403 saat mencoba mengakses\n titik akhir XMLRPC situs Anda. Aplikasi ini memerlukannya agar dapat berkomunikasi dengan situs Anda. Hubungi host Anda untuk mengatasi\n masalah ini.
- Ada beberapa masalah saat mengirim email. Anda dapat mencoba lagi sekarang atau menutupnya dan mencoba lagi nanti.
- Atau:
- Umum
- \@%s
- Login dengan nama pengguna Anda.
- Login dengan memasukkan alamat situs Anda.
- Kirimi saya kode baru.
- Kami mengirimkan SMS ke nomor ponsel yang berakhiran %s. Masukkan kode verifikasi yang tercantum di SMS tersebut.
- Untuk melanjutkan dengan akun Google ini, silakan masukkan kata sandi WordPress.com yang sesuai. Tindakan ini hanya akan ditanyakan satu kali.
- Login ke WordPress.com untuk membagikan konten.
- Masukkan alamat situs WordPress tempat Anda ingin membagikan konten.
- Error saat membuka perambah web asal. Pilih aplikasi lainnya:
- Tidak bisa membuka tautan
+ Masukkan kata sandi
Masukkan nama pengguna
+ Login ke WordPress.com untuk membagikan konten.
Login ke WordPress.com untuk mengakses pos.
Error saat menambahkan situs. Kode error: %s
Memeriksa alamat situs
@@ -3533,15 +3535,25 @@ Language: id
Apa alamat situs saya?
Perlu bantuan untuk menemukan alamat situs Anda?
Alamat situs
+ Masukkan alamat situs WordPress tempat Anda ingin membagikan konten.
\@%s
Sudah login ke WordPress.com
Lanjutkan
+ Hubungkan situs
Hubungkan Situs Lainnya
+ Untuk melanjutkan dengan akun Google ini, silakan masukkan kata sandi WordPress.com yang sesuai. Tindakan ini hanya akan ditanyakan satu kali.
Masukkan kata sandi WordPress.com Anda.
+ Saat ini tidak tersedia. Masukkan kata sandi Anda
Meminta email login
Sepertinya kata sandi ini salah. Periksa lagi informasi Anda dan coba lagi.
Meminta kode verifikasi melalui SMS.
+ Kirimi saya kode baru.
Kirimi saya kode saja.
+ Kami mengirimkan SMS ke nomor ponsel yang berakhiran %s. Masukkan kode verifikasi yang tercantum di SMS tersebut.
+ Hampir selesai! Masukkan kode verifikasi untuk WordPress.com dari aplikasi pengautentikasi.
+ Login dengan nama pengguna Anda.
+ Login dengan memasukkan alamat situs Anda.
+ Atau:
Buka email
Selanjutnya
Kelola situs Anda yang didukung oleh Jetpack di mana saja — WordPress selalu ada di saku Anda.
@@ -3549,39 +3561,29 @@ Language: id
Dapatkan kabar terbaru dari situs favorit Anda dan bergabung dalam percakapan di mana pun, kapan pun.
Lihat pembaca dari seluruh dunia membaca dan berinteraksi dengan situs Anda, secara real-time.
Publikasikan dari taman. Tulis blog dari bus. Beri komentar dari kafe. WordPress ada di mana pun Anda berada.
- Anda sudah login ke akun WordPress.com, Anda tidak dapat menambahkan situs WordPress.com yang terikat ke akun lain.
- Coba lagi
- Keluar
- Kirim tautan
- Saat ini tidak tersedia. Masukkan kata sandi Anda
- Proses masuk
+ Login
+ Bantuan
+ Kata sandi
+ Nama pengguna
Sebaiknya masukkan kata sandi Anda
- Alamat email
- Rincian
- Urungkan
+ Kirim tautan
Kode verifikasi tidak valid
Kode verifikasi
- Bantuan
- Batal
- Nama pengguna
- Kata sandi
- Tanpa judul
- Pengaturan
- Hari ini
- Batal
- Login
+ Alamat email
Dukungan WooCommerce Android %s
pilihan tidak dicentang
pilihan dicentang
Kebijakan Pihak Ketiga
Kebijakan Cookie
Kebijakan Privasi
+ Dibuat dengan penuh cinta oleh Automattic. %1$s
Kami menggunakan alat pelacakan lainnya, termasuk beberapa dari pihak ketiga. Baca tentang hal ini dan cara mengontrolnya.
Baca kebijakan privasi
Informasi ini membantu kami menyempurnakan produk, membuat pemasaran kepada Anda jadi lebih relevan, menyesuaikan pengalaman WooCommerce Anda, dan lainnya seperti yang dijelaskan dalam kebijakan privasi kami
Berbagi informasi dengan alat analitik kami tentang penggunaan layanan Anda saat sudah login ke akun WordPress Anda
Kumpulkan informasi
Pengaturan privasi
+ Pengaturan
Status pesanan
Dana dikembalikan
Dibatalkan
@@ -3595,6 +3597,7 @@ Language: id
Tambahkan
Kirim catatan kepada pelanggan lewat email
Error saat mengubah pesanan
+ Terjadi error saat mengambil catatan
Pesanan Ditandai Selesai
Tandai Pesanan Selesai
Tambahkan catatan pesanan
@@ -3603,6 +3606,7 @@ Language: id
Tampilkan Tagihan
Pembayaran Beres
Catatan Pesanan
+ Pribadi
Tulis catatan pesanan
Gambar profil pelanggan
Catatan yang Diberikan Pelanggan
@@ -3627,6 +3631,8 @@ Language: id
Tidak Ada Pesanan
Lihat Pesanan
Lihat Pesanan
+ Tidak ada aktivitas dalam periode ini
+ Total pesanan: %s
Gambar error
Error saat mengambil data
Pendapatan
@@ -3640,11 +3646,17 @@ Language: id
Tidak ada toko WooCommerce
Foto profil Anda
Toko yang terhubung
+ Baca %1$sinstruksi konfigurasi%2$s.
Aplikasi ini memerlukan Jetpack agar dapat terhubung ke toko Anda.
+ \@%s
+ Masukkan alamat toko WooCommerce yang ingin dihubungkan.
Login dengan alamat email akun WordPress.com Anda untuk mengelola toko WooCommerce.
+ Anda sudah login ke akun WordPress.com, Anda tidak dapat menambahkan situs WordPress.com yang terikat ke akun lain.
+ Tidak bisa membuka tautan
Tidak ada aplikasi SMS
Tidak ada aplikasi email
Tidak ada aplikasi telepon
+ Error saat membuka perambah web asal. Pilih aplikasi lainnya:
Tidak bisa membuka tautan
%1$s di %2$s
Lebih dari satu bulan
@@ -3653,15 +3665,22 @@ Language: id
Kemarin
Hari Ini
Produk
+ Batal
Tahun Ini
Bulan Ini
Minggu Ini
+ Hari ini
Produk
Jaringan Anda tidak tersedia. Periksa koneksi data atau Wi-Fi Anda.
Offline u2014 menggunakan data cache
Pelajari Selengkapnya
+ Batal
+ Tanpa judul
Lanjutkan
+ Urungkan
+ Coba lagi
Sembunyikan Detail
+ Rincian
Diskon
Subtotal
Pajak
@@ -3672,17 +3691,11 @@ Language: id
%1$s%2$s
Pesanan
Toko saya
+ Keluar
+ Proses masuk
Semua
+ Umum
WooCommerce
- Dibuat dengan penuh cinta oleh Automattic. %1$s
- Masukkan alamat toko WooCommerce yang ingin dihubungkan.
- Pribadi
- Hubungkan situs
- Tidak ada aktivitas dalam periode ini
- Total pesanan: %s
- Terjadi error saat mengambil catatan
- Baca %1$sinstruksi konfigurasi%2$s.
- Hampir selesai! Masukkan kode verifikasi untuk WordPress.com dari aplikasi pengautentikasi.
- @string/date_timeframe_custom
- @string/date_timeframe_today
diff --git a/WooCommerce/src/main/res/values-it/strings.xml b/WooCommerce/src/main/res/values-it/strings.xml
index b26a7265e8a..a1510402922 100644
--- a/WooCommerce/src/main/res/values-it/strings.xml
+++ b/WooCommerce/src/main/res/values-it/strings.xml
@@ -1,14 +1,31 @@
+ Errore nel caricamento delle varianti
+ \"Impossibile caricare altri articoli. Riprova\".
+ Indietro
+ %1$d varianti
+ Variante %s, prezzo %s
+ Prodotto variabile %s, prezzo %s
+ La descrizione non può essere vuota
+ Invito all\'azione
+ Lo slogan non può essere vuoto
+ Assicurati che la tua e-mail sia corretta e controlla la cartella dello spam.
+ Non riusciamo a trovare un account WordPress.com collegato a questo nome utente. Puoi inserire un\'e-mail per creare un nuovo account.
+ Inserisci un codice a barre o qualsiasi altro identificatore univoco in questo prodotto. Può aiutarti a elencare questo prodotto su altri canali o marketplace.
+ GTIN, UPC, EAN, ISBN
+ ULTIMO VERSAMENTO
+ Dopo aver acquistato un\'etichetta, contrassegna questo ordine come completato e invia una notifica al cliente.
+ Se non hai un account, useremo questa e-mail per crearne uno.
Busta
Confezione
Aggiungi pacchetto
+ Salvalo come nuovo template di pacchetto
Altezza
Larghezza
Lunghezza
@@ -20,7 +37,6 @@ Language: it
Pianifica ritiro
Traccia spedizione
Scopri come stampare dal tuo dispositivo mobile
- Salvalo come nuovo template di pacchetto
Nota: il riutilizzo di un\'etichetta stampata viola i nostri termini di servizio e può comportare una denuncia penale.
Da qui puoi stampare di nuovo l\'etichetta di spedizione o cambiare il formato carta per l\'etichetta.
La tua etichetta di spedizione è pronta per la stampa
@@ -30,7 +46,6 @@ Language: it
Più economico
Acquista etichetta
Acquista etichetta · %1$s
- Contrassegna questo ordine come completato e invia una notifica al cliente
Costo spedizione
Dettagli ordine
Dettagli spedizione
@@ -40,8 +55,8 @@ Language: it
Stai spedendo beni pericolosi o materiale nocivo?
Comprimi/espandi la scheda degli articoli
%1$s · %2$s
- No
Ordinamento per 1%s
+ No
Salva la mia selezione per le campagne future
<b>Ottimo per:</b> %s
Seleziona obiettivo %s
@@ -96,14 +111,14 @@ Language: it
Sfondo oscurato. Tocca per ignorare la finestra di dialogo.
%1$s settimanali
Esegui fino a nuova interruzione
+ In corso dal giorno %1$s
+ spesa settimanale
%1$s settimanali a partire dal giorno %2$s
Settimanale
Rimanente
Totale
Click-through
Il tuo dispositivo è in modalità Risparmio batteria. \nNon possiamo fornirti le informazioni sul tuo negozio quando questa impostazione è attivata
- In corso dal giorno %1$s
- spesa settimanale
Menu popup con opzioni. Scorri per navigare tra gli elementi.
Apri il menu della barra degli strumenti
Barra degli strumenti con lo stato del lettore delle carte Il menu è aperto. Tocca due volte per interagire.
@@ -135,13 +150,13 @@ Language: it
Nuovo ordine
OK
+ Crea un ordine nella gestione del negozio
+ Per ricevere il pagamento di un prodotto non semplice, esci da POS e crea un nuovo ordire dalla scheda degli ordini.
Perché non riesco a visualizzare i miei prodotti?
Informazioni
Chiudi
+ Scopri di più
Al momento solo i prodotti fisici semplici sono compatibili con POS. Altri tipi di prodotti, come quelli variabili e quelli virtuali, saranno disponibili in seguito a futuri aggiornamenti.
Visualizzazione dei soli prodotti semplici
- Per ricevere il pagamento di un prodotto non semplice, esci da POS e crea un nuovo ordire dalla scheda degli ordini.
- Scopri di più
Indirizzo del sito
Google per WooCommerce
Aggiungi campagna a pagamento
@@ -151,12 +166,12 @@ Language: it
La tua nuova campagna è stata creata. Grandi notizie per le tue vendite.
Tutto pronto!
Impossibile creare l\'ordine
+ Riprova
Icona che indica un errore
Vuoi fare un altro tentativo?
Errore durante il caricamento dei prodotti
Il punto vendita al momento supporta solo prodotti semplici
Il punto vendita al momento supporta solo prodotti semplici: \ncreane uno per iniziare.
- Riprova
Nessun prodotto supportato trovato
Nessun prodotto
Richiedi assistenza
@@ -228,8 +243,8 @@ Language: it
Nome, riepilogo e descrizione
Puoi modificare o rigenerare i dettagli del prodotto prima di salvarli.
Programmi
- Nessun programma in questo periodo
Campagne Google
+ Nessun programma in questo periodo
Connettiti ora
Carrello
Genera dettagli del prodotto
@@ -240,23 +255,23 @@ Language: it
Lascia generare a noi i dettagli del prodotto
Ricevi pagamenti con carta
Totale
+ Imposte
Subtotale
Pagamento avvenuto correttamente
Pagamento non riuscito. Riprova.
Icona della carta
Prodotti
+ %d elemento
+ Cancella
Aumenta le vendite e genera più traffico con Google Ads
Google per WooCommerce
Nessuna regola sulla quantità
- %d elemento
- Cancella
- Imposte
Pubblico
Annulla
+ Esci
Esci da POS
- Pagamento
Rimuovi %s dal carrello
- Esci
+ Pagamento
Stato del lettore sconosciuto
Pagamento
Lettore connesso
@@ -286,13 +301,13 @@ Language: it
Hai ancora bisogno di aiuto? Contattaci
Impossibile caricare il report sull\'utilizzo dei coupon
Nessun coupon utilizzato in questo periodo
+ Visualizza tutti i codici promozionali
Usi
+ Codici promozionali
Magazzino
Visualizza tutti i messaggi
Impossibile caricare i prodotti più venduti
N/D
- Visualizza tutti i codici promozionali
- Codici promozionali
Resto dovuto
Contanti ricevuti
Codici promozionali più attivi
@@ -324,8 +339,8 @@ Language: it
Nascondi %s
Completata
Feedback
- Non possiamo visualizzare il tuo\n analisi del negozio
Assicurati di disporre della versione più recente di WooCommerce sul tuo sito e di aver attivato Analisi WooCommerce.
+ Non possiamo visualizzare il tuo\n analisi del negozio
Visualizza tutte le attività
L\'analisi delle sessioni si basa su un numero unico di visitatori non disponibile per intervalli di date personalizzati
Dati della sessione non disponibili
@@ -338,11 +353,11 @@ Language: it
Annulla
Esci comunque
Sembra che tu non abbia ancora approvato la connessione dell\'app. Desideri uscire?
+ Seleziona un\'immagine con una dimensione minima di 400x400 pixel
Immagine non valida
Sembra che il nome utente o la password inseriti non corrispondano. Controlla di nuovo le credenziali e riprova.
Se i dati non vengono ancora caricati, contatta il nostro team di supporto.
Nessun problema di connessione
- Seleziona un\'immagine con una dimensione minima di 400x400 pixel
Torna alla schermata precedente
Riprova la connessione
Connessione al tuo sito
@@ -373,9 +388,9 @@ Language: it
Pacchetti venduti
Campagne Blaze
Prodotti più venduti
+ Vuoi davvero eliminare le modifiche apportate a questo prodotto?
Stai per annullare le modifiche a %s
La funzione statistiche non supporta la visualizzazione dei dati sui visitatori e sulle conversioni per intervalli di date arbitrari.\n\nTuttavia, puoi toccare un valore sul grafico per visualizzare i visitatori e le conversioni per quell\'intervallo specifico.
- Vuoi davvero eliminare le modifiche apportate a questo prodotto?
Dati sui visitatori e sulle conversioni non disponibili
Gestisci il tuo abbonamento
Abbonamenti
@@ -396,6 +411,7 @@ Language: it
Suggerimenti
Inserisci un dominio
Scegli un dominio
+ Visualizza tutte le analisi del negozio
Annuale
Mensile
Settimanale
@@ -405,7 +421,6 @@ Language: it
Collega un altro negozio
Creare un altro negozio?
Nome del negozio
- Visualizza tutte le analisi del negozio
Attendi…
Aggiornamento dello stato delle scorte
Si è verificato un problema. Riprova.
@@ -436,17 +451,17 @@ Language: it
Errore nel cestinare l\'ordine
Ordine cestinato
Sembra che ci sia un problema con il tuo sito.\n\nContatta il tuo provider di hosting per ulteriore assistenza.
- Sembra non ci sia connessione a Internet.\n\nAssicurati che il Wi-Fi sia acceso. Se stai utilizzando i dati mobili, accertati che siano abilitati nelle impostazioni del dispositivo.
Sembra esserci un problema con la connessione Jetpack.\n\nMa non preoccuparti, il nostro team di supporto è qui per aiutarti. Contattaci e saremo lieti di assisterti.
Sembra che non sia possibile lavorare correttamente con la risposta del sito.\n\nMa non preoccuparti, il nostro team di supporto è qui per aiutarti. Contattaci e saremo lieti di assisterti.
Sembra che il tuo sito stia impiegando troppo tempo per rispondere.\n\nContatta il tuo provider di hosting per ulteriore assistenza.
+ Sembra non ci sia connessione a Internet.\n\nAssicurati che il Wi-Fi sia acceso. Se stai utilizzando i dati mobili, accertati che siano abilitati nelle impostazioni del dispositivo.
+ Prodotto non selezionato
Continua a leggere
Contatta il supporto
- Connessione Internet
- Prodotto non selezionato
- Aggiungi statistiche sugli intervalli di date personalizzate
Recupero degli ordini del sito
Connessione ai server di WordPress.com
+ Connessione Internet
+ Aggiungi statistiche sugli intervalli di date personalizzate
Non è stata trovata alcuna posizione.\nRiprova.
Visualizzazioni della pagina delle sessioni
Tipo di dispositivo
@@ -512,28 +527,30 @@ Language: it
URL del prodotto
Parametri URL
URL di destinazione
- Inizia a digitare il Paese, lo Stato o la città per visualizzare le opzioni disponibili
- Facendo clic su \"Invia campagna\" accetti i <a href=\'termsOfService\'><u>Termini di servizio</u></a> e la <a href=\'advertisingPolicy\'><u>Politica sulla pubblicità</u></a> e autorizzi gli addebiti tramite il tuo metodo di pagamento per il budget e la durata scelti. <a href=\'learnMore\'><u>Scopri di più</u></a> sui budget e sui pagamenti per il lavoro legato ad Articoli promossi.
Inserisci manualmente
Ricerca non riuscita.\nRiprova
+ Inizia a digitare il Paese, lo Stato o la città per visualizzare le opzioni disponibili
+ Facendo clic su \"Invia campagna\" accetti i <a href=\'termsOfService\'><u>Termini di servizio</u></a> e la <a href=\'advertisingPolicy\'><u>Politica sulla pubblicità</u></a> e autorizzi gli addebiti tramite il tuo metodo di pagamento per il budget e la durata scelti. <a href=\'learnMore\'><u>Scopri di più</u></a> sui budget e sui pagamenti per il lavoro legato ad Articoli promossi.
Invia campagna
+ Il caricamento dei metodi di pagamento non è riuscito, riprova cliccando qui!
Aggiungi un metodo di pagamento
+ Caricamento dei metodi di pagamento
Totale
Campagna Blaze
Totali pagamenti
Pagamento
Cerca posizioni
- Il caricamento dei metodi di pagamento non è riuscito, riprova cliccando qui!
- Caricamento dei metodi di pagamento
Impossibile salvare la ricevuta
Impossibile scaricare la ricevuta
Impossibile individuare un\'applicazione con cui la ricevuta possa essere condivisa
Purtroppo non siamo riusciti a caricare una ricevuta per questo ordine
+ Suggerito dall\'IA
%d caratteri rimanenti
Descrizione
Slogan
Cambia immagine
Applica
+ Data iniziale
%1$s giorni
Le impressioni riflettono la frequenza con cui il tuo annuncio appare ai potenziali clienti.\n\n\n Anche se i numeri esatti non possono essere garantiti a causa delle fluttuazioni del traffico online e del comportamento degli utenti, il nostro obiettivo è far avvicinare il più possibile le impressioni effettive del tuo annuncio al numero di destinatari.\n\n\n Ricorda, le impressioni riguardano la visibilità, non l\'azione intrapresa dai visitatori.
Fatto
@@ -545,9 +562,7 @@ Language: it
per %1$s giorni
Imposta il tuo budget
Tutti
- Suggerito dall\'IA
%1$s giorni da %2$s
- Data iniziale
Non mostrare più
Ricordamelo più tardi
Hai un minuto? Aiutaci a migliorare le nostre funzionalità assistite dall\'intelligenza artificiale con un rapido feedback.
@@ -559,37 +574,35 @@ Language: it
Lingua
Budget
Dettagli
- Acquista ora
- Anteprima
Modifica annuncio
+ Anteprima
Disabilitato
Selezione prodotto
Seleziona prodotto %s
<b>Pubblica</b>: guarda come inizia la tua promozione e tieni traccia del suo successo.
+ <b>Breve riassunto:</b> invia il tuo annuncio per un controllo veloce da parte del moderatore.
<b>Imposta il tuo budget:</b> decidi i costi e la durata della tua campagna.
<b>Personalizza il targeting:</b> seleziona il pubblico in base alla posizione o agli interessi e visualizza la portata potenziale.
<b>Scegli un prodotto:</b> scegli cosa promuovere con Blaze.
- <b>Breve riassunto:</b> invia il tuo annuncio per un controllo veloce da parte del moderatore.
Gestisci magazzino
Magazzino non gestito
+ Scopri come funziona Blaze
Avvia la tua campagna
- Raggiungi un ampio pubblico
- Raggiungere tutto il mondo non è mai stato così facile
I tuoi annunci su milioni di siti web nelle reti WordPress.com e Tumblr.
+ Raggiungi un ampio pubblico
\"Il nostro strumento presenta il tuo prodotto dove gli acquirenti interessati possono trovarlo\".
- Scopri come funziona Blaze
+ Raggiungere tutto il mondo non è mai stato così facile
Lancia annunci in pochi minuti, senza bisogno di esperienza o di grandi budget, a partire da soli $ 5 al giorno.
Avvio rapido, grande impatto
+ Il nostro strumento è stato progettato per consentire ai venditori di impostare annunci semplici e veloci per incrementare al massimo il traffico.
Promuovi
Tutto pronto per promuovere
Mostra i tuoi prodotti a milioni di persone
Usa %1$s
- ULTIMO ACCONTO
Espandi comprimi totali ordini
Ricevi pagamenti
Il codice dovrebbe essere nel formato XXXX-XXXX-XXXX-XXXX
Inserisci codice
- Il nostro strumento è stato progettato per consentire ai venditori di impostare annunci semplici e veloci per incrementare al massimo il traffico.
Codici promozionali
Impossibile caricare i temi.
Configurazione completata
@@ -662,45 +675,45 @@ Language: it
Messaggio di ringraziamento
Nota: per attivare questa impostazione, l\'abbonamento non deve avere un periodo di prova o una data di rinnovo sincronizzata.
Attiva questa opzione per addebitare la spedizione solo una volta sull\'ordine iniziale.
+ Attivata
Spedizione singola
Documenti e altri file sul dispositivo
- Attivata
✨Crea messaggio di ringraziamento
Addebita imposte
- I fondi disponibili vengono depositati automaticamente, ogni %s.
- I fondi disponibili vengono depositati automaticamente, ogni giorno.
- I fondi saranno disponibili dopo un periodo di attesa di %d giorni.
+ I fondi disponibili vengono versati automaticamente, ogni %s.
+ I fondi disponibili vengono versati automaticamente, ogni giorno.
+ I fondi saranno disponibili dopo un periodo di attesa di %d giorni.
+ Seleziona una variante
+ Scegli variante
\" %1$s \" -> %2$s
+ seleziona una variante
%1$s elementi selezionati
%1$s elemento selezionato
Seleziona %1$s
- Seleziona una variante
- seleziona una variante
più di %1$s elementi
più di %1$s elemento
meno di %1$s elementi
tra %1$s e %2$s elementi
%d elementi
%d elemento
- Scegli variante
Cambia la quantità del prodotto da %1$.2f a %2$.2f
+ Salva configurazione
Configurazione
Prodotto %s
Configura
- Prodotto in abbonamento variabile
- Prodotto in abbonamento semplice
- Salva configurazione
Facoltativamente, la commissione di iscrizione verrà addebitata immediatamente, anche se il prodotto ha una prova gratuita o le date di pagamento sono sincronizzate.
Abbonamento a un prodotto con varianti
+ Prodotto in abbonamento variabile
Un unico abbonamento al prodotto che attiva pagamenti ricorrenti
+ Prodotto in abbonamento semplice
Un periodo di attesa opzionale prima dell\'addebito del primo pagamento ricorrente. Eventuali commissioni di iscrizione saranno comunque addebitate all\'inizio dell\'abbonamento. Il periodo di prova non può superare: 90 giorni, 52 settimane, 24 mesi o 5 anni.
Periodo di prova dell\'abbonamento
Scadenza dell\'abbonamento
- PRODOTTO
IMPORTI PERSONALIZZATI
TOTALI PAGAMENTI
NOTE ORDINE
PRODOTTI
+ PRODOTTO
CLIENTE
Fornisci una chiave di sicurezza per continuare.
Si è verificato un errore con l\'accesso alla chiave di sicurezza
@@ -708,21 +721,21 @@ Language: it
Periodo
Intervallo di fatturazione
Offerta
- Sconosciuto
- Non riuscito
- Annullato
- In transito
- In sospeso
- Pagato
- Stimato
- Comprimi/espandi il riepilogo dell\'acconto
- Scopri di più su quando riceverai i fondi
- Fondi in sospeso
- Fondi disponibili
- Prodotti
+ Sconosciuto
+ Non riuscito
+ Annullato
+ In transito
+ In sospeso
+ Pagato
+ Stimato
+ Comprimi/espandi il riepilogo del versamento
+ Scopri di più su quando riceverai i fondi
+ I fondi disponibili vengono versati automaticamente, ogni mese il giorno %s.
+ I fondi saranno disponibili dopo un periodo di attesa di %d giorno.
+ Fondi in sospeso
+ Fondi disponibili
Imposte
- I fondi disponibili vengono depositati automaticamente, ogni mese il giorno %s.
- I fondi saranno disponibili dopo un periodo di attesa di %d giorno.
+ Prodotti
Totali pagamenti
Indirizzo e-mail o nome utente
Impossibile creare un ordine con importo personalizzato
@@ -773,17 +786,17 @@ Language: it
In moderazione
Crea la campagna
Aumenta la visibilità e vendi i tuoi prodotti rapidamente.
+ Campagna Blaze
Il simbolo del contactless è un marchio registrato di proprietà e utilizzato su concessione di EMVCo, LLC.
5. Dopo aver visualizzato il segno di spunta \"Fatto\", il negozio elaborerà il pagamento e la transazione verrà completata.
- Campagna Blaze
3. Sempre tenendo il tuo telefono in mano, rivolgilo verso il cliente.
2. Tocca \"Ricevi pagamenti\" e scegli \"Tocca per pagare\".
+ 1. Crea un ordine
Come funziona
Scopri di più sui lettori di carte
Per accettare pagamenti superiori a questo limite, potresti acquistare un lettore di carte che accetta l\'inserimento del PIN.
Non supportiamo l\'inserimento del PIN con Tocca per pagare su Android.
%1$s - In questo Paese, alcune carte richiedono il PIN per le transazioni superiori a %2$s.
- 1. Crea un ordine
Informazioni importanti
Tocca per pagare ti consente di accettare tutti i tipi di pagamento contactless: dalle carte di credito e di debito fisiche ai portafogli digitali. Tutto senza il bisogno di acquistare un lettore di carte fisico.
Che cos\'è Tocca per pagare?
@@ -827,18 +840,18 @@ Language: it
Aggiungi questa aliquota a tutti gli ordini creati
Modifica le aliquote d\'imposta
Modifica le aliquote d\'imposta nella pagina dell\'amministratore
- Impossibile trovare le aliquote d\'imposta
- Metodi di pagamento
Aggiungi le aliquote d\'imposta nella pagina dell\'amministratore. Qui verranno visualizzate solo le aliquote d\'imposta con le informazioni sulla posizione.
+ Impossibile trovare le aliquote d\'imposta
Scopri altri fornitori di servizi di pagamento e \nscegline uno.
+ Metodi di pagamento
Immagini e video sul dispositivo
Risolvi ora
Completa la configurazione
Imposta l\'aliquota d\'imposta
- Imposta la nuova aliquota d\'imposta
Attiva
- Configura
+ Imposta la nuova aliquota d\'imposta
WooPayments
+ Configura
Modifica le aliquote d\'imposta nella pagina dell\'amministratore
Questa azione modificherà l\'indirizzo del cliente nella località dell\'aliquota d\'imposta selezionata.
Pulsante che apre la finestra di dialogo delle informazioni sulle aliquote d\'imposta
@@ -886,8 +899,8 @@ Language: it
Totale ordine
Percentuale calcolata
Importo calcolato
- La personalizzazione del nome del negozio può anche agevolarne l\'ottimizzazione per i motori di ricerca.
Nome del negozio
+ La personalizzazione del nome del negozio può anche agevolarne l\'ottimizzazione per i motori di ricerca.
Dai un nome al tuo negozio
Abilita NFC
Pacchetti di fornitura di piccole quantità (marcature richieste)
@@ -915,18 +928,18 @@ Language: it
Classe 4 - Pacchetto (solidi infiammabili)
Classe 3 - Pacchetto (igienizzante per mani, alcol disinfettante, prodotti a base di etanolo, liquidi infiammabili, ecc.)
Classe 1 - Pacchetto di propellente per razzi/fusibile di sicurezza
- OK
Pacchetto di etanolo conforme alle prescrizioni per il volo - (spedizioni di fragranze e di igienizzanti per mani autorizzati)
+ OK
I materiali potenzialmente pericolosi includono articoli come batterie, ghiaccio secco, liquidi infiammabili, aerosol, munizioni, fuochi d\'artificio, smalto per unghie, profumi, vernici, solventi e altro ancora. I materiali pericolosi devono essere spediti in pacchi separati.
Contiene materiali pericolosi
Inserisci il titolo del prodotto.
La piattaforma di eCommerce che cresce con te
Abbonamento variabile
+ Rimuovi codice promozionale
Tutti amano un\'offerta
Non hai ancora creato nessun codice promozionale. Crea un codice promozionale per applicarlo a questo ordine.
Vai ai codici promozionali
Seleziona un codice promozionale
- Rimuovi codice promozionale
Impossibile creare il codice promozionale
Codice promozionale creato
Crea
@@ -939,6 +952,8 @@ Language: it
Sconto fisso sul prodotto
Sconto fisso sul carrello
Sconto in percentuale
+ Tipo di codice promozionale - Prodotto fisso
+ Tipo di codice promozionale - Carrello fisso
Tipo di codice promozionale - Sconto percentuale
Crea codice promozionale
Aggiungi codice promozionale
@@ -952,8 +967,6 @@ Language: it
Esegui un ordine di prova per assicurarti che il processo WooCommerce offra un\'esperienza cliente fluida
Aggiungi dettagli manualmente
Cerca clienti per
- Tipo di codice promozionale - Prodotto fisso
- Tipo di codice promozionale - Carrello fisso
Altro motivo (specificare)
Faccio parte di una team e la decisione va presa insieme a tutti i membri.
Trovo che il prezzo del servizio sia un fattore significativo nella mia decisione.
@@ -962,12 +975,12 @@ Language: it
Aiutaci a capire le tue decisioni relative all\'abbonamento. Il tuo feedback è importante.
Nessun indirizzo e-mail
Nessun nome
+ Cerca un cliente esistente o
Ultimo aggiornamento: %s (aggiornamenti ogni 30 minuti)
Ultimo aggiornamento: %s
- Cerca un cliente esistente o
+ <a href=\'\'>Scopri di più</a> sull\'accettazione di pagamenti con Tocca per pagare su Android
Ricevi pagamenti
Impossibile aggiungere prodotti senza un prezzo specificato
- <a href=\'\'>Scopri di più</a> sull\'accettazione di pagamenti con Tocca per pagare su Android
Impossibile aggiungere i prodotti che non sono stati pubblicati
aggiungi il cliente
Vai su Impostazioni
@@ -1031,18 +1044,19 @@ Language: it
Impossibile generare il messaggio per la condivisione. Riprova.
Scopri di più sulla funzionalità dell\'IA
Aggiungi un messaggio opzionale
+ Scrittura…
Scrivi con l\'IA
Promuovi i prodotti con Blaze
Blaze
Generatore di contenuti IA disponibile
Promuovi con Blaze
- Scrittura…
Condividi prodotto
Complimenti. Il nuovo negozio è ora più vicino.
Primo prodotto creato 🎉
Il sistema ha terminato l\'app Woo mentre era in esecuzione in background. Puoi provare a usarla di nuovo.
Il sistema ha terminato l\'app Woo mentre era in esecuzione in background. Puoi provare a usarla di nuovo.
La scheda è stata rimossa troppo presto
+ Prodotto con varianti
La nostra politica sui cookie spiega l\'uso che noi e altri facciamo dei cookie e come puoi gestirli.
Informativa sui cookie
Le tue informazioni ci aiutano a migliorare i nostri prodotti, il marketing e a personalizzare la tua esperienza su WooCommerce.
@@ -1054,7 +1068,6 @@ Language: it
Analytics
Gestisci la privacy
La privacy è di fondamentale importanza per noi e lo è sempre stata. Usiamo, archiviamo ed elaboriamo i dati personali per ottimizzare la nostra app (e la tua esperienza) in vari modi. Alcuni usi dei dati sono assolutamente necessari per un corretto funzionamento e altri puoi personalizzarli dalle Impostazioni.
- Prodotto con varianti
Per aiutarci a migliorare le prestazioni dell\'app e correggere bug occasionali, attiva il rapporto di arresto anomalo.
Segnala arresti anomali
Rapporti
@@ -1063,6 +1076,7 @@ Language: it
Privacy
Scopri di più sui dati che raccogliamo sul tuo negozio e sulle tue opzioni per il controllo di questa condivisione dei dati.
Tracciabilità dell\'utilizzo
+ Ulteriori opzioni per la privacy sono disponibili per gli utenti di woocommerce.com. Controlla qui per saperne di più.
Opinioni del web
Ulteriori opzioni per la privacy
Si è verificato un errore durante l\'aggiornamento delle impostazioni sulla privacy
@@ -1075,7 +1089,6 @@ Language: it
Non è possibile aggiungere direttamente il prodotto variabile. Seleziona una variante specifica
Scansione non riuscita. Riprova più tardi
Impossibile trovare il prodotto con SKU %s. Impossibile aggiungere all\'ordine
- Ulteriori opzioni per la privacy sono disponibili per gli utenti di woocommerce.com. Controlla qui per saperne di più.
Scansione non riuscita. Riprova più tardi
Scansiona codice a barre
La spedizione in Paesi che seguono le regole doganali dell\'Unione europea (UE) ora richiede la descrizione chiara di ogni elemento. Ad esempio, se stai inviando capi di vestiario, devi indicare il tipo di abbigliamento (come camicie da uomo, gilet da ragazza, giacca da ragazzo) affinché la descrizione sia accettabile. In caso contrario, le spedizioni potrebbero subire dei ritardi o essere fermate alla dogana.
@@ -1099,16 +1112,16 @@ Language: it
Aggiungi i prodotti tramite scanner
Ignora
Scopri di più
+ Quando spedisci in Paesi che seguono le norme doganali dell\'Unione europea (UE), devi fornire una descrizione chiara e specifica per ogni elemento. In caso contrario, le spedizioni potrebbero subire dei ritardi o essere fermate alla dogana.
Resta aggiornato e aumenta la sicurezza del negozio. Esplora Jetpack ora.
Ricevi notifiche sugli ordini e altro ancora
- Quando spedisci in Paesi che seguono le norme doganali dell\'Unione europea (UE), devi fornire una descrizione chiara e specifica per ogni elemento. In caso contrario, le spedizioni potrebbero subire dei ritardi o essere fermate alla dogana.
Mostra o nascondi l\'elenco delle impostazioni del negozio
Elenco delle impostazioni del negozio
+ Puoi ripristinarlo quando lo necessiti da Menu > Impostazioni > Negozio
Nascondi l\'elenco delle impostazioni del negozio
Nascondi l\'elenco delle impostazioni del negozio
Visualizza ordine
Il pagamento di Tocca per pagare di prova è stato rimborsato correttamente
- Puoi ripristinarlo quando lo necessiti da Menu > Impostazioni > Negozio
Rimborso non riuscito. Prova a eseguire manualmente il rimborso
Rimborso del pagamento di prova in corso…
Continuando, accetti i nostri <a href=\'termsOfService\'><u>Termini di servizio.</u></a>
@@ -1195,14 +1208,14 @@ Language: it
Abbonamento
Il lettore di carte accetta pagamenti contactless, chip e tramite strisciata con carte di debito e di credito.
Accetta in modo sicuro pagamenti contactless direttamente dal tuo telefono.
+ Usa il telefono per accettare i pagamenti\ncon carta. Prova ora.
+ Condividi il feedback
Impossibile accedere perché la creazione della password dell\'applicazione non è stata approvata.
Sito in caricamento…
- Condividi il feedback
- Usa il telefono per accettare i pagamenti\ncon carta. Prova ora.
- Caricamento in corso…
Si è verificato un errore durante il recupero del sito web
Riprova con la pagina Bacheca
Accedi
+ Caricamento in corso…
Terminato il %s
Il tuo abbonamento è scaduto e hai un accesso limitato a tutte le funzionalità.
%1$d giorni
@@ -1217,11 +1230,13 @@ Language: it
Errore durante il recupero dei dettagli del piano.
Ora sei un abbonato %1$s. Hai accesso a tutte le nostre funzionalità fino al giorno %2$s.
La tua prova gratuita è terminata e hai accesso limitato a tutte le funzionalità. Abbonati a %1$s ora.
+ Stai utilizzando il periodo di prova di %1$d giorni. La prova gratuita terminerà il %2$s. Esegui l\'upgrade per sbloccare nuove funzionalità e mantenere attivo il tuo negozio.
Stato dell\'abbonamento
Risoluzione dei problemi
Attuale: %s
Segnala il problema con l\'abbonamento
Aggiorna ora
+ %1$s rimasti nella tua prova.
Prova terminata
La tua prova è terminata.
Ops, si sono verificati alcuni errori imprevisti.
@@ -1237,8 +1252,6 @@ Language: it
Pubblica il mio negozio
Per lanciare il tuo negozio, hai bisogno di eseguire l\'aggiornamento al nostro piano. <u>Aggiorna</u>
Cerca domini
- Stai utilizzando il periodo di prova di %1$d giorni. La prova gratuita terminerà il %2$s. Esegui l\'upgrade per sbloccare nuove funzionalità e mantenere attivo il tuo negozio.
- %1$s rimasti nella tua prova.
Accesso non riuscito con codice dello stato %1$s
Impossibile accedere perché non possiamo identificare l\'URL di amministrazione del negozio
Impossibile accedere perché non possiamo identificare l\'URL di accesso del negozio
@@ -1286,31 +1299,31 @@ Language: it
Recupero dello stato di Jetpack
Si è verificato un problema. Riprova più tardi.
Prova un pagamento
- Registrazione del nome di dominio in corso…
- Seleziona il Paese
- Seleziona uno stato
Ricevi pagamenti con carta\ncon il tuo telefono
Tocca per pagare
AZIONI
Si è verificato un errore durante la registrazione del dominio
- Telefono
- Prefisso internazionale
- Paese
- Indirizzo
- Indirizzo 2
- Città
- Stato
- Stato (non disponibile)
- CAP
+ Seleziona uno stato
+ Seleziona il Paese
+ Registrazione del nome di dominio in corso…
Registra dominio
- Per agevolarti, abbiamo precompilato le tue informazioni di contatto\n di WordPress.com. Rileggi per verificare che le informazioni che desideri utilizzare per questo dominio siano corrette.
+ CAP
+ Stato (non disponibile)
+ Stato
+ Città
+ Indirizzo 2
+ Indirizzo
+ Paese
+ Prefisso internazionale
+ Telefono
Organizzazione (opzionale)
- I proprietari del dominio devono condividere le informazioni di contatto in un database pubblico di tutti i domini.\n Con la Protezione della privacy, pubblichiamo le nostre informazioni al posto delle tue e ti inoltriamo privatamente qualsiasi comunicazione.
- Registrando questo dominio accetti i nostri %1$sterme e le nostre condizioni%2$s
- Per %s, inserisci un valore valido
- Registra privatamente con protezione della privacy
- Registra pubblicamente
+ Per agevolarti, abbiamo precompilato le tue informazioni di contatto\n di WordPress.com. Rileggi per verificare che le informazioni che desideri utilizzare per questo dominio siano corrette.
Informazioni di contatto per il dominio
+ Registra pubblicamente
+ Registra privatamente con protezione della privacy
+ Per %s, inserisci un valore valido
+ Registrando questo dominio accetti i nostri %1$sterme e le nostre condizioni%2$s
+ I proprietari del dominio devono condividere le informazioni di contatto in un database pubblico di tutti i domini.\n Con la Protezione della privacy, pubblichiamo le nostre informazioni al posto delle tue e ti inoltriamo privatamente qualsiasi comunicazione.
Protezione della privacy
Solo gli amministratori del negozio possono accedere alle impostazioni del dominio
In alternativa, continua a usare il Link
@@ -1318,10 +1331,10 @@ Language: it
Inserisci la password del tuo account WordPress.com per connettere Jetpack
Accedi con il tuo account WordPress.com per installare Jetpack
Accedi con il tuo account WordPress.com per connettere Jetpack
+ Puoi trovare le impostazioni del dominio in Impostazioni -> Domini
L\'indirizzo del tuo sito è in fase di configurazione. Potrebbero essere necessari fino a 30 minuti prima che il tuo dominio inizi a funzionare.
Congratulazioni per il tuo acquisto
Gratis per il primo anno
- Puoi trovare le impostazioni del dominio in Impostazioni -> Domini
Vuoi davvero uscire dal tuo account?
Impossibile caricare i domini del sito
%1$d/%2$d completato
@@ -1369,19 +1382,19 @@ Language: it
L\'operazione non richiederà molto tempo
Preparazione del lettore integrato…
Il lettore integrato è pronto
+ Lettore di carte
Tocca per pagare
Tasso di conversione
Sessioni
Nessuna sessione in questo periodo
Confrontato con
Dominio
- Lettore di carte
Dove si trovano le Password applicazione?
Sembra che la funzione Password applicazione sia disabilitata nel tuo sito %1$s.\n Abilitalo all\'uso dell\'app WooCommerce.
Apri la pagina di installazione
- Rispondi
- Risposta inviata!
Si è verificato un errore durante l\'invio della risposta
+ Risposta inviata!
+ Rispondi
Seleziona tutto
Aggiorna prezzo
Aggiorna stato
@@ -1392,17 +1405,17 @@ Language: it
Sono già generate tutte le varianti.
Nessuna variante generata
Seleziona più elementi
+ Nessun dominio disponibile per questa ricerca
Generazione delle varianti
Questo creerà una nuova variazione per ogni possibile combinazione degli attributi di variazione (%1$d varianti).
Generare tutte le varianti?
Attualmente la creazione è supportata per un massimo di %1$d varianti. La generazione delle varianti per il prodotto creerà %2$d varianti.
Limite di generazione superato
Crea le variant per tutte le combinazioni degli attributi.
+ Genera tutte le varianti
Crea una nuova variante. Impostare manualmente quali attributi appartengono al prodotto variabile.
Aggiungi nuova variante
Aggiungi variazione
- Genera tutte le varianti
- Nessun dominio disponibile per questa ricerca
Esci senza connessione
Continua connessione
Prova a connetterti di nuovo per accedere al tuo negozio.
@@ -1414,6 +1427,7 @@ Language: it
Prova di nuovo l\'attivazione
Prova di nuovo l\'installazione
Ottieni assistenza
+ Riprova e contatta il supporto se l\'errore persiste.
Si è verificato un errore durante la comunicazione con il sito.
Non disponi dell\'autorizzazione per gestire i plugin in questo negozio
Errore di autorizzazione della connessione a Jetpack
@@ -1437,7 +1451,6 @@ Language: it
Installazione di Jetpack
Accedi a <b>%1$s</b> con le credenziali del tuo negozio per connetterti a Jetpack.
Accedi a <b>%1$s</b> con le credenziali del tuo negozio per installare Jetpack.
- Riprova e contatta il supporto se l\'errore persiste.
Prepara le credenziali del negozio.
Connetti il negozio a Jetpack per permetterne l\'accesso su questa app.
Installa il plugin Jetpack gratuito per accedere al negozio su questa app.
@@ -1450,8 +1463,8 @@ Language: it
Aggiorna il lettore di carte simulato
Collega Jetpack
Collega negozio
- Visitatori
Ecco dove gli utenti ti troveranno su Internet. Non preoccuparti. Puoi cambiarlo più tardi.
+ Visitatori
In alternativa, accedi con la password
Il lettore di carte simulato è stato disattivato
Chiave del lettore simulato
@@ -1488,12 +1501,12 @@ Language: it
Prova con un altro indirizzo
Intervallo di date personalizzato
Personalizza
+ Cos\'è WordPress.com?
Creazione di un nuovo account
Scegli una password
Il tuo indirizzo e-mail
Crea il tuo sito \nin pochi minuti
Toccando il pulsante Configura Jetpack, accetti i nostri <a href=\'terms\'>Termini di servizio</a> e la <a href=\'sync\'>condivisione delle informazioni</a> con WordPress.com.
- Cos\'è WordPress.com?
Attiva il lettore di carte simulato
Contatta il proprietario del sito per un invito al sito come gestore del negozio o amministratore per utilizzare l\'app.
Connessione a un sito WordPress.com
@@ -1514,8 +1527,8 @@ Language: it
Analisi del negozio non disponibile! Esegui l\'aggiornament all\'ultima versione di WooCommerce per visualizzare le analisi del tuo negozio.
La rete non è disponibile.\nControlla la connessione dati o WiFi.
Accedi all\'app WooCommerce
- Verifica della connessione a Jetpack…
Recupero dei dati della connessione non riuscito…
+ Verifica della connessione a Jetpack…
Impossibile verificare la connessione a Jetpack. Riprova.
Il sito %1$s dispone attualmente di un piano WordPress.com che non supporta l\'installazione di plugin. Aggiorna il tuo piano per utilizzare WooCommerce.
Sembra che l\'account non sia connesso a Jetpack di %1$s
@@ -1533,43 +1546,44 @@ Language: it
Prima volta in WooCommerce
Si è verificato un errore, contatta il supporto
Inserisci un indirizzo del sito
- Non ricordi la password?
Richiedi un link di accesso via e-mail
+ Non ricordi la password?
Abbiamo notato che non hai ancora completato la configurazione dei Pagamenti di persona. <a href=\'\'>Continua con la configurazione</a>
- WC Admin
- Accesso con l\'indirizzo del negozio
- Altri siti
- Pagamenti dalla scheda Menu
- Ora puoi accedere rapidamente e con facilità ai Pagamenti di persona e ad altre funzionalità
- OK!
Pagamenti
+ OK!
+ Ora puoi accedere rapidamente e con facilità ai Pagamenti di persona e ad altre funzionalità
+ Pagamenti dalla scheda Menu
L\'e-mail non è utilizzata con un account WordPress.com.
- Accedi con le credenziali del sito
- Ti abbiamo appena inviato un link magico al tuo indirizzo e-mail. Tocca il link nell\'e-mail per accedere.
- Accedi con il link magico
- Usa la password per accedere
- Controlla la tua e-mail su questo dispositivo!
+ Altri siti
+ Accesso con l\'indirizzo del negozio
+ WC Admin
Abbiamo appena inviato un link magico a
- Configura ora
- Suggerimento
- Cosa ti porta in WooCommerce?
- Sto solo dando un\'occhiata
- Tentativo di configurazione di un negozio
- Controlla le mie analisi
- Crea o aggiorna i miei prodotti
- Gestisci i miei ordini
- Passa a un negozio all\'altro
- %1$s non è un sito WooCommerce.
- Installa WooCommerce
- Contrassegna\ncompletato
- Ordine #%1$d contrassegnato come completo
- Errore durante l\'aggiornamento dell\'ordine #%1$d
- Inizia a vendere di persona in meno di 20 minuti con il nostro lettore di carte.
- Aumenta le tue vendite con i prodotti collegati
+ Controlla la tua e-mail su questo dispositivo!
+ Usa la password per accedere
+ Accedi con il link magico
+ Ti abbiamo appena inviato un link magico al tuo indirizzo e-mail. Tocca il link nell\'e-mail per accedere.
+ Accedi con le credenziali del sito
Offri ai tuoi clienti consigli utili e pertinenti sui prodotti sommando upsell e cross-sell
+ Aumenta le tue vendite con i prodotti collegati
+ Inizia a vendere di persona in meno di 20 minuti con il nostro lettore di carte.
+ Errore durante l\'aggiornamento dell\'ordine #%1$d
+ Ordine #%1$d contrassegnato come completo
+ Contrassegna\ncompletato
+ Installa WooCommerce
+ %1$s non è un sito WooCommerce.
+ Passa a un negozio all\'altro
+ Gestisci i miei ordini
+ Crea o aggiorna i miei prodotti
+ Controlla le mie analisi
+ Tentativo di configurazione di un negozio
+ Sto solo dando un\'occhiata
+ Cosa ti porta in WooCommerce?
+ Suggerimento
+ Configura ora
Iniziamo!
Accedi con WordPress.com
Contatta il supporto
+ Accedi con il tuo account WordPress.com
Ricevi aiuto!
Problemi con l\'accesso?
COD
@@ -1591,7 +1605,6 @@ Language: it
Puoi gestirli rapidamente e facilmente
Sappiamo che è essenziale per la tua attività
Prima volta in WooCommerce
- Accedi con il tuo account WordPress.com
Nuovo ordine pari a $ 50 nel tuo negozio WooCommerce
Hai un nuovo ordine. 🎉
i dettagli
@@ -1600,10 +1613,10 @@ Language: it
Condividi rapporto dello stato del sistema
Copia il rapporto dello stato del sistema negli appunti
Continua a cercare
+ Pagamento di persona per l\'ordine #%1$s per %2$s blog_id %3$s.
Cambia fornitore dei pagamenti
Rimborsato: %1$s
In attesa di pagamento
- Pagamento di persona per l\'ordine #%1$s per %2$s blog_id %3$s.
Procedere con l\'installazione
Cosa da sapere prima dell\'installazione
Installa estensione
@@ -1625,8 +1638,8 @@ Language: it
bloccato
Per modificare Dettagli di pagamento o i Prodotti, modifica lo stato in Pagamento in sospeso.
Le parti di questo ordine non sono al momento modificabili
- Nessun cliente trovato
Cerca clienti
+ Nessun cliente trovato
Non ora
Aggiungi estensione al negozio
Cos\'è WooCommerce Shipping?
@@ -1661,6 +1674,8 @@ Language: it
I prezzi attuali sono misti
Il prezzo attuale è %s
Il prezzo verrà aggiornato per %d varianti
+ Misto
+ Nessuno
Prezzo di vendita
Prezzo standard
Prezzo
@@ -1668,8 +1683,6 @@ Language: it
Aggiornamento in blocco
OK
Aggiornamento in blocco…
- Misto
- Nessuno
Recupero delle varianti in corso…
Ricerca delle categorie di prodotti non riuscita
Caricamento delle categorie di prodotti non riuscito
@@ -1684,10 +1697,11 @@ Language: it
Ottieni WooCommerce Shipping
Stampa etichette dal tuo telefono con WooCommerce Shipping.
Hai bisogno di un\'etichetta di spedizione?
+ Cambia la quantità di prodotto da %1$d a %2$d
Aggiorna al prezzo standard
Aggiorna prezzo di vendita
- Cambia la quantità di prodotto da %1$d a %2$d
Non supportiamo l\'estensione WooCommerce Stripe in %1$s
+ Filtro
Cancella la selezione
Seleziona %d prodotto
Seleziona %d prodotti
@@ -1699,7 +1713,6 @@ Language: it
Attiva questa opzione se il codice promozionale non deve essere applicato agli articoli in offerta. I codici promozionali per prodotto funzionano solo se l\'articolo non è in offerta. I codici promozionali per carrello funzionano solo se nel carrello sono presenti articoli non in offerta.
Escludi elementi in offerta
Attiva questa opzione se il codice promozionale non può essere usato insieme ad altri.
- Filtro
Solo utilizzo individuale
Limite di utilizzo per utente
Limite di utilizzo per X prodotti
@@ -1774,12 +1787,12 @@ Language: it
Prova altri mezzi per eseguire il rimborso
Il rimborso è stato rifiutato per una ragione sconosciuta
Siamo spiacenti, questo rimborso non può essere elaborato
- Copia
Rimborso avvenuto correttamente
Elaborazione del rimborso
Rimborsa il pagamento
Rimborso non riuscito
Preparazione dell\'esecuzione del rimborso del pagamento
+ Copia
Cerca codici promozionali
Impossibile generare il messaggio per la condivisione del codice promozionale
Errore durante la condivisione del codice promozionale.
@@ -1804,9 +1817,18 @@ Language: it
Pagamento: %s
Condividi il link di pagamento
Importo
+ Importo
+ Ordini scontati
+ Prestazioni
+ Spesa massima di %s
+ Spesa minima di %s
+ Riepilogo codice promozionale
Visualizza riepilogo codice promozionale
+ Abbiamo lavorato per rendere possibile la visualizzazione e la modifica dei coupon sul tuo dispositivo!
Visualizza e modifica i codici promozionali
Non è stato trovato alcun codice promozionale
+ %1$s senza %2$s
+ %1$s e %2$s
tutto
Scaduto
Attivo
@@ -1824,15 +1846,6 @@ Language: it
\u2022 una recensione approvata
\u2022 %drecensioni approvate
%1$s (%2$s%%)
- Importo
- Ordini scontati
- Prestazioni
- Spesa massima di %s
- Spesa minima di %s
- Riepilogo codice promozionale
- Abbiamo lavorato per rendere possibile la visualizzazione e la modifica dei coupon sul tuo dispositivo!
- %1$s senza %2$s
- %1$s e %2$s
Abbiamo lavorato per permetterti di creare ordini dal tuo dispositivo. Puoi provare questa funzionalità toccando il pulsante \"+\"
Torna presto per ulteriori suggerimenti e per la panoramica sulla crescita del tuo negozio
Congratulazioni, hai letto tutto.
@@ -1847,20 +1860,20 @@ Language: it
Il servizio XML-RPC è disattivato su questo sito.
Utilizza un\'e-mail non automatica per inviare un ticket di supporto
Non supportiamo gli account Stripe registrati in %1$s
+ Non supportiamo l\'estensione WooCommerce Payments in %1$s
Premi il pulsante di accensione del tuo lettore
Una ricevuta è stata inviata a <strong>%s</strong>
Percentuale (%)
- Non supportiamo l\'estensione WooCommerce Payments in %1$s
Rimuovi la commissione dall\'ordine
Rimuovi la spedizione dall\'ordine
Spedizione
Aggiungi spedizione
Aggiungi spedizione
Nome
+ Importo
Tariffe
Dettagli cliente
Aggiungi l\'imposta
- Importo
Modifica una nota del cliente
Modifica dettagli del cliente
Modifica lo stato dell\'ordine
@@ -1879,10 +1892,10 @@ Language: it
WooCommerce Payments
Gateway stripe WooCommerce
I pagamenti di persona funzioneranno solo con uno dei seguenti plugin attivato. Per continuare, contatta un amministratore del sito per disattivare uno di questi plugin:
- Conflitto con i plugin di pagamento rilevato
- oppure
I pagamenti di persona funzioneranno solo con uno dei seguenti plugin attivato. Per continuare disattiva uno di questi plugin:
+ Conflitto con i plugin di pagamento rilevato
Totale imposte
+ oppure
Installa Jetpack
Pagamenti di persona attualmente non disponibile
Ordine creato
@@ -1953,7 +1966,9 @@ Language: it
Aggiungi un indirizzo di spedizione differente
In magazzino
%s in magazzino
+ Aggiungi prodotti
Prodotti
+ Aggiungi dettagli del cliente
Cliente
Contrassegna come Pagato
Questa azione creerà il tuo ordine e lo contrassegnerà come Pagato se hai ricevuto il pagamento al di fuori di WooCommerce
@@ -1961,8 +1976,6 @@ Language: it
Scegli il tuo metodo di pagamento
Le imposte sono calcolate automaticamente in base all\'indirizzo del negozio.
Imposta (%s%%)
- Aggiungi dettagli del cliente
- Aggiungi prodotti
Ricevi il pagamento%s
Modifica le imposte
Importo personalizzato
@@ -2015,19 +2028,19 @@ Language: it
Filtra stato
Stato
Data di fine
+ Data di inizio
Seleziona le date
Intervallo personalizzato
+ Crea un ordine con informazioni minime
Pagamento facile
+ Crea un nuovo ordine manuale
Crea ordine
Crea ordine
Inserisci quantità
Ricevi il pagamento
Pagamento facile
- Dati analizzati
- Data di inizio
- Crea un ordine con informazioni minime
- Crea un nuovo ordine manuale
Crea ordini dal tuo dispositivo!
+ Dati analizzati
Fatto
Connessione del tuo negozio
Attivazione
@@ -2111,8 +2124,8 @@ Language: it
Rapporto dello stato del sistema
Congratulazioni, ora puoi accettare pagamenti con carte di debito e di credito con WooCommerce Payments.
Ricevi i pagamenti con un lettore di carte
- OK
L\'importo deve essere di almeno %1$s
+ OK
Nuova immagine dell\'icona della funzionalità
Cambia negozio
Aggiornamento del prodotto %1$s non riuscito
@@ -2153,10 +2166,10 @@ Language: it
Impossibile verificare automaticamente l\'indirizzo di spedizione: %s
Impossibile verificare automaticamente l\'indirizzo di origine. Visualizza su Google Maps per assicurarti che l\'indirizzo sia corretto.
Stiamo lavorando per rendere più semplice per te visualizzare i componenti aggiuntivi del prodotto dal dispositivo. Per ora, sarai in grado di visualizzare i componenti aggiuntivi per gli ordini. Puoi creare e modificare questi componenti aggiuntivi nella bacheca web.
- Salva
Visualizza i componenti aggiuntivi dal dispositivo.
Se rinomini un componente aggiuntivo nella tua bacheca web, tieni presente che gli ordini precedenti non mostreranno più quel componente aggiuntivo all\'interno dell\'app.
Visualizza componenti aggiuntivi
+ Salva
Dettagli del caricamento (%d)
Non è stato possibile caricare %d file
Non è stato possibile caricare %d file
@@ -2188,17 +2201,16 @@ Language: it
Pagamenti di persona non è disponibile nella Modalità di prova. Disattivare la funzione per proseguire.
Pagamenti di persona attualmente non disponibile
Ci sono requisiti in sospeso sull\'account. Completa i requisiti tramite %1$s per continuare ad accettare Pagamenti di persona.
+ Il tuo account presenta requisiti in sospeso
C\'è almeno un requisito scaduto sul tuo account. Completalo per riprendere a utilizzare Pagamenti di persona
Pagamenti di persona attualmente non disponibile
Potrai accettare Pagamenti di persona non appena avremo terminato la revisione del tuo account.
- Il tuo account presenta requisiti in sospeso
Pagamenti di persona attualmente non disponibile
Siamo spiacenti, ma non possiamo supportare Pagamenti di persona per questo negozio.
Ricarica dopo l\'aggiornamento
Sul tuo negozio è installata una versione non aggiornata dell\'estensione WooCommerce Payments. Esegui l\'aggiornamento per accettare Pagamenti di persona.
Aggiorna WooCommerce Payments
Ci sei quasi! Completa l\'impostazione di WooCommerce Payments per iniziare ad accettare pagamenti di persona.
- Pagamenti di persona
Completa la configurazione di WooCommerce Payments nella pagina di amministrazione del negozio
Ricarica dopo l\'attivazione
L\'estensione WooCommerce Payments è installata sul tuo negozio, ma non è attivata. Attivala per accettare Pagamenti di persona.
@@ -2209,13 +2221,14 @@ Language: it
<a href=\'\'>Scopri di più</a> sull\'accettazione di pagamenti con il tuo dispositivo mobile e sull\'ordinamento dei lettori di carte
Ti serve aiuto? <a href=\'\'>Contatta il supporto</a>
Puoi comunque accettare pagamenti di persona in contanti attivando il metodo \"Pagamento alla consegna\" sul tuo negozio
+ Non supportiamo Pagamenti di persona con carta in %1$s
Connessione all\'account in corso
+ Pagamenti di persona
Verifica le dimensioni e il peso del pacco oppure prova a utilizzare un pacco diverso in Dettagli pacco
Nessuna tariffa di spedizione disponibile
Tutti i pacchi disponibili sono stati attivati
Attivazione del pacco in corso
Seleziona un pacco da attivare.
- Non supportiamo Pagamenti di persona con carta in %1$s
Campo obbligatorio
Chiudi
Variante creata
@@ -2224,11 +2237,11 @@ Language: it
Genera variante
Ora che hai aggiunto gli attributi, puoi creare la tua prima variante.
Attributi creati
+ %1$s%% completato
Non è raccomandato l\'annullamento dell\'aggiornamento del software in corso
Siamo spiacenti, impossibile elaborare questo pagamento
Nessuna connessione al server
Nessuna connessione a Internet
- %1$s%% completato
Spedisci nel pacchetto originale
Aggiungi a un nuovo pacchetto
Questo elemento è attualmente in %s. Dove vorresti spostarlo?
@@ -2239,6 +2252,7 @@ Language: it
Creazione del pacchetto non riuscita. Riprova.
Creazione del pacchetto non riuscita: problema API sconosciuto.
Creazione del pacchetto non riuscita: %1$s
+ Attendi…
Creazione di un nuovo pacchetto
Valore non valido.
Campo richiesto.
@@ -2252,11 +2266,10 @@ Language: it
Confezione
Scegli tipo di pacchetto
Tipo di pacchetto
+ Configura il pacchetto che utilizzerai per spedire i tuoi prodotti. Lo salveremo per ordini futuri.
Aggiungi un nuovo pacchetto
Crea un nuovo pacchetto
Le dimensioni del pacchetto devono essere superiori a zero. Aggiorna le dimensioni dell\'elemento nella sezione Spedizione della pagina del prodotto per continuare.
- Attendi…
- Configura il pacchetto che utilizzerai per spedire i tuoi prodotti. Lo salveremo per ordini futuri.
Pacchetto originale
Dimensioni dell\'elemento
Elemento spedito singolarmente
@@ -2269,11 +2282,11 @@ Language: it
Il controllo dell\'aggiornamento della versione del software non è riuscito
<a href=\'\'>Scopri di più</a> sull\'accettazione di pagamenti con dispositivi mobili e sulla possibilità di ordinare lettori di carte
Attiva il bluetooth
+ Nessun lettore connesso
Impossibile connettersi al lettore
Connetti
Sono stati trovati più lettori
L\'ordine è già stato pagato
- Nessun lettore connesso
Grazie per l’acquisto! Fai clic sul link qui sotto per la ricevuta di pagamento.\n\n%s
Errore durante il download del modulo doganale
Stampa fattura doganale
@@ -2289,11 +2302,12 @@ Language: it
Aggiungi prodotto
Attributi della variante
Attiva il Bluetooth del dispositivo mobile
+ Errore durante il recupero dell\'ordine. Lo stato nell\'ordine dell\'app potrebbe essere obsoleto.
La tua ricevuta da %s
Aggiornamento dell\'ordine
Aggiornamento dello stato dell\'app
Il cliente ha scelto %1$s
- Errore durante il recupero dell\'ordine. Lo stato nell\'ordine dell\'app potrebbe essere obsoleto.
+ I moduli dei clienti richiedono un numero di telefono a 10 cifre
Modulo dei clienti completato
Se riscontri problemi con la stampa dal tuo dispositivo, contatta l\'assistenza clienti per la tua stampante.
Se la stampa non è disponibile, puoi sempre salvare la ricevuta come PDF e inviarla via e-mail per stamparla da un altro dispositivo.
@@ -2306,7 +2320,6 @@ Language: it
Per creare una variante, dovrai prima impostare i suoi attributi (ad esempio \"Colore\", \"Dimensione\")
1 variante
%1$s varianti
- I moduli dei clienti richiedono un numero di telefono a 10 cifre
Tracciabilità USPS
Aggiornamento del software del lettore
Aggiornamento del software
@@ -2317,6 +2330,7 @@ Language: it
Aggiorna il software del lettore
Batteria %s%%
LETTORE CONNESSO
+ Connetti il lettore di carte
Accendi il lettore di carte e posizionalo accanto al dispositivo mobile
Assicurati che il lettore di carte sia carico
Connetti il tuo lettore di carte
@@ -2325,6 +2339,7 @@ Language: it
Preparazione alla ricezione del pagamento
Il valore dichiarato deve essere maggiore di zero
Il peso deve essere maggiore di zero
+ Questo campo è richiesto
Descrivi che tipo di restrizioni deve avere questo pacchetto.
Descrivi che tipo di beni contiene questo pacchetto.
Peso (%1$s per unità)
@@ -2348,6 +2363,7 @@ Language: it
Descrizione
Contenuto del pacchetto
Il numero di transizione interno è richiesto per la spedizione a %1$s.
+ Il numero di transizione interno è richiesto per gli articoli della spedizione valutati più di $ 2.500 per numero di tariffa
Formato non valido
Dettagli sulla restrizione
Dettagli sui contenuti
@@ -2355,9 +2371,6 @@ Language: it
Tipo di contenuti
Restituisci al mittente se non è possibile consegnare il pacchetto
fino a %s
- Connetti il lettore di carte
- Questo campo è richiesto
- Il numero di transizione interno è richiesto per gli articoli della spedizione valutati più di $ 2.500 per numero di tariffa
Se hai abilitato questa impostazione, il cliente riceverà un\'e-mail di conferma una volta completato l\'ordine
Rivedi l\'ordine
🎉 Ordine completato.
@@ -2366,9 +2379,9 @@ Language: it
Scopri di più sui ruoli e sulle autorizzazioni
Quest\'app supporta solo i ruoli utente di Amministratore e Gestore negozio. Contatta il proprietario del negozio per aggiornare il tuo ruolo.
Modifica e aggiungi nuovi prodotti da qualsiasi luogo
- Salta
Gestisci e modifica gli ordini in movimento
Tieni traccia delle vendite e dei prodotti che performano meglio
+ Salta
Prodotto esterno
Prodotto raggruppato
Prodotto variabile
@@ -2377,6 +2390,9 @@ Language: it
Prodotto fisico semplice
Apri le impostazioni
Apri le impostazioni
+ Il Bluetooth è disabilitato
+ La posizione è disabilitata
+ Autorizzazione della posizione richiesta mancante precisa
Impossibile connettersi al lettore.
Connessione al lettore
Connetti al lettore
@@ -2384,10 +2400,9 @@ Language: it
Ricerca di lettori
Conteggio articoli
Crea nuova etichetta di spedizione
- Il Bluetooth è disabilitato
- La posizione è disabilitata
- Autorizzazione della posizione richiesta mancante precisa
+ Prodotto virtuale semplice
Desideri eliminare questa variante?
+ Generazione della variante
Eliminazione del prodotto
Invia ricevuta
Stampa ricevuta
@@ -2401,8 +2416,6 @@ Language: it
Impossibile visualizzare in anteprima l\'etichetta di spedizione. Installa un\'app per la visualizzazione del PDF e riprova.
Non siamo in grado di rilevare un sito WordPress all\'indirizzo inserito. Assicurati che WordPress sia installato e di disporre dell\'ultima versione disponibile.
più righe di spedizione
- Prodotto virtuale semplice
- Generazione della variante
Impossibile contrassegnare l\'ordine come completato
Errore durante l\'acquisto delle etichette
Attendi…
@@ -2431,17 +2444,18 @@ Language: it
Solo il proprietario del sito può gestire i metodi di pagamento dell\'etichetta di spedizione. Contatta il proprietario del negozio %1$s (%2$s) per gestire i metodi di pagamento.
Aggiungi varianti
Aggiungi variante
+ Crea la prima variante
%s totali
%s tariffe selezionate
Idoneo per il requisito della firma gratuita
Idoneo per il ritiro gratuito
+ Assicurazione (%s)
+ tracciabilità
Includi %s
Firma di un adulto richiesta (%s)
Firma richiesta (%s)
- Assicurazione (%s)
- tracciabilità
Il cliente ha pagato %1$s di %2$s per la spedizione
- Crea la prima variante
+ Quando acquisti le etichette di spedizione tramite WooCommerce, ottieni dal 5% 25 al 40% 25 di sconto rispetto alle tariffe degli uffici postali.
Cos\'è lo sconto di WooCommerce Services?
Si è verificato un errore durante il caricamento delle opzioni di spedizione
Corrieri e tariffe
@@ -2459,7 +2473,6 @@ Language: it
Aggiungi ogni nome dell\'opzione e premi Invio
In alternativa, tocca per selezionare un\'opzione esistente
Nome opzione
- Quando acquisti le etichette di spedizione tramite WooCommerce, ottieni dal 5% 25 al 40% 25 di sconto rispetto alle tariffe degli uffici postali.
Errore durante il salvataggio delle impostazioni
Attendi…
Salvataggio delle impostazioni
@@ -2482,15 +2495,18 @@ Language: it
Aggiungi attributo
Attributi
Modifica attributi
+ Peso totale dei pacchi: %1$s %2$s
%1$d articoli in %2$d pacchetti
Peso del pacchetto totale: %1$s %2$s
Pacchetti personalizzati
Impossibile recuperare i prodotti
+ Alcuni campi richiesti sono vuoti.
Peso non valido
Pacchetto selezionato
Attendi…
Caricamento dei pacchetti.
Pacchetto %1$d
+ %d elementi
Impossibile caricare le definizioni dei pacchetti
Include il peso del pacchetto
Peso del pacchetto totale: %1$s
@@ -2503,17 +2519,16 @@ Language: it
Abbiamo leggermente modificato l\'indirizzo inserito. Se è corretto, usa l\'indirizzo inserito per garantire una consegna accurata.
Modifica indirizzo selezionato
Usa l\'indirizzo selezionato
- Alcuni campi richiesti sono vuoti.
- %d elementi
- Peso totale dei pacchi: %1$s %2$s
Caricamento dei dati dell\'indirizzo
Nuove funzionalità disponibili.
+ Trova sulla mappa
Contatta cliente
Strada non valida
Numero civico mancante
Indirizzo non trovato
Impossibile verificare automaticamente l\'indirizzo di spedizione. Visualizzalo su Google Maps o prova a contattare il cliente per assicurarti che l\'indirizzo sia corretto.
Convalida dell\'indirizzo non riuscita
+ Attendi…
Convalida dell\'indirizzo in corso
Impossibile caricare i dati dell\'indirizzo
Usa l\'indirizzo inserito
@@ -2524,8 +2539,6 @@ Language: it
Telefono
Società
Nome
- Attendi…
- Trova sulla mappa
App di Google Maps trovata
Attendi…
Siamo spiacenti, la rimozione delle immagini sulle varianti dei prodotti è supportata in WooCommerce 4.7 o versione superiore.
@@ -2541,30 +2554,31 @@ Language: it
Dettagli imballaggio
Crea etichetta di spedizione
Ulteriori informazioni
+ Evita la fila all\'ufficio postale stampando le etichette di spedizione a casa dal tuo dispositivo mobile a prezzi scontati.
Risparmia tempo e denaro con WooCommerce Shipping
WooCommerce Shipping
Contrassegna ordine come completo
+ Scopri di più su come creare etichette dal dispositivo mobile
Crea etichetta di spedizione
- Crea etichette di spedizione dal tuo dispositivo.
Ora puoi creare etichette di spedizione per tutti gli ordini fisici direttamente dal tuo dispositivo con il plugin WooCommerce Shipping gratuito. Tocca \"Crea etichetta di spedizione\" per provare la funzionalità beta.
- Evita la fila all\'ufficio postale stampando le etichette di spedizione a casa dal tuo dispositivo mobile a prezzi scontati.
- Scopri di più su come creare etichette dal dispositivo mobile
- Modifica
+ Crea etichette di spedizione dal tuo dispositivo.
Tariffe
Importo di pagamento netto
Pagato
Scopri di più su come connettere Jetpack
+ Modifica
Convalida
Trascina e rilascia per riordinare le foto
- Elimina
Impostazioni download
Inserisci un nome valido
Inserisci URL file
+ Libreria multimediale WordPress
Verifica che l\'URL inserito sia valido
Attendi…
Caricamento file
Errore durante il caricamento del file
Aggiungi file scaricabile
+ Aggiungi file scaricabile da
Includi i file scaricabili con gli acquisti
Annulla
Sì, modifica
@@ -2573,6 +2587,7 @@ Language: it
File
Desideri rimuovere questo file?
Prodotto scaricabile
+ Elimina
Scadenza download
Limite di download
Inserisci il numero di giorni prima della scadenza di un link di download oppure lascia vuoto il campo se non scade mai
@@ -2587,13 +2602,11 @@ Language: it
Potrebbe essere necessario <b>configurare la stampa Wi-Fi direttamente sulla stampante stessa</b>. Assicurati che il firmware della stampante sia aggiornato e consulta la documentazione della stampante per le istruzioni.
Puoi selezionare il <b> servizio di stampa predefinito</b> del dispositivo oppure installare l\'<b>app della stampante </b> (dovrebbe apparire come opzione consigliata)
Assicurati che stampante e dispositivo siano collegati alla <b>stessa rete Wi-Fi</b>
- Libreria multimediale WordPress
- Aggiungi file scaricabile da
+ Prova la nuova funzionalità di creazione di prodotti semplici, collegati e raggruppati mentre ci prepariamo al lancio
Incrementa le vendite con upsell e cross-sell
Modifica prodotti
Aggiungi prodotti
Prodotti promossi nel carrello quando viene selezionato il prodotto corrente
- Prova la nuova funzionalità di creazione di prodotti semplici, collegati e raggruppati mentre ci prepariamo al lancio
Cross-sell
Prodotti promossi al posto del prodotto attualmente visualizzato (ossia i prodotti più redditizi)
Up-sell
@@ -2601,6 +2614,7 @@ Language: it
%1$s%2$s x %3$s
Ottieni un link di accesso tramite e-mail
Hmm, non riusciamo a trovare un account di WordPress.com collegato a questo indirizzo e-mail.
+ Prova a visualizzare i componenti aggiuntivi per gli ordini mentre ci prepariamo a lanciarli
Creazione di prodotti
Preferenze
Errore durante lo spostamento nel cestino del prodotto
@@ -2612,25 +2626,24 @@ Language: it
L\'aggiunta delle opzioni come dimensioni e colore è attualmente disponibile solo sul web. Queste verranno visualizzate come opzioni sulla pagina del prodotto del tuo sito.
Crea nuovi prodotti dall\'app!
Prodotto non trovato
+ Se stai ancora riscontrando problemi di stampa dal tuo dispositivo, puoi <b>salvare la tua etichetta come PDF</b> e inviarla via e-mail per stamparla da un altro dispositivo.
+ Dopo aver selezionato <b>\"Stampa le etichette di spedizione\"</b>, potrebbe essere necessario selezionare e aggiungere una stampante se non hai stampato da questo dispositivo prima.
Opzioni formato etichetta
+ Stampa dal dispositivo
Etichetta (4 x 6 pollici)
Lettera (8,5 x 11 pollici)
Nota legale (8,5 x 14 pollici)
Errore visualizzazione etichetta di spedizione
+ Non sai come stampare dal dispositivo mobile?
Visualizza il layout dell\'etichetta e le opzioni delle dimensioni del foglio
Stampa etichetta di spedizione
Scegli dimensione carta
Dimensione carta
+ Se hai già utilizzato l\'etichetta in un pacchetto, stamparla e utilizzarla di nuovo è una violazione dei nostri termini di servizio.
Si è verificato un errore di stampa durante l\'acquisto dell\'etichetta, puoi stamparla nuovamente.
Stiamo lavorando per rendere più semplice per te stampare le etichette di spedizione direttamente dal dispositivo. Per ora, se hai creato etichette di spedizione per questo ordine nell\'amministrazione del negozio con WooCommerce Shipping, puoi stamparle nei Dettagli dell\'ordine qui.
Stampa etichette di spedizione dal dispositivo.
- Stampa dal dispositivo
- Se hai già utilizzato l\'etichetta in un pacchetto, stamparla e utilizzarla di nuovo è una violazione dei nostri termini di servizio.
- Se stai ancora riscontrando problemi di stampa dal tuo dispositivo, puoi <b>salvare la tua etichetta come PDF</b> e inviarla via e-mail per stamparla da un altro dispositivo.
- Dopo aver selezionato <b>\"Stampa le etichette di spedizione\"</b>, potrebbe essere necessario selezionare e aggiungere una stampante se non hai stampato da questo dispositivo prima.
Stampa etichetta di spedizione
- Prova a visualizzare i componenti aggiuntivi per gli ordini mentre ci prepariamo a lanciarli
- Non sai come stampare dal dispositivo mobile?
\u0022%1$s\u0022
Bozza prodotto salvata
Errore durante il salvataggio della bozza del prodotto
@@ -2678,12 +2691,12 @@ Language: it
Accedi con un altro account
Seleziona il negozio da connettere
Continua con WordPress.com
+ Un prodotto con varianti come colore o misura
%d prodotto selezionato
%d prodotti selezionati
Aggiungi i prodotti al gruppo
Aggiungi prodotto
Inserisci una password
- Un prodotto con varianti come colore o misura
Torna al negozio
Contattaci qui
Tieni presente che questo non è un ticket di supporto e non saremo in grado di rispondere a feedback individuali.\n\nTi serve aiuto? %1$s
@@ -2708,8 +2721,8 @@ Language: it
Nessun prezzo impostato
Abilitata
Devi impostare il prezzo di vendita se è pianificata una vendita
- %1$s ha lasciato una recensione
Ora puoi modificare i prodotti variabili, esterni e raggruppati, puoi cambiare il tipo di prodotto e aggiornare categorie e tag.
+ %1$s ha lasciato una recensione
Mi piace
Potrebbe essere migliore
Ti piace l\'app WooCommerce?
@@ -2718,24 +2731,24 @@ Language: it
Si è verificato un errore durante l\'aggiunta di tag
Aggiunta di tag
Il rimborso è in fase di elaborazione. Attendi…
+ Richiesta di rimborso inviata correttamente
Rimborsa etichetta (-%1$s)
Importo idoneo al rimborso
Data di acquisto
+ Puoi richiedere un rimborso per un\'etichetta di spedizione non utilizzata per spedire un pacchetto. L\'elaborazione richiederà almeno 14 giorni.
Richiedi un rimborso
Rimborsa etichetta di spedizione
- Puoi richiedere un rimborso per un\'etichetta di spedizione non utilizzata per spedire un pacchetto. L\'elaborazione richiederà almeno 14 giorni.
- Richiesta di rimborso inviata correttamente
Bene fisico
Un breve estratto sul tuo prodotto
Rendi i tuoi prodotti più semplici da trovare con i tag
Organizza i tuoi prodotti in gruppi correlati
- Disabilitata
Aggiungi peso e dimensioni
Aggiungi altri dettagli
Organizza i tuoi prodotti in tag
Aggiungi il tuo primo tag
Tag
Aggiungi tag
+ Disabilitata
Prodotto virtuale
Aggiungi altri dettagli
%1$s prodotto
@@ -2743,7 +2756,9 @@ Language: it
%s prodotto
Prodotti rimanenti
%1$s \u2022 %2$s
+ Rimborso dell\'etichetta %1$s richiesto
Traccia spedizione
+ %1$s\n%2$s
Nascondi dettagli spedizione
Mostra dettagli spedizione
Carta di credito
@@ -2753,8 +2768,6 @@ Language: it
Spedisci a
Spedisci da
Pacco %d
- %1$s\n%2$s
- Rimborso dell\'etichetta %1$s richiesto
SKU: %1$s
%1$s (%2$s opzioni)
Etichette di spedizione
@@ -2775,12 +2788,12 @@ Language: it
Nota sulla privacy per utenti in California
Mantieni le modifiche
Fino al giorno %1$s
- Nuove opzioni di modifica disponibili
Abbiamo aggiunto più funzionalità di modifica ai prodotti! Ora puoi aggiornare immagini, vedere anteprime e condividere i prodotti.
+ Nuove opzioni di modifica disponibili
+ Modifica limitata disponibile
Prodotti
%1$s x %2$s
%1$s %2$s
- Modifica limitata disponibile
Esterno
Semplice
Pubblicato privatamente
@@ -2870,11 +2883,11 @@ Language: it
Larghezza
Lunghezza
Prodotti rimborsati
+ %1$s (%2$s x %3$d)
%1$s tramite %2$s
Desideri emettere un rimborso? Questo non può essere annullato.
Prodotti rimborsati
Rimborsi
- %1$s (%2$s x %3$d)
Iscriviti a WordPress.com
Siamo spiacenti, non è stato possibile trovare risultati per \"%s\"
Acquisisci recensioni del prodotto di alta qualità per il tuo negozio
@@ -2895,32 +2908,33 @@ Language: it
Aggiungi inventario
Ricerca dei tuoi ordini in corso…
Inserisci testo
+ Inserisci il titolo del prodotto
+ Prodotto salvato
Errore durante l\'aggiornamento del prodotto
Attendi…
Descrivi il tuo prodotto
Descrizione
Modifica descrizione
- Inserisci il titolo del prodotto
- Prodotto salvato
- Fatto
Desideri eliminare queste modifiche?
Aggiorna
+ Fatto
Rimborso in corso, attendi…
Rimborsa spedizione
Seleziona quantità
Rimborso spedizione
Rimborso prodotti
+ %1$s x %2$s ciascuno
%d elementi selezionati
Non selezionare nessuno
Seleziona tutto
In attesa della conferma del rimborso…
- %1$s x %2$s ciascuno
Ridimensiona e comprimi le immagini per un caricamento più rapido
Ottimizzazione delle immagini
Scatta una foto
Scegli da dispositivo
Seleziona un metodo di caricamento
Carica
+ Caricamento delle immagini in corso…%1$d di %2$d
Caricamento delle immagini in corso…
Impossibile accedere alla fotocamera
Desideri rimuovere questa immagine?
@@ -2935,7 +2949,6 @@ Language: it
Aggiungi immagine
In arrivo
Rimuovi
- Caricamento delle immagini in corso…%1$d di %2$d
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.
Non siamo stati in grado di accedere al tuo sito perché viene richiesta l\'<b>autenticazione HTTP</b>. Dovrai contattare il tuo fornitore di hosting per risolvere questo problema.
@@ -2944,8 +2957,8 @@ Language: it
Accedi con le credenziali del sito.
Accedi con le credenziali del sito %1$s
Invia e-mail di verifica
- Modifica del prodotto
Testa la nuova funzionalità di modifica del prodotto mentre ci prepariamo a lanciarla
+ Modifica del prodotto
Si è verificato un errore durante il recupero del tuo account. Puoi riprovare ora o chiudere e riprovare più tardi.
Si è verificato un errore. Accedi per continuare
Connessione al tuo sito in corso…
@@ -2980,12 +2993,15 @@ Language: it
Nessun prodotto corrispondente
Ancora nessun prodotto
%s in magazzino
+ \u2022 %d varianti in magazzino
Immagine prodotto
%1$s ha lasciato una recensione per %2$s
Non approvato
Errore durante il recupero della nuova recensione prodotto
Errore durante il recupero delle recensioni prodotto
- \u2022 %d varianti in magazzino
+ Si è verificato un problema con il rimborso. Riprova.
+ Il rimborso è stato emesso correttamente.
+ Il rimborso per %s è in fase di elaborazione. Attendi…
Icona preventivo
Rimborso manuale
Dettagli di rimborso
@@ -3003,9 +3019,6 @@ Language: it
Rimborso %s
Disponibile per il rimborso: %s
Emetti rimborso
- Si è verificato un problema con il rimborso. Riprova.
- Il rimborso è stato emesso correttamente.
- Il rimborso per %s è in fase di elaborazione. Attendi…
%1$s tramite %2$s
Statistiche migliorate
Funzionalità beta
@@ -3019,12 +3032,12 @@ Language: it
Statistiche odierne
Registrati
Hai già Jetpack? %1$s
+ Tentativo di accesso con Jetpack in corso…
aggiorna l\'app per continuare
+ Per usare quest\'app per %1$s dovrai avere il plugin Jetpack impostato e connesso a questo account. \n\nUna volta impostato, aggiorna l\'app
Prova un altro negozio
Database declassato, ricreazione delle tabelle e caricamento dei negozi in corso
Caricamento dei negozi in corso
- Tentativo di accesso con Jetpack in corso…
- Per usare quest\'app per %1$s dovrai avere il plugin Jetpack impostato e connesso a questo account. \n\nUna volta impostato, aggiorna l\'app
Nessun corriere trovato
Inserisci un indirizzo di sito Web completo, come esempio.com.
Ancora nessuna recensione!
@@ -3035,11 +3048,12 @@ Language: it
Impossibile recuperare le impostazioni: alcune API non sono disponibili per questa combinazione di ID app OAuth + account.
Stiamo assumendo.
Copia numero di tracciabilità
- aggiorna l\'app
Verifica per WooCommerce…
+ aggiorna l\'app
Nessun indirizzo specificato
Ti serve aiuto per trovare l\'e-mail con cui ti sei collegato?
Il sito web su questo indirizzo non è un sito WordPress. Per poterci collegare a esso, il sito deve avere WordPress installato.
+ Accedi con WordPress.com per collegarti a <b>%1$s</b>
Zimbabwe
Zambia
Yemen
@@ -3176,7 +3190,6 @@ Language: it
Giamaica
Costa d\'Avorio
Italia
- Accedi con WordPress.com per collegarti a <b>%1$s</b>
Israele
Isola di Man
Irlanda
@@ -3283,15 +3296,24 @@ Language: it
Afghanistan
Isole Åland
Recensione
+ Corriere personalizzato
Personalizza
+ Inserisci il nome di un corriere
Inserisci un numero di tracciabilità
+ Seleziona un corriere
Vuoi davvero eliminare questa tracciabilità?
Impossibile aggiungere la tracciabilità
Tracciabilità della spedizione aggiunta
+ Errore durante il recupero dei corrieri
+ Corriere della spedizione selezionato
+ Corrieri della spedizione
Data di spedizione
Inserisci link di tracciabilità
+ Inserisci il nome del corriere
Inserisci numero di tracciabilità
+ Seleziona il corriere
Link di tracciabilità (opzionale)
+ Nome del corriere
Numero di tracciabilità
Corriere
Aggiungi tracciabilità
@@ -3304,25 +3326,19 @@ Language: it
Traccia spedizione
Nell\'amministrazione del sito puoi trovare l\'e-mail che hai usato per collegarti a WordPress.com dalla %1$sBacheca di Jetpack%2$s sotto %3$sConnessioni > Connessione dell\'account%4$s
Quale e-mail uso per accedere?
+ Hai bisogno di aiuto per trovare l\'e-mail richiesta?
Jetpack è un plugin WordPress gratuito che collega il tuo negozio con gli strumenti necessari per assicurarti la migliore esperienza mobile, incluse le notifiche push e le statistiche
Che cos\'è Jetpack?
Visualizza i negozi collegati
- Continua a modificare
- Corriere personalizzato
- Inserisci il nome di un corriere
- Seleziona un corriere
- Errore durante il recupero dei corrieri
- Corriere della spedizione selezionato
- Corrieri della spedizione
- Inserisci il nome del corriere
- Seleziona il corriere
- Nome del corriere
Sembra che %1$s sia connesso a un account WordPress.com differente.
- Hai bisogno di aiuto per trovare l\'e-mail richiesta?
+ Continua a modificare
Accedi con i tuoi nome utente e password.
Accedi utilizzando il tuo nome utente di WordPress.com invece del tuo indirizzo e-mail.
Il sito a questo indirizzo non è un sito WordPress. Per poterci connettere, il sito deve utilizzare WordPress.
Centro assistenza
+ Virtuale
+ Raggruppato
+ Variabile
Permetti, ma invia notifica al cliente
Permetti
Non permettere
@@ -3330,9 +3346,6 @@ Language: it
Esaurito
In magazzino
Leggi altro
- Raggruppato
- Variabile
- Virtuale
Impossibile caricare le immagini
Bozza
Privato
@@ -3378,11 +3391,11 @@ Language: it
Prova ora
OK
Tocca per passare da un negozio all’altro
+ Seleziona negozio
Esci da questo account
Modifica lo stato dell\'ordine
Fai clic per modificare lo stato dell\'ordine
Applica
- Seleziona negozio
No, grazie
Più tardi
Valuta ora
@@ -3396,11 +3409,11 @@ Language: it
Aggiorna il negozio su WooCommerce 3.5
Impossibile eseguire la connessione a %s
Rimuovi
+ Errore durante il contrassegno di tutte le recensioni come lette
Contrassegna tutte come lette
Messaggio
Chiamata
Chiama o manda un messaggio al cliente
- Errore durante il contrassegno di tutte le recensioni come lette
Errore durante l\'aggiornamento dello stato della recensione del prodotto
Errore durante il caricamento dei dettagli della recensione del prodotto
Cestino
@@ -3413,16 +3426,16 @@ Language: it
Gestisci notifiche
Notifiche
Desideri uscire dall\'account %s?
- Se disabilitata, la nota diventerà privata
Recensione contrassegnata come %1$s
+ Se disabilitata, la nota diventerà privata
Errore durante il recupero dell\'ordine
Indietro
Avvisi delle recensioni del prodotto
Avvisi dei nuovi ordini
Al cliente
+ Verifica del sito in corso…
Aggiorna istruzioni
Ricerca
- Verifica del sito in corso…
Aggiorna
e altre %d.
%d nuove notifiche
@@ -3454,9 +3467,9 @@ Language: it
Rapporti di arresto anomalo
Condividi
Versione %s
- Abbiamo effettuato troppi tentativi di invio di un codice di verifica SMS: prenditi una pausa e richiedine uno nuovo tra un minuto.
- Non è presente alcun account WordPress.com corrispondente a questo account Google.
- Accedi all\'account WordPress.com che hai utilizzato per connettere Jetpack.
+ Password HTTP
+ HTTP nome utente
+ Autorizzazione richiesta
Link inviato
Registrazione via e-mail
Verifica del codice
@@ -3465,9 +3478,32 @@ Language: it
Accesso tramite link
Accesso tramite indirizzo sito
Accesso tramite indirizzo e-mail
- Non hai un account? %1$sRegistrati%2$s
- Registrazione con Google…
+ Si è verificato un errore.
+ Fornisci un codice di autenticazione per continuare.
+ Controlla due volte la tua password per continuare.
+ Accesso interrotto
+ Attendi mentre stai effettuando l\'accesso.
+ Accesso in corso…
+ Tocca per continuare.
+ Accesso effettuato!
+ Si è verificato un errore di rete. Controlla la connessione e riprova.
+ Inserisci un sito web WordPress.com o un sito web WordPress.com ospitato personalmente connesso a Jetpack.
+ Non è possibile connettersi. Abbiamo ricevuto un messaggio di errore 403 durante il tentativo di accedere\n all\'endpoint XMLRPC del tuo sito. Per l\'app questo è necessario per comunicare con il tuo sito. Contatta il tuo host per risolvere\n questo problema.
+ Non è possibile connettersi. Il tuo host sta bloccando le richieste POST ma queste sono necessarie al corretto funzionamento dell\'app\n per comunicare con il tuo sito. Contatta il tuo fornitore del servizio di hosting per risolvere questo problema.
+ Non è possibile connettersi. Sul server mancano i necessari metodi XML-RPC
+ Controlla che l\'URL del sito sia valido
+ Si è verificato un errore
+ Password dimenticata?
+ Inserisci un indirizzo e-mail valido
+ Verifica della email
+ Accedi di nuovo per continuare.
+ Accedi all\'account WordPress.com che hai utilizzato per connettere Jetpack.
+ Impossibile recuperare il profilo
+ È stato rilevato un sito duplicato.
+ Il sito esiste già nell\'app, non lo puoi aggiungere.
+ Il nome utente o la password immessi non sono corretti
Tempo di risposta di Google troppo lungo. Potresti dover attendere fino a quando non disporrai di una connessione Internet più forte.
+ Registrazione con Google…
Registrati con Google
Registrati con l\'e-mail
Registrandoti, accetti i nostri %1$sTermini di servizio%2$s.
@@ -3477,54 +3513,20 @@ Language: it
Si è verificato un errore durante l\'invio dell\'email. Puoi riprovare ora o chiudere e riprovare più tardi.
Per creare il tuo nuovo account WordPress.com, inserisci l\'indirizzo e-mail.
Si è verificato un errore durante il controllo dell\'indirizzo e-mail.
- Si è verificato un errore.
- Fornisci un codice di autenticazione per continuare.
- Controlla due volte la tua password per continuare.
- Accesso interrotto
- Attendi mentre stai effettuando l\'accesso.
- Accesso in corso…
- Tocca per continuare.
- Accesso effettuato!
- Il login tramite Google non può essere inizializzato.
- Inserisci una password
\nPuoi provare un account diverso?
+ Il login tramite Google non può essere inizializzato.
+ Abbiamo effettuato troppi tentativi di invio di un codice di verifica SMS: prenditi una pausa e richiedine uno nuovo tra un minuto.
Si sono verificati dei problemi con la connessione con l’account Google.
+ Non è presente alcun account WordPress.com corrispondente a questo account Google.
Chiudi
Accedi con Google.
- Si è verificato un errore di rete. Controlla la connessione e riprova.
Autenticato come
Impossibile rilevare il client di posta elettronica della tua app
+ Non hai un account? %1$sRegistrati%2$s
Inserisci un codice di verifica
- È stato rilevato un sito duplicato.
- Il sito esiste già nell\'app, non lo puoi aggiungere.
- Non è possibile connettersi. Abbiamo ricevuto un messaggio di errore 403 durante il tentativo di accedere\n all\'endpoint XMLRPC del tuo sito. Per l\'app questo è necessario per comunicare con il tuo sito. Contatta il tuo host per risolvere\n questo problema.
- Non è possibile connettersi. Il tuo host sta bloccando le richieste POST ma queste sono necessarie al corretto funzionamento dell\'app\n per comunicare con il tuo sito. Contatta il tuo fornitore del servizio di hosting per risolvere questo problema.
- Verifica della email
- Non è possibile connettersi. Sul server mancano i necessari metodi XML-RPC
- Impossibile recuperare il profilo
- Accedi di nuovo per continuare.
- Password dimenticata?
- Il nome utente o la password immessi non sono corretti
- Inserisci un indirizzo e-mail valido
- Si è verificato un errore
- Autorizzazione richiesta
- Controlla che l\'URL del sito sia valido
- Password HTTP
- HTTP nome utente
- Inserisci un sito web WordPress.com o un sito web WordPress.com ospitato personalmente connesso a Jetpack.
- In alternativa:
- Generale
- \@%s
- Accedi con il tuo nome utente.
- Accedi inserendo l\'indirizzo del tuo sito.
- Inviami invece un messaggio con un altro codice.
- Abbiamo inviato un messaggio di testo al numero di telefono che termina in %s. Inserisci il codice di verifica contenuto nell\'SMS.
- Per procedere con questo account Google, fornisci la password WordPress.com corrispondente. Verrà richiesta solo una volta.
- Accedi a WordPress.com per condividere il contenuto.
- Immetti l\'indirizzo del tuo sito WordPress sul quale desideri condividere il contenuto.
- Si è verificato un errore durante l\'apertura di un browser web di base. Scegli un\'altra applicazione:
- Impossibile aprire il link
+ Inserisci una password
Inserisci un nome utente
+ Accedi a WordPress.com per condividere il contenuto.
Accedi a WordPress.com per accedere all\'articolo.
Si è verificato un errore durante l\'aggiunta del sito. Codice di errore: %s
Verifica indirizzo sito
@@ -3533,15 +3535,25 @@ Language: it
Qual è l\'indirizzo del mio sito?
Hai bisogno di aiuto per trovare l\'indirizzo del tuo sito?
Indirizzo sito
+ Immetti l\'indirizzo del tuo sito WordPress sul quale desideri condividere il contenuto.
\@%s
Hai già effettuato l\'accesso a WordPress.com
Continua
+ Connettiti a un sito
Connetti un altro sito
+ Per procedere con questo account Google, fornisci la password WordPress.com corrispondente. Verrà richiesta solo una volta.
Inserisci la tua password WordPress.com.
+ Attualmente non disponibile. Inserisci la tua password
Richiesta e-mail di accesso
Sembra che la password non sia corretta. Verifica attentamente le informazioni e riprova.
Richiesta codice di verifica tramite SMS.
+ Inviami invece un messaggio con un altro codice.
Inviami un codice.
+ Abbiamo inviato un messaggio di testo al numero di telefono che termina in %s. Inserisci il codice di verifica contenuto nell\'SMS.
+ Ci sei quasi! Inserisci il codice di verifica per WordPress.com dalla tua app di autenticazione.
+ Accedi con il tuo nome utente.
+ Accedi inserendo l\'indirizzo del tuo sito.
+ In alternativa:
Apri mail
Successivo
Gestisci il tuo sito con Jetpack mentre sei in movimento: hai WordPress in tasca.
@@ -3549,39 +3561,29 @@ Language: it
Tieni il passo con i tuoi siti preferiti e partecipa a una conversazione ovunque e in qualsiasi momento.
Guarda i lettori da tutto il mondo leggere e interagire con il tuo sito, in tempo reale.
Pubblica dal parco. Lavora al blog sull\'autobus. Commenta dal bar. WordPress si sposta con te.
- Sei già connesso a un account WordPress.com, non puoi aggiungere un sito WordPress.com legato a un altro account.
- Riprova
- Uscire
- Invia link
- Attualmente non disponibile. Inserisci la tua password
- Sto entrando
+ Accedi
+ Aiuto
+ Password
+ Nome utente
Oppure inserisci la tua password
- Indirizzo e-mail
- Dettagli
- Annulla
+ Invia link
Codice di verifica non valido
Codice di verifica
- Aiuto
- Rimuovi
- Accedi
- Nome utente
- Password
- Senza titolo
- Impostazioni
- Oggi
- Annulla
+ Indirizzo e-mail
Supporto %s WooCommerce per Android
opzione non controllata
opzione controllata
Politica sulla privacy di terze parti
Politica sui cookie
Politica sulla privacy
+ Creato con amore da Automattic. %1$s
Utilizziamo altri strumenti di tracciamento, inclusi alcuni di terze parti. Leggi le informazioni sugli strumenti e come utilizzarli.
Leggi la politica sulla privacy
Questa informazione ci aiuta a migliorare i nostri prodotti, a rendere il marketing più mirato, a personalizzare la tua esperienza su WooCommerce e molto altro come descritto in dettaglio nostra politica sulla privacy
Condividi informazioni con gli strumenti di analisi relative all\'uso dei servizi mentre sei connesso al tuo account WordPress
Raccogli informazioni
Impostazioni privacy
+ Impostazioni
Stato dell\'ordine
Rimborsato
Cancellato
@@ -3595,6 +3597,7 @@ Language: it
Aggiungi
Nota e-mail al cliente
Errore durante la modifica dell\'ordine
+ Errore durante il recupero delle note
Ordine contrassegnato come completo
Contrassegna ordine come completo
Aggiungi una nota dell\'ordine
@@ -3603,6 +3606,7 @@ Language: it
Mostra fatturazione
Pagamento cancellato
Note ordine
+ Privato
Scrivi una nota dell\'ordine
Immagine profilo personalizzata
Nota fornita dai clienti
@@ -3627,6 +3631,9 @@ Language: it
Nessun ordine
Visualizza ordini
Visualizza ordine
+ Nessuna attività per questo periodo
+ Ordini totali: %s
+ Immagine dell\'errore
Errore durante recupero dati
Fatturato
Ordini
@@ -3639,11 +3646,17 @@ Language: it
Nessun negozio WooCommerce
Foto del profilo
Negozio collegato
+ Leggi le %1$sistruzioni di configurazione%2$s.
Questa app richiede che Jetpack sia connesso al tuo negozio.
+ \@%s
+ Immetti l\'indirizzo del negozio WooCommerce che desideri connettere.
Accedi con l\'indirizzo e-mail dell\'account WordPress.com per gestire i negozi WooCommerce.
+ Sei già connesso a un account WordPress.com, non puoi aggiungere un sito WordPress.com legato a un altro account.
+ Impossibile aprire il link
Nessuna app per SMS trovata
Nessuna app per e-mail trovata
Nessuna app per telefono trovata
+ Si è verificato un errore durante l\'apertura di un browser web di base. Scegli un\'altra applicazione:
Impossibile aprire il link
%1$s alle %2$s
Più vecchie di un mese
@@ -3652,15 +3665,22 @@ Language: it
Ieri
Oggi
Prodotti
+ Rimuovi
Quest\'anno
Questo mese
Questa settimana
+ Oggi
Prodotto
La rete non è disponibile. Controlla la connessione dati o WiFi.
Offline u2014 utilizza i dati memorizzati nella cache
Per saperne di più
+ Annulla
+ Senza titolo
Continua
+ Annulla
+ Riprova
Nascondi dettagli
+ Dettagli
Sconto
Subtotale
Tasse
@@ -3671,18 +3691,11 @@ Language: it
%1$s%2$s
Ordini
Il mio negozio
+ Uscire
+ Sto entrando
Tutto
+ Generale
WooCommerce
- Immagine dell\'errore
- Creato con amore da Automattic. %1$s
- Immetti l\'indirizzo del negozio WooCommerce che desideri connettere.
- Privato
- Connettiti a un sito
- Nessuna attività per questo periodo
- Ordini totali: %s
- Errore durante il recupero delle note
- Leggi le %1$sistruzioni di configurazione%2$s.
- Ci sei quasi! Inserisci il codice di verifica per WordPress.com dalla tua app di autenticazione.
- @string/date_timeframe_custom
- @string/date_timeframe_today
diff --git a/WooCommerce/src/main/res/values-ja/strings.xml b/WooCommerce/src/main/res/values-ja/strings.xml
index 67c331e9fcf..c28c93b0cb7 100644
--- a/WooCommerce/src/main/res/values-ja/strings.xml
+++ b/WooCommerce/src/main/res/values-ja/strings.xml
@@ -1,11 +1,27 @@
+ バリエーションの読み込み中にエラーが発生しました
+ 「その他のアイテムの読み込みに失敗しました。 もう一度実行してください」
+ 戻る
+ %1$d個のバリエーション
+ バリエーション %s、価格 %s
+ バリエーションのある商品 %s、価格 %s
+ 説明を空にすることはできません
+ 行動喚起 (CTA)
+ キャッチフレーズを空にすることはできません
+ メールアドレスが正しいことを確認し、スパムフォルダーを再確認してください。
+ このユーザー名に接続された WordPress.com アカウントが見つかりません。 メールアドレスを入力して新規アカウントを作成できます。
+ バーコードまたはこの商品固有のその他の ID を入力してください。 この商品を他のチャネルやマーケットプレイスに出品するのに役立ちます。
+ GTIN、UPC、EAN、ISBN
+ 最終の支払い
+ ラベルを購入したら、この注文に完了のマークを付けてお客様に通知してください。
+ アカウントをお持ちでない場合は、このメールアドレスを使用してアカウントを作成いたします。
封筒
ボックス
パッケージを追加
@@ -30,7 +46,6 @@ Language: ja_JP
最安値
ラベルを購入
ラベルを購入 · %1$s
- この注文に完了のマークを付けてお客様に通知
配送料
注文詳細
配送状況の詳細
@@ -559,7 +574,6 @@ Language: ja_JP
言語
予算
詳細
- 今すぐ購入
広告を編集
プレビュー
無効
@@ -585,7 +599,6 @@ Language: ja_JP
宣伝準備完了
何百万もの人に商品を紹介
使用 %1$s
- 最後のデポジット
注文合計を展開 / 折りたたむ
支払いを受け取る
コードのフォーマットは「XXXX-XXXX-XXXX-XXXX」です
@@ -667,9 +680,9 @@ Language: ja_JP
端末上のドキュメントとその他のファイル
✨お礼状を作成できません
税金を請求
- 利用可能な資金は毎%s自動で入金されます。
- 利用可能な資金は毎日自動で入金されます。
- 資金は%d日間保留された後に利用可能になります。
+ 利用可能な資金は毎%s自動で支払われます。
+ 利用可能な資金は毎日自動で支払われます。
+ 資金は%d日間保留された後に利用可能になります。
バリエーションを選択する
バリエーションを選択
「%1$s」-> %2$s
@@ -708,19 +721,19 @@ Language: ja_JP
期間
請求の間隔
セール
- 不明
- 失敗
- キャンセル済み
- 輸送中
- 承認待ち
- 有料
- 予定
- デポジットの概要を折りたたむ / 展開する
- 資金の受け取りタイミングについて詳しくはこちら
- 利用可能な資金は毎月 %s 上で自動で入金されます。
- 資金は%d日間保留された後に利用可能になります。
- 保留中の資金
- 利用可能な資金
+ 不明
+ 失敗
+ キャンセル済み
+ 輸送中
+ 承認待ち
+ 有料
+ 予定
+ 支払いの概要を折りたたむ / 展開する
+ 資金の受け取りタイミングについて詳しくはこちら
+ 利用可能な資金は毎月 %s 上で自動で支払われます。
+ 資金は%d日間保留された後に利用可能になります。
+ 保留中の資金
+ 利用可能な資金
税
商品
支払総額
diff --git a/WooCommerce/src/main/res/values-ko/strings.xml b/WooCommerce/src/main/res/values-ko/strings.xml
index 5d129e3b9a3..63e7a0032f0 100644
--- a/WooCommerce/src/main/res/values-ko/strings.xml
+++ b/WooCommerce/src/main/res/values-ko/strings.xml
@@ -1,11 +1,27 @@
+ 상품 옵션 로드 오류
+ \"아이템을 더 로드하지 못했습니다. 다시 시도하세요”
+ 뒤로
+ %1$d개 변형
+ 상품 옵션 %s, 가격 %s
+ 변형 상품 %s, 가격 %s
+ 설명은 비워 둘 수 없음
+ 행동 유도
+ 태그라인은 비워 둘 수 없음
+ 이메일이 올바른지 확인하고 스팸 폴더를 다시 확인하세요.
+ 이 사용자명에 연결된 워드프레스닷컴 계정을 찾을 수 없습니다. 이메일을 입력하여 새 계정을 만들 수 있습니다.
+ 이 상품에 고유한 바코드 또는 기타 식별자를 입력하세요. 이 상품을 다른 채널이나 마켓플레이스에 등록하는 데 도움이 될 수 있습니다.
+ GTIN, UPC, EAN, ISBN
+ 지난 지급금
+ 레이블을 구매한 후에는 이 주문을 완료로 표시하고 고객에게 알립니다.
+ 계정이 없다면 이 이메일을 사용하여 계정을 만드시면 됩니다.
봉투
상자
패키지 추가
@@ -30,7 +46,6 @@ Language: ko_KR
가장 저렴
레이블 구매
레이블 구매 · %1$s
- 이 주문을 완료로 표시하고 고객에게 알립니다.
배송비
주문 상세 정보
배송 상세 정보
@@ -40,8 +55,8 @@ Language: ko_KR
위험물 또는 유해물질을 배송하시나요?
아이템 카드 축소/확장
%1$s · %2$s
- 1%s 기준으로 정렬됨
아니요
+ 1%s 기준으로 정렬됨
향후 캠페인을 위해 내 선택 사항 저장
<b>다음과 같은 상황에 적합:</b> %s
목표 %s 선택
@@ -96,14 +111,14 @@ Language: ko_KR
어두워진 배경입니다. 눌러서 대화 상자 무시하기
주당 %1$s
사용자가 중지할 때까지 실행
- %1$s부터 계속 진행
- 주당 지출
%2$s부터 주당 %1$s
주당
나머지
합계
클릭 통과
회원님의 기기가 배터리 세이버 모드인 것 같습니다. \n이 모드가 활성화된 상태에서는 스토어 정보를 제공해 드릴 수 없습니다.
+ %1$s부터 계속 진행
+ 주당 지출
옵션이 포함된 팝업 메뉴입니다. 밀어서 아이템을 탐색할 수 있습니다.
도구 모음 메뉴 열기
카드 리더 상태를 포함한 도구 모음입니다. 메뉴가 열립니다. 두 번 눌러 상호작용할 수 있습니다.
@@ -135,13 +150,13 @@ Language: ko_KR
새 주문
확인
+ 스토어 관리에서 주문 생성
- 단순 상품이 아닌 상품에 대한 결제를 받으려면 POS를 종료하고 주문 탭에서 새 주문을 생성하세요.
왜 내 상품이 보이지 않나요?
정보
닫기
- 자세히\u00A0알아보기
현재 POS에는 단순 실물 상품만 호환됩니다. 변형 상품, 가상 상품 등의 다른 상품 유형은 향후 업데이트를 통해 지원될 예정입니다.
단순 상품만 표시
+ 단순 상품이 아닌 상품에 대한 결제를 받으려면 POS를 종료하고 주문 탭에서 새 주문을 생성하세요.
+ 자세히\u00A0알아보기
사이트 주소
우커머스용 Google
유료 캠페인 추가
@@ -151,12 +166,12 @@ Language: ko_KR
새 캠페인이 생성되었습니다. 판매 시간이 다가오고 있습니다!
모든 준비를 마쳤습니다!
주문을 생성할 수 없음
- 다시 시도
오류 표시 아이콘
한 번 더 시도할까요?
상품 로드 오류
현재 POS에서는 단순 상품만 지원합니다.
현재 POS에서는 단순 상품만 지원합니다 - \n시작하려면 단순 상품을 생성하세요.
+ 다시 시도
지원되는 상품을 찾을 수 없음
상품 없음
고객 지원
@@ -228,8 +243,8 @@ Language: ko_KR
이름, 요약 및 설명
저장하기 전에 상품 상세 정보를 편집하거나 재생성할 수 있습니다.
프로그램
- Google 캠페인
이 기간의 프로그램 없음
+ Google 캠페인
지금 연결
장바구니
상품 상세 정보 만들기
@@ -240,23 +255,23 @@ Language: ko_KR
AI가 제품의 상세 정보를 만듭니다.
카드 결제 수령
합계
- 세금
소계
결제 성공
결제에 실패했습니다. 다시 시도해 주세요.
장바구니 아이콘
상품
- %d개 아이템
- 지우기
Google Ads로 매출과 트래픽을 늘리세요
우커머스용 Google
수량 규칙 없음
+ %d개 아이템
+ 지우기
+ 세금
잠재 고객
취소
- 종료
POS 종료
- 장바구니에서 %s 삭제
체크아웃
+ 장바구니에서 %s 삭제
+ 종료
리더 상태 알 수 없음
체크아웃
리더 연결됨
@@ -324,8 +339,8 @@ Language: ko_KR
%s 숨기기
완료됨
피드백
- 사이트에서 우커머스 최신 버전을 실행하고 있으며 우커머스 분석이 활성화되어 있는지 확인하세요.
스토어 분석을\n 표시할 수 없음
+ 사이트에서 우커머스 최신 버전을 실행하고 있으며 우커머스 분석이 활성화되어 있는지 확인하세요.
모든 작업 보기
세션 분석에서는 사용자 정의 범위에 사용할 수 없는 고유 방문자 수를 이용합니다
세션 데이터 사용 불가
@@ -338,11 +353,11 @@ Language: ko_KR
취소
강제 종료
아직 앱 연결을 승인하지 않으신 것 같습니다. 종료하시겠어요?
- 크기가 400x400픽셀 이상인 이미지를 선택하세요.
유효하지 않은 이미지
입력하신 사용자명 또는 비밀번호가 일치하지 않는 것 같습니다. 자격 증명을 다시 확인하고 다시 시도하세요.
데이터가 여전히 로드되지 않으면 지원팀에 도움을 문의하세요.
연결 문제 없음
+ 크기가 400x400픽셀 이상인 이미지를 선택하세요.
이전 화면으로 돌아가기
연결 재시도
사이트에 연결하기
@@ -396,7 +411,6 @@ Language: ko_KR
추천
도메인 입력
도메인 선택
- 모든 스토어 분석 보기
매년
매월
매주
@@ -406,6 +420,7 @@ Language: ko_KR
다른 스토어 연결
새 스토어를 시작하시나요?
스토어 이름
+ 모든 스토어 분석 보기
기다려주세요…
재고 상태 업데이트 중
문제가 발생했습니다. 다시 시도하세요.
@@ -436,17 +451,17 @@ Language: ko_KR
휴지통으로 주문 이동 중 오류 발생
휴지통으로 주문 이동됨
사이트에서 문제가 발생한 것 같습니다.\n\n자세한 내용은 호스팅 공급업체에 문의하세요.
+ 인터넷에 연결되지 않은 것 같습니다.\n\n와이파이가 켜졌는지 확인하세요. 모바일 데이터를 사용 중이라면 기기 설정에서 활성화되었는지 확인하세요.
젯팩 연결에서 문제가 발생한 것 같습니다.\n\n걱정하지 마세요. 지원팀에서 도와드리겠습니다. 문의해 주시면 기꺼이 도와드리겠습니다.
사이트의 응답이 제대로 작동하지 않는 것 같습니다.\n\n걱정하지 마세요. 지원팀에서 도와드리겠습니다. 문의해 주시면 기꺼이 도와드리겠습니다.
사이트의 응답이 너무 오래 걸리는 것 같습니다.\n\n자세한 내용은 호스팅 공급업체에 문의하세요.
- 인터넷에 연결되지 않은 것 같습니다.\n\n와이파이가 켜졌는지 확인하세요. 모바일 데이터를 사용 중이라면 기기 설정에서 활성화되었는지 확인하세요.
상품이 선택되지 않음
더 보기
지원 문의
- 사이트 주문 가져오기
- 워드프레스닷컴 서버에 연결하기
인터넷 연결
사용자 정의 날짜 범위 통계 추가
+ 사이트 주문 가져오기
+ 워드프레스닷컴 서버에 연결하기
위치를 찾을 수 없습니다.\n다시 시도하세요.
세션 페이지 조회수
기기 유형
@@ -513,9 +528,9 @@ Language: ko_KR
URL 파라미터
대상 URL
수동으로 입력
- 검색되지 않았습니다.\n다시 시도하세요.
국가, 광역시/도 또는 시/군/구 입력을 시작하여 사용 가능한 옵션을 참조하세요.
\"캠페인 제출\"을 클릭하면 <a href=\'termsOfService\'><u>서비스 약관</u></a>과 <a href=\'advertisingPolicy\'><u>광고 정책</u></a>에 동의하고 선택한 예산과 기간에 대해 결제 수단으로 요금이 청구되도록 승인하는 것입니다. 홍보한 글의 예산 및 결제 방식에 대해 <a href=\'learnMore\'><u>자세히 알아보세요</u></a>.
+ 검색되지 않았습니다.\n다시 시도하세요.
캠페인 제출
결제 수단을 로드하지 못했습니다. 여기를 클릭하여 다시 시도해 주세요.
결제 수단 추가
@@ -535,7 +550,6 @@ Language: ko_KR
태그라인
이미지 변경
적용
- 시작 날짜
%1$s일
노출 수는 잠재적 고객에게 광고가 표시되는 빈도를 반영합니다.\n\n\n 온라인 트래픽과 사용자 행동의 유동성으로 인해 정확한 수는 보장할 수 없지만 광고의 실제 노출 수를 목표 수에 최대한 가깝게 일치시키는 것을 목표로 합니다.\n\n\n 노출 수는 독자의 행동이 아니라 가시성을 나타낸다는 점에 유의하세요.
완료
@@ -548,6 +562,7 @@ Language: ko_KR
예산 설정
모두
%2$s(으)로부터 %1$s일
+ 시작 날짜
다시 표시하지 않음
나중에 다시 알림
잠깐 시간 좀 내주시겠어요? 빠른 피드백으로 AI 도우미 기능 개선을 도와주세요.
@@ -559,9 +574,8 @@ Language: ko_KR
언어
예산
상세 정보
- 지금 쇼핑하기
- 광고 편집
미리보기
+ 광고 편집
끔
상품 선택
상품 %s 선택
@@ -572,12 +586,12 @@ Language: ko_KR
<b>상품 선택:</b> Blaze로 홍보할 상품을 선택합니다.
재고 관리
재고가 관리되지 않음
- Blaze 작동 방식 알아보기
캠페인 시작하기
워드프레스닷컴과 Tumblr 네트워크 내 수백만 개 사이트에 실리는 광고입니다.
방대한 잠재 고객에게 접근
\"도구를 통해 관심 있는 쇼핑객이 찾을 수 있는 위치에 제품이 표시됩니다.\"
전 세계 도달 범위 간단하게 확보
+ Blaze 작동 방식 알아보기
경험이나 큰 예산이 없어도 하루 최소 $5 USD로 몇 분 만에 광고를 시작할 수 있습니다.
빠른 시작, 큰 효과
판매자가 빠르고 간단한 광고 캠페인 설정을 통해 트래픽을 극대화할 수 있도록 도구를 설계했습니다.
@@ -585,7 +599,6 @@ Language: ko_KR
홍보 준비 완료
수백만 명에게 제품 표시
%1$s 사용
- 마지막 예치금
주문 합계 확장 축소
결제 수령
코드가 XXXX-XXXX-XXXX-XXXX 형식으로 되어 있어야 함
@@ -667,11 +680,10 @@ Language: ko_KR
기기의 문서 및 기타 파일
✨감사 인사 생성
세금 청구
- %s마다 사용 가능한 자금이 자동으로 예치됩니다.
- 매일 사용 가능한 자금이 자동으로 예치됩니다.
- %d일 대기 후 자금을 이용할 수 있게 됩니다.
+ %s마다 사용 가능한 자금이 자동으로 지급됩니다.
+ 매일 사용 가능한 자금이 자동으로 지급됩니다.
+ %d일 대기 후 자금을 이용할 수 있게 됩니다.
변형 선택
- 변형 선택
\" %1$s \" -> %2$s
변형을 선택하세요.
%1$s개 아이템 선택됨
@@ -683,6 +695,7 @@ Language: ko_KR
%1$s~%2$s개 아이템
%d개 아이템
%d개 아이템
+ 변형 선택
%1$.2f개에서 %2$.2f개로 상품 수량 변경
구성 저장
구성
@@ -708,21 +721,21 @@ Language: ko_KR
기간
청구 주기
세일
- 알 수 없음
- 실패
- 취소됨
- 전환 중
- 대기 중
- 결제됨
- 예상됨
- 예치금 요약 접기/펼치기
- 언제 자금을 받게 되는지 더 알아보기
- 매월 %s에 사용 가능한 자금이 자동으로 예치됩니다.
- %d일 대기 후 자금을 이용할 수 있게 됩니다.
- 대기 중인 자금
- 사용 가능한 자금
+ 알 수 없음
+ 실패
+ 취소됨
+ 전환 중
+ 대기 중
+ 결제됨
+ 예상됨
+ 지급금 요약 접기/펼치기
+ 언제 자금을 받게 되는지 더 알아보기
세금
상품
+ 대기 중인 자금
+ 사용 가능한 자금
+ 매월 %s에 사용 가능한 자금이 자동으로 지급됩니다.
+ %d일 대기 후 자금을 이용할 수 있게 됩니다.
결제 총액
이메일 주소 또는 사용자명
사용자 정의 금액 주문 생성 불가
@@ -778,12 +791,12 @@ Language: ko_KR
5. \"완료\" 체크 표시가 보이면 스토어에서 결제가 처리되고 거래가 완료될 것입니다.
3. 스마트폰을 고객에게 내밉니다.
2. \"결제 받기\"를 탭하고 \"Tap to Pay\"을 선택합니다.
- 1. 주문 생성
작동 방식
카드 리더에 대해 더 알아보기
이 한도를 초과하는 결제를 받으려면 PIN 입력을 허용하는 카드 리더 구매를 고려하세요.
Android에서는 Tap to Pay를 통한 PIN 입력이 지원되지 않습니다.
%1$s에서 일부 카드의 경우 %2$s 이상의 비접촉 거래에 PIN이 필요합니다.
+ 1. 주문 생성
중요 정보
Tap to Pay을 통해 카드 리더 기기를 구매하지 않고도 실물 직불 및 신용 카드부터 디지털 지갑까지 모든 비접촉 결제 유형을 수락할 수 있습니다.
Tap to Pay란 무엇인가요?
@@ -837,8 +850,8 @@ Language: ko_KR
세율 설정
활성화
새 세율 설정
- WooPayments
설정
+ WooPayments
관리자에서 세율 편집
그러면 고객의 주소가 선택한 세율이 적용되는 위치로 변경됩니다.
세율 정보 대화 상자 열기 버튼
@@ -886,8 +899,8 @@ Language: ko_KR
주문 합계
계산한 백분율
계산한 금액
- 스토어 이름
스토어 이름을 사용자 정의하면 스토어의 검색 엔진 최적화에도 도움이 될 수 있습니다.
+ 스토어 이름
스토어 이름 지정
NFC 활성화
소량 제공 패키지(표시 필수)
@@ -922,18 +935,26 @@ Language: ko_KR
제품명을 입력하세요.
회원님과 함께 성장하는 전자상거래 플랫폼
가변 구독
- 쿠폰 제거
누구나 좋아하는 딜
아직 생성한 쿠폰이 없습니다. 이 주문에 적용할 쿠폰을 생성하세요.
쿠폰으로 이동
쿠폰 선택
- 쿠폰 생성 실패
+ 쿠폰 제거
쿠폰 생성됨
생성
쿠폰 생성
+ 쿠폰 생성 실패
%1$s 생성
쿠폰 편집
선택한 상품에 대한 고정된 할인 합계 설정
+ 쿠폰 생성
+ 쿠폰 추가
+ 테스트 주문 시작
+ 우커머스 앱에서 결제를 완료하고 주문에 관한 푸시 알림을 기다립니다.
+ 해당 웹 스토어에서 실제 고객처럼 테스트 상품을 선택하고, 장바구니에 추가하고, 계산을 완료합니다.
+ 아래 버튼을 누르면 웹 브라우저를 통해 온라인 스토어로 리디렉팅됩니다.
+ 테스트 주문 체험
+ 테스트 주문 체험
장바구니 전체에 대한 고정된 할인 합계 설정
선택한 상품에 대한 할인 백분율 설정
고정된 상품 할인
@@ -942,15 +963,7 @@ Language: ko_KR
쿠폰 유형 - 고정된 상품
쿠폰 유형 - 고정된 장바구니
쿠폰 유형 - 할인 백분율
- 쿠폰 생성
- 쿠폰 추가
- 테스트 주문 시작
앱을 사용하여 테스트 주문 환불 처리
- 우커머스 앱에서 결제를 완료하고 주문에 관한 푸시 알림을 기다립니다.
- 해당 웹 스토어에서 실제 고객처럼 테스트 상품을 선택하고, 장바구니에 추가하고, 계산을 완료합니다.
- 아래 버튼을 누르면 웹 브라우저를 통해 온라인 스토어로 리디렉팅됩니다.
- 테스트 주문 체험
- 테스트 주문 체험
테스트 주문을 실행하여 우커머스 프로세스에서 원활한 고객 경험이 제공되는지 확인
수동으로 상세 정보 추가
고객 검색 기준
@@ -962,9 +975,9 @@ Language: ko_KR
회원님의 구독 결정을 이해하도록 도와주세요. 회원님의 피드백이 중요합니다.
이메일 주소 없음
이름 없음
- 기존 고객 검색 또는
최근 업데이트 %s(30분마다 업데이트)
최근 업데이트 %s
+ 기존 고객 검색 또는
Android에서 Tap To Pay로 결제 수락 <a href=\'\'>더 알아보기</a>
결제 수령
지정된 가격이 없는 상품은 추가할 수 없습니다.
@@ -1031,12 +1044,12 @@ Language: ko_KR
공유 메시지를 생성할 수 없습니다. 다시 시도하세요.
AI 기능 살펴보기
선택적 메시지 추가
- 쓰기…
AI로 쓰기
Blaze로 제품 홍보
Blaze
AI 콘텐츠 생성기를 사용할 수 있습니다.
Blaze로 홍보
+ 쓰기…
상품 공유
축하합니다! 새 스토어 준비 완료까지 한 걸음 가까워지셨습니다.
첫 번째 상품 생성됨 🎉
@@ -1063,7 +1076,6 @@ Language: ko_KR
개인정보
이 데이터 공유를 제어하기 위해 당사에서 수집하는 회원님의 스토어와 옵션에 대한 데이터에 대해 자세히 알아보세요.
사용량 추적
- Woocommerce.com 사용자는 추가 개인정보 옵션을 사용할 수 있습니다. 여기에서 자세히 알아보세요.
웹 옵션
추가 개인정보 옵션
프라이버시 설정 업데이트 중 오류가 발생했습니다.
@@ -1076,6 +1088,7 @@ Language: ko_KR
가변 상품을 직접 추가할 수 없습니다. 특정 변형을 선택하세요.
스캔하지 못했습니다. 나중에 다시 시도하세요.
SKU가 %s인 상품을 찾을 수 없습니다. 주문에 추가할 수 없음
+ Woocommerce.com 사용자는 추가 개인정보 옵션을 사용할 수 있습니다. 여기에서 자세히 알아보세요.
스캔하지 못했습니다. 나중에 다시 시도하세요.
바코드 스캔
EU(유럽연합) 세관 규칙을 따르는 국가로 배송 시 모든 아이템을 명확하게 설명해야 합니다. 예를 들어, 의류를 발송하는 경우 설명이 수락될 수 있으려면 의류 유형을 표시해야 합니다(예: 남성용 셔츠, 여아용 조끼, 남아용 재킷). 그렇지 않으면 배송이 세관에서 지체되거나 차단될 수 있습니다.
@@ -1099,9 +1112,9 @@ Language: ko_KR
스캐너를 통해 상품 추가
해제
더 알아보기
- EU(유럽연합) 세관 규칙을 따르는 국가로 배송할 때는 아이템마다 명확하고 구체적인 설명을 제공해야 합니다. 그렇지 않으면 배송이 세관에서 지체되거나 차단될 수 있습니다.
최신 상태로 유지하여 스토어 보안을 강화하세요. 지금 젯팩을 살펴보세요.
주문 알림 등 받기
+ EU(유럽연합) 세관 규칙을 따르는 국가로 배송할 때는 아이템마다 명확하고 구체적인 설명을 제공해야 합니다. 그렇지 않으면 배송이 세관에서 지체되거나 차단될 수 있습니다.
스토어 설정 목록 표시 또는 숨기기
스토어 설정 목록
필요하면 메뉴 > 설정 > 스토어에서 복원할 수 있습니다.
@@ -1195,14 +1208,14 @@ Language: ko_KR
구독
체크카드와 신용카드를 카드 리더에 올려놓거나 밀어 넣거나 살짝 밀어서 결제할 수 있습니다.
스마트폰에서 직접 비접촉 결제를 안전하게 수락하세요.
- 스마트폰을 사용하여 카드 결제 수락\n결제 지금 사용해 보세요.
- 피드백 공유
애플리케이션 비밀번호 생성이 승인되지 않아서 로그인할 수 없습니다.
사이트를 가져오는 중…
+ 스마트폰을 사용하여 카드 결제 수락\n결제 지금 사용해 보세요.
+ 피드백 공유
+ 로드 중입니다…
웹사이트를 가져오는 동안 오류 발생
WP 관리자 페이지에서 다시 시도
로그인
- 로드 중입니다…
%s 종료됨
구독이 종료되었으며, 모든 기능에 대한 접근 권한이 제한되었습니다.
%1$d일
@@ -1217,13 +1230,11 @@ Language: ko_KR
요금제 상세 정보를 가져오는 중 오류 발생
%1$s 구독자이십니다. %2$s까지 모든 기능에 접근하실 수 있습니다.
무료 평가판이 종료되었으며 모든 기능에 대한 접근이 제한되었습니다. 지금 %1$s을(를) 구독하세요.
- 무료 평가판을 %1$d일째 사용 중입니다. %2$s에 무료 평가판이 종료됩니다. 업그레이드하여 새로운 기능을 잠금 해제하고 스토어를 계속 실행하세요.
구독 상태
문제 해결
현재: %s
구독 문제 신고
지금 업그레이드
- %1$s회 시도가 남았습니다.
평가판 종료됨
평가판이 종료되었습니다.
죄송합니다. 예기치 않은 오류가 발생했습니다.
@@ -1239,6 +1250,8 @@ Language: ko_KR
내 스토어 공개
스토어를 시작하려면 요금제로 업그레이드하셔야 합니다. <u>업그레이드</u>
도메인 검색
+ 무료 평가판을 %1$d일째 사용 중입니다. %2$s에 무료 평가판이 종료됩니다. 업그레이드하여 새로운 기능을 잠금 해제하고 스토어를 계속 실행하세요.
+ %1$s회 시도가 남았습니다.
로그인 실패(상태 코드 %1$s)
스토어의 관리 URL이 식별되지 않아서 로그인할 수 없습니다.
스토어의 로그인 URL이 식별되지 않아서 로그인할 수 없습니다.
@@ -1259,7 +1272,6 @@ Language: ko_KR
요청 발송 중
기타 확장 기능/플러그인
우커머스 플러그인
- 우커머스 결제
카드 리더/직접 결제
모바일 앱
작성하기
@@ -1278,6 +1290,7 @@ Language: ko_KR
고객에게 쉽고 편리한 결제 방법을 제공하세요!
결제받기
정보가 있으면 배송, 세금 및 결제 설정을 일찍 시작할 수 있습니다.
+ 우커머스 결제
스토어에 대해 자세히 알려주세요.
방금 계정의 이메일 주소로 매직 링크를 보내드렸습니다.
계속하려면 로그인하세요.
@@ -1286,31 +1299,31 @@ Language: ko_KR
젯팩 상태를 가져오는 중
문제가 발생했습니다. 나중에 다시 시도하세요.
결제 체험
- 휴대폰으로\n카드 결제 받기
+ 도메인 네임 등록 중…
+ 국가 선택
+ 주 선택
Tap To Pay
작업
도메인 등록 중 오류 발생
- 주 선택
- 국가 선택
- 도메인 네임 등록 중…
- 도메인 등록
- 우편번호
- 상태(사용할 수 없음)
- 주
- 도시
- 주소 2
- 주소
- 국가
- 국가 코드
+ 휴대폰으로\n카드 결제 받기
전화
- 조직(선택사항)
+ 국가 코드
+ 국가
+ 주소
+ 주소 2
+ 도시
+ 주
+ 상태(사용할 수 없음)
+ 우편번호
+ 도메인 등록
편의를 위해 워드프레스닷컴을 미리 채웠습니다.\n 연락처 정보 이 도메인에 사용하려는 정보가 정확한지 검토하여 확인하세요.
- 도메인 연락처 정보
- 공개적으로 등록
- 개인정보 보호를 통해 비공개로 등록
- 유효한 %s(을)를 입력하세요.
- 이 도메인을 등록하면 %1$s이용 약관%2$s에 동의하는 것입니다.
+ 조직(선택사항)
도메인 소유자는 모든 도메인의 공개 데이터베이스에 있는 연락처 정보를 공유해야 합니다.\n 개인정보 보호에 따라 회원님의 정보가 아닌 당사의 정보를 공개하며, 회원님이 받을 커뮤니케이션은 비공개적으로 전달합니다.
+ 이 도메인을 등록하면 %1$s이용 약관%2$s에 동의하는 것입니다.
+ 유효한 %s(을)를 입력하세요.
+ 개인정보 보호를 통해 비공개로 등록
+ 공개적으로 등록
+ 도메인 연락처 정보
개인정보 보호
스토어 관리자만 도메인 설정에 접근할 수 있음
또는 계속 매직 링크 사용
@@ -1369,19 +1382,19 @@ Language: ko_KR
오래 걸리지 않음
기본 제공 리더 준비 중…
기본 제공 리더 준비됨
- 카드 리더
눌러서 결제
전환율
세션
이 기간 세션 없음
다음 대비
도메인
+ 카드 리더
애플리케이션 비밀번호가 무엇인가요?
%1$s 사이트에서 애플리케이션 비밀번호가 비활성화된 것 같습니다.\n 우커머스 앱을 사용하려면 활성화하세요.
설치 페이지 열기
- 답변을 발송하는 도중에 오류가 발생했습니다
- 답변 발송!
답변
+ 답변 발송!
+ 답변을 발송하는 도중에 오류가 발생했습니다
모두 선택
가격 업데이트
상태 업데이트
@@ -1392,17 +1405,17 @@ Language: ko_KR
모든 변형이 이미 생성되었습니다.
생성할 변형 없음
다수 선택
- 이 검색에 대해 제공되는 도메인 없음
변형 생성 중
각각의 새 변형과 변형 속성의 가능한 모든 조합이 생성됩니다(%1$d개 변형).
모든 변형 생성 여부
현재 최대 %1$d개 변형의 생성이 지원됩니다. 이 상품의 변형을 생성하면 %2$d개 변형이 생성됩니다.
생성 한도 초과됨
속성의 모든 조합에 대한 변형을 생성합니다.
- 모든 변형 생성
새 변형 하나를 생성합니다. 변형 가능한 상품에 속하는 속성을 수동으로 설정합니다.
새 변형 추가
변형 추가
+ 모든 변형 생성
+ 이 검색에 대해 제공되는 도메인 없음
연결하지 않고 종료
연결 계속
스토어에 접근하려면 다시 연결해 보세요.
@@ -1414,7 +1427,6 @@ Language: ko_KR
다시 활성화 시도
다시 설치 시도
지원받기
- 다시 시도하고 이 오류가 계속 발생하면 지원팀에 문의하세요.
사이트와 통신 중 오류가 발생했습니다.
이 스토어의 플러그인을 관리할 권한이 없습니다.
젯팩에 연결하는 권한 부여 중 오류 발생
@@ -1438,6 +1450,7 @@ Language: ko_KR
젯팩 설치하기
젯팩을 연결하려면 스토어 자격 증명으로 <b>%1$s</b>에 로그인하세요.
젯팩을 설치하려면 스토어 자격 증명으로 <b>%1$s</b>에 로그인하세요.
+ 다시 시도하고 이 오류가 계속 발생하면 지원팀에 문의하세요.
스토어 자격 증명을 준비하세요.
이 앱에서 스토어에 접근하려면 해당 스토어를 젯팩에 연결하세요.
이 앱에서 스토어에 접근하려면 무료 젯팩 플러그인을 설치하세요.
@@ -1450,8 +1463,8 @@ Language: ko_KR
시뮬레이션한 카드 리더 업데이트
젯팩 연결
스토어 연결
- 사람들이 인터넷에서 회원님을 찾을 수 있는 곳입니다. 걱정하지 마세요. 나중에 변경할 수 있습니다.
방문자 수
+ 사람들이 인터넷에서 회원님을 찾을 수 있는 곳입니다. 걱정하지 마세요. 나중에 변경할 수 있습니다.
또는 비밀번호로 로그인
시뮬레이션한 카드 리더가 비활성화되었습니다.
시뮬레이션한 리더 키
@@ -1488,12 +1501,12 @@ Language: ko_KR
다른 주소 시도
사용자 정의 날짜 범위
사용자 정의
- 워드프레스닷컴이란 무엇인가요?
새 계정 만들기
비밀번호 선택
사용 중인 이메일 주소
시작하기 \n분 단위
젯팩 연결 버튼을 누르면 <a href=\'terms\'>서비스 약관</a> 및 워드프레스닷컴과 <a href=\'sync\'>상세 정보</a> 공유에 동의하는 것입니다.
+ 워드프레스닷컴이란 무엇인가요?
시뮬레이션한 카드 리더 활성화
상점 관리자 또는 앱을 사용하는 관리자로 사이트에 초대받으려면 사이트 소유자에게 문의하세요.
워드프레스닷컴 사이트에 연결하기
@@ -1533,44 +1546,43 @@ Language: ko_KR
우커머스 신규 이용
실패가 발생했습니다. 지원을 문의하세요.
사이트 주소 입력
- 이메일로 로그인 링크 받기
비밀번호가 기억나지 않나요?
+ 이메일로 로그인 링크 받기
아직 대면 결제 설정을 완료하지 않으신 것 같습니다. <a href=\'\'>설정 계속</a>
- 결제
- 알겠어요!
- 이제 빠르고 쉽게 대면 결제와 기타 기능에 접근하실 수 있습니다.
+ WC 관리자
+ 스토어 주소로 로그인
+ 기타 사이트
메뉴 탭의 결제
+ 이제 빠르고 쉽게 대면 결제와 기타 기능에 접근하실 수 있습니다.
+ 알겠어요!
+ 결제
해당 이메일은 워드프레스닷컴 계정에서 사용되지 않습니다.
- 기타 사이트
- 스토어 주소로 로그인
- WC 관리자
- 방금 다음으로 매직 링크를 보내드렸습니다.
- 이 기기에서 이메일을 확인하세요!
- 로그인 비밀번호 사용
- 매직 링크로 로그인
- 방금 이메일 주소로 매직 링크를 보내드렸습니다. 이메일에 있는 링크를 눌러 로그인하세요.
사이트 자격 증명으로 로그인
- 상향 판매와 교차 판매를 추가하여 고객에게 도움이 되는 관련 상품 추천 제공
- 링크가 설정된 상품으로 판매 증진
+ 방금 이메일 주소로 매직 링크를 보내드렸습니다. 이메일에 있는 링크를 눌러 로그인하세요.
+ 매직 링크로 로그인
+ 로그인 비밀번호 사용
+ 이 기기에서 이메일을 확인하세요!
+ 방금 다음으로 매직 링크를 보내드렸습니다.
+ 지금 설정
+ 팁
+ 무슨 일로 우커머스에 오셨나요?
+ 그냥 둘러보기
+ 스토어 설정 시도하기
+ 내 분석 확인
+ 내 상품 생성 또는 업데이트
+ 내 주문 관리
+ 여러 스토어 간 전환
+ %1$s은(는) 우커머스 사이트가 아닌 것 같습니다.
+ 우커머스 설치
+ 표시\n완료됨
카드 리더로 20분 안에 대면 판매를 시작하세요.
- 주문 #%1$d 업데이트 중 오류 발생
+ 링크가 설정된 상품으로 판매 증진
주문 #%1$d이(가) 완료됨으로 표시됨
- 표시\n완료됨
- 우커머스 설치
- %1$s은(는) 우커머스 사이트가 아닌 것 같습니다.
- 여러 스토어 간 전환
- 내 주문 관리
- 내 상품 생성 또는 업데이트
- 내 분석 확인
- 스토어 설정 시도하기
- 그냥 둘러보기
- 무슨 일로 우커머스에 오셨나요?
- 팁
- 지금 설정
+ 주문 #%1$d 업데이트 중 오류 발생
+ 상향 판매와 교차 판매를 추가하여 고객에게 도움이 되는 관련 상품 추천 제공
시작해 보세요!
워드프레스닷컴으로 로그인
지원 문의
- 워드프레스닷컴 계정으로 로그인
조금 도움을 받으세요!
로그인에 문제가 있나요?
SKU
@@ -1587,11 +1599,12 @@ Language: ko_KR
사용자 정의 필드
변경 사항을 저장할 수 없음
그러면 우커머스 외부에서 결제받은 경우 결제됨으로 표시됩니다.
- 젯팩 설치
손쉽게 처리하실 수 있습니다.
빠르고 쉽게 관리할 수 있습니다.
비즈니스에 꼭 필요합니다.
우커머스 신규 이용
+ 젯팩 설치
+ 워드프레스닷컴 계정으로 로그인
우커머스 스토어의 새 주문 $50
새 주문이 있습니다! 🎉
상세 정보
@@ -1600,10 +1613,10 @@ Language: ko_KR
시스템 상태 보고서 공유
클립보드에 시스템 상태 보고서 복사
계속 검색
- %2$s blog_id %3$s에 대한 주문 #%1$s 직접 결제.
결제 제공업체 변경
환불됨: %1$s
결제 대기 중
+ %2$s blog_id %3$s에 대한 주문 #%1$s 직접 결제.
설치 진행
설치하기 전에 알아야 할 사항
확장 기능 설치
@@ -1618,15 +1631,15 @@ Language: ko_KR
주문을 받았을 때 확인이 허용되는 청구 이메일 목록입니다. 쉼표로 이메일 주소를 구분합니다. 이메일 일부와 일치하도록 별표(*)를 사용할 수도 있습니다. 예를 들어 \"*@gmail.com\"은 모든 gmail 주소와 일치합니다.
죄송합니다. 선택한 필터와 일치하는 상품이 없습니다.\"
결제 수단 확인
- Stripe
우커머스 결제 FAQ
이러한 결제 제공업체 중 하나를 통해 대면 결제를 처리할 수 있습니다. 어떤 제공업체를 사용하시겠나요?
결제 제공업체 선택
잠김
상품 또는 결제 상세 정보를 변경하려면 상태를 결제 대기 중으로 변경하세요.
이 주문 중 일부는 현재 편집할 수 없습니다.
- 고객 검색
고객 없음
+ 고객 검색
+ Stripe
나중에
스토어에 확장 기능 추가
우커머스 배송이 무엇인가요?
@@ -1661,8 +1674,6 @@ Language: ko_KR
현재 가격이 뒤섞였습니다.
현재 가격은 %s입니다.
%d개 변형 가격이 업데이트됩니다.
- 혼합
- 없음
할인 가격
정상 가격
가격
@@ -1670,6 +1681,8 @@ Language: ko_KR
대량 업데이트
확인
대량 업데이트…
+ 혼합
+ 없음
변형을 가져오는 중…
상품 카테고리 검색 실패
상품 카테고리 로드 실패
@@ -1684,11 +1697,10 @@ Language: ko_KR
우커머스 배송 가져오기
우커머스 배송을 통해 스마트폰의 레이블을 인쇄하세요.
배송 레이블이 필요하신가요?
- %1$d에서 %2$d(으)로 상품 수량 변경
정상 가격 업데이트
할인 가격 업데이트
+ %1$d에서 %2$d(으)로 상품 수량 변경
%1$s에서 WooCommerce Stripe 확장 기능은 지원되지 않습니다.
- 필터
선택 지우기
%d개의 제품 선택
%d개의 상품 선택
@@ -1700,6 +1712,7 @@ Language: ko_KR
쿠폰을 세일 아이템에 적용하지 않으려면 이 기능을 사용하세요. 아이템별 쿠폰은 세일 중이 아닌 아이템에만 사용할 수 있습니다. 장바구니별 쿠폰은 장바구니에서 세일 중이 아닌 아이템에만 사용할 수 있습니다.
세일 아이템 제외
쿠폰을 다른 쿠폰과 함께 사용할 수 있는 경우 이 기능을 사용하세요.
+ 필터
개별 사용만
사용자별 사용 한도
X개의 아이템으로 사용 제한
@@ -1774,16 +1787,15 @@ Language: ko_KR
다른 환불 수단을 사용해 보세요.
알 수 없는 사유로 환불이 거부되었습니다.
죄송합니다. 이 환불은 처리할 수 없습니다.
+ 복사
환불 성공
환불 처리하기
결제 환불
환불 실패
결제 환불 준비하기
- 복사
쿠폰 검색
쿠폰 코드 공유 메시지를 생성할 수 없음
쿠폰 코드 공유 오류.
- 프로모션 코드가 %2$s인 엄선된 상품에 %1$s 할인 적용
프로모션 코드가 %2$s인 모든 상품에 %1$s 할인 적용
클립보드로 쿠폰 코드 복사 중 오류.
클립보드로 쿠폰 코드 복사됨.
@@ -1798,24 +1810,16 @@ Language: ko_KR
쿠폰 퍼포먼스 로드 실패
쿠폰 공유
쿠폰 코드 복사
+ 프로모션 코드가 %2$s인 엄선된 상품에 %1$s 할인 적용
피드백을 보내주셔서 감사합니다!
카드 리더 결제에 정확한 위치 권한 필요
위치 접근 권한 필요
계산 - %s
결제 링크 공유
금액
- 금액
- 할인한 주문
- 퍼포먼스
- %s의 최대 지출
- %s의 최소 지출
- 쿠폰 요약
쿠폰 요약 보기
- 기기에서 쿠폰을 보고 편집할 수 있도록 작업하고 있습니다.
쿠폰 보기 및 편집
쿠폰 없음
- %1$s(%2$s 제외)
- %1$s 및 %2$s
모든 것
만료됨
활성
@@ -1833,6 +1837,15 @@ Language: ko_KR
\u2022 승인한 리뷰 1개
\u2022 %d개 승인한 리뷰
%1$s(%2$s%%)
+ 금액
+ 할인한 주문
+ 퍼포먼스
+ %s의 최대 지출
+ %s의 최소 지출
+ 쿠폰 요약
+ 기기에서 쿠폰을 보고 편집할 수 있도록 작업하고 있습니다.
+ %1$s(%2$s 제외)
+ %1$s 및 %2$s
기기에서 주문을 생성할 수 있도록 작업하고 있습니다! \"+\" 버튼을 눌러 이 기능을 체험하실 수 있습니다.
곧 다시 오셔서 더 많은 스토어 성장 팁과 인사이트를 확인하세요.
수고하셨습니다. 다 읽으셨습니다!
@@ -1847,20 +1860,20 @@ Language: ko_KR
XML-RPC 서비스가 이 사이트에서 비활성화되었습니다.
Automattic 외 이메일을 사용하여 지원 티켓을 제출해 주세요.
%1$s에 등록된 Stripe 계정은 지원되지 않습니다.
- %1$s에서 WooCommerce Payments 확장 기능은 지원되지 않습니다.
리더의 전원 버튼을 누르세요.
영수증이 <strong>%s</strong>(으)로 발송되었습니다.
퍼센트(%)
+ %1$s에서 WooCommerce Payments 확장 기능은 지원되지 않습니다.
주문에서 수수료 제거
주문에서 배송 제거
배송
배송 추가
배송 추가
이름
- 금액
수수료
고객 상세 정보
수수료 추가
+ 금액
고객 메모 편집
고객 상세 정보 편집
주문 상태 편집
@@ -1876,13 +1889,13 @@ Language: ko_KR
메뉴
업데이트 후 새로 고침
플러그인 관리
- WooCommerce 결제
WooCommerce Stripe 게이트웨이
활성화된 다음 플러그인 중 하나만 직접 결제와 연동합니다. 계속하려면 사이트 관리자에게 문의하여 다음과 같은 플러그인 중 하나를 비활성화하세요.
활성화된 다음 플러그인 중 하나만 직접 결제와 연동합니다. 계속하려면 다음과 같은 플러그인 중 하나를 비활성화하세요.
충돌하는 결제 플러그인 감지됨
- 세금 합계
또는
+ WooCommerce 결제
+ 세금 합계
젯팩 설치
현재 직접 결제 사용 불가능
주문 생성됨
@@ -1953,9 +1966,7 @@ Language: ko_KR
다른 배송 주소 추가
재고 있음
%s 재고 있음
- 상품 추가
상품
- 고객 상세 정보 추가
고객
결제됨으로 표시
그러면 주문이 생성되며 WooCommerce 외부에서 결제를 받은 경우 결제됨으로 표시됩니다.
@@ -1963,6 +1974,8 @@ Language: ko_KR
결제 수단 선택
스토어 주소를 기준으로 세금이 자동으로 계산됩니다.
세금(%s%%)
+ 고객 상세 정보 추가
+ 상품 추가
결제하기(%s)
세금 청구
사용자 정의 금액
@@ -2026,8 +2039,8 @@ Language: ko_KR
금액 입력
결제하기
간편한 결제
- 기기에서 주문을 생성하세요!
분석
+ 기기에서 주문을 생성하세요!
모두 완료
스토어 연결 중
활성화 중
@@ -2111,8 +2124,8 @@ Language: ko_KR
시스템 상태 보고서
축하합니다! 이제 우커머스 결제를 통해 직불카드 또는 신용카드 결제를 수락할 수 있습니다.
카드 리더로 결제받기
- 금액이 %1$s 이상이어야 합니다.
확인
+ 금액이 %1$s 이상이어야 합니다.
새 기능 아이콘 이미지
스토어 전환
상품 %1$s 업데이트 실패
@@ -2153,10 +2166,10 @@ Language: ko_KR
배송 주소(%s)를 자동으로 확인할 수 없었습니다.
발송 주소를 자동으로 확인할 수 없었습니다. Google Maps에서 보며 주소가 올바른지 확인하세요.
기기에 상품 애드온을 더 쉽게 표시할 수 있도록 작업하는 중입니다. 지금 당장은 주문에 대한 애드온을 보실 수 있습니다. 웹 대시보드에서 이러한 애드온을 생성하고 편집하실 수 있습니다.
+ 저장
기기에서 애드온을 보세요!
웹 대시보드에서 애드온의 이름을 변경하는 경우 이전 주문에서는 앱 내에 해당 주문이 더는 표시되지 않습니다.
애드온 보기
- 저장
상세 정보 업로드(%d)
%d개 파일을 업로드할 수 없음
%d개 파일을 업로드할 수 없음
@@ -2188,10 +2201,10 @@ Language: ko_KR
테스트 모드에서는 대면 결제 사용 불가능 계속하려면 끄기로 전환하세요.
현재 대면 결제 사용 불가능
계정에 대기 중인 요구 사항이 있습니다. 대면 결제 수락을 유지하려면 %1$s을(를) 통해 해당 요구 사항을 완료하세요.
- 계정에 대기 중인 요구 사항이 있습니다.
계정에 기한이 지난 요구 사항이 하나 이상 있습니다. 대면 결제를 다시 시작하려면 해당 요구 사항을 처리하세요.
현재 대면 결제 사용 불가능
계정 검토를 완료하는 즉시 대면 결제를 수락할 수 있습니다.
+ 계정에 대기 중인 요구 사항이 있습니다.
현재 대면 결제 사용 불가능
죄송합니다. 이 스토어에서는 대면 결제가 지원되지 않습니다.
업데이트 후 새로 고침
@@ -2208,7 +2221,6 @@ Language: ko_KR
모바일 장치로 결제 수락 및 카드 리더 주문에 대해 <a href=\'\'>더 알아보기</a>
도움이 필요하세요? <a href=\'\'>지원 문의</a>
스토어에서 \"배송 시 현금 결제\"를 결제 수단으로 활성화하면 대면 현금 결제를 계속 수락할 수 있습니다.
- %1$s에서는 카드 대면 결제가 지원되지 않습니다.
계정에 연결 중
대면 결제
패키지 규격과 무게를 다시 확인하거나 패키지 상세 정보의 다른 패키지를 사용해 보세요.
@@ -2216,6 +2228,7 @@ Language: ko_KR
사용 가능한 모든 패키지가 활성화되었음
패키지 활성화 중
활성화할 패키지를 선택하세요.
+ %1$s에서는 카드 대면 결제가 지원되지 않습니다.
필수 필드
닫기
변형 생성됨
@@ -2224,11 +2237,11 @@ Language: ko_KR
변형 생성
이제 속성을 추가했으니 첫 번째 변형을 만드실 수 있습니다!
속성 생성됨
- %1$s%% 완료
진행 중인 소프트웨어 업데이트는 취소하지 않는 것이 좋습니다.
죄송합니다. 이 결제는 처리할 수 없습니다.
서버에 연결되지 않음
인터넷에 연결되지 않음
+ %1$s%% 완료
원래 포장으로 배송
새 패키지에 추가
이 아이템은 현재 %s에 있습니다. 해당 아이템을 어디로 이동하시겠어요?
@@ -2239,7 +2252,6 @@ Language: ko_KR
패키지를 생성하지 못했습니다. 다시 시도하세요.
패키지 생성 실패: 알 수 없는 API 문제가 발생했습니다.
패키지 생성 실패: %1$s
- 기다려 주세요…
새 패키지 생성하기
값이 유효하지 않습니다.
필수 필드입니다.
@@ -2253,10 +2265,11 @@ Language: ko_KR
상자
패키지 유형 선택
패키지 유형
- 상품 배송에 사용할 패키지를 설정하세요. 향후 주문을 위해 저장됩니다.
새 패키지 추가
새 패키지 생성
패키지 규격은 0보다 커야 합니다. 계속하려면 상품 페이지의 배송 섹션에서 아이템의 규격을 업데이트하세요.
+ 기다려 주세요…
+ 상품 배송에 사용할 패키지를 설정하세요. 향후 주문을 위해 저장됩니다.
원래 포장
아이템 규격
개별적으로 배송한 아이템
@@ -2269,11 +2282,11 @@ Language: ko_KR
소프트웨어 버전 업데이트를 확인하지 못했음
모바일 결제 수락 및 카드 리더 주문에 대해 <a href=\'\'>더 알아보기</a>
블루투스 켜기
- 연결된 리더 없음
리더를 연결할 수 없음
연결
리더를 몇 개 찾음
주문이 이미 결제되었음
+ 연결된 리더 없음
구매해 주셔서 감사합니다! 결제 영수증이 필요하면 아래 링크를 클릭하세요.\n\n%s
세관 양식 다운로드 중 오류 발생
세관 송장 인쇄
@@ -2289,12 +2302,11 @@ Language: ko_KR
상품 추가
변형 속성
모바일 장치 블루투스 켜기
- 주문을 가져오는 중 오류가 발생했습니다. 앱의 주문 상태가 기한이 지났을 수 있습니다.
%s에서 받은 영수증
주문 새로 고치기
앱 상태 업데이트하기
고객이 %1$s을(를) 선택함
- 세관 양식에 10자리 전화번호 필요
+ 주문을 가져오는 중 오류가 발생했습니다. 앱의 주문 상태가 기한이 지났을 수 있습니다.
세관 양식 완료됨
기기에서 인쇄하는 중 문제가 발생하면 프린터에 대한 고객 지원을 문의하세요.
인쇄를 이용할 수 없는 경우에는 언제든지 영수증을 PDF로 저장하고 이메일로 보내 다른 기기에서 인쇄할 수 있습니다.
@@ -2307,6 +2319,7 @@ Language: ko_KR
변형을 만들려면 속성(즉, \"색상\", \"사이즈\")을 먼저 설정해야 합니다.
변형 1개
변형 %1$s개
+ 세관 양식에 10자리 전화번호 필요
USPS 추적
리더의 소프트웨어 업데이트하기
소프트웨어 업데이트
@@ -2366,9 +2379,9 @@ Language: ko_KR
역할 및 권한에 대해 더 알아보기
이 앱에서는 관리자와 상점 관리자만 사용자 역할로 지원됩니다. 역할을 업그레이드하려면 스토어 소유자에게 문의하세요.
어디서나 새 제품 편집 및 추가
+ 건너뛰기
항상 주문 관리 및 편집
판매 및 고성과 상품 추적
- 건너뛰기
외부 제품
묶음 제품
변형 제품
@@ -2377,9 +2390,6 @@ Language: ko_KR
단순한 실물 제품
설정 열기
설정 열기
- 블루투스가 비활성화되었음
- 위치가 비활성화되었음
- 필수 정밀 위치 권한 없음
리더에 연결할 수 없습니다.
리더에 연결 중
리더에 연결
@@ -2387,9 +2397,10 @@ Language: ko_KR
리더 스캔 중
아이템 수
새 배송 레이블 만들기
- 단순한 가상 제품
+ 블루투스가 비활성화되었음
+ 위치가 비활성화되었음
+ 필수 정밀 위치 권한 없음
이 변경을 삭제하시겠어요?
- 변형 생성하기
제품 삭제 중
영수증 발송
영수증 인쇄
@@ -2403,6 +2414,8 @@ Language: ko_KR
배송 레이블을 미리 볼 수 없습니다. PDF 뷰어 앱을 설치하고 다시 시도하세요.
입력하신 주소의 WordPress 사이트를 찾지 못했습니다. WordPress를 설치했고 사용 가능한 최신 버전을 실행 중인지 확인하세요.
여러 배송 라인
+ 단순한 가상 제품
+ 변형 생성하기
주문을 완료로 표시할 수 없음
레이블 구매 중 오류 발생
기다려주세요…
@@ -2431,18 +2444,17 @@ Language: ko_KR
사이트 소유자만 배송 레이블 결제 수단을 관리할 수 있습니다. 결제 수단을 관리하려면 스토어 소유자 %1$s(%2$s)에게 문의하세요.
변형 추가
변형 추가
- 첫 번째 변형 생성
%s 합계
%s개 요금 선택됨
무료 서명 요건에 적합
무료 수령에 적합
- 보험(%s)
- 추적
포함 %s
성인 서명 필수(%s)
서명 필수(%s)
+ 보험(%s)
+ 추적
배송에 대해 고객이 결제한 %1$s/%2$s
- WooCommerce를 통해 배송 레이블을 구매하면 우체국 요금보다 5~40% 할인됩니다.
+ 첫 번째 변형 생성
WooCommerce 서비스 할인이란?
배송 옵션을 로드하는 중 오류가 발생했습니다.
배송업체 및 요금
@@ -2460,6 +2472,7 @@ Language: ko_KR
각 옵션 이름을 추가하고 Enter 키를 누릅니다.
또는 기존 옵션을 눌러서 선택합니다.
옵션 이름
+ WooCommerce를 통해 배송 레이블을 구매하면 우체국 요금보다 5~40% 할인됩니다.
설정 저장 중 오류 발생
기다려주세요…
설정 저장 중
@@ -2482,18 +2495,15 @@ Language: ko_KR
속성 추가하기
속성
속성 편집
- 총 패키지 무게: %1$s %2$s
%2$d 패키지의 %1$d개 아이템
총 패키지 무게: %1$s %2$s
사용자 정의 패키지
제품을 가져올 수 없음
- 특정 필수 필드가 비어 있습니다.
유효하지 않은 무게
선택한 패키지
기다려주세요…
패키지 로드 중!
패키지 %1$d
- %d개 아이템
패키지 정의를 로드할 수 없음
패키지 무게 포함
총 패키지 무게(%1$s)
@@ -2506,16 +2516,17 @@ Language: ko_KR
입력된 주소를 약간 수정했습니다. 제안된 주소가 올바르면 정확한 배송 확인에 사용하세요.
선택한 주소 편집
선택한 주소 사용
+ 특정 필수 필드가 비어 있습니다.
+ 총 패키지 무게: %1$s %2$s
+ %d개 아이템
주소 데이터 로드 중
새 기능을 사용할 수 있습니다!
- 지도에서 찾기
고객에게 문의
유효하지 않은 도로명
번지 누락
주소를 찾을 수 없음
배송 주소를 자동으로 확인할 수 없었습니다. Google Maps에서 조회하거나 고객에게 문의하여 주소가 올바른지 확인하세요.
주소 유효성 검사 실패
- 기다려주세요…
주소 유효성 검사 진행 중
주소 데이터를 로드할 수 없음
입력된 주소 사용
@@ -2526,6 +2537,8 @@ Language: ko_KR
전화
회사
이름
+ 기다려주세요…
+ 지도에서 찾기
Google Maps 앱을 찾았음
기다려주세요…
죄송합니다. 제품 변형의 이미지 제거는 WooCommerce 4.7 이상에서 지원됩니다.
@@ -2541,31 +2554,30 @@ Language: ko_KR
포장 상세 정보
배송 레이블 만들기
추가 정보
- 집에서 모바일 장치로 배송 레이블을 할인된 요금으로 인쇄하여 우체국에 가는 시간을 줄이세요!
WooCommerce 배송으로 처리하여 시간과 비용 절약
WooCommerce 배송
주문을 완료로 표시
- 모바일 장치로 레이블 만들기에 대해 자세히 알아보기
배송 레이블 만들기
- 이제 무료 WooCommerce 배송 플러그인으로 장치에서 직접 모든 실물 주문에 대한 배송 레이블을 만들 수 있습니다. \"배송 레이블 만들기\"를 눌러 베타 기능을 사용해 보세요!
장치에서 배송 레이블을 만드세요!
+ 이제 무료 WooCommerce 배송 플러그인으로 장치에서 직접 모든 실물 주문에 대한 배송 레이블을 만들 수 있습니다. \"배송 레이블 만들기\"를 눌러 베타 기능을 사용해 보세요!
+ 집에서 모바일 장치로 배송 레이블을 할인된 요금으로 인쇄하여 우체국에 가는 시간을 줄이세요!
+ 모바일 장치로 레이블 만들기에 대해 자세히 알아보기
+ 편집
수수료
순 결제
유료
Jetpack 연결에 대해 자세히 알아보기
- 편집
확인
끌어 놓아서 사진 순서 변경
+ 제거
설정 다운로드
유효한 이름을 입력하세요
파일 URL 입력
- 워드프레스 미디어 라이브러리
입력한 URL이 올바른지 확인
기다려주세요…
파일 업로드 중
파일 업로드 중 오류 발생
다운로드 가능한 파일 추가
- 다음 중에서 다운로드 가능한 파일 추가
구매 항목이 포함된 다운로드 가능한 파일 포함
취소
예. 변경합니다.
@@ -2574,7 +2586,6 @@ Language: ko_KR
파일
이 파일을 제거하시겠습니까?
다운로드 가능한 제품
- 제거
다운로드 만료
다운로드 한도
다운로드 링크 만료까지 남은 일수를 입력하거나, 만료되지 않을 경우 비워 둡니다.
@@ -2589,11 +2600,13 @@ Language: ko_KR
<b>프린터 자체에서 직접 WiFi 인쇄를 구성</b>해야 할 수도 있습니다. 프린터 펌웨어가 업데이트되어 있는지 확인하고 프린터 설명서의 지침을 참조하세요.
기기의 <b>기본 인쇄 서비스</b> 선택 또는 <b>프린터의 브랜드 앱</b> 설치(권장 옵션으로 표시된 경우) 가능
프린터와 기기가 <b>같은 WiFi 네트워크</b>에 연결되었는지 확인
- 출시 준비가 완료되면 간단하고 연결되어 있으며 그룹화된 새 제품 생성을 테스트하세요.
+ 워드프레스 미디어 라이브러리
+ 다음 중에서 다운로드 가능한 파일 추가
상향 판매 및 교차 판매로 판매 늘리기
제품 편집
상품 추가
현재 제품이 선택될 때 장바구니에서 홍보되는 제품
+ 출시 준비가 완료되면 간단하고 연결되어 있으며 그룹화된 새 제품 생성을 테스트하세요.
교차 판매
현재 보는 제품 대신에 홍보되는 제품(즉, 수익성이 더 높은 제품)
상향 판매
@@ -2601,7 +2614,6 @@ Language: ko_KR
%1$s%2$s x %3$s
이메일로 로그인 링크 받기
이 이메일 주소와 연결된 워드프레스닷컴 계정을 찾을 수 없습니다.
- 출시 준비가 끝나면 주문 애드온 테스트해 보기
제품 만들기
기본 설정
제품을 삭제하는 중 오류 발생
@@ -2613,24 +2625,25 @@ Language: ko_KR
현재 웹에서 크기 및 색상 등의 옵션을 추가할 수 있습니다. 사이트의 제품 페이지에 옵션으로 표시됩니다.
앱에서 제품을 만들어 보세요!
제품을 찾을 수 없습니다.
- 기기에서 인쇄 중 문제가 계속 발생하는 경우 <b>레이블을 PDF로 저장</b>하고 이메일로 보내 다른 기기에서 인쇄할 수 있습니다.
- <b>\"배송 레이블 인쇄\"</b>를 선택한 후, 이전에 이 기기에서 인쇄한 적이 없는 경우 프린터를 선택하고 추가해야 할 수도 있습니다.
레이블 형식 옵션
- 기기로 인쇄
레이블(4 x 6in)
편지지(8.5 x 11in)
법률 문서(8.5 x 14in)
배송 레이블을 미리 보는 중 오류 발생
- 모바일 장치에서 인쇄하는 방법을 모르시나요?
레이블 레이아웃 및 용지 크기 옵션 보기
배송 레이블 인쇄
용지 크기 선택
용지 크기
- 패키지의 레이블을 이미 사용한 경우 다시 인쇄하고 사용하는 것은 서비스 약관 위반입니다.
레이블을 구매할 때 인쇄 오류가 발생한 경우 다시 인쇄할 수 있습니다.
기기에서 바로 더 쉽게 배송 레이블을 인쇄할 수 있도록 기능을 개선하고 있습니다. 지금은 WooCommerce 배송으로 스토어 관리자에서 이 주문의 배송 레이블을 만든 경우 여기 주문 상세 정보에서 레이블을 인쇄할 수 있습니다.
기기에서 배송 레이블을 인쇄하세요!
+ 기기로 인쇄
+ 패키지의 레이블을 이미 사용한 경우 다시 인쇄하고 사용하는 것은 서비스 약관 위반입니다.
+ 기기에서 인쇄 중 문제가 계속 발생하는 경우 <b>레이블을 PDF로 저장</b>하고 이메일로 보내 다른 기기에서 인쇄할 수 있습니다.
+ <b>\"배송 레이블 인쇄\"</b>를 선택한 후, 이전에 이 기기에서 인쇄한 적이 없는 경우 프린터를 선택하고 추가해야 할 수도 있습니다.
배송 레이블 인쇄
+ 출시 준비가 끝나면 주문 애드온 테스트해 보기
+ 모바일 장치에서 인쇄하는 방법을 모르시나요?
\u0022%1$s\u0022
제품 임시글 저장됨
오류 저장 제품 임시글
@@ -2678,12 +2691,12 @@ Language: ko_KR
다른 계정으로 로그인
연결할 스토어 선택
워드프레스닷컴으로 계속하기
- 색상이나 크기와 같은 선택사항이 있는 제품
%d 제품 선택됨
%d 제품 선택됨
그룹에 제품 추가
제품 추가
비밀번호 입력
+ 색상이나 크기와 같은 선택사항이 있는 제품
스토어로 돌아가기
여기에서 문의하세요.
이것은 지원 티켓이 아니며 저희는 개별적인 피드백을 해결할 수 없습니다.\n\n도움이 필요하세요? %1$s
@@ -2708,8 +2721,8 @@ Language: ko_KR
가격이 설정되지 않음
활성화
할인이 예정되어 있으면 할인 가격을 설정해야 합니다.
- 이제 그룹화된 제품, 외부 제품, 선택사항이 있는 제품을 편집하고 제품 유형을 변경하고 카테고리와 태그를 업데이트할 수 있습니다.
%1$s 리뷰를 남겼습니다.
+ 이제 그룹화된 제품, 외부 제품, 선택사항이 있는 제품을 편집하고 제품 유형을 변경하고 카테고리와 태그를 업데이트할 수 있습니다.
마음에 들어요
조금 마음에 들지 않아요
WooCommerce 앱이 마음에 드시나요?
@@ -2718,24 +2731,24 @@ Language: ko_KR
태그를 추가하던 중 오류 발생
태그 추가 중
환불을 처리하는 중입니다. 기다려주세요…
- 환불 요청이 제출되었음
환불 레이블(-%1$s)
환불 가능 금액
구매 날짜
- 패키지를 배송하는 데 사용되지 않은 배송 레이블은 환불을 요청할 수 있습니다. 처리하는 데 14일 이상 걸립니다.
환불 요청
배송 레이블 환불
+ 패키지를 배송하는 데 사용되지 않은 배송 레이블은 환불을 요청할 수 있습니다. 처리하는 데 14일 이상 걸립니다.
+ 환불 요청이 제출되었음
실제
제품 요약문
태그를 사용하여 제품을 더 쉽게 찾을 수 있습니다.
제품을 관련 그룹으로 구성
+ 비활성
무게 및 치수 추가
세부사항 추가
태그로 제품 정리
첫 태그 추가
태그
태그 추가
- 비활성
가상 제품
세부사항 추가
%1$s 제품
@@ -2743,9 +2756,7 @@ Language: ko_KR
%s 제품
남은 제품
%1$s \u2022 %2$s
- %1$s 레이블 환불 요청됨
배송 추적
- %1$s\n%2$s
배송 상세 정보 숨기기
배송 상세 정보 표시
신용카드
@@ -2755,6 +2766,8 @@ Language: ko_KR
배송지
출발지
패키지 %d
+ %1$s\n%2$s
+ %1$s 레이블 환불 요청됨
SKU: %1$s
%1$s(옵션 %2$s개)
배송 레이블
@@ -2775,8 +2788,8 @@ Language: ko_KR
캘리포니아 사용자를 위한 개인정보 공지
변경 사항 유지
%1$s까지
- 제품에 더 많은 편집 기능을 추가했습니다! 이제 이미지를 업데이트하고, 미리 보기를 실행하고, 제품을 공유할 수 있습니다.
사용 가능한 새 편집 옵션
+ 제품에 더 많은 편집 기능을 추가했습니다! 이제 이미지를 업데이트하고, 미리 보기를 실행하고, 제품을 공유할 수 있습니다.
제한적인 편집 가능
제품
%1$s x %2$s
@@ -2870,11 +2883,11 @@ Language: ko_KR
가로
길이
환불된 제품
- %1$s(%2$s x %3$d)
%2$s을(를) 통한 %1$s
환불을 발행하시겠습니까? 취소할 수 없습니다.
환불된 제품
환불
+ %1$s(%2$s x %3$d)
워드프레스닷컴 가입
죄송합니다. \"%s\" 검색 결과를 찾을 수 없습니다.
내 매장의 고품질 제품 리뷰 캡처
@@ -2895,33 +2908,32 @@ Language: ko_KR
재고 추가
주문 검색 중…
텍스트 입력
- 제품 제목 입력
- 상품 저장됨
제품을 업데이트하는 중 오류 발생
기다려주세요…
제품 설명
설명
설명 수정
+ 제품 제목 입력
+ 상품 저장됨
+ 완료
변경 사항을 삭제하시겠습니까?
업데이트
- 완료
환불이 진행 중입니다. 잠시 기다려 주세요…
배송비 환불
수량 선택
배송비 환불
제품 환불
- 각각 %1$s x %2$s
%d개 항목 선택됨
아무것도 선택하지 않음
모두 선택
환불 확인을 기다리는 중…
+ 각각 %1$s x %2$s
빠른 업로드를 위해 이미지 크기 조정 및 압축
이미지 최적화
사진 촬영
기기에서 선택
업로드 방법 선택
업로드
- 이미지 업로드 중…%1$d/%2$d개
이미지 업로드 중…
카메라에 액세스할 수 없습니다.
이 이미지를 제거하시겠습니까?
@@ -2936,6 +2948,7 @@ Language: ko_KR
이미지 추가
다음
제거
+ 이미지 업로드 중…%1$d/%2$d개
사이트에 액세스할 수 없습니다. 이 문제를 해결하려면 호스트에게 연락해야 합니다.
<b>SSL 인증서</b> 문제로 인해 사이트에 액세스할 수 없습니다. 이 문제를 해결하려면 호스트에게 연락해야 합니다.
<b>HTTP 인증</b>이 필요하므로 사이트에 액세스할 수 없습니다. 이 문제를 해결하려면 호스트에게 연락해야 합니다.
@@ -2944,8 +2957,8 @@ Language: ko_KR
사이트 자격 증명으로 로그인하세요.
%1$s 사이트 자격 증명으로 로그인
인증 이메일 보내기
- 출시 준비가 완료되면 새 제품 편집 기능을 테스트하세요.
제품 편집
+ 출시 준비가 완료되면 새 제품 편집 기능을 테스트하세요.
계정을 가져오는 중에 문제가 발생했습니다. 지금 다시 시도하거나 닫고 나중에 다시 시도할 수 있습니다.
오류가 발생했습니다. 계속하려면 로그인하세요.
사이트에 연결하는 중…
@@ -2980,15 +2993,12 @@ Language: ko_KR
일치하는 제품이 없음
아직 제품이 없음
%s 재고 있음
- 재고 있음 \u2022 %d 버전
상품 이미지
%1$s 님이 %2$s에 대한 검토를 남김
받아들이지 않기
신제품 리뷰를 가져오는 동안 오류 발생
제품 리뷰를 가져오는 동안 오류 발생
- 환불에 문제가 발생했습니다. 다시 시도하세요.
- 환불이 성공적으로 제출되었습니다.
- %s에 대한 환불을 처리 중입니다. 기다려주세요…
+ 재고 있음 \u2022 %d 버전
인용 아이콘
수동 환불
환불 정보
@@ -3006,6 +3016,9 @@ Language: ko_KR
%s 환불
%s 환불 가능
환불 발행
+ 환불에 문제가 발생했습니다. 다시 시도하세요.
+ 환불이 성공적으로 제출되었습니다.
+ %s에 대한 환불을 처리 중입니다. 기다려주세요…
%2$s을(를) 통한 %1$s
향상된 통계
베타 기능
@@ -3019,12 +3032,12 @@ Language: ko_KR
오늘의 통계
로그인
이미 젯팩이 있나요? %1$s
- 젯팩으로 로그인 시도 중…
앱을 새로 고친 후 계속
- %1$s에서 이 앱을 사용하려면 젯팩 플러그인을 설정하고 이 계정에 연결되어 있어야 합니다. \n\n설정을 마쳤으면 앱을 새로 고침하세요.
다른 스토어 시도
데이터베이스 다운그레이드됨, 테이블 다시 생성 및 스토어 로드 중
스토어 로드 중
+ 젯팩으로 로그인 시도 중…
+ %1$s에서 이 앱을 사용하려면 젯팩 플러그인을 설정하고 이 계정에 연결되어 있어야 합니다. \n\n설정을 마쳤으면 앱을 새로 고침하세요.
이동 통신사를 찾을 수 없음
example.com과 같은 완전한 웹사이트 주소를 입력하세요.
아직 리뷰가 없습니다!
@@ -3035,12 +3048,11 @@ Language: ko_KR
설정을 가져올 수 없음: 이 OAuth 앱 ID + 계정 조합에 일부 API를 사용할 수 없습니다.
우리와 함께해요!
추적 번호 복사
- WooCommerce 확인 중…
앱 새로 고침
+ WooCommerce 확인 중…
지정된 주소 없음
연결한 이메일을 찾는 데 도움이 필요하신가요?
이 주소의 웹사이트는 워드프레스 사이트가 아닙니다. 워드프레스에서 연결하려면 사이트에 워드프레스가 설치되어 있어야 합니다.
- 워드프레스닷컴으로 로그인하여 <b>%1$s</b>에 연결
Zimbabwe
Zambia
Yemen
@@ -3048,7 +3060,6 @@ Language: ko_KR
Wallis and Futuna
베트남
Venezuela
- 바티칸
Vanuatu
Uzbekistan
Uruguay
@@ -3087,13 +3098,11 @@ Language: ko_KR
Solomon Islands
Slovenia
Slovakia
- 싱가폴
Sierra Leone
Seychelles
Serbia
Senegal
Saudi Arabia
- 산 마리오
사모아
Saint Vincent and the Grenadines
Saint Pierre and Miquelon
@@ -3106,17 +3115,12 @@ Language: ko_KR
Rwanda
Russia
Romania
- 레위니옹
- 카타르
- 푸레르토 리코
Portugal
Poland
- 핏케언
Philippines
Peru
Paraguay
Papua New Guinea
- 파나마
Palestinian Territory
Pakistan
Oman
@@ -3124,7 +3128,6 @@ Language: ko_KR
Northern Mariana Islands
North Korea
Norfolk Island
- 니우에
Nigeria
Niger
Nicaragua
@@ -3132,32 +3135,23 @@ Language: ko_KR
New Caledonia
Netherlands
Nepal
- 나우루
Namibia
Myanmar
Mozambique
Morocco
- 몬트세랫
Montenegro
Mongolia
- 모나코
몰도바
미크로네시아
Mexico
- 마요티
- 모리셔스
Mauritania
- 마르티니크
Marshall Islands
- 몰타
Mali
- 몰디브
Malaysia
Malawi
Madagascar
마케도니아
마카오 특별 행정구 중국
- 룩셈부르크
Lithuania
Liechtenstein
Libya
@@ -3167,18 +3161,36 @@ Language: ko_KR
Latvia
Laos
Kyrgyzstan
- 쿠웨이트
Kiribati
Kenya
Kazakhstan
Jordan
- 저지
일본
- 자메이카
Ivory Coast
이탈리아
+ 바티칸
+ 싱가폴
+ 산 마리오
+ 레위니옹
+ 카타르
+ 푸레르토 리코
+ 핏케언
+ 파나마
+ 니우에
+ 나우루
+ 몬트세랫
+ 모나코
+ 마요티
+ 모리셔스
+ 마르티니크
+ 몰타
+ 몰디브
+ 룩셈부르크
+ 쿠웨이트
+ 저지
+ 자메이카
+ 워드프레스닷컴으로 로그인하여 <b>%1$s</b>에 연결
Israel
- 맨섬
아일랜드
Iraq
Iran
@@ -3186,21 +3198,13 @@ Language: ko_KR
India
Iceland
Hungary
- 홍콩
Honduras
Heard Island and McDonald Islands
Haiti
- 가이아나
Guinea-Bissau
Guinea
- 건지
- 과테말라
- 괌
- 과들루프
- 그레나다
Greenland
Greece
- 지브롤터
Ghana
독일
Georgia
@@ -3283,24 +3287,15 @@ Language: ko_KR
아프가니스탄
올란드 제도
검토
- 지역 이동 통신사
사용자 정의
- 이동 통신사 이름을 입력하세요.
추적 번호를 입력하세요.
- 이동 통신사를 선택하세요.
이 추적을 취소하시겠습니까?
추적을 추가할 수 없음
배송 추적이 추가됨
- 이동 통신사를 가져오는 중 오류 발생
- 선택한 운송업체
- 운송업체
배송일
추적 링크 입력
- 이동 통신사 이름 입력
추적 번호 입력
- 이동 통신사 선택
추적 링크(옵션)
- 이동 통신사 이름
추적 번호
배송업체
추적 추가
@@ -3313,19 +3308,34 @@ Language: ko_KR
배송 추적
사이트 관리에서 %1$sJetpack 대시보드%2$s(%3$s연결 > 계정 연결%4$s)에서 워드프레스닷컴에 연결하는 데 사용한 이메일을 찾을 수 있습니다.
로그인할 때 어떤 이메일을 사용하나요?
- 필수 이메일을 찾는 도움말이 필요하신가요?
Jetpack은 스토어를 최고의 모바일 환경을 제공하는 데 필요한 푸시 알림, 통계 등의 도구와 연결하는 무료 워드프레스 플러그인입니다.
Jetpack이란 무엇인가요?
연결된 스토어 보기
- %1$s이(가) 다른 워드프레스닷컴 계정에 연결된 것 같습니다.
계속 편집하기
+ 맨섬
+ 홍콩
+ 가이아나
+ 건지
+ 과테말라
+ 괌
+ 과들루프
+ 그레나다
+ 지브롤터
+ 지역 이동 통신사
+ 이동 통신사 이름을 입력하세요.
+ 이동 통신사를 선택하세요.
+ 이동 통신사를 가져오는 중 오류 발생
+ 선택한 운송업체
+ 운송업체
+ 이동 통신사 이름 입력
+ 이동 통신사 선택
+ 이동 통신사 이름
+ %1$s이(가) 다른 워드프레스닷컴 계정에 연결된 것 같습니다.
+ 필수 이메일을 찾는 도움말이 필요하신가요?
사용자 이름과 비밀번호를 사용하여 로그인하세요.
이메일 주소가 아닌 워드프레스닷컴 사용자 이름을 사용하여 로그인하세요.
이 주소의 사이트는 워드프레스 사이트가 아닙니다. 연결하려면 사이트에서 워드프레스를 사용해야 합니다.
도움말 센터
- 가상
- 그룹
- 옵션
허용하지만 고객에게 알림
허용
허용하지 않음
@@ -3333,6 +3343,9 @@ Language: ko_KR
품절
재고 있음
더 보기
+ 그룹
+ 옵션
+ 가상
이미지를 로드할 수 없음
임시글
비공개
@@ -3378,11 +3391,11 @@ Language: ko_KR
지금 사용해 보기
이해함
탭하여 스토어 전환
- 스토어 선택
로그아웃
주문 상태 변경
클릭하여 주문 상태 변경
적용
+ 스토어 선택
안 함
나중에
지금 평가
@@ -3396,11 +3409,11 @@ Language: ko_KR
스토어를 WooCommerce 3.5로 업데이트
%s에 연결할 수 없음
무시
- 모든 리뷰를 읽음으로 표시하는 중 오류가 발생했습니다.
모두 읽음으로 표시
메시지
전화
전화 또는 메시지 고객
+ 모든 리뷰를 읽음으로 표시하는 중 오류가 발생했습니다.
제품 리뷰 상태를 업데이트하는 동안 오류가 발생했습니다
제품 리뷰 세부정보를 로드하는 동안 오류가 발생했습니다
휴지통
@@ -3413,16 +3426,16 @@ Language: ko_KR
알림 관리
알림
%s 계정에서 로그아웃하시겠습니까?
- %1$s(으)로 표시된 리뷰
해제된 경우 메모는 비공개가 됩니다.
+ %1$s(으)로 표시된 리뷰
주문을 가져오는 동안 오류가 발생했습니다
뒤로
제품 리뷰 알림
새 주문 알림
고객에게
- 사이트 확인 중…
업데이트 지침
검색
+ 사이트 확인 중…
새로 고침
외 %d개의 알림
%d개의 새 알림
@@ -3432,9 +3445,9 @@ Language: ko_KR
이름
오픈 소스 라이선스
앱 정보
- 로그를 공유할 수 없음
클립보드에 복사하는 중 오류 발생
로그가 클립보드에 복사됨
+ 로그를 공유할 수 없음
애플리케이션 로그
\'도움 & 지원\'의 새 메시지
우커머스
@@ -3454,9 +3467,9 @@ Language: ko_KR
충돌 보고서
공유
%s 버전
- HTTP 암호
- HTTP 사용자 이름
- 인증이 필요합니다
+ SMS 확인 코드를 보내려는 시도가 너무 많았습니다. 잠시 후 다시 요청하세요.
+ 이 Google 계정과 일치하는 워드프레스닷컴 계정이 없습니다.
+ 젯팩에 연결하는 데 사용한 워드프레스닷컴 계정으로 로그인하세요.
매직 링크가 전송됨
이메일 가입
코드 확인
@@ -3465,32 +3478,9 @@ Language: ko_KR
매직 링크 로그인
사이트 주소 로그인
이메일 주소 로그인
- 오류가 발생했습니다.
- 계속하려면 인증 코드를 입력하세요.
- 계속하려면 비밀번호를 다시 확인하세요.
- 로그인 중지됨
- 로그인하는 동안 잠시 기다려 주세요.
- 로그인 진행 중…
- 계속하려면 누르세요.
- 로그인됨!
- 네트워크 오류가 발생했습니다. 연결을 확인하고 다시 시도하세요.
- 워드프레스닷컴 또는 젯팩에 연결된 독립 호스트 워드프레스 사이트를 입력하세요.
- 연결할 수 없습니다. 사이트\n XMLRPC 엔드포인트에 액세스를 시도할 때 403 오류가 발생했습니다. 사이트와 통신하려면 이 앱에 필요합니다. 호스트에 문의하여\n 이 문제를 해결하세요.
- 연결할 수 없습니다. 호스트가 POST 요청을 차단하고 있으므로, 사이트와 통신하려면 이 앱에\n 필요합니다. 호스트에 문의하여 이 문제를 해결하세요.
- 연결할 수 없습니다. 필수 XML-RPC 함수가 서버에 없습니다.
- 입력한 사이트 URL이 올바른지 확인합니다.
- 오류가 발생 했습니다. 나중에 다시 시도 하십시오.
- 패스워드를 잊으셨나요?
- 유효한 이메일 주소를 입력 하십시오.
- 이메일 확인 중
- 계속하려면 다시 로그인하세요.
- 젯팩에 연결하는 데 사용한 워드프레스닷컴 계정으로 로그인하세요.
- 프로필을 검색할 수 없습니다.
- 중복 사이트가 감지되었습니다.
- 이 사이트가 이미 앱에 있으므로, 추가할 수 없습니다.
- 입력된 사용자 이름이나 암호가 잘못되었습니다.
- Google에서 응답하는 데 너무 오래 걸립니다. 더 강한 인터넷 연결이 있을 때까지 기다려야 할 수 있습니다.
+ 아직 계정이 없으신가요? %1$s가입하세요.%2$s
Google로 가입하는 중…
+ Google에서 응답하는 데 너무 오래 걸립니다. 더 강한 인터넷 연결이 있을 때까지 기다려야 할 수 있습니다.
Google로 가입
이메일로 가입
가입하려면 %1$s서비스 약관%2$s에 동의해야 합니다.
@@ -3500,20 +3490,54 @@ Language: ko_KR
이메일을 보내는 중에 문제가 발생했습니다. 지금 다시 시도하거나 닫고 나중에 다시 시도할 수 있습니다.
새 워드프레스닷컴 계정을 만들려면 이메일 주소를 입력하세요.
이메일 주소를 확인하는 중에 문제가 발생했습니다.
- \n다른 계정을 사용해 보세요.
+ 오류가 발생했습니다.
+ 계속하려면 인증 코드를 입력하세요.
+ 계속하려면 비밀번호를 다시 확인하세요.
+ 로그인 중지됨
+ 로그인하는 동안 잠시 기다려 주세요.
+ 로그인 진행 중…
+ 계속하려면 누르세요.
+ 로그인됨!
Google 로그인을 시작할 수 없습니다.
- SMS 확인 코드를 보내려는 시도가 너무 많았습니다. 잠시 후 다시 요청하세요.
+ 비밀번호를 입력하세요.
+ \n다른 계정을 사용해 보세요.
Google 계정과 연결하는 데 문제가 발생했습니다.
- 이 Google 계정과 일치하는 워드프레스닷컴 계정이 없습니다.
닫기
Google로 로그인합니다.
+ 네트워크 오류가 발생했습니다. 연결을 확인하고 다시 시도하세요.
다음 계정으로 로그인됨
이메일 클라이언트 앱을 감지할 수 없습니다.
- 아직 계정이 없으신가요? %1$s가입하세요.%2$s
확인 코드를 입력하세요.
- 비밀번호를 입력하세요.
- 사용자명을 입력하세요.
+ 중복 사이트가 감지되었습니다.
+ 이 사이트가 이미 앱에 있으므로, 추가할 수 없습니다.
+ 연결할 수 없습니다. 호스트가 POST 요청을 차단하고 있으므로, 사이트와 통신하려면 이 앱에\n 필요합니다. 호스트에 문의하여 이 문제를 해결하세요.
+ 이메일 확인 중
+ 연결할 수 없습니다. 필수 XML-RPC 함수가 서버에 없습니다.
+ 프로필을 검색할 수 없습니다.
+ 계속하려면 다시 로그인하세요.
+ 패스워드를 잊으셨나요?
+ 입력된 사용자 이름이나 암호가 잘못되었습니다.
+ 유효한 이메일 주소를 입력 하십시오.
+ 오류가 발생 했습니다. 나중에 다시 시도 하십시오.
+ 인증이 필요합니다
+ 입력한 사이트 URL이 올바른지 확인합니다.
+ HTTP 암호
+ HTTP 사용자 이름
+ 워드프레스닷컴 또는 젯팩에 연결된 독립 호스트 워드프레스 사이트를 입력하세요.
+ 연결할 수 없습니다. 사이트\n XMLRPC 엔드포인트에 액세스를 시도할 때 403 오류가 발생했습니다. 사이트와 통신하려면 이 앱에 필요합니다. 호스트에 문의하여\n 이 문제를 해결하세요.
+ 또는:
+ 일반
+ \@%s
+ 사용자명으로 로그인하세요.
+ 사이트 주소를 입력하여 로그인하세요.
+ 대신 다른 코드를 문자로 받습니다.
+ %s(으)로 끝나는 전화 번호로 문자 메시지를 보냈습니다. SMS의 확인 코드를 입력하세요.
+ 이 Google 계정으로 진행하려면 일치하는 워드프레스닷컴 비밀번호를 제공하세요. 이 메시지는 한 번만 표시됩니다.
콘텐츠를 공유하려면 워드프레스닷컴에 로그인하세요.
+ 콘텐츠를 공유하려는 워드프레스 사이트의 주소를 입력하세요.
+ 기본 웹 브라우저를 여는 동안 오류가 발생했습니다. 다른 앱을 선택해주세요.
+ 링크를 열 수 없습니다
+ 사용자명을 입력하세요.
글에 액세스하려면 워드프레스닷컴에 로그인하세요.
사이트를 추가하는 동안 오류가 발생했습니다. 에러 코드: %s
사이트 주소 확인 중
@@ -3522,25 +3546,15 @@ Language: ko_KR
내 사이트 주소는 무엇인가요?
사이트 주소를 찾는 데 도움이 필요하세요?
사이트 주소
- 콘텐츠를 공유하려는 워드프레스 사이트의 주소를 입력하세요.
\@%s
워드프레스닷컴에 이미 로그인되어 있습니다.
계속
- 사이트 연결
다른 사이트 연결
- 이 Google 계정으로 진행하려면 일치하는 워드프레스닷컴 비밀번호를 제공하세요. 이 메시지는 한 번만 표시됩니다.
워드프레스닷컴 비밀번호를 입력합니다.
- 현재 사용할 수 없습니다. 비밀번호를 입력하세요.
로그인 이메일 요청 중
이 비밀번호가 올바르지 않은 것 같습니다. 정보를 확인하고 다시 시도하세요.
SMS를 통해 확인 코드를 요청 중입니다.
- 대신 다른 코드를 문자로 받습니다.
대신 코드를 문자로 받습니다.
- %s(으)로 끝나는 전화 번호로 문자 메시지를 보냈습니다. SMS의 확인 코드를 입력하세요.
- 마무리 단계입니다! 인증 앱의 워드프레스닷컴 확인 코드를 입력하세요.
- 사용자명으로 로그인하세요.
- 사이트 주소를 입력하여 로그인하세요.
- 또는:
메일 열기
다음
이동 중에 젯팩 지원 사이트를 관리하세요. 어디에 가든지 워드프레스가 함께합니다.
@@ -3548,29 +3562,35 @@ Language: ko_KR
언제, 어디서든지 즐겨 찾는 사이트의 최신 소식을 확인하고 대화에 참여하세요.
전 세계 독자들이 회원님의 사이트의 글을 읽고 상호 작용하는 것을 실시간으로 지켜보세요.
공원에서 글을 발행하세요. 버스에서 블로그를 방문하세요. 카페에서 댓글을 다세요. 워드프레스는 어디에서든 사용할 수 있습니다.
- 로그인
- 도우미
- 암호
- 사용자 이름
- 비밀번호를 대신 입력하세요.
+ 이미 워드프레스닷컴 계정에 로그인되어 있으므로 다른 계정에 연결된 워드프레스닷컴 사이트를 추가할 수 없습니다.
+ 다시 시도
+ 로그아웃
링크 전송
+ 현재 사용할 수 없습니다. 비밀번호를 입력하세요.
+ 로그인 중
+ 비밀번호를 대신 입력하세요.
+ 이메일 주소
+ 세부사항
+ 실행 취소
잘못된 확인 코드
확인 코드
- 이메일 주소
+ 도우미
+ 제거
+ 로그인
+ 사용자 이름
+ 암호
+ 제목 미설정
+ 설정
+ 오늘
+ 취소
우커머스 Android %s 지원
옵션이 선택되지 않음
옵션이 선택됨
타사 정책
쿠키 정책
- 개인정보 보호정책
- 많은 사랑을 받는 Automattic 제품. %1$s
워드프레스는 타사 제품을 포함한 다른 추적 도구를 사용합니다. 이 도구에 대해 읽고 제어하는 방법에 대해 알아보세요.
- 개인정보 보호정책 읽기
- 이 정보는 개인정보 보호정책에 명시된 바와 같이 제품을 개선하고, 더 관련성 높은 마케팅을 제공하며, 우커머스 환경을 개인 설정하는 데 도움을 줍니다.
워드프레스 계정에 로그인되어 있는 동안 이용하는 서비스에 대한 정보를 워드프레스의 분석 도구와 공유합니다.
정보 수집
- 프라이버시 설정
- 설정
주문 상태
환불됨
취소됨
@@ -3584,7 +3604,6 @@ Language: ko_KR
추가
고객에게 이메일로 메모 보내기
주문을 변경하는 중 오류 발생
- 메모를 가져오는 중 오류 발생
주문이 완료로 표시됨
주문을 완료로 표시
주문 메모 추가
@@ -3593,7 +3612,6 @@ Language: ko_KR
청구 표시
결제가 처리됨
주문 메모
- 비공개
주문 메모 작성
고객 프로필 이미지
고객이 남긴 메모
@@ -3618,8 +3636,6 @@ Language: ko_KR
주문 없음
주문 보기
주문 보기
- 이 기간에 활동이 없음
- 총 주문 수: %s
오류 이미지
데이터를 가져오는 중 오류 발생
수입
@@ -3633,17 +3649,11 @@ Language: ko_KR
우커머스 스토어 없음
프로필 사진
연결된 스토어
- %1$s구성 지침%2$s을 읽어보세요.
이 앱에서 회원님의 스토어에 연결하려면 젯팩이 있어야 합니다.
- \@%s
- 연결하려는 WooCommerce 스토어의 주소를 입력합니다.
워드프레스닷컴 계정 이메일 주소로 로그인하여 우커머스 스토어를 관리하세요.
- 이미 워드프레스닷컴 계정에 로그인되어 있으므로 다른 계정에 연결된 워드프레스닷컴 사이트를 추가할 수 없습니다.
- 링크를 열 수 없습니다
SMS 앱이 없음
이메일 앱이 없음
전화 앱이 없음
- 기본 웹 브라우저를 여는 동안 오류가 발생했습니다. 다른 앱을 선택해주세요.
링크를 열 수 없음
%2$s, %1$s
1개월 이상 지남
@@ -3652,22 +3662,14 @@ Language: ko_KR
어제
오늘
상품
- 제거
올해
이번 달
이번 주
- 오늘
상품
네트워크를 사용할 수 없습니다. 데이터 또는 Wi-Fi 연결을 확인하세요.
오프라인 u2014 캐시된 데이터 사용
더 알아보기
- 취소
- 제목 미설정
계속
- 실행 취소
- 다시 시도
- 상세 정보 숨기기
- 세부사항
할인
소계
세금
@@ -3678,11 +3680,22 @@ Language: ko_KR
%1$s%2$s
주문
내 스토어
- 로그아웃
- 로그인 중
모두
- 일반
우커머스
+ 개인정보 보호정책
+ 개인정보 보호정책 읽기
+ 이 정보는 개인정보 보호정책에 명시된 바와 같이 제품을 개선하고, 더 관련성 높은 마케팅을 제공하며, 우커머스 환경을 개인 설정하는 데 도움을 줍니다.
+ 프라이버시 설정
+ 상세 정보 숨기기
+ 많은 사랑을 받는 Automattic 제품. %1$s
+ 연결하려는 WooCommerce 스토어의 주소를 입력합니다.
+ 비공개
+ 사이트 연결
+ 이 기간에 활동이 없음
+ 총 주문 수: %s
+ 메모를 가져오는 중 오류 발생
+ %1$s구성 지침%2$s을 읽어보세요.
+ 마무리 단계입니다! 인증 앱의 워드프레스닷컴 확인 코드를 입력하세요.
- @string/date_timeframe_custom
- @string/date_timeframe_today
diff --git a/WooCommerce/src/main/res/values-nl/strings.xml b/WooCommerce/src/main/res/values-nl/strings.xml
index 3b7c4fef79d..549381654de 100644
--- a/WooCommerce/src/main/res/values-nl/strings.xml
+++ b/WooCommerce/src/main/res/values-nl/strings.xml
@@ -1,11 +1,27 @@
+ Fout bij laden van variaties
+ \'Meer items laden mislukt. Probeer het opnieuw.\'
+ Terug
+ %1$d variaties
+ Variatie %s, prijs %s
+ Variabel product %s, prijs %s
+ De omschrijving mag niet leeg zijn
+ Call-to-action
+ De slogan mag niet leeg zijn
+ Controleer of je e-mailadres klopt en check je spammap.
+ We kunnen geen WordPress.com-account vinden met deze gebruikersnaam. Je kan een e-mailadres invoeren om een nieuw account aan te maken.
+ Voer een streepjescode of een andere unieke identificatiecode voor dit product in. Hiermee kan je dit product op andere kanalen of marktplaatsen vermelden.
+ GTIN, UPC, EAN, ISBN
+ LAATSTE UITBETALING
+ Markeer deze bestelling na de aanschaf van een label als voltooid en informeer de klant.
+ Als je nog geen account hebt, gebruiken we dit e-mailadres om er een aan te maken.
Envelop
Doos
Pakket toevoegen
@@ -30,7 +46,6 @@ Language: nl
Voordeligste
Label aanschaffen
Label aanschaffen %1$s
- Markeer deze bestelling als voltooid en informeer de klant
Verzendkosten
Bestelgegevens
Verzendingsgegevens
@@ -559,7 +574,6 @@ Language: nl
Taal
Budget:
Details
- Nu winkelen
Advertentie bewerken
Voorbeeldweergave
Uitgeschakeld
@@ -585,7 +599,6 @@ Language: nl
Klaar om te promoten
Zorg dat je producten door miljoenen mensen worden gezien
Gebruik %1$s
- VORIGE STORTING
Besteltotalen uitklappen/samenvouwen
Betaling innen
De code moet de volgende indeling hebben: XXXX-XXXX-XXXX-XXXX
@@ -667,9 +680,9 @@ Language: nl
Documenten op apparaat
✨Dankbericht aanmaken
Btw rekenen
- Beschikbare bedragen worden automatisch elke %s gestort.
- Beschikbare bedragen worden automatisch elke dag gestort.
- Bedragen komen na %d dagen in de wacht beschikbaar.
+ Beschikbare bedragen worden automatisch elke %s uitbetaald.
+ Beschikbare bedragen worden automatisch elke dag uitbetaald.
+ Bedragen komen na %d dagen in de wacht beschikbaar.
Selecteer een variatie
Variaties kiezen…
\" %1$s \" -> %2$s
@@ -708,19 +721,19 @@ Language: nl
Periode
Factuurinterval
Verkoop
- Onbekend
- Mislukt
- Geannuleerd
- In transit
- In behandeling
- Betaald
- Geschat
- Samenvatting stortingen uit-/inklappen
- Meer informatie over wanneer je je bedragen ontvangt
- Beschikbare bedragen worden automatisch elke maand op de %s gestort.
- Bedragen komen na %d dag in de wacht beschikbaar.
- Bedragen in behandeling
- Beschikbare bedragen
+ Onbekend
+ Mislukt
+ Geannuleerd
+ In transit
+ In behandeling
+ Betaald
+ Geschat
+ Samenvatting uitbetalingen uit-/inklappen
+ Meer informatie over wanneer je je bedragen ontvangt
+ Beschikbare bedragen worden automatisch elke maand op de %s uitbetaald.
+ Bedragen komen na %d dag in de wacht beschikbaar.
+ Bedragen in behandeling
+ Beschikbare bedragen
Belastingen
Producten
Totale betalingen
diff --git a/WooCommerce/src/main/res/values-pt-rBR/strings.xml b/WooCommerce/src/main/res/values-pt-rBR/strings.xml
index 41353600f93..333d4efe54b 100644
--- a/WooCommerce/src/main/res/values-pt-rBR/strings.xml
+++ b/WooCommerce/src/main/res/values-pt-rBR/strings.xml
@@ -1,11 +1,27 @@
+ Erro ao carregar variações
+ \"Falha ao carregar mais itens. Tente novamente.\"
+ Voltar
+ %1$d variações
+ Variação: %s; preço: %s
+ Produto variável: %s; preço: %s
+ A descrição não pode ficar em branco
+ Chamada para ação
+ A descrição não pode ficar em branco
+ Confirme se o e-mail está correto e verifique sua pasta de spam.
+ Não encontramos nenhuma conta do WordPress.com conectada a este nome de usuário. Insira um e-mail para criar uma conta nova.
+ Insira um código de barras ou algum outro identificador exclusivo deste produto. Isso pode ajudar a listar o produto em outros canais ou marketplaces.
+ GTIN, UPC, EAN, ISBN
+ ÚLTIMO PAGAMENTO
+ Depois de comprar a etiqueta, marque este pedido como concluído e notifique o cliente.
+ Se você não tiver uma conta, usaremos este e-mail para criar uma.
Envelope
Caixa
Adicionar pacote
@@ -30,7 +46,6 @@ Language: pt_BR
Mais barato
Comprar etiqueta
Comprar etiqueta · %1$s
- Marcar este pedido como concluído e notificar o cliente
Frete
Detalhes do pedido
Detalhes do envio
@@ -535,11 +550,11 @@ Language: pt_BR
Mudar imagem
Aplicar
%1$s dias
- As impressões demonstram a frequência com que seu anúncio aparece para possíveis clientes.\n\n\n Apesar de o número exato não poder ser garantido por conta das variações no tráfego online e no comportamento do usuário, nós nos esforçamos para corresponder ao máximo as impressões reais do seu anúncio à contagem desejada.\n\n\n E lembre-se: as impressões têm a ver com a visibilidade, e não com as ações dos visitantes.
Concluído
Impressões
Atualizar
Editar
+ As impressões demonstram a frequência com que seu anúncio aparece para possíveis clientes.\n\n\n Apesar de o número exato não poder ser garantido por conta das variações no tráfego online e no comportamento do usuário, nós nos esforçamos para corresponder ao máximo as impressões reais do seu anúncio à contagem desejada.\n\n\n E lembre-se: as impressões têm a ver com a visibilidade, e não com as ações dos visitantes.
Estimativa de pessoas alcançadas por dia
%1$s ao dia
por %1$s dias
@@ -559,7 +574,6 @@ Language: pt_BR
Idioma
Orçamento
Detalhes
- Comprar agora
Visualizar
Editar anúncio
Desativada
@@ -585,7 +599,6 @@ Language: pt_BR
Tudo pronto para promover
Mostre seu produto a milhões de pessoas
Usar %1$s
- ÚLTIMO DEPÓSITO
Expandir/recolher totais de pedidos
Receber pagamento
O código deve estar no formato XXXX-XXXX-XXXX-XXXX
@@ -667,9 +680,9 @@ Language: pt_BR
Documentos e outros arquivos no dispositivo
✨Criar texto de agradecimento
Cobrar impostos
- O dinheiro disponível é depositado automaticamente a cada %s.
- O dinheiro disponível é depositado automaticamente todo dia.
- O dinheiro fica disponível após %d dias pendente.
+ O dinheiro disponível é depositado automaticamente a cada %s.
+ O dinheiro disponível é depositado automaticamente todo dia.
+ O dinheiro fica disponível após %d dias pendente.
Selecionar uma variação
\"%1$s\" -> %2$s
selecione uma variação
@@ -708,21 +721,21 @@ Language: pt_BR
Período
Intervalo de cobrança
Promoção
- Desconhecido
- Com falha
- Cancelado
- Em trânsito
- Pendente
- Pago
- Estimado
- Recolher/expandir resumo de depósito
- Saiba mais sobre quando você receberá seu dinheiro
- Dinheiro pendente
- Dinheiro disponível
+ Desconhecido
+ Com falha
+ Cancelado
+ Em trânsito
+ Pendente
+ Pago
+ Estimado
+ Recolher/expandir resumo de pagamento
+ Saiba mais sobre quando você receberá seu dinheiro
Impostos
Produtos
- O dinheiro disponível é depositado automaticamente todo mês no dia %s.
- O dinheiro fica disponível após %d dia pendente.
+ Dinheiro pendente
+ Dinheiro disponível
+ O dinheiro disponível é depositado automaticamente todo mês no dia %s.
+ O dinheiro fica disponível após %d dia pendente.
Totais de pagamentos
Endereço de e-mail ou nome de usuário
Não é possível criar um pedido de valor personalizado
diff --git a/WooCommerce/src/main/res/values-ru/strings.xml b/WooCommerce/src/main/res/values-ru/strings.xml
index d54e1742733..5de196045e6 100644
--- a/WooCommerce/src/main/res/values-ru/strings.xml
+++ b/WooCommerce/src/main/res/values-ru/strings.xml
@@ -1,11 +1,27 @@
+ Ошибка при загрузке вариантов
+ «Не удалось загрузить другие товары. Повторите попытку».
+ Назад
+ Вариантов: %1$d
+ Вариант %s, цена %s
+ Товар с вариантами %s, цена %s
+ Описание не может быть пустым
+ Призыв к действию
+ Ключевая фраза не может быть пустой
+ Проверьте, правильно ли указан ваш адрес эл. почты, и ещё раз загляните в папку «Спам».
+ Не удалось найти учётную запись WordPress.com, связанную с этим именем пользователя. Введите адрес эл. почты, чтобы создать новую учётную запись.
+ Введите штрихкод или любой другой уникальный идентификатор товара. Это поможет вам выставлять товар на продажу в других сетях или на маркетплейсах.
+ GTIN, UPC, EAN, ISBN
+ ПОСЛЕДНИЙ ПЛАТЁЖ
+ После приобретения этикетки отметить заказ как выполненный и уведомить заказчика.
+ Если у вас нет учётной записи, создайте её с этим адресом эл. почты.
Конверт
Коробка
Добавить упаковку
@@ -27,21 +43,20 @@ Language: ru
К сожалению, этот заказ можно редактировать только в Интернете, так как он сделан в %1$s, а валюта вашего сайта — %2$s
Служба доставки
По скорости
+ По стоимости
Купить этикетку
Купить этикетку · %1$s
- По стоимости
- Отметить заказ как выполненный и уведомить заказчика
Стоимость доставки
+ Сведения о заказе
+ Сведения о доставке
Введите размеры посылки или выберите одну из упаковок перевозчика, чтобы узнать доступные тарифы на доставку.
Выберите упаковку, чтобы узнать тарифы
Выберите упаковку
Имеются ли в вашем отправлении опасные товары или материалы?
- Сведения о заказе
- Сведения о доставке
Свернуть/развернуть карточку товара
%1$s · %2$s
- Нет
Отсортировано по 1%s
+ Нет
Сохранить выбор для будущих кампаний
<b>Подходит для:</b> %s
Выбрать цель %s
@@ -67,8 +82,8 @@ Language: ru
Нет фотографий
Фотографии товара
Выберите имеющееся фото товара
- Этот ключ уже применяется в другом произвольном поле.\nВ настоящий момент приложение не поддерживает создание дубликатов ключей. При необходимости создать дубликат ключа воспользуйтесь wp-admin.
Недопустимый ключ: удалите символ «_» в самом начале.
+ Этот ключ уже применяется в другом произвольном поле.\nВ настоящий момент приложение не поддерживает создание дубликатов ключей. При необходимости создать дубликат ключа воспользуйтесь wp-admin.
Добавить произвольные поля
Произвольное поле удалено
Не удалось сохранить изменения. Повторите попытку
@@ -89,21 +104,21 @@ Language: ru
Ежедневные затраты
Сколько вы планируете потратить на кампанию и сколько времени она должна продлиться?
%1$s ➔ %2$s
- Думаете о том, как повысить продажи?
При помощи Blaze демонстрируйте ваши товары миллионам потенциальных покупателей и повышайте продажи
+ Думаете о том, как повысить продажи?
Ошибка при загрузке произвольных полей
Произвольные поля
Затемнённый фон. Коснитесь, чтобы закрыть диалог.
%1$s в неделю
Выполнять до остановки мною
+ Запущена %1$s
+ еженедельные расходы
%1$s еженедельно начиная с %2$s
Еженедельно
Осталось
Итого
Переходы
По-видимому, ваше устройство находится в режиме экономии энергии. \nПока этот режим активен, сведения о магазине будут недоступны
- Запущена %1$s
- еженедельные расходы
Всплывающее меню с опциями. Смахивайте товары, чтобы переходить к следующим.
Открыть меню панели инструментов
Панель инструментов со статусом платёжного терминала. Меню открыто. Дважды коснитесь, чтобы начать работу.
@@ -135,13 +150,13 @@ Language: ru
Новый заказ
ОК
+ Создать заказ в разделе «Управление магазином»
+ Чтобы принять платёж за товар, не относящийся к простым, выйдите из режима POS и создайте новый заказ в таблице заказов.
Почему я не вижу свои товары?
Информация
Закрыть
+ Подробнее
В данный момент POS поддерживает только простые материальные товары. Другие типы товаров, в частности виртуальные и вариативные товары, станут доступны в ближайших обновлениях.
Только простые товары
- Чтобы принять платёж за товар, не относящийся к простым, выйдите из режима POS и создайте новый заказ в таблице заказов.
- Подробнее
Адрес сайта
Google для WooCommerce
Добавить платную кампанию
@@ -151,12 +166,12 @@ Language: ru
Ваша новая кампания создана. Впереди у вас удачный сезон продаж!
Всё готово!
Не удалось создать заказ
+ Повторить попытку
Значок ошибки
Хотите повторить попытку?
Ошибка при загрузке товаров
В данный момент POS поддерживает только простые товары
В данный момент POS поддерживает только простые товары — \nсначала создайте такой товар.
- Повторить попытку
Нет поддерживаемых товаров
Товаров нет
Поддержка
@@ -228,35 +243,35 @@ Language: ru
Имя, содержание и описание
Можно отредактировать или восстановить сведения о товаре перед сохранением.
Программы
- Нет программ за этот период
Кампании Google
+ Нет программ за этот период
Подключить
Корзина
Создание сведений о товаре
Считывать текст с фотографии товара
Например: «Чёрная футболка, х/б, мягкая ткань, прочные швы, уникальный дизайн»
+ Расскажите нам о своём товаре и его достоинствах, а потом ИИ сотворит для вас чудо.
Исходные данные
Мы сгенерируем для вас сведения о товаре
- Расскажите нам о своём товаре и его достоинствах, а потом ИИ сотворит для вас чудо.
Получение платежа по карте
Итого
+ Налоги
Подытог
Оплата прошла успешно
Платёж не выполнен. Повторите попытку.
Значок корзины
Товары
+ Товары (%d)
+ Очистить
Повышайте продажи и привлекайте больше посетителей при помощи Google Ads
Google для WooCommerce
Нет правил количества
- Товары (%d)
- Очистить
- Налоги
Аудитория
Отмена
+ Выход
Закрыть POS
- Оформление заказа
Удалить %s из корзины
- Выход
+ Оформление заказа
Статус считывающего устройства неизвестен
Оформление заказа
Считывающее устройство подключено
@@ -294,8 +309,8 @@ Language: ru
Не удалось загрузить самые продаваемые товары
Н/Д
Сумма сдачи
- Самые активные купоны
Полученные наличные
+ Самые активные купоны
Получить оплату (%s)
Посмотреть все отзывы
Не найдено ни одного отзыва, соответствующего выбранному фильтру. Попробуйте изменить фильтр.
@@ -324,8 +339,8 @@ Language: ru
Скрыть %s
Завершено
Обратная связь
- Не удалось отобразить\n аналитику вашего магазина
Убедитесь, что на сайте используется последняя версия WooCommerce и аналитика WooCommerce активирована.
+ Не удалось отобразить\n аналитику вашего магазина
Посмотреть все задачи
Аналитические данные сеанса основываются на количестве уникальных посетителей, которое невозможно определить для произвольных временных промежутков.
Данные сеанса недоступны
@@ -338,11 +353,11 @@ Language: ru
Отмена
Всё равно выйти
Похоже, вы ещё не одобрили соединение с приложением. Вы уверены, что хотите выйти?
+ Выберите изображение размером минимум 400x400 пикселей
Недопустимое изображение
Судя по всему, введённые вами имя пользователя или пароль неверны. Проверьте учётные данные и повторите попытку.
Если ваши данные по-прежнему не загружаются, обратитесь за помощью в службу поддержки.
Проблем с подключением нет
- Выберите изображение размером минимум 400x400 пикселей
Вернуться на предыдущий экран
Повторить попытку подключения
Идёт подключение к вашему сайту
@@ -356,15 +371,15 @@ Language: ru
Продолжить
Если у вас возникают проблемы, обратитесь в нашу службу поддержки.
3. После установки подключения вы автоматически выполните вход в свой магазин.
+ 2. Когда появится запрос, подтвердите подключение, нажав кнопку подтверждения.
1. Сначала войдите с учётными данными вашего сайта.
Следуйте этой процедуре, чтобы напрямую подключить приложение Woo к вашему магазину при помощи пароля приложения.
+ Возможно, это потому, что в вашем магазине действуют дополнительные меры безопасности.
Не удалось войти в ваш магазин
Когда вы сделаете заказ, сведения о нём отобразятся здесь.
Сведений о заказе ещё нет
Добавить индивидуальную сумму
Чтобы указать сумму платежа, добавьте\nиндивидуальную сумму к своему заказу.
- 2. Когда появится запрос, подтвердите подключение, нажав кнопку подтверждения.
- Возможно, это потому, что в вашем магазине действуют дополнительные меры безопасности.
Мы объединили получение платежа и\nсоздание заказа, сделав операцию более доступной\nи эффективной.
Получение платежа \nперемещено
Комплекты
@@ -387,14 +402,16 @@ Language: ru
Доступно обновление (%s)
Обновлён
Название магазина
- Не удалось загрузить предлагаемые домены
Удалить рубрику
Обновить рубрику
Ошибка при удалении рубрики
Рубрика товаров удалена
Рубрика товаров обновлена
+ Не удалось загрузить предлагаемые домены
Варианты
Укажите домен
+ Выберите домен
+ Просмотреть всю аналитику магазина
По годам
По месяцам
По неделям
@@ -404,8 +421,6 @@ Language: ru
Подключить другой магазин
Запускаете новый магазин?
Название магазина
- Выберите домен
- Просмотреть всю аналитику магазина
Пожалуйста, подождите…
Обновление статусов наличия на складе
Что-то пошло не так. Повторите попытку.
@@ -419,8 +434,10 @@ Language: ru
Товары (%1$d) с управляемым количеством на складе будут пропущены.
Статус наличия на складе будет обновлен для %1$d товаров.
Текущий статус наличия на складе: %1$s
+ Текущий статус наличия на складе разнороден
ГОТОВО
Обновить статус наличия на складе
+ Войти с учётными данными сайта
Версия WooCommerce
Установленные плагины
Плагины
@@ -433,20 +450,18 @@ Language: ru
Детали заказа
Ошибка при отправке заказа в корзину
Заказ отправлен в корзину
- Текущий статус наличия на складе разнороден
- Войти с учётными данными сайта
Похоже, с вашим сайтом возникла проблема.\n\nЧтобы решить эту проблему, обратитесь к своему хостинг-провайдеру.
- Похоже, вы не подключены к Интернету.\n\nУбедитесь, что ваш Wi-Fi включён. Если вы используете мобильные данные, убедитесь, что они включены в настройках вашего устройства.
Похоже, возникла проблема при подключении к Jetpack.\n\nНо не волнуйтесь: наши инженеры поддержки вам помогут. Свяжитесь с нами, и мы будем рады помочь.
Похоже, нам не удаётся правильно обработать ответ вашего сайта.\n\nНо не волнуйтесь: наши инженеры поддержки вам помогут. Свяжитесь с нами, и мы будем рады помочь.
Похоже, ваш сайт отвечает слишком долго.\n\nЧтобы решить эту проблему, обратитесь к своему хостинг-провайдеру.
+ Похоже, вы не подключены к Интернету.\n\nУбедитесь, что ваш Wi-Fi включён. Если вы используете мобильные данные, убедитесь, что они включены в настройках вашего устройства.
+ Товар не выбран
Читать далее
Поддержка
- Подключение к Интернету
- Добавить статистику за выбранный период
- Товар не выбран
Получение заказов с вашего сайта
Подключение к серверам WordPress.com
+ Подключение к Интернету
+ Добавить статистику за выбранный период
Местоположение не найдено.\nПовторите попытку.
Просмотры страниц сеанса
Тип устройства
@@ -465,13 +480,13 @@ Language: ru
Атрибуция заказа
Связаться в Telegram
Связаться в WhatsApp
+ Идентификатор: %d
Клиент
Товар
Гость
Этот пользователь — гость, а гостевой статус не позволяет фильтровать заказы.
Повторите попытку позже или свяжитесь с нами. Мы будем рады помочь!
Ваш сайт отвечает долго
- Идентификатор: %d
Показать подробности
Налог на доставку
Настроить аналитику
@@ -487,6 +502,8 @@ Language: ru
Готово
Мы проверяем вашу кампанию. Она будет опубликована в течение 24 часов. Впереди у вас удачный сезон продаж!
Всё готово!
+ Ключ уже существует
+ Слишком длинный конечный URL-адрес
Значение
Ключ
Размещение: %s
@@ -503,8 +520,6 @@ Language: ru
Добавьте ключевую фразу и описание кампании Blaze
Добавить изображение
Добавьте изображение для кампании Blaze
- Ключ уже существует
- Слишком длинный конечный URL-адрес
Перетащить указатель
Карты аналитики
Смотреть отчет
@@ -513,18 +528,18 @@ Language: ru
Параметры URL-адреса
URL-адрес назначения
Ввести вручную
+ Не удалось выполнить поиск.\nПовторите попытку
Начните набирать название страны, штата или города, чтобы увидеть доступные варианты
Нажимая «Отправить кампанию», вы принимаете <a href=\'termsOfService\'><u>условия предоставления услуг</u></a> и <a href=\'advertisingPolicy\'><u>политику публикации рекламы</u></a>, а также разрешаете использовать указанный способ оплаты для списания средств за выбранные вами бюджет и период. <a href=\'learnMore\'><u>Подробнее</u></a> о том, как использовать бюджеты и платежи за продвигаемые записи.
- Не удалось выполнить поиск.\nПовторите попытку
Отправить кампанию
Не удалось загрузить способы оплаты. Чтобы повторить попытку, нажмите здесь.
Добавить способ оплаты
+ Загрузка способов оплаты
Итого
Кампания Blaze
Итоговые суммы платежей
Оплата
Поиск местоположений
- Загрузка способов оплаты
Не удалось сохранить чек
Не удалось загрузить чек
Не удалось обнаружить ни одного приложения, в котором можно опубликовать чек
@@ -535,6 +550,7 @@ Language: ru
Ключевая фраза
Изменить изображение
Применить
+ Дата начала
%1$s дн.
Раздел «Показы» отражает частоту, с которой ваша реклама появляется на экранах потенциальных клиентов.\n\n\n Достичь этой цифры в точности будет невозможно из-за колебаний посещаемости и различного поведения пользователей, однако мы стремимся к тому, чтобы реальное число показов рекламы максимально приближалось к целевому показателю.\n\n\n Учитывайте, что показы влияют лишь на видимость рекламы, а не на действия читателей.
Готово
@@ -542,12 +558,11 @@ Language: ru
Обновить
Изменить
Приблизительный ежедневный охват пользователей
+ %1$s ежедневно
на %1$s дн.
Настройте бюджет
Все
%1$s дн. с %2$s
- %1$s ежедневно
- Дата начала
Больше не показывать
Напомнить позже
Есть свободная минутка? Оставьте краткий отзыв и помогите нам улучшить функции на базе ИИ.
@@ -559,12 +574,11 @@ Language: ru
Язык
Бюджет
Сведения
- Купить сейчас
- Предварительный просмотр
Редактировать рекламное объявление
+ Предварительный просмотр
Отключено
- Выбрать товар %s
Выбор товара
+ Выбрать товар %s
<b>В прямом эфире:</b> следите за началом вашей кампании и её успехами.
<b>Быстрый просмотр:</b> отправьте свою рекламу на оперативную модераторскую проверку.
<b>Создание бюджета:</b> определите продолжительность кампании и затраты на неё.
@@ -572,12 +586,12 @@ Language: ru
<b>Выбор товара:</b> выберите, что рекламировать при помощи Blaze.
Управление запасами
Запасы не управляются
+ Как работает Blaze
Запустите кампанию
Ваша реклама появится на миллионах сайтов в сетях WordPress.com и Tumblr.
Охватите широкую аудиторию
- Простота глобального охвата
«Наш инструмент покажет ваш товар именно там, где его смогут увидеть заинтересованные покупатели».
- Как работает Blaze
+ Простота глобального охвата
Запуск рекламы за несколько минут: вам не понадобится ни навык, ни солидный бюджет, можно начать всего с 5 долларов США в день.
Быстрый старт, значительный эффект
Наш инструмент разработан специально для того, чтобы дать продавцам возможность простой и быстрой настройки рекламных кампаний с целью максимального увеличения посещаемости.
@@ -585,7 +599,6 @@ Language: ru
Готово к продвижению
Пусть миллионы покупателей увидят ваши товары
Использовать %1$s
- ПОСЛЕДНЯЯ ОПЛАТА
Развернуть/свернуть итоговую сумму заказа
Получение платежа
Код должен вводиться в формате XXXX-XXXX-XXXX-XXXX
@@ -597,21 +610,21 @@ Language: ru
Не удалось загрузить текущую тему
ПК
Планшет
+ Мобильный телефон
нажмите здесь
+ При загрузке шаблона возникла проблема. %1$s для демонстрационного режима.
Найдите самую подходящую для вас тему в магазине тем WooCommerce.
Текущая тема
Попробуйте новый дизайн
Начать опрос
- Хотите добавить функцию очной оплаты к оформлению заказа онлайн?
- Требуется помощь? <a href=\'\'>Свяжитесь с нами</a>
- Мобильный телефон
- При загрузке шаблона возникла проблема. %1$s для демонстрационного режима.
Мы высоко ценим ваше мнение!
Активация функции очной оплаты даёт возможность клиенту оплачивать заказ при доставке наличными или банковской картой.\n\nЗаказы можно по-прежнему создавать вручную, не активируя этой функции.
+ Хотите добавить функцию очной оплаты к оформлению заказа онлайн?
+ Требуется помощь? <a href=\'\'>Свяжитесь с нами</a>
Возместить индивидуальную сумму
Возврат индивидуальной суммы
- Добавить подарочную карту
Сканировать штрихкод товара
+ Добавить подарочную карту
Товар
Количество
Исходное количество
@@ -623,35 +636,35 @@ Language: ru
Товар с артикулом %s не значится в складских запасах. Повторите попытку.
Товар с артикулом %s не найден. Повторите попытку.
Не удалось активировать тему, повторите попытку.
+ Звуковое оповещение о новых заказах отключено. Включите его заново, чтобы слышать «дзинь» всякий раз при очередной продаже.
+ Включить «дзинь»
Сканировать штрихкод, чтобы обновить запас
+ Это тестовое оповещение для проверки звука «дзинь».\nМожете его удалить.
Тестировать уведомление
ТЕСТИРОВАТЬ ЗВУК
+ Всё готово! Теперь звук «дзинь» будет раздаваться при каждом заказе.
ОТКЛЮЧИТЬ ЗВУК
ВКЛЮЧИТЬ ЗВУК
- Количество заказов
- 0
- Процент от общей суммы заказа
- Звуковое оповещение о новых заказах отключено. Включите его заново, чтобы слышать «дзинь» всякий раз при очередной продаже.
- Включить «дзинь»
- Это тестовое оповещение для проверки звука «дзинь».\nМожете его удалить.
- Всё готово! Теперь звук «дзинь» будет раздаваться при каждом заказе.
Включите заново, чтобы слышать «дзинь» при каждой новой продаже. Отслеживайте заказы ваших клиентов!
Звук «дзинь» отключён
+ Количество заказов
%
+ 0
+ Процент от общей суммы заказа
Фиксированная сумма
Как вы хотите добавить индивидуальную сумму?
- Удалить индивидуальную сумму
Процент от общей суммы заказа (%1$s)
+ Удалить индивидуальную сумму
+ Тема успешно активирована
Главная страница
Коснитесь для просмотра
Страницы в этом шаблоне
Предварительный просмотр
- Тема успешно активирована
Ищете что-то другое?
Вы можете изменить настройки в любой момент.
+ Выберите тему
Темы
Узнайте больше!
- Выберите тему
Требуется настройка
Скрыть Blaze
Благодарственная записка, созданная ИИ
@@ -660,69 +673,69 @@ Language: ru
Создать повторно
✨ Создание благодарственной записки к вашему заказу…
Благодарственная записка
- Включите этот параметр, чтобы взимать плату за доставку только один раз при первоначальном заказе.
Примечание. Чтобы можно было включить этот параметр, в тарифном плане не должно быть бесплатного пробного периода или синхронизированной даты продления.
+ Включите этот параметр, чтобы взимать плату за доставку только один раз при первоначальном заказе.
Включено
- Документы и другие файлы на устройстве
Единовременная доставка
+ Документы и другие файлы на устройстве
✨Создать благодарственную записку
Удержать налоги
- Доступные средства вносятся на счёт автоматически раз в %s.
- Доступные средства вносятся на счёт автоматически раз в день.
- Денежные средства станут доступны после утверждения в течение %d дн.
+ Доступные средства выплачиваются автоматически один раз в %s.
+ Доступные средства вносятся на счёт автоматически один раз в день.
+ Денежные средства станут доступны после утверждения в течение %d дн.
Выбрать вариант
- Выберите %1$s
- %d элементов
+ Выберите вариант
«%1$s» -> %2$s
выберите конкретный вариант
Выбрано элементов: %1$s
Выбран %1$s элемент
+ Выберите %1$s
более %1$s элементов
более %1$s элемента
менее %1$s элементов
от %1$s до %2$s элементов
+ %d элементов
%d элемент
- Выберите вариант
Измените количество товара с %1$.2f на %2$.2f
+ Сохранить конфигурацию
Конфигурация
+ Товар %s
+ Настроить
+ Необязательно; регистрационный сбор взимается немедленно, даже если у товара есть бесплатный пробный период или синхронизированы даты оплаты.
Подписка на продукт с вариантами
Продукт по подписке с вариантами
Уникальная подписка на продукт, включающая регулярные платежи
Продукт по простой подписке
- Сохранить конфигурацию
- Товар %s
- Настроить
- Необязательно; регистрационный сбор взимается немедленно, даже если у товара есть бесплатный пробный период или синхронизированы даты оплаты.
Необязательный период времени до списания первого регулярного платежа. Любой регистрационный взнос всё равно будет взиматься в начале подписки. Пробный период не может превышать: 90 дней, 52 недели, 24 месяца или 5 лет.
- Срок действия подписки истекает
Пробный период действия тарифного плана
- ТОВАР
+ Срок действия подписки истекает
ИНДИВИДУАЛЬНЫЕ СУММЫ
ИТОГОВЫЕ СУММЫ ПЛАТЕЖЕЙ
ПРИМЕЧАНИЯ К ЗАКАЗУ
ТОВАРЫ
+ ТОВАР
КЛИЕНТ
Пожалуйста предоставьте ключ безопасности для продолжения.
Возникла проблема со входом в систему с помощью ключа безопасности
Использовать ключ безопасности
Период
- Распродажа
- Неизвестно
- Сбой
- Отменено
- В процессе перехода
- Оплачено
- Ожидается
- Узнайте, когда вы сможете получить ваши средства
Расчётный интервал
- На утверждении
- Свернуть/развернуть выписку по счёту
- Средства на утверждении
- Доступные средства
+ Распродажа
+ Неизвестно
+ Сбой
+ Отменено
+ В пути
+ На утверждении
+ Оплачено
+ Ожидается
+ Свернуть/развернуть сводку выплат
+ Узнайте, когда вы сможете получить ваши средства
+ Доступные средства вносятся на счёт автоматически каждый месяц %s.
+ Денежные средства станут доступны после утверждения в течение %d дн.
+ Средства на утверждении
+ Доступные средства
Налоги
Товары
- Денежные средства станут доступны после утверждения в течение %d дн.
- Доступные средства вносятся на счёт автоматически каждый месяц %s.
Итоговые суммы платежей
Адрес электронной почты или имя пользователя
Не удалось создать заказ с индивидуальной суммой
@@ -749,8 +762,8 @@ Language: ru
Текст не обнаружен. Выберите другую фотографию упаковки или введите сведения о товаре вручную.
Добавить товар
Сканировать штрихкод
- Уменьшить количество товара
Свернуть/развернуть карточку товара
+ Уменьшить количество товара
Увеличить количество товара
Добавить индивидуальную сумму
Цена со скидкой
@@ -763,8 +776,8 @@ Language: ru
Меняйте текст: отмените выбор ненужных отсканированных страниц или нажмите, чтобы отредактировать текст
Ключевые слова
Использовать фото упаковки (по желанию)
- Попробуйте оплатить %s банковской картой.\nПосле этого средства будут возвращены.
Выберите «Оплата в касание» в опциях получения платежей в\nсведениях о заказе или разделе «Меню > Платежи».
+ Попробуйте оплатить %s банковской картой.\nПосле этого средства будут возвращены.
Просто, безопасно и конфиденциально.
Принимайте все виды очных платежей прямо\nна вашем телефоне. Дополнительное оборудование не требуется.
Отклонено
@@ -776,14 +789,14 @@ Language: ru
Кампания Blaze
Символ бесконтактной оплаты (Contactless Symbol) — торговая марка, принадлежащая компании EMVCo, LLC и используемая с её разрешения.
5. Если вы видите значок «Выполнено» в виде галочки, значит, магазин обрабатывает ваш платёж, а транзакция завершена.
- 2. Нажмите «Принять платёж» и выберите Tap to Pay.
3. Покажите покупателю ваш смартфон.
+ 2. Нажмите «Принять платёж» и выберите Tap to Pay.
+ 1. Создайте заказ
Как это работает
Подробнее об устройствах чтения карт
Чтобы принимать платежи сверх лимита, вам может потребоваться устройство чтения карт, в котором можно вводить PIN-коды.
Мы не поддерживаем ввод PIN-кодов при использовании функции Tap to Pay на устройствах на базе Android.
В %1$s некоторые карты требуют ввода PIN-кода при бесконтактных транзакциях на сумму свыше %2$s.
- 1. Создайте заказ
Важная информация
Функция Tap to Pay (Оплата в касание) позволяет принимать все виды бесконтактных платежей: от банковских карт до цифровых кошельков — без необходимости приобретать устройство чтения карт.
Что такое Tap to Pay?
@@ -827,40 +840,40 @@ Language: ru
Добавить эту ставку ко всем созданным заказам
Изменить налоговые ставки
Изменить налоговые ставки в консоли
- Способы оплаты
Добавьте налоговые ставки в консоли. Будут показаны только налоговые ставки с информацией о местоположении.
Налоговые ставки не найдены
Посмотрите другие платёжные системы и \nвыберите одну из них.
+ Способы оплаты
Изображения и видео на устройстве
- Завершить настройку
Исправить
+ Завершить настройку
Установить налоговую ставку
Активировать
Установить новую налоговую ставку
- Настроить
WooPayments
+ Настроить
Изменить налоговые ставки в консоли
Адрес клиента будет изменён на адрес, где действует выбранная вами налоговая ставка.
Кнопка открытия диалогового окна с информацией о налоговых ставках
ВЫБРАТЬ НАЛОГОВУЮ СТАВКУ
Не можете найти нужную налоговую ставку?
- Изменить налоговые ставки в консоли
- Налоги и налоговые ставки
- Налоговые ставки для разных адресов можно изменить в консоли магазина.
Сейчас налоговая ставка рассчитывается на основе адреса доставки%1$s
Сейчас налоговая ставка рассчитывается на основе платёжного адреса%1$s
Сейчас налоговая ставка рассчитывается на основе адреса магазина%1$s
+ Изменить налоговые ставки в консоли
Кнопка «Изменить налоговые ставки в консоли»
+ Налоги и налоговые ставки
+ Налоговые ставки для разных адресов можно изменить в консоли магазина.
Налоги рассчитываются на основе сопоставления платёжного адреса, адреса доставки или адреса магазина с адресом, где действует налоговая ставка.
Сведения о налоговых ставках
Используя WooCommerce Payments, вы принимаете наши <a href=\'termsOfService\'><u>Условия предоставления услуг</u></a> и подтверждаете, что ознакомились с <a href=\'privacyPolicy\'><u>Политикой конфиденциальности</u></a>.
<a href=\'learnMore\'><u>Подробнее</u></a> о подтверждении вашей информации на WooPayments.
Начать настройку
Партнёр WooPayments — платёжная система Stripe. Вы будете перенаправлены на сайт Stripe для регистрации. Мы попросим вас подтвердить сведения о вашем бизнесе и платёжные данные.
+ Уведомления WooPayments будут приходить на адрес эл. почты, указанный в вашей учётной записи WordPress.com. Хотите использовать новую учётную запись? <a href=\'learnMore\'><u>Подробности см. здесь.</u></a>
Перед началом настройки
4–6 минут
Примерное время настройки
- Уведомления WooPayments будут приходить на адрес эл. почты, указанный в вашей учётной записи WordPress.com. Хотите использовать новую учётную запись? <a href=\'learnMore\'><u>Подробности см. здесь.</u></a>
Управляйте платежами без усилий с помощью WooPayments — всё на одной консоли. Принимайте карты, платежи Apple Pay, очные платежи и более 135 валют — без платы за настройку и ежемесячное использование.
Не удалось сохранить название магазина. Повторите попытку.
Сохранение нового названия магазина…
@@ -869,16 +882,16 @@ Language: ru
Обновить название магазина
Поздравляем! Вы успешно прошли настройку — ваша платёжная система готова к работе.
Готово!
+ Управляйте платежами с помощью WooPayments — без платы за настройку и ежемесячное использование.
Настройки учётной записи
Выбрать категорию
+ Категория опасных веществ
DHL Express.
В настоящее время WooCommerce Shipping не поддерживает доставку опасных веществ через %1$s
+ Инструмент поиска опасных веществ USPS.
С помощью %1$s выясните, можно ли доставить ваш товар по почте.
www.usps.com/hazmat.
Узнайте, как надежно упаковать, выполнить адресацию и доставить опасные вещества с помощью USPS® в %1$s
- Управляйте платежами с помощью WooPayments — без платы за настройку и ежемесячное использование.
- Категория опасных веществ
- Инструмент поиска опасных веществ USPS.
Вычислено на основе адреса доставки
Вычислено на основе платёжного адреса
Вычислено на основе адреса магазина
@@ -886,16 +899,16 @@ Language: ru
Общая сумма заказа
Расчётный процент
Расчётная сумма
- Правильный выбор названия магазина может помочь в поисковой оптимизации.
Название магазина
+ Правильный выбор названия магазина может помочь в поисковой оптимизации.
Назовите магазин
Включите NFC
Посылка, небольшое количество (требуется маркировка)
- Посылка с зажигающим устройством (разрешённым к перевозке)
Наземное отправление, ограниченное количество: аэрозоли, дезинфицирующие спреи, аэрозольная краска, спреи для волос, пропан, бутан, чистящие средства и т. д. — Духи, лак для ногтей, жидкость для снятия лака для ногтей, растворители, антисептики для рук, медицинский спирт, продукты на основе этанола и т. д. — Другие поверхностные вещества в ограниченном количестве (косметика, бытовая химия, краски и т. д.)
- Посылка с допустимым количеством (например, небольшой объём воспламеняющейся жидкости, коррозионно-активные, токсичные или экологически опасные вещества — требуется маркировка)
+ Посылка с зажигающим устройством (разрешённым к перевозке)
Посылка с потребительскими товарами ID8000 — разрешённые для авиаперевозки потребительские товары ID8000 (невоспламеняющиеся аэрозоли, воспламеняющиеся горючие жидкости, токсичные вещества, опасные материалы)
Опасные материалы, разрешённые только для наземной перевозки (для товаров, которые не перечислены, но их можно перевозить только по земле)
+ Посылка с допустимым количеством (например, небольшой объём воспламеняющейся жидкости, коррозионно-активные, токсичные или экологически опасные вещества — требуется маркировка)
П. 6.2 — посылка с опасными веществами — биологические вещества (например, наборы для лабораторных анализов, материалы для анализа на COVID)
П. 6.1 — посылка с токсичными веществами (средняя летальная доза 50 мн/кг и менее) (пестициды, гербициды и т. д.)
П. 5.2 — посылка с органическими пероксидами
@@ -920,33 +933,33 @@ Language: ru
К потенциально опасным материалам относятся батарейки и аккумуляторы, сухой лёд, воспламеняющиеся жидкости, аэрозоли, боеприпасы, фейерверки, лаки для ногтей, парфюм, краски, растворители и т. д. Опасные товары должны находиться в отдельных упаковках.
Содержит опасные вещества
Введите название товара.
- Переменная подписка
Платформа электронной коммерции, которая растёт вместе с вами
+ Переменная подписка
+ Удалить купон
Все любят скидки
Вы не создали ни одного купона. Создайте купон, чтобы применить его к этому заказу.
Перейти к купонам
Выберите купон
- Удалить купон
+ Не удалось создать купон
Купон создан
Создать
Создать купон
+ Создать %1$s
Изменить купон
Создайте фиксированную скидку на выбранные товары
- Не удалось создать купон
- Создать %1$s
Создайте фиксированную скидку на всю корзину
Создайте скидку в процентах на выбранные товары
Фиксированная скидка на товар
Фиксированная скидка на сумму корзины
Процент скидки
- Создать купон
- Добавить купон
- Создать тестовый заказ
- Оплатите заказ и дождитесь push-уведомления в приложении WooCommerce.
Тип купона — фиксированный на товар
Тип купона — фиксированный на корзину
Тип купона — процент скидки
+ Создать купон
+ Добавить купон
+ Создать тестовый заказ
Попробуйте вернуть средства за тестовый заказ в приложении
+ Оплатите заказ и дождитесь push-уведомления в приложении WooCommerce.
Выберите тестируемый товар, добавьте его в корзину и оформите заказ в магазине, как настоящий покупатель.
Нажмите кнопку ниже, чтобы перейти в онлайн-магазин в браузере.
Оформите тестовый заказ
@@ -962,23 +975,23 @@ Language: ru
Помогите нам понять ваши решения в отношении подписки. Ваша обратная связь очень важна.
Отсутствует адрес электронной почты
Отсутствует ФИО
+ Поиск существующего клиента или
Последнее обновление %s (обновление каждые 30 минут)
Последнее обновление %s
- Поиск существующего клиента или
<a href=\'\'>Узнайте больше</a> о том, как принимать оплату в касание на Android
Получение платежей
Нельзя добавить товар, не указав цену
Нельзя добавить неопубликованный товар
добавить клиента
- Отмена
- Не удалось проверить код купона. Повторите попытку
- Не удалось найти купон с таким кодом. Повторите попытку
- Сумма (%1$s)
Перейти в настройки
+ Отмена
Разрешить
Вы запретили доступ к камере. Он необходим, чтобы сканировать штрихкод. Предоставьте доступ в настройках приложения
Разрешите доступ к камере, чтобы сканировать штрихкод
Предоставьте доступ к камере
+ Не удалось проверить код купона. Повторите попытку
+ Не удалось найти купон с таким кодом. Повторите попытку
+ Сумма (%1$s)
Скидка %1$s
– %1$s
Сумма скидки
@@ -986,8 +999,8 @@ Language: ru
Сумма (%1$s)
Не удалось применить скидку вручную. Сначала удалите купоны
Сумма скидки не является допустимым числом
- Удалить скидку
Скидка не может быть больше цены
+ Удалить скидку
Текст кнопки
Текст всплывающей подсказки. \n Может занимать несколько строк.
Заголовок всплывающей подсказки
@@ -999,8 +1012,8 @@ Language: ru
Описание создано ИИ
На основе ИИ. <a href=\'\'><u>Подробнее</u></a>.
К сожалению, в вашей стране оплата в касание на Android пока не поддерживается. Следите за новостями!
- Чтобы использовать оплату в касание на Android, требуется Android 10 или более новой версии. Чтобы принимать очные платежи, обновите Android или купите терминал с поддержкой Bluetooth.
Чтобы использовать оплату в касание на Android, на устройстве должны быть установлены службы Google Play. Чтобы принимать очные платежи, установите службы Google Play или купите терминал с поддержкой Bluetooth.
+ Чтобы использовать оплату в касание на Android, требуется Android 10 или более новой версии. Чтобы принимать очные платежи, обновите Android или купите терминал с поддержкой Bluetooth.
Чтобы использовать оплату в касание на Android, устройство должно быть оснащено модулем NFC. Чтобы принимать очные платежи, купите терминал с поддержкой Bluetooth.
Оплата в касание недоступна
См. требования
@@ -1020,9 +1033,9 @@ Language: ru
Сканировать штрихкод
Имя пользователя
Имя
+ Эл. почта
Использованы купоны
Другие настройки
- Эл. почта
Возможно, позже
Написать снова
Требуется PIN-код, но функция оплаты касанием пока не поддерживает его. Подумайте об использовании внешнего устройства чтения карт
@@ -1031,19 +1044,22 @@ Language: ru
Не удалось создать сообщение о публикации. Повторите попытку.
Подробнее о функции ИИ
Добавить дополнительное сообщение
+ Написание…
Написать с помощью ИИ
Продвигайте товары с помощью Blaze
Blaze
Доступен генератор контента на основе ИИ
Продвигайте с помощью Blaze
- Написание…
Опубликовать товар
Поздравляем! Вы стали на шаг ближе к открытию нового магазина.
Первый товар создан 🎉
Система закрыла приложение Woo, когда оно работало в фоновом режиме. Вы можете попробовать зайти в него ещё раз.
Система закрыла приложение Woo, когда оно работало в фоновом режиме. Вы можете попробовать зайти в него ещё раз.
Карта извлечена слишком быстро
+ Товар с вариациями
+ В нашей политике конфиденциальности описано, как мы и другие поставщики используем файлы cookie и как вы можете ими управлять.
Политика использования файлов cookie
+ Ваши сведения помогают нам повышать качество наших продуктов, ускорять их вывод на рынок и подстраивать WooCommerce под вас.
Политика конфиденциальности
При сохранении параметров конфиденциальности произошла ошибка.
Сохранить
@@ -1051,16 +1067,16 @@ Language: ru
Помогите нам оптимизировать сервисы. Для этого мы собираем информацию о том, что пользователи делают в наших мобильных приложениях.
Аналитика
Управление конфиденциальностью
- Товар с вариациями
- В нашей политике конфиденциальности описано, как мы и другие поставщики используем файлы cookie и как вы можете ими управлять.
- Ваши сведения помогают нам повышать качество наших продуктов, ускорять их вывод на рынок и подстраивать WooCommerce под вас.
Ваша конфиденциальность очень важна для нас. Мы используем, храним и обрабатываем ваши личные данные, чтобы оптимизировать наше приложение (и вашу работу). В некоторых случаях ваши данные необходимы для работы системы, а в других случаях вы можете изменить в меню \"Настройки\" варианты их использования.
Чтобы помочь нам повысить качество работы приложения и устранить возможные ошибки, включите автоматические отчёты о сбоях.
+ Сообщать о сбоях
+ Отчёты
Узнайте больше о нашей политике конфиденциальности и политике использования файлов cookie.
Политика конфиденциальности и политика использования файлов cookie
Конфиденциальность
Узнайте больше о данных, которые мы собираем в вашем магазине, и о том, как вы можете управлять передачей этих данных.
Отслеживание использования
+ Для пользователей woocommerce.com доступны дополнительные опции конфиденциальности. Подробности см. здесь.
Интернет-опции
Дополнительные параметры конфиденциальности
При обновлении настроек конфиденциальности произошла ошибка
@@ -1068,29 +1084,26 @@ Language: ru
Помогите нам оптимизировать сервисы. Для этого мы собираем информацию о том, что пользователи делают в наших мобильных приложениях.
Аналитика
Отслеживание
- Система завершила работу приложения Woo в момент его работы в фоновом режиме. Вы можете попробовать зайти в него ещё раз.
- Сбой сканирования. Повторите попытку позже
- Сообщать о сбоях
- Отчёты
Мы заботимся о вашей конфиденциальности. Персональные данные используются для оптимизации мобильных приложений, улучшения защиты, а также аналитики и повышения удобства работы.
+ Система завершила работу приложения Woo в момент его работы в фоновом режиме. Вы можете попробовать зайти в него ещё раз.
Невозможно добавить товар с вариациями напрямую. Выберите конкретную вариацию
+ Сбой сканирования. Повторите попытку позже
Товар с артикулом %s не найден. Не удалось добавить в заказ
- Для пользователей woocommerce.com доступны дополнительные опции конфиденциальности. Подробности см. здесь.
Сбой сканирования. Повторите попытку позже
Сканировать штрихкод
Отправляя товары в страны, которые следуют таможенным правилам Европейского союза (ЕС), вы теперь должны точно и понятно описать каждую позицию. Так, при отправке одежды необходимо указать её тип (например, мужские рубашки, жилет для девочки, куртка для мальчика), чтобы описание было приемлемым. В ином случае может произойти задержка или приостановка доставки на таможне.
Обратитесь в службу поддержки
- Не удалось закрыть учётную запись
Эту учётную запись нельзя закрыть, пока в ней есть активные магазины.
При попытке закрыть учётную запись произошла ошибка.
+ Не удалось закрыть учётную запись
Закрытие учётной записи…
Навсегда закрыть учётную запись
+ Введите ваше имя пользователя для подтверждения закрытия
Подтвердите закрытие учётной записи
Закрыть учётную запись
Сканируйте QR-код и следуйте инструкциям
Сканируйте для оплаты
Удалить купон из заказа
- Введите ваше имя пользователя для подтверждения закрытия
Купон (%1$s)
–%1$s
Добавить купон
@@ -1099,9 +1112,9 @@ Language: ru
Добавить товары с помощью сканера
Закрыть
Подробнее
+ Отправляя товары в страны, которые следуют таможенным правилам Европейского Союза (ЕС), вы должны точно и понятно описать каждую позицию. В ином случае может произойти задержка или приостановка доставки на таможне.
Следите за обновлениями и повышайте безопасность магазина. Откройте возможности Jetpack.
Уведомления о заказах и многое другое
- Отправляя товары в страны, которые следуют таможенным правилам Европейского Союза (ЕС), вы должны точно и понятно описать каждую позицию. В ином случае может произойти задержка или приостановка доставки на таможне.
Показать или скрыть список действий по настройке магазина
Список действий по настройке магазина
Вы можете снова посмотреть его в любое время, открыв «Меню > Настройки > Магазин»
@@ -1119,10 +1132,10 @@ Language: ru
Опция по умолчанию
Опции компонентов
Компоненты можно редактировать в веб-консоли.
- Настройки компонентов
- Компоненты
%d компонента (-ов)
1 компонент
+ Настройки компонентов
+ Компоненты
Нам нужно ваше разрешение, чтобы отправлять на ваше устройство push-уведомления о новых заказах, отзывах и прочем.
Уведомления
Составной товар
@@ -1136,6 +1149,7 @@ Language: ru
Увеличивайте продажи с помощью специальных предложений
Просматривайте магазин
Следите за новостями
+ Управляйте магазином через консоль
Общее
Настройки
Товары в комплекте можно редактировать в веб-консоли.
@@ -1146,7 +1160,6 @@ Language: ru
Нет максимума
Нет минимума
Комплект
- Управляйте магазином через консоль
Количество в комплекте
Максимальное количество
Минимальное количество
@@ -1179,32 +1192,32 @@ Language: ru
Активно
Вы можете редактировать подписки на товары в веб-консоли.
Без пробного периода
+ Бесплатная регистрация
Никогда не истекает
+ %1$s кажд. %2$s %3$s
+ Кажд. %1$d %2$s
Кажд. %1$s
Номер подписки%1$d
Подписка
OK
- Подписка
- Подписка
- Бесплатная регистрация
- %1$s кажд. %2$s %3$s
- Кажд. %1$d %2$s
От первой продажи до миллионной выручки: Woo — ваш помощник. Узнайте, почему продавцы построили на нашей платформе 3,4 млн. онлайн-магазинов.
+ Подписка
Неправильный одноразовый код. Проверьте правильность введенных данных и повторите попытку.
Сбой запроса SMS. Повторите попытку.
Запрос SMS выполнен. Вам должно прийти сообщение с кодом.
+ Подписка
Устройство чтения карт принимает платежи дебетовыми и кредитными картами. Их можно прикладывать, проводить или вставлять.
Принимайте бесконтактные платежи прямо в телефоне.
- Получение сайта…
- Не удалось войти, поскольку не разрешается создавать пароль приложения.
- Отправить отзыв
Для получения платежей по карте используйте\nсвой телефон. Попробуйте прямо сейчас.
- Загрузка…
+ Отправить отзыв
+ Не удалось войти, поскольку не разрешается создавать пароль приложения.
+ Получение сайта…
Произошла ошибка при получении веб-сайта
Повторите попытку, используя страницу консоли
Войти
- Действие вашей подписки завершено, и теперь вам доступны не все функции.
+ Загрузка…
%s завершён
+ Действие вашей подписки завершено, и теперь вам доступны не все функции.
%1$d дн.
1 день
Загрузка…
@@ -1217,11 +1230,13 @@ Language: ru
Ошибка при получении сведений о плане
Вы оформили подписку на %1$s! У вас есть доступ ко всем функциям до %2$s.
У вас закончился пробный период, доступ к функциям ограничен. Подпишитесь на %1$s прямо сейчас.
+ У вас идёт %1$d-дневный бесплатный пробный период. Бесплатный пробный период закончится через %2$s. Перейдите на платную подписку для доступа к новым функциям магазина.
Статус подписки
Устранение неполадок
Текущий: %s
Сообщить о проблеме с подпиской
Перейти на платную подписку
+ Осталось от пробного периода: %1$s.
Конец пробного периода
Пробный период закончился.
Произошли неожиданные ошибки.
@@ -1235,15 +1250,13 @@ Language: ru
Назад в Мой магазин
URL-адрес рекомендации
Опубликовать мой магазин
- Поиск доменов
Чтобы запустить магазин, необходимо перейти на платный тарифный план. <u>Перейти</u>
- У вас идёт %1$d-дневный бесплатный пробный период. Бесплатный пробный период закончится через %2$s. Перейдите на платную подписку для доступа к новым функциям магазина.
- Осталось от пробного периода: %1$s.
+ Поиск доменов
Не удалось войти. Код состояния: %1$s
Не удалось войти, так как не удается найти URL-адрес администратора магазина
Не удалось войти, так как не удается найти URL-адрес входа в магазин
- Произошла ошибка. Повторите попытку позже.
Не удалось войти из-за неожиданного ответа сайта. Мы работаем над этой проблемой.
+ Произошла ошибка. Повторите попытку позже.
Для вашей учётной записи есть требования на утверждении. Чтобы получать очные платежи, выполните эти требования.
Оцените ваши впечатления от работы с аналитикой
Нравится аналитика?
@@ -1286,31 +1299,31 @@ Language: ru
Получение статуса Jetpack
Что-то пошло не так. Повторите попытку позже.
Попробуйте выполнить платёж
- Регистрация доменного имени…
- Выберите страну
- Выберите округ/область
Получение платежей по карте\nна вашем телефоне
Оплата в касание
ДЕЙСТВИЯ
Во время регистрации домена произошла ошибка
- Телефон
- Код страны
- Страна
- Адрес
- Адрес 2
- Город
- Округ/Область
- Область/округ (не доступно)
- Почтовый индекс
+ Выберите округ/область
+ Выберите страну
+ Регистрация доменного имени…
Зарегистрировать домен
- Для вашего удобства, мы заполнили вашу контактную информацию WordPress.com. Пожалуйста, перепроверьте её на корректность, действительно ли вы хотите использовать её для этого домена.
+ Почтовый индекс
+ Область/округ (не доступно)
+ Округ/Область
+ Город
+ Адрес 2
+ Адрес
+ Страна
+ Код страны
+ Телефон
Организация (необязательно)
- Владельцы доменов должны делиться контактной информацией для публичной базы данных по всем доменам. С защитой персональных данных мы публикуем нашу информацию вместо вашей и перенаправляем вам все сообщения приватным образом.
- Регистрируя этот домен, вы соглашаетесь с нашими %1$sправилами и условиями%2$s
- Введите правильный %s
- Зарегистрировать как личный с защитой персональных данных
- Зарегистрировать открыто
+ Для вашего удобства, мы заполнили вашу контактную информацию WordPress.com. Пожалуйста, перепроверьте её на корректность, действительно ли вы хотите использовать её для этого домена.
Контактная информация домена
+ Зарегистрировать открыто
+ Зарегистрировать как личный с защитой персональных данных
+ Введите правильный %s
+ Регистрируя этот домен, вы соглашаетесь с нашими %1$sправилами и условиями%2$s
+ Владельцы доменов должны делиться контактной информацией для публичной базы данных по всем доменам. С защитой персональных данных мы публикуем нашу информацию вместо вашей и перенаправляем вам все сообщения приватным образом.
Защита персональных данных
Только администраторы магазина могут получить доступ к настройкам домена
Или продолжите с помощью волшебной ссылки
@@ -1343,11 +1356,11 @@ Language: ru
Основной адрес сайта
<a href=\'\'><u>Узнайте больше</u></a> о доменах и связанных с ними действиях.
Поиск домена
+ Приобретённый домен будет перенаправлять пользователей на ваш основной адрес.
Отправить заявку на домен
На вашем тарифе можно бесплатно зарегистрировать домен на один год.
Отправьте заявку на бесплатный домен
Бесплатный адрес вашего магазина
- Приобретённый домен будет перенаправлять пользователей на ваш основной адрес.
Домены
Больше не показывать
Напомнить позже
@@ -1369,19 +1382,19 @@ Language: ru
Подождите
Подготовка приложения для чтения карт…
Приложение для чтения карт готово к работе
+ Устройство чтения карт
Оплата в касание
Коэффициент конверсии
Сессии
Нет сессий за этот период
По сравнению с
Домен
- Устройство чтения карт
Что такое пароли приложения?
- Открыть страницу установки
Кажется, на вашем сайте %1$s отключена функция паролей приложения.\n Включите её, чтобы использовать приложение WooCommerce.
- Ответить
- Ответ отправлен!
+ Открыть страницу установки
При отправке ответа произошла ошибка
+ Ответ отправлен!
+ Ответить
Выбрать всё
Обновить цену
Обновить статус
@@ -1392,57 +1405,57 @@ Language: ru
Все варианты уже созданы.
нет вариантов для создания
Выбрать несколько
+ Нет доступных доменов по этому запросу
Создание вариантов
Будет создан вариант для каждой возможной комбинации атрибутов (всего: %1$d)
Создать все варианты?
Текущее максимальное количество создаваемых вариантов: %1$d. Количество вариантов, которые можно создать для этого продукта: %2$d.
Превышено максимальное количество вариантов
Создание вариантов для всех комбинаций ваших атрибутов.
+ Создать все варианты
Создайте один новый вариант. Вручную выберите, какие атрибуты относятся к варианту продукта.
Добавить новый вариант
Добавить вариацию
- Создать все варианты
- Нет доступных доменов по этому запросу
Выйти без подключения
Продолжить подключение
- Обратитесь к менеджеру магазина или администратору.
Попробуйте подключиться ещё раз, чтобы войти в магазин.
Jetpack установлен, но не подключён.
У вас нет разрешения на подключение Jetpack к этому магазину
+ Обратитесь к менеджеру магазина или администратору.
Отменить установку
Повторить авторизацию
Повторить активацию
Повторить установку
Получить поддержку
+ Повторите попытку и обратитесь в службу поддержки, если эта ошибка произойдёт снова.
Во время обмена данными с вашим веб-сайтом произошла ошибка.
У вас нет разрешения на управление плагинами в этом магазине
Ошибка при авторизации подключения к Jetpack
Ошибка при активации Jetpack
+ Ошибка при установке Jetpack
Подключить Jetpack
Перейти в магазин
Ошибка
Код ошибки %1$s
+ Теперь ваш магазин <b>%1$s</b> подключён к Jetpack.
Подождите, мы подключаем магазин <b>%1$s</b> к Jetpack.
Jetpack установлен
+ Jetpack подключён
Выполняется подключение Jetpack
+ Выполняется установка Jetpack
Все готово
Подключено
Выполняется проверка
Подключите магазин к Jetpack
Активация
- Ошибка при установке Jetpack
- Теперь ваш магазин <b>%1$s</b> подключён к Jetpack.
- Jetpack подключён
- Выполняется установка Jetpack
Выполняется установка Jetpack
Войдите в <b>%1$s</b>, введя учётные данные магазина, чтобы подключить Jetpack.
Войдите в <b>%1$s</b>, введя учётные данные магазина, чтобы установить Jetpack.
- Повторите попытку и обратитесь в службу поддержки, если эта ошибка произойдёт снова.
+ Подготовьте учётные данные магазина.
Подключите магазин к Jetpack, чтобы работать с ним в этом приложении.
Установите бесплатный плагин Jetpack, чтобы работать с магазином в этом приложении.
Создайте онлайн-магазин и начните продажи в кротчайшие сроки.
Создайте свой первый магазин
- Подготовьте учётные данные магазина.
Случайно
Никогда
Всегда
@@ -1450,8 +1463,8 @@ Language: ru
Обновить смоделированное устройство чтения карт
Подключить Jetpack
Подключение магазина
- Посетители
Это место, где люди найдут вас в Интернете. Не беспокойтесь, вы сможете изменить это позднее.
+ Посетители
Или войти с помощью пароля
Симуляция устройства чтения карт отключена
Смоделированный ключ устройства чтения
@@ -1480,20 +1493,20 @@ Language: ru
Нет доходов за указанный период
Доход
%1$s — %2$s
- Учётная запись с этим адресом эл. почты уже существует.
К сожалению, не удалось создать учётную запись с указанными учётными данными. Укажите другой адрес эл. почты.
Указанный пароль не соответствует требованиям безопасности. Пароль должен быть более сложным.
Пароль слишком короткий. Придумайте пароль, состоящий как минимум из шести символов.
Введите допустимый адрес электронной почты.
+ Учётная запись с этим адресом эл. почты уже существует.
Использовать другой адрес
Произвольный период
Произвольный
+ Что такое WordPress.com?
+ Создание учетной записи
Выберите пароль
Ваш адрес электронной почты
- Создание учетной записи
Начало работы \nчерез несколько минут
Нажимая кнопку «Подключить Jetpack», вы принимаете <a href=\'terms\'>Условия предоставления услуг</a> и разрешаете <a href=\'sync\'>обмен данными</a> с WordPress.com.
- Что такое WordPress.com?
Включить симуляцию устройства чтения карт
Чтобы использовать приложение, получите приглашение у владельца сайта, например у директора магазина или администратора.
Подключение к сайту WordPress.com
@@ -1510,10 +1523,10 @@ Language: ru
На %1$s
Невозможно загрузить данные
Статистика WooCommerce за сегодня
+ Статистика магазина за сегодня
Аналитика для магазина недоступна Чтобы просмотреть аналитику для магазина, перейдите на последнюю версию WooCommerce.
Ваша сеть недоступна.\nПроверьте свои данные или соединение Wi-Fi.
Войдите в приложение WooCommerce
- Статистика магазина за сегодня
Сбой получения данных о подключении…
Проверка подключения Jetpack…
Не удалось проверить подключение Jetpack. Повторите попытку.
@@ -1533,43 +1546,44 @@ Language: ru
Недавно на WooCommerce
Произошла ошибка, обратитесь в службу поддержки
Введите адрес сайта
- Забыли пароль?
Получить ссылку на вход по эл. почте
+ Забыли пароль?
Мы заметили, что вы не закончили настройку очных платежей. <a href=\'\'>Продолжить настройку</a>
- WC Admin
- Войти с помощью адреса магазина
- Другие сайты
- Платежи из вкладки меню
- Теперь можно быстро и просто получать доступ к очным платежам и другим функциям
- Понятно!
Платежи
+ Понятно!
+ Теперь можно быстро и просто получать доступ к очным платежам и другим функциям
+ Платежи из вкладки меню
Ваш адрес электронной почты не используется с учётной записью WordPress.com.
- Войти с учетными данными сайта
- На вашу электронную почту отправлено письмо со специальной ссылкой. Перейдите по ней, чтобы войти.
- Вход по специальной ссылке
- Войти с паролем
- Проверьте почту с этого устройства!
+ Другие сайты
+ Войти с помощью адреса магазина
+ WC Admin
Только что мы отправили специальную ссылку на
- Настроить
- Совет
- Что вы планируете делать в приложении WooCommerce?
- Просто изучать функционал
- Настраивать магазин
- Создавать и обновлять продукты
- Управлять заказами
- Работать с несколькими магазинами
- Похоже, %1$s не является сайтом WooCommerce.
- Установить WooCommerce
- Отметить как\nзавершена
- Заказ № %1$d отмечен как выполненный
- Ошибка обновления заказа № %1$d
- Начните принимать платежи с помощью нашего терминала. Обучение работе с ним займет не больше 20 минут.
- Добавьте связанные продукты, чтобы повысить продажи
+ Проверьте почту с этого устройства!
+ Войти с паролем
+ Вход по специальной ссылке
+ На вашу электронную почту отправлено письмо со специальной ссылкой. Перейдите по ней, чтобы войти.
+ Войти с учетными данными сайта
Сделайте рекомендации полезными и актуальными: добавьте продукты для дополнительных и сопутствующих продаж.
+ Добавьте связанные продукты, чтобы повысить продажи
+ Начните принимать платежи с помощью нашего терминала. Обучение работе с ним займет не больше 20 минут.
+ Ошибка обновления заказа № %1$d
+ Заказ № %1$d отмечен как выполненный
+ Отметить как\nзавершена
+ Установить WooCommerce
+ Похоже, %1$s не является сайтом WooCommerce.
+ Работать с несколькими магазинами
+ Управлять заказами
+ Создавать и обновлять продукты
Смотреть аналитику
+ Настраивать магазин
+ Просто изучать функционал
+ Что вы планируете делать в приложении WooCommerce?
+ Совет
+ Настроить
Приступим!
Войти на WordPress.com
Связаться со службой поддержки
+ Войти с помощью учетной записи WordPress.com
Обратитесь за помощью!
Возникли проблемы со входом?
Артикул
@@ -1591,19 +1605,18 @@ Language: ru
Простое и быстрое управление.
Знаем, что это важно для бизнеса
Недавно на WooCommerce
- Войти с помощью учетной записи WordPress.com
Новый заказ на 50 долл. в магазине WooCommerce
Поступил новый заказ! 🎉
сведения
Чтобы изменить все %1$s, откройте заказ в разделе администрирования WooCommerce
Неполные данные %1$s.
Отправить отчёт о состоянии системы
+ Копировать отчёт о состоянии системы в буфер обмена
Продолжить поиск
+ Оплата при получении, заказ № %1$s для %2$s blog_id %3$s.
Изменение платёжного сервиса
- Ожидание платежа
- Копировать отчёт о состоянии системы в буфер обмена
Возвращенные средства: %1$s
- Оплата при получении, заказ № %1$s для %2$s blog_id %3$s.
+ Ожидание платежа
Продолжить установку
Подготовка к установке
Установить расширение
@@ -1625,18 +1638,19 @@ Language: ru
заблокирован
Чтобы отредактировать сведения о товарах или оплате, измените статус на \"Ожидание оплаты\".
В настоящий момент элементы этого заказа нельзя изменить
- Клиенты не найдены
Поиск по клиентам
+ Клиенты не найдены
Не сейчас
Добавить расширение в магазин
- Воспользуйтесь пониженными тарифами на доставку. Пока доступно для служб DHL и USPS, но список расширяется!
Что такое WooCommerce Shipping?
+ Воспользуйтесь пониженными тарифами на доставку. Пока доступно для служб DHL и USPS, но список расширяется!
Пониженные тарифы
Получите заказ, затем просто оплатите доставку, напечатайте этикетку, упакуйте и отправьте.
Печатайте с телефона
Не нужно гадать, куда делись почтовые марки.
Оплачивайте почтовые сборы по мере необходимости
Экономьте время и деньги
+ Выполняйте заказы с помощью WooCommerce Shipping
Показать сведения
Выбрать вариант %s
Исключить товарные категории
@@ -1650,6 +1664,7 @@ Language: ru
Нет
Редактировать товарные категории (%1$d)
Выбрать товарные категории
+ Пока пакетное обновление поддерживается не более чем для 100 вариантов.
Превышен лимит пакетного обновления
Обновление обычных цен
Обновление акционных цен
@@ -1659,35 +1674,34 @@ Language: ru
Текущие цены отличаются друг от друга
Текущая цена: %s
Цена для вариантов (%d) будет обновлена
+ Смешанный
+ Нет
Акционная цена
Обычная цена
Цена
Выберите значение для обновления
Пакетное обновление
ОК
- Выполняйте заказы с помощью WooCommerce Shipping
- Пока пакетное обновление поддерживается не более чем для 100 вариантов.
Пакетное обновление…
- Смешанный
- Нет
+ Получение вариантов…
Не удалось найти товарные категории
Не удалось загрузить товарные категории
Поиск категорий
Очистить выбор
Нажмите, чтобы снять флажок
+ Выбрать одну категорию
Выбрать категории (%1$d)
Товарные категории не найдены
Выбрать категории
- Нужна транспортная этикетка?
- Получение вариантов…
- Выбрать одну категорию
Скрыть баннер с предложением установить WC Shipping
Установить WooCommerce Shipping
Печатайте транспортные этикетки с телефона, используя WooCommerce Shipping.
+ Нужна транспортная этикетка?
+ Измените количество товара с %1$d на %2$d
Обновить обычную цену
Обновить акционную цену
- Измените количество товара с %1$d на %2$d
Расширение WooCommerce Stripe не поддерживается в %1$s
+ Фильтр
Очистить выбор
Выбрать %d товар
Выбрать товары (%d)
@@ -1696,10 +1710,9 @@ Language: ru
Изменить товары (%d)
Все товары
Выбрать товары
+ Включите это, если купон не следует применять к товарам на распродаже. Купоны на один товар применяются только в том случае, если товар не на распродаже. Купоны на одну покупку применяются только в том случае, если в корзине есть товары не по распродаже.
Исключить товары со скидками
Включите это, если купон нельзя применять вместе с другими купонами.
- Включите это, если купон не следует применять к товарам на распродаже. Купоны на один товар применяются только в том случае, если товар не на распродаже. Купоны на одну покупку применяются только в том случае, если в корзине есть товары не по распродаже.
- Фильтр
Только для индивидуального использования
Лимит пользователя
Ограничить использование (до X элем.)
@@ -1739,10 +1752,10 @@ Language: ru
Не удаётся обновить продукт
Произошла ошибка при применении возврата
Применение возврата к заказу
- Вычисленная сумма: %s
- Скопировано в буфер обмена
Изображение платёжного терминала
+ Вычисленная сумма: %s
Вычислить в процентном соотношении
+ Скопировано в буфер обмена
Только для клиентов с почтовыми адресами: %1$s
Исключает товары со скидками
Разрешает бесплатную доставку
@@ -1774,12 +1787,12 @@ Language: ru
Попробуйте другое средство возврата
Возврат отклонён по неизвестной причине
Не удалось обработать этот возврат
- Копировать
Возврат выполнен
Обработка возврата
Возместить платёж
Возврат не выполнен
Подготовка к возврату платежа
+ Копировать
Поиск купонов
Не удалось создать сообщение для отправки кода купона
Ошибка при отправке кода купона.
@@ -1804,35 +1817,35 @@ Language: ru
Оформление заказа — %s
Поделиться ссылкой на оплату
Сумма
+ Сумма
+ Заказы со скидкой
+ Эффективность
+ Максимальный расход %s
+ Минимальный расход %s
+ Сводка по купонам
Смотреть сводку по купонам
+ Мы разработали функцию, которая позволяет просматривать и редактировать купоны на вашем устройстве.
Просмотр и редактирование купонов
Купоны не найдены
+ %1$s без учёта %2$s
+ %1$s и %2$s
всё
Просрочен
Активный
Купоны
Создано %s
+ %d дн. назад
День назад
+ %d ч. назад
Час назад
+ %d мин. назад
Только что
Рубрики: %d
+ %d рубрика
\u2022 нет подтверждённых отзывов
\u2022 один подтверждённый отзыв
- %1$s (%2$s%%)
- %d дн. назад
- %d ч. назад
- %d мин. назад
- %d рубрика
\u2022 подтверждённые отзывы: %d
- Сумма
- Заказы со скидкой
- Эффективность
- Максимальный расход %s
- Минимальный расход %s
- Сводка по купонам
- Мы разработали функцию, которая позволяет просматривать и редактировать купоны на вашем устройстве.
- %1$s без учёта %2$s
- %1$s и %2$s
+ %1$s (%2$s%%)
Мы работаем над функцией, которая поможет создавать заказы на вашем устройстве! Вы можете попробовать эту функцию, нажав кнопку «+»
Зайдите позже, чтобы узнать больше советов и идей по развитию вашего магазина
Поздравляем, вы прочитали все примечания!
@@ -1841,26 +1854,26 @@ Language: ru
Счётчик: %s
Купоны
Закрыть
- Вызовы XML-RPC на этом сайте заблокированы (код ошибки 401). Если войти не удалось, нажмите на значок справки, чтобы открыть часто задаваемые вопросы.
Возникла проблема при подключении к сайту. Получен код ошибки HTTP 401.
+ Вызовы XML-RPC на этом сайте заблокированы (код ошибки 401). Если войти не удалось, нажмите на значок справки, чтобы открыть часто задаваемые вопросы.
Не удалось найти веб-сайт WordPress по этому URL-адресу. Нажмите на значок справки, чтобы открыть часто задаваемые вопросы.
Сервисы XML-RPC на этом сайте отключены.
Чтобы отправить запрос в службу поддержки, не используйте почту Automattic
Мы не поддерживаем счета Stripe, зарегистрированные в %1$s
+ Расширение WooCommerce Payments не поддерживается в %1$s
Нажмите кнопку питания на устройстве чтения
Чек отправлен получателю: <strong>%s</strong>
Процент (%)
- Расширение WooCommerce Payments не поддерживается в %1$s
Убрать комиссию из заказа
Убрать доставку из заказа
Доставка
Добавить метод доставки
Добавить доставку
Имя
+ Сумма
Сборы
Информация о клиенте
Добавить комиссию
- Сумма
Изменить примечание клиента
Изменить сведения о клиенте
Изменить статус заказа
@@ -1881,8 +1894,8 @@ Language: ru
Очные платежи будут работать только с одним из следующих активированных плагинов. Для продолжения обратитесь к администратору сайта, чтобы деактивировать один из следующих плагинов:
Очные платежи будут работать только с одним из следующих активированных плагинов. Для продолжения деактивируйте один из следующих плагинов:
Обнаружены конфликтующие плагины оплаты
- или
Общая сумма налогов
+ или
Установить Jetpack
В настоящее время очные платежи недоступны
Заказ создан
@@ -1953,7 +1966,9 @@ Language: ru
Добавить другой адрес доставки
В наличии
%s в наличии
+ Добавить товары
Товары
+ Добавить сведения о клиенте
Клиент
Отметить как оплаченный
Заказ будет создан и отмечен как оплаченный, если вы получили платеж не через WooCommerce
@@ -1961,8 +1976,6 @@ Language: ru
Выберите способ оплаты
Налоги рассчитываются автоматически на основе адреса магазина
Налог (%s%%)
- Добавить сведения о клиенте
- Добавить товары
Получить оплату (%s)
Удержать налоги
Индивидуальная сумма
@@ -2013,21 +2026,21 @@ Language: ru
Отсутствует разрешение на поиск устройств поблизости
Фильтровать страны
Фильтровать округа/области
+ Округ/область
Дата окончания
Дата начала
Выберите даты
Произвольный период
Создание заказа с минимумом информации
+ Платёж без хлопот
Создание нового заказа вручную
Создать заказ
+ Создать заказ
Введите сумму
Получить оплату
- Аналитика
- Округ/область
- Платёж без хлопот
- Создать заказ
Платёж без хлопот
Создавайте заказы на своём устройстве!
+ Аналитика
Все готово
Подключение вашего магазина
Активация
@@ -2074,14 +2087,14 @@ Language: ru
Фильтры (%d)
Фильтры
Период
+ Статус заказа
Выбранный вариант фильтрации
Период
+ Статус заказа
Все
Показать заказы
Отфильтрованные заказы
Все заказы
- Статус заказа
- Статус заказа
Расскажите нам больше о %s…
Опишите товар для потенциальных покупателей…
Серийный номер терминала, скопированный в буфер обмена
@@ -2111,8 +2124,8 @@ Language: ru
Данные о состоянии системы
Теперь вы можете получать платежи с банковских карт через WooCommerce Payments!
Принимайте платежи с помощью устройств чтения карт
- ОК
Количество должно быть не менее %1$s
+ ОК
Новое изображение значка функции
Переключиться на другой магазин
Сбой при обновлении продукта %1$s
@@ -2153,10 +2166,10 @@ Language: ru
Не удалось автоматически проверить почтовый адрес: %s
Не удалось автоматически проверить адрес происхождения. Чтобы убедиться в правильности адреса, найдите его на Google Maps.
Мы стараемся упростить процедуру просмотра дополнений к товару с вашего устройства. В настоящее время вы можете просматривать дополнения для своих заказов. Такие дополнения можно создавать и редактировать в веб-консоли.
- Сохранить
Просмотрите дополнения на своём устройстве!
В случае переименования дополнения в веб-консоли следует отметить, что предыдущие заказы больше не будут показывать данное дополнение в приложении.
Просмотреть дополнения
+ Сохранить
Загрузить подробности (%d)
Не удалось загрузить несколько файлов (%d)
Не удалось загрузить %d файл
@@ -2175,47 +2188,47 @@ Language: ru
Транспортные этикетки приобретены!
Напечатать транспортные этикетки
Очные платежи
+ Чтобы полностью зарядить устройство чтения, требуется приблизительно три часа.
+ Следите за уровнем заряда устройства чтения.
+ Ваше устройство чтения перейдет в спящий режим через 10 минут неактивности. Чтобы подключить его повторно, просто нажмите кнопку питания.
Автоматическое повторное подключение
+ Для получения платежей просто проведите пальцем, коснитесь экрана или вставьте карту в устройство чтения.
+ Проведите пальцем, коснитесь экрана или вставьте карту.
Поздравляем, теперь вы можете получать платежи по дебетовым и кредитным картам!
Устройство чтения подключено
Нужна какая-то помощь? <a href=\'\'>Обратиться в службу поддержки</a>
<a href=\'\'>Подробнее</a> о приёме платежей с помощью мобильного устройства и заказе устройств чтения карт
Очные платежи недоступны в тестовом режиме. Чтобы продолжить, отключите режим.
В настоящее время очные платежи недоступны
- Чтобы полностью зарядить устройство чтения, требуется приблизительно три часа.
- Следите за уровнем заряда устройства чтения.
- Ваше устройство чтения перейдет в спящий режим через 10 минут неактивности. Чтобы подключить его повторно, просто нажмите кнопку питания.
- Для получения платежей просто проведите пальцем, коснитесь экрана или вставьте карту в устройство чтения.
- Проведите пальцем, коснитесь экрана или вставьте карту.
Для вашей учётной записи существуют требования на утверждении. Выполните эти требования к %1$s, чтобы продолжать получать очные платежи.
Для вашей учётной записи WooCommerce Payments существуют требования на утверждении.
Для вашей учётной записи существует по крайней мере одно просроченное требование. Пожалуйста, выполните его, чтобы возобновить очные платежи.
В настоящее время очные платежи недоступны
Вы сможете получать очные платежи, как только мы завершим проверку вашей учётной записи.
+ В настоящее время очные платежи недоступны
К сожалению, мы не можем поддерживать очные платежи для этого магазина.
Перезагрузите после обновления
В вашем магазине установлена устаревшая версия расширения WooCommerce Payments. Обновите его, чтобы получать очные платежи.
Обновить WooCommerce Payments
- В настоящее время очные платежи недоступны
Почти готово. Завершите настройку WooCommerce Payments, чтобы начать принимать очные платежи.
+ Закончите настройку WooCommerce Payments в учётной записи администратора магазина.
Обновите после активации
+ В вашем магазине версия расширения WooCommerce Payments установлена, но не активирована. Активируйте её, чтобы получать очные платежи.
Активировать WooCommerce Payments
Обновите после установки
+ Вам будет нужно установить бесплатное расширение WooCommerce Payments в своём магазине, чтобы получать очные платежи.
Установить WooCommerce Payments
<a href=\'\'>Подробнее</a> о приёме платежей с помощью мобильного устройства и заказе устройств чтения карт
Нужна какая-то помощь? <a href=\'\'>Обратиться в службу поддержки</a>
+ Вы можете по-прежнему принимать очные наличные платежи, если включите способ оплаты \"Оплата при доставке\" в магазине.
+ Очные платежи по карте не поддерживаются в %1$s
+ Подключение к вашей учётной записи
Очные платежи
+ Проверьте размеры и вес посылки или выберите другую посылку в разделе сведений о посылках.
Тарифы доставки недоступны
Все доступные посылки активированы
Активация посылки
Выберите посылку для активации.
- Закончите настройку WooCommerce Payments в учётной записи администратора магазина.
- В вашем магазине версия расширения WooCommerce Payments установлена, но не активирована. Активируйте её, чтобы получать очные платежи.
- Вам будет нужно установить бесплатное расширение WooCommerce Payments в своём магазине, чтобы получать очные платежи.
- Вы можете по-прежнему принимать очные наличные платежи, если включите способ оплаты \"Оплата при доставке\" в магазине.
- Подключение к вашей учётной записи
- Проверьте размеры и вес посылки или выберите другую посылку в разделе сведений о посылках.
- Очные платежи по карте не поддерживаются в %1$s
Обязательное поле
Закрыть
Создан вариант
@@ -2224,11 +2237,11 @@ Language: ru
Создать вариант
Теперь, добавив атрибуты, вы можете создать свой первый вариант.
Атрибуты созданы
+ Выполнено: %1$s%%
Не рекомендуется отменять текущее обновление ПО
Не удалось выполнить этот платеж
Нет подключения к серверу
Нет подключения к Интернету
- Выполнено: %1$s%%
Отправить в оригинальной упаковке
Добавить в новую упаковку
Эта позиция в настоящее время включена в %s. Куда вы хотите переместить её?
@@ -2239,6 +2252,7 @@ Language: ru
Не удалось создать упаковку. Повторите попытку.
Не удалось создать упаковку: неизвестная проблема с API.
Не удалось создать упаковку: %1$s
+ Пожалуйста, подождите…
Создаётся новая упаковка
Неверное значение.
Обязательное поле
@@ -2252,11 +2266,10 @@ Language: ru
Коробка
Выбрать тип упаковки
Тип упаковки
+ Настройте упаковку, которую вы будете использовать для отправки своих товаров. Мы сохраним её для последующих заказов.
Добавить новую упаковку
Создать новую упаковку
Размеры упаковки должны быть больше нуля. Чтобы продолжить, обновите размеры позиции в разделе \"Доставка\" на странице товара.
- Настройте упаковку, которую вы будете использовать для отправки своих товаров. Мы сохраним её для последующих заказов.
- Пожалуйста, подождите…
Оригинальная упаковка
Размеры позиции
Индивидуально доставляемая позиция
@@ -2269,11 +2282,11 @@ Language: ru
Не удалось проверить наличие обновлений ПО
<a href=\'\'>Подробнее</a> о приеме мобильных платежей и заказе устройств чтения карт
Включить Bluetooth
+ Не подключено устройство чтения
Не удалось подключиться к устройству чтения
Подключиться
Найдено несколько устройств чтения
Заказ уже оплачен
- Не подключено устройство чтения
Спасибо за покупку! Перейдите по ссылке ниже, чтобы получить чек.\n\n%s
Ошибка загрузки таможенной формы
Печать таможенного счета-фактуры
@@ -2289,11 +2302,12 @@ Language: ru
Добавить товар
Атрибуты вариантов
Включите Bluetooth на мобильном устройстве
+ Ошибка при загрузке заказа. Состояние заказа в приложении могло устареть.
Ваша квитанция от %s
Обновление заказа
Обновление состояния приложения
Ваш клиент выбрал %1$s
- Ошибка при загрузке заказа. Состояние заказа в приложении могло устареть.
+ Для таможенных форм требуется 10-значный телефонный номер
Таможенная форма заполнена
При наличии проблем с печатью с устройства обратитесь в службу поддержки вашего принтера.
Если печать недоступна, можно всегда сохранить квитанцию в формате PDF и отправить её по электронной почте, чтобы распечатать с другого устройства.
@@ -2306,7 +2320,6 @@ Language: ru
Чтобы создать вариант, необходимо сначала задать атрибуты (например, «Цвет» или «Размер»).
1 вариант
Вариантов: %1$s
- Для таможенных форм требуется 10-значный телефонный номер
Отслеживание USPS
Обновление ПО устройства чтения
Обновление ПО
@@ -2316,6 +2329,7 @@ Language: ru
Чтобы принимать платежи, обновите ПО устройства чтения
Обновить ПО устройства чтения
Заряд %s%%
+ ПОДКЛЮЧЁННОЕ УСТРОЙСТВО ЧТЕНИЯ
Подключение устройства чтения карт
Включите устройство чтения и расположите его рядом с мобильным устройством
Убедитесь, что устройство чтения заряжено
@@ -2344,10 +2358,12 @@ Language: ru
Атрибутика
Страна производства или сборки товара
Страна происхождения
+ Тарифный код должен включать шесть цифр
Тарифный код HS (необязательно)
Описание
Содержимое посылки
Необходимо указать номер ITN для посылок в %1$s.
+ Номер ITN необходимо указывать для посылок стоимостью более 2500 долл. США за тарифный код
Недопустимый формат
Сведения об ограничениях
Сведения о содержимом
@@ -2355,20 +2371,17 @@ Language: ru
Тип содержимого
Вернуть отправителю в случае невозможности доставки
до %s
- ПОДКЛЮЧЁННОЕ УСТРОЙСТВО ЧТЕНИЯ
- Тарифный код должен включать шесть цифр
- Номер ITN необходимо указывать для посылок стоимостью более 2500 долл. США за тарифный код
Если вы включите этот параметр, клиент получит эл. письмо с подтверждением, когда заказ будет выполнен
Просмотр заказа
+ Заказ 🎉 завершён!
+ Проверка роли…
Неверная роль пользователя
Подробнее о ролях и разрешениях
Это приложение поддерживает только роли администратора и менеджера магазина. Свяжитесь с владельцем магазина для изменения роли.
Добавляйте новые товары и редактируйте существующие откуда угодно
- Пропустить
- Заказ 🎉 завершён!
- Проверка роли…
Управляйте заказами и редактируйте их на ходу
Отслеживайте продажи и узнавайте, какие товары пользуются спросом
+ Пропустить
Внешний товар
Сгруппированный товар
Вариативный товар
@@ -2377,6 +2390,9 @@ Language: ru
Простой физический товар
Открыть настройки
Открыть настройки
+ Bluetooth отключен
+ Определение местоположения отключено
+ Отсутствует разрешение на определение точного местоположения
Не удалось подключиться к устройству чтения.
Подключение к устройству чтения
Подключиться к устройству чтения
@@ -2384,10 +2400,9 @@ Language: ru
Поиск устройств чтения
Количество позиций
Создать новую транспортную этикетку
- Bluetooth отключен
- Определение местоположения отключено
- Отсутствует разрешение на определение точного местоположения
+ Простой виртуальный продукт
Хотите удалить этот вариант?
+ Создание варианта
Удаление продукта
Отправить квитанцию
Печать квитанции
@@ -2401,16 +2416,14 @@ Language: ru
Не удалось просмотреть транспортную этикетку. Установите приложение для просмотра PDF-файлов и повторите попытку.
Мы не смогли найти сайт WordPress по указанному вами адресу. Убедитесь, что WordPress установлен, и что вы используете самую последнюю версию.
несколько строк данных доставки
- Простой виртуальный продукт
- Создание варианта
Не удалось отметить заказ как выполненный
Возникла ошибка при покупке этикеток
Пожалуйста, подождите…
Покупка этикеток
+ Изображения этикеток сроком более 180 дней удаляются нашими технологическими партнерами в целях обеспечения общей безопасности и конфиденциальности данных.
Напечатать транспортную этикетку
Сохранить для последующего использования
Транспортная этикетка приобретена!
- Изображения этикеток сроком более 180 дней удаляются нашими технологическими партнерами в целях обеспечения общей безопасности и конфиденциальности данных.
Возврат стоимости этикеток со сроком более 30 дней не производится.
Тип
Переименовать
@@ -2431,17 +2444,18 @@ Language: ru
Только владелец сайта может управлять способами оплаты транспортных этикеток. Чтобы управлять способами оплаты, свяжитесь с владельцем магазина %1$s (%2$s).
Добавить варианты
Добавить вариант
+ Создайте первый вариант
Итого %s
Выбрано %s ставок
Подходит для бесплатной подписи
Подходит для бесплатного самовывоза
+ Страхование (%s)
+ отслеживание
Включает %s
Требуется подпись совершеннолетнего лица (%s)
Требуется подпись (%s)
- Страхование (%s)
- отслеживание
Клиент оплатил %1$s из %2$s за доставку.
- Создайте первый вариант
+ При покупке транспортных этикеток через WooCommerce вы сэкономите от 5 до 40 % по сравнению с тарифами почты.
Что такое скидка WooCommerce Services?
При загрузке вариантов доставки произошла ошибка.
Перевозчики и тарифы
@@ -2459,7 +2473,6 @@ Language: ru
Укажите имя каждой опции и нажмите клавишу Enter
или коснитесь существующей опции.
Название опции
- При покупке транспортных этикеток через WooCommerce вы сэкономите от 5 до 40 % по сравнению с тарифами почты.
Ошибка при сохранении настроек
Пожалуйста, подождите…
Сохранение настроек
@@ -2482,15 +2495,18 @@ Language: ru
Добавить атрибут
Атрибуты
Редактировать атрибуты
+ Общий вес посылок: %1$s %2$s
Число товаров в посылках (%2$d): %1$d
Общий вес посылок: %1$s %2$s
Специальные посылки
Не удаётся получить данные о товарах
+ Некоторые обязательные поля не заполнены.
Неверный вес
Выбранная посылка
Пожалуйста, подождите…
Загрузка посылок!
Посылка %1$d
+ %d элементов
Не удаётся загрузить определения посылок
Включает вес посылок
Общий вес посылок (%1$s)
@@ -2503,17 +2519,16 @@ Language: ru
Мы немного изменили введённый адрес. Если всё правильно, используйте предложенный адрес для доставки по назначению.
Редактировать выбранный адрес
Использовать выбранный адрес
- Некоторые обязательные поля не заполнены.
- Общий вес посылок: %1$s %2$s
- %d элементов
Загрузка адреса
Доступны новые функции!
+ Найти на карте
Связаться с клиентом
Недопустимая улица
Не указан номер дома
Адрес не найден
Не удалось автоматически проверить почтовый адрес. Укажите его на Google Картах или свяжитесь с клиентом и убедитесь, что адрес указан верно.
Сбой проверки адреса
+ Пожалуйста, подождите…
Выполняется проверка адреса
Не удалось загрузить данные адреса
Использовать введённый адрес
@@ -2524,8 +2539,6 @@ Language: ru
Телефон
Компания
Имя
- Пожалуйста, подождите…
- Найти на карте
Приложение \"Google Карты\" найдено
Пожалуйста, подождите…
Удаление изображений вариантов продуктов поддерживается в версии WooCommerce 4.7 и более поздних.
@@ -2541,30 +2554,31 @@ Language: ru
Сведения об упаковке
Создание почтового бланка
Узнать больше
+ Сократите очередь на почте, распечатывая транспортные этикетки дома с мобильного устройства со скидкой!
Экономьте время и деньги, выполняя заказы с помощью WooCommerce Shipping
WooCommerce Shipping
Отметить заказ как выполненный
+ Узнать больше о распечатке этикеток с вашего мобильного устройства
Создание почтового бланка
- Создавайте транспортные этикетки со своего устройства!
Теперь вы можете создавать транспортные этикетки для всех физических заказов прямо со своего устройства с помощью бесплатного плагина WooCommerce Shipping. Нажмите \"Создать транспортную этикету\", чтобы попробовать новую бета-функцию!
- Сократите очередь на почте, распечатывая транспортные этикетки дома с мобильного устройства со скидкой!
- Узнать больше о распечатке этикеток с вашего мобильного устройства
- Правка
+ Создавайте транспортные этикетки со своего устройства!
Сборы
Чистая выплата
Платно
Дополнительные сведения о подключении Jetpack
+ Правка
Подтвердить
Перетащите фотографии, чтобы изменить их порядок
- Удалить
Настройки загрузки
Введите правильное имя
Введите URL-адрес файла
+ Библиотека файлов WordPress
Убедитесь, что введен допустимый URL-адрес
Пожалуйста, подождите…
Загрузка файлов
Ошибка загрузки файлов
Добавьте скачиваемый файл
+ Добавьте скачиваемый файл из
Добавлять к покупкам скачиваемый файл
Отмена
Да, изменить
@@ -2573,6 +2587,7 @@ Language: ru
Файл
Удалить файл?
Загружаемый товар
+ Удалить
Срок действия для загрузок
Лимит загрузок
Введите количество дней, по окончанию которых ссылка на скачивание перестанет работать, или оставьте пустым, если срок действия не указан
@@ -2587,13 +2602,11 @@ Language: ru
Возможно, нужно <b>настроить печать по Wi-Fi на самом принтере</b>. Убедитесь, что микропрограммное обеспечение принтера обновлено, и ознакомьтесь с документацией принтера.
Можно выбрать для принтера <b>службу печати по умолчанию</b> или установить <b>приложение от производителя принтера</b> (здесь должен появиться рекомендованный вариант).
Убедитесь, что ваши принтер и устройство подключены к <b>одной сети Wi-Fi</b>
- Добавьте скачиваемый файл из
- Библиотека файлов WordPress
+ Оцените новую простую процедуру создания связанных и сгруппированных продуктов, которая готова к запуску
Увеличивайте продажи благодаря продаже дополнительных и связанных продуктов
Изменить товары
Добавить товары
Продукты, которые будут предложены пользователю в дополнение к выбранному продукту в корзине
- Оцените новую простую процедуру создания связанных и сгруппированных продуктов, которая готова к запуску
Кросселы
Продукты, которые будут предложены пользователю вместо просматриваемого в настоящий момент продукта (например, более прибыльные продукты)
Апсейл
@@ -2601,6 +2614,7 @@ Language: ru
%1$s%2$s x %3$s
Получить ссылку для входа по email
Не получается найти учётную запись WordPress.com для этого адреса email.
+ Протестируйте наши дополнительные модули заказов в процессе подготовки к запуску
Создание продуктов
Параметры
Не удалось отправить продукт в корзину
@@ -2612,25 +2626,24 @@ Language: ru
Добавление опций, например размера и цвета, сейчас возможно только в Интернете. Эти варианты будут показаны на странице продукта на вашем сайте.
Создавайте продукты в приложении!
Продукт не найден
+ Если вам по-прежнему не удается выполнить печать со своего устройства, вы можете <b>сохранить этикетку в формате PDF</b> и отправить ее по эл. почте, чтобы распечатать с другого устройства.
+ Нажав <b>«Напечатать транспортную этикетку»</b>, можно выбрать и добавить принтер, если ранее вы не выполняли печать с этого устройства.
Варианты формата этикетки
+ Печать с устройства
Этикетка (4 x 6 in)
Letter (8,5 x 11 in)
Legal (8,5 x 14 in)
Не удалось выполнить предварительный просмотр транспортной этикетки
+ Не знаете, как печатать с помощью мобильного устройства?
См. макет этикетки и варианты размера бумаги
Напечатать транспортную этикетку
Выбрать размер бумаги
Размер бумаги
+ Если вы уже использовали этикетку в посылке, ее распечатка и повторное использование является нарушением наших условий предоставления услуг.
Если при печати купленной этикетки произошла ошибка, можно распечатать ее еще раз.
Мы стараемся упростить процедуру печати этикеток с устройства. Сейчас, если вы создали этикетки для этого заказа в разделе администрирования магазина с помощью WooCommerce Shipping, их можно распечатать из описания заказа (здесь).
Печатайте транспортные этикетки со своего устройства!
- Печать с устройства
- Если вы уже использовали этикетку в посылке, ее распечатка и повторное использование является нарушением наших условий предоставления услуг.
- Если вам по-прежнему не удается выполнить печать со своего устройства, вы можете <b>сохранить этикетку в формате PDF</b> и отправить ее по эл. почте, чтобы распечатать с другого устройства.
- Нажав <b>«Напечатать транспортную этикетку»</b>, можно выбрать и добавить принтер, если ранее вы не выполняли печать с этого устройства.
Напечатать транспортную этикетку
- Протестируйте наши дополнительные модули заказов в процессе подготовки к запуску
- Не знаете, как печатать с помощью мобильного устройства?
\u0022%1$s\u0022
Черновик товара сохранен
Ошибка сохранения черновика товара
@@ -2678,12 +2691,12 @@ Language: ru
Войдите с помощью другой учетной записи
Выберите магазин для подключения
Продолжить с WordPress.com
+ Товар с вариантами исполнения, например по цвету или размеру
%d товар выбран
%d тов. выбрано
Добавление товаров в группу
Добавить товар
Введите пароль
- Товар с вариантами исполнения, например по цвету или размеру
Назад в магазин
Свяжитесь с нами
Обратите внимание, что это не заявка в службу поддержки и мы не сможем ответить на ваш отзыв.\n\nНужна какая-то помощь? %1$s
@@ -2718,24 +2731,24 @@ Language: ru
При добавлении метки произошла ошибка
Добавление метки
Запрос на возврат средств обрабатывается. Пожалуйста, подождите…
+ Запрос на возврат средств отправлен
Вернуть оплату почтового бланка (-%1$s)
Сумма, доступная для возврата
Дата покупки
+ Вы можете запросить возврат средств за неиспользованный почтовый бланк Обработка займет от 14 дней.
Запросить возврат средств
Вернуть средства за почтовый бланк
- Вы можете запросить возврат средств за неиспользованный почтовый бланк Обработка займет от 14 дней.
- Запрос на возврат средств отправлен
Физический
Краткое описание товара
Используйте метки, чтобы товары было проще искать
Объедините продукты в группы
- Отключено
Добавить вес и размеры
Добавить другие сведения
Организуйте свои товары с помощью меток
Добавьте первую метку
Метки
Добавить метку
+ Отключено
Виртуальный товар
Добавить другие сведения
%1$s товар
@@ -2743,7 +2756,9 @@ Language: ru
%s товар
Оставшиеся товары
%1$s \u2022 %2$s
+ Запрошен возврат оплаты транспортной этикетки %1$s
Отследить посылку
+ %1$s\n%2$s
Скрыть сведения о доставке
Показать сведения о доставке
Банковская карта
@@ -2753,8 +2768,6 @@ Language: ru
Доставка в
Доставка из
Посылка %d
- %1$s\n%2$s
- Запрошен возврат оплаты транспортной этикетки %1$s
Артикул: %1$s
%1$s (%2$s пар.)
Транспортные этикетки
@@ -2775,8 +2788,8 @@ Language: ru
Заявление о защите конфиденциальности для пользователей из Калифорнии
Сохранить изменения
До %1$s
- Доступны новые опции редактирования
Появилось больше возможностей редактирования товаров. Теперь можно изменять изображения, пользоваться предварительным просмотром и делиться товарами.
+ Доступны новые опции редактирования
Доступны ограниченные возможности редактирования
Товары
%1$s x %2$s
@@ -2870,11 +2883,11 @@ Language: ru
Ширина
Длина
Продукты, по которым возвращены средства
+ %1$s (%2$s x %3$d)
%1$s с помощью %2$s
Вы уверены, что хотите вернуть деньги? Это действие нельзя отменить.
Продукты, по которым возвращены средства
Возврат оплаты
- %1$s (%2$s x %3$d)
Подписаться на WordPress.com
К сожалению, результаты по запросу \"%s\" не найдены
Получайте высококачественные отзывы о продуктах в вашем магазине
@@ -2895,32 +2908,33 @@ Language: ru
Добавить запасы
Просмотр информации о ваших заказах…
Введите текст
+ Введите название товара
+ Товар сохранён
Ошибка обновления продукта
Пожалуйста, подождите…
Опишите продукт
Описание
Редактировать описание
- Введите название товара
- Товар сохранён
- Готово
Отменить изменения?
Обновить
+ Готово
Идет возврат средств, подождите…
Верните средства за доставку
Выбрать количество
Возврат средств за доставку
Возврат средств за продукты
+ %1$s x %2$s каждый
Выбрано элементов: %d
Ничего не выбирать
Выбрать все
Ожидается подтверждение возврата средств…
- %1$s x %2$s каждый
Изменять размер и сжимать изображения для ускорения загрузки
Оптимизация изображений
Сделать фото
Выбрать с устройства
Выберите способ загрузки
Загрузки
+ Загрузка изображений…%1$d из %2$d
Загрузка изображения…
Нет доступа к камере
Вы уверены, что хотите удалить это изображение?
@@ -2935,7 +2949,6 @@ Language: ru
Добавить изображение
Ближайшие
Удалить
- Загрузка изображений…%1$d из %2$d
Не удалось получить доступ к вашему сайту. Возможно, потребуется обратиться в техподдержку службы хостинга, чтобы решить эту проблему.
Не удалось получить доступ к вашему сайту: возникла проблема с <b>сертификатом SSL</b>. Возможно, потребуется обратиться в техподдержку службы хостинга, чтобы решить эту проблему.
Не удалось получить доступ к вашему сайту: необходимо выполнить <b>проверку подлинности HTTP</b>. Возможно, потребуется обратиться в техподдержку службы хостинга, чтобы решить эту проблему.
@@ -2944,8 +2957,8 @@ Language: ru
Войдите с именем пользователя и паролем для сайта.
Войдите с именем пользователя и паролем для сайта %1$s
Отправить письмо с подтверждением
- Редактирование продукта
Оцените новые возможности редактирования, пока мы готовим их к запуску
+ Редактирование продукта
При загрузке вашей учетной записи произошла ошибка. Повторите попытку сейчас или закройте и попробуйте позже.
Произошла ошибка. Войдите, чтобы продолжить.
Подключение к сайту…
@@ -2980,12 +2993,12 @@ Language: ru
Нет соответствующих товаров
В этом списке пока нет товаров
%s в наличии
+ В наличии \u2022 %d вар.
Изображение продукта
Пользователь %1$s оставил отзыв на %2$s
Не одобрен
Ошибка при получении нового отзыва о товаре
Ошибка при получении отзывов о товарах
- В наличии \u2022 %d вар.
В процессе возврата что-то пошло не так. Повторите попытку.
Средства возвращены заказчику.
Запрос на возврат средств за %s обрабатывается. Пожалуйста, подождите…
@@ -3019,12 +3032,12 @@ Language: ru
Статистика за сегодня
Войти
Уже есть Jetpack? %1$s
+ Попытка входа через Jetpack…
обновите приложение, чтобы продолжить
+ Чтобы использовать это приложение для %1$s, настройте плагин Jetpack и подключите его к этой учетной записи. \n\nПосле настройки перезагрузите приложение
Попробуйте другой магазин
База данных переведена на более раннюю версию, идет повторное создание таблиц и загрузка магазинов
Загрузка магазинов
- Попытка входа через Jetpack…
- Чтобы использовать это приложение для %1$s, настройте плагин Jetpack и подключите его к этой учетной записи. \n\nПосле настройки перезагрузите приложение
Перевозчики не найдены
Введите адрес сайта полностью, например example.com.
Нет обзоров!
@@ -3035,11 +3048,12 @@ Language: ru
Не удалось получить параметры: некоторые API недоступны для этой пары идентификатора приложения OAuth и учетной записи.
Есть вакансии!
Копировать номер отслеживания
- обновите приложение
Поиск WooCommerce…
+ обновите приложение
Адрес не указан
Не можете вспомнить адрес эл. почты, указанный при регистрации?
Расположенный по этому адресу веб-сайт не имеет отношения к платформе WordPress. Чтобы подключиться к нему, необходимо установить WordPress.
+ Войдите на WordPress.com, чтобы подключиться к <b>%1$s</b>
Зимбабве
Замбия
Йемен
@@ -3176,7 +3190,6 @@ Language: ru
Ямайка
Кот-д\'Ивуар
Италия
- Войдите на WordPress.com, чтобы подключиться к <b>%1$s</b>
Израиль
Остров Мэн
Ирландия
@@ -3283,15 +3296,24 @@ Language: ru
Афганистан
Аландские острова
Обзор
+ Другой перевозчик
Другая
+ Пожалуйста, введите название компании-перевозчика
Введите номер отслеживания
+ Пожалуйста, выберите перевозчика
Отменить отслеживание?
Не удалось добавить отслеживание
Отслеживание посылки добавлено
+ Ошибка получения данных о перевозчиках
+ Выбранный перевозчик
+ Перевозчики
Дата отправки
Введите ссылку на отслеживание
+ Введите название компании-перевозчика
Введите номер отслеживания
+ Выберите перевозчика
Ссылка на отслеживание (не обязательно)
+ Название компании-перевозчика
Номер отслеживания
Компания-перевозчик
Добавить отслеживание
@@ -3304,25 +3326,19 @@ Language: ru
Отследить посылку
Чтобы узнать, какой адрес эл. почты вы использовали для подключения к WordPress.com, в режиме управления сайтом в %1$sконсоли Jetpack%2$s перейдите в %3$sПодключения > Подключение учетных записей%4$s
Какой адрес эл. почты я использую для входа?
+ Не можете вспомнить адрес электронной почты?
Jetpack — это бесплатный плагин WordPress с дополнительными инструментами, которые обеспечивают удобное управление магазином с мобильных устройств и доступ к расширенным возможностям, например push-уведомлениям и статистике.
Что такое Jetpack?
Открыть список подключенных магазинов
- Продолжить редактирование
- Другой перевозчик
- Пожалуйста, введите название компании-перевозчика
- Пожалуйста, выберите перевозчика
- Ошибка получения данных о перевозчиках
- Выбранный перевозчик
- Перевозчики
- Введите название компании-перевозчика
- Выберите перевозчика
- Название компании-перевозчика
Похоже, что %1$s подключён к другой учётной записи WordPress.com.
- Не можете вспомнить адрес электронной почты?
+ Продолжить редактирование
Please log in with your username and password.
Войдите, используя имя пользователя WordPress.com вместо адреса электронной почты.
The site at this address is not a WordPress site. For us to connect to it, the site must use WordPress.
Help Center
+ Виртуальный
+ Сборный
+ С вариантами
Allow, but notify customer
Разрешить
Do not allow
@@ -3330,9 +3346,6 @@ Language: ru
Out of stock
In stock
Читать далее
- Сборный
- С вариантами
- Виртуальный
Не удалось загрузить изображение
Черновик
Личный
@@ -3378,11 +3391,11 @@ Language: ru
Попробовать
Понятно
Нажмите, чтобы переключиться между магазинами
+ Выбрать магазин
Выйти
Изменить статус заказа
Нажмите, чтобы изменить статус заказа
Применить
- Выбрать магазин
Нет, спасибо
Позже
Оценить сейчас
@@ -3420,15 +3433,15 @@ Language: ru
Оповещения об обзоре товаров
Оповещения о новом заказе
Заказчику
+ Проверка сайта…
Инструкции по обновлению
Поиск
- Проверка сайта…
Обновить
и еще %d.
Новых уведомлений: %d
+ Версия %s
Условия предоставления услуг
WooCommerce для Android
- Версия %s
Имя
Лицензии на ПО с открытым исходным кодом
О приложении
@@ -3454,9 +3467,9 @@ Language: ru
Отчёты об отказах
Поделиться
Версия %s
- Слишком много попыток отправить СМС-код проверки, отдохните и запросите снова через пару минут.
- Ни одна учетная запись WordPress.com не совпадает с этой записью в Google.
- Войдите в учетную запись WordPress.com, с которой был подключен Jetpack.
+ Пароль для HTTP-авторизации
+ Имя для HTTP-авторизации
+ Требуется авторизация
Магическая ссылка отослана
Email регистрация
Проверка кода
@@ -3465,9 +3478,32 @@ Language: ru
Вход по магической ссылке
Вход по адресу сайта
Вход по email адресу
- Еще нет учетной записи? %1$sЗарегистрируйтесь%2$s
- Регистрация через Google…
+ Произошла ошибка
+ Пожалуйста, введите код авторизации для продолжения.
+ Пожалуйста, перепроверьте свой пароль для продолжения.
+ Вход остановлен
+ Пожалуйста подождите пока авторизуемся.
+ Вход …
+ Нажмите чтобы продолжить.
+ Вход успешен!
+ Возникла ошибка сети. Проверьте ваше подключение и попробуйте снова.
+ Укажите сайт WordPress.com или автономный сайт с подключённым модулем Jetpack
+ Не удалось подключиться. При попытке подключиться к конечной точке XMLRPC вашего сайта мы получили\n ошибку 403. Это необходимо для обмена данными между приложением и вашим сайтом. Свяжитесь с хостинг-провайдером, чтобы решить\n эту проблему.
+ Не удалось подключиться. Ваш хостинг-провайдер блокирует запросы POST, которые нужны приложению\n для обмена данными с вашим сайтом. Свяжитесь с хостинг-провайдером, чтобы решить эту проблему.
+ Не удалось подключиться. На сервере отсутствуют необходимые методы XML-RPC.
+ Убедитесь, что введен допустимый URL-адрес сайта
+ Произошла ошибка
+ Забыли пароль?
+ Введите правильный email адрес
+ Проверка адреса эл. почты
+ Войдите заново для продолжения.
+ Войдите в учетную запись WordPress.com, с которой был подключен Jetpack.
+ Не удалось загрузить профиль.
+ Обнаружена копия сайта.
+ Этот сайт уже существует в приложении, его нельзя добавить.
+ Имя пользователя или пароль введены неверно
Google отвечает слишком долго. Возможно вам стоит подождать пока ваше подключение к Интернет станет лучше.
+ Регистрация через Google…
Зарегистрироваться через Google
Зарегистрироваться с адресом Email
Регистрируясь, вы соглашаетесь с нашими %1$sПравилами пользования%2$s.
@@ -3477,54 +3513,20 @@ Language: ru
Возникла проблема при отправке почты. Вы можете повторить сейчас или закрыть и попробовать еще раз позже.
Для создания новой учетной записи WordPress.com, пожалуйста введите ваш адрес email.
Возникла ошибка проверки адреса email.
- Произошла ошибка
- Пожалуйста, введите код авторизации для продолжения.
- Пожалуйста, перепроверьте свой пароль для продолжения.
- Вход остановлен
- Пожалуйста подождите пока авторизуемся.
- Вход …
- Нажмите чтобы продолжить.
- Вход успешен!
- Процесс входа в Google не может быть запущен.
- Пожалуйста, введите пароль
\nВозможно попробуете другую учетную запись?
+ Процесс входа в Google не может быть запущен.
+ Слишком много попыток отправить СМС-код проверки, отдохните и запросите снова через пару минут.
Возникла ошибка подключения к учетной записи Google.
+ Ни одна учетная запись WordPress.com не совпадает с этой записью в Google.
Закрыть
Войти через Google.
- Возникла ошибка сети. Проверьте ваше подключение и попробуйте снова.
Вы вошли как
Не удалось определить ваш почтовый клиент
+ Еще нет учетной записи? %1$sЗарегистрируйтесь%2$s
Введите проверочный код.
- Обнаружена копия сайта.
- Этот сайт уже существует в приложении, его нельзя добавить.
- Не удалось подключиться. При попытке подключиться к конечной точке XMLRPC вашего сайта мы получили\n ошибку 403. Это необходимо для обмена данными между приложением и вашим сайтом. Свяжитесь с хостинг-провайдером, чтобы решить\n эту проблему.
- Не удалось подключиться. Ваш хостинг-провайдер блокирует запросы POST, которые нужны приложению\n для обмена данными с вашим сайтом. Свяжитесь с хостинг-провайдером, чтобы решить эту проблему.
- Проверка адреса эл. почты
- Не удалось подключиться. На сервере отсутствуют необходимые методы XML-RPC.
- Не удалось загрузить профиль.
- Войдите заново для продолжения.
- Забыли пароль?
- Имя пользователя или пароль введены неверно
- Введите правильный email адрес
- Произошла ошибка
- Требуется авторизация
- Убедитесь, что введен допустимый URL-адрес сайта
- Пароль для HTTP-авторизации
- Имя для HTTP-авторизации
- Укажите сайт WordPress.com или автономный сайт с подключённым модулем Jetpack
- Альтернативно:
- Общее
- \@%s
- Войти с именем пользователя.
- Войти с адресом вашего сайта.
- Пришлите мне другой код.
- Мы послали текстовое сообщение на телефонный номер оканчивающийся на %s. Пожалуйста введите проверочный код из SMS.
- Чтобы войти через эту учетную запись Google, пожалуйста укажите соответствующий пароль WordPress.com. Это запрашивается только один раз.
- Войдите в WordPress.com чтобы поделиться содержимым.
- Введите адрес вашего сайта WordPress, на который вы хотите поделиться содержимым.
- Ошибка при открытии веб-браузера по умолчанию. Выберите другое приложение:
- Не удаётся открыть ссылку
+ Пожалуйста, введите пароль
Введите имя пользователя
+ Войдите в WordPress.com чтобы поделиться содержимым.
Чтобы получить доступ к записи, войдите на WordPress.com.
При добавлении сайта произошла ошибка. Код ошибки: %s
Проверка адреса сайта
@@ -3533,15 +3535,25 @@ Language: ru
Какой адрес у моего сайта?
Как найти адрес своего сайта?
Адрес сайта
+ Введите адрес вашего сайта WordPress, на который вы хотите поделиться содержимым.
\@%s
Вы уже вошли на WordPress.com
Продолжить
+ Подключить сайт
Подключить ещё один сайт
+ Чтобы войти через эту учетную запись Google, пожалуйста укажите соответствующий пароль WordPress.com. Это запрашивается только один раз.
Введите свой пароль на WordPress.com.
+ В настоящий момент ссылка недоступна. Введите пароль
Выполняется запрос электронного письма со ссылкой для входа
Похоже, пароль введён неправильно. Проверьте правильность введенных данных и повторите попытку.
Выполняется запрос на получение проверочного кода в SMS-сообщении.
+ Пришлите мне другой код.
Пришлите мне сообщение с кодом.
+ Мы послали текстовое сообщение на телефонный номер оканчивающийся на %s. Пожалуйста введите проверочный код из SMS.
+ Почти готово! Введите проверочный код для WordPress.com из приложения Authenticator.
+ Войти с именем пользователя.
+ Войти с адресом вашего сайта.
+ Альтернативно:
Открыть почту
Вперед
Управляйте сайтом, созданным с помощью Jetpack, где угодно — WordPress можно всегда носить с собой.
@@ -3549,39 +3561,29 @@ Language: ru
Следите за обновлениями любимых сайтов и присоединяйтесь к беседе в любом месте и в любое время.
Наблюдайте, как пользователи со всего света читают ваш сайт и общаются на нем в реальном времени.
Публикуйте записи, гуляя в парке. Ведите блог из автобуса. Отправляйте комментарии из-за столика в кафе. WordPress можно брать с собой повсюду!
- Вы уже вошли в учетную запись WordPress.com. Вы не можете добавить сайт WordPress.com, привязанный к другой учетной записи.
- Повторить попытку
- Выйти
- Отправить ссылку
- В настоящий момент ссылка недоступна. Введите пароль
- Вход в систему
+ Войти
+ Помощь
+ Пароль
+ Имя
Введите пароль.
- Адрес электронной почты
- Подробнее
- Назад
+ Отправить ссылку
Неверный код подтверждения
Код подтверждения
- Помощь
- Отменить
- Войти
- Имя
- Пароль
- Без заголовка
- Настройки
- Сегодня
- Отмена
+ Адрес электронной почты
Поддержка WooCommerce для Android %s
флажок не установлен
флажок установлен
Политика сторонней организации
Политика использования файлов cookie
Политика конфиденциальности
+ Сделано с любовью компанией Automattic. %1$s
Мы используем и другие средства сбора информации, в том числе средства сторонних разработчиков. Ознакомьтесь с этими средствами и способами управления ими.
Ознакомьтесь с политикой конфиденциальности
Эти сведения помогают нам улучшать продукты, предлагать более полезную рекламу, настраивать WooCommerce согласно вашим предпочтениям и решать другие задачи. Дополнительную информацию см. в политике конфиденциальности
Отправлять информацию об использовании сервисов во время работы в учётной записи WordPress в службу аналитики
Собирать информацию
Настройки конфиденциальности
+ Настройки
Статус заказа
Средства возвращены
Отменён
@@ -3595,6 +3597,7 @@ Language: ru
Добавить
Отправить примечание клиенту по электронной почте
Ошибка при изменении заказа
+ Ошибка при получении примечаний
Заказ отмечен как выполненный
Отметить заказ как выполненный
Добавить примечание к заказу
@@ -3603,6 +3606,7 @@ Language: ru
Показать платёжные сведения
Платёж погашен
Примечания к заказу
+ Личный
Составить примечание к заказу
Изображение профиля клиента
Примечание клиента
@@ -3616,6 +3620,7 @@ Language: ru
отправить клиенту эл. письмо
Платёжные сведения
Сведения о доставке
+ Заказ №%s
%1$s %2$s
Информация о клиенте
Фильтр
@@ -3626,6 +3631,8 @@ Language: ru
Заказов нет
Просмотреть заказы
Просмотреть заказ
+ Нет активности за этот период
+ Всего заказов: %s
Изображение ошибки
Ошибка при получении данных
Доход
@@ -3639,28 +3646,41 @@ Language: ru
Нет магазинов WooCommerce
Фотография в вашем профиле
Подключенный магазин
+ Ознакомьтесь с %1$sинструкциями по настройке%2$s.
Для подключения к вашему магазину этому приложению требуется Jetpack.
+ \@%s
Введите адрес магазина WooCommerce, к которому требуется подключиться.
Для управления магазинами WooCommerce выполните вход, указав адрес электронной почты своей учётной записи WordPress.com.
+ Вы уже вошли в учетную запись WordPress.com. Вы не можете добавить сайт WordPress.com, привязанный к другой учетной записи.
+ Не удаётся открыть ссылку
Не найдено приложение для отправки SMS
Не найдено приложение для отправки электронных писем
Не найдено приложение для звонков
+ Ошибка при открытии веб-браузера по умолчанию. Выберите другое приложение:
Не удаётся открыть ссылку
+ %1$s в %2$s
Больше месяца назад
Больше недели назад
Больше двух дней назад
Вчера
Сегодня
Товары
+ Отменить
В этом году
В этом месяце
На этой неделе
+ Сегодня
Товар
Ваша сеть недоступна. Проверьте свои данные или соединение Wi-Fi.
Не в сети u2014, используются кэшированные данные
Подробнее
+ Отмена
+ Без заголовка
Продолжить
+ Назад
+ Повторить попытку
Скрыть подробности
+ Подробнее
Скидка
Подытог
Налоги
@@ -3671,18 +3691,11 @@ Language: ru
%1$s%2$s
Заказы
Мой магазин
+ Выйти
+ Вход в систему
Все
+ Общее
WooCommerce
- %1$s в %2$s
- Заказ №%s
- Сделано с любовью компанией Automattic. %1$s
- Личный
- Подключить сайт
- Нет активности за этот период
- Всего заказов: %s
- Ошибка при получении примечаний
- Ознакомьтесь с %1$sинструкциями по настройке%2$s.
- Почти готово! Введите проверочный код для WordPress.com из приложения Authenticator.
- @string/date_timeframe_custom
- @string/date_timeframe_today
diff --git a/WooCommerce/src/main/res/values-sv/strings.xml b/WooCommerce/src/main/res/values-sv/strings.xml
index 3baa4d86e5e..d53d30710cb 100644
--- a/WooCommerce/src/main/res/values-sv/strings.xml
+++ b/WooCommerce/src/main/res/values-sv/strings.xml
@@ -1,11 +1,27 @@
+ Ett fel uppstod när variationer hämtades
+ \"Det gick inte att ladda fler objekt. Försök igen.\"
+ Tillbaka
+ %1$d variationer
+ Variation %s, Pris %s
+ Variabel produkt%s, Pris %s
+ Beskrivning kan inte vara tom
+ Uppmaning till åtgärd
+ Slogan kan inte vara tom
+ Kontrollera att din e-postadress är korrekt och dubbelkolla din skräppostmapp.
+ Vi hittar inget konto hos WordPress.com som är kopplat till det här användarnamnet. Du kan ange en e-postadress för att skapa ett nytt konto.
+ Ange en streckkod eller en annan identifierare som är unik för den här produkten. Det kan vara till hjälp om du ska lista produkten på andra kanaler eller marknadsplatser.
+ GTIN, UPC, EAN, ISBN
+ SISTA UTBETALNINGEN
+ När du har köpt en fraktsedel markerar du ordern som slutförd och meddelar kunden.
+ Om du inte har något konto så använder vi den här e-postadressen för att skapa ett.
Kuvert
Låda
Lägg till paket
@@ -15,33 +31,32 @@ Language: sv_SE
Längd
Pakettyp
Sparad
+ Fraktbolag
+ Anpassat
+ Begär återbetalning
Schemalägg upphämtning
Spåra leverans
Lär dig hur man skriver ut från din mobila enhet
- Begär återbetalning
- Fraktbolag
- Anpassat
Obs: Återanvändning av en utskriven fraktetikett är ett brott mot våra användarvillkor och kan leda till åtal.
Härifrån kan du skriva ut fraktetiketten igen eller ändra storlek på fraktetiketten.
Din fraktetikett är klar att skrivas ut.
Du kan bara redigera den här beställningen på webben, eftersom den använder %1$s och din webbplats valuta är %2$s
+ Frakttjänst
Snabbast
Billigast
- Frakttjänst
Köp etikett
Köp etikett · %1$s
- Välj ett paket
- Beställningsdetaljer
- Markera denna beställning som slutförd och avisera kunden
Fraktkostnad
+ Beställningsdetaljer
Försändelseinformation
Ange paketets mått eller välj ett paketalternativ från transportören för att se tillgängliga fraktavgifter.
Välj ett paket för att få fraktavgifter
+ Välj ett paket
Skickar du farliga artiklar eller farligt material?
- %1$s · %2$s
Minimera/maximera artikelkortet
- Nej
+ %1$s · %2$s
Sorterad efter 1%s
+ Nej
Spara mitt val för framtida kampanjer
<b>Bra för:</b> %s
Välj mål %s
@@ -56,11 +71,11 @@ Language: sv_SE
4. Din kund trycker sitt kort mot baksidan av din telefon.
HTML
Text
- Anpassade fält
- Visa och redigera anpassade fält
- Visa och redigera anpassade fält
Växla mellan text- och HTML-redigerare
När ändringar av anpassade fält sparas träder de i kraft omedelbart.
+ Visa och redigera anpassade fält
+ Visa och redigera anpassade fält
+ Anpassade fält
Kopiera värde
Kopiera nyckel
Produktfoto
@@ -71,24 +86,24 @@ Language: sv_SE
Nyckeln används redan för ett annat anpassat fält.\nAppen har för närvarande inte stöd för att skapa dubbletter av nycklar. Använd WP-admin för att duplicera en nyckel om det behövs.
Lägg till anpassade fält
Anpassat fält borttaget
- Skanning misslyckades. Försök igen senare
+ Misslyckades att spara ändringar, försök igen
Ändringar sparade
Sparar ändringar
- Misslyckades att spara ändringar, försök igen
Det verkar som att du inte är ansluten till internet. Kontrollera att ditt Wi-Fi är på. Se till att mobildata är aktiverat i dina enhetsinställningar om du använder detta.
+ Skanning misslyckades. Försök igen senare
Värde
Nyckel
Andra produkttyper, till exempel rörliga och virtuella, kommer att bli tillgängliga i framtida uppdateringar.
+ Endast enkla fysiska produkter kan användas med POS just nu.
Avbryt
Varaktighet
Kampanj kommer köras tills du stoppar den.
Specificera varaktigheten
- Endast enkla fysiska produkter kan användas med POS just nu.
till %1$s
Schema
Dagligt belopp
- %1$s ➔ %2$s
Hur mycket vill du spendera på din kampanj, och hur länge ska den köras?
+ %1$s ➔ %2$s
Visa upp dina produkter för miljontals människor med Blaze och öka din försäljning
Funderar du på hur du kan öka din försäljning?
Det gick inte att läsa in anpassade fält
@@ -96,35 +111,35 @@ Language: sv_SE
Nedtonad bakgrund. Tryck för att avfärda dialogrutan.
%1$s per vecka
Kör tills jag stoppar den
+ Pågående från %1$s
+ veckobelopp
%1$s per vecka, från och med %2$s
Per vecka
Återstående
Totalt
Klick
Det verkar som att din enhet är i strömsparläge. \nVI kan inte tillhandahålla din butiksinformation medan det är aktiverat
- Pågående från %1$s
- veckobelopp
- Meny inaktiverad
- Meny aktiverad
- Kortläsare ansluten
- Kortläsare inte ansluten. Dubbeltryck för att ansluta
Popup-meny med alternativ. Svep för att navigera bland objekt.
Öppna verktygsfältsmeny
- Verktygsfält med kortläsarstatus. Dubbeltryck för att interagera.
Verktygsfält med kortläsarstatus. Menyn är öppen. Dubbeltryck för att interagera.
+ Verktygsfält med kortläsarstatus. Dubbeltryck för att interagera.
+ Meny inaktiverad
+ Meny aktiverad
+ Kortläsare inte ansluten. Dubbeltryck för att ansluta
+ Kortläsare ansluten
Nedtonad bakgrund. Tryck för att stänga menyn.
Bockmarkeringsikon för lyckad betalning
Ta bort den här varan från varukorgen
- Dubbeltryck för att lära dig mer
- Stäng
- Öka din försäljning
Eventuella pågående beställningar kommer att gå förlorade.
Lämna Försäljningsplatsläge?
+ Stäng
Nedtonad bakgrund. Tryck för att avfärda dialogrutan.
Dubbeltryck för att avfärda dialogrutan
Dialogruta – endast enkla produkter
+ Dubbeltryck för att lära dig mer
Banner – endast enkla produkter
Marknadsför dina produkter med Blaze-annonser och öka din försäljning nu.
+ Öka din försäljning
Ta emot betalningar i farten
En felaktig PIN-kod har angetts. Försök igen eller använd en annan betalningsmetod
Meny
@@ -135,30 +150,30 @@ Language: sv_SE
Ny beställning
OK
+ Skapa en beställning i butikshantering
+ För att ta betalt för en icke-enkel produkt, lämna POS och skapa en ny beställning från fliken Beställningar.
Varför kan jag inte se mina produkter?
Info
Stäng
+ Läs mer
Endast enkla fysiska produkter är kompatibla med POS just nu. Andra produkttyper, till exempel rörliga och virtuella, kommer att bli tillgängliga i framtida uppdateringar.
Visar endast enkla produkter
- För att ta betalt för en icke-enkel produkt, lämna POS och skapa en ny beställning från fliken Beställningar.
- Läs mer
Webbplatsadress
- Lägg till betald kampanj
Google för WooCommerce
+ Lägg till betald kampanj
Öka försäljningen och generera mer trafik med Google Ads.
Google-kampanjer
Klar
Din nya kampanj har skapats. Spännande tider väntar för din försäljning!
+ Redo att köra!
Kunde inte skapa beställning
Försök igen
- Det gick inte ladda in produkter
- Redo att köra!
Ikon som indikerar fel
Vill du försöka igen?
+ Det gick inte ladda in produkter
POS stöder för närvarande bara enkla produkter
POS stöder för närvarande bara enkla produkter – \nskapa en för att komma igång.
- Inga produkter
Inga produkter som stöds hittades
+ Inga produkter
Skaffa support
Anslut din läsare
Foto borttaget
@@ -168,35 +183,36 @@ Language: sv_SE
Klick
Visningar
Konvertering
- Total försäljning
Belopp
+ Total försäljning
Nyckeltal
Total försäljning: %1$s
Belopp: %1$s
Filtrera urval
Varukorg är tom
- %d artiklar
Tryck på en produkt för att\nlägga till den i varukorgen
Det gick inte att hämta summor.
+ %d artiklar
Misslyckades att ladda upp den valda produktbilden.
<b>Bra förfrågan!</b> Du har gett oss tillräckligt att arbeta med, men du kan lägga till mer information för att få ännu bättre resultat.
- <b>Lägg till fler detaljer.</b> Ju fler detaljer du anger, desto bättre blir dina genererade detaljer.
<b>Bra förfrågan!</b> Var gjordes den?
<b>Det blir bättre.</b> Kan du beskriva passformen och eventuella särdrag hos varan?
+ <b>Lägg till fler detaljer.</b> Ju fler detaljer du anger, desto bättre blir dina genererade detaljer.
Lägg till din produkts namn och viktiga funktioner, fördelar eller information som hjälper kunder att hitta den online.
+ Välj nästa alternativ
+ Välj föregående alternativ
Generera igen
Ångra redigeringar
Alternativ %1$d av %2$d
- Välj föregående alternativ
- Välj nästa alternativ
Visa alla kampanjer
Skapa kampanj
Klick
Visningar
- Öka försäljningen och generera mer trafik med Google Ads
- Google Ads-kampanjer
Betalkampanjsresultat
Marknadsför dina produkter i Google Sök, Google Shopping, Youtube, Gmail med mera.
+ Öka försäljningen och generera mer trafik med Google Ads
+ Google Ads-kampanjer
+ Inget
Inget telefonnummer
Postnummer
Ort
@@ -205,6 +221,7 @@ Language: sv_SE
Registreringsdatum
Användarnamn
Genomsnittligt beställningsvärde
+ Totalt spenderat belopp
Beställningar
Senast aktiv
Plats
@@ -212,68 +229,62 @@ Language: sv_SE
Faktureringsadress
Registrering
Beställningar
+ Kund
Inga produkter
Kunder
Få kundinsikter
Kunder
+ Det gick inte att skanna texten från fotot. Försök igen
Skannar bild
Foto valt
- Inget
- Totalt spenderat belopp
- Kund
- Det gick inte att skanna texten från fotot. Försök igen
Ta bort foto
Byt ut foto
Visa foto
Namn, sammanfattning och beskrivning
- Program
Du kan redigera eller återskapa din produktinformation innan du sparar.
- Inga program under den här perioden
+ Program
Google-kampanjer
+ Inga program under den här perioden
Anslut nu
Varukorg
Generera produktdetaljer
Läs text från produktfoto
Till exempel: Svart t-shirt i bomull, mjukt tyg, slitstarka sömmar, unik design
+ Berätta för oss om din produkt, vad det är och vad som gör produkten unik, och låt sedan AI:n göra sitt jobb.
Startinformation
Låt oss generera produktinformation åt dig
- Berätta för oss om din produkt, vad det är och vad som gör produkten unik, och låt sedan AI:n göra sitt jobb.
+ Ta emot kortbetalning
Totalt
+ Momser
Delsumma
Betalning lyckades
Betalning misslyckades. Försök igen.
Varukorgsikon
Produkter
+ %d artikel
+ Rensa
+ Öka försäljningen och generera mer trafik med Google Ads
Google för WooCommerce
Inga regler för antal
- Öka försäljningen och generera mer trafik med Google Ads
- Ta emot kortbetalning
- Rensa
- %d artikel
- Momser
Målgrupp
Avbryt
Avsluta
Avsluta POS
- Kassa
Ta bort %s från varukorg
- Lägg till nya sektioner
- Inga produkter hittades för den valda lagerstatusen
- Läsare ansluten
- Avsluta POS
+ Kassa
Läsarens status okänd
Kassa
+ Läsare ansluten
+ Avsluta POS
+ Lägg till nya sektioner
+ Inga produkter hittades för den valda lagerstatusen
Det gick inte att läsa in lagerrapporten
Ingen vara såld de senaste 30 dagarna
%d varor sålda de senaste 30 dagarna
- Lågt lager
- Dela din feedback
- Letar du efter fler insikter?
- Produkter
- Lagernivåer
- Status
Försäljningsplatsläge
+ Lågt lager
FRAKT
+ Dela din feedback
Gör Woo frakt enkelt?
Frakt tillagd.
Redigera frakt
@@ -283,95 +294,99 @@ Language: sv_SE
Markera beställningen som slutförd
Registrera transaktionsinformation i beställningsanteckning
Lägg till nya sektioner för att anpassa din butikshanteringsupplevelse
+ Letar du efter fler insikter?
+ Produkter
+ Lagernivåer
+ Status
Behöver du fortfarande hjälp? Kontakta oss
+ Det går inte att hämta rapporten över användning av rabattkoder
+ Ingen användning av rabattkoder under denna period
Visa alla rabattkoder
Användningar
Rabattkoder
Lager
Visa alla meddelanden
- N/A
- Det går inte att hämta rapporten över användning av rabattkoder
- Ingen användning av rabattkoder under denna period
Det gick inte att läsa in toppresterande produkter
- Mest aktiva rabattkoder
- Kontanter mottagna
+ N/A
Växel
+ Kontanter mottagna
+ Mest aktiva rabattkoder
Ta emot betalning (%s)
- Status
- Visa alla beställningar
Visa alla recensioner
+ Inga recensioner matchar det valda filtret, testa att ändra filter
Inga recensioner hittades
+ Status
De senaste recensionerna
De senaste beställningarna
- Inga recensioner matchar det valda filtret, testa att ändra filter
+ Visa alla beställningar
Öppna listrutan för filter
Rensa överordnad kategori
Fel vid hämtning av produkter!
+ Välj en fraktmetod
+ Frakt
Namn
Metod
- Metod
- Ogiltigt värde
- Frakt
Lägg till frakt
- Välj en fraktmetod
Det gick inte att hämta dina fraktmetoder. Försök igen
- Anpassa
+ Metod
+ Ogiltigt värde
Konfigurera din butik
+ Anpassa
Visa alla kampanjer
Föreslagen produkt
Försök att läsa in det här kortet igen. Om problemet kvarstår, <a href=\"support\">kontakta supporten</a>.
+ Kan inte ladda data
Dölj %s
Slutförd
Feedback
- Kan inte ladda data
- Vi kan inte visa din\n butiks analys
Se till att du kör den senaste versionen av WooCommerce på din webbplats och att du har WooCommerce Analytics aktiverat.
- Inte tillgänglig
- Anpassad
+ Vi kan inte visa din\n butiks analys
Visa alla uppgifter
Sessionsanalysen bygger på antalet unika besökare, vilket inte är tillgängligt för anpassade datumintervall
Sessionsdata ej tillgänglig
+ Inte tillgänglig
Prestanda
+ Anpassad
Ändra datumintervall-knapp
Bilderna är inte tillgängliga, eftersom din webbplats är satt som Privat. Du kan ändra detta genom att växla till läget Kommer snart.\n
Kortval för analys
Avbryt
Avsluta ändå
- Ogiltig bild
- Inga anslutningsproblem
Det verkar som att du inte har godkänt appanslutningen än. Är du säker på att du vill lämna sidan?
+ Välj en bild med en minsta storlek på 400x400 pixlar
+ Ogiltig bild
Det verkar som att användarnamnet eller lösenordet som du angav är felaktigt. Dubbelkolla dina autentiseringsuppgifter och försök igen.
Om dina data fortfarande inte laddas, kontakta vårt supportteam för att få hjälp.
- Välj en bild med en minsta storlek på 400x400 pixlar
+ Inga anslutningsproblem
Gå tillbaka till föregående skärm
Försök ansluta igen
Ansluter till din webbplats
Vi kan inte ansluta till WordPress.com för tillfället.\n\nFörsök igen om några minuter, eller kontakta vårt supportteam så hjälper vi dig.
+ Vänta medan vi försöker identifiera ditt anslutningsproblem.
Felsök anslutning
Presentkort
Använt
- Vänta medan vi försöker identifiera ditt anslutningsproblem.
Inga presentkort denna period
Kontakta support
Fortsätt
Om du stöter på problem, kontakta vårt supportteam.
- Vi kunde inte logga in i din butik
- Lägg till ett anpassat belopp
3. När anslutningen är klar kommer du att loggas in i din butik.
2. När du uppmanas till det, godkänn anslutningen genom att trycka på bekräftelseknappen.
1. Börja med att logga in med dina webbplatsautentiseringsuppgifter.
Följ dessa steg för att ansluta Woo-appen direkt till din butik med ett applikationslösenord.
Detta kan bero på att din butik har några extra säkerhetssteg på plats.
+ Vi kunde inte logga in i din butik
Din beställningsinformation kommer att visas här när du har gjort en beställning.
Ingen beställningsinformation än
+ Lägg till ett anpassat belopp
För att ange ett betalningsbelopp, lägg till\nett anpassat belopp till din nya beställning.
Vi har kombinerat betalningsmottagning med\nbeställningsskapande för förbättrad åtkomst\noch mer kraft.
+ Ta emot betalning \nhar flyttat
Paket
Paket sålda
Paket
Paket sålda
Blaze-kampanjer
- Ta emot betalning \nhar flyttat
Toppresterande
Är du säker på att du vill kassera ändringarna som du har gjort för den här produkten?
Du är på väg att kassera ändringarna för %s
@@ -381,129 +396,129 @@ Language: sv_SE
Prenumerationer
Prenumerationer
Tolkar förhandsgranskning …
+ Ett fel uppstod vid inläsningen av installerade tillägg
+ Hanteras automatiskt
Inaktivt
Uppdatering tillgänglig (%s)
+ Uppdaterat
+ Butiksnamn
Tar bort kategori
Uppdaterar kategori
+ Fel vid borttagning av kategori
Produktkategori borttagen
Produktkategori uppdaterad
- Butiksnamn
Det gick inte att ladda domänförslag
- Ett fel uppstod vid inläsningen av installerade tillägg
- Hanteras automatiskt
- Uppdaterat
- Fel vid borttagning av kategori
Förslag
Skriv en domän
Välj en domän
+ Visa alla butiksanalyser
En gång om året
En gång i månaden
En gång i veckan
En gång om dagen
+ En gång i timmen
+ %s intervall
Anslut en annan butik
Starta en ny butik
Butiksnamn
- En gång i timmen
- %s intervall
- Visa alla butiksanalyser
Vänta …
Uppdateringar lagerstatus
Något gick fel. Försök igen.
+ Uppdaterade lagerstatusar
Variabla produkter kan inte uppdateras
Hanterade produkter kan inte uppdateras
- Uppdaterade lagerstatusar
1 variabel produkt kommer att ignoreras.
+ 1 produkt med hanterad lagerkvantitet kommer att ignoreras.
Lagerstatus kommer att uppdateras för 1 produkt.
+ %1$d variabla produkter kommer att ignoreras.
+ %1$d produkter med hanterad lagerkvantitet kommer att ignoreras.
+ Lagerstatus kommer att uppdateras för %1$d produkter.
Nuvarande lagerstatus är %1$s
Nuvarande lagerstatus är blandat
KLART
+ Uppdatera lagerstatus
+ Logga in med dina inloggningsuppgifter för webbplatsen
WooCommerce-version
Installerade tillägg
Tillägg
+ Ljudet för orderaviseringar har ändrats. Använd den här knappen för att återställa \"cha-ching\"-ljudet.
+ Uppdatera lagerstatus
+ Vill du flytta denna beställning till papperskorgen?
Flytta till papperskorgen
Räkna om
Skanna produkter
- Vill du flytta denna beställning till papperskorgen?
- Lagerstatus kommer att uppdateras för %1$d produkter.
- Uppdatera lagerstatus
- Uppdatera lagerstatus
- 1 produkt med hanterad lagerkvantitet kommer att ignoreras.
- %1$d variabla produkter kommer att ignoreras.
- %1$d produkter med hanterad lagerkvantitet kommer att ignoreras.
- Logga in med dina inloggningsuppgifter för webbplatsen
- Ljudet för orderaviseringar har ändrats. Använd den här knappen för att återställa \"cha-ching\"-ljudet.
Ordersammanfattning
Ett fel uppstod när ordern togs bort
Ordern borttagen
Det verkar vara ett problem med din webbplats.\n\nKontakta ditt webbhotell för vidare hjälp.
- Det verkar som att du inte är ansluten till internet.\n\nKontrollera att ditt Wi-Fi är på. Se till att mobildata är aktiverat i dina enhetsinställningar om du använder detta.
- Din webbplats verkar ta för lång tid att svara.\n\nKontakta ditt webbhotell för ytterligare hjälp.
Det verkar ha uppstått ett problem med din Jetpack-anslutning.\n\nMen oroa dig inte, vårt supportteam finns här om du behöver hjälp. Kontakta oss så hjälper vi dig.
Det verkar som att vi inte kan arbeta korrekt med din webbplats svar.\n\nMen oroa dig inte, vårt supportteam finns här om du behöver hjälp. Kontakta oss så hjälper vi dig.
+ Din webbplats verkar ta för lång tid att svara.\n\nKontakta ditt webbhotell för ytterligare hjälp.
+ Det verkar som att du inte är ansluten till internet.\n\nKontrollera att ditt Wi-Fi är på. Se till att mobildata är aktiverat i dina enhetsinställningar om du använder detta.
+ Ingen produkt vald
Läs mer
Kontakta supporten
+ Hämtar dina webbplatsbeställningar
+ Ansluter till WordPress.com-servrar
Internetanslutning
- Ingen produkt vald
Lägg till statistik för anpassade datumintervall
- Ansluter till WordPress.com-servrar
- Hämtar dina webbplatsbeställningar
Ingen plats hittades.\nFörsök igen.
+ Sidvisningar under session
+ Enhetstyp
Medium
Medium
+ Källa
+ Källtyp
Okänd
Mobilapp
Webbadministratör
Direkt
Källa: %1$s
- ID: %d
- Kund
- Produkt
- Gäst
- Källa
- Källtyp
- Enhetstyp
Hänvisning: %1$s
Organisk: %1$s
+ Ursprung
+ Beställningstillskrivning
Kontakta via Telegram
Kontakta via WhatsApp
+ ID: %d
+ Kund
+ Produkt
+ Gäst
Denna användare är en gäst, och gäster kan inte användas för att filtrera beställningar.
Försök igen senare eller kontakta oss så hjälper vi dig gärna
- Sidvisningar under session
- Ursprung
- Beställningstillskrivning
Det tar lång tid för din webbplats att svara
Visa detaljer
Fraktmoms
Anpassa analys
- Avbryt kampanj
- Skaffa support
Något är fel.\nVi kunde inte skapa din kampanj.
Det gick inte att hämta information om kampanjbilden
Uppladdning av kampanjbild misslyckades.
+ Avbryt kampanj
+ Skaffa support
Försök igen eller kontakta supporten för hjälp.
+ Kampanjen kunde inte skapas
+ Kampanjen kunde inte skapas
Skapar din kampanj
Klar
+ Vi granskar din kampanj. Den kommer att gå live inom 24 timmar. Spännande tider väntar för din försäljning.
+ Allt är klart att köras.
Nyckeln finns redan
+ Den sista URL:en är för lång
Värde
Nyckel
- Lägg till
- Lägg till bild
- Lägg till kreditkort
+ Destination: %s
Lägg till parameter
- Betalningsmetod
+ Kreditkortet är nu tillagt
Lägg till nytt kort
- Kampanjen kunde inte skapas
- Kampanjen kunde inte skapas
- Vi granskar din kampanj. Den kommer att gå live inom 24 timmar. Spännande tider väntar för din försäljning.
- Allt är klart att köras.
- Den sista URL:en är för lång
- Destination: %s
- Kreditkortet är nu tillagt
Kreditkorten hämtas från följande WordPress.com-konto: %1$s <%2$s>
Alla transaktioner är säkra och krypterade
+ Lägg till kreditkort
Lägg till en ny betalningsmetod
+ Betalningsmetod
Det gick inte att uppskatta antalet visningar. Försök igen?
+ Lägg till
Lägg till en slogan och en beskrivning för din Blaze-kampanj
+ Lägg till bild
Lägg till en bild till Blaze-kampanjen
Draghandtag
Kort för analys
@@ -513,63 +528,62 @@ Language: sv_SE
URL-parametrar
Mål-URL
Ange manuellt
+ Sökning misslyckades.\nFörsök igen
Börja skriva land, delstat eller stad för att se tillgängliga alternativ
Genom att klicka på \"Skicka kampanj\" godkänner du våra <a href=\'termsOfService\'><u>användarvillkor</u></a> och vår <a href=\'advertisingPolicy\'><u>annonspolicy</u></a> och samtycker till att din betalningsmetod debiteras för den budget och den varaktighet som du väljer. <a href=\'learnMore\'><u>Läs mer</u></a> om hur budgetar och betalningar för marknadsförda inlägg fungerar.
- Sökning misslyckades.\nFörsök igen
Skicka in kampanj
+ Laddning av betalningsmetoder misslyckades. Försök igen genom att klicka här!
Lägg till betalningsmetod
Laddar in betalningsmetoder
Totalt
- Betalning
- Sök platser
Blaze-kampanj
- Laddning av betalningsmetoder misslyckades. Försök igen genom att klicka här!
Betalning totalt
+ Betalning
+ Sök platser
Det gick inte att lagra kvittot
Det gick inte att ladda ner kvittot
Det gick inte att hitta någon applikation som kvittot kan delas till
Vi kunde inte ladda något kvitto för den här beställningen
+ Föreslaget av AI
+ %d tecken återstår
Beskrivning
Slogan
Ändra bild
Tillämpa
+ Startdatum
%1$s dagar
+ Visningar återspeglar hur ofta din annons visas för potentiella kunder.\n\n\n Exakta siffror kan inte garanteras på grund av fluktuerande onlinetrafik och användarbeteende, men vi strävar efter att annonsens faktiska antal visningar ska ligga så nära ditt målantal som möjligt.\n\n\n Kom ihåg att visningar handlar om synlighet, inte om åtgärder som vidtas av tittarna.
Klar
+ Visningar
Uppdatera
Redigera
- Ställ in din budget
+ Uppskattat antal personer som nås per dag
+ %1$s dagligen
i %1$s dagar
- %1$s dagar från %2$s
+ Ställ in din budget
Alla
- %d tecken återstår
- %1$s dagligen
- Föreslaget av AI
- Visningar
- Uppskattat antal personer som nås per dag
- Visningar återspeglar hur ofta din annons visas för potentiella kunder.\n\n\n Exakta siffror kan inte garanteras på grund av fluktuerande onlinetrafik och användarbeteende, men vi strävar efter att annonsens faktiska antal visningar ska ligga så nära ditt målantal som möjligt.\n\n\n Kom ihåg att visningar handlar om synlighet, inte om åtgärder som vidtas av tittarna.
- Startdatum
+ %1$s dagar från %2$s
Visa det inte igen
Påminn mig senare
Har du tid en minut? Hjälp oss att förbättra våra AI-assisterade funktioner genom lite snabb feedback.
Bekräfta detaljer
+ Annonsdestination
Intressen
Plats
Enheter
Språk
Budget
Detaljer
- Förhandsgranska
- Annonsdestination
- Handla nu
Redigera annons
+ Förhandsgranska
Inaktiverad (originalstorlek)
- Välj produkt %s
- <b>Välj en produkt:</b> Välj vad som ska marknadsföras med Blaze.
Produktval
+ Välj produkt %s
<b>Gå live:</b> Se din kampanj starta och följ dess resultat.
<b>Snabbgranskning:</b> Skicka in din annons för en snabb moderatorkontroll.
<b>Ange din budget:</b> Bestäm hur mycket du vill spendera och kampanjens längd.
<b>Anpassa målgrupp:</b> Välj målgrupp baserat på plats eller intressen och se potentiell räckvidd.
+ <b>Välj en produkt:</b> Välj vad som ska marknadsföras med Blaze.
Hantera lager
Lager inte hanterat
Lär dig hur Blaze fungerar
@@ -580,53 +594,48 @@ Language: sv_SE
Global räckvidd på ett enkelt sätt
Lansera annonser på några minuter – ingen erfarenhet eller stor budget behövs, från bara $5 per dag.
Snabb start, stor påverkan
- Ange kod
- Använd %1$s
Vårt verktyg är utformat för att ge handlare möjlighet att snabbt och enkelt skapa annonskampanjer för maximal trafikökning.
Marknadsför
Redo att marknadsföra
Visa upp dina produkter för miljontals människor
- SENASTE INSÄTTNING
+ Använd %1$s
Expandera/minimera beställningssummor
Ta emot betalning
Koden bör vara i formatet XXXX-XXXX-XXXX-XXXX
+ Ange kod
Rabattkoder
Misslyckades att ladda teman.
Konfiguration slutförd
+ Uppdatering av kvantitet är ångrad
Kunde inte ladda ditt nuvarande tema
Stationär dator
Läsplatta
Mobil
tryck här
+ Tyvärr verkar det vara ett problem med hämtningen av mallen. %1$s för en live-demo.
+ Du hittar ditt perfekta tema i WooCommerce-temabutiken.
Nuvarande tema
Prova ett nytt utseende
Börja undersökningen
Vi värdesätter dina åsikter!
- Behöver du hjälp? <a href=\'\'>Kontakta oss</a>
- Uppdatering av kvantitet är ångrad
- Tyvärr verkar det vara ett problem med hämtningen av mallen. %1$s för en live-demo.
- Du hittar ditt perfekta tema i WooCommerce-temabutiken.
Om du aktiverar alternativet Betala personligen kan kunden betala kontant eller med kort för onlinebeställningar vid leverans.\n\nBeställningar kan fortfarande skapas manuellt utan att aktivera denna funktion.
Vill du lägga till alternativet Betala personligen i din kassa?
+ Behöver du hjälp? <a href=\'\'>Kontakta oss</a>
Återbetala anpassat belopp
+ Återbetalning av anpassade belopp
Skanna produktens streckkod
Lägg till presentkort
- Återbetalning av anpassade belopp
Produkt
Antal
Ursprungligt antal
Något gick fel. Försök igen
+ Antal uppdaterat: %s
Visa produktdetaljer
Uppdatera antal
- AKTIVERA LJUD
- %
- 0
- Antal uppdaterat: %s
Antal + 1
- Temaaktivering misslyckades, försök igen!
- BEHÅLL TYST
Produkt med SKU: %s är inte lagerhanterad. Försök igen.
Produkt med SKU: %s hittades inte. Försök igen.
+ Temaaktivering misslyckades, försök igen!
Ljudet för beställningsnotiser har inaktiverats. Slå på det igen för att höra \"ka-ching\" vid varje ny försäljning.
Aktivera ka-ching-ljud
Skanna streckkoden för att uppdatera lagret
@@ -634,19 +643,23 @@ Language: sv_SE
Testnotis
TESTA LJUD
Klart! \"Ka-ching\"-ljudet kommer nu att höras för varje ny beställning.
+ BEHÅLL TYST
+ AKTIVERA LJUD
Aktivera det igen för att höra \"ka-ching\" vid varje ny försäljning. Håll koll på dina kunders beställningar.
Ka-ching-ljud av
Antal beställningar
+ %
+ 0
En procentandel av beställningens totala belopp
Ett fast belopp
Hur vill du lägga till ditt anpassade belopp?
- Ta bort anpassat belopp
Procentandel av beställningens totala belopp %1$s
+ Ta bort anpassat belopp
+ Temat har aktiverats
Hem
Tryck för att visa
Sidor på denna mall
Förhandsgranska
- Temat har aktiverats
Letar du efter fler?
Du kan alltid ändra det senare i inställningar
Välj ett tema
@@ -662,98 +675,98 @@ Language: sv_SE
Tackbrev
Obs! För att den här inställningen ska kunna aktiveras får prenumerationen inte ha en gratis provperiod eller ett synkroniserat förnyelsedatum.
Aktivera detta för att endast debitera frakt en gång vid den första ordern.
- Dokument och andra filer på enhet
Aktiverad
Engångsfrakt
+ Dokument och andra filer på enhet
✨ Skapa tackbrev
Debitera moms
- Tillgängliga medel sätts in automatiskt, varje %s.
- Tillgängliga medel sätts in automatiskt, varje dag.
- Medlen blir tillgängliga efter att ha inväntat granskning i %d dagar.
+ Tillgängliga medel betalas ut automatiskt, varje %s.
+ Tillgängliga medel betalas ut automatiskt, varje dag.
+ Medlen blir tillgängliga efter att ha inväntat granskning i %d dagar.
Välj en variant
+ Välj variant
”%1$s” -> %2$s
välj en variant
- Välj %1$s
%1$s objekt valda
%1$s objekt valda
+ Välj %1$s
fler än %1$s objekt
fler än %1$s objekt
färre än %1$s objekt
mellan %1$s och %2$s objekt
%d objekt
%d objekt
- Välj variant
Ändra produktantalet från %1$.2f till %2$.2f
Spara konfiguration
Konfiguration
+ Produkt %s
Konfigurera
+ Alternativt kommer registreringsavgiften att debiteras omedelbart, även om produkten har en gratis provperiod eller synkroniserade betalningsdatum.
En produktprenumeration med varianter
Variabel prenumerationsprodukt
- Enkel prenumerationsprodukt
- Produkt %s
- Alternativt kommer registreringsavgiften att debiteras omedelbart, även om produkten har en gratis provperiod eller synkroniserade betalningsdatum.
En unik produktprenumeration som möjliggör återkommande betalningar
+ Enkel prenumerationsprodukt
En valfri tidsperiod att vänta innan den första återkommande betalningen debiteras. Eventuella registreringsavgifter kommer fortfarande att debiteras vid prenumerationens start. Provperioden får inte överstiga: 90 dagar, 52 veckor, 24 månader eller 5 år.
Gratis provperiod på prenumeration
Prenumerationens utgångsdatum
- PRODUKTER
- PRODUKT
- KUND
ANPASSADE BELOPP
BETALNING TOTALT
ORDERANTECKNINGAR
- Använd en säkerhetsnyckel
- Period
+ PRODUKTER
+ PRODUKT
+ KUND
Ange din säkerhetsnyckel för att fortsätta.
Det uppstod vissa problem med säkerhetsnyckelsinloggningen
- Misslyckades
- Avbruten
- Betald
- Beräknad
+ Använd en säkerhetsnyckel
+ Period
Faktureringsintervall
Rea
- Okänd
- På väg
- Väntande
- Minimera/maximera insättningssammanfattningen
- Läs mer om när du får dina medel
+ Okänt
+ Misslyckades
+ Avbruten
+ På väg
+ Inväntar granskning
+ Betald
+ Beräknad
+ Minimera/expandera utbetalningssammanfattning
+ Läs mer om när du får dina medel
+ Tillgängliga medel betalas ut automatiskt, varje månad den %s.
+ Medlen blir tillgängliga efter att ha inväntat granskning i %d dag.
+ Medel som inväntar granskning
+ Tillgängliga medel
Momser
Produkter
- Tillgängliga medel
- Väntande medel
- Tillgängliga medel sätts in automatiskt, varje månad den %s.
- Medlen blir tillgängliga efter att ha inväntat granskning i %d dag.
Betalning totalt
E-postadress eller användarnamn
+ Det går inte att skapa en order med anpassat belopp
Ange anpassat namn
Lägg till anpassat belopp
Namn
Belopp
Anpassat belopp
- Det går inte att skapa en order med anpassat belopp
Anslut Jetpack via din adminsida i en webbläsare eller kontakta supporten.
Ett fel uppstod vid kommunikationen med din webbplats.
Anpassade belopp
Marknadsför med Blaze
Jag förstår
Annonsen har skickats in för godkännande. Vi skickar en bekräftelse via e-post när den är godkänd och aktiverad.
- Starta Blaze-kampanj nu
- Nå miljoner på WordPress- och Tumblr-webbplatser.
Klart!
+ Starta Blaze-kampanj nu
Följ upp resultat samt starta och stoppa din Blaze-kampanj när som helst.
+ Nå miljoner på WordPress- och Tumblr-webbplatser.
Ta kontrollen för bara några dollar om dagen. Det är budgetvänligt.
- Minska produktantal
- Skanna streckkod
- Minimera/expandera produktkort
- Få mer försäljning i din butik med Blaze
Marknadsför din produkt på bara några minuter.
+ Få mer försäljning i din butik med Blaze
+ Det uppstod ett fel vid uppdateringen av listan över kampanjer. Försök igen senare.
Välj mediekälla
Ingen text upptäckt. Välj ett annat förpackningsfoto eller ange produktinformation manuellt.
Lägg till produkt
- Det uppstod ett fel vid uppdateringen av listan över kampanjer. Försök igen senare.
+ Skanna streckkod
+ Minimera/expandera produktkort
+ Minska produktantal
+ Öka produkantal
Lägg till anpassat belopp
Pris efter rabatt
- Öka produkantal
Föregående beställning
Nästa beställning
Kampanjinformation
@@ -767,23 +780,23 @@ Language: sv_SE
Prova att genomföra en %s-betalning med ditt betal- eller kreditkort.\nBetalningen kommer att återbetalas när du är klar.
Det är enkelt, säkert och privat.
Ta emot alla typer av personliga betalningar, direkt\ni din telefon. Ingen extra hårdvara behövs.
+ Avvisad
+ Har slutförts
Aktiv
Under granskning
Skapa kampanj
- Avvisad
- Har slutförts
Öka synligheten och få dina produkter sålda snabbt.
Blaze-kampanj
Contactless Symbol är ett varumärke som ägs av och används med tillåtelse av EMVCo, LLC.
5. När du ser \"Klar\"-markeringen kommer din butik att behandla betalningen och transaktionen är slutförd.
3. Håll fram din telefon mot kunden.
2. Tryck på \"Ta emot betalning\" och välj \"Tryck för att betala\".
+ 1. Skapa en beställning
Hur det fungerar
Lär dig mer om kortläsare
För att ta emot betalningar över denna gräns, överväg att köpa en kortläsare som accepterar PIN-inmatning.
Vi stöder inte PIN-inmatning med Tryck för att betala på Android.
I %1$s kräver vissa kort en PIN för kontaktlösa transaktioner över %2$s.
- 1. Skapa en beställning
Viktig information
Med Tryck för att betala kan du ta emot alla typer av kontaktlösa betalningar, från fysiska betal- och kreditkort till digitala plånböcker, utan att behöva köpa en fysisk kortläsare.
Vad är Tryck för att betala?
@@ -805,25 +818,24 @@ Language: sv_SE
Ange en ny momssats för den här beställningen
Lägg till momssats automatiskt
Prova att inaktivera filtret för olästa produktrecensioner för att se alla dina produktrecensioner
- Övertygande
- Formell
- Detaljer
- Produktnamn
Inga olästa produktrecensioner
+ Övertygande
Blommig
+ Formell
Avslappnad
Ton och röst
+ Detaljer
+ Produktnamn
Förhandsgranska
Exempelvis mjukt tyg, slitstarka sömmar, unik design
Drivs med AI. <a href=\'guidelines\'><u>Lär dig mer</u></a>.
Lägg till en produkt och detaljerna manuellt
Lägg till manuellt
+ Snabbgenerera information åt dig
Skapa en produkt med AI
Lägg till en produkt
Endast olästa recensioner
- Snabbgenerera information åt dig
Redigera momssatsinställning
- Betalningsmetoder
Detta kommer inte att påverka onlinebeställningar
Lägg till den här momssatsen till alla skapade beställningar
Redigera momssatser
@@ -831,14 +843,15 @@ Language: sv_SE
Lägg till momssatser i adminpanelen. Endast momssatser med platsinformation kommer att visas här.
Vi kunde inte hitta några momssatser
Upptäck andra betalningsleverantörer och \nvälj en betalningsleverantör.
+ Betalningsmetoder
Bilder och videoklipp på enhet
Lös nu
Slutför inställning
Ange momssats
Aktivera
Ange ny momssats
- Ställ in
WooPayments
+ Ställ in
Redigera momssatser i adminpanelen
Detta kommer att ändra kundens adress till platsen för den momssats du väljer.
Knapp som öppnar dialogrutan för information om momssatser
@@ -857,15 +870,15 @@ Language: sv_SE
<a href=\'learnMore\'><u>Lär dig mer</u></a> om att verifiera din information med WooPayments.
Börja installationen
Vi har slagit oss ihop med Stripe för WooPayments. Du kommer att bli omdirigerad till Stripes webbplats för registrering. Vi kommer att be dig att kontrollera dina företagsuppgifter och din betalningsinformation.
+ Dina WooPayments-aviseringar kommer att skickas till e-postadressen som är kopplad till ditt WordPress.com-konto. Föredrar du att använda ett nytt konto? <a href=\'learnMore\'><u>Mer information finns här.</u></a>
+ Innan du startar konfigurationen
4–6 minuter
Beräknad installationstid
- Innan du startar konfigurationen
- Dina WooPayments-aviseringar kommer att skickas till e-postadressen som är kopplad till ditt WordPress.com-konto. Föredrar du att använda ett nytt konto? <a href=\'learnMore\'><u>Mer information finns här.</u></a>
Hantera betalningar utan ansträngning med WooPayments, allt på en och samma plats. Ta emot kortbetalningar, Apple Pay-betalningar, personliga betalningar och över 135 olika valutor, helt utan installationskostnader eller månadsavgifter.
Det gick inte att spara butiksnamnet. Försök igen.
+ Sparar nytt butiksnamn …
Butiksnamn inställt.
Butiksnamn inställt. \n För att ändra igen, gå till butiksinställningarna.
- Sparar nytt butiksnamn …
Uppdatera butiksnamn
Grattis! Du har gått igenom konfigurationen och ditt betalningssystem är redo att användas.
Du gjorde det!
@@ -886,13 +899,13 @@ Language: sv_SE
Beställningssumma
Beräknad procentandel
Beräknat belopp
- Att anpassa ditt butiksnamn kan också förbättra din butiks sökmotoroptimering.
Butiksnamn
+ Att anpassa ditt butiksnamn kan också förbättra din butiks sökmotoroptimering.
Namnge din butik
Aktivera NFC
Leveranspaket för små kvantiteter (märkningar krävs)
- Tändarpaket – Auktoriserade tändare
LTD QTY-markpaket – Aerosoler, spraydesinfektionsmedel, sprayfärg, hårspray, propan, butan, rengöringsprodukter, osv. - Parfymer, nagellack, nagellackborttagningsmedel, lösningsmedel, handsprit, tvättsprit, etanolbaserade produkter, osv. - Andra ytmaterial i begränsad mängd (kosmetika, rengöringsprodukter, färger, osv.)
+ Tändarpaket – Auktoriserade tändare
ID8000-konsumentvarupaket – Luftkvalificerade ID8000-konsumentvaror (icke brandfarliga aerosoler, brandfarliga brännbara vätskor, giftiga ämnen, diverse farliga material)
Farliga material endast för markleverans (för föremål som inte är listade, men som är begränsade till endast yta)
Undantagna kvantitetsförsörjningspaket (t.ex. små volymer av brandfarliga vätskor och frätande, giftiga eller miljöfarliga material – märkning krävs)
@@ -915,56 +928,56 @@ Language: sv_SE
Klass 4 – Paket (Brandfarliga fasta ämnen)
Klass 3 – Paket (Handdesinfektionsmedel, tvättsprit, etanolbaserade produkter, brandfarliga vätskor, osv.)
Klass 1 – Paket med leksaksdrivmedel/säkerhetssäkringar
- OK
Luftkvalificerat etanolpaket – (godkända försändelser av parfymer och handsprit)
+ OK
Potentiellt farligt material inkluderar varor såsom batterier, torris, brandfarliga vätskor, aerosoler, ammunition, fyrverkerier, nagellack, parfym, färg, lösningsmedel med mera. Farliga varor måste skickas i separata paket.
Innehåller farliga material
Ange produktrubrik.
- Variabel prenumeration
E-handelsplattformen som växer tillsammans med dig
+ Variabel prenumeration
Ta bort rabattkod
Alla gillar ett erbjudande
Du har inte skapat några rabattkoder ännu. Skapa en rabattkod för att tillämpa den på denna beställning.
Gå till rabattkoder
Välj en rabattkod
+ Misslyckades skapa rabattkod
Rabattkod skapad
Skapa
Skapa rabattkod
Skapa %1$s
Redigera rabattkod
Skapa en fast totalrabatt för valda produkter
- Misslyckades skapa rabattkod
Skapa en fast totalrabatt för hela varukorgen
Skapa en procentuell rabatt för valda produkter
Fast produktrabatt
Fast varukorgsrabatt
Procentuell rabatt
- Skapa rabattkod
- Lägg till rabattkod
- Starta testbeställning
- Sök efter kunder efter
- Lägg till detaljer manuellt
- Prova en testbeställning
- Prova en testbeställning
Kupongtyp – fast produkt
Kupongtyp – fast kundvagn
Kupongtyp – procentuell rabatt
+ Skapa rabattkod
+ Lägg till rabattkod
+ Starta testbeställning
Använd appen för att behandla återbetalningen för testbeställningen
Slutför betalningen och vänta på en push-avisering om beställningen i din WooCommerce-app.
Välj din testprodukt, lägg till i kundvagn och slutför i kassan på den webbutiken som en riktig kund.
Tryck på knappen nedan för att bli vidarebefordrad till din onlinebutik via en webbläsare.
+ Prova en testbeställning
+ Prova en testbeställning
Kör en testbeställning för att kontrollera att din WooCommerce-process levererar en sömlös kundupplevelse
+ Lägg till detaljer manuellt
+ Sök efter kunder efter
Annat skäl (vänligen specificera)
Jag är en del av ett team och vi måste fatta beslutet kollektivt.
+ Jag anser att priset på tjänsten är en viktig faktor i mitt beslut.
Jag utvärderar och jämför din tjänst med andra på marknaden.
Jag utforskar och utvärderar fortfarande funktionerna och fördelarna med appen.
Hjälp oss att förstå dina prenumerationsbeslut. Din feedback är viktig.
- Jag anser att priset på tjänsten är en viktig faktor i mitt beslut.
Ingen e-postadress
Inget namn
+ Sök efter en befintlig kund eller
Senast uppdaterat %s (Uppdateras var 30:e minut)
Senast uppdaterat %s
- Sök efter en befintlig kund eller
<a href=\'\'>Läs mer</a> om att ta emot betalningar med Tryck för att betala på Android
Ta emot betalning
Du kan inte lägga till produkter som inte har något specificerat pris
@@ -972,136 +985,136 @@ Language: sv_SE
lägg till kund
Gå till inställningar
Avbryt
- Belopp (%1$s)
Bevilja
- Vi kunde inte hitta en rabattkod med den koden. Försök igen
Du har nekat kameraåtkomst permanent. Det krävs för streckkodsskanning. Aktivera det i appinställningarna
Kameraåtkomst krävs för streckkodsskanning.
Bevilja kameraåtkomst
Något gick fel när din rabattkod skulle valideras. Försök igen
+ Vi kunde inte hitta en rabattkod med den koden. Försök igen
+ Belopp (%1$s)
Rabatt %1$s
– %1$s
- Belopp (%1$s)
+ Totala rabatter
Rabatt
+ Belopp (%1$s)
+ Manuell rabatt kunde inte tillämpas. Ta bort rabattkoder först
Rabatt är inte ett giltigt nummer
Rabatt kan inte vara större än priset
Ta bort rabatt
- Totala rabatter
- Manuell rabatt kunde inte tillämpas. Ta bort rabattkoder först
Knapptext
Verktygstipsmeddelande. \n Detta kan innehålla flera rader.
Verktygstipsrubrik
- ✨ Skriv med AI
Jag förstår
- Generera en beskrivning med AI
Använd vårt AI-drivna verktyg för att snabbt generera produktbeskrivningar. Det är bara att ange nyckelord så gör vi resten.
+ ✨ Skriv med AI
+ Generera en beskrivning med AI
+ Det uppstod ett problem när produktbeskrivningen skulle genereras. Försök igen senare.
Beskrivning genererad av AI
Drivs med AI. <a href=\'\'><u>Lär dig mer</u></a>.
- Det uppstod ett problem när produktbeskrivningen skulle genereras. Försök igen senare.
Tryck för att betala på Android är inte tillgängligt i ditt land än. Håll ögonen öppna.
Din enhet behöver ha tjänsten Google Play för att du ska kunna använda Tryck för att betala på Android. För att ta emot personliga betalningar behöver du installera tjänsten Google Play eller köpa en Bluetooth-kortläsare.
För att använda Tryck för att betala på Android behöver du Android 10 eller senare. För att ta emot personliga betalningar behöver du uppdatera Android eller köpa en Bluetooth-kortläsare.
Din enhet behöver ha ett NFC-chip för att du ska kunna använda Tryck för att betala på Android. För att ta emot personliga betalningar behöver du köpa en Bluetooth-kortläsare.
- Vi kunde inte ladda dina data.
- Felsökning
- Kontrollera kraven
Tryck för att betala är inte tillgängligt
+ Kontrollera kraven
+ Felsökning
Detta kan bero på en tilläggskonflikt. Försök igen senare eller kontakta oss så hjälper vi dig gärna.
+ Vi kunde inte ladda dina data.
Jag förstår
Tänk på att den här produktbeskrivningen har genererats med vårt AI-drivna verktyg. Granska och redigera innehållet för att säkerställa att det överensstämmer med ditt varumärke och ditt budskap.
- Skanna streckkod
- Användarnamn
- Namn
- E-post
- Fler inställningar
- Kanske senare
Bra start!
Är den genererade\nbeskrivningen beskrivning användbar?
Generera igen
- Ange ditt produktnamn
- Skriv en beskrivning
Framhäv din produkts unika funktioner och målgrupp med nyckelord för en skräddarsydd beskrivning.
Exempel: krukväxt, kaktus, växt, dekorativ, lättskött
+ Ange ditt produktnamn
+ Skriv en beskrivning
Kameraåtkomst krävs för streckkodsskanning.
+ Skanna streckkod
+ Användarnamn
+ Namn
+ E-post
Tillämpade rabattkoder
+ Fler inställningar
+ Kanske senare
Skriv igen
+ En PIN-kod krävs, men Tryck för att betala stöder inte detta än. Överväg att använda en extern kortläsare
Köp en kortläsare
Rabattkod kunde inte tillämpas och togs bort från beställningen
- En PIN-kod krävs, men Tryck för att betala stöder inte detta än. Överväg att använda en extern kortläsare
+ Det gick inte att generera meddelandet för delning. Försök igen.
Lär dig mer om vår AI-funktion
Lägg till ett valfritt meddelande
+ Skriver …
Skriv med AI
Marknadsför produkter med Blaze
Blaze
- Marknadsför med Blaze
- Det gick inte att generera meddelandet för delning. Försök igen.
AI-innehållsgenerator tillgänglig
- Skriver …
+ Marknadsför med Blaze
Dela produkt
Grattis. Du är ett steg närmare att kunna lansera din nya butik.
Den första produkten har skapats 🎉
Systemet avslutade Woo-appen medan den kördes i bakgrunden. Du kan prova att använda den igen.
Systemet avslutade Woo-appen medan den kördes i bakgrunden. Du kan prova att använda den igen.
Kortet togs bort för tidigt
+ Variationsprodukt
+ Vår cookiepolicy förklarar hur vi och andra använder cookies och hur du kan hantera dem.
+ Cookiepolicy
+ Din information hjälper oss att förbättra våra produkter, marknadsföring och personifiera din upplevelse på WooCommerce.
Integritetspolicy
+ Det uppstod ett fel när dina integritetsval skulle sparas.
Spara
Inställningar
Tillåt oss att optimera prestandan genom att samla in information om hur användare interagerar med våra mobilappar.
Analys
Hantera integritet
- Din information hjälper oss att förbättra våra produkter, marknadsföring och personifiera din upplevelse på WooCommerce.
- Variationsprodukt
- Vår cookiepolicy förklarar hur vi och andra använder cookies och hur du kan hantera dem.
- Cookiepolicy
- Det uppstod ett fel när dina integritetsval skulle sparas.
Din integritet är och har alltid varit avgörande för oss. Vi använder, lagrar och behandlar dina personuppgifter för att optimera vår app (och din upplevelse) på en rad olika sätt. Vissa användningsområden för dina data är absolut nödvändiga för att få saker att fungera, andra kan du anpassa i dina inställningar.
För att hjälpa oss att förbättra appens prestanda och åtgärda eventuella fel, aktivera automatiska kraschrapporter.
- Skanning misslyckades. Försök igen senare
Rapportera krascher
Rapporter
+ Läs mer om vår integritetspolicy och vår cookiepolicy.
+ Integritets- och cookiepolicyer
Integritet
+ Läs mer om vilka data vi samlar in om din butik och dina möjligheter att styra vilka data som delas.
+ Användningsspårning
+ Fler integritetsalternativ tillgängliga för WooCommerce.com-användare. Kolla in här för att lära dig mer.
+ Webbalternativ
Fler integritetsalternativ
Det uppstod ett fel vid uppdateringen av dina integritetsinställningar
- Webbalternativ
- Spårning
Det uppstod ett fel vid hämtningen av dina integritetsinställningar
Tillåt oss att optimera prestandan genom att samla in information om hur användare interagerar med våra mobilappar.
Analys
- Du kan inte lägga till en variabel produkt direkt. Välj en specifik variant
- Systemet avslutade Woo-appen medan den kördes i bakgrunden. Du kan försöka använda den igen.
+ Spårning
Vi värdesätter din integritet. Dina personuppgifter används för att optimera våra mobilappar, förbättra säkerheten, genomföra analyser och förbättra din användarupplevelse.
- Läs mer om vår integritetspolicy och vår cookiepolicy.
- Integritets- och cookiepolicyer
- Läs mer om vilka data vi samlar in om din butik och dina möjligheter att styra vilka data som delas.
- Användningsspårning
+ Systemet avslutade Woo-appen medan den kördes i bakgrunden. Du kan försöka använda den igen.
+ Du kan inte lägga till en variabel produkt direkt. Välj en specifik variant
+ Skanning misslyckades. Försök igen senare
Produkten med SKU %s hittades inte. Det gick inte att lägga till i beställningen
- Fler integritetsalternativ tillgängliga för WooCommerce.com-användare. Kolla in här för att lära dig mer.
- Skanna streckkod
Skanning misslyckades. Försök igen senare
+ Skanna streckkod
Leverans till länder som följer EU:s tullregler kräver nu att du tydligt beskriver varje vara. Om du till exempel skickar kläder måste du ange vilken typ av kläder det är (t.ex. herrskjortor, flickvästar, pojkjackor) för att beskrivningen ska vara godtagbar. Annars kan leveranser försenas eller avbrytas i tullen.
Kontakta support
Detta konto kan inte avslutas eftersom det har aktiva butiker.
Ett fel inträffade vid försöket att avsluta ditt konto.
Det gick inte att avsluta kontot
Avslutar kontot …
- Rabattkod (%1$s)
- -%1$s
- Ta bort rabattkod från beställning
Avsluta kontot permanent
Bekräfta genom att skriva in ditt användarnamn innan kontot avslutas
Bekräfta kontoavslut
Avsluta kontot
Skanna QR-koden och följ instruktionerna
Skanna för att betala
+ Ta bort rabattkod från beställning
+ Rabattkod (%1$s)
+ -%1$s
Lägg till rabattkod
- Lägg till produkter via skanner
- Du måste ge en tydlig och specifik beskrivning av varje artikel.
Otillräckligt lager
+ Du måste ge en tydlig och specifik beskrivning av varje artikel.
+ Lägg till produkter via skanner
Avfärda
Lär dig mer
- Få beställningsaviseringar och mer
- Håll dig uppdaterad och öka butikssäkerheten. Utforska Jetpack nu.
Vid frakt till länder som följer EU:s tullregler måste du ange en tydlig, specifik beskrivning för varje vara. Annars kan leveranser försenas eller avbrytas i tullen.
+ Håll dig uppdaterad och öka butikssäkerheten. Utforska Jetpack nu.
+ Få beställningsaviseringar och mer
Visa eller dölj listan för butikskonfiguration
Lista för butikskonfiguration
Du kan få tillbaka den vid behov från Meny > Inställningar > Butik
@@ -1127,37 +1140,37 @@ Language: sv_SE
Aviseringar
Sammansatt produkt
Enhetens mediabibliotek
- Tillåt
Testa Tryck för att betala med automatisk återbetalning
Testbetalning med Tryck för att betala
- Inställningar
- Visa din butik
- Håll dig uppdaterad
+ Tillåt
Uppdatera dina preferenser
+ Inställningar
Ta emot produktrecensioner för din butik
Öka försäljningen med specialerbjudanden
+ Visa din butik
+ Håll dig uppdaterad
+ Hantera mer på admin
Allmänt
Inställningar
+ Du kan redigera paketprodukter i webbadminpanelen.
%d produkter
1 produkt
- Paket
- Hantera mer på admin
- Du kan redigera paketprodukter i webbadminpanelen.
Paketprodukter
Ej grupperade
Inget maximum
Inget minimum
- Produkter
- Populär
- Presentkort
- Presentkort
- Lär dig mer om roller och behörighet
- Det verkar som att din roll inte tillåter dig att installera Jetpack.\nKontakta din administratör för hjälp.
+ Paket
Grupp om
Största kvantitet
Minsta kvantitet
Kvantitetsregler
+ Presentkort
+ Presentkort
+ Produkter
Senast sålda
+ Populär
+ Lär dig mer om roller och behörighet
+ Det verkar som att din roll inte tillåter dig att installera Jetpack.\nKontakta din administratör för hjälp.
Prova Tryck för att betala
Gratis provperiod
Registreringsavgift
@@ -1172,190 +1185,190 @@ Language: sv_SE
vecka
dag
Anpassad
- Löpt ut
- Aktiv
Väntar på att avslutas
+ Löpt ut
Avslutat
Pausad
+ Aktiv
Du kan redigera produktprenumerationer i webbadminpanelen.
Ingen gratis provperiod
Ingen registreringsavgift
Löper aldrig ut
- Prenumeration #%1$d
- Prenumeration
- OK
- Prenumeration
- Prenumeration
%1$s varje %2$s %3$s
Varje %1$d %2$s
Varje %1$s
+ Prenumeration #%1$d
+ Prenumeration
+ OK
Woo finns med dig hela vägen från din första försäljning till miljoner i intäkter. Se varför handlare förlitar sig på oss för att driva 3,4 miljoner onlinebutiker.
+ Prenumeration
OTP-koden är felaktig. Dubbelkontrollera din information och försök igen.
SMS-begäran misslyckades. Försök igen.
SMS begärt, kolla dina meddelanden för att se koden.
+ Prenumeration
Kortläsaren accepterar blipp, chipp och magnetremsa vid betalning med betal- och kreditkort.
Ta emot säkra kontaktlösa betalningsmetoder direkt från din telefon.
- Hämtar webbplats …
- Det går inte att logga in eftersom lösenordsskapandet i appen inte godkänts.
- Dela feedback
Använd din telefon för att ta emot kort\nbetalningar Prova nu.
- Logga in
+ Dela feedback
+ Det går inte att logga in eftersom lösenordsskapandet i appen inte godkänts.
+ Hämtar webbplats …
Ett fel inträffade när webbsidan skulle hämtas
Testa igen med sidan med Adminpanelen
+ Logga in
Laddar in …
%s har avslutats
Din prenumeration har avslutats och du har begränsad åtkomst till alla funktionerna.
%1$d dagar
1 dag
Laddar in …
+ Konfiguration av Payments
Om din butik
Ett telefonnummer är obligatoriskt
- Konfiguration av Payments
%1$s, %2$s, %3$s, %4$s har sålts
poster
artikel
+ Det gick inte att hämta paketinformationen
+ Du är %1$s-prenumerant. Du har tillgång till alla våra funktioner fram till %2$s.
+ Din gratis provperiod har avslutats och har begränsad åtkomst till alla funktioner. Prenumerera på %1$s nu.
+ Du har en kostnadsfri provperiod på %1$d dagar. Din kostnadsfria provperiod löper ut om %2$s. Uppgradera för att låsa upp nya funktioner och hålla igång din butik.
Prenumerationsstatus
Felsökning
Nuvarande: %s
Rapportera prenumerationsproblem
Uppgradera nu
- Oväntat fel
- Privat
- Din butik är live!
- Förhandsgranska
- Tillbaka till min butik
- Sök domäner
- Publicera min butik
- Det gick inte att hämta paketinformationen
- Du är %1$s-prenumerant. Du har tillgång till alla våra funktioner fram till %2$s.
+ %1$s kvar på din provperiod.
Provperioden avslutades
Din provperiod har avslutats.
Hoppsan, det uppstod några oväntade fel.
+ Oväntat fel
+ Vi upptäckte att butiken redan har lanserats.
Det gick inte att lansera din butik
Det gick inte att dela butiks-URL:en
+ Privat
+ Din butik är live!
+ Förhandsgranska
+ Tillbaka till min butik
Dela URL
+ Publicera min butik
För att lansera din butik behöver du uppgradera till vårt paket. <u>Uppgradera</u>
- Vi upptäckte att butiken redan har lanserats.
- Du har en kostnadsfri provperiod på %1$d dagar. Din kostnadsfria provperiod löper ut om %2$s. Uppgradera för att låsa upp nya funktioner och hålla igång din butik.
- %1$s kvar på din provperiod.
- Din gratis provperiod har avslutats och har begränsad åtkomst till alla funktioner. Prenumerera på %1$s nu.
- Något gick fel. Försök igen senare.
+ Sök domäner
Inloggning misslyckades med statuskod %1$s
Det gick inte att logga in, eftersom vi inte kan identifiera admin-URL:en för din butik
Det gick inte att logga in, eftersom vi inte kan identifiera inloggnings-URL:en för din butik
Inloggningen misslyckades med ett oväntat svar från din webbplats. Vi jobbar på att lösa det här problemet.
+ Något gick fel. Försök igen senare.
Det finns krav som inväntar granskning i ditt konto. Slutför dessa krav för att fortsätta ta emot personliga betalningar.
Betygsätt gärna din analysupplevelse
Gillar du analysen?
Vi har jobbat på att göra det möjligt att visa viktig butiksinformation från din enhet. Skulle den kunna vara bättre? Hjälp oss att förbättra den här funktionen genom att dela din feedback med oss
Se din statistik, dina intäkter med mera från din enhet.
Ett fel uppstod vid hämtningen av din webbplats. Försök igen.
+ Vi kan tyvärr inte skapa supportförfrågningar för tillfället. Försök igen senare.
Något gick fel
Jag förstår!
- Vi kan tyvärr inte skapa supportförfrågningar för tillfället. Försök igen senare.
Din supportförfrågan har landat säkert i vår inkorg. Vi kommer att svara via e-post så snart vi kan.
+ Förfrågan skickad.
Vänta …
- Jag behöver hjälp med
- Ämne
- Supportförfrågan
- Dela feedback
- Meddelande
- Skriv något
- Visa alla (%1$d)
- Ge dina kunder ett enkelt och bekvämt sätt att betala!
- Få betalt
+ Skickar din förfrågan
Annan utökning/tillägg
WooCommerce-tillägg
- Förfrågan skickad.
- Skickar din förfrågan
WooCommerce-betalningar
Kortläsare/personliga betalningar
Mobilapp
+ Skriv något
+ Meddelande
Skicka supportförfrågan
+ Ämne
Meddela oss din webbplatsadress (URL) och berätta så mycket du kan om problemet, så kommer vi att kontakta dig snart.
Låt oss ordna detta
+ Jag behöver hjälp med
+ Supportförfrågan
+ Dela feedback
Onboarding, minimerad lista
Onboarding, fullskärm
+ Visa alla (%1$d)
%1$d av %2$d uppgifter har slutförts
+ Ge dina kunder ett enkelt och bekvämt sätt att betala!
+ Få betalt
Vi använder den här informationen för att snabbare kunna konfigurera dina frakt-, moms- och betalningsinställningar.
- Logga in för att fortsätta
Berätta mer om din butik
- Något blev fel. Försök igen senare.
- Prova en betalning
+ Vi har precis skickat en magisk länk till e-postadressen för ditt konto
+ Logga in för att fortsätta
+ Få åtkomst till alla dina WooCommerce-butiker.
Flera butiker
Hämtar Jetpack-status
- Få åtkomst till alla dina WooCommerce-butiker.
- Vi har precis skickat en magisk länk till e-postadressen för ditt konto
- Välj land
- Välj delstat
- ÅTGÄRDER
- Ett fel uppstod under domänregistrering
+ Något blev fel. Försök igen senare.
+ Prova en betalning
Ta emot kortbetalningar\nmed din telefon
Tryck för att betala
+ ÅTGÄRDER
+ Ett fel uppstod under domänregistrering
+ Välj delstat
+ Välj land
Registrerar domännamn …
- Telefon
- Landskod
- Land
- Adress
- Adress 2
- Ort
- Delstat
- Delstat (Inte tillgänglig)
- Postnummer
Registrera domän
- För din bekvämlighet har vi förfyllt din WordPress.com\n kontaktinformation. Granska det för att vara säker på att det är rätt information du vill använda för denna domän.
+ Postnummer
+ Delstat (Inte tillgänglig)
+ Delstat
+ Ort
+ Adress 2
+ Adress
+ Land
+ Landskod
+ Telefon
Organisation (valfritt)
- Domänägare måste uppge kontaktinformation i en publik databas som omfattar alla domäner. Med integritetsskydd publicerar vi våra uppgifter istället för dina, och vidarebefordrar sedan privat eventuella meddelanden till dig.
- I och med att du registrerar denna domän accepterar du våra %1$savtalsvillkor%2$s
- Ange en giltig %s
- Registrera privat med integritetsskydd
- Registrera publikt
+ För din bekvämlighet har vi förfyllt din WordPress.com\n kontaktinformation. Granska det för att vara säker på att det är rätt information du vill använda för denna domän.
Kontaktinformation för domän
+ Registrera publikt
+ Registrera privat med integritetsskydd
+ Ange en giltig %s
+ I och med att du registrerar denna domän accepterar du våra %1$savtalsvillkor%2$s
+ Domänägare måste uppge kontaktinformation i en publik databas som omfattar alla domäner. Med integritetsskydd publicerar vi våra uppgifter istället för dina, och vidarebefordrar sedan privat eventuella meddelanden till dig.
Integritetsskydd
Endast butiksadministratörer kan komma åt domäninställningar
- Logga in på ditt WordPress.com-konto för att installera Jetpack
- Logga in på ditt WordPress.com-konto för att ansluta Jetpack
+ Eller fortsätt med magisk länk
Ange lösenordet för ditt WordPress.com-konto för att installera Jetpack
Ange lösenordet för ditt WordPress.com-konto för att ansluta till Jetpack
- Eller fortsätt med magisk länk
- Gratis första året
+ Logga in på ditt WordPress.com-konto för att installera Jetpack
+ Logga in på ditt WordPress.com-konto för att ansluta Jetpack
+ Du hittar domäninställningarna via Inställningar > Domäner
Din webbplatsadress håller på att konfigureras. Det kan dröja upp till 30 minuter innan din domän börjar fungera.
Grattis till dina köp
- Du hittar domäninställningarna via Inställningar > Domäner
+ Gratis första året
Är du säker på att du vill logga ut från ditt konto?
Kan inte ladda webbplatsdomäner
+ %1$d/%2$d har slutförts
+ Få en anpassad URL för din butik.
Anpassa din domän
Publicera din webbplats till världen när du vill!
Lansera din butik
- %1$d/%2$d har slutförts
- Få en anpassad URL för din butik.
Börja sälja genom att lägga till produkter eller tjänster i din butik.
Lägg till din första produkt
Konfigurera din butik
- Välj domän
- Din enhet stöds inte. Kontakta support för mer detaljer
Något gick fel med appkonfigurationen. Kontakta supporten för mer information
+ Din enhet stöds inte. Kontakta support för mer detaljer
Appen kunde inte aktivera kortläsaren, eftersom NFC-chippet är inaktiverat
Transaktionen avbröts
Den köpta domänen kommer att omdirigera användare till
+ Välj domän
Lägg till en domän
- Din gratis butiksadress
+ Domänerna för din webbplats
Primär webbplatsadress
+ <a href=\'\'><u>Lär dig mer</u></a> om domäner och hur man vidtar domänrelaterade åtgärder.
Sök efter en domän
Den köpta domänen kommer omdirigera användare till din primära adress.
Gör anspråk på domän
- <a href=\'\'><u>Lär dig mer</u></a> om domäner och hur man vidtar domänrelaterade åtgärder.
- Domänerna för din webbplats
Ditt paket inkluderar en gratis domännamnsregistrering i ett år.
Gör anspråk på din gratisdomän
+ Din gratis butiksadress
Domäner
Visa inte igen
Påminn mig senare
+ Inga problem! Du kan alltid gå till Inställningar i menyn för att skicka feedback.
Dela feedback
Dela feedback
- Berätta vad du tycker
- Inga problem! Du kan alltid gå till Inställningar i menyn för att skicka feedback.
Berätta för oss om din upplevelse av personliga betalningar.
+ Berätta vad du tycker
Betygsätt din första upplevelse av personliga betalningar.
Gillar du att använda personliga betalningar?
Dela din egen upplevelse av att ta emot personliga betalningar.
@@ -1366,105 +1379,106 @@ Language: sv_SE
Det går inte att duplicera produkten
Duplicera
Förbereder för betalning
- Domän
Det går snabbt
+ Förbereder inbyggd läsare …
Den inbyggda läsaren är redo
+ Kortläsare
Tryck för att betala
Omvandlingsfrekvens
Sessioner
Inga sessioner denna period
Jämfört med
- Kortläsare
- Förbereder inbyggd läsare …
+ Domän
Vad är applikationslösenord?
Det verkar som att funktionen Applikationslösenord är inaktiverad på din webbplats %1$s.\n Aktivera den om du vill använda WooCommerce-appen.
Öppna installationssida
- Svar skickat!
Det uppstod ett fel när svaret skulle skickas
+ Svar skickat!
Svara
+ Välj alla
Uppdatera pris
Uppdatera status
Status uppdaterad!
Uppdatera status
Pris uppdaterat!
Uppdatera ordinarie pris
- Välj alla
Alla variationer har redan genererats.
Inga variationer att generera
Välj flera
Inga tillgängliga domäner för denna sökning
- Generera alla varianter?
Genererar varianter
Detta kommer skapa en ny variation för varje möjlig kombination av variationsattribut (%1$d variationer).
+ Generera alla varianter?
Skapande stöds för närvarande för högst %1$d variationer. Att generera variationer för den här produkten skulle skapa %2$d variationer.
Gräns för generering överskriden
Skapar variationer för alla kombinationer av dina attribut.
+ Generera alla variationer
Skapa en ny variation. Ange manuellt vilka attribut som tillhör den variabla produkten.
Lägg till ny variation
Lägg till variation
- Generera alla variationer
- Försök att ansluta igen för att komma åt din butik.
Lämna utan att ansluta
Fortsätt ansluta
+ Försök att ansluta igen för att komma åt din butik.
Jetpack är installerat men inte anslutet.
Du har inte behörighet att ansluta Jetpack till den här butiken
Kontakta din butikshanterare eller -administratör för att få hjälp.
- Fel
- Felkod %1$s
- Din butik <b>%1$s</b> är nu ansluten till Jetpack.
- Vänta medan vi ansluter din butik <b>%1$s</b> med Jetpack.
- Ansluter Jetpack
- Installerar Jetpack
- Allt klart
- Validerar
- Anslut butik till Jetpack
- Aktiverar
- Installerar Jetpack
Avbryt installation
Försök auktorisera igen
Försök att aktivera igen
Försök installera igen
Skaffa support
Försök igen och kontakta supporten om detta fel fortsätter.
- Du har inte behörighet att hantera tillägg på denna butik
- Anslut Jetpack
- Gå till butik
Ett fel uppstod vid kommunikationen med din webbplats.
+ Du har inte behörighet att hantera tillägg på denna butik
Det gick inte att auktorisera anslutningen till Jetpack
Det gick inte att aktivera Jetpack
Det gick inte att installera Jetpack
+ Anslut Jetpack
+ Gå till butik
+ Fel
+ Felkod %1$s
+ Din butik <b>%1$s</b> är nu ansluten till Jetpack.
+ Vänta medan vi ansluter din butik <b>%1$s</b> med Jetpack.
Installera Jetpack
Jetpack har anslutits
+ Ansluter Jetpack
+ Installerar Jetpack
+ Allt klart
Ansluten
+ Validerar
+ Anslut butik till Jetpack
+ Aktiverar
+ Installerar Jetpack
Logga in på <b>%1$s</b> med autentiseringsuppgifterna för din butik för att ansluta Jetpack.
Logga in på <b>%1$s</b> med autentiseringsuppgifterna för din butik för att installera Jetpack.
- Skapa din första butik
- Anslut din butik till Jetpack för att komma åt den på denna app.
Ha autentiseringsuppgifterna för din butik redo.
+ Anslut din butik till Jetpack för att komma åt den på denna app.
Installera det kostnadsfria Jetpack-tillägget för att komma åt din butik med den här appen.
Kom igång och börja sälj snabbt med en vacker onlinebutik.
+ Skapa din första butik
+ Slumpmässigt
Aldrig
Alltid
- Slumpmässigt
Uppdatera simulerad läsarnyckel
Uppdatera simulerad kortläsare
Anslut Jetpack
Anslut butik
- Besökare
Det är här människor kommer hitta dig på Internet. Oroa dig inte, du kan ändra detta senare.
+ Besökare
Eller logga in med lösenord
- Simulerad läsarnyckel
- Nuvarande lagerantal är %d
Den simulerade kortläsaren har inaktiverats
+ Simulerad läsarnyckel
Lagerkvantiteten har uppdaterats
Den aktuella lagerkvantiteten är blandad
+ Nuvarande lagerantal är %d
Uppdaterar lagerkvantiteten
Lagerkvantiteten kommer att uppdateras för %d variationer
Lagersaldo
- Skapa en ny butik
- Anslut en befintligt butik
Sök filtrerade produkter
Sök filtrerade beställningar
+ Anslut en befintligt butik
+ Skapa en ny butik
+ Nettoförsäljning: %1$s
Sålda artiklar
Produkter
Produkter
@@ -1479,102 +1493,104 @@ Language: sv_SE
Inga intäkter denna period
Intäkt
%1$s – %2$s
+ Vi kunde inte skapa ett konto med de angivna autentiseringsuppgifterna. Prova med en annan e-postadress.
+ Ditt lösenord uppfyller inte våra säkerhetsriktlinjer. Försök med ett mer komplext lösenord.
Ditt lösenord är för kort. Välj ett lösenord som har minst 6 tecken.
Ange en giltig e-postadress.
Ett konto med denna e-post finns redan.
- Ditt lösenord uppfyller inte våra säkerhetsriktlinjer. Försök med ett mer komplext lösenord.
- Nettoförsäljning: %1$s
- Vi kunde inte skapa ett konto med de angivna autentiseringsuppgifterna. Prova med en annan e-postadress.
Försök med en annan adress
Anpassat datumintervall
Anpassat
+ Vad är WordPress.com?
Skapar nytt konto
Välj ett lösenord
Din e-postadress
Kom igång \npå några minuter
Genom att klicka på knappen Anslut Jetpack godkänner du våra <a href=\'terms\'>användarvillkor</a> och samtycker till att <a href=\'sync\'>dela information</a> med WordPress.com.
- Vad är WordPress.com?
+ Aktivera simulerad kortläsare
+ Kontakta webbplatsens ägare för en inbjudan till webbplatsen som butikschef eller administratör för att använda appen.
Ansluter till en WordPress.com-webbplats
Anslut till webbplatsen
Anslut Jetpack till ditt konto
- Kontakta webbplatsens ägare för en inbjudan till webbplatsen som butikschef eller administratör för att använda appen.
- Aktivera simulerad kortläsare
- Visa lösenord
- Dölj lösenord
Redigera behörigheter
För att använda den här funktionen, tillåt att din kamera används.
Kameraåtkomst krävs
Kamerastreckkodsskanner
Utvecklaralternativ
2FA stöds inte för webbplatser som drivs på egen server. Använd ett applösenord.
+ Visa lösenord
+ Dölj lösenord
Per den %1$s
Det gick inte att ladda data
+ WooCommerce-statistik idag
Dagens butiksstatistik
Butiksanalys inte tillgänglig! Uppgradera till den senaste versionen av WooCommerce för att visa din butiksanalys.
Ditt nätverk är inte tillgängligt.\nKontrollera din data eller WiFi-anslutning.
Logga in på WooCommerce-appen
- WooCommerce-statistik idag
- Verifierar Jetpack-anslutning …
Det gick inte att hämta anslutningsdata …
+ Verifierar Jetpack-anslutning …
Kan inte verifiera din Jetpack-anslutning. Försök igen.
Webbplatsen %1$s har för närvarande ett WordPress.com-paket som inte stöder installation av tillägg. Uppgradera ditt paket för att använda WooCommerce.
Det verkar som att ditt konto inte är anslutet till Jetpack för %1$s
KORTLÄSARE
BETALNINGSALTERNATIV
- Vi kunde inte ansluta till din webbplats. Kontakta supporten för att felsöka problemet.
Kassaalternativet Betala personligen gör det möjligt att ta emot betalningar för webbplatsbeställningar vid upphämtning eller leverans. <a href=\'\'>Läs mer</a>
Betala personligen
+ Vi kunde inte ansluta till din webbplats. Kontakta supporten för att felsöka problemet.
Anslutningsfel
Det finns ett problem som kräver din uppmärksamhet. <a href=\'\'>Ta en titt på detta</a>
Försök med en annan adress
Det gick inte att aktivera Postförskott. Försök igen senare.
Aktivera Betala personligen
- Ett fel uppstod, kontakta support
- Ange en webbplatsadress
<a href=\'\'>Läs mer</a> om Personliga betalningar
Är WooCommerce nytt för dig?
+ Ett fel uppstod, kontakta support
+ Ange en webbplatsadress
Få en inloggningslänk via e-post
Kommer du inte ihåg ditt lösenord?
Vi har noterat att du inte har slutfört installationen av Personliga betalningar. <a href=\'\'>Fortsätt installationen</a>
Betalningar
Jag förstår!
+ Now you can quickly access In-Person Payments and other features with ease
Betalningar från menyfliken
+ Din e-post används inte med ett WordPress.com-konto.
Andra webbplatser
Logga in med din butiksadress
WC-admin
- Now you can quickly access In-Person Payments and other features with ease
- Din e-post används inte med ett WordPress.com-konto.
+ Vi har precis skickat en magisk länk till
Kontrollera din e-post på denna enhet!
Använd lösenord för att logga in
Logga in med magisk länk
- Logga in med dina webbplatsuppgifter
Vi har precis skickat en magisk länk till din e-postadress. Tryck på länken i e-postmeddelandet för att logga in.
- Vi har precis skickat en magisk länk till
+ Logga in med dina webbplatsuppgifter
+ Ge dina kunder användbara och relevanta produktrekommendationer genom att lägga till merförsäljning och korsförsäljning
+ Öka din försäljning med länkade produkter
+ Börja sälja personligen på under 20 minuter med vår kortläsare.
+ Det gick inte att uppdatera beställning #%1$d
+ Beställning #%1$d har markerats som slutförd
+ Markera\nslutförd
Installera WooCommerce
+ Det verkar som att %1$s inte är en WooCommerce-webbplats.
+ Växla mellan flera olika butiker
Hantera mina beställningar
Skapa eller uppdatera mina produkter
+ Kolla min analys
+ Försöker skapa en butik
+ Utforskar bara
+ Vad för dig till WooCommerce?
Tips
Ställ in nu
- Öka din försäljning med länkade produkter
- Börja sälja personligen på under 20 minuter med vår kortläsare.
- Vad för dig till WooCommerce?
- Utforskar bara
- Försöker skapa en butik
- Kolla min analys
- Växla mellan flera olika butiker
- Det verkar som att %1$s inte är en WooCommerce-webbplats.
- Markera\nslutförd
- Beställning #%1$d har markerats som slutförd
- Det gick inte att uppdatera beställning #%1$d
- Ge dina kunder användbara och relevanta produktrekommendationer genom att lägga till merförsäljning och korsförsäljning
Då sätter vi igång!
Logga in med WordPress.com
Kontakta supporten
+ Logga in med ditt WordPress.com-konto
Skaffa lite hjälp!
Har du problem med att logga in?
+ Artikelnr
Alla produkter
VISA INTE IGEN
PÅMINN MIG SENARE
+ Inga problem! Du kan alltid komma igång med In-Person Payments via Inställningar.
Personliga betalningar
Köp kortläsare
Ta emot betalningar enkelt
@@ -1582,29 +1598,27 @@ Language: sv_SE
Avfärda
Visa anpassade fält
Anpassade fält
- Installera Jetpack
- Du kan hantera dem snabbt och enkelt
- Vi vet att det är viktigt för ditt företag
Det gick inte att spara ändringar
Detta kommer att markera denna beställning som betald om du fått betalning utanför WooCommerce
- Artikelnr
- Inga problem! Du kan alltid komma igång med In-Person Payments via Inställningar.
+ Installera Jetpack
Vi gör det möjligt för dig att bearbeta betalningar på ett enkelt och smidigt sätt
+ Du kan hantera dem snabbt och enkelt
+ Vi vet att det är viktigt för ditt företag
Är WooCommerce nytt för dig?
- Logga in med ditt WordPress.com-konto
- Du har en ny beställning! 🎉
Ny beställning för 50 USD i din WooCommerce-butik
+ Du har en ny beställning! 🎉
detaljerna
Redigera alla %1$s genom att gå igenom beställningen i din WooCommerce-butiksadmin
%1$s är ofullständiga
- Fortsätt söka
- Inväntar betalning
Dela systemstatusrapport
Kopiera systemstatusrapport till urklipp
+ Fortsätt söka
+ Personlig betalning för beställning #%1$s för %2$s blog_id %3$s.
Ändra betalningsleverantör
Återbetalat: %1$s
- Personlig betalning för beställning #%1$s för %2$s blog_id %3$s.
+ Inväntar betalning
Fortsätt med installation
+ Saker du bör veta innan du installerar
Installera utökning
WooCommerce Shipping
Rensa filter
@@ -1613,26 +1627,30 @@ Language: sv_SE
Det gick inte att ladda in produkter
Sök produkter
Filter (%d)
- Saker du bör veta innan du installerar
Vissa e-postadresser är ogiltiga. Åtgärda den angivna e-postadressen/de angivna e-postadresserna.
Lista över tillåtna fakturerings-e-postadresser att kontrollera mot när en beställning görs. Separera e-postadresser med kommatecken. Du kan också använda en asterisk (*) för att matcha delar av en e-postadress. Exempelvis skulle \"*gmail.com\" matcha alla gmail-adresser.
+ Inga produkter matchar de valda filtren ”
Bekräfta betalningsmetod
Stripe
WooCommerce Payments
- Inga kunder hittades.
+ Personliga betalningar kan behandlas via båda dessa betalningsleverantörer. Vilken leverantör vill du använda?
Välj din betalningsleverantör
låst
- Delar av denna beställning är för närvarande inte redigerbara
- Inga produkter matchar de valda filtren ”
- Personliga betalningar kan behandlas via båda dessa betalningsleverantörer. Vilken leverantör vill du använda?
För att redigera produkter eller betalningsinformation, ändra statusen till Inväntar betalning.
+ Delar av denna beställning är för närvarande inte redigerbara
Sök efter kunder
+ Inga kunder hittades.
Inte nu
Lägg till utökningar till butik
Vad är WooCommerce Shipping?
Kom åt rabatterade fraktavgifter. För närvarande endast tillgängligt med DHL och USPS, men fler alternativ kommer snart.
+ Rabatterade avgifter
+ Hämta en beställning och sedan är det bara att betala, skriva ut, paketera och skicka.
Skriv ut från din telefon
+ Du behöver inte undra var den frimärkshäftet tog vägen.
+ Köp porto när du behöver det
Spara tid och pengar
+ Fullfölj dina beställningar med WooCommerce Shipping
Visa detaljer
Välj variant %s
Exkludera produktkategorier
@@ -1641,10 +1659,13 @@ Language: sv_SE
Inga begränsningar
Tillåtna e-postadresser
Obegränsat
+ Samtliga kvalificerande artiklar
Obegränsat
Ingen
Redigera produktkategorier (%1$d)
Välj produktkategorier
+ För närvarande stöds massuppdatering för maximalt 100 varianter.
+ Gräns för massuppdatering har överskridits
Uppdatera ordinarie priser
Uppdaterar reapriser
Uppdaterade reapriser.
@@ -1662,14 +1683,9 @@ Language: sv_SE
Massuppdatera
OK
Massuppdatera …
- Du behöver inte undra var den frimärkshäftet tog vägen.
- Köp porto när du behöver det
- För närvarande stöds massuppdatering för maximalt 100 varianter.
- Gräns för massuppdatering har överskridits
- Hämta en beställning och sedan är det bara att betala, skriva ut, paketera och skicka.
- Fullfölj dina beställningar med WooCommerce Shipping
- Rabatterade avgifter
- Samtliga kvalificerande artiklar
+ Hämtar varianter …
+ Det gick inte att söka efter produktkategorier
+ Det gick inte att läsa in produktkategorier
Sök kategorier
Rensa val
Klicka för att avmarkera
@@ -1677,17 +1693,15 @@ Language: sv_SE
Välj %1$d kategorier
Inga produktkategorier hittades
Välj kategorier
- Behöver du en fraktetikett?
+ Avfärda banner för att installera WC Shipping
Skaffa WooCommerce Shipping
Skriv ut etiketter från din telefon, med WooCommerce Shipping.
- Hämtar varianter …
- Det gick inte att söka efter produktkategorier
- Det gick inte att läsa in produktkategorier
- Avfärda banner för att installera WC Shipping
+ Behöver du en fraktetikett?
+ Ändra produktantalet från %1$d till %2$d
Uppdatera ordinarie pris
Uppdatera reapris
- Ändra produktantalet från %1$d till %2$d
Vi stöder inte WooCommerce Stripe-utökningen i %1$s
+ Filter
Rensa val
Välj %d produkt
Välj %d produkter
@@ -1696,31 +1710,32 @@ Language: sv_SE
Redigera produkter (%d)
Alla produkter
Välj produkter
- Exkludera artiklar på rea
Aktivera det här alternativet om rabattkoden inte ska gå att tillämpa på reavaror. Per-artikel-rabattkoder fungerar bara om varan inte är en reavara. Per-varukorg-rabattkoder fungerar bara om varorna i varukorgen inte är reavaror.
+ Exkludera artiklar på rea
Aktivera det här alternativet om rabattkoden inte ska kunna användas tillsammans med andra rabattkoder.
- Filter
- Vänta …
- Sparar rabattkod
- Rabattkod uppdaterad
- Användningsbegränsningar
- Ingen
- Tillämpa denna rabattkod på
- Välj butik att ansluta
- %s i lager
- Det gick inte att hämta butiker
- Inkludera gratis frakt?
- Rensa
Kan inte kombineras
Användningsbegränsning per kund
Begränsa användningen till X artiklar
Användningsbegränsning per rabattkod
Maximalt beställningsbelopp (%1$s)
Minsta beställningsbelopp (%1$s)
+ Vänta …
+ Sparar rabattkod
Det gick inte att uppdatera rabattkoden
+ Rabattkod uppdaterad
+ Användningsbegränsningar
Användningsinformation
+ Inkludera gratis frakt?
+ Rensa
+ Ingen
+ Tillämpa denna rabattkod på
Det gick inte att söka efter rabattkoder
Det gick inte att hämta rabattkoder
+ Det gick inte att hämta butiker
+ Välj butik att ansluta
+ %s i lager
+ Lägg till beskrivningen för rabattkoden.
+ Rabattkodsbeskrivning
Redigera beskrivning
Lägg till beskrivning (valfritt)
Rabattkodens utgångsdatum
@@ -1731,90 +1746,93 @@ Language: sv_SE
Ställ in beloppet på rabatten du vill erbjuda.
Ställ in procenten för rabatten du vill erbjuda.
Belopp (%1$s)
+ Rabattkodsinformation
Redigera %1$s
Redigera rabattkod
Kan inte uppdatera produkt
- Lägg till beskrivningen för rabattkoden.
- Rabattkodsbeskrivning
- Rabattkodsinformation
Något gick fel när återbetalningen skulle tillämpas
Tillämpar återbetalning för beställning
- Kopierat till urklipp
+ Kortläsarbild
Beräknat belopp: %s
Beräkna som procent
- Kortläsarbild
- Kan användas %1$d gång
- Kan användas %1$d gånger
- Rabattkod borttagen
- Misslyckades att ta bort rabattkod
- Är du säker på att du vill ta bort denna rabattkod?
- Ta bort rabattkod
- Avfärda alla
- Inkorg
+ Kopierat till urklipp
Begränsad till kunder med följande e-postadresser: %1$s
Gäller inte reavaror
Tillåter gratis frakt
Kan inte kombineras
Begränsad till %1$d artiklar i varukorgen
Begränsad till %1$d artiklar i varukorgen
+ Kan användas %1$d gång
+ Kan användas %1$d gånger
%1$d användning per användare
%1$d användningar per användare
+ Rabattkod borttagen
+ Misslyckades att ta bort rabattkod
+ Är du säker på att du vill ta bort denna rabattkod?
+ Ta bort rabattkod
Det gick inte att synkronisera inkorgen
+ Avfärda alla
+ Inkorg
Kortläsarmanualer
Tryck eller infoga för att återbetala
Beställningen är redan återbetald
- OK
Återbetalning avbruten
- Denna återbetalning kunde inte behandlas
- Kortet stöder inte denna typ av återbetalning
- Prova ett annat sätt att återbetala
+ OK
Systemtestkort är inte tillåtna för återbetalningen
Återbetalningsbeloppet är inte tillåtet för det aktuella kortet
Återbetalningen avvisades på grund av otillräckliga medel
En identisk återbetalning skickades nyligen
+ Kortet stöder inte denna typ av återbetalning
Återbetalningen avvisades av ospecificerad anledning
+ Prova ett annat sätt att återbetala
Återbetalningen avvisades av okänd anledning
- Kopiera
+ Denna återbetalning kunde inte behandlas
Återbetalning lyckades
- Återbetalning misslyckades
Behandlar återbetalning
Återbetala betalning
+ Återbetalning misslyckades
Förbereder återbetalning av betalning
+ Kopiera
Sök rabattkoder
- Rabattkod
- Löper ut %1$s
- Anpassad rabatt (%1$s)
- Fast produktrabatt
- Fast varukorgsrabatt
- Dela rabattkod
- Kopiera rabattkod
- Rabattkod kopierad till urklipp.
Det gick inte att generera meddelandet för delning av rabattkoden
Det gick inte att dela rabattkoden.
Tillämpa %1$s rabatt på utvalda produkter med kampanjkoden %2$s
Tillämpa %1$s rabatt på alla produkter med kampanjkoden %2$s
Det gick inte att kopiera rabattkoden till urklipp.
+ Rabattkod kopierad till urklipp.
+ Rabattkod
Det gick inte att ladda rabattkodssammanfattningen
+ Löper ut %1$s
%1$s rabatt på %2$s
+ Anpassad rabatt (%1$s)
+ Fast produktrabatt
+ Fast varukorgsrabatt
Procentuell rabatt
Det gick inte att ladda rabattkodsprestanda
+ Dela rabattkod
+ Kopiera rabattkod
Tack för din feedback!
- Dela betalningslänk
Kortläsarbetalningar kräver exakt platsbehörighet
Åtkomst till plats krävs
Kassa – %s
+ Dela betalningslänk
Belopp
Belopp
Rabatterade beställningar
+ Prestanda
+ Maximalt beställningsbelopp på %s
+ Minsta beställningsbelopp på %s
+ Rabattkodssammanfattning
+ Visa rabattkodssammanfattning
+ Vi har arbetat med att göra det möjligt att visa och redigera rabattkoder från din enhet!
Visa och redigera rabattkoder
Inga rabattkoder hittades
- Rabattkoder
- %d kategorier
- %d kategori
- Visa rabattkodssammanfattning
+ %1$s exkl. %2$s
+ %1$s och %2$s
allt
Har löpt ut
Aktiva
+ Rabattkoder
Skapades den %s
För %d dagar sedan
För en dag sedan
@@ -1822,17 +1840,12 @@ Language: sv_SE
För en timme sedan
För %d minuter sedan
För en stund sedan
+ %d kategorier
+ %d kategori
\u2022 inga godkända recensioner
\u2022 en godkänd recension
\u2022 %d godkända recensioner
%1$s (%2$s%%)
- Prestanda
- Maximalt beställningsbelopp på %s
- Minsta beställningsbelopp på %s
- Rabattkodssammanfattning
- Vi har arbetat med att göra det möjligt att visa och redigera rabattkoder från din enhet!
- %1$s och %2$s
- %1$s exkl. %2$s
Vi har jobbat på att göra det möjligt att skapa beställningar från din enhet. Du kan prova den här funktionen genom att trycka på \"+\"-knappen
Kom tillbaka snart för fler tips och insikter om hur du får din butik att växa
Grattis, du har läst allt!
@@ -1845,12 +1858,12 @@ Language: sv_SE
Anrop med XML-RPC verkar blockerade på denna webbplats (felkod 401). Om försöket att logga in misslyckas tryck på hjälpikonen för att se vanliga frågor.
Kunde inte läsa WordPress-webbplatsen på denna URL. Tryck på hjälpikonen för att se vanliga frågor.
Tjänsten för XML-RPC är inaktiverad på denna webbplats.
- Procent (%)
Använd en e-postadress som inte är kopplad till Automattic för att skicka in ett supportärende
Vi stöder inte Stripe-konton som är registrerade i %1$s
+ Vi stöder inte WooCommerce Payments-utökning i %1$s
Tryck på strömknappen på din läsare
Ett kvitto har skickats till <strong>%s</strong>
- Vi stöder inte WooCommerce Payments-utökning i %1$s
+ Procent (%)
Ta bort avgift från beställning
Ta bort frakt från beställning
Frakt
@@ -1861,9 +1874,11 @@ Language: sv_SE
Avgifter
Kunddetaljer
Lägg till avgift
+ Redigera kundanteckning
Redigera kunddetaljer
Redigera beställningsstatus
- Redigera kundanteckning
+ Beställningen med enkel betalning gick inte att uppdatera
+ Beställningen med enkel betalning gick inte att skapa
Användarens profilbild
Recensioner
Visa butik
@@ -1871,31 +1886,29 @@ Language: sv_SE
Analyser
Betalningar
WooCommerce-admin
- Beställningen med enkel betalning gick inte att uppdatera
- Beställningen med enkel betalning gick inte att skapa
Meny
Uppdatera efter uppdatering
Hantera tillägg
WooCommerce Payments
- eller
WooCommerce Stripe Gateway
Personliga betalningar fungerar endast med ett av följande tillägg aktiverat. Kontakta en webbplatsadministratör för att inaktivera ett av dessa tillägg och fortsätta:
Personliga betalningar fungerar endast med ett av följande tillägg aktiverat. Inaktivera ett av dessa tillägg för att fortsätta.
Konflikt mellan betalningstillägg upptäckt
Momser totalt
+ eller
Installera Jetpack
- Vänta …
- Skapar din beställning
- Skapa
+ Personliga betalningar är för närvarande inte tillgängliga
Beställning skapad
Misslyckades att skapa beställning
- Personliga betalningar är för närvarande inte tillgängliga
+ Vänta …
+ Skapar din beställning
Beställningens totalsumma
Produktbelopp
Betalning
Nettoförsäljning: %s
Sålda artiklar
Konvertering
+ Skapa
App-ikon
Ikon för tillbaka
Logga för Automattic
@@ -1926,69 +1939,58 @@ Language: sv_SE
Kontakta supporten
Aktivera
Installera
+ %s Jetpack i WP Admin
aktivera
installera
- %s Jetpack i WP Admin
+ Alternativt kan du %s Jetpack i WP-admin.
Försök igen.
ansluter
aktivering
installation
- WooCommerce
- Alternativt kan du %s Jetpack i WP-admin.
Något gick fel under %s
Hej! Här är en länk för att ladda ner WooCommerce-appen. Jag tycker att den är jättebra och tänkte att du också skulle gilla den. %1$s
- review_card_%1$s
- review_card_detail
- product_card_%1$s
+ WooCommerce
product_card_detail
+ product_card_%1$s
+ review_card_detail
+ review_card_%1$s
Uppdatera Stripe
- Välj variant
- Ta bort produkt från beställning
- Lägg till rabatt
- Produkt
Du är nästan där! Slutför konfigurationen av Stripe för att börja ta emot kortbetalningar.
Slutför konfigurationen av Stripe i adminpanelen för din butik
Återbetala avgifter
Avgiftsåterbetalning
+ Välj variant
+ Ta bort produkt från beställning
+ Lägg till rabatt
+ Produkt
+ Lägg till en annan leveransadress
I lager
%s i lager
+ Lägg till produkter
Produkter
+ Lägg till kunddetaljer
Kund
Markera som betald
+ Detta kommer att skapa din beställning och markera den som slutförd om du har mottagit betalning utanför WooCommerce
Markera som betald?
Välj din betalningsmetod
- Moms (%s %%)
- Lägg till en annan leveransadress
- Detta kommer att skapa din beställning och markera den som slutförd om du har mottagit betalning utanför WooCommerce
Moms beräknas automatiskt baserat på din butiksadress
- Lägg till kunddetaljer
- Lägg till produkter
+ Moms (%s %%)
+ Ta emot betalning %s
+ Debitera moms
Anpassat belopp
Ange e-post
- Moms
- Kontant
- Kort
- Ta emot betalning %s
- Debitera moms
Enkel betalning
- order_card_%1$s
order_card_detail
+ order_card_%1$s
+ Kontant
+ Kort
+ Moms
E-post
- Uppdatera efter uppdatering
Lägg till anteckning
Kundmeddelande
+ Uppdatera efter uppdatering
En föråldrad version av utökningen WooCommerce Stripe Gateway är installerad för din butik. Uppdatera den för att ta emot personliga betalningar.
- Ny beställning
- Förra veckan
- År till datum
- Kvartal till datum
- Månad till datum
- Vecka till datum
- Förra året
- Förra kvartalet
- Förra månaden
- Kortet har löpt ut
- %1$s (%2$s)
Betalningen avvisades av okänd anledning
Ett live-kort användes på en webbplats i testläge
Systemtestkort är inte tillåtna för betalning
@@ -1997,6 +1999,7 @@ Language: sv_SE
Betalningsbeloppet är inte tillåtet för det aktuella kortet
Betalningen avvisades på grund av otillräckliga medel
Transaktionens postnummer och kortets postnummer matchar inte
+ Kortet har löpt ut
En identisk transaktion skickades nyligen
Kortet stöder inte denna valuta
Kortet stöder inte denna typ av köp
@@ -2004,71 +2007,82 @@ Language: sv_SE
Betalningen avvisades av ospecificerad anledning
Prova en annan betalningsmetod
Det kan fungera att prova igen
+ Ny beställning
Väljare för datumintervallsfilter
kontra föregående period (%1$s)
+ %1$s (%2$s)
+ År till datum
+ Kvartal till datum
+ Månad till datum
+ Vecka till datum
+ Förra året
+ Förra kvartalet
+ Förra månaden
+ Förra veckan
+ Enkla betalningar
Visa utökningar
Vi kunde inte hitta några beställningar
Öppna inställningar
- Enkla betalningar
Saknar nödvändig behörighet för enheter i närheten
+ Filtrera länder
+ Filtrera stater
+ Status
Slutdatum
Startdatum
Välj datum
Anpassat intervall
+ Skapa en beställning med minimalt med information
+ Enkel betalning
Skapa en ny manuell beställning
Skapa beställning
Skapa beställning
Ange belopp
- Filtrera länder
- Filtrera stater
- Status
- Skapa en beställning med minimalt med information
- Enkel betalning
Ta emot betalning
Enkel betalning
- Analys
Skapa beställningar från din enhet!
+ Analys
+ Allt klart
Ansluter din butik
Aktiverar
Installerar Jetpack
- Installera Jetpack
- din webbplats
- Installerar\nJetpack
- Läsare är ansluten
- Allt klart
Vänta medan vi ansluter %s till Jetpack.
+ Installerar\nJetpack
+ din webbplats
Installera det kostnadsfria Jetpack-tillägget till <strong>%s</strong> för den bästa mobilupplevelsen.
+ Installera Jetpack
Produktrecensionerna kunde inte hämtas
Läsaren är frånkopplad
+ Läsare är ansluten
Att avbryta en pågående programvaruuppdatering är inte att rekommendera. Om du avbryter blockeras din läsaranslutning.
Uppdateringen av läsarprogramvaran misslyckades, eftersom läsarens batteri inte är tillräckligt laddat. Ladda läsaren till över 50 %% innan du försöker igen.
- Ladda läsare
Uppdateringen av läsarprogramvaran misslyckades, eftersom läsarens batteri endast är laddat till %1$s%%. Ladda läsaren till över 50 %% innan du försöker igen.
- %1$s (%2$d)
- Alla
- Filtrerade beställningar
- Alla beställningar
- Kontrollera din mobila enhet
- Senaste 30 dagarna
- Senaste 7 dagarna
- Senaste 2 dagarna
- Idag
- Ange adress
+ Ladda läsare
Din kortläsares programvara behöver uppdateras för att fungera korrekt
Ange ett giltigt postnummer i dina butiksinställningar och försök igen
Postnumret i butiksadressen är ogiltigt
+ Ange adress
Ange din butiksadress för att fortsätta
+ Kontrollera din mobila enhet
Adressen kan inte uppdateras med en tom e-postadress. Kontrollera att du kör den senaste versionen av WooCommerce.
+ Senaste 30 dagarna
+ Senaste 7 dagarna
+ Senaste 2 dagarna
+ Idag
+ %1$s (%2$d)
+ Alla
+ Filtrerade beställningar
+ Alla beställningar
Inte nu
Installera Jetpack
- Användarprofiler
Tillåt flera användare att komma åt WooCommerce Mobile.
+ Användarprofiler
Nya analysvyer gör det möjligt att se besökare, rapporter med mera.
Analys
Få push-notiser för nya beställningar, recensioner med mera levererade till din enhet.
Push-notiser
Installera det kostnadsfria Jetpack-tillägget för den bästa mobilupplevelsen.
Få ut så mycket som möjligt av din butik
+ Använd som leveransadress
Använd som faktureringsadress
Filter (%d)
Filter
@@ -2081,14 +2095,14 @@ Language: sv_SE
Visa beställningar
Filtrerade beställningar
Alla beställningar
- Använd som leveransadress
Berätta mer om %s …
- Läsarens serienummer kopierad till urklipp
Beskriv din produkt för dina framtida kunder …
- Lägg till leveransadress
+ Läsarens serienummer kopierad till urklipp
Lägg till faktureringsadress
- Faktureringsadress
+ Lägg till leveransadress
Lägg till kundanteckning
+ Faktureringsadress
+ Leveransadress
Adress
Land
Postnummer
@@ -2100,9 +2114,7 @@ Language: sv_SE
E-post
Efternamn
Förnamn
- Leveransadress
Redigera en kundbeställningsanteckning
- OK
Det gick inte att hämta SSR. Kontrollera WooCommerce -> Status i WP-admin.
Det gick inte att dela systemstatusrapporten
Det gick inte att kopiera SSR till urklipp
@@ -2113,56 +2125,57 @@ Language: sv_SE
Grattis, du kan nu ta emot kredit- och betalkortsbetalningar med WooCommerce Payments!
Ta emot betalningar med en kortläsare
Belopp måste vara minst %1$s
+ OK
+ Bild på ny funktionsikon
+ Växla butik
+ Uppdatering av produkt %1$s misslyckades
+ %1$d bilder har lagts till för produkten %2$s
Produkt uppdaterad
Uppdaterar produkt %1$s
- OK
- Något gick fel
- Uppdatering av produkt %1$s misslyckades
- Spara kvitto och fortsätt
Bilduppladdning kommer fortsätta i bakgrunden
- Växla butik
- %1$d bilder har lagts till för produkten %2$s
- Bild på ny funktionsikon
+ Spara kvitto och fortsätt
+ OK
Vi kan inte läsa in Beställningstillägg för närvarande
- Kategori
- Visa utökningar
+ Något gick fel
Vad som är nytt i WooCommerce
+ Visa utökningar
Vi kan tyvärr inte ändra den här funktionsinställningen för tillfället
+ Kategori
Du har en ny recension! 🌟
Du har en ny beställning! 🎉
%d artikel
- Sparar din produkt
- %d produkter
- %d produkt
- Försök igen med ett annat kort
- Försök igen med samma kort
- Ta bort kortet
- Se till att kortläsaren är ansluten.
- %d arbetsdagar
- %d arbetsdag
%d merförsäljningsprodukter
%d merförsäljningsprodukt
%d korsförsäljningsprodukter
%d korsförsäljningsprodukt
+ %d produkter
+ %d produkt
Produktutökningar
+ Sparar din produkt
Väntande recension
+ Se till att kortläsaren är ansluten.
+ Försök igen med ett annat kort
Prova att trycka på, föra in eller svepa ditt kort
Flera kort upptäckta. Prova igen med endast ett kort
+ Ta bort kortet
+ Försök igen med samma kort
%d poster
%d artikel
+ %d arbetsdagar
+ %d arbetsdag
Vi kunde inte verifiera leveransadressen automatiskt: %s
Vi kunde inte automatiskt verifiera ursprungsadressen. Visa adressen i Google Maps för att verifiera att den är korrekt.
Vi arbetar på att göra det enklare för dig att se produkttillägg från din enhet! För tillfället kan du endast se tilläggen för dina beställningar. Du kan skapa och redigera dessa tillägg i din webbadminpanel.
- Spara
+ Visa utökningar från din enhet!
Om du byter namn på ett tillägg i din webbadminpanel, observera att vissa beställningar inte längre kommer att visa tillägget i appen.
Visa utökningar
- Visa utökningar från din enhet!
- %d filer kunde inte laddas upp
+ Spara
Ladda upp information (%d)
- Media kunde inte hittas
- <a href=\'\'>Läs mer</a> om att ladda upp bilder
+ %d filer kunde inte laddas upp
%d fil kunde inte laddas upp
+ Media kunde inte hittas
Du kan redigera produkttillägg i webbadminpanelen.
+ <a href=\'\'>Läs mer</a> om att ladda upp bilder
Vi kunde inte verifiera personliga betalningar för den här butiken.
Det gick inte att verifiera personliga betalningar för den här butiken.
Firmware: %s
@@ -2174,61 +2187,77 @@ Language: sv_SE
Skriv ut fraktetikett
Fraktetikett köpt!
Skriv ut fraktetiketter
- Håll din läsare laddad
- Behöver du lite hjälp? <a href=\'\'>Kontakta support</a>
- Svep, tryck eller sätt in kort
- Läsare ansluten
Personliga betalningar
Det tar ungefär tre timmar att ladda din läsare
+ Håll din läsare laddad
Din läsare går in i viloläge efter 10 minuter av inaktivitet. Det är bara att trycka på strömknappen för att återansluta den.
Automatisk återanslutning
Det är bara att svepa, trycka eller infoga kort på läsaren för att ta emot betalningar.
+ Svep, tryck eller sätt in kort
Grattis, du kan nu ta emot kredit- och betalkortsbetalningar!
+ Läsare ansluten
+ Behöver du lite hjälp? <a href=\'\'>Kontakta support</a>
<a href=\'\'>Läs mer</a> om att ta emot betalningar med din mobila enhet och att beställa kortläsare
Personliga betalningar är inte tillgängliga i testläget. Stäng av det för att fortsätta.
Personliga betalningar är för närvarande inte tillgängliga
Det finns krav som inväntar granskning i ditt konto. Slutför dessa krav senast den %1$s för att fortsätta ta emot personliga betalningar.
+ Ditt konto har krav som inväntar granskning
Du har minst ett försenat krav i ditt konto. Ta hand om det för att återuppta personliga betalningar.
Personliga betalningar är för närvarande inte tillgängliga
Du kommer att kunna ta emot personliga betalningar så snart vi har slutfört granskningen av ditt konto.
- Ditt konto har krav som inväntar granskning
- Uppdatera efter uppdatering
- Uppdatera WooCommerce Payments
Personliga betalningar är för närvarande inte tillgängliga
Tyvärr kan vi inte erbjuda personliga betalningar för den här butiken.
+ Uppdatera efter uppdatering
En föråldrad version av utökningen WooCommerce Payments är installerad för din butik. Uppdatera den för att ta emot personliga betalningar.
+ Uppdatera WooCommerce Payments
Du är nästan där! Slutför konfigurationen av WooCommerce Payments för att börja ta emot personliga betalningar.
- Ansluter till ditt konto
- Uppdatera efter installation
- Behöver du lite hjälp? <a href=\'\'>Kontakta support</a>
- Uppdatera efter aktivering
- Aktiverar paket
- Välj ett paket att aktivera.
- Alla tillgängliga paket har aktiverats
- Installera WooCommerce Payments
- Aktivera WooCommerce Payments
Slutför konfigurationen av WooCommerce Payments i adminpanelen för din butik
+ Uppdatera efter aktivering
Utökningen WooCommerce Payments är installerad för din butik, men den har inte aktiverats. Aktivera den för att ta emot personliga betalningar.
+ Aktivera WooCommerce Payments
+ Uppdatera efter installation
Du måste installera den kostnadsfria utökningen WooCommerce Payments för din butik för att ta emot personliga betalningar.
+ Installera WooCommerce Payments
<a href=\'\'>Läs mer</a> om att ta emot betalningar med din mobila enhet och att beställa kortläsare
+ Behöver du lite hjälp? <a href=\'\'>Kontakta support</a>
Du kan fortfarande ta emot personliga kontanta betalningar genom att aktivera betalningsmetoden \"Postförskott\" i din butik
+ Vi stöder inte personliga kortbetalningar i %1$s
+ Ansluter till ditt konto
Personliga betalningar
Dubbelkolla måtten eller vikten på ditt paket eller prova att använda ett annat paket i Paketinformation
Det finns inga fraktavgifter tillgängliga
- Vi stöder inte personliga kortbetalningar i %1$s
- Stäng
+ Alla tillgängliga paket har aktiverats
+ Aktiverar paket
+ Välj ett paket att aktivera.
Obligatoriskt fält
- Attribut skapade
- Ingen internetanslutning
- Ingen anslutning till server
- Denna betalning kunde inte bearbetas
+ Stäng
Variationen har skapats
Generera ny variation
Du kan nu skapa och hantera produktvariationer!
Generera variation
Nu när du har lagt till attribut kan du skapa din första variation!
- Att avbryta en pågående programvaruuppdatering är inte att rekommendera
+ Attribut skapade
%1$s%% slutförd
+ Att avbryta en pågående programvaruuppdatering är inte att rekommendera
+ Denna betalning kunde inte bearbetas
+ Ingen anslutning till server
+ Ingen internetanslutning
+ Skicka i originalförpackning
+ Lägg till i nytt paket
+ Denna vara finns för närvarande i %s. Vart vill du flytta den?
+ Avbryt
+ Flytta
+ Flytta vara
+ ”%1$s” sparat
+ Misslyckades att skapa paket. Försök igen.
+ Misslyckades att skapa paket: okänt API-problem.
+ Misslyckades att skapa paket: %1$s
+ Vänta …
+ Skapar nytt paket
+ Ogiltigt värde.
+ Detta fält är obligatoriskt.
+ Vikt för tomt paket
+ Tom förpackningsvikt (%1$s)
Höjd (%1$s)
Bredd (%1$s)
Längd (%1$s)
@@ -2237,147 +2266,133 @@ Language: sv_SE
Låda
Välj pakettyp
Pakettyp
- Avbryt
- Flytta
- Vänta …
- Skapar nytt paket
- Ogiltigt värde.
- Detta fält är obligatoriskt.
- Vikt för tomt paket
+ Konfigurera paketet som du kommer att använda för att skicka dina produkter. Vi kommer att spara den för framtida beställningar.
Lägg till nytt paket
Skapa nytt paket
- Misslyckades att skapa paket. Försök igen.
- Misslyckades att skapa paket: okänt API-problem.
- Misslyckades att skapa paket: %1$s
- ”%1$s” sparat
- Skicka i originalförpackning
- Lägg till i nytt paket
- Denna vara finns för närvarande i %s. Vart vill du flytta den?
- Flytta vara
- Tom förpackningsvikt (%1$s)
Paketets mått måste vara större än noll. Uppdatera måtten för din vara i sektionen Frakt på din produktsida för att fortsätta.
- Konfigurera paketet som du kommer att använda för att skicka dina produkter. Vi kommer att spara den för framtida beställningar.
+ Originalförpackning
+ Varumått
+ Vara som skickas för sig
+ Beställningsstatus uppdaterad
Skicka
Skriv ut
Se kvitto
Avbryt ändå
- Beställningsstatus uppdaterad
- Originalförpackning
- Varumått
- Vara som skickas för sig
- Slå på Bluetooth
Det gick inte att uppdatera läsarens programvara
Sökningen efter programvaruversionsuppdateringar misslyckades
<a href=\'\'>Läs mer</a> om att ta emot mobilbetalningar och beställa kortläsare
+ Slå på Bluetooth
+ Ingen läsare ansluten
Vi kunde inte ansluta din läsare
Anslut
Flera läsare hittade
Beställningen är redan betald
- Ingen läsare ansluten
- Betalningsmetod har lagts till
- Lägg till ett kreditkort
- Ange ett giltigt telefonnummer
Tack för ditt köp! Klicka på länken nedan för att visa ditt betalningskvitto.\n\n%s
Det gick inte att ladda ner tullformuläret
Skriv ut tullfaktura
Skriv ut tullformulär
Ett tullformulär måste skrivas ut och inkluderas i denna internationella försändelse
Tullformulär
+ Betalningsmetod har lagts till
+ Lägg till ett kreditkort
+ Ange ett giltigt telefonnummer
Skriv ut tullformulär
- Ditt kvitto från %s
- Lägg till produkt
- Din kund valde %1$s
Utforska hur du kan öka din butiksförsäljning.
Börja sälja idag genom att lägga till din första produkt i butiken.
+ Lägg till produkt
Variationsattribut
Aktivera Bluetooth på den mobila enheten
+ Det gick inte att hämta beställningen. Beställningens status i appen kan vara föråldrad.
+ Ditt kvitto från %s
Uppdaterar beställning
Uppdaterar appstatusen
- Det gick inte att hämta beställningen. Beställningens status i appen kan vara föråldrad.
- 1 variation
- Lär dig mer om att skriva ut kvitton med din enhet
- Aktivera Bluetooth- eller Wifi-anslutning på din skrivare.
- Parkoppla och anslut skrivaren till din mobil när du uppmanas till det.
- Justera pappersstorleken efter behov och välj ”Skriv ut” när du är redo att skriva ut kvittot.
+ Din kund valde %1$s
+ Tullformulär kräver ett tiosiffrigt telefonnummer
+ Tullformulär ifyllt
Om du har problem med att skriva ut från din enhet kontaktar du kundsupporten för din skrivare.
Om utskrift inte är tillgänglig kan du alltid spara ditt kvitto som PDF och skicka det via e-post för att skriva ut det från en annan enhet.
- Tullformulär ifyllt
+ Justera pappersstorleken efter behov och välj ”Skriv ut” när du är redo att skriva ut kvittot.
+ Parkoppla och anslut skrivaren till din mobil när du uppmanas till det.
När du väljer \"Skriv ut kvitto\" efter att ha godkänt betalningen, ersätt \"Spara som PDF\" med \"Alla skrivare\" och sök efter ny skrivare.
+ Aktivera Bluetooth- eller Wifi-anslutning på din skrivare.
Se till att Print Service-tillägget för din skrivare är installerat.
+ Lär dig mer om att skriva ut kvitton med din enhet
För att skapa en variation måste du först ställa in dess attribut (dvs. \"Färg\", \"Storlek\")
+ 1 variation
%1$s variationer
- Tullformulär kräver ett tiosiffrigt telefonnummer
USPS-spårning
Uppdaterar din läsares programvara
Programvaruuppdatering
Läsarens programvara har uppdaterats
- Karantän
- Ingen
- Annat
- Prov
- Innehållsdetaljer
- Dokument
- Beskrivning
- Detta fält är obligatoriskt
- Anpassad rad %1$d
- Vikt (%1$s per enhet)
- Värde (%1$s per enhet)
+ OKÄNT KORTLÄSARNAMN
Koppla från läsare
+ Uppdatera din läsares programvara för att fortsätta ta emot betalningar
+ Uppdatera läsarens programvara
+ %s%% batteri
ANSLUTEN LÄSARE
Anslut kortläsare
+ Sätt på kortläsaren och placera den bredvid den mobila enheten
Se till att kortläsare är laddad
Anslut din kortläsare
+ Kort avvisades
Ansluter till läsaren
- Annat
+ Förbereder för att ta emot betalning
+ Det deklarerade värdet måste vara större än noll
Vikt måste vara större än noll
- Land där produkten tillverkades eller monterades
- Ursprungsland
- Ogiltigt format
- Begränsningsdetaljer
- Begränsningstyp
- Innehållstyp
- Returnera till avsändare om paketet inte kan levereras
- upp till %s
- Paketinnehåll
- Sätt på kortläsaren och placera den bredvid den mobila enheten
- Kort avvisades
+ Detta fält är obligatoriskt
Beskriv vilken typ av begränsningar detta paket måste ha.
Beskriv vilken typ av varor detta paket innehåller.
- OKÄNT KORTLÄSARNAMN
- Uppdatera din läsares programvara för att fortsätta ta emot betalningar
- Uppdatera läsarens programvara
- %s%% batteri
- Förbereder för att ta emot betalning
- Det deklarerade värdet måste vara större än noll
+ Vikt (%1$s per enhet)
+ Värde (%1$s per enhet)
%1$s om HS-tariffnummer
%1$s om internt transaktionsnummer
+ Anpassad rad %1$d
+ Annat
Sanitär/fytosanitär inspektion
+ Karantän
+ Ingen
+ Annat
+ Prov
Presenter
+ Dokument
Handelsvaror
+ Land där produkten tillverkades eller monterades
+ Ursprungsland
Tariffnumret måste vara 6 siffror långt
HS-tariffnummer (valfritt)
+ Beskrivning
+ Paketinnehåll
ITN krävs för försändelser till %1$s.
ITN krävs för frakt av artiklar till ett värde som överstiger 2 500 USD per tariffnummer
- Hoppa över
+ Ogiltigt format
+ Begränsningsdetaljer
+ Innehållsdetaljer
+ Begränsningstyp
+ Innehållstyp
+ Returnera till avsändare om paketet inte kan levereras
+ upp till %s
+ Om du har aktiverat den här inställningen kommer kunden att få ett bekräftelsemeddelande via e-post när beställningen har slutförts.
+ Granska beställning
+ 🎉 Beställning slutförd!
Verifierar roll …
Du har inte den korrekta användarrollen
- Redigera och lägg till nya produkter var som helst
- Granska beställning
Lär dig mer om roller och behörigheter
- Spåra försäljning och högpresterande produkter
- Om du har aktiverat den här inställningen kommer kunden att få ett bekräftelsemeddelande via e-post när beställningen har slutförts.
- 🎉 Beställning slutförd!
Den här appen har endast stöd för användarrollerna Administratör och Butikschef. Kontakta butiksägaren för att uppgradera din roll.
+ Redigera och lägg till nya produkter var som helst
Hantera och redigera beställningar i farten
+ Spåra försäljning och högpresterande produkter
+ Hoppa över
Extern produkt
Grupperad produkt
Variabel produkt
En unik digital produkt som tjänster, nedladdningsbara böcker, musik eller videor
+ En unik fysisk produkt som du kan behöva frakta till kunden
Enkel fysisk produkt
Öppna inställningar
Öppna inställningar
- En unik fysisk produkt som du kan behöva frakta till kunden
Bluetooth är inaktiverat
+ Plats är inaktiverad
+ Saknar nödvändig exakt platsbehörighet
Det gick inte att ansluta till läsaren.
Ansluter till läsaren
Anslut läsaren
@@ -2385,68 +2400,62 @@ Language: sv_SE
Söker efter läsare
Antal artiklar
Skapa ny leveransetikett
- Plats är inaktiverad
- Saknar nödvändig exakt platsbehörighet
Enkel virtuell produkt
+ Vill du ta bort denna variant?
+ Genererar variation
Tar bort produkt
Skicka kvitto
Skriv ut kvitto
- Betalning lyckades
- Betalning misslyckades
- Tryck eller infoga för att betala
- Vill du ta bort denna variant?
Fångar upp betalning
Behandlar betalning
Läsaren är redo
+ Betalning misslyckades
+ Betalning lyckades
Ta emot betalning
+ Tryck eller infoga för att betala
Det gick inte att förhandsgranska fraktsedeln. Installera en app för PDF-visning och försök igen.
Vi kunde inte detektera någon WordPress-webbplats på den angivna adressen. Se till att WordPress är installerat och att du kör den senaste tillgängliga versionen.
flera fraktrader
- Genererar variation
- Vänta …
- Spara till senare
Kunde inte markera beställningen som slutförd
- Etiketter som är äldre än 30 dagar kan inte återbetalas
- Skriv ut fraktetikett
- Fraktetikett köpt!
Ett fel uppstod vid köp av etiketterna
+ Vänta …
Köpa etikett
Etikettbilder som är äldre än 180 dagar tas bort av våra teknikpartners i generella säkerhets- och dataskyddssyften.
- Typ av variation, t.ex. storlek eller färg
- Ändra namn
+ Skriv ut fraktetikett
+ Spara till senare
+ Fraktetikett köpt!
+ Etiketter som är äldre än 30 dagar kan inte återbetalas
Typ
+ Ändra namn
Det gick inte att byta namn på ditt attribut
+ Typ av variation, t.ex. storlek eller färg
Byt namn på attribut
- Attribut
- och
- Ta bort detta attribut?
Var det inte meningen att skapa ett nytt konto? Gå tillbaka och skriv din e-postadress igen.
+ Anslut kortläsare
Hantera kortläsare
Butiksinställningar
- Anslut kortläsare
+ Attribut
Du kan återbetala %1$s
Ta emot betalning
+ och
+ Ta bort detta attribut?
Valfri
Fel när dina attribut sparades
- Signatur obligatoriskt (%s)
+ Det är bara webbplatsens ägare som kan hantera betalningsmetoderna för fraktetiketter. Kontakta butiksägaren %1$s (%2$s) för att hantera betalningsmetoder.
Lägg till variationer
Lägg till variation
+ Lägg till din första variant
%s totalt
- Det är bara webbplatsens ägare som kan hantera betalningsmetoderna för fraktetiketter. Kontakta butiksägaren %1$s (%2$s) för att hantera betalningsmetoder.
%s avgifter valda
Berättigar till gratis signaturkrav
Berättigar till gratis upphämtning
+ Försäkring (%s)
+ spårning
Inkluderar %s
Måste signeras av en vuxen (%s)
- spårning
- Försäkring (%s)
+ Signatur obligatoriskt (%s)
Kunden betalade %1$s av %2$s för frakt
- Lägg till din första variant
- gratis
- Annat
- Delsumma
- Ett alternativ med detta namn finns redan
- Ett attribut med detta namn finns redan
+ När du köper fraktetiketter med WooCommerce, får du 5 % till 40 % i rabatt jämfört med postkontoret.
Vad innebär rabatt på WooCommerce-tjänster?
Det gick inte att hämta leveransalternativen
Transportföretag och avgifter
@@ -2455,33 +2464,40 @@ Language: sv_SE
Ordersumma
Läs mer om rabatt på WooCommerce-tjänster
Rabatt på WoCommerce-tjänster
+ Delsumma
Beställningssammanfattning för fraktetiketter
+ gratis
+ Annat
+ Ett alternativ med detta namn finns redan
+ Ett attribut med detta namn finns redan
Lägg till varje alternativnamn och tryck på retur
Eller tryck för att välja ett befintligt alternativ
Namn på alternativ
- När du köper fraktetiketter med WooCommerce, får du 5 % till 40 % i rabatt jämfört med postkontoret.
+ Ett fel uppstod när dina inställningar skulle sparas
Vänta …
Sparar dina inställningar
Löper ut %1$s
+ E-posta inköpskvitton till %1$s (%2$s) på %3$s
+ Kreditkort hämtas från följande WordPress.com-konto: %1$s <%2$s>
+ %1$s****%2$s
Lägg till ett annat kreditkort
Betalningsmetod vald
Vänta …
- %1$s****%2$s
- Ett fel uppstod när dina inställningar skulle sparas
- E-posta inköpskvitton till %1$s (%2$s) på %3$s
- Kreditkort hämtas från följande WordPress.com-konto: %1$s <%2$s>
Hämtar dina inställningar
+ Kreditkort slutar på %1$s
Paypal
VISA
MasterCard
Discover
American Express
+ Eller tryck för att välja ett befintligt attribut
+ Nytt attributnamn
Lägg till attribut
Attribut
Redigera attribut
- Eller tryck för att välja ett befintligt attribut
- Nytt attributnamn
- Kreditkort slutar på %1$s
+ Total förpackningsvikt: %1$s %2$s
+ %1$d varor i %2$d förpackningar
+ Total förpackningsvikt: %1$s %2$s
Anpassade paket
Kan inte hämta produkter
Vissa obligatoriska fält är tomma.
@@ -2490,44 +2506,41 @@ Language: sv_SE
Vänta …
Laddar in paket!
Packet %1$d
+ %d varor
Kan inte ladda paketdefinitioner
+ Inkluderar förpackningsvikt
+ Total förpackningsvikt (%1$s)
+ Vald förpackning
Paketdetaljer
Flytta
+ Poster att slutföra
Föreslagen adress
Angiven adress
+ Vi har ändrat den adress du angav något. Använd den föreslagna adressen om den stämmer för att försäkra korrekt leverans.
Redigera vald adress
Använd vald adress
- %1$d varor i %2$d förpackningar
- Total förpackningsvikt: %1$s %2$s
- Inkluderar förpackningsvikt
- Total förpackningsvikt (%1$s)
- Vald förpackning
- Poster att slutföra
- Vi har ändrat den adress du angav något. Använd den föreslagna adressen om den stämmer för att försäkra korrekt leverans.
- Total förpackningsvikt: %1$s %2$s
- %d varor
Laddar in adressdata
Nya funktioner tillgängliga!
- Adress hittades inte
+ Hitta på karta
+ Kontakta kunden
Ogiltig gata
Husnummer saknas
- Postnummer
+ Adress hittades inte
+ Vi kunde inte verifiera leveransadressen automatiskt. Visa i Google Maps eller testa att kontakta kunden för att verifiera att adressen stämmer.
+ Adressvalideringen misslyckades
Vänta …
+ Adressvalideringen pågår
+ Det gick inte att läsa in adressdata
+ Använd adressen som angavs
+ Land
+ Postnummer
+ Delstat
Ort
Telefon
Företag
Namn
- Land
- Delstat
- Använd adressen som angavs
- Kontakta kunden
- Vi kunde inte verifiera leveransadressen automatiskt. Visa i Google Maps eller testa att kontakta kunden för att verifiera att adressen stämmer.
- Adressvalideringen misslyckades
- Adressvalideringen pågår
- Det gick inte att läsa in adressdata
- Hitta på karta
- Vänta …
Google Maps-appen hittades
+ Vänta …
Bildborttagning på produktvarianter stöds i WooCommerce 4.7 eller senare.
Vänta
Lägger till spårning
@@ -2541,102 +2554,102 @@ Language: sv_SE
Förpackningsinformation
Skapa fraktetikett
Läs mer
+ Skippa kön på postkontoret genom att skriva ut fraktetiketter till rabatterade priser hemma med din mobila enhet!
Spara tid och pengar genom att fullfölja med WooCommerce Shipping
WooCommerce Shipping
Markera ordern som slutförd
+ Lär dig mer om att skapa etiketter med din mobila enhet
Skapa fraktetikett
- Skapa fraktetiketter från din enhet!
Du kan nu skapa fraktetiketter för alla fysiska beställningar direkt från din enhet med hjälp av gratistillägget WooCommerce Shipping. Tryck på \"Skapa fraktetikett\" för att prova vår betafunktion!
- Lär dig mer om att skapa etiketter med din mobila enhet
- Skippa kön på postkontoret genom att skriva ut fraktetiketter till rabatterade priser hemma med din mobila enhet!
- Redigera
+ Skapa fraktetiketter från din enhet!
Avgifter
Nettobetalning
Betald
Läs mer om att ansluta Jetpack
+ Redigera
Validera
Dra och släpp för att ändra ordning på foton
- Radera
- Fil-URL
- Lägg till fil
- 1 fil
- %1$d filer
- Fil
- Avbryt
- Ja, ändra
+ Inställningar för nedladdning
Ange ett giltigt namn
Ange fil-URL
+ WordPress mediabibliotek
+ Kontrollera att den angivna URL:en är giltig
Vänta …
Laddar upp filer
- Filnamn
- Inställningar för nedladdning
- Kontrollera att den angivna URL:en är giltig
Fel vid uppladdning av filen
Lägg till nedladdningsbar fil
+ Lägg till nedladdningsbar fil från
Inkludera nedladdningsbara filer med köp
+ Avbryt
+ Ja, ändra
Alla filer som för närvarande är associerade med den här produkten kommer att tas bort.
Är du säker på att du vill ta bort möjligheten att ladda ned filer när produkten köps?
+ Fil
Är du säker på att du vill ta bort den här filen?
Nedladdningsbar produkt
+ Radera
Tidsgräns för nedladdning
Nedladdningsgräns
Ange antalet dagar innan en nedladdningslänk löper ut, eller lämna fältet tomt om länken aldrig löper ut.
Ange antalet gånger som filen kan laddas ned eller lämna fältet tomt för obegränsade nerladdningar
Detta är namnet på filen som visas för kunden
+ Filnamn
Detta är URL:en för filen som kunderna får tillgång till. URL:er som anges bör redan vara kodade.
+ Fil-URL
+ Lägg till fil
+ 1 fil
+ %1$d filer
Du kan behöva <b>konfigurera Wi-Fi-utskrift direkt på själva skrivaren.</b> Kontrollera att skrivarens fasta programvara är uppdaterad. Anvisningar finns i skrivarens dokumentation.
Du kan välja din enhets <b>standardutskriftstjänst</b> eller installera din <b>skrivares varumärkesapp</b> (detta bör visas som ett rekommenderat alternativ)
Se till att din skrivare och din enhet är anslutna till <b>samma Wi-Fi-nätverk</b>
- WordPress mediabibliotek
- Lägg till nedladdningsbar fil från
+ Testa det nya enkla, länkade och grupperade produktskapandet medan vi gör oss redo för lansering
+ Öka försäljningen med merförsäljning och korsförsäljning
Redigera produkter
Lägg till produkter
- Öka försäljningen med merförsäljning och korsförsäljning
Produkter som marknadsförs i kundvagnen när den nuvarande produkten är vald
- Testa det nya enkla, länkade och grupperade produktskapandet medan vi gör oss redo för lansering
Korsförsäljning
Produkter som marknadsförs istället för den för närvarande visade produkten (dvs. mer lönsamma produkter)
Merförsäljning
Länkade produkter
%1$s%2$s x %3$s
Skaffa en länk för inloggning via e-post
- Välj pappersstorlek
- Pappersstorlek
+ Hmm. Vi hittar inget konto hos WordPress.com som är kopplat till denna e-postadress.
+ Testa att visa Beställningstillägg medan vi gör oss redo för lanseringen
Skapar produkter
+ Inställningar
+ Ett fel inträffade när produkten skulle slängas
Produkt flyttad till papperskorg
Flytta till papperskorg
Vill du flytta denna produkt till papperskorgen?
+ Släng produkt
Denna produkt har inga variationer än
+ Det går endast att lägga till alternativ som storlek och färg på webben. Dessa kommer att visas som alternativ på produktsidan på din webbplats.
Skapa produkter från appen!
Produkt hittades inte
- Hmm. Vi hittar inget konto hos WordPress.com som är kopplat till denna e-postadress.
- Inställningar
- Ett fel inträffade när produkten skulle slängas
- Släng produkt
- Det går endast att lägga till alternativ som storlek och färg på webben. Dessa kommer att visas som alternativ på produktsidan på din webbplats.
+ Om du fortfarande har problem med att skriva ut från din enhet kan du <b>spara din etikett som en PDF-fil</b> och skicka den med e-post för att skriva ut den från en annan enhet.
+ När du har valt <b>\"Skriv ut fraktetikett\"</b> kan du behöva välja och lägga till en skrivare om du inte har skrivit ut från den här enheten tidigare.
Alternativ för etikettformat
+ Skriv ut med din enhet
Etikett (4 x 6 tum)
Letter (8,5 x 11 tum)
Legal (8,5 x 14 tum)
Fel vid förhandsgranskning av fraktetikett
+ Vet du hur du skriver ut med din mobila enhet?
Se alternativen för etikettlayout och pappersstorlek
Skriv ut fraktetikett
+ Välj pappersstorlek
+ Pappersstorlek
+ Om du redan har använt etiketten på ett paket är det ett brott mot våra användarvillkor att skriva ut och använda den igen.
Om det inträffade ett utskriftsfel när du köpte etiketten kan du skriva ut den igen.
Vi arbetar för att göra det enklare för dig att skriva ut fraktetiketter direkt från din enhet! Om du har skapat fraktetiketter för den här ordern i butiksadmin i WooCommerce Shopping kan du nu skriva ut dem under Beställningsinformation här.
Skriv ut fraktetiketter från din enhet!
- Skriv ut med din enhet
- Om du redan har använt etiketten på ett paket är det ett brott mot våra användarvillkor att skriva ut och använda den igen.
- Om du fortfarande har problem med att skriva ut från din enhet kan du <b>spara din etikett som en PDF-fil</b> och skicka den med e-post för att skriva ut den från en annan enhet.
- När du har valt <b>\"Skriv ut fraktetikett\"</b> kan du behöva välja och lägga till en skrivare om du inte har skrivit ut från den här enheten tidigare.
Skriv ut fraktetikett
- Vet du hur du skriver ut med din mobila enhet?
- Testa att visa Beställningstillägg medan vi gör oss redo för lanseringen
\u0022%1$s\u0022
Produktutkast sparat
- Sparar utkast
- Spara som utkast
Det gick inte att spara produktutkastet
+ Sparar utkast
I papperskorgen
+ Spara som utkast
Bekräftelse av registrering
Återställ ditt lösenord
Ange din webbplatsadress
@@ -2665,99 +2678,100 @@ Language: sv_SE
Skicka länk via e-post
Ge feedback
Produkt publicerad
+ Fel vid publicering av produkt
+ Publicerar produkt
PUBLICERA
Ny produkt
- Publicerar produkt
- Fel vid publicering av produkt
- Lägg till foto
- Byt ut foto
Endast ett foto kan visas per produktvariant
+ Byt ut foto
+ Lägg till foto
Lägg till bild för variant
Lär dig hur man installerar och ansluter Jetpack
+ För att använda den här appen för %1$s behöver du ha anslutit Jetpack-tillägget till din butik.
Logga in med ett annat konto
Välj butik att ansluta
Fortsätt med WordPress.com
- För att använda den här appen för %1$s behöver du ha anslutit Jetpack-tillägget till din butik.
- Ange lösenord
+ En produkt med variationer som färg eller storlek
%d produkt vald
%d produkter valda
Lägg till produkter till gruppen
Lägg till produkt
- En produkt med variationer som färg eller storlek
+ Ange lösenord
+ Tillbaka till butik
Kontakta oss här
+ Tänk på att detta inte är ett supportärende och att vi inte kan adressera individuell feedback.\n\nBehöver du hjälp? %1$s
+ Tack för att du delar dina\n tankar med oss
Feedback skickad
Vänta …
Laddar in
Hur kan vi förbättra?
Ja, ändra
- Välj en produkttyp
- Skicka feedback
- Vissa variationer har inga priser
- Grupperade produkter
- Ändra produkttyp
- Aktiverad
- %1$s lämnade en recension
- Ta bort den grupperade produkten
- Variation uppdaterad
- Tillbaka till butik
- Tänk på att detta inte är ett supportärende och att vi inte kan adressera individuell feedback.\n\nBehöver du hjälp? %1$s
- Tack för att du delar dina\n tankar med oss
Om du ändrar produkttypen ändras en del av produktinformationen
Är du säker på att du vill ändra produkttypen?
Länk till en produkt på en extern webbplats
En samling relaterade produkter
+ Välj en produkttyp
+ Skicka feedback
+ Vissa variationer har inga priser
Variationer utan pris kommer inte att visas i din butik
+ Variation uppdaterad
+ Ta bort den grupperade produkten
+ Grupperade produkter
+ Ändra produkttyp
Inget pris angivet
+ Aktiverad
Du måste ange försäljningspriset om en försäljning är schemalagd
Du kan nu redigera grupperade, externa och variabla produkter, ändra produkttyp och uppdatera kategorier och etiketter.
+ %1$s lämnade en recension
+ Jag gillar den
Kunde vara bättre
Tycker du om WooCommerce-appen?
- Jag gillar den
Fel vid uppdatering av variation
Fel vid hämtning av variation
Fel uppstod när etiketter lades till
Lägger till etiketter
Din återbetalning bearbetas. Vänta …
+ Begäran om återbetalning har skickats
Återbetalningsetikett (-%1$s)
+ Belopp berättigat för återbetalning
Inköpsdatum
+ Du kan begära en återbetalning för en fraktetikett som inte har använts för att skicka ett paket. Den kommer att ta minst 14 dagar att behandla.
Begär en återbetalning
- Belopp berättigat för återbetalning
Fraktetikett för återbetalning
- Du kan begära en återbetalning för en fraktetikett som inte har använts för att skicka ett paket. Den kommer att ta minst 14 dagar att behandla.
- Begäran om återbetalning har skickats
- Organisera dina produkter i relaterade grupper
- Gör dina produkter lättare att hitta med etiketter
- Ett kort utdrag om din produkt
Fysisk
+ Ett kort utdrag om din produkt
+ Gör dina produkter lättare att hitta med etiketter
+ Organisera dina produkter i relaterade grupper
+ Lägg till vikt och dimensioner
+ Lägg till fler detaljer
+ Organisera dina produkter i etiketter
+ Lägg till din första etikett
Etiketter
Lägg till etikett
+ Inaktiverat
Virtuell produkt
Lägg till fler detaljer
%1$s produkt
nedladdningsbar
%s produkt
- Lägg till fler detaljer
- Organisera dina produkter i etiketter
- Lägg till vikt och dimensioner
- Lägg till din första etikett
- Inaktiverat
Återstående produkter
- %1$s\n%2$s
- Kreditkort
- Betalningsmetod
%1$s \u2022 %2$s
+ %1$s etikettåterbetalning begärd
Spåra försändelse
+ %1$s\n%2$s
Dölj information om försändelse
Visa försändelseinformation
+ Kreditkort
+ Betalningsmetod
Transportföretag och avgifter
Information om förpackning
Leverans
Avsändare
Förpackning %d
- %1$s etikettåterbetalning begärd
SKU: %1$s
%1$s (%2$s alternativ)
Fraktetiketter
+ Vänta …
Lägger till kategori
Överordnad kategori
Kategorinamn
@@ -2771,26 +2785,33 @@ Language: sv_SE
Lägg till kategori
Kategorier
Gäst
- Vänta …
Integritetsnotis för användare i Kalifornien
Behåll ändringar
Fram till %1$s
- Nya redigeringsalternativ tillgängliga
Vi har lagt till fler redigeringsfunktionaliteter till produkter! Du kan nu uppdatera bilder, se förhandsgranskningar och dela dina produkter.
+ Nya redigeringsalternativ tillgängliga
+ Begränsad redigering tillgänglig
Produkter
%1$s x %2$s
%1$s %2$s
- Begränsad redigering tillgänglig
Extern
Enkel
Publicerat privat
Inga bilder ännu
WordPress mediebibliotek
WordPress mediebibliotek
- Slug
- Produktlänk
+ Bestämmer produktens placering i katalogen. Ju lägre siffervärdet är desto högre kommer artikeln att vara i produktlistan. Du kan också använda negativa siffror.
+ Menysortering
+ Ett valfritt meddelande som kan skickas till kunden efter köpet
+ Denna text kommer att visas på knappen som länkar till den externa produkten
Knapptext
Ange den externa URL:en till produkten
+ Produktlänk
+ Lägg till produktlänk
+ Aktivera recensioner
+ Detta är den URL-vänliga versionen av produktrubriken
+ Slug
+ Denna inställning avgör vilka butikssidor produkterna kommer att listas på.
Utvald produkt
Dold
Endast sökresultat
@@ -2804,7 +2825,16 @@ Language: sv_SE
Synlighet
Status
Produktinställningar
+ Fel när lösenordet uppdaterades
+ Valt sorteringsalternativ
+ Valt filteralternativ
Visa produkter
+ Filter \u2022 %d
+ Filter (%d)
+ Ö till A
+ Titel: Ö till A
+ A till Ö
+ Titel: A till Ö
Äldsta
Datum: äldsta till nyaste
Nyaste
@@ -2812,74 +2842,52 @@ Language: sv_SE
Sortera efter
Filter
Inga produkter hittades
+ Alla
Produkttyp
%d valda
Inte inställd
Fler alternativ
Rensa
- Lägg till produktlänk
- Aktivera recensioner
- Detta är den URL-vänliga versionen av produktrubriken
- Denna inställning avgör vilka butikssidor produkterna kommer att listas på.
- Fel när lösenordet uppdaterades
- Valt sorteringsalternativ
- Valt filteralternativ
- Denna text kommer att visas på knappen som länkar till den externa produkten
- Menysortering
- Bestämmer produktens placering i katalogen. Ju lägre siffervärdet är desto högre kommer artikeln att vara i produktlistan. Du kan också använda negativa siffror.
- Ett valfritt meddelande som kan skickas till kunden efter köpet
- Filter \u2022 %d
- Filter (%d)
- Ö till A
- Titel: Ö till A
- A till Ö
- Titel: A till Ö
- Alla
+ Väntande recension
+ Om WooCommerce
+ Ställs in av strömsparläget
+ Systemstandard
Mörk
+ Ljus
Utseende
Kort sammanfattning om produkten
Kort beskrivning
- Om WooCommerce
- Systemstandard
- Väntande recension
- Ställs in av strömsparläget
- Ljus
- Ta bort slutdatum
Reapriset måste vara lägre än det ordinarie priset
+ Ta bort slutdatum
Lägg till frakt
Produktbilderna laddas fortfarande upp. Vill du ignorera dina ändringar?
Ange ett nummer
Vi har lagt till redigeringsfunktionalitet till enkla produkter. Håll utkik för fler alternativ snart!
- Till
- Från
- Momsinställningar
- Momsstatus
Frakt
Momsbelagd
Ingen
Standardmoms
Momsgrupp
+ Momsstatus
+ Momsinställningar
+ Till
+ Från
Starta och avsluta en rea automatiskt
Schemalägg rea
i ditt administratörsarkiv
- Höjd
- Bredd
- Längd
- Dimensioner
SKU används redan av en annan produkt
Fraktinställningar
Ingen fraktklass
- %1$s via %2$s
- Återbetalningar
+ Dimensioner
+ Höjd
+ Bredd
+ Längd
Återbetalda produkter
- Återbetalda produkter
- Är du säker på att du vill utfärda en återbetalning? Det här kan inte ångras.
%1$s (%2$s x %3$d)
- från %1$s
- Readatum
- Lägg till pris
- Handera lager
- %1$s – %2$s
+ %1$s via %2$s
+ Är du säker på att du vill utfärda en återbetalning? Det här kan inte ångras.
+ Återbetalda produkter
+ Återbetalningar
Registrera dig på WordPress.com
Vi hittade inga resultat för %s
Få högkvalitativa produktrecensioner för din butik
@@ -2891,51 +2899,56 @@ Language: sv_SE
Hur många artiklar som finns i lager
Antal
Begränsa till en per order
+ Handera lager
Hjälper att enkelt identifiera den här produkten
+ från %1$s
+ %1$s – %2$s
+ Readatum
+ Lägg till pris
Lägg till lager
Kollar upp dina beställningar …
Ange text
+ Ange produktrubrik
+ Produkt sparad
+ Det gick inte att uppdatera produkten
+ Vänta …
Beskriv din produkt
Beskrivning
Redigera beskrivning
- Det gick inte att uppdatera produkten
- Vänta …
- Ange produktrubrik
- Produkt sparad
- Klart
- Uppdatera
Vill du ignorera dina ändringar?
+ Uppdatera
+ Klart
Återbetalning pågår, vänta …
Återbetala frakt
Välj kvantitet
Fraktåterbetalning
Produktåterbetalning
+ %1$s x %2$s vardera
%d artiklar valda
Välj ingen
Välj alla
Väntar på återbetalningsbekräftelse …
- %1$s x %2$s vardera
- Ta ett foto
- Välj en uppladdningsmetod
- Lägg till en produktbild
- Ta bort foto
- Lägg till foton
- Foton
- Lägg till bild
- Ta bort
- Kommande
- Bildoptimering
Ändra storlek på och komprimera bilder för snabbare uppladdning
+ Bildoptimering
+ Ta ett foto
Välj från enheten
+ Välj en uppladdningsmetod
Uppladdningar
+ Laddar upp bilder … %1$d av %2$d
+ Laddar upp bild …
Det går inte att komma åt kameran
Är du säker på att du vill ta bort den här bilden?
Det gick inte att ta bilden
Vänta tills den aktuella åtgärden har slutförts
Det gick inte att ladda upp produktbilden
Det gick inte att ta bort produktbilden
- Laddar upp bilder … %1$d av %2$d
- Laddar upp bild …
+ Lägg till en produktbild
+ Ta bort foto
+ Lägg till foton
+ Foton
+ Lägg till bild
+ Kommande
+ Ta bort
Vi kunde inte komma åt din webbplats. För att lösa detta behöver du kontakta ditt webbhotell.
Vi kunde inte komma åt din webbplats på grund av ett problem med <b>SSL-certifikatet</b>. För att lösa detta behöver du kontakta ditt webbhotell.
Vi kunde inte komma åt din webbplats eftersom det kräver <b>HTTP-autentisering</b>. För att lösa detta behöver du kontakta ditt webbhotell.
@@ -2944,8 +2957,8 @@ Language: sv_SE
Logga in med dina inloggningsuppgifter.
Logga in med dina inloggningsuppgifter för %1$s
Skicka verifieringsmeddelande via e-post
- Produktredigering
Testa den nya produktredigeringsfunktionen då vi snart är klara för lansering
+ Produktredigering
Det uppstod ett fel när ditt konto skulle hämtas. Du kan försöka igen nu eller stänga och försöka igen senare.
Ett fel har uppstått. Logga in för att fortsätta
Ansluter till din webbplats …
@@ -2980,12 +2993,15 @@ Language: sv_SE
Inga matchande produkter
Inga produkter ännu
%s i lager
+ I lager \u2022 %d variationer
Produktbild
%1$s lämnade en recension om %2$s
Förkastad
Den nya produktrecensionen kunde inte hämtas
Produktrecensionerna kunde inte hämtas
- I lager \u2022 %d variationer
+ Något gick fel med återbetalningen. Var vänlig försök igen.
+ Återbetalningen har skickats.
+ Din återbetalning för %s behandlas. Vänta …
Offertikon
Manuell återbetalning
Återbetalningsinformation
@@ -3003,10 +3019,7 @@ Language: sv_SE
Återbetala %s
%s tillgängligt för återbetalning
Utfärda återbetalning
- Något gick fel med återbetalningen. Var vänlig försök igen.
- Återbetalningen har skickats.
%1$s via %2$s
- Din återbetalning för %s behandlas. Vänta …
Förbättrad statistik
Betafunktioner
Väntar på betalning via %s
@@ -3019,12 +3032,12 @@ Language: sv_SE
Dagens statistik
Logga in
Har du redan Jetpack? %1$s
+ Försöker logga in med Jetpack …
uppdatera appen för att fortsätta
+ För att använda den här appen för %1$s behöver du installera Jetpack-tillägget och ansluta det till det här kontot. \n\nNär detta är klart, starta om appen.
Försök med en annan butik
Databasen har nedgraderats, återskapar tabeller och läser in butiker
Läser in butiker
- Försöker logga in med Jetpack …
- För att använda den här appen för %1$s behöver du installera Jetpack-tillägget och ansluta det till det här kontot. \n\nNär detta är klart, starta om appen.
Inga transportföretag hittades
Ange en fullständig webbplatsadress som example.com.
Inga omdömen än!
@@ -3035,11 +3048,12 @@ Language: sv_SE
Det gick inte att hämta inställningarna: En del API:er är inte tillgängliga för den här OAuth app-ID + konto-kombinationen.
Vi letar efter medarbetare!
Kopiera spårningsnummer
- uppdatera appen
Kollar efter WooCommerce …
+ uppdatera appen
Ingen adress specificerad
Behöver du hjälp med att hitta e-postadressen som du använde för att ansluta?
Webbplatsen på den här adressen är inte en WordPress-webbplats. Webbplatsen måste använda WordPress för att vi ska kunna ansluta till den.
+ Logga in med WordPress.com för att ansluta till <b>%1$s</b>
Zimbabwe
Zambia
Yemen
@@ -3176,7 +3190,6 @@ Language: sv_SE
Jamaica
Elfenbenskusten
Italien
- Logga in med WordPress.com för att ansluta till <b>%1$s</b>
Israel
Isle of Man
Irland
@@ -3283,15 +3296,24 @@ Language: sv_SE
Afghanistan
Åland
Recension
+ Anpassat transportföretag
Anpassad
+ Ange ett transportföretagsnamn
Ange ett spårningsnummer
+ Välj ett transportföretag
Vill du ta bort den här spårningen?
Det gick inte att lägga till spårning
Spårning av försändelse har lagts till
+ Det gick inte att hämta transportföretag
+ Valt transportföretag
+ Transportföretag
Datum skickat
Ange spårningslänk
+ Ange transportföretagsnamn
Ange spårningsnummer
+ Välj transportföretag
Spårningslänk (tillval)
+ Transportföretagsnamn
Spårningsnummer
Fraktbolag
Lägg till spårning
@@ -3304,35 +3326,26 @@ Language: sv_SE
Spåra försändelse
Du kan hitta e-postadressen som du använder för att ansluta till WordPress.com från din webbplatsadminsitration på %1$sJetpack Dashboard%2$s under %3$sAnslutningar > Kontoanslutning%4$s
Vilken e-postadress ska jag använda för att logga in?
+ Behöver du hjälp med att hitta e-postmeddelandet?
Jetpack är ett kostnadsfritt tillägg i WordPress som ansluter din butik till de verktyg som behövs för att ge den bästa möjliga mobilupplevelsen, inklusive pushmeddelanden och statistik
Vad är Jetpack?
Visa anslutna butiker
Det ser ut som att %1$s är ansluten till ett annat WordPress.com-konto.
Fortsätt redigera
- Anpassat transportföretag
- Ange ett transportföretagsnamn
- Välj ett transportföretag
- Det gick inte att hämta transportföretag
- Valt transportföretag
- Transportföretag
- Ange transportföretagsnamn
- Välj transportföretag
- Transportföretagsnamn
- Behöver du hjälp med att hitta e-postmeddelandet?
- Tillåt
- Tillåt inte
- Läs mer
- I lager
- Slut i lager
- Tillåt, men meddela kunden
Logga in med ditt användarnamn och lösenord.
Logga in med ditt WordPress.com användarnamn istället för din e-postadress.
- Hjälpcenter
Webbplatsen på denna adress är inte en WordPress-webbplats. För att vi ska kunna ansluta till den måste webbplatsen använda WordPress.
- Restnoterad
- Variabel
- Grupperade
+ Hjälpcenter
Virtuell
+ Grupperade
+ Variabel
+ Tillåt, men meddela kunden
+ Tillåt
+ Tillåt inte
+ Restnoterad
+ Slut i lager
+ I lager
+ Läs mer
Bilden kunde inte laddas
Utkast
Privat
@@ -3378,11 +3391,11 @@ Language: sv_SE
Prova nu
Klart
Peka för att byta butiker
+ Välj butik
Logga ut
Ändra orderstatus
Klicka för att ändra orderstatus
Tillämpa
- Välj butik
Nej tack
Senare
Betygsätt nu
@@ -3393,14 +3406,14 @@ Language: sv_SE
Dela din butiks URL
Dela din butik
Alla granskningar har markerats som lästa
- Kan inte ansluta till %s
Uppdatera butik till WooCommerce 3.5
+ Kan inte ansluta till %s
Avfärda
+ Ett fel uppstod när alla granskningar skulle markeras som lästa
Markera alla som lästa
Meddelande
Ring
Ring eller SMS:a kunden
- Ett fel uppstod när alla granskningar skulle markeras som lästa
Det gick inte att uppdatera produktrecensionsstatusen
Det gick inte att uppdatera produktrecensionsinformationen
Ta bort
@@ -3410,19 +3423,19 @@ Language: sv_SE
Visa produkten
Hjälp och support
Ljud, brådskande och aviseringspunkt
+ Hantera aviseringar
Aviseringar
Är du säker på att du vill logga ut från kontot %s?
- Hantera aviseringar
- Om detta inaktiveras kommer noteringen att vara privat
Recension markerad som %1$s
+ Om detta inaktiveras kommer noteringen att vara privat
Det gick inte att hämta ordern
Tillbaka
Produktrecensionsaviseringar
Ny order-aviseringar
Till kund
+ Verifierar webbplats …
Uppdatera instruktioner
Sök
- Verifierar webbplats …
Uppdatera
och %d mer.
%d nya aviseringar
@@ -3454,9 +3467,9 @@ Language: sv_SE
Kraschrapporter
Dela
Version %s
- Vi har gjort för många försök att leverera en verifieringskod via SMS – Vänta lite och be om en ny om en minut.
- Det finns inget WordPress.com-konto som stämmer mot detta Google-konto.
- Logga in på WordPress.com-kontot du använde för att ansluta Jetpack.
+ HTTP-lösenord
+ HTTP-användarnamn
+ Autentisering krävs
Magisk länk har skickats
Registrering via e-post
Bekräftelse av kod
@@ -3465,8 +3478,32 @@ Language: sv_SE
Inloggning via magisk länk
Webbplatsens inloggningsadress
E-postadress för inloggning
- Har du inget konto? %1$sRegistrera dig%2$s
+ Ett fel har inträffat.
+ Fyll i en autentiseringskod för att fortsätta.
+ Dubbelkontrollera ditt lösenord för att fortsätta.
+ Inloggningen avbruten
+ Vänta medan inloggningen pågår.
+ Inloggning pågår…
+ Tryck för att fortsätta.
+ Inloggad!
+ Ett nätverksfel har inträffat. Kontrollera anslutningen och försök igen.
+ Ange en webbplats som ligger på WordPress.com eller en WordPress-webbplats på egen server som är ansluten till Jetpack
+ Det gick inte att ansluta. Vi får fel 403 (förbjudet) när vi anropar XMLRPC-ändpunkten för din webbplats. Appen behöver detta för att kunna kommunicera med din webbplats. Kontakta webbhotellet för att lösa detta problem.
+ Det gick inte att ansluta. Din webbserver blockerar POST-anrop, som appen behöver för att kommunicera med din webbplats. Kontakta ditt webbhotell för att lösa detta problem.
+ Kunde inte ansluta. Obligatoriska XML-RPC-metoder saknas på servern.
+ Kontrollera att webbplatsens URL är giltig
+ Ett fel uppstod
+ Glömt ditt lösenord?
+ Ange en giltig epostadress
+ Kontrollerar e-post
+ Logga in igen för att fortsätta.
+ Logga in på WordPress.com-kontot du använde för att ansluta Jetpack.
+ Kunde inte hämta din profil
+ En dublett-webbplats har hittats.
+ Det går inte att lägga till denna webbplats. Den finns redan i appen.
+ Användarnamnet eller lösenordet som angavs är felaktigt
Det tog för lång tid för Google att svara. Du kan behöva vänta tills du har en stabilare internetuppkoppling.
+ Registrerar med Google …
Registrering med Google
Registrering med e-postadress
Genom att registrera dig accepterar du våra %1$sAnvändarvillkor%2$s.
@@ -3476,55 +3513,20 @@ Language: sv_SE
Det gick inte att sända e-postmeddelandet. Du kan försöka igen nu eller stänga och göra ett nytt försök senare.
Skriv in din e-postadress för att skapa ditt nya WordPress.com-konto.
Det gick inte att kontrollera e-postadressen.
- Ett fel har inträffat.
- Fyll i en autentiseringskod för att fortsätta.
- Dubbelkontrollera ditt lösenord för att fortsätta.
- Inloggningen avbruten
- Vänta medan inloggningen pågår.
- Inloggning pågår…
- Tryck för att fortsätta.
- Inloggad!
- Google login kunde inte startas.
- Skriv in ett lösenord
\nDu kanske vill prova ett annat konto?
+ Google login kunde inte startas.
+ Vi har gjort för många försök att leverera en verifieringskod via SMS – Vänta lite och be om en ny om en minut.
Det var något som inte stämde vid uppkoppling till Google-kontot.
+ Det finns inget WordPress.com-konto som stämmer mot detta Google-konto.
Stäng
Logga in via Google.
- Ett nätverksfel har inträffat. Kontrollera anslutningen och försök igen.
Inloggad som
Lyckas inte hitta ditt e-postprogram
+ Har du inget konto? %1$sRegistrera dig%2$s
Skriv in en verifieringskod
- En dublett-webbplats har hittats.
- Det går inte att lägga till denna webbplats. Den finns redan i appen.
- Det gick inte att ansluta. Vi får fel 403 (förbjudet) när vi anropar XMLRPC-ändpunkten för din webbplats. Appen behöver detta för att kunna kommunicera med din webbplats. Kontakta webbhotellet för att lösa detta problem.
- Det gick inte att ansluta. Din webbserver blockerar POST-anrop, som appen behöver för att kommunicera med din webbplats. Kontakta ditt webbhotell för att lösa detta problem.
- Kontrollerar e-post
- Kunde inte ansluta. Obligatoriska XML-RPC-metoder saknas på servern.
- Kunde inte hämta din profil
- Logga in igen för att fortsätta.
- Glömt ditt lösenord?
- Användarnamnet eller lösenordet som angavs är felaktigt
- Ange en giltig epostadress
- Ett fel uppstod
- Autentisering krävs
- Kontrollera att webbplatsens URL är giltig
- HTTP-lösenord
- HTTP-användarnamn
- Ange en webbplats som ligger på WordPress.com eller en WordPress-webbplats på egen server som är ansluten till Jetpack
- Registrerar med Google …
- Alternativt:
- Allmänt
- \@%s
- Logga in med ditt användarnamn.
- Logga in genom att skriva din webbplatsadress.
- Skicka ett nytt SMS med en kod till mig istället.
- Vi har skickat ett SMS till telefonnumret som slutar på %s. Skriv in bekräftelsekoden from SMS;et.
- Ange motsvarande lösenord för WordPress.com för att fortsätta med detta Google-konto. Denna fråga får du endast en gång.
- Logga in på WordPress.com för att dela innehållet.
- Skriv in adressen för den WordPress-webbplats dit du vill dela innehållet.
- Ett fel inträffade när standardwebbläsaren skulle öppnas. Välj en annan app:
- Kan inte öppna länken
+ Skriv in ett lösenord
Skriv in ett användarnamn
+ Logga in på WordPress.com för att dela innehållet.
Logga in till ditt konto på WordPress.com för att nå inlägget.
Ett fel inträffade när webbplatsen skulle läggas till. Felkod: %s
Webbplatsadressen kontrolleras
@@ -3533,15 +3535,25 @@ Language: sv_SE
Vilket webbplatsadress har jag?
Behöver du hjälp att hitta din webbplatsadress?
Webbplatsadress
+ Skriv in adressen för den WordPress-webbplats dit du vill dela innehållet.
\@%s
Redan inloggad på WordPress.com
Fortsätt
+ Anslut en webbplats
Anslut ytterligare webbplats
+ Ange motsvarande lösenord för WordPress.com för att fortsätta med detta Google-konto. Denna fråga får du endast en gång.
Skriv in ditt lösenord för WordPress.com.
+ Inte tillgänglig för närvarande. Ange ditt lösenord
Begär e-postadress för inloggning
Det verkar som om ditt lösenord inte stämmer. Dubbelkolla dina uppgifer och försök igen.
Begär en verifieringskod via SMS.
+ Skicka ett nytt SMS med en kod till mig istället.
Skicka mig en kod via SMS istället.
+ Vi har skickat ett SMS till telefonnumret som slutar på %s. Skriv in bekräftelsekoden from SMS;et.
+ Nästan där! Ange verifieringskoden för WordPress.com från din autentiseringsapp.
+ Logga in med ditt användarnamn.
+ Logga in genom att skriva din webbplatsadress.
+ Alternativt:
Öppna e-posten
Nästa
Hantera din Jetpack-förstärkta webbplats när som helst – WordPress finns i din ficka.
@@ -3549,75 +3561,35 @@ Language: sv_SE
Håll koll på dina favoritwebbplatser och delta i diskussion där och när det passar dig.
Se hur läsare från hela världen läser och interagerar med din webbplats – i direktsändning.
Publicera från parkbänken. Blogga från bussen. Kommentera när du dricker kaffe. WordPress finns där du är.
- Du är redan inloggad till ditt konto hos WordPress.com. Du kan inte lägga till någon webbplats från WordPress.com som är kopplad till ett annat konto.
- Försök igen
- Logga ut
- Skicka länk
- Inte tillgänglig för närvarande. Ange ditt lösenord
- Loggar in
+ Logga in
+ Hjälp
+ Lösenord
+ Användarnamn
Ange ditt lösenord istället
- E-postadress
- Ångra
+ Skicka länk
Ogiltig verifieringskod
Verifieringskod
- Hjälp
- Kasta bort
- Logga in
- Användarnamn
- Lösenord
- Utan titel
- Inställningar
- Idag
- Avbryt
- Äldre än en månad
- Äldre än en vecka
- Äldre än 2 dagar
- Igår
- Idag
- Produkter
- Detta år
- Denna månad
- Denna vecka
- Produkt
- Dölj detaljer
- Fortsätt
- Lär dig mer
- Rabatt
- Betalning
- -%1$s%2$s
- %1$s%2$s
- WooCommerce
- Ingen SMS-app hittades
- Besökare
- År
- Månader
- Veckor
- Dagar
- Logga in med ett annat konto
- Inga WooCommerce-butiker
- Ditt profilfoto
- Ansluten butik
- Ingen aktivitet denna period
- Felbild
- Intäkter
- Misslyckades
- Slutförd
- Avbruten
+ E-postadress
Support för WooCommerce Android %s
alternativ ej markerat
alternativ markerat
Policyer från tredje part
Cookie-policy
Integritetspolicy
+ Skapad med kärlek av Automattic. %1$s
Vi använder andra spårningsverktyg, inklusive några från tredje part. Läs om dessa verktyg och hur du kontrollerar dem.
Läs integritetspolicyn
Denna information hjälper oss att förbättra våra produkter, se till att marknadsföringen till dig är mer relevant, anpassa din upplevelse av WooCommerce och annat som finns beskrivet i vår integritetspolicy.
Dela information med vårt analysverktyg om din användning av olika tjänster medan du är inloggad på ditt WordPress-konto
Samla in information
Integritetsinställningar
+ Inställningar
Orderstatus
Återbetalad
+ Avbruten
Pausad
+ Slutförd
+ Misslyckades
Inväntar betalning
Behandlas
Kunde inte lägga till notering
@@ -3625,6 +3597,7 @@ Language: sv_SE
Lägg till
Skicka notering till kund via e-post
Det gick inte att ändra ordern
+ Det gick inte att hämta noteringar
Ordern har markerats som slutförd
Markera ordern som slutförd
Lägg till en ordernotering
@@ -3633,6 +3606,7 @@ Language: sv_SE
Visa fakturering
Betalning godkänd
Ordernoteringar
+ Privat
Skapa en ordernotering
Kundprofilsbild
Kundnotering
@@ -3657,32 +3631,71 @@ Language: sv_SE
Inga ordrar
Visa ordrar
Visa order
+ Ingen aktivitet denna period
+ Totalt antal beställningar: %s
+ Felbild
Det gick inte att hämta data
+ Intäkter
Ordrar
+ Besökare
+ År
+ Månader
+ Veckor
+ Dagar
+ Logga in med ett annat konto
+ Inga WooCommerce-butiker
+ Ditt profilfoto
+ Ansluten butik
+ Läs %1$skonfigurationsinstruktionerna%2$s.
+ Denna app kräver Jetpack för att ansluta till din butik.
+ \@%s
+ Ange adressen till den WooCommerce-butik som du vill ansluta.
Logga in med e-postadressen för ditt WordPress.com-konto för att hantera dina WooCommerce-butiker.
+ Du är redan inloggad till ditt konto hos WordPress.com. Du kan inte lägga till någon webbplats från WordPress.com som är kopplad till ett annat konto.
+ Kan inte öppna länken
+ Ingen SMS-app hittades
Ingen app för e-post hittades
Ingen telefonappen hittades
+ Ett fel inträffade när standardwebbläsaren skulle öppnas. Välj en annan app:
Kan inte öppna länken
%1$s at %2$s
+ Äldre än en månad
+ Äldre än en vecka
+ Äldre än 2 dagar
+ Igår
+ Idag
+ Produkter
+ Kasta bort
+ Detta år
+ Denna månad
+ Denna vecka
+ Idag
+ Produkt
Ditt nätverk är inte tillgängligt. Kontrollera din data- eller WiFi-anslutning.
Offline u2014 med cachade data
+ Lär dig mer
+ Avbryt
+ Utan titel
+ Fortsätt
+ Ångra
+ Försök igen
+ Dölj detaljer
+ Detaljer
+ Rabatt
Delsumma
+ Momser
+ Betalning
Frakt
Totalt
+ -%1$s%2$s
+ %1$s%2$s
Ordrar
Min butik
+ Logga ut
+ Loggar in
Alla
- Denna app kräver Jetpack för att ansluta till din butik.
- Detaljer
- Momser
- Skapad med kärlek av Automattic. %1$s
- Ange adressen till den WooCommerce-butik som du vill ansluta.
- Privat
- Anslut en webbplats
- Totalt antal beställningar: %s
- Det gick inte att hämta noteringar
- Läs %1$skonfigurationsinstruktionerna%2$s.
- Nästan där! Ange verifieringskoden för WordPress.com från din autentiseringsapp.
+ Allmänt
+ WooCommerce
- @string/date_timeframe_custom
- @string/date_timeframe_today
diff --git a/WooCommerce/src/main/res/values-tr/strings.xml b/WooCommerce/src/main/res/values-tr/strings.xml
index 15927a46d8d..c04a370828a 100644
--- a/WooCommerce/src/main/res/values-tr/strings.xml
+++ b/WooCommerce/src/main/res/values-tr/strings.xml
@@ -1,11 +1,27 @@
+ Varyasyonlar yüklenirken hata oluştu
+ \"Daha fazla öğe yüklenemedi. Lütfen yeniden deneyin.\"
+ Geri
+ %1$d varyasyon
+ %s Varyasyon, %s Fiyat
+ %s Varyasyonlu Ürün, %s Fiyat
+ Açıklama boş olamaz
+ Eylem çağrısı
+ Site sloganı boş olamaz
+ E-posta adresinizin doğru olduğundan emin olun ve istenmeyen posta klasörünüzü iki kez kontrol edin.
+ Bu kullanıcı adına bağlı bir WordPress.com hesabı bulunamadı. Yeni hesap oluşturmak için e-posta adresi girebilirsiniz.
+ Bu ürüne özel bir barkod veya herhangi başka bir tanımlayıcı girin. Bunu yapmanız bu ürünü diğer kanallarda veya pazarlarda listelemenize yardımcı olabilir.
+ GTIN, UPC, EAN, ISBN
+ SON ÖDEME
+ Bir etiket satın aldıktan sonra bu siparişi tamamlandı olarak işaretleyin ve müşteriyi bilgilendirin.
+ Hesabınız yoksa oluşturmak için bu e-posta adresi kullanılır.
Zarf
Kutu
Paket Ekleyin
@@ -30,7 +46,6 @@ Language: tr
En ucuz
Satın Alma Etiketi
Satın Alma Etiketi · %1$s
- Bu siparişi tamamlandı olarak işaretleyin ve müşteriyi bilgilendirin
Gönderim maliyeti
Sipariş ayrıntıları
Gönderi ayrıntıları
@@ -559,7 +574,6 @@ Language: tr
Dil
Bütçe
Ayrıntılar
- Hemen satın al
Reklamı düzenle
Önizleme
Devre Dışı Bırakıldı
@@ -585,7 +599,6 @@ Language: tr
Tanıtmaya hazır
Ürünlerinizin milyonlarca kişi tarafından görülmesini sağlayın
%1$s kullanın
- SON DEPOZİTO
Sipariş toplamlarını genişletin daraltın
Ödeme Alın
Kod XXXX-XXXX-XXXX-XXXX biçiminde olmalıdır.
@@ -667,9 +680,9 @@ Language: tr
Cihazdaki belgeler ve diğer dosyalar
✨Teşekkür notu oluştur
Vergileri Alın
- Mevcut fonlar otomatik olarak her %s yatırılır.
- Mevcut fonlar otomatik olarak her gün yatırılır.
- Fonlar, %d gün beklemenin ardından kullanılabilir hale gelir.
+ Mevcut fonlar otomatik olarak her %s ödenir.
+ Mevcut fonlar otomatik olarak her gün ödenir.
+ Fonlar, %d gün beklemenin ardından kullanılabilir hale gelir.
Varyasyon seçin
Varyasyon seç
\" %1$s \" -> %2$s
@@ -708,19 +721,19 @@ Language: tr
Dönem
Fatura aralığı
İndirim
- Bilinmiyor
- Başarısız
- İptal edildi
- Geçiş yapılıyor
- Bekliyor
- Ödendi
- Tahmini
- Depozito özetini daralt/genişlet
- Fonlarınızı ne zaman alacağınız hakkında daha fazla bilgi edinin
- Mevcut fonlar otomatik olarak her ay %s olunca yatırılır.
- Fonlar, %d gün beklemenin ardından kullanılabilir hale gelir.
- Bekleyen fonlar
- Mevcut fonlar
+ Bilinmiyor
+ Başarısız
+ İptal edildi
+ Geçiş yapılıyor
+ Bekliyor
+ Ödendi
+ Tahmini
+ Ödeme özetini daralt/genişlet
+ Fonlarınızı ne zaman alacağınız hakkında daha fazla bilgi edinin
+ Mevcut fonlar otomatik olarak her ay %s ödenir.
+ Fonlar, %d gün beklemenin ardından kullanılabilir hale gelir.
+ Bekleyen fonlar
+ Mevcut fonlar
Vergiler
Ürünler
Ödeme toplamı
diff --git a/WooCommerce/src/main/res/values-zh-rCN/strings.xml b/WooCommerce/src/main/res/values-zh-rCN/strings.xml
index c79685a1660..b8b146fdaca 100644
--- a/WooCommerce/src/main/res/values-zh-rCN/strings.xml
+++ b/WooCommerce/src/main/res/values-zh-rCN/strings.xml
@@ -1,11 +1,27 @@
+ 加载变体时出错
+ “无法加载更多项目。 请重试。”
+ 返回
+ %1$d 个变体
+ 变体 %s,价格 %s
+ 可变产品 %s,价格 %s
+ 描述不能为空
+ 号召性用语
+ 标语不能为空
+ 确保您的电子邮件地址正确无误,并仔细检查您的垃圾邮件文件夹。
+ 我们找不到与此用户名相关联的 WordPress.com 账户。 您可以输入电子邮件地址,以创建新账户。
+ 输入该产品的条形码或任何其他唯一标识符。 它可以帮助您列出其他渠道或市场上的该产品。
+ GTIN、UPC、EAN、ISBN
+ 最近一次付款
+ 购买标签后,将此订单标注为已完成并通知客户。
+ 如果您没有账户,我们将使用此电子邮件地址创建一个。
信封
箱子
添加包裹
@@ -30,7 +46,6 @@ Language: zh_CN
费用最低
购买标签
购买标签 · %1$s
- 将订单标注为已完成并通知客户
运输费用
订单详细信息
配送详细信息
@@ -559,7 +574,6 @@ Language: zh_CN
语言
预算
详情
- 立即购买
编辑广告
预览
禁用
@@ -585,7 +599,6 @@ Language: zh_CN
准备推广
让数百万人看到您的产品
使用 %1$s
- 上次存款
展开折叠订单总计数据
收款
代码格式应该为:XXXX-XXXX-XXXX-XXXX
@@ -667,9 +680,9 @@ Language: zh_CN
设备上的文档及其他文件
✨ 创建感谢信
收取税费
- 可用资金每 %s 自动存入。
- 可用资金每天自动存入。
- 资金将在等待 %d 天后到账。
+ 可用资金每 %s 自动支付。
+ 可用资金每天自动支付。
+ 资金将在等待 %d 天后到账。
选择一个变体
选择变体
“%1$s”-> %2$s
@@ -708,19 +721,19 @@ Language: zh_CN
时段
计费间隔
销售
- 未知
- 失败
- 已取消
- 运输中
- 待处理
- 已支付
- 预估价格
- 折叠/展开存款摘要
- 进一步了解收到资金的时间
- 可用资金每月 %s 号自动存入。
- 资金将在等待 %d 天后到账。
- 待处理资金
- 可用资金
+ 未知
+ 失败
+ 已取消
+ 运输中
+ 待处理
+ 已支付
+ 预估价格
+ 收起/展开付款摘要
+ 进一步了解收到资金的时间
+ 可用资金每月 %s 号自动支付。
+ 资金将在等待 %d 天后到账。
+ 待处理资金
+ 可用资金
税费
产品
付款总额
diff --git a/WooCommerce/src/main/res/values-zh-rTW/strings.xml b/WooCommerce/src/main/res/values-zh-rTW/strings.xml
index 7127e50c04d..697bbd76584 100644
--- a/WooCommerce/src/main/res/values-zh-rTW/strings.xml
+++ b/WooCommerce/src/main/res/values-zh-rTW/strings.xml
@@ -1,11 +1,27 @@
+ 載入款式時發生錯誤
+ 「無法載入更多項目, 請再試一次。」
+ 返回
+ %1$d 種款式
+ 款式 %s,價格 %s
+ 多款式商品 %s,價格 %s
+ 說明不得空白
+ 行動呼籲
+ 標語不得空白
+ 請確定電子郵件地址是否正確,並再次查看垃圾郵件資料夾。
+ 我們找不到此使用者名稱所連結的 WordPress.com 帳號。 請輸入電子郵件地址建立新帳號。
+ 請輸入條碼或此商品任一不重複識別碼, 這可協助你將此商品上架於其他通路或市集。
+ GTIN、UPC、EAN、ISBN
+ 上次款項
+ 購買標籤後,將此訂單標示為完成並通知顧客。
+ 如果你沒有帳號,系統會使用此電子郵件地址建立帳號。
信封
包裝箱
新增包裹
@@ -30,7 +46,6 @@ Language: zh_TW
最便宜
購買標籤
購買標籤 · %1$s
- 將此訂單標示為完成並通知客戶
貨運費用
訂單詳細資料
貨運詳細資料
@@ -559,7 +574,6 @@ Language: zh_TW
語言
預算
詳細資料
- 立即選購
編輯廣告
預覽
殘障人士
@@ -585,7 +599,6 @@ Language: zh_TW
準備展開宣傳
讓數百萬使用者看見你的產品
使用 %1$s
- 上次存款
展開收合的訂單總額
收取款項
序號必須採用 XXXX-XXXX-XXXX-XXXX 格式。
@@ -667,9 +680,9 @@ Language: zh_TW
裝置上的文件和其他檔案
✨建立感謝信
收取稅金
- 可用款項將自動於每%s存入。
- 可用款項將自動於每天存入。
- 待確認款項 %d 天後即可使用。
+ 每%s會自動發放可用款項。
+ 每天會自動發放可用款項。
+ %d 天後即可使用待確認款項。
選取款式
選擇款式
「%1$s」-> %2$s
@@ -708,19 +721,19 @@ Language: zh_TW
期間
帳單間隔
特價
- 未知
- 失敗
- 已取消
- 運送中
- 待確認
- 已付費
- 估計值
- 收合/展開存款摘要
- 深入瞭解何時會收到款項
- 可用款項將自動於每月 %s存入。
- 待確認款項 %d 天後即可使用。
- 待確認款項
- 可用款項
+ 不明
+ 失敗
+ 已取消
+ 運送中
+ 待確認
+ 已付費
+ 估計值
+ 收合/展開款項摘要
+ 深入了解何時會收到款項
+ 每月 %s 日會自動發放可用款項。
+ %d 天後即可使用待確認款項。
+ 待確認款項
+ 可用款項
稅金
產品
付款總金額
diff --git a/WooCommerce/src/main/res/values/strings.xml b/WooCommerce/src/main/res/values/strings.xml
index 39b8d3ad96e..2a39bfec8a6 100644
--- a/WooCommerce/src/main/res/values/strings.xml
+++ b/WooCommerce/src/main/res/values/strings.xml
@@ -2547,16 +2547,12 @@
-->
Enable Simulated Card Reader
Update Simulated Card Reader
- Simulated Reader Key
- Update Simulated Reader Key
Always
Never
Low Battery Error
Low Battery Succeed Connect
Randomly
Enable Interac Payment
- Enable Interac Key
-