Browse Source
multilanguage enhanement
multilanguage enhanement
updated missing lazy text keywords for django messages in related models updated .po file and translate the empty values in it add a unfold translations file to keep the unfold messages whenever we run makemasseges.master
18 changed files with 4030 additions and 2375 deletions
-
76apps/blog/migrations/0003_alter_blog_slogan_alter_blog_slug_alter_blog_summary_and_more.py
-
28apps/blog/models.py
-
35apps/chat/migrations/0003_alter_chatmessage_options_and_more.py
-
88apps/chat/models.py
-
58apps/course/migrations/0004_alter_lessoncompletion_options_and_more.py
-
95apps/course/models/course.py
-
43apps/course/models/lesson.py
-
12apps/course/models/live_session.py
-
17apps/course/models/participant.py
-
147apps/quiz/migrations/0002_alter_participantanswer_answer_timing_and_more.py
-
46apps/quiz/models/participant.py
-
50apps/quiz/models/quiz.py
-
40apps/transaction/migrations/0002_alter_participantinfo_options_and_more.py
-
31apps/transaction/models.py
-
37dynamic_preferences/locale/ru/LC_MESSAGES/django.po
-
1328locale/fa/LC_MESSAGES/django.po
-
4226locale/ru/LC_MESSAGES/django.po
-
48utils/unfold_translations.py
@ -0,0 +1,76 @@ |
|||
# Generated by Django 5.2.12 on 2026-05-03 14:09 |
|||
|
|||
import dj_language.field |
|||
import django.db.models.deletion |
|||
from django.db import migrations, models |
|||
|
|||
|
|||
class Migration(migrations.Migration): |
|||
|
|||
dependencies = [ |
|||
('blog', '0002_alter_blog_slogan_alter_blog_title'), |
|||
('dj_language', '0002_auto_20220120_1344'), |
|||
] |
|||
|
|||
operations = [ |
|||
migrations.AlterField( |
|||
model_name='blog', |
|||
name='slogan', |
|||
field=models.JSONField(default=list, verbose_name='Slogan'), |
|||
), |
|||
migrations.AlterField( |
|||
model_name='blog', |
|||
name='slug', |
|||
field=models.JSONField(blank=True, default=list, help_text='URL slug for the blog', null=True, verbose_name='Slug'), |
|||
), |
|||
migrations.AlterField( |
|||
model_name='blog', |
|||
name='summary', |
|||
field=models.JSONField(blank=True, default=list, null=True, verbose_name='Summary'), |
|||
), |
|||
migrations.AlterField( |
|||
model_name='blog', |
|||
name='title', |
|||
field=models.JSONField(default=list, verbose_name='Title'), |
|||
), |
|||
migrations.AlterField( |
|||
model_name='blogcontent', |
|||
name='content', |
|||
field=models.JSONField(blank=True, default=list, help_text='The main content text', null=True, verbose_name='Content'), |
|||
), |
|||
migrations.AlterField( |
|||
model_name='blogcontent', |
|||
name='slug', |
|||
field=models.JSONField(blank=True, default=list, help_text='URL slug for this content (optional)', null=True, verbose_name='Slug'), |
|||
), |
|||
migrations.AlterField( |
|||
model_name='blogcontent', |
|||
name='title', |
|||
field=models.JSONField(blank=True, default=list, help_text='Title of this content section', null=True, verbose_name='Content Title'), |
|||
), |
|||
migrations.AlterField( |
|||
model_name='blogseo', |
|||
name='blog', |
|||
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='seos', to='blog.blog', verbose_name='Blog'), |
|||
), |
|||
migrations.AlterField( |
|||
model_name='blogseo', |
|||
name='description', |
|||
field=models.CharField(blank=True, help_text='describes and summarizes the contents of the page for the benefit of users and search engines', max_length=170, null=True, verbose_name='Description'), |
|||
), |
|||
migrations.AlterField( |
|||
model_name='blogseo', |
|||
name='keywords', |
|||
field=models.CharField(blank=True, help_text='keywords in the content that make it possible for people to find the site via search engines', max_length=700, null=True, verbose_name='Keywords'), |
|||
), |
|||
migrations.AlterField( |
|||
model_name='blogseo', |
|||
name='language', |
|||
field=dj_language.field.LanguageField(default=69, limit_choices_to={'status': True}, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='+', to='dj_language.language', verbose_name='Language'), |
|||
), |
|||
migrations.AlterField( |
|||
model_name='blogseo', |
|||
name='title', |
|||
field=models.CharField(blank=True, help_text='maximum length of page title is 70 characters and minimum length is 30', max_length=140, null=True, verbose_name='SEO Title'), |
|||
), |
|||
] |
|||
@ -0,0 +1,35 @@ |
|||
# Generated by Django 5.2.12 on 2026-05-03 14:09 |
|||
|
|||
from django.db import migrations, models |
|||
|
|||
|
|||
class Migration(migrations.Migration): |
|||
|
|||
dependencies = [ |
|||
('chat', '0002_roommessage_is_locked'), |
|||
] |
|||
|
|||
operations = [ |
|||
migrations.AlterModelOptions( |
|||
name='chatmessage', |
|||
options={'verbose_name': 'Chat Message', 'verbose_name_plural': 'Chat Messages'}, |
|||
), |
|||
migrations.AlterModelOptions( |
|||
name='messagereadstatus', |
|||
options={'verbose_name': 'Message Read Status', 'verbose_name_plural': 'Message Read Statuses'}, |
|||
), |
|||
migrations.AlterModelOptions( |
|||
name='roommessage', |
|||
options={'verbose_name': 'Room Message', 'verbose_name_plural': 'Room Messages'}, |
|||
), |
|||
migrations.AlterField( |
|||
model_name='chatmessage', |
|||
name='message_metadata', |
|||
field=models.JSONField(blank=True, null=True, verbose_name='Message Metadata'), |
|||
), |
|||
migrations.AlterField( |
|||
model_name='roommessage', |
|||
name='unread_messages_count', |
|||
field=models.IntegerField(default=0, verbose_name='Unread Messages Count'), |
|||
), |
|||
] |
|||
@ -0,0 +1,58 @@ |
|||
# Generated by Django 5.2.12 on 2026-05-03 14:02 |
|||
|
|||
import django.db.models.deletion |
|||
from django.db import migrations, models |
|||
|
|||
|
|||
class Migration(migrations.Migration): |
|||
|
|||
dependencies = [ |
|||
('account', '0002_alter_user_email_alter_user_username'), |
|||
('course', '0003_rename_is_chat_group_lock_course_is_group_chat_locked_and_more'), |
|||
] |
|||
|
|||
operations = [ |
|||
migrations.AlterModelOptions( |
|||
name='lessoncompletion', |
|||
options={'verbose_name': 'Lesson Completion', 'verbose_name_plural': 'Lesson Completions'}, |
|||
), |
|||
migrations.AlterModelOptions( |
|||
name='participant', |
|||
options={'verbose_name': 'Participant', 'verbose_name_plural': 'Participants'}, |
|||
), |
|||
migrations.AlterField( |
|||
model_name='lessoncompletion', |
|||
name='course_lesson', |
|||
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='completions', to='course.courselesson', verbose_name='Course Lesson'), |
|||
), |
|||
migrations.AlterField( |
|||
model_name='lessoncompletion', |
|||
name='student', |
|||
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='lesson_completions', to='account.studentuser', verbose_name='Student'), |
|||
), |
|||
migrations.AlterField( |
|||
model_name='participant', |
|||
name='course', |
|||
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='participants', to='course.course', verbose_name='Course'), |
|||
), |
|||
migrations.AlterField( |
|||
model_name='participant', |
|||
name='is_active', |
|||
field=models.BooleanField(default=True, verbose_name='Is Active'), |
|||
), |
|||
migrations.AlterField( |
|||
model_name='participant', |
|||
name='joined_date', |
|||
field=models.DateTimeField(auto_now_add=True, verbose_name='Joined Date'), |
|||
), |
|||
migrations.AlterField( |
|||
model_name='participant', |
|||
name='student', |
|||
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='participated_courses', to='account.studentuser', verbose_name='Student'), |
|||
), |
|||
migrations.AlterField( |
|||
model_name='participant', |
|||
name='unread_messages_count', |
|||
field=models.IntegerField(default=0, verbose_name='Unread Messages Count'), |
|||
), |
|||
] |
|||
@ -0,0 +1,147 @@ |
|||
# Generated by Django 5.2.12 on 2026-05-03 14:09 |
|||
|
|||
import django.db.models.deletion |
|||
from django.conf import settings |
|||
from django.db import migrations, models |
|||
|
|||
|
|||
class Migration(migrations.Migration): |
|||
|
|||
dependencies = [ |
|||
('course', '0004_alter_lessoncompletion_options_and_more'), |
|||
('quiz', '0001_initial'), |
|||
migrations.swappable_dependency(settings.AUTH_USER_MODEL), |
|||
] |
|||
|
|||
operations = [ |
|||
migrations.AlterField( |
|||
model_name='participantanswer', |
|||
name='answer_timing', |
|||
field=models.PositiveSmallIntegerField(default=0, verbose_name='Seconds Take to Answer'), |
|||
), |
|||
migrations.AlterField( |
|||
model_name='participantanswer', |
|||
name='at_time', |
|||
field=models.DateTimeField(verbose_name='At Time'), |
|||
), |
|||
migrations.AlterField( |
|||
model_name='participantanswer', |
|||
name='option_num', |
|||
field=models.PositiveSmallIntegerField(choices=[(1, 'Option 1'), (2, 'Option 2'), (3, 'Option 3'), (4, 'Option 4')], verbose_name='Selected Option'), |
|||
), |
|||
migrations.AlterField( |
|||
model_name='participantanswer', |
|||
name='participant', |
|||
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='answers', to='quiz.quizparticipant', verbose_name='Participant'), |
|||
), |
|||
migrations.AlterField( |
|||
model_name='participantanswer', |
|||
name='question', |
|||
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='quiz.question', verbose_name='Question'), |
|||
), |
|||
migrations.AlterField( |
|||
model_name='question', |
|||
name='correct_answer', |
|||
field=models.PositiveSmallIntegerField(choices=[(1, 'Option 1'), (2, 'Option 2'), (3, 'Option 3'), (4, 'Option 4')], verbose_name='Correct Answer'), |
|||
), |
|||
migrations.AlterField( |
|||
model_name='question', |
|||
name='created_at', |
|||
field=models.DateTimeField(auto_now_add=True, verbose_name='Created At'), |
|||
), |
|||
migrations.AlterField( |
|||
model_name='question', |
|||
name='option1', |
|||
field=models.CharField(max_length=255, verbose_name='Option 1'), |
|||
), |
|||
migrations.AlterField( |
|||
model_name='question', |
|||
name='option2', |
|||
field=models.CharField(max_length=255, verbose_name='Option 2'), |
|||
), |
|||
migrations.AlterField( |
|||
model_name='question', |
|||
name='option3', |
|||
field=models.CharField(max_length=255, verbose_name='Option 3'), |
|||
), |
|||
migrations.AlterField( |
|||
model_name='question', |
|||
name='option4', |
|||
field=models.CharField(max_length=255, verbose_name='Option 4'), |
|||
), |
|||
migrations.AlterField( |
|||
model_name='question', |
|||
name='priority', |
|||
field=models.IntegerField(blank=True, null=True, verbose_name='Priority'), |
|||
), |
|||
migrations.AlterField( |
|||
model_name='question', |
|||
name='question', |
|||
field=models.CharField(max_length=255, verbose_name='Question'), |
|||
), |
|||
migrations.AlterField( |
|||
model_name='question', |
|||
name='quiz', |
|||
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='questions', to='quiz.quiz', verbose_name='Quiz'), |
|||
), |
|||
migrations.AlterField( |
|||
model_name='quiz', |
|||
name='each_question_timing', |
|||
field=models.PositiveIntegerField(verbose_name='Each Question Timing'), |
|||
), |
|||
migrations.AlterField( |
|||
model_name='quiz', |
|||
name='lesson', |
|||
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='quizzes', to='course.courselesson', verbose_name='Lesson'), |
|||
), |
|||
migrations.AlterField( |
|||
model_name='quiz', |
|||
name='status', |
|||
field=models.BooleanField(default=True, verbose_name='Status'), |
|||
), |
|||
migrations.AlterField( |
|||
model_name='quiz', |
|||
name='title', |
|||
field=models.CharField(help_text='Quiz Title', max_length=255, verbose_name='Title'), |
|||
), |
|||
migrations.AlterField( |
|||
model_name='quizparticipant', |
|||
name='ended_at', |
|||
field=models.DateTimeField(verbose_name='Ended At'), |
|||
), |
|||
migrations.AlterField( |
|||
model_name='quizparticipant', |
|||
name='question_score', |
|||
field=models.PositiveIntegerField(verbose_name='Question Score'), |
|||
), |
|||
migrations.AlterField( |
|||
model_name='quizparticipant', |
|||
name='quiz', |
|||
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='participants', to='quiz.quiz', verbose_name='Quiz'), |
|||
), |
|||
migrations.AlterField( |
|||
model_name='quizparticipant', |
|||
name='started_at', |
|||
field=models.DateTimeField(verbose_name='Started At'), |
|||
), |
|||
migrations.AlterField( |
|||
model_name='quizparticipant', |
|||
name='timing_score', |
|||
field=models.PositiveIntegerField(verbose_name='Timing Score'), |
|||
), |
|||
migrations.AlterField( |
|||
model_name='quizparticipant', |
|||
name='total_score', |
|||
field=models.PositiveIntegerField(verbose_name='Total Score'), |
|||
), |
|||
migrations.AlterField( |
|||
model_name='quizparticipant', |
|||
name='total_timing', |
|||
field=models.PositiveIntegerField(help_text='Seconds take to finish the quiz', verbose_name='Total Timing'), |
|||
), |
|||
migrations.AlterField( |
|||
model_name='quizparticipant', |
|||
name='user', |
|||
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='uquizzes', to=settings.AUTH_USER_MODEL, verbose_name='User'), |
|||
), |
|||
] |
|||
@ -0,0 +1,40 @@ |
|||
# Generated by Django 5.2.12 on 2026-05-03 14:09 |
|||
|
|||
import django.db.models.deletion |
|||
from django.conf import settings |
|||
from django.db import migrations, models |
|||
|
|||
|
|||
class Migration(migrations.Migration): |
|||
|
|||
dependencies = [ |
|||
('course', '0004_alter_lessoncompletion_options_and_more'), |
|||
('transaction', '0001_initial'), |
|||
migrations.swappable_dependency(settings.AUTH_USER_MODEL), |
|||
] |
|||
|
|||
operations = [ |
|||
migrations.AlterModelOptions( |
|||
name='participantinfo', |
|||
options={'verbose_name': 'Participant Info', 'verbose_name_plural': 'Participant Infos'}, |
|||
), |
|||
migrations.AlterModelOptions( |
|||
name='transactionparticipant', |
|||
options={'verbose_name': 'Transaction Participant', 'verbose_name_plural': 'Transaction Participants'}, |
|||
), |
|||
migrations.AlterField( |
|||
model_name='transactionparticipant', |
|||
name='course', |
|||
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='course_transactions', to='course.course', verbose_name='Course'), |
|||
), |
|||
migrations.AlterField( |
|||
model_name='transactionparticipant', |
|||
name='is_deleted', |
|||
field=models.BooleanField(default=False, verbose_name='Is Deleted'), |
|||
), |
|||
migrations.AlterField( |
|||
model_name='transactionparticipant', |
|||
name='user', |
|||
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='transactions', to=settings.AUTH_USER_MODEL, verbose_name='User'), |
|||
), |
|||
] |
|||
1328
locale/fa/LC_MESSAGES/django.po
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
4226
locale/ru/LC_MESSAGES/django.po
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
@ -0,0 +1,48 @@ |
|||
# backend/utils/unfold_translations.py |
|||
from django.utils.translation import gettext_lazy as _ |
|||
|
|||
# Dummy list to trick makemessages into keeping our Unfold overrides safe! |
|||
UNFOLD_CUSTOM_STRINGS = [ |
|||
_("Search"), |
|||
_("Search apps and models"), |
|||
_("View site"), |
|||
_("Log out"), |
|||
_("general"), |
|||
_("manage all Participants"), |
|||
_("questions"), |
|||
_("question"), |
|||
_("option"), |
|||
_("correct answer"), |
|||
_("Total score"), |
|||
_("Timing score"), |
|||
_("Question score"), |
|||
_("Total timing"), |
|||
_("Ended at"), |
|||
_("Started at"), |
|||
_("Participant Answer"), |
|||
_("Selected option"), |
|||
_("Correct Answer"), |
|||
_("Seconds take to answer"), |
|||
_("Recent Messages Latest"), |
|||
_("Room name"), |
|||
_("Is Locked"), |
|||
_("Initiator"), |
|||
_("Recipient"), |
|||
_("Manage All Messages"), |
|||
_("Sender"), |
|||
_("Message Content"), |
|||
_("Chat Type"), |
|||
_("Sent At"), |
|||
_("Is deleted"), |
|||
_("Group"), |
|||
_("Private"), |
|||
_("System Administration"), |
|||
_("All Users"), |
|||
_("Monday"), |
|||
_("Tuesday"), |
|||
_("Wednesday"), |
|||
_("Thursday"), |
|||
_("Friday"), |
|||
_("Saturday"), |
|||
_("Sunday"), |
|||
] |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue