diff --git a/app/javascript/overview/keywords/KeywordsDisplay.jsx b/app/javascript/overview/keywords/KeywordsDisplay.jsx index 3887bbfcd..6216f4341 100644 --- a/app/javascript/overview/keywords/KeywordsDisplay.jsx +++ b/app/javascript/overview/keywords/KeywordsDisplay.jsx @@ -23,18 +23,21 @@ const KeywordsDisplay = ({ tags }: Props) => ( .map(({ name, displayName }) => ( ))}
- {tags.filter(tag => !tag.category).map(({ name, displayName }) => ( - - {displayName} - - ))} + {tags + .filter(tag => !tag.category) + .map(({ name, displayName }) => ( + + {displayName} + + ))}
) @@ -52,7 +55,7 @@ const CategoryTag = styled.a.attrs({ className: 'pt-tag pt-large' })` padding: 0.5em 1em !important; &::before { - content: '${p => p.category}'; + content: '${p => p.name}'; text-transform: capitalize; } diff --git a/app/javascript/packs/billboard.entry.jsx b/app/javascript/packs/billboard.entry.jsx index 88648d9a8..0cb56f86d 100644 --- a/app/javascript/packs/billboard.entry.jsx +++ b/app/javascript/packs/billboard.entry.jsx @@ -33,7 +33,7 @@ Promise.all([ import(`react-intl/locale-data/${locale.substring(0, 2)}`), loadMessages(locale), ]).then(([localeData, messages]) => { - addLocaleData(localeData) + addLocaleData(localeData.default) if (container != null) { ReactDOM.render( diff --git a/app/javascript/packs/case.entry.jsx b/app/javascript/packs/case.entry.jsx index f042dd7b6..ec4da4af3 100644 --- a/app/javascript/packs/case.entry.jsx +++ b/app/javascript/packs/case.entry.jsx @@ -34,7 +34,7 @@ Promise.all([ import(`react-intl/locale-data/${locale.substring(0, 2)}`), loadMessages(locale), ]).then(([localeData, messages]) => { - addLocaleData(localeData) + addLocaleData(localeData.default) ReactDOM.render( diff --git a/app/javascript/packs/catalog.entry.jsx b/app/javascript/packs/catalog.entry.jsx index c2abcd64b..3d7393739 100644 --- a/app/javascript/packs/catalog.entry.jsx +++ b/app/javascript/packs/catalog.entry.jsx @@ -21,7 +21,7 @@ Promise.all([ import(`react-intl/locale-data/${locale.substring(0, 2)}`), loadMessages(locale), ]).then(([localeData, messages]) => { - addLocaleData(localeData) + addLocaleData(localeData.default) ReactDOM.render( diff --git a/app/javascript/packs/deployment.entry.jsx b/app/javascript/packs/deployment.entry.jsx index 3f8b1a985..0f3e60f60 100644 --- a/app/javascript/packs/deployment.entry.jsx +++ b/app/javascript/packs/deployment.entry.jsx @@ -20,7 +20,7 @@ Promise.all([ import(`react-intl/locale-data/${locale.substring(0, 2)}`), loadMessages(locale), ]).then(([localeData, messages]) => { - addLocaleData(localeData) + addLocaleData(localeData.default) ReactDOM.render( diff --git a/app/javascript/packs/main-menu.entry.jsx b/app/javascript/packs/main-menu.entry.jsx index 0257939a4..4011c227a 100644 --- a/app/javascript/packs/main-menu.entry.jsx +++ b/app/javascript/packs/main-menu.entry.jsx @@ -17,7 +17,7 @@ Promise.all([ import(`react-intl/locale-data/${locale.substring(0, 2)}`), loadMessages(locale), ]).then(([localeData, messages]) => { - addLocaleData(localeData) + addLocaleData(localeData.default) ReactDOM.render( diff --git a/app/javascript/shared/MainMenu.jsx b/app/javascript/shared/MainMenu.jsx index 2cf42a324..79f559b4d 100644 --- a/app/javascript/shared/MainMenu.jsx +++ b/app/javascript/shared/MainMenu.jsx @@ -53,12 +53,12 @@ class MainMenu extends React.Component<{ intl: IntlShape }, Reader> { } > - - + ) : ( @@ -96,12 +96,13 @@ const CaretDown = styled.span.attrs({ margin-left: 8px; color: rgba(255, 255, 255, 0.5); ` -const Row = styled.div.attrs({ - role: 'button', - tabIndex: '0', - onKeyPress: () => acceptKeyboardClick, -})` +const Row = styled.div` display: flex; align-items: center; cursor: pointer; ` +const ButtonRow = styled(Row).attrs({ + role: 'button', + tabindex: '0', + onKeyPress: () => acceptKeyboardClick, +})`` diff --git a/config/initializers/i18n.rb b/config/initializers/i18n.rb index 0876c27f5..3e070b8e5 100644 --- a/config/initializers/i18n.rb +++ b/config/initializers/i18n.rb @@ -8,6 +8,8 @@ .map { |fname| File.basename fname, '.yml' } .map(&:to_sym) config.i18n.available_locales = ([:en] + available_locales).uniq + + config.i18n.fallbacks = %i[en] end module Translation diff --git a/spec/features/using_a_non_english_locale_spec.rb b/spec/features/using_a_non_english_locale_spec.rb new file mode 100644 index 000000000..3e8b08eb4 --- /dev/null +++ b/spec/features/using_a_non_english_locale_spec.rb @@ -0,0 +1,23 @@ +# frozen_string_literal: true + +require 'rails_helper' + +feature 'Using a non-English locale' do + scenario 'the catalog and case pages load' do + reader = create :reader, locale: :fr, password: 'secret' + case_study = create :case_with_elements + case_study.tag 'water' + + login_as reader + + click_on case_study.title + expect(page).to have_content 'TABLE DES MATIÈRES' + + click_on case_study.pages.first.title + expect(page).to have_button 'Retour au résumé' + + # Somehow, not doing this leaves the interface in French for later tests + reader.update locale: :en + logout + end +end diff --git a/spec/support/integration/authentication.rb b/spec/support/integration/authentication.rb index bdf7b5599..184330b6d 100644 --- a/spec/support/integration/authentication.rb +++ b/spec/support/integration/authentication.rb @@ -11,10 +11,14 @@ def login_as(reader) click_button 'Sign in' end - def logout + def logout(locale: :en) visit root_path - find('#reader-icon').click - click_link 'Sign out' + + options = I18n.t('readers.form.account_options', locale: locale) + find("[aria-label='#{options}']").click + + click_on I18n.t('devise.sessions.destroy.sign_out', + locale: locale) end end end