Skip to content
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

Development: Fix diverging translations #9471

Merged
merged 7 commits into from
Oct 18, 2024

Conversation

iyannsch
Copy link
Contributor

@iyannsch iyannsch commented Oct 13, 2024

Closes #9470, #9369

Checklist

General

Client

  • Important: I implemented the changes with a very good performance, prevented too many (unnecessary) REST calls and made sure the UI is responsive, even with large data (e.g. using paging).
  • I strictly followed the principle of data economy for all client-server REST calls.
  • I strictly followed the client coding and design guidelines.
  • Following the theming guidelines, I specified colors only in the theming variable files and checked that the changes look consistent in both the light and the dark theme.
  • I added multiple integration tests (Jest) related to the features (with a high test coverage), while following the test guidelines.
  • I added authorities to all new routes and checked the course groups for displaying navigation elements (links, buttons).
  • I documented the TypeScript code using JSDoc style.
  • I added multiple screenshots/screencasts of my UI changes.
  • I translated all newly inserted strings into English and German.

Changes affecting Programming Exercises

  • High priority: I tested all changes and their related features with all corresponding user types on a test server configured with the integrated lifecycle setup (LocalVC and LocalCI).
  • I tested all changes and their related features with all corresponding user types on a test server configured with Gitlab and Jenkins.

Motivation and Context

In the GH action Check if translation keys are consistent, a surprisingly huge amount of keys differ in existence between the en and de files. Even though this apparently never reached the eye of a user, we should still get ahold of this situation and get 2 GH actions back in to green checkmarks ✅

Description

I synchronized the English and German translation files wherever an error was found. For especially suspicious cases, I searched for usage in our codebase and checked which key was actually used.

Steps for Testing

Go around Artemis and check for missing translation warnings 😅

Exam Mode Testing

Go around Artemis and check for missing translation warnings 😅

Testserver States

Note

These badges show the state of the test servers.
Green = Currently available, Red = Currently locked
Click on the badges to get to the test servers.







Review Progress

Performance Review

  • I (as a reviewer) confirm that the client changes (in particular related to REST calls and UI responsiveness) are implemented with a very good performance even for very large courses with more than 2000 students.
  • I (as a reviewer) confirm that the server changes (in particular related to database calls) are implemented with a very good performance even for very large courses with more than 2000 students.

Code Review

  • Code Review 1
  • Code Review 2

Manual Tests

  • Test 1
  • Test 2

Exam Mode Test

  • Test 1
  • Test 2

Performance Tests

  • Test 1
  • Test 2

Test Coverage

Screenshots

Summary by CodeRabbit

  • New Features

    • Added contextual help icons for IDE options in the programming exercise difficulty settings.
    • Enhanced localization across multiple sections, improving user experience with clearer terminology and additional information.
  • Bug Fixes

    • Updated various localization keys for consistency and clarity across the application.
  • Documentation

    • Improved user feedback messages in the interface, enhancing overall usability.

@iyannsch iyannsch self-assigned this Oct 13, 2024
@github-actions github-actions bot added tests client Pull requests that update TypeScript code. (Added Automatically!) labels Oct 13, 2024
src/main/webapp/i18n/de/programmingExercise.json Outdated Show resolved Hide resolved
src/main/webapp/i18n/de/programmingExercise.json Outdated Show resolved Hide resolved
src/main/webapp/i18n/de/global.json Outdated Show resolved Hide resolved
src/main/webapp/i18n/en/lectureUnit.json Show resolved Hide resolved
src/main/webapp/i18n/en/programmingExercise.json Outdated Show resolved Hide resolved
@krusche krusche changed the title Chore: Fix diverging translations Development: Fix diverging translations Oct 13, 2024
Copy link
Contributor

@cremertim cremertim left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Some small remarks

src/main/webapp/i18n/de/programmingExercise.json Outdated Show resolved Hide resolved
src/main/webapp/i18n/de/student-dashboard.json Outdated Show resolved Hide resolved
src/main/webapp/i18n/en/complaint.json Outdated Show resolved Hide resolved
coderabbitai[bot]
coderabbitai bot previously approved these changes Oct 14, 2024
Co-authored-by: Benedikt Fein <fein@fim.uni-passau.de>
Co-authored-by: Tim Cremer <65229601+cremertim@users.noreply.github.com>
coderabbitai[bot]
coderabbitai bot previously approved these changes Oct 14, 2024
@iyannsch iyannsch marked this pull request as ready for review October 14, 2024 10:22
@iyannsch iyannsch requested a review from a team as a code owner October 14, 2024 10:22
@iyannsch iyannsch added chore config-change Pull requests that change the config in a way that they require a deployment via Ansible. ready for review and removed ready for review labels Oct 14, 2024
Copy link

coderabbitai bot commented Oct 14, 2024

Walkthrough

The changes in this pull request involve modifications to various localization files to add, rename, and update keys for both English and German languages. Additionally, the HTML template for the programming-exercise-difficulty.component has been updated to include contextual help icons. Test setup for the ProgrammingExerciseDifficultyComponent was also adjusted to include necessary module dependencies.

Changes

Files Change Summary
src/main/webapp/app/exercises/programming/manage/update/update-components/programming-exercise-difficulty.component.html Added <jhi-help-icon> components for contextual help on checkboxes based on IDE selection.
src/main/webapp/i18n/de/competency.json, src/main/webapp/i18n/en/competency.json Added new strings related to student performance and competency management.
src/main/webapp/i18n/de/dragAndDropSubmittedAnswer.json, src/main/webapp/i18n/en/dragAndDropSubmittedAnswer.json Added new key-value pairs for drag-and-drop submitted answers.
src/main/webapp/i18n/de/editor.json, src/main/webapp/i18n/en/editor.json Added new keys for editor interface feedback.
src/main/webapp/i18n/de/exam.json, src/main/webapp/i18n/en/exam.json Added new keys for exam score context.
src/main/webapp/i18n/de/exercise-actions.json, src/main/webapp/i18n/en/exercise-actions.json Added new key for exercise actions.
src/main/webapp/i18n/de/exerciseAssessmentDashboard.json, src/main/webapp/i18n/en/exerciseAssessmentDashboard.json Added new keys for exercise assessment dashboard clarity.
src/main/webapp/i18n/de/global.json, src/main/webapp/i18n/en/global.json Added new entries for global settings.
src/main/webapp/i18n/de/iris.json, src/main/webapp/i18n/en/iris.json Renamed "programmingExercise" title key to "exercise".
src/main/webapp/i18n/de/lectureUnit.json, src/main/webapp/i18n/en/lectureUnit.json Added new key in the lecture unit localization files.
src/main/webapp/i18n/de/metrics.json, src/main/webapp/i18n/en/metrics.json Added new entries for cache statistics.
src/main/webapp/i18n/de/notification.json, src/main/webapp/i18n/en/notification.json Added new keys for notifications.
src/main/webapp/i18n/de/organizationManagement.json, src/main/webapp/i18n/en/organizationManagement.json Renamed key for organization management.
src/main/webapp/i18n/de/programmingExercise.json, src/main/webapp/i18n/en/programmingExercise.json Added new labels and descriptions for programming exercises.
src/main/webapp/i18n/de/quizExercise.json, src/main/webapp/i18n/en/quizExercise.json Removed quizLiveModal section in English.
src/main/webapp/i18n/de/student-dashboard.json, src/main/webapp/i18n/en/student-dashboard.json Added new keys for student dashboard feedback.
src/main/webapp/i18n/de/userSettings.json, src/main/webapp/i18n/en/userSettings.json Updated key for user settings for clarity.
src/test/javascript/spec/component/programming-exercise/update-components/programming-exercise-difficulty.component.spec.ts Modified test setup to include ArtemisSharedComponentModule.

Assessment against linked issues

Objective Addressed Explanation
Missing translation keys (issue #9470)
Add missing keys for student performance (issue #9470)
Add missing keys for exercise actions (issue #9470)
Update keys for user settings clarity (issue #9470)
Rename keys for standardization (issue #9470)

Suggested labels

bugfix, ready for review, small

Suggested reviewers

  • JohannesWt
  • krusche
  • MaximilianAnzinger
  • edkaya
  • pzdr7

Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media?

❤️ Share
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Generate unit testing code for this file.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai generate unit testing code for this file.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and generate unit testing code.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai or @coderabbitai title anywhere in the PR title to generate the title automatically.

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

@github-actions github-actions bot removed the config-change Pull requests that change the config in a way that they require a deployment via Ansible. label Oct 14, 2024
Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 18

🧹 Outside diff range comments (3)
src/main/webapp/i18n/de/organizationManagement.json (1)

Line range hint 1-38: Overall good quality translations with a minor suggestion for improvement.

The translations in this file are consistently using informal address (dutzen) as required, and the gender-inclusive term "Nutzer:innen" is used appropriately throughout. The file covers a wide range of organization management functionalities, and there are no obvious inconsistencies or errors in the translations.

Consider restructuring some of the longer keys for better maintainability. For example, the key:

"userSearch.removeFromOrganization.modalQuestion"

Could potentially be shortened to something like:

"userSearch.removeModal.question"

This is a minor suggestion and is not critical for the functionality of the translations.

src/test/javascript/spec/component/programming-exercise/update-components/programming-exercise-difficulty.component.spec.ts (1)

Line range hint 1-78: Consider the following improvements for better adherence to coding guidelines:

  1. Mock irrelevant dependencies:
    Instead of spying on ProfileService and mocking its return value in each test, consider creating a mock service and providing it in the TestBed configuration. This would improve test isolation and performance.

  2. Expectation specificity:
    In the initialization test, instead of using not.toBeNull(), consider using a more specific expectation that checks for the component's properties or methods.

Here's an example of how you could improve the ProfileService mocking:

import { MockProvider } from 'ng-mocks';

// At the top of the describe block
let mockProfileService: jest.Mocked<ProfileService>;

// In the TestBed configuration
providers: [
  MockProvider(ProfileService, {
    getProfileInfo: () => of({ inProduction: false, sshCloneURLTemplate: 'ssh://git@testserver.com:1234/' } as ProfileInfo)
  })
],

// Before each test
mockProfileService = TestBed.inject(ProfileService) as jest.Mocked<ProfileService>;

// In the theiaEnabled test
mockProfileService.getProfileInfo.mockReturnValueOnce(of({ activeProfiles: [PROFILE_THEIA] } as ProfileInfo));

And for improving expectation specificity:

it('should initialize', () => {
  fixture.detectChanges();
  expect(comp.programmingExercise).toBeInstanceOf(ProgrammingExercise);
  expect(comp.programmingExerciseCreationConfig).toEqual(programmingExerciseCreationConfigMock);
});

These changes would make the tests more robust and easier to maintain.

src/main/webapp/i18n/de/programmingExercise.json (1)

Line range hint 1-646: Consider splitting the file for improved maintainability

While the current structure is correct, the file's size might make it challenging to maintain as the project grows.

Consider splitting this large translation file into smaller, more focused files based on feature areas (e.g., programmingExercise-timeline.json, programmingExercise-export.json). This could improve maintainability and make it easier for translators to work on specific sections.

📜 Review details

Configuration used: .coderabbit.yaml
Review profile: ASSERTIVE

📥 Commits

Files that changed from the base of the PR and between e072169 and fce38c1.

📒 Files selected for processing (33)
  • src/main/webapp/app/exercises/programming/manage/update/update-components/programming-exercise-difficulty.component.html (3 hunks)
  • src/main/webapp/i18n/de/competency.json (2 hunks)
  • src/main/webapp/i18n/de/dragAndDropSubmittedAnswer.json (1 hunks)
  • src/main/webapp/i18n/de/editor.json (1 hunks)
  • src/main/webapp/i18n/de/exam.json (2 hunks)
  • src/main/webapp/i18n/de/exercise-actions.json (1 hunks)
  • src/main/webapp/i18n/de/exerciseAssessmentDashboard.json (1 hunks)
  • src/main/webapp/i18n/de/global.json (2 hunks)
  • src/main/webapp/i18n/de/iris.json (1 hunks)
  • src/main/webapp/i18n/de/lectureUnit.json (2 hunks)
  • src/main/webapp/i18n/de/metrics.json (1 hunks)
  • src/main/webapp/i18n/de/notification.json (1 hunks)
  • src/main/webapp/i18n/de/organizationManagement.json (1 hunks)
  • src/main/webapp/i18n/de/programmingExercise.json (4 hunks)
  • src/main/webapp/i18n/de/quizExercise.json (0 hunks)
  • src/main/webapp/i18n/de/student-dashboard.json (3 hunks)
  • src/main/webapp/i18n/de/userSettings.json (1 hunks)
  • src/main/webapp/i18n/en/competency.json (1 hunks)
  • src/main/webapp/i18n/en/complaint.json (1 hunks)
  • src/main/webapp/i18n/en/conversation.json (1 hunks)
  • src/main/webapp/i18n/en/dragAndDropSubmittedAnswer.json (1 hunks)
  • src/main/webapp/i18n/en/editor.json (1 hunks)
  • src/main/webapp/i18n/en/exam.json (2 hunks)
  • src/main/webapp/i18n/en/exampleSubmission.json (1 hunks)
  • src/main/webapp/i18n/en/exerciseAssessmentDashboard.json (1 hunks)
  • src/main/webapp/i18n/en/lectureUnit.json (1 hunks)
  • src/main/webapp/i18n/en/modelingAssessment.json (1 hunks)
  • src/main/webapp/i18n/en/multipleChoiceQuestion.json (1 hunks)
  • src/main/webapp/i18n/en/notification.json (1 hunks)
  • src/main/webapp/i18n/en/programmingExercise.json (2 hunks)
  • src/main/webapp/i18n/en/quizExercise.json (0 hunks)
  • src/main/webapp/i18n/en/student-dashboard.json (1 hunks)
  • src/test/javascript/spec/component/programming-exercise/update-components/programming-exercise-difficulty.component.spec.ts (2 hunks)
💤 Files with no reviewable changes (2)
  • src/main/webapp/i18n/de/quizExercise.json
  • src/main/webapp/i18n/en/quizExercise.json
🧰 Additional context used
📓 Path-based instructions (17)
src/main/webapp/app/exercises/programming/manage/update/update-components/programming-exercise-difficulty.component.html (1)

Pattern src/main/webapp/**/*.html: @if and @for are new and valid Angular syntax replacing *ngIf and *ngFor. They should always be used over the old style.

src/main/webapp/i18n/de/competency.json (1)

Pattern src/main/webapp/i18n/de/**/*.json: German language translations should be informal (dutzen) and should never be formal (sietzen). So the user should always be addressed with "du/dein" and never with "sie/ihr".

src/main/webapp/i18n/de/dragAndDropSubmittedAnswer.json (1)

Pattern src/main/webapp/i18n/de/**/*.json: German language translations should be informal (dutzen) and should never be formal (sietzen). So the user should always be addressed with "du/dein" and never with "sie/ihr".

src/main/webapp/i18n/de/editor.json (1)

Pattern src/main/webapp/i18n/de/**/*.json: German language translations should be informal (dutzen) and should never be formal (sietzen). So the user should always be addressed with "du/dein" and never with "sie/ihr".

src/main/webapp/i18n/de/exam.json (1)

Pattern src/main/webapp/i18n/de/**/*.json: German language translations should be informal (dutzen) and should never be formal (sietzen). So the user should always be addressed with "du/dein" and never with "sie/ihr".

src/main/webapp/i18n/de/exercise-actions.json (1)

Pattern src/main/webapp/i18n/de/**/*.json: German language translations should be informal (dutzen) and should never be formal (sietzen). So the user should always be addressed with "du/dein" and never with "sie/ihr".

src/main/webapp/i18n/de/exerciseAssessmentDashboard.json (1)

Pattern src/main/webapp/i18n/de/**/*.json: German language translations should be informal (dutzen) and should never be formal (sietzen). So the user should always be addressed with "du/dein" and never with "sie/ihr".

src/main/webapp/i18n/de/global.json (1)

Pattern src/main/webapp/i18n/de/**/*.json: German language translations should be informal (dutzen) and should never be formal (sietzen). So the user should always be addressed with "du/dein" and never with "sie/ihr".

src/main/webapp/i18n/de/iris.json (1)

Pattern src/main/webapp/i18n/de/**/*.json: German language translations should be informal (dutzen) and should never be formal (sietzen). So the user should always be addressed with "du/dein" and never with "sie/ihr".

src/main/webapp/i18n/de/lectureUnit.json (1)

Pattern src/main/webapp/i18n/de/**/*.json: German language translations should be informal (dutzen) and should never be formal (sietzen). So the user should always be addressed with "du/dein" and never with "sie/ihr".

src/main/webapp/i18n/de/metrics.json (1)

Pattern src/main/webapp/i18n/de/**/*.json: German language translations should be informal (dutzen) and should never be formal (sietzen). So the user should always be addressed with "du/dein" and never with "sie/ihr".

src/main/webapp/i18n/de/notification.json (1)

Pattern src/main/webapp/i18n/de/**/*.json: German language translations should be informal (dutzen) and should never be formal (sietzen). So the user should always be addressed with "du/dein" and never with "sie/ihr".

src/main/webapp/i18n/de/organizationManagement.json (1)

Pattern src/main/webapp/i18n/de/**/*.json: German language translations should be informal (dutzen) and should never be formal (sietzen). So the user should always be addressed with "du/dein" and never with "sie/ihr".

src/main/webapp/i18n/de/programmingExercise.json (1)

Pattern src/main/webapp/i18n/de/**/*.json: German language translations should be informal (dutzen) and should never be formal (sietzen). So the user should always be addressed with "du/dein" and never with "sie/ihr".

src/main/webapp/i18n/de/student-dashboard.json (1)

Pattern src/main/webapp/i18n/de/**/*.json: German language translations should be informal (dutzen) and should never be formal (sietzen). So the user should always be addressed with "du/dein" and never with "sie/ihr".

src/main/webapp/i18n/de/userSettings.json (1)

Pattern src/main/webapp/i18n/de/**/*.json: German language translations should be informal (dutzen) and should never be formal (sietzen). So the user should always be addressed with "du/dein" and never with "sie/ihr".

src/test/javascript/spec/component/programming-exercise/update-components/programming-exercise-difficulty.component.spec.ts (1)

Pattern src/test/javascript/spec/**/*.ts: jest: true; mock: NgMocks; bad_practices: avoid_full_module_import; perf_improvements: mock_irrelevant_deps; service_testing: mock_http_for_logic; no_schema: avoid_NO_ERRORS_SCHEMA; expectation_specificity: true; solutions: {boolean: toBeTrue/False, reference: toBe, existence: toBeNull/NotNull, undefined: toBeUndefined, class_obj: toContainEntries/toEqual, spy_calls: {not_called: not.toHaveBeenCalled, once: toHaveBeenCalledOnce, with_value: toHaveBeenCalledWith|toHaveBeenCalledExactlyOnceWith}}

📓 Learnings (1)
src/main/webapp/i18n/de/student-dashboard.json (5)
Learnt from: florian-glombik
PR: ls1intum/Artemis#8858
File: src/main/webapp/i18n/de/student-dashboard.json:0-0
Timestamp: 2024-07-10T08:40:46.208Z
Learning: Avoid suggesting the phrase "Keine Aufgaben passen zu den gewählten Filtern" for the translation key `noExercisesFoundWithAppliedFilter` in the PR ls1intum/Artemis#8858.
Learnt from: florian-glombik
PR: ls1intum/Artemis#8858
File: src/main/webapp/i18n/de/student-dashboard.json:0-0
Timestamp: 2024-10-08T15:35:52.595Z
Learning: Avoid suggesting the phrase "Keine Aufgaben passen zu den gewählten Filtern" for the translation key `noExercisesFoundWithAppliedFilter` in the PR ls1intum/Artemis#8858.
Learnt from: florian-glombik
PR: ls1intum/Artemis#8858
File: src/main/webapp/i18n/de/student-dashboard.json:36-37
Timestamp: 2024-07-10T08:46:27.098Z
Learning: Avoid suggesting the translation change for "noExercisesFoundWithAppliedFilter" in the PR ls1intum/Artemis#8858. The preferred translation is "Keine Aufgaben passen zu den gewählten Filtern."
Learnt from: florian-glombik
PR: ls1intum/Artemis#8858
File: src/main/webapp/i18n/de/student-dashboard.json:36-37
Timestamp: 2024-10-08T15:35:48.768Z
Learning: Avoid suggesting the translation change for "noExercisesFoundWithAppliedFilter" in the PR ls1intum/Artemis#8858. The preferred translation is "Keine Aufgaben passen zu den gewählten Filtern."
Learnt from: florian-glombik
PR: ls1intum/Artemis#8858
File: src/main/webapp/i18n/de/student-dashboard.json:36-37
Timestamp: 2024-10-08T15:35:52.595Z
Learning: Avoid suggesting the translation change for "noExercisesFoundWithAppliedFilter" in the PR ls1intum/Artemis#8858. The preferred translation is "Keine Aufgaben passen zu den gewählten Filtern."
🔇 Additional comments (56)
src/main/webapp/i18n/en/dragAndDropSubmittedAnswer.json (1)

17-17: LGTM! Verify German translation.

The addition of the "mappings" key is consistent with the PR objectives and fits logically within the context of drag and drop submitted answers. The capitalization is also consistent with other entries in the file.

To ensure complete synchronization between English and German translations, please run the following script:

✅ Verification successful

Verified: The "mappings" key has been successfully added to both the English and German translation files, ensuring synchronization between them.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Verify if the corresponding German translation file has been updated with the "mappings" key.

# Test: Check if the "mappings" key exists in the German translation file
if rg --type json '"mappings":' src/main/webapp/i18n/de/dragAndDropSubmittedAnswer.json; then
    echo "The 'mappings' key exists in the German translation file."
else
    echo "Warning: The 'mappings' key is missing in the German translation file."
fi

Length of output: 256

src/main/webapp/i18n/de/dragAndDropSubmittedAnswer.json (1)

17-18: LGTM! The new translation adheres to guidelines and maintains consistency.

The addition of "assignments": "Anweisungen" is correct and follows the informal language guideline (du-form) as required. The translation is accurate and consistent with the context of drag-and-drop submitted answers. The JSON structure remains valid after this addition.

src/main/webapp/i18n/en/modelingAssessment.json (1)

5-5: LGTM! Addition of "conflicts" key is appropriate.

The new key-value pair "conflicts": "Conflicts" is a suitable addition to the English localization file. It follows the existing naming convention and is logically placed within the structure.

To ensure this change addresses the issue mentioned in #9470, please run the following script:

This script will help verify that the "conflicts" key is present in both language files and check for any remaining "missing translation" warnings in the codebase.

✅ Verification successful

Confirmed: "conflicts" key is present in both localization files with no missing translations detected.

To ensure complete accuracy, please manually verify that the addition of the "conflicts": "Conflicts" key addresses the issue mentioned in #9470.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Verify if the added "conflicts" key resolves a missing key from issue #9470

# Test: Check if the "conflicts" key exists in both English and German files
echo "Checking English file:"
jq '.artemisApp.modelingAssessment.conflicts' src/main/webapp/i18n/en/modelingAssessment.json

echo "Checking German file:"
jq '.artemisApp.modelingAssessment.conflicts' src/main/webapp/i18n/de/modelingAssessment.json

# Test: Search for any remaining "missing translation" warnings in the codebase
echo "Searching for 'missing translation' warnings:"
rg "missing translation" --type ts --type html

Length of output: 475

src/main/webapp/i18n/de/organizationManagement.json (1)

10-10: Key renamed for consistency, value remains appropriate.

The change from "Nutzer:innens" to "users" as the key name is a good standardization step, likely aligning with the English version and improving overall consistency in the codebase. The value "Nutzer:innen" is correctly maintained, which is gender-inclusive and complies with the informal address (dutzen) requirement for German translations.

To ensure this change doesn't break existing functionality, please run the following script to check for any remaining uses of the old key:

This script will help identify any places where the old key might still be in use, allowing for necessary updates to prevent potential runtime errors.

src/main/webapp/i18n/en/multipleChoiceQuestion.json (1)

40-40: LGTM: New localization entry added correctly.

The new entry "heading": "Heading" has been added correctly to the editor section of the localization file. This addition:

  1. Follows the existing naming convention and structure.
  2. Is properly placed within the editor object.
  3. Maintains the correct JSON structure.
  4. Aligns with the PR objective of fixing diverging translations, as it adds a new localization key that was likely missing.

To ensure consistency across language files, let's verify if this key exists in the German translation file:

✅ Verification successful

Verified: The "heading" key exists in the German localization file.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Check if the "heading" key exists in the German translation file

# Test: Search for the "heading" key in the German translation file
rg --type json '"heading":' src/main/webapp/i18n/de/multipleChoiceQuestion.json

Length of output: 123

src/test/javascript/spec/component/programming-exercise/update-components/programming-exercise-difficulty.component.spec.ts (3)

17-17: LGTM: Import statement for ArtemisSharedComponentModule.

The import statement for ArtemisSharedComponentModule is correctly added and follows the existing import pattern in the file.


Line range hint 1-78: Summary of the review:

The changes made to this test file are minimal and generally appropriate. The addition of ArtemisSharedComponentModule to the test setup is likely necessary due to new dependencies in the component under test. However, it's important to verify this necessity to avoid introducing unnecessary complexity to the tests.

While the changes themselves don't introduce any significant issues, there are opportunities to improve the overall test structure and adherence to best practices, particularly in the areas of dependency mocking and expectation specificity.

Overall, the changes can be approved, but consider implementing the suggested improvements to enhance the robustness and maintainability of the tests.


28-28: Verify the necessity of ArtemisSharedComponentModule in the test setup.

The addition of ArtemisSharedComponentModule to the imports array expands the module dependencies for the component's tests. This change might be necessary if the component under test now depends on shared components.

To ensure this change is necessary and doesn't introduce unnecessary dependencies, please run the following script:

✅ Verification successful

ArtemisSharedComponentModule is necessary in the test setup.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Verify the usage of ArtemisSharedComponentModule in the component and its template.

# Test 1: Check if ArtemisSharedComponentModule is imported in the component file
echo "Checking component file for ArtemisSharedComponentModule import:"
rg --type typescript "import.*ArtemisSharedComponentModule" "src/main/webapp/app/exercises/programming/manage/update/update-components/programming-exercise-difficulty.component.ts"

# Test 2: Check if any shared components are used in the component's template
echo "Checking component template for usage of shared components:"
rg --type html "<(app-|artemis-)" "src/main/webapp/app/exercises/programming/manage/update/update-components/programming-exercise-difficulty.component.html"

# Note: If both tests return no results, consider removing ArtemisSharedComponentModule from the test setup.

Length of output: 640


Script:

#!/bin/bash
# Description: Verify the usage of ArtemisSharedComponentModule in the component and its template.

# Test 1: Check if ArtemisSharedComponentModule is imported in the component file
echo "Checking component file for ArtemisSharedComponentModule import:"
rg --type typescript.ts "import\s+.*ArtemisSharedComponentModule" "src/main/webapp/app/exercises/programming/manage/update/update-components/programming-exercise-difficulty.component.ts"

# Test 2: Check if any shared components are used in the component's template
echo "Checking component template for usage of shared components:"
rg --type html "(<app-|<artemis-)" "src/main/webapp/app/exercises/programming/manage/update/update-components/programming-exercise-difficulty.component.html"

# Note: If both tests return no results, consider removing ArtemisSharedComponentModule from the test setup.

Length of output: 650


Script:

#!/bin/bash
# Description: Verify the usage of ArtemisSharedComponentModule in the component and its template.

# Test 1: Check if ArtemisSharedComponentModule is imported in the component file
echo "Checking component file for ArtemisSharedComponentModule import:"
rg -g "*.ts" "import\s+.*ArtemisSharedComponentModule" "src/main/webapp/app/exercises/programming/manage/update/update-components/programming-exercise-difficulty.component.ts"

# Test 2: Check if any shared components are used in the component's template
echo "Checking component template for usage of shared components:"
rg -g "*.html" "(<app-|<artemis-)" "src/main/webapp/app/exercises/programming/manage/update/update-components/programming-exercise-difficulty.component.html"

# Note: If both tests return no results, consider removing ArtemisSharedComponentModule from the test setup.

Length of output: 601


Script:

#!/bin/bash
# Description: Verify the usage of ArtemisSharedComponentModule in the test setup and component's template.

# Test 1: Check if ArtemisSharedComponentModule is imported in the test specification file
echo "Checking test spec file for ArtemisSharedComponentModule import:"
rg -g "*.spec.ts" "import\s+.*ArtemisSharedComponentModule" "src/test/javascript/spec/component/programming-exercise/update-components/programming-exercise-difficulty.component.spec.ts"

# Test 2: Check if any shared components from ArtemisSharedComponentModule are used in the component's template within the tests
echo "Checking component template for usage of shared components in tests:"
rg -g "*.html" "(<app-|<artemis-)" "src/main/webapp/app/exercises/programming/manage/update/update-components/programming-exercise-difficulty.component.html"

# Note: If both tests return no results, consider removing ArtemisSharedComponentModule from the test setup.

Length of output: 723

src/main/webapp/i18n/de/metrics.json (2)

84-84: LGTM!

The translation for "puts" is correct and consistent with the German language.


85-85: LGTM!

The translation for "removals" is correct and consistent with the German language.

src/main/webapp/app/exercises/programming/manage/update/update-components/programming-exercise-difficulty.component.html (4)

45-46: LGTM! Good use of new Angular syntax.

The addition of the help icon for the "Allow Offline IDE" checkbox enhances user experience by providing more contextual information. The conditional rendering ensures the icon is only shown when the IDE selection is valid.

I appreciate the use of the new @else syntax instead of *ngIf, which aligns with the provided coding guidelines for Angular syntax.


79-80: LGTM! Consistent implementation of help icons.

The addition of the help icon for the "Allow Online Editor" checkbox is consistent with the previous change, maintaining a uniform approach throughout the template. This enhances user experience and adheres to the new Angular syntax guidelines.

The conditional rendering and use of @else are implemented correctly, ensuring the help icon is only displayed when appropriate.


106-107: LGTM! Consistent implementation with appropriate conditionals.

The addition of the help icon for the "Allow Online IDE" checkbox maintains consistency with the previous changes, enhancing user experience and adhering to the new Angular syntax guidelines.

I appreciate that this checkbox is only displayed for non-exam exercises when Theia is enabled (as per the condition on lines 88-89). This conditional rendering ensures that the option is only available in appropriate scenarios, which is a good practice for maintaining a clean and relevant user interface.

The use of @else and the conditional display of the help icon are implemented correctly, consistent with the rest of the template.


Line range hint 45-107: Overall, excellent improvements to the user interface!

The changes in this file consistently implement help icons for various IDE-related checkboxes (Allow Offline IDE, Allow Online Editor, and Allow Online IDE). These additions enhance the user experience by providing more contextual information when needed.

Key points:

  1. Consistent use of the new Angular syntax (@else instead of *ngIf) throughout the changes, adhering to the provided coding guidelines.
  2. Appropriate conditional rendering ensures help icons are only displayed when the IDE selection is valid.
  3. The "Allow Online IDE" checkbox is correctly displayed only for non-exam exercises when Theia is enabled.

These improvements will help users better understand the options available to them when configuring programming exercises.

src/main/webapp/i18n/en/exerciseAssessmentDashboard.json (1)

42-43: ⚠️ Potential issue

Redundant key detected: Consider removing or clarifying the purpose.

The newly added key "totalExamples" appears to be redundant with the existing key "totalExampleSubmissions". Both keys have identical values:

"totalExamples": "There are {{total}} example submissions: {{toRead}} to read and {{toAssess}} to assess.",
"totalExampleSubmissions": "There are {{total}} example submissions: {{toRead}} to read and {{toAssess}} to assess.",

This duplication may lead to confusion and maintenance issues. Consider the following actions:

  1. If "totalExamples" is intended to replace "totalExampleSubmissions", remove the old key and update all references in the codebase.
  2. If both keys serve different purposes, please clarify their distinct uses and consider modifying the values to reflect their differences.
  3. If this is unintentional, remove the newly added "totalExamples" key.

To help identify the correct course of action, please run the following script to check for usage of both keys in the codebase:

This will help determine which key is actually being used in the application and guide the decision on which one to keep.

✅ Verification successful

Redundant key 'totalExamples' is not used anywhere.

The shell script results indicate that only "totalExampleSubmissions" is referenced in the codebase:

"totalExampleSubmissions": "There are {{total}} example submissions: {{toRead}} to read and {{toAssess}} to assess."

The newly added "totalExamples" key is not utilized and is therefore redundant. To streamline the code and avoid confusion, consider removing the "totalExamples" key.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Check usage of totalExamples and totalExampleSubmissions keys

echo "Searching for 'totalExamples' usage:"
rg --type-add 'web:*.{html,ts}' --type web 'totalExamples'

echo -e "\nSearching for 'totalExampleSubmissions' usage:"
rg --type-add 'web:*.{html,ts}' --type web 'totalExampleSubmissions'

Length of output: 540

src/main/webapp/i18n/en/editor.json (1)

36-36: LGTM! Enhances user feedback during processing.

The addition of "generatingFeedback": "Generating feedback..." is a valuable improvement to the user interface. It provides clear feedback to users when the system is generating feedback, which enhances the overall user experience by keeping them informed about ongoing processes.

The key follows the existing naming conventions, and the message is concise and informative. This change aligns well with good UI/UX practices by reducing user uncertainty during potentially time-consuming operations.

src/main/webapp/i18n/de/editor.json (1)

67-67: LGTM! Adheres to translation guidelines.

The new translation "Löschen bestätigen" for the "delete" key is correct and appropriately placed within the fileBrowser section. It follows the required informal language style (dutzen) as per the coding guidelines. The translation is concise and consistent with the surrounding context.

src/main/webapp/i18n/de/userSettings.json (1)

110-110: Key renaming looks good, but let's verify the translation.

The change from "exerciseCreatedOrStartedDescription" to "exerciseReleasedDescription" aligns with the PR objectives to fix diverging translations. This new key name more accurately reflects the notification event for newly published tasks.

The translation uses informal language (du-form) as required by the coding guidelines: "Erhalte eine Mitteilung, wenn eine Aufgabe veröffentlicht wurde".

However, let's consider two points:

  1. The translation might be more precise if it used "freigegeben" instead of "veröffentlicht" to match the "released" concept in the key name.
  2. We should verify if this key renaming is consistently applied in the English translation file and in the code where this key is used.

To ensure consistency across the codebase, please run the following script:

This script will help us ensure that the key renaming is consistent across all relevant files.

✅ Verification successful

Key renaming verification successful.

All instances of the old key exerciseCreatedOrStartedDescription have been removed, the new key exerciseReleasedDescription exists in the English translation, and its usage in the codebase has been updated accordingly.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Check for consistency of the renamed key across files

# Test 1: Check if the old key still exists in any i18n files
echo "Checking for old key 'exerciseCreatedOrStartedDescription':"
rg --type json "exerciseCreatedOrStartedDescription" src/main/webapp/i18n/

# Test 2: Check if the new key exists in the English translation file
echo "Checking for new key 'exerciseReleasedDescription' in English translation:"
rg --type json "exerciseReleasedDescription" src/main/webapp/i18n/en/userSettings.json

# Test 3: Search for usages of the translation key in TypeScript/JavaScript files
echo "Checking for usages of the translation key in TS/JS files:"
rg --type ts --type js "exerciseReleasedDescription|exerciseCreatedOrStartedDescription" src/

Length of output: 950

src/main/webapp/i18n/de/lectureUnit.json (3)

18-18: LGTM: New translation key added correctly.

The new key-value pair "title": "Eigenschaften" has been added correctly under the details object in the lectureUnit section. This addition enhances the information structure and is consistent with the existing format.


18-18: Ensure informal language (dutzen) is used consistently.

As per the coding guidelines, German translations should use informal language (dutzen) and never formal language (sietzen). The new and modified translations adhere to this guideline:

  1. The new key "title": "Eigenschaften" is neutral and doesn't use any pronouns.
  2. In the createOnlineUnit section, the existing translations use the informal "du" form, e.g., "Gib der Onlineeinheit einen Namen".

However, to ensure consistency across the entire file, it's recommended to review all translations, especially those not directly related to the changes in this PR.

To help with this verification, you can run the following script to check for any instances of formal language:

#!/bin/bash
# Search for potential formal language usage in the German translation file
echo "Checking for potential formal language usage:"
rg -i "sie |ihr |ihnen |bitte |könnten |würden |möchten " src/main/webapp/i18n/de/lectureUnit.json

This script will help identify any potential uses of formal language that might need to be adjusted to maintain consistency with the informal tone required by the coding guidelines.

Also applies to: 90-106


Line range hint 90-106: Verify the renaming of 'createVideoUnit' to 'createOnlineUnit'.

The key createVideoUnit has been renamed to createOnlineUnit under the onlineUnit section. This change appears to reflect a shift in functionality from creating video units to creating more general online units. The content of this object remains unchanged, which is appropriate if the fields are still applicable to the new context.

However, to ensure consistency, please verify the following:

  1. Check if there are any references to createVideoUnit in the codebase that need to be updated.
  2. Confirm that the content of createOnlineUnit is still relevant for the new context (e.g., "Externes Onlineangebot URL" instead of a video-specific URL).
  3. Ensure that this change is reflected in the English translation file as well.

To help with this verification, you can run the following script:

This script will help identify any remaining references to createVideoUnit that need to be updated and verify if the change has been made in the English translation file as well.

src/main/webapp/i18n/en/conversation.json (1)

Line range hint 1-279: Overall, the changes maintain the integrity of the localization file

The addition of the new localization string aligns with the PR objectives of addressing translation issues. The file structure remains consistent, and no other inconsistencies were introduced. However, please consider the suggestion about consolidating similar strings to improve maintainability and consistency.

src/main/webapp/i18n/en/notification.json (2)

18-19: LGTM: New notification keys added successfully.

The addition of "newAnswerPost" and "newPost" keys to the target object is consistent with the existing structure and naming conventions. These new keys address specific notification types that were previously missing, aligning well with the PR objective of fixing diverging translations and addressing missing keys.

The values "View reply" and "View post" are appropriate and consistent with similar existing keys like "newAnswer" and "newQuestion". This change enhances the notification system by providing more specific actions related to user interactions with posts and replies.


Line range hint 1-224: Summary: Positive impact on notification system completeness.

The changes made to this file are minimal yet impactful. By adding two new notification keys, "newAnswerPost" and "newPost", the notification system now covers a broader range of user interactions. These additions are consistent with the existing structure and naming conventions, and they directly address the PR objective of fixing diverging translations.

No other parts of the file were modified, maintaining the integrity of the existing localization strings. Overall, these changes contribute positively to the completeness and functionality of the notification system without introducing any apparent issues or inconsistencies.

src/main/webapp/i18n/de/notification.json (1)

17-20: LGTM! New translations adhere to guidelines and PR objectives.

The new entries "newAnswer" and "newQuestion" with their respective translations "Antwort ansehen" and "Frage ansehen" are correctly implemented. They adhere to the German language guideline of using the informal "du" form, maintain consistency with other entries in the target section, and align with the PR objectives of synchronizing translation keys.

src/main/webapp/i18n/de/global.json (2)

38-38: LGTM: Correct capitalization for LTI-Outcome-URL

The entry for "ltiOutcomeUrl" correctly uses the capitalized form "LTI-Outcome-URL" as suggested in a previous review. This is appropriate for technical terms and acronyms.


211-211: LGTM: Correct translation and use of informal language

The translation "Repositories herunterladen" for "exportRepos" is correct and appropriately uses informal language (dutzen) as required by the coding guidelines. The use of the English term "Repositories" is acceptable for technical terminology.

src/main/webapp/i18n/en/student-dashboard.json (1)

104-104: Approved addition, but consider potential redundancy.

The addition of the "resetFilter" key is consistent with the PR objectives and maintains the file structure. However, there's a potential redundancy with the existing "clearFilter" key. Consider the following:

  1. If these keys serve different purposes, ensure the distinction is clear in the UI to avoid user confusion.
  2. If they are meant to be synonymous, consider consolidating them to maintain consistency across the application.

To ensure consistency across language files, please run the following script:

This script will help verify that the "resetFilter" key has been added to both language files, ensuring consistency in the translation updates.

src/main/webapp/i18n/de/student-dashboard.json (6)

105-105: LGTM: Clear and consistent translation added

The new translation for "clearFilter" is correct, clear, and consistent with the informal tone (dutzen) as required by the coding guidelines.


138-138: LGTM: Appropriate translation for team assignment status

The new translation for "userNotAssignedToTeam" is correct and adheres to the informal tone (dutzen) requirement. It clearly informs the user about their team assignment status.


Line range hint 139-145: LGTM: Comprehensive set of exercise status translations added

The new translations for various exercise statuses are correct, clear, and consistently use the informal tone (dutzen) as required. They cover a wide range of scenarios, providing users with precise information about their exercise status.


151-151: LGTM: Concise translation for exercise not started status

The new translation for "userNotStartedExerciseShort" is correct and appropriately concise for use in space-constrained UI elements.


151-151: LGTM: Concise translation for team assignment status

The new translation for "userNotAssignedToTeamShort" is correct, concise, and consistent with its longer counterpart. It's suitable for use in space-constrained UI elements.


Line range hint 152-158: LGTM: Comprehensive set of concise exercise status translations added

The new short translations for various exercise statuses are correct, clear, and consistent with their longer counterparts. They are appropriately concise for use in space-constrained UI elements, providing users with quick insights into their exercise status.

src/main/webapp/i18n/en/competency.json (3)

210-210: LGTM: New translation key for average mastery

The addition of the "averageMastery" key with the translation "Average competency mastery of students" is clear and accurately describes the concept. This aligns well with the PR objective of addressing translation inconsistencies.


Line range hint 1-1: Overall assessment: Translation updates look good

The changes to this file effectively address the PR objective of fixing diverging translations. The new keys added provide valuable information to users and enhance the clarity of the UI. There were no major issues found, and the changes are consistent with the existing structure of the file.

A few points to note:

  1. The "averageMastery" key addition is clear and appropriate.
  2. There's a minor suggestion for consistency between the "averageStudentScore" key and its value.
  3. The "deleted" key in the prerequisite section needs verification as it's not visible in the provided snippet.

Once these minor points are addressed, the changes will significantly improve the consistency and completeness of the English translations.


Line range hint 1-1: Verify the addition of the "deleted" key in the prerequisite section

The AI-generated summary mentions a new key "deleted" with the value "Prerequisite deleted" in the prerequisite section. However, this change is not visible in the provided code snippet. Please verify if this change has been implemented correctly.

To confirm the presence of this key, you can run the following command:

If the key exists, this command should output "Prerequisite deleted". If it returns null, the key is missing and should be added.

✅ Verification successful

Verified the addition of the "deleted" key in the prerequisite section

The "deleted" key with the value "Prerequisite deleted" exists in the prerequisite section as intended.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Search for the "deleted" key in the prerequisite section
jq '.artemisApp.prerequisite.deleted' src/main/webapp/i18n/en/competency.json

Length of output: 100

src/main/webapp/i18n/de/competency.json (3)

228-228: LGTM: New translation added correctly.

The new translation for "averageStudentScore" has been added correctly, maintaining the informal tone (dutzen) as per the guidelines.


285-289: LGTM: New 'importAll' section added correctly.

The new importAll section for prerequisites has been added with appropriate translations. The informal tone (dutzen) is maintained, and the translations accurately convey the intended meanings.


Line range hint 1-390: Overall changes look good, but some inconsistencies need verification.

The visible changes in the file adhere to the coding guidelines for German translations, maintaining the informal tone (dutzen) as required. New sections and translations have been added correctly. However, there are inconsistencies between the AI-generated summary and the visible changes in the diff, particularly in the learningPath.manageLearningPaths.health.missing and competencyCard sections.

Please review the verification scripts provided in the previous comments to check these inconsistencies. Once verified, update the AI-generated summary if necessary to accurately reflect the actual changes made to the file.

src/main/webapp/i18n/en/exam.json (1)

474-474: LGTM! Verify related functionality.

The addition of "studentReviewEnabled": "Student review enabled" is consistent with the existing structure and naming convention. It appears to be related to a new feature for enabling student review of exams, which aligns with the PR objectives.

To ensure this new feature is properly implemented, please run the following verification script:

src/main/webapp/i18n/en/programmingExercise.json (6)

133-136: LGTM: Clear description of the online editor

The added description for the "allowOnlineEditor" option provides clear and concise information about the features of the online editor. It's well-written and consistent with the existing style.


140-141: LGTM: Clear explanation of the offline IDE option

The added description for the "allowOfflineIde" option clearly explains what enabling this option allows students to do. It's well-written and provides valuable information for users configuring the exercise.


147-149: LGTM: Comprehensive description of the online IDE

The added description for the "allowOnlineIde" option provides a detailed explanation of the online IDE's features. It clearly distinguishes this option from the simpler online editor and highlights its advanced capabilities. The information is valuable for users setting up the exercise.


454-454: LGTM: Clear status message for enabled feedback requests

The added string for "feedbackRequestsEnabled" provides a clear and concise status message. It's consistent with the existing style and will be helpful for users to understand the current state of feedback requests.


455-455: LGTM: Clear status message for disabled feedback requests

The added string for "feedbackRequestsDisabled" provides a clear and concise status message. It complements the previous "enabled" message and maintains consistency in style and wording.


Line range hint 1-1000: Overall: Excellent additions to the localization file

All the changes in this file are well-implemented and provide clear, valuable information for users. The new descriptions for various IDE options and feedback request status messages are consistent with the existing style and enhance the user experience. No issues were found, and all modifications are approved.

src/main/webapp/i18n/de/exam.json (2)

215-215: LGTM: New key for non-bonus score suffix added

The new key xAxesSuffixNoBonus has been correctly added to the examScores section. The translation adheres to the informal language requirement (du-form) and includes a placeholder for the grade name.


322-322: LGTM: New key for submission limit reached message added

The new key submittedSubmissionLimitReached has been correctly added to the examParticipation section. The translation adheres to the informal language requirement (du-form) and clearly communicates that the user has reached the submission limit for a task.

src/main/webapp/i18n/de/programmingExercise.json (7)

59-59: LGTM: Consistent addition of "Build-Pläne" key

The new "buildPlansTitle" key has been consistently added to both the "steps" and "detailedSteps" objects with the correct German translation "Build-Pläne".

Also applies to: 69-69


123-126: LGTM: Clear description for online editor

The added description for the online editor is clear, informative, and correctly uses the informal "du" form. It accurately describes the features and limitations of the online editor.


130-132: LGTM: Clear description for offline IDE option

The added description for the offline IDE option is clear, concise, and correctly uses the informal "du" form. It accurately explains the purpose of allowing students to download and work on the exercise locally.


509-511: LGTM: Clear error messages for auxiliary repositories

The added error messages for auxiliary repositories are clear, concise, and accurately describe the various error conditions. They are consistent with the existing style of error messages in the file.


Line range hint 1-646: LGTM: Consistent language and tone throughout the file

The entire file consistently uses the informal "du" form as required by the guidelines. The language is clear, appropriate for the target audience, and maintains a consistent tone throughout all translations.


Line range hint 1-646: LGTM: Well-structured JSON file

The file maintains a correct and well-formatted JSON structure throughout, with proper nesting of objects and arrays.


Line range hint 1-646: LGTM: Improved German translations for programming exercise interface

Overall, the changes to this file significantly improve the German translations for the programming exercise interface. The new additions are consistent with the existing content, adhere to the required informal "du" form, and provide clear and accurate translations. The file maintains a well-structured JSON format and consistent tone throughout.

While some minor suggestions for improvements have been made, these are not critical and can be addressed in future iterations if deemed necessary.

src/main/webapp/i18n/de/metrics.json Show resolved Hide resolved
src/main/webapp/i18n/de/metrics.json Show resolved Hide resolved
src/main/webapp/i18n/de/metrics.json Show resolved Hide resolved
src/main/webapp/i18n/de/metrics.json Show resolved Hide resolved
src/main/webapp/i18n/de/metrics.json Show resolved Hide resolved
src/main/webapp/i18n/en/conversation.json Outdated Show resolved Hide resolved
src/main/webapp/i18n/en/competency.json Outdated Show resolved Hide resolved
src/main/webapp/i18n/en/exam.json Outdated Show resolved Hide resolved
Copy link
Contributor

@SimonEntholzer SimonEntholzer left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Translations make sense and fix the failing actions check 👍

Copy link
Member

@BBesrour BBesrour left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

code lgtm and check is now passing 👍 Thnx for fixing the issue

Copy link

@HawKhiem HawKhiem left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Tested on TS3 as Student and Instructor. No "missing translations" warnings were found

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
chore client Pull requests that update TypeScript code. (Added Automatically!) ready for review ready to merge tests
Projects
Archived in project
Development

Successfully merging this pull request may close these issues.

Tests fail due to missing translation keys
7 participants