diff options
| author | Ben Woodward <ben@bdw.to> | 2026-01-24 20:46:24 -0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-01-24 20:46:24 -0800 |
| commit | e1927f633cab988ceeb8bcd51dd03aaa5b3f2392 (patch) | |
| tree | a776d7287d2c9583151f2567d9cf4f22d010aeed /src | |
| parent | fbde2cd27669ac29e1c0bc9393f9a83ffa93f8c6 (diff) | |
Updates jan 2026 (#313)
* Update dependencies to latest versions and migrate to React 19
- Update all dependencies to latest versions
- Migrate to React 19 createRoot API (replaces deprecated ReactDOM.render)
- Update qrcode.react import to v4 named export (QRCodeSVG)
* Format CSS with prettier
* Add Hebrew translation
* Add Slovak translation
* Add Malagasy translation
* Add Bangla translation
* Init field
* Change the logic concerning number of cards to print
* fix/clean
* Fix Increment-field-ID-in-the-print-area
* Increment-field-ID-in-the-print-area
* Review id implementation logic
* Fix git commit
* Handle Query parameter
* Fix package.json
* Fix query parameter for language
* fix query parameter for language
* Fix EncryptionModeChange query parameters // Error when non in query
* Fix EncryptionModeChange query parameters // Error when empty in query
* clean Setting.js don't need to import i18n
* clean file App.js
* first iteration for Hash
* Add Esperanto translation
* Update translations for Occitan
2 lines added
* Update translations.js
Added Swiss German to the Translations JavaScript-File
* Update translations.js
Removed custom Translations-Strings of my own Version.
* Update README.md
* Format translations.js with prettier
---------
Co-authored-by: Ido Bronfeld <idobronfeld@gmail.com>
Co-authored-by: Matej Kubinec <matej.kubinec@outlook.com>
Co-authored-by: mpilasy <88362233+mpilasy@users.noreply.github.com>
Co-authored-by: Tarek Hasan <94107336+Tarek-Hasan@users.noreply.github.com>
Co-authored-by: ofostier <ofostier@gmail.com>
Co-authored-by: zeecho <30541894+zeecho@users.noreply.github.com>
Co-authored-by: Mejans <61360811+Mejans@users.noreply.github.com>
Co-authored-by: Jan Zehnder <44242812+NZehnder@users.noreply.github.com>
Diffstat (limited to 'src')
| -rw-r--r-- | src/App.js | 115 | ||||
| -rw-r--r-- | src/components/Settings.js | 1 | ||||
| -rw-r--r-- | src/components/WifiCard.js | 13 | ||||
| -rw-r--r-- | src/components/style.css | 7 | ||||
| -rw-r--r-- | src/components/useHashParam.js | 48 | ||||
| -rw-r--r-- | src/index.js | 8 | ||||
| -rw-r--r-- | src/translations.js | 259 |
7 files changed, 410 insertions, 41 deletions
| @@ -1,38 +1,105 @@ | |||
| 1 | import { Button, Heading, Link, Pane, Paragraph } from 'evergreen-ui'; | 1 | import { Button, Heading, Link, Pane, Paragraph } from 'evergreen-ui'; |
| 2 | import React, { useEffect, useRef, useState } from 'react'; | 2 | import React, { useEffect, useRef, useState, useCallback } from 'react'; |
| 3 | import { useTranslation } from 'react-i18next'; | 3 | import { useTranslation } from 'react-i18next'; |
| 4 | import logo from '../src/images/wifi.png'; | 4 | import logo from '../src/images/wifi.png'; |
| 5 | import { Settings } from './components/Settings'; | 5 | import { Settings } from './components/Settings'; |
| 6 | import { WifiCard } from './components/WifiCard'; | 6 | import { WifiCard } from './components/WifiCard'; |
| 7 | import './style.css'; | 7 | import './style.css'; |
| 8 | import { Translations } from './translations'; | 8 | import { Translations } from './translations'; |
| 9 | import useHashParam from './components/useHashParam'; | ||
| 9 | 10 | ||
| 10 | function App() { | 11 | function App() { |
| 12 | const getHashSearchParams = (location) => { | ||
| 13 | const hash = location.hash.slice(1); | ||
| 14 | const [prefix, query] = hash.split('?'); | ||
| 15 | |||
| 16 | return [prefix, new URLSearchParams(query)]; | ||
| 17 | }; | ||
| 18 | const getHashParam = (key, location = window.location) => { | ||
| 19 | const [_, searchParams] = getHashSearchParams(location); | ||
| 20 | return searchParams.get(key); | ||
| 21 | }; | ||
| 22 | const setHashParam = (key, value, location = window.location) => { | ||
| 23 | const [prefix, searchParams] = getHashSearchParams(location); | ||
| 24 | |||
| 25 | if (typeof value === 'undefined') { | ||
| 26 | searchParams.delete(key); | ||
| 27 | } else { | ||
| 28 | searchParams.set(key, value); | ||
| 29 | } | ||
| 30 | |||
| 31 | const search = searchParams.toString(); | ||
| 32 | location.hash = search ? `${prefix}?${search}` : prefix; | ||
| 33 | }; | ||
| 34 | |||
| 35 | let pssid = getHashParam('ssid'); //params.get('ssid') || ''; | ||
| 36 | let ppassword = getHashParam('password') || ''; | ||
| 37 | let pencryptionMode = | ||
| 38 | getHashParam('encryptionMode') !== null | ||
| 39 | ? getHashParam('encryptionMode') | ||
| 40 | : 'WPA'; | ||
| 41 | let peapMethod = getHashParam('eapMethod') || 'PWD'; | ||
| 42 | let peapIdentity = getHashParam('eapIdentity') || ''; | ||
| 43 | let phidePassword = | ||
| 44 | getHashParam('hidePassword') === null | ||
| 45 | ? false | ||
| 46 | : getHashParam('hidePassword').toLowerCase() === 'true' | ||
| 47 | ? true | ||
| 48 | : false; | ||
| 49 | let phiddenSSID = | ||
| 50 | getHashParam('hiddenSSID') === null | ||
| 51 | ? false | ||
| 52 | : getHashParam('hiddenSSID').toLowerCase() === 'true' | ||
| 53 | ? true | ||
| 54 | : false; | ||
| 55 | let pportrait = | ||
| 56 | getHashParam('portrait') === null | ||
| 57 | ? false | ||
| 58 | : getHashParam('portrait').toLowerCase() === 'true' | ||
| 59 | ? true | ||
| 60 | : false || false; | ||
| 61 | let padditionalCards = getHashParam('additionalCards') || 1; | ||
| 62 | let phideTip = | ||
| 63 | getHashParam('hideTip') === null | ||
| 64 | ? false | ||
| 65 | : getHashParam('hideTip').toLowerCase() === 'true' | ||
| 66 | ? true | ||
| 67 | : false; | ||
| 68 | let planguage = | ||
| 69 | getHashParam('lng') === null || getHashParam('lng').toLowerCase() === '' | ||
| 70 | ? 'en-US' | ||
| 71 | : getHashParam('lng'); | ||
| 72 | |||
| 73 | // ######################## | ||
| 11 | const html = document.querySelector('html'); | 74 | const html = document.querySelector('html'); |
| 75 | |||
| 12 | const { t, i18n } = useTranslation(); | 76 | const { t, i18n } = useTranslation(); |
| 13 | const firstLoad = useRef(true); | 77 | const firstLoad = useRef(true); |
| 14 | const [settings, setSettings] = useState({ | 78 | const [settings, setSettings] = useState({ |
| 15 | // Network SSID name | 79 | // Network SSID name |
| 16 | ssid: '', | 80 | ssid: pssid, |
| 17 | // Network password | 81 | // Network password |
| 18 | password: '', | 82 | password: ppassword, |
| 19 | // Settings: Network encryption mode | 83 | // Settings: Network encryption mode |
| 20 | encryptionMode: 'WPA', | 84 | encryptionMode: pencryptionMode, |
| 21 | // Settings: EAP Method | 85 | // Settings: EAP Method |
| 22 | eapMethod: 'PWD', | 86 | eapMethod: peapMethod, |
| 23 | // Settings: EAP identity | 87 | // Settings: EAP identity |
| 24 | eapIdentity: '', | 88 | eapIdentity: peapIdentity, |
| 25 | // Settings: Hide password on the printed card | 89 | // Settings: Hide password on the printed card |
| 26 | hidePassword: false, | 90 | hidePassword: phidePassword, |
| 27 | // Settings: Mark your network as hidden SSID | 91 | // Settings: Mark your network as hidden SSID |
| 28 | hiddenSSID: false, | 92 | hiddenSSID: phiddenSSID, |
| 29 | // Settings: Portrait orientation | 93 | // Settings: Portrait orientation |
| 30 | portrait: false, | 94 | portrait: pportrait, |
| 31 | // Settings: Additional cards | 95 | // Settings: Additional cards |
| 32 | additionalCards: 0, | 96 | additionalCards: padditionalCards, |
| 33 | // Settings: Show tip (legend) on card | 97 | // Settings: Show tip (legend) on card |
| 34 | hideTip: false, | 98 | hideTip: phideTip, |
| 99 | // Display language | ||
| 100 | lng: planguage, | ||
| 35 | }); | 101 | }); |
| 102 | |||
| 36 | const [errors, setErrors] = useState({ | 103 | const [errors, setErrors] = useState({ |
| 37 | ssidError: '', | 104 | ssidError: '', |
| 38 | passwordError: '', | 105 | passwordError: '', |
| @@ -48,6 +115,8 @@ function App() { | |||
| 48 | const onChangeLanguage = (language) => { | 115 | const onChangeLanguage = (language) => { |
| 49 | html.style.direction = htmlDirection(language); | 116 | html.style.direction = htmlDirection(language); |
| 50 | i18n.changeLanguage(language); | 117 | i18n.changeLanguage(language); |
| 118 | |||
| 119 | setSettings({ ...settings, lng: language }); | ||
| 51 | }; | 120 | }; |
| 52 | 121 | ||
| 53 | const onPrint = () => { | 122 | const onPrint = () => { |
| @@ -126,7 +195,7 @@ function App() { | |||
| 126 | }; | 195 | }; |
| 127 | const onAdditionalCardsChange = (additionalCardsStr) => { | 196 | const onAdditionalCardsChange = (additionalCardsStr) => { |
| 128 | const amount = parseInt(additionalCardsStr); | 197 | const amount = parseInt(additionalCardsStr); |
| 129 | amount >= 0 && setSettings({ ...settings, additionalCards: amount }); | 198 | amount >= 1 && setSettings({ ...settings, additionalCards: amount }); |
| 130 | }; | 199 | }; |
| 131 | const onHideTipChange = (hideTip) => { | 200 | const onHideTipChange = (hideTip) => { |
| 132 | setSettings({ ...settings, hideTip }); | 201 | setSettings({ ...settings, hideTip }); |
| @@ -136,22 +205,34 @@ function App() { | |||
| 136 | firstLoad.current = false; | 205 | firstLoad.current = false; |
| 137 | }; | 206 | }; |
| 138 | 207 | ||
| 208 | const generateUrl = () => { | ||
| 209 | Object.entries(settings).map(([key, value]) => { | ||
| 210 | //console.log(key+" = " + value) | ||
| 211 | setHashParam(key, value); | ||
| 212 | if (key === 'ssid') setName(value); | ||
| 213 | return true; | ||
| 214 | }); | ||
| 215 | }; | ||
| 216 | const [name, setName] = useHashParam('name'); | ||
| 217 | |||
| 139 | useEffect(() => { | 218 | useEffect(() => { |
| 140 | // Ensure the page direction is set properly on first load | 219 | // Ensure the page direction is set properly on first load |
| 141 | if (htmlDirection() === 'rtl') { | 220 | if (htmlDirection() === 'rtl') { |
| 142 | html.style.direction = 'rtl'; | 221 | html.style.direction = 'rtl'; |
| 143 | } | 222 | } |
| 223 | generateUrl(); | ||
| 144 | }); | 224 | }); |
| 145 | 225 | ||
| 146 | return ( | 226 | return ( |
| 147 | <Pane> | 227 | <Pane> |
| 228 | Hello{' '} | ||
| 229 | {name ? name + '! You name is stored in hash params #️⃣' : 'visitor!'} | ||
| 148 | <Pane display="flex"> | 230 | <Pane display="flex"> |
| 149 | <img alt="icon" src={logo} width="32" height="32" /> | 231 | <img alt="icon" src={logo} width="32" height="32" /> |
| 150 | <Heading size={900} paddingRight={16} paddingLeft={16}> | 232 | <Heading size={900} paddingRight={16} paddingLeft={16}> |
| 151 | {t('title')} | 233 | {t('title')} |
| 152 | </Heading> | 234 | </Heading> |
| 153 | </Pane> | 235 | </Pane> |
| 154 | |||
| 155 | <Pane> | 236 | <Pane> |
| 156 | <Paragraph marginTop={12}>{t('desc.use')}</Paragraph> | 237 | <Paragraph marginTop={12}>{t('desc.use')}</Paragraph> |
| 157 | 238 | ||
| @@ -163,7 +244,6 @@ function App() { | |||
| 163 | . | 244 | . |
| 164 | </Paragraph> | 245 | </Paragraph> |
| 165 | </Pane> | 246 | </Pane> |
| 166 | |||
| 167 | <Pane> | 247 | <Pane> |
| 168 | <WifiCard | 248 | <WifiCard |
| 169 | settings={settings} | 249 | settings={settings} |
| @@ -175,7 +255,6 @@ function App() { | |||
| 175 | onPasswordChange={onPasswordChange} | 255 | onPasswordChange={onPasswordChange} |
| 176 | /> | 256 | /> |
| 177 | </Pane> | 257 | </Pane> |
| 178 | |||
| 179 | <Settings | 258 | <Settings |
| 180 | settings={settings} | 259 | settings={settings} |
| 181 | firstLoad={firstLoad} | 260 | firstLoad={firstLoad} |
| @@ -189,7 +268,6 @@ function App() { | |||
| 189 | onAdditionalCardsChange={onAdditionalCardsChange} | 268 | onAdditionalCardsChange={onAdditionalCardsChange} |
| 190 | onHideTipChange={onHideTipChange} | 269 | onHideTipChange={onHideTipChange} |
| 191 | /> | 270 | /> |
| 192 | |||
| 193 | <Button | 271 | <Button |
| 194 | id="print" | 272 | id="print" |
| 195 | appearance="primary" | 273 | appearance="primary" |
| @@ -200,9 +278,10 @@ function App() { | |||
| 200 | {t('button.print')} | 278 | {t('button.print')} |
| 201 | </Button> | 279 | </Button> |
| 202 | <Pane id="print-area"> | 280 | <Pane id="print-area"> |
| 203 | {settings.additionalCards >= 0 && | 281 | {settings.additionalCards >= 1 && |
| 204 | [...Array(settings.additionalCards + 1)].map((el, idx) => ( | 282 | [...Array(settings.additionalCards)].map((el, idx) => ( |
| 205 | <WifiCard | 283 | <WifiCard |
| 284 | keyid={idx} | ||
| 206 | key={`card-nr-${idx}`} | 285 | key={`card-nr-${idx}`} |
| 207 | settings={settings} | 286 | settings={settings} |
| 208 | ssidError={errors.ssidError} | 287 | ssidError={errors.ssidError} |
diff --git a/src/components/Settings.js b/src/components/Settings.js index 837b4f0..0485aaf 100644 --- a/src/components/Settings.js +++ b/src/components/Settings.js | |||
| @@ -20,6 +20,7 @@ export const Settings = (props) => { | |||
| 20 | { label: 'WEP', value: 'WEP' }, | 20 | { label: 'WEP', value: 'WEP' }, |
| 21 | ]; | 21 | ]; |
| 22 | const eapMethods = [{ label: 'PWD', value: 'PWD' }]; | 22 | const eapMethods = [{ label: 'PWD', value: 'PWD' }]; |
| 23 | |||
| 23 | const langSelectDefaultValue = () => { | 24 | const langSelectDefaultValue = () => { |
| 24 | const t = Translations.filter((t) => t.id === i18n.language); | 25 | const t = Translations.filter((t) => t.id === i18n.language); |
| 25 | if (t.length !== 1) { | 26 | if (t.length !== 1) { |
diff --git a/src/components/WifiCard.js b/src/components/WifiCard.js index 70e1189..e977ac8 100644 --- a/src/components/WifiCard.js +++ b/src/components/WifiCard.js | |||
| @@ -8,7 +8,7 @@ import { | |||
| 8 | Text, | 8 | Text, |
| 9 | TextareaField, | 9 | TextareaField, |
| 10 | } from 'evergreen-ui'; | 10 | } from 'evergreen-ui'; |
| 11 | import QRCode from 'qrcode.react'; | 11 | import { QRCodeSVG as QRCode } from 'qrcode.react'; |
| 12 | import { useEffect, useState } from 'react'; | 12 | import { useEffect, useState } from 'react'; |
| 13 | import { useTranslation } from 'react-i18next'; | 13 | import { useTranslation } from 'react-i18next'; |
| 14 | import logo from '../../src/images/wifi.png'; | 14 | import logo from '../../src/images/wifi.png'; |
| @@ -71,6 +71,9 @@ export const WifiCard = (props) => { | |||
| 71 | return !eapIdentityFieldLabel() ? '' : t('wifi.encryption.eapMethod'); | 71 | return !eapIdentityFieldLabel() ? '' : t('wifi.encryption.eapMethod'); |
| 72 | }; | 72 | }; |
| 73 | 73 | ||
| 74 | const keyid = props.keyid || ''; | ||
| 75 | const suffixKeyID = (prefix) => `${prefix}-${keyid}`; | ||
| 76 | |||
| 74 | return ( | 77 | return ( |
| 75 | <Card | 78 | <Card |
| 76 | className="card-print" | 79 | className="card-print" |
| @@ -102,7 +105,7 @@ export const WifiCard = (props) => { | |||
| 102 | 105 | ||
| 103 | <Pane width={'100%'}> | 106 | <Pane width={'100%'}> |
| 104 | <TextareaField | 107 | <TextareaField |
| 105 | id="ssid" | 108 | id={suffixKeyID('ssid')} |
| 106 | type="text" | 109 | type="text" |
| 107 | marginBottom={5} | 110 | marginBottom={5} |
| 108 | autoComplete="off" | 111 | autoComplete="off" |
| @@ -120,7 +123,7 @@ export const WifiCard = (props) => { | |||
| 120 | {props.settings.encryptionMode === 'WPA2-EAP' && ( | 123 | {props.settings.encryptionMode === 'WPA2-EAP' && ( |
| 121 | <> | 124 | <> |
| 122 | <TextareaField | 125 | <TextareaField |
| 123 | id="eapmethod" | 126 | id={suffixKeyID('eapmethod')} |
| 124 | type="text" | 127 | type="text" |
| 125 | marginBottom={5} | 128 | marginBottom={5} |
| 126 | readOnly={true} | 129 | readOnly={true} |
| @@ -130,7 +133,7 @@ export const WifiCard = (props) => { | |||
| 130 | /> | 133 | /> |
| 131 | 134 | ||
| 132 | <TextareaField | 135 | <TextareaField |
| 133 | id="identity" | 136 | id={suffixKeyID('identity')} |
| 134 | type="text" | 137 | type="text" |
| 135 | marginBottom={5} | 138 | marginBottom={5} |
| 136 | autoComplete="off" | 139 | autoComplete="off" |
| @@ -150,7 +153,7 @@ export const WifiCard = (props) => { | |||
| 150 | )} | 153 | )} |
| 151 | {!(props.settings.hidePassword || !props.settings.encryptionMode) && ( | 154 | {!(props.settings.hidePassword || !props.settings.encryptionMode) && ( |
| 152 | <TextareaField | 155 | <TextareaField |
| 153 | id="password" | 156 | id={suffixKeyID('password')} |
| 154 | type="text" | 157 | type="text" |
| 155 | maxLength="63" | 158 | maxLength="63" |
| 156 | autoComplete="off" | 159 | autoComplete="off" |
diff --git a/src/components/style.css b/src/components/style.css index 10eac9b..87ba63a 100644 --- a/src/components/style.css +++ b/src/components/style.css | |||
| @@ -67,6 +67,13 @@ button { | |||
| 67 | #print-area, | 67 | #print-area, |
| 68 | #print-area * { | 68 | #print-area * { |
| 69 | visibility: visible; | 69 | visibility: visible; |
| 70 | /* For printing, use a font stack that prioritizes system fonts | ||
| 71 | to ensure CJK characters are rendered correctly in Chrome. */ | ||
| 72 | font-family: | ||
| 73 | 'PingFang SC', 'Noto Sans SC', 'Noto Sans TC', 'Noto Sans JP', | ||
| 74 | 'Noto Sans KR', 'Microsoft YaHei', serif; | ||
| 75 | font-weight: 500; | ||
| 76 | font-style: semibold; | ||
| 70 | } | 77 | } |
| 71 | #print-area { | 78 | #print-area { |
| 72 | position: absolute; | 79 | position: absolute; |
diff --git a/src/components/useHashParam.js b/src/components/useHashParam.js new file mode 100644 index 0000000..e43e1e4 --- /dev/null +++ b/src/components/useHashParam.js | |||
| @@ -0,0 +1,48 @@ | |||
| 1 | import { useState, useEffect, useCallback } from 'react'; | ||
| 2 | |||
| 3 | const getHashSearchParams = (location) => { | ||
| 4 | const hash = location.hash.slice(1); | ||
| 5 | const [prefix, query] = hash.split('?'); | ||
| 6 | |||
| 7 | return [prefix, new URLSearchParams(query)]; | ||
| 8 | }; | ||
| 9 | |||
| 10 | const getHashParam = (key, location = window.location) => { | ||
| 11 | const [_, searchParams] = getHashSearchParams(location); | ||
| 12 | return searchParams.get(key); | ||
| 13 | }; | ||
| 14 | |||
| 15 | const setHashParam = (key, value, location = window.location) => { | ||
| 16 | const [prefix, searchParams] = getHashSearchParams(location); | ||
| 17 | |||
| 18 | if (typeof value === 'undefined') { | ||
| 19 | searchParams.delete(key); | ||
| 20 | } else { | ||
| 21 | searchParams.set(key, value); | ||
| 22 | } | ||
| 23 | |||
| 24 | const search = searchParams.toString(); | ||
| 25 | location.hash = search ? `${prefix}?${search}` : prefix; | ||
| 26 | }; | ||
| 27 | |||
| 28 | const useHashParam = (key) => { | ||
| 29 | const [innerValue, setInnerValue] = useState(); | ||
| 30 | |||
| 31 | useEffect(() => { | ||
| 32 | const handleHashChange = () => setInnerValue(getHashParam(key)); | ||
| 33 | handleHashChange(); | ||
| 34 | window.addEventListener('hashchange', handleHashChange); | ||
| 35 | return () => window.removeEventListener('hashchange', handleHashChange); | ||
| 36 | }, [key]); | ||
| 37 | |||
| 38 | const setValue = useCallback( | ||
| 39 | (value) => { | ||
| 40 | setHashParam(key, value); | ||
| 41 | }, | ||
| 42 | [key] | ||
| 43 | ); | ||
| 44 | |||
| 45 | return [innerValue, setValue]; | ||
| 46 | }; | ||
| 47 | |||
| 48 | export default useHashParam; | ||
diff --git a/src/index.js b/src/index.js index 30091ec..07ea073 100644 --- a/src/index.js +++ b/src/index.js | |||
| @@ -1,11 +1,11 @@ | |||
| 1 | import React from 'react'; | 1 | import React from 'react'; |
| 2 | import ReactDOM from 'react-dom'; | 2 | import { createRoot } from 'react-dom/client'; |
| 3 | import App from './App'; | 3 | import App from './App'; |
| 4 | import './i18n'; | 4 | import './i18n'; |
| 5 | 5 | ||
| 6 | ReactDOM.render( | 6 | const root = createRoot(document.getElementById('root')); |
| 7 | root.render( | ||
| 7 | <React.StrictMode> | 8 | <React.StrictMode> |
| 8 | <App /> | 9 | <App /> |
| 9 | </React.StrictMode>, | 10 | </React.StrictMode> |
| 10 | document.getElementById('root') | ||
| 11 | ); | 11 | ); |
diff --git a/src/translations.js b/src/translations.js index 479afc3..2f033c1 100644 --- a/src/translations.js +++ b/src/translations.js | |||
| @@ -14,7 +14,7 @@ export const Translations = [ | |||
| 14 | 'wifi.login': 'WiFi Login', | 14 | 'wifi.login': 'WiFi Login', |
| 15 | 'wifi.name': 'Network name', | 15 | 'wifi.name': 'Network name', |
| 16 | 'wifi.name.hiddenSSID': 'Hidden SSID', | 16 | 'wifi.name.hiddenSSID': 'Hidden SSID', |
| 17 | 'cards.additional': 'Additional cards to print', | 17 | 'cards.additional': 'Number of cards to print', |
| 18 | 'cards.tip.hide': 'Hide tip (legend)', | 18 | 'cards.tip.hide': 'Hide tip (legend)', |
| 19 | 'wifi.name.placeholder': 'WiFi Network name', | 19 | 'wifi.name.placeholder': 'WiFi Network name', |
| 20 | 'wifi.password': 'Password', | 20 | 'wifi.password': 'Password', |
| @@ -38,6 +38,44 @@ export const Translations = [ | |||
| 38 | }, | 38 | }, |
| 39 | }, | 39 | }, |
| 40 | { | 40 | { |
| 41 | id: 'he-IL', | ||
| 42 | name: 'Hebrew - עברית', | ||
| 43 | rtl: true, | ||
| 44 | translation: { | ||
| 45 | title: 'כרטיס WiFi', | ||
| 46 | 'desc.use': | ||
| 47 | 'הדפיסו כרטיס פשוט עם פרטי הכניסה שלכם לרשת ה-WiFi. הדביקו אותו למקרר, שמרו אותו בארנק וכו.', | ||
| 48 | 'desc.privacy': | ||
| 49 | 'פרטי ה WiFi שלכם לעולם לא נשלחים לשרת. אתר זה אינו עוקב, משתמש באנליטיקות או טביעות אצבע. צפה ב', | ||
| 50 | 'desc.source': 'קוד המקור', | ||
| 51 | 'wifi.identity': 'זהות', | ||
| 52 | 'wifi.identity.placeholder': 'שם משתמש', | ||
| 53 | 'wifi.login': 'פרטי WiFi', | ||
| 54 | 'wifi.name': 'שם רשת', | ||
| 55 | 'wifi.name.hiddenSSID': 'רשת נסתרת (SSID)', | ||
| 56 | 'cards.additional': 'מספר כרטיסים נוספים להדפסה', | ||
| 57 | 'cards.tip.hide': 'הסתרת טיפ (מקרא)', | ||
| 58 | 'wifi.name.placeholder': 'שם רשת WiFi', | ||
| 59 | 'wifi.password': 'סיסמה', | ||
| 60 | 'wifi.password.placeholder': 'סיסמה', | ||
| 61 | 'wifi.password.hide': 'הסתר סיסמה', | ||
| 62 | 'wifi.password.encryption': 'הצפנה', | ||
| 63 | 'wifi.password.encryption.none': 'None', | ||
| 64 | 'wifi.encryption.eapMethod': 'שיטת אימות EAP', | ||
| 65 | 'wifi.tip': 'כוונו את מצלמת הטלפון אל קוד ה-QR כדי להתחבר אוטומטית', | ||
| 66 | 'wifi.alert.name': 'שם רשת לא יכול להיות ריק', | ||
| 67 | 'wifi.alert.password': 'סיסמה לא יכולה להיות ריקה', | ||
| 68 | 'wifi.alert.password.length.5': | ||
| 69 | 'הסיסמה חייבת להיות באורך של לפחות 5 תווים, או שנה את ההצפנה ל "None"', | ||
| 70 | 'wifi.alert.password.length.8': | ||
| 71 | 'הסיסמה חייבת להיות באורך של לפחות 8 תווים, או שנה את ההצפנה ל "None"', | ||
| 72 | 'wifi.alert.eapIdentity': 'זהות לא יכולה להיות ריקה', | ||
| 73 | 'button.rotate': 'סובב', | ||
| 74 | 'button.print': 'הדפס', | ||
| 75 | select: 'בחר שפה', | ||
| 76 | }, | ||
| 77 | }, | ||
| 78 | { | ||
| 41 | id: 'sv-SE', | 79 | id: 'sv-SE', |
| 42 | name: 'Swedish - Svenska', | 80 | name: 'Swedish - Svenska', |
| 43 | translation: { | 81 | translation: { |
| @@ -134,12 +172,14 @@ export const Translations = [ | |||
| 134 | id: 'zh-CN', | 172 | id: 'zh-CN', |
| 135 | name: 'Simplified Chinese - 简体中文', | 173 | name: 'Simplified Chinese - 简体中文', |
| 136 | translation: { | 174 | translation: { |
| 137 | title: 'WiFi 连接卡', | 175 | title: 'Wi-Fi 连接卡', |
| 138 | 'desc.use': | 176 | 'desc.use': |
| 139 | '打印一张带有 WiFi 详细信息的登录卡片,把它贴到冰箱上、放到你的钱包里...', | 177 | '打印一张带有 Wi-Fi 详细信息的登录卡片,把它贴到冰箱上、放到你的钱包里...', |
| 140 | 'desc.privacy': | 178 | 'desc.privacy': |
| 141 | '您的 WiFi 信息永远不会发送到服务端。本网站不使用追踪、分析或指纹识别。查看', | 179 | '您的 WiFi 信息永远不会发送到服务端。本网站不使用追踪、分析或指纹识别。查看', |
| 142 | 'desc.source': '源码', | 180 | 'desc.source': '源码', |
| 181 | 'cards.additional': '额外打印卡片数量', | ||
| 182 | 'cards.tip.hide': '隐藏提示(图例)', | ||
| 143 | 'wifi.identity': '身份', | 183 | 'wifi.identity': '身份', |
| 144 | 'wifi.identity.placeholder': '用户名', | 184 | 'wifi.identity.placeholder': '用户名', |
| 145 | 'wifi.login': '连接 WiFi', | 185 | 'wifi.login': '连接 WiFi', |
| @@ -167,16 +207,18 @@ export const Translations = [ | |||
| 167 | id: 'zh-HK', | 207 | id: 'zh-HK', |
| 168 | name: 'Traditional Chinese - 繁體中文 香港', | 208 | name: 'Traditional Chinese - 繁體中文 香港', |
| 169 | translation: { | 209 | translation: { |
| 170 | title: 'WiFi 連接', | 210 | title: 'Wi-Fi 連接', |
| 171 | 'desc.use': | 211 | 'desc.use': |
| 172 | '打印一張 WiFi 詳細資料嘅連接卡,將佢癡喺雪櫃上面、放喺銀包入面... ', | 212 | '打印一張 Wi-Fi 詳細資料嘅連接卡,你以佢癡喺雪櫃上面、放喺銀包入面... ', |
| 173 | 'desc.privacy': | 213 | 'desc.privacy': |
| 174 | '你嘅 WiFi 資料永遠唔會傳送去網站伺服器。呢個網站無使用任何追蹤、分析或者裝置指紋辨識。睇吓', | 214 | '你嘅 Wi-Fi 資料永遠唔會傳送去網站伺服器。呢個網站唔會使用任何追蹤、分析或者裝置指紋辨識。', |
| 175 | 'desc.source': '源代碼', | 215 | 'desc.source': '撳呢度睇源代碼', |
| 176 | 'wifi.login': '連接 WiFi', | 216 | 'cards.additional': '要打印幾多張 Wi-Fi 卡片?', |
| 217 | 'cards.tip.hide': '隱藏提示(圖例)', | ||
| 218 | 'wifi.login': '連接 Wi-Fi', | ||
| 177 | 'wifi.name': '網絡名稱', | 219 | 'wifi.name': '網絡名稱', |
| 178 | 'wifi.name.hiddenSSID': '隐藏 SSID', | 220 | 'wifi.name.hiddenSSID': '隐藏 SSID', |
| 179 | 'wifi.name.placeholder': 'WiFi 網絡名稱', | 221 | 'wifi.name.placeholder': 'Wi-Fi 網絡名稱', |
| 180 | 'wifi.password': '密碼', | 222 | 'wifi.password': '密碼', |
| 181 | 'wifi.password.placeholder': '密碼', | 223 | 'wifi.password.placeholder': '密碼', |
| 182 | 'wifi.password.hide': '隐藏密码', | 224 | 'wifi.password.hide': '隐藏密码', |
| @@ -201,8 +243,10 @@ export const Translations = [ | |||
| 201 | 'desc.use': | 243 | 'desc.use': |
| 202 | '打印一张带有 Wi-Fi 详细信息嘅连接咭,你可以将佢黐喺冰箱上面,或者放喺银包入面...', | 244 | '打印一张带有 Wi-Fi 详细信息嘅连接咭,你可以将佢黐喺冰箱上面,或者放喺银包入面...', |
| 203 | 'desc.privacy': | 245 | 'desc.privacy': |
| 204 | '你嘅 Wi-Fi 信息永远不会发送到服务端。本网站不使用追踪、分析或指纹识别。喺度睇', | 246 | '你嘅 Wi-Fi 信息永远不会发送到服务端。本网站不使用追踪、分析或指纹识别。', |
| 205 | 'desc.source': '源代码', | 247 | 'desc.source': '喺度睇源代码', |
| 248 | 'cards.additional': '要*多打印*多少张 Wi-Fi 卡片?', | ||
| 249 | 'cards.tip.hide': '隐藏提示(图例)', | ||
| 206 | 'wifi.identity': '身份', | 250 | 'wifi.identity': '身份', |
| 207 | 'wifi.identity.placeholder': '用户名', | 251 | 'wifi.identity.placeholder': '用户名', |
| 208 | 'wifi.login': '连接 Wi-Fi', | 252 | 'wifi.login': '连接 Wi-Fi', |
| @@ -230,12 +274,14 @@ export const Translations = [ | |||
| 230 | id: 'zh-TW', | 274 | id: 'zh-TW', |
| 231 | name: 'Traditional Chinese - 繁體中文 台灣', | 275 | name: 'Traditional Chinese - 繁體中文 台灣', |
| 232 | translation: { | 276 | translation: { |
| 233 | title: 'WiFi Card', | 277 | title: 'Wi-Fi Card', |
| 234 | 'desc.use': | 278 | 'desc.use': |
| 235 | '列印一張含有 WiFi 連接資訊的卡片,將它貼在冰箱、放在你的錢包裡... ', | 279 | '列印一張含有 Wi-Fi 連接資訊的卡片,將它貼在冰箱、放在你的錢包裡... ', |
| 236 | 'desc.privacy': | 280 | 'desc.privacy': |
| 237 | '您的 WiFi 訊息永遠不會被送到伺服器。本網站不使用追蹤、分析或指紋識別。查看', | 281 | '您的 Wi-Fi 訊息永遠不會被送到伺服器。本網站不使用追蹤、分析或指紋識別。查看', |
| 238 | 'desc.source': '原始碼', | 282 | 'desc.source': '原始碼', |
| 283 | 'cards.additional': '额外列印卡片數量', | ||
| 284 | 'cards.tip.hide': '隱藏提示(圖例)', | ||
| 239 | 'wifi.login': '連接 WiFi', | 285 | 'wifi.login': '連接 WiFi', |
| 240 | 'wifi.name': '網路名稱', | 286 | 'wifi.name': '網路名稱', |
| 241 | 'wifi.name.hiddenSSID': '隱藏 SSID', | 287 | 'wifi.name.hiddenSSID': '隱藏 SSID', |
| @@ -478,6 +524,40 @@ export const Translations = [ | |||
| 478 | }, | 524 | }, |
| 479 | }, | 525 | }, |
| 480 | { | 526 | { |
| 527 | id: 'de-CH', | ||
| 528 | name: 'German - Schwizerdütsch', | ||
| 529 | translation: { | ||
| 530 | title: 'simple.WiFi Card Creator', | ||
| 531 | 'desc.use': | ||
| 532 | 'Sie chönd met dem Tool en eifachi Charte mit ehrene WLAN-Date erstelle. Verwänded Sie die, om eifach ehres interne WLAN unter de Metarbeiter zteile oder om es GASCHT-WLAN mit em Chond zteile.', | ||
| 533 | 'desc.private': 'Dini Zugegangsdate werded nie zom Server gsändet.', | ||
| 534 | 'wifi.identity': 'Identität', | ||
| 535 | 'wifi.identity.placeholder': 'Notzername', | ||
| 536 | 'wifi.login': 'WLAN-Zugangsdate', | ||
| 537 | 'wifi.name': 'WLAN-Netzwärchname', | ||
| 538 | 'wifi.name.placeholder': 'WLAN-Netzwärchname', | ||
| 539 | 'wifi.password': 'Passwort', | ||
| 540 | 'wifi.password.placeholder': 'Passwort', | ||
| 541 | 'wifi.password.hide': 'Passwort verstecke', | ||
| 542 | 'wifi.name.hiddenSSID': 'Versteckti SSID', | ||
| 543 | 'wifi.password.encryption': 'Verschlösselig', | ||
| 544 | 'wifi.password.encryption.none': 'Keini', | ||
| 545 | 'wifi.encryption.eapMethod': 'EAP Methode', | ||
| 546 | 'wifi.tip': | ||
| 547 | 'Zeig mit dinere Kamera vom Handys auf de QR-Code, um automatisch en Verbindung herzstelle', | ||
| 548 | 'wifi.alert.name': 'De Netzwerkname dörf ned leer sii', | ||
| 549 | 'wifi.alert.password': 'Das Passwort dörf ned leer sii', | ||
| 550 | 'wifi.alert.password.length.5': | ||
| 551 | 'Das Passwort muss mendestends 5 Zeiche lang sii, oder stell d Verschlösselig auf "Keini"', | ||
| 552 | 'wifi.alert.password.8': | ||
| 553 | 'Das Passwort muss mindestends 8 Zeichen lang sii, oder stell d Verschlösselig auf "Keini"', | ||
| 554 | 'wifi.alert.eapIdentity': 'Die Identität darf ned leer sii', | ||
| 555 | 'button.rotate': 'Dreie', | ||
| 556 | 'button.print': 'Drocke', | ||
| 557 | select: 'Sprach uswähle', | ||
| 558 | }, | ||
| 559 | }, | ||
| 560 | { | ||
| 481 | id: 'el-GR', | 561 | id: 'el-GR', |
| 482 | name: 'Greek - Hellenic', | 562 | name: 'Greek - Hellenic', |
| 483 | translation: { | 563 | translation: { |
| @@ -578,6 +658,7 @@ export const Translations = [ | |||
| 578 | 'Le mot de passe doit au moins faire 8 caractères, ou changez le chiffrement en "Aucun"', | 658 | 'Le mot de passe doit au moins faire 8 caractères, ou changez le chiffrement en "Aucun"', |
| 579 | 'button.rotate': 'Pivoter', | 659 | 'button.rotate': 'Pivoter', |
| 580 | 'button.print': 'Imprimer', | 660 | 'button.print': 'Imprimer', |
| 661 | 'cards.additional': 'Nombre de cartes a imprimer', | ||
| 581 | select: 'Choisir la langue', | 662 | select: 'Choisir la langue', |
| 582 | }, | 663 | }, |
| 583 | }, | 664 | }, |
| @@ -596,6 +677,8 @@ export const Translations = [ | |||
| 596 | 'wifi.login': 'Connexion Wi-Fi', | 677 | 'wifi.login': 'Connexion Wi-Fi', |
| 597 | 'wifi.name': 'Nom de la ret', | 678 | 'wifi.name': 'Nom de la ret', |
| 598 | 'wifi.name.hiddenSSID': 'SSID amagat', | 679 | 'wifi.name.hiddenSSID': 'SSID amagat', |
| 680 | 'cards.additional': 'Carta suplementàrias d’imprimir', | ||
| 681 | 'cards.tip.hide': 'Rescondre astúcia (legenda)', | ||
| 599 | 'wifi.name.placeholder': 'Nom de la ret WiFi', | 682 | 'wifi.name.placeholder': 'Nom de la ret WiFi', |
| 600 | 'wifi.password': 'Senhal', | 683 | 'wifi.password': 'Senhal', |
| 601 | 'wifi.password.placeholder': 'Senhal', | 684 | 'wifi.password.placeholder': 'Senhal', |
| @@ -1080,6 +1163,154 @@ export const Translations = [ | |||
| 1080 | select: 'Vælg sprog', | 1163 | select: 'Vælg sprog', |
| 1081 | }, | 1164 | }, |
| 1082 | }, | 1165 | }, |
| 1166 | { | ||
| 1167 | id: 'sk-SK', | ||
| 1168 | name: 'Slovak - Slovenčina', | ||
| 1169 | translation: { | ||
| 1170 | title: 'WiFi Karta', | ||
| 1171 | 'desc.use': | ||
| 1172 | 'Vytlačte si jednoduchú kartu s prihlasovacími údajmi do siete Wi-Fi. Prilepte ju na chladničku, majte ju v peňaženke atď.', | ||
| 1173 | 'desc.privacy': | ||
| 1174 | 'Vaše Wi-Fi informácie sa nikdy neodošlú na server. Na tejto webovej stránke sa nepoužíva žiadne sledovanie, analytika ani fingerprinting. Zobraziť', | ||
| 1175 | 'desc.source': 'zdrojový kód', | ||
| 1176 | 'wifi.identity': 'Identita', | ||
| 1177 | 'wifi.identity.placeholder': 'Uživateľské meno', | ||
| 1178 | 'wifi.login': 'WiFi Login', | ||
| 1179 | 'wifi.name': 'Názov siete', | ||
| 1180 | 'wifi.name.hiddenSSID': 'Skryté SSID', | ||
| 1181 | 'cards.additional': 'Počet ďalších kariet na tlač', | ||
| 1182 | 'cards.tip.hide': 'Schovať nápovedu', | ||
| 1183 | 'wifi.name.placeholder': 'Názov siete WiFi', | ||
| 1184 | 'wifi.password': 'Heslo', | ||
| 1185 | 'wifi.password.placeholder': 'Heslo', | ||
| 1186 | 'wifi.password.hide': 'Schovať heslo', | ||
| 1187 | 'wifi.password.encryption': 'Šifrovanie', | ||
| 1188 | 'wifi.password.encryption.none': 'Žiadne', | ||
| 1189 | 'wifi.encryption.eapMethod': 'Metóda EAP', | ||
| 1190 | 'wifi.tip': | ||
| 1191 | 'Namierte fotoaparát telefónu na QR kód a automaticky sa pripojte.', | ||
| 1192 | 'wifi.alert.name': 'Názov siete nesmie byť prázdny', | ||
| 1193 | 'wifi.alert.password': 'Heslo nesmie byť prázdne', | ||
| 1194 | 'wifi.alert.password.length.5': | ||
| 1195 | 'Heslo musí mať aspoň 5 znakov, alebo zmeňte šifrovanie na "Žiadne"', | ||
| 1196 | 'wifi.alert.password.length.8': | ||
| 1197 | 'Heslo musí mať aspoň 8 znakov, alebo zmeňte šifrovanie na "Žiadne"', | ||
| 1198 | 'wifi.alert.eapIdentity': 'Identita nesmie byť prázdna', | ||
| 1199 | 'button.rotate': 'Otočiť', | ||
| 1200 | 'button.print': 'Vytlačiť', | ||
| 1201 | select: 'Vybrať jazyk', | ||
| 1202 | }, | ||
| 1203 | }, | ||
| 1204 | { | ||
| 1205 | id: 'mg-MG', | ||
| 1206 | name: 'Malagasy - Malagasy', | ||
| 1207 | translation: { | ||
| 1208 | title: 'Karatra Wifi', | ||
| 1209 | 'desc.use': | ||
| 1210 | "Antontay ny karatra tsotra maneho ny mombamomba ny wifi-nao. Apetraho eran'ny trano, ataovy any anaty boky, sns", | ||
| 1211 | 'desc.privacy': | ||
| 1212 | "Tsy tehirizinay na aiza na aiza izay zavatra ampidirinao eto. Tsy misy fanarahana na fitsikilovana eto amin'ity pejy ity. Misy fanazavana", | ||
| 1213 | 'desc.source': 'source code', | ||
| 1214 | 'wifi.identity': 'Anarana', | ||
| 1215 | 'wifi.identity.placeholder': 'Anarana', | ||
| 1216 | 'wifi.login': 'Momba ny WiFi', | ||
| 1217 | 'wifi.name': 'SSID', | ||
| 1218 | 'wifi.name.hiddenSSID': 'SSID miafina', | ||
| 1219 | 'cards.additional': "Isan' ny karatra fanampiny atonta", | ||
| 1220 | 'cards.tip.hide': 'Aza asiana fanazavana (legend)', | ||
| 1221 | 'wifi.name.placeholder': "Anaran'ny tambajotra WiFi (SSID)", | ||
| 1222 | 'wifi.password': 'Fanalahidy', | ||
| 1223 | 'wifi.password.placeholder': 'Teny fanalahidy', | ||
| 1224 | 'wifi.password.hide': 'Afeno ny fanalahidy', | ||
| 1225 | 'wifi.password.encryption': 'Encryption', | ||
| 1226 | 'wifi.password.encryption.none': 'Tsy misy', | ||
| 1227 | 'wifi.encryption.eapMethod': 'EAP method', | ||
| 1228 | 'wifi.tip': | ||
| 1229 | "Mba hidiranao malakilaky dia alaivo sary amin'ny fakantsarinao ilay QR Code", | ||
| 1230 | 'wifi.alert.name': 'Tsy maintsy misy anarana ilay tambajotra', | ||
| 1231 | 'wifi.alert.password': 'Tsy maintsy fenoina ny fanalahidy', | ||
| 1232 | 'wifi.alert.password.length.5': | ||
| 1233 | "Tsy maintsy mihoatry ny litera 5 ny fanalahidy, na tsy maintsy ovaina ho 'Tsy Misy' ny Encryption", | ||
| 1234 | 'wifi.alert.password.length.8': | ||
| 1235 | "Tsy maintsy mihoatry ny litera 8 ny fanalahidy, na tsy maintsy ovaina ho 'Tsy Misy' ny Encryption", | ||
| 1236 | 'wifi.alert.eapIdentity': 'Tsy maintsy fenoina ny anarana', | ||
| 1237 | 'button.rotate': 'Ahodino', | ||
| 1238 | 'button.print': 'Antontay', | ||
| 1239 | select: 'Mifidiana fiteny hafa', | ||
| 1240 | }, | ||
| 1241 | }, | ||
| 1242 | { | ||
| 1243 | id: 'bn-BD', | ||
| 1244 | name: 'Bangla - বাংলা', | ||
| 1245 | translation: { | ||
| 1246 | title: 'ওয়াইফাই কার্ড', | ||
| 1247 | 'desc.use': | ||
| 1248 | 'আপনার ওয়াই-ফাই লগইন বিবরণ সহ একটি সাধারণ কার্ড প্রিন্ট করুন। এটি ফ্রিজে টেপ দিয়ে লাগান, আপনার ওয়ালেটে রাখুন, ইত্যাদি।', | ||
| 1249 | 'desc.privacy': | ||
| 1250 | 'আপনার ওয়াই-ফাই তথ্য কখনই সার্ভারে পাঠানো হয় না। এই ওয়েবসাইটে কোন ট্র্যাকিং, অ্যানালিটিক্স বা ফিঙ্গারপ্রিন্টিং ব্যবহার করা হয় না। দেখুন', | ||
| 1251 | 'desc.source': 'সোর্স কোড', | ||
| 1252 | 'wifi.login': 'ওয়াই-ফাই লগইন', | ||
| 1253 | 'wifi.name': 'নেটওয়ার্কের নাম', | ||
| 1254 | 'wifi.name.hiddenSSID': 'লুকানো SSID', | ||
| 1255 | 'cards.additional': 'অতিরিক্ত কার্ড প্রিন্ট করা হবে', | ||
| 1256 | 'cards.tip.hide': 'নির্দেশ (টীকা) লুকান', | ||
| 1257 | 'wifi.name.placeholder': 'ওয়াই-ফাই নেটওয়ার্কের নাম', | ||
| 1258 | 'wifi.password': 'পাসওয়ার্ড', | ||
| 1259 | 'wifi.password.placeholder': 'পাসওয়ার্ড', | ||
| 1260 | 'wifi.password.hide': 'পাসওয়ার্ড লুকান', | ||
| 1261 | 'wifi.password.encryption': 'এনক্রিপশন', | ||
| 1262 | 'wifi.password.encryption.none': 'নেই', | ||
| 1263 | 'wifi.tip': | ||
| 1264 | 'স্বয়ংক্রিয়ভাবে সংযোগ করতে আপনার ফোনের ক্যামেরা QR কোডে নির্দেশ করুন', | ||
| 1265 | 'wifi.alert.name': 'নেটওয়ার্কের নাম খালি হতে পারে না', | ||
| 1266 | 'wifi.alert.password': 'পাসওয়ার্ড খালি হতে পারে না', | ||
| 1267 | 'wifi.alert.password.length.5': | ||
| 1268 | 'পাসওয়ার্ড কমপক্ষে ৫ অক্ষরের হতে হবে, অথবা এনক্রিপশন পরিবর্তন করে "নেই" দিন', | ||
| 1269 | 'wifi.alert.password.length.8': | ||
| 1270 | 'পাসওয়ার্ড কমপক্ষে ৮ অক্ষরের হতে হবে, অথবা এনক্রিপশন পরিবর্তন করে "নেই" দিন', | ||
| 1271 | 'button.rotate': 'ঘুরান', | ||
| 1272 | 'button.print': 'প্রিন্ট', | ||
| 1273 | select: 'ভাষা নির্বাচন করুন', | ||
| 1274 | }, | ||
| 1275 | }, | ||
| 1276 | { | ||
| 1277 | id: 'eo', | ||
| 1278 | name: 'Esperanto', | ||
| 1279 | translation: { | ||
| 1280 | title: 'Vifia karto', | ||
| 1281 | 'desc.use': | ||
| 1282 | 'Presu simplan karton kun viaj vifiaj ensalutaj detaloj. Bendu ĝin al la fridujo, konservu ĝin en via monujo, ktp.', | ||
| 1283 | 'desc.privacy': | ||
| 1284 | 'Viaj vifiaj informoj neniam estas senditaj al la servilo. Neniu spurado, analizo aŭ fingrospurado estas uzataj en ĉi tiu retejo. Vidi la', | ||
| 1285 | 'desc.source': 'fontokodon', | ||
| 1286 | 'wifi.identity': 'Identeco', | ||
| 1287 | 'wifi.identity.placeholder': 'Uzantnomo', | ||
| 1288 | 'wifi.login': 'Vifia ensaluto', | ||
| 1289 | 'wifi.name': 'Retnomo', | ||
| 1290 | 'wifi.name.hiddenSSID': 'Kaŝita SSID', | ||
| 1291 | 'cards.additional': 'Pliaj kartoj por presi', | ||
| 1292 | 'cards.tip.hide': 'Kaŝi konsileton (klarigeto)', | ||
| 1293 | 'wifi.name.placeholder': 'Nomo de vifia reto', | ||
| 1294 | 'wifi.password': 'Pasvorto', | ||
| 1295 | 'wifi.password.placeholder': 'Pasvorto', | ||
| 1296 | 'wifi.password.hide': 'Kaŝi pasvorton', | ||
| 1297 | 'wifi.password.encryption': 'Ĉifrado', | ||
| 1298 | 'wifi.password.encryption.none': 'Nenio', | ||
| 1299 | 'wifi.encryption.eapMethod': 'EAP-metodo', | ||
| 1300 | 'wifi.tip': | ||
| 1301 | 'Metu la fotilon de via telefono antaŭ la QR-kodo por aŭtomate konektiĝi', | ||
| 1302 | 'wifi.alert.name': 'Retnomo ne povas esti malplena', | ||
| 1303 | 'wifi.alert.password': 'Pasvorto ne povas esti malplena', | ||
| 1304 | 'wifi.alert.password.length.5': | ||
| 1305 | 'Pasvorto devas enhavi almenaŭ 5 signoj, aŭ ŝanĝu la ĉifradon al "Neniu"', | ||
| 1306 | 'wifi.alert.password.length.8': | ||
| 1307 | 'Pasvorto devas enhavi almenaŭ 8 signoj, aŭ ŝanĝu la ĉifradon al "Neniu"', | ||
| 1308 | 'wifi.alert.eapIdentity': 'Identeco ne povas esti malplena', | ||
| 1309 | 'button.rotate': 'Rotacii', | ||
| 1310 | 'button.print': 'Presi', | ||
| 1311 | select: 'Elektu lingvon', | ||
| 1312 | }, | ||
| 1313 | }, | ||
| 1083 | ].sort((a, b) => { | 1314 | ].sort((a, b) => { |
| 1084 | return a.name.toLowerCase() < b.name.toLowerCase() ? -1 : 1; | 1315 | return a.name.toLowerCase() < b.name.toLowerCase() ? -1 : 1; |
| 1085 | }); | 1316 | }); |
