Skip to content

Commit 6e06763

Browse files
authored
Merge pull request #48 from MathisBurger/feature/translations
[TASK] prepared translations
2 parents 0942dd2 + ffd6bb6 commit 6e06763

24 files changed

Lines changed: 289 additions & 60 deletions

package.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
"format": "prettier --write --plugin-search-dir=. ."
1212
},
1313
"devDependencies": {
14+
"@rollup/plugin-json": "^4.1.0",
1415
"@sveltejs/adapter-static": "^1.0.0-next.13",
1516
"@sveltejs/kit": "^1.0.0-next.195",
1617
"@types/cookie": "^0.4.0",
@@ -40,6 +41,7 @@
4041
"path": "^0.12.7",
4142
"postcss-load-config": "^3.1.0",
4243
"sass": "^1.43.4",
43-
"svelte-fa": "^2.4.0"
44+
"svelte-fa": "^2.4.0",
45+
"svelte-i18n": "^3.3.13"
4446
}
4547
}

src/i18n.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
import { register, init, getLocaleFromHash } from 'svelte-i18n';
2+
3+
register('de', () => import('./translations/en.json'));
4+
register('en', () => import('./translations/de.json'));
5+
6+
init({
7+
fallbackLocale: 'en',
8+
initialLocale: getLocaleFromHash('lang')
9+
});

src/lib/index.component.svelte

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,12 @@
1+
<script lang="ts">
2+
import { _ } from 'svelte-i18n';
3+
</script>
4+
15
<div class="centered">
26
<div class="container">
37
<h1>MathOnWeb</h1>
48
<p>
5-
MathOnWeb is an open source web application that executes complex math operations. Therefore
6-
it must be very fast to provide an acceptable user experience. This is the reason why it does
7-
not use a virtualDOM like React. It uses the default DOM of ES6, supported by the most modern
8-
browsers natively. It does not use any type of virtualization. Furthermore it uses Typescript,
9-
which is typesafe and has some performance improvements. I would appreciate it, if you
10-
suppport this project on
9+
{$_('indexText')}
1110
<a href="https://github.com/MathisBurger/MathOnWeb">Github</a>
1211
</p>
1312
</div>

src/lib/navbar.svelte

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,26 @@
22
import ThemeSelector from './theme-selector.svelte';
33
import Fa from 'svelte-fa';
44
import { faAlignJustify } from '@fortawesome/free-solid-svg-icons';
5+
import { _ } from 'svelte-i18n';
56
let navbarExtended = false;
7+
8+
/**
9+
* Checks if the user clicked outside of the navbar and the
10+
* navbar gets minimized, if it was extended before.
11+
*
12+
* @param event The PointerEvent triggered by a click
13+
*/
14+
const handleClick = (event: PointerEvent) => {
15+
if (!document.getElementById('navbar').contains(event.target as Node)) {
16+
navbarExtended = false;
17+
}
18+
};
19+
20+
// Adding click listener to the whole window
21+
window.addEventListener('click', handleClick);
622
</script>
723

8-
<div class={`navbar ${navbarExtended ? 'extended' : ''}`}>
24+
<div id="navbar" class={`navbar ${navbarExtended ? 'extended' : ''}`}>
925
<div
1026
class="navbar-toggler"
1127
on:click={() => {
@@ -15,10 +31,10 @@
1531
<Fa icon={faAlignJustify} />
1632
</div>
1733
<div class="navbar-menu">
18-
<a href="/">Home</a>
19-
<a href="/basic">Basic</a>
20-
<a href="/vector">Vector</a>
21-
<a href="/stochastics">Stochastics</a>
34+
<a href="/">{$_('navbar.home')}</a>
35+
<a href="/basic">{$_('navbar.basic')}</a>
36+
<a href="/vector">{$_('navbar.vector')}</a>
37+
<a href="/stochastics">{$_('navbar.stochastics')}</a>
2238
</div>
2339
<div class="navbar-actions">
2440
<ThemeSelector />

src/lib/switch.svelte

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
import { faMoon, faSun } from '@fortawesome/free-solid-svg-icons';
66
77
function change(event: any) {
8-
onChange(event.target.checked === 'true' ? 'dark' : 'light');
8+
onChange(event.target.checked === true ? 'dark' : 'light');
99
}
1010
</script>
1111

src/routes/__layout.svelte

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,12 @@
11
<script lang="ts">
22
import Navbar from '$lib/navbar.svelte';
33
import { theme } from '../lib/theme';
4+
import '../i18n.ts';
5+
import { waitLocale } from 'svelte-i18n';
6+
7+
async function preload() {
8+
return waitLocale();
9+
}
410
</script>
511

612
<svelte:head>
@@ -12,5 +18,7 @@
1218
/>
1319
</svelte:head>
1420

15-
<Navbar />
16-
<slot />
21+
{#await preload() then _}
22+
<Navbar />
23+
<slot />
24+
{/await}

src/routes/basic/calculator.svelte

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
<script lang="ts">
2+
import { _ } from 'svelte-i18n';
3+
24
let inputString = '0';
35
let lastResult = '0';
46
@@ -19,7 +21,7 @@
1921
inputString = eval(inputString);
2022
lastResult = inputString;
2123
} catch (e) {
22-
inputString = 'ERROR';
24+
inputString = $_('general.error');
2325
}
2426
}
2527

src/routes/basic/function-solver.svelte

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
<script lang="ts">
22
import Snackbar from '$lib/snackbar.svelte';
33
import solveFunction from '$lib/solve-function';
4+
import { _ } from 'svelte-i18n';
45
56
let func = '';
67
let wanted = '';
@@ -30,8 +31,7 @@
3031
{/if}
3132
<div class="centered">
3233
<div class="experimental-text">
33-
This feature is still experimental!<br />
34-
So there are big performance issues and<br /> the results are not 100% trustable.
34+
{$_('general.experimental-text')}
3535
</div>
3636
<div class="container">
3737
<div class="function-flex">
@@ -40,7 +40,7 @@
4040
<p>=</p>
4141
<input class="wanted-input" bind:value={wanted} />
4242
</div>
43-
<button class="calculate-button" on:click={solve}> Solve </button>
43+
<button class="calculate-button" on:click={solve}>{$_('general.calculate')}</button>
4444
{#if resultExists}
4545
<div class="result-form">
4646
{resultText}

src/routes/basic/index.svelte

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,22 @@
11
<script lang="ts">
22
import ListSelector from '../../lib/listSelector.svelte';
33
import type { ListSelectorElement } from '../../typings/ListSelectorElement';
4+
import { _ } from 'svelte-i18n';
45
56
let apps: ListSelectorElement[] = [
6-
{ name: 'Calculator', description: 'A basic calculator', route: '/basic/calculator' },
77
{
8-
name: 'Triangle completer',
9-
description: 'completes a triangle',
8+
name: $_('basic.calculator.title'),
9+
description: $_('basic.calculator.description'),
10+
route: '/basic/calculator'
11+
},
12+
{
13+
name: $_('basic.triangle-completer.title'),
14+
description: $_('basic.triangle-completer.description'),
1015
route: '/basic/triangle-completer'
1116
},
1217
{
13-
name: 'Function solver',
14-
description: 'solves an matn function',
18+
name: $_('basic.function-solver.title'),
19+
description: $_('basic.function-solver.description'),
1520
route: '/basic/function-solver'
1621
}
1722
];

src/routes/basic/triangle-completer.svelte

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
import { DefaultsProvider } from '$lib/defaults-provider';
33
import Snackbar from '$lib/snackbar.svelte';
44
import solveTriangle from '$lib/triangle-calculator';
5+
import { _ } from 'svelte-i18n';
56
let triangle = new DefaultsProvider().getDefaultTriangle();
67
let showSnackbar = false;
78
let errorSnackbar = '';
@@ -72,26 +73,26 @@
7273
<div class="input-container">
7374
<div class="input-flex">
7475
<input class="triangle-input" value="90" disabled />
75-
<p>Alpha angle</p>
76+
<p>{$_('basic.triangle-completer.alpha-angle')}</p>
7677
</div>
7778
<div class="input-flex">
7879
<input
7980
class="triangle-input"
8081
on:change={(event) => onChange(event, 'beta')}
8182
value={parseAngle(triangle.beta)}
8283
/>
83-
<p>Beta angle</p>
84+
<p>{$_('basic.triangle-completer.beta-angle')}</p>
8485
</div>
8586
<div class="input-flex">
8687
<input
8788
class="triangle-input"
8889
on:change={(event) => onChange(event, 'gamma')}
8990
value={parseAngle(triangle.gamma)}
9091
/>
91-
<p>Gamma angle</p>
92+
<p>{$_('basic.triangle-completer.gamma-angle')}</p>
9293
</div>
9394
</div>
94-
<button class="calculate-button" on:click={solve}>Solve</button>
95+
<button class="calculate-button" on:click={solve}>{$_('general.calculate')}</button>
9596
</div>
9697
</div>
9798

0 commit comments

Comments
 (0)