Use more generic locale as fallback for rules (#34756)
This commit is contained in:
parent
97b9e8849d
commit
6ab96ba647
4 changed files with 15 additions and 4 deletions
|
@ -171,8 +171,8 @@ class About extends PureComponent {
|
||||||
) : (
|
) : (
|
||||||
<ol className='rules-list'>
|
<ol className='rules-list'>
|
||||||
{server.get('rules').map(rule => {
|
{server.get('rules').map(rule => {
|
||||||
const text = rule.getIn(['translations', locale, 'text']) || rule.get('text');
|
const text = rule.getIn(['translations', locale, 'text']) || rule.getIn(['translations', locale.split('-')[0], 'text']) || rule.get('text');
|
||||||
const hint = rule.getIn(['translations', locale, 'hint']) || rule.get('hint');
|
const hint = rule.getIn(['translations', locale, 'hint']) || rule.getIn(['translations', locale.split('-')[0], 'hint']) || rule.get('hint');
|
||||||
return (
|
return (
|
||||||
<li key={rule.get('id')}>
|
<li key={rule.get('id')}>
|
||||||
<div className='rules-list__text'>{text}</div>
|
<div className='rules-list__text'>{text}</div>
|
||||||
|
|
|
@ -51,7 +51,7 @@ class Rules extends PureComponent {
|
||||||
value={item.get('id')}
|
value={item.get('id')}
|
||||||
checked={selectedRuleIds.includes(item.get('id'))}
|
checked={selectedRuleIds.includes(item.get('id'))}
|
||||||
onToggle={this.handleRulesToggle}
|
onToggle={this.handleRulesToggle}
|
||||||
label={item.getIn(['translations', locale, 'text']) || item.get('text')}
|
label={item.getIn(['translations', locale, 'text']) || item.getIn(['translations', locale.split('-')[0], 'text']) || item.get('text')}
|
||||||
multiple
|
multiple
|
||||||
/>
|
/>
|
||||||
))}
|
))}
|
||||||
|
|
|
@ -42,6 +42,6 @@ class Rule < ApplicationRecord
|
||||||
|
|
||||||
def translation_for(locale)
|
def translation_for(locale)
|
||||||
@cached_translations ||= {}
|
@cached_translations ||= {}
|
||||||
@cached_translations[locale] ||= translations.find_by(language: locale) || RuleTranslation.new(language: locale, text: text, hint: hint)
|
@cached_translations[locale] ||= translations.where(language: [locale, locale.to_s.split('-').first]).order('length(language) desc').first || RuleTranslation.new(language: locale, text: text, hint: hint)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -36,4 +36,15 @@ RSpec.describe Rule do
|
||||||
.to change { described_class.ordered.pluck(:text) }.from(%w(foo baz bar)).to(%w(foo bar baz))
|
.to change { described_class.ordered.pluck(:text) }.from(%w(foo baz bar)).to(%w(foo bar baz))
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
describe '#translation_for' do
|
||||||
|
let!(:rule) { Fabricate(:rule, text: 'This is a rule', hint: 'This is an explanation of the rule') }
|
||||||
|
let!(:translation) { Fabricate(:rule_translation, rule: rule, text: 'Ceci est une règle', hint: 'Ceci est une explication de la règle', language: 'fr') }
|
||||||
|
|
||||||
|
it 'returns the expected translation, including fallbacks' do
|
||||||
|
expect(rule.translation_for(:en)).to have_attributes(text: rule.text, hint: rule.hint)
|
||||||
|
expect(rule.translation_for(:fr)).to have_attributes(text: translation.text, hint: translation.hint)
|
||||||
|
expect(rule.translation_for(:'fr-CA')).to have_attributes(text: translation.text, hint: translation.hint)
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue