-
Notifications
You must be signed in to change notification settings - Fork 135
chore: add translations korean and indonesian #1330
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
Reviewer's GuideThis PR introduces a distinct content_locales setting alongside existing locales, updating the Event model to respect settings overrides and clear caches, extending default config and validation, wiring through tasks, forms, views, and templates, and also adds Korean and Indonesian language entries across system configurations. ER diagram for new content_locales event settingerDiagram
EVENT {
locale_array varchar
content_locale_array varchar
}
EVENT ||--o{ SETTINGS : has
SETTINGS {
locales list
content_locales list
locale varchar
}
Class diagram for updated Event model language configurationclassDiagram
class Event {
+locale_array: str
+content_locale_array: str
+locales: list[str]
+content_locales: list[str]
+update_language_configuration(locales: list[str]|None, content_locales: list[str]|None, default_locale: str|None)
+_clear_language_caches()
}
File-Level Changes
Assessment against linked issues
Possibly linked issues
Tips and commandsInteracting with Sourcery
Customizing Your ExperienceAccess your dashboard to:
Getting Help
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hey there - I've reviewed your changes and they look great!
Prompt for AI Agents
Please address the comments from this code review:
## Individual Comments
### Comment 1
<location> `app/eventyay/base/models/event.py:2119-2120` </location>
<code_context>
+ content_locales: list[str] | None = None,
+ default_locale: str | None = None,
+ ) -> None:
+ locales_list = list(locales or [])
+ content_locales_list = list(content_locales or []) or locales_list
+ if locales_list:
+ self.locale_array = ','.join(locales_list)
</code_context>
<issue_to_address>
**suggestion:** The fallback for content_locales_list may lead to unexpected results if content_locales is an empty list.
If content_locales is an empty list, content_locales_list defaults to locales_list, which may not match the caller's intent. Please handle None and empty lists separately to avoid this ambiguity.
```suggestion
locales_list = list(locales or [])
if content_locales is None:
content_locales_list = locales_list
else:
content_locales_list = list(content_locales)
```
</issue_to_address>
### Comment 2
<location> `app/eventyay/base/settings.py:115-124` </location>
<code_context>
locales = settings_dict.get('locales', [])
if default_locale and default_locale not in locales:
raise ValidationError({'locale': _('Your default locale must also be enabled for your event (see box above).')})
+ content_locales = settings_dict.get('content_locales') or locales
+ if content_locales:
+ invalid_content_locales = set(content_locales) - set(locales)
+ if invalid_content_locales:
+ raise ValidationError(
+ {'content_locales': _('Content languages must be a subset of the active languages.')}
+ )
if settings_dict.get('attendee_names_required') and not settings_dict.get('attendee_names_asked'):
raise ValidationError(
</code_context>
<issue_to_address>
**suggestion:** Validation for content_locales assumes locales is a list; ensure type consistency.
Set operations may fail if locales or content_locales are not lists. Add type checks or convert them to lists before using set().
```suggestion
locales = settings_dict.get('locales', [])
if not isinstance(locales, list):
locales = list(locales)
if default_locale and default_locale not in locales:
raise ValidationError({'locale': _('Your default locale must also be enabled for your event (see box above).')})
content_locales = settings_dict.get('content_locales') or locales
if content_locales:
if not isinstance(content_locales, list):
content_locales = list(content_locales)
invalid_content_locales = set(content_locales) - set(locales)
if invalid_content_locales:
raise ValidationError(
{'content_locales': _('Content languages must be a subset of the active languages.')}
)
```
</issue_to_address>
### Comment 3
<location> `app/eventyay/base/configurations/default_setting.py:864-870` </location>
<code_context>
+ choices=settings.LANGUAGES,
+ widget=MultipleLanguagesWidget,
+ required=True,
+ label=_('Content languages'),
+ help_text=_('Languages that speakers can select for their submissions.'),
),
},
</code_context>
<issue_to_address>
**suggestion:** Help text for content_locales could clarify relationship to active languages.
Update the help text to specify that content languages should be a subset of active languages to avoid confusion.
```suggestion
'form_kwargs': dict(
choices=settings.LANGUAGES,
widget=MultipleLanguagesWidget,
required=True,
label=_('Content languages'),
help_text=_('Languages that speakers can select for their submissions. Content languages should be a subset of active languages to avoid confusion.'),
),
```
</issue_to_address>
### Comment 4
<location> `app/eventyay/base/models/event.py:2084-2085` </location>
<code_context>
@cached_property
def locales(self) -> list[str]:
"""Is a list of active event locales."""
if hasattr(self, 'settings') and 'locales' in self.settings._cache():
locales = self.settings.get('locales', as_type=list)
if locales:
return locales
return [code for code in self.locale_array.split(',') if code]
</code_context>
<issue_to_address>
**suggestion (code-quality):** Use named expression to simplify assignment and conditional ([`use-named-expression`](https://docs.sourcery.ai/Reference/Default-Rules/refactorings/use-named-expression/))
```suggestion
if locales := self.settings.get('locales', as_type=list):
```
</issue_to_address>
### Comment 5
<location> `app/eventyay/base/models/event.py:2093-2094` </location>
<code_context>
@cached_property
def content_locales(self) -> list[str]:
"""Is a list of active content locales."""
if hasattr(self, 'settings') and 'content_locales' in self.settings._cache():
locales = self.settings.get('content_locales', as_type=list)
if locales:
return locales
fallback = [code for code in self.content_locale_array.split(',') if code]
return fallback or self.locales
</code_context>
<issue_to_address>
**suggestion (code-quality):** Use named expression to simplify assignment and conditional ([`use-named-expression`](https://docs.sourcery.ai/Reference/Default-Rules/refactorings/use-named-expression/))
```suggestion
if locales := self.settings.get('content_locales', as_type=list):
```
</issue_to_address>
### Comment 6
<location> `app/eventyay/base/settings.py:118-121` </location>
<code_context>
def validate_event_settings(event, settings_dict):
from eventyay.base.models import Event
from eventyay.base.signals import validate_event_settings
default_locale = settings_dict.get('locale')
locales = settings_dict.get('locales', [])
if default_locale and default_locale not in locales:
raise ValidationError({'locale': _('Your default locale must also be enabled for your event (see box above).')})
content_locales = settings_dict.get('content_locales') or locales
if content_locales:
invalid_content_locales = set(content_locales) - set(locales)
if invalid_content_locales:
raise ValidationError(
{'content_locales': _('Content languages must be a subset of the active languages.')}
)
if settings_dict.get('attendee_names_required') and not settings_dict.get('attendee_names_asked'):
raise ValidationError(
{'attendee_names_required': _('You cannot require specifying attendee names if you do not ask for them.')}
)
if settings_dict.get('attendee_emails_required') and not settings_dict.get('attendee_emails_asked'):
raise ValidationError(
{'attendee_emails_required': _('You have to ask for attendee emails if you want to make them required.')}
)
if settings_dict.get('invoice_address_required') and not settings_dict.get('invoice_address_asked'):
raise ValidationError(
{'invoice_address_required': _('You have to ask for invoice addresses if you want to make them required.')}
)
if settings_dict.get('invoice_address_company_required') and not settings_dict.get('invoice_address_required'):
raise ValidationError(
{
'invoice_address_company_required': _(
'You have to require invoice addresses to require for company names.'
)
}
)
payment_term_last = settings_dict.get('payment_term_last')
if payment_term_last and event.presale_end:
if payment_term_last.date(event) < event.presale_end.date():
raise ValidationError(
{'payment_term_last': _('The last payment date cannot be before the end of presale.')}
)
if isinstance(event, Event):
validate_event_settings.send(sender=event, settings_dict=settings_dict)
</code_context>
<issue_to_address>
**suggestion (code-quality):** Use named expression to simplify assignment and conditional [×2] ([`use-named-expression`](https://docs.sourcery.ai/Reference/Default-Rules/refactorings/use-named-expression/))
```suggestion
if content_locales := settings_dict.get('content_locales') or locales:
if invalid_content_locales := set(content_locales) - set(locales):
```
</issue_to_address>Help me be more useful! Please click 👍 or 👎 on each comment and I'll use the feedback to improve your reviews.
Fixes #1326
Summary by Sourcery
Add Korean and Indonesian language support and introduce independent content language configuration for events
New Features:
Enhancements: