[a11y] Screen Reader uses the locale ID from the system.

This change turns on the use of the locale ID provided by the system to load the translated strings for that locale.

In order to do that, it packages with the A11YManager all translated strings in the resources section of the package.

Note the subtle change in App tests:
Before, it was using a fake locale because the Screen Reader was not loading strings. Now, it is, so it loads real English strings in this case, using the whole l10n infra.

FIXED: 55181
Change-Id: I29cf221f612d8670427e77e828bd15e2f6289431
Reviewed-on: https://fuchsia-review.googlesource.com/c/fuchsia/+/404599
Commit-Queue: Lucas Radaelli <lucasradaelli@google.com>
Reviewed-by: Alice Neels <neelsa@google.com>
Testability-Review: Alice Neels <neelsa@google.com>
diff --git a/src/ui/a11y/bin/a11y_manager/BUILD.gn b/src/ui/a11y/bin/a11y_manager/BUILD.gn
index e73bd2c..ae81250 100644
--- a/src/ui/a11y/bin/a11y_manager/BUILD.gn
+++ b/src/ui/a11y/bin/a11y_manager/BUILD.gn
@@ -34,6 +34,101 @@
               "$target_gen_dir/../../lib/screen_reader/i18n/en/l10n.json")
       dest = "assets/locales/en/l10n.json"
     },
+    {
+      path = rebase_path(
+              "$target_gen_dir/../../lib/screen_reader/i18n/ar-XB/l10n.json")
+      dest = "assets/locales/ar-XB/l10n.json"
+    },
+    {
+      path = rebase_path(
+              "$target_gen_dir/../../lib/screen_reader/i18n/da/l10n.json")
+      dest = "assets/locales/da/l10n.json"
+    },
+    {
+      path = rebase_path(
+              "$target_gen_dir/../../lib/screen_reader/i18n/de/l10n.json")
+      dest = "assets/locales/de/l10n.json"
+    },
+    {
+      path = rebase_path(
+              "$target_gen_dir/../../lib/screen_reader/i18n/de-CH/l10n.json")
+      dest = "assets/locales/de-CH/l10n.json"
+    },
+    {
+      path = rebase_path(
+              "$target_gen_dir/../../lib/screen_reader/i18n/en-GB/l10n.json")
+      dest = "assets/locales/en-GB/l10n.json"
+    },
+    {
+      path = rebase_path(
+              "$target_gen_dir/../../lib/screen_reader/i18n/en-XA/l10n.json")
+      dest = "assets/locales/en-XA/l10n.json"
+    },
+    {
+      path = rebase_path(
+              "$target_gen_dir/../../lib/screen_reader/i18n/en-XC/l10n.json")
+      dest = "assets/locales/en-XC/l10n.json"
+    },
+    {
+      path = rebase_path(
+              "$target_gen_dir/../../lib/screen_reader/i18n/es/l10n.json")
+      dest = "assets/locales/es/l10n.json"
+    },
+    {
+      path = rebase_path(
+              "$target_gen_dir/../../lib/screen_reader/i18n/es-419/l10n.json")
+      dest = "assets/locales/es-419/l10n.json"
+    },
+    {
+      path = rebase_path(
+              "$target_gen_dir/../../lib/screen_reader/i18n/fr/l10n.json")
+      dest = "assets/locales/fr/l10n.json"
+    },
+    {
+      path = rebase_path(
+              "$target_gen_dir/../../lib/screen_reader/i18n/fr-CA/l10n.json")
+      dest = "assets/locales/fr-CA/l10n.json"
+    },
+    {
+      path = rebase_path(
+              "$target_gen_dir/../../lib/screen_reader/i18n/it/l10n.json")
+      dest = "assets/locales/it/l10n.json"
+    },
+    {
+      path = rebase_path(
+              "$target_gen_dir/../../lib/screen_reader/i18n/ja/l10n.json")
+      dest = "assets/locales/ja/l10n.json"
+    },
+    {
+      path = rebase_path(
+              "$target_gen_dir/../../lib/screen_reader/i18n/ko/l10n.json")
+      dest = "assets/locales/ko/l10n.json"
+    },
+    {
+      path = rebase_path(
+              "$target_gen_dir/../../lib/screen_reader/i18n/nb/l10n.json")
+      dest = "assets/locales/nb/l10n.json"
+    },
+    {
+      path = rebase_path(
+              "$target_gen_dir/../../lib/screen_reader/i18n/fr/l10n.json")
+      dest = "assets/locales/fr/l10n.json"
+    },
+    {
+      path = rebase_path(
+              "$target_gen_dir/../../lib/screen_reader/i18n/nl/l10n.json")
+      dest = "assets/locales/nl/l10n.json"
+    },
+    {
+      path = rebase_path(
+              "$target_gen_dir/../../lib/screen_reader/i18n/no/l10n.json")
+      dest = "assets/locales/no/l10n.json"
+    },
+    {
+      path = rebase_path(
+              "$target_gen_dir/../../lib/screen_reader/i18n/sv/l10n.json")
+      dest = "assets/locales/sv/l10n.json"
+    },
 
     # [START icudata_resource]
     {
diff --git a/src/ui/a11y/bin/a11y_manager/tests/app_unittest.cc b/src/ui/a11y/bin/a11y_manager/tests/app_unittest.cc
index 6330d33..de1f0eb 100644
--- a/src/ui/a11y/bin/a11y_manager/tests/app_unittest.cc
+++ b/src/ui/a11y/bin/a11y_manager/tests/app_unittest.cc
@@ -65,7 +65,7 @@
     EXPECT_EQ(0, mock_setui_.num_watch2_called());
     // Right now, obtaining the locale causes the app to be fully-initialized.
     ASSERT_EQ(1, mock_property_provider_.get_profile_count());
-    mock_property_provider_.SetLocale("foo-bar");
+    mock_property_provider_.SetLocale("en");
     mock_property_provider_.ReplyToGetProfile();
     RunLoopUntilIdle();
     ASSERT_EQ(1,
@@ -469,8 +469,8 @@
   mock_setui_.Set(std::move(accessibilitySettings), [](auto) {});
   RunLoopUntilIdle();
   EXPECT_TRUE(app_.state().screen_reader_enabled());
-  EXPECT_EQ(app_.screen_reader()->context()->locale_id(), "foo-bar");
-  mock_property_provider_.SetLocale("foo-baz");
+  EXPECT_EQ(app_.screen_reader()->context()->locale_id(), "en");
+  mock_property_provider_.SetLocale("en-US");
   mock_property_provider_.SendOnChangeEvent();
   RunLoopUntilIdle();
   // The event causes GetProfile() to be invoked again from the a11y manager side. Check if the call
@@ -479,7 +479,7 @@
   // Sends a reply.
   mock_property_provider_.ReplyToGetProfile();
   RunLoopUntilIdle();
-  EXPECT_EQ(app_.screen_reader()->context()->locale_id(), "foo-baz");
+  EXPECT_EQ(app_.screen_reader()->context()->locale_id(), "en-US");
 }
 
 // TODO(fxb/49924): Improve tests to cover what happens if services aren't available at
diff --git a/src/ui/a11y/lib/screen_reader/i18n/BUILD.gn b/src/ui/a11y/lib/screen_reader/i18n/BUILD.gn
index 4d4b054..8f1ae6a 100644
--- a/src/ui/a11y/lib/screen_reader/i18n/BUILD.gn
+++ b/src/ui/a11y/lib/screen_reader/i18n/BUILD.gn
@@ -52,6 +52,7 @@
     "nb",
     "nl",
     "no",
+    "sv",
   ]
   library = "fuchsia.intl.l10n"
 }
diff --git a/src/ui/a11y/lib/screen_reader/screen_reader_context.cc b/src/ui/a11y/lib/screen_reader/screen_reader_context.cc
index 6990e9f..dfe7395 100644
--- a/src/ui/a11y/lib/screen_reader/screen_reader_context.cc
+++ b/src/ui/a11y/lib/screen_reader/screen_reader_context.cc
@@ -21,9 +21,7 @@
                               FX_LOGS(ERROR) << "Unable to connect to TTS service";
                             }
                           });
-  // TODO(FXB/55181): Use Fuchsia provided locale to load the translated strings instead of
-  // hard-coded English.
-  auto result = intl::Lookup::New({"en"});
+  auto result = intl::Lookup::New({locale_id_});
   FX_DCHECK(result.is_ok()) << "Load of l10n resources failed.";
   auto message_formatter =
       std::make_unique<i18n::MessageFormatter>(icu::Locale("en-US"), result.take_value());