├── .browserslistrc ├── .env ├── public ├── favicon.ico ├── images │ └── poster.png ├── themes │ ├── arc_dark.webp │ ├── miami_vice.webp │ ├── omega_blink.webp │ ├── omega_dark.webp │ ├── omega_light.webp │ ├── omega_shrek.webp │ ├── omega_trans.webp │ ├── cursed_light.webp │ ├── epsilon_dark.webp │ ├── epsilon_light.webp │ ├── omega_dracula.webp │ ├── omega_kawaii.webp │ ├── upsilon_dark.webp │ ├── upsilon_light.webp │ └── omega_freenumworks.webp ├── simulator │ ├── background.dark.png │ ├── background.dark.webp │ ├── background.light.webp │ ├── simulator.dark.html │ └── simulator.light.html └── index.html ├── babel.config.js ├── src ├── assets │ ├── discord.webp │ ├── github.webp │ ├── UPSILogo.webp │ ├── png2webp.sh │ ├── Reader_screenshot.webp │ ├── Calculators_omega_dark.webp │ ├── Two_calculators_dark.webp │ ├── Two_calculators_light.webp │ ├── Calculators_omega_light.webp │ ├── Calculators_upsilon_dark.webp │ ├── Calculators_upsilon_light.webp │ ├── flag_fr.svg │ ├── upsilon_fork_o.svg │ ├── flag_en.svg │ ├── upsilon_logo_text.svg │ ├── upsilon_fork.svg │ └── upsilon_logo_text_path.svg ├── views │ ├── About.vue │ ├── NotFound.vue │ ├── Simulator.vue │ ├── doc │ │ ├── FAQ.vue │ │ ├── RPN.vue │ │ ├── Themes.vue │ │ ├── Help.vue │ │ └── Reader.vue │ ├── Releases.vue │ └── Home.vue ├── components │ ├── LatexView.vue │ ├── FAQquestion.vue │ ├── Feature.vue │ ├── DownloadItem.vue │ ├── ReleaseItem.vue │ ├── LocaleChanger.vue │ ├── Switch.vue │ ├── CustomSelect.vue │ └── DownloadsPage.vue ├── main.js ├── router │ └── index.js ├── installer │ ├── downloader.js │ └── dfuHelper.js ├── App.vue └── locales │ ├── en.json │ └── fr.json ├── .editorconfig ├── .firebaserc ├── firebase.json ├── .gitignore ├── vue.config.js ├── .eslintrc.js ├── README.md ├── .github └── workflows │ ├── firebase-hosting-merge.yml │ └── firebase-hosting-pull-request.yml └── package.json /.browserslistrc: -------------------------------------------------------------------------------- 1 | > 1% 2 | last 2 versions 3 | not dead 4 | -------------------------------------------------------------------------------- /.env: -------------------------------------------------------------------------------- 1 | VUE_APP_I18N_LOCALE=en 2 | VUE_APP_I18N_FALLBACK_LOCALE=en 3 | -------------------------------------------------------------------------------- /public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UpsilonNumworks/Upsilon-website/HEAD/public/favicon.ico -------------------------------------------------------------------------------- /babel.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | presets: [ 3 | '@vue/cli-plugin-babel/preset' 4 | ] 5 | } 6 | -------------------------------------------------------------------------------- /src/assets/discord.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UpsilonNumworks/Upsilon-website/HEAD/src/assets/discord.webp -------------------------------------------------------------------------------- /src/assets/github.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UpsilonNumworks/Upsilon-website/HEAD/src/assets/github.webp -------------------------------------------------------------------------------- /public/images/poster.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UpsilonNumworks/Upsilon-website/HEAD/public/images/poster.png -------------------------------------------------------------------------------- /src/assets/UPSILogo.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UpsilonNumworks/Upsilon-website/HEAD/src/assets/UPSILogo.webp -------------------------------------------------------------------------------- /src/assets/png2webp.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | for f in *.png 4 | do 5 | cwebp -q 90 $f -o ${f%%.*}.webp & 6 | done 7 | -------------------------------------------------------------------------------- /public/themes/arc_dark.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UpsilonNumworks/Upsilon-website/HEAD/public/themes/arc_dark.webp -------------------------------------------------------------------------------- /public/themes/miami_vice.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UpsilonNumworks/Upsilon-website/HEAD/public/themes/miami_vice.webp -------------------------------------------------------------------------------- /public/themes/omega_blink.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UpsilonNumworks/Upsilon-website/HEAD/public/themes/omega_blink.webp -------------------------------------------------------------------------------- /public/themes/omega_dark.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UpsilonNumworks/Upsilon-website/HEAD/public/themes/omega_dark.webp -------------------------------------------------------------------------------- /public/themes/omega_light.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UpsilonNumworks/Upsilon-website/HEAD/public/themes/omega_light.webp -------------------------------------------------------------------------------- /public/themes/omega_shrek.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UpsilonNumworks/Upsilon-website/HEAD/public/themes/omega_shrek.webp -------------------------------------------------------------------------------- /public/themes/omega_trans.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UpsilonNumworks/Upsilon-website/HEAD/public/themes/omega_trans.webp -------------------------------------------------------------------------------- /src/views/About.vue: -------------------------------------------------------------------------------- 1 | 6 | -------------------------------------------------------------------------------- /public/themes/cursed_light.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UpsilonNumworks/Upsilon-website/HEAD/public/themes/cursed_light.webp -------------------------------------------------------------------------------- /public/themes/epsilon_dark.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UpsilonNumworks/Upsilon-website/HEAD/public/themes/epsilon_dark.webp -------------------------------------------------------------------------------- /public/themes/epsilon_light.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UpsilonNumworks/Upsilon-website/HEAD/public/themes/epsilon_light.webp -------------------------------------------------------------------------------- /public/themes/omega_dracula.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UpsilonNumworks/Upsilon-website/HEAD/public/themes/omega_dracula.webp -------------------------------------------------------------------------------- /public/themes/omega_kawaii.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UpsilonNumworks/Upsilon-website/HEAD/public/themes/omega_kawaii.webp -------------------------------------------------------------------------------- /public/themes/upsilon_dark.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UpsilonNumworks/Upsilon-website/HEAD/public/themes/upsilon_dark.webp -------------------------------------------------------------------------------- /public/themes/upsilon_light.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UpsilonNumworks/Upsilon-website/HEAD/public/themes/upsilon_light.webp -------------------------------------------------------------------------------- /src/assets/Reader_screenshot.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UpsilonNumworks/Upsilon-website/HEAD/src/assets/Reader_screenshot.webp -------------------------------------------------------------------------------- /public/simulator/background.dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UpsilonNumworks/Upsilon-website/HEAD/public/simulator/background.dark.png -------------------------------------------------------------------------------- /public/simulator/background.dark.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UpsilonNumworks/Upsilon-website/HEAD/public/simulator/background.dark.webp -------------------------------------------------------------------------------- /public/simulator/background.light.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UpsilonNumworks/Upsilon-website/HEAD/public/simulator/background.light.webp -------------------------------------------------------------------------------- /public/themes/omega_freenumworks.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UpsilonNumworks/Upsilon-website/HEAD/public/themes/omega_freenumworks.webp -------------------------------------------------------------------------------- /src/assets/Calculators_omega_dark.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UpsilonNumworks/Upsilon-website/HEAD/src/assets/Calculators_omega_dark.webp -------------------------------------------------------------------------------- /src/assets/Two_calculators_dark.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UpsilonNumworks/Upsilon-website/HEAD/src/assets/Two_calculators_dark.webp -------------------------------------------------------------------------------- /src/assets/Two_calculators_light.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UpsilonNumworks/Upsilon-website/HEAD/src/assets/Two_calculators_light.webp -------------------------------------------------------------------------------- /src/assets/Calculators_omega_light.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UpsilonNumworks/Upsilon-website/HEAD/src/assets/Calculators_omega_light.webp -------------------------------------------------------------------------------- /src/assets/Calculators_upsilon_dark.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UpsilonNumworks/Upsilon-website/HEAD/src/assets/Calculators_upsilon_dark.webp -------------------------------------------------------------------------------- /src/assets/Calculators_upsilon_light.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UpsilonNumworks/Upsilon-website/HEAD/src/assets/Calculators_upsilon_light.webp -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | [*.{js,jsx,ts,tsx,vue}] 2 | indent_style = space 3 | indent_size = 2 4 | trim_trailing_whitespace = true 5 | insert_final_newline = true 6 | -------------------------------------------------------------------------------- /.firebaserc: -------------------------------------------------------------------------------- 1 | { 2 | "projects": { 3 | "default": "getupsilon" 4 | }, 5 | "targets": { 6 | "upsilon-web": { 7 | "hosting": { 8 | "getupsilon": [ 9 | "getupsilon" 10 | ] 11 | } 12 | } 13 | } 14 | } -------------------------------------------------------------------------------- /src/assets/flag_fr.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /firebase.json: -------------------------------------------------------------------------------- 1 | { 2 | "hosting": { 3 | "target": "getupsilon", 4 | "public": "dist", 5 | "ignore": [ 6 | "firebase.json", 7 | "**/.*", 8 | "**/node_modules/**" 9 | ], 10 | "rewrites": [ 11 | { 12 | "source": "**", 13 | "destination": "/index.html" 14 | } 15 | ] 16 | } 17 | } -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules 3 | /dist 4 | 5 | .firebase 6 | 7 | # local env files 8 | .env.local 9 | .env.*.local 10 | 11 | # Log files 12 | npm-debug.log* 13 | yarn-debug.log* 14 | yarn-error.log* 15 | pnpm-debug.log* 16 | 17 | # Editor directories and files 18 | .idea 19 | .vscode 20 | *.suo 21 | *.ntvs* 22 | *.njsproj 23 | *.sln 24 | *.sw? 25 | -------------------------------------------------------------------------------- /vue.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | productionSourceMap: false, 3 | pluginOptions: { 4 | i18n: { 5 | locale: 'en', 6 | fallbackLocale: 'en', 7 | localeDir: 'locales', 8 | enableLegacy: false, 9 | runtimeOnly: false, 10 | compositionOnly: false, 11 | fullInstall: true, 12 | seo: true 13 | } 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /.eslintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | root: true, 3 | env: { 4 | node: true, 5 | browser: true 6 | }, 7 | extends: ['plugin:vue/vue3-essential', '@vue/standard'], 8 | parserOptions: { 9 | parser: '@babel/eslint-parser' 10 | }, 11 | rules: { 12 | 'no-console': process.env.NODE_ENV === 'production' ? 'warn' : 'off', 13 | 'no-debugger': process.env.NODE_ENV === 'production' ? 'warn' : 'off' 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Upsilon website 2 | 3 | Anyone is welcome to contribute or request features/report bugs! 4 | 5 | ## To do 6 | [https://trello.com/b/VSmg45fM/upsilon-website](https://trello.com/b/VSmg45fM/upsilon-website) 7 | ## Project setup 8 | 9 | ``` 10 | npm install 11 | ``` 12 | 13 | ### Compiles and hot-reloads for development 14 | 15 | ``` 16 | npm run serve 17 | ``` 18 | 19 | ### Compiles and minifies for production 20 | 21 | ``` 22 | npm run build 23 | ``` 24 | 25 | ### Lints and fixes files 26 | 27 | ``` 28 | npm run lint 29 | ``` 30 | 31 | ### Customize configuration 32 | 33 | See [Configuration Reference](https://cli.vuejs.org/config/). 34 | -------------------------------------------------------------------------------- /src/assets/upsilon_fork_o.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /.github/workflows/firebase-hosting-merge.yml: -------------------------------------------------------------------------------- 1 | # This file was auto-generated by the Firebase CLI 2 | # https://github.com/firebase/firebase-tools 3 | 4 | name: Deploy to Firebase Hosting on merge 5 | 'on': 6 | push: 7 | branches: 8 | - master 9 | jobs: 10 | build_and_deploy: 11 | runs-on: ubuntu-latest 12 | steps: 13 | - uses: actions/checkout@v2 14 | - run: npm i 15 | - run: npm run build 16 | - uses: FirebaseExtended/action-hosting-deploy@v0 17 | with: 18 | repoToken: '${{ secrets.GITHUB_TOKEN }}' 19 | firebaseServiceAccount: '${{ secrets.FIREBASE_SERVICE_ACCOUNT_UPSILON_WEB }}' 20 | channelId: live 21 | projectId: upsilon-web 22 | -------------------------------------------------------------------------------- /src/assets/flag_en.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /.github/workflows/firebase-hosting-pull-request.yml: -------------------------------------------------------------------------------- 1 | # This file was auto-generated by the Firebase CLI 2 | # https://github.com/firebase/firebase-tools 3 | 4 | name: Deploy to Firebase Hosting on PR 5 | 'on': pull_request 6 | jobs: 7 | build_and_preview: 8 | if: '${{ github.event.pull_request.head.repo.full_name == github.repository }}' 9 | runs-on: ubuntu-latest 10 | steps: 11 | - uses: actions/checkout@v2 12 | - run: npm i 13 | - run: npm run build 14 | - uses: FirebaseExtended/action-hosting-deploy@v0 15 | with: 16 | repoToken: '${{ secrets.GITHUB_TOKEN }}' 17 | firebaseServiceAccount: '${{ secrets.FIREBASE_SERVICE_ACCOUNT_UPSILON_WEB }}' 18 | projectId: upsilon-web 19 | -------------------------------------------------------------------------------- /src/views/NotFound.vue: -------------------------------------------------------------------------------- 1 | 8 | 9 | 22 | 23 | 35 | -------------------------------------------------------------------------------- /src/views/Simulator.vue: -------------------------------------------------------------------------------- 1 | 14 | 15 | 34 | 35 | 42 | -------------------------------------------------------------------------------- /src/components/LatexView.vue: -------------------------------------------------------------------------------- 1 | 10 | 21 | 40 | -------------------------------------------------------------------------------- /src/components/FAQquestion.vue: -------------------------------------------------------------------------------- 1 | 8 | 9 | 23 | 24 | 42 | -------------------------------------------------------------------------------- /src/components/Feature.vue: -------------------------------------------------------------------------------- 1 | 11 | 12 | 23 | 24 | 55 | -------------------------------------------------------------------------------- /src/main.js: -------------------------------------------------------------------------------- 1 | import AOS from 'aos' 2 | import 'aos/dist/aos.css' 3 | import { createApp } from 'vue' 4 | import { createI18n } from 'vue-i18n' 5 | import VueMathJax from 'vue-mathjax-next' 6 | import App from './App.vue' 7 | import router from './router' 8 | 9 | AOS.init() 10 | 11 | function loadLocaleMessages () { 12 | const locales = require.context('./locales', true, /[A-Za-z0-9-_,\s]+\.json$/i) 13 | const messages = {} 14 | locales.keys().forEach(key => { 15 | const matched = key.match(/([A-Za-z0-9-_]+)\./i) 16 | if (matched && matched.length > 1) { 17 | const locale = matched[1] 18 | messages[locale] = locales(key).default 19 | } 20 | }) 21 | return messages 22 | } 23 | 24 | let locale = localStorage.getItem('locale') 25 | if (!(locale === 'fr' || locale === 'en')) { 26 | locale = navigator.language === 'fr' ? 'fr' : 'en' 27 | } 28 | localStorage.setItem('locale', locale) 29 | const i18n = createI18n({ 30 | legacy: false, 31 | locale: locale, 32 | fallbackLocale: process.env.VUE_APP_I18N_FALLBACK_LOCALE || 'en', 33 | messages: loadLocaleMessages() 34 | }) 35 | 36 | const app = createApp(App) 37 | app.use(VueMathJax).use(i18n).use(router).mount('#app') 38 | app.config.globalProperties.$window = window 39 | app.config.globalProperties.$i18n = i18n 40 | -------------------------------------------------------------------------------- /src/components/DownloadItem.vue: -------------------------------------------------------------------------------- 1 | 7 | 8 | 39 | 40 | 61 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "upsilon-website", 3 | "version": "0.1.0", 4 | "private": true, 5 | "scripts": { 6 | "serve": "vue-cli-service serve", 7 | "build": "vue-cli-service build", 8 | "lint": "vue-cli-service lint", 9 | "i18n:report": "vue-cli-service i18n:report --src \"./src/**/*.?(js|vue)\" --locales \"./src/locales/**/*.json\"" 10 | }, 11 | "dependencies": { 12 | "@zip.js/zip.js": "^2.6.28", 13 | "aos": "^3.0.0-beta.6", 14 | "core-js": "^3.6.5", 15 | "js-untar": "^2.0.0", 16 | "pako": "^2.0.4", 17 | "upsilon.js": "^1.4.0", 18 | "vue": "^3.2.37", 19 | "vue-i18n": "^9.1.0", 20 | "vue-mathjax-next": "0.0.4", 21 | "vue-router": "^4.0.0-0" 22 | }, 23 | "devDependencies": { 24 | "@babel/core": "^7.12.16", 25 | "@babel/eslint-parser": "^7.12.16", 26 | "@intlify/vue-i18n-loader": "^3.0.0", 27 | "@vue/cli-plugin-babel": "^5.0.6", 28 | "@vue/cli-plugin-eslint": "^5.0.6", 29 | "@vue/cli-plugin-router": "^5.0.6", 30 | "@vue/cli-service": "^5.0.6", 31 | "@vue/compiler-sfc": "^3.0.0", 32 | "@vue/eslint-config-standard": "^6.1.0", 33 | "eslint": "^7.32.0", 34 | "eslint-plugin-import": "^2.25.3", 35 | "eslint-plugin-node": "^11.1.0", 36 | "eslint-plugin-promise": "^5.1.0", 37 | "eslint-plugin-standard": "^4.0.0", 38 | "eslint-plugin-vue": "^7.20.0", 39 | "vue-cli-plugin-i18n": "~2.3.1" 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /src/components/ReleaseItem.vue: -------------------------------------------------------------------------------- 1 | 9 | 10 | 27 | 28 | 64 | -------------------------------------------------------------------------------- /src/views/doc/FAQ.vue: -------------------------------------------------------------------------------- 1 | 30 | 31 | 47 | 48 | 49 | -------------------------------------------------------------------------------- /src/router/index.js: -------------------------------------------------------------------------------- 1 | import { createRouter, createWebHistory } from 'vue-router' 2 | import FAQ from '../views/doc/FAQ.vue' 3 | import RPN from '../views/doc/RPN.vue' 4 | import Themes from '../views/doc/Themes.vue' 5 | import Reader from '../views/doc/Reader.vue' 6 | import Help from '../views/doc/Help.vue' 7 | import Home from '../views/Home.vue' 8 | import Installer from '../views/Installer.vue' 9 | import NotFound from '../views/NotFound.vue' 10 | import Releases from '../views/Releases.vue' 11 | import Simulator from '../views/Simulator.vue' 12 | 13 | const routes = [ 14 | { 15 | path: '/', 16 | name: 'Home', 17 | component: Home 18 | }, 19 | { 20 | path: '/doc/reader', 21 | name: 'Reader', 22 | component: Reader 23 | }, 24 | { 25 | path: '/doc/themes', 26 | name: 'Themes', 27 | component: Themes 28 | }, 29 | { 30 | path: '/doc/rpn', 31 | name: 'RPN', 32 | component: RPN 33 | }, 34 | { 35 | path: '/doc/faq', 36 | name: 'FAQ', 37 | component: FAQ 38 | }, 39 | { 40 | path: '/install', 41 | name: 'Installer', 42 | component: Installer 43 | }, 44 | { 45 | path: '/releases', 46 | name: 'Releases', 47 | component: Releases 48 | }, 49 | { 50 | path: '/simulator', 51 | name: 'Simulator', 52 | component: Simulator 53 | }, 54 | { 55 | path: '/doc/help', 56 | name: 'Help', 57 | component: Help 58 | }, 59 | { 60 | path: '/:pathMatch(.*)*', 61 | name: '404', 62 | component: NotFound 63 | } 64 | ] 65 | 66 | const router = createRouter({ 67 | history: createWebHistory(process.env.BASE_URL), 68 | routes 69 | }) 70 | 71 | export default router 72 | -------------------------------------------------------------------------------- /src/components/LocaleChanger.vue: -------------------------------------------------------------------------------- 1 | 10 | 11 | 42 | 43 | 70 | -------------------------------------------------------------------------------- /public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | Upsilon 24 | 25 | 26 | 27 | 33 |
34 | 35 | 36 | 37 | -------------------------------------------------------------------------------- /src/components/Switch.vue: -------------------------------------------------------------------------------- 1 | 14 | 15 | 31 | 88 | -------------------------------------------------------------------------------- /src/installer/downloader.js: -------------------------------------------------------------------------------- 1 | export async function downloadBin (name, model, channel, theme, lang, t) { 2 | const mirror = 3 | 'https://yaya-cout.github.io/Upsilon-binfiles/binaries/' 4 | 5 | let fwname = '' 6 | if (name === 'flasher') { 7 | fwname = 'flasher.verbose.bin' 8 | } else if (name === 'bootloader') { 9 | fwname = 'bootloader.bin' 10 | } else { 11 | fwname += 'epsilon.onboarding' 12 | if (channel === 'beta' || channel === 'official') { 13 | fwname += '.' + theme 14 | } 15 | if (model.toLowerCase() === 'n0100') { 16 | fwname += '.' + lang 17 | } 18 | fwname += '.' + name 19 | fwname += '.bin' 20 | } 21 | 22 | const jsonUrl = `${mirror}${channel}/${model.toLowerCase() === 'n0100' ? 'n100' : 'n110' 23 | }%2F${fwname}` 24 | console.log('Downloading ' + fwname) 25 | const binUrl = jsonUrl 26 | const shaUrl = jsonUrl + '.sha256' 27 | 28 | const bin = await downloadAsync('GET', binUrl, t, 'blob') 29 | const checksum = await downloadAsync('GET', shaUrl, t, 'text') 30 | if (checksum.substring(0, 64) === (await hash(bin))) { 31 | console.log('Bin file downloaded successfully') 32 | return bin.arrayBuffer() 33 | } else { 34 | throw new Error('Failed to verify file integrity') 35 | } 36 | } 37 | 38 | export async function downloadAsync (method, url, t, responseType = 'blob') { 39 | return fetch(url, { method: method }).then(async (response) => { 40 | if (response.status === 404) { 41 | const err = new Error() 42 | err.message = t('installer.download404') 43 | throw err 44 | } 45 | if (responseType === 'blob') { 46 | return response.blob() 47 | } else { 48 | return response.text() 49 | } 50 | }) 51 | } 52 | 53 | export async function hash (blob) { 54 | const msgUint8 = await blob.arrayBuffer() 55 | const hashBuffer = await crypto.subtle.digest('SHA-256', msgUint8) 56 | const hashArray = Array.from(new Uint8Array(hashBuffer)) 57 | return hashArray.map((b) => b.toString(16).padStart(2, '0')).join('') 58 | } 59 | -------------------------------------------------------------------------------- /src/assets/upsilon_logo_text.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 16 | 40 | 42 | 46 | Upsilon 57 | 58 | 59 | -------------------------------------------------------------------------------- /src/assets/upsilon_fork.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 16 | 39 | 41 | 46 | 51 | 55 | 56 | 57 | -------------------------------------------------------------------------------- /src/views/doc/RPN.vue: -------------------------------------------------------------------------------- 1 | 45 | 59 | 83 | -------------------------------------------------------------------------------- /src/views/doc/Themes.vue: -------------------------------------------------------------------------------- 1 | 23 | 24 | 59 | 60 | 108 | -------------------------------------------------------------------------------- /src/installer/dfuHelper.js: -------------------------------------------------------------------------------- 1 | export function unpack (buffer) { 2 | const internalSize = 64 * 1024 3 | const internalAddress = 0x8000000 4 | const internal = new Uint8Array(new ArrayBuffer(internalSize)).fill(255, 0, internalSize) 5 | const externalSize = 8 * 1024 * 1024 6 | const externalAddress = 0x90000000 7 | const external = new Uint8Array(new ArrayBuffer(externalSize)).fill(255, 0, externalSize) 8 | 9 | const fw = new Struct(buffer) 10 | const prefix = '[dfu-unpack]' 11 | // Read header 12 | let magik = fw.string(5) 13 | if (magik !== 'DfuSe') { throw Error('Invalid magik number ' + magik) } 14 | if (fw.byte(buffer) !== 1) { throw Error('Unsupported file version') } 15 | const totalSize = fw.uint32LE() 16 | const imgCount = fw.byte() 17 | console.log('Found', imgCount, 'image(s), total size:', totalSize) 18 | for (let i = 0; i < imgCount; i++) { 19 | magik = fw.string(6) 20 | if (magik !== 'Target') { throw Error('Invalid magik number ' + magik) } 21 | const alternate = fw.byte() 22 | const named = fw.uint32LE() 23 | const name = fw.string(255).split('\0')[0] 24 | 25 | const imageSize = fw.uint32LE() 26 | const elements = fw.uint32LE() 27 | console.table({ alternate, named, name, imageSize, elements }) 28 | for (let j = 0; j < elements; j++) { 29 | const address = fw.uint32LE() 30 | const elementSize = fw.uint32LE() 31 | const data = new Uint8Array(fw.arrayBuffer(elementSize)) 32 | if (address >= internalAddress && address + elementSize <= internalAddress + internalSize) { 33 | console.log(prefix, 'Element', j, ': Address:', address, 'elementSize:', elementSize, '') 34 | for (let k = 0; k < elementSize; k++) { 35 | internal[k + address - internalAddress] = data[k] 36 | } 37 | } else if (address >= externalAddress && address + elementSize <= externalAddress + externalSize) { 38 | console.log(prefix, 'Element', j, ': Address:', address, 'elementSize:', elementSize, '') 39 | for (let k = 0; k < elementSize; k++) { 40 | external[k + address - externalAddress] = data[k] 41 | } 42 | } else { 43 | console.log(prefix, 'Element', j, ': Address:', address, 'elementSize:', elementSize, '') 44 | } 45 | } 46 | } 47 | const r = [] 48 | r.push(new File([external], 'dfu-external.bin')) 49 | if (internal.filter((value) => value !== 255).length !== 0) { 50 | r.push(new File([internal], 'dfu-internal.bin')) 51 | } 52 | return r 53 | } 54 | 55 | class Struct { 56 | constructor (buffer) { 57 | this.buffer = buffer 58 | this.index = 0 59 | } 60 | 61 | byte () { 62 | this.index += 1 63 | return new Uint8Array(this.buffer)[parseInt(this.index - 1)] 64 | } 65 | 66 | string (length) { 67 | this.index += length 68 | return new TextDecoder().decode(this.buffer.slice(this.index - length, parseInt(this.index))) 69 | } 70 | 71 | arrayBuffer (length) { 72 | this.index += length 73 | return this.buffer.slice(this.index - length, parseInt(this.index)) 74 | } 75 | 76 | uint32LE () { 77 | this.index += 4 78 | return new Uint32Array(this.buffer.slice(this.index - 4, this.index))[0] 79 | } 80 | } 81 | -------------------------------------------------------------------------------- /src/components/CustomSelect.vue: -------------------------------------------------------------------------------- 1 | 35 | 74 | 149 | -------------------------------------------------------------------------------- /src/assets/upsilon_logo_text_path.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /src/views/Releases.vue: -------------------------------------------------------------------------------- 1 | 62 | 79 | 80 | 94 | -------------------------------------------------------------------------------- /src/components/DownloadsPage.vue: -------------------------------------------------------------------------------- 1 | 87 | 88 | 137 | 138 | 192 | -------------------------------------------------------------------------------- /src/views/doc/Help.vue: -------------------------------------------------------------------------------- 1 | 28 | 29 | 239 | 240 | 267 | -------------------------------------------------------------------------------- /src/App.vue: -------------------------------------------------------------------------------- 1 | 64 | 65 | 108 | 109 | 430 | -------------------------------------------------------------------------------- /src/views/doc/Reader.vue: -------------------------------------------------------------------------------- 1 | 247 | 248 | 264 | 265 | 336 | -------------------------------------------------------------------------------- /src/views/Home.vue: -------------------------------------------------------------------------------- 1 | 165 | 166 | 208 | 483 | -------------------------------------------------------------------------------- /public/simulator/simulator.dark.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | Upsilon 9 | 496 | 497 | 498 | 499 |
500 |
501 |
502 | NumWorks Calculator 503 |
504 |
505 | 506 | 507 | 508 | 509 | 510 | 511 | 512 | 513 | 514 | 515 | 516 | 517 | 518 | 519 | 520 | 521 | 522 | 523 | 524 | 525 | 526 | 527 | 528 | 529 | 530 | 531 | 532 | 533 | 534 | 535 | 536 | 537 | 538 | 539 | 540 | 541 | 542 | 543 | 544 | 545 | 546 | 547 | 548 | 549 | 550 | 551 | 552 |
553 | 603 |
604 |
605 |
606 | 607 |
608 |
609 | 620 | 621 | 622 | -------------------------------------------------------------------------------- /public/simulator/simulator.light.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | Upsilon 9 | 496 | 497 | 498 | 499 |
500 |
501 |
502 | NumWorks Calculator 503 |
504 |
505 | 506 | 507 | 508 | 509 | 510 | 511 | 512 | 513 | 514 | 515 | 516 | 517 | 518 | 519 | 520 | 521 | 522 | 523 | 524 | 525 | 526 | 527 | 528 | 529 | 530 | 531 | 532 | 533 | 534 | 535 | 536 | 537 | 538 | 539 | 540 | 541 | 542 | 543 | 544 | 545 | 546 | 547 | 548 | 549 | 550 | 551 | 552 |
553 | 603 |
604 |
605 |
606 | 607 |
608 |
609 | 620 | 621 | 622 | -------------------------------------------------------------------------------- /src/locales/en.json: -------------------------------------------------------------------------------- 1 | { 2 | "darkmode": "Dark theme", 3 | "doc": { 4 | "latex": { 5 | "arrows": "Arrows", 6 | "command": "Command", 7 | "description": "In the reader app, you can read a txt file. You can also read a txt file with LaTeX expression inside of it.", 8 | "functions": "Functions", 9 | "greekcapitalletter": "Greek capital letters", 10 | "greeksmallletter": "Greek small letters", 11 | "mathsymbols": "Math Symbols", 12 | "output": "Output", 13 | "reference": "LaTeX Reference", 14 | "symbolslisted": "For a LaTeX expression to be rendered, you need to surround it with dollar signs. All the symbols you can use are listed here :" 15 | }, 16 | "reader": { 17 | "color": "Color", 18 | "colors": { 19 | "Cyan": "Cyan", 20 | "blue": "Blue", 21 | "brown": "Brown", 22 | "green": "Green", 23 | "lastColor": "Stop using color xx", 24 | "lightBlue": "Light blue", 25 | "lightGreen": "Light green", 26 | "lightRed": "Light red", 27 | "magenta": "Magenta", 28 | "orange": "Orange", 29 | "pink": "Pink", 30 | "purple": "Purple", 31 | "red": "Red", 32 | "startColor": "Start using color xx", 33 | "turquoise": "Turquoise" 34 | }, 35 | "colorsDesc": "You can change the color of the text using the following color codes. The text that follows a color code will be in the corresponding color.", 36 | "example": { 37 | "content": "The following input produces the following output:", 38 | "title": "Example" 39 | }, 40 | "name": "The reader app", 41 | "p1": "The reader app can read .txt files that you can upload to your calculator via", 42 | "p2": "But it also supports the custom .urt format, which stands for Upsilon Rich Text. It allows you to use colors and supports a subset of the LaTeX special characters and functions.", 43 | "usingColor": "Using colors" 44 | }, 45 | "rpn": { 46 | "definition": { 47 | "p1": "is another way of writing mathematical calculations. It was invented by the polish mathematician Jan Łukasiewicz in 1924.", 48 | "p2": "This notation provides several advantages : RPN calculators are based on the use of a stack, the operands are placed on top of the stack, while the results of the calculations are also returned on top of the stack. Although this might be disconcerting at first, one quickly realizes that it helps make mathematical expressions easier to understand and manipulate." 49 | }, 50 | "h2": "Quick introduction to the RPN app on Upsilon", 51 | "introduction": { 52 | "examples": { 53 | "1": { 54 | "li1": "Write 245 and press OK", 55 | "li2": "Write 6598 and press OK", 56 | "li3": "Press the multiplication button once", 57 | "title": "To obtain the result of 245×6598 :" 58 | }, 59 | "2": { 60 | "li1": "Write 65 and press OK", 61 | "li2": "Write 98 and press OK", 62 | "li3": "Write 78 and press OK", 63 | "li4": "Press the multiplication button once", 64 | "li5": "Press the division button once", 65 | "title": "To obtain the result of (65×98)÷78 :" 66 | }, 67 | "examples": "Examples" 68 | }, 69 | "p1": "When you want to do a calculation in the RPN app on Upsilon, you must start by writing all the numbers that will be involved in your expression in order of appearance. Then you press the appropriate operand also in order of apparition.", 70 | "p2": "You can change the position of a term in the stack by using the parenthesis button, which will move it up or down." 71 | }, 72 | "note": { 73 | "content": " throughout the whole Omega history, a bug made the RPN app hard to safely use on the calculator, however, thanks to RedGlow, dl11 and Overengined, the bug was fixed, and it is now totally safe to use the RPN app.", 74 | "title": "Note:" 75 | }, 76 | "rpn": "Reverse Polish Notation", 77 | "the": "The" 78 | }, 79 | "themes": { 80 | "description": "All of these themes can be installed with the online installer. A list containing more themes and their source code is available here:", 81 | "title": "List of themes" 82 | } 83 | }, 84 | "downloads": { 85 | "download": "Download Upsilon", 86 | "installNow": "Install Upsilon now", 87 | "onlineInstaller": "Online installer" 88 | }, 89 | "faq": { 90 | "name": "FAQ", 91 | "questions": { 92 | "canRollback": { 93 | "answer": "Yes, just go to numworks.com and update your calculator. This will install the latest version of epsilon on both slots. If you want to remove the bootloader, you need to use the recovery mode with 6+reset. This will lock your calculator! If you don't want to lock your calculator you can install Epsilon 18.2.0 using the 18-2-0.dfu file. (Find a link to it in the Omega community discord server). Once you installed Epsilon 18.2.0, you should be able to upgrade to later versions of Epsilon while still being able to downgrade Versions up to 19.5 are safe. Do this at your own risk and ask questions on the discord server if you have any doubts.", 94 | "question": "Can you roll back from Upsilon to epsilon?" 95 | }, 96 | "cheatsheet": { 97 | "answer": "Not for now but maybe some day who knows ^^", 98 | "question": "Is there a cheat sheet with the simulator's keyboard shortcuts/tips and tricks for Upsilon?" 99 | }, 100 | "customTheme": { 101 | "answer": "There is a theme maker app which makes it pretty easy to make themes. ", 102 | "question": "How to create custom themes?" 103 | }, 104 | "how2backup": { 105 | "answer": "The installer should automatically restore scripts at the end of the installation. You can also go to bit.ly/upsiBackup to back them up manually.", 106 | "question": "How to backup the calculator's data?" 107 | }, 108 | "how2contribute": { 109 | "answer": "Contributions (bug reports, feature requests and commits) are very welcome on both Upsilon itself, and its website. You can request features and report bugs on their respective repository issue trackers: Upsilon and Upsilon-website.", 110 | "question": "How to contribute to Upsilon/it's website?" 111 | }, 112 | "how2createReaderFile": { 113 | "answer": "You can't. To add a reader file to the calculator, you have to go to the external apps page and transfer your files there.", 114 | "question": "How to create a file for the reader app from the calculator?" 115 | }, 116 | "how2external": { 117 | "answer": "Go to the link provided in the homepage or after the installation and select the apps you want to install and then click install.", 118 | "question": "How to install external apps?" 119 | }, 120 | "how2py": { 121 | "answer": "You can use the Omega IDE to do that, although the simulator runs Omega and not Upsilon and at the moment there are problems with file transfers (which will also occur on numworks.com).", 122 | "question": "How to transfer scripts to the calculator/edit scripts online without going to numworks.com?" 123 | }, 124 | "how2reader": { 125 | "answer": "Go to the external files and add either .txt or .urt (Upsilon rich text) file. For more info, please go to the reader tutorial.", 126 | "question": "How to use the reader app?" 127 | }, 128 | "how2recovery": { 129 | "answer": "This can be used when the software on the calculator is broken. This usually happens when there is an error during the installation or when the calculator is disconnected during the installation. Press the 6 key and the reset key at the back of the calculator at the same time (make sure your calculator is connected to the computer via USB) and then press recovery. Select STM32 BOOTLOADER and after a few moments you should be able to install Upsilon normally.", 130 | "question": "What is the recovery option on the installer page, and how do I use it?" 131 | }, 132 | "how2testReaderOnline": { 133 | "answer": "You can't. You can do it with the Windows/Linux simulators by placing the reader files in the same directory as the executables, or transfer the reader files to the calculator.", 134 | "question": "How to preview a reader file online?" 135 | }, 136 | "how2themes": { 137 | "answer": "Go to the installer, select the beta channel and select your theme. You have to reinstall Upsilon to change the theme.", 138 | "question": "How to install themes?" 139 | }, 140 | "noUSBmenu": { 141 | "answer": "The USB protection has been integrated into the bootloader and therefore no longer needs a menu.", 142 | "question": "The USB protection menu does not appear anymore in the calculator settings, is this normal?" 143 | }, 144 | "numLocked": { 145 | "answer": "There is a guide explaining how to unlock your calculator", 146 | "question": "What can I do if I installed Epsilon 16+ on my calculator?" 147 | }, 148 | "stillCouldntFind": { 149 | "answer": "Go to the Omega community discord server and ask there!", 150 | "question": "Couldn't find an answer to your question?" 151 | }, 152 | "supportedBrowsers": { 153 | "answer": "Any Chromium-based browser that is not too old should work (Chrome, Brave, Edge, etc.) Firefox will not work.", 154 | "question": "On which browsers does the installation work?" 155 | }, 156 | "supportedModels": { 157 | "answer": "You can install it on the N100 and N110 (if you don't have Epsilon 16+ installed)", 158 | "question": "On which NumWorks models can I install Upsilon?" 159 | }, 160 | "uninstallExternal": { 161 | "answer": "Go to the external apps page and select nothing and then install. This will erase all the external apps and background.", 162 | "question": "How to uninstall external apps?" 163 | } 164 | }, 165 | "sections": { 166 | "canInstall": "Can I install Upsilon?", 167 | "how2": "How to" 168 | } 169 | }, 170 | "features": { 171 | "3ds": { 172 | "description": "Omega is available and fully usable on the Nintendo 3DS.", 173 | "name": "3DS simulator" 174 | }, 175 | "dualboot": { 176 | "description": "Omega integrates a new Bootloader. It allows you to boot multiple OS from different slots.", 177 | "name": "Dual boot" 178 | }, 179 | "external": { 180 | "description": "Install community apps on the fly with External. Also includes KhiCAS and various emulators.", 181 | "installNow": "Install some now", 182 | "name": "External apps" 183 | }, 184 | "periodic": { 185 | "description": "Inspired by the TI83PCE's periodic table app, Omega's periodic table is clean and simple to use.", 186 | "name": "Periodic table" 187 | }, 188 | "phi": { 189 | "description": "Phi is a tool developed by M4x1m3 that unlocks your calculator after an Epsilon 16+ update.", 190 | "name": "Phi" 191 | }, 192 | "plenty": { 193 | "description": "You can find a detailed list there: ", 194 | "name": "Plenty of other smaller features", 195 | "releasesLink": "Releases" 196 | }, 197 | "protection": { 198 | "content": "Updating to Epsilon 16+ locks your calculator down, preventing you from installing any unofficial firmware. This protection prevents unintentional updates.", 199 | "title": "Protection against E16" 200 | }, 201 | "python": { 202 | "battery": "Added a way to get the battery level (level, voltage and charging status)", 203 | "sys": "Added a sys module", 204 | "title": "Python improvements", 205 | "ulab": "Added Ulab which contains SciPy and NumPy (N110 only) " 206 | }, 207 | "reader": { 208 | "description": "A reader app with support for LaTeX special characters", 209 | "docLink": "Learn more", 210 | "name": "Reader" 211 | }, 212 | "rpn": { 213 | "description": "Omega supports using Reverse Polish Notation to do calculations. This lets you first input all the numbers and then combine them using mathematical operations.", 214 | "docLink": "Learn more", 215 | "name": "RPN" 216 | }, 217 | "settings": { 218 | "description": "Customize your calculator's behaviour to your heart's content", 219 | "name": "More settings" 220 | }, 221 | "symbolic": { 222 | "description": "Symbolic computation was removed from Epsilon in version 11.2. Omega reintroduces that feature.", 223 | "name": "Symbolic calculation" 224 | }, 225 | "themes": { 226 | "andmanymore": "Or one of the community made themes", 227 | "description": "Customize the look of your calculator with one of the following themes", 228 | "name": "Themes engine" 229 | } 230 | }, 231 | "github": { 232 | "name": "GitHub" 233 | }, 234 | "help": { 235 | "answers": "Answers", 236 | "are-you-using-chromium-snap": "Do you use Chromium in Snap? \n(does which chromium return a path starting with /snap?)", 237 | "are-you-using-linux": "Do you use Linux?", 238 | "cant-detect": "The PC does not detect the calculator.", 239 | "chromium-snap-solution": "Follow the instructions here to install the correct version of Chromium (“snap refresh chromium - \n-channel=candidate/raw-usb” and “snap connect chromium:raw-usb”).", 240 | "continue": "No answer for the moment, continue to answer the questions above.", 241 | "did-it-work": "It worked ?", 242 | "do-you-have-driver": "Do you have the driver for the calculator?", 243 | "end": "Your problem is solved, thank you for using Upsilon's interactive help!", 244 | "have-driver": "You have a calculator driver installed.", 245 | "install-driver": "You need to install the driver for the calculator. You can download it from the NumWorks site at the beginning of the update procedure or from the Upsilon installer by clicking Cancel when selecting the device.", 246 | "install-os": "Install an operating system on the calculator from the Omega/Upsilon sites.", 247 | "led-off": "The LED is off.", 248 | "led-red": "The LED is red.", 249 | "led-status": "What color is the calculator's LED?", 250 | "n????": "The PC detects the model as an N????.", 251 | "name": "Help", 252 | "next": "Next", 253 | "no-driver": "You do not have a driver for the calculator.", 254 | "not-implemented": "This case is not implemented yet, please join our discord server to report this error: https://discord.gg/X2TWhh9", 255 | "not-using-chromium-snap": "You are not using Chromium in Snap.", 256 | "not-using-linux": "You are not using Linux.", 257 | "not-worked": "It did not work.", 258 | "press-reset": "Press the RESET key on the back of the calculator.", 259 | "question": "Question", 260 | "recovery": "Open a new tab, go to the Upsilon site, go to the installer page, then click on restore mode. \nSelect “STM32 BOOTLOADER” and click “Connect”.", 261 | "recovery-fail": "The calculator does not turn on.", 262 | "recovery-success": "The calculator turns on, saying “Recovery mode”.", 263 | "reinstall-driver": "You need to reinstall the driver for the calculator. \nYou must uninstall it and then download it from the NumWorks site at the start of the update procedure or from the Upsilon installer by clicking Cancel when selecting the device.", 264 | "reset-fail": "The calculator does not work after pressing the RESET key.", 265 | "reset-success": "The calculator works after pressing the RESET key.", 266 | "reset6": "If you have an N0110, press RESET while keeping key 6 pressed. \nIf you have an N0100, press RESET with the calculator plugged into the computer. \nThe calculator should display a red LED. \nIf the screen lights up saying “numworks.com/rescue”, first install Phi.", 267 | "solution": "Solution", 268 | "switch-cable-or-computer": "Try changing cable or PC.", 269 | "using-chromium-snap": "You are using Chromium in Snap.", 270 | "using-linux": "You are using Linux.", 271 | "what-problem": "What is the problem ?", 272 | "wont-boot": "The calculator does not boot.", 273 | "worked": "It worked." 274 | }, 275 | "home": { 276 | "anyQuestions": "Any questions?", 277 | "description": "Since Upsilon is a fork of Omega, it also has all the features of Omega", 278 | "features": { 279 | "header": { 280 | "omega": "Since Upsilon is a fork of Omega, it also supports all of Omega's features", 281 | "upsilon": "Main features" 282 | } 283 | }, 284 | "findThemeList": "You can find a list of all the available themes here.", 285 | "here": "here", 286 | "name": "Home", 287 | "visitFaq": "Visit our FAQ" 288 | }, 289 | "installer": { 290 | "backingup": "Backing up...", 291 | "channels": { 292 | "beta": { 293 | "description": "Recommended. More stable than dev, often updated. Use this if you want to select a theme", 294 | "title": "Beta" 295 | }, 296 | "custom": { 297 | "description": "Use this to install custom binaries easily", 298 | "title": "Custom binpack" 299 | }, 300 | "dev": { 301 | "description": "Most up-to-date build, updated at every single change", 302 | "title": "Dev" 303 | }, 304 | "master": { 305 | "description": "Official version of Upsilon, integrating the validated changes. You should avoid using it because it's outdated and contain bugs already fixed in beta and dev", 306 | "title": "Official" 307 | } 308 | }, 309 | "connect": "Connect", 310 | "connected": "Connected", 311 | "custom": { 312 | "archive": "Extracted binaries from archive", 313 | "clickToUpload": "Click to add a file", 314 | "dfu": "Extracted binaries from DFU file", 315 | "nonBinFile": "Couldn't recognize file type!" 316 | }, 317 | "disconnect": "Disconnect", 318 | "disconnected": "Disconnected", 319 | "done": "Done", 320 | "download404": "Network Error: Couldn't find required file (404)", 321 | "downloading": "Downloading", 322 | "downloadingRecovery": "Downloading recovery software...", 323 | "drop": "Drop binpack here to install it", 324 | "e16": { 325 | "beforeLink": "To unlock your calculator, take a look at", 326 | "link": "this guide", 327 | "message": "This usually happens when you updated your calculator to Epsilon 16 or later, which locks up the calculator." 328 | }, 329 | "erasing": "Erasing", 330 | "error": "Error", 331 | "external": "Wanna install apps like KhiCAS, a CHIP-8 interpreter or NES/GB emulators or get a background on your device's home screen?", 332 | "gothere": "Go there", 333 | "hints": { 334 | "DisableProtection": "Try disabling the USB protection", 335 | "closeOtherTabs": "Try closing other tabs/apps accessing the calculator", 336 | "noDeviceSelected": { 337 | "driverHint": { 338 | "andInstall": "and install", 339 | "download": "Download", 340 | "linux": { 341 | "command": "Which can be done with the following command", 342 | "linuxMoveIt": "and move it inside the /etc/udev/rules.d folder", 343 | "thisfile": "this file" 344 | }, 345 | "rebootAfter": "and reboot after", 346 | "theDriver": "the driver" 347 | }, 348 | "li1": "The calculator is connected and says it's connected", 349 | "li2": "You installed the driver correctly", 350 | "moreHelp": { 351 | "1": "If you're still having trouble you can join the", 352 | "2": "and ask for help there.", 353 | "discord": "Omega community discord server", 354 | "needHelp": "Still not working?", 355 | "tryRecovery": "If you installed the driver and the calculator has a black screen (or the upsilon crash screen), you can try recovering it by pressing the 6 and reset (at the back of the calculator) keys at the same time and then pressing the recovery button." 356 | }, 357 | "text1": "Make sure you select your calculator in the menu.\n If it didn't show up make sure that:" 358 | } 359 | }, 360 | "incompatibleBrowser": "It looks like your browser doesn't support WebUSB therefore, you will not be able to install Upsilon from this browser. \n Please use a Chromium-based browser (Chrome, Brave, etc.) ", 361 | "install": "Install", 362 | "installationFail": "Installation of Upsilon failed.", 363 | "installationSuccess": "Thanks you for installing Upsilon.", 364 | "installing": "Installing...", 365 | "installing1of2": "Installing 1 of 2...", 366 | "installing2of2": "Installing 2 of 2...", 367 | "installingRecovery": "Installing recovery software...", 368 | "internalUnavailable": "Warning: Internal storage unavailable. This happens when you use a bootloader and means you can't update or remove the bootloader right now. Use the recovery mode for that instead.", 369 | "joinDiscord": "Join the Omega community discord server", 370 | "jointhe": "Wanna chat with Upsilon/Omega's contributors or ask for help and stuff?", 371 | "lang": "Language", 372 | "languages": { 373 | "de": "German", 374 | "en": "English", 375 | "es": "Spanish", 376 | "fr": "French", 377 | "hu": "Hungarian", 378 | "it": "Italian", 379 | "nl": "Dutch", 380 | "pt": "Portuguese" 381 | }, 382 | "name": "Install", 383 | "noSlots": "Don't use slots", 384 | "of2": " of 2", 385 | "pleaseclickon": "Please click on", 386 | "recovery": "Recovery", 387 | "recoveryConnected": "Connected in recovery mode. You should be able to install Upsilon normally now.", 388 | "recoveryDone": "Recovery software installed successfully! You can now press on connect and install Upsilon.", 389 | "recoverySuccess": "Recovery mode is now installed successfully.", 390 | "releaseChannel": "Release channel", 391 | "restore": "Restore scripts", 392 | "restoring": "Restoring scripts...", 393 | "selecta": "Select a", 394 | "slot": "Slot", 395 | "tError": { 396 | "li1": "Verify that no other tab is using the USB", 397 | "li2": "Reboot your computer", 398 | "li3": "Use a different port", 399 | "li4": "Use a different cable", 400 | "text": "Make sure you don't disconnect your device during the transfer! If you didn't disconnect your device you can try the following things:" 401 | }, 402 | "thanks": "Thank you for installing Upsilon! Get ready to Enjoy the superiority of open source ;)", 403 | "theme": "Theme", 404 | "themes": { 405 | "ahegao": "Ahegao", 406 | "arc_dark": "Arc Dark", 407 | "cursed_light": "Omega Cursed", 408 | "epsilon_dark": "Epsilon Dark", 409 | "epsilon_light": "Epsilon Light", 410 | "miami_vice": "Miami Vice", 411 | "omega_blink": "Omega Blink", 412 | "omega_dark": "Omega Dark", 413 | "omega_dracula": "Omega Dracula", 414 | "omega_freenumworks": "Omega FreeNumworks", 415 | "omega_kawaii": "Omega Kawaii", 416 | "omega_light": "Omega Light", 417 | "omega_shrek": "Omega Shrek", 418 | "omega_trans": "Omega Trans", 419 | "upsilon_dark": "Upsilon Dark", 420 | "upsilon_light": "Upsilon Light" 421 | }, 422 | "thenselect": "then select your calculator in the peripherals list", 423 | "title": "Install Upsilon", 424 | "unknownModelConnected": { 425 | "li1": "If you have Epsilon 16 or later you need to unlock your calculator (see FAQ)", 426 | "li2": "Else you probably have a protected device and you may need to disable the protection to continue", 427 | "text": "Warning: Could not detect the calculator model" 428 | }, 429 | "unknownModelDone": "Done. You can now reset your calculator manually for the changes to take effect.", 430 | "unsupportedModel": "Unsupported model", 431 | "updateBootloader": "Update bootloader", 432 | "username": "Username", 433 | "waitingForReboot": "Waiting for calculator to restart...", 434 | "whatnext": "What next?", 435 | "writing": "Writing" 436 | }, 437 | "message": "hello i18n !!", 438 | "notFound": { 439 | "goHome": "Go home", 440 | "title": "Bruh", 441 | "underTitle": "That page does not exist mate" 442 | }, 443 | "releases": { 444 | "change": "CHG", 445 | "dev": "Developing", 446 | "name": "Releases", 447 | "new": "NEW", 448 | "update": "UPD", 449 | "version": "Version", 450 | "versions": { 451 | "1-0": { 452 | "Apps": "Reversal of the position of the graphic and RPN applications", 453 | "Atomic": "Bug corrected in the periodic table", 454 | "Battery": "Update the battery logo", 455 | "Bootloader": "Brand-new bootloader with security improvements", 456 | "Equal": "Simplification of the '=' sign in the calculation application", 457 | "FStrings": "Support of f-Strings in python", 458 | "FunctionColor": "Added a way to change the color of functions and sequences", 459 | "Gutter": "Gutter corrected in the python application", 460 | "Heap": "Decrease the size of the python heap from 100 to 67kb", 461 | "Kandinsky": "New functions in the Kandinsky module", 462 | "NestedRadicals": "Simplification of nested square roots", 463 | "Operators": "Support of operators overloading in python", 464 | "Other": "And other small changes", 465 | "Parameters": "New parameters for python, external applications and luminosity", 466 | "RPN": "Fix bugs in RPN", 467 | "Reader": "Added a reader compatible with TeX notation for mathematical formulas", 468 | "Recovery": "Added a recovery screen after a crash", 469 | "Scripts": "Removed default python scripts", 470 | "SecondDegree": "Added extra output on second degree polynomials", 471 | "ShiftOk": "Added Shift+OK to not leave the toolbox", 472 | "Storage": "Increased storage from 32 KB to 64 KB", 473 | "SumAndSequences": "Better simplification of sums and sequences", 474 | "Theme": "New Upsilon theme", 475 | "Trash": "Shift+Back recover the last deleted file", 476 | "Ulab": "Adding the Ulab module (NumPy and SciPy) in the python application", 477 | "Wallpapers": "Wallpaper support for n0110" 478 | }, 479 | "1-0-1": { 480 | "AddCharactersUrt": "In the reader application, add extra characters in the URT (``f` and ``i`)", 481 | "AddItalize": "Italicized text in some places such as function definitions in the functions application and texts and comments in the Python editor", 482 | "AddStat": "Geometric mean, Harmonic mean and Mode in the Stats tab", 483 | "AddUlab": "Added `ulab.utils`", 484 | "AddUrtFunctions": "Additional functions in URT (sums, products, integrals and binomial coefficients)", 485 | "BlockHardwareTests": "Blocking of hardwares tests in exam mode", 486 | "CyclicXNT": "XNT Cyclic (Multiple presses of XNT change the character inserted between X, N, T and θ)", 487 | "DimInAdditionalsResults": "Dimension in additional results when a unit is used", 488 | "FixBrownColorUrt": "Brown color correction in URT for the reader application", 489 | "FixReaderErrorBack": "Fixed a syntax error when reverting in the reader application", 490 | "FixShiftedIcon": "Fixed pixel shift on some icons in some themes", 491 | "MicroPythonUpgrade": "MicroPython update from 1.17 to 1.19.1", 492 | "NewFont": "New font", 493 | "PythonBrightnessControl": "Control of brightness via `set_brightness` and `get_brightness`.", 494 | "PythonCrash": "Fixed a crash when opening scripts in the Python editor", 495 | "PythonStringsItalics": "Italicized text in strings in the Python editor", 496 | "ShiftAns": "Shortcut Shift + Ans to go to the last used application", 497 | "ToolboxFontSize": "Larger text in toolboxes with automatic lateral scrolling when text is too long" 498 | } 499 | } 500 | }, 501 | "simulator": { 502 | "commingSoon": "Coming soon...", 503 | "name": "Simulator" 504 | } 505 | } -------------------------------------------------------------------------------- /src/locales/fr.json: -------------------------------------------------------------------------------- 1 | { 2 | "darkmode": "Thème sombre", 3 | "doc": { 4 | "latex": { 5 | "arrows": "Flèches", 6 | "command": "Commande", 7 | "description": "Dans l'application liseuse, vous pouvez lire un fichier txt. Vous pouvez aussi lire un fichier txt contenant des expressions LaTeX.", 8 | "functions": "Fonctions", 9 | "greekcapitalletter": "Lettres capitales grecques", 10 | "greeksmallletter": "Lettres minuscules grecques", 11 | "mathsymbols": "Symboles mathématiques", 12 | "output": "Résultat", 13 | "reference": "Référence LaTeX", 14 | "symbolslisted": "Pour qu'une expression LaTeX soit rendue, vous devez l'entourer de signes dollar. Tous les symboles que vous pouvez utiliser sont listés ici :" 15 | }, 16 | "reader": { 17 | "color": "Couleur", 18 | "colors": { 19 | "Cyan": "cyan", 20 | "blue": "Bleu", 21 | "brown": "Brun", 22 | "green": "Vert", 23 | "lastColor": "Arrêter d'utiliser la couleur xx", 24 | "lightBlue": "Bleu clair", 25 | "lightGreen": "Vert clair", 26 | "lightRed": "Rouge clair", 27 | "magenta": "Magenta", 28 | "orange": "Orange", 29 | "pink": "Rose", 30 | "purple": "Violet", 31 | "red": "Rouge", 32 | "startColor": "Utiliser la couleur xx", 33 | "turquoise": "Turquoise" 34 | }, 35 | "colorsDesc": "Vous pouvez modifier la couleur du texte à l'aide des codes de couleur suivants. Le texte qui suit un code couleur sera dans la couleur correspondante.", 36 | "example": { 37 | "content": "L'entrée suivante produit la sortie suivante :", 38 | "title": "Exemple" 39 | }, 40 | "name": "La liseuse", 41 | "p1": "La liseuse peut lire les fichiers .txt que vous pouvez transférer sur votre calculatrice via", 42 | "p2": "Mais elle prend également en charge le format personnalisé .urt, qui signifie Upsilon Rich Text. Elle vous permet d'utiliser des couleurs et prend en charge un sous-ensemble de caractères spéciaux et de fonctions LaTeX.", 43 | "usingColor": "Utilisation des couleurs" 44 | }, 45 | "rpn": { 46 | "definition": { 47 | "p1": "est une autre façon d'écrire des calculs mathématiques. Elle a été inventée par le mathématicien polonais Jan Łukasiewicz en 1924.", 48 | "p2": "Cette notation offre plusieurs avantages : les calculatrices RPN sont basées sur l'utilisation d'une pile. Les opérateurs et les résulats sont tous placés en haut de la pile. Bien que cela puisse être déroutant au premier abord, on se rend vite compte que cela permet de rendre les expressions mathématiques plus faciles à comprendre et à manipuler." 49 | }, 50 | "h2": "Introduction rapide à l'application RPN d'Upsilon", 51 | "introduction": { 52 | "examples": { 53 | "1": { 54 | "li1": "Tapez 245 et appuyez sur OK", 55 | "li2": "Tapez 6598 et appuyez sur OK", 56 | "li3": "Appuyez une fois sur le bouton multiplication", 57 | "title": "Pour obtenir le résultat de 245×6598 :" 58 | }, 59 | "2": { 60 | "li1": "Tapez 65 et appuyez sur OK", 61 | "li2": "Tapez 98 et appuyez sur OK", 62 | "li3": "Tapez 78 et appuyez sur OK", 63 | "li4": "Appuyez une fois sur le bouton multiplication", 64 | "li5": "Appuyez une fois sur le bouton division", 65 | "title": "Pour obtenir le résultat de (65×98)÷78 :" 66 | }, 67 | "examples": "Exemples" 68 | }, 69 | "p1": "Quand vous voulez faire un calcul dans l'application RPN d'Upsilon, vous devez commencer par écrire tous les nombres qui interviendront dans votre expression par ordre d'apparition. Ensuite, vous pouvez appuyer sur l'opérateur approprié également par ordre d'apparition.", 70 | "p2": "Vous pouvez changer la position d'un terme dans la pile en utilisant les boutons parenthèses, ce qui le déplacera vers le haut ou le bas." 71 | }, 72 | "note": { 73 | "content": " Tout au long de l'histoire d'Omega, un bug a rendu l'application RPN difficile à utiliser en toute sécurité sur la calculatrice. Cependant, grâce à RedGlow, dl11 et Overengined, ce bug est maintenant corrigé, et il est désormais possible d'utiliser l'application RPN en toute sécurité.", 74 | "title": "Note :" 75 | }, 76 | "rpn": "Notation Polonaise Inverse", 77 | "the": "La" 78 | }, 79 | "themes": { 80 | "description": "Tous ces thèmes peuvent être installés avec l'installeur en ligne. Une liste plus exhaustive des thèmes et de leur code source est disponible ici:", 81 | "title": "Liste des thèmes" 82 | } 83 | }, 84 | "downloads": { 85 | "download": "Télécharger Upsilon", 86 | "installNow": "Installez Upsilon maintenant", 87 | "onlineInstaller": "Installateur en ligne" 88 | }, 89 | "faq": { 90 | "name": "FAQ", 91 | "questions": { 92 | "canRollback": { 93 | "answer": "Oui, il suffit d'aller sur numworks.com et de mettre à jour la calculatrice, ce qui installe la dernière version d'epsilon sur les slots A et B. Pour enlever le bootloader il faut passer par la procédure de restauration avec reset + 6. Cette procédure va verrouiller la calculatrice! Si vous ne voulez pas verrouiller votre calculatrice, vous pouvez installer epsilon 18.2.0 avec le fichier 18-2-0.dfu (Il est disponible sur le serveur Discord Omega Community) Une fois que vous avez installé Epsilon 18.2.0, vous devriez pouvoir mettre à jour votre calculatrice sans la verrouiller définitivement. Les versions jusqu'à 19.5 sont sûres. Faites-le à vos propres risques et posez des questions sur le serveur discord si vous avez des doutes.", 94 | "question": "Pouvez-vous revenir d'Upsilon à Epsilon ?" 95 | }, 96 | "cheatsheet": { 97 | "answer": "Pas pour l'instant, mais peut-être un jour qui sait ^^", 98 | "question": "Existe-t-il une liste d'astuces avec les raccourcis clavier/trucs et astuces du simulateur pour Upsilon ?" 99 | }, 100 | "customTheme": { 101 | "answer": "Il existe une application de création de thèmes qui facilite la création de thèmes.", 102 | "question": "Comment créer des thèmes personnalisés ?" 103 | }, 104 | "how2backup": { 105 | "answer": "L'installeur devrait automatiquement restaurer les scripts à la fin de l'installation. Vous pouvez également accéder à bit.ly/upsiBackup pour les sauvegarder manuellement.", 106 | "question": "Comment sauvegarder les données de la calculatrice ?" 107 | }, 108 | "how2contribute": { 109 | "answer": "Les contributions (rapports de bugs, demandes de fonctionnalités et commits) sont les bienvenues à la fois sur Upsilon lui-même et sur son site Web. Vous pouvez demander des fonctionnalités et signaler des bogues sur leurs outils de suivi des problèmes de référentiel respectifs : Upsilon et Upsilon-website", 110 | "question": "Comment contribuer à Upsilon/son site internet ?" 111 | }, 112 | "how2createReaderFile": { 113 | "answer": "Vous ne pouvez pas. Pour ajouter un fichier pour la liseuse à la calculatrice, vous devez vous rendre sur la page des applications externes et y transférer vos fichiers.", 114 | "question": "Comment créer un fichier pour l'application liseuse depuis la calculatrice ?" 115 | }, 116 | "how2external": { 117 | "answer": "Allez sur le lien fourni dans la page d'accueil ou après l'installation et sélectionnez les applications que vous souhaitez installer, puis cliquez sur installer.", 118 | "question": "Comment installer des applications externes ?" 119 | }, 120 | "how2py": { 121 | "answer": "Vous pouvez utiliser Omega IDE pour le faire, bien que le simulateur exécute Omega et non Upsilon et qu'il y ait actuellement des problèmes avec les transferts de fichiers (qui se produira peut-être aussi sur numworks.com).", 122 | "question": "Comment transférer des scripts vers la calculatrice/éditer des scripts en ligne sans passer par numworks.com ?" 123 | }, 124 | "how2reader": { 125 | "answer": "Accédez aux fichiers externes et ajoutez un fichier .txt ou .urt (texte enrichi Upsilon). Pour plus d'informations, consulter le tutoriel de la liseuse.", 126 | "question": "Comment utiliser l'application liseuse ?" 127 | }, 128 | "how2recovery": { 129 | "answer": "Ceci peut être utilisé lorsque le logiciel de la calculatrice est défectueux. Cela se produit généralement lorsqu'il y a une erreur lors de l'installation ou quand la calculatrice est déconnectée lors de l'installation. Appuyez simultanément sur la touche 6 et la touche de réinitialisation à l'arrière de la calculatrice (assurez-vous que votre calculatrice est connectée à l'ordinateur via USB), puis appuyez sur récupération. Sélectionnez STM32 BOOTLOADER. Après quelques instants, vous devriez pouvoir installer Upsilon normalement.", 130 | "question": "Qu'est-ce que l'option de récupération sur la page de l'installeur et comment l'utiliser ?" 131 | }, 132 | "how2testReaderOnline": { 133 | "answer": "C'est impossible pour le moment. C'est faisable avec les simulateurs Windows/Linux en plaçant les fichiers de la liseuse dans le même répertoire que les exécutables ou en transférant les fichiers de la liseuse vers la calculatrice.", 134 | "question": "Comment prévisualiser un fichier pour la liseuse en ligne ?" 135 | }, 136 | "how2themes": { 137 | "answer": "Allez à l'installeur, sélectionnez la chaîne bêta et sélectionnez votre thème. Vous devez réinstaller Upsilon pour changer de thème.", 138 | "question": "Comment installer des thèmes ?" 139 | }, 140 | "noUSBmenu": { 141 | "answer": "La protection USB a été intégrée au bootloader et n'a donc plus besoin de menu.", 142 | "question": "Le menu de la protection USB n'apparait plus dans les paramètres de la calculatrice est-ce normal ?" 143 | }, 144 | "numLocked": { 145 | "answer": "Il existe un guide expliquant comment déverrouiller votre calculatrice", 146 | "question": "Que puis-je faire si j'ai installé Epsilon 16 sur ma calculatrice ?" 147 | }, 148 | "stillCouldntFind": { 149 | "answer": "Allez sur le serveur de discord de la communauté Omega et demandez là !", 150 | "question": "Vous n'avez pas trouvé de réponse à votre question ?" 151 | }, 152 | "supportedBrowsers": { 153 | "answer": "Tout navigateur basé sur Chromium qui n'est pas trop ancien devrait fonctionner (Chrome, Brave, Edge, etc.) Firefox ne fonctionnera pas.", 154 | "question": "Quels navigateurs sont compatibles avec l'installeur ?" 155 | }, 156 | "supportedModels": { 157 | "answer": "Vous pouvez l'installer sur les N100 et N110 (si vous n'avez pas installé Epsilon 16).", 158 | "question": "Sur quels modèles de NumWorks est-il possible d'installer Upsilon ?" 159 | }, 160 | "uninstallExternal": { 161 | "answer": "Accédez à la page des applications externes en ne sélectionnant rien, ensuite, cliquez sur installer. Cela effacera toutes les applications externes ainsi que l'arrière-plan.", 162 | "question": "Comment désinstaller des applications externes ?" 163 | } 164 | }, 165 | "sections": { 166 | "canInstall": "Puis-je installer Upsilon ?", 167 | "how2": "Comment" 168 | } 169 | }, 170 | "features": { 171 | "3ds": { 172 | "description": "Omega est disponible et entièrement utilisable sur Nintendo 3DS.", 173 | "name": "Simulateur 3DS" 174 | }, 175 | "dualboot": { 176 | "description": "Omega intègre un nouveau Bootloader. Il permet de démarrer plusieurs systèmes d’exploitations à partir de différents slots.", 177 | "name": "Double démarrage" 178 | }, 179 | "external": { 180 | "description": "Installez des applications communautaires à la volée avec External. Inclus aussi KhiCAS et divers émulateurs.", 181 | "installNow": "Installez-en maintenant", 182 | "name": "Applications Externes" 183 | }, 184 | "periodic": { 185 | "description": "Inspiré par le tableau périodique de la TI83PCE, le tableau périodique d'Omega est clair et simple d'utilisation.", 186 | "name": "Tableau périodique" 187 | }, 188 | "phi": { 189 | "description": "Phi est un outil développé par M4x1m3 qui déverrouille votre calculatrice après une mise à jour Epsilon 16.", 190 | "name": "Phi" 191 | }, 192 | "plenty": { 193 | "description": "Vous pouvez y trouver une liste détaillée :", 194 | "name": "Plein d'autres plus petites fonctionnalités", 195 | "releasesLink": "Versions" 196 | }, 197 | "protection": { 198 | "content": "La mise à jour vers Epsilon 16 verrouille la calculatrice, empêchant d'installer un firmware non officiel. Cette protection empêche les mises à jour involontaires", 199 | "title": "Protection contre E16" 200 | }, 201 | "python": { 202 | "battery": "Ajout d'un moyen d'obtenir le niveau de la batterie (niveau, tension et état de charge)", 203 | "sys": "Ajout du module sys", 204 | "title": "Améliorations Python", 205 | "ulab": "Ajout d'Ulab qui contient SciPy et NumPy (N110 uniquement)" 206 | }, 207 | "reader": { 208 | "description": "Une application liseuse avec un support pour les caractères spéciaux du format LaTeX", 209 | "docLink": "En savoir plus", 210 | "name": "Liseuse" 211 | }, 212 | "rpn": { 213 | "description": "Omega supporte l'utilisation de la Notation Polonaise Inverse. Cela vous permet de saisir tous les nombres, puis de les combiner à l'aide d'opérations mathématiques.", 214 | "docLink": "En savoir plus", 215 | "name": "RPN" 216 | }, 217 | "settings": { 218 | "description": "Personnalisez le comportement de votre calculatrice à votre guise", 219 | "name": "Plus de paramètres" 220 | }, 221 | "symbolic": { 222 | "description": "Le calcul symbolique a été retiré d'Epsilon à la version 11.2. Omega réintroduit cette fonctionnalité.", 223 | "name": "Calcul symbolique" 224 | }, 225 | "themes": { 226 | "andmanymore": "Ou l'un des thèmes créés par la communauté", 227 | "description": "Personnalisez l'apparence de votre calculatrice avec l'un des thèmes suivants", 228 | "name": "Moteur de thèmes" 229 | } 230 | }, 231 | "github": { 232 | "name": "GitHub" 233 | }, 234 | "help": { 235 | "answers": "Réponses", 236 | "are-you-using-chromium-snap": "Utilisez-vous Chromium en Snap ? (which chromium renvoie-t-il un chemin commençant par /snap ?)", 237 | "are-you-using-linux": "Utilisez-vous Linux ?", 238 | "cant-detect": "Le PC ne détecte pas la calculatrice.", 239 | "chromium-snap-solution": "Suivez les instructions ici pour installer la bonne version de Chromium (commandes \"snap refresh chromium --channel=candidate/raw-usb\" et \"snap connect chromium:raw-usb\").", 240 | "continue": "Pas de réponse pour le moment, continuez a répondre aux questions ci-dessus.", 241 | "did-it-work": "Cela a fonctionné ?", 242 | "do-you-have-driver": "Avez-vous le pilote (driver) pour la calculatrice ?", 243 | "end": "Votre problème est résolu, merci d'avoir utilisé l'aide interactive d'Upsilon !", 244 | "have-driver": "Vous avez un pilote pour la calculatrice installé.", 245 | "install-driver": "Vous devez installer le pilote pour la calculatrice. Vous pouvez le télécharger sur le site de NumWorks au début de la procédure de mise à jour ou sur l'installateur d'Upsilon en cliquant sur Annuler lors de la sélection du périphérique.", 246 | "install-os": "Installez un système d'exploitation sur la calculatrice depuis les sites d'Omega/Upsilon.", 247 | "led-off": "La LED est éteinte.", 248 | "led-red": "La LED est rouge.", 249 | "led-status": "La LED de la calculatrice est de quelle couleur ?", 250 | "n????": "Le PC détecte le modèle comme une N????.", 251 | "name": "Aide", 252 | "next": "Suite", 253 | "no-driver": "Vous n'avez pas de pilote pour la calculatrice.", 254 | "not-implemented": "Ce cas n'est pas encore implémenté, merci de rejoindre notre serveur discord pour nous signaler cette erreur : https://discord.gg/X2TWhh9", 255 | "not-using-chromium-snap": "Vous n'utilisez pas Chromium en Snap.", 256 | "not-using-linux": "Vous n'utilisez pas Linux.", 257 | "not-worked": "Cela n'a pas fonctionné.", 258 | "press-reset": "Appuyez sur la touche RESET au dos de la calculatrice.", 259 | "question": "Question", 260 | "recovery": "Ouvrez un nouvel onglet, allez sur le site d'Upsilon, allez sur la page de l'installateur puis cliquez sur mode de restauration. Sélectionnez \"STM32 BOOTLOADER\" et cliquez sur \"Connexion\".", 261 | "recovery-fail": "La calculatrice ne s'allume pas.", 262 | "recovery-success": "La calculatrice s'allume en disant \"Recovery mode\".", 263 | "reinstall-driver": "Vous devez réinstaller le pilote pour la calculatrice. Vous devez le désinstaller puis le télécharger sur le site de NumWorks au début de la procédure de mise à jour ou sur l'installateur d'Upsilon en cliquant sur Annuler lors de la sélection du périphérique.", 264 | "reset-fail": "La calculatrice ne marche pas après avoir appuyé sur la touche RESET.", 265 | "reset-success": "La calculatrice marche après avoir appuyé sur la touche RESET.", 266 | "reset6": "Si vous avez une N0110, appuyez sur RESET tout en maintenant la touche 6 appuyée. Si vous avez une N0100, appuyez sur RESET avec la calculatrice branchée sur l'ordinateur. La calculatrice doit afficher une LED rouge. Si l'écran s'allume en disant \"numworks.com/rescue\", installez d'abord Phi ", 267 | "solution": "Solution", 268 | "switch-cable-or-computer": "Essayez de changer de câble ou bien de PC.", 269 | "using-chromium-snap": "Vous utilisez Chromium en Snap.", 270 | "using-linux": "Vous utilisez Linux.", 271 | "what-problem": "Quel est le problème ?", 272 | "wont-boot": "La calculatrice ne démarre pas.", 273 | "worked": "Cela a fonctionné." 274 | }, 275 | "home": { 276 | "anyQuestions": "Des questions ?", 277 | "description": "Upsilon est un fork d'Omega", 278 | "features": { 279 | "header": { 280 | "omega": "Comme Upsilon est un fork d'Omega, il prend également en charge toutes les fonctionnalités d'Omega", 281 | "upsilon": "Fonctionnalités principales" 282 | } 283 | }, 284 | "findThemeList": "Vous pouvez trouver une liste de tous les thèmes disponibles ici.", 285 | "here": "ici", 286 | "name": "Accueil", 287 | "visitFaq": "Visitez notre FAQ" 288 | }, 289 | "installer": { 290 | "backingup": "Sauvegarde...", 291 | "channels": { 292 | "beta": { 293 | "description": "Recommandée. Plus stable que Dev, souvent mise à jour. Utiliser cette version pour pouvoir choisir un thème.", 294 | "title": "Beta" 295 | }, 296 | "dev": { 297 | "description": "Version la plus à jour, mise à jour à chaque changement", 298 | "title": "Dev" 299 | }, 300 | "master": { 301 | "description": "Version officielle d'Upsilon, intégrant les changements validés. Vous ne devriez pas l'utiliser car elle n'est pas à jour et contient des bugs déjà corrigés en beta et en dev", 302 | "title": "Officiel" 303 | } 304 | }, 305 | "connect": "Connecter", 306 | "connected": "Connecté", 307 | "disconnect": "Déconnecter", 308 | "disconnected": "Déconnecté", 309 | "done": "Fait", 310 | "download404": "Erreur de réseau: Fichier non trouvé (404)", 311 | "downloading": "Téléchargement", 312 | "downloadingRecovery": "Téléchargement du logiciel de récupération...", 313 | "e16": { 314 | "beforeLink": "Pour déverrouiller votre calculatrice, jetez un œil à", 315 | "link": "ce guide", 316 | "message": "Cette erreur se produit généralement lorsque vous mettez à jour votre calculatrice vers Epsilon 16 ou une version ultérieure, ce qui verrouille la calculatrice." 317 | }, 318 | "erasing": "Effacement", 319 | "error": "Erreur", 320 | "external": "Vous voulez installer des applications comme KhiCAS, un interpréteur CHIP-8 ou des émulateurs NES/GB ou obtenir un arrière-plan sur l'écran d'accueil de votre appareil?", 321 | "gothere": "Cliquez ici", 322 | "hints": { 323 | "DisableProtection": "Essayez de désactiver la protection USB", 324 | "closeOtherTabs": "Essayez de fermer les autres onglets/applications accédant à la calculatrice", 325 | "noDeviceSelected": { 326 | "driverHint": { 327 | "andInstall": "et installez", 328 | "download": "Téléchargez", 329 | "linux": { 330 | "command": "Ce qui peut être fait avec la commande suivante", 331 | "linuxMoveIt": "et déplacez-le dans le dossier /etc/udev/rules.d", 332 | "thisfile": "ce fichier" 333 | }, 334 | "rebootAfter": "et redémarrez après", 335 | "theDriver": "le driver" 336 | }, 337 | "li1": "La calculatrice est connectée et affiche qu'elle est connectée", 338 | "li2": "Vous avez correctement installé le driver", 339 | "moreHelp": { 340 | "1": "Si vous rencontrez toujours des difficultés, vous pouvez rejoindre le", 341 | "2": "et demander de l'aide là-bas.", 342 | "discord": "Serveur discord de la communauté Omega", 343 | "needHelp": "Ça ne fonctionne toujours pas?", 344 | "tryRecovery": "Si vous avez installé le driver et que la calculatrice a un écran noir (ou l'écran de crash upsilon), vous pouvez essayer de la restaurer en appuyant simultanément sur les touches 6 et reset (à l'arrière de la calculatrice) puis en appuyant sur le bouton recovery ." 345 | }, 346 | "text1": "Assurez-vous de sélectionner votre calculatrice dans le menu. Si elle ne s'affiche pas, vérifiez que:" 347 | } 348 | }, 349 | "incompatibleBrowser": "Il semble que votre navigateur ne supporte pas WebUSB, vous ne pourrez donc pas installer Upsilon à partir de ce navigateur. Veuillez utiliser un navigateur basé sur Chromium (Chrome, Brave, etc.)", 350 | "install": "Installer", 351 | "installationFail": "Erreur lors de l'installation d'Upsilon.", 352 | "installationSuccess": "Merci d'avoir installé Upsilon.", 353 | "installing": "Installation...", 354 | "installing1of2": "Installation 1/2...", 355 | "installing2of2": "Installation 2/2...", 356 | "installingRecovery": "Installation du logiciel de récupération...", 357 | "internalUnavailable": "Avertissement : Stockage interne indisponible. Cela se produit quand le bootloader est utilisé. Pour supprimer ou mettre à jour ce dernier, veuillez utiliser le mode de restauration.", 358 | "joinDiscord": "Rejoignez le serveur discord de la communauté Omega", 359 | "jointhe": "Vous voulez discuter avec les contributeurs d'Upsilon/Omega ou demander de l'aide ?", 360 | "lang": "langage", 361 | "languages": { 362 | "de": "Allemand", 363 | "en": "Anglais", 364 | "es": "Espagnol", 365 | "fr": "Français", 366 | "hu": "Hongrois", 367 | "it": "Italien", 368 | "nl": "Néerlandais", 369 | "pt": "Portugais" 370 | }, 371 | "name": "Installer", 372 | "noSlots": "Ne pas utiliser de slots", 373 | "of2": "/2", 374 | "pleaseclickon": "Veuillez cliquer sur", 375 | "recovery": "Mode de restauration", 376 | "recoveryConnected": "Connecté en mode de récupération. Vous devriez pouvoir installer Upsilon normalement maintenant.", 377 | "recoveryDone": "Logiciel de récupération installé avec succès! Vous pouvez maintenant appuyer sur connecter et installer Upsilon normalement.", 378 | "recoverySuccess": "Mode de restauration installé avec succès.", 379 | "releaseChannel": "Canal de mise à jour", 380 | "restore": "Garder les scripts", 381 | "restoring": "Restauration des scripts...", 382 | "selecta": "Sélectionner un", 383 | "slot": "Slot", 384 | "tError": { 385 | "li1": "Vérifiez qu'aucun autre onglet n'utilise l'USB", 386 | "li2": "Redémarrez votre ordinateur", 387 | "li3": "Utiliser un autre port", 388 | "li4": "Utiliser un autre câble", 389 | "text": "Assurez-vous de ne pas déconnecter votre appareil pendant le transfert! Si vous n'avez pas déconnecté votre appareil, vous pouvez essayer les choses suivantes:" 390 | }, 391 | "thanks": "Merci d'avoir installé Upsilon ! Préparez-vous à profiter de la supériorité de l'open source ;)", 392 | "theme": "Thème", 393 | "themes": { 394 | "ahegao": "Ahegao", 395 | "arc_dark": "Arc Dark", 396 | "cursed_light": "Omega Cursed", 397 | "epsilon_dark": "Epsilon Dark", 398 | "epsilon_light": "Epsilon Light", 399 | "miami_vice": "Miami Vice", 400 | "omega_blink": "Omega Blink", 401 | "omega_dark": "Omega Dark", 402 | "omega_dracula": "Omega Dracula", 403 | "omega_freenumworks": "Omega FreeNumworks", 404 | "omega_kawaii": "Omega Kawaii", 405 | "omega_light": "Omega Light", 406 | "omega_shrek": "Omega Shrek", 407 | "omega_trans": "Omega Trans", 408 | "upsilon_dark": "Upsilon Dark", 409 | "upsilon_light": "Upsilon Light" 410 | }, 411 | "thenselect": "puis sélectionner votre calculatrice dans la liste des périphériques", 412 | "title": "Installer Upsilon", 413 | "unknownModelConnected": { 414 | "li1": "Si vous avez Epsilon 16 ou une version ultérieure, vous devez déverrouiller votre calculatrice (voir FAQ)", 415 | "li2": "Sinon, vous avez probablement un appareil protégé et vous devez peut-être désactiver la protection pour continuer (voir FAQ)", 416 | "text": "Warning : Impossible de détecter le modèle de calculatrice" 417 | }, 418 | "unknownModelDone": "Fait. Vous pouvez maintenant réinitialiser votre calculatrice manuellement pour que les modifications prennent effet.", 419 | "unsupportedModel": "Modèle non pris en charge", 420 | "updateBootloader": "Mettre à jour le bootloader", 421 | "username": "Nom d'utilisateur", 422 | "waitingForReboot": "En attente du redémarrage de la calculatrice...", 423 | "whatnext": "Et ensuite ?", 424 | "writing": "Écriture" 425 | }, 426 | "message": "hello i18n !!", 427 | "notFound": { 428 | "goHome": "Retour à l'accueil", 429 | "title": "Bruh", 430 | "underTitle": "Cette page n'existe pas mec" 431 | }, 432 | "releases": { 433 | "change": "CHG", 434 | "dev": "En développement", 435 | "name": "Versions", 436 | "new": "NEW", 437 | "update": "UPD", 438 | "version": "Version", 439 | "versions": { 440 | "1-0": { 441 | "Apps": "Inversion de la position des applications et RPN", 442 | "Atomic": "Bug corrigé dans le tableau périodique", 443 | "Battery": "Mise à jour du logo de la batterie", 444 | "Bootloader": "Tout nouveau bootloader avec des améliorations de sécurité", 445 | "Equal": "Simplification du signe '=' dans l'application calculs", 446 | "FStrings": "Support des f-Strings en python", 447 | "FunctionColor": "Ajout d'un moyen de changer la couleur des fonctions et des séquences", 448 | "Gutter": "Gouttière corrigée dans l'application python", 449 | "Heap": "Diminution la taille du tas de python de 100 à 67 Ko", 450 | "Kandinsky": "Nouvelles fonctions dans le module Kandinsky", 451 | "NestedRadicals": "Simplification des racines carrées imbriquées", 452 | "Operators": "Support de la surcharge des opérateurs en python", 453 | "Other": "Et d'autres petits changements", 454 | "Parameters": "Nouveaux paramètres pour python, les applications externes et la luminosité", 455 | "RPN": "Correction des bogues dans RPN", 456 | "Reader": "Ajout d'une liseuse compatible avec la notation TeX pour les formules mathématiques", 457 | "Recovery": "Ajout d'un écran de récupération après un crash", 458 | "Scripts": "Suppression des scripts python par défaut", 459 | "SecondDegree": "Ajout d'une sortie supplémentaire sur les polynômes du second degré", 460 | "ShiftOk": "Ajouté Shift+OK pour ne pas quitter la boîte à outils", 461 | "Storage": "Augmentation du stockage de 32 Ko à 64 Ko", 462 | "SumAndSequences": "Meilleure simplification des sommes et des séquences", 463 | "Theme": "Nouveau thème Upsilon", 464 | "Trash": "Shift + Back récupérer le dernier fichier supprimé", 465 | "Ulab": "Ajout du module Ulab (NumPy et SciPy) dans l'application python", 466 | "Wallpapers": "Support des fonds d'écran pour le n0110" 467 | }, 468 | "1-0-1": { 469 | "AddCharactersUrt": "Caractères en plus en URT (`\\f` et `\\i`)", 470 | "AddItalize": "Texte en italique dans certains endroits tels que les définitions de fonctions dans l'application fonctions et les textes et commentatires dans l'éditeur Python", 471 | "AddStat": "Moyenne géométrique, Moyenne harmonique et Mode dans l'onglet Stats", 472 | "AddUlab": "Ajout de `ulab.utils`", 473 | "AddUrtFunctions": "Fonctions en plus en URT (Sommes, Produits, Intégrales et coefficients binomiaux)", 474 | "BlockHardwareTests": "Blocage des hardwares tests en mode examen", 475 | "CyclicXNT": "XNT Cyclique (Plusieurs appuis sur XNT changent le caractère inséré entre X, N, T et θ)", 476 | "DimInAdditionalsResults": "Dimension dans les résultats additionnels quand une unité est utilisée", 477 | "FixBrownColorUrt": "Correction de la couleur marron en URT", 478 | "FixReaderErrorBack": "Correction de l'erreur de syntaxe lors du retour en arrière", 479 | "FixShiftedIcon": "Correction du pixel décalé sur certaines icônes dans certains thèmes", 480 | "MicroPythonUpgrade": "Mise à jour de MicroPython de 1.17 vers 1.19.1", 481 | "NewFont": "Nouvelle police", 482 | "PythonBrightnessControl": "Contôle de la lumisosité via `set_brightness` et `get_brightness`", 483 | "PythonCrash": "Correction du crash lors de l'ouverture des scripts", 484 | "PythonStringsItalics": "Texte en italique dans les chaines de caractères", 485 | "ShiftAns": "Raccourci Shift + Ans pour aller à la dernière application utilisée", 486 | "ToolboxFontSize": "Texte plus gros dans les boites à outils avec défilement automatique quand le texte est trop long" 487 | } 488 | } 489 | }, 490 | "simulator": { 491 | "commingSoon": "Bientôt disponible...", 492 | "name": "Simulateur" 493 | } 494 | } --------------------------------------------------------------------------------