From 01453a4d58830e981290798237fe5f34d73e4f74 Mon Sep 17 00:00:00 2001 From: Dustin-Kelley <141975656+Dustin-Kelley@users.noreply.github.com> Date: Thu, 10 Sep 2026 20:43:38 +0000 Subject: [PATCH 1/2] chore: sync react localization --- .changeset/sync-localization-react-e4c7700.md | 5 +++ packages/ui/src/i18n/locales/en.json | 34 ++++++++++++++++--- 2 files changed, 34 insertions(+), 5 deletions(-) create mode 100644 .changeset/sync-localization-react-e4c7700.md diff --git a/.changeset/sync-localization-react-e4c7700.md b/.changeset/sync-localization-react-e4c7700.md new file mode 100644 index 00000000..b599cb55 --- /dev/null +++ b/.changeset/sync-localization-react-e4c7700.md @@ -0,0 +1,5 @@ +--- +'@youversion/platform-react-ui': patch +--- + +Sync localization from platform-localization (e4c7700): update 28 keys in en. diff --git a/packages/ui/src/i18n/locales/en.json b/packages/ui/src/i18n/locales/en.json index 8f268446..598f030d 100644 --- a/packages/ui/src/i18n/locales/en.json +++ b/packages/ui/src/i18n/locales/en.json @@ -1,5 +1,5 @@ { - "verseOfTheDay": "Verse of The Day", + "verseOfTheDay": "Verse of the Day", "shareAriaLabel": "Share", "noLanguageSearchResults": "We're sorry, there are no results for this search.", "languageSearchAriaLabel": "Search languages", @@ -28,8 +28,8 @@ "booksHeading": "Books", "backToBibleVersionsAriaLabel": "Back to Bible versions", "bibleVersionsHeading": "Bible Versions", - "selectLanguageHeading": "Select Language", - "selectLanguageAriaLabel": "Select language", + "selectLanguageHeading": "Select a Language", + "selectLanguageAriaLabel": "Select a Language", "recentlyUsedVersionsHeading": "Recently Used Versions", "allVersionsHeading": "All Versions", "regionalHeading": "Regional", @@ -51,7 +51,7 @@ "verseLabel": "Verse {{verseNum}}", "bibleAppTitle": "Bible App", "sunIconTitle": "Sun", - "passageNotFoundError": "This passage isn't available in the selected Bible version.", + "passageNotFoundError": "This passage is unavailable in the selected Bible version.", "invalidAppKeyError": "This Bible content couldn't be loaded because the app key is missing or invalid.", "forbiddenError": "This app isn't allowed to access this Bible content.", "unreachableServerError": "The Bible server couldn't be reached. Check your connection and try again.", @@ -83,5 +83,29 @@ "signOutPendingHighlightsConfirm": "Sign out anyway", "youVersionPlatformLogoAriaLabel": "YouVersion Platform", "signInAppNameFallback": "This app", - "untitledSerifFontName": "Untitled Serif" + "untitledSerifFontName": "Untitled Serif", + "cancel": "Cancel", + "close": "Close", + "error": "Error", + "font": "Font", + "fontAndSettings": "Fonts & Settings", + "language": "Language", + "maybeLater": "Maybe Later", + "moreMenuAriaLabel": "More", + "ok": "OK", + "offlineConnectionLostMessage": "We’re having difficulties with your connection.", + "offlineDownloadAgreement": "Our agreement with the publisher of this Bible version requires us to share certain information with them in order to offer this version for offline use. By proceeding you agree to share your information and to allow the publisher to email you.", + "offlineDownloadTagline": "Read it anytime, anywhere—even offline", + "passageUnavailable": "This passage is unavailable in the selected Bible version.", + "regional": "Regional", + "search": "Search", + "searchLanguages": "Search languages", + "searchVersions": "Search versions", + "selectLanguage": "Select a Language", + "suggested": "Suggested", + "versionUnavailableAutoSelectedMessage": "Your previously selected Bible version is unavailable. Please switch to another one.", + "agreeAndDownload": "Agree and Download", + "all": "All", + "back": "Back", + "bibleApp": "Bible App" } From 2129705d3343285b4ccdda744e1744463bbfeab2 Mon Sep 17 00:00:00 2001 From: Amp Date: Mon, 14 Sep 2026 21:17:58 +0000 Subject: [PATCH 2/2] test(ui): sync assertions with localization Amp-Thread-ID: https://ampcode.com/threads/T-01a0a1bf-6abe-72c0-bfa7-38e2febd1b93 --- .../bible-version-picker.stories.tsx | 16 +++++++++------- .../components/bible-version-picker.test.tsx | 18 +++++++++--------- packages/ui/src/components/verse.test.tsx | 2 +- 3 files changed, 19 insertions(+), 17 deletions(-) diff --git a/packages/ui/src/components/bible-version-picker.stories.tsx b/packages/ui/src/components/bible-version-picker.stories.tsx index 3b249ea5..f30b214c 100644 --- a/packages/ui/src/components/bible-version-picker.stories.tsx +++ b/packages/ui/src/components/bible-version-picker.stories.tsx @@ -167,14 +167,16 @@ export const InteractiveLanguageSelection: Story = { await expect(dialog).toBeInTheDocument(); // Click language button - const languageButton = await screen.findByRole('button', { name: /select language/i }); + const languageButton = await screen.findByRole('button', { name: /select a language/i }); await waitFor(async () => { await expect(languageButton).toHaveTextContent('English'); }); await userEvent.click(languageButton); // Verify language list is visible - const selectLanguageHeading = await screen.findByRole('heading', { name: /select language/i }); + const selectLanguageHeading = await screen.findByRole('heading', { + name: /select a language/i, + }); await expect(selectLanguageHeading).toBeInTheDocument(); // Select Korean @@ -184,7 +186,7 @@ export const InteractiveLanguageSelection: Story = { // Wait for the language button to update with the selected language await waitFor(async () => { await expect( - await screen.findByRole('button', { name: /select language/i }), + await screen.findByRole('button', { name: /select a language/i }), ).toHaveTextContent(/korean/i); }); }, @@ -231,7 +233,7 @@ export const SuggestedLanguagesTabs: Story = { await expect(dialog).toBeInTheDocument(); // Click language button to open language selection - const languageButton = await screen.findByRole('button', { name: /select language/i }); + const languageButton = await screen.findByRole('button', { name: /select a language/i }); await userEvent.click(languageButton); // Verify the Suggested tab is active by default and shows "Regional" heading @@ -288,7 +290,7 @@ export const SuggestedLanguagesTabs: Story = { // Verify the language button shows the selected language await waitFor(async () => { await expect( - await screen.findByRole('button', { name: /select language/i }), + await screen.findByRole('button', { name: /select a language/i }), ).toHaveTextContent(/english/i); }); }, @@ -321,7 +323,7 @@ export const SuggestedLanguagesOrder: Story = { await userEvent.click(trigger); // Open language selection - const languageButton = await screen.findByRole('button', { name: /select language/i }); + const languageButton = await screen.findByRole('button', { name: /select a language/i }); await userEvent.click(languageButton); // Verify suggested languages appear in API order (not alphabetical or by population) @@ -347,7 +349,7 @@ export const LanguageSearch: Story = { const trigger = await canvas.findByRole('button', { name: /NIV/i }, { timeout: 10_000 }); await userEvent.click(trigger); - const languageButton = await screen.findByRole('button', { name: /select language/i }); + const languageButton = await screen.findByRole('button', { name: /select a language/i }); await userEvent.click(languageButton); const languageSearchInput = screen.getByRole('textbox', { name: /search languages/i }); diff --git a/packages/ui/src/components/bible-version-picker.test.tsx b/packages/ui/src/components/bible-version-picker.test.tsx index f8712413..a85d51ee 100644 --- a/packages/ui/src/components/bible-version-picker.test.tsx +++ b/packages/ui/src/components/bible-version-picker.test.tsx @@ -179,7 +179,7 @@ async function openPicker() { async function openLanguagePanel() { await openPicker(); - await userEvent.click(screen.getByRole('button', { name: /select language/i })); + await userEvent.click(screen.getByRole('button', { name: /select a language/i })); } function getLanguageSearchInput() { @@ -255,7 +255,7 @@ describe('BibleVersionPicker', () => { await openPicker(); await waitFor(() => { - const languageButton = screen.getByRole('button', { name: /select language/i }); + const languageButton = screen.getByRole('button', { name: /select a language/i }); const badge = languageButton.querySelector('[data-slot="badge"]'); expect(badge).not.toBeNull(); @@ -288,7 +288,7 @@ describe('BibleVersionPicker', () => { await openPicker(); await waitFor(() => { - const languageButton = screen.getByRole('button', { name: /select language/i }); + const languageButton = screen.getByRole('button', { name: /select a language/i }); const badge = languageButton.querySelector('[data-slot="badge"]'); expect(badge).not.toBeNull(); expect(badge!.textContent).toBe('2'); @@ -598,7 +598,7 @@ describe('BibleVersionPicker', () => { , ); - expect(screen.queryByText('Select Language')).not.toBeInTheDocument(); + expect(screen.queryByText('Select a Language')).not.toBeInTheDocument(); expect(screen.getByText('Suggested')).toBeInTheDocument(); await user.click(screen.getByRole('listitem', { name: /english/i })); @@ -616,7 +616,7 @@ describe('BibleVersionPicker', () => { , ); - await user.click(screen.getByRole('button', { name: /select language/i })); + await user.click(screen.getByRole('button', { name: /select a language/i })); expect(onClick).toHaveBeenCalledTimes(1); }); @@ -633,7 +633,7 @@ describe('BibleVersionPicker', () => { ); await user.click(screen.getByRole('button', { name: 'NIV' })); - await user.click(screen.getAllByRole('button', { name: /select language/i })[0]!); + await user.click(screen.getAllByRole('button', { name: /select a language/i })[0]!); expect(screen.queryByText('All Languages')).not.toBeInTheDocument(); }); @@ -644,9 +644,9 @@ describe('BibleVersionPicker', () => { renderPicker(); await openPicker(); - await user.click(screen.getByRole('button', { name: /select language/i })); + await user.click(screen.getByRole('button', { name: /select a language/i })); - expect(screen.getByRole('heading', { name: /select language/i })).toBeInTheDocument(); + expect(screen.getByRole('heading', { name: /select a language/i })).toBeInTheDocument(); const dialog = screen.getByRole('dialog'); const viewport = dialog.querySelector('.yv\\:relative.yv\\:min-h-0.yv\\:overflow-hidden'); @@ -776,7 +776,7 @@ describe('BibleVersionPicker', () => { expect(getLanguageSearchInput()).toHaveValue('korean'); await user.click(screen.getByRole('button', { name: /back to bible versions/i })); - await user.click(screen.getByRole('button', { name: /select language/i })); + await user.click(screen.getByRole('button', { name: /select a language/i })); expect(getLanguageSearchInput()).toHaveValue(''); }); diff --git a/packages/ui/src/components/verse.test.tsx b/packages/ui/src/components/verse.test.tsx index e6a16f01..5f8705ba 100644 --- a/packages/ui/src/components/verse.test.tsx +++ b/packages/ui/src/components/verse.test.tsx @@ -1070,7 +1070,7 @@ describe('BibleTextView - Error messaging', () => { await waitFor(() => { expect(getByRole('alert')).toHaveTextContent( - "This passage isn't available in the selected Bible version.", + 'This passage is unavailable in the selected Bible version.', ); }); });