Skip to content

Commit 1ddc44d

Browse files
committed
Add multilingual support for exercise descriptions
This change is inspired by the respective changes in CodeOcean.
1 parent 03a1cef commit 1ddc44d

File tree

4 files changed

+37
-1
lines changed

4 files changed

+37
-1
lines changed

app/javascript/multilang_de.scss

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.scss

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/layouts/application.html.slim

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ html lang=I18n.locale data-default-locale=I18n.default_locale
1111
= favicon_link_tag('/icon.svg', type: 'image/svg+xml')
1212
= favicon_link_tag('/icon.png', rel: 'apple-touch-icon', type: 'image/png')
1313
= tag.link rel: 'manifest', href: pwa_manifest_path
14-
= stylesheet_pack_tag('stylesheets', media: 'all', 'data-turbolinks-track': 'reload', integrity: true, crossorigin: 'anonymous')
14+
= stylesheet_pack_tag('stylesheets', "multilang_#{I18n.locale}", media: 'all', 'data-turbolinks-track': 'reload', integrity: true, crossorigin: 'anonymous')
1515
= stylesheet_link_tag('application', media: 'all', 'data-turbolinks-track': 'reload', integrity: true, crossorigin: 'anonymous')
1616
= javascript_pack_tag('application', 'data-turbolinks-track': 'reload', defer: false, integrity: true, crossorigin: 'anonymous')
1717
= javascript_include_tag('application', 'data-turbolinks-track': 'reload', integrity: true, crossorigin: 'anonymous')

docs/multilang.md

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
# Multilanguage Support for Tasks
2+
3+
This document provides an overview of how to support multilingual task descriptions.
4+
5+
## Introduction
6+
7+
To improve the maintenance of tasks in multilingual teaching scenarios, it may be better to provide tasks with task descriptions in several languages than to work with translated copies of a task. CodeHarbor already has multilingual support that can be used to achieve this.
8+
9+
The implementation of multilanguage support in CodeHarbor 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 task 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+
```html
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+
```html
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+
## Supported Locales
29+
30+
At the time of writing CodeHarbor supports the `DE` and `EN` locales. Accordingly, the two CSS snippets [`multilang_de.scss`](../app/javascript/multilang_de.scss) and [`multilang_en.scss`](../app/javascript/multilang_en.scss) have been added to the application. To support other locales, just copy and paste one of these snippets and change the locale in the CSS rule. To really take effect, the appropriate locale must be added to CodeHarbor (see [Config --> Locales](../config/locales/) for details) and also requires a change to `Rails.application.config.i18n.available_locales` in [`config/application.rb`](../config/application.rb).

0 commit comments

Comments
 (0)