-
Notifications
You must be signed in to change notification settings - Fork 297
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
Development
: Fix diverging translations
#9471
Conversation
Chore
: Fix diverging translationsDevelopment
: Fix diverging translations
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Some small remarks
Co-authored-by: Benedikt Fein <fein@fim.uni-passau.de> Co-authored-by: Tim Cremer <65229601+cremertim@users.noreply.github.com>
WalkthroughThe 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 Changes
Assessment against linked issues
Suggested labels
Suggested reviewers
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? 🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
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)
Other keywords and placeholders
Documentation and Community
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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:
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.Expectation specificity:
In the initialization test, instead of usingnot.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 maintainabilityWhile 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
📒 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." fiLength 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 htmlLength 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 theeditor
section of the localization file. This addition:
- Follows the existing naming convention and structure.
- Is properly placed within the
editor
object.- Maintains the correct JSON structure.
- 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.jsonLength 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:
- Consistent use of the new Angular syntax (
@else
instead of*ngIf
) throughout the changes, adhering to the provided coding guidelines.- Appropriate conditional rendering ensures help icons are only displayed when the IDE selection is valid.
- 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 issueRedundant 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:
- If
"totalExamples"
is intended to replace"totalExampleSubmissions"
, remove the old key and update all references in the codebase.- If both keys serve different purposes, please clarify their distinct uses and consider modifying the values to reflect their differences.
- 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:
- The translation might be more precise if it used "freigegeben" instead of "veröffentlicht" to match the "released" concept in the key name.
- 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 keyexerciseReleasedDescription
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 thedetails
object in thelectureUnit
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:
- The new key
"title": "Eigenschaften"
is neutral and doesn't use any pronouns.- 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.jsonThis 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 tocreateOnlineUnit
under theonlineUnit
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:
- Check if there are any references to
createVideoUnit
in the codebase that need to be updated.- Confirm that the content of
createOnlineUnit
is still relevant for the new context (e.g., "Externes Onlineangebot URL" instead of a video-specific URL).- 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 fileThe 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-URLThe 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 languageThe 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:
- If these keys serve different purposes, ensure the distinction is clear in the UI to avoid user confusion.
- 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 addedThe 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 statusThe 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 addedThe 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 statusThe new translation for "userNotStartedExerciseShort" is correct and appropriately concise for use in space-constrained UI elements.
151-151
: LGTM: Concise translation for team assignment statusThe 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 addedThe 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 masteryThe 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 goodThe 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:
- The "averageMastery" key addition is clear and appropriate.
- There's a minor suggestion for consistency between the "averageStudentScore" key and its value.
- 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 sectionThe 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.jsonLength 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
andcompetencyCard
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 editorThe 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 optionThe 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 IDEThe 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 requestsThe 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 requestsThe 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 fileAll 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 addedThe new key
xAxesSuffixNoBonus
has been correctly added to theexamScores
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 addedThe new key
submittedSubmissionLimitReached
has been correctly added to theexamParticipation
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" keyThe 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 editorThe 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 optionThe 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 repositoriesThe 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 fileThe 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 fileThe 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 interfaceOverall, 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.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Translations make sense and fix the failing actions check 👍
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
code lgtm and check is now passing 👍 Thnx for fixing the issue
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Tested on TS3 as Student and Instructor. No "missing translations" warnings were found
Closes #9470, #9369
Checklist
General
Client
authorities
to all new routes and checked the course groups for displaying navigation elements (links, buttons).Changes affecting Programming Exercises
Motivation and Context
In the GH action
Check if translation keys are consistent
, a surprisingly huge amount of keys differ in existence between theen
andde
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
Code Review
Manual Tests
Exam Mode Test
Performance Tests
Test Coverage
Screenshots
Summary by CodeRabbit
New Features
Bug Fixes
Documentation