diff --git a/API-Mocks/WordPressMocks/src/main/assets/mocks/mappings/wpcom/dashboard/dashboard.json b/API-Mocks/WordPressMocks/src/main/assets/mocks/mappings/wpcom/dashboard/dashboard.json index 7c277adb285a..0bfcb6be9ecf 100644 --- a/API-Mocks/WordPressMocks/src/main/assets/mocks/mappings/wpcom/dashboard/dashboard.json +++ b/API-Mocks/WordPressMocks/src/main/assets/mocks/mappings/wpcom/dashboard/dashboard.json @@ -7,7 +7,7 @@ "matches": "(.*)" }, "cards": { - "equalTo": "todays_stats,posts,pages" + "equalTo": "todays_stats,posts" } } }, diff --git a/API-Mocks/WordPressMocks/src/main/assets/mocks/mappings/wpcom/domains/rest_v11_suggestions.json b/API-Mocks/WordPressMocks/src/main/assets/mocks/mappings/wpcom/domains/rest_v11_suggestions.json new file mode 100644 index 000000000000..b6b35e0e6b1b --- /dev/null +++ b/API-Mocks/WordPressMocks/src/main/assets/mocks/mappings/wpcom/domains/rest_v11_suggestions.json @@ -0,0 +1,75 @@ +{ + "request": { + "urlPath": "/rest/v1.1/domains/suggestions", + "method": "GET" + }, + "response": { + "status": 200, + "jsonBody": [ + { + "domain_name": "domainexample.com", + "relevance": 1, + "supports_privacy": true, + "vendor": "donuts", + "match_reasons": ["tld-common"], + "product_id": 6, + "product_slug": "domain_reg", + "cost": "19,00\u00a0\u20ac", + "raw_price": 19, + "currency_code": "EUR" + }, + { + "domain_name": "domainexample.ink", + "relevance": 1, + "supports_privacy": true, + "vendor": "donuts", + "product_id": 359, + "product_slug": "dotink_domain", + "cost": "26,00\u00a0\u20ac", + "raw_price": 26, + "currency_code": "EUR" + }, + { + "domain_name": "domainexample.blog", + "relevance": 0.99, + "supports_privacy": true, + "vendor": "donuts", + "match_reasons": ["tld-common"], + "product_id": 76, + "product_slug": "dotblog_domain", + "cost": "22,00\u00a0\u20ac", + "raw_price": 22, + "currency_code": "EUR", + "sale_cost": 4.84 + }, + { + "domain_name": "domainexample.org", + "relevance": 0.98, + "supports_privacy": true, + "vendor": "donuts", + "match_reasons": ["tld-common"], + "product_id": 6, + "product_slug": "domain_reg", + "cost": "19,00\u00a0\u20ac", + "raw_price": 19, + "currency_code": "EUR" + }, + { + "domain_name": "domainexample.maison", + "relevance": 0.93, + "supports_privacy": true, + "vendor": "donuts", + "product_id": 200, + "product_slug": "dotmaison_domain", + "cost": "49,00\u00a0\u20ac", + "raw_price": 49, + "currency_code": "EUR" + } + ], + "headers": { + "Content-Type": "application/json", + "Connection": "keep-alive", + "Cache-Control": "no-cache, must-revalidate, max-age=0" + } + } + } \ No newline at end of file diff --git a/API-Mocks/WordPressMocks/src/main/assets/mocks/mappings/wpcom/feature-flags.json b/API-Mocks/WordPressMocks/src/main/assets/mocks/mappings/wpcom/feature-flags.json index 7b294b57f2b0..a27d17672c39 100644 --- a/API-Mocks/WordPressMocks/src/main/assets/mocks/mappings/wpcom/feature-flags.json +++ b/API-Mocks/WordPressMocks/src/main/assets/mocks/mappings/wpcom/feature-flags.json @@ -11,7 +11,8 @@ "response": { "status": 200, "jsonBody": { - "dashboard_card_domain": true + "dashboard_card_domain": false, + "dashboard_card_free_to_paid_plans": true } } } diff --git a/API-Mocks/WordPressMocks/src/main/assets/mocks/mappings/wpcom/me/rest_v11_me_shopping_cart_post.json b/API-Mocks/WordPressMocks/src/main/assets/mocks/mappings/wpcom/me/rest_v11_me_shopping_cart_post.json new file mode 100644 index 000000000000..2dff1685224d --- /dev/null +++ b/API-Mocks/WordPressMocks/src/main/assets/mocks/mappings/wpcom/me/rest_v11_me_shopping_cart_post.json @@ -0,0 +1,265 @@ +{ + "request": { + "urlPattern": "/rest/v1.1/me/shopping-cart/.*", + "method": "POST" + }, + "response": { + "status": 200, + "jsonBody": { + "cart_generated_at_timestamp": 1684777767, + "blog_id": 218645783, + "cart_key": 218645783, + "coupon": "", + "coupon_discounts": [], + "coupon_discounts_integer": [], + "coupon_discounts_display": [], + "is_coupon_applied": false, + "next_domain_is_free": false, + "next_domain_condition": "", + "products": [{ + "product_id": 76, + "billing_plan_id": "1562", + "product_name": ".blog Domain Registration", + "product_name_en": ".blog Domain Registration", + "product_slug": "dotblog_domain", + "product_cost": 22, + "product_cost_display": "22\u00a0\u20ac", + "product_cost_integer": 2200, + "meta": "domainexample.blog", + "cost": 4.84, + "currency": "EUR", + "volume": 1, + "quantity": null, + "current_quantity": null, + "price_tier_minimum_units": null, + "price_tier_maximum_units": null, + "price_tier_transform_quantity_divide_by": null, + "price_tier_transform_quantity_round": null, + "free_trial": false, + "introductory_offer_terms": null, + "cost_before_coupon": 22, + "coupon_savings": 0, + "coupon_savings_integer": 0, + "coupon_savings_display": "0\u00a0\u20ac", + "is_sale_coupon_applied": true, + "extra": { + "privacy": true, + "added_from_shopping_cart": true, + "registrar": "KS_RAM", + "domain_registration_agreement_url": "https:\/\/wordpress.com\/automattic-domain-name-registration-agreement\/", + "privacy_available": true, + "premium": false + }, + "bill_period": "365", + "months_per_bill_period": 12, + "is_domain_registration": true, + "time_added_to_cart": 1684777766, + "is_bundled": false, + "item_original_cost": 22, + "item_original_cost_integer": 2200, + "item_original_cost_display": "22\u00a0\u20ac", + "item_original_monthly_cost_integer": 183, + "item_original_monthly_cost_display": "1,83\u00a0\u20ac", + "item_original_cost_for_quantity_one_integer": 900, + "item_original_cost_for_quantity_one_display": "9\u00a0\u20ac", + "item_subtotal_monthly_cost_integer": 17, + "item_subtotal_monthly_cost_display": "0,17\u00a0\u20ac", + "item_original_subtotal": 22, + "item_original_subtotal_integer": 2200, + "item_original_subtotal_display": "22\u00a0\u20ac", + "item_subtotal": 4.84, + "item_subtotal_integer": 484, + "item_subtotal_display": "4,84\u00a0\u20ac", + "item_tax": 0, + "item_tax_rate": 0, + "item_tax_breakdown": [], + "item_total": 4.84, + "item_total_integer": 484, + "subscription_id": 0, + "is_renewal": false, + "domain_post_renewal_expiration_date": null, + "cost_overrides": [{ + "old_price": 9, + "new_price": 1.98, + "reason": "Sale_Coupon->apply_sale_discount" + }], + "is_gift_purchase": false, + "product_variants": [] + }], + "unmerged_products": [{ + "product_id": 76, + "billing_plan_id": "1562", + "product_name": ".blog Domain Registration", + "product_name_en": ".blog Domain Registration", + "product_slug": "dotblog_domain", + "product_cost": 9, + "product_cost_display": "9\u00a0\u20ac", + "product_cost_integer": 900, + "meta": "domainexample.blog", + "cost": 1.98, + "currency": "EUR", + "volume": 1, + "quantity": null, + "current_quantity": null, + "price_tier_minimum_units": null, + "price_tier_maximum_units": null, + "price_tier_transform_quantity_divide_by": null, + "price_tier_transform_quantity_round": null, + "free_trial": false, + "introductory_offer_terms": null, + "cost_before_coupon": 9, + "coupon_savings": 0, + "coupon_savings_integer": 0, + "coupon_savings_display": "0\u00a0\u20ac", + "is_sale_coupon_applied": true, + "extra": { + "privacy": true, + "added_from_shopping_cart": true, + "registrar": "KS_RAM", + "domain_registration_agreement_url": "https:\/\/wordpress.com\/automattic-domain-name-registration-agreement\/", + "privacy_available": true, + "premium": false + }, + "bill_period": "365", + "months_per_bill_period": 12, + "is_domain_registration": true, + "time_added_to_cart": 1684777766, + "is_bundled": false, + "item_original_cost": 9, + "item_original_cost_integer": 900, + "item_original_cost_display": "9\u00a0\u20ac", + "item_original_monthly_cost_integer": 75, + "item_original_monthly_cost_display": "0,75\u00a0\u20ac", + "item_original_cost_for_quantity_one_integer": 900, + "item_original_cost_for_quantity_one_display": "9\u00a0\u20ac", + "item_subtotal_monthly_cost_integer": 17, + "item_subtotal_monthly_cost_display": "0,17\u00a0\u20ac", + "item_original_subtotal": 9, + "item_original_subtotal_integer": 900, + "item_original_subtotal_display": "9\u00a0\u20ac", + "item_subtotal": 1.98, + "item_subtotal_integer": 198, + "item_subtotal_display": "1,98\u00a0\u20ac", + "item_tax": 0, + "item_tax_rate": 0, + "item_tax_breakdown": [], + "item_total": 1.98, + "item_total_integer": 198, + "subscription_id": 0, + "is_renewal": false, + "domain_post_renewal_expiration_date": null, + "cost_overrides": [{ + "old_price": 9, + "new_price": 1.98, + "reason": "Sale_Coupon->apply_sale_discount" + }], + "is_gift_purchase": false, + "product_variants": [] + }, { + "product_id": 5, + "billing_plan_id": "912", + "product_name": "Domain Connection", + "product_name_en": "Domain Connection", + "product_slug": "domain_map", + "product_cost": 13, + "product_cost_display": "13\u00a0\u20ac", + "product_cost_integer": 1300, + "meta": "domainexample.com", + "cost": 2.86, + "currency": "EUR", + "volume": 1, + "quantity": null, + "current_quantity": null, + "price_tier_minimum_units": null, + "price_tier_maximum_units": null, + "price_tier_transform_quantity_divide_by": null, + "price_tier_transform_quantity_round": null, + "free_trial": false, + "introductory_offer_terms": null, + "cost_before_coupon": 13, + "coupon_savings": 0, + "coupon_savings_integer": 0, + "coupon_savings_display": "0\u00a0\u20ac", + "is_sale_coupon_applied": true, + "extra": { + "privacy": true, + "added_from_shopping_cart": true + }, + "bill_period": "365", + "months_per_bill_period": 12, + "is_domain_registration": false, + "time_added_to_cart": 1684777767, + "is_bundled": false, + "item_original_cost": 13, + "item_original_cost_integer": 1300, + "item_original_cost_display": "13\u00a0\u20ac", + "item_original_monthly_cost_integer": 108, + "item_original_monthly_cost_display": "1,08\u00a0\u20ac", + "item_original_cost_for_quantity_one_integer": 1300, + "item_original_cost_for_quantity_one_display": "13\u00a0\u20ac", + "item_subtotal_monthly_cost_integer": 24, + "item_subtotal_monthly_cost_display": "0,24\u00a0\u20ac", + "item_original_subtotal": 13, + "item_original_subtotal_integer": 1300, + "item_original_subtotal_display": "13\u00a0\u20ac", + "item_subtotal": 2.86, + "item_subtotal_integer": 286, + "item_subtotal_display": "2,86\u00a0\u20ac", + "item_tax": 0, + "item_tax_rate": 0, + "item_tax_breakdown": [], + "item_total": 2.86, + "item_total_integer": 286, + "subscription_id": 0, + "is_renewal": false, + "domain_post_renewal_expiration_date": null, + "cost_overrides": [{ + "old_price": 13, + "new_price": 2.86, + "reason": "Sale_Coupon->apply_sale_discount" + }], + "is_gift_purchase": false, + "product_variants": [] + }], + "total_cost": 4.84, + "currency": "EUR", + "total_cost_display": "4,84\u00a0\u20ac", + "total_cost_integer": 484, + "temporary": false, + "tax": { + "location": {}, + "display_taxes": false + }, + "coupon_savings_total": 0, + "coupon_savings_total_display": "0\u00a0\u20ac", + "coupon_savings_total_integer": 0, + "sub_total_with_taxes_display": "4,84\u00a0\u20ac", + "sub_total_with_taxes_integer": 484, + "sub_total": 4.84, + "sub_total_display": "4,84\u00a0\u20ac", + "sub_total_integer": 484, + "total_tax": 0, + "total_tax_display": "0\u00a0\u20ac", + "total_tax_integer": 0, + "total_tax_breakdown": [], + "credits": 0, + "credits_display": "0\u00a0\u20ac", + "credits_integer": 0, + "allowed_payment_methods": ["WPCOM_Billing_MoneyPress_Paygate", "WPCOM_Billing_PayPal_Express", "WPCOM_Billing_Stripe_Payment_Method", "WPCOM_Billing_MoneyPress_Stored", "WPCOM_Billing_Web_Payment"], + "terms_of_service": [], + "did_use_cached_taxes": false, + "is_gift_purchase": false, + "gift_details": null, + "messages": { + "errors": [], + "success": [], + "persistent_errors": [] + } + }, + "headers": { + "Content-Type": "application/json", + "Connection": "keep-alive", + "Cache-Control": "no-cache, must-revalidate, max-age=0" + } + } + } \ No newline at end of file diff --git a/API-Mocks/WordPressMocks/src/main/assets/mocks/mappings/wpcom/products/rest_v11_products.json b/API-Mocks/WordPressMocks/src/main/assets/mocks/mappings/wpcom/products/rest_v11_products.json new file mode 100644 index 000000000000..03c513779c40 --- /dev/null +++ b/API-Mocks/WordPressMocks/src/main/assets/mocks/mappings/wpcom/products/rest_v11_products.json @@ -0,0 +1,122 @@ +{ + "request": { + "urlPath": "/rest/v1.1/products", + "method": "GET" + }, + "response": { + "status": 200, + "jsonBody": { + "domain_reg": { + "product_id": 6, + "product_name": "Domen\u0173 registracija", + "product_slug": "domain_reg", + "description": "Register a domain for use with your blog.", + "product_type": "domain_reg", + "available": true, + "billing_product_slug": "wp-domain-registration", + "is_domain_registration": true, + "cost_display": "6,00\u00a0\u20ac", + "combined_cost_display": "19,00\u00a0\u20ac", + "cost": 6, + "cost_smallest_unit": 600, + "currency_code": "EUR", + "price_tier_list": [], + "price_tier_usage_quantity": null, + "product_term": "year", + "product_term_localized": "metai", + "price_tiers": [], + "price_tier_slug": "", + "tld": "com", + "is_privacy_protection_product_purchase_allowed": true + }, + "dotink_domain": { + "product_id": 359, + "product_name": ".ink Domain Registration", + "product_slug": "dotink_domain", + "description": "", + "product_type": "domain_reg", + "available": true, + "billing_product_slug": "wp-dot-ink-registration", + "is_domain_registration": true, + "cost_display": "13,00\u00a0\u20ac", + "combined_cost_display": "26,00\u00a0\u20ac", + "cost": 13, + "cost_smallest_unit": 1300, + "currency_code": "EUR", + "price_tier_list": [], + "price_tier_usage_quantity": null, + "product_term": "year", + "product_term_localized": "metai", + "price_tiers": [], + "price_tier_slug": "", + "tld": "ink", + "is_privacy_protection_product_purchase_allowed": true + }, + "dotblog_domain": { + "product_id": 76, + "product_name": ".blog Domain Registration", + "product_slug": "dotblog_domain", + "description": "", + "product_type": "domain_reg", + "available": true, + "billing_product_slug": "wp-dot-blog-registration", + "is_domain_registration": true, + "cost_display": "9,00\u00a0\u20ac", + "combined_cost_display": "22,00\u00a0\u20ac", + "cost": 9, + "cost_smallest_unit": 900, + "currency_code": "EUR", + "price_tier_list": [], + "price_tier_usage_quantity": null, + "product_term": "year", + "product_term_localized": "metai", + "price_tiers": [], + "price_tier_slug": "", + "tld": "blog", + "is_privacy_protection_product_purchase_allowed": true, + "sale_cost": 4.84, + "combined_sale_cost_display": "4,84\u00a0\u20ac", + "sale_coupon": { + "start_date": "2023-01-09 00:00:00", + "expires": "2023-12-31 00:00:00", + "discount": 78, + "purchase_types": [3], + "product_ids": [76], + "allowed_for_domain_transfers": false, + "allowed_for_renewals": false, + "allowed_for_new_purchases": true, + "code": "bca96bd24f305980", + "tld_rank": null + } + }, + "dotmaison_domain": { + "product_id": 200, + "product_name": ".maison Domain Registration", + "product_slug": "dotmaison_domain", + "description": "", + "product_type": "domain_reg", + "available": true, + "billing_product_slug": "wp-dot-maison-registration", + "is_domain_registration": true, + "cost_display": "36,00\u00a0\u20ac", + "combined_cost_display": "49,00\u00a0\u20ac", + "cost": 36, + "cost_smallest_unit": 3600, + "currency_code": "EUR", + "price_tier_list": [], + "price_tier_usage_quantity": null, + "product_term": "year", + "product_term_localized": "metai", + "price_tiers": [], + "price_tier_slug": "", + "tld": "maison", + "is_privacy_protection_product_purchase_allowed": true + } + }, + "headers": { + "Content-Type": "application/json", + "Connection": "keep-alive", + "Cache-Control": "no-cache, must-revalidate, max-age=0" + } + } + } \ No newline at end of file diff --git a/Gemfile.lock b/Gemfile.lock index 9c356328c7b4..a1445c1894d3 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -188,7 +188,7 @@ GEM xcpretty-travis-formatter (>= 0.0.3) fastlane-plugin-appcenter (1.11.1) fastlane-plugin-sentry (1.11.0) - fastlane-plugin-wpmreleasetoolkit (8.0.1) + fastlane-plugin-wpmreleasetoolkit (8.1.0) activesupport (>= 6.1.7.1) bigdecimal (~> 1.4) buildkit (~> 1.5) @@ -274,8 +274,8 @@ GEM naturally (2.2.1) netrc (0.11.0) no_proxy_fix (0.1.2) - nokogiri (1.14.4) - mini_portile2 (~> 2.8.0) + nokogiri (1.15.2) + mini_portile2 (~> 2.8.2) racc (~> 1.4) octokit (5.6.1) faraday (>= 1, < 3) @@ -295,7 +295,7 @@ GEM racc (1.6.2) rainbow (3.1.1) rake (13.0.6) - rake-compiler (1.2.1) + rake-compiler (1.2.2) rake rchardet (1.8.0) regexp_parser (2.8.0) diff --git a/Gutenberg/version.rb b/Gutenberg/version.rb index aeffbee30559..7dfe90a55c8b 100644 --- a/Gutenberg/version.rb +++ b/Gutenberg/version.rb @@ -12,7 +12,7 @@ # LOCAL_GUTENBERG=../my-gutenberg-fork bundle exec pod install GUTENBERG_CONFIG = { # commit: '', - tag: 'v1.95.0' + tag: 'v1.96.0' } GITHUB_ORG = 'wordpress-mobile' diff --git a/MIGRATIONS.md b/MIGRATIONS.md index 4592dd18143f..855d36bf68fe 100644 --- a/MIGRATIONS.md +++ b/MIGRATIONS.md @@ -3,6 +3,12 @@ This file documents changes in the data model. Please explain any changes to the data model as well as any custom migrations. +## WordPress 149 + +@dvdchr 2023-05-16 + +- `PublicizeService`: added `status` attribute. (optional, default `ok`, `String`) + ## WordPress 148 @momozw 2023-02-20 diff --git a/Podfile b/Podfile index 6db0110d08fc..07988c318684 100644 --- a/Podfile +++ b/Podfile @@ -49,7 +49,7 @@ def wordpress_ui end def wordpress_kit - pod 'WordPressKit', '~> 8.1.0-beta' + pod 'WordPressKit', '~> 8.2-beta' # pod 'WordPressKit', git: 'https://github.com/wordpress-mobile/WordPressKit-iOS.git', branch: '' # pod 'WordPressKit', git: 'https://github.com/wordpress-mobile/WordPressKit-iOS.git', tag: '' # pod 'WordPressKit', git: 'https://github.com/wordpress-mobile/WordPressKit-iOS.git', commit: '' @@ -141,7 +141,7 @@ abstract_target 'Apps' do pod 'NSURL+IDN', '~> 0.4' - pod 'WPMediaPicker', '~> 1.8.8-beta.1' + pod 'WPMediaPicker', '~> 1.8-beta' ## while PR is in review: # pod 'WPMediaPicker', git: 'https://github.com/wordpress-mobile/MediaPicker-iOS.git', branch: '' # pod 'WPMediaPicker', path: '../MediaPicker-iOS' diff --git a/Podfile.lock b/Podfile.lock index 0f89785f21c4..4be140d7a802 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -54,7 +54,7 @@ PODS: - AppAuth/Core (~> 1.6) - GTMSessionFetcher/Core (< 3.0, >= 1.5) - GTMSessionFetcher/Core (1.7.2) - - Gutenberg (1.95.0): + - Gutenberg (1.96.0): - React (= 0.69.4) - React-CoreModules (= 0.69.4) - React-RCTImage (= 0.69.4) @@ -481,7 +481,7 @@ PODS: - React-Core - RNSVG (9.13.6): - React-Core - - RNTAztecView (1.95.0): + - RNTAztecView (1.96.0): - React-Core - WordPress-Aztec-iOS (~> 1.19.8) - SDWebImage (5.11.1): @@ -512,7 +512,7 @@ PODS: - WordPressKit (~> 8.0-beta) - WordPressShared (~> 2.1-beta) - WordPressUI (~> 1.7-beta) - - WordPressKit (8.1.0): + - WordPressKit (8.2.0): - Alamofire (~> 4.8.0) - NSObject-SafeExpectations (~> 0.0.4) - UIDeviceIdentifier (~> 2.0) @@ -545,18 +545,18 @@ DEPENDENCIES: - AppCenter (~> 4.1) - AppCenter/Distribute (~> 4.1) - Automattic-Tracks-iOS (~> 2.2) - - boost (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.95.0/third-party-podspecs/boost.podspec.json`) - - BVLinearGradient (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.95.0/third-party-podspecs/BVLinearGradient.podspec.json`) + - boost (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.96.0/third-party-podspecs/boost.podspec.json`) + - BVLinearGradient (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.96.0/third-party-podspecs/BVLinearGradient.podspec.json`) - CocoaLumberjack/Swift (~> 3.0) - CropViewController (= 2.5.3) - Down (~> 0.6.6) - - FBLazyVector (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.95.0/third-party-podspecs/FBLazyVector.podspec.json`) - - FBReactNativeSpec (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.95.0/third-party-podspecs/FBReactNativeSpec/FBReactNativeSpec.podspec.json`) + - FBLazyVector (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.96.0/third-party-podspecs/FBLazyVector.podspec.json`) + - FBReactNativeSpec (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.96.0/third-party-podspecs/FBReactNativeSpec/FBReactNativeSpec.podspec.json`) - FSInteractiveMap (from `https://github.com/wordpress-mobile/FSInteractiveMap.git`, tag `0.2.0`) - Gifu (= 3.2.0) - - glog (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.95.0/third-party-podspecs/glog.podspec.json`) + - glog (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.96.0/third-party-podspecs/glog.podspec.json`) - Gridicons (~> 1.1.0) - - Gutenberg (from `https://github.com/wordpress-mobile/gutenberg-mobile.git`, tag `v1.95.0`) + - Gutenberg (from `https://github.com/wordpress-mobile/gutenberg-mobile.git`, tag `v1.96.0`) - JTAppleCalendar (~> 8.0.2) - Kanvas (~> 1.4.4) - MediaEditor (~> 1.2.1) @@ -565,58 +565,58 @@ DEPENDENCIES: - "NSURL+IDN (~> 0.4)" - OCMock (~> 3.4.3) - OHHTTPStubs/Swift (~> 9.1.0) - - RCT-Folly (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.95.0/third-party-podspecs/RCT-Folly.podspec.json`) - - RCTRequired (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.95.0/third-party-podspecs/RCTRequired.podspec.json`) - - RCTTypeSafety (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.95.0/third-party-podspecs/RCTTypeSafety.podspec.json`) + - RCT-Folly (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.96.0/third-party-podspecs/RCT-Folly.podspec.json`) + - RCTRequired (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.96.0/third-party-podspecs/RCTRequired.podspec.json`) + - RCTTypeSafety (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.96.0/third-party-podspecs/RCTTypeSafety.podspec.json`) - Reachability (= 3.2) - - React (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.95.0/third-party-podspecs/React.podspec.json`) - - React-bridging (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.95.0/third-party-podspecs/React-bridging.podspec.json`) - - React-callinvoker (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.95.0/third-party-podspecs/React-callinvoker.podspec.json`) - - React-Codegen (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.95.0/third-party-podspecs/React-Codegen.podspec.json`) - - React-Core (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.95.0/third-party-podspecs/React-Core.podspec.json`) - - React-CoreModules (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.95.0/third-party-podspecs/React-CoreModules.podspec.json`) - - React-cxxreact (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.95.0/third-party-podspecs/React-cxxreact.podspec.json`) - - React-jsi (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.95.0/third-party-podspecs/React-jsi.podspec.json`) - - React-jsiexecutor (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.95.0/third-party-podspecs/React-jsiexecutor.podspec.json`) - - React-jsinspector (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.95.0/third-party-podspecs/React-jsinspector.podspec.json`) - - React-logger (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.95.0/third-party-podspecs/React-logger.podspec.json`) - - react-native-blur (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.95.0/third-party-podspecs/react-native-blur.podspec.json`) - - react-native-get-random-values (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.95.0/third-party-podspecs/react-native-get-random-values.podspec.json`) - - react-native-safe-area (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.95.0/third-party-podspecs/react-native-safe-area.podspec.json`) - - react-native-safe-area-context (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.95.0/third-party-podspecs/react-native-safe-area-context.podspec.json`) - - react-native-slider (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.95.0/third-party-podspecs/react-native-slider.podspec.json`) - - react-native-video (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.95.0/third-party-podspecs/react-native-video.podspec.json`) - - react-native-webview (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.95.0/third-party-podspecs/react-native-webview.podspec.json`) - - React-perflogger (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.95.0/third-party-podspecs/React-perflogger.podspec.json`) - - React-RCTActionSheet (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.95.0/third-party-podspecs/React-RCTActionSheet.podspec.json`) - - React-RCTAnimation (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.95.0/third-party-podspecs/React-RCTAnimation.podspec.json`) - - React-RCTBlob (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.95.0/third-party-podspecs/React-RCTBlob.podspec.json`) - - React-RCTImage (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.95.0/third-party-podspecs/React-RCTImage.podspec.json`) - - React-RCTLinking (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.95.0/third-party-podspecs/React-RCTLinking.podspec.json`) - - React-RCTNetwork (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.95.0/third-party-podspecs/React-RCTNetwork.podspec.json`) - - React-RCTSettings (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.95.0/third-party-podspecs/React-RCTSettings.podspec.json`) - - React-RCTText (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.95.0/third-party-podspecs/React-RCTText.podspec.json`) - - React-RCTVibration (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.95.0/third-party-podspecs/React-RCTVibration.podspec.json`) - - React-runtimeexecutor (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.95.0/third-party-podspecs/React-runtimeexecutor.podspec.json`) - - ReactCommon (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.95.0/third-party-podspecs/ReactCommon.podspec.json`) - - RNCClipboard (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.95.0/third-party-podspecs/RNCClipboard.podspec.json`) - - RNCMaskedView (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.95.0/third-party-podspecs/RNCMaskedView.podspec.json`) - - RNFastImage (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.95.0/third-party-podspecs/RNFastImage.podspec.json`) - - RNGestureHandler (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.95.0/third-party-podspecs/RNGestureHandler.podspec.json`) - - RNReanimated (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.95.0/third-party-podspecs/RNReanimated.podspec.json`) - - RNScreens (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.95.0/third-party-podspecs/RNScreens.podspec.json`) - - RNSVG (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.95.0/third-party-podspecs/RNSVG.podspec.json`) - - RNTAztecView (from `https://github.com/wordpress-mobile/gutenberg-mobile.git`, tag `v1.95.0`) + - React (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.96.0/third-party-podspecs/React.podspec.json`) + - React-bridging (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.96.0/third-party-podspecs/React-bridging.podspec.json`) + - React-callinvoker (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.96.0/third-party-podspecs/React-callinvoker.podspec.json`) + - React-Codegen (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.96.0/third-party-podspecs/React-Codegen.podspec.json`) + - React-Core (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.96.0/third-party-podspecs/React-Core.podspec.json`) + - React-CoreModules (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.96.0/third-party-podspecs/React-CoreModules.podspec.json`) + - React-cxxreact (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.96.0/third-party-podspecs/React-cxxreact.podspec.json`) + - React-jsi (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.96.0/third-party-podspecs/React-jsi.podspec.json`) + - React-jsiexecutor (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.96.0/third-party-podspecs/React-jsiexecutor.podspec.json`) + - React-jsinspector (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.96.0/third-party-podspecs/React-jsinspector.podspec.json`) + - React-logger (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.96.0/third-party-podspecs/React-logger.podspec.json`) + - react-native-blur (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.96.0/third-party-podspecs/react-native-blur.podspec.json`) + - react-native-get-random-values (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.96.0/third-party-podspecs/react-native-get-random-values.podspec.json`) + - react-native-safe-area (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.96.0/third-party-podspecs/react-native-safe-area.podspec.json`) + - react-native-safe-area-context (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.96.0/third-party-podspecs/react-native-safe-area-context.podspec.json`) + - react-native-slider (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.96.0/third-party-podspecs/react-native-slider.podspec.json`) + - react-native-video (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.96.0/third-party-podspecs/react-native-video.podspec.json`) + - react-native-webview (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.96.0/third-party-podspecs/react-native-webview.podspec.json`) + - React-perflogger (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.96.0/third-party-podspecs/React-perflogger.podspec.json`) + - React-RCTActionSheet (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.96.0/third-party-podspecs/React-RCTActionSheet.podspec.json`) + - React-RCTAnimation (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.96.0/third-party-podspecs/React-RCTAnimation.podspec.json`) + - React-RCTBlob (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.96.0/third-party-podspecs/React-RCTBlob.podspec.json`) + - React-RCTImage (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.96.0/third-party-podspecs/React-RCTImage.podspec.json`) + - React-RCTLinking (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.96.0/third-party-podspecs/React-RCTLinking.podspec.json`) + - React-RCTNetwork (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.96.0/third-party-podspecs/React-RCTNetwork.podspec.json`) + - React-RCTSettings (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.96.0/third-party-podspecs/React-RCTSettings.podspec.json`) + - React-RCTText (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.96.0/third-party-podspecs/React-RCTText.podspec.json`) + - React-RCTVibration (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.96.0/third-party-podspecs/React-RCTVibration.podspec.json`) + - React-runtimeexecutor (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.96.0/third-party-podspecs/React-runtimeexecutor.podspec.json`) + - ReactCommon (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.96.0/third-party-podspecs/ReactCommon.podspec.json`) + - RNCClipboard (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.96.0/third-party-podspecs/RNCClipboard.podspec.json`) + - RNCMaskedView (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.96.0/third-party-podspecs/RNCMaskedView.podspec.json`) + - RNFastImage (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.96.0/third-party-podspecs/RNFastImage.podspec.json`) + - RNGestureHandler (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.96.0/third-party-podspecs/RNGestureHandler.podspec.json`) + - RNReanimated (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.96.0/third-party-podspecs/RNReanimated.podspec.json`) + - RNScreens (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.96.0/third-party-podspecs/RNScreens.podspec.json`) + - RNSVG (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.96.0/third-party-podspecs/RNSVG.podspec.json`) + - RNTAztecView (from `https://github.com/wordpress-mobile/gutenberg-mobile.git`, tag `v1.96.0`) - Starscream (= 3.0.6) - SVProgressHUD (= 2.2.5) - SwiftLint (~> 0.50) - WordPress-Editor-iOS (~> 1.19.8) - WordPressAuthenticator (~> 6.1-beta) - - WordPressKit (~> 8.1.0-beta) + - WordPressKit (~> 8.2-beta) - WordPressShared (from `https://github.com/wordpress-mobile/WordPress-iOS-Shared.git`, branch `trunk`) - WordPressUI (~> 1.12.5) - - WPMediaPicker (~> 1.8.8-beta.1) - - Yoga (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.95.0/third-party-podspecs/Yoga.podspec.json`) + - WPMediaPicker (~> 1.8-beta) + - Yoga (from `https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.96.0/third-party-podspecs/Yoga.podspec.json`) - ZendeskSupportSDK (= 5.3.0) - ZIPFoundation (~> 0.9.8) @@ -676,111 +676,111 @@ SPEC REPOS: EXTERNAL SOURCES: boost: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.95.0/third-party-podspecs/boost.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.96.0/third-party-podspecs/boost.podspec.json BVLinearGradient: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.95.0/third-party-podspecs/BVLinearGradient.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.96.0/third-party-podspecs/BVLinearGradient.podspec.json FBLazyVector: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.95.0/third-party-podspecs/FBLazyVector.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.96.0/third-party-podspecs/FBLazyVector.podspec.json FBReactNativeSpec: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.95.0/third-party-podspecs/FBReactNativeSpec/FBReactNativeSpec.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.96.0/third-party-podspecs/FBReactNativeSpec/FBReactNativeSpec.podspec.json FSInteractiveMap: :git: https://github.com/wordpress-mobile/FSInteractiveMap.git :tag: 0.2.0 glog: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.95.0/third-party-podspecs/glog.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.96.0/third-party-podspecs/glog.podspec.json Gutenberg: :git: https://github.com/wordpress-mobile/gutenberg-mobile.git :submodules: true - :tag: v1.95.0 + :tag: v1.96.0 RCT-Folly: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.95.0/third-party-podspecs/RCT-Folly.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.96.0/third-party-podspecs/RCT-Folly.podspec.json RCTRequired: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.95.0/third-party-podspecs/RCTRequired.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.96.0/third-party-podspecs/RCTRequired.podspec.json RCTTypeSafety: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.95.0/third-party-podspecs/RCTTypeSafety.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.96.0/third-party-podspecs/RCTTypeSafety.podspec.json React: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.95.0/third-party-podspecs/React.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.96.0/third-party-podspecs/React.podspec.json React-bridging: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.95.0/third-party-podspecs/React-bridging.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.96.0/third-party-podspecs/React-bridging.podspec.json React-callinvoker: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.95.0/third-party-podspecs/React-callinvoker.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.96.0/third-party-podspecs/React-callinvoker.podspec.json React-Codegen: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.95.0/third-party-podspecs/React-Codegen.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.96.0/third-party-podspecs/React-Codegen.podspec.json React-Core: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.95.0/third-party-podspecs/React-Core.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.96.0/third-party-podspecs/React-Core.podspec.json React-CoreModules: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.95.0/third-party-podspecs/React-CoreModules.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.96.0/third-party-podspecs/React-CoreModules.podspec.json React-cxxreact: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.95.0/third-party-podspecs/React-cxxreact.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.96.0/third-party-podspecs/React-cxxreact.podspec.json React-jsi: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.95.0/third-party-podspecs/React-jsi.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.96.0/third-party-podspecs/React-jsi.podspec.json React-jsiexecutor: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.95.0/third-party-podspecs/React-jsiexecutor.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.96.0/third-party-podspecs/React-jsiexecutor.podspec.json React-jsinspector: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.95.0/third-party-podspecs/React-jsinspector.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.96.0/third-party-podspecs/React-jsinspector.podspec.json React-logger: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.95.0/third-party-podspecs/React-logger.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.96.0/third-party-podspecs/React-logger.podspec.json react-native-blur: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.95.0/third-party-podspecs/react-native-blur.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.96.0/third-party-podspecs/react-native-blur.podspec.json react-native-get-random-values: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.95.0/third-party-podspecs/react-native-get-random-values.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.96.0/third-party-podspecs/react-native-get-random-values.podspec.json react-native-safe-area: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.95.0/third-party-podspecs/react-native-safe-area.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.96.0/third-party-podspecs/react-native-safe-area.podspec.json react-native-safe-area-context: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.95.0/third-party-podspecs/react-native-safe-area-context.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.96.0/third-party-podspecs/react-native-safe-area-context.podspec.json react-native-slider: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.95.0/third-party-podspecs/react-native-slider.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.96.0/third-party-podspecs/react-native-slider.podspec.json react-native-video: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.95.0/third-party-podspecs/react-native-video.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.96.0/third-party-podspecs/react-native-video.podspec.json react-native-webview: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.95.0/third-party-podspecs/react-native-webview.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.96.0/third-party-podspecs/react-native-webview.podspec.json React-perflogger: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.95.0/third-party-podspecs/React-perflogger.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.96.0/third-party-podspecs/React-perflogger.podspec.json React-RCTActionSheet: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.95.0/third-party-podspecs/React-RCTActionSheet.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.96.0/third-party-podspecs/React-RCTActionSheet.podspec.json React-RCTAnimation: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.95.0/third-party-podspecs/React-RCTAnimation.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.96.0/third-party-podspecs/React-RCTAnimation.podspec.json React-RCTBlob: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.95.0/third-party-podspecs/React-RCTBlob.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.96.0/third-party-podspecs/React-RCTBlob.podspec.json React-RCTImage: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.95.0/third-party-podspecs/React-RCTImage.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.96.0/third-party-podspecs/React-RCTImage.podspec.json React-RCTLinking: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.95.0/third-party-podspecs/React-RCTLinking.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.96.0/third-party-podspecs/React-RCTLinking.podspec.json React-RCTNetwork: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.95.0/third-party-podspecs/React-RCTNetwork.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.96.0/third-party-podspecs/React-RCTNetwork.podspec.json React-RCTSettings: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.95.0/third-party-podspecs/React-RCTSettings.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.96.0/third-party-podspecs/React-RCTSettings.podspec.json React-RCTText: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.95.0/third-party-podspecs/React-RCTText.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.96.0/third-party-podspecs/React-RCTText.podspec.json React-RCTVibration: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.95.0/third-party-podspecs/React-RCTVibration.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.96.0/third-party-podspecs/React-RCTVibration.podspec.json React-runtimeexecutor: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.95.0/third-party-podspecs/React-runtimeexecutor.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.96.0/third-party-podspecs/React-runtimeexecutor.podspec.json ReactCommon: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.95.0/third-party-podspecs/ReactCommon.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.96.0/third-party-podspecs/ReactCommon.podspec.json RNCClipboard: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.95.0/third-party-podspecs/RNCClipboard.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.96.0/third-party-podspecs/RNCClipboard.podspec.json RNCMaskedView: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.95.0/third-party-podspecs/RNCMaskedView.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.96.0/third-party-podspecs/RNCMaskedView.podspec.json RNFastImage: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.95.0/third-party-podspecs/RNFastImage.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.96.0/third-party-podspecs/RNFastImage.podspec.json RNGestureHandler: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.95.0/third-party-podspecs/RNGestureHandler.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.96.0/third-party-podspecs/RNGestureHandler.podspec.json RNReanimated: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.95.0/third-party-podspecs/RNReanimated.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.96.0/third-party-podspecs/RNReanimated.podspec.json RNScreens: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.95.0/third-party-podspecs/RNScreens.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.96.0/third-party-podspecs/RNScreens.podspec.json RNSVG: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.95.0/third-party-podspecs/RNSVG.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.96.0/third-party-podspecs/RNSVG.podspec.json RNTAztecView: :git: https://github.com/wordpress-mobile/gutenberg-mobile.git :submodules: true - :tag: v1.95.0 + :tag: v1.96.0 WordPressShared: :branch: trunk :git: https://github.com/wordpress-mobile/WordPress-iOS-Shared.git Yoga: - :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.95.0/third-party-podspecs/Yoga.podspec.json + :podspec: https://raw.githubusercontent.com/wordpress-mobile/gutenberg-mobile/v1.96.0/third-party-podspecs/Yoga.podspec.json CHECKOUT OPTIONS: FSInteractiveMap: @@ -789,11 +789,11 @@ CHECKOUT OPTIONS: Gutenberg: :git: https://github.com/wordpress-mobile/gutenberg-mobile.git :submodules: true - :tag: v1.95.0 + :tag: v1.96.0 RNTAztecView: :git: https://github.com/wordpress-mobile/gutenberg-mobile.git :submodules: true - :tag: v1.95.0 + :tag: v1.96.0 WordPressShared: :commit: 9a010fdab8d31f9e1fa0511f231e7068ef0170b1 :git: https://github.com/wordpress-mobile/WordPress-iOS-Shared.git @@ -821,7 +821,7 @@ SPEC CHECKSUMS: Gridicons: 17d660b97ce4231d582101b02f8280628b141c9a GTMAppAuth: 0ff230db599948a9ad7470ca667337803b3fc4dd GTMSessionFetcher: 5595ec75acf5be50814f81e9189490412bad82ba - Gutenberg: e6093f6f8a066b9d108f21e377da697455b34134 + Gutenberg: c7f7ef9f905dfe0ba29c6c97abb345b5e8684b06 JTAppleCalendar: 932cadea40b1051beab10f67843451d48ba16c99 Kanvas: f932eaed3d3f47aae8aafb6c2d27c968bdd49030 libwebp: f62cb61d0a484ba548448a4bd52aabf150ff6eef @@ -872,7 +872,7 @@ SPEC CHECKSUMS: RNReanimated: 8abe8173f54110a9ae98a629d0d8bf343a84f739 RNScreens: bd1f43d7dfcd435bc11d4ee5c60086717c45a113 RNSVG: 259ef12cbec2591a45fc7c5f09d7aa09e6692533 - RNTAztecView: 205677f39556c17c3ff8cc1aa76e91d62f9fd1b3 + RNTAztecView: 0d03d4841b9c2086bb2fe23d9069882b6528ab34 SDWebImage: a7f831e1a65eb5e285e3fb046a23fcfbf08e696d SDWebImageWebPCoder: 908b83b6adda48effe7667cd2b7f78c897e5111d Sentry: d80553ff85ea72def75b792aaa5a71c158e51595 @@ -885,7 +885,7 @@ SPEC CHECKSUMS: WordPress-Aztec-iOS: 7d11d598f14c82c727c08b56bd35fbeb7dafb504 WordPress-Editor-iOS: 9eb9f12f21a5209cb837908d81ffe1e31cb27345 WordPressAuthenticator: b0b900696de5129a215adcd1e9ae6eb89da36ac8 - WordPressKit: bd029b8210508e2329a88e132275b9a4cd361eb6 + WordPressKit: d9015b097a58096033775dd8fc026d7d42005ae2 WordPressShared: 87f3ee89b0a3e83106106f13a8b71605fb8eb6d2 WordPressUI: c5be816f6c7b3392224ac21de9e521e89fa108ac WPMediaPicker: 0d40b8d66b6dfdaa2d6a41e3be51249ff5898775 @@ -900,6 +900,6 @@ SPEC CHECKSUMS: ZendeskSupportSDK: 3a8e508ab1d9dd22dc038df6c694466414e037ba ZIPFoundation: ae5b4b813d216d3bf0a148773267fff14bd51d37 -PODFILE CHECKSUM: 4c4326c4701e76f5d39582d08081cc660086b694 +PODFILE CHECKSUM: 8f3801df87501615cc7418c5a128cd9136848813 COCOAPODS: 1.11.3 diff --git a/RELEASE-NOTES.txt b/RELEASE-NOTES.txt index f152fa7b3bc4..359513d8fb50 100644 --- a/RELEASE-NOTES.txt +++ b/RELEASE-NOTES.txt @@ -1,16 +1,20 @@ 22.6 ----- +----- * [**] [internal] Check required WordPress version to set "galleryWithImageBlocks" flag [#20736] + 22.5 ----- * [*] [Jetpack-only] Reader: Fix the display of the followed topics in the filter sheet when they're written in non-latin languages. [#20702] * [*] [Jetpack-only] Reader: Fixed an issue that was causing the Report and Block actions to be missing from Post Menu actions sheet. [#20705] * [***] Enables editing of the site homepage for sites using block-based themes directly from the pages list. [#20713] +* [*] Block editor: Add disabled style to `Cell` component [https://github.com/WordPress/gutenberg/pull/50665] +* [**] Block editor: Fix undo/redo history when inserting a link configured to open in a new tab [https://github.com/WordPress/gutenberg/pull/50460] +* [**] [Jetpack-only] Block editor: Disable details settings for not belonged VideoPress videos [https://github.com/wordpress-mobile/gutenberg-mobile/pull/5782] +* [*] Block editor: [List block] Fix an issue when merging a list item into a Paragraph would remove its nested list items [https://github.com/wordpress-mobile/gutenberg-mobile/pull/5785] 22.4 ----- - * [*] [internal] [Jetpack-only] Domains Dashboard Card: Immediately opening domains search after tapping the card. [#20638] * [**] [Jetpack-only] Adds a dashboard card for viewing activity log. [#20569] * [**] [Jetpack-only] Adds a dashboard card for viewing pages. [#20524] diff --git a/WordPress/Classes/Models/PublicizeService.swift b/WordPress/Classes/Models/PublicizeService.swift index a11ea153b9f8..5dc3a35a6f6e 100644 --- a/WordPress/Classes/Models/PublicizeService.swift +++ b/WordPress/Classes/Models/PublicizeService.swift @@ -4,6 +4,8 @@ import CoreData open class PublicizeService: NSManagedObject { @objc static let googlePlusServiceID = "google_plus" @objc static let facebookServiceID = "facebook" + @objc static let defaultStatus = "ok" + @objc static let unsupportedStatus = "unsupported" @NSManaged open var connectURL: String @NSManaged open var detail: String @@ -16,4 +18,9 @@ open class PublicizeService: NSManagedObject { @NSManaged open var order: NSNumber @NSManaged open var serviceID: String @NSManaged open var type: String + @NSManaged open var status: String + + @objc open var isSupported: Bool { + status == Self.defaultStatus + } } diff --git a/WordPress/Classes/Services/BlogService.m b/WordPress/Classes/Services/BlogService.m index f83ecccf3637..d2a58264d1e5 100644 --- a/WordPress/Classes/Services/BlogService.m +++ b/WordPress/Classes/Services/BlogService.m @@ -150,6 +150,15 @@ - (void)syncBlogAndAllMetadata:(Blog *)blog completionHandler:(void (^)(void))co dispatch_group_leave(syncGroup); }]; + SharingService *publicizeService = [[SharingService alloc] initWithContextManager:[ContextManager sharedInstance]]; + dispatch_group_enter(syncGroup); + [publicizeService syncPublicizeServicesForBlog:blog success:^{ + dispatch_group_leave(syncGroup); + } failure:^(NSError * _Nullable error) { + DDLogError(@"Failed syncing publicize services for blog %@: %@", blog.url, error); + dispatch_group_leave(syncGroup); + }]; + dispatch_group_enter(syncGroup); [remote getAllAuthorsWithSuccess:^(NSArray *users) { [self updateMultiAuthor:users forBlog:blogObjectID]; diff --git a/WordPress/Classes/Services/DomainsService.swift b/WordPress/Classes/Services/DomainsService.swift index 96abfa1d4cf4..0c0f0a1128a2 100644 --- a/WordPress/Classes/Services/DomainsService.swift +++ b/WordPress/Classes/Services/DomainsService.swift @@ -46,6 +46,7 @@ struct DomainsService { self.mergeDomains(domains, forSite: siteID, in: context) }, completion: { completion?(.success(())) + NotificationCenter.default.post(name: .domainsServiceDomainsRefreshed, object: nil) }, on: .main) }, failure: { error in completion?(.failure(error)) @@ -228,3 +229,8 @@ extension DomainsService { self.init(coreDataStack: coreDataStack, remote: DomainsServiceRemote(wordPressComRestApi: account.wordPressComRestApi)) } } + +extension NSNotification.Name { + /// Sent when domains are refreshed by ``DomainsService`` + static let domainsServiceDomainsRefreshed = NSNotification.Name("DomainsServiceDomainsRefreshed") +} diff --git a/WordPress/Classes/Services/SharingService.swift b/WordPress/Classes/Services/SharingService.swift index d7867616b434..6d624bf0b1a2 100644 --- a/WordPress/Classes/Services/SharingService.swift +++ b/WordPress/Classes/Services/SharingService.swift @@ -34,14 +34,15 @@ import WordPressKit /// - failure: An optional failure block accepting an `NSError` parameter /// @objc func syncPublicizeServicesForBlog(_ blog: Blog, success: (() -> Void)?, failure: ((NSError?) -> Void)?) { - guard let remote = remoteForBlog(blog) else { + guard let remote = remoteForBlog(blog), + let blogID = blog.dotComID else { return } - remote.getPublicizeServices({ remoteServices in + + remote.getPublicizeServices(for: blogID, success: { remoteServices in // Process the results self.mergePublicizeServices(remoteServices, success: success) - }, - failure: failure) + }, failure: failure) } @@ -346,6 +347,7 @@ import WordPressKit pubService?.order = remoteService.order pubService?.serviceID = remoteService.serviceID pubService?.type = remoteService.type + pubService?.status = (remoteService.status.isEmpty ? PublicizeService.defaultStatus : remoteService.status) return pubService! } diff --git a/WordPress/Classes/Utility/Analytics/WPAnalyticsEvent.swift b/WordPress/Classes/Utility/Analytics/WPAnalyticsEvent.swift index 9d61d37bcf0d..cc93dfec7c58 100644 --- a/WordPress/Classes/Utility/Analytics/WPAnalyticsEvent.swift +++ b/WordPress/Classes/Utility/Analytics/WPAnalyticsEvent.swift @@ -487,6 +487,9 @@ import Foundation case directDomainsPurchaseDashboardCardTapped case directDomainsPurchaseDashboardCardHidden + // Jetpack Social - Twitter Deprecation Notice + case jetpackSocialTwitterNoticeLinkTapped + // Free to Paid Plans Dashboard Card case freeToPaidPlansDashboardCardShown case freeToPaidPlansDashboardCardTapped @@ -1338,6 +1341,10 @@ import Foundation case .directDomainsPurchaseDashboardCardTapped: return "direct_domains_purchase_dashboard_card_tapped" + // Jetpack Social - Twitter Deprecation Notice + case .jetpackSocialTwitterNoticeLinkTapped: + return "twitter_notice_link_tapped" + // Free to Paid Plans Dashboard Card case .freeToPaidPlansDashboardCardShown: return "free_to_paid_plan_dashboard_card_shown" @@ -1355,7 +1362,6 @@ import Foundation // Checkout case .checkoutWebViewViewed: return "checkout_webview_viewed" - } // END OF SWITCH } diff --git a/WordPress/Classes/Utility/BuildInformation/FeatureFlag.swift b/WordPress/Classes/Utility/BuildInformation/FeatureFlag.swift index 78e0a0d0724b..6078d1e0e006 100644 --- a/WordPress/Classes/Utility/BuildInformation/FeatureFlag.swift +++ b/WordPress/Classes/Utility/BuildInformation/FeatureFlag.swift @@ -39,6 +39,7 @@ enum FeatureFlag: Int, CaseIterable { case siteCreationDomainPurchasing case readerUserBlocking case personalizeHomeTab + case commentModerationUpdate /// Returns a boolean indicating if the feature is enabled var enabled: Bool { @@ -125,6 +126,8 @@ enum FeatureFlag: Int, CaseIterable { return true case .personalizeHomeTab: return false + case .commentModerationUpdate: + return false } } @@ -221,6 +224,8 @@ extension FeatureFlag { return "Reader User Blocking" case .personalizeHomeTab: return "Personalize Home Tab" + case .commentModerationUpdate: + return "Comments Moderation Update" } } } diff --git a/WordPress/Classes/Utility/WPError.m b/WordPress/Classes/Utility/WPError.m index df8cc525aad7..89eb893bc3c6 100644 --- a/WordPress/Classes/Utility/WPError.m +++ b/WordPress/Classes/Utility/WPError.m @@ -136,7 +136,7 @@ + (void)showAlertWithTitle:(NSString *)title message:(NSString *)message withSup UIAlertAction *action = [UIAlertAction actionWithTitle:supportText style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull __unused action) { - SupportTableViewController *supportVC = [SupportTableViewController new]; + SupportTableViewController *supportVC = [[SupportTableViewController alloc] init]; [supportVC showFromTabBar]; [WPError internalInstance].alertShowing = NO; }]; diff --git a/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/Cards/DashboardDomainRegistrationCardCell.swift b/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/Cards/DashboardDomainRegistrationCardCell.swift new file mode 100644 index 000000000000..513123b8c11f --- /dev/null +++ b/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/Cards/DashboardDomainRegistrationCardCell.swift @@ -0,0 +1,116 @@ +import UIKit +import WordPressFlux + +final class DashboardDomainRegistrationCardCell: BaseDashboardDomainsCardCell { + + // MARK: - View Model + + override var viewModel: DashboardDomainsCardViewModel { + return cardViewModel + } + + private lazy var cardViewModel: DashboardDomainsCardViewModel = { + let onViewTap: () -> Void = { [weak self] in + self?.cardTapped() + } + let onHideThisTap: UIActionHandler = { [weak self] _ in + self?.hideCardTapped() + } + return DashboardDomainsCardViewModel( + strings: .init( + title: Strings.title, + description: Strings.content, + hideThis: Strings.hideThis, + source: Strings.source + ), + onViewTap: onViewTap, + onHideThisTap: onHideThisTap + ) + }() + + // MARK: - User Interaction + + private func cardTapped() { + guard let props = makeUnwrappedProperties() else { + return + } + WPAnalytics.track(.domainCreditRedemptionTapped) + DomainsDashboardCoordinator.presentDomainsSuggestions( + in: props.presentingViewController, + source: Strings.source, + blog: props.blog + ) + } + + private func hideCardTapped() { + guard let props = makeUnwrappedProperties() else { + return + } + let service = BlogDashboardPersonalizationService(siteID: props.siteID.intValue) + service.setEnabled(false, for: .domainRegistration) + } + + // MARK: - Constants + + private static var hasLoggedDomainCreditPromptShownEvent: Bool = false + + // MARK: - View Lifecycle + + override func didMoveToSuperview() { + super.didMoveToSuperview() + guard !Self.hasLoggedDomainCreditPromptShownEvent else { + return + } + WPAnalytics.track(WPAnalyticsStat.domainCreditPromptShown) + Self.hasLoggedDomainCreditPromptShownEvent = true + } + + // MARK: - Helpers + + private func makeUnwrappedProperties() -> Unwrapped? { + return Unwrapped(presentingViewController: presentingViewController, blog: blog) + } + + // MARK: - Supporting Types + + /// Encapsulates the unwrapping logic and returns nil if one of the passed in parameters is nil. + private struct Unwrapped { + let presentingViewController: BlogDashboardViewController + let blog: Blog + let siteID: NSNumber + + init?(presentingViewController: BlogDashboardViewController?, + blog: Blog?) { + guard let presentingViewController, + let blog, + let siteID = blog.dotComID else { + return nil + } + self.presentingViewController = presentingViewController + self.blog = blog + self.siteID = siteID + } + } +} + +// MARK: - Extensions + +extension DashboardDomainRegistrationCardCell { + + private enum Strings { + static let title = NSLocalizedString( + "Register Domain", + comment: "Action to redeem domain credit." + ) + static let content = NSLocalizedString( + "All WordPress.com plans include a custom domain name. Register your free premium domain now.", + comment: "Information about redeeming domain credit on site dashboard." + ) + static let hideThis = NSLocalizedString( + "domain.dashboard.card.menu.hide", + value: "Hide this", + comment: "Title for a menu action in the context menu on the Jetpack install card." + ) + static let source = "domain_registration_dashboard_card" + } +} diff --git a/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/Cards/Domains/BaseDashboardDomainsCardCell.swift b/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/Cards/Domains/BaseDashboardDomainsCardCell.swift index 04f93256a223..4dbea785636c 100644 --- a/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/Cards/Domains/BaseDashboardDomainsCardCell.swift +++ b/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/Cards/Domains/BaseDashboardDomainsCardCell.swift @@ -77,7 +77,7 @@ class BaseDashboardDomainsCardCell: DashboardCollectionViewCell { private func setupView() { contentView.addSubview(cardFrameView) contentView.pinSubviewToAllEdges(cardFrameView, priority: Constants.cardFrameConstraintPriority) - contentView.accessibilityIdentifier = "dashboard-domains-card-contentview" + contentView.accessibilityIdentifier = viewModel.strings.accessibilityIdentifier cardFrameView.add(subview: containerStackView) let tap = UITapGestureRecognizer(target: self, action: #selector(viewTapped)) @@ -126,15 +126,18 @@ struct DashboardDomainsCardViewModel { let description: String let hideThis: String let source: String + let accessibilityIdentifier: String init(title: String = "", description: String = "", hideThis: String = "", - source: String = "") { + source: String = "", + accessibilityIdentifier: String = "") { self.title = title self.description = description self.hideThis = hideThis self.source = source + self.accessibilityIdentifier = accessibilityIdentifier } } diff --git a/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/Cards/Domains/DashboardDomainsCardCell.swift b/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/Cards/Domains/DashboardDomainsCardCell.swift index 6def7a826b67..17af2575d676 100644 --- a/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/Cards/Domains/DashboardDomainsCardCell.swift +++ b/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/Cards/Domains/DashboardDomainsCardCell.swift @@ -43,7 +43,8 @@ final class DashboardDomainsCardCell: BaseDashboardDomainsCardCell { title: Strings.title, description: Strings.description, hideThis: Strings.hideThis, - source: Strings.source + source: Strings.source, + accessibilityIdentifier: Strings.accessibilityIdentifier ), onViewShow: onViewShow, onViewTap: onViewTap, @@ -65,5 +66,6 @@ extension DashboardDomainsCardCell { value: "Hide this", comment: "Title for a menu action in the context menu on the Jetpack install card.") static let source = "domains_dashboard_card" + static let accessibilityIdentifier = "dashboard-domains-card-contentview" } } diff --git a/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/Cards/Free to Paid Plans/FreeToPaidPlansCoordinator.swift b/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/Cards/Free to Paid Plans/FreeToPaidPlansCoordinator.swift index 94a2cf908450..b0131502eedc 100644 --- a/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/Cards/Free to Paid Plans/FreeToPaidPlansCoordinator.swift +++ b/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/Cards/Free to Paid Plans/FreeToPaidPlansCoordinator.swift @@ -12,14 +12,28 @@ import UIKit includeSupportButton: false ) - domainSuggestionsViewController.domainAddedToCartCallback = { + let navigationController = UINavigationController(rootViewController: domainSuggestionsViewController) + + let planSelected = { checkoutURL in + let viewModel = CheckoutViewModel(url: checkoutURL) + let checkoutViewController = CheckoutViewController(viewModel: viewModel) + checkoutViewController.configureSandboxStore { + navigationController.pushViewController(checkoutViewController, animated: true) + } + + PlansTracker.trackCheckoutWebViewViewed(source: "plan_selection") + } + + let domainAddedToCart = { guard let viewModel = PlanSelectionViewModel(blog: blog) else { return } let planSelectionViewController = PlanSelectionViewController(viewModel: viewModel) - domainSuggestionsViewController.show(planSelectionViewController, sender: nil) + planSelectionViewController.planSelectedCallback = planSelected + navigationController.pushViewController(planSelectionViewController, animated: true) PlansTracker.trackPlanSelectionWebViewViewed(.domainAndPlanPackage, source: "domains_register") } + domainSuggestionsViewController.domainAddedToCartCallback = domainAddedToCart - dashboardViewController.show(domainSuggestionsViewController, sender: nil) + dashboardViewController.present(navigationController, animated: true) } } diff --git a/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/Cards/Free to Paid Plans/FreeToPaidPlansDashboardCardCell.swift b/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/Cards/Free to Paid Plans/FreeToPaidPlansDashboardCardCell.swift index b74759e6202e..dfe4e5df17be 100644 --- a/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/Cards/Free to Paid Plans/FreeToPaidPlansDashboardCardCell.swift +++ b/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/Cards/Free to Paid Plans/FreeToPaidPlansDashboardCardCell.swift @@ -52,7 +52,8 @@ final class FreeToPaidPlansDashboardCardCell: BaseDashboardDomainsCardCell { title: Strings.title, description: Strings.description, hideThis: Strings.hideThis, - source: Strings.source + source: Strings.source, + accessibilityIdentifier: Strings.accessibilityIdentifier ), onViewShow: onViewShow, onViewTap: onViewTap, @@ -74,5 +75,6 @@ extension FreeToPaidPlansDashboardCardCell { value: "Hide this", comment: "Title for a menu action in the context menu on the Free to Paid plans dashboard card.") static let source = "free_to_paid_plans_dashboard_card" + static let accessibilityIdentifier = "dashboard-free-to-paid-plans-card-contentview" } } diff --git a/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/DashboardCard.swift b/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/DashboardCard.swift index 0dff17d808f3..054247c49345 100644 --- a/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/DashboardCard.swift +++ b/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/DashboardCard.swift @@ -13,6 +13,7 @@ enum DashboardCard: String, CaseIterable { case blaze case domainsDashboardCard case freeToPaidPlansDashboardCard + case domainRegistration case todaysStats = "todays_stats" case draftPosts case scheduledPosts @@ -59,6 +60,8 @@ enum DashboardCard: String, CaseIterable { return DashboardDomainsCardCell.self case .freeToPaidPlansDashboardCard: return FreeToPaidPlansDashboardCardCell.self + case .domainRegistration: + return DashboardDomainRegistrationCardCell.self case .empty: return BlogDashboardEmptyStateCell.self case .personalize: @@ -107,6 +110,8 @@ enum DashboardCard: String, CaseIterable { return DomainsDashboardCardHelper.shouldShowCard(for: blog) && !FreeToPaidPlansDashboardCardHelper.shouldShowCard(for: blog) case .freeToPaidPlansDashboardCard: return FreeToPaidPlansDashboardCardHelper.shouldShowCard(for: blog) + case .domainRegistration: + return DomainCreditEligibilityChecker.canRedeemDomainCredit(blog: blog) case .empty: return false // Controlled manually based on other cards visibility case .personalize: diff --git a/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/Service/BlogDashboardPersonalizationService.swift b/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/Service/BlogDashboardPersonalizationService.swift index 254c698ff1b0..f90476fb037b 100644 --- a/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/Service/BlogDashboardPersonalizationService.swift +++ b/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/Service/BlogDashboardPersonalizationService.swift @@ -56,6 +56,8 @@ private func makeKey(for card: DashboardCard) -> String? { return "domains-dashboard-card-enabled-site-settings" case .freeToPaidPlansDashboardCard: return "free-to-paid-plans-dashboard-card-enabled-site-settings" + case .domainRegistration: + return "register-domain-dashboard-card" case .activityLog: return "activity-log-card-enabled-site-settings" case .pages: diff --git a/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/ViewModel/BlogDashboardViewModel.swift b/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/ViewModel/BlogDashboardViewModel.swift index cd2fa344a6e1..301b42d1e302 100644 --- a/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/ViewModel/BlogDashboardViewModel.swift +++ b/WordPress/Classes/ViewRelated/Blog/Blog Dashboard/ViewModel/BlogDashboardViewModel.swift @@ -133,6 +133,7 @@ private extension BlogDashboardViewModel { NotificationCenter.default.addObserver(self, selector: #selector(showScheduledCardIfNeeded), name: .newPostScheduled, object: nil) NotificationCenter.default.addObserver(self, selector: #selector(showNextPostCardIfNeeded), name: .newPostPublished, object: nil) NotificationCenter.default.addObserver(self, selector: #selector(loadCardsFromCache), name: .blogDashboardPersonalizationSettingsChanged, object: nil) + NotificationCenter.default.addObserver(self, selector: #selector(loadCardsFromCache), name: .domainsServiceDomainsRefreshed, object: nil) } func updateCurrentCards(cards: [DashboardCardModel]) { diff --git a/WordPress/Classes/ViewRelated/Blog/Blog Details/BlogDetailsViewController.m b/WordPress/Classes/ViewRelated/Blog/Blog Details/BlogDetailsViewController.m index 6be2c94b84fa..de539e7fe1c0 100644 --- a/WordPress/Classes/ViewRelated/Blog/Blog Details/BlogDetailsViewController.m +++ b/WordPress/Classes/ViewRelated/Blog/Blog Details/BlogDetailsViewController.m @@ -1020,13 +1020,15 @@ - (void)configureTableViewData [marr addNullableObject:[self jetpackCardSectionViewModel]]; } - if ([DomainCreditEligibilityChecker canRedeemDomainCreditWithBlog:self.blog]) { - if (!self.hasLoggedDomainCreditPromptShownEvent) { - [WPAnalytics track:WPAnalyticsStatDomainCreditPromptShown]; - self.hasLoggedDomainCreditPromptShownEvent = YES; - } - [marr addNullableObject:[self domainCreditSectionViewModel]]; - } + // This code will be removed in a future PR. +// if ([DomainCreditEligibilityChecker canRedeemDomainCreditWithBlog:self.blog]) { +// if (!self.hasLoggedDomainCreditPromptShownEvent) { +// [WPAnalytics track:WPAnalyticsStatDomainCreditPromptShown]; +// self.hasLoggedDomainCreditPromptShownEvent = YES; +// } +// [marr addNullableObject:[self domainCreditSectionViewModel]]; +// } + if ([self shouldShowQuickStartChecklist]) { [marr addNullableObject:[self quickStartSectionViewModel]]; } diff --git a/WordPress/Classes/ViewRelated/Blog/BlogPersonalization/BlogDashboardPersonalizationViewModel.swift b/WordPress/Classes/ViewRelated/Blog/BlogPersonalization/BlogDashboardPersonalizationViewModel.swift index d0875eb616ed..3b0e090e9bc3 100644 --- a/WordPress/Classes/ViewRelated/Blog/BlogPersonalization/BlogDashboardPersonalizationViewModel.swift +++ b/WordPress/Classes/ViewRelated/Blog/BlogPersonalization/BlogDashboardPersonalizationViewModel.swift @@ -48,7 +48,7 @@ private extension DashboardCard { return NSLocalizedString("personalizeHome.dashboardCard.activityLog", value: "Recent activity", comment: "Card title for the pesonalization menu") case .pages: return NSLocalizedString("personalizeHome.dashboardCard.pages", value: "Pages", comment: "Card title for the pesonalization menu") - case .quickStart, .nextPost, .createPost, .ghost, .failure, .personalize, .jetpackBadge, .jetpackInstall, .domainsDashboardCard, .freeToPaidPlansDashboardCard, .empty: + case .quickStart, .nextPost, .createPost, .ghost, .failure, .personalize, .jetpackBadge, .jetpackInstall, .domainsDashboardCard, .freeToPaidPlansDashboardCard, .domainRegistration, .empty: assertionFailure("\(self) card should not appear in the personalization menus") return "" // These cards don't appear in the personalization menus } diff --git a/WordPress/Classes/ViewRelated/Blog/SharingConnectionsViewController.m b/WordPress/Classes/ViewRelated/Blog/SharingConnectionsViewController.m index 105bb6df687d..d8c0db3bbb53 100644 --- a/WordPress/Classes/ViewRelated/Blog/SharingConnectionsViewController.m +++ b/WordPress/Classes/ViewRelated/Blog/SharingConnectionsViewController.m @@ -97,7 +97,7 @@ - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView } else { return 0; } - } else if ([self hasConnectedAccounts]) { + } else if ([self hasConnectedAccounts] && self.publicizeService.isSupported) { return 2; } @@ -130,6 +130,19 @@ - (void)tableView:(UITableView *)tableView willDisplayFooterView:(UIView *)view [WPStyleGuide configureTableViewSectionFooter:view]; } +- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section +{ + if (self.publicizeService.isSupported) { + return nil; + } + + TwitterDeprecationTableFooterView *footerView = [TwitterDeprecationTableFooterView new]; + footerView.presentingViewController = self; + footerView.source = @"social_connection_detail"; + + return footerView; +} + - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { if ([self hasConnectedAccounts] && section == 0) { @@ -191,7 +204,9 @@ - (void)configurePublicizeCell:(UITableViewCell *)cell atIndexPath:(NSIndexPath PublicizeConnection *connection = [[self connectionsForService] objectAtIndex:indexPath.row]; cell.textLabel.text = connection.externalDisplay; - if ([connection requiresUserAction]) { + if (![self.publicizeService isSupported]) { + cell.accessoryView = [WPStyleGuide sharingCellErrorAccessoryImageView]; + } else if ([connection requiresUserAction]) { cell.accessoryView = [WPStyleGuide sharingCellWarningAccessoryImageView]; } } diff --git a/WordPress/Classes/ViewRelated/Blog/SharingDetailViewController.m b/WordPress/Classes/ViewRelated/Blog/SharingDetailViewController.m index 7e783217a96e..eb556bb91696 100644 --- a/WordPress/Classes/ViewRelated/Blog/SharingDetailViewController.m +++ b/WordPress/Classes/ViewRelated/Blog/SharingDetailViewController.m @@ -15,6 +15,7 @@ @interface SharingDetailViewController () @property (nonatomic, strong, readonly) Blog *blog; @property (nonatomic, strong) PublicizeConnection *publicizeConnection; +@property (nonatomic, strong) PublicizeService *publicizeService; @property (nonatomic, strong) SharingAuthorizationHelper *helper; @end @@ -40,6 +41,7 @@ - (instancetype)initWithBlog:(Blog *)blog blog:self.blog publicizeService:publicizeService]; self.helper.delegate = self; + self.publicizeService = publicizeService; } } return self; @@ -103,12 +105,18 @@ - (NSManagedObjectContext *)managedObjectContext return self.blog.managedObjectContext; } +/// Returns true if the service is supported by Jetpack Social, but the connection is broken. +- (BOOL)isSupportedConnectionBroken +{ + return [self.publicizeConnection isBroken] && self.publicizeService.isSupported; +} + #pragma mark - TableView Delegate Methods - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { - if ([self.publicizeConnection requiresUserAction]) { + if ([self.publicizeConnection requiresUserAction] && self.publicizeService.isSupported) { return 3; } @@ -135,7 +143,7 @@ - (NSString *)tableView:(UITableView *)tableView titleForFooterInSection:(NSInte return [self textForFacebookFooter]; } - if ([self.publicizeConnection isBroken]) { + if ([self isSupportedConnectionBroken]) { return [self textForBrokenConnectionFooter]; } } @@ -159,7 +167,7 @@ - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(N if (indexPath.section == 0) { cell = [self switchTableViewCell]; - } else if (indexPath.section == 1 && [self.publicizeConnection isBroken]) { + } else if (indexPath.section == 1 && [self isSupportedConnectionBroken]) { [self configureReconnectCell:cell]; } else if (indexPath.section == 1 && [self.publicizeConnection mustDisconnectFacebook]) { @@ -176,7 +184,14 @@ - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath { [tableView deselectRowAtIndexPath:indexPath animated:YES]; - if (indexPath.section == 1 && [self.publicizeConnection isBroken]) { + // Do nothing when the service is unsupported. + // The first section's cell has a tap recognizer applied on the entire cell, preventing touch events from + // bubbling up to the table view delegate. But when the cell's interaction is disabled, this method will be called. + if (indexPath.section == 0 && !self.publicizeService.isSupported) { + return; + } + + if (indexPath.section == 1 && [self isSupportedConnectionBroken]) { [self reconnectPublicizeConnection]; } else if (indexPath.section == 1 && [self.publicizeConnection mustDisconnectFacebook]) { [self openFacebookFAQ]; @@ -191,6 +206,12 @@ - (SwitchTableViewCell *)switchTableViewCell cell.textLabel.text = NSLocalizedString(@"Available to all users", @""); cell.on = self.publicizeConnection.shared; + // disable interaction if the service is unsupported. + if (!self.publicizeService.isSupported) { + [cell.textLabel setTextColor:[UIColor secondaryLabelColor]]; + cell.userInteractionEnabled = NO; + } + __weak __typeof(self) weakSelf = self; cell.onChange = ^(BOOL value) { [weakSelf updateSharedGlobally:value]; @@ -275,7 +296,7 @@ - (void)promptToConfirmDisconnect alert.modalPresentationStyle = UIModalPresentationPopover; [self presentViewController:alert animated:YES completion:nil]; - NSUInteger section = [self.publicizeConnection isBroken] ? 2 : 1; + NSUInteger section = [self isSupportedConnectionBroken] ? 2 : 1; UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:section]]; UIPopoverPresentationController *presentationController = alert.popoverPresentationController; presentationController.permittedArrowDirections = UIPopoverArrowDirectionAny; diff --git a/WordPress/Classes/ViewRelated/Blog/SharingViewController.m b/WordPress/Classes/ViewRelated/Blog/SharingViewController.m index ca3947d428bf..0ee6e0593430 100644 --- a/WordPress/Classes/ViewRelated/Blog/SharingViewController.m +++ b/WordPress/Classes/ViewRelated/Blog/SharingViewController.m @@ -7,10 +7,11 @@ #import #import -typedef NS_ENUM(NSInteger, SharingSectionIdentifier){ - SharingPublicizeServices = 0, - SharingButtons, - SharingSectionCount, +typedef NS_ENUM(NSInteger, SharingSectionType) { + SharingSectionUndefined = 1000, + SharingSectionAvailableServices, + SharingSectionUnsupported, + SharingSectionSharingButtons }; static NSString *const CellIdentifier = @"CellIdentifier"; @@ -18,7 +19,17 @@ typedef NS_ENUM(NSInteger, SharingSectionIdentifier){ @interface SharingViewController () @property (nonatomic, strong, readonly) Blog *blog; -@property (nonatomic, strong) NSArray *publicizeServices; +@property (nonatomic, strong) NSArray *publicizeServices; + +// Contains Publicize services that are currently available for use. +@property (nonatomic, strong) NSArray *supportedServices; + +// Contains unsupported Publicize services that are deprecated or temporarily disabled. +@property (nonatomic, strong) NSArray *unsupportedServices; + +// A list of `SharingSectionType` that represents the sections displayed in the table view. +@property (nonatomic, strong) NSArray *sections; + @property (nonatomic, weak) id delegate; @property (nonatomic) PublicizeServicesState *publicizeServicesState; @property (nonatomic) JetpackModuleHelper *jetpackModuleHelper; @@ -34,6 +45,8 @@ - (instancetype)initWithBlog:(Blog *)blog delegate:(id)delegate if (self) { _blog = blog; _publicizeServices = [NSMutableArray new]; + _supportedServices = @[]; + _unsupportedServices = @[]; _delegate = delegate; _publicizeServicesState = [PublicizeServicesState new]; } @@ -77,13 +90,13 @@ - (void)viewWillAppear:(BOOL)animated [self.tableView reloadData]; } --(void)viewWillDisappear:(BOOL)animated +- (void)viewWillDisappear:(BOOL)animated { [super viewWillDisappear:animated]; [ReachabilityUtils dismissNoInternetConnectionNotice]; } --(void)presentationControllerDidDismiss:(UIPresentationController *)presentationController +- (void)presentationControllerDidDismiss:(UIPresentationController *)presentationController { [self notifyDelegatePublicizeServicesChangedIfNeeded]; } @@ -92,6 +105,25 @@ - (void)refreshPublicizers { self.publicizeServices = [PublicizeService allPublicizeServicesInContext:[self managedObjectContext] error:nil]; + // Separate supported and unsupported Publicize services. + NSPredicate *supportedPredicate = [NSPredicate predicateWithFormat:@"status == %@", PublicizeService.defaultStatus]; + self.supportedServices = [self.publicizeServices filteredArrayUsingPredicate:supportedPredicate]; + + NSPredicate *unsupportedPredicate = [NSPredicate predicateWithFormat:@"status == %@", PublicizeService.unsupportedStatus]; + NSArray *unsupportedList = [self.publicizeServices filteredArrayUsingPredicate:unsupportedPredicate]; + + // only list unsupported services with existing connections. + NSMutableArray *unsupportedServicesWithConnections = [NSMutableArray new]; + for (PublicizeService *service in unsupportedList) { + if ([self connectionsForService:service].count > 0) { + [unsupportedServicesWithConnections addObject:service]; + } + } + self.unsupportedServices = unsupportedServicesWithConnections; + + // Refresh table sections in case anything changes. + [self refreshSections]; + [self.tableView reloadData]; } @@ -101,24 +133,60 @@ - (void)doneButtonTapped [self dismissViewControllerAnimated:YES completion:nil]; } +#pragma mark - Table view sections + +- (void)refreshSections { + NSMutableArray *sections = [NSMutableArray new]; + + if ([self.supportedServices count] > 0) { + [sections addObject:@(SharingSectionAvailableServices)]; + } + + if (self.unsupportedServices.count > 0) { + [sections addObject:@(SharingSectionUnsupported)]; + } + + if ([self.blog supportsShareButtons]) { + [sections addObject:@(SharingSectionSharingButtons)]; + } + + self.sections = sections; +} + +- (SharingSectionType)sectionTypeForIndex:(NSInteger)index +{ + if (index >= self.sections.count) { + return SharingSectionUndefined; + } + + return [self.sections objectAtIndex:index].intValue; +} + #pragma mark - UITableView Delegate methods - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { - NSInteger count = SharingSectionCount; - if (![self.blog supportsShareButtons]) { - count -= 1; - } - return count; + return self.sections.count; } - (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section { - switch (section) { - case SharingPublicizeServices: + SharingSectionType sectionType = [self sectionTypeForIndex:section]; + switch (sectionType) { + case SharingSectionAvailableServices: return NSLocalizedString(@"Jetpack Social Connections", @"Section title for Publicize services in Sharing screen"); - case SharingButtons: + + case SharingSectionUnsupported: + return NSLocalizedStringWithDefaultValue( + @"social.section.disabledTwitter.header", + nil, + [NSBundle mainBundle], + @"Twitter Auto-Sharing Is No Longer Available", + @"Section title for the disabled Twitter service in the Social screen"); + + case SharingSectionSharingButtons: return NSLocalizedString(@"Sharing Buttons", @"Section title for the sharing buttons section in the Sharing screen"); + default: return nil; } @@ -126,7 +194,8 @@ - (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInte - (NSString *)tableView:(UITableView *)tableView titleForFooterInSection:(NSInteger)section { - if (section == SharingPublicizeServices) { + SharingSectionType sectionType = [self sectionTypeForIndex:section]; + if (sectionType == SharingSectionAvailableServices) { return NSLocalizedString(@"Connect your favorite social media services to automatically share new posts with friends.", @""); } return nil; @@ -139,10 +208,13 @@ - (void)tableView:(UITableView *)tableView willDisplayFooterView:(UIView *)view - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { - switch (section) { - case SharingPublicizeServices: - return self.publicizeServices.count; - case SharingButtons: + SharingSectionType sectionType = [self sectionTypeForIndex:section]; + switch (sectionType) { + case SharingSectionAvailableServices: + return self.supportedServices.count; + case SharingSectionUnsupported: + return self.unsupportedServices.count; + case SharingSectionSharingButtons: return 1; default: return 0; @@ -151,6 +223,7 @@ - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { + // TODO: Remove? if ([self.publicizeServices count] > 0) { PublicizeService *publicizer = self.publicizeServices[indexPath.row]; NSArray *connections = [self connectionsForService:publicizer]; @@ -177,23 +250,45 @@ - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(N cell.accessoryView = nil; } - if (indexPath.section == SharingPublicizeServices) { - [self configurePublicizeCell:cell atIndexPath:indexPath]; + SharingSectionType sectionType = [self sectionTypeForIndex:indexPath.section]; + switch (sectionType) { + case SharingSectionAvailableServices: // fallthrough + case SharingSectionUnsupported: + [self configurePublicizeCell:cell atIndexPath:indexPath]; + break; + + case SharingSectionSharingButtons: + cell.textLabel.text = NSLocalizedString(@"Manage", @"Verb. Text label. Tapping displays a screen where the user can configure 'share' buttons for third-party services."); + cell.detailTextLabel.text = nil; + cell.imageView.image = nil; + break; - } else if (indexPath.section == SharingButtons) { - cell.textLabel.text = NSLocalizedString(@"Manage", @"Verb. Text label. Tapping displays a screen where the user can configure 'share' buttons for third-party services."); - cell.detailTextLabel.text = nil; - cell.imageView.image = nil; + default: + return [UITableViewCell new]; } return cell; } +- (PublicizeService *)publicizeServiceForIndexPath:(NSIndexPath *)indexPath +{ + SharingSectionType sectionType = [self sectionTypeForIndex:indexPath.section]; + switch (sectionType) { + case SharingSectionAvailableServices: + return self.supportedServices[indexPath.row]; + case SharingSectionUnsupported: + return self.unsupportedServices[indexPath.row]; + default: + return nil; + } +} + - (void)configurePublicizeCell:(UITableViewCell *)cell atIndexPath:(NSIndexPath *)indexPath { - PublicizeService *publicizer = self.publicizeServices[indexPath.row]; + PublicizeService *publicizer = [self publicizeServiceForIndexPath:indexPath]; NSArray *connections = [self connectionsForService:publicizer]; - + + // TODO: Remove? if ([publicizer.serviceID isEqualToString:PublicizeService.googlePlusServiceID] && [connections count] == 0) { // Temporarily hiding Google+ cell.hidden = YES; return; @@ -222,6 +317,11 @@ - (void)configurePublicizeCell:(UITableViewCell *)cell atIndexPath:(NSIndexPath cell.detailTextLabel.text = str; + if (![publicizer isSupported]) { + cell.accessoryView = [WPStyleGuide sharingCellErrorAccessoryImageView]; + return; + } + // Check if any of the connections are broken. for (PublicizeConnection *pubConn in connections) { if ([pubConn requiresUserAction]) { @@ -234,15 +334,25 @@ - (void)configurePublicizeCell:(UITableViewCell *)cell atIndexPath:(NSIndexPath - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { UIViewController *controller; - if (indexPath.section == 0) { - PublicizeService *publicizer = self.publicizeServices[indexPath.row]; - controller = [[SharingConnectionsViewController alloc] initWithBlog:self.blog publicizeService:publicizer]; - [WPAppAnalytics track:WPAnalyticsStatSharingOpenedPublicize withBlog:self.blog]; + SharingSectionType sectionType = [self sectionTypeForIndex:indexPath.section]; + switch (sectionType) { + case SharingSectionAvailableServices: // fallthrough + case SharingSectionUnsupported: { + PublicizeService *publicizer = [self publicizeServiceForIndexPath:indexPath]; + controller = [[SharingConnectionsViewController alloc] initWithBlog:self.blog publicizeService:publicizer]; + [WPAppAnalytics track:WPAnalyticsStatSharingOpenedPublicize withBlog:self.blog]; + + [[QuickStartTourGuide shared] visited:QuickStartTourElementConnections]; + break; + } - [[QuickStartTourGuide shared] visited:QuickStartTourElementConnections]; - } else { - controller = [[SharingButtonsViewController alloc] initWithBlog:self.blog]; - [WPAppAnalytics track:WPAnalyticsStatSharingOpenedSharingButtonSettings withBlog:self.blog]; + case SharingSectionSharingButtons: + controller = [[SharingButtonsViewController alloc] initWithBlog:self.blog]; + [WPAppAnalytics track:WPAnalyticsStatSharingOpenedSharingButtonSettings withBlog:self.blog]; + break; + + default: + return; } [self.navigationController pushViewController:controller animated:YES]; @@ -250,8 +360,19 @@ - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath - (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section { - if (section == SharingButtons && [SharingViewController jetpackBrandingVisibile]) { - return [self makeJetpackBadge]; + SharingSectionType sectionType = [self sectionTypeForIndex:section]; + switch (sectionType) { + case SharingSectionUnsupported: + return [self makeTwitterDeprecationFooterView]; + + case SharingSectionSharingButtons: + if ([SharingViewController jetpackBrandingVisibile]) { + return [self makeJetpackBadge]; + } + break; + + default: + break; } return nil; diff --git a/WordPress/Classes/ViewRelated/Blog/SharingViewController.swift b/WordPress/Classes/ViewRelated/Blog/SharingViewController.swift index 711f99359053..acd76a1a1adb 100644 --- a/WordPress/Classes/ViewRelated/Blog/SharingViewController.swift +++ b/WordPress/Classes/ViewRelated/Blog/SharingViewController.swift @@ -25,4 +25,15 @@ extension SharingViewController { JetpackBrandingCoordinator.presentOverlay(from: self) JetpackBrandingAnalyticsHelper.trackJetpackPoweredBadgeTapped(screen: .sharing) } + + // MARK: Twitter Deprecation + + @objc + func makeTwitterDeprecationFooterView() -> TwitterDeprecationTableFooterView { + let footerView = TwitterDeprecationTableFooterView() + footerView.presentingViewController = self + footerView.source = "social_connection_list" + + return footerView + } } diff --git a/WordPress/Classes/ViewRelated/Blog/TwitterDeprecationTableFooterView.swift b/WordPress/Classes/ViewRelated/Blog/TwitterDeprecationTableFooterView.swift new file mode 100644 index 000000000000..3a082c89cbc7 --- /dev/null +++ b/WordPress/Classes/ViewRelated/Blog/TwitterDeprecationTableFooterView.swift @@ -0,0 +1,126 @@ +/// A subclass implementation of `UITableViewHeaderFooterView` that displays a text with a tappable link. +/// Specifically used for Twitter deprecation purposes. +/// +@objc class TwitterDeprecationTableFooterView: UITableViewHeaderFooterView { + + // The view controller that will present the web view. + @objc weak var presentingViewController: UIViewController? = nil + + // For tracking purposes. See https://wp.me/pctCYC-OI#tracks + @objc var source: String? = nil + + private let label: UILabel = { + let label = UILabel() + label.translatesAutoresizingMaskIntoConstraints = false + label.numberOfLines = 0 + label.font = WPStyleGuide.tableviewSectionFooterFont() + label.textColor = .secondaryLabel + + let paragraphStyle = NSMutableParagraphStyle() + paragraphStyle.lineHeightMultiple = Constants.lineHeightMultiple + + let attributedString = NSMutableAttributedString(string: "\(Constants.deprecationNoticeText) ", attributes: [ + .paragraphStyle: paragraphStyle + ]) + + if let attachmentURL = Constants.blogPostURL { + let hyperlinkText = NSAttributedString(string: Constants.hyperlinkText, attributes: [ + .paragraphStyle: paragraphStyle, + .attachment: attachmentURL, + .foregroundColor: UIColor.brand + ]) + attributedString.append(hyperlinkText) + } + + label.attributedText = attributedString + label.isUserInteractionEnabled = true + + return label + }() + + // MARK: Methods + + override public init(reuseIdentifier: String?) { + super.init(reuseIdentifier: reuseIdentifier) + setupSubviews() + } + + required public init?(coder aDecoder: NSCoder) { + super.init(coder: aDecoder) + setupSubviews() + } +} + +// MARK: - Private methods + +private extension TwitterDeprecationTableFooterView { + + func setupSubviews() { + let tapGesture = UITapGestureRecognizer(target: self, action: #selector(labelTapped)) + label.addGestureRecognizer(tapGesture) + + contentView.addSubview(label) + contentView.pinSubviewToAllEdgeMargins(label) + } + + @objc func labelTapped(_ sender: UITapGestureRecognizer) { + guard let presentingViewController, + let source, + let attributedText = label.attributedText else { + return + } + + // detect the tap location within the attributed text. + let location = sender.location(in: label) + let textStorage = NSTextStorage(attributedString: attributedText) + let textContainer = NSTextContainer(size: label.bounds.size) + let layoutManager = NSLayoutManager() + layoutManager.addTextContainer(textContainer) + textStorage.addLayoutManager(layoutManager) + + textContainer.lineFragmentPadding = 0 + textContainer.lineBreakMode = label.lineBreakMode + textContainer.maximumNumberOfLines = label.numberOfLines + + let characterIndex = layoutManager.characterIndex(for: location, + in: textContainer, + fractionOfDistanceBetweenInsertionPoints: nil) + + guard characterIndex < textStorage.length else { + return + } + + let attributes = attributedText.attributes(at: characterIndex, effectiveRange: nil) + guard let attachmentURL = attributes[.attachment] as? URL else { + return + } + + WPAnalytics.track(.jetpackSocialTwitterNoticeLinkTapped, properties: ["source": source]) + + // Ideally this shouldn't be the responsibility of this class, but I'm keeping it simple since it's temporary. + let webViewController = WebViewControllerFactory.controller(url: attachmentURL, source: source) + let navigationController = UINavigationController(rootViewController: webViewController) + presentingViewController.present(navigationController, animated: true) + } + + // MARK: Constants + + enum Constants { + // adjust attributedText's line height. The default settings look slightly stretched. + static let lineHeightMultiple = 0.9 + + static let blogPostURL = URL(string: "https://wordpress.com/blog/2023/04/29/why-twitter-auto-sharing-is-coming-to-an-end/") + + static let deprecationNoticeText = NSLocalizedString( + "social.twitterDeprecation.text", + value: "Twitter auto-sharing is no longer available due to Twitter's changes in terms and pricing.", + comment: "A smallprint that hints the reason behind why Twitter is deprecated." + ) + + static let hyperlinkText = NSLocalizedString( + "social.twitterDeprecation.link", + value: "Find out more", + comment: "Text for a hyperlink that allows the user to learn more about the Twitter deprecation." + ) + } +} diff --git a/WordPress/Classes/ViewRelated/Blog/WPStyleGuide+Sharing.swift b/WordPress/Classes/ViewRelated/Blog/WPStyleGuide+Sharing.swift index 75d45f2db6cb..86d845df4d09 100644 --- a/WordPress/Classes/ViewRelated/Blog/WPStyleGuide+Sharing.swift +++ b/WordPress/Classes/ViewRelated/Blog/WPStyleGuide+Sharing.swift @@ -11,7 +11,6 @@ extension WPStyleGuide { /// - Returns: A UIImageView /// @objc public class func sharingCellWarningAccessoryImageView() -> UIImageView { - let imageSize = 20.0 let horizontalPadding = 8.0 let imageView = UIImageView(frame: CGRect(x: 0, y: 0, width: imageSize + horizontalPadding, height: imageSize)) @@ -22,6 +21,21 @@ extension WPStyleGuide { return imageView } + /// Create an UIImageView showing the notice gridicon. + /// + /// - Returns: A UIImageView + /// + @objc public class func sharingCellErrorAccessoryImageView() -> UIImageView { + let imageSize = 20.0 + let horizontalPadding = 8.0 + let imageView = UIImageView(frame: CGRect(x: 0, y: 0, width: imageSize + horizontalPadding, height: imageSize)) + + imageView.image = UIImage(named: "sharing-notice") + imageView.tintColor = .systemRed + imageView.contentMode = .right + return imageView + } + /// Creates an icon for the specified service, or a the default social icon. /// diff --git a/WordPress/Classes/ViewRelated/Domains/Domain credit/DomainCreditEligibilityChecker.swift b/WordPress/Classes/ViewRelated/Domains/Domain credit/DomainCreditEligibilityChecker.swift index 5b633e238a3b..31197d72b378 100644 --- a/WordPress/Classes/ViewRelated/Domains/Domain credit/DomainCreditEligibilityChecker.swift +++ b/WordPress/Classes/ViewRelated/Domains/Domain credit/DomainCreditEligibilityChecker.swift @@ -1,5 +1,5 @@ class DomainCreditEligibilityChecker: NSObject { @objc static func canRedeemDomainCredit(blog: Blog) -> Bool { - return (blog.isHostedAtWPcom || blog.isAtomic()) && blog.hasDomainCredit && JetpackFeaturesRemovalCoordinator.jetpackFeaturesEnabled() + return blog.canRegisterDomainWithPaidPlan && JetpackFeaturesRemovalCoordinator.jetpackFeaturesEnabled() } } diff --git a/WordPress/Classes/ViewRelated/Domains/Domain registration/CheckoutViewController.swift b/WordPress/Classes/ViewRelated/Domains/Domain registration/CheckoutViewController.swift new file mode 100644 index 000000000000..5fa669c80169 --- /dev/null +++ b/WordPress/Classes/ViewRelated/Domains/Domain registration/CheckoutViewController.swift @@ -0,0 +1,24 @@ +import UIKit + +struct CheckoutViewModel { + let url: URL +} + +final class CheckoutViewController: WebKitViewController { + let viewModel: CheckoutViewModel + + init(viewModel: CheckoutViewModel) { + self.viewModel = viewModel + + let configuration = WebViewControllerConfiguration(url: viewModel.url) + configuration.authenticateWithDefaultAccount() + configuration.secureInteraction = true + super.init(configuration: configuration) + } + + // MARK: - Required Init + + required init?(coder aDecoder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } +} diff --git a/WordPress/Classes/ViewRelated/Domains/Domain registration/PlanSelectionViewController.swift b/WordPress/Classes/ViewRelated/Domains/Domain registration/PlanSelectionViewController.swift index 745112b5df87..3ada117f8c2b 100644 --- a/WordPress/Classes/ViewRelated/Domains/Domain registration/PlanSelectionViewController.swift +++ b/WordPress/Classes/ViewRelated/Domains/Domain registration/PlanSelectionViewController.swift @@ -24,8 +24,13 @@ struct PlanSelectionViewModel { self.url = url } + func isPlanSelected(_ redirectionURL: URL) -> Bool { + return redirectionURL.absoluteString.starts(with: Constants.checkoutWebAddress) + } + enum Constants { static let plansWebAddress = "https://wordpress.com/plans/yearly" + static let checkoutWebAddress = "https://wordpress.com/checkout" static let domainAndPlanPackageParameter = "domainAndPlanPackage" static let jetpackAppPlansParameter = "jetpackAppPlans" } @@ -33,6 +38,9 @@ struct PlanSelectionViewModel { final class PlanSelectionViewController: WebKitViewController { let viewModel: PlanSelectionViewModel + var planSelectedCallback: ((URL) -> Void)? + + private var webViewURLChangeObservation: NSKeyValueObservation? init(viewModel: PlanSelectionViewModel) { self.viewModel = viewModel @@ -43,6 +51,29 @@ final class PlanSelectionViewController: WebKitViewController { super.init(configuration: configuration) } + override func viewWillAppear(_ animated: Bool) { + super.viewWillAppear(animated) + + observePlanSelection() + } + + private func observePlanSelection() { + webViewURLChangeObservation = webView.observe(\.url, options: .new) { [weak self] _, change in + guard let self = self, + let newURL = change.newValue as? URL else { + return + } + + if self.viewModel.isPlanSelected(newURL) { + self.planSelectedCallback?(newURL) + + /// Stay on Plan Selection page + self.webView.goBack() + self.webViewURLChangeObservation = nil + } + } + } + // MARK: - Required Init required init?(coder aDecoder: NSCoder) { diff --git a/WordPress/Classes/ViewRelated/Domains/Domain registration/RegisterDomainSuggestions/DomainSuggestionsTableViewController.swift b/WordPress/Classes/ViewRelated/Domains/Domain registration/RegisterDomainSuggestions/DomainSuggestionsTableViewController.swift index 3a9cb125e286..76e027713cc7 100644 --- a/WordPress/Classes/ViewRelated/Domains/Domain registration/RegisterDomainSuggestions/DomainSuggestionsTableViewController.swift +++ b/WordPress/Classes/ViewRelated/Domains/Domain registration/RegisterDomainSuggestions/DomainSuggestionsTableViewController.swift @@ -47,7 +47,6 @@ class DomainSuggestionsTableViewController: UITableViewController { } private var noResultsViewController: NoResultsViewController? - private var siteTitleSuggestions: [FullyQuotedDomainSuggestion] = [] private var searchSuggestions: [FullyQuotedDomainSuggestion] = [] { didSet { tableView.reloadSections(IndexSet(integer: Sections.suggestions.rawValue), with: .automatic) @@ -80,6 +79,7 @@ class DomainSuggestionsTableViewController: UITableViewController { let bundle = WordPressAuthenticator.bundle tableView.register(UINib(nibName: "SearchTableViewCell", bundle: bundle), forCellReuseIdentifier: SearchTableViewCell.reuseIdentifier) + tableView.accessibilityIdentifier = "DomainSuggestionsTable" setupBackgroundTapGestureRecognizer() } @@ -99,15 +99,12 @@ class DomainSuggestionsTableViewController: UITableViewController { // only procede with initial search if we don't have site title suggestions yet // (hopefully only the first time) - guard siteTitleSuggestions.count < 1, + guard searchSuggestions.count < 1, let nameToSearch = siteName else { return } - suggestDomains(for: nameToSearch) { [weak self] (suggestions) in - self?.siteTitleSuggestions = suggestions - self?.tableView.reloadSections(IndexSet(integer: Sections.suggestions.rawValue), with: .automatic) - } + suggestDomains(for: nameToSearch) } override func viewWillDisappear(_ animated: Bool) { @@ -128,7 +125,7 @@ class DomainSuggestionsTableViewController: UITableViewController { /// - Parameters: /// - searchTerm: string to base suggestions on /// - addSuggestions: function to call when results arrive - private func suggestDomains(for searchTerm: String, addSuggestions: @escaping (_: [FullyQuotedDomainSuggestion]) ->()) { + private func suggestDomains(for searchTerm: String) { guard !isSearching else { return } @@ -213,7 +210,7 @@ extension DomainSuggestionsTableViewController { if noSuggestions == true { return 1 } - return searchSuggestions.count > 0 ? searchSuggestions.count : siteTitleSuggestions.count + return searchSuggestions.count default: return 0 } @@ -233,11 +230,7 @@ extension DomainSuggestionsTableViewController { cell = noResultsCell() } else { let suggestion: FullyQuotedDomainSuggestion - if searchSuggestions.count > 0 { - suggestion = searchSuggestions[indexPath.row] - } else { - suggestion = siteTitleSuggestions[indexPath.row] - } + suggestion = searchSuggestions[indexPath.row] cell = suggestionCell(suggestion) } } @@ -497,11 +490,7 @@ extension DomainSuggestionsTableViewController { switch indexPath.section { case Sections.suggestions.rawValue: - if searchSuggestions.count > 0 { - selectedDomain = searchSuggestions[indexPath.row] - } else { - selectedDomain = siteTitleSuggestions[indexPath.row] - } + selectedDomain = searchSuggestions[indexPath.row] default: return } @@ -541,9 +530,7 @@ extension DomainSuggestionsTableViewController: SearchTableViewCellDelegate { return } - suggestDomains(for: searchTerm) { [weak self] (suggestions) in - self?.searchSuggestions = suggestions - } + suggestDomains(for: searchTerm) } } diff --git a/WordPress/Classes/ViewRelated/Domains/Domain registration/RegisterDomainSuggestions/RegisterDomainSuggestionsViewController.swift b/WordPress/Classes/ViewRelated/Domains/Domain registration/RegisterDomainSuggestions/RegisterDomainSuggestionsViewController.swift index 4a91d1745abf..edf8b19ede43 100644 --- a/WordPress/Classes/ViewRelated/Domains/Domain registration/RegisterDomainSuggestions/RegisterDomainSuggestionsViewController.swift +++ b/WordPress/Classes/ViewRelated/Domains/Domain registration/RegisterDomainSuggestions/RegisterDomainSuggestionsViewController.swift @@ -344,25 +344,8 @@ extension RegisterDomainSuggestionsViewController: NUXButtonViewControllerDelega WPAnalytics.track(.domainsPurchaseWebviewViewed, properties: WPAnalytics.domainsProperties(for: site), blog: site) - if let storeSandboxCookie = (HTTPCookieStorage.shared.cookies?.first { - - $0.properties?[.name] as? String == Constants.storeSandboxCookieName && - $0.properties?[.domain] as? String == Constants.storeSandboxCookieDomain - }) { - // this code will only run if a store sandbox cookie has been set - let webView = webViewController.webView - let cookieStore = webView.configuration.websiteDataStore.httpCookieStore - cookieStore.getAllCookies { [weak self] cookies in - - var newCookies = cookies - newCookies.append(storeSandboxCookie) - - cookieStore.setCookies(newCookies) { - self?.present(navController, animated: true) - } - } - } else { - present(navController, animated: true) + webViewController.configureSandboxStore { [weak self] in + self?.present(navController, animated: true) } } } diff --git a/WordPress/Classes/ViewRelated/Domains/Utility/WebKitViewController+SandboxStore.swift b/WordPress/Classes/ViewRelated/Domains/Utility/WebKitViewController+SandboxStore.swift new file mode 100644 index 000000000000..c9e294758305 --- /dev/null +++ b/WordPress/Classes/ViewRelated/Domains/Utility/WebKitViewController+SandboxStore.swift @@ -0,0 +1,30 @@ +import UIKit +import WebKit + +extension WebKitViewController { + func configureSandboxStore(_ completion: @escaping () -> Void) { + let storeSandboxCookieName = "store_sandbox" + let storeSandboxCookieDomain = ".wordpress.com" + + if let storeSandboxCookie = (HTTPCookieStorage.shared.cookies?.first { + + $0.properties?[.name] as? String == storeSandboxCookieName && + $0.properties?[.domain] as? String == storeSandboxCookieDomain + }) { + // this code will only run if a store sandbox cookie has been set + let webView = self.webView + let cookieStore = webView.configuration.websiteDataStore.httpCookieStore + cookieStore.getAllCookies { cookies in + + var newCookies = cookies + newCookies.append(storeSandboxCookie) + + cookieStore.setCookies(newCookies) { + completion() + } + } + } else { + completion() + } + } +} diff --git a/WordPress/Classes/ViewRelated/Post/PostSettingsViewController.m b/WordPress/Classes/ViewRelated/Post/PostSettingsViewController.m index a2668450d0da..702e2ffc2b49 100644 --- a/WordPress/Classes/ViewRelated/Post/PostSettingsViewController.m +++ b/WordPress/Classes/ViewRelated/Post/PostSettingsViewController.m @@ -73,6 +73,7 @@ @interface PostSettingsViewController () *unsupportedConnections; @property (nonatomic, strong) NoResultsViewController *noResultsView; @property (nonatomic, strong) NSObject *mediaLibraryChangeObserverKey; @@ -106,6 +107,7 @@ - (instancetype)initWithPost:(AbstractPost *)aPost self = [super initWithStyle:UITableViewStyleInsetGrouped]; if (self) { self.apost = aPost; + self.unsupportedConnections = @[]; } return self; } @@ -130,7 +132,7 @@ - (void)viewDidLoad self.visibilityList = @[NSLocalizedString(@"Public", @"Privacy setting for posts set to 'Public' (default). Should be the same as in core WP."), NSLocalizedString(@"Password protected", @"Privacy setting for posts set to 'Password protected'. Should be the same as in core WP."), NSLocalizedString(@"Private", @"Privacy setting for posts set to 'Private'. Should be the same as in core WP.")]; - + [self setupFormatsList]; [self setupPublicizeConnections]; @@ -165,7 +167,8 @@ - (void)viewWillAppear:(BOOL)animated [self.navigationController setNavigationBarHidden:NO animated:NO]; [self.navigationController setToolbarHidden:YES]; - + + [self setupPublicizeConnections]; // Refresh in case the user disconnects from unsupported services. [self configureMetaSectionRows]; [self reloadData]; } @@ -230,7 +233,27 @@ - (void)setupFormatsList - (void)setupPublicizeConnections { - self.publicizeConnections = self.post.blog.sortedConnections; + // Separate Twitter connections if the service is unsupported. + PublicizeService *twitterService = [PublicizeService lookupPublicizeServiceNamed:@"twitter" + inContext:self.apost.managedObjectContext]; + + if (!twitterService || [twitterService isSupported]) { + return; + } + + NSMutableArray *supportedConnections = [NSMutableArray new]; + NSMutableArray *unsupportedConnections = [NSMutableArray new]; + for (PublicizeConnection *connection in self.post.blog.sortedConnections) { + if ([connection.service isEqualToString:twitterService.serviceID]) { + [unsupportedConnections addObject:connection]; + continue; + } + + [supportedConnections addObject:connection]; + } + + self.publicizeConnections = supportedConnections; + self.unsupportedConnections = unsupportedConnections; } - (void)setupReachability @@ -289,6 +312,15 @@ - (void)synchPostFormatsAndDo:(void(^)(void))completionBlock }]; } +// sync the latest state of Twitter. +- (void)syncPublicizeServices +{ + __weak __typeof(self) weakSelf = self; + [self.sharingService syncPublicizeServicesForBlog:self.apost.blog success:^{ + [weakSelf setupPublicizeConnections]; + } failure:nil]; +} + #pragma mark - Instance Methods - (void)setApost:(AbstractPost *)apost @@ -357,12 +389,14 @@ - (BOOL)textFieldShouldReturn:(UITextField *)textField - (void)configureSections { NSNumber *stickyPostSection = @(PostSettingsSectionStickyPost); + NSNumber *disabledTwitterSection = @(PostSettingsSectionDisabledTwitter); NSMutableArray *sections = [@[ @(PostSettingsSectionTaxonomy), @(PostSettingsSectionMeta), @(PostSettingsSectionFormat), @(PostSettingsSectionFeaturedImage), stickyPostSection, @(PostSettingsSectionShare), + disabledTwitterSection, @(PostSettingsSectionMoreOptions) ] mutableCopy]; // Remove sticky post section for self-hosted non Jetpack site // and non admin user @@ -370,6 +404,11 @@ - (void)configureSections if (![self.apost.blog supports:BlogFeatureWPComRESTAPI] && !self.apost.blog.isAdmin) { [sections removeObject:stickyPostSection]; } + + if (self.unsupportedConnections.count == 0) { + [sections removeObject:disabledTwitterSection]; + } + self.sections = [sections copy]; } @@ -402,6 +441,9 @@ - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger } else if (sec == PostSettingsSectionShare) { return [self numberOfRowsForShareSection]; + } else if (sec == PostSettingsSectionDisabledTwitter) { + return self.unsupportedConnections.count; + } else if (sec == PostSettingsSectionMoreOptions) { return 2; @@ -431,6 +473,13 @@ - (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInte } else if (sec == PostSettingsSectionShare && [self numberOfRowsForShareSection] > 0) { return NSLocalizedString(@"Jetpack Social", @"Label for the Sharing section in post Settings. Should be the same as WP core."); + } else if (sec == PostSettingsSectionDisabledTwitter) { + return NSLocalizedStringWithDefaultValue(@"postSettings.section.disabledTwitter.header", + nil, + [NSBundle mainBundle], + @"Twitter Auto-Sharing Is No Longer Available", + @"Section title for the disabled Twitter service in the Post Settings screen"); + } else if (sec == PostSettingsSectionMoreOptions) { return NSLocalizedString(@"More Options", @"Label for the More Options area in post settings. Should use the same translation as core WP."); @@ -438,6 +487,20 @@ - (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInte return nil; } +- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section +{ + NSInteger sec = [[self.sections objectAtIndex:section] integerValue]; + if (sec == PostSettingsSectionDisabledTwitter) { + TwitterDeprecationTableFooterView *footerView = [[TwitterDeprecationTableFooterView alloc] init]; + footerView.presentingViewController = self; + footerView.source = @"post_settings"; + + return footerView; + } + + return nil; +} + - (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section { if ([self tableView:tableView numberOfRowsInSection:section] == 0) { @@ -496,7 +559,7 @@ - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(N cell = [self configureFeaturedImageCellForIndexPath:indexPath]; } else if (sec == PostSettingsSectionStickyPost) { cell = [self configureStickyPostCellForIndexPath:indexPath]; - } else if (sec == PostSettingsSectionShare) { + } else if (sec == PostSettingsSectionShare || sec == PostSettingsSectionDisabledTwitter) { cell = [self configureShareCellForIndexPath:indexPath]; } else if (sec == PostSettingsSectionMoreOptions) { cell = [self configureMoreOptionsCellForIndexPath:indexPath]; @@ -510,6 +573,7 @@ - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath [tableView deselectRowAtIndexPath:[self.tableView indexPathForSelectedRow] animated:YES]; UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath]; + NSInteger sec = [[self.sections objectAtIndex:indexPath.section] integerValue]; if (cell.tag == PostSettingsRowCategories) { [self showCategoriesSelection]; @@ -531,6 +595,8 @@ - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath [self showFeaturedImageSelector]; } else if (cell.tag == PostSettingsRowFeaturedImageRemove) { [self showFeaturedImageRemoveOrRetryActionAtIndexPath:indexPath]; + } else if (sec == PostSettingsSectionDisabledTwitter) { + [self showShareDetailForIndexPath:indexPath]; } else if (cell.tag == PostSettingsRowShareConnection) { [self toggleShareConnectionForIndexPath:indexPath]; } else if (cell.tag == PostSettingsRowShareMessage) { @@ -805,10 +871,12 @@ - (UITableViewCell *)configureShareCellForIndexPath:(NSIndexPath *)indexPath { UITableViewCell *cell; BOOL canEditSharing = [self.post canEditPublicizeSettings]; + NSInteger sec = [[self.sections objectAtIndex:indexPath.section] integerValue]; + NSArray *connections = sec == PostSettingsSectionShare ? self.publicizeConnections : self.unsupportedConnections; - if (indexPath.row < self.publicizeConnections.count) { + if (indexPath.row < connections.count) { cell = [self getWPTableViewImageAndAccessoryCell]; - PublicizeConnection *connection = self.publicizeConnections[indexPath.row]; + PublicizeConnection *connection = connections[indexPath.row]; UIImage *image = [WPStyleGuide iconForService: connection.service]; [cell.imageView setImage:image]; if (canEditSharing) { @@ -817,7 +885,9 @@ - (UITableViewCell *)configureShareCellForIndexPath:(NSIndexPath *)indexPath cell.textLabel.text = connection.externalDisplay; cell.textLabel.enabled = canEditSharing; if (connection.isBroken) { - cell.accessoryView = [WPStyleGuide sharingCellWarningAccessoryImageView]; + cell.accessoryView = sec == PostSettingsSectionShare ? + [WPStyleGuide sharingCellWarningAccessoryImageView] : + [WPStyleGuide sharingCellErrorAccessoryImageView]; } else { UISwitch *switchAccessory = [[UISwitch alloc] initWithFrame:CGRectZero]; // This interaction is handled at a cell level @@ -1076,6 +1146,18 @@ - (void)toggleShareConnectionForIndexPath:(NSIndexPath *) indexPath } } +- (void)showShareDetailForIndexPath:(NSIndexPath *)indexPath +{ + if (indexPath.row >= self.unsupportedConnections.count) { + return; + } + + PublicizeConnection *connection = self.unsupportedConnections[indexPath.row]; + SharingDetailViewController *controller = [[SharingDetailViewController alloc] initWithBlog:self.apost.blog + publicizeConnection:connection]; + [self.navigationController pushViewController:controller animated:YES]; +} + - (void)showEditShareMessageController { NSString *text = !self.post.publicizeMessage ? self.post.titleForDisplay : self.post.publicizeMessage; diff --git a/WordPress/Classes/ViewRelated/Post/PostSettingsViewController_Internal.h b/WordPress/Classes/ViewRelated/Post/PostSettingsViewController_Internal.h index 4e527d274ff5..6406aff1b79a 100644 --- a/WordPress/Classes/ViewRelated/Post/PostSettingsViewController_Internal.h +++ b/WordPress/Classes/ViewRelated/Post/PostSettingsViewController_Internal.h @@ -7,6 +7,7 @@ typedef enum { PostSettingsSectionFeaturedImage, PostSettingsSectionStickyPost, PostSettingsSectionShare, + PostSettingsSectionDisabledTwitter, // NOTE: Clean up when Twitter has been removed from Publicize services. PostSettingsSectionGeolocation, PostSettingsSectionMoreOptions } PostSettingsSection; diff --git a/WordPress/Classes/ViewRelated/Support/SupportTableViewController.swift b/WordPress/Classes/ViewRelated/Support/SupportTableViewController.swift index e5fd018e0cab..c0949bf62dcb 100644 --- a/WordPress/Classes/ViewRelated/Support/SupportTableViewController.swift +++ b/WordPress/Classes/ViewRelated/Support/SupportTableViewController.swift @@ -33,11 +33,15 @@ class SupportTableViewController: UITableViewController { fatalError("init(coder:) has not been implemented") } - required convenience init(dismissTapped: (() -> ())? = nil) { - self.init(style: .grouped) + required convenience init(dismissTapped: (() -> ())?) { + self.init(configuration: .init(), style: .grouped) self.dismissTapped = dismissTapped } + @objc public convenience init() { + self.init(configuration: .init(), style: .grouped) + } + // MARK: - View override func viewDidLoad() { diff --git a/WordPress/Classes/WordPress.xcdatamodeld/.xccurrentversion b/WordPress/Classes/WordPress.xcdatamodeld/.xccurrentversion index 889363d191e9..040a12ba47af 100644 --- a/WordPress/Classes/WordPress.xcdatamodeld/.xccurrentversion +++ b/WordPress/Classes/WordPress.xcdatamodeld/.xccurrentversion @@ -3,6 +3,6 @@ _XCCurrentVersionName - WordPress 148.xcdatamodel + WordPress 149.xcdatamodel diff --git a/WordPress/Classes/WordPress.xcdatamodeld/WordPress 149.xcdatamodel/contents b/WordPress/Classes/WordPress.xcdatamodeld/WordPress 149.xcdatamodel/contents new file mode 100644 index 000000000000..3b25273a5368 --- /dev/null +++ b/WordPress/Classes/WordPress.xcdatamodeld/WordPress 149.xcdatamodel/contents @@ -0,0 +1,1032 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/WordPress/Jetpack/Resources/release_notes.txt b/WordPress/Jetpack/Resources/release_notes.txt index 3283b346bb1a..2513f518aa77 100644 --- a/WordPress/Jetpack/Resources/release_notes.txt +++ b/WordPress/Jetpack/Resources/release_notes.txt @@ -1,9 +1,7 @@ -We added cards to your dashboard. The Activity Log card shows your three most recent activities, and the Pages card shows the last three pages you modified. - -We also made some important changes in the block editor. To prevent an app crash, deleted and undefined reusable blocks can no longer be converted to regular blocks. - -When you tap on a nested text block, you can immediately edit content in that block—no more tapping through every nesting level to get where you want to go. (Our fingers were getting tired, too.) - -Speaking of reusable blocks—we updated the “editing not supported” message to remove the mention of WordPress. We know what app we’re using, we promise. - -Finally, we fixed a bug where the app would crash if you tried to upload media to a classic block without giving WordPress access to your device’s media library. Instead, you’ll see a prompt asking for media access. Easy peasy, lemon squeezy. +* [*] Reader: Fix the display of the followed topics in the filter sheet when they're written in non-latin languages. [#20702] +* [*] Reader: Fixed an issue that was causing the Report and Block actions to be missing from Post Menu actions sheet. [#20705] +* [***] Enables editing of the site homepage for sites using block-based themes directly from the pages list. [#20713] +* [*] Block editor: Add disabled style to `Cell` component [https://github.com/WordPress/gutenberg/pull/50665] +* [**] Block editor: Fix undo/redo history when inserting a link configured to open in a new tab [https://github.com/WordPress/gutenberg/pull/50460] +* [**] Block editor: Disable details settings for not belonged VideoPress videos [https://github.com/wordpress-mobile/gutenberg-mobile/pull/5782] +* [*] Block editor: [List block] Fix an issue when merging a list item into a Paragraph would remove its nested list items [https://github.com/wordpress-mobile/gutenberg-mobile/pull/5785] diff --git a/WordPress/Resources/ar.lproj/Localizable.strings b/WordPress/Resources/ar.lproj/Localizable.strings index b17bdd50f55c..b3cf731a43e5 100644 --- a/WordPress/Resources/ar.lproj/Localizable.strings +++ b/WordPress/Resources/ar.lproj/Localizable.strings @@ -1,4 +1,4 @@ -/* Translation-Revision-Date: 2023-05-02 09:54:08+0000 */ +/* Translation-Revision-Date: 2023-05-17 13:54:09+0000 */ /* Plural-Forms: nplurals=6; plural=(n == 0) ? 0 : ((n == 1) ? 1 : ((n == 2) ? 2 : ((n % 100 >= 3 && n % 100 <= 10) ? 3 : ((n % 100 >= 11 && n % 100 <= 99) ? 4 : 5)))); */ /* Generator: GlotPress/4.0.0-alpha.4 */ /* Language: ar */ @@ -2744,11 +2744,11 @@ translators: Block name. %s: The localized block name */ /* No comment provided by engineer. */ "Edit video" = "تحرير الفيديو"; -/* No comment provided by engineer. */ -"Editing reusable blocks is not yet supported on WordPress for Android" = "تحرير المكوِّنات القابلة لإعادة الاستخدام غير مدعوم بعد على ووردبريس لنظام تشغيل Android"; +/* translators: %s: name of the host app (e.g. WordPress) */ +"Editing reusable blocks is not yet supported on %s for Android" = "تحرير المكوّنات القابلة لإعادة الاستخدام غير مدعوم بعد على %s لنظام التشغيل Android"; -/* No comment provided by engineer. */ -"Editing reusable blocks is not yet supported on WordPress for iOS" = "تحرير المكوِّنات القابلة لإعادة الاستخدام غير مدعوم بعد على ووردبريس لنظام تشغيل iOS"; +/* translators: %s: name of the host app (e.g. WordPress) */ +"Editing reusable blocks is not yet supported on %s for iOS" = "تحرير المكوّنات القابلة لإعادة الاستخدام غير مدعوم بعد على %s لنظام التشغيل iOS"; /* Editing GIF alert message. */ "Editing this GIF will remove its animation." = "سيؤدي تحرير ملف GIF هذا إلى إزالة الرسوم المتحركة الخاصة به."; @@ -10312,7 +10312,7 @@ translators: %s: Select control option value e.g: \"Auto, 25%\". */ "migration.welcome.title" = "مرحبًا بك في Jetpack!"; /* Description for the static screen displayed prompting users to switch the Jetpack app. */ -"movedToJetpack.description" = "تمت إزالة ميزات الإحصاءات والقارئ والتنبيهات وغيرها من الميزات التي يدعمها Jetpack من تطبيق ووردبريس، ويمكن العثور عليها الآن في تطبيق Jetpack."; +"movedToJetpack.description" = "يحتوي تطبيق Jetpack على كل وظائف تطبيق ووردبريس، إلى جانب وصول حصري الآن إلى ميزات Stats وReader وNotifications والمزيد."; /* Hint for the static screen displayed prompting users to switch the Jetpack app. */ "movedToJetpack.hint" = "التبديل مجاني، ولا يستغرق سوى بضع دقائق."; @@ -10324,13 +10324,13 @@ translators: %s: Select control option value e.g: \"Auto, 25%\". */ "movedToJetpack.learnMoreButtonTitle" = "معرفة المزيد على jetpack.com"; /* Title for the static screen displayed in the Stats screen prompting users to switch to the Jetpack app. */ -"movedToJetpack.notifications.title" = "انتقلت ميزة التنبيهات إلى تطبيق Jetpack."; +"movedToJetpack.notifications.title" = "استخدم ووردبريس مع ميزة Notifications في تطبيق Jetpack."; /* Title for the static screen displayed in the Reader screen prompting users to switch to the Jetpack app. */ -"movedToJetpack.reader.title" = "انتقلت ميزة القارئ إلى تطبيق Jetpack."; +"movedToJetpack.reader.title" = "استخدم ووردبريس مع ميزة Reader في تطبيق Jetpack."; /* Title for the static screen displayed in the Stats screen prompting users to switch to the Jetpack app. */ -"movedToJetpack.stats.title" = "انتقلت ميزة الإحصاءات إلى تطبيق Jetpack."; +"movedToJetpack.stats.title" = "استخدم ووردبريس مع ميزة Stats في تطبيق Jetpack."; /* Section title for the content table section in the blog details screen */ "my-site.menu.content.section.title" = "المحتوى"; @@ -10522,6 +10522,9 @@ Example: given a notice format "Following %@" and empty site name, this will be /* Template site address for the search bar. */ "site.cration.domain.site.address" = "https:\/\/yoursitename.com"; +/* The error message to show in the 'Site Creation > Assembly Step' when the domain checkout fails for unknown reasons. */ +"site.creation.assembly.step.domain.checkout.error.subtitle" = "تم إنشاء موقعك على الويب بنجاح، لكننا واجهنا مشكلة في أثناء إعداد نطاقك المخصص للسداد. يرجى المحاولة مجددًا أو الاتصال بالدعم للحصول على المساعدة."; + /* Site name description that sits in the template website view. */ "site.creation.domain.tooltip.description" = "على غرار المثال أعلاه، يسمح النطاق للأشخاص بالعثور على موقعك وزيارته من متصفح الويب لديهم."; diff --git a/WordPress/Resources/cs.lproj/Localizable.strings b/WordPress/Resources/cs.lproj/Localizable.strings index b7d027868db6..0a1f827c88e7 100644 --- a/WordPress/Resources/cs.lproj/Localizable.strings +++ b/WordPress/Resources/cs.lproj/Localizable.strings @@ -2726,12 +2726,6 @@ translators: Block name. %s: The localized block name */ /* No comment provided by engineer. */ "Edit video" = "Upravit video"; -/* No comment provided by engineer. */ -"Editing reusable blocks is not yet supported on WordPress for Android" = "Úpravy opakovaně použitelných bloků zatím nejsou na WordPressu pro Android podporovány"; - -/* No comment provided by engineer. */ -"Editing reusable blocks is not yet supported on WordPress for iOS" = "Úpravy opakovaně použitelných bloků zatím nejsou na WordPressu pro iOS podporovány"; - /* Editing GIF alert message. */ "Editing this GIF will remove its animation." = "Úpravou tohoto GIF odstraníte jeho animaci."; diff --git a/WordPress/Resources/de.lproj/Localizable.strings b/WordPress/Resources/de.lproj/Localizable.strings index 677f3e90c29c..063c9b813326 100644 --- a/WordPress/Resources/de.lproj/Localizable.strings +++ b/WordPress/Resources/de.lproj/Localizable.strings @@ -1,4 +1,4 @@ -/* Translation-Revision-Date: 2023-05-02 15:54:09+0000 */ +/* Translation-Revision-Date: 2023-05-17 15:54:09+0000 */ /* Plural-Forms: nplurals=2; plural=n != 1; */ /* Generator: GlotPress/4.0.0-alpha.4 */ /* Language: de */ @@ -2744,11 +2744,11 @@ translators: Block name. %s: The localized block name */ /* No comment provided by engineer. */ "Edit video" = "Video bearbeiten"; -/* No comment provided by engineer. */ -"Editing reusable blocks is not yet supported on WordPress for Android" = "Das Bearbeiten von wiederverwendbaren Blöcken wird in WordPress für Android noch nicht unterstützt"; +/* translators: %s: name of the host app (e.g. WordPress) */ +"Editing reusable blocks is not yet supported on %s for Android" = "Das Bearbeiten von wiederverwendbaren Blöcken wird in %s für Android noch nicht unterstützt"; -/* No comment provided by engineer. */ -"Editing reusable blocks is not yet supported on WordPress for iOS" = "Das Bearbeiten von wiederverwendbaren Blöcken wird in WordPress für iOS noch nicht unterstützt"; +/* translators: %s: name of the host app (e.g. WordPress) */ +"Editing reusable blocks is not yet supported on %s for iOS" = "Das Bearbeiten von wiederverwendbaren Blöcken wird in %s für iOS noch nicht unterstützt"; /* Editing GIF alert message. */ "Editing this GIF will remove its animation." = "Wenn dieses GIF bearbeitet wird, wird die Animation entfernt."; @@ -4238,6 +4238,9 @@ translators: Block name. %s: The localized block name */ /* A short label. A call to action to load more posts. */ "Load more posts" = "Lade weitere Beiträge"; +/* No comment provided by engineer. */ +"Loading" = "Wird geladen"; + /* Text displayed while loading the activity feed for a site */ "Loading Activities..." = "Aktivitäten werden geladen ..."; @@ -10309,7 +10312,7 @@ translators: %s: Select control option value e.g: \"Auto, 25%\". */ "migration.welcome.title" = "Willkommen bei Jetpack!"; /* Description for the static screen displayed prompting users to switch the Jetpack app. */ -"movedToJetpack.description" = "Statistiken, der Reader, Benachrichtigungen und weitere von Jetpack unterstützte Funktionen wurden aus der WordPress-App entfernt und sind ab sofort ausschließlich in der Jetpack-App verfügbar."; +"movedToJetpack.description" = "Die Jetpack-App verfügt über alle Funktionen der WordPress-App und bietet ab sofort exklusiven Zugriff auf Statistiken, den Reader, Benachrichtigungen und mehr."; /* Hint for the static screen displayed prompting users to switch the Jetpack app. */ "movedToJetpack.hint" = "Der Wechsel ist kostenlos und dauert nur eine Minute."; @@ -10321,13 +10324,13 @@ translators: %s: Select control option value e.g: \"Auto, 25%\". */ "movedToJetpack.learnMoreButtonTitle" = "Weitere Informationen auf jetpack.com"; /* Title for the static screen displayed in the Stats screen prompting users to switch to the Jetpack app. */ -"movedToJetpack.notifications.title" = "Benachrichtigungen wurden in die Jetpack-App verschoben."; +"movedToJetpack.notifications.title" = "Verwende WordPress mit Benachrichtigungen in der Jetpack-App."; /* Title for the static screen displayed in the Reader screen prompting users to switch to the Jetpack app. */ -"movedToJetpack.reader.title" = "Der Reader wurde in die Jetpack-App verschoben."; +"movedToJetpack.reader.title" = "Verwende WordPress mit dem Reader in der Jetpack-App."; /* Title for the static screen displayed in the Stats screen prompting users to switch to the Jetpack app. */ -"movedToJetpack.stats.title" = "Statistiken wurden in die Jetpack-App verschoben."; +"movedToJetpack.stats.title" = "Verwende WordPress mit Statistiken in der Jetpack-App."; /* Section title for the content table section in the blog details screen */ "my-site.menu.content.section.title" = "Inhalt"; @@ -10519,6 +10522,9 @@ Example: given a notice format "Following %@" and empty site name, this will be /* Template site address for the search bar. */ "site.cration.domain.site.address" = "https:\/\/yoursitename.com"; +/* The error message to show in the 'Site Creation > Assembly Step' when the domain checkout fails for unknown reasons. */ +"site.creation.assembly.step.domain.checkout.error.subtitle" = "Deine Website wurde erfolgreich erstellt, wir haben jedoch ein Problem festgestellt, als wir deine individuelle Domain für den Bezahlvorgang vorbereitet haben. Bitte versuche es erneut oder kontaktiere den Support, um Hilfe zu erhalten."; + /* Site name description that sits in the template website view. */ "site.creation.domain.tooltip.description" = "Eine Domain, wie sie oben im Beispiel zu sehen ist, ermöglicht es anderen Personen, deine Website über ihren Internetbrowser zu finden und zu besuchen."; diff --git a/WordPress/Resources/en-CA.lproj/Localizable.strings b/WordPress/Resources/en-CA.lproj/Localizable.strings index 3ef2a68dfa24..977b51dee6e5 100644 --- a/WordPress/Resources/en-CA.lproj/Localizable.strings +++ b/WordPress/Resources/en-CA.lproj/Localizable.strings @@ -2720,12 +2720,6 @@ translators: Block name. %s: The localized block name */ /* No comment provided by engineer. */ "Edit video" = "Edit video"; -/* No comment provided by engineer. */ -"Editing reusable blocks is not yet supported on WordPress for Android" = "Editing reusable blocks is not yet supported on WordPress for Android"; - -/* No comment provided by engineer. */ -"Editing reusable blocks is not yet supported on WordPress for iOS" = "Editing reusable blocks is not yet supported on WordPress for iOS"; - /* Editing GIF alert message. */ "Editing this GIF will remove its animation." = "Editing this GIF will remove its animation."; diff --git a/WordPress/Resources/en-GB.lproj/Localizable.strings b/WordPress/Resources/en-GB.lproj/Localizable.strings index 20cad8196a15..d3fe34af2f9c 100644 --- a/WordPress/Resources/en-GB.lproj/Localizable.strings +++ b/WordPress/Resources/en-GB.lproj/Localizable.strings @@ -2732,12 +2732,6 @@ translators: Block name. %s: The localized block name */ /* No comment provided by engineer. */ "Edit video" = "Edit video"; -/* No comment provided by engineer. */ -"Editing reusable blocks is not yet supported on WordPress for Android" = "Editing reusable blocks is not yet supported on WordPress for Android"; - -/* No comment provided by engineer. */ -"Editing reusable blocks is not yet supported on WordPress for iOS" = "Editing reusable blocks is not yet supported on WordPress for iOS"; - /* Editing GIF alert message. */ "Editing this GIF will remove its animation." = "Editing this GIF will remove its animation."; diff --git a/WordPress/Resources/en.lproj/Localizable.strings b/WordPress/Resources/en.lproj/Localizable.strings index 867084eb2c58..810d8bbc5a2d 100644 --- a/WordPress/Resources/en.lproj/Localizable.strings +++ b/WordPress/Resources/en.lproj/Localizable.strings @@ -245,6 +245,9 @@ /* translators: %s: social link name e.g: \"Instagram\". */ "%s has URL set" = "%s has URL set"; +/* translators: %s: embed block variant's label e.g: \"Twitter\". */ +"%s link" = "%s link"; + /* translators: %s: embed block variant's label e.g: \"Twitter\". */ "%s previews not yet available" = "%s previews not yet available"; @@ -1221,6 +1224,9 @@ /* Popup title about why this post is being opened in block editor */ "Block editor enabled" = "Block editor enabled"; +/* translators: displayed right after the block is grouped */ +"Block grouped" = "Block grouped"; + /* Jetpack Settings: Block malicious login attempts */ "Block malicious login attempts" = "Block malicious login attempts"; @@ -1240,6 +1246,9 @@ /* The title of a button that triggers blocking a site from the user's reader. */ "Block this site" = "Block this site"; +/* translators: displayed right after the block is ungrouped. */ +"Block ungrouped" = "Block ungrouped"; + /* Notice title when blocking a site succeeds. */ "Blocked site" = "Blocked site"; @@ -3585,6 +3594,15 @@ /* Explanatory text for clearing device media cache. */ "Free up storage space on this device by deleting temporary media files. This will not affect the media on your site." = "Free up storage space on this device by deleting temporary media files. This will not affect the media on your site."; +/* Description for the Free to Paid plans dashboard card. */ +"freeToPaidPlans.dashboard.card.description" = "Get a free domain for the first year, remove ads on your site, and increase your storage."; + +/* Title for a menu action in the context menu on the Free to Paid plans dashboard card. */ +"freeToPaidPlans.dashboard.card.menu.hide" = "Hide this"; + +/* Title for the Free to Paid plans dashboard card. */ +"freeToPaidPlans.dashboard.card.shortTitle" = "Free domain with an annual plan"; + /* Title of section that contains plugins' FAQ */ "Frequently Asked Questions" = "Frequently Asked Questions"; @@ -6135,6 +6153,12 @@ Please install the %3$@ to use the app with this site."; /* Promote the page with Blaze. */ "pages.blaze.actionTitle" = "Promote with Blaze"; +/* Subtitle of the theme template homepage cell */ +"pages.template.subtitle" = "Your homepage is using a Theme template and will open in the web editor."; + +/* Title of the theme template homepage cell */ +"pages.template.title" = "Homepage"; + /* Comments Paging Discussion Settings Settings: Comments Paging preferences */ @@ -6573,6 +6597,9 @@ Please install the %3$@ to use the app with this site."; /* Title for action sheet with featured media options. */ "postSettings.featuredImageUploadActionSheet.title" = "Featured Image Options"; +/* Section title for the disabled Twitter service in the Post Settings screen */ +"postSettings.section.disabledTwitter.header" = "Twitter Auto-Sharing Is No Longer Available"; + /* Subtitle for placeholder in Tenor picker. `The company name 'Tenor' should always be written as it is. */ "Powered by Tenor" = "Powered by Tenor"; @@ -6813,6 +6840,12 @@ Please install the %3$@ to use the app with this site."; /* Title of the screen that allows the user to change the Reader CSS URL for debug builds */ "Reader CSS URL" = "Reader CSS URL"; +/* Reader search button accessibility label. */ +"reader.navigation.search.button.label" = "Search"; + +/* Reader settings button accessibility label. */ +"reader.navigation.settings.button.label" = "Reader Settings"; + /* A default value used to fill in the site name when the followed site somehow has missing site name or URL. Example: given a notice format "Following %@" and empty site name, this will be "Following this site". */ "reader.notice.follow.site.unknown" = "this site"; @@ -7947,6 +7980,15 @@ Example: given a notice format "Following %@" and empty site name, this will be /* Title of a Quick Start Tour */ "Social sharing" = "Social sharing"; +/* Section title for the disabled Twitter service in the Social screen */ +"social.section.disabledTwitter.header" = "Twitter Auto-Sharing Is No Longer Available"; + +/* Text for a hyperlink that allows the user to learn more about the Twitter deprecation. */ +"social.twitterDeprecation.link" = "Find out more"; + +/* A smallprint that hints the reason behind why Twitter is deprecated. */ +"social.twitterDeprecation.text" = "Twitter auto-sharing is no longer available due to Twitter's changes in terms and pricing."; + /* No comment provided by engineer. */ "Some blocks have additional settings. Tap the settings icon on the bottom right of the block to view more options." = "Some blocks have additional settings. Tap the settings icon on the bottom right of the block to view more options."; diff --git a/WordPress/Resources/es.lproj/Localizable.strings b/WordPress/Resources/es.lproj/Localizable.strings index 1b9e66500e73..600dc29549df 100644 --- a/WordPress/Resources/es.lproj/Localizable.strings +++ b/WordPress/Resources/es.lproj/Localizable.strings @@ -1,4 +1,4 @@ -/* Translation-Revision-Date: 2023-05-01 10:42:31+0000 */ +/* Translation-Revision-Date: 2023-05-17 13:54:09+0000 */ /* Plural-Forms: nplurals=2; plural=n != 1; */ /* Generator: GlotPress/4.0.0-alpha.4 */ /* Language: es */ @@ -2744,11 +2744,11 @@ translators: Block name. %s: The localized block name */ /* No comment provided by engineer. */ "Edit video" = "Editar el vídeo"; -/* No comment provided by engineer. */ -"Editing reusable blocks is not yet supported on WordPress for Android" = "WordPress para Android aún no es compatible con editar bloques reutilizables"; +/* translators: %s: name of the host app (e.g. WordPress) */ +"Editing reusable blocks is not yet supported on %s for Android" = "La edición de bloques reutilizables todavía no está incluida en %s para Android"; -/* No comment provided by engineer. */ -"Editing reusable blocks is not yet supported on WordPress for iOS" = "WordPress para iOS aún no es compatible con editar bloques reutilizables"; +/* translators: %s: name of the host app (e.g. WordPress) */ +"Editing reusable blocks is not yet supported on %s for iOS" = "La edición de bloques reutilizables todavía no está incluida en %s para iOS"; /* Editing GIF alert message. */ "Editing this GIF will remove its animation." = "Editar este GIF eliminará su animación."; @@ -10312,7 +10312,7 @@ translators: %s: Select control option value e.g: \"Auto, 25%\". */ "migration.welcome.title" = "¡Te damos la bienvenida a Jetpack!"; /* Description for the static screen displayed prompting users to switch the Jetpack app. */ -"movedToJetpack.description" = "Hemos eliminado algunas funciones (como Estadísticas, Lector o Notificaciones, entre otras) de la aplicación de WordPress y, ahora, solo están disponibles en la de Jetpack."; +"movedToJetpack.description" = "La aplicación de Jetpack tiene todas las funciones de la aplicación de WordPress, y ahora ofrece acceso exclusivo a Estadísticas, Lector, Notificaciones y mucho más."; /* Hint for the static screen displayed prompting users to switch the Jetpack app. */ "movedToJetpack.hint" = "El cambio es gratuito y solo lleva un minuto."; @@ -10324,13 +10324,13 @@ translators: %s: Select control option value e.g: \"Auto, 25%\". */ "movedToJetpack.learnMoreButtonTitle" = "Más información en jetpack.com"; /* Title for the static screen displayed in the Stats screen prompting users to switch to the Jetpack app. */ -"movedToJetpack.notifications.title" = "Las notificaciones se han trasladado a la aplicación Jetpack."; +"movedToJetpack.notifications.title" = "Usa WordPress con las notificaciones en la aplicación de Jetpack."; /* Title for the static screen displayed in the Reader screen prompting users to switch to the Jetpack app. */ -"movedToJetpack.reader.title" = "El lector se ha trasladando a la aplicación de Jetpack."; +"movedToJetpack.reader.title" = "Usa WordPress con el lector en la aplicación de Jetpack."; /* Title for the static screen displayed in the Stats screen prompting users to switch to the Jetpack app. */ -"movedToJetpack.stats.title" = "La estadísticas ha trasladado a la aplicación de Jetpack."; +"movedToJetpack.stats.title" = "Usa WordPress con las estadísticas en la aplicación de Jetpack."; /* Section title for the content table section in the blog details screen */ "my-site.menu.content.section.title" = "Contenido"; @@ -10522,6 +10522,9 @@ Example: given a notice format "Following %@" and empty site name, this will be /* Template site address for the search bar. */ "site.cration.domain.site.address" = "https:\/\/yoursitename.com"; +/* The error message to show in the 'Site Creation > Assembly Step' when the domain checkout fails for unknown reasons. */ +"site.creation.assembly.step.domain.checkout.error.subtitle" = "Tu sitio web se ha creado correctamente, pero hemos detectado una incidencia al preparar tu dominio personalizado para finalizar la compra. Inténtalo de nuevo o ponte en contacto con el soporte si necesitas ayuda."; + /* Site name description that sits in the template website view. */ "site.creation.domain.tooltip.description" = "Como en el ejemplo superior, un dominio le permite a la gente encontrar y visitar tu sitio desde su navegador."; diff --git a/WordPress/Resources/fr.lproj/Localizable.strings b/WordPress/Resources/fr.lproj/Localizable.strings index 0c169fcda1f4..52e36a5c309a 100644 --- a/WordPress/Resources/fr.lproj/Localizable.strings +++ b/WordPress/Resources/fr.lproj/Localizable.strings @@ -1,4 +1,4 @@ -/* Translation-Revision-Date: 2023-05-02 13:54:08+0000 */ +/* Translation-Revision-Date: 2023-05-17 15:54:09+0000 */ /* Plural-Forms: nplurals=2; plural=n > 1; */ /* Generator: GlotPress/4.0.0-alpha.4 */ /* Language: fr */ @@ -2744,11 +2744,11 @@ translators: Block name. %s: The localized block name */ /* No comment provided by engineer. */ "Edit video" = "Modifier la vidéo"; -/* No comment provided by engineer. */ -"Editing reusable blocks is not yet supported on WordPress for Android" = "La modification des blocs réutilisables n’est pas encore prise en charge sur WordPress pour Android"; +/* translators: %s: name of the host app (e.g. WordPress) */ +"Editing reusable blocks is not yet supported on %s for Android" = "La modification des blocs réutilisables n’est pas encore prise en charge sur %s pour Android"; -/* No comment provided by engineer. */ -"Editing reusable blocks is not yet supported on WordPress for iOS" = "La modification des blocs réutilisables n’est pas encore prise en charge sur WordPress pour iOS"; +/* translators: %s: name of the host app (e.g. WordPress) */ +"Editing reusable blocks is not yet supported on %s for iOS" = "La modification des blocs réutilisables n’est pas encore prise en charge sur %s pour iOS"; /* Editing GIF alert message. */ "Editing this GIF will remove its animation." = "La modification de ce GIF supprimera son animation."; @@ -10312,7 +10312,7 @@ translators: %s: Select control option value e.g: \"Auto, 25%\". */ "migration.welcome.title" = "Bienvenue dans Jetpack !"; /* Description for the static screen displayed prompting users to switch the Jetpack app. */ -"movedToJetpack.description" = "Les statistiques, le lecteur, les notifications et d’autres fonctionnalités reposant sur Jetpack ont été supprimées de l’application WordPress et sont désormais uniquement disponibles dans l’application Jetpack."; +"movedToJetpack.description" = "L’application Jetpack dispose de toutes les fonctionnalités de l’application WordPress et inclut désormais un accès exclusif aux statistiques, au lecteur, aux notifications, et plus encore."; /* Hint for the static screen displayed prompting users to switch the Jetpack app. */ "movedToJetpack.hint" = "Passer d’une application à l’autre est gratuit et ne prend qu’une minute."; @@ -10324,13 +10324,13 @@ translators: %s: Select control option value e.g: \"Auto, 25%\". */ "movedToJetpack.learnMoreButtonTitle" = "Lire la suite sur jetpack.com"; /* Title for the static screen displayed in the Stats screen prompting users to switch to the Jetpack app. */ -"movedToJetpack.notifications.title" = "Les notifications sont désormais disponibles dans l’application Jetpack."; +"movedToJetpack.notifications.title" = "Utilisez WordPress avec les notifications dans l’application Jetpack."; /* Title for the static screen displayed in the Reader screen prompting users to switch to the Jetpack app. */ -"movedToJetpack.reader.title" = "Le lecteur est désormais disponible dans l’application Jetpack."; +"movedToJetpack.reader.title" = "Utilisez WordPress avec le lecteur dans l’application Jetpack."; /* Title for the static screen displayed in the Stats screen prompting users to switch to the Jetpack app. */ -"movedToJetpack.stats.title" = "Les statistiques sont désormais disponibles dans l’application Jetpack."; +"movedToJetpack.stats.title" = "Utilisez WordPress avec les statistiques dans l’application Jetpack."; /* Section title for the content table section in the blog details screen */ "my-site.menu.content.section.title" = "Contenu"; @@ -10522,6 +10522,9 @@ Example: given a notice format "Following %@" and empty site name, this will be /* Template site address for the search bar. */ "site.cration.domain.site.address" = "https:\/\/yoursitename.com"; +/* The error message to show in the 'Site Creation > Assembly Step' when the domain checkout fails for unknown reasons. */ +"site.creation.assembly.step.domain.checkout.error.subtitle" = "Votre site Web a été créé, mais nous avons rencontré un problème lors de la préparation de votre domaine personnalisé pour la validation de la commande. Réessayez ou contactez l’assistance pour obtenir de l’aide."; + /* Site name description that sits in the template website view. */ "site.creation.domain.tooltip.description" = "Comme le montre l’exemple ci-dessus, un domaine permet aux internautes de trouver et de visiter votre site depuis leur navigateur Web."; diff --git a/WordPress/Resources/he.lproj/Localizable.strings b/WordPress/Resources/he.lproj/Localizable.strings index 0ec388ff2c3e..91e6b502eef7 100644 --- a/WordPress/Resources/he.lproj/Localizable.strings +++ b/WordPress/Resources/he.lproj/Localizable.strings @@ -1,4 +1,4 @@ -/* Translation-Revision-Date: 2023-05-02 15:54:08+0000 */ +/* Translation-Revision-Date: 2023-05-17 17:54:08+0000 */ /* Plural-Forms: nplurals=2; plural=n != 1; */ /* Generator: GlotPress/4.0.0-alpha.4 */ /* Language: he_IL */ @@ -2744,11 +2744,11 @@ translators: Block name. %s: The localized block name */ /* No comment provided by engineer. */ "Edit video" = "לערוך וידאו"; -/* No comment provided by engineer. */ -"Editing reusable blocks is not yet supported on WordPress for Android" = "עריכת בלוקים לשימוש חוזר עדיין אינה נתמכת ב-WordPress למערכת Android"; +/* translators: %s: name of the host app (e.g. WordPress) */ +"Editing reusable blocks is not yet supported on %s for Android" = "עריכת בלוקים לשימוש חוזר עדיין אינה נתמכת ב-%s למערכת Android"; -/* No comment provided by engineer. */ -"Editing reusable blocks is not yet supported on WordPress for iOS" = "עריכת בלוקים לשימוש חוזר עדיין אינה נתמכת ב-WordPress למערכת iOS"; +/* translators: %s: name of the host app (e.g. WordPress) */ +"Editing reusable blocks is not yet supported on %s for iOS" = "עריכת בלוקים לשימוש חוזר עדיין אינה נתמכת ב-%s למערכת iOS"; /* Editing GIF alert message. */ "Editing this GIF will remove its animation." = "עריכה קובץ ה-GIF תסיר את ההנפשה שלו."; @@ -10312,7 +10312,7 @@ translators: %s: Select control option value e.g: \"Auto, 25%\". */ "migration.welcome.title" = "ברוך בואך אל Jetpack!"; /* Description for the static screen displayed prompting users to switch the Jetpack app. */ -"movedToJetpack.description" = "נתונים סטטיסטיים, Reader, הודעות ואפשרויות אחרות שמופעלות על ידי Jetpack הוסרו מאפליקציית WordPress וכעת ניתן לגשת אליהן רק באפליקציה של Jetpack."; +"movedToJetpack.description" = "באפליקציה של Jetpack יש את כל הפונקציונליות של האפליקציה של WordPress ועכשיו גם גישה בלעדית לנתונים סטטיסטיים, ל-Reader, להודעות ועוד."; /* Hint for the static screen displayed prompting users to switch the Jetpack app. */ "movedToJetpack.hint" = "ההחלפה היא חינמית ואורכת דקה בלבד."; @@ -10324,13 +10324,13 @@ translators: %s: Select control option value e.g: \"Auto, 25%\". */ "movedToJetpack.learnMoreButtonTitle" = "מידע נוסף באתר Jetpack.com"; /* Title for the static screen displayed in the Stats screen prompting users to switch to the Jetpack app. */ -"movedToJetpack.notifications.title" = "ההודעות עברו לאפליקציה של Jetpack."; +"movedToJetpack.notifications.title" = "להשתמש ב-WordPress עם 'הודעות' באפליקציה של Jetpack."; /* Title for the static screen displayed in the Reader screen prompting users to switch to the Jetpack app. */ -"movedToJetpack.reader.title" = "הכלי Reader עבר לאפליקציה של Jetpack."; +"movedToJetpack.reader.title" = "להשתמש ב-WordPress עם Reader באפליקציה של Jetpack."; /* Title for the static screen displayed in the Stats screen prompting users to switch to the Jetpack app. */ -"movedToJetpack.stats.title" = "הנתונים הסטטיסטיים עברו לאפליקציה של Jetpack."; +"movedToJetpack.stats.title" = "להשתמש ב-WordPress עם 'נתונים סטטיסטיים' באפליקציה של Jetpack."; /* Section title for the content table section in the blog details screen */ "my-site.menu.content.section.title" = "תוכן"; @@ -10522,6 +10522,9 @@ Example: given a notice format "Following %@" and empty site name, this will be /* Template site address for the search bar. */ "site.cration.domain.site.address" = "https:\/\/yoursitename.com"; +/* The error message to show in the 'Site Creation > Assembly Step' when the domain checkout fails for unknown reasons. */ +"site.creation.assembly.step.domain.checkout.error.subtitle" = "האתר שלך נוצר בהצלחה, אבל נתקלנו בבעיה במהלך ההכנה של הדומיין האישי שלך לתשלום בקופה. יש לנסות שוב או לפנות לתמיכה לעזרה."; + /* Site name description that sits in the template website view. */ "site.creation.domain.tooltip.description" = "כמו הדוגמה שמוצגת למעלה, דומיין מאפשר לאנשים למצוא את האתר שלך ולבקר בו מדפדפן האינטרנט שלהם."; diff --git a/WordPress/Resources/id.lproj/Localizable.strings b/WordPress/Resources/id.lproj/Localizable.strings index a1d79e713051..23de6611f0a6 100644 --- a/WordPress/Resources/id.lproj/Localizable.strings +++ b/WordPress/Resources/id.lproj/Localizable.strings @@ -1,4 +1,4 @@ -/* Translation-Revision-Date: 2023-05-02 08:02:36+0000 */ +/* Translation-Revision-Date: 2023-05-22 06:13:41+0000 */ /* Plural-Forms: nplurals=2; plural=n > 1; */ /* Generator: GlotPress/4.0.0-alpha.4 */ /* Language: id */ @@ -2744,11 +2744,11 @@ translators: Block name. %s: The localized block name */ /* No comment provided by engineer. */ "Edit video" = "Sunting video"; -/* No comment provided by engineer. */ -"Editing reusable blocks is not yet supported on WordPress for Android" = "Menyunting blok pakai ulang belum didukung di WordPress untuk Android"; +/* translators: %s: name of the host app (e.g. WordPress) */ +"Editing reusable blocks is not yet supported on %s for Android" = "Menyunting blok pakai ulang belum didukung di %s untuk Android"; -/* No comment provided by engineer. */ -"Editing reusable blocks is not yet supported on WordPress for iOS" = "Menyunting blok pakai ulang belum didukung di WordPress untuk iOS"; +/* translators: %s: name of the host app (e.g. WordPress) */ +"Editing reusable blocks is not yet supported on %s for iOS" = "Menyunting blok pakai ulang belum didukung di %s untuk iOS"; /* Editing GIF alert message. */ "Editing this GIF will remove its animation." = "Mengedit GIF ini akan menghapus animasinya."; @@ -10312,7 +10312,7 @@ translators: %s: Select control option value e.g: \"Auto, 25%\". */ "migration.welcome.title" = "Selamat datang di Jetpack!"; /* Description for the static screen displayed prompting users to switch the Jetpack app. */ -"movedToJetpack.description" = "Statistik, Pembaca, Pemberitahuan, dan beragam fitur lain berbasis Jetpack telah dihapus dari aplikasi WordPress dan hanya dapat ditemukan di aplikasi Jetpack."; +"movedToJetpack.description" = "Aplikasi Jetpack memiliki semua fungsionalitas aplikasi WordPress, dan sekarang memiliki akses eksklusif ke Statistik, Pembaca, Notifikasi, dan lainnya."; /* Hint for the static screen displayed prompting users to switch the Jetpack app. */ "movedToJetpack.hint" = "Beralihlah ke aplikasi—gratis dan prosesnya cepat!"; @@ -10324,13 +10324,13 @@ translators: %s: Select control option value e.g: \"Auto, 25%\". */ "movedToJetpack.learnMoreButtonTitle" = "Baca selengkapnya di jetpack.com"; /* Title for the static screen displayed in the Stats screen prompting users to switch to the Jetpack app. */ -"movedToJetpack.notifications.title" = "Pemberitahuan berpindah ke aplikasi Jetpack."; +"movedToJetpack.notifications.title" = "Gunakan WordPress dengan Pemberitahuan di aplikasi Jetpack."; /* Title for the static screen displayed in the Reader screen prompting users to switch to the Jetpack app. */ -"movedToJetpack.reader.title" = "Pembaca berpindah ke aplikasi Jetpack."; +"movedToJetpack.reader.title" = "Gunakan WordPress dengan Pembaca di aplikasi Jetpack."; /* Title for the static screen displayed in the Stats screen prompting users to switch to the Jetpack app. */ -"movedToJetpack.stats.title" = "Statistik berpindah ke aplikasi Jetpack."; +"movedToJetpack.stats.title" = "Gunakan WordPress dengan Statistik di aplikasi Jetpack."; /* Section title for the content table section in the blog details screen */ "my-site.menu.content.section.title" = "Konten"; @@ -10522,6 +10522,9 @@ Example: given a notice format "Following %@" and empty site name, this will be /* Template site address for the search bar. */ "site.cration.domain.site.address" = "https:\/\/namasitusanda.com"; +/* The error message to show in the 'Site Creation > Assembly Step' when the domain checkout fails for unknown reasons. */ +"site.creation.assembly.step.domain.checkout.error.subtitle" = "Situs Anda telah berhasil dibuat, tetapi terjadi masalah saat menyiapkan domain khusus Anda untuk checkout. Silakan coba lagi atau hubungi dukungan untuk mendapatkan bantuan."; + /* Site name description that sits in the template website view. */ "site.creation.domain.tooltip.description" = "Seperti contoh di atas, domain membantu orang untuk menemukan dan mengunjungi situs Anda dari peramban web mereka."; diff --git a/WordPress/Resources/it.lproj/Localizable.strings b/WordPress/Resources/it.lproj/Localizable.strings index a20f4b9dc65c..85b1d5c84399 100644 --- a/WordPress/Resources/it.lproj/Localizable.strings +++ b/WordPress/Resources/it.lproj/Localizable.strings @@ -1,4 +1,4 @@ -/* Translation-Revision-Date: 2023-05-03 11:54:09+0000 */ +/* Translation-Revision-Date: 2023-05-17 12:54:09+0000 */ /* Plural-Forms: nplurals=2; plural=n != 1; */ /* Generator: GlotPress/4.0.0-alpha.4 */ /* Language: it */ @@ -2744,11 +2744,11 @@ translators: Block name. %s: The localized block name */ /* No comment provided by engineer. */ "Edit video" = "Modifica video"; -/* No comment provided by engineer. */ -"Editing reusable blocks is not yet supported on WordPress for Android" = "La modifica dei blocchi riutilizzabili non è ancora supportata su WordPress per Android"; +/* translators: %s: name of the host app (e.g. WordPress) */ +"Editing reusable blocks is not yet supported on %s for Android" = "La modifica dei blocchi riutilizzabili non è ancora supportata su %s per Android"; -/* No comment provided by engineer. */ -"Editing reusable blocks is not yet supported on WordPress for iOS" = "La modifica dei blocchi riutilizzabili non è ancora supportata su WordPress per iOS"; +/* translators: %s: name of the host app (e.g. WordPress) */ +"Editing reusable blocks is not yet supported on %s for iOS" = "La modifica dei blocchi riutilizzabili non è ancora supportata su %s per iOS"; /* Editing GIF alert message. */ "Editing this GIF will remove its animation." = "La modifica di questa GIF rimuoverà la sua animazione."; @@ -4238,6 +4238,9 @@ translators: Block name. %s: The localized block name */ /* A short label. A call to action to load more posts. */ "Load more posts" = "Carica altri articoli"; +/* No comment provided by engineer. */ +"Loading" = "Caricamento"; + /* Text displayed while loading the activity feed for a site */ "Loading Activities..." = "Caricamento delle attività..."; @@ -10309,7 +10312,7 @@ translators: %s: Select control option value e.g: \"Auto, 25%\". */ "migration.welcome.title" = "Jetpack ti dà il benvenuto!"; /* Description for the static screen displayed prompting users to switch the Jetpack app. */ -"movedToJetpack.description" = "Statistiche, Reader, Notifiche e altre funzionalità basate su Jetpack sono state rimosse dall'app WordPress e ora è possibile trovale solamente nell'app Jetpack."; +"movedToJetpack.description" = "L'app Jetpack offre tutte le funzionalità dell'app WordPress e ora anche l'accesso esclusivo a Statistiche, Reader, Notifiche e altro."; /* Hint for the static screen displayed prompting users to switch the Jetpack app. */ "movedToJetpack.hint" = "Il passaggio è gratuito e richiede solo un minuto."; @@ -10321,13 +10324,13 @@ translators: %s: Select control option value e.g: \"Auto, 25%\". */ "movedToJetpack.learnMoreButtonTitle" = "Maggiori informazioni su jetpack.com"; /* Title for the static screen displayed in the Stats screen prompting users to switch to the Jetpack app. */ -"movedToJetpack.notifications.title" = "È stato effettuato lo spostamento di Notifiche nell'app Jetpack"; +"movedToJetpack.notifications.title" = "Usa WordPress con Notifiche nell'app Jetpack."; /* Title for the static screen displayed in the Reader screen prompting users to switch to the Jetpack app. */ -"movedToJetpack.reader.title" = "È stato effettuato lo spostamento del Reader nell'app Jetpack."; +"movedToJetpack.reader.title" = "Usa WordPress con Reader nell'app Jetpack."; /* Title for the static screen displayed in the Stats screen prompting users to switch to the Jetpack app. */ -"movedToJetpack.stats.title" = "È stato effettuato lo spostamento di Statistiche nell'app Jetpack."; +"movedToJetpack.stats.title" = "Usa WordPress con Statistiche nell'app Jetpack."; /* Section title for the content table section in the blog details screen */ "my-site.menu.content.section.title" = "Contenuto"; @@ -10519,6 +10522,9 @@ Example: given a notice format "Following %@" and empty site name, this will be /* Template site address for the search bar. */ "site.cration.domain.site.address" = "https:\/\/yoursitename.com"; +/* The error message to show in the 'Site Creation > Assembly Step' when the domain checkout fails for unknown reasons. */ +"site.creation.assembly.step.domain.checkout.error.subtitle" = "Il tuo sito web è stato creato correttamente, ma abbiamo riscontrato un problema durante la preparazione del dominio personalizzato per il pagamento. Prova di nuovo o contatta il supporto per ricevere assistenza."; + /* Site name description that sits in the template website view. */ "site.creation.domain.tooltip.description" = "Come nell'esempio precedente, un dominio consente alle persone di trovare e visitare il tuo sito dal proprio browser web."; diff --git a/WordPress/Resources/ja.lproj/Localizable.strings b/WordPress/Resources/ja.lproj/Localizable.strings index b1896c3fb30e..4adc348c1330 100644 --- a/WordPress/Resources/ja.lproj/Localizable.strings +++ b/WordPress/Resources/ja.lproj/Localizable.strings @@ -1,4 +1,4 @@ -/* Translation-Revision-Date: 2023-05-02 09:54:08+0000 */ +/* Translation-Revision-Date: 2023-05-18 09:54:10+0000 */ /* Plural-Forms: nplurals=1; plural=0; */ /* Generator: GlotPress/4.0.0-alpha.4 */ /* Language: ja_JP */ @@ -2744,11 +2744,11 @@ translators: Block name. %s: The localized block name */ /* No comment provided by engineer. */ "Edit video" = "動画を編集"; -/* No comment provided by engineer. */ -"Editing reusable blocks is not yet supported on WordPress for Android" = "再利用ブロックの編集は WordPress for Android ではまだサポートされていません"; +/* translators: %s: name of the host app (e.g. WordPress) */ +"Editing reusable blocks is not yet supported on %s for Android" = "再利用ブロックの編集は Android 用 %s ではまだサポートされていません"; -/* No comment provided by engineer. */ -"Editing reusable blocks is not yet supported on WordPress for iOS" = "再利用ブロックの編集は WordPress for iOS ではまだサポートされていません"; +/* translators: %s: name of the host app (e.g. WordPress) */ +"Editing reusable blocks is not yet supported on %s for iOS" = "再利用ブロックの編集は iOS 用 %s ではまだサポートされていません"; /* Editing GIF alert message. */ "Editing this GIF will remove its animation." = "この GIF を編集するとアニメーションが削除されます。"; @@ -10312,7 +10312,7 @@ translators: %s: Select control option value e.g: \"Auto, 25%\". */ "migration.welcome.title" = "Jetpack へようこそ !"; /* Description for the static screen displayed prompting users to switch the Jetpack app. */ -"movedToJetpack.description" = "統計、Reader、通知などの Jetpack 機能は WordPress アプリから削除され、Jetpack アプリでのみ使用できるようになりました。"; +"movedToJetpack.description" = "Jetpack アプリで WordPress アプリの全機能に加えて統計、Reader、通知などを特別に利用できるようになりました。"; /* Hint for the static screen displayed prompting users to switch the Jetpack app. */ "movedToJetpack.hint" = "切り替えは無料で、数分で終わります。"; @@ -10324,13 +10324,13 @@ translators: %s: Select control option value e.g: \"Auto, 25%\". */ "movedToJetpack.learnMoreButtonTitle" = "詳細は jetpack.com をご覧ください"; /* Title for the static screen displayed in the Stats screen prompting users to switch to the Jetpack app. */ -"movedToJetpack.notifications.title" = "通知は Jetpack アプリに移動しました。"; +"movedToJetpack.notifications.title" = "Jetpack アプリで WordPress と通知を利用できます。"; /* Title for the static screen displayed in the Reader screen prompting users to switch to the Jetpack app. */ -"movedToJetpack.reader.title" = "Reader は Jetpack アプリに移動しました。"; +"movedToJetpack.reader.title" = "Jetpack アプリで WordPress と Reader を利用できます。"; /* Title for the static screen displayed in the Stats screen prompting users to switch to the Jetpack app. */ -"movedToJetpack.stats.title" = "統計は Jetpack アプリに移動しました。"; +"movedToJetpack.stats.title" = "Jetpack アプリで WordPress と統計を利用できます。"; /* Section title for the content table section in the blog details screen */ "my-site.menu.content.section.title" = "コンテンツ"; @@ -10522,6 +10522,9 @@ Example: given a notice format "Following %@" and empty site name, this will be /* Template site address for the search bar. */ "site.cration.domain.site.address" = "https:\/\/yoursitename.com"; +/* The error message to show in the 'Site Creation > Assembly Step' when the domain checkout fails for unknown reasons. */ +"site.creation.assembly.step.domain.checkout.error.subtitle" = "サイトは正常に作成されましたが、カスタムドメインの購入手続きの準備中に問題が発生しました。 もう一度お試しいただくか、ヘルプが必要な場合はサポートにご連絡ください。"; + /* Site name description that sits in the template website view. */ "site.creation.domain.tooltip.description" = "上記の例のように、ドメインを使用するとユーザーは、Web ブラウザーからサイトを見つけてアクセスできます。"; diff --git a/WordPress/Resources/ko.lproj/Localizable.strings b/WordPress/Resources/ko.lproj/Localizable.strings index b6b6ea1fe64c..cf45d32b8191 100644 --- a/WordPress/Resources/ko.lproj/Localizable.strings +++ b/WordPress/Resources/ko.lproj/Localizable.strings @@ -1,4 +1,4 @@ -/* Translation-Revision-Date: 2023-05-02 13:54:08+0000 */ +/* Translation-Revision-Date: 2023-05-17 15:54:09+0000 */ /* Plural-Forms: nplurals=1; plural=0; */ /* Generator: GlotPress/4.0.0-alpha.4 */ /* Language: ko_KR */ @@ -2744,11 +2744,11 @@ translators: Block name. %s: The localized block name */ /* No comment provided by engineer. */ "Edit video" = "비디오 편집"; -/* No comment provided by engineer. */ -"Editing reusable blocks is not yet supported on WordPress for Android" = "재활용 가능한 블록 편집은 아직 Android용 WordPress에서 지원되지 않습니다."; +/* translators: %s: name of the host app (e.g. WordPress) */ +"Editing reusable blocks is not yet supported on %s for Android" = "재사용 가능한 블록 편집은 아직 Android용 %s에서 지원되지 않습니다."; -/* No comment provided by engineer. */ -"Editing reusable blocks is not yet supported on WordPress for iOS" = "재활용 가능한 블록 편집은 아직 iOS용 WordPress에서 지원되지 않습니다."; +/* translators: %s: name of the host app (e.g. WordPress) */ +"Editing reusable blocks is not yet supported on %s for iOS" = "재사용 가능한 블록 편집은 아직 iOS용 %s에서 지원되지 않습니다."; /* Editing GIF alert message. */ "Editing this GIF will remove its animation." = "이 GIF를 편집하면 애니메이션이 제거됩니다."; @@ -4238,6 +4238,9 @@ translators: Block name. %s: The localized block name */ /* A short label. A call to action to load more posts. */ "Load more posts" = "더 많은 글 로드"; +/* No comment provided by engineer. */ +"Loading" = "로드 중"; + /* Text displayed while loading the activity feed for a site */ "Loading Activities..." = "활동 로드 중..."; @@ -10309,7 +10312,7 @@ translators: %s: Select control option value e.g: \"Auto, 25%\". */ "migration.welcome.title" = "젯팩에 오신 것을 환영합니다!"; /* Description for the static screen displayed prompting users to switch the Jetpack app. */ -"movedToJetpack.description" = "통계, 리더, 알림 및 기타 젯팩에서는 워드프레스 앱에서 제거된 기능이 제공되며, 젯팩 앱에서만 찾을 수 있습니다."; +"movedToJetpack.description" = "젯팩 앱에서는 워드프레스 앱의 모든 기능을 보유하며, 이제 통계, 리더, 알림 등에 독점적으로 접근할 수 있습니다."; /* Hint for the static screen displayed prompting users to switch the Jetpack app. */ "movedToJetpack.hint" = "전환은 무료이며 1분밖에 걸리지 않습니다."; @@ -10321,13 +10324,13 @@ translators: %s: Select control option value e.g: \"Auto, 25%\". */ "movedToJetpack.learnMoreButtonTitle" = "jetpack.com에서 더 알아보기"; /* Title for the static screen displayed in the Stats screen prompting users to switch to the Jetpack app. */ -"movedToJetpack.notifications.title" = "알림이 젯팩 앱으로 이동되었습니다."; +"movedToJetpack.notifications.title" = "젯팩 앱에서 알림과 함께 워드프레스를 사용하세요."; /* Title for the static screen displayed in the Reader screen prompting users to switch to the Jetpack app. */ -"movedToJetpack.reader.title" = "리더가 젯팩 앱으로 이동되었습니다."; +"movedToJetpack.reader.title" = "젯팩 앱에서 리더와 함께 워드프레스를 사용하세요."; /* Title for the static screen displayed in the Stats screen prompting users to switch to the Jetpack app. */ -"movedToJetpack.stats.title" = "통계가 젯팩 앱으로 이동되었습니다."; +"movedToJetpack.stats.title" = "젯팩 앱에서 통계와 함께 워드프레스를 사용하세요."; /* Section title for the content table section in the blog details screen */ "my-site.menu.content.section.title" = "콘텐츠"; @@ -10519,6 +10522,9 @@ Example: given a notice format "Following %@" and empty site name, this will be /* Template site address for the search bar. */ "site.cration.domain.site.address" = "https:\/\/yoursitename.com"; +/* The error message to show in the 'Site Creation > Assembly Step' when the domain checkout fails for unknown reasons. */ +"site.creation.assembly.step.domain.checkout.error.subtitle" = "웹사이트가 생성되었지만, 체크아웃용 사용자 정의 도메인을 준비하는 동안 문제가 발생했습니다. 다시 시도하거나 지원팀에 도움을 문의하세요."; + /* Site name description that sits in the template website view. */ "site.creation.domain.tooltip.description" = "위의 예와 같이 사람들이 웹 브라우저에서 도메인을 통해 사이트를 찾고 방문할 수 있습니다."; diff --git a/WordPress/Resources/nl.lproj/Localizable.strings b/WordPress/Resources/nl.lproj/Localizable.strings index 3f6932d19b80..76af31f2ca5f 100644 --- a/WordPress/Resources/nl.lproj/Localizable.strings +++ b/WordPress/Resources/nl.lproj/Localizable.strings @@ -1,4 +1,4 @@ -/* Translation-Revision-Date: 2023-05-02 15:54:07+0000 */ +/* Translation-Revision-Date: 2023-05-17 11:54:09+0000 */ /* Plural-Forms: nplurals=2; plural=n != 1; */ /* Generator: GlotPress/4.0.0-alpha.4 */ /* Language: nl */ @@ -2379,6 +2379,9 @@ translators: Block name. %s: The localized block name */ /* Shortened version of the main title to be used in back navigation. */ "Design" = "Ontwerp"; +/* Navigates to design system gallery only available in development builds */ +"Design System" = "Ontwerpsysteem"; + /* Title for the desktop web preview */ "Desktop" = "Desktop"; @@ -2741,12 +2744,6 @@ translators: Block name. %s: The localized block name */ /* No comment provided by engineer. */ "Edit video" = "Bewerk video"; -/* No comment provided by engineer. */ -"Editing reusable blocks is not yet supported on WordPress for Android" = "Bewerken van herbruikbare blokken wordt momenteel niet ondersteund door WordPress voor Android"; - -/* No comment provided by engineer. */ -"Editing reusable blocks is not yet supported on WordPress for iOS" = "Bewerken van herbruikbare blokken wordt momenteel niet ondersteund door WordPress voor iOS"; - /* Editing GIF alert message. */ "Editing this GIF will remove its animation." = "Deze GIF bewerken zal de animatie verwijderen."; @@ -9754,6 +9751,9 @@ translators: %s: Select control option value e.g: \"Auto, 25%\". */ /* Title for the Pages dashboard card. */ "dashboardCard.Pages.title" = "Pagina's"; +/* Title of a button that starts the page creation flow. */ +"dashboardCard.pages.add.button.title" = "Voeg pagina's toe aan je site"; + /* Title of label marking a draft page */ "dashboardCard.pages.cell.status.draft" = "Concept"; @@ -9808,9 +9808,24 @@ translators: %s: Select control option value e.g: \"Auto, 25%\". */ /* Reflects that site is live when domain purchase feature flag is ON. */ "domain.purchase.preview.title" = "Gefeliciteerd, je site is online!"; +/* The 'Best Alternative' label under the domain name in 'Choose a domain' screen */ +"domain.suggestions.row.best-alternative" = "Beste alternatief"; + +/* The text to display for paid domains on sale in 'Site Creation > Choose a domain' screen */ +"domain.suggestions.row.first-year" = "voor het eerste jaar"; + +/* The text to display for free domains in 'Site Creation > Choose a domain' screen */ +"domain.suggestions.row.free" = "Gratis"; + +/* The 'Recommended' label under the domain name in 'Choose a domain' screen */ +"domain.suggestions.row.recommended" = "Aanbevolen"; + /* The 'Sale' label under the domain name in 'Choose a domain' screen */ "domain.suggestions.row.sale" = "Aanbieding!"; +/* The text to display for paid domains in 'Site Creation > Choose a domain' screen */ +"domain.suggestions.row.yearly" = "per jaar"; + /* No comment provided by engineer. */ "double-tap to change unit" = "twee keer tikken om de eenheid te wijzigen"; @@ -10291,7 +10306,7 @@ translators: %s: Select control option value e.g: \"Auto, 25%\". */ "migration.welcome.title" = "Welkom bij Jetpack!"; /* Description for the static screen displayed prompting users to switch the Jetpack app. */ -"movedToJetpack.description" = "Statistieken, Reader, meldingen en andere functies die door Jetpack aangedreven worden, zijn verwijderd uit de WordPress-app en kunnen nu alleen in de Jetpack-app gevonden worden."; +"movedToJetpack.description" = "De Jetpack-app heeft alle functies van de WordPress-app, en nu ook exclusieve toegang tot Statistieken, Reader, Meldingen en meer."; /* Hint for the static screen displayed prompting users to switch the Jetpack app. */ "movedToJetpack.hint" = "Overstappen is gratis en duurt maar een minuut."; @@ -10303,13 +10318,13 @@ translators: %s: Select control option value e.g: \"Auto, 25%\". */ "movedToJetpack.learnMoreButtonTitle" = "Ga naar jetpack.com voor meer informatie"; /* Title for the static screen displayed in the Stats screen prompting users to switch to the Jetpack app. */ -"movedToJetpack.notifications.title" = "Meldingen zijn verplaatst naar de Jetpack-app."; +"movedToJetpack.notifications.title" = "Gebruik WordPress met Meldingen in de Jetpack-app"; /* Title for the static screen displayed in the Reader screen prompting users to switch to the Jetpack app. */ -"movedToJetpack.reader.title" = "Reader is naar de Jetpack-app verplaatst"; +"movedToJetpack.reader.title" = "Gebruik WordPress met Reader in de Jetpack-app."; /* Title for the static screen displayed in the Stats screen prompting users to switch to the Jetpack app. */ -"movedToJetpack.stats.title" = "Statistieken zijn verplaatst naar de Jetpack-app."; +"movedToJetpack.stats.title" = "Gebruik WordPress met Statistieken in de Jetpack-app."; /* Section title for the content table section in the blog details screen */ "my-site.menu.content.section.title" = "Inhoud"; @@ -10431,6 +10446,10 @@ translators: %s: Select control option value e.g: \"Auto, 25%\". */ /* Title for the success view when the user has successfully logged in */ "qrLoginVerifyAuthorization.completedInstructions.title" = "Je bent ingelogd!"; +/* A default value used to fill in the site name when the followed site somehow has missing site name or URL. +Example: given a notice format "Following %@" and empty site name, this will be "Following this site". */ +"reader.notice.follow.site.unknown" = "deze site"; + /* Notice title when blocking a user fails. */ "reader.notice.user.blocked" = "reader.notice.user.block.failed"; @@ -10497,6 +10516,9 @@ translators: %s: Select control option value e.g: \"Auto, 25%\". */ /* Template site address for the search bar. */ "site.cration.domain.site.address" = "https:\/\/yoursitename.com"; +/* The error message to show in the 'Site Creation > Assembly Step' when the domain checkout fails for unknown reasons. */ +"site.creation.assembly.step.domain.checkout.error.subtitle" = "Je website is aangemaakt, maar er is een probleem opgetreden bij je aangepaste domein voorbereiden op het afrekenen. Probeer het nog eens of neem contact met ons op voor hulp."; + /* Site name description that sits in the template website view. */ "site.creation.domain.tooltip.description" = "Een domein helpt mensen, zoals in het voorbeeld hierboven, je site te vinden en bezoeken vanuit hun webbrowser."; diff --git a/WordPress/Resources/pt-BR.lproj/Localizable.strings b/WordPress/Resources/pt-BR.lproj/Localizable.strings index ed0945849b4b..ac1ee36464d5 100644 --- a/WordPress/Resources/pt-BR.lproj/Localizable.strings +++ b/WordPress/Resources/pt-BR.lproj/Localizable.strings @@ -2741,12 +2741,6 @@ translators: Block name. %s: The localized block name */ /* No comment provided by engineer. */ "Edit video" = "Editar vídeo"; -/* No comment provided by engineer. */ -"Editing reusable blocks is not yet supported on WordPress for Android" = "Edição de blocos reutilizáveis ainda não é suportado no WordPress para Android"; - -/* No comment provided by engineer. */ -"Editing reusable blocks is not yet supported on WordPress for iOS" = "Edição de blocos reutilizáveis ainda não é suportado no WordPress para iOS"; - /* Editing GIF alert message. */ "Editing this GIF will remove its animation." = "Editar o gif removerá sua animação."; @@ -10257,9 +10251,6 @@ translators: %s: Select control option value e.g: \"Auto, 25%\". */ /* The title in the migration welcome screen */ "migration.welcome.title" = "Desejamos boas-vindas ao Jetpack!"; -/* Description for the static screen displayed prompting users to switch the Jetpack app. */ -"movedToJetpack.description" = "As estatísticas, o leitor, as notificações e outras funcionalidades com tecnologia Jetpack foram removidas do aplicativo do WordPress. Agora elas ficarão apenas no aplicativo do Jetpack."; - /* Hint for the static screen displayed prompting users to switch the Jetpack app. */ "movedToJetpack.hint" = "A mudança é gratuita e leva apenas um minuto."; @@ -10269,15 +10260,6 @@ translators: %s: Select control option value e.g: \"Auto, 25%\". */ /* Title for a button that displays a blog post in a web view. */ "movedToJetpack.learnMoreButtonTitle" = "Saiba mais em br.jetpack.com"; -/* Title for the static screen displayed in the Stats screen prompting users to switch to the Jetpack app. */ -"movedToJetpack.notifications.title" = "As notificações migraram para o aplicativo Jetpack."; - -/* Title for the static screen displayed in the Reader screen prompting users to switch to the Jetpack app. */ -"movedToJetpack.reader.title" = "O leitor migrou para o aplicativo Jetpack"; - -/* Title for the static screen displayed in the Stats screen prompting users to switch to the Jetpack app. */ -"movedToJetpack.stats.title" = "As estatísticas migraram para o aplicativo Jetpack."; - /* Section title for the content table section in the blog details screen */ "my-site.menu.content.section.title" = "Conteúdo"; diff --git a/WordPress/Resources/release_notes.txt b/WordPress/Resources/release_notes.txt index 0b6420d6b642..6e5faa9334dd 100644 --- a/WordPress/Resources/release_notes.txt +++ b/WordPress/Resources/release_notes.txt @@ -1,3 +1,5 @@ -When you tap on a nested text block, you can immediately edit content in that block—no more tapping through every nesting level to get where you want to go. (Our fingers were getting tired, too.) +* [***] Enables editing of the site homepage for sites using block-based themes directly from the pages list. [#20713] +* [*] Block editor: Add disabled style to `Cell` component [https://github.com/WordPress/gutenberg/pull/50665] +* [**] Block editor: Fix undo/redo history when inserting a link configured to open in a new tab [https://github.com/WordPress/gutenberg/pull/50460] +* [*] Block editor: [List block] Fix an issue when merging a list item into a Paragraph would remove its nested list items [https://github.com/wordpress-mobile/gutenberg-mobile/pull/5785] -We also fixed a bug where the app would crash if you tried to upload media to a classic block without giving WordPress access to your device’s media library. Instead, you’ll see a prompt asking for media access. Easy peasy, lemon squeezy. diff --git a/WordPress/Resources/ro.lproj/Localizable.strings b/WordPress/Resources/ro.lproj/Localizable.strings index c6fbb7e76bc3..eac53fe586c0 100644 --- a/WordPress/Resources/ro.lproj/Localizable.strings +++ b/WordPress/Resources/ro.lproj/Localizable.strings @@ -1,4 +1,4 @@ -/* Translation-Revision-Date: 2023-05-01 05:54:15+0000 */ +/* Translation-Revision-Date: 2023-05-23 09:44:14+0000 */ /* Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n == 0 || n % 100 >= 2 && n % 100 <= 19) ? 1 : 2); */ /* Generator: GlotPress/4.0.0-alpha.4 */ /* Language: ro */ @@ -2744,11 +2744,11 @@ translators: Block name. %s: The localized block name */ /* No comment provided by engineer. */ "Edit video" = "Editează videoul"; -/* No comment provided by engineer. */ -"Editing reusable blocks is not yet supported on WordPress for Android" = "WordPress pentru Android nu suportă încă editarea blocurilor reutilizabile"; +/* translators: %s: name of the host app (e.g. WordPress) */ +"Editing reusable blocks is not yet supported on %s for Android" = "%s pentru Android nu suportă încă editarea blocurilor reutilizabile"; -/* No comment provided by engineer. */ -"Editing reusable blocks is not yet supported on WordPress for iOS" = "WordPress pentru iOS nu suportă încă editarea blocurilor reutilizabile"; +/* translators: %s: name of the host app (e.g. WordPress) */ +"Editing reusable blocks is not yet supported on %s for iOS" = "%s pentru iOS nu suportă încă editarea blocurilor reutilizabile"; /* Editing GIF alert message. */ "Editing this GIF will remove its animation." = "Editarea acestui GIF îi va înlătura animația."; @@ -7043,7 +7043,7 @@ translators: %s: Select control option value e.g: \"Auto, 25%\". */ Continue without making a selection Continue without making a selection. Title for the Skip button in the Site Name Screen. */ -"Skip" = "Sărit"; +"Skip" = "Sari peste"; /* Menu title to skip today's prompt. */ "Skip for today" = "Nu azi"; @@ -10312,7 +10312,7 @@ translators: %s: Select control option value e.g: \"Auto, 25%\". */ "migration.welcome.title" = "Bine ai venit la Jetpack!"; /* Description for the static screen displayed prompting users to switch the Jetpack app. */ -"movedToJetpack.description" = "Statistici, Cititor, Notificări și alte funcționalități propulsate de Jetpack au fost înlăturate din aplicația WordPress. Pot fi găsite acum doar în aplicația Jetpack."; +"movedToJetpack.description" = "Aplicația Jetpack are toate funcționalitățile aplicației WordPress, cu acces exclusiv la Statistici, Cititor, Notificări și altele."; /* Hint for the static screen displayed prompting users to switch the Jetpack app. */ "movedToJetpack.hint" = "Comutarea este gratuită și durează numai un minut."; @@ -10324,13 +10324,13 @@ translators: %s: Select control option value e.g: \"Auto, 25%\". */ "movedToJetpack.learnMoreButtonTitle" = "Află mai multe la jetpack.com"; /* Title for the static screen displayed in the Stats screen prompting users to switch to the Jetpack app. */ -"movedToJetpack.notifications.title" = "Notificările s-au mutat în aplicația Jetpack."; +"movedToJetpack.notifications.title" = "Folosește WordPress cu notificări în aplicația Jetpack."; /* Title for the static screen displayed in the Reader screen prompting users to switch to the Jetpack app. */ -"movedToJetpack.reader.title" = "Cititorul s-a mutat în aplicația Jetpack."; +"movedToJetpack.reader.title" = "Folosește WordPress cu Cititor în aplicația Jetpack."; /* Title for the static screen displayed in the Stats screen prompting users to switch to the Jetpack app. */ -"movedToJetpack.stats.title" = "Statisticile s-au mutat în aplicația Jetpack."; +"movedToJetpack.stats.title" = "Folosește WordPress cu Statistici în aplicația Jetpack."; /* Section title for the content table section in the blog details screen */ "my-site.menu.content.section.title" = "Conținut"; @@ -10522,6 +10522,9 @@ Example: given a notice format "Following %@" and empty site name, this will be /* Template site address for the search bar. */ "site.cration.domain.site.address" = "https:\/\/numelesiteuluitau.com"; +/* The error message to show in the 'Site Creation > Assembly Step' when the domain checkout fails for unknown reasons. */ +"site.creation.assembly.step.domain.checkout.error.subtitle" = "Ți-am creat cu succes site-ul web, dar am întâmpinat o problemă în timpul pregătirii domeniului tău personalizat. Te rog să încerci din nou sau să contactezi suportul pentru asistență."; + /* Site name description that sits in the template website view. */ "site.creation.domain.tooltip.description" = "La fel ca în exemplul de mai sus, un domeniu le permite oamenilor să-ți găsească și să-ți viziteze site-ul din navigatoarele lor web."; diff --git a/WordPress/Resources/ru.lproj/Localizable.strings b/WordPress/Resources/ru.lproj/Localizable.strings index 6bae7faa8c21..b473fbab8a9d 100644 --- a/WordPress/Resources/ru.lproj/Localizable.strings +++ b/WordPress/Resources/ru.lproj/Localizable.strings @@ -1,4 +1,4 @@ -/* Translation-Revision-Date: 2023-05-03 09:54:10+0000 */ +/* Translation-Revision-Date: 2023-05-17 13:54:09+0000 */ /* Plural-Forms: nplurals=3; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : ((n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14)) ? 1 : 2); */ /* Generator: GlotPress/4.0.0-alpha.4 */ /* Language: ru */ @@ -2744,11 +2744,11 @@ translators: Block name. %s: The localized block name */ /* No comment provided by engineer. */ "Edit video" = "Изменить видео"; -/* No comment provided by engineer. */ -"Editing reusable blocks is not yet supported on WordPress for Android" = "Редактирование \"моих блоков\" пока не доступно в WordPress для Android"; +/* translators: %s: name of the host app (e.g. WordPress) */ +"Editing reusable blocks is not yet supported on %s for Android" = "Редактирование \"моих блоков\" пока не доступно в %s для Android"; -/* No comment provided by engineer. */ -"Editing reusable blocks is not yet supported on WordPress for iOS" = "Редактирование \"моих блоков\" пока не доступно в WordPress для iOS"; +/* translators: %s: name of the host app (e.g. WordPress) */ +"Editing reusable blocks is not yet supported on %s for iOS" = "Редактирование \"моих блоков\" пока не доступно в %s для iOS"; /* Editing GIF alert message. */ "Editing this GIF will remove its animation." = "Редактирование GIF изображения приведёт к потере анимации."; @@ -10312,7 +10312,7 @@ translators: %s: Select control option value e.g: \"Auto, 25%\". */ "migration.welcome.title" = "Jetpack приветствует вас!"; /* Description for the static screen displayed prompting users to switch the Jetpack app. */ -"movedToJetpack.description" = "Статистика, Обозреватель, уведомления и другие функции на базе Jetpack удалены из приложения WordPress и теперь находятся только в приложении Jetpack."; +"movedToJetpack.description" = "Приложение Jetpack обладает всеми возможностями приложения WordPress, а теперь и исключительным доступом к статистике, «Чтиву», уведомлениям и другим функциям."; /* Hint for the static screen displayed prompting users to switch the Jetpack app. */ "movedToJetpack.hint" = "Переход бесплатен и занимает всего минуту."; @@ -10324,13 +10324,13 @@ translators: %s: Select control option value e.g: \"Auto, 25%\". */ "movedToJetpack.learnMoreButtonTitle" = "Дополнительные сведения см. на jetpack.com"; /* Title for the static screen displayed in the Stats screen prompting users to switch to the Jetpack app. */ -"movedToJetpack.notifications.title" = "Уведомления перемещены в приложение Jetpack."; +"movedToJetpack.notifications.title" = "Используйте WordPress с уведомлениями в приложении Jetpack."; /* Title for the static screen displayed in the Reader screen prompting users to switch to the Jetpack app. */ -"movedToJetpack.reader.title" = "Обозреватель перемещен в приложение Jetpack."; +"movedToJetpack.reader.title" = "Используйте WordPress с «Чтивом» в приложении Jetpack."; /* Title for the static screen displayed in the Stats screen prompting users to switch to the Jetpack app. */ -"movedToJetpack.stats.title" = "Статистика перемещена в приложение Jetpack."; +"movedToJetpack.stats.title" = "Используйте WordPress со статистикой в приложении Jetpack."; /* Section title for the content table section in the blog details screen */ "my-site.menu.content.section.title" = "Содержимое"; @@ -10522,6 +10522,9 @@ Example: given a notice format "Following %@" and empty site name, this will be /* Template site address for the search bar. */ "site.cration.domain.site.address" = "https:\/\/yoursitename.com"; +/* The error message to show in the 'Site Creation > Assembly Step' when the domain checkout fails for unknown reasons. */ +"site.creation.assembly.step.domain.checkout.error.subtitle" = "Веб-сайт создан, но возникла проблема с подготовкой пользовательского домена для оформления заказа. Повторите попытку или обратитесь в службу поддержки."; + /* Site name description that sits in the template website view. */ "site.creation.domain.tooltip.description" = "Как в примере выше, домен позволяет находить ваш сайт и заходить на него через браузер."; diff --git a/WordPress/Resources/sq.lproj/Localizable.strings b/WordPress/Resources/sq.lproj/Localizable.strings index f5c76ec05b7e..cf74ede2b0a2 100644 --- a/WordPress/Resources/sq.lproj/Localizable.strings +++ b/WordPress/Resources/sq.lproj/Localizable.strings @@ -2732,12 +2732,6 @@ translators: Block name. %s: The localized block name */ /* No comment provided by engineer. */ "Edit video" = "Përpunoni video"; -/* No comment provided by engineer. */ -"Editing reusable blocks is not yet supported on WordPress for Android" = "Përpunimi i blloqeve të ripërdorshëm nuk mbulohet ende në WordPress për Android"; - -/* No comment provided by engineer. */ -"Editing reusable blocks is not yet supported on WordPress for iOS" = "Përpunimi i blloqeve të ripërdorshëm nuk mbulohet ende në WordPress për iOS"; - /* Editing GIF alert message. */ "Editing this GIF will remove its animation." = "Përpunimi i këtij GIF do të heqë animacionin e tij."; @@ -10278,9 +10272,6 @@ translators: %s: Select control option value e.g: \"Auto, 25%\". */ /* The title in the migration welcome screen */ "migration.welcome.title" = "Mirë se vini te Jetpack-u!"; -/* Description for the static screen displayed prompting users to switch the Jetpack app. */ -"movedToJetpack.description" = "Statistikat, Lexuesi, Njoftimet dhe veçori të tjera të bazuara në Jetpack tani janë hequr prej aplikacionit WordPress dhe tani mund të gjenden vetëm në aplikacionin Jetpack."; - /* Hint for the static screen displayed prompting users to switch the Jetpack app. */ "movedToJetpack.hint" = "Kalimi është falas dhe do vetëm një minutë."; @@ -10290,15 +10281,6 @@ translators: %s: Select control option value e.g: \"Auto, 25%\". */ /* Title for a button that displays a blog post in a web view. */ "movedToJetpack.learnMoreButtonTitle" = "Mësoni më tepër, te jetpack.com"; -/* Title for the static screen displayed in the Stats screen prompting users to switch to the Jetpack app. */ -"movedToJetpack.notifications.title" = "Njoftimet kanë kaluar te aplikacioni Jetpack."; - -/* Title for the static screen displayed in the Reader screen prompting users to switch to the Jetpack app. */ -"movedToJetpack.reader.title" = "Lexuesi ka kaluar te aplikacioni Jetpack."; - -/* Title for the static screen displayed in the Stats screen prompting users to switch to the Jetpack app. */ -"movedToJetpack.stats.title" = "Statistikat kanë kaluar te aplikacioni Jetpack."; - /* Section title for the content table section in the blog details screen */ "my-site.menu.content.section.title" = "Lëndë"; diff --git a/WordPress/Resources/sv.lproj/Localizable.strings b/WordPress/Resources/sv.lproj/Localizable.strings index 130f00ebe1ea..1d6af76c6b0f 100644 --- a/WordPress/Resources/sv.lproj/Localizable.strings +++ b/WordPress/Resources/sv.lproj/Localizable.strings @@ -1,4 +1,4 @@ -/* Translation-Revision-Date: 2023-05-02 11:54:08+0000 */ +/* Translation-Revision-Date: 2023-05-16 21:04:54+0000 */ /* Plural-Forms: nplurals=2; plural=n != 1; */ /* Generator: GlotPress/4.0.0-alpha.4 */ /* Language: sv_SE */ @@ -2744,11 +2744,11 @@ translators: Block name. %s: The localized block name */ /* No comment provided by engineer. */ "Edit video" = "Redigera video"; -/* No comment provided by engineer. */ -"Editing reusable blocks is not yet supported on WordPress for Android" = "Redigering av återanvändbara block stöds ännu inte i WordPress för Android"; +/* translators: %s: name of the host app (e.g. WordPress) */ +"Editing reusable blocks is not yet supported on %s for Android" = "Redigering av återanvändbara block stöds ännu inte i %s för Android"; -/* No comment provided by engineer. */ -"Editing reusable blocks is not yet supported on WordPress for iOS" = "Redigering av återanvändbara block stöds ännu inte i WordPress för iOS"; +/* translators: %s: name of the host app (e.g. WordPress) */ +"Editing reusable blocks is not yet supported on %s for iOS" = "Redigering av återanvändbara block stöds ännu inte i %s för iOS"; /* Editing GIF alert message. */ "Editing this GIF will remove its animation." = "Om du redigerar den här GIF-bilden tas animeringen bort."; @@ -6009,7 +6009,7 @@ translators: %s: Select control button label e.g. \"Button width\" */ The menu item to select during a guided tour. Title of the 'Reader' tab - used for spotlight indexing on iOS. Title of the Reader section of the debug screen used in debug builds of the app */ -"Reader" = "Läsvy"; +"Reader" = "Läsare"; /* Title of the screen that allows the user to change the Reader CSS URL for debug builds */ "Reader CSS URL" = "CSS-URL för läsaren"; @@ -10312,7 +10312,7 @@ translators: %s: Select control option value e.g: \"Auto, 25%\". */ "migration.welcome.title" = "Välkommen till Jetpack!"; /* Description for the static screen displayed prompting users to switch the Jetpack app. */ -"movedToJetpack.description" = "Statistik, läsare, aviseringar och andra Jetpack-drivna funktioner har tagits bort från WordPress-appen och kan nu bara hittas i Jetpack-appen."; +"movedToJetpack.description" = "Jetpack-appen har alla WordPress-appens funktionalitet och nu exklusiv åtkomst till statistik, Läsare, aviseringar och mer."; /* Hint for the static screen displayed prompting users to switch the Jetpack app. */ "movedToJetpack.hint" = "Bytet är gratis och tar bara en minut."; @@ -10324,13 +10324,13 @@ translators: %s: Select control option value e.g: \"Auto, 25%\". */ "movedToJetpack.learnMoreButtonTitle" = "Läs mer på jetpack.com"; /* Title for the static screen displayed in the Stats screen prompting users to switch to the Jetpack app. */ -"movedToJetpack.notifications.title" = "Aviseringar har flyttats till Jetpack-appen."; +"movedToJetpack.notifications.title" = "Använd WordPress med aviseringar i Jetpack-appen."; /* Title for the static screen displayed in the Reader screen prompting users to switch to the Jetpack app. */ -"movedToJetpack.reader.title" = "Läsare har flyttat till Jetpack-appen."; +"movedToJetpack.reader.title" = "Använd WordPress med Läsare i Jetpack-appen."; /* Title for the static screen displayed in the Stats screen prompting users to switch to the Jetpack app. */ -"movedToJetpack.stats.title" = "Statistik har flyttat till Jetpack-appen."; +"movedToJetpack.stats.title" = "Använd WordPress med statistik i Jetpack-appen."; /* Section title for the content table section in the blog details screen */ "my-site.menu.content.section.title" = "Innehåll"; @@ -10522,6 +10522,9 @@ Example: given a notice format "Following %@" and empty site name, this will be /* Template site address for the search bar. */ "site.cration.domain.site.address" = "https:\/\/yoursitename.com"; +/* The error message to show in the 'Site Creation > Assembly Step' when the domain checkout fails for unknown reasons. */ +"site.creation.assembly.step.domain.checkout.error.subtitle" = "Din webbplats har skapats, men vi stötte på ett problem när vi skulle förbereda din anpassade domän för betalning. Försök igen eller kontakta supporten för hjälp."; + /* Site name description that sits in the template website view. */ "site.creation.domain.tooltip.description" = "Som exemplet ovan låter en domän människor hitta och besöka din webbplats från sin webbläsare."; diff --git a/WordPress/Resources/tr.lproj/Localizable.strings b/WordPress/Resources/tr.lproj/Localizable.strings index 6d9caf656d59..a23c0cce3512 100644 --- a/WordPress/Resources/tr.lproj/Localizable.strings +++ b/WordPress/Resources/tr.lproj/Localizable.strings @@ -1,4 +1,4 @@ -/* Translation-Revision-Date: 2023-05-01 15:14:41+0000 */ +/* Translation-Revision-Date: 2023-05-17 15:54:09+0000 */ /* Plural-Forms: nplurals=2; plural=n > 1; */ /* Generator: GlotPress/4.0.0-alpha.4 */ /* Language: tr */ @@ -2744,11 +2744,11 @@ translators: Block name. %s: The localized block name */ /* No comment provided by engineer. */ "Edit video" = "Videoyu düzenle"; -/* No comment provided by engineer. */ -"Editing reusable blocks is not yet supported on WordPress for Android" = "Yeniden kullanılabilir blokların düzenlenmesi Android için WordPress'te henüz desteklenmemektedir"; +/* translators: %s: name of the host app (e.g. WordPress) */ +"Editing reusable blocks is not yet supported on %s for Android" = "Tekrar kullanılabilir blokların düzenlenmesi Android için %s sitesinde henüz desteklenmemektedir"; -/* No comment provided by engineer. */ -"Editing reusable blocks is not yet supported on WordPress for iOS" = "Yeniden kullanılabilir blokların düzenlenmesi iOS için WordPress'te henüz desteklenmemektedir"; +/* translators: %s: name of the host app (e.g. WordPress) */ +"Editing reusable blocks is not yet supported on %s for iOS" = "Tekrar kullanılabilir blokların düzenlenmesi iOS için %s sitesinde henüz desteklenmemektedir"; /* Editing GIF alert message. */ "Editing this GIF will remove its animation." = "Bu GIF'i düzenlemek animasyonunu kaldıracaktır."; @@ -10312,7 +10312,7 @@ translators: %s: Select control option value e.g: \"Auto, 25%\". */ "migration.welcome.title" = "Jetpack'e hoş geldiniz."; /* Description for the static screen displayed prompting users to switch the Jetpack app. */ -"movedToJetpack.description" = "İstatistikler, Okuyucu, Bildirimler ve Jetpack destekli diğer özellikler WordPress uygulamasından kaldırıldı ve artık yalnızca Jetpack uygulamasında bulunuyor."; +"movedToJetpack.description" = "Jetpack uygulaması, WordPress uygulamasının tüm işlevlerine ve artık İstatistikler, Okuyucu, Bildirimler ve daha fazlasına özel erişime sahiptir."; /* Hint for the static screen displayed prompting users to switch the Jetpack app. */ "movedToJetpack.hint" = "Geçiş ücretsizdir ve yalnızca bir dakika sürer."; @@ -10324,13 +10324,13 @@ translators: %s: Select control option value e.g: \"Auto, 25%\". */ "movedToJetpack.learnMoreButtonTitle" = "Jetpack.com'da daha fazla bilgi edinin"; /* Title for the static screen displayed in the Stats screen prompting users to switch to the Jetpack app. */ -"movedToJetpack.notifications.title" = "Bildirimler, Jetpack uygulamasına geçti."; +"movedToJetpack.notifications.title" = "Jetpack uygulamasında WordPress'i Bildirimler ile kullanın."; /* Title for the static screen displayed in the Reader screen prompting users to switch to the Jetpack app. */ -"movedToJetpack.reader.title" = "Okuyucu, Jetpack uygulamasına geçti."; +"movedToJetpack.reader.title" = "Jetpack uygulamasında WordPress'i Okuyucu kullanın."; /* Title for the static screen displayed in the Stats screen prompting users to switch to the Jetpack app. */ -"movedToJetpack.stats.title" = "İstatistikler, Jetpack uygulamasına geçti."; +"movedToJetpack.stats.title" = "Jetpack uygulamasında WordPress'i İstatistikler ile kullanın."; /* Section title for the content table section in the blog details screen */ "my-site.menu.content.section.title" = "İçerik"; @@ -10522,6 +10522,9 @@ Example: given a notice format "Following %@" and empty site name, this will be /* Template site address for the search bar. */ "site.cration.domain.site.address" = "https:\/\/siteadi.com"; +/* The error message to show in the 'Site Creation > Assembly Step' when the domain checkout fails for unknown reasons. */ +"site.creation.assembly.step.domain.checkout.error.subtitle" = "Web siteniz başarıyla oluşturuldu, ancak özel alan adınızı ödeme için hazırlarken bir sorunla karşılaştık. Lütfen tekrar deneyin veya yardım için destek birimine başvurun."; + /* Site name description that sits in the template website view. */ "site.creation.domain.tooltip.description" = "Yukarıdaki örnekte olduğu gibi, bir alan adı, kişilerin web sitenizi bir web tarayıcısı üzerinden bulmasını ve ziyaret etmesini sağlar."; diff --git a/WordPress/Resources/zh-Hans.lproj/Localizable.strings b/WordPress/Resources/zh-Hans.lproj/Localizable.strings index d22a4d606288..a6b2159a735d 100644 --- a/WordPress/Resources/zh-Hans.lproj/Localizable.strings +++ b/WordPress/Resources/zh-Hans.lproj/Localizable.strings @@ -1,4 +1,4 @@ -/* Translation-Revision-Date: 2023-05-04 09:54:09+0000 */ +/* Translation-Revision-Date: 2023-05-17 12:54:10+0000 */ /* Plural-Forms: nplurals=1; plural=0; */ /* Generator: GlotPress/4.0.0-alpha.4 */ /* Language: zh_CN */ @@ -2744,11 +2744,8 @@ translators: Block name. %s: The localized block name */ /* No comment provided by engineer. */ "Edit video" = "编辑视频"; -/* No comment provided by engineer. */ -"Editing reusable blocks is not yet supported on WordPress for Android" = "Android 版 WordPress 尚不支持编辑可重用区块"; - -/* No comment provided by engineer. */ -"Editing reusable blocks is not yet supported on WordPress for iOS" = "iOS 版 WordPress 尚不支持编辑可重用区块"; +/* translators: %s: name of the host app (e.g. WordPress) */ +"Editing reusable blocks is not yet supported on %s for Android" = "Android 版 %s 尚不支持编辑可重用区块"; /* Editing GIF alert message. */ "Editing this GIF will remove its animation." = "编辑此 GIF 将删除其动画。"; @@ -10312,7 +10309,7 @@ translators: %s: Select control option value e.g: \"Auto, 25%\". */ "migration.welcome.title" = "欢迎使用 Jetpack!"; /* Description for the static screen displayed prompting users to switch the Jetpack app. */ -"movedToJetpack.description" = "统计信息、阅读器、通知和其他由 Jetpack 提供支持的功能已从 WordPress 应用程序上删除,现在只能在 Jetpack 应用程序中使用。"; +"movedToJetpack.description" = "Jetpack 应用拥有 WordPress 应用的所有功能,现在可以独家访问统计信息、阅读器、通知等功能。"; /* Hint for the static screen displayed prompting users to switch the Jetpack app. */ "movedToJetpack.hint" = "切换免费,只需一会儿。"; @@ -10324,13 +10321,13 @@ translators: %s: Select control option value e.g: \"Auto, 25%\". */ "movedToJetpack.learnMoreButtonTitle" = "请访问 jetpack.com 了解详情"; /* Title for the static screen displayed in the Stats screen prompting users to switch to the Jetpack app. */ -"movedToJetpack.notifications.title" = "通知已移至 Jetpack 应用程序。"; +"movedToJetpack.notifications.title" = "在 Jetpack 应用中结合使用 WordPress 和通知功能。"; /* Title for the static screen displayed in the Reader screen prompting users to switch to the Jetpack app. */ -"movedToJetpack.reader.title" = "阅读器已移至 Jetpack 应用程序。"; +"movedToJetpack.reader.title" = "在 Jetpack 应用中结合使用 WordPress 和阅读器功能。"; /* Title for the static screen displayed in the Stats screen prompting users to switch to the Jetpack app. */ -"movedToJetpack.stats.title" = "统计信息已移至 Jetpack 应用程序。"; +"movedToJetpack.stats.title" = "在 Jetpack 应用中结合使用 WordPress 和统计信息功能。"; /* Section title for the content table section in the blog details screen */ "my-site.menu.content.section.title" = "内容"; @@ -10522,6 +10519,9 @@ Example: given a notice format "Following %@" and empty site name, this will be /* Template site address for the search bar. */ "site.cration.domain.site.address" = "https:\/\/yoursitename.com"; +/* The error message to show in the 'Site Creation > Assembly Step' when the domain checkout fails for unknown reasons. */ +"site.creation.assembly.step.domain.checkout.error.subtitle" = "您的网站已成功创建,但我们在为您准备自定义域名结账时遇到问题。 请重试或联系支持人员寻求帮助。"; + /* Site name description that sits in the template website view. */ "site.creation.domain.tooltip.description" = "和上面的示例一样,域名可让人们从他们的 Web 浏览器中查找和访问您的站点。"; diff --git a/WordPress/Resources/zh-Hant.lproj/Localizable.strings b/WordPress/Resources/zh-Hant.lproj/Localizable.strings index d0b24603983b..82bd6739466e 100644 --- a/WordPress/Resources/zh-Hant.lproj/Localizable.strings +++ b/WordPress/Resources/zh-Hant.lproj/Localizable.strings @@ -1,4 +1,4 @@ -/* Translation-Revision-Date: 2023-05-02 09:54:08+0000 */ +/* Translation-Revision-Date: 2023-05-17 10:54:26+0000 */ /* Plural-Forms: nplurals=1; plural=0; */ /* Generator: GlotPress/4.0.0-alpha.4 */ /* Language: zh_TW */ @@ -2744,11 +2744,8 @@ translators: Block name. %s: The localized block name */ /* No comment provided by engineer. */ "Edit video" = "編輯視訊"; -/* No comment provided by engineer. */ -"Editing reusable blocks is not yet supported on WordPress for Android" = "Android 版 WordPress 尚不支援編輯可重複使用區塊"; - -/* No comment provided by engineer. */ -"Editing reusable blocks is not yet supported on WordPress for iOS" = "iOS 版 WordPress 尚不支援編輯可重複使用區塊"; +/* translators: %s: name of the host app (e.g. WordPress) */ +"Editing reusable blocks is not yet supported on %s for Android" = "Android 版 %s 尚不支援編輯可重複使用區塊"; /* Editing GIF alert message. */ "Editing this GIF will remove its animation." = "編輯此 GIF 會移除動畫。"; @@ -4238,6 +4235,9 @@ translators: Block name. %s: The localized block name */ /* A short label. A call to action to load more posts. */ "Load more posts" = "載入更多文章"; +/* No comment provided by engineer. */ +"Loading" = "正在載入"; + /* Text displayed while loading the activity feed for a site */ "Loading Activities..." = "正在載入活動⋯⋯"; @@ -10309,7 +10309,7 @@ translators: %s: Select control option value e.g: \"Auto, 25%\". */ "migration.welcome.title" = "歡迎使用 Jetpack!"; /* Description for the static screen displayed prompting users to switch the Jetpack app. */ -"movedToJetpack.description" = "WordPress 應用程式已移除「統計」、「閱讀器」、「通知」和其他 Jetpack 提供的功能,你現在只能在 Jetpack 應用程式中找到這些功能。"; +"movedToJetpack.description" = "Jetpack 應用程式具備 WordPress 應用程式所有功能,現在還可獨家使用統計資料、閱讀器、通知等功能。"; /* Hint for the static screen displayed prompting users to switch the Jetpack app. */ "movedToJetpack.hint" = "切換完全免費,只要 1 分鐘就能完成。"; @@ -10321,13 +10321,13 @@ translators: %s: Select control option value e.g: \"Auto, 25%\". */ "movedToJetpack.learnMoreButtonTitle" = "前往 jetpack.com 深入瞭解"; /* Title for the static screen displayed in the Stats screen prompting users to switch to the Jetpack app. */ -"movedToJetpack.notifications.title" = "「通知」已搬遷至 Jetpack 應用程式。"; +"movedToJetpack.notifications.title" = "在 Jetpack 應用程式中使用 WordPress 和通知功能。"; /* Title for the static screen displayed in the Reader screen prompting users to switch to the Jetpack app. */ -"movedToJetpack.reader.title" = "「閱讀器」已搬遷至 Jetpack 應用程式。"; +"movedToJetpack.reader.title" = "在 Jetpack 應用程式中使用 WordPress 和閱讀器。"; /* Title for the static screen displayed in the Stats screen prompting users to switch to the Jetpack app. */ -"movedToJetpack.stats.title" = "「統計」已搬遷至 Jetpack 應用程式。"; +"movedToJetpack.stats.title" = "在 Jetpack 應用程式中使用 WordPress 和統計資料功能。"; /* Section title for the content table section in the blog details screen */ "my-site.menu.content.section.title" = "內容"; @@ -10519,6 +10519,9 @@ Example: given a notice format "Following %@" and empty site name, this will be /* Template site address for the search bar. */ "site.cration.domain.site.address" = "https:\/\/yoursitename.com"; +/* The error message to show in the 'Site Creation > Assembly Step' when the domain checkout fails for unknown reasons. */ +"site.creation.assembly.step.domain.checkout.error.subtitle" = "你的網站已成功建立,但準備你的自訂網域以結帳時發生問題。 請再試一次,或聯絡支援團隊取得協助。"; + /* Site name description that sits in the template website view. */ "site.creation.domain.tooltip.description" = "如同上方範例,網域可讓使用者從網頁瀏覽器找到並造訪你的網站。"; diff --git a/WordPress/UITests/Tests/DashboardTests.swift b/WordPress/UITests/Tests/DashboardTests.swift index 27d2d9e4b2c7..f3f71fa06516 100644 --- a/WordPress/UITests/Tests/DashboardTests.swift +++ b/WordPress/UITests/Tests/DashboardTests.swift @@ -2,7 +2,6 @@ import UITestsFoundation import XCTest class DashboardTests: XCTestCase { - override func setUpWithError() throws { setUpTestSuite() @@ -19,11 +18,14 @@ class DashboardTests: XCTestCase { } // This test is JP only. - func testDomainsCardNavigation() throws { + func testFreeToPaidCardNavigation() throws { try MySiteScreen() - .scrollToDomainsCard() - .verifyDomainsCard() - .tapDomainsCard() + .scrollToFreeToPaidPlansCard() + .verifyFreeToPaidPlansCard() + .tapFreeToPaidPlansCard() .verifyDomainsSuggestionsScreenLoaded() + .selectDomain() + .goToPlanSelection() + .verifyPlanSelectionScreenLoaded() } } diff --git a/WordPress/UITestsFoundation/Screens/DomainsSuggestionsScreen.swift b/WordPress/UITestsFoundation/Screens/DomainsSuggestionsScreen.swift index def69b4f31cb..5b789f76f62b 100644 --- a/WordPress/UITestsFoundation/Screens/DomainsSuggestionsScreen.swift +++ b/WordPress/UITestsFoundation/Screens/DomainsSuggestionsScreen.swift @@ -2,7 +2,6 @@ import ScreenObject import XCTest public class DomainsSuggestionsScreen: ScreenObject { - public let tabBar: TabNavComponent let siteDomainsNavbarHeaderGetter: (XCUIApplication) -> XCUIElement = { $0.staticTexts["Search domains"] @@ -11,8 +10,6 @@ public class DomainsSuggestionsScreen: ScreenObject { var siteDomainsNavbarHeader: XCUIElement { siteDomainsNavbarHeaderGetter(app) } public init(app: XCUIApplication = XCUIApplication()) throws { - tabBar = try TabNavComponent() - try super.init( expectedElementGetters: [ siteDomainsNavbarHeaderGetter ], app: app, @@ -29,4 +26,16 @@ public class DomainsSuggestionsScreen: ScreenObject { XCTAssertTrue(DomainsSuggestionsScreen.isLoaded(), "\"Domains suggestions\" screen isn't loaded.") return self } + + @discardableResult + public func selectDomain() throws -> Self { + app.tables["DomainSuggestionsTable"].cells.lastMatch?.tap() + return self + } + + @discardableResult + public func goToPlanSelection() throws -> PlanSelectionScreen { + app.buttons["Select domain"].tap() + return try PlanSelectionScreen() + } } diff --git a/WordPress/UITestsFoundation/Screens/MySiteScreen.swift b/WordPress/UITestsFoundation/Screens/MySiteScreen.swift index d6b5531769d7..48f6e2121329 100644 --- a/WordPress/UITestsFoundation/Screens/MySiteScreen.swift +++ b/WordPress/UITestsFoundation/Screens/MySiteScreen.swift @@ -19,7 +19,7 @@ private struct ElementStringIDs { static let switchSiteButton = "SwitchSiteButton" static let dashboardButton = "Home" static let segmentedControlMenuButton = "Menu" - static let domainsCardHeaderButton = "Find a custom domain" + static let freeToPaidPlansCardHeaderButton = "Free domain with an annual plan" } /// The home-base screen for an individual site. Used in many of our UI tests. @@ -61,15 +61,15 @@ public class MySiteScreen: ScreenObject { $0.buttons[ElementStringIDs.segmentedControlMenuButton] } - let domainsCardButtonGetter: (XCUIApplication) -> XCUIElement = { - $0.buttons[ElementStringIDs.domainsCardHeaderButton] + let freeToPaidPlansCardButtonGetter: (XCUIApplication) -> XCUIElement = { + $0.buttons[ElementStringIDs.freeToPaidPlansCardHeaderButton] } let domainsButtonGetter: (XCUIApplication) -> XCUIElement = { $0.cells[ElementStringIDs.domainsButton] } - var domainsCardButton: XCUIElement { domainsCardButtonGetter(app) } + var freeToPaidPlansCardButton: XCUIElement { freeToPaidPlansCardButtonGetter(app) } static var isVisible: Bool { let app = XCUIApplication() @@ -189,23 +189,23 @@ public class MySiteScreen: ScreenObject { } @discardableResult - public func verifyDomainsCard() -> Self { - let cardText = app.staticTexts["Stake your claim on your corner of the web with a site address that’s easy to find, share and follow."] - XCTAssertTrue(domainsCardButton.waitForIsHittable(), "Domains card header was not displayed.") - XCTAssertTrue(cardText.waitForIsHittable(), "Domains card text was not displayed.") + public func verifyFreeToPaidPlansCard() -> Self { + let cardText = app.staticTexts["Get a free domain for the first year, remove ads on your site, and increase your storage."] + XCTAssertTrue(freeToPaidPlansCardButton.waitForIsHittable(), "Free to Paid plans card header was not displayed.") + XCTAssertTrue(cardText.waitForIsHittable(), "Free to Paid plans card text was not displayed.") return self } @discardableResult - public func tapDomainsCard() throws -> DomainsSuggestionsScreen { - domainsCardButton.tap() + public func tapFreeToPaidPlansCard() throws -> DomainsSuggestionsScreen { + freeToPaidPlansCardButton.tap() return try DomainsSuggestionsScreen() } @discardableResult - public func scrollToDomainsCard() throws -> Self { + public func scrollToFreeToPaidPlansCard() throws -> Self { let collectionView = app.collectionViews.firstMatch - let cardCell = collectionView.cells.containing(.other, identifier: "dashboard-domains-card-contentview").firstMatch + let cardCell = collectionView.cells.containing(.other, identifier: "dashboard-free-to-paid-plans-card-contentview").firstMatch cardCell.scrollIntoView(within: collectionView) return self } diff --git a/WordPress/UITestsFoundation/Screens/PlanSelectionScreen.swift b/WordPress/UITestsFoundation/Screens/PlanSelectionScreen.swift new file mode 100644 index 000000000000..83072c6264c8 --- /dev/null +++ b/WordPress/UITestsFoundation/Screens/PlanSelectionScreen.swift @@ -0,0 +1,26 @@ +import ScreenObject +import XCTest + +public class PlanSelectionScreen: ScreenObject { + private let webViewGetter: (XCUIApplication) -> XCUIElement = { + $0.webViews.firstMatch + } + + public init(app: XCUIApplication = XCUIApplication()) throws { + try super.init( + expectedElementGetters: [ webViewGetter ], + app: app, + waitTimeout: 7 + ) + } + + public static func isLoaded() -> Bool { + (try? PlanSelectionScreen().isLoaded) ?? false + } + + @discardableResult + public func verifyPlanSelectionScreenLoaded() -> Self { + XCTAssertTrue(PlanSelectionScreen.isLoaded(), "\"Plan Selection\" screen isn't loaded.") + return self + } +} diff --git a/WordPress/WordPress.xcodeproj/project.pbxproj b/WordPress/WordPress.xcodeproj/project.pbxproj index 368771719592..a4f0c12d1f90 100644 --- a/WordPress/WordPress.xcodeproj/project.pbxproj +++ b/WordPress/WordPress.xcodeproj/project.pbxproj @@ -158,6 +158,9 @@ 011F52C92A16551A00B04114 /* FreeToPaidPlansCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 011F52C72A16551A00B04114 /* FreeToPaidPlansCoordinator.swift */; }; 011F52D32A1B84FF00B04114 /* PlansTracker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 011F52D22A1B84FF00B04114 /* PlansTracker.swift */; }; 011F52D42A1B84FF00B04114 /* PlansTracker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 011F52D22A1B84FF00B04114 /* PlansTracker.swift */; }; + 011F52D82A1BECA200B04114 /* PlanSelectionScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = 011F52D72A1BECA200B04114 /* PlanSelectionScreen.swift */; }; + 011F52DA2A1CA53300B04114 /* CheckoutViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 011F52D92A1CA53300B04114 /* CheckoutViewController.swift */; }; + 011F52DB2A1CA53300B04114 /* CheckoutViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 011F52D92A1CA53300B04114 /* CheckoutViewController.swift */; }; 01281E9A2A0456CB00464F8F /* DomainsSuggestionsScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01281E992A0456CB00464F8F /* DomainsSuggestionsScreen.swift */; }; 01281E9C2A051EEA00464F8F /* MenuNavigationTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01281E9B2A051EEA00464F8F /* MenuNavigationTests.swift */; }; 01281E9D2A051EEA00464F8F /* MenuNavigationTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01281E9B2A051EEA00464F8F /* MenuNavigationTests.swift */; }; @@ -169,6 +172,8 @@ 0147D651294B6EA600AA6410 /* StatsRevampStoreTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0147D650294B6EA600AA6410 /* StatsRevampStoreTests.swift */; }; 0148CC292859127F00CF5D96 /* StatsWidgetsStoreTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0148CC282859127F00CF5D96 /* StatsWidgetsStoreTests.swift */; }; 0148CC2B2859C87000CF5D96 /* BlogServiceMock.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0148CC2A2859C87000CF5D96 /* BlogServiceMock.swift */; }; + 014ACD142A1E5034008A706C /* WebKitViewController+SandboxStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 014ACD132A1E5033008A706C /* WebKitViewController+SandboxStore.swift */; }; + 014ACD152A1E5034008A706C /* WebKitViewController+SandboxStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 014ACD132A1E5033008A706C /* WebKitViewController+SandboxStore.swift */; }; 015BA4EB29A788A300920F4B /* StatsTotalInsightsCellTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 015BA4EA29A788A300920F4B /* StatsTotalInsightsCellTests.swift */; }; 01CE5007290A889F00A9C2E0 /* TracksConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01CE5006290A889F00A9C2E0 /* TracksConfiguration.swift */; }; 01CE5008290A88BD00A9C2E0 /* TracksConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01CE5006290A889F00A9C2E0 /* TracksConfiguration.swift */; }; @@ -3487,6 +3492,8 @@ F1F083F6241FFE930056D3B1 /* AtomicAuthenticationServiceTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = F1F083F5241FFE930056D3B1 /* AtomicAuthenticationServiceTests.swift */; }; F1F163C125658B4D003DC13B /* IntentHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = F1F163C025658B4D003DC13B /* IntentHandler.swift */; }; F1F163D625658B4D003DC13B /* WordPressIntents.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = F1F163BE25658B4D003DC13B /* WordPressIntents.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; + F4026B1D2A1BC88A00CC7781 /* DashboardDomainRegistrationCardCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = F4026B1C2A1BC88A00CC7781 /* DashboardDomainRegistrationCardCell.swift */; }; + F4026B1E2A1BC88A00CC7781 /* DashboardDomainRegistrationCardCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = F4026B1C2A1BC88A00CC7781 /* DashboardDomainRegistrationCardCell.swift */; }; F41BDD73290BBDCA00B7F2B0 /* MigrationActionsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F41BDD72290BBDCA00B7F2B0 /* MigrationActionsView.swift */; }; F41BDD792910AFCA00B7F2B0 /* MigrationFlowCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = F41BDD782910AFCA00B7F2B0 /* MigrationFlowCoordinator.swift */; }; F41BDD7B29114E2400B7F2B0 /* MigrationStep.swift in Sources */ = {isa = PBXBuildFile; fileRef = F41BDD7A29114E2400B7F2B0 /* MigrationStep.swift */; }; @@ -5507,6 +5514,8 @@ FE4DC5A7293A79F1008F322F /* WordPressExportRoute.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE4DC5A6293A79F1008F322F /* WordPressExportRoute.swift */; }; FE4DC5A8293A84E6008F322F /* MigrationDeepLinkRouter.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE4DC5A2293A75FC008F322F /* MigrationDeepLinkRouter.swift */; }; FE4DC5AA293A84F8008F322F /* WordPressExportRoute.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE4DC5A6293A79F1008F322F /* WordPressExportRoute.swift */; }; + FE5096592A17A69F00DDD071 /* TwitterDeprecationTableFooterView.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE5096582A17A69F00DDD071 /* TwitterDeprecationTableFooterView.swift */; }; + FE50965A2A17A69F00DDD071 /* TwitterDeprecationTableFooterView.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE5096582A17A69F00DDD071 /* TwitterDeprecationTableFooterView.swift */; }; FE6BB143293227AC001E5F7A /* ContentMigrationCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE6BB142293227AC001E5F7A /* ContentMigrationCoordinator.swift */; }; FE6BB144293227AC001E5F7A /* ContentMigrationCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE6BB142293227AC001E5F7A /* ContentMigrationCoordinator.swift */; }; FE6BB1462932289B001E5F7A /* ContentMigrationCoordinatorTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE6BB1452932289B001E5F7A /* ContentMigrationCoordinatorTests.swift */; }; @@ -5798,6 +5807,8 @@ 011F52C52A15413800B04114 /* FreeToPaidPlansDashboardCardHelperTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FreeToPaidPlansDashboardCardHelperTests.swift; sourceTree = ""; }; 011F52C72A16551A00B04114 /* FreeToPaidPlansCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FreeToPaidPlansCoordinator.swift; sourceTree = ""; }; 011F52D22A1B84FF00B04114 /* PlansTracker.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PlansTracker.swift; sourceTree = ""; }; + 011F52D72A1BECA200B04114 /* PlanSelectionScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PlanSelectionScreen.swift; sourceTree = ""; }; + 011F52D92A1CA53300B04114 /* CheckoutViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CheckoutViewController.swift; sourceTree = ""; }; 01281E992A0456CB00464F8F /* DomainsSuggestionsScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DomainsSuggestionsScreen.swift; sourceTree = ""; }; 01281E9B2A051EEA00464F8F /* MenuNavigationTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenuNavigationTests.swift; sourceTree = ""; }; 0141929B2983F0A300CAEDB0 /* SupportConfiguration.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SupportConfiguration.swift; sourceTree = ""; }; @@ -5806,6 +5817,7 @@ 0147D650294B6EA600AA6410 /* StatsRevampStoreTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StatsRevampStoreTests.swift; sourceTree = ""; }; 0148CC282859127F00CF5D96 /* StatsWidgetsStoreTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StatsWidgetsStoreTests.swift; sourceTree = ""; }; 0148CC2A2859C87000CF5D96 /* BlogServiceMock.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BlogServiceMock.swift; sourceTree = ""; }; + 014ACD132A1E5033008A706C /* WebKitViewController+SandboxStore.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "WebKitViewController+SandboxStore.swift"; sourceTree = ""; }; 015BA4EA29A788A300920F4B /* StatsTotalInsightsCellTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StatsTotalInsightsCellTests.swift; sourceTree = ""; }; 01CE5006290A889F00A9C2E0 /* TracksConfiguration.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TracksConfiguration.swift; sourceTree = ""; }; 01CE5010290A890300A9C2E0 /* TracksConfiguration.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TracksConfiguration.swift; sourceTree = ""; }; @@ -8867,6 +8879,7 @@ F1F163C225658B4D003DC13B /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; F1F163C825658B4D003DC13B /* IntentsUI.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IntentsUI.framework; path = System/Library/Frameworks/IntentsUI.framework; sourceTree = SDKROOT; }; F373612EEEEF10E500093FF3 /* Pods-Apps-WordPress.release-alpha.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Apps-WordPress.release-alpha.xcconfig"; path = "../Pods/Target Support Files/Pods-Apps-WordPress/Pods-Apps-WordPress.release-alpha.xcconfig"; sourceTree = ""; }; + F4026B1C2A1BC88A00CC7781 /* DashboardDomainRegistrationCardCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DashboardDomainRegistrationCardCell.swift; sourceTree = ""; }; F40CC35C2954991C00D75A95 /* WordPress 146.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "WordPress 146.xcdatamodel"; sourceTree = ""; }; F41BDD72290BBDCA00B7F2B0 /* MigrationActionsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MigrationActionsView.swift; sourceTree = ""; }; F41BDD782910AFCA00B7F2B0 /* MigrationFlowCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MigrationFlowCoordinator.swift; sourceTree = ""; }; @@ -9276,6 +9289,8 @@ FE43DAAE26DFAD1C00CFF595 /* CommentContentTableViewCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = CommentContentTableViewCell.xib; sourceTree = ""; }; FE4DC5A2293A75FC008F322F /* MigrationDeepLinkRouter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MigrationDeepLinkRouter.swift; sourceTree = ""; }; FE4DC5A6293A79F1008F322F /* WordPressExportRoute.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WordPressExportRoute.swift; sourceTree = ""; }; + FE5096572A13D5BA00DDD071 /* WordPress 149.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "WordPress 149.xcdatamodel"; sourceTree = ""; }; + FE5096582A17A69F00DDD071 /* TwitterDeprecationTableFooterView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TwitterDeprecationTableFooterView.swift; sourceTree = ""; }; FE59DA9527D1FD0700624D26 /* WordPress 138.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "WordPress 138.xcdatamodel"; sourceTree = ""; }; FE6BB142293227AC001E5F7A /* ContentMigrationCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentMigrationCoordinator.swift; sourceTree = ""; }; FE6BB1452932289B001E5F7A /* ContentMigrationCoordinatorTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentMigrationCoordinatorTests.swift; sourceTree = ""; }; @@ -11105,6 +11120,7 @@ children = ( 3F3DD0B526FD18EB00F5F121 /* Blog+DomainsDashboardView.swift */, 175CC16F2720548700622FB4 /* DomainExpiryDateFormatter.swift */, + 014ACD132A1E5033008A706C /* WebKitViewController+SandboxStore.swift */, ); path = Utility; sourceTree = ""; @@ -11538,6 +11554,7 @@ EAD08D0D29D45E23001A72F9 /* CommentsScreen.swift */, D82E087729EEB7AF0098F500 /* DomainsScreen.swift */, 01281E992A0456CB00464F8F /* DomainsSuggestionsScreen.swift */, + 011F52D72A1BECA200B04114 /* PlanSelectionScreen.swift */, ); path = Screens; sourceTree = ""; @@ -11887,6 +11904,7 @@ 43D74AD220FB5A82004AD934 /* Views */, F47E154929E84A9300B6E426 /* DomainPurchasingWebFlowController.swift */, B07F133D2A16C69800AF7FCF /* PlanSelectionViewController.swift */, + 011F52D92A1CA53300B04114 /* CheckoutViewController.swift */, ); path = "Domain registration"; sourceTree = ""; @@ -13601,6 +13619,7 @@ 0CB4057B29C8DEE1008EED0A /* BlogDashboardPersonalizeCardCell.swift */, 011896A129D5AF0700D34BA9 /* BlogDashboardCardConfigurable.swift */, 0C35FFF529CBB5DE00D224EB /* BlogDashboardEmptyStateCell.swift */, + F4026B1C2A1BC88A00CC7781 /* DashboardDomainRegistrationCardCell.swift */, ); path = Cards; sourceTree = ""; @@ -16733,6 +16752,7 @@ E64384821C628FCC0052ADB5 /* WPStyleGuide+Sharing.swift */, E60BD230230A3DD400727E82 /* KeyringAccountHelper.swift */, 931F312B2714302A0075433B /* PublicizeServicesState.swift */, + FE5096582A17A69F00DDD071 /* TwitterDeprecationTableFooterView.swift */, ); name = Sharing; sourceTree = ""; @@ -21219,6 +21239,7 @@ 088B89891DA6F93B000E8DEF /* ReaderPostCardContentLabel.swift in Sources */, C3C2F84828AC8EBF00937E45 /* JetpackBannerScrollVisibility.swift in Sources */, F181EDE526B2AC7200C61241 /* BackgroundTasksCoordinator.swift in Sources */, + 011F52DA2A1CA53300B04114 /* CheckoutViewController.swift in Sources */, 8B93412F257029F60097D0AC /* FilterChipButton.swift in Sources */, 40A71C68220E1952002E3D25 /* StatsRecordValue+CoreDataClass.swift in Sources */, 4A1E77C6298897F6006281CC /* SharingSyncService.swift in Sources */, @@ -21325,6 +21346,7 @@ 1790A4531E28F0ED00AE54C2 /* UINavigationController+Helpers.swift in Sources */, FEA088052696F7AA00193358 /* WPStyleGuide+List.swift in Sources */, 17C2FF0925D4852400CDB712 /* UnifiedProloguePages.swift in Sources */, + FE5096592A17A69F00DDD071 /* TwitterDeprecationTableFooterView.swift in Sources */, 400A2C882217A985000A8A59 /* CountryStatsRecordValue+CoreDataClass.swift in Sources */, 08D345561CD7FBA900358E8C /* MenuHeaderViewController.m in Sources */, 088CC594282BEC41007B9421 /* TooltipPresenter.swift in Sources */, @@ -21669,6 +21691,7 @@ B5DD04741CD3DAB00003DF89 /* NSFetchedResultsController+Helpers.swift in Sources */, B55F1AA81C10936600FD04D4 /* BlogSettings+Discussion.swift in Sources */, E155EC721E9B7DCE009D7F63 /* PostTagPickerViewController.swift in Sources */, + F4026B1D2A1BC88A00CC7781 /* DashboardDomainRegistrationCardCell.swift in Sources */, 98A25BD1203CB25F006A5807 /* SignupEpilogueCell.swift in Sources */, B57AF5FA1ACDC73D0075A7D2 /* NoteBlockActionsTableViewCell.swift in Sources */, 8BA125EB27D8F5E4008B779F /* UIView+PinSubviewPriority.swift in Sources */, @@ -21740,6 +21763,7 @@ E66EB6F91C1B7A76003DABC5 /* ReaderSpacerView.swift in Sources */, AE2F3125270B6DA000B2A9C2 /* Scanner+QuotedText.swift in Sources */, B560914C208A671F00399AE4 /* WPStyleGuide+SiteCreation.swift in Sources */, + 014ACD142A1E5034008A706C /* WebKitViewController+SandboxStore.swift in Sources */, B0960C8727D14BD400BC9717 /* SiteIntentStep.swift in Sources */, 9801E682274EEBC4002FDDB6 /* ReaderDetailCommentsHeader.swift in Sources */, C352870527FDD35C004E2E51 /* SiteNameStep.swift in Sources */, @@ -22721,6 +22745,7 @@ 3F107B1929B6F7E0009B3658 /* XCTestCase+Utils.swift in Sources */, 3F2F855326FAF227000FCDA5 /* EditorPostSettings.swift in Sources */, 3F2F856026FAF235000FCDA5 /* NotificationsScreen.swift in Sources */, + 011F52D82A1BECA200B04114 /* PlanSelectionScreen.swift in Sources */, 3F2F854026FAE9DC000FCDA5 /* BlockEditorScreen.swift in Sources */, 3FB5C2B327059AC8007D0ECE /* XCUIElement+Scroll.swift in Sources */, 3F2F854726FAED51000FCDA5 /* MediaPickerAlbumListScreen.swift in Sources */, @@ -23764,6 +23789,7 @@ 93F72150271831820021A09F /* SiteStatsPinnedItemStore.swift in Sources */, FABB212A2602FC2C00C8785C /* BadgeLabel.swift in Sources */, FABB212B2602FC2C00C8785C /* ReaderTagsTableViewController.swift in Sources */, + FE50965A2A17A69F00DDD071 /* TwitterDeprecationTableFooterView.swift in Sources */, FABB212C2602FC2C00C8785C /* NotificationsViewController+AppRatings.swift in Sources */, FABB212D2602FC2C00C8785C /* BlogService.m in Sources */, DC9AF76A285DF8A300EA2A0D /* StatsFollowersChartViewModel.swift in Sources */, @@ -24181,6 +24207,7 @@ C31852A229670F8100A78BE9 /* JetpackScanViewController+JetpackBannerViewController.swift in Sources */, FABB225D2602FC2C00C8785C /* NotificationDetailsViewController.swift in Sources */, C7BB60172863609C00748FD9 /* QRLoginInternetConnectionChecker.swift in Sources */, + F4026B1E2A1BC88A00CC7781 /* DashboardDomainRegistrationCardCell.swift in Sources */, C3234F5527EBBACA004ADB29 /* SiteIntentVertical.swift in Sources */, FEF4DC5628439357003806BE /* ReminderScheduleCoordinator.swift in Sources */, FABB225F2602FC2C00C8785C /* MediaURLExporter.swift in Sources */, @@ -24945,6 +24972,7 @@ FABB24972602FC2C00C8785C /* JetpackLoginViewController.swift in Sources */, DC772AF2282009BA00664C02 /* InsightsLineChart.swift in Sources */, 176CE91727FB44C100F1E32B /* StatsBaseCell.swift in Sources */, + 011F52DB2A1CA53300B04114 /* CheckoutViewController.swift in Sources */, 934098C12719577D00B3E77E /* InsightType.swift in Sources */, FABB24992602FC2C00C8785C /* StreakStatsRecordValue+CoreDataProperties.swift in Sources */, 46F583AA2624CE790010A723 /* BlockEditorSettings+CoreDataClass.swift in Sources */, @@ -25254,6 +25282,7 @@ FABB25792602FC2C00C8785C /* Blog+Files.swift in Sources */, FABB257A2602FC2C00C8785C /* RevisionDiffsBrowserViewController.swift in Sources */, 46F583AE2624CE790010A723 /* BlockEditorSettingElement+CoreDataClass.swift in Sources */, + 014ACD152A1E5034008A706C /* WebKitViewController+SandboxStore.swift in Sources */, 80D9CFF829E5010300FE3400 /* PagesCardViewModel.swift in Sources */, FADFBD3C265F5B2E00039C41 /* WPStyleGuide+Jetpack.swift in Sources */, FABB257B2602FC2C00C8785C /* WPAccount.m in Sources */, @@ -30585,6 +30614,7 @@ E125443B12BF5A7200D87A0A /* WordPress.xcdatamodeld */ = { isa = XCVersionGroup; children = ( + FE5096572A13D5BA00DDD071 /* WordPress 149.xcdatamodel */, FA98B61329A39DA80071AAE8 /* WordPress 148.xcdatamodel */, F48D44B7298993900051EAA6 /* WordPress 147.xcdatamodel */, F40CC35C2954991C00D75A95 /* WordPress 146.xcdatamodel */, @@ -30734,7 +30764,7 @@ 8350E15911D28B4A00A7B073 /* WordPress.xcdatamodel */, E125443D12BF5A7200D87A0A /* WordPress 2.xcdatamodel */, ); - currentVersion = FA98B61329A39DA80071AAE8 /* WordPress 148.xcdatamodel */; + currentVersion = FE5096572A13D5BA00DDD071 /* WordPress 149.xcdatamodel */; name = WordPress.xcdatamodeld; path = Classes/WordPress.xcdatamodeld; sourceTree = ""; diff --git a/config/Version.internal.xcconfig b/config/Version.internal.xcconfig index b1e2443b602f..8629a9d770e4 100644 --- a/config/Version.internal.xcconfig +++ b/config/Version.internal.xcconfig @@ -1,4 +1,4 @@ -VERSION_SHORT=22.4 +VERSION_SHORT=22.5 // Internal long version example: VERSION_LONG=9.9.0.20180423 -VERSION_LONG=22.4.0.20230515 +VERSION_LONG=22.5.0.20230529 diff --git a/config/Version.public.xcconfig b/config/Version.public.xcconfig index 8711f00f3694..9114aa6522cb 100644 --- a/config/Version.public.xcconfig +++ b/config/Version.public.xcconfig @@ -1,4 +1,4 @@ -VERSION_SHORT=22.4 +VERSION_SHORT=22.5 // Public long version example: VERSION_LONG=9.9.0.0 -VERSION_LONG=22.4.0.0 +VERSION_LONG=22.5.0.0 diff --git a/fastlane/jetpack_metadata/ar-SA/release_notes.txt b/fastlane/jetpack_metadata/ar-SA/release_notes.txt index 7c6116fa24ce..54cd4f12859c 100644 --- a/fastlane/jetpack_metadata/ar-SA/release_notes.txt +++ b/fastlane/jetpack_metadata/ar-SA/release_notes.txt @@ -1 +1,9 @@ -أخبار عاجلة - يتم تمكين مكوّنات فيديوبرس الآن لمواقع ووردبريس.كوم البسيطة على الويب، لذا يمكنك استضافة فيديوهات عالية الجودة وتضمينها في محتوى يعبر عنك. نأمل في أن تتضمن تلك الفيديوهات القطط. +لقد أضفنا بطاقات إلى لوحة التحكم لديك. تعرض بطاقة سجل النشاط أحدث ثلاثة أنشطة لديك، كما تعرض بطاقة الصفحات آخر ثلاثة صفحات عدَّلتها. + +لقد أجرينا أيضًا بعض التغييرات المهمة على محرّر المكوّن. لتفادي تعطل التطبيق، لا يمكن تحويل المكوّنات القابلة لإعادة الاستخدام المحذوفة وغير المحددة بعد الآن إلى المكوّنات المنتظمة. + +عند النقر على مكوّن نصي متداخل، يمكنك تحرير المحتوى فورًا في ذلك المكوّن؛ ومن دون مزيد من النقر على كل مستوى متداخل للوصول إلى المكان الذي تريد الانتقال إليه. (أصابعنا أصابها التعب كذلك). + +عند التطرق إلى المكوّنات القابلة لإعادة الاستخدام، قمنا بتحديث رسالة "التحرير غير مدعوم" لإزالة الإشارة إلى ووردبريس. إننا على دراية بالتطبيق الذي نستخدمه، نعد بذلك. + +في نهاية الأمر، أصلحنا خطأ كان سيؤدي إلى تعطل التطبيق إذا حاولت رفع الوسائط إلى مكوّن تقليدي من دون منح ووردبريس إمكانية الوصول إلى مكتبة وسائط جهازك. بدلاً من ذلك، سترى موجّهًا يطلب الوصول إلى الوسائط. يسهل تنفيذها. diff --git a/fastlane/jetpack_metadata/de-DE/release_notes.txt b/fastlane/jetpack_metadata/de-DE/release_notes.txt index 319f5fa94fd0..642281700095 100644 --- a/fastlane/jetpack_metadata/de-DE/release_notes.txt +++ b/fastlane/jetpack_metadata/de-DE/release_notes.txt @@ -1 +1,9 @@ -Tolle Neuigkeiten: VideoPress-Blöcke sind jetzt für einfache WordPress.com-Websites aktiviert, damit du Videos in hoher Qualität nach Herzenslust hosten und einbetten kannst. Wir hoffen, in den Videos sind Katzen zu sehen. +Wir haben Karten zu deinem Dashboard hinzugefügt. Auf der Aktivitätsprotokoll-Karte werden dir deine drei aktuellsten Aktivitäten angezeigt und auf der Seiten-Karte siehst du die drei letzten von dir veränderten Seiten. + +Außerdem haben wir ein paar wichtige Änderungen am Block-Editor vorgenommen. Um zu verhindern, dass die App abstürzt, können gelöschte und nicht definierte, wiederverwendbare Blöcke nicht mehr in normale Blöcke umgewandelt werden. + +Wenn du auf einen verschachtelten Text-Block tippst, kannst du augenblicklich Inhalte in diesem Block bearbeiten. Es ist nicht mehr erforderlich, dass du dich durch jede Verschachtelungsebene tippst, um ans Ziel zu gelangen. (Auch unsere Finger taten weh.) + +Apropos wiederverwendbare Blöcke: Wir haben die Nachricht „editing not supported“ (Bearbeitung wird nicht unterstützt) aktualisiert und die Erwähnung von WordPress entfernt. Wir wissen, welche App wir verwenden – versprochen. + +Schließlich haben wir einen Fehler behoben, wodurch die App abgestürzt ist, wenn du Medien in den Classic-Block hochladen wolltest, ohne WordPress Zugriff auf die Mediathek deines Geräts zu gewähren. Stattdessen wird dir eine Aufforderung angezeigt, in der du um Medienzugriff gebeten wirst. Wenn das mal nicht kinderleicht ist. diff --git a/fastlane/jetpack_metadata/default/release_notes.txt b/fastlane/jetpack_metadata/default/release_notes.txt index 5a57a8c457e8..3283b346bb1a 100644 --- a/fastlane/jetpack_metadata/default/release_notes.txt +++ b/fastlane/jetpack_metadata/default/release_notes.txt @@ -1 +1,9 @@ -Breaking news—VideoPress blocks are now enabled for Simple WordPress.com websites, so you can host and embed high-quality videos to your heart’s content. We hope those videos include cats. +We added cards to your dashboard. The Activity Log card shows your three most recent activities, and the Pages card shows the last three pages you modified. + +We also made some important changes in the block editor. To prevent an app crash, deleted and undefined reusable blocks can no longer be converted to regular blocks. + +When you tap on a nested text block, you can immediately edit content in that block—no more tapping through every nesting level to get where you want to go. (Our fingers were getting tired, too.) + +Speaking of reusable blocks—we updated the “editing not supported” message to remove the mention of WordPress. We know what app we’re using, we promise. + +Finally, we fixed a bug where the app would crash if you tried to upload media to a classic block without giving WordPress access to your device’s media library. Instead, you’ll see a prompt asking for media access. Easy peasy, lemon squeezy. diff --git a/fastlane/jetpack_metadata/es-ES/release_notes.txt b/fastlane/jetpack_metadata/es-ES/release_notes.txt index afde57defd62..076b9ef76674 100644 --- a/fastlane/jetpack_metadata/es-ES/release_notes.txt +++ b/fastlane/jetpack_metadata/es-ES/release_notes.txt @@ -1 +1,9 @@ -Últimas noticias: los bloques de VideoPress ya están habilitados en los sitios web sencillos de WordPress.com para que puedas alojar e incrustar videos de alta calidad. Esperamos que sean videos de gatitos. +Hemos añadido tarjetas a tu escritorio. La tarjeta Registro de actividad muestra tus tres actividades más recientes y la tarjeta Páginas, las tres últimas páginas que has modificado. + +También hemos realizado algunos cambios importantes en el editor de bloques. Para evitar fallos en la aplicación, los bloques reutilizables que se hayan eliminado o que no se hayan definido ya no se podrán convertir en bloques normales. + +Cuando tocas en un bloque de texto anidado, puedes editar su contenido de forma inmediata. Ya no hay que tocar en todos los niveles de anidado para llegar adonde quieres ir. (A nosotros también se nos estaban cansando los dedos). + +Hablando de bloques reutilizables: hemos actualizado el mensaje "Editar (no compatible)" para quitar la mención de WordPress. Prometemos que sabemos qué aplicación estamos usando. + +Por último, hemos corregido un error por el cual la aplicación fallaba al intentar subir archivos multimedia a un bloque clásico sin permitir a WordPress acceder a la biblioteca de medios del dispositivo. En su lugar, aparecerá un mensaje solicitando el acceso a los archivos multimedia. Pan comido. diff --git a/fastlane/jetpack_metadata/fr-FR/release_notes.txt b/fastlane/jetpack_metadata/fr-FR/release_notes.txt index beb46f78d242..a26aba004cac 100644 --- a/fastlane/jetpack_metadata/fr-FR/release_notes.txt +++ b/fastlane/jetpack_metadata/fr-FR/release_notes.txt @@ -1 +1,9 @@ -Nouveauté – Les blocs VideoPress sont désormais activés pour les sites Web simples de WordPress.com, ce qui vous permet d’héberger et d’intégrer des vidéos de haute qualité à votre guise. Nous espérons qu’il y a des chats dans ces vidéos. +Nous avons ajouté des cartes à votre tableau de bord. La carte Journal d’activités affiche vos trois activités les plus récentes, et la carte Pages affiche les trois dernières pages que vous avez modifiées. + +Nous avons également apporté quelques changements importants à l’éditeur de blocs. Pour empêcher le blocage d’une application, des blocs réutilisables supprimés et non définis ne peuvent plus être convertis en blocs normaux. + +Lorsque vous appuyez sur un bloc paragraphe imbriqué, vous pouvez immédiatement modifier le contenu de ce bloc. Il n’est plus nécessaire d’appuyer sur chaque niveau de l’imbrication pour accéder là où vous voulez. (Nos doigts se fatiguaient aussi.) + +En parlant des blocs réutilisables, nous avons mis à jour le message relatif à l’édition non prise en charge pour supprimer la mention de WordPress. Nous connaissons l’application que nous utilisons, promis. + +Enfin, nous avons corrigé un bug dans lequel l’application se bloquait si vous essayiez de charger des médias dans un bloc classique sans accorder à WordPress l’accès à la bibliothèque de médias de votre appareil. Une invite s’affichait plutôt pour vous demander l’accès aux médias. Un jeu d’enfant. diff --git a/fastlane/jetpack_metadata/he/release_notes.txt b/fastlane/jetpack_metadata/he/release_notes.txt index 5fc288e98bdd..3460d4ee5cf7 100644 --- a/fastlane/jetpack_metadata/he/release_notes.txt +++ b/fastlane/jetpack_metadata/he/release_notes.txt @@ -1 +1,9 @@ -והרי החדשות – בלוקים של VideoPress כעת מופעלים באתרים פשוטים של WordPress.com, אפשר לאחסן ולהטמיע סרטונים איכותיים כאוות נפשך. אנחנו מקווים שאלו יהיו סרטונים עם חתולים. +הוספנו כרטיסים ללוח הבקרה. הכרטיס 'יומן פעילות' מציג את שלוש הפעילויות האחרונות שביצעת, והכרטיס 'עמודים' מציג את שלושת העמודים האחרונים ששינית. + +בנוסף, ביצענו כמה שינויים חשובים בעורך הבלוקים. כדי למנוע קריסה של האפליקציה, לא תתאפשר המרה לבלוקים רגילים מבלוקים לשימוש חוזר אשר נמחקו או שאינם מזוהים. + +כאשר מקישים על בלוק עם טקסט מקונן, אפשר מייד לערוך את התוכן בבלוק הזה – כבר אין צורך להמשיך להקיש על כל רמה מקוננת כדי לעבור לתוכן המבוקש. (גם האצבעות שלנו מתעייפות) + +אפרופו בלוקים לשימוש חוזר – עדכנו את ההודעה 'עריכה לא נתמכת' כדי להסיר את האזכור של WordPress. אל דאגה, אנחנו עדיין יודעים באיזו אפליקציה אנחנו משתמשים. + +אחרון חביב, תיקנו באג שגרם לאפליקציה לקרוס אם מנסים להעלות מדיה לבלוק קלאסי בלי להעניק ל-WordPress גישה לספריית המדיה של המכשיר. במקום, תופיע הודעה שמבקשת לאפשר את הגישה. בלי להסתבך, ישר ולעניין. diff --git a/fastlane/jetpack_metadata/id/release_notes.txt b/fastlane/jetpack_metadata/id/release_notes.txt index b605e93cdf12..fae1851ee203 100644 --- a/fastlane/jetpack_metadata/id/release_notes.txt +++ b/fastlane/jetpack_metadata/id/release_notes.txt @@ -1 +1,9 @@ -Kabar gembira! Blok VideoPress kini dapat digunakan pada situs web WordPress.com yang sederhana, jadi Anda dapat mengelola dan menyematkan video berkualitas tinggi sepuasnya. Semoga saja videonya kesukaan kami: video kucing. +Kami telah menambahkan kartu ke dasbor Anda. Kartu Log Aktivitas menunjukkan tiga aktivitas terkini Anda, sedangkan kartu Halaman menunjukkan tiga halaman yang terakhir Anda ubah. + +Kami juga membuat sejumlah perubahan penting di editor blok. Demi mencegah terjadinya crash pada aplikasi, blok pakai ulang yang dihapus dan tidak ditentukan kini tidak dapat diubah menjadi blok reguler. + +Saat Anda mengetuk blok teks bersusun, Anda dapat langsung menyunting konten di blok tersebut—tidak perlu mengetuk di tiap susunan untuk menyunting kontennya. (Jari kami juga capek.) + +Mengenai blok pakai ulang—kami telah memperbarui pesan "penyuntingan tidak didukung" sehingga tak lagi menyebutkan nama WordPress. Kami sudah tahu kok, aplikasi apa yang kami gunakan. + +Terakhir, kami juga memperbaiki bug yang membuat aplikasi crash saat Anda mengunduh media ke blok klasik tanpa memberi WordPress akses ke pustaka media perangkat. Sekarang, Anda akan melihat prompt yang meminta akses media. Mudah sekali, bukan? diff --git a/fastlane/jetpack_metadata/it/release_notes.txt b/fastlane/jetpack_metadata/it/release_notes.txt index 3a9278042570..18d85cc8cdf6 100644 --- a/fastlane/jetpack_metadata/it/release_notes.txt +++ b/fastlane/jetpack_metadata/it/release_notes.txt @@ -1 +1,9 @@ -Ultim'ora: i blocchi VideoPress sono ora abilitati per i siti web WordPress.com semplici, quindi puoi ospitare e incorporare video di alta qualità a tuo piacimento. Speriamo che quei video siano divertenti e gradevoli. +Abbiamo aggiunto schede alla tua bacheca. La scheda Log attività mostra le tue tre attività più recenti, mentre la scheda Pagine mostra le ultime tre pagine che hai modificato. + +Abbiamo anche apportato alcune importanti modifiche all'editor a blocchi. Per evitare un arresto anomalo dell'app, i blocchi riutilizzabili eliminati e non definiti non possono più essere convertiti in blocchi normali. + +Quando tocchi un blocco di testo nidificato, puoi modificare immediatamente il contenuto in quel blocco. Non dovrai più toccare ogni livello di nidificazione per arrivare dove desideri. (Anche noi avevamo le dita stanche.) + +A proposito di blocchi riutilizzabili, abbiamo aggiornato il messaggio "Modifica non supportata" per rimuovere la citazione di WordPress. Sappiamo quale app stiamo usando, lo promettiamo. + +Infine, abbiamo corretto un bug a causa del quale l'app si arrestava in modo anomalo se provavi a caricare elementi multimediali su un blocco classico senza consentire a WordPress l'accesso alla libreria multimediale del dispositivo. Visualizzerai invece un messaggio che richiede l'accesso agli elementi multimediali. Facile come bere un bicchier d'acqua. diff --git a/fastlane/jetpack_metadata/ja/release_notes.txt b/fastlane/jetpack_metadata/ja/release_notes.txt index c7524ae14ac0..af326c086d1d 100644 --- a/fastlane/jetpack_metadata/ja/release_notes.txt +++ b/fastlane/jetpack_metadata/ja/release_notes.txt @@ -1 +1,9 @@ -最新情報です。VideoPress ブロックがシンプルな WordPress.com サイトに対応しました。これからは思う存分、高品質な動画のホスティングや埋め込みができます。 動画コンテンツ (特に猫) の充実にお役立ていただけると幸いです。 +ダッシュボードにカードを追加しました。 アクティビティログのカードには直近3件のアクティビティ、ページのカードには直近3件の変更したページが表示されます。 + +また、ブロックエディターにもいくつかの重要な変更を加えました。 アプリのクラッシュを防ぐため、削除された未定義の再利用ブロックは通常のブロックに変換できなくなりました。 + +ネストされたテキストブロックをタップすると、そのブロック内のコンテンツをその場で編集できます。これからは目的の部分にたどり着くまでネスティングレベルを1つずつタップする必要はありません。 (指が疲れるのも過去の話です) + +再利用ブロックについてもう1つお知らせがあります。「編集がサポートされていません」というメッセージを更新し、WordPress についての記述を削除しました。 どのアプリを使っているかは誰もが把握しています。 + +最後に、WordPress にデバイスのメディアライブラリへのアクセスを許可しない状態で、クラシックブロックにメディアをアップロードしようとするとアプリがクラッシュするバグを修正しました。 代わりにメディアへのアクセスを求めるプロンプトが表示されます。 これくらいはお手の物です。 diff --git a/fastlane/jetpack_metadata/ko/release_notes.txt b/fastlane/jetpack_metadata/ko/release_notes.txt index 6c5d842ec994..d066e6db0a7a 100644 --- a/fastlane/jetpack_metadata/ko/release_notes.txt +++ b/fastlane/jetpack_metadata/ko/release_notes.txt @@ -1 +1,9 @@ -속보 - 이제 간단한 워드프레스닷컴 웹사이트에 비디오프레스 블록이 활성화되어 고품질 비디오를 마음껏 호스팅하고 임베드할 수 있습니다. 해당 비디오에 고양이가 포함되기를 바랍니다. +알림판에 카드를 추가했습니다. 활동 로그 카드에는 최근 활동 세 가지가 표시되고, 페이지 카드에는 수정한 최종 페이지 세 개가 표시됩니다. + +블록 편집기에도 몇 가지 중요한 변경 사항을 적용했습니다. 앱 작동 중단 방지를 위해 이제는 삭제되고 정의되지 않은 재사용 가능한 블록을 일반 블록으로 변환할 수 없습니다. + +중첩된 텍스트 블록을 누르면 즉시 해당 블록의 콘텐츠를 편집할 수 있습니다. 이제는 원하는 위치로 이동하려고 모든 중첩 레벨을 눌러보지 않아도 됩니다. (저희도 손가락이 피곤했습니다.) + +재사용 가능한 블록의 경우 "편집이 지원되지 않음"이라는 메시지를 업데이트하여 워드프레스 언급을 제거했습니다. 저희는 저희가 사용하고 있는 앱을 잘 알고 있어서 말씀드리는 것입니다. + +마지막으로, 기기의 미디어 라이브러리에 접근하는 권한을 워드프레스에 제공하지 않고 클래식 블록에 미디어를 업로드하려고 시도하면 앱 작동이 중단되는 버그를 수정했습니다. 그 대신에 미디어 접근 권한을 요청하는 프롬프트가 표시됩니다. 식은 죽 먹기처럼 쉽습니다. diff --git a/fastlane/jetpack_metadata/nl-NL/release_notes.txt b/fastlane/jetpack_metadata/nl-NL/release_notes.txt index 3b0a46d688d0..7db431462653 100644 --- a/fastlane/jetpack_metadata/nl-NL/release_notes.txt +++ b/fastlane/jetpack_metadata/nl-NL/release_notes.txt @@ -1 +1,9 @@ -Groot nieuws – VideoPress-blokken zijn nu ingeschakeld voor eenvoudige WordPress.com-sites, zodat je naar hartenlust video's van hoge kwaliteit kunt hosten en insluiten. We hopen dat dit kattenfilmpjes zijn. +We hebben kaarten aan je dashboard toegevoegd. De kaart Activiteitenlog toont je de drie meest recente activiteiten, en de kaart Pagina's toont de laatste drie pagina’s die je hebt aangepast. + +We hebben ook enkele belangrijke wijzigingen aangebracht in de blokeditor. Om het crashen van de app te voorkomen, kunnen verwijderde en ongedefinieerde herbruikbare blokken niet meer worden omgezet naar normale blokken. + +Wanneer je op een genest tekstblok tikt, kun je meteen de inhoud van dat blok bewerken, zonder dat je door elk niveau hoeft te klikken om de gewenste plek te bereiken. (Onze vingers werden ook moe.) + +Nu we het toch over herbruikbare blokken hebben, we hebben het bericht “bewerken niet ondersteund” geüpdatet om de vermelding van WordPress te verwijderen. Geloof ons, we weten wel welke app we gebruiken. + +We hebben eindelijk een bug opgelost waardoor de app crashte wanneer je probeerde media te uploaden naar een klassiek blok zonder WordPress toegang te verlenen tot de mediabibliotheek van je apparaat. In plaats daarvan krijg je een nu een melding waarin je wordt gevraagd om toegang tot je media te geven. Fluitje van een cent. diff --git a/fastlane/jetpack_metadata/pt-BR/release_notes.txt b/fastlane/jetpack_metadata/pt-BR/release_notes.txt index b72fb6443d37..429acb030e46 100644 --- a/fastlane/jetpack_metadata/pt-BR/release_notes.txt +++ b/fastlane/jetpack_metadata/pt-BR/release_notes.txt @@ -1 +1,9 @@ -Urgente: os blocos do VideoPress agora são habilitados para sites simples do WordPress.com para você poder hospedar e incorporar vídeos de alta qualidade conforme seu coração mandar. A gente espera que sejam vídeos de gatos. +Adicionamos cartões ao seu painel. O cartão de Registro de atividades mostra as suas três últimas atividades e o cartão de Páginas, as últimas três páginas que você modificou. + +Nós também fizemos algumas alterações importantes no editor de blocos. Para prevenir que o aplicativo trave, os blocos reutilizáveis deletados e indefinidos não podem mais ser convertidos em blocos comuns. + +Ao tocar em um bloco de texto aninhado, você pode editar o conteúdo desse bloco na mesma hora, sem precisar tocar em todos os níveis de aninhamento para chegar aonde deseja. (Também estávamos sofrendo com isso) + +Ainda sobre os blocos reutilizáveis, atualizamos a mensagem “edição não suportada” para remover a menção ao WordPress. A gente sabe qual é o aplicativo, sério. + +Por fim, corrigimos um bug em que o aplicativo travava se você tentasse fazer upload de mídia para um bloco clássico sem dar acesso ao WordPress para a biblioteca de mídia do seu dispositivo. Agora, você verá uma sugestão pedindo permissão para o acesso às mídias. Mamão com açúcar. diff --git a/fastlane/jetpack_metadata/ru/release_notes.txt b/fastlane/jetpack_metadata/ru/release_notes.txt index 80de40f02b09..2aeb7738cd88 100644 --- a/fastlane/jetpack_metadata/ru/release_notes.txt +++ b/fastlane/jetpack_metadata/ru/release_notes.txt @@ -1 +1,9 @@ -Срочные новости! Блоки VideoPress теперь доступны для простых веб-сайтов WordPress.com, благодаря чему можно размещать видеофайлы в любимом контенте. Надеемся, в этих видео будут котики. +В консоль добавлены карточки. На карточке «Журнал активности» показаны три последних действия, а на карточке «Страницы» — три последние изменённые страницы. + +Мы также внесли ряд важных изменений в редакторе блоков. Для предотвращения сбоя приложения удалённые и неопределённые элементы «Мой блок» больше нельзя преобразовать в обычные блоки. + +При касании вложенного параграфа его содержимое можно сразу редактировать: больше не нужно касаться каждого уровня вложенности, чтобы перейти к нужному блоку. (Наши пальцы тоже устали.) + +Для элементов «Мой блок» обновлено сообщение «Редактирование не поддерживается»: удалено упоминание WordPress. Все мы понимаем, с каким приложением работаем. + +Кроме того, исправлена ошибка, из-за которой приложение зависало при попытке загрузить медиафайлы в классический блок, если для WordPress не был предоставлен доступ к библиотеке файлов устройства. Теперь будет отображаться запрос на доступ к медиафайлам. Проще простого, раз — и готово. diff --git a/fastlane/jetpack_metadata/sv/release_notes.txt b/fastlane/jetpack_metadata/sv/release_notes.txt index bcaae3516ce3..e405bc0c68ea 100644 --- a/fastlane/jetpack_metadata/sv/release_notes.txt +++ b/fastlane/jetpack_metadata/sv/release_notes.txt @@ -1 +1,9 @@ -Viktiga nyheter – VideoPress-block är nu aktiverade för enkla WordPress.com-webbplatser, vilket gör att du kan lagra och bädda in högkvalitativa videoklipp för allt vad du är värd. Vi hoppas att videoklippen innehåller katter. +Vi har lagt till kort till din adminpanel. Kortet Aktivitetslogg visar dina tre senaste aktiviteter och kortet Sidor visar de tre senaste sidorna du har ändrat. + +Vi har också gjort några viktiga ändringar i blockredigeraren. För att förhindra att appen kraschar går det inte längre att konvertera borttagna och odefinierade återanvändbara block till vanliga block. + +Om du trycker på ett inbäddat textblock kan du omedelbart redigera innehållet i blocket – du behöver inte längre trycka dig igenom varje inbäddningsnivå för att komma dit du vill. (Vi blev också trötta i fingrarna.) + +På tal om återanvändbara block - vi har uppdaterat "Redigering stöds inte"-meddelandet, så att WordPress inte nämns. Vi vet vilken app vi använder, vi lovar. + +Slutligen har vi åtgärdat en bugg som gjorde att appen kraschade om du försökte ladda upp media till ett klassiskt block utan att ge WordPress åtkomst till din enhets mediabibliotek. Nu visas istället ett meddelande som ber om mediaåtkomst. Lätt som en plätt. diff --git a/fastlane/jetpack_metadata/tr/release_notes.txt b/fastlane/jetpack_metadata/tr/release_notes.txt index 28e7227e564d..ef2a1c78b679 100644 --- a/fastlane/jetpack_metadata/tr/release_notes.txt +++ b/fastlane/jetpack_metadata/tr/release_notes.txt @@ -1 +1,9 @@ -Son dakika haberi—VideoPress blokları artık Basit WordPress.com web siteleri için etkinleştirildi. Böylece istediğiniz kadar yüksek kaliteli video barındırabilir ve gömebilirsiniz. Umarız bu videolarda kediler de olur. +Kartları panonuza ekledik. Etkinlik Günlüğü kartı en yeni üç etkinliğinizi gösterirken, Sayfalar kartı değişiklik yaptığınız son üç sayfayı gösterir. + +Ayrıca blok düzenleyicide bazı önemli değişiklikler yaptık. Uygulamanın çökmesini önlemek amacıyla, silinen ve tanımlanmayan tekrar kullanılabilir bloklar artık normal bloklara dönüştürülemez. + +İç içe bir metin blokuna dokunduğunuzda, bu bloktaki içeriği hemen düzenleyebilirsiniz. Artık gitmek istediğiniz yere ulaşmak için her iç içe seviyeye dokunarak ilerlemeniz gerekmiyor. (Bizim parmaklarımız da yoruluyordu.) + +Tekrar kullanılabilir bloklarla ilgili olarak, "düzenleme desteklenmiyor" mesajını güncelleyerek WordPress ismini kaldırdık. Kullandığımız uygulamanın adını biliyoruz, bundan emin olabilirsiniz. + +Son olarak, cihazınızın ortam kütüphanesine WordPress erişimi vermeden klasik bir bloka ortam yüklemeyi denediğinizde uygulamanın çökmesine neden olan hatayı düzelttik. Bunun yerine, ortam erişimi isteyen bir istem göreceksiniz. Bu kadar kolay. diff --git a/fastlane/jetpack_metadata/zh-Hans/release_notes.txt b/fastlane/jetpack_metadata/zh-Hans/release_notes.txt index c24f2c1c3afe..6e513381246c 100644 --- a/fastlane/jetpack_metadata/zh-Hans/release_notes.txt +++ b/fastlane/jetpack_metadata/zh-Hans/release_notes.txt @@ -1 +1,9 @@ -重大消息 - VideoPress 区块现已在简单的 WordPress.com 网站上启用,因此您可以托管优质视频并将其嵌入到您喜欢的内容中。 我们这些视频中有猫咪。 +我们在您的仪表盘中添加了卡。 “活动日志”卡显示您最近的三个活动,“页面”卡显示您修改的最后三个页面。 + +我们还对区块编辑器进行了一些重要改动。 为了防止应用崩溃,已删除和未定义的可重用区块不能再转换为常规区块。 + +当您点击嵌套的文本区块时,您可以立即编辑该区块中的内容,而无需再点击每个嵌套级别才能到达您想要的位置。 (之前,我们的手指也会越来越累。) + +说到可重用区块,我们更新了“不支持编辑”的消息,删除了对 WordPress 的提及。 我们知道我们在使用什么应用,我们保证。 + +最后,我们修复了一个错误,即,当您试图将媒体上传到经典区块,而不允许 WordPress 访问您设备的媒体库时,应用会崩溃。 而现在,您会看到一个提示,要求获得媒体访问权限。 小菜一碟。 diff --git a/fastlane/jetpack_metadata/zh-Hant/release_notes.txt b/fastlane/jetpack_metadata/zh-Hant/release_notes.txt index 15919e55ec31..808d788ae16a 100644 --- a/fastlane/jetpack_metadata/zh-Hant/release_notes.txt +++ b/fastlane/jetpack_metadata/zh-Hant/release_notes.txt @@ -1 +1,9 @@ -重大消息 — WordPress.com 簡易網站現已啟用 VideoPress 區塊,你可以視需要託管和嵌入高品質的影片了。 希望你多上傳貓咪影片。 +我們已將卡片新增至儀表板。 「活動記錄」卡會顯示你最近的三項活動,而「頁面」卡會顯示你上次修改的三個頁面。 + +我們也在區塊編輯器中進行了一些重要變更。 為防止應用程式當機,已刪除和未定義的可重複使用區塊將無法再轉換為一般區塊。 + +當你點選巢狀段落區塊後,即可立即編輯該區塊中的內容,不用再點選每個巢狀層級才可前往所需位置。 (我們的手指可能也會過於疲累。) + +至於可重複使用區塊,我們已更新「不支援編輯」訊息以移除 WordPress 字樣。 我們都知道自己在使用哪個應用程式,在此保證。 + +最後,我們修正了一項錯誤,解決在未提供 WordPress 裝置媒體庫存取權之下,嘗試將媒體上傳至傳統區塊時導致應用程式當機的問題。 現在你會看到要求媒體存取權的提示。 我們將一切變得非常簡單! diff --git a/fastlane/metadata/ar-SA/release_notes.txt b/fastlane/metadata/ar-SA/release_notes.txt index 7c6116fa24ce..fe0448b3c8ff 100644 --- a/fastlane/metadata/ar-SA/release_notes.txt +++ b/fastlane/metadata/ar-SA/release_notes.txt @@ -1 +1,3 @@ -أخبار عاجلة - يتم تمكين مكوّنات فيديوبرس الآن لمواقع ووردبريس.كوم البسيطة على الويب، لذا يمكنك استضافة فيديوهات عالية الجودة وتضمينها في محتوى يعبر عنك. نأمل في أن تتضمن تلك الفيديوهات القطط. +عند النقر على مكوّن نصي متداخل، يمكنك تحرير المحتوى فورًا في ذلك المكوّن؛ ومن دون مزيد من النقر على كل مستوى متداخل للوصول إلى المكان الذي تريد الانتقال إليه. (أصابعنا أصابها التعب كذلك). + +أصلحنا أيضًا خطأ كان سيؤدي إلى تعطل التطبيق إذا حاولت رفع الوسائط إلى مكوّن تقليدي من دون منح ووردبريس إمكانية الوصول إلى مكتبة وسائط جهازك. بدلاً من ذلك، سترى موجّهًا يطلب الوصول إلى الوسائط. يسهل تنفيذها. diff --git a/fastlane/metadata/de-DE/release_notes.txt b/fastlane/metadata/de-DE/release_notes.txt index 319f5fa94fd0..008e795b9095 100644 --- a/fastlane/metadata/de-DE/release_notes.txt +++ b/fastlane/metadata/de-DE/release_notes.txt @@ -1 +1,3 @@ -Tolle Neuigkeiten: VideoPress-Blöcke sind jetzt für einfache WordPress.com-Websites aktiviert, damit du Videos in hoher Qualität nach Herzenslust hosten und einbetten kannst. Wir hoffen, in den Videos sind Katzen zu sehen. +Wenn du auf einen verschachtelten Text-Block tippst, kannst du augenblicklich Inhalte in diesem Block bearbeiten. Es ist nicht mehr erforderlich, dass du dich durch jede Verschachtelungsebene tippst, um ans Ziel zu gelangen. (Auch unsere Finger taten weh.) + +Außerdem haben wir einen Fehler behoben, wodurch die App abgestürzt ist, wenn du Medien in den Classic-Block hochladen wolltest, ohne WordPress Zugriff auf die Mediathek deines Geräts zu gewähren. Stattdessen wird dir eine Aufforderung angezeigt, in der du um Medienzugriff gebeten wirst. Wenn das mal nicht kinderleicht ist. diff --git a/fastlane/metadata/default/release_notes.txt b/fastlane/metadata/default/release_notes.txt index 5a57a8c457e8..0b6420d6b642 100644 --- a/fastlane/metadata/default/release_notes.txt +++ b/fastlane/metadata/default/release_notes.txt @@ -1 +1,3 @@ -Breaking news—VideoPress blocks are now enabled for Simple WordPress.com websites, so you can host and embed high-quality videos to your heart’s content. We hope those videos include cats. +When you tap on a nested text block, you can immediately edit content in that block—no more tapping through every nesting level to get where you want to go. (Our fingers were getting tired, too.) + +We also fixed a bug where the app would crash if you tried to upload media to a classic block without giving WordPress access to your device’s media library. Instead, you’ll see a prompt asking for media access. Easy peasy, lemon squeezy. diff --git a/fastlane/metadata/es-ES/release_notes.txt b/fastlane/metadata/es-ES/release_notes.txt index 1e589eb1d5ce..c15cae178524 100644 --- a/fastlane/metadata/es-ES/release_notes.txt +++ b/fastlane/metadata/es-ES/release_notes.txt @@ -1 +1,3 @@ -Noticia de última hora - los bloques de VideoPress ya están disponibles para las webs WordPress.com, para que puedas alojar e incrustar vídeos de alta calidad a tu antojo. Esperamos que esos vídeos incluyan gatos. +Cuando pulsas sobre un bloque de texto anidado, puedes editar inmediatamente el contenido de ese bloque, sin tener que pulsar sobre cada nivel de anidamiento para llegar a donde quieres. (A nosotros también se nos cansaban los dedos). + +También hemos corregido un error por el que la aplicación se bloqueaba si intentabas subir contenido multimedia a un bloque clásico sin dar acceso a WordPress a la biblioteca de medios de tu dispositivo. En su lugar, aparecerá un mensaje solicitando acceso a los medios. Muy fácil. diff --git a/fastlane/metadata/fr-FR/release_notes.txt b/fastlane/metadata/fr-FR/release_notes.txt index beb46f78d242..1684686454c2 100644 --- a/fastlane/metadata/fr-FR/release_notes.txt +++ b/fastlane/metadata/fr-FR/release_notes.txt @@ -1 +1,3 @@ -Nouveauté – Les blocs VideoPress sont désormais activés pour les sites Web simples de WordPress.com, ce qui vous permet d’héberger et d’intégrer des vidéos de haute qualité à votre guise. Nous espérons qu’il y a des chats dans ces vidéos. +Lorsque vous appuyez sur un bloc paragraphe imbriqué, vous pouvez immédiatement modifier le contenu de ce bloc. Il n’est plus nécessaire d’appuyer sur chaque niveau de l’imbrication pour accéder là où vous voulez. (Nos doigts se fatiguaient aussi.) + +Nous avons également corrigé un bug dans lequel l’application se bloquait si vous essayiez de charger des médias dans un bloc classique sans accorder à WordPress l’accès à la bibliothèque de médias de votre appareil. Une invite s’affichait plutôt pour vous demander l’accès aux médias. Un jeu d’enfant. diff --git a/fastlane/metadata/he/release_notes.txt b/fastlane/metadata/he/release_notes.txt index 5fc288e98bdd..d3e82c6c17d8 100644 --- a/fastlane/metadata/he/release_notes.txt +++ b/fastlane/metadata/he/release_notes.txt @@ -1 +1,3 @@ -והרי החדשות – בלוקים של VideoPress כעת מופעלים באתרים פשוטים של WordPress.com, אפשר לאחסן ולהטמיע סרטונים איכותיים כאוות נפשך. אנחנו מקווים שאלו יהיו סרטונים עם חתולים. +כאשר מקישים על בלוק עם טקסט מקונן, אפשר מייד לערוך את התוכן בבלוק הזה – כבר אין צורך להמשיך להקיש על כל רמה מקוננת כדי לעבור לתוכן המבוקש. (גם האצבעות שלנו מתעייפות) + +בנוסף, תיקנו באג שגרם לאפליקציה לקרוס אם מנסים להעלות מדיה לבלוק קלאסי בלי להעניק ל-WordPress גישה לספריית המדיה של המכשיר. במקום, תופיע הודעה שמבקשת לאפשר את הגישה. בלי להסתבך, ישר ולעניין. diff --git a/fastlane/metadata/id/release_notes.txt b/fastlane/metadata/id/release_notes.txt index 966123d04388..3aacf4b9b8d7 100644 --- a/fastlane/metadata/id/release_notes.txt +++ b/fastlane/metadata/id/release_notes.txt @@ -1 +1,3 @@ -Berita terkini—Blok VideoPress kini tersedia pada situs web Simple WordPress.com, sehingga Anda dapat menghosting dan menyematkan video berkualitas tinggi ke konten inti Anda. Kami harap video tersebut menyertakan kucing. +Saat Anda mengetuk blok teks bersusun, Anda dapat langsung menyunting konten di blok tersebut—tidak perlu mengetuk di tiap susunan untuk menyunting kontennya. (Jari kami juga capek.) + +Kami juga memperbaiki bug yang membuat aplikasi crash saat Anda mengunduh media ke blok klasik tanpa memberi WordPress akses ke pustaka media perangkat. Sekarang, Anda akan melihat prompt yang meminta akses media. Mudah sekali, bukan? diff --git a/fastlane/metadata/it/release_notes.txt b/fastlane/metadata/it/release_notes.txt index 3a9278042570..5d425d53bc19 100644 --- a/fastlane/metadata/it/release_notes.txt +++ b/fastlane/metadata/it/release_notes.txt @@ -1 +1,3 @@ -Ultim'ora: i blocchi VideoPress sono ora abilitati per i siti web WordPress.com semplici, quindi puoi ospitare e incorporare video di alta qualità a tuo piacimento. Speriamo che quei video siano divertenti e gradevoli. +Quando tocchi un blocco di testo nidificato, puoi modificare immediatamente il contenuto in quel blocco. Non dovrai più toccare ogni livello di nidificazione per arrivare dove desideri. (Anche noi avevamo le dita stanche.) + +Abbiamo anche corretto un bug a causa del quale l'app si arrestava in modo anomalo se provavi a caricare elementi multimediali su un blocco classico senza consentire a WordPress l'accesso alla libreria multimediale del dispositivo. Visualizzerai invece un messaggio che richiede l'accesso agli elementi multimediali. Facile come bere un bicchier d'acqua. diff --git a/fastlane/metadata/ja/release_notes.txt b/fastlane/metadata/ja/release_notes.txt index c7524ae14ac0..4b3a2c2591c6 100644 --- a/fastlane/metadata/ja/release_notes.txt +++ b/fastlane/metadata/ja/release_notes.txt @@ -1 +1,3 @@ -最新情報です。VideoPress ブロックがシンプルな WordPress.com サイトに対応しました。これからは思う存分、高品質な動画のホスティングや埋め込みができます。 動画コンテンツ (特に猫) の充実にお役立ていただけると幸いです。 +ネストされたテキストブロックをタップすると、そのブロック内のコンテンツをその場で編集できます。これからは目的の部分にたどり着くまでネスティングレベルを1つずつタップする必要はありません。 (指が疲れるのも過去の話です) + +また、WordPress にデバイスのメディアライブラリへのアクセスを許可しない状態で、クラシックブロックにメディアをアップロードしようとするとアプリがクラッシュするバグも修正しました。 代わりにメディアへのアクセスを求めるプロンプトが表示されます。 これくらいはお手の物です。 diff --git a/fastlane/metadata/ko/release_notes.txt b/fastlane/metadata/ko/release_notes.txt index 6c5d842ec994..676a4e04894b 100644 --- a/fastlane/metadata/ko/release_notes.txt +++ b/fastlane/metadata/ko/release_notes.txt @@ -1 +1,3 @@ -속보 - 이제 간단한 워드프레스닷컴 웹사이트에 비디오프레스 블록이 활성화되어 고품질 비디오를 마음껏 호스팅하고 임베드할 수 있습니다. 해당 비디오에 고양이가 포함되기를 바랍니다. +중첩된 텍스트 블록을 누르면 즉시 해당 블록의 콘텐츠를 편집할 수 있습니다. 이제는 원하는 위치로 이동하려고 모든 중첩 레벨을 눌러보지 않아도 됩니다. (저희도 손가락이 피곤했습니다.) + +기기의 미디어 라이브러리에 접근하는 권한을 워드프레스에 제공하지 않고 클래식 블록에 미디어를 업로드하려고 시도하면 앱 작동이 중단되는 버그도 수정했습니다. 그 대신에 미디어 접근 권한을 요청하는 프롬프트가 표시됩니다. 식은 죽 먹기처럼 쉽습니다. diff --git a/fastlane/metadata/nl-NL/release_notes.txt b/fastlane/metadata/nl-NL/release_notes.txt index 3b0a46d688d0..a9dfe347b43f 100644 --- a/fastlane/metadata/nl-NL/release_notes.txt +++ b/fastlane/metadata/nl-NL/release_notes.txt @@ -1 +1,3 @@ -Groot nieuws – VideoPress-blokken zijn nu ingeschakeld voor eenvoudige WordPress.com-sites, zodat je naar hartenlust video's van hoge kwaliteit kunt hosten en insluiten. We hopen dat dit kattenfilmpjes zijn. +Wanneer je op een genest tekstblok tikt, kun je meteen de inhoud van dat blok bewerken, zonder dat je door elk niveau hoeft te klikken om de gewenste plek te bereiken. (Onze vingers werden ook moe.) + +We hebben een bug opgelost waardoor de app crashte wanneer je probeerde media te uploaden naar een klassiek blok zonder WordPress toegang te verlenen tot de mediabibliotheek van je apparaat. In plaats daarvan krijg je een nu een melding waarin je wordt gevraagd om toegang tot je media te geven. Fluitje van een cent. diff --git a/fastlane/metadata/ru/release_notes.txt b/fastlane/metadata/ru/release_notes.txt index 80de40f02b09..75d066f8ba8d 100644 --- a/fastlane/metadata/ru/release_notes.txt +++ b/fastlane/metadata/ru/release_notes.txt @@ -1 +1,3 @@ -Срочные новости! Блоки VideoPress теперь доступны для простых веб-сайтов WordPress.com, благодаря чему можно размещать видеофайлы в любимом контенте. Надеемся, в этих видео будут котики. +При касании вложенного параграфа его содержимое можно сразу редактировать: больше не нужно касаться каждого уровня вложенности, чтобы перейти к нужному блоку. (Наши пальцы тоже устали.) + +Мы также исправили ошибку, из-за которой приложение зависало при попытке загрузить медиафайлы в классический блок, если для WordPress не был предоставлен доступ к библиотеке файлов устройства. Теперь будет отображаться запрос на доступ к медиафайлам. Проще простого, раз — и готово. diff --git a/fastlane/metadata/sv/release_notes.txt b/fastlane/metadata/sv/release_notes.txt index bcaae3516ce3..bd2561af9830 100644 --- a/fastlane/metadata/sv/release_notes.txt +++ b/fastlane/metadata/sv/release_notes.txt @@ -1 +1,3 @@ -Viktiga nyheter – VideoPress-block är nu aktiverade för enkla WordPress.com-webbplatser, vilket gör att du kan lagra och bädda in högkvalitativa videoklipp för allt vad du är värd. Vi hoppas att videoklippen innehåller katter. +Om du trycker på ett inbäddat textblock kan du omedelbart redigera innehållet i blocket – du behöver inte längre trycka dig igenom varje inbäddningsnivå för att komma dit du vill. (Vi blev också trötta i fingrarna.) + +Vi har också åtgärdat en bugg som gjorde att appen kraschade om du försökte ladda upp media till ett klassiskt block utan att ge WordPress åtkomst till din enhets mediabibliotek. Nu visas istället ett meddelande som ber om mediaåtkomst. Lätt som en plätt. diff --git a/fastlane/metadata/tr/release_notes.txt b/fastlane/metadata/tr/release_notes.txt index 33fd3b366b38..c70903df7f2f 100644 --- a/fastlane/metadata/tr/release_notes.txt +++ b/fastlane/metadata/tr/release_notes.txt @@ -1 +1,3 @@ -Son dakika haberi—VideoPress blokları artık basit WordPress.com web siteleri için etkinleştirildi; böylece yüksek kaliteli videoları istediğiniz gibi barındırabilir ve yerleştirebilirsiniz. Umarız bu videolar kedileri içerir. +İç içe bir metin blokuna dokunduğunuzda, bu bloktaki içeriği hemen düzenleyebilirsiniz. Artık gitmek istediğiniz yere ulaşmak için her iç içe seviyeye dokunarak ilerlemeniz gerekmiyor. (Bizim parmaklarımız da yoruluyordu.) + +Ayrıca cihazınızın ortam kütüphanesine WordPress erişimi vermeden klasik bir bloka ortam yüklemeyi denediğinizde uygulamanın çökmesine neden olan hatayı düzelttik. Bunun yerine, ortam erişimi isteyen bir istem göreceksiniz. Bu kadar kolay. diff --git a/fastlane/metadata/zh-Hans/release_notes.txt b/fastlane/metadata/zh-Hans/release_notes.txt index c24f2c1c3afe..6933070b329f 100644 --- a/fastlane/metadata/zh-Hans/release_notes.txt +++ b/fastlane/metadata/zh-Hans/release_notes.txt @@ -1 +1,3 @@ -重大消息 - VideoPress 区块现已在简单的 WordPress.com 网站上启用,因此您可以托管优质视频并将其嵌入到您喜欢的内容中。 我们这些视频中有猫咪。 +当您点击嵌套的文本区块时,您可以立即编辑该区块中的内容,而无需再点击每个嵌套级别才能到达您想要的位置。 (之前,我们的手指也会越来越累。) + +我们还修复了一个错误,即,当您试图将媒体上传到经典区块,而不允许 WordPress 访问您设备的媒体库时,应用会崩溃。 而现在,您会看到一个提示,要求获得媒体访问权限。 小菜一碟。 diff --git a/fastlane/metadata/zh-Hant/release_notes.txt b/fastlane/metadata/zh-Hant/release_notes.txt index 15919e55ec31..70d36f514893 100644 --- a/fastlane/metadata/zh-Hant/release_notes.txt +++ b/fastlane/metadata/zh-Hant/release_notes.txt @@ -1 +1,3 @@ -重大消息 — WordPress.com 簡易網站現已啟用 VideoPress 區塊,你可以視需要託管和嵌入高品質的影片了。 希望你多上傳貓咪影片。 +當你點選巢狀段落區塊後,即可立即編輯該區塊中的內容,不用再點選每個巢狀層級才可前往所需位置。 (我們的手指可能也會過於疲累。) + +我們也修正了一項錯誤,解決在未提供 WordPress 裝置媒體庫存取權之下,嘗試將媒體上傳至傳統區塊時導致應用程式當機的問題。 現在你會看到要求媒體存取權的提示。 我們將一切變得非常簡單!