diff --git a/src/App.js b/src/App.js index 66135c1..d2209d6 100644 --- a/src/App.js +++ b/src/App.js @@ -40,84 +40,7 @@ import Japan from './Pages/Japan/Japan'; import JapaneseMain from './Pages/Japan/JapaneseMain'; import EquipmentPage from './Pages/Radio/equipmentPage'; -const languages = ['en', 'nl']; - -export function getLanguage() { - const currentPath = window.location.pathname; - let language; - try { - const result = currentPath.split('/')[1]; - if (languages.includes(result)) { - language = result; - } else { - throw new Error('Invalid language detected'); - } - } - catch (error) { - language = 'en'; - } - return language; -} - -const languageStrings = { - en: { - // Common - and: 'and', - on: 'on', - // Titles - japanese: 'Japanese', - radio_amateur: 'Radio amateur', - software: 'Software', - // Education - certification: 'Certification', - completed: 'Completed', - courses: 'Courses', - education: 'Education', - issued: 'issued', - skills: 'Skills', - // Navigation - portal: 'Portal', - language: 'Language', - // Radio - equipment: 'Equipment', - fielddays: 'Field days', - nvisAntenna: 'NVIS Antenna', - // Footer - footer_contentparsed: 'Content is parsed by', - footer_madewith: 'This site was made with', - }, - nl: { - // Common - and: 'en', - on: 'op', - // Titles - japanese: 'Japans', - radio_amateur: 'Radiozendamateur', - software: 'Software', - // Education - certification: 'Certificering', - completed: 'Voltooid', - courses: 'Cursussen', - education: 'Opleiding', - issued: 'uitgegeven', - skills: 'Vaardigheden', - // Navigation - portal: 'Portaal', - language: 'Taal', - // Radio - equipment: 'Apparatuur', - fielddays: 'Velddagen', - nvisAntenna: 'NVIS Antenne', - // Footer - footer_contentparsed: 'Inhoud is verwerkt door', - footer_madewith: 'Deze website is gemaakt met', - }, -}; - -export function getString(key) { - const language = getLanguage(); - return languageStrings[language][key] || `{${key}}`; -} +import { languages, getLanguage } from './Language/Language'; function App() { const language = getLanguage(); diff --git a/src/Language/Language.js b/src/Language/Language.js new file mode 100644 index 0000000..f166884 --- /dev/null +++ b/src/Language/Language.js @@ -0,0 +1,18 @@ +export const languages = ['en', 'nl']; + +export function getLanguage() { + const currentPath = window.location.pathname; + let language; + try { + const result = currentPath.split('/')[1]; + if (languages.includes(result)) { + language = result; + } else { + throw new Error('Invalid language detected'); + } + } + catch (error) { + language = 'en'; + } + return language; +} \ No newline at end of file diff --git a/src/Language/LanguageStrings.js b/src/Language/LanguageStrings.js new file mode 100644 index 0000000..13e1afd --- /dev/null +++ b/src/Language/LanguageStrings.js @@ -0,0 +1,65 @@ +import { getLanguage } from "./Language"; + +const languageStrings = { + en: { + // Common + and: 'and', + on: 'on', + // Titles + japanese: 'Japanese', + radio_amateur: 'Radio amateur', + software: 'Software', + // Japan + download_map_at_github: 'Get this map at Github', + // Education + certification: 'Certification', + completed: 'Completed', + courses: 'Courses', + education: 'Education', + issued: 'issued', + skills: 'Skills', + // Navigation + portal: 'Portal', + language: 'Language', + // Radio + equipment: 'Equipment', + fielddays: 'Field days', + nvisAntenna: 'NVIS Antenna', + // Footer + footer_contentparsed: 'Content is parsed by', + footer_madewith: 'This site was made with', + }, + nl: { + // Common + and: 'en', + on: 'op', + // Titles + japanese: 'Japans', + radio_amateur: 'Radiozendamateur', + software: 'Software', + // Japan + download_map_at_github: 'Download deze kaart op Github', + // Education + certification: 'Certificering', + completed: 'Voltooid', + courses: 'Cursussen', + education: 'Opleiding', + issued: 'uitgegeven', + skills: 'Vaardigheden', + // Navigation + portal: 'Portaal', + language: 'Taal', + // Radio + equipment: 'Apparatuur', + fielddays: 'Velddagen', + nvisAntenna: 'NVIS Antenne', + // Footer + footer_contentparsed: 'Inhoud is verwerkt door', + footer_madewith: 'Deze website is gemaakt met', + }, +}; + +export function getString(key) { + const language = getLanguage(); + return languageStrings[language][key] || `{${key}}`; +} \ No newline at end of file diff --git a/src/Pages/Japan/Japan.js b/src/Pages/Japan/Japan.js index fe6e64d..c7bdeb5 100644 --- a/src/Pages/Japan/Japan.js +++ b/src/Pages/Japan/Japan.js @@ -1,7 +1,7 @@ import React, { useState } from 'react'; import JapanMap from './components/JapanMap'; import Dropdown from './components/Dropdown'; -import { getLanguage } from '../../App'; +import { getString } from '../../Language/LanguageStrings' const Japan = () => { const [selectedColor, setSelectedColor] = useState(''); @@ -10,8 +10,6 @@ const Japan = () => { setSelectedColor(event.target.value); }; - const language = getLanguage(); - return (
@@ -21,7 +19,7 @@ const Japan = () => {
-

Get this map at Github

+

{getString('download_map_at_github')}

) diff --git a/src/Pages/Japan/JapaneseMain.js b/src/Pages/Japan/JapaneseMain.js index 8ae47ec..be69299 100644 --- a/src/Pages/Japan/JapaneseMain.js +++ b/src/Pages/Japan/JapaneseMain.js @@ -1,7 +1,8 @@ import React from 'react'; import Emoji from '../../Content/Emoji'; import MarkdownPage from '../markdownPage'; -import { getLanguage, getString } from '../../App'; +import { getLanguage } from '../../Language/Language'; +import { getString } from '../../Language/LanguageStrings' const JapaneseMain = () => { const language = getLanguage(); diff --git a/src/Pages/Radio/RadioMain.js b/src/Pages/Radio/RadioMain.js index 36c5f3e..be42051 100644 --- a/src/Pages/Radio/RadioMain.js +++ b/src/Pages/Radio/RadioMain.js @@ -2,7 +2,8 @@ import React from 'react'; import Emoji from '../../Content/Emoji'; import { Link } from 'react-router-dom'; import MarkdownPage from '../markdownPage'; -import { getLanguage, getString } from '../../App'; +import { getLanguage } from '../../Language/Language'; +import { getString } from '../../Language/LanguageStrings' import FielddaysTable from './fielddays/fielddaysTable'; const RadioMain = () => { diff --git a/src/Pages/Software/SoftwareMain.js b/src/Pages/Software/SoftwareMain.js index 4432ed2..9fd2d21 100644 --- a/src/Pages/Software/SoftwareMain.js +++ b/src/Pages/Software/SoftwareMain.js @@ -1,7 +1,8 @@ import React from 'react'; import Emoji from '../../Content/Emoji'; import MarkdownPage from '../markdownPage'; -import { getLanguage, getString } from '../../App'; +import { getLanguage } from '../../Language/Language'; +import { getString } from '../../Language/LanguageStrings' import educationData from './education.json' const SoftwareMain = () => { diff --git a/src/UI/Breadcrumbs.js b/src/UI/Breadcrumbs.js index 02631ef..2a7c829 100644 --- a/src/UI/Breadcrumbs.js +++ b/src/UI/Breadcrumbs.js @@ -1,5 +1,5 @@ import React from 'react'; -import { getLanguage } from '../App'; +import { getLanguage } from '../Language/Language'; import { useTheme } from '../ThemeContext'; const Breadcrumbs = ({ separator, path, children }) => { diff --git a/src/UI/Footer.js b/src/UI/Footer.js index 1bcf80f..f644db3 100644 --- a/src/UI/Footer.js +++ b/src/UI/Footer.js @@ -1,7 +1,7 @@ import React from 'react'; import { useTheme } from '../ThemeContext'; import './Footer.css'; -import { getString } from '../App'; +import { getString } from '../Language/LanguageStrings' const Footer = () => { diff --git a/src/UI/Navigation.js b/src/UI/Navigation.js index c2a488a..0a85a91 100644 --- a/src/UI/Navigation.js +++ b/src/UI/Navigation.js @@ -1,7 +1,8 @@ import React from 'react'; import { Link } from 'react-router-dom'; import { useTheme } from '../ThemeContext'; -import { getString, getLanguage } from '../App'; +import { getLanguage } from '../Language/Language'; +import { getString } from '../Language/LanguageStrings' import './Navigation.css';