Skip to content

Commit ff93042

Browse files
Benedikt ArteltCbblr
authored andcommitted
Merge branch 'feature/openHPI#4(multilang-exercise-descriptions)' into 'codeocean-tuil'
Add multilingual support for exercise descriptions and tips to be displayed in the exercise implementation (implements and closes openHPI#4) Closes openHPI#4 See merge request bear-mt/codeocean-tuil!3
1 parent 72195f1 commit ff93042

File tree

4 files changed

+40
-0
lines changed

4 files changed

+40
-0
lines changed

app/javascript/multilang_de.css

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
:root[lang="de"] .multilang:not([lang="de"]) {
2+
display: none;
3+
}

app/javascript/multilang_en.css

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
:root[lang="en"] .multilang:not([lang="en"]) {
2+
display: none;
3+
}

app/views/exercises/implement.html.slim

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
// Force a full page reload, see https://github.com/turbolinks/turbolinks/issues/326.
33
Otherwise, lti_parameters might be nil
44
meta name='turbolinks-cache-control' content='no-cache'
5+
- append_stylesheet_pack_tag("multilang_#{I18n.locale}")
6+
57

68
#editor-column
79
- unless @embed_options[:hide_exercise_description]

docs/multilang.md

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
# Multilanguage Support for Exercises and Tips
2+
3+
This document provides an overview of how to support multilingual exercise descriptions and tips that are displayed in the exercise implementation view.
4+
5+
## Introduction
6+
7+
To improve the maintenance of exercises in multilingual teaching scenarios, it may be better to provide exercises with exercise descriptions in several languages than to work with translated copies of an exercise. CodeOcean already has multilingual support that can be used to achieve this.
8+
9+
The implementation of multilanguage support in CodeOcean is inspired by [Moodle's Multilang Content Filter](https://docs.moodle.org/405/en/Multi-language_content_filter): Attributes are used to indicate the multilingual nature of a content element (`class="multilang"`) and to specify the exact language (`lang="XX"`). CSS is then used to control the visibility on the page.
10+
11+
## Usage
12+
13+
When making exercise descriptions or tips multilingual, the `.multilang`class must be assigned to all multilingual content. The `lang` attribute must be set to the appropriate locale, e.g. `"en"` or `"de"`. This very simple solution can be applied in many different ways:
14+
15+
Example 1 (Separated Multilingual Content Blocks):
16+
17+
```
18+
<p class="multilang" lang="de">Implementieren Sie eine Funktion, die für einen gegebenen Parameter entscheidet, ob er gerade oder ungerade ist.</p>
19+
<p class="multilang" lang="en">Implement a function that decides for a given parameter whether it is even or odd.</p>
20+
```
21+
22+
Example 2 (Inline Separation of Multilingual Content):
23+
24+
```
25+
<p><span class="multilang" lang="de">Implementieren Sie eine Funktion, die für einen gegebenen Parameter entscheidet, ob er gerade oder ungerade ist.</span> <span class="multilang" lang="en">Implement a function that decides for a given parameter whether it is even or odd.</span></p>
26+
```
27+
28+
This approach also applies to the description of tips, including their example sections.
29+
30+
## Supported Locales
31+
32+
At the time of writing CodeOcean supports the `DE` and `EN` locales. Accordingly, the two CSS snippets [multilang_de.css](../app/javascript/multilang_de.css) and [multilang_en.css](../app/javascript/multilang_en.css) have been added to the application. To support other locales, just copy &amp; paste one of these snippets and change the locale in the CSS rule. To really take effect, the appropriate locale must be added to CodeOcean (see [Config --> Locales](../config/locales/) for details).

0 commit comments

Comments
 (0)