[Reader IA] Update Reader strings

Fixes #19961

Update Reader strings to new terminologies:

- `Site` -> `Blog`
- `Follow` -> `Subscribe`
- `Topic` -> `Tag`

-----

## To Test:

- Launch Jetpack and login
- Do a general smoke test of Reader screens
- Look for any of the following strings:
   - Follow, follows, unfollow, following, etc
   - Site, sites
   - Topic, topics

-----

## Regression Notes

1. Potential unintended areas of impact

    - Reader labels

2. What I did to test those areas of impact (or what existing automated tests I relied on)

    - Manual testing, updated unit tests

3. What automated tests I added (or what prevented me from doing so)

    --

-----

## PR Submission Checklist:

- [x] I have completed the Regression Notes.
- [x] I have considered adding accessibility improvements for my changes.
- [x] I have considered if this change warrants user-facing release notes and have added them to `RELEASE-NOTES.txt` if necessary.

-----

## UI Changes Testing Checklist:

- [ ] Portrait and landscape orientations.
- [ ] Light and dark modes.
- [ ] Fonts: Larger, smaller and bold text.
- [ ] High contrast.
- [ ] Talkback.
- [ ] Languages with large words or with letters/accents not frequently used in English.
- [ ] Right-to-left languages. (Even if translation isn’t complete, formatting should still respect the right-to-left layout)
- [ ] Large and small screen sizes. (Tablet and smaller phones)
- [ ] Multi-tasking: Split screen and Pop-up view. (Android 10 or higher)

[Reader IA] Update all “Follow” and “Following” terms to “Subscribe” and “Subscribed”
Context: p1703152769063979-slack-C05N140C8H5

diff --git a/WordPress/src/main/java/org/wordpress/android/ui/reader/ReaderBlogFragment.java b/WordPress/src/main/java/org/wordpress/android/ui/reader/ReaderBlogFragment.java
index 696b3e44118f..bba413b96c1f 100644
--- a/WordPress/src/main/java/org/wordpress/android/ui/reader/ReaderBlogFragment.java
+++ b/WordPress/src/main/java/org/wordpress/android/ui/reader/ReaderBlogFragment.java
@@ -98,8 +98,8 @@ private void checkEmptyView() {
         if (hasBlogAdapter() && getBlogAdapter().isEmpty()) {
             actionableEmptyView.setVisibility(View.VISIBLE);
             actionableEmptyView.image.setImageResource(R.drawable.img_illustration_following_empty_results_196dp);
-            actionableEmptyView.subtitle.setText(R.string.reader_empty_followed_blogs_description);
-            actionableEmptyView.button.setText(R.string.reader_empty_followed_blogs_button_discover);
+            actionableEmptyView.subtitle.setText(R.string.reader_no_followed_blogs_description);
+            actionableEmptyView.button.setText(R.string.reader_no_followed_blogs_button_discover);
             actionableEmptyView.button.setOnClickListener(new OnClickListener() {
                 @Override public void onClick(View view) {
                     ReaderTag tag = ReaderUtils.getTagFromEndpoint(ReaderTag.DISCOVER_PATH);
@@ -120,13 +120,13 @@ private void checkEmptyView() {
                 case FOLLOWED:
                     if (getBlogAdapter().hasSearchFilter()) {
                         actionableEmptyView.updateLayoutForSearch(true, 0);
-                        actionableEmptyView.title.setText(R.string.reader_empty_followed_blogs_search_title);
+                        actionableEmptyView.title.setText(R.string.reader_no_followed_blogs_search_title);
                         actionableEmptyView.subtitle.setVisibility(View.GONE);
                         actionableEmptyView.button.setVisibility(View.GONE);
                         actionableEmptyView.image.setVisibility(View.GONE);
                     } else {
                         actionableEmptyView.updateLayoutForSearch(false, 0);
-                        actionableEmptyView.title.setText(R.string.reader_empty_followed_blogs_title);
+                        actionableEmptyView.title.setText(R.string.reader_no_followed_blogs_title);
                         actionableEmptyView.subtitle.setVisibility(View.VISIBLE);
                         actionableEmptyView.button.setVisibility(View.VISIBLE);
                         actionableEmptyView.image.setVisibility(View.VISIBLE);
@@ -182,7 +182,7 @@ public void onCreateOptionsMenu(@NonNull Menu menu, @NonNull MenuInflater inflat
         MenuItem searchMenu = menu.findItem(R.id.menu_search);
         SearchView searchView = (SearchView) searchMenu.getActionView();
         searchView.setMaxWidth(Integer.MAX_VALUE);
-        searchView.setQueryHint(getString(R.string.reader_hint_search_followed_sites));
+        searchView.setQueryHint(getString(R.string.reader_hint_search_subscribed_blogs));

         searchMenu.setOnActionExpandListener(new MenuItem.OnActionExpandListener() {
             @Override
diff --git a/WordPress/src/main/java/org/wordpress/android/ui/reader/ReaderPostListActivity.java b/WordPress/src/main/java/org/wordpress/android/ui/reader/ReaderPostListActivity.java
index 7b79445fc7f6..e408b0b92e88 100644
--- a/WordPress/src/main/java/org/wordpress/android/ui/reader/ReaderPostListActivity.java
+++ b/WordPress/src/main/java/org/wordpress/android/ui/reader/ReaderPostListActivity.java
@@ -104,7 +104,7 @@ public void handleOnBackPressed() {
             toolbar.setNavigationOnClickListener(view -> finish());

             if (getPostListType() == ReaderPostListType.BLOG_PREVIEW) {
-                setTitle(R.string.reader_title_blog_preview);
+                setTitle(R.string.reader_activity_title_blog_preview);
                 if (savedInstanceState == null) {
                     long blogId = getIntent().getLongExtra(ReaderConstants.ARG_BLOG_ID, 0);
                     long feedId = getIntent().getLongExtra(ReaderConstants.ARG_FEED_ID, 0);
@@ -119,7 +119,7 @@ public void handleOnBackPressed() {
                     mSiteId = savedInstanceState.getLong(ReaderConstants.KEY_SITE_ID);
                 }
             } else if (getPostListType() == ReaderPostListType.TAG_PREVIEW) {
-                setTitle(R.string.reader_title_tag_preview);
+                setTitle(R.string.reader_activity_title_tag_preview);
                 ReaderTag tag = (ReaderTag) getIntent().getSerializableExtra(ReaderConstants.ARG_TAG);
                 if (tag != null && savedInstanceState == null) {
                     showListFragmentForTag(tag, mPostListType);
@@ -290,7 +290,7 @@ private void showListFragmentForFeed(long feedId) {

         String title = ReaderBlogTable.getFeedName(feedId);
         if (title.isEmpty()) {
-            title = getString(R.string.reader_title_blog_preview);
+            title = getString(R.string.reader_activity_title_blog_preview);
         }
         setTitle(title);
     }
diff --git a/WordPress/src/main/java/org/wordpress/android/ui/reader/ReaderPostListFragment.java b/WordPress/src/main/java/org/wordpress/android/ui/reader/ReaderPostListFragment.java
index 445ac315c255..983beafa8651 100644
--- a/WordPress/src/main/java/org/wordpress/android/ui/reader/ReaderPostListFragment.java
+++ b/WordPress/src/main/java/org/wordpress/android/ui/reader/ReaderPostListFragment.java
@@ -1715,10 +1715,11 @@ private void setEmptyTitleDescriptionAndButton(boolean requestFailed) {
                     if (getCurrentTag().isFollowedSites() || getCurrentTag().isDefaultInMemoryTag()) {
                         if (ReaderBlogTable.hasFollowedBlogs()) {
                             title = getString(R.string.reader_empty_followed_blogs_no_recent_posts_title);
-                            description = getString(R.string.reader_empty_followed_blogs_no_recent_posts_description);
+                            description = getString(
+                                    R.string.reader_empty_followed_blogs_subscribed_no_recent_posts_description);
                         } else {
-                            title = getString(R.string.reader_empty_followed_blogs_title);
-                            description = getString(R.string.reader_empty_followed_blogs_description);
+                            title = getString(R.string.reader_no_followed_blogs_title);
+                            description = getString(R.string.reader_no_followed_blogs_description);
                         }
                         mActionableEmptyView.image.setImageResource(
                                 R.drawable.img_illustration_following_empty_results_196dp);
@@ -1728,13 +1729,13 @@ private void setEmptyTitleDescriptionAndButton(boolean requestFailed) {
                         description = getString(R.string.reader_empty_posts_liked_description);
                         button = ActionableEmptyViewButtonType.FOLLOWED;
                     } else if (getCurrentTag().isListTopic()) {
-                        title = getString(R.string.reader_empty_posts_in_custom_list);
+                        title = getString(R.string.reader_empty_blogs_posts_in_custom_list);
                     } else {
-                        title = getString(R.string.reader_empty_posts_in_tag);
+                        title = getString(R.string.reader_no_posts_with_this_tag);
                     }
                     break;
                 case BLOG_PREVIEW:
-                    title = getString(R.string.reader_empty_posts_in_blog);
+                    title = getString(R.string.reader_no_posts_in_blog);
                     break;
                 case SEARCH_RESULTS:
                     isSearching = true;
@@ -1756,7 +1757,7 @@ private void setEmptyTitleDescriptionAndButton(boolean requestFailed) {
                 case TAG_PREVIEW:
                     // fall through to the default case
                 default:
-                    title = getString(R.string.reader_empty_posts_in_tag);
+                    title = getString(R.string.reader_no_posts_with_this_tag);
                     break;
             }
         }
@@ -1841,7 +1842,7 @@ private void setEmptyTitleDescriptionAndButton(@NonNull String title, String des

             switch (button) {
                 case DISCOVER:
-                    mActionableEmptyView.button.setText(R.string.reader_empty_followed_blogs_button_discover);
+                    mActionableEmptyView.button.setText(R.string.reader_no_followed_blogs_button_discover);
                     break;
                 case FOLLOWED:
                     mActionableEmptyView.button.setText(R.string.reader_empty_followed_blogs_button_subscriptions);
@@ -2290,7 +2291,8 @@ public void run() {
                         } else if (getCurrentTag().isListTopic() && isPostAdapterEmpty() && isAdded()) {
                             mActionableEmptyView.image.setImageResource(
                                     R.drawable.img_illustration_empty_results_216dp);
-                            mActionableEmptyView.title.setText(getString(R.string.reader_empty_posts_in_custom_list));
+                            mActionableEmptyView.title.setText(
+                                    getString(R.string.reader_empty_blogs_posts_in_custom_list));
                             mActionableEmptyView.button.setVisibility(View.GONE);
                             mActionableEmptyView.subtitle.setVisibility(View.GONE);
                             showEmptyView();
diff --git a/WordPress/src/main/java/org/wordpress/android/ui/reader/ReaderSubsActivity.java b/WordPress/src/main/java/org/wordpress/android/ui/reader/ReaderSubsActivity.java
index 202ce2102dca..fd0d8281fddf 100644
--- a/WordPress/src/main/java/org/wordpress/android/ui/reader/ReaderSubsActivity.java
+++ b/WordPress/src/main/java/org/wordpress/android/ui/reader/ReaderSubsActivity.java
@@ -278,12 +278,12 @@ private void addAsTag(final String entry) {
         }

         if (!ReaderTag.isValidTagName(entry)) {
-            showInfoSnackbar(getString(R.string.reader_toast_err_tag_invalid));
+            showInfoSnackbar(getString(R.string.reader_toast_err_tag_not_valid));
             return;
         }

         if (ReaderTagTable.isFollowedTagName(entry)) {
-            showInfoSnackbar(getString(R.string.reader_toast_err_tag_exists));
+            showInfoSnackbar(getString(R.string.reader_toast_err_tag_already_subscribed));
             return;
         }

@@ -317,7 +317,7 @@ private void addAsUrl(final String entry) {

         // make sure it isn't already followed
         if (ReaderBlogTable.isFollowedBlogUrl(normUrl) || ReaderBlogTable.isFollowedFeedUrl(normUrl)) {
-            showInfoSnackbar(getString(R.string.reader_toast_err_already_follow_blog));
+            showInfoSnackbar(getString(R.string.reader_toast_err_already_follow_this_blog));
             return;
         }

@@ -353,7 +353,7 @@ private void performAddTag(final String tagName) {
                         ReaderTracker.SOURCE_SETTINGS
                 );
             } else {
-                showInfoSnackbar(getString(R.string.reader_toast_err_add_tag));
+                showInfoSnackbar(getString(R.string.reader_toast_err_adding_tag));
                 mLastAddedTagName = null;
             }
         };
@@ -389,14 +389,15 @@ public void onFailure(int statusCode) {
                     String errMsg;
                     switch (statusCode) {
                         case 401:
-                            errMsg = getString(R.string.reader_toast_err_follow_blog_not_authorized);
+                            errMsg = getString(R.string.reader_toast_err_follow_not_authorized_to_access_blog);
                             break;
                         case 0: // can happen when host name not found
                         case 404:
-                            errMsg = getString(R.string.reader_toast_err_follow_blog_not_found);
+                            errMsg = getString(R.string.reader_toast_err_follow_blog_could_not_be_found);
                             break;
                         default:
-                            errMsg = getString(R.string.reader_toast_err_follow_blog) + " (" + statusCode + ")";
+                            errMsg = getString(R.string.reader_toast_err_unable_to_follow_blog) + " (" + statusCode
+                                     + ")";
                             break;
                     }
                     showInfoSnackbar(errMsg);
@@ -416,14 +417,14 @@ private void followBlogUrl(String normUrl) {
                 // clear the edit text and hide the soft keyboard
                 mEditAdd.setText(null);
                 EditTextUtils.hideSoftInput(mEditAdd);
-                showInfoSnackbar(getString(R.string.reader_label_followed_blog));
+                showInfoSnackbar(getString(R.string.reader_label_blog_subscribed));
                 getPageAdapter().refreshBlogFragments(ReaderBlogType.FOLLOWED);
                 // update tags if the site we added belongs to a tag we don't yet have
                 // also update followed blogs so lists are ready in case we need to present them
                 // in bottom sheet reader filtering
                 performUpdate(EnumSet.of(UpdateTask.TAGS, UpdateTask.FOLLOWED_BLOGS));
             } else {
-                showInfoSnackbar(getString(R.string.reader_toast_err_follow_blog));
+                showInfoSnackbar(getString(R.string.reader_toast_err_unable_to_follow_blog));
             }
         };
         // note that this uses the endpoint to follow as a feed since typed URLs are more
@@ -537,9 +538,9 @@ private class SubsPageAdapter extends FragmentPagerAdapter {
         public CharSequence getPageTitle(int position) {
             switch (position) {
                 case TAB_IDX_FOLLOWED_TAGS:
-                    return getString(R.string.reader_page_followed_tags);
+                    return getString(R.string.reader_page_followed_tags_title);
                 case TAB_IDX_FOLLOWED_BLOGS:
-                    return getString(R.string.reader_page_followed_blogs);
+                    return getString(R.string.reader_page_followed_blogs_title);
                 default:
                     return super.getPageTitle(position);
             }
diff --git a/WordPress/src/main/java/org/wordpress/android/ui/reader/ReaderTagFragment.java b/WordPress/src/main/java/org/wordpress/android/ui/reader/ReaderTagFragment.java
index ee2a37de089f..5605514e4939 100644
--- a/WordPress/src/main/java/org/wordpress/android/ui/reader/ReaderTagFragment.java
+++ b/WordPress/src/main/java/org/wordpress/android/ui/reader/ReaderTagFragment.java
@@ -49,8 +49,8 @@ private void checkEmptyView() {

         actionableEmptyView.image.setImageResource(R.drawable.img_illustration_empty_results_216dp);
         actionableEmptyView.image.setVisibility(View.VISIBLE);
-        actionableEmptyView.title.setText(R.string.reader_empty_followed_tags_title);
-        actionableEmptyView.subtitle.setText(R.string.reader_empty_followed_tags_subtitle);
+        actionableEmptyView.title.setText(R.string.reader_no_followed_tags_title);
+        actionableEmptyView.subtitle.setText(R.string.reader_empty_subscribed_tags_subtitle);
         actionableEmptyView.subtitle.setVisibility(View.VISIBLE);
         actionableEmptyView.setVisibility(hasTagAdapter() && getTagAdapter().isEmpty() ? View.VISIBLE : View.GONE);
     }
diff --git a/WordPress/src/main/java/org/wordpress/android/ui/reader/adapters/ReaderBlogAdapter.java b/WordPress/src/main/java/org/wordpress/android/ui/reader/adapters/ReaderBlogAdapter.java
index db5fb935c3a8..095981ff9370 100644
--- a/WordPress/src/main/java/org/wordpress/android/ui/reader/adapters/ReaderBlogAdapter.java
+++ b/WordPress/src/main/java/org/wordpress/android/ui/reader/adapters/ReaderBlogAdapter.java
@@ -226,8 +226,8 @@ private void toggleFollow(Context context, ReaderFollowButton followButton, Read
         final ActionListener listener = succeeded -> {
             followButton.setEnabled(true);
             if (!succeeded) {
-                int errResId = isAskingToFollow ? R.string.reader_toast_err_follow_blog
-                        : R.string.reader_toast_err_unfollow_blog;
+                int errResId = isAskingToFollow ? R.string.reader_toast_err_unable_to_follow_blog
+                        : R.string.reader_toast_err_unable_to_unfollow_blog;
                 ToastUtils.showToast(context, errResId);
                 followButton.setIsFollowed(!isAskingToFollow);
                 blog.isFollowing = !isAskingToFollow;
diff --git a/WordPress/src/main/java/org/wordpress/android/ui/reader/adapters/ReaderPostAdapter.java b/WordPress/src/main/java/org/wordpress/android/ui/reader/adapters/ReaderPostAdapter.java
index df4131dd8cff..d18687c31e00 100644
--- a/WordPress/src/main/java/org/wordpress/android/ui/reader/adapters/ReaderPostAdapter.java
+++ b/WordPress/src/main/java/org/wordpress/android/ui/reader/adapters/ReaderPostAdapter.java
@@ -338,8 +338,8 @@ private void toggleFollowButton(

         ReaderActions.ActionListener listener = succeeded -> {
             if (!succeeded) {
-                int errResId = isAskingToFollow ? R.string.reader_toast_err_add_tag
-                        : R.string.reader_toast_err_remove_tag;
+                int errResId = isAskingToFollow ? R.string.reader_toast_err_adding_tag
+                        : R.string.reader_toast_err_removing_tag;
                 ToastUtils.showToast(context, errResId);
             } else {
                 if (isAskingToFollow) {
diff --git a/WordPress/src/main/java/org/wordpress/android/ui/reader/adapters/ReaderTagAdapter.java b/WordPress/src/main/java/org/wordpress/android/ui/reader/adapters/ReaderTagAdapter.java
index bd52b4498bf8..57a3d3fe42a7 100644
--- a/WordPress/src/main/java/org/wordpress/android/ui/reader/adapters/ReaderTagAdapter.java
+++ b/WordPress/src/main/java/org/wordpress/android/ui/reader/adapters/ReaderTagAdapter.java
@@ -109,7 +109,7 @@ private void performDeleteTag(@NonNull ReaderTag tag) {
             @Override
             public void onActionResult(boolean succeeded) {
                 if (!succeeded && hasContext()) {
-                    ToastUtils.showToast(getContext(), R.string.reader_toast_err_remove_tag);
+                    ToastUtils.showToast(getContext(), R.string.reader_toast_err_removing_tag);
                     refresh();
                 }
             }
diff --git a/WordPress/src/main/java/org/wordpress/android/ui/reader/discover/ReaderCardUiState.kt b/WordPress/src/main/java/org/wordpress/android/ui/reader/discover/ReaderCardUiState.kt
index 376bda8156da..25ca10f9e81d 100644
--- a/WordPress/src/main/java/org/wordpress/android/ui/reader/discover/ReaderCardUiState.kt
+++ b/WordPress/src/main/java/org/wordpress/android/ui/reader/discover/ReaderCardUiState.kt
@@ -169,8 +169,8 @@ sealed class ReaderCardUiState {
         ) {
             val followContentDescription: UiStringRes by lazy {
                 when (isFollowed) {
-                    true -> R.string.reader_btn_unfollow
-                    false -> R.string.reader_btn_follow
+                    true -> R.string.reader_btn_subscribed
+                    false -> R.string.reader_btn_subscribe
                 }.let(::UiStringRes)
             }
         }
diff --git a/WordPress/src/main/java/org/wordpress/android/ui/reader/discover/ReaderDiscoverViewModel.kt b/WordPress/src/main/java/org/wordpress/android/ui/reader/discover/ReaderDiscoverViewModel.kt
index e907abe6a395..40cc96456622 100644
--- a/WordPress/src/main/java/org/wordpress/android/ui/reader/discover/ReaderDiscoverViewModel.kt
+++ b/WordPress/src/main/java/org/wordpress/android/ui/reader/discover/ReaderDiscoverViewModel.kt
@@ -552,14 +552,14 @@ class ReaderDiscoverViewModel @Inject constructor(

             data class ShowNoFollowedTagsUiState(override val action: () -> Unit) : EmptyUiState() {
                 override val titleResId = R.string.reader_discover_empty_title
-                override val subTitleRes = R.string.reader_discover_empty_subtitle
+                override val subTitleRes = R.string.reader_discover_empty_subtitle_subscribe
                 override val buttonResId = R.string.reader_discover_empty_button_text
             }

             data class ShowNoPostsUiState(override val action: () -> Unit) : EmptyUiState() {
                 override val titleResId = R.string.reader_discover_no_posts_title
-                override val buttonResId = R.string.reader_discover_no_posts_button_text
-                override val subTitleRes = R.string.reader_discover_no_posts_subtitle
+                override val buttonResId = R.string.reader_discover_no_posts_button_tags_text
+                override val subTitleRes = R.string.reader_discover_no_posts_subscribe_subtitle
                 override val illustrationResId = R.drawable.img_illustration_empty_results_216dp
             }
         }
diff --git a/WordPress/src/main/java/org/wordpress/android/ui/reader/discover/ReaderPostCardActionsHandler.kt b/WordPress/src/main/java/org/wordpress/android/ui/reader/discover/ReaderPostCardActionsHandler.kt
index 951eb7f6c678..c96e0ef86858 100644
--- a/WordPress/src/main/java/org/wordpress/android/ui/reader/discover/ReaderPostCardActionsHandler.kt
+++ b/WordPress/src/main/java/org/wordpress/android/ui/reader/discover/ReaderPostCardActionsHandler.kt
@@ -405,7 +405,7 @@ class ReaderPostCardActionsHandler @Inject constructor(
                     _snackbarEvents.postValue(
                         Event(
                             SnackbarMessageHolder(
-                                UiStringRes(R.string.reader_toast_blog_blocked),
+                                UiStringRes(R.string.reader_toast_posts_from_this_blog_blocked),
                                 UiStringRes(R.string.undo),
                                 {
                                     coroutineScope.launch {
@@ -419,13 +419,13 @@ class ReaderPostCardActionsHandler @Inject constructor(
                 BlockSiteState.Success, BlockSiteState.Failed.AlreadyRunning -> Unit // do nothing
                 BlockSiteState.Failed.NoNetwork -> {
                     _snackbarEvents.postValue(
-                        Event(SnackbarMessageHolder(UiStringRes(R.string.reader_toast_err_block_blog)))
+                        Event(SnackbarMessageHolder(UiStringRes(R.string.reader_toast_err_unable_to_block_blog)))
                     )
                 }
                 BlockSiteState.Failed.RequestFailed -> {
                     _refreshPosts.postValue(Event(Unit))
                     _snackbarEvents.postValue(
-                        Event(SnackbarMessageHolder(UiStringRes(R.string.reader_toast_err_block_blog)))
+                        Event(SnackbarMessageHolder(UiStringRes(R.string.reader_toast_err_unable_to_block_blog)))
                     )
                 }
             }
diff --git a/WordPress/src/main/java/org/wordpress/android/ui/reader/discover/ReaderPostMoreButtonUiStateBuilder.kt b/WordPress/src/main/java/org/wordpress/android/ui/reader/discover/ReaderPostMoreButtonUiStateBuilder.kt
index e3fcc2c5b7fd..4af5cfe018c6 100644
--- a/WordPress/src/main/java/org/wordpress/android/ui/reader/discover/ReaderPostMoreButtonUiStateBuilder.kt
+++ b/WordPress/src/main/java/org/wordpress/android/ui/reader/discover/ReaderPostMoreButtonUiStateBuilder.kt
@@ -103,7 +103,7 @@ class ReaderPostMoreButtonUiStateBuilder @Inject constructor(
         if (isNotificationsEnabled) {
             SecondaryAction(
                 type = SITE_NOTIFICATIONS,
-                label = UiStringRes(R.string.reader_btn_notifications_off),
+                label = UiStringRes(R.string.reader_btn_blog_notifications_off),
                 labelColor = R.attr.wpColorOnSurfaceMedium,
                 iconRes = R.drawable.ic_reader_bell_24dp,
                 isSelected = true,
@@ -112,7 +112,7 @@ class ReaderPostMoreButtonUiStateBuilder @Inject constructor(
         } else {
             SecondaryAction(
                 type = SITE_NOTIFICATIONS,
-                label = UiStringRes(R.string.reader_btn_notifications_on),
+                label = UiStringRes(R.string.reader_btn_blog_notifications_on),
                 labelColor = MaterialR.attr.colorOnSurface,
                 iconRes = R.drawable.ic_reader_bell_24dp,
                 iconColor = R.attr.wpColorOnSurfaceMedium,
@@ -196,7 +196,7 @@ class ReaderPostMoreButtonUiStateBuilder @Inject constructor(
         if (isPostFollowed) {
             SecondaryAction(
                 type = FOLLOW,
-                label = UiStringRes(R.string.reader_btn_unfollow),
+                label = UiStringRes(R.string.reader_btn_subscribed),
                 labelColor = R.attr.wpColorOnSurfaceMedium,
                 iconRes = R.drawable.ic_reader_following_white_24dp,
                 isSelected = true,
@@ -205,7 +205,7 @@ class ReaderPostMoreButtonUiStateBuilder @Inject constructor(
         } else {
             SecondaryAction(
                 type = FOLLOW,
-                label = UiStringRes(R.string.reader_btn_follow),
+                label = UiStringRes(R.string.reader_btn_subscribe),
                 labelColor = MaterialR.attr.colorSecondary,
                 iconRes = R.drawable.ic_reader_follow_white_24dp,
                 isSelected = false,
@@ -216,7 +216,7 @@ class ReaderPostMoreButtonUiStateBuilder @Inject constructor(
     private fun buildBlockSite(onButtonClicked: (Long, Long, ReaderPostCardActionType) -> Unit) =
         SecondaryAction(
             type = BLOCK_SITE,
-            label = UiStringRes(R.string.reader_menu_block_blog),
+            label = UiStringRes(R.string.reader_menu_block_this_blog),
             labelColor = R.attr.wpColorError,
             iconRes = R.drawable.ic_block_white_24dp,
             iconColor = R.attr.wpColorError,
diff --git a/WordPress/src/main/java/org/wordpress/android/ui/reader/discover/interests/ReaderInterestsActivity.kt b/WordPress/src/main/java/org/wordpress/android/ui/reader/discover/interests/ReaderInterestsActivity.kt
index cf7787ea9b7e..1259e9ccf0db 100644
--- a/WordPress/src/main/java/org/wordpress/android/ui/reader/discover/interests/ReaderInterestsActivity.kt
+++ b/WordPress/src/main/java/org/wordpress/android/ui/reader/discover/interests/ReaderInterestsActivity.kt
@@ -18,7 +18,7 @@ class ReaderInterestsActivity : LocaleAwareActivity() {
         supportActionBar?.let {
             it.setHomeButtonEnabled(true)
             it.setDisplayHomeAsUpEnabled(true)
-            it.title = getString(R.string.reader_title_interests)
+            it.title = getString(R.string.reader_title_tags)
         }
     }

diff --git a/WordPress/src/main/java/org/wordpress/android/ui/reader/services/update/ReaderUpdateLogic.java b/WordPress/src/main/java/org/wordpress/android/ui/reader/services/update/ReaderUpdateLogic.java
index 911fff9bb797..a9af93b20e15 100644
--- a/WordPress/src/main/java/org/wordpress/android/ui/reader/services/update/ReaderUpdateLogic.java
+++ b/WordPress/src/main/java/org/wordpress/android/ui/reader/services/update/ReaderUpdateLogic.java
@@ -125,7 +125,7 @@ private boolean displayNameUpdateWasNeeded(ReaderTagList serverTopics) {
         for (ReaderTag tag : serverTopics) {
             String tagNameBefore = tag.getTagDisplayName();
             if (tag.isFollowedSites()) {
-                tag.setTagDisplayName(mContext.getString(R.string.reader_following_display_name));
+                tag.setTagDisplayName(mContext.getString(R.string.reader_subscribed_display_name));
                 if (!tagNameBefore.equals(tag.getTagDisplayName())) updateDone = true;
             } else if (tag.isDiscover()) {
                 tag.setTagDisplayName(mContext.getString(R.string.reader_discover_display_name));
diff --git a/WordPress/src/main/java/org/wordpress/android/ui/reader/utils/ReaderUtils.java b/WordPress/src/main/java/org/wordpress/android/ui/reader/utils/ReaderUtils.java
index 506747e0518c..3090e254e266 100644
--- a/WordPress/src/main/java/org/wordpress/android/ui/reader/utils/ReaderUtils.java
+++ b/WordPress/src/main/java/org/wordpress/android/ui/reader/utils/ReaderUtils.java
@@ -332,8 +332,8 @@ public static ReaderTag getDefaultTag() {
         if (tag.isDefaultInMemoryTag()) {
             // if the tag was created in memory from createTagFromTagName
             // we need to set some fields as below before to use it
-            tag.setTagTitle(context.getString(R.string.reader_following_display_name));
-            tag.setTagDisplayName(context.getString(R.string.reader_following_display_name));
+            tag.setTagTitle(context.getString(R.string.reader_subscribed_display_name));
+            tag.setTagDisplayName(context.getString(R.string.reader_subscribed_display_name));

             String baseUrl = clientUtilsProvider.getTagUpdateEndpointURL();

diff --git a/WordPress/src/main/java/org/wordpress/android/ui/reader/views/ReaderFollowButton.kt b/WordPress/src/main/java/org/wordpress/android/ui/reader/views/ReaderFollowButton.kt
index 0f7f57cf269f..30b3338c7545 100644
--- a/WordPress/src/main/java/org/wordpress/android/ui/reader/views/ReaderFollowButton.kt
+++ b/WordPress/src/main/java/org/wordpress/android/ui/reader/views/ReaderFollowButton.kt
@@ -45,7 +45,7 @@ class ReaderFollowButton @JvmOverloads constructor(

     private fun updateFollowText() {
         if (showCaption) {
-            setText(if (isFollowed) R.string.reader_btn_unfollow else R.string.reader_btn_follow)
+            setText(if (isFollowed) R.string.reader_btn_subscribed else R.string.reader_btn_subscribe)
         }
         isSelected = isFollowed
     }
diff --git a/WordPress/src/main/java/org/wordpress/android/ui/reader/views/ReaderSiteHeaderView.java b/WordPress/src/main/java/org/wordpress/android/ui/reader/views/ReaderSiteHeaderView.java
index 8774c71f249e..7fb609c0941b 100644
--- a/WordPress/src/main/java/org/wordpress/android/ui/reader/views/ReaderSiteHeaderView.java
+++ b/WordPress/src/main/java/org/wordpress/android/ui/reader/views/ReaderSiteHeaderView.java
@@ -105,7 +105,7 @@ public void loadBlogInfo(

         final ReaderBlog localBlogInfo;
         if (blogId == 0 && feedId == 0) {
-            ToastUtils.showToast(getContext(), R.string.reader_toast_err_get_blog_info);
+            ToastUtils.showToast(getContext(), R.string.reader_toast_err_show_blog);
             return;
         }

@@ -218,9 +218,9 @@ private void loadFollowCount(ReaderBlog blogInfo, TextView txtFollowCount) {

             final int followersStringRes;
             if (blogInfo.numSubscribers == 1) {
-                followersStringRes = R.string.reader_label_followers_count_single;
+                followersStringRes = R.string.reader_label_subscribers_count_single;
             } else {
-                followersStringRes = R.string.reader_label_followers_count;
+                followersStringRes = R.string.reader_label_subscribers_count;
             }

             final String formattedNumberSubscribers;
@@ -237,7 +237,7 @@ private void loadFollowCount(ReaderBlog blogInfo, TextView txtFollowCount) {
         } else {
             txtFollowCount.setText(String.format(
                     LocaleManager.getSafeLocale(getContext()),
-                    getContext().getString(R.string.reader_label_follow_count),
+                    getContext().getString(R.string.reader_label_subscribe_count),
                     blogInfo.numSubscribers));
         }
     }
@@ -283,8 +283,8 @@ private void toggleFollowStatus(final View followButton, final String source) {
             }
             mFollowButton.setEnabled(true);
             if (!succeeded) {
-                int errResId = isAskingToFollow ? R.string.reader_toast_err_follow_blog
-                        : R.string.reader_toast_err_unfollow_blog;
+                int errResId = isAskingToFollow ? R.string.reader_toast_err_unable_to_follow_blog
+                        : R.string.reader_toast_err_unable_to_unfollow_blog;
                 ToastUtils.showToast(getContext(), errResId);
                 mFollowButton.setIsFollowed(!isAskingToFollow);
             }
diff --git a/WordPress/src/main/java/org/wordpress/android/ui/reader/views/ReaderSiteSearchResultView.java b/WordPress/src/main/java/org/wordpress/android/ui/reader/views/ReaderSiteSearchResultView.java
index 89d259af6e0a..9358ba1a99f1 100644
--- a/WordPress/src/main/java/org/wordpress/android/ui/reader/views/ReaderSiteSearchResultView.java
+++ b/WordPress/src/main/java/org/wordpress/android/ui/reader/views/ReaderSiteSearchResultView.java
@@ -99,8 +99,8 @@ public void onActionResult(boolean succeeded) {
                 }
                 mFollowButton.setEnabled(true);
                 if (!succeeded) {
-                    int errResId = isAskingToFollow ? R.string.reader_toast_err_follow_blog
-                            : R.string.reader_toast_err_unfollow_blog;
+                    int errResId = isAskingToFollow ? R.string.reader_toast_err_unable_to_follow_blog
+                            : R.string.reader_toast_err_unable_to_unfollow_blog;
                     ToastUtils.showToast(getContext(), errResId);
                     mFollowButton.setIsFollowed(!isAskingToFollow);
                     mSite.setFollowing(!isAskingToFollow);
diff --git a/WordPress/src/main/res/layout/follow_action_layout.xml b/WordPress/src/main/res/layout/follow_action_layout.xml
index d8453f15804d..0aa8e6cf3565 100644
--- a/WordPress/src/main/res/layout/follow_action_layout.xml
+++ b/WordPress/src/main/res/layout/follow_action_layout.xml
@@ -19,7 +19,7 @@
             android:layout_marginEnd="@dimen/margin_large"
             android:layout_marginStart="@dimen/margin_large"
             android:background="?android:attr/actionBarItemBackground"
-            android:text="@string/reader_btn_follow"
+            android:text="@string/reader_btn_subscribe"
             android:textAppearance="?android:attr/actionMenuTextAppearance"
             android:textColor="@color/option_menu_disabled_selector" />

diff --git a/WordPress/src/main/res/layout/reader_activity_subs.xml b/WordPress/src/main/res/layout/reader_activity_subs.xml
index f609dde21a85..15b65f4dd241 100644
--- a/WordPress/src/main/res/layout/reader_activity_subs.xml
+++ b/WordPress/src/main/res/layout/reader_activity_subs.xml
@@ -20,7 +20,7 @@
                 style="@style/TextAppearance.App.Toolbar.Title"
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
-                android:text="@string/reader_title_subs"
+                android:text="@string/reader_activity_title_manage_tags_blogs"
                 android:textColor="?attr/colorOnSurface" />
         </com.google.android.material.appbar.MaterialToolbar>

@@ -74,7 +74,7 @@
             android:layout_height="wrap_content"
             android:layout_alignParentStart="true"
             android:layout_toStartOf="@+id/btn_add"
-            android:hint="@string/reader_hint_add_tag_or_url"
+            android:hint="@string/reader_hint_add_tag_or_url_subscribe"
             android:minHeight="@dimen/min_touch_target_sz"
             android:paddingStart="@dimen/margin_large"
             android:paddingEnd="@dimen/margin_medium"
diff --git a/WordPress/src/main/res/layout/reader_discover_fragment_layout.xml b/WordPress/src/main/res/layout/reader_discover_fragment_layout.xml
index 27d63b70dec5..74d03ffa8d81 100644
--- a/WordPress/src/main/res/layout/reader_discover_fragment_layout.xml
+++ b/WordPress/src/main/res/layout/reader_discover_fragment_layout.xml
@@ -34,9 +34,9 @@
         android:layout_width="match_parent"
         android:layout_height="match_parent"
         android:visibility="gone"
-        app:aevButton="@string/reader_discover_no_posts_button_text"
+        app:aevButton="@string/reader_discover_no_posts_button_tags_text"
         app:aevImage="@drawable/img_illustration_empty_results_216dp"
-        app:aevSubtitle="@string/reader_discover_no_posts_subtitle"
+        app:aevSubtitle="@string/reader_discover_no_posts_subscribe_subtitle"
         app:aevTitle="@string/reader_discover_no_posts_title"
         tools:visibility="visible" />

diff --git a/WordPress/src/main/res/layout/reader_empty_view.xml b/WordPress/src/main/res/layout/reader_empty_view.xml
index cd994873add4..12a9432a9d55 100644
--- a/WordPress/src/main/res/layout/reader_empty_view.xml
+++ b/WordPress/src/main/res/layout/reader_empty_view.xml
@@ -8,8 +8,8 @@
     android:layout_height="match_parent"
     android:layout_marginTop="@dimen/toolbar_height"
     android:visibility="gone"
-    app:aevButton="@string/reader_empty_followed_blogs_button_discover"
+    app:aevButton="@string/reader_no_followed_blogs_button_discover"
     app:aevImage="@drawable/img_illustration_following_empty_results_196dp"
-    app:aevSubtitle="@string/reader_empty_followed_blogs_description"
-    app:aevTitle="@string/reader_empty_followed_blogs_title"
+    app:aevSubtitle="@string/reader_no_followed_blogs_description"
+    app:aevTitle="@string/reader_no_followed_blogs_title"
     tools:visibility="visible" />
diff --git a/WordPress/src/main/res/layout/reader_fragment_list.xml b/WordPress/src/main/res/layout/reader_fragment_list.xml
index 76bc1f35300d..570725bbf63e 100644
--- a/WordPress/src/main/res/layout/reader_fragment_list.xml
+++ b/WordPress/src/main/res/layout/reader_fragment_list.xml
@@ -21,7 +21,7 @@
         android:layout_width="match_parent"
         android:layout_height="match_parent"
         android:visibility="gone"
-        app:aevTitle="@string/reader_empty_recommended_blogs"
+        app:aevTitle="@string/reader_no_recommended_blogs_title"
         tools:visibility="visible" />

 </RelativeLayout>
diff --git a/WordPress/src/main/res/layout/reader_interests_fragment_layout.xml b/WordPress/src/main/res/layout/reader_interests_fragment_layout.xml
index 96546afa2bb4..15510ac7b41f 100644
--- a/WordPress/src/main/res/layout/reader_interests_fragment_layout.xml
+++ b/WordPress/src/main/res/layout/reader_interests_fragment_layout.xml
@@ -6,7 +6,7 @@
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:background="?attr/colorSurface"
-    android:contentDescription="@string/reader_choose_interests_content_description">
+    android:contentDescription="@string/reader_choose_interests_tags_content_description">

     <RelativeLayout
         android:id="@+id/back_button"
diff --git a/WordPress/src/main/res/layout/reader_no_site_to_reblog.xml b/WordPress/src/main/res/layout/reader_no_site_to_reblog.xml
index d23907b027c2..35041727d9c3 100644
--- a/WordPress/src/main/res/layout/reader_no_site_to_reblog.xml
+++ b/WordPress/src/main/res/layout/reader_no_site_to_reblog.xml
@@ -13,10 +13,10 @@
         android:layout_width="match_parent"
         android:layout_height="match_parent"
         android:layout_marginTop="@dimen/toolbar_height"
-        app:aevButton="@string/reader_no_site_to_reblog_action"
+        app:aevButton="@string/reader_no_blog_to_reblog_action"
         app:aevImage="@drawable/img_illustration_empty_results_216dp"
         app:aevImageHiddenInLandscape="true"
-        app:aevSubtitle="@string/reader_no_site_to_reblog_detail"
-        app:aevTitle="@string/reader_no_site_to_reblog_title" />
+        app:aevSubtitle="@string/reader_no_blog_to_reblog_detail"
+        app:aevTitle="@string/reader_no_blog_to_reblog_title" />

 </RelativeLayout>
diff --git a/WordPress/src/main/res/layout/reader_popup_menu_item.xml b/WordPress/src/main/res/layout/reader_popup_menu_item.xml
index afc120464def..60d32d5f6e76 100644
--- a/WordPress/src/main/res/layout/reader_popup_menu_item.xml
+++ b/WordPress/src/main/res/layout/reader_popup_menu_item.xml
@@ -25,6 +25,6 @@
         android:gravity="center_vertical"
         android:minHeight="@dimen/menu_item_height"
         android:textAppearance="?textAppearanceSmallPopupMenu"
-        tools:text="@string/reader_btn_follow"
+        tools:text="@string/reader_btn_subscribe"
         tools:textColor="@color/primary" />
 </LinearLayout>
diff --git a/WordPress/src/main/res/layout/reader_recommended_blog_item.xml b/WordPress/src/main/res/layout/reader_recommended_blog_item.xml
index ba7ff4fe6ba4..4dcf2bcb37d8 100644
--- a/WordPress/src/main/res/layout/reader_recommended_blog_item.xml
+++ b/WordPress/src/main/res/layout/reader_recommended_blog_item.xml
@@ -97,7 +97,7 @@
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_marginStart="@dimen/margin_small"
-        android:contentDescription="@string/reader_btn_follow"
+        android:contentDescription="@string/reader_btn_subscribe"
         app:layout_constraintBottom_toBottomOf="@id/site_url"
         app:layout_constraintEnd_toEndOf="@id/guideline_end"
         app:layout_constraintTop_toTopOf="@id/site_name" />
diff --git a/WordPress/src/main/res/layout/reader_recommended_blog_item_new.xml b/WordPress/src/main/res/layout/reader_recommended_blog_item_new.xml
index 24b7b9174feb..54ed1bc6c9ae 100644
--- a/WordPress/src/main/res/layout/reader_recommended_blog_item_new.xml
+++ b/WordPress/src/main/res/layout/reader_recommended_blog_item_new.xml
@@ -60,7 +60,7 @@
         style="@style/Reader.Follow.Button.New"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
-        android:contentDescription="@string/reader_btn_follow"
+        android:contentDescription="@string/reader_btn_subscribe"
         app:layout_constraintBottom_toBottomOf="parent"
         app:layout_constraintEnd_toEndOf="parent"
         app:layout_constraintTop_toTopOf="parent" />
diff --git a/WordPress/src/main/res/layout/reader_recommended_blogs_card.xml b/WordPress/src/main/res/layout/reader_recommended_blogs_card.xml
index 6f1023b95c39..0f73ecde117f 100644
--- a/WordPress/src/main/res/layout/reader_recommended_blogs_card.xml
+++ b/WordPress/src/main/res/layout/reader_recommended_blogs_card.xml
@@ -32,7 +32,7 @@
             android:layout_marginEnd="@dimen/margin_extra_large"
             android:layout_marginStart="@dimen/margin_extra_large"
             android:layout_marginTop="@dimen/margin_extra_large"
-            android:text="@string/reader_discover_recommended_blogs_header"
+            android:text="@string/reader_discover_recommended_blogs_to_subscribe_header"
             app:layout_constraintLeft_toLeftOf="parent"
             app:layout_constraintRight_toRightOf="parent"
             app:layout_constraintTop_toTopOf="parent" />
diff --git a/WordPress/src/main/res/layout/subfilter_bottom_sheet.xml b/WordPress/src/main/res/layout/subfilter_bottom_sheet.xml
index 776b2c3af0e3..b98a83e64ef2 100644
--- a/WordPress/src/main/res/layout/subfilter_bottom_sheet.xml
+++ b/WordPress/src/main/res/layout/subfilter_bottom_sheet.xml
@@ -3,7 +3,7 @@
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:animateLayoutChanges="true"
-    android:contentDescription="@string/reader_bottom_sheet_content_description"
+    android:contentDescription="@string/reader_bottom_sheet_select_content_description"
     android:orientation="vertical">

     <include
diff --git a/WordPress/src/main/res/menu/reader_home.xml b/WordPress/src/main/res/menu/reader_home.xml
index 48241de7a04a..3e225ff3f08d 100644
--- a/WordPress/src/main/res/menu/reader_home.xml
+++ b/WordPress/src/main/res/menu/reader_home.xml
@@ -4,7 +4,7 @@
     <item
         android:id="@+id/menu_settings"
         app:actionLayout="@layout/reader_home_settings_menu_action_layout"
-        android:title="@string/reader_menu_tags"
+        android:title="@string/reader_menu_tags_and_blogs"
         android:visible="false"
         app:showAsAction="always" />

diff --git a/WordPress/src/main/res/menu/threaded_comments_menu.xml b/WordPress/src/main/res/menu/threaded_comments_menu.xml
index 5b16e1757eab..c95db9b4bf61 100644
--- a/WordPress/src/main/res/menu/threaded_comments_menu.xml
+++ b/WordPress/src/main/res/menu/threaded_comments_menu.xml
@@ -3,7 +3,7 @@
     xmlns:app="http://schemas.android.com/apk/res-auto">
     <item
         android:id="@+id/follow_item"
-        android:title="@string/reader_btn_follow"
+        android:title="@string/reader_btn_subscribe"
         app:actionLayout="@layout/follow_action_layout"
         app:showAsAction="always" />
     <item
diff --git a/WordPress/src/main/res/values/reader_styles.xml b/WordPress/src/main/res/values/reader_styles.xml
index c357558c0571..bcd44eef2929 100644
--- a/WordPress/src/main/res/values/reader_styles.xml
+++ b/WordPress/src/main/res/values/reader_styles.xml
@@ -258,7 +258,7 @@
         <item name="android:textAppearance">?attr/textAppearanceBody2</item>
         <item name="strokeColor">@color/transparent</item>
         <item name="iconTint">@color/primary_success_selector</item>
-        <item name="android:text">@string/reader_btn_follow</item>
+        <item name="android:text">@string/reader_btn_subscribe</item>
         <item name="android:padding">0dp</item>
         <item name="android:minHeight">0dp</item>
         <item name="android:minWidth">0dp</item>
diff --git a/WordPress/src/main/res/values/strings.xml b/WordPress/src/main/res/values/strings.xml
index e59c97a0984d..4dcd2830b69c 100644
--- a/WordPress/src/main/res/values/strings.xml
+++ b/WordPress/src/main/res/values/strings.xml
@@ -1636,12 +1636,16 @@
     <string name="reader_filter_cta">Filter</string>
     <string name="reader_filter_by_blog_title">Filter by blog</string>
     <string name="reader_filter_by_tag_title">Filter by tag</string>
+    <string name="reader_filter_empty_blogs_list">See the newest posts from blogs you\'re subscribed to</string>
+    <string name="reader_filter_empty_tags_list_subscribe">You can subscribe to posts on a specific subject by adding a tag</string>
+    <string name="reader_filter_self_hosted_empty_blogs_list">Log in to WordPress.com to see the latest posts from blogs you\'re subscribed to</string>
+    <string name="reader_filter_self_hosted_empty_tags_list">Log in to WordPress.com to see the latest posts from tags you\'re subscribed to</string>
+    <string name="reader_filter_empty_blogs_action">Subscribe to a blog</string>
+    <string name="reader_filter_empty_tags_add_action">Add a tag</string>
     <string name="reader_filter_empty_blogs_list_title">No blog subscriptions</string>
     <string name="reader_filter_empty_blogs_list_text">Subscribe to blogs in Discover and you’ll see their latest posts here. Or search for a blog that you like already.</string>
     <string name="reader_filter_empty_tags_list_title">No tags</string>
     <string name="reader_filter_empty_tags_list_text">Subscribe to a tag and you’ll be able to see the best posts from it here.</string>
-    <string name="reader_filter_self_hosted_empty_blogs_list">Log in to WordPress.com to see the latest posts from blogs you follow</string>
-    <string name="reader_filter_self_hosted_empty_tags_list">Log in to WordPress.com to see the latest posts from tags you follow</string>
     <string name="reader_filter_empty_blogs_action_search">Search for a blog</string>
     <string name="reader_filter_empty_tags_action_suggested">Suggested tags</string>
     <string name="reader_filter_empty_tags_action_subscribe">Subscribe to a tag</string>
@@ -1652,16 +1656,16 @@
     <string name="reader_expandable_tags_view_overflow_indicator_expand_title_new" translatable="false">+%1$s</string>
     <string name="reader_expandable_tags_view_overflow_indicator_collapse_title">Hide</string>
     <string name="reader_discover_interests_header">You might like</string>
-    <string name="reader_discover_recommended_blogs_header">Sites to follow</string>
+    <string name="reader_discover_recommended_blogs_to_subscribe_header">Blogs to subscribe to</string>
     <string name="reader_discover_recommended_header_new">You might like</string>
     <string name="reader_post_details_header_by_author_name">By</string>
     <string name="show_n_hidden_items_desc">%1$s more items</string>
     <string name="reader_discover_empty_title">Welcome!</string>
-    <string name="reader_discover_empty_subtitle">Follow topics to discover new blogs</string>
+    <string name="reader_discover_empty_subtitle_subscribe">Subscribe to tags to discover new blogs</string>
     <string name="reader_discover_no_posts_title">No recent posts</string>
-    <string name="reader_discover_no_posts_subtitle">Try following more topics to broaden the search</string>
+    <string name="reader_discover_no_posts_subscribe_subtitle">Try subscribing to more tags to broaden the search</string>
     <string name="reader_discover_empty_button_text">Get Started</string>
-    <string name="reader_discover_no_posts_button_text">Follow topics</string>
+    <string name="reader_discover_no_posts_button_tags_text">Subscribe to tags</string>
     <string name="reader_author_with_blog_name" translatable="false">%1$s ▸ %2$s</string>
     <string name="reader_follow_comments_null_response">No response received</string>
     <string name="reader_follow_comments_bad_format_response">Invalid response received</string>
@@ -2073,7 +2077,7 @@
     <string name="reader_save_for_later_display_name">Saved</string>
     <string name="reader_discover_display_name">Discover</string>
     <string name="reader_my_likes_display_name">Likes</string>
-    <string name="reader_following_display_name">Following</string>
+    <string name="reader_subscribed_display_name">Subscribed</string>

     <!-- timespan shown for posts/comments published within the past 60 seconds -->
     <string name="timespan_now" tools:ignore="UnusedResources">now</string>
@@ -2086,22 +2090,22 @@

     <!-- activity titles -->
     <string name="reader_title_applog">Application log</string>
-    <string name="reader_title_blog_preview">Reader Site</string>
-    <string name="reader_title_tag_preview">Topic</string>
+    <string name="reader_activity_title_blog_preview">Reader Blog</string>
+    <string name="reader_activity_title_tag_preview">Tag</string>
     <string name="reader_title_post_detail">Reader Post</string>
     <string name="reader_title_related_post_detail">Related Post</string>
-    <string name="reader_title_subs">Manage Topics & Sites</string>
+    <string name="reader_activity_title_manage_tags_blogs">Manage Tags & Blogs</string>
     <string name="reader_title_photo_viewer">%1$d of %2$d</string>
     <string name="reader_title_comments" translatable="false">@string/comments</string>
-    <string name="reader_title_interests">Follow topics</string>
+    <string name="reader_title_tags">Follow tags</string>

     <!-- view pager titles -->
-    <string name="reader_page_followed_tags">Followed topics</string>
-    <string name="reader_page_followed_blogs">Followed sites</string>
+    <string name="reader_page_followed_tags_title">Subscribed tags</string>
+    <string name="reader_page_followed_blogs_title">Subscribed blogs</string>

     <!-- menu text -->
-    <string name="reader_menu_tags">Edit topics and sites</string>
-    <string name="reader_menu_block_blog">Block this site</string>
+    <string name="reader_menu_tags_and_blogs">Edit tags and blogs</string>
+    <string name="reader_menu_block_this_blog">Block this blog</string>
     <string name="reader_menu_report_post">Report this post</string>
     <string name="reader_menu_report_user">Report this user</string>
     <string name="reader_menu_mark_as_seen">Mark as seen</string>
@@ -2110,16 +2114,16 @@

     <!-- button text -->
     <string name="reader_btn_share">Share</string>
-    <string name="reader_btn_follow">Follow</string>
-    <string name="reader_btn_unfollow">Following</string>
+    <string name="reader_btn_subscribe">Subscribe</string>
+    <string name="reader_btn_subscribed">Subscribed</string>
     <string name="reader_secondary_bookmark">Save</string>
     <string name="reader_secondary_bookmarked">Saved</string>
     <string name="reader_add_bookmark">Add to saved posts</string>
     <string name="reader_remove_bookmark">Remove from saved posts</string>
     <string name="reader_bookmark_snack_btn">View All</string>
     <string name="reader_bookmark_snack_title">Post saved</string>
-    <string name="reader_btn_notifications_off">Turn off site notifications</string>
-    <string name="reader_btn_notifications_on">Turn on site notifications</string>
+    <string name="reader_btn_blog_notifications_off">Turn off blog notifications</string>
+    <string name="reader_btn_blog_notifications_on">Turn on blog notifications</string>
     <string name="reader_btn_select_few_interests">Select a few to continue</string>
     <string name="reader_btn_done">Done</string>
     <string name="reader_btn_follow_comments">Follow conversation by email</string>
@@ -2128,9 +2132,8 @@

     <!-- accessibility content desciptions -->
     <string name="reader_btn_remove_filter_content_description">Remove the current filter</string>
-    <string name="reader_btn_select_filter_content_description">Select a Site or Tag to filter posts</string>
-    <string name="reader_bottom_sheet_content_description">Select a Tag or Site, Pop Up Window</string>
-    <string name="reader_choose_interests_content_description">Choose your topics</string>
+    <string name="reader_bottom_sheet_select_content_description">Select a Tag or Blog, Pop Up Window</string>
+    <string name="reader_choose_interests_tags_content_description">Choose your tags</string>

     <string name="reader_followed_blog_notifications">Enable notifications for %1$s%2$s%3$s?</string>
     <string name="reader_followed_blog_notifications_action">Enable</string>
@@ -2139,21 +2142,21 @@
     <!-- EditText hints -->
     <string name="reader_hint_comment_on_post">Reply to post…</string>
     <string name="reader_hint_comment_on_comment">Reply to comment…</string>
-    <string name="reader_hint_add_tag_or_url">Enter a URL or topic to follow</string>
+    <string name="reader_hint_add_tag_or_url_subscribe">Enter a URL or tag to subscribe to</string>
     <string name="reader_hint_post_search">Search WordPress</string>
-    <string name="reader_hint_search_followed_sites">Search followed sites</string>
+    <string name="reader_hint_search_subscribed_blogs">Search subscribed blogs</string>

     <!-- TextView labels -->
     <string name="reader_label_new_posts">New posts</string>
     <string name="reader_label_new_posts_subtitle">Tap to show them</string>
     <string name="reader_label_added_tag">Added %s</string>
     <string name="reader_label_removed_tag">Removed %s</string>
-    <string name="reader_label_followed_blog">Site followed</string>
+    <string name="reader_label_blog_subscribed">Blog subscribed</string>
     <string name="reader_label_comments_closed">Comments are closed</string>
     <string name="reader_label_view_original">View original article</string>
-    <string name="reader_label_follow_count">%,d Followers</string>
-    <string name="reader_label_followers_count">%s followers</string>
-    <string name="reader_label_followers_count_single">1 follower</string>
+    <string name="reader_label_subscribe_count">%,d Subscribers</string>
+    <string name="reader_label_subscribers_count">%s subscribers</string>
+    <string name="reader_label_subscribers_count_single">1 subscriber</string>
     <string name="reader_label_gap_marker">Load more posts</string>
     <string name="reader_label_post_search_explainer">What would you like to find?</string>
     <string name="reader_label_local_related_posts">More from %s</string>
@@ -2167,9 +2170,9 @@

     <!-- reblog -->
     <string name="reader_view_reblog">Reblog</string>
-    <string name="reader_no_site_to_reblog_title">No available WordPress.com sites</string>
-    <string name="reader_no_site_to_reblog_detail">Once you create a WordPress.com site, you can reblog content that you like to your own site.</string>
-    <string name="reader_no_site_to_reblog_action">Manage Sites</string>
+    <string name="reader_no_blog_to_reblog_title">No available WordPress.com blogs</string>
+    <string name="reader_no_blog_to_reblog_detail">Once you create a WordPress.com blog, you can reblog content that you like to your own site.</string>
+    <string name="reader_no_blog_to_reblog_action">Manage Blogs</string>
     <string name="reader_reblog_error">Reblog failed</string>
     <string name="sitepicker_continue_flow">Continue</string>

@@ -2190,20 +2193,20 @@

     <!-- toast messages -->
     <string name="reader_toast_err_comment_failed">Couldn\'t post your comment</string>
-    <string name="reader_toast_err_tag_exists">You already follow this topic</string>
-    <string name="reader_toast_err_tag_invalid">That isn\'t a valid topic</string>
-    <string name="reader_toast_err_add_tag">Unable to add this topic</string>
-    <string name="reader_toast_err_remove_tag">Unable to remove this topic</string>
+    <string name="reader_toast_err_tag_already_subscribed">You\'re already subscribed to this tag</string>
+    <string name="reader_toast_err_tag_not_valid">That isn\'t a valid tag</string>
+    <string name="reader_toast_err_adding_tag">Unable to add this tag</string>
+    <string name="reader_toast_err_removing_tag">Unable to remove this tag</string>
     <string name="reader_toast_err_share_intent">Unable to share</string>
     <string name="reader_toast_err_view_image">Unable to view image</string>
-    <string name="reader_toast_err_get_blog_info">Unable to show this site</string>
-    <string name="reader_toast_err_already_follow_blog">You already follow this site</string>
-    <string name="reader_toast_err_follow_blog">Unable to follow this site</string>
-    <string name="reader_toast_err_follow_blog_not_found">This site could not be found</string>
-    <string name="reader_toast_err_follow_blog_not_authorized">You are not authorized to access this site</string>
-    <string name="reader_toast_err_unfollow_blog">Unable to unfollow this site</string>
-    <string name="reader_toast_blog_blocked" tools:ignore="UnusedResources">Posts from this site will no longer be shown</string>
-    <string name="reader_toast_err_block_blog" tools:ignore="UnusedResources">Unable to block this site</string>
+    <string name="reader_toast_err_show_blog">Unable to show this blog</string>
+    <string name="reader_toast_err_already_follow_this_blog">You are already subscribed to this blog</string>
+    <string name="reader_toast_err_unable_to_follow_blog">Unable to subscribe to this blog</string>
+    <string name="reader_toast_err_follow_blog_could_not_be_found">This blog could not be found</string>
+    <string name="reader_toast_err_follow_not_authorized_to_access_blog">You are not authorized to access this blog</string>
+    <string name="reader_toast_err_unable_to_unfollow_blog">Unable to unsubscribe from blog</string>
+    <string name="reader_toast_posts_from_this_blog_blocked">Posts from this blog will no longer be shown</string>
+    <string name="reader_toast_err_unable_to_block_blog">Unable to block this blog</string>
     <string name="reader_toast_user_blocked">Posts from this user will no longer be shown</string>
     <string name="reader_toast_err_generic">Unable to perform this action</string>
     <string name="reader_toast_err_cannot_like_post">Failed to like this post</string>
@@ -2227,18 +2230,18 @@
     <string name="reader_empty_posts_no_connection" translatable="false">@string/no_network_title</string>
     <string name="reader_empty_posts_request_failed">Unable to retrieve posts</string>
     <string name="reader_self_hosted_select_filter">Use the filter button to find posts on specific subjects</string>
-    <string name="reader_empty_posts_in_tag">No posts with this topic</string>
+    <string name="reader_no_posts_with_this_tag">No posts with this tag</string>
     <string name="reader_empty_posts_in_tag_updating">Fetching posts…</string>
-    <string name="reader_empty_posts_in_custom_list">The sites in this list haven\'t posted anything recently</string>
-    <string name="reader_empty_followed_tags_subtitle">Add topics here to find posts about your favorite topics</string>
-    <string name="reader_empty_followed_tags_title">No followed topics</string>
-    <string name="reader_empty_recommended_blogs">No recommended sites</string>
-    <string name="reader_empty_followed_blogs_title">No followed sites</string>
-    <string name="reader_empty_followed_blogs_search_title">No sites matching your search</string>
-    <string name="reader_empty_followed_blogs_description">When you follow sites, you\'ll see their content here</string>
+    <string name="reader_empty_blogs_posts_in_custom_list">The blogs in this list have not posted anything recently</string>
+    <string name="reader_empty_subscribed_tags_subtitle">Add tags here to find posts about your favorite topics</string>
+    <string name="reader_no_followed_tags_title">No subscribed tags</string>
+    <string name="reader_no_recommended_blogs_title">No recommended blogs</string>
+    <string name="reader_no_followed_blogs_title">No subscribed blogs</string>
+    <string name="reader_no_followed_blogs_search_title">No blogs matching your search</string>
+    <string name="reader_no_followed_blogs_description">When you subscribe to blogs, you\'ll see their content here</string>
     <string name="reader_empty_followed_blogs_no_recent_posts_title">No recent posts</string>
-    <string name="reader_empty_followed_blogs_no_recent_posts_description">The sites you follow haven\'t posted anything recently</string>
-    <string name="reader_empty_followed_blogs_button_discover">Discover sites</string>
+    <string name="reader_empty_followed_blogs_subscribed_no_recent_posts_description">The blogs you\'re subscribed to haven\'t posted anything recently</string>
+    <string name="reader_no_followed_blogs_button_discover">Discover blogs</string>
     <string name="reader_empty_followed_blogs_button_subscriptions">Go to subscriptions</string>
     <string name="reader_empty_posts_liked_title">Nothing liked yet</string>
     <string name="reader_empty_posts_liked_description">Posts that you like will appear here</string>
@@ -2251,7 +2254,7 @@
     <string name="reader_comments_view_all">View all comments</string>
     <string name="reader_comments_be_first_to_comment">Be the first to comment</string>
     <string name="reader_comments_follow_conversation">Follow Conversation</string>
-    <string name="reader_empty_posts_in_blog">This site is empty</string>
+    <string name="reader_no_posts_in_blog">This blog is empty</string>
     <string name="reader_empty_search_title">No results found</string>
     <string name="reader_empty_search_description">No results found for %s for your language</string>
     <string name="reader_empty_search_request_failed">Unable to perform search</string>
diff --git a/fastlane/resources/values/strings.xml b/fastlane/resources/values/strings.xml
index f7865454b8b2..af59df6e5cd0 100644
--- a/fastlane/resources/values/strings.xml
+++ b/fastlane/resources/values/strings.xml
@@ -1633,12 +1633,6 @@
     <string name="reader_filter_sites_title">Sites</string>
     <string name="reader_filter_tags_title">Topics</string>
     <string name="reader_filter_main_title">Following</string>
-    <string name="reader_filter_empty_sites_list">See the newest posts from sites you follow</string>
-    <string name="reader_filter_empty_tags_list">You can follow posts on a specific subject by adding a topic</string>
-    <string name="reader_filter_self_hosted_empty_sites_list">Log in to WordPress.com to see the latest posts from sites you follow</string>
-    <string name="reader_filter_self_hosted_empty_tagss_list">Log in to WordPress.com to see the latest posts from topics you follow</string>
-    <string name="reader_filter_empty_sites_action">Follow a site</string>
-    <string name="reader_filter_empty_tags_action">Add a topic</string>
     <string name="reader_filter_self_hosted_empty_sites_tags_action">Log in to WordPress.com</string>
     <string name="reader_dot_separator" translatable="false">\u0020\u2022\u0020</string>
     <string name="reader_error_request_failed_title">There was a problem handling the request. Please try again later.</string>
@@ -1646,16 +1640,12 @@
     <string name="reader_expandable_tags_view_overflow_indicator_expand_title_new" translatable="false">+%1$s</string>
     <string name="reader_expandable_tags_view_overflow_indicator_collapse_title">Hide</string>
     <string name="reader_discover_interests_header">You might like</string>
-    <string name="reader_discover_recommended_blogs_header">Sites to follow</string>
     <string name="reader_discover_recommended_header_new">You might like</string>
     <string name="reader_post_details_header_by_author_name">By</string>
     <string name="show_n_hidden_items_desc">%1$s more items</string>
     <string name="reader_discover_empty_title">Welcome!</string>
-    <string name="reader_discover_empty_subtitle">Follow topics to discover new blogs</string>
     <string name="reader_discover_no_posts_title">No recent posts</string>
-    <string name="reader_discover_no_posts_subtitle">Try following more topics to broaden the search</string>
     <string name="reader_discover_empty_button_text">Get Started</string>
-    <string name="reader_discover_no_posts_button_text">Follow topics</string>
     <string name="reader_author_with_blog_name" translatable="false">%1$s ▸ %2$s</string>
     <string name="reader_follow_comments_null_response">No response received</string>
     <string name="reader_follow_comments_bad_format_response">Invalid response received</string>
@@ -2054,7 +2044,6 @@
     <string name="reader_save_for_later_display_name">Saved</string>
     <string name="reader_discover_display_name">Discover</string>
     <string name="reader_my_likes_display_name">Likes</string>
-    <string name="reader_following_display_name">Following</string>

     <!-- timespan shown for posts/comments published within the past 60 seconds -->
     <string name="timespan_now" tools:ignore="UnusedResources">now</string>
@@ -2074,7 +2063,6 @@
     <string name="reader_title_subs">Manage Topics & Sites</string>
     <string name="reader_title_photo_viewer">%1$d of %2$d</string>
     <string name="reader_title_comments" translatable="false">@string/comments</string>
-    <string name="reader_title_interests">Follow topics</string>

     <!-- view pager titles -->
     <string name="reader_page_followed_tags">Followed topics</string>
@@ -2091,8 +2079,6 @@

     <!-- button text -->
     <string name="reader_btn_share">Share</string>
-    <string name="reader_btn_follow">Follow</string>
-    <string name="reader_btn_unfollow">Following</string>
     <string name="reader_secondary_bookmark">Save</string>
     <string name="reader_secondary_bookmarked">Saved</string>
     <string name="reader_add_bookmark">Add to saved posts</string>

diff --git a/WordPress/src/test/java/org/wordpress/android/ui/reader/discover/ReaderPostMoreButtonUiStateBuilderTest.kt b/WordPress/src/test/java/org/wordpress/android/ui/reader/discover/ReaderPostMoreButtonUiStateBuilderTest.kt
index f95a2b56e003..aadbb434364c 100644
--- a/WordPress/src/test/java/org/wordpress/android/ui/reader/discover/ReaderPostMoreButtonUiStateBuilderTest.kt
+++ b/WordPress/src/test/java/org/wordpress/android/ui/reader/discover/ReaderPostMoreButtonUiStateBuilderTest.kt
@@ -61,7 +61,7 @@ class ReaderPostMoreButtonUiStateBuilderTest : BaseUnitTest() {
         // Assert
         assertThat(menuItems.find {
             it.type == ReaderPostCardActionType.FOLLOW &&
-                    (it as SecondaryAction).label == UiStringRes(R.string.reader_btn_follow)
+                    (it as SecondaryAction).label == UiStringRes(R.string.reader_btn_subscribe)
         }).isNotNull
     }

@@ -74,7 +74,7 @@ class ReaderPostMoreButtonUiStateBuilderTest : BaseUnitTest() {
         // Assert
         assertThat(menuItems.find {
             it.type == ReaderPostCardActionType.FOLLOW &&
-                    (it as SecondaryAction).label == UiStringRes(R.string.reader_btn_unfollow)
+                    (it as SecondaryAction).label == UiStringRes(R.string.reader_btn_subscribed)
         }).isNotNull
     }

@@ -125,7 +125,7 @@ class ReaderPostMoreButtonUiStateBuilderTest : BaseUnitTest() {
         // Assert
         assertThat(menuItems.find {
             it.type == ReaderPostCardActionType.SITE_NOTIFICATIONS &&
-                    (it as SecondaryAction).label == UiStringRes(R.string.reader_btn_notifications_on)
+                    (it as SecondaryAction).label == UiStringRes(R.string.reader_btn_blog_notifications_on)
         }).isNotNull
     }

@@ -138,7 +138,7 @@ class ReaderPostMoreButtonUiStateBuilderTest : BaseUnitTest() {
         // Assert
         assertThat(menuItems.find {
             it.type == ReaderPostCardActionType.SITE_NOTIFICATIONS &&
-                    (it as SecondaryAction).label == UiStringRes(R.string.reader_btn_notifications_off)
+                    (it as SecondaryAction).label == UiStringRes(R.string.reader_btn_blog_notifications_off)
         }).isNotNull
     }


Format the value on the total followers card

Fixes #19893

This adds a feature to format the Total Followers card by
- using comma for values greater than 999,
- using suffixes ("M", "B" etc.) for values equal to or exceeding 1M.

The Total Followers card's behavior is now the same as other total cards.

|before|after|after|
|-|-|-|
||||

-----

## To Test:
@guarani, I only request reviewing screenshots from you.

1. Select a site with more than 999 followers.
2. Navigate to My Site → Stats.
3. If the Total Followers card is not visible on the INSIGHTS tab, add it from the ⚙ icon at the top right.
4. Verify the value on the Total Followers Card is shortened by using suffixes.
5. Select a site with more than 999999 followers.
6. Repeat 2-4.

-----

## Regression Notes

1. Potential unintended areas of impact

    - None

2. What I did to test those areas of impact (or what existing automated tests I relied on)

    - Nothing

3. What automated tests I added (or what prevented me from doing so)

    - None because I haven't added a new feature.

-----

## PR Submission Checklist:

- [x] I have completed the Regression Notes.
- [x] I have considered adding accessibility improvements for my changes.
- [x] I have considered if this change warrants user-facing release notes and have added them to `RELEASE-NOTES.txt` if necessary.

-----

## UI Changes Testing Checklist:

- [ ] Portrait and landscape orientations.
- [x] Light and dark modes.
- [ ] Fonts: Larger, smaller and bold text.
- [ ] High contrast.
- [ ] Talkback.
- [ ] Languages with large words or with letters/accents not frequently used in English.
- [ ] Right-to-left languages. (Even if translation isn’t complete, formatting should still respect the right-to-left layout)
- [ ] Large and small screen sizes. (Tablet and smaller phones)
- [ ] Multi-tasking: Split screen and Pop-up view. (Android 10 or higher)

Use thousands separator on Total Followers card
### Expected behavior

Total Followers count should use the same thousand formatting as other numbers in Stats.

### Actual behavior

<img src="https://github.com/wordpress-mobile/WordPress-Android/assets/1898325/3cf32cdf-9e44-4147-8979-74351ec90470" width="350" />

### Steps to reproduce the behavior
1. Open Stats for a site with over 10K followers
2. Add Total Followers card
3. Notice no thousands formatter

##### Tested on Samsung Galaxy S10, Android 12, JPAndroid 23.9-rc-2

👋 @irfano, @ravishanker, is this something either of you could y'all could fix this week? It's part of a call (p1704733151989019/1704732905.227079-slack-C0436E5L5V1) to fix missing thousand separators in the app, so if you see any others let's fix them.
It's worth considering if the string should be abbreviated e.g. 102M or just thousand formatted e.g. 102,739,195. It looks like we use both in Stats, so it makes sense to go for consistency here or what feels right.

diff --git a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/TotalFollowersUseCase.kt b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/TotalFollowersUseCase.kt
index 65cddd723572..28deb93cc99c 100644
--- a/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/TotalFollowersUseCase.kt
+++ b/WordPress/src/main/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/TotalFollowersUseCase.kt
@@ -19,7 +19,9 @@ import org.wordpress.android.ui.stats.refresh.lists.sections.BlockListItem.Title
 import org.wordpress.android.ui.stats.refresh.lists.sections.BlockListItem.ValueWithChartItem
 import org.wordpress.android.ui.stats.refresh.lists.sections.insights.InsightUseCaseFactory
 import org.wordpress.android.ui.stats.refresh.utils.ActionCardHandler
+import org.wordpress.android.ui.stats.refresh.utils.MILLION
 import org.wordpress.android.ui.stats.refresh.utils.StatsSiteProvider
+import org.wordpress.android.ui.stats.refresh.utils.StatsUtils
 import org.wordpress.android.ui.stats.refresh.utils.trackWithType
 import org.wordpress.android.ui.utils.ListItemInteraction
 import org.wordpress.android.util.analytics.AnalyticsTrackerWrapper
@@ -36,7 +38,8 @@ class TotalFollowersUseCase @Inject constructor(
     private val totalStatsMapper: TotalStatsMapper,
     private val analyticsTracker: AnalyticsTrackerWrapper,
     private val actionCardHandler: ActionCardHandler,
-    private val useCaseMode: UseCaseMode
+    private val useCaseMode: UseCaseMode,
+    private val statsUtils: StatsUtils
 ) : StatelessUseCase<Int>(TOTAL_FOLLOWERS, mainDispatcher, bgDispatcher) {
     override fun buildLoadingItem(): List<BlockListItem> = listOf(TitleWithMore(R.string.stats_view_total_followers))

@@ -60,7 +63,10 @@ class TotalFollowersUseCase @Inject constructor(
         addActionCard(domainModel)
         val items = mutableListOf<BlockListItem>()
         items.add(buildTitle())
-        items.add(ValueWithChartItem(value = domainModel.toString(), extraBottomMargin = true))
+        items.add(ValueWithChartItem(
+            value = statsUtils.toFormattedString(domainModel, MILLION),
+            extraBottomMargin = true
+        ))
         if (totalStatsMapper.shouldShowFollowersGuideCard(domainModel)) {
             items.add(ListItemGuideCard(resourceProvider.getString(R.string.stats_insights_followers_guide_card)))
         }
@@ -96,7 +102,8 @@ class TotalFollowersUseCase @Inject constructor(
         private val resourceProvider: ResourceProvider,
         private val totalStatsMapper: TotalStatsMapper,
         private val analyticsTracker: AnalyticsTrackerWrapper,
-        private val actionCardHandler: ActionCardHandler
+        private val actionCardHandler: ActionCardHandler,
+        private val statsUtils: StatsUtils
     ) : InsightUseCaseFactory {
         override fun build(useCaseMode: UseCaseMode) = TotalFollowersUseCase(
             mainDispatcher,
@@ -107,7 +114,8 @@ class TotalFollowersUseCase @Inject constructor(
             totalStatsMapper,
             analyticsTracker,
             actionCardHandler,
-            useCaseMode
+            useCaseMode,
+            statsUtils
         )
     }
 }

diff --git a/WordPress/src/test/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/TotalFollowersUseCaseTest.kt b/WordPress/src/test/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/TotalFollowersUseCaseTest.kt
index 1c01e9fc18af..93165d577ace 100644
--- a/WordPress/src/test/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/TotalFollowersUseCaseTest.kt
+++ b/WordPress/src/test/java/org/wordpress/android/ui/stats/refresh/lists/sections/insights/usecases/TotalFollowersUseCaseTest.kt
@@ -5,6 +5,7 @@ import org.assertj.core.api.Assertions.assertThat
 import org.junit.Before
 import org.junit.Test
 import org.mockito.Mock
+import org.mockito.kotlin.any
 import org.mockito.kotlin.whenever
 import org.wordpress.android.BaseUnitTest
 import org.wordpress.android.R
@@ -24,6 +25,7 @@ import org.wordpress.android.ui.stats.refresh.lists.sections.BlockListItem.Type.
 import org.wordpress.android.ui.stats.refresh.lists.sections.BlockListItem.ValueWithChartItem
 import org.wordpress.android.ui.stats.refresh.utils.ActionCardHandler
 import org.wordpress.android.ui.stats.refresh.utils.StatsSiteProvider
+import org.wordpress.android.ui.stats.refresh.utils.StatsUtils
 import org.wordpress.android.util.analytics.AnalyticsTrackerWrapper
 import org.wordpress.android.viewmodel.ResourceProvider

@@ -50,6 +52,9 @@ class TotalFollowersUseCaseTest : BaseUnitTest() {
     @Mock
     lateinit var useCaseMode: UseCaseMode

+    @Mock
+    lateinit var statsUtils: StatsUtils
+
     @Mock
     lateinit var actionCardHandler: ActionCardHandler
     private lateinit var useCase: TotalFollowersUseCase
@@ -66,9 +71,11 @@ class TotalFollowersUseCaseTest : BaseUnitTest() {
             totalStatsMapper,
             analyticsTrackerWrapper,
             actionCardHandler,
-            useCaseMode
+            useCaseMode,
+            statsUtils
         )
         whenever(statsSiteProvider.siteModel).thenReturn(site)
+        whenever(statsUtils.toFormattedString(any<Int>(), any())).then { (it.arguments[0] as Int).toString() }
     }

     @Test


[Reader IA] Open subscription management from Filter sheet

Fixes #19859

> [!CAUTION]
> Should not be merged before #19856

Adds the `Edit` button to the Filter bottom sheet and opens the existing "Subscription Management" screen when tapping that button.

>[!Important]
> In the Reader IA project we are using the word "tag" instead of "topic" and "blog" instead of "site" but the existing subscription management UI uses the previous terminology. We are still figuring out what should be done with respect to that, a conversation started here: p1703879376821999-slack-C05N140C8H5

-----

## To Test:

1. Install and log into Jetpack
2. Go to the Reader
3. Select a Feed that contains filters (like "subscriptions")
4. Tap the "Blog" filter
5. **Verify** the "Edit" button is shown in the sheet (top right corner)
6. Tap the "Edit" button
7. **Verify** it opens the existing subs management screen in the "Sites" page
8. Go back
9. Tap the "Tag" filter
10.  Tap the "Edit" button
11. **Verify** it opens the existing subs management screen in the "Topics" page

-----

## Regression Notes

1. Potential unintended areas of impact

    - N/A

12. What I did to test those areas of impact (or what existing automated tests I relied on)

    - N/A

13. What automated tests I added (or what prevented me from doing so)

    - Updated existing test naming since an existing flow was used.

-----

## PR Submission Checklist:

- [x] I have completed the Regression Notes.
- [x] I have considered adding accessibility improvements for my changes.
- [x] I have considered if this change warrants user-facing release notes and have added them to `RELEASE-NOTES.txt` if necessary.

-----

## UI Changes Testing Checklist:

- [x] Portrait and landscape orientations.
- [x] Light and dark modes.
- [x] Fonts: Larger, smaller and bold text.
- [x] High contrast.
- [x] Talkback.
- [x] Languages with large words or with letters/accents not frequently used in English.
- [ ] Right-to-left languages. (Even if translation isn’t complete, formatting should still respect the right-to-left layout)
- [x] Large and small screen sizes. (Tablet and smaller phones)
- [x] Multi-tasking: Split screen and Pop-up view. (Android 10 or higher)

[Reader IA] Open existing subscription management screen from Filter sheets
Initially, both for the Blogs and Tags Filter sheet, we will add an "Edit" button on the top right, which should simply open the existing subscription management screen, the same way as the previous "Manage Subscription" top app bar button did.

diff --git a/WordPress/src/main/java/org/wordpress/android/ui/reader/ReaderPostListFragment.java b/WordPress/src/main/java/org/wordpress/android/ui/reader/ReaderPostListFragment.java
index b0c2e994c1fc..9836f0d2a617 100644
--- a/WordPress/src/main/java/org/wordpress/android/ui/reader/ReaderPostListFragment.java
+++ b/WordPress/src/main/java/org/wordpress/android/ui/reader/ReaderPostListFragment.java
@@ -107,6 +107,7 @@
 import org.wordpress.android.ui.reader.services.update.ReaderUpdateLogic.UpdateTask;
 import org.wordpress.android.ui.reader.services.update.ReaderUpdateServiceStarter;
 import org.wordpress.android.ui.reader.services.update.TagUpdateClientUtilsProvider;
+import org.wordpress.android.ui.reader.subfilter.ActionType.OpenLoginPage;
 import org.wordpress.android.ui.reader.subfilter.ActionType.OpenSubsAtPage;
 import org.wordpress.android.ui.reader.subfilter.BottomSheetUiState.BottomSheetVisible;
 import org.wordpress.android.ui.reader.subfilter.SubFilterViewModel;
@@ -647,14 +648,14 @@ private void initSubFilterViewModel(@Nullable Bundle savedInstanceState) {
             });
         });

-        mSubFilterViewModel.getBottomSheetEmptyViewAction().observe(getViewLifecycleOwner(), event -> {
+        mSubFilterViewModel.getBottomSheetAction().observe(getViewLifecycleOwner(), event -> {
             event.applyIfNotHandled(action -> {
                 if (action instanceof OpenSubsAtPage) {
                     ReaderActivityLauncher.showReaderSubs(
                             requireActivity(),
                             ((OpenSubsAtPage) action).getTabIndex()
                     );
-                } else {
+                } else if (action instanceof OpenLoginPage) {
                     wpMainActivityViewModel.onOpenLoginPage(
                             WPMainNavigationView.Companion.getPosition(PageType.MY_SITE)
                     );
diff --git a/WordPress/src/main/java/org/wordpress/android/ui/reader/SubfilterBottomSheetFragment.kt b/WordPress/src/main/java/org/wordpress/android/ui/reader/SubfilterBottomSheetFragment.kt
index 0dc4f27030d3..fb6bb483af71 100644
--- a/WordPress/src/main/java/org/wordpress/android/ui/reader/SubfilterBottomSheetFragment.kt
+++ b/WordPress/src/main/java/org/wordpress/android/ui/reader/SubfilterBottomSheetFragment.kt
@@ -16,6 +16,7 @@ import com.google.android.material.bottomsheet.BottomSheetDialog
 import com.google.android.material.bottomsheet.BottomSheetDialogFragment
 import org.wordpress.android.R
 import org.wordpress.android.WordPress
+import org.wordpress.android.ui.reader.subfilter.ActionType
 import org.wordpress.android.ui.reader.subfilter.SubFilterViewModel
 import org.wordpress.android.ui.reader.subfilter.SubfilterCategory
 import org.wordpress.android.ui.reader.subfilter.SubfilterCategory.SITES
@@ -78,6 +79,7 @@ class SubfilterBottomSheetFragment : BottomSheetDialogFragment() {
         // TODO thomashortadev: remove the pager and support only one category
         val pager = view.findViewById<ViewPager>(R.id.view_pager)
         val title = view.findViewById<TextView>(R.id.title)
+        val editSubscriptions = view.findViewById<View>(R.id.edit_subscriptions)
         title.text = bottomSheetTitle
         pager.adapter = SubfilterPagerAdapter(
             requireActivity(),
@@ -105,6 +107,15 @@ class SubfilterBottomSheetFragment : BottomSheetDialogFragment() {
             else -> SITES.ordinal
         }

+        editSubscriptions.setOnClickListener {
+            val category = categories.firstOrNull() ?: return@setOnClickListener
+            val subsPageIndex = when (category) {
+                SITES -> ReaderSubsActivity.TAB_IDX_FOLLOWED_BLOGS
+                TAGS -> ReaderSubsActivity.TAB_IDX_FOLLOWED_TAGS
+            }
+            viewModel.onBottomSheetActionClicked(ActionType.OpenSubsAtPage(subsPageIndex))
+        }
+
         dialog?.setOnShowListener { dialogInterface ->
             val sheetDialog = dialogInterface as? BottomSheetDialog

diff --git a/WordPress/src/main/java/org/wordpress/android/ui/reader/subfilter/BottomSheetPageEmptyUiState.kt b/WordPress/src/main/java/org/wordpress/android/ui/reader/subfilter/BottomSheetPageEmptyUiState.kt
index 273b2802c8c3..590316a74351 100644
--- a/WordPress/src/main/java/org/wordpress/android/ui/reader/subfilter/BottomSheetPageEmptyUiState.kt
+++ b/WordPress/src/main/java/org/wordpress/android/ui/reader/subfilter/BottomSheetPageEmptyUiState.kt
@@ -12,10 +12,10 @@ sealed class SubfilterBottomSheetEmptyUiState {
     ) : SubfilterBottomSheetEmptyUiState()
 }

-sealed class ActionType {
+sealed interface ActionType {
     data class OpenSubsAtPage(
         val tabIndex: Int
-    ) : ActionType()
+    ) : ActionType

-    object OpenLoginPage : ActionType()
+    data object OpenLoginPage : ActionType
 }
diff --git a/WordPress/src/main/java/org/wordpress/android/ui/reader/subfilter/SubFilterViewModel.kt b/WordPress/src/main/java/org/wordpress/android/ui/reader/subfilter/SubFilterViewModel.kt
index d5da10b5db38..9e6f9543523d 100644
--- a/WordPress/src/main/java/org/wordpress/android/ui/reader/subfilter/SubFilterViewModel.kt
+++ b/WordPress/src/main/java/org/wordpress/android/ui/reader/subfilter/SubFilterViewModel.kt
@@ -60,8 +60,8 @@ class SubFilterViewModel @Inject constructor(
     private val _bottomSheetUiState = MutableLiveData<Event<BottomSheetUiState>>()
     val bottomSheetUiState: LiveData<Event<BottomSheetUiState>> = _bottomSheetUiState

-    private val _bottomSheetEmptyViewAction = MutableLiveData<Event<ActionType>>()
-    val bottomSheetEmptyViewAction: LiveData<Event<ActionType>> = _bottomSheetEmptyViewAction
+    private val _bottomSheetAction = MutableLiveData<Event<ActionType>>()
+    val bottomSheetAction: LiveData<Event<ActionType>> = _bottomSheetAction

     private val _updateTagsAndSites = MutableLiveData<Event<EnumSet<UpdateTask>>>()
     val updateTagsAndSites: LiveData<Event<EnumSet<UpdateTask>>> = _updateTagsAndSites
@@ -296,7 +296,7 @@ class SubFilterViewModel @Inject constructor(

     fun onBottomSheetActionClicked(action: ActionType) {
         _bottomSheetUiState.postValue(Event(BottomSheetHidden))
-        _bottomSheetEmptyViewAction.postValue(Event(action))
+        _bottomSheetAction.postValue(Event(action))
     }

     private fun updateSubfilter(filter: SubfilterListItem) {
diff --git a/WordPress/src/main/res/color/on_surface_text_button_selector.xml b/WordPress/src/main/res/color/on_surface_text_button_selector.xml
new file mode 100644
index 000000000000..b4ee9ce42b5a
--- /dev/null
+++ b/WordPress/src/main/res/color/on_surface_text_button_selector.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+
+    <item android:alpha="@dimen/material_emphasis_disabled" android:color="?attr/colorOnSurface" android:state_pressed="true" />
+    <item android:color="?attr/colorOnSurface" />
+
+</selector>
diff --git a/WordPress/src/main/res/layout/subfilter_bottom_sheet.xml b/WordPress/src/main/res/layout/subfilter_bottom_sheet.xml
index ab3ee8f910bf..495409eda14d 100644
--- a/WordPress/src/main/res/layout/subfilter_bottom_sheet.xml
+++ b/WordPress/src/main/res/layout/subfilter_bottom_sheet.xml
@@ -1,6 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:app="http://schemas.android.com/apk/res-auto"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:animateLayoutChanges="true"
@@ -12,11 +11,26 @@
         android:layout_width="match_parent"
         android:layout_height="wrap_content" />

-    <org.wordpress.android.widgets.WPTextView
-        android:id="@+id/title"
-        style="@style/SiteTagBottomSheetTitle"
+    <LinearLayout
         android:layout_width="match_parent"
-        android:text="@string/reader_filter_by_blog_title" />
+        android:layout_height="wrap_content"
+        android:orientation="horizontal"
+        android:gravity="center_vertical">
+
+        <org.wordpress.android.widgets.WPTextView
+            android:id="@+id/title"
+            style="@style/SiteTagBottomSheetTitle"
+            android:layout_width="0dp"
+            android:layout_weight="1"
+            android:text="@string/reader_filter_by_blog_title" />
+
+        <org.wordpress.android.widgets.WPTextView
+            android:id="@+id/edit_subscriptions"
+            style="@style/SiteTagBottomSheetAction"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:text="@string/edit"/>
+    </LinearLayout>

     <androidx.viewpager.widget.ViewPager
         android:id="@+id/view_pager"
diff --git a/WordPress/src/main/res/values/styles.xml b/WordPress/src/main/res/values/styles.xml
index f70113da5e8d..9318be6007c4 100644
--- a/WordPress/src/main/res/values/styles.xml
+++ b/WordPress/src/main/res/values/styles.xml
@@ -1181,6 +1181,16 @@
         <item name="android:textSize">@dimen/text_sz_larger</item>
     </style>

+    <style name="SiteTagBottomSheetAction">
+        <item name="android:textSize">@dimen/text_sz_large</item>
+        <item name="android:textColor">@color/on_surface_text_button_selector</item>
+        <item name="android:paddingStart">@dimen/content_margin_bottom_sheet_row_start</item>
+        <item name="android:paddingEnd">@dimen/content_margin_bottom_sheet_row_start</item>
+        <item name="android:paddingTop">@dimen/margin_large</item>
+        <item name="android:paddingBottom">@dimen/margin_large</item>
+        <item name="android:maxLines">1</item>
+    </style>
+
     <style name="SubfilterDividerItem">
         <item name="android:layout_height">@dimen/one_line_list_item_height</item>
     </style>

diff --git a/WordPress/src/test/java/org/wordpress/android/ui/reader/subfilter/SubFilterViewModelTest.kt b/WordPress/src/test/java/org/wordpress/android/ui/reader/subfilter/SubFilterViewModelTest.kt
index 5b03a80bee56..9e3565518c74 100644
--- a/WordPress/src/test/java/org/wordpress/android/ui/reader/subfilter/SubFilterViewModelTest.kt
+++ b/WordPress/src/test/java/org/wordpress/android/ui/reader/subfilter/SubFilterViewModelTest.kt
@@ -179,22 +179,22 @@ class SubFilterViewModelTest : BaseUnitTest() {
     }

     @Test
-    fun `when WPCOM user taps empty bottom sheet SITES cta the subs activity is opened on followed blogs page`() {
+    fun `when WPCOM user taps bottom sheet SITES cta the subs activity is opened on followed blogs page`() {
         val action = OpenSubsAtPage(ReaderSubsActivity.TAB_IDX_FOLLOWED_BLOGS)
         viewModel.onBottomSheetActionClicked(action)

         assertThat(viewModel.bottomSheetUiState.value!!.peekContent()).isEqualTo(BottomSheetHidden)
-        assertThat(viewModel.bottomSheetEmptyViewAction.value!!.peekContent())
+        assertThat(viewModel.bottomSheetAction.value!!.peekContent())
             .isEqualTo(action)
     }

     @Test
-    fun `when WPCOM user taps empty bottom sheet TAGS cta the subs activity is opened on followed tags page`() {
+    fun `when WPCOM user taps bottom sheet TAGS cta the subs activity is opened on followed tags page`() {
         val action = OpenSubsAtPage(ReaderSubsActivity.TAB_IDX_FOLLOWED_TAGS)
         viewModel.onBottomSheetActionClicked(action)

         assertThat(viewModel.bottomSheetUiState.value!!.peekContent()).isEqualTo(BottomSheetHidden)
-        assertThat(viewModel.bottomSheetEmptyViewAction.value!!.peekContent())
+        assertThat(viewModel.bottomSheetAction.value!!.peekContent())
             .isEqualTo(action)
     }

@@ -204,7 +204,7 @@ class SubFilterViewModelTest : BaseUnitTest() {
         viewModel.onBottomSheetActionClicked(action)

         assertThat(viewModel.bottomSheetUiState.value!!.peekContent()).isEqualTo(BottomSheetHidden)
-        assertThat(viewModel.bottomSheetEmptyViewAction.value!!.peekContent())
+        assertThat(viewModel.bottomSheetAction.value!!.peekContent())
             .isEqualTo(action)
     }