diff --git a/app/assets/javascripts/editor/evaluation.js b/app/assets/javascripts/editor/evaluation.js
index 2a992c08..c0e0bb0e 100644
--- a/app/assets/javascripts/editor/evaluation.js
+++ b/app/assets/javascripts/editor/evaluation.js
@@ -236,7 +236,7 @@ CodeOceanEditorEvaluation = {
this.submission_deadline = new Date(deadline);
let deadline_text = I18n.l("time.formats.long", this.submission_deadline);
deadline_text += ` (${this.getUTCTime(this.submission_deadline, I18n.locale === 'en')})`;
- const bullet_point = I18n.t('exercises.editor.hints.' + translation_key,
+ const bullet_point = I18n.t(`exercises.editor.hints.${translation_key}`,
{ deadline: deadline_text, otherwise: otherwise })
let text = $.parseHTML(bullet_point);
$(li).append(text);
@@ -270,10 +270,13 @@ CodeOceanEditorEvaluation = {
const ul = document.createElement("ul");
if (submission_deadline && late_submission_deadline) {
+ // i18n-tasks-use t('exercises.editor.hints.submission_deadline')
ul.append(this.getDeadlineInformation(submission_deadline, 'submission_deadline', ''));
+ // i18n-tasks-use t('exercises.editor.hints.late_submission_deadline')
ul.append(this.getDeadlineInformation(late_submission_deadline, 'late_submission_deadline', ''));
} else {
const otherwise_no_points = I18n.t('exercises.editor.hints.otherwise');
+ // i18n-tasks-use t('exercises.editor.hints.submission_deadline')
ul.append(this.getDeadlineInformation(submission_deadline, 'submission_deadline', otherwise_no_points));
}
diff --git a/app/controllers/internal_users_controller.rb b/app/controllers/internal_users_controller.rb
index d6a03d13..86ac9f45 100644
--- a/app/controllers/internal_users_controller.rb
+++ b/app/controllers/internal_users_controller.rb
@@ -23,7 +23,7 @@ class InternalUsersController < ApplicationController
respond_to do |format|
if @user.update(params[:internal_user].permit(:password, :password_confirmation))
@user.change_password!(params[:internal_user][:password])
- format.html { redirect_to(sign_in_path, notice: t('.success')) }
+ format.html { redirect_to(sign_in_path, notice: t('internal_users.reset_password.success')) }
format.json { head :ok }
else
respond_with_invalid_object(format, object: @user, template: :reset_password)
@@ -42,7 +42,7 @@ class InternalUsersController < ApplicationController
if params[:email].present?
user = InternalUser.arel_table
InternalUser.where(user[:email].matches(params[:email])).first&.deliver_reset_password_instructions!
- redirect_to(:root, notice: t('.success'))
+ redirect_to(:root, notice: t('internal_users.forgot_password.success'))
end
end
private :deliver_reset_password_instructions
@@ -130,7 +130,7 @@ class InternalUsersController < ApplicationController
respond_to do |format|
if @user.update(params[:internal_user].permit(:password, :password_confirmation))
@user.activate!
- format.html { redirect_to(sign_in_path, notice: t('.success')) }
+ format.html { redirect_to(sign_in_path, notice: t('internal_users.activate.success')) }
format.json { head :ok }
else
respond_with_invalid_object(format, object: @user, template: :activate)
diff --git a/app/views/application/help.html.slim b/app/views/application/help.html.slim
index 8274036e..3d23bad9 100644
--- a/app/views/application/help.html.slim
+++ b/app/views/application/help.html.slim
@@ -10,4 +10,5 @@
ul.horizontal.dash.pull-start
- ApplicationController::LEGAL_SETTINGS.each do |name, link|
li
+ / i18n-tasks-use t('shared.help.privacy_policy') t('shared.help.imprint')
= link_to(t("shared.help.#{name.delete_suffix('_url')}"), link, target: '_blank', rel: 'noopener')
diff --git a/app/views/execution_environments/statistics.html.slim b/app/views/execution_environments/statistics.html.slim
index e9887827..0266d88e 100644
--- a/app/views/execution_environments/statistics.html.slim
+++ b/app/views/execution_environments/statistics.html.slim
@@ -4,8 +4,15 @@ h1 = @execution_environment
table.table.table-striped class=(@execution_environment.present? ? 'sortable' : '')
thead
tr
- - ['.exercise', '.users_and_programming_groups', '.score', '.maximum_score', '.stddev_score', '.percentage_correct', '.runs', '.worktime', '.stddev_worktime'].each do |title|
- th.header = t(title)
+ th.header = t('.exercise')
+ th.header = t('.users_and_programming_groups')
+ th.header = t('.score')
+ th.header = t('.maximum_score')
+ th.header = t('.stddev_score')
+ th.header = t('.percentage_correct')
+ th.header = t('.runs')
+ th.header = t('.worktime')
+ th.header = t('.stddev_worktime')
tbody
- @execution_environment.exercises.each do |exercise|
- us = contributor_statistics[exercise.id]
diff --git a/app/views/exercises/statistics.html.slim b/app/views/exercises/statistics.html.slim
index 53e7402b..d1aa73d7 100644
--- a/app/views/exercises/statistics.html.slim
+++ b/app/views/exercises/statistics.html.slim
@@ -8,6 +8,7 @@ h1 = @exercise
= row(label: '.participants', value: @exercise.contributors.size)
- %i[intermediate final].each do |scope|
+ / i18n-tasks-use t('.intermediate_submissions') t('.final_submissions')
= row(label: ".#{scope}_submissions") do
/TODO: Refactor next line
= "#{@exercise.submissions.send(scope).count} (#{t('.users_and_programming_groups', count: Submission.from(@exercise.submissions.send(scope).group(:contributor_id, :contributor_type).select(:contributor_id, :contributor_type)).count)})"
diff --git a/app/views/programming_groups/_form.html.slim b/app/views/programming_groups/_form.html.slim
index 170ea777..e080d3a3 100644
--- a/app/views/programming_groups/_form.html.slim
+++ b/app/views/programming_groups/_form.html.slim
@@ -9,6 +9,7 @@
.input-group.mb-3
= f.text_field(:programming_partner_ids, class: 'form-control', required: true, value: (@programming_group.programming_partner_ids - [current_user.id_with_type]).join(', '))
= render('shared/submit_button', f:, object: @programming_group)
+ / i18n-tasks-use t('.hints.programming_partner_ids')
/.help-block.form-text = t('.hints.programming_partner_ids')
.col-md-6
.join_programming_pair.button.btn.btn-primary.d-none.d-md-block
diff --git a/app/views/programming_groups/show.html.slim b/app/views/programming_groups/show.html.slim
index 0fb8195f..638dc7d5 100644
--- a/app/views/programming_groups/show.html.slim
+++ b/app/views/programming_groups/show.html.slim
@@ -3,9 +3,9 @@ h1
- if policy(@programming_group).edit?
= render('shared/edit_button', object: @programming_group)
-= row(label: 'activerecord.attributes.programming_group.name', value: @programming_group.displayname)
-= row(label: 'activerecord.attributes.programming_group.exercise', value: link_to_if(policy(@programming_group.exercise).show?, @programming_group.exercise.title, @programming_group.exercise))
-= row(label: 'activerecord.attributes.programming_group.member_count', value: @programming_group.users.size)
+= row(label: 'programming_group.name', value: @programming_group.displayname)
+= row(label: 'programming_group.exercise', value: link_to_if(policy(@programming_group.exercise).show?, @programming_group.exercise.title, @programming_group.exercise))
+= row(label: 'programming_group.member_count', value: @programming_group.users.size)
= row(label: 'shared.created_at', value: l(@programming_group.created_at, format: :short))
h2.mt-4 = t('activerecord.attributes.study_group.members')
diff --git a/app/views/sessions/destroy_through_lti.html.slim b/app/views/sessions/destroy_through_lti.html.slim
index c2184c6e..a5cde541 100644
--- a/app/views/sessions/destroy_through_lti.html.slim
+++ b/app/views/sessions/destroy_through_lti.html.slim
@@ -1,7 +1,9 @@
h1 = t('.headline')
p
+ / i18n-tasks-use t('.success_with_outcome') t('.success_without_outcome')
= t(".success_#{@lti_parameter ? 'with' : 'without'}_outcome", consumer: current_user.consumer)
+ / i18n-tasks-use t('.finished_with_consumer') t('.finished_without_consumer')
==< t(".finished_#{@lti_parameter ? 'with' : 'without'}_consumer", consumer: h(current_user.consumer.name), url: @url)
=< t('.do_not_use_backbutton')
diff --git a/config/locales/de.yml b/config/locales/de.yml
index 9b28e681..49804642 100644
--- a/config/locales/de.yml
+++ b/config/locales/de.yml
@@ -345,8 +345,6 @@ de:
docker_image: 'Wählen Sie ein Docker-Image aus der Liste oder fügen Sie ein neues hinzu, welches über DockerHub verfügbar ist.'
exposed_ports_list: Während der Ausführung sind diese Ports für den Nutzer zugänglich. Die Portnummern müssen nummerisch und mit Komma voneinander getrennt sein.
cpu_limit: Geben Sie die Mindestmenge an CPU-Anteilen an, die für jeden Runner reserviert werden soll, gemessen in MHz.
- errors:
- not_synced_to_runner_management: Die Ausführungsumgebung wurde erstellt, aber aufgrund eines Fehlers nicht zum Runnermanagement synchronisiert.
index:
shell: Shell
synchronize:
@@ -359,7 +357,6 @@ de:
failure: Beim Synchronisieren mindestens einer Ausführungsumgebung ist ein Fehler aufgetreten.
shell:
command: Befehl
- headline: Shell
file_tree:
reload: Aktualisieren
reload_tooltip: Aktualisieren Sie die Liste der verfügbaren Dateien im Runners. Diese Aktion wird einige Sekunden in Anspruch nehmen.
@@ -407,7 +404,6 @@ de:
run_success: Ihr Code wurde auf der Plattform ausgeführt.
requestComments: Kommentare erbitten
requestCommentsTooltip: Falls Sie Hilfe mit Ihrem Code benötigen, können Sie hier Kommentare erbitten
- save: Speichern
score: Bewerten
send: Senden
start_over: Diese Aufgabe zurücksetzen
@@ -423,10 +419,6 @@ de:
test: Testen
timeout: 'Ausführung gestoppt. Ihr Code hat die erlaubte Ausführungszeit von %{permitted_execution_time} Sekunden überschritten.'
out_of_memory: 'Ausführung gestoppt. Ihr Code hat den erlaubten Arbeitsspeicher von %{memory_limit} MB überschritten.'
- exercise_deadline_passed: 'Das Ergebnis kann nicht übertragen werden.'
- tooltips:
- save: Ihr Code wird automatisch gespeichert, wann immer Sie eine Datei herunterladen, ausführen oder testen. Explizites Speichern ist also selten notwendig.
- exercise_deadline_passed: 'Entweder ist die Abgabefrist bereits abgelaufen oder Sie haben die Aufgabe nicht direkt über die E-Learning Plattform gestartet. (Möglicherweise haben Sie den Zurück Button Ihres Browsers benutzt nachdem Sie Ihre Aufgabe abgegeben haben?)'
request_for_comments_sent: "Kommentaranfrage gesendet."
hints:
submission_deadline: Diese Abgabe ist am %{deadline} fällig.
Bitte schließen Sie daher die Aufgabe rechtzeitig vorher ab. %{otherwise}
@@ -478,9 +470,6 @@ de:
submission_deadline: Ein Zeitpunkt in UTC, zu dem die Abgabe geschlossen wird. Abgaben nach der Abgabefrist werden als verspätet gekennzeichnet und nur mit 20% Punktabzug an die E-Learning-Plattform übertragen.
late_submission_deadline: Eine Gnadenfrist für Abgaben in UTC. Die verlängerte Abgabefrist soll nicht vor der eigentlichen Abgabefrist liegen. Abgaben nach der Abgabefrist werden deutlich gekennzeichnet und mit 100% Punktabzug an die E-Learning-Plattform übertragen.
implement:
- alert:
- text: 'Ihr Browser unterstützt nicht alle Funktionalitäten, die %{application_name} benötigt. Bitte nutzen Sie einen modernen Browser, um %{application_name} zu besuchen.'
- title: Ihr Browser wird nicht unterstützt!
default_test_feedback: Sehr gut. Alle Tests waren erfolgreich.
default_linter_feedback: Sehr gut. Der Linter hat nichts mehr zu beanstanden.
error_messages: Fehlermeldungen
@@ -491,7 +480,6 @@ de:
test_file: 'Test-Datei %{number} (%{filename})'
linter_file: 'Linter-Feedback %{number}(%{filename})'
not_graded: ohne Punkte
- hint: Hinweis
no_files: Die Aufgabe umfasst noch keine sichtbaren Dateien.
no_execution_environment: Für die Aufgabe wurde noch keine Ausführungsumgebung gewählt.
no_output: Die letzte Code-Ausführung terminierte am %{timestamp} ohne Ausgabe.
@@ -503,23 +491,14 @@ de:
output: Programm-Ausgabe
passed_tests: Erfolgreiche Tests
code_rating: Code-Stil
- progress: Fortschritt
results: Ergebnisse
- start: Mit dem Programmieren beginnen
test_count: '%{count} Test-Dateien wurden ausgeführt.'
unpublished: Die gewählte Aufgabe wurde deaktiviert und kann daher derzeit nicht bearbeitet werden.
- workspace: Arbeitsbereich
comment:
- a_comment: Kommentar
- line: Zeile
dialogtitle: Kommentar hinzufügen
others: Andere Kommentare auf dieser Zeile
- addCommentExercise: Aufgabe kommentieren
addyours: Fügen Sie Ihren Kommentar hinzu
- addComment: Hier haben Sie die Möglichkeit, Feedback zu dieser Aufgabe zu geben. Dies bezieht sich ausdrücklich NICHT auf die hier sichtbare Lösung des Teilnehmers, sondern nur auf die Aufgabe. Fanden Sie die Aufgabe zu leicht oder schwer? War die Beschreibung der Aufgabe verständlich und vollständig?
addCommentButton: Kommentar abschicken
- removeAllOnLine: Meine Kommentare auf dieser Zeile löschen
- listing: Die neuesten Kommentaranfragen
request: "Kommentaranfrage stellen"
question: "Bitte beschreiben Sie kurz Ihre Probleme oder nennen Sie den Programmteil, zu dem Sie Feedback wünschen. Ihr Programmcode und eventuelle Fehlermeldungen werden automatisch zur Anfrage hinzugefügt."
intervention:
@@ -630,8 +609,6 @@ de:
tag_statistics: "Lernbereichstatistiken"
empty_tag_statistics: "Keine Statistiken verfügbar"
exercise_statistics: "Aufgabenstatistiken"
- form:
- study_groups: Lerngruppen
files:
roles:
main_file: Hauptdatei
@@ -644,11 +621,6 @@ de:
teacher_defined_linter: Linter als Bewertungsgrundlage
error:
filename: "Die Datei konnte nicht gespeichert werden, da eine Datei mit dem Namen '%{name}' bereits existiert."
- hints:
- form:
- hints:
- message: Diese Nachricht wird als Erklärung des aufgetretenen Fehlers angezeigt. Platzhalter werden automatisch durch Funde des regulären Ausdrucks ersetzt.
- regular_expression: Dieser reguläre Ausdruck wird auf die Fehlermeldung angewendet, um relevante Bezeicher zu extrahieren.
internal_users:
index:
activate: Aktivieren
@@ -863,7 +835,6 @@ de:
show_soft_solved: "Nur potenziell gelöste Anfragen anzeigen"
show_unsolved: "Nur ungelöste Anfragen anzeigen"
solved: "Diese Frage wurde erfolgreich beantwortet"
- comment_exercise: "Ich möchte die Aufgabenstellung kommentieren"
write_a_thank_you_node: "Wenn Sie möchten, können Sie sich bei allen Mitstudenten, die Ihnen bei der Beantwortung Ihrer Frage geholfen haben, bedanken:"
send_thank_you_note: "Senden"
cancel_thank_you_note: "Nichts senden"
@@ -932,7 +903,6 @@ de:
errors_other: 'Beim Speichern sind %{count} Fehler aufgetreten'
help:
execution_environment_specific_help: 'Hilfe zu %{execution_environment}'
- general_help: Allgemeine Hilfe
headline: Hilfe
link: Hilfe
imprint: Impressum
@@ -977,8 +947,6 @@ de:
save: Speichern
submit: Abgabe
test: Test
- create:
- success: Ihr Code wurde gespeichert.
statistics:
history: Punkteverlauf
percentage: Prozentzahl
@@ -987,7 +955,6 @@ de:
set_as_current:
success: Die Lerngruppe wurde erfolgreich gewechselt.
users:
- platform_admin: Plattform Administrator
show:
current_study_group: Aktuelle Lerngruppe
set_as_current_study_group: Als aktuelle Lerngruppe setzen
@@ -1045,7 +1012,6 @@ de:
with_comments: "Anfragen mit Kommentaren"
users:
currently_active: "Aktiv (5 Minuten)"
- currently_active60: "Aktiv (60 Minuten)"
active: "Aktive Nutzer"
graphs:
user_activity: "Nutzeraktivität"
diff --git a/config/locales/en.yml b/config/locales/en.yml
index 288b83f9..cb8e72f5 100644
--- a/config/locales/en.yml
+++ b/config/locales/en.yml
@@ -345,8 +345,6 @@ en:
docker_image: Pick a Docker image listed above or add a new one which is available via DockerHub.
exposed_ports_list: During code execution these ports are accessible for the user. Port numbers must be numeric and separated by a comma.
cpu_limit: Specify the minimum amount of CPU shares to reserve for each runner, measured in MHz.
- errors:
- not_synced_to_runner_management: The execution environment was created but not synced to the runner management due to an error.
index:
shell: Shell
synchronize:
@@ -359,7 +357,6 @@ en:
failure: At least one execution environment could not be synchronised due to an error.
shell:
command: Command
- headline: Shell
file_tree:
reload: Reload
reload_tooltip: Reload the file system of the runner. This action might take a few seconds.
@@ -407,7 +404,6 @@ en:
run_success: Your code was run on our servers.
requestComments: Request Comments
requestCommentsTooltip: If you need help with your code, you can now request comments here!
- save: Save
score: Score
send: Send
start_over: Reset this exercise
@@ -423,10 +419,6 @@ en:
test: Test
timeout: 'Execution stopped. Your code exceeded the permitted execution time of %{permitted_execution_time} seconds.'
out_of_memory: 'Execution stopped. Your code exceeded the permitted RAM usage of %{memory_limit} MB.'
- exercise_deadline_passed: 'The score cannot be submitted.'
- tooltips:
- save: Your code is automatically saved whenever you download, run, or test it. Therefore, explicitly saving is rarely necessary.
- exercise_deadline_passed: 'Either the deadline has already passed or you did not directly access this page from the e-learning platform. (Did you use the Back button of your browser after submitting the score?)'
request_for_comments_sent: "Request for comments sent."
hints:
submission_deadline: This exercise is due %{deadline}.
Please finish the exercise before this deadline passes. %{otherwise}
@@ -478,9 +470,6 @@ en:
submission_deadline: A date and time in UTC to close the submission. Any submission obtained after the deadline will be considered late and the score sent to the e-learning platform will be reduced by 20%.
late_submission_deadline: A grace period for submissions in UTC. The late submission deadline should not be set or any timestamp before the original submission deadline. Any submission obtained after the deadline will be clearly marked and the score sent to the e-learning platform will be reduced by 100%.
implement:
- alert:
- text: 'Your browser does not support features required for using %{application_name}. Please access %{application_name} using a modern browser.'
- title: Your browser is not supported!
default_test_feedback: Well done. All tests have been passed.
default_linter_feedback: Well done. The linter is completly satisfied.
error_messages: Error Messages
@@ -491,7 +480,6 @@ en:
test_file: 'Test File %{number} (%{filename})'
linter_file: 'Linter Feedback %{number}(%{filename})'
not_graded: not graded
- hint: Hint
no_files: The exercise does not comprise visible files yet.
no_execution_environment: No execution environment has been selected for the exercise yet.
no_output: The last code run finished on %{timestamp} without any output.
@@ -503,23 +491,14 @@ en:
output: Program Output
passed_tests: Passed Tests
code_rating: Code Rating
- progress: Progress
results: Results
- start: Start Coding
test_count: '%{count} test files have been executed.'
unpublished: The selected exercise has been deactivated. Hence, you cannot implement this exercise at the moment.
- workspace: Workspace
comment:
- a_comment: comment
- line: line
dialogtitle: Comment on this line
others: Other comments on this line
addyours: Add your comment
- addCommentExercise: Comment this exercise
- addComment: You can give feedback to this exercise. Keep in mind that this should refer to the exercise and not to the solution of the participant. Did you find this exercise particulary easy or difficult? Was the description sufficient?
addCommentButton: Comment this
- removeAllOnLine: Remove my comments on this line
- listing: Listing the newest comment requests
request: "Request Comments"
question: 'Please shortly describe your problem or the program part you would like to get feedback for. Your program code and potential error messages are automatically appended to your request.'
intervention:
@@ -630,8 +609,6 @@ en:
tag_statistics: "Tag Statistics"
empty_tag_statistics: "No statistics available"
exercise_statistics: "Exercise Statistics"
- form:
- study_groups: Study Groups
files:
roles:
main_file: Main File
@@ -644,11 +621,6 @@ en:
teacher_defined_linter: Linter for Assessment
error:
filename: "The file could not be saved, because another file with the name '%{name}' already exists."
- hints:
- form:
- hints:
- message: This message is used as an error explanation. Placeholders are automatically replaced by regular expression matches.
- regular_expression: This regular expression is used to extract relevant identifiers from the error message.
internal_users:
index:
activate: Activate
@@ -863,7 +835,6 @@ en:
show_soft_solved: "Show only requests presumably solved"
show_unsolved: "Show only unsolved requests"
solved: "This question has been answered"
- comment_exercise: "I would like to give feedback for this exercise"
write_a_thank_you_node: "If you want, you can write a thank you note to all your commenters:"
send_thank_you_note: "Send"
cancel_thank_you_note: "Don't send"
@@ -932,7 +903,6 @@ en:
errors_other: '%{count} errors prohibited this %{model} from being saved'
help:
execution_environment_specific_help: 'Help for %{execution_environment}'
- general_help: General Help
headline: Help
link: Help
imprint: Imprint
@@ -977,8 +947,6 @@ en:
save: Save
submit: Submission
test: Test
- create:
- success: Your code has been saved.
statistics:
history: Score History
percentage: Percentage
@@ -987,7 +955,6 @@ en:
set_as_current:
success: The study group has been switched successfully.
users:
- platform_admin: Platform Admin
show:
current_study_group: Current Study Group
set_as_current_study_group: Set as Current Study Group
@@ -1045,7 +1012,6 @@ en:
with_comments: "RfCs with Comments"
users:
currently_active: "Active (5 minutes)"
- currently_active60: "Active (60 minutes)"
active: "Active Users"
graphs:
user_activity: "User Activity"