From 75e86d83e955e83de1dc61219efaafbe12e1ec00 Mon Sep 17 00:00:00 2001 From: Ewoud Kohl van Wijngaarden Date: Thu, 3 Nov 2022 12:31:46 +0100 Subject: [PATCH 1/7] Refs #35708 - Fix bad string interpolation example Fixes: 0ed6bc5e1d8de01909293c50e62057ae22f16d1e --- webpack/stories/docs/creating-a-form.stories.mdx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/webpack/stories/docs/creating-a-form.stories.mdx b/webpack/stories/docs/creating-a-form.stories.mdx index 071d9c47ecd..52e7bbccae5 100644 --- a/webpack/stories/docs/creating-a-form.stories.mdx +++ b/webpack/stories/docs/creating-a-form.stories.mdx @@ -68,8 +68,8 @@ You can override the default `successToast` or `errorToast` functions if needed: onSubmit={(values, actions) => submitForm({ ...otherProps, - successToast: response => __(`a custom success message with ${response.data.item}`), - errorToast: error => __(`a custom error message with ${error.response.data.error.item}`), + successToast: response => sprintf(__('a custom success message with %s'), response.data.item), + errorToast: error => sprintf(__('a custom error message with %s'), error.response.data.error.item), }) } > From d307314602c72b3c14795af092fc3fd22fd9ab22 Mon Sep 17 00:00:00 2001 From: Ewoud Kohl van Wijngaarden Date: Wed, 2 Nov 2022 13:42:50 +0100 Subject: [PATCH 2/7] Refs #35708 - Avoid string interpolation with translations This was using sprintf incorrectly, which meant the string wasn't translated. Fixes: 6730cf2a5b440021373a5687dcc2adacfd61bd1d --- .../components/common/ModalProgressBar/ModalProgressBar.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/webpack/assets/javascripts/react_app/components/common/ModalProgressBar/ModalProgressBar.js b/webpack/assets/javascripts/react_app/components/common/ModalProgressBar/ModalProgressBar.js index 3d0c063b3f0..2646a13bf4d 100644 --- a/webpack/assets/javascripts/react_app/components/common/ModalProgressBar/ModalProgressBar.js +++ b/webpack/assets/javascripts/react_app/components/common/ModalProgressBar/ModalProgressBar.js @@ -18,7 +18,7 @@ const ModalProgressBar = ({ show, container, title, progress }) => ( From 6c476d09ca7c1e9b3faf603bf7668819802151db Mon Sep 17 00:00:00 2001 From: Ewoud Kohl van Wijngaarden Date: Thu, 3 Nov 2022 12:27:12 +0100 Subject: [PATCH 3/7] Refs #35708 - Avoid string interpolation with translations Fixes: 0b167ac6bdd7be65ce632049306bc442a27dda3d --- webpack/assets/javascripts/foreman_editor.js | 4 ++-- .../javascripts/react_app/components/Editor/EditorActions.js | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/webpack/assets/javascripts/foreman_editor.js b/webpack/assets/javascripts/foreman_editor.js index 658ac59cf19..b8af4f0e520 100644 --- a/webpack/assets/javascripts/foreman_editor.js +++ b/webpack/assets/javascripts/foreman_editor.js @@ -2,7 +2,7 @@ import { API } from './react_app/redux/API'; import store from './react_app/redux'; import * as editorActions from './react_app/components/Editor/EditorActions'; -import { translate as __ } from './react_app/common/I18n'; +import { sprintf, translate as __ } from './react_app/common/I18n'; import { openConfirmModal } from './foreman_tools'; export const revertTemplate = ({ dataset: { version, url } }) => { @@ -15,7 +15,7 @@ export const revertTemplate = ({ dataset: { version, url } }) => { document.getElementById('primary_tab').click(); store.dispatch(editorActions.changeEditorValue(response.data)); } catch (err) { - alert(__(`Revert Failed, ${err}`)); + alert(sprintf(__('Revert Failed, %s'), err)); } }, }); diff --git a/webpack/assets/javascripts/react_app/components/Editor/EditorActions.js b/webpack/assets/javascripts/react_app/components/Editor/EditorActions.js index 09879905f20..6eee129e6c9 100644 --- a/webpack/assets/javascripts/react_app/components/Editor/EditorActions.js +++ b/webpack/assets/javascripts/react_app/components/Editor/EditorActions.js @@ -1,6 +1,6 @@ import { debounce, toString } from 'lodash'; import { API } from '../../redux/API'; -import { translate as __ } from '../../common/I18n'; +import { sprintf, translate as __ } from '../../common/I18n'; import { EDITOR_CHANGE_DIFF_VIEW, @@ -183,7 +183,7 @@ const createHostAPIRequest = async (query, array, url, dispatch, getState) => { type: EDITOR_SHOW_ERROR, payload: { showError: true, - errorText: __(`Host Fetch ${response}`), + errorText: sprintf(__('Host Fetch %s'), response), previewResult: __('Error during rendering, Return to Editor tab.'), }, }); From 58c821dca18e6606648181a6644cf5da3cc5796a Mon Sep 17 00:00:00 2001 From: Ewoud Kohl van Wijngaarden Date: Thu, 3 Nov 2022 12:30:13 +0100 Subject: [PATCH 4/7] Refs #35708 - Avoid string interpolation with translations Fixes: 616c0d3b8638613124a51671ba807f0f8930d743 --- .../components/HostDetails/Tabs/ReportsTab/helpers.js | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/webpack/assets/javascripts/react_app/components/HostDetails/Tabs/ReportsTab/helpers.js b/webpack/assets/javascripts/react_app/components/HostDetails/Tabs/ReportsTab/helpers.js index ff53b5480e7..bd9a8c0a137 100644 --- a/webpack/assets/javascripts/react_app/components/HostDetails/Tabs/ReportsTab/helpers.js +++ b/webpack/assets/javascripts/react_app/components/HostDetails/Tabs/ReportsTab/helpers.js @@ -19,7 +19,7 @@ import { } from '@patternfly/react-icons'; import { openConfirmModal } from '../../../ConfirmModal'; import { APIActions } from '../../../../redux/API'; -import { translate as __ } from '../../../../common/I18n'; +import { sprintf, translate as __ } from '../../../../common/I18n'; import RelativeDateTime from '../../../common/dates/RelativeDateTime'; const statusMapper = { @@ -92,7 +92,10 @@ export const ActionFormatter = ({ id, can_delete }, fetchReports) => { key: `report-${id}-DELETE`, successToast: success => __('Report was successfully deleted'), errorToast: error => - __(`There was some issue deleting the report: ${error}`), + sprintf( + __('There was some issue deleting the report: %s'), + error + ), handleSuccess: fetchReports, }) ), From ad8c93d0ad63f42d9ed0496a4ce88cee85c2bb72 Mon Sep 17 00:00:00 2001 From: Ewoud Kohl van Wijngaarden Date: Wed, 2 Nov 2022 13:41:55 +0100 Subject: [PATCH 5/7] Refs #35708 - Avoid multiple %s placeholders in i18n Fixes: 1e06a71164535fc1192472481ff87e22f19f19ac --- .../javascripts/react_app/components/HostDetails/index.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/webpack/assets/javascripts/react_app/components/HostDetails/index.js b/webpack/assets/javascripts/react_app/components/HostDetails/index.js index 74e27d9b9e7..ad041ffff4b 100644 --- a/webpack/assets/javascripts/react_app/components/HostDetails/index.js +++ b/webpack/assets/javascripts/react_app/components/HostDetails/index.js @@ -217,7 +217,10 @@ const HostDetails = ({ {date => - sprintf(__('Created %s by %s'), date, response.owner_name) + sprintf(__('Created %(date)s by %(owner)s'), { + date, + owner: response.owner_name, + }) } {' '} From 3de9f429ddb6cf7d9a2c08f72831485e657927e6 Mon Sep 17 00:00:00 2001 From: Ewoud Kohl van Wijngaarden Date: Wed, 2 Nov 2022 13:43:50 +0100 Subject: [PATCH 6/7] Refs #35708 - Avoid multiple %s placeholders in i18n Fixes: 16b27a08a2e632c5a9c8cbf8eb8c84cf45ec2770 --- webpack/assets/javascripts/foreman_tools.js | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/webpack/assets/javascripts/foreman_tools.js b/webpack/assets/javascripts/foreman_tools.js index 4768c348a37..7f4fa5464c8 100644 --- a/webpack/assets/javascripts/foreman_tools.js +++ b/webpack/assets/javascripts/foreman_tools.js @@ -39,12 +39,11 @@ export function activateDatatables() { const language = { searchPlaceholder: __('Filter...'), emptyTable: __('No data available in table'), - info: sprintf( - __('Showing %s to %s of %s entries'), - '_START_', - '_END_', - '_TOTAL_' - ), + info: sprintf(__('Showing %(start)s to %(end)s of %(total)s entries'), { + start: '_START_', + end: '_END_', + total: '_TOTAL_', + }), infoEmpty: __('Showing 0 to 0 of 0 entries'), infoFiltered: sprintf(__('(filtered from %s total entries)'), '_MAX_'), lengthMenu: sprintf(__('Show %s entries'), '_MENU_'), From 36f2892adfa19b84fbb52d1fb017e10922075f97 Mon Sep 17 00:00:00 2001 From: Ewoud Kohl van Wijngaarden Date: Wed, 2 Nov 2022 13:48:26 +0100 Subject: [PATCH 7/7] Fixes #35708 - Avoid multiple %s placeholders in i18n Fixes: 662c4a3a3a1749846f5fc6c114dd3363c7a3bcf1 --- app/models/setting.rb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/models/setting.rb b/app/models/setting.rb index d369e401ae7..ba9cd8f4db8 100644 --- a/app/models/setting.rb +++ b/app/models/setting.rb @@ -161,7 +161,8 @@ def parse_string_value(val) end if errors.present? - raise Foreman::SettingValueException.new(N_("Error parsing value for setting '%s': %s"), name, errors.full_messages.join(", ")) + raise Foreman::SettingValueException.new(N_("Error parsing value for setting '%(name)s': %(error)s"), + { 'name' => name, 'error' => errors.full_messages.join(", ") }) end true end