1
0

Move language files to separate files.

This commit is contained in:
PA4KEV 2024-02-23 23:27:53 +01:00
parent a354893e83
commit acab226fdf
10 changed files with 96 additions and 88 deletions

View File

@ -40,84 +40,7 @@ import Japan from './Pages/Japan/Japan';
import JapaneseMain from './Pages/Japan/JapaneseMain'; import JapaneseMain from './Pages/Japan/JapaneseMain';
import EquipmentPage from './Pages/Radio/equipmentPage'; import EquipmentPage from './Pages/Radio/equipmentPage';
const languages = ['en', 'nl']; import { languages, getLanguage } from './Language/Language';
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}}`;
}
function App() { function App() {
const language = getLanguage(); const language = getLanguage();

18
src/Language/Language.js Normal file
View File

@ -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;
}

View File

@ -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}}`;
}

View File

@ -1,7 +1,7 @@
import React, { useState } from 'react'; import React, { useState } from 'react';
import JapanMap from './components/JapanMap'; import JapanMap from './components/JapanMap';
import Dropdown from './components/Dropdown'; import Dropdown from './components/Dropdown';
import { getLanguage } from '../../App'; import { getString } from '../../Language/LanguageStrings'
const Japan = () => { const Japan = () => {
const [selectedColor, setSelectedColor] = useState(''); const [selectedColor, setSelectedColor] = useState('');
@ -10,8 +10,6 @@ const Japan = () => {
setSelectedColor(event.target.value); setSelectedColor(event.target.value);
}; };
const language = getLanguage();
return ( return (
<article className='main-page'> <article className='main-page'>
<div className='row'> <div className='row'>
@ -21,7 +19,7 @@ const Japan = () => {
</div> </div>
</div> </div>
<div className='row'> <div className='row'>
<p><a href='https://github.com/PA4KEV/japan-vector-map'>Get this map at Github</a></p> <p><a href='https://github.com/PA4KEV/japan-vector-map'>{getString('download_map_at_github')}</a></p>
</div> </div>
</article> </article>
) )

View File

@ -1,7 +1,8 @@
import React from 'react'; import React from 'react';
import Emoji from '../../Content/Emoji'; import Emoji from '../../Content/Emoji';
import MarkdownPage from '../markdownPage'; import MarkdownPage from '../markdownPage';
import { getLanguage, getString } from '../../App'; import { getLanguage } from '../../Language/Language';
import { getString } from '../../Language/LanguageStrings'
const JapaneseMain = () => { const JapaneseMain = () => {
const language = getLanguage(); const language = getLanguage();

View File

@ -2,7 +2,8 @@ import React from 'react';
import Emoji from '../../Content/Emoji'; import Emoji from '../../Content/Emoji';
import { Link } from 'react-router-dom'; import { Link } from 'react-router-dom';
import MarkdownPage from '../markdownPage'; import MarkdownPage from '../markdownPage';
import { getLanguage, getString } from '../../App'; import { getLanguage } from '../../Language/Language';
import { getString } from '../../Language/LanguageStrings'
import FielddaysTable from './fielddays/fielddaysTable'; import FielddaysTable from './fielddays/fielddaysTable';
const RadioMain = () => { const RadioMain = () => {

View File

@ -1,7 +1,8 @@
import React from 'react'; import React from 'react';
import Emoji from '../../Content/Emoji'; import Emoji from '../../Content/Emoji';
import MarkdownPage from '../markdownPage'; import MarkdownPage from '../markdownPage';
import { getLanguage, getString } from '../../App'; import { getLanguage } from '../../Language/Language';
import { getString } from '../../Language/LanguageStrings'
import educationData from './education.json' import educationData from './education.json'
const SoftwareMain = () => { const SoftwareMain = () => {

View File

@ -1,5 +1,5 @@
import React from 'react'; import React from 'react';
import { getLanguage } from '../App'; import { getLanguage } from '../Language/Language';
import { useTheme } from '../ThemeContext'; import { useTheme } from '../ThemeContext';
const Breadcrumbs = ({ separator, path, children }) => { const Breadcrumbs = ({ separator, path, children }) => {

View File

@ -1,7 +1,7 @@
import React from 'react'; import React from 'react';
import { useTheme } from '../ThemeContext'; import { useTheme } from '../ThemeContext';
import './Footer.css'; import './Footer.css';
import { getString } from '../App'; import { getString } from '../Language/LanguageStrings'
const Footer = () => { const Footer = () => {

View File

@ -1,7 +1,8 @@
import React from 'react'; import React from 'react';
import { Link } from 'react-router-dom'; import { Link } from 'react-router-dom';
import { useTheme } from '../ThemeContext'; import { useTheme } from '../ThemeContext';
import { getString, getLanguage } from '../App'; import { getLanguage } from '../Language/Language';
import { getString } from '../Language/LanguageStrings'
import './Navigation.css'; import './Navigation.css';