From 61574ca1dd896b0b6bdd1617a9bb0f61f6ed3490 Mon Sep 17 00:00:00 2001 From: Wingy Date: Sat, 25 Jan 2025 15:11:16 -0500 Subject: [PATCH] Fix linter errors --- .eslintrc.cjs | 33 -- .github/workflows/contributors.yml | 28 +- .github/workflows/publish.yml | 58 ++-- .github/workflows/version.yml | 30 +- .eslintignore => .prettierignore | 3 +- .prettierrc.json | 4 + .vscode/launch.json | 6 +- README.md | 20 +- docker-compose.debug.yml | 2 +- docker-compose.yml | 2 +- eslint.config.js | 40 +++ package.json | 13 +- postinstall.cjs | 24 +- src/CC.ts | 6 +- src/Language.ts | 15 +- src/PouchDB.ts | 2 +- src/UpdateNotice.ts | 19 +- src/config/index.ts | 33 +- src/config/secret/index.js | 5 +- src/config/wishlist/index.js | 4 +- src/dbMigration.ts | 8 +- src/index.ts | 231 ++++++++------ src/languages/cs-cz.ts | 114 ++++--- src/languages/da-dk.ts | 97 +++--- src/languages/de-de.ts | 122 +++++--- src/languages/en-us.ts | 103 ++++--- src/languages/es-es.ts | 124 +++++--- src/languages/fr-ca.ts | 162 ++++++---- src/languages/fr-fr.ts | 156 ++++++---- src/languages/nb-no.ts | 109 ++++--- src/languages/nl-nl.ts | 120 +++++--- src/languages/pl-pl.ts | 422 ++++++++++++++------------ src/languages/pt-pt.ts | 455 +++++++++++++++------------- src/languages/ro-ro.ts | 130 +++++--- src/languages/ru-ru.ts | 130 +++++--- src/logger.ts | 20 +- src/manager.js | 23 +- src/middlewares/publicRoute.js | 13 +- src/middlewares/verifyAuth.js | 12 +- src/routes/adminSettings/index.js | 165 ++++++---- src/routes/api/index.js | 8 +- src/routes/api/wishlist/index.js | 6 +- src/routes/confirm-account/index.js | 17 +- src/routes/index.js | 17 +- src/routes/login/index.js | 20 +- src/routes/logout/index.js | 2 +- src/routes/manifest.json/index.js | 8 +- src/routes/oidc/index.js | 40 ++- src/routes/profile/index.js | 39 ++- src/routes/resetpw/index.js | 17 +- src/routes/setup/index.js | 49 +-- src/routes/supported-sites/index.js | 2 +- src/routes/wishlist/index.js | 122 ++++---- src/static/css/main.css | 91 ++++-- src/static/js/profile.js | 1 - src/static/js/wishlist.js | 60 ++-- src/structures/Wishlist.js | 73 +++-- src/structures/WishlistManager.js | 6 +- tsconfig.json | 2 +- 59 files changed, 2154 insertions(+), 1489 deletions(-) delete mode 100644 .eslintrc.cjs rename .eslintignore => .prettierignore (52%) create mode 100644 .prettierrc.json create mode 100644 eslint.config.js diff --git a/.eslintrc.cjs b/.eslintrc.cjs deleted file mode 100644 index 3649d95e..00000000 --- a/.eslintrc.cjs +++ /dev/null @@ -1,33 +0,0 @@ -module.exports = { - env: { - es2021: true, - node: true - }, - extends: 'standard-with-typescript', - overrides: [ - { - env: { - node: true - }, - files: [ - '.eslintrc.{js,cjs}' - ], - parserOptions: { - sourceType: 'script' - } - } - ], - parserOptions: { - ecmaVersion: 'latest', - sourceType: 'module' - }, - rules: { - '@typescript-eslint/explicit-function-return-type': 'off', - '@typescript-eslint/prefer-nullish-coalescing': 'off', - '@typescript-eslint/strict-boolean-expressions': 'off', - '@typescript-eslint/no-unsafe-argument': 'off', - '@typescript-eslint/no-floating-promises': ['error', { - ignoreIIFE: true - }] - } -} diff --git a/.github/workflows/contributors.yml b/.github/workflows/contributors.yml index ef98122b..046056c4 100644 --- a/.github/workflows/contributors.yml +++ b/.github/workflows/contributors.yml @@ -1,17 +1,17 @@ on: - push: - branches: - - master + push: + branches: + - master jobs: - contrib-readme-job: - runs-on: ubuntu-latest - name: Update README contributors - if: github.repository_owner == 'Wingysam' - steps: - - name: Update contributor list - uses: akhilmhdh/contributors-readme-action@v2.3.10 - with: - use_username: true - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + contrib-readme-job: + runs-on: ubuntu-latest + name: Update README contributors + if: github.repository_owner == 'Wingysam' + steps: + - name: Update contributor list + uses: akhilmhdh/contributors-readme-action@v2.3.10 + with: + use_username: true + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 34d57c3f..066cd7da 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -1,42 +1,42 @@ name: Publish image on: push: - tags: + tags: - '*' jobs: publish-app: runs-on: ubuntu-latest steps: - - name: Checkout repository - uses: actions/checkout@v4 + - name: Checkout repository + uses: actions/checkout@v4 - - name: Login to Docker Hub - uses: docker/login-action@v3 - with: - username: ${{ vars.DOCKERHUB_USERNAME }} - password: ${{ secrets.DOCKERHUB_TOKEN }} + - name: Login to Docker Hub + uses: docker/login-action@v3 + with: + username: ${{ vars.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} - - name: Extract metadata for the Docker image - id: meta - uses: docker/metadata-action@v5 - with: - images: ${{ vars.DOCKERHUB_USERNAME }}/christmas-community - context: git - tags: | - type=semver,pattern={{version}} - type=semver,pattern={{major}}.{{minor}} + - name: Extract metadata for the Docker image + id: meta + uses: docker/metadata-action@v5 + with: + images: ${{ vars.DOCKERHUB_USERNAME }}/christmas-community + context: git + tags: | + type=semver,pattern={{version}} + type=semver,pattern={{major}}.{{minor}} - - name: Set up QEMU - uses: docker/setup-qemu-action@v3 - - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 + - name: Set up QEMU + uses: docker/setup-qemu-action@v3 - - name: Build and push - uses: docker/build-push-action@v6 - with: - platforms: linux/amd64,linux/arm64 - push: true - tags: ${{ steps.meta.outputs.tags }} - labels: ${{ steps.meta.outputs.labels }} \ No newline at end of file + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Build and push + uses: docker/build-push-action@v6 + with: + platforms: linux/amd64,linux/arm64 + push: true + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} diff --git a/.github/workflows/version.yml b/.github/workflows/version.yml index e92c1f2b..e40d43bf 100644 --- a/.github/workflows/version.yml +++ b/.github/workflows/version.yml @@ -11,19 +11,19 @@ jobs: version-app: runs-on: ubuntu-latest steps: - - name: Checkout repository - uses: actions/checkout@v4 - with: - token: ${{ secrets.GH_TOKEN_ACTION }} + - name: Checkout repository + uses: actions/checkout@v4 + with: + token: ${{ secrets.GH_TOKEN_ACTION }} - - name: Bump version and push tag - id: changelog - uses: TriPSs/conventional-changelog-action@v6 - with: - github-token: "${{ secrets.GH_TOKEN_ACTION }}" - git-user-name: "github-actions[bot]" - git-user-email: "github-actions[bot]@users.noreply.github.com" - preset: "conventionalcommits" - output-file: false - # skip-on-empty: false # good for testing - skip-ci: false + - name: Bump version and push tag + id: changelog + uses: TriPSs/conventional-changelog-action@v6 + with: + github-token: '${{ secrets.GH_TOKEN_ACTION }}' + git-user-name: 'github-actions[bot]' + git-user-email: 'github-actions[bot]@users.noreply.github.com' + preset: 'conventionalcommits' + output-file: false + # skip-on-empty: false # good for testing + skip-ci: false diff --git a/.eslintignore b/.prettierignore similarity index 52% rename from .eslintignore rename to .prettierignore index 1e690e79..dc17e1b3 100644 --- a/.eslintignore +++ b/.prettierignore @@ -1,3 +1,2 @@ src/static/libraries -built -.eslintrc.cjs \ No newline at end of file +chart diff --git a/.prettierrc.json b/.prettierrc.json new file mode 100644 index 00000000..fd496a82 --- /dev/null +++ b/.prettierrc.json @@ -0,0 +1,4 @@ +{ + "singleQuote": true, + "semi": false +} diff --git a/.vscode/launch.json b/.vscode/launch.json index 22637f15..6188e886 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -8,13 +8,11 @@ "type": "node", "request": "launch", "name": "Launch Program", - "skipFiles": [ - "/**" - ], + "skipFiles": ["/**"], "program": "${workspaceFolder}/built/index.js", "env": { "PORT": "3000" } } ] -} \ No newline at end of file +} diff --git a/README.md b/README.md index 1416ab12..b4afae21 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,5 @@ # Christmas Community + ![Docker Pulls](https://img.shields.io/docker/pulls/wingysam/christmas-community?style=for-the-badge) ![Version](https://img.shields.io/badge/dynamic/json?color=orange&label=Version&query=version&url=https%3A%2F%2Fraw.githubusercontent.com%2FWingysam%2FChristmas-Community%2Fmaster%2Fpackage.json&style=for-the-badge) ![Language](https://img.shields.io/badge/Language-JavaScript-DDA000?style=for-the-badge) @@ -8,29 +9,35 @@ Web app for your family's Christmas shopping ## Purpose + To create a simple place for your entire family to use to find gifts that people want, and to avoid double-gifting. ## [Discord Server](https://discord.gg/Dxjh68gFzV) + To discuss the use and development of Christmas Community, you can join the Discord server at [discord.gg/Dxjh68gFzV](https://discord.gg/Dxjh68gFzV). This is also a good place to get announcements of new updates. ## Screenshots + ![Screenshot](screenshots/main.png) ![Screenshot](screenshots/list.png) ![Screenshot](screenshots/link-not-required.png) ![Screenshot](screenshots/name-from-link.png) ## Root URL + If you want put Christmas Community on a subdirectory, such as `/christmas-community`, set `ROOT_URL` to that path. For legacy reasons, `ROOT_PATH` also does this. `ROOT_URL` takes precedence over `ROOT_PATH`. ## Docker + ``` docker run --detach --name christmas-community -p 80:80 --restart always wingysam/christmas-community ``` ## Docker Compose + ```yml --- -version: "3" +version: '3' services: christmas-community: image: wingysam/christmas-community @@ -55,6 +62,7 @@ services: ``` ## Unraid + Unraid users can install Christmas Community by searching for "Christmas Community" in the Community Apps store and installing it from grtgbln's repository. Note that this is an unofficial distribution not controlled by the maintainer of Christmas Community. ## Install @@ -66,7 +74,9 @@ npm install ``` ## Configuration + Add environment variables with a .env. Example: + ```sh ## Core Settings # Where to store databases, can be a CouchDB compatible server or directory. @@ -135,7 +145,7 @@ MARKDOWN=false # GOOGLE_CLIENT_SECRET= ## OIDC Provider Details -# You can configure single sign-on to your Christmas Community instance using any OIDC provider. +# You can configure single sign-on to your Christmas Community instance using any OIDC provider. # Once you've created a client ID and secret in your authentication provider use the below environment variables to enable single sign on. # OIDC_CLIENT_ID= # OIDC_CLIENT_SECRET= @@ -150,25 +160,31 @@ UPLOAD_PFP_MAX_SIZE=5 ``` ## Default Profile Pictures + To replace the default snowman profile pictures, replace the files in `static/img/default-pfps`. In docker, mount `/usr/src/app/src/static/img/default-pfps`. ## Startup + ```sh npm start ``` ## Setup + Visit `/` on the HTTP server to add an admin account. ## Adding Sites + Christmas Community gets data about products automatically with [Wingysam/get-product-data](https://github.com/Wingysam/get-product-data). Please submit pull requests for new sites or fixes for changes to existing sites! ## Groups + Christmas Community does not yet support having multiple families in one instance. This is a planned feature that will, for example, allow you to have one group for your mom's side of the family and one group for your dad's side of the family, where both groups can access your wishlist but not each others' wishlists. A fork of Christmas Community that has this feature does exist, but most likely will not receive all new features added to the main project. It was not merged into this project because the architecture of Christmas Community prevented implementing it in a maintainable way before some refactoring is done. [Christmas-Community-Groups](https://github.com/jskiddie/Christmas-Community-Groups) # About Developer + Hi, I'm Wingy. I made this app. My website is [samwing.dev](https://samwing.dev). Please [hire me](https://wingysam.xyz/hire). [![ko-fi](https://www.ko-fi.com/img/githubbutton_sm.svg)](https://ko-fi.com/C1C2347HB) diff --git a/docker-compose.debug.yml b/docker-compose.debug.yml index ada770b0..7a5ca27c 100644 --- a/docker-compose.debug.yml +++ b/docker-compose.debug.yml @@ -9,4 +9,4 @@ services: ports: - 80:80 - 9229:9229 - command: node --inspect=0.0.0.0:9229 src/index.js \ No newline at end of file + command: node --inspect=0.0.0.0:9229 src/index.js diff --git a/docker-compose.yml b/docker-compose.yml index 38878c82..c9ce80bc 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -7,4 +7,4 @@ services: environment: NODE_ENV: production ports: - - 80:80 \ No newline at end of file + - 80:80 diff --git a/eslint.config.js b/eslint.config.js new file mode 100644 index 00000000..3eb57df9 --- /dev/null +++ b/eslint.config.js @@ -0,0 +1,40 @@ +import globals from 'globals' +import pluginJs from '@eslint/js' +import tseslint from 'typescript-eslint' + +/** @type {import('eslint').Linter.Config[]} */ +export default [ + { ignores: ['src/static/libraries/**', 'built/**'] }, + { + files: ['**/*.{js,mjs,cjs,ts}'], + }, + + { + languageOptions: { + globals: { ...globals.browser, ...globals.node, _CC: true }, + }, + }, + pluginJs.configs.recommended, + ...tseslint.configs.recommended, + { + rules: { + '@typescript-eslint/explicit-function-return-type': 'off', + '@typescript-eslint/prefer-nullish-coalescing': 'off', + '@typescript-eslint/strict-boolean-expressions': 'off', + '@typescript-eslint/no-unsafe-argument': 'off', + '@typescript-eslint/no-explicit-any': 'off', + '@typescript-eslint/no-unused-vars': [ + 'error', + { + args: 'all', + argsIgnorePattern: '^_', + caughtErrors: 'all', + caughtErrorsIgnorePattern: '^_', + destructuredArrayIgnorePattern: '^_', + varsIgnorePattern: '^_', + ignoreRestSiblings: true, + }, + ], + }, + }, +] diff --git a/package.json b/package.json index 5f43ebb7..31aaccd6 100644 --- a/package.json +++ b/package.json @@ -52,18 +52,17 @@ "yes-no": "^0.0.1" }, "devDependencies": { + "@eslint/js": "^9.19.0", "@types/lodash": "^4.14.202", "@types/node": "^20.10.4", "@types/node-fetch": "^3.0.2", "@types/pouchdb": "^6.4.2", - "@typescript-eslint/eslint-plugin": "^6.14.0", - "eslint": "^8.56.0", - "eslint-config-standard-with-typescript": "^43.0.0", - "eslint-plugin-import": "^2.29.1", - "eslint-plugin-n": "^16.4.0", - "eslint-plugin-promise": "^6.1.1", + "eslint": "^9.19.0", + "globals": "^15.14.0", "node-jq": "^4.2.2", "nodemon": "^2.0.12", - "typescript": "^5.3.3" + "prettier": "^3.4.2", + "typescript": "^5.3.3", + "typescript-eslint": "^8.21.0" } } diff --git a/postinstall.cjs b/postinstall.cjs index feabb9ff..55207865 100644 --- a/postinstall.cjs +++ b/postinstall.cjs @@ -1,11 +1,25 @@ +// eslint-disable-next-line @typescript-eslint/no-require-imports -- This is a CJS file const fs = require('fs') if (process.platform !== 'win32') { - fs.symlink('../../../node_modules/bulmaswatch', './src/static/libraries/bulmaswatch', (err) => { - if (err) console.log(err) - }) + fs.symlink( + '../../../node_modules/bulmaswatch', + './src/static/libraries/bulmaswatch', + (err) => { + if (err) console.log(err) + }, + ) } else { console.log('\x1b[31m[MANUAL ACTION REQUIRED]\x1b[0m') - console.log('Windows requires elevated permissions to create symbolic links used by the project.\n', 'Open a Powershell terminal as an Administrator and run the following commands: ') - console.log('\n cd ', __dirname, '\n', String.raw` New-Item -Path .\src\static\libraries\bulmaswatch -ItemType SymbolicLink -Value .\node_modules\bulmaswatch`, '\n') + console.log( + 'Windows requires elevated permissions to create symbolic links used by the project.\n', + 'Open a Powershell terminal as an Administrator and run the following commands: ', + ) + console.log( + '\n cd ', + __dirname, + '\n', + String.raw` New-Item -Path .\src\static\libraries\bulmaswatch -ItemType SymbolicLink -Value .\node_modules\bulmaswatch`, + '\n', + ) } diff --git a/src/CC.ts b/src/CC.ts index ec2c9430..baf130ec 100644 --- a/src/CC.ts +++ b/src/CC.ts @@ -6,7 +6,7 @@ import GetProductData from 'get-product-name' const CC = { _, moment, - GetProductData + GetProductData, } as any ;(global as any)._CC = CC @@ -14,7 +14,7 @@ const CC = { CC.packageJson = JSON.parse(await fs.readFile('package.json', 'utf-8')) CC.config = (await import('./config/index.js')).default -CC.lang = (await import ('./Language.js')).default +CC.lang = (await import('./Language.js')).default const PouchDB = (await import('./PouchDB.js')).default CC.usersDb = new PouchDB('users') @@ -24,7 +24,7 @@ CC.wishlistManager = new WishlistManager() CC.updateNotice = (await import('./UpdateNotice.js')).default -CC.getUrlForPfp = pfp => { +CC.getUrlForPfp = (pfp) => { if (pfp?.url) return pfp.url if (pfp?.file) return `${CC.config.base}uploads/${pfp.file}` if (pfp?.default) return `${CC.config.base}img/default-pfps/${pfp.default}` diff --git a/src/Language.ts b/src/Language.ts index 1a6f6dc4..7924baa3 100644 --- a/src/Language.ts +++ b/src/Language.ts @@ -3,22 +3,27 @@ import fs from 'fs/promises' import * as nativeLanguage from './languages/en-us.js' import config from './config/index.js' -const validLanguages = (await fs.readdir('built/languages')) - .map(languageFilename => languageFilename.split('.js')[0]) +const validLanguages = (await fs.readdir('built/languages')).map( + (languageFilename) => languageFilename.split('.js')[0], +) if (!validLanguages.includes(config.language)) { - console.error(`Language ${config.language} is not supported. If you know this language and would like to translate Christmas Community, please ask for help doing so here: https://github.com/Wingysam/Christmas-Community/issues/new\nSupported languages: ${validLanguages.join(', ')}`) + console.error( + `Language ${config.language} is not supported. If you know this language and would like to translate Christmas Community, please ask for help doing so here: https://github.com/Wingysam/Christmas-Community/issues/new\nSupported languages: ${validLanguages.join(', ')}`, + ) process.exit(1) } const language = await import(`./languages/${config.language}.js`) if (_CC.moment.locale(language.momentLocale) !== language.momentLocale) { - console.error(`${_CC.moment.locale()} Failed to load language ${config.language}, moment locale missing. Valid locales: ${_CC.moment.locales().join(', ')}`) + console.error( + `${_CC.moment.locale()} Failed to load language ${config.language}, moment locale missing. Valid locales: ${_CC.moment.locales().join(', ')}`, + ) process.exit(1) } -export default function lang (key, ...args) { +export default function lang(key, ...args) { const lang = language.strings[key] if (!lang) { const nativeString = nativeLanguage.strings[key] ?? key diff --git a/src/PouchDB.ts b/src/PouchDB.ts index 1c1adff0..b37abaff 100644 --- a/src/PouchDB.ts +++ b/src/PouchDB.ts @@ -4,5 +4,5 @@ import PouchFind from 'pouchdb-find' PouchDB.plugin(PouchFind) export default PouchDB.defaults({ - prefix: config.dbPrefix + prefix: config.dbPrefix, }) diff --git a/src/UpdateNotice.ts b/src/UpdateNotice.ts index 9e731d48..d9dd91e6 100644 --- a/src/UpdateNotice.ts +++ b/src/UpdateNotice.ts @@ -6,20 +6,29 @@ class UpdateNotice { current?: string latest?: string - constructor () { + constructor() { if (!config.updateCheck) return void this.checkUpdates() - setInterval(() => { void this.checkUpdates() }, 1000 * 60 * 60) // hour + setInterval( + () => { + void this.checkUpdates() + }, + 1000 * 60 * 60, + ) // hour } - async checkUpdates () { + async checkUpdates() { try { - const res = await fetch('https://raw.githubusercontent.com/Wingysam/Christmas-Community/master/package.json') + const res = await fetch( + 'https://raw.githubusercontent.com/Wingysam/Christmas-Community/master/package.json', + ) const data: typeof _CC.packageJson = await res.json() this.current = _CC.packageJson.version this.latest = data.version this.isOutdated = this.current !== this.latest - } catch (_) {} + } catch { + // Failed to check updates, probably offline or GitHub is down + } } } diff --git a/src/config/index.ts b/src/config/index.ts index 39febe0c..5d487591 100644 --- a/src/config/index.ts +++ b/src/config/index.ts @@ -10,28 +10,36 @@ const config = { siteTitle: process.env.SITE_TITLE || 'Christmas Community', shortTitle: process.env.SHORT_TITLE || 'Christmas', wishlist: (await import('./wishlist/index.js')).default, - trustProxy: process.env.TRUST_PROXY === 'true' ? true : process.env.TRUST_PROXY || 'loopback', + trustProxy: + process.env.TRUST_PROXY === 'true' + ? true + : process.env.TRUST_PROXY || 'loopback', bulmaswatch: (process.env.BULMASWATCH || 'default').toLowerCase(), pfp: process.env.PFP !== 'false', language: process.env.LANGUAGE?.toLowerCase() || 'en-us', guestPassword: process.env.GUEST_PASSWORD, customHtml: { wishlists: process.env.CUSTOM_HTML_WISHLISTS, - login: process.env.CUSTOM_HTML_LOGIN + login: process.env.CUSTOM_HTML_LOGIN, }, customCSS: process.env.CUSTOM_CSS || null, updateCheck: process.env.UPDATE_CHECK !== 'false', oidcIssuer: process.env.OIDC_ISSUER || 'https://accounts.google.com', - oidcAuthorizationURL: process.env.OIDC_AUTHORIZATION_URL || 'https://accounts.google.com/o/oauth2/auth', - oidcTokenURL: process.env.OIDC_TOKEN_URL || 'https://oauth2.googleapis.com/token', + oidcAuthorizationURL: + process.env.OIDC_AUTHORIZATION_URL || + 'https://accounts.google.com/o/oauth2/auth', + oidcTokenURL: + process.env.OIDC_TOKEN_URL || 'https://oauth2.googleapis.com/token', oidcUserInfoURL: process.env.OIDC_USERINFO_URL || null, - oidcClientId: process.env.OIDC_CLIENT_ID || process.env.GOOGLE_CLIENT_ID || null, - oidcClientSecret: process.env.OIDC_CLIENT_SECRET || process.env.GOOGLE_CLIENT_SECRET || null, + oidcClientId: + process.env.OIDC_CLIENT_ID || process.env.GOOGLE_CLIENT_ID || null, + oidcClientSecret: + process.env.OIDC_CLIENT_SECRET || process.env.GOOGLE_CLIENT_SECRET || null, oidcProviderName: process.env.OIDC_PROVIDER_NAME || 'Google', oidcEnabled: false, pfpUploadMaxSize: process.env.UPLOAD_PFP_MAX_SIZE || 5, rootUrl: appendSlash(process.env.ROOT_URL ?? process.env.ROOT_PATH ?? '/'), - base: '' // automatically set below + base: '', // automatically set below } if (config.guestPassword) config.wishlist.public = false @@ -57,13 +65,16 @@ try { try { // Abusing the URL constructor to prevent the following code from erroring if we have a non-URL. - // eslint-disable-next-line no-new new URL(config.dbPrefix) - console.error('Error: Christmas Community no longer supports external CouchDB instances. DB_PREFIX must be a local path.') + console.error( + 'Error: Christmas Community no longer supports external CouchDB instances. DB_PREFIX must be a local path.', + ) process.exit(1) -} catch {} +} catch { + // Is not a valid URL, so we allow it +} -function appendSlash (path: string) { +function appendSlash(path: string) { if (path.endsWith('/')) return path return path + '/' } diff --git a/src/config/secret/index.js b/src/config/secret/index.js index 8a3e90d4..e1b705db 100644 --- a/src/config/secret/index.js +++ b/src/config/secret/index.js @@ -3,7 +3,10 @@ import path from 'path' import fs from 'fs' import mkdirp from 'mkdirp' -const secretFilePath = path.join((process.env.SECRET_DIRNAME ? process.env.SECRET_DIRNAME : 'dbs'), 'secret.txt') +const secretFilePath = path.join( + process.env.SECRET_DIRNAME ? process.env.SECRET_DIRNAME : 'dbs', + 'secret.txt', +) let secret diff --git a/src/config/wishlist/index.js b/src/config/wishlist/index.js index e70f6f32..c423dfd2 100644 --- a/src/config/wishlist/index.js +++ b/src/config/wishlist/index.js @@ -5,6 +5,6 @@ export default { public: yesNo(process.env.LISTS_PUBLIC || false), table: yesNo(process.env.TABLE || true), note: { - markdown: yesNo(process.env.MARKDOWN || false) - } + markdown: yesNo(process.env.MARKDOWN || false), + }, } diff --git a/src/dbMigration.ts b/src/dbMigration.ts index 2f11c71a..c31119c9 100644 --- a/src/dbMigration.ts +++ b/src/dbMigration.ts @@ -1,9 +1,11 @@ -export async function doDbMigrations () { +export async function doDbMigrations() { await pfpStringToObject() } -async function pfpStringToObject () { - for (const { doc: user } of (await _CC.usersDb.allDocs({ include_docs: true })).rows) { +async function pfpStringToObject() { + for (const { doc: user } of ( + await _CC.usersDb.allDocs({ include_docs: true }) + ).rows) { if (typeof user.pfp === 'string') { user.pfp = { url: user.pfp } await _CC.usersDb.put(user) diff --git a/src/index.ts b/src/index.ts index 3fd5ffbf..90749a38 100644 --- a/src/index.ts +++ b/src/index.ts @@ -22,7 +22,9 @@ import logger from './logger.js' import { doDbMigrations } from './dbMigration.js' // from https://github.com/ai/nanoid/blob/main/url-alphabet/index.js -const nanoidWithoutUnderscores = customAlphabet('useandom-26T198340PX75pxJACKVERYMINDBUSHWOLFGQZbfghjklqvwyzrict') +const nanoidWithoutUnderscores = customAlphabet( + 'useandom-26T198340PX75pxJACKVERYMINDBUSHWOLFGQZbfghjklqvwyzrict', +) await mkdirp(config.dbPrefix) _CC.uploadDir = path.join(config.dbPrefix, 'uploads') @@ -36,7 +38,12 @@ app.set('trust proxy', config.trustProxy) // https://github.com/Wingysam/Christmas-Community/issues/17#issuecomment-1824863081 app.use((req, res, next) => { - if (!req.session?.passport || Object.keys(req.session?.passport)?.length === 0) { res.clearCookie('christmas_community.connect.sid', { path: '/wishlist' }) } + if ( + !req.session?.passport || + Object.keys(req.session?.passport)?.length === 0 + ) { + res.clearCookie('christmas_community.connect.sid', { path: '/wishlist' }) + } next() }) @@ -44,103 +51,122 @@ app.use('/uploads', express.static(_CC.uploadDir)) const db = _CC.usersDb -passport.use('local', new LocalStrategy( - (username, password, done) => { +passport.use( + 'local', + new LocalStrategy((username, password, done) => { username = username.trim() db.get(username) .then((doc: any) => { bcrypt.compare(password, doc.password, (err, correct) => { if (err) return done(err) - if (!correct) return done(null, false, { message: _CC.lang('LOGIN_INCORRECT_PASSWORD') }) + if (!correct) + return done(null, false, { + message: _CC.lang('LOGIN_INCORRECT_PASSWORD'), + }) if (correct) return done(null, doc) }) }) - .catch(err => { - if (err.message === 'missing') return done(null, false, { message: _CC.lang('LOGIN_INCORRECT_USERNAME') }) + .catch((err) => { + if (err.message === 'missing') + return done(null, false, { + message: _CC.lang('LOGIN_INCORRECT_USERNAME'), + }) return done(err) }) - } -)) + }), +) if (config.oidcEnabled) { - passport.use('oidc-login', new OpenIDConnectStrategy({ - issuer: config.oidcIssuer, - authorizationURL: config.oidcAuthorizationURL, - tokenURL: config.oidcTokenURL, - userInfoURL: config.oidcUserInfoURL, - clientID: config.oidcClientId, - clientSecret: config.oidcClientSecret, - callbackURL: config.rootUrl + 'auth/oidc/redirect' - }, - async (issuer, profile, done) => { - const oidcId = profile.id.trim() // Get OIDC id - try { - // Try to get the user from the database - const docs = await db.find({ - selector: { 'oauthConnections.oidc': { $eq: oidcId } } - }) - if (docs.docs.length === 1) { - return done(null, docs.docs[0]) - } else { - // Handle other errors, including missing user - return done(null, false, { message: _CC.lang('LOGIN_SSO_UNKNOWN_USER') }) - } - } catch (err) { - // Handle other errors, including missing user - if (err.message === 'missing') { - return done(null, false, { message: _CC.lang('LOGIN_SSO_UNKNOWN_USER') }) - } - return done(err) - } - } - )) - - passport.use('oidc-link', new OpenIDConnectStrategy({ - issuer: config.oidcIssuer, - authorizationURL: config.oidcAuthorizationURL, - tokenURL: config.oidcTokenURL, - userInfoURL: config.oidcUserInfoURL, - clientID: config.oidcClientId, - clientSecret: config.oidcClientSecret, - callbackURL: config.rootUrl + 'auth/oidc/link/redirect', - passReqToCallback: true - }, - async (req, issuer, profile, done) => { - const oidcId = profile.id.trim() // Get OIDC id - - const docs = await db.find({ - selector: { 'oauthConnections.oidc': { $eq: oidcId } } - }) - if (docs.docs.length === 1) { - req.flash('error', _CC.lang('LOGIN_SSO_LINK_FAILURE_ACCOUNT_EXISTS')) - return done(null) - } else { - try { - const doc = await db.get(req.session.passport.user) - doc.oauthConnections ??= {} - doc.oauthConnections.oidc = oidcId - await db.put(doc) - req.flash('success', _CC.lang('LOGIN_SSO_LINK_SUCCESS')) - return done(null, doc) - } catch (err) { - req.flash('error', _CC.lang('LOGIN_SSO_LINK_FAILURE')) - return done(err) - } - } - } - )) + passport.use( + 'oidc-login', + new OpenIDConnectStrategy( + { + issuer: config.oidcIssuer, + authorizationURL: config.oidcAuthorizationURL, + tokenURL: config.oidcTokenURL, + userInfoURL: config.oidcUserInfoURL, + clientID: config.oidcClientId, + clientSecret: config.oidcClientSecret, + callbackURL: config.rootUrl + 'auth/oidc/redirect', + }, + async (_issuer, profile, done) => { + const oidcId = profile.id.trim() // Get OIDC id + try { + // Try to get the user from the database + const docs = await db.find({ + selector: { 'oauthConnections.oidc': { $eq: oidcId } }, + }) + if (docs.docs.length === 1) { + return done(null, docs.docs[0]) + } else { + // Handle other errors, including missing user + return done(null, false, { + message: _CC.lang('LOGIN_SSO_UNKNOWN_USER'), + }) + } + } catch (err) { + // Handle other errors, including missing user + if (err.message === 'missing') { + return done(null, false, { + message: _CC.lang('LOGIN_SSO_UNKNOWN_USER'), + }) + } + return done(err) + } + }, + ), + ) + + passport.use( + 'oidc-link', + new OpenIDConnectStrategy( + { + issuer: config.oidcIssuer, + authorizationURL: config.oidcAuthorizationURL, + tokenURL: config.oidcTokenURL, + userInfoURL: config.oidcUserInfoURL, + clientID: config.oidcClientId, + clientSecret: config.oidcClientSecret, + callbackURL: config.rootUrl + 'auth/oidc/link/redirect', + passReqToCallback: true, + }, + async (req, _issuer, profile, done) => { + const oidcId = profile.id.trim() // Get OIDC id + + const docs = await db.find({ + selector: { 'oauthConnections.oidc': { $eq: oidcId } }, + }) + if (docs.docs.length === 1) { + req.flash('error', _CC.lang('LOGIN_SSO_LINK_FAILURE_ACCOUNT_EXISTS')) + return done(null) + } else { + try { + const doc = await db.get(req.session.passport.user) + doc.oauthConnections ??= {} + doc.oauthConnections.oidc = oidcId + await db.put(doc) + req.flash('success', _CC.lang('LOGIN_SSO_LINK_SUCCESS')) + return done(null, doc) + } catch (err) { + req.flash('error', _CC.lang('LOGIN_SSO_LINK_FAILURE')) + return done(err) + } + } + }, + ), + ) } passport.serializeUser((user, callback) => callback(null, user._id)) passport.deserializeUser((user, callback) => { db.get(user) - .then(dbUser => callback(null, dbUser)) + .then((dbUser) => callback(null, dbUser)) .catch(() => callback(null, null)) }) // https://stackoverflow.com/a/54426950 -app.use((req, res, next) => { +app.use((_req, res, next) => { const redirector = res.redirect res.redirect = function (url) { const base = this.req.app.set('base') @@ -152,17 +178,19 @@ app.use((req, res, next) => { app.use(BodyParser.urlencoded({ extended: true })) app.use(CookieParser()) -app.use(session({ - secret: config.secret, - resave: false, - saveUninitialized: true, - store: new PouchSession(new PouchDB('sessions')), - cookie: { - maxAge: config.sessionMaxAge - }, - name: 'christmas_community.connect.sid', - genid: () => nanoidWithoutUnderscores() -})) +app.use( + session({ + secret: config.secret, + resave: false, + saveUninitialized: true, + store: new PouchSession(new PouchDB('sessions')), + cookie: { + maxAge: config.sessionMaxAge, + }, + name: 'christmas_community.connect.sid', + genid: () => nanoidWithoutUnderscores(), + }), +) app.use((req, res, next) => { const basepath = req.path.substring(0, req.path.lastIndexOf('/')) @@ -179,20 +207,35 @@ app.use(passport.session()) app.use((await import('./middlewares/locals.js')).default) -app.use((req, res, next) => { +app.use((req, _res, next) => { logger.log('express', `${req.ip} - ${req.method} ${req.originalUrl}`) next() }) app.set('view engine', 'pug') app.set('views', path.resolve('./src/views')) -app.use(config.base, (await import('./routes/index.js')).default({ db, config })) - -app.listen(config.port, () => { logger.success('express', `Express server started on port ${config.port}!`) }) +app.use( + config.base, + (await import('./routes/index.js')).default({ db, config }), +) +app.listen(config.port, () => { + logger.success('express', `Express server started on port ${config.port}!`) +}) ;(() => { if (!config.dbExposePort) return const dbExposeApp = express() - dbExposeApp.use('/', ExpressPouchDB(PouchDB, { inMemoryConfig: true, logPath: config.dbLogFile })) - dbExposeApp.listen(config.dbExposePort, () => { logger.success('db expose', `DB has been exposed on port ${config.dbExposePort}`) }) + dbExposeApp.use( + '/', + ExpressPouchDB(PouchDB, { + inMemoryConfig: true, + logPath: config.dbLogFile, + }), + ) + dbExposeApp.listen(config.dbExposePort, () => { + logger.success( + 'db expose', + `DB has been exposed on port ${config.dbExposePort}`, + ) + }) })() diff --git a/src/languages/cs-cz.ts b/src/languages/cs-cz.ts index cf464aa9..402804bd 100644 --- a/src/languages/cs-cz.ts +++ b/src/languages/cs-cz.ts @@ -1,12 +1,14 @@ export const momentLocale = 'cs' export const strings = { - _NOT_LOCALIZED: key => `${key} ještě nebylo přeloženo do češtiny.`, + _NOT_LOCALIZED: (key) => `${key} ještě nebylo přeloženo do češtiny.`, ADMIN_CLEAR_WISHLISTS_BUTTON: 'Odstranit všechny seznamy', - ADMIN_CLEAR_WISHLISTS_DESCRIPTION: 'Tohle obratem odstraní všechny seznamy přání! Zvažte vyvoření zálohy databáze, než budete pokračovat.', + ADMIN_CLEAR_WISHLISTS_DESCRIPTION: + 'Tohle obratem odstraní všechny seznamy přání! Zvažte vyvoření zálohy databáze, než budete pokračovat.', ADMIN_CLEAR_WISHLISTS_HEADER: 'Odstanění seznamů', ADMIN_SETTINGS_CLEARDB_BUTTON: 'Odstranění seznamů', - ADMIN_SETTINGS_CLEARDB_DESCRIPTION: 'Upozornění: Tyto volby odstraní data! Zvažte vyvoření zálohy databáze, než budete pokračovat.', + ADMIN_SETTINGS_CLEARDB_DESCRIPTION: + 'Upozornění: Tyto volby odstraní data! Zvažte vyvoření zálohy databáze, než budete pokračovat.', ADMIN_SETTINGS_CLEARDB_HEADER: 'Odstranění dat', ADMIN_SETTINGS_CLEARDB_SUCCESS: 'Všechny seznamy úspěšně vymazány', ADMIN_SETTINGS_HEADER: 'Admin Settings', @@ -14,57 +16,76 @@ export const strings = { ADMIN_SETTINGS_USERS_ADD_HEADER: 'Přidat uživatele', ADMIN_SETTINGS_USERS_ADD_PLACEHOLDER: 'Martin', ADMIN_SETTINGS_USERS_ADD_USERNAME: 'Uživatelské jméno', - ADMIN_SETTINGS_USERS_ADD_ERROR_USERNAME_EMPTY: 'Uživatelské jméno nesmí být prázdné.', - ADMIN_SETTINGS_USERS_EDIT_DELETE_FAIL_ADMIN: 'Není možné odstanit uživatele s právy správce.', - ADMIN_SETTINGS_USERS_EDIT_DELETE_SUCCESS: name => `Uživatel ${name} úspěšně odstraněn`, + ADMIN_SETTINGS_USERS_ADD_ERROR_USERNAME_EMPTY: + 'Uživatelské jméno nesmí být prázdné.', + ADMIN_SETTINGS_USERS_EDIT_DELETE_FAIL_ADMIN: + 'Není možné odstanit uživatele s právy správce.', + ADMIN_SETTINGS_USERS_EDIT_DELETE_SUCCESS: (name) => + `Uživatel ${name} úspěšně odstraněn`, ADMIN_SETTINGS_USERS_EDIT_DEMOTE_NOT_ADMIN: 'uživatel nemá oprávnění správce', ADMIN_SETTINGS_USERS_EDIT_DEMOTE_SELF: 'Nemůžete odebrat oprávění sami sobě.', - ADMIN_SETTINGS_USERS_EDIT_DEMOTE_SUCCESS: name => `${name} už nemá oprávnění správce.`, - ADMIN_SETTINGS_USERS_EDIT_IMPERSONATE_SUCCESS: name => `Nyní jste přihlášen jako ${name}.`, + ADMIN_SETTINGS_USERS_EDIT_DEMOTE_SUCCESS: (name) => + `${name} už nemá oprávnění správce.`, + ADMIN_SETTINGS_USERS_EDIT_IMPERSONATE_SUCCESS: (name) => + `Nyní jste přihlášen jako ${name}.`, ADMIN_SETTINGS_USERS_EDIT_NO_USERNAME_PROVIDED: 'Nevybrán žádný uživatel.', - ADMIN_SETTINGS_USERS_EDIT_PROMOTE_ALREADY_ADMIN: 'Uživatel již má oprávnění správce.', + ADMIN_SETTINGS_USERS_EDIT_PROMOTE_ALREADY_ADMIN: + 'Uživatel již má oprávnění správce.', ADMIN_SETTINGS_USERS_EDIT_PROMOTE_DEMOTE_NOT_FOUND: 'Uživatel nenalezen.', - ADMIN_SETTINGS_USERS_EDIT_PROMOTE_SUCCESS: name => `Oprávnění spravce přidělena ${name}.`, + ADMIN_SETTINGS_USERS_EDIT_PROMOTE_SUCCESS: (name) => + `Oprávnění spravce přidělena ${name}.`, ADMIN_SETTINGS_USERS_EDIT_RENAMED_USER: 'Uživatel přejmenován!', - ADMIN_SETTINGS_USERS_EDIT_SAME_NAME: 'Původní uživatelské jméno je stejné jako to původní.', + ADMIN_SETTINGS_USERS_EDIT_SAME_NAME: + 'Původní uživatelské jméno je stejné jako to původní.', ADMIN_SETTINGS_USERS_EDIT: 'Upravit', ADMIN_SETTINGS_USERS_HEADER: 'Uživatelé', ADMIN_SETTINGS_VERSION_INFO: 'Informace o verzi', ADMIN_USER_EDIT_ACCOUNT_UNCONFIRMED: 'Tento účet zatím ještě nebyl potvrzen.', - ADMIN_USER_EDIT_ADMIN_ISADMIN: name => `${name} je spravcem.`, - ADMIN_USER_EDIT_ADMIN_NOTADMIN: name => `${name} není správcem.`, + ADMIN_USER_EDIT_ADMIN_ISADMIN: (name) => `${name} je spravcem.`, + ADMIN_USER_EDIT_ADMIN_NOTADMIN: (name) => `${name} není správcem.`, ADMIN_USER_EDIT_ADMIN: 'Správce', ADMIN_USER_EDIT_CHANGE_NAME: 'Změnit jméno', ADMIN_USER_EDIT_CHANGE_USERNAME: 'Změnit přihlašovací jméno', ADMIN_USER_EDIT_CONFIRMATION_LINK: 'Potvrzovací odkaz', ADMIN_USER_EDIT_DELETE_ADMIN: 'Uživatel je spávce', ADMIN_USER_EDIT_DELETE_HEADER: 'Nezvratné odstranění', - ADMIN_USER_EDIT_DELETE_USER: name => `Odstranit uživatele ${name}`, + ADMIN_USER_EDIT_DELETE_USER: (name) => `Odstranit uživatele ${name}`, ADMIN_USER_EDIT_DEMOTE_SELF: 'Nemůžete odebrat oprávění sami sobě.', - ADMIN_USER_EDIT_DEMOTE: name => `Odebrat oprávnění ${name}`, - ADMIN_USER_EDIT_EDITING_USER: name => `Úprava uživatele "${name}"`, + ADMIN_USER_EDIT_DEMOTE: (name) => `Odebrat oprávnění ${name}`, + ADMIN_USER_EDIT_EDITING_USER: (name) => `Úprava uživatele "${name}"`, ADMIN_USER_EDIT_GENERATE_NEW_LINK: 'Vygenerovat nový odkaz', - ADMIN_USER_EDIT_IMPERSONATE_BUTTON: name => `Přihlásit se jako ${name}`, + ADMIN_USER_EDIT_IMPERSONATE_BUTTON: (name) => `Přihlásit se jako ${name}`, ADMIN_USER_EDIT_IMPERSONATE_HEADER: 'Přihlásit se jako', - ADMIN_USER_EDIT_LINK_EXPIRY_FUTURE: fromNow => `Platnost odkazu vyprší ${fromNow}`, // fromNow is localized by moment - ADMIN_USER_EDIT_LINK_EXPIRY_PAST: fromNow => `Platnost odkazu vypršela ${fromNow}`, - ADMIN_USER_EDIT_PROMOTE: name => `Přidat oprávnění ${name}`, - ADMIN_USER_EDIT_RESET_PASSWORD_HASLINK_EXPIRY_FUTURE: fromNow => `Vyprší ${fromNow}`, - ADMIN_USER_EDIT_RESET_PASSWORD_HASLINK_EXPIRY_PAST: fromNow => `Vypršelo ${fromNow}`, - ADMIN_USER_EDIT_RESET_PASSWORD_HASLINK: 'Zde je odkaz na obnovení hesla pro uživatele.', + ADMIN_USER_EDIT_LINK_EXPIRY_FUTURE: (fromNow) => + `Platnost odkazu vyprší ${fromNow}`, // fromNow is localized by moment + ADMIN_USER_EDIT_LINK_EXPIRY_PAST: (fromNow) => + `Platnost odkazu vypršela ${fromNow}`, + ADMIN_USER_EDIT_PROMOTE: (name) => `Přidat oprávnění ${name}`, + ADMIN_USER_EDIT_RESET_PASSWORD_HASLINK_EXPIRY_FUTURE: (fromNow) => + `Vyprší ${fromNow}`, + ADMIN_USER_EDIT_RESET_PASSWORD_HASLINK_EXPIRY_PAST: (fromNow) => + `Vypršelo ${fromNow}`, + ADMIN_USER_EDIT_RESET_PASSWORD_HASLINK: + 'Zde je odkaz na obnovení hesla pro uživatele.', ADMIN_USER_EDIT_RESET_PASSWORD_HEADER: 'Obnovit heslo', - ADMIN_USER_EDIT_RESET_PASSWORD_LINK_CANCEL: 'Zneplatnit odkaz na obnovení hesla', - ADMIN_USER_EDIT_RESET_PASSWORD_LINK_CREATE: 'Vytvořit odkaz na obnovení hesla', - ADMIN_USER_EDIT_RESET_PASSWORD_LINK_REFRESH: 'Obnovit odkaz na obnovení hesla', + ADMIN_USER_EDIT_RESET_PASSWORD_LINK_CANCEL: + 'Zneplatnit odkaz na obnovení hesla', + ADMIN_USER_EDIT_RESET_PASSWORD_LINK_CREATE: + 'Vytvořit odkaz na obnovení hesla', + ADMIN_USER_EDIT_RESET_PASSWORD_LINK_REFRESH: + 'Obnovit odkaz na obnovení hesla', ADMIN_USER_EDIT_USERNAME: 'Uživatelské jméno', BACK_BUTTON: 'Zpět', - CONFIRM_ACCOUNT_EXPIRED: 'Váš odkaz pro vytvoření účtu vypršel. Zažádejte si o nový.', + CONFIRM_ACCOUNT_EXPIRED: + 'Váš odkaz pro vytvoření účtu vypršel. Zažádejte si o nový.', CONFIRM_ACCOUNT_HEADER_INVALID: `${_CC.config.siteTitle} | Neplatný potvrzovací odkaz`, CONFIRM_ACCOUNT_HEADER_VALID: `${_CC.config.siteTitle} | Potvrdit vytvoření účtu`, - CONFIRM_ACCOUNT_INVALID: 'Tento potvrzovací odkaz není platný. Účet mohl být vymazán neco odkaz nebyl zpopírován celý.', + CONFIRM_ACCOUNT_INVALID: + 'Tento potvrzovací odkaz není platný. Účet mohl být vymazán neco odkaz nebyl zpopírován celý.', CONFIRM_ACCOUNT_SET_PW_BUTTON: `Join ${_CC.config.siteTitle}`, CONFIRM_ACCOUNT_SET_PW_PLACEHOLDER: 'hEsl0!', - CONFIRM_ACCOUNT_SET_PW_TEXT: name => `Ahoj ${name}! Prosím nastavte si zde heslo.`, + CONFIRM_ACCOUNT_SET_PW_TEXT: (name) => + `Ahoj ${name}! Prosím nastavte si zde heslo.`, CONFIRM_ACCOUNT_SUCCESS: `Vítejte na ${_CC.config.siteTitle}!`, LOGIN_BUTTON: 'Přihlásit', LOGIN_PASSWORD_PLACEHOLDER: 'hEsl0!', @@ -77,11 +98,11 @@ export const strings = { NAVBAR_LOGOUT: 'Odhlásit', NAVBAR_PROFILE: 'Profil', NAVBAR_WISHLIST: 'Můj seznam přání', - NOTE_BACK: name => `Zpět na ${name} seznam přání`, + NOTE_BACK: (name) => `Zpět na ${name} seznam přání`, NOTE_GET_PRODUCT_DATA: 'Získat data o produktu', NOTE_GUARD: 'Neplatné uživatelské jméno', NOTE_IMAGE_URL: 'URL obrázku', - NOTE_MISSING_PROP: prop => `Chybí vlastnost: ${prop}`, // not really possible to localize this unfortunately + NOTE_MISSING_PROP: (prop) => `Chybí vlastnost: ${prop}`, // not really possible to localize this unfortunately NOTE_NAME: 'Jméno', NOTE_NOTE: 'Poznámka', NOTE_PRICE: 'Cena', @@ -101,16 +122,19 @@ export const strings = { PROFILE_PASSWORD_REQUIRED_NEW: 'Nevyplněno nové heslo', PROFILE_PASSWORD_REQUIRED_OLD: 'Nevyplněno původní heslo', PROFILE_PASSWORD_SUCCESS: 'Heslo úspěšně změněno!', - PROFILE_PASSWORD_TITLE: name => `Nastavení profilu - Heslo - ${name}`, + PROFILE_PASSWORD_TITLE: (name) => `Nastavení profilu - Heslo - ${name}`, PROFILE_SAVE_PFP_DISABLED: 'Profilové obrázky jsou zakázané', PROFILE_SAVE_PFP_SUCCESS: 'Profilový obrázek úspěšně uložen!', PROFILE_SECURITY_CHANGE_PASSWORD: 'Změnit heslo', PROFILE_SECURITY: 'Zabezpečení', - PROFILE_TITLE: name => `Nastavení profilu - ${name}`, + PROFILE_TITLE: (name) => `Nastavení profilu - ${name}`, RESET_PASSWORD_BUTTON: 'Obnovení hesla', - RESET_PASSWORD_GREETING_EXPIRED: 'Platnost Vašeho odkazu pro obnovení hesla vypršela. Požádejte si o nový.', - RESET_PASSWORD_GREETING_INVALID: 'Tento odkaz pro obnovení hesla není platný. Účet mohl být vymazán neco odkaz nebyl zpopírován celý.', - RESET_PASSWORD_GREETING_VALID: name => `Ahoj ${name}! Prosím nastavte si zde heslo.`, + RESET_PASSWORD_GREETING_EXPIRED: + 'Platnost Vašeho odkazu pro obnovení hesla vypršela. Požádejte si o nový.', + RESET_PASSWORD_GREETING_INVALID: + 'Tento odkaz pro obnovení hesla není platný. Účet mohl být vymazán neco odkaz nebyl zpopírován celý.', + RESET_PASSWORD_GREETING_VALID: (name) => + `Ahoj ${name}! Prosím nastavte si zde heslo.`, RESET_PASSWORD_HEADER_INVALID: `${_CC.config.siteTitle} | Neplatný odkaz pro obnovení hesla`, RESET_PASSWORD_HEADER_VALID: `${_CC.config.siteTitle} | Obnovit heslo`, RESET_PASSWORD_PASSWORD_PLACEHOLDER: 'hEsl0!', @@ -124,7 +148,8 @@ export const strings = { SETUP_USERNAME_PLACEHOLDER: 'Martin', SETUP_USERNAME: 'Uživatelské jméno', SUPPORTED_SITES_HEADER: 'Podporované obchody', - SUPPORTED_SITES_TEXT: 'Nefunguje obchod nebo úplně chybí? Založ nový ticket ZDE! :)', + SUPPORTED_SITES_TEXT: + 'Nefunguje obchod nebo úplně chybí? Založ nový ticket ZDE! :)', UPDATE_NOTICE: (current, latest) => ` Nepoužíváte poslední verzi Christmas Community. V nové verzi mohou být nové funkce nebo opravy chyb. Zvžte aktualizaci :) @@ -137,10 +162,11 @@ export const strings = { Aktuální verze: ${latest} Tato notifikace se zobrazuje pouze správcům.`, WISHLIST_ADD: 'Přidat položku na seznam přání', - WISHLIST_ADDED_BY_USER: addedBy => `Přidáno: ${addedBy}`, - WISHLIST_ADDED_BY_GUEST: "Hostující Uživatel", + WISHLIST_ADDED_BY_USER: (addedBy) => `Přidáno: ${addedBy}`, + WISHLIST_ADDED_BY_GUEST: 'Hostující Uživatel', WISHLIST_ADDED_BY: 'Přidáno', - WISHLIST_CONFLICT: 'Položky byly přidány příliš rychle po sobě. Zkuste to znovu.', + WISHLIST_CONFLICT: + 'Položky byly přidány příliš rychle po sobě. Zkuste to znovu.', WISHLIST_DELETE: 'Odstranit', WISHLIST_EDIT_ITEM: 'Upravit', WISHLIST_IMAGE: 'Obrázek', @@ -160,7 +186,7 @@ export const strings = { WISHLIST_PLEDGE_ITEM: 'Rezervovat', WISHLIST_PLEDGE_SUCCESS: 'Úspěšně zarezervováno!', WISHLIST_PLEDGE: 'Rezervovat', - WISHLIST_PLEDGED: pledgedBy => `Zarezervováno ${pledgedBy}`, + WISHLIST_PLEDGED: (pledgedBy) => `Zarezervováno ${pledgedBy}`, WISHLIST_PRICE: 'Cena', WISHLIST_REFRESH_GUARD: 'Neplatné uživatelské jméno', WISHLIST_REFRESH_NO_URL: 'Položka nená žádný odkaz.', @@ -168,7 +194,7 @@ export const strings = { WISHLIST_REMOVE_GUARD: 'Nesprávný uživatel', WISHLIST_REMOVE_MISSING: 'Položka nenalezena', WISHLIST_REMOVE_SUCCESS: 'Úspěšně odebráno ze seznamu', - WISHLIST_TITLE: name => `${_CC.config.siteTitle} - Seznam přání - ${name}`, + WISHLIST_TITLE: (name) => `${_CC.config.siteTitle} - Seznam přání - ${name}`, WISHLIST_UNPLEDGE_GUARD: 'You did not pledge for this', // should never happen unless someone makes their own http requests WISHLIST_UNPLEDGE_MISSING: 'Položka nenalezena', WISHLIST_UNPLEDGE_SUCCESS: 'Rezervace zrušena!', @@ -176,7 +202,7 @@ export const strings = { WISHLIST_URL_LABEL: `Jméno položky nebo odkaz na ni (odkazy na CZ obchody nefunkční) (Podporované obchody)`, WISHLIST_URL_PLACEHOLDER: 'https://www.amazon.com/dp/B00ZV9RDKK', WISHLIST_URL_REQUIRED: 'Nevyplněna položka nebo odkaz na ni.', - WISHLISTS_COUNTS_SELF: name => `${name}: ???/???`, + WISHLISTS_COUNTS_SELF: (name) => `${name}: ???/???`, WISHLISTS_COUNTS: (name, pledged, total) => `${name}: ${pledged}/${total}`, - WISHLISTS_TITLE: `${_CC.config.siteTitle} - Seznamy přání` + WISHLISTS_TITLE: `${_CC.config.siteTitle} - Seznamy přání`, } as const diff --git a/src/languages/da-dk.ts b/src/languages/da-dk.ts index 686088b4..457e62d4 100644 --- a/src/languages/da-dk.ts +++ b/src/languages/da-dk.ts @@ -1,12 +1,14 @@ export const momentLocale = 'da' export const strings = { - _NOT_LOCALIZED: key => `${key} er ikke blevet oversat til dansk endnu.`, + _NOT_LOCALIZED: (key) => `${key} er ikke blevet oversat til dansk endnu.`, ADMIN_CLEAR_WISHLISTS_BUTTON: 'Slet alle ønskelister', - ADMIN_CLEAR_WISHLISTS_DESCRIPTION: 'Advarsel: Dette vil slette alt data! Foretag venligst backup inden du fortsætter.', + ADMIN_CLEAR_WISHLISTS_DESCRIPTION: + 'Advarsel: Dette vil slette alt data! Foretag venligst backup inden du fortsætter.', ADMIN_CLEAR_WISHLISTS_HEADER: 'Slet ønskelister', ADMIN_SETTINGS_CLEARDB_BUTTON: 'Slet ønskelister', - ADMIN_SETTINGS_CLEARDB_DESCRIPTION: 'Advarsel: Dette vil slette alt data! Foretag venligst backup inden du fortsætter.', + ADMIN_SETTINGS_CLEARDB_DESCRIPTION: + 'Advarsel: Dette vil slette alt data! Foretag venligst backup inden du fortsætter.', ADMIN_SETTINGS_CLEARDB_HEADER: 'Slet data', ADMIN_SETTINGS_CLEARDB_SUCCESS: 'Slet alle ønskelister', ADMIN_SETTINGS_HEADER: 'Administration', @@ -16,55 +18,67 @@ export const strings = { ADMIN_SETTINGS_USERS_ADD_USERNAME: 'Brugernavn', ADMIN_SETTINGS_USERS_ADD_ERROR_USERNAME_EMPTY: 'Brugernavn er påkrævet', ADMIN_SETTINGS_USERS_EDIT_DELETE_FAIL_ADMIN: 'Brugeren er administrator', - ADMIN_SETTINGS_USERS_EDIT_DELETE_SUCCESS: name => `Brugeren blev fjernet - ${name}`, + ADMIN_SETTINGS_USERS_EDIT_DELETE_SUCCESS: (name) => + `Brugeren blev fjernet - ${name}`, ADMIN_SETTINGS_USERS_EDIT_DEMOTE_NOT_ADMIN: 'Bruger er ikke administrator', ADMIN_SETTINGS_USERS_EDIT_DEMOTE_SELF: 'Du kan ikke degradere dig selv.', - ADMIN_SETTINGS_USERS_EDIT_DEMOTE_SUCCESS: name => `${name} er ikke længere administrator.`, - ADMIN_SETTINGS_USERS_EDIT_IMPERSONATE_SUCCESS: name => `Du er nu logget ind som ${name}.`, + ADMIN_SETTINGS_USERS_EDIT_DEMOTE_SUCCESS: (name) => + `${name} er ikke længere administrator.`, + ADMIN_SETTINGS_USERS_EDIT_IMPERSONATE_SUCCESS: (name) => + `Du er nu logget ind som ${name}.`, ADMIN_SETTINGS_USERS_EDIT_NO_USERNAME_PROVIDED: 'Brugernavn er påkrævet', - ADMIN_SETTINGS_USERS_EDIT_PROMOTE_ALREADY_ADMIN: 'Brugeren er allerede administrator', - ADMIN_SETTINGS_USERS_EDIT_PROMOTE_DEMOTE_NOT_FOUND: 'Brugeren blev ikke fundet', - ADMIN_SETTINGS_USERS_EDIT_PROMOTE_SUCCESS: name => `${name} er nu administrator.`, + ADMIN_SETTINGS_USERS_EDIT_PROMOTE_ALREADY_ADMIN: + 'Brugeren er allerede administrator', + ADMIN_SETTINGS_USERS_EDIT_PROMOTE_DEMOTE_NOT_FOUND: + 'Brugeren blev ikke fundet', + ADMIN_SETTINGS_USERS_EDIT_PROMOTE_SUCCESS: (name) => + `${name} er nu administrator.`, ADMIN_SETTINGS_USERS_EDIT_RENAMED_USER: 'Omdøb bruger', ADMIN_SETTINGS_USERS_EDIT_SAME_NAME: 'Brugernavnet er optaget.', ADMIN_SETTINGS_USERS_EDIT: 'Redigér', ADMIN_SETTINGS_USERS_HEADER: 'Brugere', ADMIN_SETTINGS_VERSION_INFO: 'Version', ADMIN_USER_EDIT_ACCOUNT_UNCONFIRMED: 'Kontoen er ikke bekræftet.', - ADMIN_USER_EDIT_ADMIN_ISADMIN: name => `${name} er administrator.`, - ADMIN_USER_EDIT_ADMIN_NOTADMIN: name => `${name} er ikke administrator.`, + ADMIN_USER_EDIT_ADMIN_ISADMIN: (name) => `${name} er administrator.`, + ADMIN_USER_EDIT_ADMIN_NOTADMIN: (name) => `${name} er ikke administrator.`, ADMIN_USER_EDIT_ADMIN: 'Administrator', ADMIN_USER_EDIT_CHANGE_NAME: 'Ændre navn', ADMIN_USER_EDIT_CHANGE_USERNAME: 'Ændre brugernavn', ADMIN_USER_EDIT_CONFIRMATION_LINK: 'Bekræftelseslink', ADMIN_USER_EDIT_DELETE_ADMIN: 'Brugeren er administrator', ADMIN_USER_EDIT_DELETE_HEADER: 'Permanent sletning', - ADMIN_USER_EDIT_DELETE_USER: name => `Slet bruger - ${name}`, + ADMIN_USER_EDIT_DELETE_USER: (name) => `Slet bruger - ${name}`, ADMIN_USER_EDIT_DEMOTE_SELF: 'Du kan ikke degradere dig selv', - ADMIN_USER_EDIT_DEMOTE: name => `Degradér ${name}`, - ADMIN_USER_EDIT_EDITING_USER: name => `Rediger bruger - "${name}"`, + ADMIN_USER_EDIT_DEMOTE: (name) => `Degradér ${name}`, + ADMIN_USER_EDIT_EDITING_USER: (name) => `Rediger bruger - "${name}"`, ADMIN_USER_EDIT_GENERATE_NEW_LINK: 'Generér nyt link', - ADMIN_USER_EDIT_IMPERSONATE_BUTTON: name => `Log ind som ${name}`, + ADMIN_USER_EDIT_IMPERSONATE_BUTTON: (name) => `Log ind som ${name}`, ADMIN_USER_EDIT_IMPERSONATE_HEADER: 'Log ind som bruger', - ADMIN_USER_EDIT_LINK_EXPIRY_FUTURE: fromNow => `Linket udløbet ${fromNow}`, // fromNow is localized by moment - ADMIN_USER_EDIT_LINK_EXPIRY_PAST: fromNow => `Linket udløb ${fromNow}`, - ADMIN_USER_EDIT_PROMOTE: name => `Forfrem ${name}`, - ADMIN_USER_EDIT_RESET_PASSWORD_HASLINK_EXPIRY_FUTURE: fromNow => `Udløber ${fromNow}`, - ADMIN_USER_EDIT_RESET_PASSWORD_HASLINK_EXPIRY_PAST: fromNow => `Udløb ${fromNow}`, - ADMIN_USER_EDIT_RESET_PASSWORD_HASLINK: 'Der eksistere ikke et gendannelseslink for denne bruger', + ADMIN_USER_EDIT_LINK_EXPIRY_FUTURE: (fromNow) => `Linket udløbet ${fromNow}`, // fromNow is localized by moment + ADMIN_USER_EDIT_LINK_EXPIRY_PAST: (fromNow) => `Linket udløb ${fromNow}`, + ADMIN_USER_EDIT_PROMOTE: (name) => `Forfrem ${name}`, + ADMIN_USER_EDIT_RESET_PASSWORD_HASLINK_EXPIRY_FUTURE: (fromNow) => + `Udløber ${fromNow}`, + ADMIN_USER_EDIT_RESET_PASSWORD_HASLINK_EXPIRY_PAST: (fromNow) => + `Udløb ${fromNow}`, + ADMIN_USER_EDIT_RESET_PASSWORD_HASLINK: + 'Der eksistere ikke et gendannelseslink for denne bruger', ADMIN_USER_EDIT_RESET_PASSWORD_HEADER: 'Gendan adgangskode', ADMIN_USER_EDIT_RESET_PASSWORD_LINK_CANCEL: 'Annullér gendannelseslink', ADMIN_USER_EDIT_RESET_PASSWORD_LINK_CREATE: 'Opret gendannelseslink', ADMIN_USER_EDIT_RESET_PASSWORD_LINK_REFRESH: 'Opdatér gendannelseslink', ADMIN_USER_EDIT_USERNAME: 'Brugernavn', BACK_BUTTON: 'Tilbage', - CONFIRM_ACCOUNT_EXPIRED: 'Dit bekræftelseslink er udløbet. Kontakt venligst administoren for et nyt.', + CONFIRM_ACCOUNT_EXPIRED: + 'Dit bekræftelseslink er udløbet. Kontakt venligst administoren for et nyt.', CONFIRM_ACCOUNT_HEADER_INVALID: `${_CC.config.siteTitle} | Bekræftelseslink er ugyldigt`, CONFIRM_ACCOUNT_HEADER_VALID: `${_CC.config.siteTitle} | Bekræft konto`, - CONFIRM_ACCOUNT_INVALID: 'Bekræftelseslinket er ikke gyldigt - kontrollér venligst at linket er komplet.', + CONFIRM_ACCOUNT_INVALID: + 'Bekræftelseslinket er ikke gyldigt - kontrollér venligst at linket er komplet.', CONFIRM_ACCOUNT_SET_PW_BUTTON: 'Opret bruger', CONFIRM_ACCOUNT_SET_PW_PLACEHOLDER: 'pa$$word!', - CONFIRM_ACCOUNT_SET_PW_TEXT: name => `Hej ${name}! Vælg venligst din adgangskode her.`, + CONFIRM_ACCOUNT_SET_PW_TEXT: (name) => + `Hej ${name}! Vælg venligst din adgangskode her.`, CONFIRM_ACCOUNT_SUCCESS: `Velkommen til ${_CC.config.siteTitle}!`, LOGIN_BUTTON: 'Log ind', LOGIN_PASSWORD_PLACEHOLDER: 'pa$$word!', @@ -77,11 +91,11 @@ export const strings = { NAVBAR_LOGOUT: 'Log ud', NAVBAR_PROFILE: 'Profil', NAVBAR_WISHLIST: 'Min ønskeliste', - NOTE_BACK: name => `Tilbage til ${name}'s ønskeliste`, + NOTE_BACK: (name) => `Tilbage til ${name}'s ønskeliste`, NOTE_GET_PRODUCT_DATA: 'Hent produktdata', NOTE_GUARD: 'Forkert bruger', NOTE_IMAGE_URL: 'Billedlink', - NOTE_MISSING_PROP: prop => `Mangler feltet ${prop}`, // not really possible to localize this unfortunately + NOTE_MISSING_PROP: (prop) => `Mangler feltet ${prop}`, // not really possible to localize this unfortunately NOTE_NAME: 'Navn', NOTE_NOTE: 'Note', NOTE_PRICE: 'Pris', @@ -101,16 +115,20 @@ export const strings = { PROFILE_PASSWORD_REQUIRED_NEW: 'Ny adgangskode er påkrævet', PROFILE_PASSWORD_REQUIRED_OLD: 'Nuværende adgangskode er påkrævet', PROFILE_PASSWORD_SUCCESS: 'Ændringerne er gemt.', - PROFILE_PASSWORD_TITLE: name => `Profilindstillinger - Adgangskode - ${name}`, + PROFILE_PASSWORD_TITLE: (name) => + `Profilindstillinger - Adgangskode - ${name}`, PROFILE_SAVE_PFP_DISABLED: 'Profilbilleder er deaktiveret', PROFILE_SAVE_PFP_SUCCESS: 'Profilbilledet er gemt.', PROFILE_SECURITY_CHANGE_PASSWORD: 'Ændre adgangskode', PROFILE_SECURITY: 'Sikkerhedsindstillinger', - PROFILE_TITLE: name => `Kontoindstillinger - ${name}`, + PROFILE_TITLE: (name) => `Kontoindstillinger - ${name}`, RESET_PASSWORD_BUTTON: 'Gendan adgangskode', - RESET_PASSWORD_GREETING_EXPIRED: 'Gendannelseslinket er udløbet. Kontakt administrator for at få et nyt.', - RESET_PASSWORD_GREETING_INVALID: 'Ugyldigt gendannelseslink - kontrollér venligst at linket er komplet.', - RESET_PASSWORD_GREETING_VALID: name => `Hej ${name}! Vælg din nye adgangskode her.`, + RESET_PASSWORD_GREETING_EXPIRED: + 'Gendannelseslinket er udløbet. Kontakt administrator for at få et nyt.', + RESET_PASSWORD_GREETING_INVALID: + 'Ugyldigt gendannelseslink - kontrollér venligst at linket er komplet.', + RESET_PASSWORD_GREETING_VALID: (name) => + `Hej ${name}! Vælg din nye adgangskode her.`, RESET_PASSWORD_HEADER_INVALID: `${_CC.config.siteTitle} | Ugyldigt link`, RESET_PASSWORD_HEADER_VALID: `${_CC.config.siteTitle} | Gendan adgangskode`, RESET_PASSWORD_PASSWORD_PLACEHOLDER: 'pa$$word!', @@ -124,7 +142,8 @@ export const strings = { SETUP_USERNAME_PLACEHOLDER: 'john', SETUP_USERNAME: 'Brugernavn', SUPPORTED_SITES_HEADER: 'Supporterede hjemmesider', - SUPPORTED_SITES_TEXT: 'Is a site missing or broken? Open an issue here! :)', + SUPPORTED_SITES_TEXT: + 'Is a site missing or broken? Open an issue here! :)', UPDATE_NOTICE: (current, latest) => ` Christmas Community is out of date. There may be new features or bug fixes. Consider updating! :) @@ -137,8 +156,8 @@ export const strings = { Latest: ${latest} This message is only visible to admins`, WISHLIST_ADD: 'Tilføj ønske', - WISHLIST_ADDED_BY_USER: addedBy => `Tilføjet af: ${addedBy}`, - WISHLIST_ADDED_BY_GUEST: "Gæstebruger", + WISHLIST_ADDED_BY_USER: (addedBy) => `Tilføjet af: ${addedBy}`, + WISHLIST_ADDED_BY_GUEST: 'Gæstebruger', WISHLIST_ADDED_BY: 'Tilføjet af', WISHLIST_ADDED_ITEM_TO_OWN_WISHLIST: 'Ønsket er tilføjet.', WISHLIST_CONFLICT: 'Gaver tilføjet for hurtigt. Prøv igen om lidt.', @@ -164,9 +183,9 @@ export const strings = { WISHLIST_PLEDGE_ITEM: 'Reservér gave', WISHLIST_PLEDGE_SUCCESS: 'Gaven er nu reserveret', WISHLIST_PLEDGE: 'Reservér', - WISHLIST_PLEDGED: pledgedBy => `Reserveret af ${pledgedBy}`, + WISHLIST_PLEDGED: (pledgedBy) => `Reserveret af ${pledgedBy}`, WISHLIST_PLEDGED_GUEST: 'Reserveret af en gæst', - WISHLIST_PLEDGED_ITEM_FOR_USER: user => `Reserveret gave for ${user}.`, + WISHLIST_PLEDGED_ITEM_FOR_USER: (user) => `Reserveret gave for ${user}.`, WISHLIST_PRICE: 'Pris', WISHLIST_REFRESH_GUARD: 'Forkert bruger', WISHLIST_REFRESH_NO_URL: 'Mangler link', @@ -174,14 +193,14 @@ export const strings = { WISHLIST_REMOVE_GUARD: 'Forkert bruger', WISHLIST_REMOVE_SUCCESS: 'Gaven er fjernet fra ønskelisten', WISHLIST_SUGGEST: 'Foreslå gave', - WISHLIST_TITLE: name => `Ønskeliste - ${name}`, + WISHLIST_TITLE: (name) => `Ønskeliste - ${name}`, WISHLIST_UNPLEDGE_GUARD: 'Fejl - du har ikke reserveret denne gave', // should never happen unless someone makes their own http requests WISHLIST_UNPLEDGE_SUCCESS: 'Reservationen er nu fjernet', WISHLIST_UNPLEDGE: 'Fjern reservation', WISHLIST_URL_LABEL: `Link eller titel (Supporterede hjemmesider)`, WISHLIST_URL_PLACEHOLDER: 'https://www.amazon.com/dp/B00ZV9RDKK', WISHLIST_URL_REQUIRED: 'Link eller titel er påkrævet', - WISHLISTS_COUNTS_SELF: name => `${name}: ???/???`, + WISHLISTS_COUNTS_SELF: (name) => `${name}: ???/???`, WISHLISTS_COUNTS: (name, pledged, total) => `${name}: ${pledged}/${total}`, - WISHLISTS_TITLE: 'Ønskelister' + WISHLISTS_TITLE: 'Ønskelister', } as const diff --git a/src/languages/de-de.ts b/src/languages/de-de.ts index bcc37cba..b8dc66d3 100644 --- a/src/languages/de-de.ts +++ b/src/languages/de-de.ts @@ -1,12 +1,14 @@ export const momentLocale = 'de' export const strings = { - _NOT_LOCALIZED: key => `${key} wurde noch nicht auf Deutsch übersetzt.`, + _NOT_LOCALIZED: (key) => `${key} wurde noch nicht auf Deutsch übersetzt.`, ADMIN_CLEAR_WISHLISTS_BUTTON: 'Alle Wunschlisten leeren', - ADMIN_CLEAR_WISHLISTS_DESCRIPTION: 'Diese Aktion wird sofort und unwiederbringlich alle Wunschlisten leeren! Mache am besten ein Datenbankbackup, bevor Du fortfährst.', + ADMIN_CLEAR_WISHLISTS_DESCRIPTION: + 'Diese Aktion wird sofort und unwiederbringlich alle Wunschlisten leeren! Mache am besten ein Datenbankbackup, bevor Du fortfährst.', ADMIN_CLEAR_WISHLISTS_HEADER: 'Wunschlistenleerung', ADMIN_SETTINGS_CLEARDB_BUTTON: 'Wunschlisten leeren', - ADMIN_SETTINGS_CLEARDB_DESCRIPTION: 'Warnung: Diese Einstellungen löschen Daten! Mache am besten ein Datenbankbackup, bevor Du fortfährst.', + ADMIN_SETTINGS_CLEARDB_DESCRIPTION: + 'Warnung: Diese Einstellungen löschen Daten! Mache am besten ein Datenbankbackup, bevor Du fortfährst.', ADMIN_SETTINGS_CLEARDB_HEADER: 'Datenlöschung', ADMIN_SETTINGS_CLEARDB_SUCCESS: 'Alle Wunschlisten geleert.', ADMIN_SETTINGS_HEADER: 'Admin-Einstellungen', @@ -14,57 +16,75 @@ export const strings = { ADMIN_SETTINGS_USERS_ADD_HEADER: 'Nutzer hinzufügen', ADMIN_SETTINGS_USERS_ADD_PLACEHOLDER: 'john', ADMIN_SETTINGS_USERS_ADD_USERNAME: 'Nutzername', - ADMIN_SETTINGS_USERS_ADD_ERROR_USERNAME_EMPTY: 'Der Nutzername darf nicht leer sein.', - ADMIN_SETTINGS_USERS_EDIT_DELETE_FAIL_ADMIN: 'Löschen gescheitert: Nutzer ist Admin.', - ADMIN_SETTINGS_USERS_EDIT_DELETE_SUCCESS: name => `Nutzer ${name} wurde erfolgreich gelöscht`, + ADMIN_SETTINGS_USERS_ADD_ERROR_USERNAME_EMPTY: + 'Der Nutzername darf nicht leer sein.', + ADMIN_SETTINGS_USERS_EDIT_DELETE_FAIL_ADMIN: + 'Löschen gescheitert: Nutzer ist Admin.', + ADMIN_SETTINGS_USERS_EDIT_DELETE_SUCCESS: (name) => + `Nutzer ${name} wurde erfolgreich gelöscht`, ADMIN_SETTINGS_USERS_EDIT_DEMOTE_NOT_ADMIN: 'Nutzer ist kein Admin', - ADMIN_SETTINGS_USERS_EDIT_DEMOTE_SELF: 'Du kannst Dich nicht selbst degradieren.', - ADMIN_SETTINGS_USERS_EDIT_DEMOTE_SUCCESS: name => `${name} ist nun kein Admin mehr.`, - ADMIN_SETTINGS_USERS_EDIT_IMPERSONATE_SUCCESS: name => `Du bist nun ${name}.`, + ADMIN_SETTINGS_USERS_EDIT_DEMOTE_SELF: + 'Du kannst Dich nicht selbst degradieren.', + ADMIN_SETTINGS_USERS_EDIT_DEMOTE_SUCCESS: (name) => + `${name} ist nun kein Admin mehr.`, + ADMIN_SETTINGS_USERS_EDIT_IMPERSONATE_SUCCESS: (name) => + `Du bist nun ${name}.`, ADMIN_SETTINGS_USERS_EDIT_NO_USERNAME_PROVIDED: 'Kein Nutzername angegeben', ADMIN_SETTINGS_USERS_EDIT_PROMOTE_ALREADY_ADMIN: 'Nutzer ist bereits Admin', ADMIN_SETTINGS_USERS_EDIT_PROMOTE_DEMOTE_NOT_FOUND: 'Nutzer nicht gefunden.', - ADMIN_SETTINGS_USERS_EDIT_PROMOTE_SUCCESS: name => `${name} ist nun ein Admin.`, + ADMIN_SETTINGS_USERS_EDIT_PROMOTE_SUCCESS: (name) => + `${name} ist nun ein Admin.`, ADMIN_SETTINGS_USERS_EDIT_RENAMED_USER: 'Nutzer umbenannt!', - ADMIN_SETTINGS_USERS_EDIT_SAME_NAME: 'Der alte und neue Nutzername sind identisch.', + ADMIN_SETTINGS_USERS_EDIT_SAME_NAME: + 'Der alte und neue Nutzername sind identisch.', ADMIN_SETTINGS_USERS_EDIT: 'Bearbeiten', ADMIN_SETTINGS_USERS_HEADER: 'Nutzer', ADMIN_SETTINGS_VERSION_INFO: 'Versionsinfo', - ADMIN_USER_EDIT_ACCOUNT_UNCONFIRMED: 'Dieses Nutzerkonto wurde noch nicht bestätigt.', - ADMIN_USER_EDIT_ADMIN_ISADMIN: name => `${name} ist ein Admin.`, - ADMIN_USER_EDIT_ADMIN_NOTADMIN: name => `${name} ist kein Admin.`, + ADMIN_USER_EDIT_ACCOUNT_UNCONFIRMED: + 'Dieses Nutzerkonto wurde noch nicht bestätigt.', + ADMIN_USER_EDIT_ADMIN_ISADMIN: (name) => `${name} ist ein Admin.`, + ADMIN_USER_EDIT_ADMIN_NOTADMIN: (name) => `${name} ist kein Admin.`, ADMIN_USER_EDIT_ADMIN: 'Admin', ADMIN_USER_EDIT_CHANGE_NAME: 'Namen ändern', ADMIN_USER_EDIT_CHANGE_USERNAME: 'Nutzernamen ändern', ADMIN_USER_EDIT_CONFIRMATION_LINK: 'Bestätigungslink', ADMIN_USER_EDIT_DELETE_ADMIN: 'Nutzer ist Admin', ADMIN_USER_EDIT_DELETE_HEADER: 'Unwiderrufliche Löschung', - ADMIN_USER_EDIT_DELETE_USER: name => `Nutzer ${name} löschen`, - ADMIN_USER_EDIT_DEMOTE_SELF: 'Du kannst Dir nicht selbst den Admin-Status entziehen.', - ADMIN_USER_EDIT_DEMOTE: name => `${name} den Admin-Status entziehen`, - ADMIN_USER_EDIT_EDITING_USER: name => `Nutzer "${name}" wird bearbeitet`, + ADMIN_USER_EDIT_DELETE_USER: (name) => `Nutzer ${name} löschen`, + ADMIN_USER_EDIT_DEMOTE_SELF: + 'Du kannst Dir nicht selbst den Admin-Status entziehen.', + ADMIN_USER_EDIT_DEMOTE: (name) => `${name} den Admin-Status entziehen`, + ADMIN_USER_EDIT_EDITING_USER: (name) => `Nutzer "${name}" wird bearbeitet`, ADMIN_USER_EDIT_GENERATE_NEW_LINK: 'Neuen Link generieren', - ADMIN_USER_EDIT_IMPERSONATE_BUTTON: name => `Als ${name} anmelden`, + ADMIN_USER_EDIT_IMPERSONATE_BUTTON: (name) => `Als ${name} anmelden`, ADMIN_USER_EDIT_IMPERSONATE_HEADER: 'Personifizieren', - ADMIN_USER_EDIT_LINK_EXPIRY_FUTURE: fromNow => `Der folgende Link läuft ${fromNow} ab`, // fromNow is localized by moment - ADMIN_USER_EDIT_LINK_EXPIRY_PAST: fromNow => `Der folgende Link ist ${fromNow} abgelaufen`, - ADMIN_USER_EDIT_PROMOTE: name => `${name} zum Admin machen`, - ADMIN_USER_EDIT_RESET_PASSWORD_HASLINK_EXPIRY_FUTURE: fromNow => `Läuft ${fromNow} ab`, - ADMIN_USER_EDIT_RESET_PASSWORD_HASLINK_EXPIRY_PAST: fromNow => `Ist ${fromNow} abgelaufen`, - ADMIN_USER_EDIT_RESET_PASSWORD_HASLINK: 'Es existiert ein Passwortrücksetzlink für diesen Nutzer.', + ADMIN_USER_EDIT_LINK_EXPIRY_FUTURE: (fromNow) => + `Der folgende Link läuft ${fromNow} ab`, // fromNow is localized by moment + ADMIN_USER_EDIT_LINK_EXPIRY_PAST: (fromNow) => + `Der folgende Link ist ${fromNow} abgelaufen`, + ADMIN_USER_EDIT_PROMOTE: (name) => `${name} zum Admin machen`, + ADMIN_USER_EDIT_RESET_PASSWORD_HASLINK_EXPIRY_FUTURE: (fromNow) => + `Läuft ${fromNow} ab`, + ADMIN_USER_EDIT_RESET_PASSWORD_HASLINK_EXPIRY_PAST: (fromNow) => + `Ist ${fromNow} abgelaufen`, + ADMIN_USER_EDIT_RESET_PASSWORD_HASLINK: + 'Es existiert ein Passwortrücksetzlink für diesen Nutzer.', ADMIN_USER_EDIT_RESET_PASSWORD_HEADER: 'Passwort zurücksetzen', ADMIN_USER_EDIT_RESET_PASSWORD_LINK_CANCEL: 'Passwortrücksetzlink löschen', ADMIN_USER_EDIT_RESET_PASSWORD_LINK_CREATE: 'Passwortrücksetzlink erzeugen', ADMIN_USER_EDIT_RESET_PASSWORD_LINK_REFRESH: 'Passwortrücksetzlink erneuern', ADMIN_USER_EDIT_USERNAME: 'Nutzername', BACK_BUTTON: 'Zurück', - CONFIRM_ACCOUNT_EXPIRED: 'Dein Bestätigungslink ist abgelaufen. Bitte frage nach einem Neuen.', + CONFIRM_ACCOUNT_EXPIRED: + 'Dein Bestätigungslink ist abgelaufen. Bitte frage nach einem Neuen.', CONFIRM_ACCOUNT_HEADER_INVALID: `${_CC.config.siteTitle} | Ungültiger Bestätigungslink`, CONFIRM_ACCOUNT_HEADER_VALID: `${_CC.config.siteTitle} | Nutzerkonto bestätigen`, - CONFIRM_ACCOUNT_INVALID: 'Dieser Bestätigungslink ist ungültig, vielleicht wurde das Konto gelöscht oder es wurden einige Zeichen abgeschnitten?', + CONFIRM_ACCOUNT_INVALID: + 'Dieser Bestätigungslink ist ungültig, vielleicht wurde das Konto gelöscht oder es wurden einige Zeichen abgeschnitten?', CONFIRM_ACCOUNT_SET_PW_BUTTON: `${_CC.config.siteTitle} beitreten`, CONFIRM_ACCOUNT_SET_PW_PLACEHOLDER: 'pa$$word!', - CONFIRM_ACCOUNT_SET_PW_TEXT: name => `Hallo ${name}! Bitte vergebe hier Dein Passwort.`, + CONFIRM_ACCOUNT_SET_PW_TEXT: (name) => + `Hallo ${name}! Bitte vergebe hier Dein Passwort.`, CONFIRM_ACCOUNT_SUCCESS: `Willkommen bei ${_CC.config.siteTitle}!`, LOGIN_BUTTON: 'Anmelden', LOGIN_PASSWORD_PLACEHOLDER: 'pa$$word!', @@ -77,11 +97,11 @@ export const strings = { NAVBAR_LOGOUT: 'Abmelden', NAVBAR_PROFILE: 'Profil', NAVBAR_WISHLIST: 'Meine Wunschliste', - NOTE_BACK: name => `Zurück zu ${name}s Wunschliste`, + NOTE_BACK: (name) => `Zurück zu ${name}s Wunschliste`, NOTE_GET_PRODUCT_DATA: 'Produktdaten abrufen', NOTE_GUARD: 'Ungültiger Nutzer', NOTE_IMAGE_URL: 'Bild-URL', - NOTE_MISSING_PROP: prop => `Eigenschaft ${prop} fehlt`, // not really possible to localize this unfortunately + NOTE_MISSING_PROP: (prop) => `Eigenschaft ${prop} fehlt`, // not really possible to localize this unfortunately NOTE_NAME: 'Name', NOTE_NOTE: 'Bemerkung', NOTE_PRICE: 'Preis', @@ -105,7 +125,7 @@ export const strings = { PROFILE_PASSWORD_REQUIRED_NEW: 'Neues Passwort wird benötigt', PROFILE_PASSWORD_REQUIRED_OLD: 'Altes Passwort wird benötigt', PROFILE_PASSWORD_SUCCESS: 'Passwort erfolgreich geändert!', - PROFILE_PASSWORD_TITLE: name => `Profileinstellungen - Passwort - ${name}`, + PROFILE_PASSWORD_TITLE: (name) => `Profileinstellungen - Passwort - ${name}`, PROFILE_PHONE_MODEL: 'Telefon-Modell', PROFILE_RING_SIZE: 'Ringgröße', PROFILE_SAVE_PFP_DISABLED: 'Profilbilder sind deaktiviert.', @@ -116,12 +136,16 @@ export const strings = { PROFILE_SHIRT_SIZE: 'T-Shirt/-Hemdgröße', PROFILE_SHOE_SIZE: 'Schuhgröße', PROFILE_SWEATER_SIZE: 'Blusen-/Pullovergröße', - PROFILE_TITLE: name => `Profileinstellungen - ${name}`, - PROFILE_UPDATE_INFO_SUCCESS: 'Geteilte Informationen aktualisiert (ggf. öffentlich)', + PROFILE_TITLE: (name) => `Profileinstellungen - ${name}`, + PROFILE_UPDATE_INFO_SUCCESS: + 'Geteilte Informationen aktualisiert (ggf. öffentlich)', RESET_PASSWORD_BUTTON: 'Passwort zurücksetzen', - RESET_PASSWORD_GREETING_EXPIRED: 'Dein Rücksetzlink ist abgelaufen. Bitte frage nach einem Neuen.', - RESET_PASSWORD_GREETING_INVALID: 'Dieser Rücksetzlink ist ungültig, vielleicht wurde der Link gelöscht oder es wurden einige Zeichen abgeschnitten?', - RESET_PASSWORD_GREETING_VALID: name => `Hallo ${name}! Bitte vergebe hier Dein Passwort.`, + RESET_PASSWORD_GREETING_EXPIRED: + 'Dein Rücksetzlink ist abgelaufen. Bitte frage nach einem Neuen.', + RESET_PASSWORD_GREETING_INVALID: + 'Dieser Rücksetzlink ist ungültig, vielleicht wurde der Link gelöscht oder es wurden einige Zeichen abgeschnitten?', + RESET_PASSWORD_GREETING_VALID: (name) => + `Hallo ${name}! Bitte vergebe hier Dein Passwort.`, RESET_PASSWORD_HEADER_INVALID: `${_CC.config.siteTitle} | Rücksetzlink ungültig`, RESET_PASSWORD_HEADER_VALID: `${_CC.config.siteTitle} | Passwort zurücksetzen`, RESET_PASSWORD_PASSWORD_PLACEHOLDER: 'pa$$word!', @@ -135,7 +159,8 @@ export const strings = { SETUP_USERNAME_PLACEHOLDER: 'john', SETUP_USERNAME: 'Nutzername', SUPPORTED_SITES_HEADER: 'Unterstützte Seiten', - SUPPORTED_SITES_TEXT: 'Fehlt eine Seite oder ist etwas defekt? Eröffne hier ein Issue! :)', + SUPPORTED_SITES_TEXT: + 'Fehlt eine Seite oder ist etwas defekt? Eröffne hier ein Issue! :)', UPDATE_NOTICE: (current, latest) => ` Christmas Community ist veraltet. Möglicherweise gibt es neue Funktionen oder Fehler wurden beseitigt. Mach' am besten ein Update! :) @@ -148,14 +173,17 @@ export const strings = { Aktuell: ${latest} Diese Nachricht ist nur für Admins sichtbar`, WISHLIST_ADD: 'Eintrag zur Wunschliste hinzufügen', - WISHLIST_ADDED_BY_USER: addedBy => `Hinzugefügt von: ${addedBy}`, - WISHLIST_ADDED_BY_GUEST: "Gastbenutzer", + WISHLIST_ADDED_BY_USER: (addedBy) => `Hinzugefügt von: ${addedBy}`, + WISHLIST_ADDED_BY_GUEST: 'Gastbenutzer', WISHLIST_ADDED_BY: 'Hinzugefügt von', - WISHLIST_ADDED_ITEM_TO_OWN_WISHLIST: 'Eintrag wurde zur Wunschliste hinzugefügt.', - WISHLIST_CONFLICT: 'Einträge werden zu schnell hinzugefügt. Bitte probier es nocheinmal.', + WISHLIST_ADDED_ITEM_TO_OWN_WISHLIST: + 'Eintrag wurde zur Wunschliste hinzugefügt.', + WISHLIST_CONFLICT: + 'Einträge werden zu schnell hinzugefügt. Bitte probier es nocheinmal.', WISHLIST_DELETE: 'Löschen', WISHLIST_EDIT_ITEM: 'Eintrag bearbeiten', - WISHLIST_FETCH_FAIL: 'Die Wunschliste konnte nicht abgerufen werden -- existiert der Nutzer?', + WISHLIST_FETCH_FAIL: + 'Die Wunschliste konnte nicht abgerufen werden -- existiert der Nutzer?', WISHLIST_IMAGE: 'Bild', WISHLIST_ITEM_MISSING: 'Eintrag konnte nicht gefunden werden', WISHLIST_MOVE_DOWN: 'Runterschieben', @@ -177,9 +205,9 @@ export const strings = { WISHLIST_PLEDGE_ITEM: 'Reservieren', WISHLIST_PLEDGE_SUCCESS: 'Eintrag erfolgreich reserviert!', WISHLIST_PLEDGE: 'Reservieren', - WISHLIST_PLEDGED: pledgedBy => `Reserviert von ${pledgedBy}`, + WISHLIST_PLEDGED: (pledgedBy) => `Reserviert von ${pledgedBy}`, WISHLIST_PLEDGED_GUEST: 'Reserviert von einem Gastnutzer', - WISHLIST_PLEDGED_ITEM_FOR_USER: user => `Eintrag reserviert für ${user}.`, + WISHLIST_PLEDGED_ITEM_FOR_USER: (user) => `Eintrag reserviert für ${user}.`, WISHLIST_PRICE: 'Preis', WISHLIST_REFRESH_GUARD: 'Ungültiger Nutzer', WISHLIST_REFRESH_NO_URL: 'Eintrag hat keine URL.', @@ -187,14 +215,14 @@ export const strings = { WISHLIST_REMOVE_GUARD: 'Falscher Nutzer', WISHLIST_REMOVE_SUCCESS: 'Erfolgreich von der Wunschliste entfernt', WISHLIST_SUGGEST: 'Eintrag vorschlagen', - WISHLIST_TITLE: name => `${_CC.config.siteTitle} - Wunschliste - ${name}`, + WISHLIST_TITLE: (name) => `${_CC.config.siteTitle} - Wunschliste - ${name}`, WISHLIST_UNPLEDGE_GUARD: 'Du hast das nicht reserviert', // should never happen unless someone makes their own http requests WISHLIST_UNPLEDGE_SUCCESS: 'Reservierung erfolgreich aufgehoben!', WISHLIST_UNPLEDGE: 'Reservierung aufheben', WISHLIST_URL_LABEL: `URL oder Name (Unterstützte Seiten)`, WISHLIST_URL_PLACEHOLDER: 'https://www.amazon.com/dp/B00ZV9RDKK', WISHLIST_URL_REQUIRED: 'URL oder Name wird benötigt', - WISHLISTS_COUNTS_SELF: name => `${name}: ???/???`, + WISHLISTS_COUNTS_SELF: (name) => `${name}: ???/???`, WISHLISTS_COUNTS: (name, pledged, total) => `${name}: ${pledged}/${total}`, - WISHLISTS_TITLE: `${_CC.config.siteTitle} - Wunschlisten` + WISHLISTS_TITLE: `${_CC.config.siteTitle} - Wunschlisten`, } as const diff --git a/src/languages/en-us.ts b/src/languages/en-us.ts index fe25c9c6..30aed8e6 100644 --- a/src/languages/en-us.ts +++ b/src/languages/en-us.ts @@ -1,14 +1,16 @@ export const momentLocale = 'en' as const -export const notTranslated = englishString => `${englishString} (not yet translated into English)` +export const notTranslated = (englishString) => + `${englishString} (not yet translated into English)` export const strings = { - ADMIN_CLEAR_WISHLISTS_BUTTON: 'Clear all wishlists', - ADMIN_CLEAR_WISHLISTS_DESCRIPTION: 'This will instantly irreversibly delete all wishlists! Consider making a backup of the database before using this.', + ADMIN_CLEAR_WISHLISTS_DESCRIPTION: + 'This will instantly irreversibly delete all wishlists! Consider making a backup of the database before using this.', ADMIN_CLEAR_WISHLISTS_HEADER: 'Wishlist Deletion', ADMIN_SETTINGS_CLEARDB_BUTTON: 'Clear Wishlists', - ADMIN_SETTINGS_CLEARDB_DESCRIPTION: 'Warning: These options destroy data! You may want to back up the database before using these options.', + ADMIN_SETTINGS_CLEARDB_DESCRIPTION: + 'Warning: These options destroy data! You may want to back up the database before using these options.', ADMIN_SETTINGS_CLEARDB_HEADER: 'Data Destruction', ADMIN_SETTINGS_CLEARDB_SUCCESS: 'Cleared all wishlists.', ADMIN_SETTINGS_HEADER: 'Admin Settings', @@ -17,16 +19,21 @@ export const strings = { ADMIN_SETTINGS_USERS_ADD_PLACEHOLDER: 'john', ADMIN_SETTINGS_USERS_ADD_USERNAME: 'Username', ADMIN_SETTINGS_USERS_ADD_ERROR_USERNAME_EMPTY: 'Username cannot be empty.', - ADMIN_SETTINGS_USERS_EDIT_DELETE_FAIL_ADMIN: 'Failed to remove: user is admin.', - ADMIN_SETTINGS_USERS_EDIT_DELETE_SUCCESS: name => `Successfully removed user ${name}`, + ADMIN_SETTINGS_USERS_EDIT_DELETE_FAIL_ADMIN: + 'Failed to remove: user is admin.', + ADMIN_SETTINGS_USERS_EDIT_DELETE_SUCCESS: (name) => + `Successfully removed user ${name}`, ADMIN_SETTINGS_USERS_EDIT_DEMOTE_NOT_ADMIN: 'user is not an admin', ADMIN_SETTINGS_USERS_EDIT_DEMOTE_SELF: 'You cannot demote yourself.', - ADMIN_SETTINGS_USERS_EDIT_DEMOTE_SUCCESS: name => `${name} is no longer an admin.`, - ADMIN_SETTINGS_USERS_EDIT_IMPERSONATE_SUCCESS: name => `You are now ${name}.`, + ADMIN_SETTINGS_USERS_EDIT_DEMOTE_SUCCESS: (name) => + `${name} is no longer an admin.`, + ADMIN_SETTINGS_USERS_EDIT_IMPERSONATE_SUCCESS: (name) => + `You are now ${name}.`, ADMIN_SETTINGS_USERS_EDIT_NO_USERNAME_PROVIDED: 'No username provided', ADMIN_SETTINGS_USERS_EDIT_PROMOTE_ALREADY_ADMIN: 'user is already admin', ADMIN_SETTINGS_USERS_EDIT_PROMOTE_DEMOTE_NOT_FOUND: 'User not found.', - ADMIN_SETTINGS_USERS_EDIT_PROMOTE_SUCCESS: name => `${name} is now an admin.`, + ADMIN_SETTINGS_USERS_EDIT_PROMOTE_SUCCESS: (name) => + `${name} is now an admin.`, ADMIN_SETTINGS_USERS_EDIT_RENAMED_USER: 'Renamed user!', ADMIN_SETTINGS_USERS_EDIT_SAME_NAME: 'Username is same as new username.', ADMIN_SETTINGS_USERS_EDIT: 'Edit', @@ -37,40 +44,48 @@ export const strings = { ADMIN_SETTINGS_TABLE_WISHLIST_COUNT: 'Wishlist items', ADMIN_SETTINGS_TABLE_EDIT: 'Edit', ADMIN_USER_EDIT_ACCOUNT_UNCONFIRMED: "This account hasn't been confirmed.", - ADMIN_USER_EDIT_ADMIN_ISADMIN: name => `${name} is an admin.`, - ADMIN_USER_EDIT_ADMIN_NOTADMIN: name => `${name} is not an admin.`, + ADMIN_USER_EDIT_ADMIN_ISADMIN: (name) => `${name} is an admin.`, + ADMIN_USER_EDIT_ADMIN_NOTADMIN: (name) => `${name} is not an admin.`, ADMIN_USER_EDIT_ADMIN: 'Admin', ADMIN_USER_EDIT_CHANGE_NAME: 'Change Name', ADMIN_USER_EDIT_CHANGE_USERNAME: 'Change Username', ADMIN_USER_EDIT_CONFIRMATION_LINK: 'Confirmation Link', ADMIN_USER_EDIT_DELETE_ADMIN: 'User is admin', ADMIN_USER_EDIT_DELETE_HEADER: 'Irreversible Deletion', - ADMIN_USER_EDIT_DELETE_USER: name => `Remove user ${name}`, + ADMIN_USER_EDIT_DELETE_USER: (name) => `Remove user ${name}`, ADMIN_USER_EDIT_DEMOTE_SELF: 'You cannot demote yourself', - ADMIN_USER_EDIT_DEMOTE: name => `Demote ${name}`, - ADMIN_USER_EDIT_EDITING_USER: name => `Editing user "${name}"`, + ADMIN_USER_EDIT_DEMOTE: (name) => `Demote ${name}`, + ADMIN_USER_EDIT_EDITING_USER: (name) => `Editing user "${name}"`, ADMIN_USER_EDIT_GENERATE_NEW_LINK: 'Generate New Link', - ADMIN_USER_EDIT_IMPERSONATE_BUTTON: name => `Log in as ${name}`, + ADMIN_USER_EDIT_IMPERSONATE_BUTTON: (name) => `Log in as ${name}`, ADMIN_USER_EDIT_IMPERSONATE_HEADER: 'Impersonate', - ADMIN_USER_EDIT_LINK_EXPIRY_FUTURE: fromNow => `The following link expires ${fromNow}`, // fromNow is localized by moment - ADMIN_USER_EDIT_LINK_EXPIRY_PAST: fromNow => `The following link expired ${fromNow}`, - ADMIN_USER_EDIT_PROMOTE: name => `Promote ${name}`, - ADMIN_USER_EDIT_RESET_PASSWORD_HASLINK_EXPIRY_FUTURE: fromNow => `It expires ${fromNow}`, - ADMIN_USER_EDIT_RESET_PASSWORD_HASLINK_EXPIRY_PAST: fromNow => `It expired ${fromNow}`, - ADMIN_USER_EDIT_RESET_PASSWORD_HASLINK: 'There is a reset password link for this user.', + ADMIN_USER_EDIT_LINK_EXPIRY_FUTURE: (fromNow) => + `The following link expires ${fromNow}`, // fromNow is localized by moment + ADMIN_USER_EDIT_LINK_EXPIRY_PAST: (fromNow) => + `The following link expired ${fromNow}`, + ADMIN_USER_EDIT_PROMOTE: (name) => `Promote ${name}`, + ADMIN_USER_EDIT_RESET_PASSWORD_HASLINK_EXPIRY_FUTURE: (fromNow) => + `It expires ${fromNow}`, + ADMIN_USER_EDIT_RESET_PASSWORD_HASLINK_EXPIRY_PAST: (fromNow) => + `It expired ${fromNow}`, + ADMIN_USER_EDIT_RESET_PASSWORD_HASLINK: + 'There is a reset password link for this user.', ADMIN_USER_EDIT_RESET_PASSWORD_HEADER: 'Reset Password', ADMIN_USER_EDIT_RESET_PASSWORD_LINK_CANCEL: 'Cancel Password Reset Link', ADMIN_USER_EDIT_RESET_PASSWORD_LINK_CREATE: 'Create Password Reset Link', ADMIN_USER_EDIT_RESET_PASSWORD_LINK_REFRESH: 'Refresh Password Reset Link', ADMIN_USER_EDIT_USERNAME: 'Username', BACK_BUTTON: 'Back', - CONFIRM_ACCOUNT_EXPIRED: 'Your confirmation link has expired. Please ask for a new one.', + CONFIRM_ACCOUNT_EXPIRED: + 'Your confirmation link has expired. Please ask for a new one.', CONFIRM_ACCOUNT_HEADER_INVALID: `${_CC.config.siteTitle} | Confirmation Link Invalid`, CONFIRM_ACCOUNT_HEADER_VALID: `${_CC.config.siteTitle} | Confirm Account`, - CONFIRM_ACCOUNT_INVALID: "This confirmation link isn't valid, perhaps the account was deleted or some characters at the end got cut off?", + CONFIRM_ACCOUNT_INVALID: + "This confirmation link isn't valid, perhaps the account was deleted or some characters at the end got cut off?", CONFIRM_ACCOUNT_SET_PW_BUTTON: `Join ${_CC.config.siteTitle}`, CONFIRM_ACCOUNT_SET_PW_PLACEHOLDER: 'pa$$word!', - CONFIRM_ACCOUNT_SET_PW_TEXT: name => `Hello ${name}! Please set your password here.`, + CONFIRM_ACCOUNT_SET_PW_TEXT: (name) => + `Hello ${name}! Please set your password here.`, CONFIRM_ACCOUNT_SUCCESS: `Welcome to ${_CC.config.siteTitle}!`, LOGIN_BUTTON: 'Log In', LOGIN_OIDC_BUTTON: `Sign in with ${_CC.config.oidcProviderName}`, @@ -85,18 +100,19 @@ export const strings = { LOGIN_SSO_LINK_FAILURE: 'Unable to link account', LOGIN_SSO_UNLINK_SUCCESS: 'Successfully unlinked account', LOGIN_SSO_UNLINK_FAILURE: 'Failed to unlink account', - LOGIN_SSO_LINK_FAILURE_ACCOUNT_EXISTS: 'The external account is already linked to another account on this site!', + LOGIN_SSO_LINK_FAILURE_ACCOUNT_EXISTS: + 'The external account is already linked to another account on this site!', LOGOUT_BUTTON: 'Log Out', NAVBAR_ADMIN: 'Admin Settings', NAVBAR_LOGIN: 'Log In', NAVBAR_LOGOUT: 'Log Out', NAVBAR_PROFILE: 'Profile', NAVBAR_WISHLIST: 'My Wishlist', - NOTE_BACK: name => `Back to ${name}'s wishlist`, + NOTE_BACK: (name) => `Back to ${name}'s wishlist`, NOTE_GET_PRODUCT_DATA: 'Get Product Data', NOTE_GUARD: 'Invalid user', NOTE_IMAGE_URL: 'Image URL', - NOTE_MISSING_PROP: prop => `Missing property ${prop}`, // not really possible to localize this unfortunately + NOTE_MISSING_PROP: (prop) => `Missing property ${prop}`, // not really possible to localize this unfortunately NOTE_NAME: 'Name', NOTE_NOTE: 'Note', NOTE_PRICE: 'Price', @@ -120,7 +136,7 @@ export const strings = { PROFILE_PASSWORD_REQUIRED_NEW: 'New Password is required', PROFILE_PASSWORD_REQUIRED_OLD: 'Old Password is required', PROFILE_PASSWORD_SUCCESS: 'Changed saved successfully!', - PROFILE_PASSWORD_TITLE: name => `Profile Settings - Password - ${name}`, + PROFILE_PASSWORD_TITLE: (name) => `Profile Settings - Password - ${name}`, PROFILE_PHONE_MODEL: 'Phone Model', PROFILE_RING_SIZE: 'Ring Size', PROFILE_SAVE_PFP_DISABLED: 'Profile pictures are disabled.', @@ -133,18 +149,22 @@ export const strings = { PROFILE_SHIRT_SIZE: 'Shirt Size', PROFILE_SHOE_SIZE: 'Shoe Size', PROFILE_SWEATER_SIZE: 'Blouse/Sweater Size', - PROFILE_TITLE: name => `Profile Settings - ${name}`, + PROFILE_TITLE: (name) => `Profile Settings - ${name}`, PROFILE_UPDATE_INFO_SUCCESS: 'Updated shared information!', PROFILE_PFP_UPLOAD: 'Upload profile picture', PROFILE_PFP_UPLOAD_NO_FILE: 'No file selected', - PROFILE_PFP_UPLOAD_FILE_TYPE: 'Only .png, .jpg, and .jpeg formats are allowed', + PROFILE_PFP_UPLOAD_FILE_TYPE: + 'Only .png, .jpg, and .jpeg formats are allowed', PROFILE_PFP_UPLOAD_FILE_SIZE: `Image exceeds maximum allowed size of ${_CC.config.maxUploadPfpSize} MB`, PROFILE_PFP_UPLOAD_SUCCESS: 'Profile picture uploaded', PROFILE_PFP_UPLOAD_ERROR: 'Failed to upload profile picture', RESET_PASSWORD_BUTTON: 'Reset Password', - RESET_PASSWORD_GREETING_EXPIRED: 'Your reset link has expired. Please ask for a new one.', - RESET_PASSWORD_GREETING_INVALID: "This reset link isn't valid, perhaps the link was canceled or some characters at the end got cut off?", - RESET_PASSWORD_GREETING_VALID: name => `Hello ${name}! Please set your password here.`, + RESET_PASSWORD_GREETING_EXPIRED: + 'Your reset link has expired. Please ask for a new one.', + RESET_PASSWORD_GREETING_INVALID: + "This reset link isn't valid, perhaps the link was canceled or some characters at the end got cut off?", + RESET_PASSWORD_GREETING_VALID: (name) => + `Hello ${name}! Please set your password here.`, RESET_PASSWORD_HEADER_INVALID: `${_CC.config.siteTitle} | Reset Link Invalid`, RESET_PASSWORD_HEADER_VALID: `${_CC.config.siteTitle} | Reset Password`, RESET_PASSWORD_PASSWORD_PLACEHOLDER: 'pa$$word!', @@ -158,7 +178,8 @@ export const strings = { SETUP_USERNAME_PLACEHOLDER: 'john', SETUP_USERNAME: 'Username', SUPPORTED_SITES_HEADER: 'Supported Sites', - SUPPORTED_SITES_TEXT: 'Is a site missing or broken? Open an issue here! :)', + SUPPORTED_SITES_TEXT: + 'Is a site missing or broken? Open an issue here! :)', UPDATE_NOTICE: (current, latest) => ` Christmas Community is out of date. There may be new features or bug fixes. Consider updating! :) @@ -172,8 +193,8 @@ export const strings = { This message is only visible to admins`, WISHLIST_ADD: 'Add item to wishlist', WISHLIST_ADD_NEW: 'Add item', - WISHLIST_ADDED_BY_USER: addedBy => `Added by: ${addedBy}`, - WISHLIST_ADDED_BY_GUEST: "Guest User", + WISHLIST_ADDED_BY_USER: (addedBy) => `Added by: ${addedBy}`, + WISHLIST_ADDED_BY_GUEST: 'Guest User', WISHLIST_ADDED_BY: 'Added By', WISHLIST_ADDED_ITEM_TO_OWN_WISHLIST: 'Added item to wishlist.', WISHLIST_CONFLICT: 'Items are being added too quickly. Please try again.', @@ -201,9 +222,9 @@ export const strings = { WISHLIST_PLEDGE_ITEM: 'Pledge item', WISHLIST_PLEDGE_SUCCESS: 'Successfully pledged for item!', WISHLIST_PLEDGE: 'Pledge', - WISHLIST_PLEDGED: pledgedBy => `Pledged for by ${pledgedBy}`, + WISHLIST_PLEDGED: (pledgedBy) => `Pledged for by ${pledgedBy}`, WISHLIST_PLEDGED_GUEST: 'Pledged for by a guest user', - WISHLIST_PLEDGED_ITEM_FOR_USER: user => `Pledged item for ${user}.`, + WISHLIST_PLEDGED_ITEM_FOR_USER: (user) => `Pledged item for ${user}.`, WISHLIST_PRICE: 'Price', WISHLIST_REFRESH_GUARD: 'Invalid user', WISHLIST_REFRESH_NO_URL: 'Item has no URL.', @@ -211,16 +232,16 @@ export const strings = { WISHLIST_REMOVE_GUARD: 'Not correct user', WISHLIST_REMOVE_SUCCESS: 'Successfully removed from wishlist', WISHLIST_SUGGEST: 'Suggest item', - WISHLIST_TITLE: name => `${_CC.config.siteTitle} - Wishlist - ${name}`, + WISHLIST_TITLE: (name) => `${_CC.config.siteTitle} - Wishlist - ${name}`, WISHLIST_UNPLEDGE_GUARD: 'You did not pledge for this', // should never happen unless someone makes their own http requests WISHLIST_UNPLEDGE_SUCCESS: 'Successfully unpledged for item!', WISHLIST_UNPLEDGE: 'Unpledge', WISHLIST_URL_LABEL: `Item URL or Name (Supported Sites)`, WISHLIST_URL_PLACEHOLDER: 'https://www.amazon.com/dp/B00ZV9RDKK', WISHLIST_URL_REQUIRED: 'Item URL or Name is required', - WISHLISTS_COUNTS_SELF: name => `${name}: ???/???`, + WISHLISTS_COUNTS_SELF: (name) => `${name}: ???/???`, WISHLISTS_COUNTS: (name, pledged, total) => `${name}: ${pledged}/${total}`, WISHLISTS_TITLE: `${_CC.config.siteTitle} - Wishlists`, YES: 'Yes', - NO: 'No' + NO: 'No', } as const diff --git a/src/languages/es-es.ts b/src/languages/es-es.ts index 8ceb96bc..2368edc3 100644 --- a/src/languages/es-es.ts +++ b/src/languages/es-es.ts @@ -1,12 +1,14 @@ export const momentLocale = 'es' export const strings = { - _NOT_LOCALIZED: key => `${key} todavía no ha sido traducido al español.`, + _NOT_LOCALIZED: (key) => `${key} todavía no ha sido traducido al español.`, ADMIN_CLEAR_WISHLISTS_BUTTON: 'Borrar todas las listas de deseos', - ADMIN_CLEAR_WISHLISTS_DESCRIPTION: 'Esto va a, inmediatamente, irreversiblemente borrar todas las listas de deseo! Considere hacer una copia de la base de datos antes de hacer esto.', + ADMIN_CLEAR_WISHLISTS_DESCRIPTION: + 'Esto va a, inmediatamente, irreversiblemente borrar todas las listas de deseo! Considere hacer una copia de la base de datos antes de hacer esto.', ADMIN_CLEAR_WISHLISTS_HEADER: 'Eliminación de las listas de deseos', ADMIN_SETTINGS_CLEARDB_BUTTON: 'Borrar listas de deseos', - ADMIN_SETTINGS_CLEARDB_DESCRIPTION: 'Advertencia: Estas opciones ¡destruyen datos! Tal vez va a querer hacer una copia de la base de datos antes de usar estas opciones.', + ADMIN_SETTINGS_CLEARDB_DESCRIPTION: + 'Advertencia: Estas opciones ¡destruyen datos! Tal vez va a querer hacer una copia de la base de datos antes de usar estas opciones.', ADMIN_SETTINGS_CLEARDB_HEADER: 'Destrucción de datos', ADMIN_SETTINGS_CLEARDB_SUCCESS: 'Todas las listas de deseos fueron borrados.', ADMIN_SETTINGS_HEADER: 'Ajustes de administrador', @@ -14,57 +16,79 @@ export const strings = { ADMIN_SETTINGS_USERS_ADD_HEADER: 'Agregar usuario', ADMIN_SETTINGS_USERS_ADD_PLACEHOLDER: 'juan', ADMIN_SETTINGS_USERS_ADD_USERNAME: 'Nombre de usuario', - ADMIN_SETTINGS_USERS_ADD_ERROR_USERNAME_EMPTY: 'El nombre de usuario no puede estar vacío.', - ADMIN_SETTINGS_USERS_EDIT_DELETE_FAIL_ADMIN: 'No se pudo eliminar: este usuario es administrador.', - ADMIN_SETTINGS_USERS_EDIT_DELETE_SUCCESS: name => `Se pudo eliminar ${name}`, - ADMIN_SETTINGS_USERS_EDIT_DEMOTE_NOT_ADMIN: 'Este usuario no es administrador.', + ADMIN_SETTINGS_USERS_ADD_ERROR_USERNAME_EMPTY: + 'El nombre de usuario no puede estar vacío.', + ADMIN_SETTINGS_USERS_EDIT_DELETE_FAIL_ADMIN: + 'No se pudo eliminar: este usuario es administrador.', + ADMIN_SETTINGS_USERS_EDIT_DELETE_SUCCESS: (name) => + `Se pudo eliminar ${name}`, + ADMIN_SETTINGS_USERS_EDIT_DEMOTE_NOT_ADMIN: + 'Este usuario no es administrador.', ADMIN_SETTINGS_USERS_EDIT_DEMOTE_SELF: 'No puede degradarse a usted mismo.', - ADMIN_SETTINGS_USERS_EDIT_DEMOTE_SUCCESS: name => `${name} ya no es administrador.`, - ADMIN_SETTINGS_USERS_EDIT_IMPERSONATE_SUCCESS: name => `Ahora eres ${name}.`, - ADMIN_SETTINGS_USERS_EDIT_NO_USERNAME_PROVIDED: 'No se ha proporcionado un nombre de usuario.', - ADMIN_SETTINGS_USERS_EDIT_PROMOTE_ALREADY_ADMIN: 'Este usuario ya es administrador.', - ADMIN_SETTINGS_USERS_EDIT_PROMOTE_DEMOTE_NOT_FOUND: 'No se encuentra este usuario.', - ADMIN_SETTINGS_USERS_EDIT_PROMOTE_SUCCESS: name => `${name} ahora es administrador.`, + ADMIN_SETTINGS_USERS_EDIT_DEMOTE_SUCCESS: (name) => + `${name} ya no es administrador.`, + ADMIN_SETTINGS_USERS_EDIT_IMPERSONATE_SUCCESS: (name) => + `Ahora eres ${name}.`, + ADMIN_SETTINGS_USERS_EDIT_NO_USERNAME_PROVIDED: + 'No se ha proporcionado un nombre de usuario.', + ADMIN_SETTINGS_USERS_EDIT_PROMOTE_ALREADY_ADMIN: + 'Este usuario ya es administrador.', + ADMIN_SETTINGS_USERS_EDIT_PROMOTE_DEMOTE_NOT_FOUND: + 'No se encuentra este usuario.', + ADMIN_SETTINGS_USERS_EDIT_PROMOTE_SUCCESS: (name) => + `${name} ahora es administrador.`, ADMIN_SETTINGS_USERS_EDIT_RENAMED_USER: '¡Nombre cambiado!', - ADMIN_SETTINGS_USERS_EDIT_SAME_NAME: 'Nombre de usuario nuevo es igual al nombre actual.', + ADMIN_SETTINGS_USERS_EDIT_SAME_NAME: + 'Nombre de usuario nuevo es igual al nombre actual.', ADMIN_SETTINGS_USERS_EDIT: 'Editar', ADMIN_SETTINGS_USERS_HEADER: 'Usuarios', ADMIN_SETTINGS_VERSION_INFO: 'Información de versión', ADMIN_USER_EDIT_ACCOUNT_UNCONFIRMED: 'Esta cuenta ha sido confirmada.', - ADMIN_USER_EDIT_ADMIN_ISADMIN: name => `${name} es administrador`, - ADMIN_USER_EDIT_ADMIN_NOTADMIN: name => `${name} no es administrador`, + ADMIN_USER_EDIT_ADMIN_ISADMIN: (name) => `${name} es administrador`, + ADMIN_USER_EDIT_ADMIN_NOTADMIN: (name) => `${name} no es administrador`, ADMIN_USER_EDIT_ADMIN: 'Administrador', ADMIN_USER_EDIT_CHANGE_NAME: 'Cambiar nombre', ADMIN_USER_EDIT_CHANGE_USERNAME: 'Cambiar nombre de usuario', ADMIN_USER_EDIT_CONFIRMATION_LINK: 'Enlace de confirmación', ADMIN_USER_EDIT_DELETE_ADMIN: 'Este usuario es adminstrador', ADMIN_USER_EDIT_DELETE_HEADER: 'Eliminación irreversible', - ADMIN_USER_EDIT_DELETE_USER: name => `Eliminar usuario ${name}`, + ADMIN_USER_EDIT_DELETE_USER: (name) => `Eliminar usuario ${name}`, ADMIN_USER_EDIT_DEMOTE_SELF: 'No puede degradarse a usted mismo', - ADMIN_USER_EDIT_DEMOTE: name => `Rebajar ${name}`, - ADMIN_USER_EDIT_EDITING_USER: name => `Editando usuario "${name}"`, + ADMIN_USER_EDIT_DEMOTE: (name) => `Rebajar ${name}`, + ADMIN_USER_EDIT_EDITING_USER: (name) => `Editando usuario "${name}"`, ADMIN_USER_EDIT_GENERATE_NEW_LINK: 'Generar un nuevo enlace', - ADMIN_USER_EDIT_IMPERSONATE_BUTTON: name => `Iniciar sesión ${name}`, + ADMIN_USER_EDIT_IMPERSONATE_BUTTON: (name) => `Iniciar sesión ${name}`, ADMIN_USER_EDIT_IMPERSONATE_HEADER: 'Imitar', - ADMIN_USER_EDIT_LINK_EXPIRY_FUTURE: fromNow => `El siguente enlace se expira ${fromNow}`, // fromNow is localized by moment - ADMIN_USER_EDIT_LINK_EXPIRY_PAST: fromNow => `El siguente enlace se expiró ${fromNow}`, - ADMIN_USER_EDIT_PROMOTE: name => `Promover ${name}`, - ADMIN_USER_EDIT_RESET_PASSWORD_HASLINK_EXPIRY_FUTURE: fromNow => `Se expira ${fromNow}`, - ADMIN_USER_EDIT_RESET_PASSWORD_HASLINK_EXPIRY_PAST: fromNow => `Se expiró ${fromNow}`, - ADMIN_USER_EDIT_RESET_PASSWORD_HASLINK: 'Hay un enlace de restablecimiento de contraseña para este usuario', + ADMIN_USER_EDIT_LINK_EXPIRY_FUTURE: (fromNow) => + `El siguente enlace se expira ${fromNow}`, // fromNow is localized by moment + ADMIN_USER_EDIT_LINK_EXPIRY_PAST: (fromNow) => + `El siguente enlace se expiró ${fromNow}`, + ADMIN_USER_EDIT_PROMOTE: (name) => `Promover ${name}`, + ADMIN_USER_EDIT_RESET_PASSWORD_HASLINK_EXPIRY_FUTURE: (fromNow) => + `Se expira ${fromNow}`, + ADMIN_USER_EDIT_RESET_PASSWORD_HASLINK_EXPIRY_PAST: (fromNow) => + `Se expiró ${fromNow}`, + ADMIN_USER_EDIT_RESET_PASSWORD_HASLINK: + 'Hay un enlace de restablecimiento de contraseña para este usuario', ADMIN_USER_EDIT_RESET_PASSWORD_HEADER: 'Restablecer la contraseña', - ADMIN_USER_EDIT_RESET_PASSWORD_LINK_CANCEL: 'Cancelar enlace de restablecimiento de contraseña', - ADMIN_USER_EDIT_RESET_PASSWORD_LINK_CREATE: 'Crear enlace de restablecimiento de contraseña', - ADMIN_USER_EDIT_RESET_PASSWORD_LINK_REFRESH: 'Actualizar enlace de restablecimiento de contraseña', + ADMIN_USER_EDIT_RESET_PASSWORD_LINK_CANCEL: + 'Cancelar enlace de restablecimiento de contraseña', + ADMIN_USER_EDIT_RESET_PASSWORD_LINK_CREATE: + 'Crear enlace de restablecimiento de contraseña', + ADMIN_USER_EDIT_RESET_PASSWORD_LINK_REFRESH: + 'Actualizar enlace de restablecimiento de contraseña', ADMIN_USER_EDIT_USERNAME: 'Nombre de usuario', BACK_BUTTON: 'Volver atrás', - CONFIRM_ACCOUNT_EXPIRED: 'Su enlace de confirmación se expiró. Por favor pide otra.', + CONFIRM_ACCOUNT_EXPIRED: + 'Su enlace de confirmación se expiró. Por favor pide otra.', CONFIRM_ACCOUNT_HEADER_INVALID: `${_CC.config.siteTitle} | Enlace de confirmación inválido`, CONFIRM_ACCOUNT_HEADER_VALID: `${_CC.config.siteTitle} | Confirmar cuenta`, - CONFIRM_ACCOUNT_INVALID: 'Este enlace de confirmación no es válido, ¿tal vez esta cuenta se borró o algunos carácteres al final se cortaron?', + CONFIRM_ACCOUNT_INVALID: + 'Este enlace de confirmación no es válido, ¿tal vez esta cuenta se borró o algunos carácteres al final se cortaron?', CONFIRM_ACCOUNT_SET_PW_BUTTON: `Une ${_CC.config.siteTitle}`, CONFIRM_ACCOUNT_SET_PW_PLACEHOLDER: 'pa$$word!', - CONFIRM_ACCOUNT_SET_PW_TEXT: name => `Hola ${name}! Por favor escribe su contraseña aquí.`, + CONFIRM_ACCOUNT_SET_PW_TEXT: (name) => + `Hola ${name}! Por favor escribe su contraseña aquí.`, CONFIRM_ACCOUNT_SUCCESS: `¡Bienvenidos a ${_CC.config.siteTitle}!`, LOGIN_BUTTON: 'Iniciar sesión', LOGIN_PASSWORD_PLACEHOLDER: 'pa$$word!', @@ -77,11 +101,11 @@ export const strings = { NAVBAR_LOGOUT: 'Cerrar sesión', NAVBAR_PROFILE: 'Perfil', NAVBAR_WISHLIST: 'Mi lista de deseos', - NOTE_BACK: name => `Volver a la lista de deseos de ${name}`, + NOTE_BACK: (name) => `Volver a la lista de deseos de ${name}`, NOTE_GET_PRODUCT_DATA: 'Obtener los datos del producto', NOTE_GUARD: 'Usuario inválido', NOTE_IMAGE_URL: 'URL de imagen', - NOTE_MISSING_PROP: prop => `Propiedad ausente ${prop}`, // not really possible to localize this unfortunately + NOTE_MISSING_PROP: (prop) => `Propiedad ausente ${prop}`, // not really possible to localize this unfortunately NOTE_NAME: 'Nombre', NOTE_NOTE: 'Nota', NOTE_PRICE: 'Precio', @@ -101,16 +125,19 @@ export const strings = { PROFILE_PASSWORD_REQUIRED_NEW: 'Nueva contraseña es necesario', PROFILE_PASSWORD_REQUIRED_OLD: 'Contraseña antiguo es necesario', PROFILE_PASSWORD_SUCCESS: '¡Cambios guardados!', - PROFILE_PASSWORD_TITLE: name => `Ajustes de perfil - Contraseña - ${name}`, + PROFILE_PASSWORD_TITLE: (name) => `Ajustes de perfil - Contraseña - ${name}`, PROFILE_SAVE_PFP_DISABLED: 'Foto del perfil deshabilitado.', PROFILE_SAVE_PFP_SUCCESS: '¡Foto de perfil guardado!', PROFILE_SECURITY_CHANGE_PASSWORD: 'Cambiar contraseña', PROFILE_SECURITY: 'Seguridad', - PROFILE_TITLE: name => `Ajustes de perfil - ${name}`, + PROFILE_TITLE: (name) => `Ajustes de perfil - ${name}`, RESET_PASSWORD_BUTTON: 'Restablecer contraseñá', - RESET_PASSWORD_GREETING_EXPIRED: 'Su enlace de restablecimiento se expiró. Por favor pide otra.', - RESET_PASSWORD_GREETING_INVALID: 'Este enlace de restablecimiento no es válido, ¿tal vez el enlace se canceló o algunos carácteres se cortaron?', - RESET_PASSWORD_GREETING_VALID: name => `Hola ${name}! Por favor escribe su contraseña aquí.`, + RESET_PASSWORD_GREETING_EXPIRED: + 'Su enlace de restablecimiento se expiró. Por favor pide otra.', + RESET_PASSWORD_GREETING_INVALID: + 'Este enlace de restablecimiento no es válido, ¿tal vez el enlace se canceló o algunos carácteres se cortaron?', + RESET_PASSWORD_GREETING_VALID: (name) => + `Hola ${name}! Por favor escribe su contraseña aquí.`, RESET_PASSWORD_HEADER_INVALID: `${_CC.config.siteTitle} | Enlace de restablecimiento inválido`, RESET_PASSWORD_HEADER_VALID: `${_CC.config.siteTitle} | Restablecer contraseña`, RESET_PASSWORD_PASSWORD_PLACEHOLDER: 'pa$$word!', @@ -124,7 +151,8 @@ export const strings = { SETUP_USERNAME_PLACEHOLDER: 'juan', SETUP_USERNAME: 'Nombre de usuario', SUPPORTED_SITES_HEADER: 'Sitios web compatibles', - SUPPORTED_SITES_TEXT: '¿Hay un sitio ausente o roto? Abra una propuesta aquí! :)', + SUPPORTED_SITES_TEXT: + '¿Hay un sitio ausente o roto? Abra una propuesta aquí! :)', UPDATE_NOTICE: (current, latest) => ` Christmas Community es desactualizado. Puede haber nuevas functiones o correcciones. ¡Considera actualizar! :) @@ -137,10 +165,11 @@ export const strings = { Más reciente: ${latest} Este mensaje sólo es accesible para administradores`, WISHLIST_ADD: 'Agregar producto a la lista de deseos', - WISHLIST_ADDED_BY_USER: addedBy => `Agregado por: ${addedBy}`, - WISHLIST_ADDED_BY_GUEST: "Usuario Invitado", + WISHLIST_ADDED_BY_USER: (addedBy) => `Agregado por: ${addedBy}`, + WISHLIST_ADDED_BY_GUEST: 'Usuario Invitado', WISHLIST_ADDED_BY: 'Agregado por', - WISHLIST_CONFLICT: 'Los productos se están agregando desmasiado rápido. Por favor intenta otra vez.', + WISHLIST_CONFLICT: + 'Los productos se están agregando desmasiado rápido. Por favor intenta otra vez.', WISHLIST_DELETE: 'Borrar', WISHLIST_EDIT_ITEM: 'Editar producto', WISHLIST_IMAGE: 'Imagen', @@ -160,7 +189,7 @@ export const strings = { WISHLIST_PLEDGE_ITEM: 'Comprometer producto', WISHLIST_PLEDGE_SUCCESS: '¡Producto comprometido!', WISHLIST_PLEDGE: 'Comprometer', - WISHLIST_PLEDGED: pledgedBy => `Comprometido por ${pledgedBy}`, + WISHLIST_PLEDGED: (pledgedBy) => `Comprometido por ${pledgedBy}`, WISHLIST_PLEDGED_GUEST: 'Comprometido por un usuario invitado', WISHLIST_PRICE: 'Precio', WISHLIST_REFRESH_GUARD: 'Usuario inválido', @@ -170,7 +199,8 @@ export const strings = { WISHLIST_REMOVE_MISSING: 'No se pudo encontrar este producto', WISHLIST_REMOVE_SUCCESS: '¡Eliminado de la lista de deseos!', WISHLIST_SUGGEST: 'Sugerir producto', - WISHLIST_TITLE: name => `${_CC.config.siteTitle} - Lista de deseos - ${name}`, + WISHLIST_TITLE: (name) => + `${_CC.config.siteTitle} - Lista de deseos - ${name}`, WISHLIST_UNPLEDGE_GUARD: 'No se comprometió a esto', // should never happen unless someone makes their own http requests WISHLIST_UNPLEDGE_MISSING: 'No se pudo encontrar producto', WISHLIST_UNPLEDGE_SUCCESS: '¡Comprometido para producto eliminado!', @@ -178,7 +208,7 @@ export const strings = { WISHLIST_URL_LABEL: `Nombre de producto o URL (Sitios web compatibles)`, WISHLIST_URL_PLACEHOLDER: 'https://www.amazon.com/dp/B00ZV9RDKK', WISHLIST_URL_REQUIRED: 'Necesita un nombre de producto o URL', - WISHLISTS_COUNTS_SELF: name => `${name}: ???/???`, + WISHLISTS_COUNTS_SELF: (name) => `${name}: ???/???`, WISHLISTS_COUNTS: (name, pledged, total) => `${name}: ${pledged}/${total}`, - WISHLISTS_TITLE: `${_CC.config.siteTitle} - Listas de deseo` + WISHLISTS_TITLE: `${_CC.config.siteTitle} - Listas de deseo`, } as const diff --git a/src/languages/fr-ca.ts b/src/languages/fr-ca.ts index c97368cd..7fca30cc 100644 --- a/src/languages/fr-ca.ts +++ b/src/languages/fr-ca.ts @@ -1,94 +1,120 @@ export const momentLocale = 'fr-ca' export const strings = { - _NOT_LOCALIZED: key => `${key} n'a pas encore été traduit en français (Canada).`, + _NOT_LOCALIZED: (key) => + `${key} n'a pas encore été traduit en français (Canada).`, ADMIN_CLEAR_WISHLISTS_BUTTON: 'Effacer toutes les listes de souhaits', - ADMIN_CLEAR_WISHLISTS_DESCRIPTION: 'Ceci supprimera toutes les listes de souhaits. Cette action est irréversible! Peut-être devriez-vous faire une sauvegarde de la base de données avant de continuer.', + ADMIN_CLEAR_WISHLISTS_DESCRIPTION: + 'Ceci supprimera toutes les listes de souhaits. Cette action est irréversible! Peut-être devriez-vous faire une sauvegarde de la base de données avant de continuer.', ADMIN_CLEAR_WISHLISTS_HEADER: 'Suppression des listes de souhaits', ADMIN_SETTINGS_CLEARDB_BUTTON: 'Retirer la liste de souhaits', - ADMIN_SETTINGS_CLEARDB_DESCRIPTION: 'Alerte: Ceci supprimera les données! Cette action est irréversible. Assurez-vous d\'avoir une sauvegarde de la base de données avant de continuer.', + ADMIN_SETTINGS_CLEARDB_DESCRIPTION: + "Alerte: Ceci supprimera les données! Cette action est irréversible. Assurez-vous d'avoir une sauvegarde de la base de données avant de continuer.", ADMIN_SETTINGS_CLEARDB_HEADER: 'Suppression des données', ADMIN_SETTINGS_CLEARDB_SUCCESS: 'Toutes les données ont été supprimées.', ADMIN_SETTINGS_HEADER: 'Paramètres Administratifs', ADMIN_SETTINGS_USERS_ADD_BUTTON: 'Ajouter un Utilisateur', ADMIN_SETTINGS_USERS_ADD_HEADER: 'Ajouter un utilisateur', ADMIN_SETTINGS_USERS_ADD_PLACEHOLDER: 'félix', - ADMIN_SETTINGS_USERS_ADD_USERNAME: 'Nom d\'utilisateur', - ADMIN_SETTINGS_USERS_EDIT_DELETE_FAIL_ADMIN: 'Vous ne pouvez pas supprimer un autre administrateur.', - ADMIN_SETTINGS_USERS_EDIT_DELETE_SUCCESS: name => `Utilisateur ${name} supprimé avec succès.`, - ADMIN_SETTINGS_USERS_EDIT_DEMOTE_NOT_ADMIN: 'Cet utilisateur n\'est pas un administrateur.', + ADMIN_SETTINGS_USERS_ADD_USERNAME: "Nom d'utilisateur", + ADMIN_SETTINGS_USERS_EDIT_DELETE_FAIL_ADMIN: + 'Vous ne pouvez pas supprimer un autre administrateur.', + ADMIN_SETTINGS_USERS_EDIT_DELETE_SUCCESS: (name) => + `Utilisateur ${name} supprimé avec succès.`, + ADMIN_SETTINGS_USERS_EDIT_DEMOTE_NOT_ADMIN: + "Cet utilisateur n'est pas un administrateur.", ADMIN_SETTINGS_USERS_EDIT_DEMOTE_SELF: 'Vous ne pouvez pas vous rétrograder.', - ADMIN_SETTINGS_USERS_EDIT_DEMOTE_SUCCESS: name => `${name} n'est plus un administrateur.`, - ADMIN_SETTINGS_USERS_EDIT_IMPERSONATE_SUCCESS: name => `Vous êtes désormais ${name}.`, - ADMIN_SETTINGS_USERS_EDIT_NO_USERNAME_PROVIDED: 'Aucun nom d\'utilisateur fourni.', - ADMIN_SETTINGS_USERS_EDIT_PROMOTE_ALREADY_ADMIN: 'Cet utilisateur est déjà un administrateur.', + ADMIN_SETTINGS_USERS_EDIT_DEMOTE_SUCCESS: (name) => + `${name} n'est plus un administrateur.`, + ADMIN_SETTINGS_USERS_EDIT_IMPERSONATE_SUCCESS: (name) => + `Vous êtes désormais ${name}.`, + ADMIN_SETTINGS_USERS_EDIT_NO_USERNAME_PROVIDED: + "Aucun nom d'utilisateur fourni.", + ADMIN_SETTINGS_USERS_EDIT_PROMOTE_ALREADY_ADMIN: + 'Cet utilisateur est déjà un administrateur.', ADMIN_SETTINGS_USERS_EDIT_PROMOTE_DEMOTE_NOT_FOUND: 'Utilisateur non trouvé.', - ADMIN_SETTINGS_USERS_EDIT_PROMOTE_SUCCESS: name => `${name} est désormais un administrateur.`, + ADMIN_SETTINGS_USERS_EDIT_PROMOTE_SUCCESS: (name) => + `${name} est désormais un administrateur.`, ADMIN_SETTINGS_USERS_EDIT_RENAMED_USER: 'Utilisateur renommé!', - ADMIN_SETTINGS_USERS_EDIT_SAME_NAME: 'Le nouveau nom doit être différent de l\'ancien.', + ADMIN_SETTINGS_USERS_EDIT_SAME_NAME: + "Le nouveau nom doit être différent de l'ancien.", ADMIN_SETTINGS_USERS_EDIT: 'Modifier', ADMIN_SETTINGS_USERS_HEADER: 'Utilisateurs', ADMIN_SETTINGS_VERSION_INFO: 'Information de version', ADMIN_USER_EDIT_ACCOUNT_UNCONFIRMED: "Ce compte n'a pas encore été confirmé.", - ADMIN_USER_EDIT_ADMIN_ISADMIN: name => `${name} est un administrateur.`, - ADMIN_USER_EDIT_ADMIN_NOTADMIN: name => `${name} n'est pas un administrateur.`, + ADMIN_USER_EDIT_ADMIN_ISADMIN: (name) => `${name} est un administrateur.`, + ADMIN_USER_EDIT_ADMIN_NOTADMIN: (name) => + `${name} n'est pas un administrateur.`, ADMIN_USER_EDIT_ADMIN: 'Administrateur', ADMIN_USER_EDIT_CHANGE_NAME: 'Changer de nom', - ADMIN_USER_EDIT_CHANGE_USERNAME: 'Changer de nom d\'utilisateur', + ADMIN_USER_EDIT_CHANGE_USERNAME: "Changer de nom d'utilisateur", ADMIN_USER_EDIT_CONFIRMATION_LINK: 'Lien de confirmation', - ADMIN_USER_EDIT_DELETE_ADMIN: 'L\'utilisateur est un administrateur.', + ADMIN_USER_EDIT_DELETE_ADMIN: "L'utilisateur est un administrateur.", ADMIN_USER_EDIT_DELETE_HEADER: 'Suppression irréversible', - ADMIN_USER_EDIT_DELETE_USER: name => `Supprimer l'utilisateur ${name}`, + ADMIN_USER_EDIT_DELETE_USER: (name) => `Supprimer l'utilisateur ${name}`, ADMIN_USER_EDIT_DEMOTE_SELF: 'Vous ne pouvez pas vous rétrograder.', - ADMIN_USER_EDIT_DEMOTE: name => `Rétrograder ${name}`, - ADMIN_USER_EDIT_EDITING_USER: name => `Modification de l'utilisateur "${name}"`, + ADMIN_USER_EDIT_DEMOTE: (name) => `Rétrograder ${name}`, + ADMIN_USER_EDIT_EDITING_USER: (name) => + `Modification de l'utilisateur "${name}"`, ADMIN_USER_EDIT_GENERATE_NEW_LINK: 'Générer un nouveau lien', - ADMIN_USER_EDIT_IMPERSONATE_BUTTON: name => `Se connecter en tant que ${name}`, + ADMIN_USER_EDIT_IMPERSONATE_BUTTON: (name) => + `Se connecter en tant que ${name}`, ADMIN_USER_EDIT_IMPERSONATE_HEADER: 'Se connecter en tant que', - ADMIN_USER_EDIT_LINK_EXPIRY_FUTURE: fromNow => `Le lien suivant expire le ${fromNow}`, // fromNow is localized by moment - ADMIN_USER_EDIT_LINK_EXPIRY_PAST: fromNow => `Le lien suivant a expiré le ${fromNow}`, - ADMIN_USER_EDIT_PROMOTE: name => `Promouvoir ${name}`, - ADMIN_USER_EDIT_RESET_PASSWORD_HASLINK_EXPIRY_FUTURE: fromNow => `expire le ${fromNow}`, - ADMIN_USER_EDIT_RESET_PASSWORD_HASLINK_EXPIRY_PAST: fromNow => `a expiré le ${fromNow}`, - ADMIN_USER_EDIT_RESET_PASSWORD_HASLINK: 'Il y a un lien de réinitialisation de mot de passe pour cet utilisateur.', + ADMIN_USER_EDIT_LINK_EXPIRY_FUTURE: (fromNow) => + `Le lien suivant expire le ${fromNow}`, // fromNow is localized by moment + ADMIN_USER_EDIT_LINK_EXPIRY_PAST: (fromNow) => + `Le lien suivant a expiré le ${fromNow}`, + ADMIN_USER_EDIT_PROMOTE: (name) => `Promouvoir ${name}`, + ADMIN_USER_EDIT_RESET_PASSWORD_HASLINK_EXPIRY_FUTURE: (fromNow) => + `expire le ${fromNow}`, + ADMIN_USER_EDIT_RESET_PASSWORD_HASLINK_EXPIRY_PAST: (fromNow) => + `a expiré le ${fromNow}`, + ADMIN_USER_EDIT_RESET_PASSWORD_HASLINK: + 'Il y a un lien de réinitialisation de mot de passe pour cet utilisateur.', ADMIN_USER_EDIT_RESET_PASSWORD_HEADER: 'Réinitialiser le mot de passe', - ADMIN_USER_EDIT_RESET_PASSWORD_LINK_CANCEL: 'Annuler le lien de réinitialisation de mot de passe', - ADMIN_USER_EDIT_RESET_PASSWORD_LINK_CREATE: 'Créer un lien de réinitialisation de mot de passe', - ADMIN_USER_EDIT_RESET_PASSWORD_LINK_REFRESH: 'Rafraîchir le lien de réinitialisation de mot de passe', - ADMIN_USER_EDIT_USERNAME: 'Nom d\'utilisateur', + ADMIN_USER_EDIT_RESET_PASSWORD_LINK_CANCEL: + 'Annuler le lien de réinitialisation de mot de passe', + ADMIN_USER_EDIT_RESET_PASSWORD_LINK_CREATE: + 'Créer un lien de réinitialisation de mot de passe', + ADMIN_USER_EDIT_RESET_PASSWORD_LINK_REFRESH: + 'Rafraîchir le lien de réinitialisation de mot de passe', + ADMIN_USER_EDIT_USERNAME: "Nom d'utilisateur", BACK_BUTTON: 'Retour', - CONFIRM_ACCOUNT_EXPIRED: 'Le lien de confirmation a expiré. Demandez-en un nouveau.', + CONFIRM_ACCOUNT_EXPIRED: + 'Le lien de confirmation a expiré. Demandez-en un nouveau.', CONFIRM_ACCOUNT_HEADER_INVALID: `${_CC.config.siteTitle} | Lien de confirmation invalide`, CONFIRM_ACCOUNT_HEADER_VALID: `${_CC.config.siteTitle} | Confirmation du compte`, - CONFIRM_ACCOUNT_INVALID: "Ce lien de confirmation n'est pas valide, peut-être que le compte a été supprimé ou que certains caractères à la fin ont été supprimés?", + CONFIRM_ACCOUNT_INVALID: + "Ce lien de confirmation n'est pas valide, peut-être que le compte a été supprimé ou que certains caractères à la fin ont été supprimés?", CONFIRM_ACCOUNT_SET_PW_BUTTON: `Rejoindre ${_CC.config.siteTitle}`, CONFIRM_ACCOUNT_SET_PW_PLACEHOLDER: 'm0t de pa$$e!', - CONFIRM_ACCOUNT_SET_PW_TEXT: name => `Bonjour ${name}! Veuillez entrer votre mot de passe ici.`, + CONFIRM_ACCOUNT_SET_PW_TEXT: (name) => + `Bonjour ${name}! Veuillez entrer votre mot de passe ici.`, CONFIRM_ACCOUNT_SUCCESS: `Bienvenue à ${_CC.config.siteTitle}!`, LOGIN_BUTTON: 'Connexion', LOGIN_PASSWORD_PLACEHOLDER: 'm0t de pa$$e!', LOGIN_PASSWORD: 'Mot de passe', LOGIN_USERNAME_PLACEHOLDER: 'félix', - LOGIN_USERNAME: 'Nom d\'utilisateur', + LOGIN_USERNAME: "Nom d'utilisateur", LOGOUT_BUTTON: 'Déconnexion', NAVBAR_ADMIN: 'Paramètres Administratifs', NAVBAR_LOGIN: 'Connexion', NAVBAR_LOGOUT: 'Déconnexion', NAVBAR_PROFILE: 'Profil', NAVBAR_WISHLIST: 'Ma liste de souhaits', - NOTE_BACK: name => `De retour à la liste de souhaits de ${name}`, + NOTE_BACK: (name) => `De retour à la liste de souhaits de ${name}`, NOTE_GET_PRODUCT_DATA: 'Obtenir les données du produit', NOTE_GUARD: 'Utilisateur invalide', - NOTE_IMAGE_URL: 'URL de l\'image', - NOTE_MISSING_PROP: prop => `Propriété ${prop} manquante`, // not really possible to localize this unfortunately + NOTE_IMAGE_URL: "URL de l'image", + NOTE_MISSING_PROP: (prop) => `Propriété ${prop} manquante`, // not really possible to localize this unfortunately NOTE_NAME: 'Nom', NOTE_NOTE: 'Note', NOTE_PRICE: 'Coût', NOTE_REFRESH_DATA: 'Rafraîchir les données', NOTE_REMOVE_GUARD: 'Utilisateur invalide', - NOTE_REMOVE_MISSING: 'N\'a pas de note', + NOTE_REMOVE_MISSING: "N'a pas de note", NOTE_REMOVE_SUCCESS: 'Note supprimée avec succès', - NOTE_SAVE_BUTTON: 'Sauvegarder l\'article', + NOTE_SAVE_BUTTON: "Sauvegarder l'article", NOTE_SUCCESS: 'Sauvgardé avec succès!', NOTE_URL: 'URL', PROFILE_HEADER: 'Profil', @@ -100,16 +126,20 @@ export const strings = { PROFILE_PASSWORD_REQUIRED_NEW: 'Nouveau mot de passe requis', PROFILE_PASSWORD_REQUIRED_OLD: 'Ancien mot de passe requis', PROFILE_PASSWORD_SUCCESS: 'Changé avec succès!', - PROFILE_PASSWORD_TITLE: name => `Paramètres du profil - Mot de passe - ${name}`, + PROFILE_PASSWORD_TITLE: (name) => + `Paramètres du profil - Mot de passe - ${name}`, PROFILE_SAVE_PFP_DISABLED: 'Photos de profil désactivées', PROFILE_SAVE_PFP_SUCCESS: 'Photo de profil sauvegardée avec succès', PROFILE_SECURITY_CHANGE_PASSWORD: 'Changer le mot de passe', PROFILE_SECURITY: 'Sécurité', - PROFILE_TITLE: name => `Paramètres du profil - ${name}`, + PROFILE_TITLE: (name) => `Paramètres du profil - ${name}`, RESET_PASSWORD_BUTTON: 'Réinitialiser le mot de passe', - RESET_PASSWORD_GREETING_EXPIRED: 'Le lien de réinitialisation de mot de passe a expiré. Demandez-en un nouveau.', - RESET_PASSWORD_GREETING_INVALID: "Ce lien de réinitialisation de mot de passe n'est pas valide, peut-être que le compte a été supprimé ou que certains caractères à la fin ont été supprimés?", - RESET_PASSWORD_GREETING_VALID: name => `Bonjour ${name}! Veuillez entrer votre mot de passe ici.`, + RESET_PASSWORD_GREETING_EXPIRED: + 'Le lien de réinitialisation de mot de passe a expiré. Demandez-en un nouveau.', + RESET_PASSWORD_GREETING_INVALID: + "Ce lien de réinitialisation de mot de passe n'est pas valide, peut-être que le compte a été supprimé ou que certains caractères à la fin ont été supprimés?", + RESET_PASSWORD_GREETING_VALID: (name) => + `Bonjour ${name}! Veuillez entrer votre mot de passe ici.`, RESET_PASSWORD_HEADER_INVALID: `${_CC.config.siteTitle} | Lien de réinitialisation invalide`, RESET_PASSWORD_HEADER_VALID: `${_CC.config.siteTitle} | Réinitialiser du mot de passe`, RESET_PASSWORD_PASSWORD_PLACEHOLDER: 'm0t de pa$$e!', @@ -121,9 +151,10 @@ export const strings = { SETUP_PASSWORD_PLACEHOLDER: 'm0t de pa$$e!', SETUP_PASSWORD: 'Mot de passe', SETUP_USERNAME_PLACEHOLDER: 'félix', - SETUP_USERNAME: 'Nom d\'utilisateur', + SETUP_USERNAME: "Nom d'utilisateur", SUPPORTED_SITES_HEADER: 'Sites pris en charge', - SUPPORTED_SITES_TEXT: 'Un site est-il manquant ou cassé? Reporter un problème here! :)', + SUPPORTED_SITES_TEXT: + 'Un site est-il manquant ou cassé? Reporter un problème here! :)', UPDATE_NOTICE: (current, latest) => ` Christmas Community est obsolète. Il peut y avoir de nouvelles fonctionnalités ou des corrections de bugs. Pensez à mettre à jour! :) @@ -136,19 +167,20 @@ export const strings = { Dernière version: ${latest} Ce message n'est visible que par les administrateurs`, WISHLIST_ADD: 'Ajouter à la liste de souhaits', - WISHLIST_ADDED_BY_USER: addedBy => `Ajouté par: ${addedBy}`, - WISHLIST_ADDED_BY_GUEST: "Utilisateur Invité", + WISHLIST_ADDED_BY_USER: (addedBy) => `Ajouté par: ${addedBy}`, + WISHLIST_ADDED_BY_GUEST: 'Utilisateur Invité', WISHLIST_ADDED_BY: 'Ajouté Par', - WISHLIST_CONFLICT: 'Les articles se font ajouter trop rapidement. Veuillez réessayer.', + WISHLIST_CONFLICT: + 'Les articles se font ajouter trop rapidement. Veuillez réessayer.', WISHLIST_DELETE: 'Supprimer', - WISHLIST_EDIT_ITEM: 'Modifier l\'article', + WISHLIST_EDIT_ITEM: "Modifier l'article", WISHLIST_IMAGE: 'Image', WISHLIST_MOVE_DOWN: 'Descendre', WISHLIST_MOVE_GUARD: 'Utilisateur incorrect', WISHLIST_MOVE_INVALID: 'Mouvement invalide', - WISHLIST_MOVE_ITEM_DOWN: 'Descendre l\'article tout en bas', - WISHLIST_MOVE_ITEM_TOP: 'Monter l\'article tout en haut', - WISHLIST_MOVE_ITEM_UP: 'Monter l\'article', + WISHLIST_MOVE_ITEM_DOWN: "Descendre l'article tout en bas", + WISHLIST_MOVE_ITEM_TOP: "Monter l'article tout en haut", + WISHLIST_MOVE_ITEM_UP: "Monter l'article", WISHLIST_MOVE_SUCCESS: 'Article déplacé avec succès', WISHLIST_MOVE_TOP: 'Monter tout en haut', WISHLIST_MOVE_UP: 'Monter', @@ -157,27 +189,29 @@ export const strings = { WISHLIST_OPTIONAL: 'Optionnel', WISHLIST_PLEDGE_DUPLICATE: 'Vous avez déjà promis pour', WISHLIST_PLEDGE_ITEM: 'Je promets', - WISHLIST_PLEDGE_SUCCESS: 'L\'article a été promis avec succès', + WISHLIST_PLEDGE_SUCCESS: "L'article a été promis avec succès", WISHLIST_PLEDGE: 'Promettre', - WISHLIST_PLEDGED: pledgedBy => `Promis par: ${pledgedBy}`, + WISHLIST_PLEDGED: (pledgedBy) => `Promis par: ${pledgedBy}`, WISHLIST_PLEDGED_GUEST: 'Promis par un invité', WISHLIST_PRICE: 'Coût', WISHLIST_REFRESH_GUARD: 'Utilisateur incorrect', - WISHLIST_REFRESH_NO_URL: 'L\'article n\'a pas d\'URL', + WISHLIST_REFRESH_NO_URL: "L'article n'a pas d'URL", WISHLIST_REFRESH_SUCCESS: 'Article rafraîchi avec succès', WISHLIST_REMOVE_GUARD: 'Utilisateur incorrect', - WISHLIST_REMOVE_MISSING: 'Impossible de trouver l\'article', - WISHLIST_REMOVE_SUCCESS: 'Article supprimé de la liste de souhaits avec succès', + WISHLIST_REMOVE_MISSING: "Impossible de trouver l'article", + WISHLIST_REMOVE_SUCCESS: + 'Article supprimé de la liste de souhaits avec succès', WISHLIST_SUGGEST: 'Suggérer un article', - WISHLIST_TITLE: name => `${_CC.config.siteTitle} - Liste de souhaits - ${name}`, + WISHLIST_TITLE: (name) => + `${_CC.config.siteTitle} - Liste de souhaits - ${name}`, WISHLIST_UNPLEDGE_GUARD: 'Vous ne vous êtes pas engagé pour cela', // should never happen unless someone makes their own http requests - WISHLIST_UNPLEDGE_MISSING: 'Impossible de trouver l\'article', - WISHLIST_UNPLEDGE_SUCCESS: 'L\'article a été annulé avec succès', + WISHLIST_UNPLEDGE_MISSING: "Impossible de trouver l'article", + WISHLIST_UNPLEDGE_SUCCESS: "L'article a été annulé avec succès", WISHLIST_UNPLEDGE: 'Se désengager', WISHLIST_URL_LABEL: `URL ou nom de l\`article (Sites supportés)`, WISHLIST_URL_PLACEHOLDER: 'https://www.amazon.com/dp/B00ZV9RDKK', WISHLIST_URL_REQUIRED: "L'URL ou le nom de l'article est requis", - WISHLISTS_COUNTS_SELF: name => `${name}: ???/???`, + WISHLISTS_COUNTS_SELF: (name) => `${name}: ???/???`, WISHLISTS_COUNTS: (name, pledged, total) => `${name}: ${pledged}/${total}`, - WISHLISTS_TITLE: `${_CC.config.siteTitle} - Listes de souhaits` + WISHLISTS_TITLE: `${_CC.config.siteTitle} - Listes de souhaits`, } as const diff --git a/src/languages/fr-fr.ts b/src/languages/fr-fr.ts index 08397ee8..37b9035f 100644 --- a/src/languages/fr-fr.ts +++ b/src/languages/fr-fr.ts @@ -1,96 +1,124 @@ export const momentLocale = 'fr' -export const notTranslated = englishString => `${englishString} (pas encore traduit en français)` +export const notTranslated = (englishString) => + `${englishString} (pas encore traduit en français)` export const strings = { - ADMIN_CLEAR_WISHLISTS_BUTTON: 'Effacer toutes les listes d\'envies', - ADMIN_CLEAR_WISHLISTS_DESCRIPTION: 'Cela supprimera instantanément et de manière irréversible toutes les listes d\'envies! Pensez à faire une sauvegarde de la base de données avant d\'utiliser cette option.', - ADMIN_CLEAR_WISHLISTS_HEADER: 'Suppression de la liste d\'envie', - ADMIN_SETTINGS_CLEARDB_BUTTON: 'Videz la liste d\'envie', - ADMIN_SETTINGS_CLEARDB_DESCRIPTION: 'Attention: Ces options supprime les données! Pensez à faire une sauvegarde avant d\'utiliser cette option.', + ADMIN_CLEAR_WISHLISTS_BUTTON: "Effacer toutes les listes d'envies", + ADMIN_CLEAR_WISHLISTS_DESCRIPTION: + "Cela supprimera instantanément et de manière irréversible toutes les listes d'envies! Pensez à faire une sauvegarde de la base de données avant d'utiliser cette option.", + ADMIN_CLEAR_WISHLISTS_HEADER: "Suppression de la liste d'envie", + ADMIN_SETTINGS_CLEARDB_BUTTON: "Videz la liste d'envie", + ADMIN_SETTINGS_CLEARDB_DESCRIPTION: + "Attention: Ces options supprime les données! Pensez à faire une sauvegarde avant d'utiliser cette option.", ADMIN_SETTINGS_CLEARDB_HEADER: 'Suppression des données', - ADMIN_SETTINGS_CLEARDB_SUCCESS: 'Suppression de toutes les listes d\'envies.', + ADMIN_SETTINGS_CLEARDB_SUCCESS: "Suppression de toutes les listes d'envies.", ADMIN_SETTINGS_HEADER: 'Paramètres Administrateurs', ADMIN_SETTINGS_USERS_ADD_BUTTON: 'Ajouter un Utilisateur', ADMIN_SETTINGS_USERS_ADD_HEADER: 'Ajouter un utilisateur', ADMIN_SETTINGS_USERS_ADD_PLACEHOLDER: 'jean', - ADMIN_SETTINGS_USERS_ADD_USERNAME: 'Nom d\'utilisateur', - ADMIN_SETTINGS_USERS_ADD_ERROR_USERNAME_EMPTY: 'Le nom d\'utilisateur ne peut pas être vide.', - ADMIN_SETTINGS_USERS_EDIT_DELETE_FAIL_ADMIN: 'Échec de la suppression : l\'utilisateur est un administrateur.', - ADMIN_SETTINGS_USERS_EDIT_DELETE_SUCCESS: name => `Utilisateur supprimé avec succès ${name}`, - ADMIN_SETTINGS_USERS_EDIT_DEMOTE_NOT_ADMIN: 'l\'utilisateur n\'est pas un administrateur', - ADMIN_SETTINGS_USERS_EDIT_DEMOTE_SELF: 'Vous ne pouvez pas vous supprimer vous même.', - ADMIN_SETTINGS_USERS_EDIT_DEMOTE_SUCCESS: name => `${name} n'est plus un administrateur.`, - ADMIN_SETTINGS_USERS_EDIT_IMPERSONATE_SUCCESS: name => `Vous êtes maintenant ${name}.`, - ADMIN_SETTINGS_USERS_EDIT_NO_USERNAME_PROVIDED: 'Aucun nom d\'utilisateur fourni', - ADMIN_SETTINGS_USERS_EDIT_PROMOTE_ALREADY_ADMIN: 'cet utilisateur est déjà administrateur', + ADMIN_SETTINGS_USERS_ADD_USERNAME: "Nom d'utilisateur", + ADMIN_SETTINGS_USERS_ADD_ERROR_USERNAME_EMPTY: + "Le nom d'utilisateur ne peut pas être vide.", + ADMIN_SETTINGS_USERS_EDIT_DELETE_FAIL_ADMIN: + "Échec de la suppression : l'utilisateur est un administrateur.", + ADMIN_SETTINGS_USERS_EDIT_DELETE_SUCCESS: (name) => + `Utilisateur supprimé avec succès ${name}`, + ADMIN_SETTINGS_USERS_EDIT_DEMOTE_NOT_ADMIN: + "l'utilisateur n'est pas un administrateur", + ADMIN_SETTINGS_USERS_EDIT_DEMOTE_SELF: + 'Vous ne pouvez pas vous supprimer vous même.', + ADMIN_SETTINGS_USERS_EDIT_DEMOTE_SUCCESS: (name) => + `${name} n'est plus un administrateur.`, + ADMIN_SETTINGS_USERS_EDIT_IMPERSONATE_SUCCESS: (name) => + `Vous êtes maintenant ${name}.`, + ADMIN_SETTINGS_USERS_EDIT_NO_USERNAME_PROVIDED: + "Aucun nom d'utilisateur fourni", + ADMIN_SETTINGS_USERS_EDIT_PROMOTE_ALREADY_ADMIN: + 'cet utilisateur est déjà administrateur', ADMIN_SETTINGS_USERS_EDIT_PROMOTE_DEMOTE_NOT_FOUND: 'Utilisateur non trouvé.', - ADMIN_SETTINGS_USERS_EDIT_PROMOTE_SUCCESS: name => `${name} est maintenant un administrateur.`, + ADMIN_SETTINGS_USERS_EDIT_PROMOTE_SUCCESS: (name) => + `${name} est maintenant un administrateur.`, ADMIN_SETTINGS_USERS_EDIT_RENAMED_USER: 'Utilisateur renommé!', - ADMIN_SETTINGS_USERS_EDIT_SAME_NAME: 'L\'ancien nom d\'utilisateur est le même que le nouveau nom d\'utilisateur.', + ADMIN_SETTINGS_USERS_EDIT_SAME_NAME: + "L'ancien nom d'utilisateur est le même que le nouveau nom d'utilisateur.", ADMIN_SETTINGS_USERS_EDIT: 'Modifier', ADMIN_SETTINGS_USERS_HEADER: 'Utilisateurs', ADMIN_SETTINGS_VERSION_INFO: 'Version Info', ADMIN_USER_EDIT_ACCOUNT_UNCONFIRMED: "Ce compte n'a pas été confirmé.", - ADMIN_USER_EDIT_ADMIN_ISADMIN: name => `${name} est un administrateur.`, - ADMIN_USER_EDIT_ADMIN_NOTADMIN: name => `${name} n'est pas un administrateur.`, + ADMIN_USER_EDIT_ADMIN_ISADMIN: (name) => `${name} est un administrateur.`, + ADMIN_USER_EDIT_ADMIN_NOTADMIN: (name) => + `${name} n'est pas un administrateur.`, ADMIN_USER_EDIT_ADMIN: 'Admin', ADMIN_USER_EDIT_CHANGE_NAME: 'Changer de nom', - ADMIN_USER_EDIT_CHANGE_USERNAME: 'Changer de nom d\'utilisateur', + ADMIN_USER_EDIT_CHANGE_USERNAME: "Changer de nom d'utilisateur", ADMIN_USER_EDIT_CONFIRMATION_LINK: 'Lien de confirmation', - ADMIN_USER_EDIT_DELETE_ADMIN: 'L\'utilisateur est administrateur', + ADMIN_USER_EDIT_DELETE_ADMIN: "L'utilisateur est administrateur", ADMIN_USER_EDIT_DELETE_HEADER: 'Suppression irréversible', - ADMIN_USER_EDIT_DELETE_USER: name => `Supprimer l'utilisateur ${name}`, + ADMIN_USER_EDIT_DELETE_USER: (name) => `Supprimer l'utilisateur ${name}`, ADMIN_USER_EDIT_DEMOTE_SELF: 'Vous ne pouvez pas vous rétrograder', - ADMIN_USER_EDIT_DEMOTE: name => `Rétrograder ${name}`, - ADMIN_USER_EDIT_EDITING_USER: name => `Modification de l'utilisateur "${name}"`, + ADMIN_USER_EDIT_DEMOTE: (name) => `Rétrograder ${name}`, + ADMIN_USER_EDIT_EDITING_USER: (name) => + `Modification de l'utilisateur "${name}"`, ADMIN_USER_EDIT_GENERATE_NEW_LINK: 'Générer un nouveau lien', - ADMIN_USER_EDIT_IMPERSONATE_BUTTON: name => `Se connecter en tant que ${name}`, + ADMIN_USER_EDIT_IMPERSONATE_BUTTON: (name) => + `Se connecter en tant que ${name}`, ADMIN_USER_EDIT_IMPERSONATE_HEADER: 'se faire passer pour', - ADMIN_USER_EDIT_LINK_EXPIRY_FUTURE: fromNow => `Le lien suivant expire le ${fromNow}`, // fromNow is localized by moment - ADMIN_USER_EDIT_LINK_EXPIRY_PAST: fromNow => `Le lien suivant a expiré le ${fromNow}`, - ADMIN_USER_EDIT_PROMOTE: name => `Promouvoir ${name}`, - ADMIN_USER_EDIT_RESET_PASSWORD_HASLINK_EXPIRY_FUTURE: fromNow => `expire le ${fromNow}`, - ADMIN_USER_EDIT_RESET_PASSWORD_HASLINK_EXPIRY_PAST: fromNow => `a expiré le ${fromNow}`, - ADMIN_USER_EDIT_RESET_PASSWORD_HASLINK: 'Il y a un lien de réinitialisation de mot de passe pour cet utilisateur.', + ADMIN_USER_EDIT_LINK_EXPIRY_FUTURE: (fromNow) => + `Le lien suivant expire le ${fromNow}`, // fromNow is localized by moment + ADMIN_USER_EDIT_LINK_EXPIRY_PAST: (fromNow) => + `Le lien suivant a expiré le ${fromNow}`, + ADMIN_USER_EDIT_PROMOTE: (name) => `Promouvoir ${name}`, + ADMIN_USER_EDIT_RESET_PASSWORD_HASLINK_EXPIRY_FUTURE: (fromNow) => + `expire le ${fromNow}`, + ADMIN_USER_EDIT_RESET_PASSWORD_HASLINK_EXPIRY_PAST: (fromNow) => + `a expiré le ${fromNow}`, + ADMIN_USER_EDIT_RESET_PASSWORD_HASLINK: + 'Il y a un lien de réinitialisation de mot de passe pour cet utilisateur.', ADMIN_USER_EDIT_RESET_PASSWORD_HEADER: 'Réinitialiser le mot de passe', - ADMIN_USER_EDIT_RESET_PASSWORD_LINK_CANCEL: 'Supprimer le lien de réinitialisation du mot de passe', - ADMIN_USER_EDIT_RESET_PASSWORD_LINK_CREATE: 'Créer un lien de réinitialisation de mot de passe', - ADMIN_USER_EDIT_RESET_PASSWORD_LINK_REFRESH: 'Actualiser le lien de réinitialisation du mot de passe', - ADMIN_USER_EDIT_USERNAME: 'Nom d\'utilisateur', + ADMIN_USER_EDIT_RESET_PASSWORD_LINK_CANCEL: + 'Supprimer le lien de réinitialisation du mot de passe', + ADMIN_USER_EDIT_RESET_PASSWORD_LINK_CREATE: + 'Créer un lien de réinitialisation de mot de passe', + ADMIN_USER_EDIT_RESET_PASSWORD_LINK_REFRESH: + 'Actualiser le lien de réinitialisation du mot de passe', + ADMIN_USER_EDIT_USERNAME: "Nom d'utilisateur", BACK_BUTTON: 'Retour', - CONFIRM_ACCOUNT_EXPIRED: 'Votre lien de confirmation a expiré. Veuillez en demander un nouveau.', + CONFIRM_ACCOUNT_EXPIRED: + 'Votre lien de confirmation a expiré. Veuillez en demander un nouveau.', CONFIRM_ACCOUNT_HEADER_INVALID: `${_CC.config.siteTitle} | Lien de confirmation invalide`, CONFIRM_ACCOUNT_HEADER_VALID: `${_CC.config.siteTitle} | Confirmer le compte`, - CONFIRM_ACCOUNT_INVALID: "Ce lien de confirmation n'est pas valide, peut-être que le compte a été supprimé ou que certains caractères à la fin ont été enlevés?", + CONFIRM_ACCOUNT_INVALID: + "Ce lien de confirmation n'est pas valide, peut-être que le compte a été supprimé ou que certains caractères à la fin ont été enlevés?", CONFIRM_ACCOUNT_SET_PW_BUTTON: `Rejoindre ${_CC.config.siteTitle}`, CONFIRM_ACCOUNT_SET_PW_PLACEHOLDER: 'pa$$word!', - CONFIRM_ACCOUNT_SET_PW_TEXT: name => `Bonjour ${name}! Veuillez taper votre mot de passe ici.`, + CONFIRM_ACCOUNT_SET_PW_TEXT: (name) => + `Bonjour ${name}! Veuillez taper votre mot de passe ici.`, CONFIRM_ACCOUNT_SUCCESS: `Bienvenue à ${_CC.config.siteTitle}!`, LOGIN_BUTTON: 'Connexion', LOGIN_PASSWORD_PLACEHOLDER: 'pa$$word!', LOGIN_PASSWORD: 'Password', LOGIN_USERNAME_PLACEHOLDER: 'jean', - LOGIN_USERNAME: 'Nom d\'utilisateur', + LOGIN_USERNAME: "Nom d'utilisateur", LOGOUT_BUTTON: 'Deconnexion', NAVBAR_ADMIN: 'Paramètres Administrateur', NAVBAR_LOGIN: 'Connexion', NAVBAR_LOGOUT: 'Deconnexion', NAVBAR_PROFILE: 'Profil', - NAVBAR_WISHLIST: 'Ma liste d\'envies', - NOTE_BACK: name => `Retour à la liste d'envie de ${name}`, + NAVBAR_WISHLIST: "Ma liste d'envies", + NOTE_BACK: (name) => `Retour à la liste d'envie de ${name}`, NOTE_GET_PRODUCT_DATA: 'Obtenir des données sur le produit', NOTE_GUARD: 'Utilisateur invalide', - NOTE_IMAGE_URL: 'URL de l\'Image', - NOTE_MISSING_PROP: prop => `Propriété manquante ${prop}`, // not really possible to localize this unfortunately + NOTE_IMAGE_URL: "URL de l'Image", + NOTE_MISSING_PROP: (prop) => `Propriété manquante ${prop}`, // not really possible to localize this unfortunately NOTE_NAME: 'Nom', NOTE_NOTE: 'Note', NOTE_PRICE: 'Prix', NOTE_REFRESH_DATA: 'Actualiser les données', NOTE_REMOVE_GUARD: 'Utilisateur invalide', - NOTE_REMOVE_MISSING: 'N\'a pas de note', + NOTE_REMOVE_MISSING: "N'a pas de note", NOTE_REMOVE_SUCCESS: 'Note supprimée avec succès', - NOTE_SAVE_BUTTON: 'Enregistrer l\'article', + NOTE_SAVE_BUTTON: "Enregistrer l'article", NOTE_SUCCESS: 'Enregistré avec succès!', NOTE_URL: 'URL', PROFILE_HEADER: 'Profil', @@ -100,18 +128,22 @@ export const strings = { PROFILE_PASSWORD_OLD: 'Ancien mot de passe', PROFILE_PASSWORD_PLACEHOLDER: 'pa$$word!', PROFILE_PASSWORD_REQUIRED_NEW: 'Un nouveau mot de passe est requis', - PROFILE_PASSWORD_REQUIRED_OLD: 'L\'ancien mot de passe est requis', + PROFILE_PASSWORD_REQUIRED_OLD: "L'ancien mot de passe est requis", PROFILE_PASSWORD_SUCCESS: 'Les modifications on été enregistré avec succès!', - PROFILE_PASSWORD_TITLE: name => `Paramètres de profil - Mot de passe - ${name}`, + PROFILE_PASSWORD_TITLE: (name) => + `Paramètres de profil - Mot de passe - ${name}`, PROFILE_SAVE_PFP_DISABLED: 'Les photos de profil sont désactivées.', PROFILE_SAVE_PFP_SUCCESS: 'Photo de profil enregistrée !', PROFILE_SECURITY_CHANGE_PASSWORD: 'Changer le mot de passe', PROFILE_SECURITY: 'Sécurité', - PROFILE_TITLE: name => `Paramètres de profil - ${name}`, + PROFILE_TITLE: (name) => `Paramètres de profil - ${name}`, RESET_PASSWORD_BUTTON: 'Réinitialiser le mot de passe', - RESET_PASSWORD_GREETING_EXPIRED: 'Votre lien de réinitialisation a expiré. Veuillez en demander un nouveau.', - RESET_PASSWORD_GREETING_INVALID: "Ce lien de réinitialisation n'est pas valide, peut-être le lien a-t-il expriré ou certains caractères à la fin ont-ils été enlevés?", - RESET_PASSWORD_GREETING_VALID: name => `Bonjour ${name}! Veuillez définir votre mot de passe ici.`, + RESET_PASSWORD_GREETING_EXPIRED: + 'Votre lien de réinitialisation a expiré. Veuillez en demander un nouveau.', + RESET_PASSWORD_GREETING_INVALID: + "Ce lien de réinitialisation n'est pas valide, peut-être le lien a-t-il expriré ou certains caractères à la fin ont-ils été enlevés?", + RESET_PASSWORD_GREETING_VALID: (name) => + `Bonjour ${name}! Veuillez définir votre mot de passe ici.`, RESET_PASSWORD_HEADER_INVALID: `${_CC.config.siteTitle} | Lien de réinitialisation invalide`, RESET_PASSWORD_HEADER_VALID: `${_CC.config.siteTitle} | Réinitialiser le mot de passe`, RESET_PASSWORD_PASSWORD_PLACEHOLDER: 'pa$$word!', @@ -125,7 +157,8 @@ export const strings = { SETUP_USERNAME_PLACEHOLDER: 'jean', SETUP_USERNAME: "Nom d'utilisateur", SUPPORTED_SITES_HEADER: 'Sites supportés', - SUPPORTED_SITES_TEXT: 'Un site est-il manquant ou cassé? Ouvrir une issue here! :)', + SUPPORTED_SITES_TEXT: + 'Un site est-il manquant ou cassé? Ouvrir une issue here! :)', UPDATE_NOTICE: (current, latest) => ` Christmas Community est obsolète. Il peut y avoir de nouvelles fonctionnalités ou des corrections de bugs. Pensez à mettre à jour! :) @@ -138,10 +171,11 @@ export const strings = { Latest: ${latest} Ce message n'est visible que par les administrateurs`, WISHLIST_ADD: "Ajouter un article à la liste d'envies", - WISHLIST_ADDED_BY_USER: addedBy => `Ajouté par: ${addedBy}`, - WISHLIST_ADDED_BY_GUEST: "Utilisateur Invité", + WISHLIST_ADDED_BY_USER: (addedBy) => `Ajouté par: ${addedBy}`, + WISHLIST_ADDED_BY_GUEST: 'Utilisateur Invité', WISHLIST_ADDED_BY: 'Ajouté par', - WISHLIST_CONFLICT: 'Les éléments ont été ajoutés trop rapidement. Veuillez réessayer.', + WISHLIST_CONFLICT: + 'Les éléments ont été ajoutés trop rapidement. Veuillez réessayer.', WISHLIST_DELETE: 'Supprimer', WISHLIST_EDIT_ITEM: "Modifier l'article", WISHLIST_IMAGE: 'Image', @@ -161,7 +195,7 @@ export const strings = { WISHLIST_PLEDGE_ITEM: "Je l'offre", WISHLIST_PLEDGE_SUCCESS: "L'article a été promis avec succès!", WISHLIST_PLEDGE: "Je l'offre", - WISHLIST_PLEDGED: pledgedBy => `Promis par ${pledgedBy}`, + WISHLIST_PLEDGED: (pledgedBy) => `Promis par ${pledgedBy}`, WISHLIST_PLEDGED_GUEST: 'Promis par un invité', WISHLIST_PRICE: 'Prix', WISHLIST_REFRESH_GUARD: 'Utilisateur invalide', @@ -171,7 +205,7 @@ export const strings = { WISHLIST_REMOVE_MISSING: "Impossible de trouver l'article", WISHLIST_REMOVE_SUCCESS: 'Supprimé avec succès de la liste de souhaits', WISHLIST_SUGGEST: 'Suggérer un cadeau', - WISHLIST_TITLE: name => `${_CC.config.siteTitle} - Liste d'envie - ${name}`, + WISHLIST_TITLE: (name) => `${_CC.config.siteTitle} - Liste d'envie - ${name}`, WISHLIST_UNPLEDGE_GUARD: 'Vous ne vous êtes pas engagé pour cela', // should never happen unless someone makes their own http requests WISHLIST_UNPLEDGE_MISSING: "Impossible de trouver l'article", WISHLIST_UNPLEDGE_SUCCESS: "L'article a été annulé avec succès !", @@ -179,7 +213,7 @@ export const strings = { WISHLIST_URL_LABEL: `URL ou nom de l\`article (Sites supportés)`, WISHLIST_URL_PLACEHOLDER: 'https://www.amazon.com/dp/B00ZV9RDKK', WISHLIST_URL_REQUIRED: "L'URL ou le nom de l'article est requis", - WISHLISTS_COUNTS_SELF: name => `${name}: ???/???`, + WISHLISTS_COUNTS_SELF: (name) => `${name}: ???/???`, WISHLISTS_COUNTS: (name, pledged, total) => `${name}: ${pledged}/${total}`, - WISHLISTS_TITLE: `${_CC.config.siteTitle} - Listes d'envies` + WISHLISTS_TITLE: `${_CC.config.siteTitle} - Listes d'envies`, } as const diff --git a/src/languages/nb-no.ts b/src/languages/nb-no.ts index 83efaef6..580e4d38 100644 --- a/src/languages/nb-no.ts +++ b/src/languages/nb-no.ts @@ -1,12 +1,14 @@ export const momentLocale = 'nb' export const strings = { - _NOT_LOCALIZED: key => `${key} har ikke blitt oversatt til norsk enda.`, + _NOT_LOCALIZED: (key) => `${key} har ikke blitt oversatt til norsk enda.`, ADMIN_CLEAR_WISHLISTS_BUTTON: 'Tøm alle ønskelister', - ADMIN_CLEAR_WISHLISTS_DESCRIPTION: 'Dette vil umiddelbart og irreversibelt slette alle ønskelister! Vurder å ta en sikkerhetskopi av databasen før du bruker dette.', + ADMIN_CLEAR_WISHLISTS_DESCRIPTION: + 'Dette vil umiddelbart og irreversibelt slette alle ønskelister! Vurder å ta en sikkerhetskopi av databasen før du bruker dette.', ADMIN_CLEAR_WISHLISTS_HEADER: 'Sletting av ønskelister', ADMIN_SETTINGS_CLEARDB_BUTTON: 'Tøm ønskelister', - ADMIN_SETTINGS_CLEARDB_DESCRIPTION: 'Advarsel: Disse alternativene ødelegger data! Du bør ta en sikkerhetskopi av databasen før du bruker disse alternativene.', + ADMIN_SETTINGS_CLEARDB_DESCRIPTION: + 'Advarsel: Disse alternativene ødelegger data! Du bør ta en sikkerhetskopi av databasen før du bruker disse alternativene.', ADMIN_SETTINGS_CLEARDB_HEADER: 'Dataødeleggelse', ADMIN_SETTINGS_CLEARDB_SUCCESS: 'Alle ønskelister ble tømt.', ADMIN_SETTINGS_HEADER: 'Administratorinnstillinger', @@ -14,57 +16,74 @@ export const strings = { ADMIN_SETTINGS_USERS_ADD_HEADER: 'Legg til bruker', ADMIN_SETTINGS_USERS_ADD_PLACEHOLDER: 'Ola', ADMIN_SETTINGS_USERS_ADD_USERNAME: 'Brukernavn', - ADMIN_SETTINGS_USERS_ADD_ERROR_USERNAME_EMPTY: 'Brukernavn kan ikke være tomt.', - ADMIN_SETTINGS_USERS_EDIT_DELETE_FAIL_ADMIN: 'Kunne ikke fjerne: bruker er administrator.', - ADMIN_SETTINGS_USERS_EDIT_DELETE_SUCCESS: name => `Brukeren ${name} ble fjernet.`, - ADMIN_SETTINGS_USERS_EDIT_DEMOTE_NOT_ADMIN: 'brukeren er ikke en administrator', + ADMIN_SETTINGS_USERS_ADD_ERROR_USERNAME_EMPTY: + 'Brukernavn kan ikke være tomt.', + ADMIN_SETTINGS_USERS_EDIT_DELETE_FAIL_ADMIN: + 'Kunne ikke fjerne: bruker er administrator.', + ADMIN_SETTINGS_USERS_EDIT_DELETE_SUCCESS: (name) => + `Brukeren ${name} ble fjernet.`, + ADMIN_SETTINGS_USERS_EDIT_DEMOTE_NOT_ADMIN: + 'brukeren er ikke en administrator', ADMIN_SETTINGS_USERS_EDIT_DEMOTE_SELF: 'Du kan ikke nedgradere egen konto.', - ADMIN_SETTINGS_USERS_EDIT_DEMOTE_SUCCESS: name => `${name} er ikke lengre en administrator.`, - ADMIN_SETTINGS_USERS_EDIT_IMPERSONATE_SUCCESS: name => `Du er nå ${name}.`, + ADMIN_SETTINGS_USERS_EDIT_DEMOTE_SUCCESS: (name) => + `${name} er ikke lengre en administrator.`, + ADMIN_SETTINGS_USERS_EDIT_IMPERSONATE_SUCCESS: (name) => `Du er nå ${name}.`, ADMIN_SETTINGS_USERS_EDIT_NO_USERNAME_PROVIDED: 'Ingen brukernavn oppgitt', - ADMIN_SETTINGS_USERS_EDIT_PROMOTE_ALREADY_ADMIN: 'brukeren er allerede administrator', - ADMIN_SETTINGS_USERS_EDIT_PROMOTE_DEMOTE_NOT_FOUND: 'Brukeren ble ikke funnet.', - ADMIN_SETTINGS_USERS_EDIT_PROMOTE_SUCCESS: name => `${name} er nå en administrator.`, + ADMIN_SETTINGS_USERS_EDIT_PROMOTE_ALREADY_ADMIN: + 'brukeren er allerede administrator', + ADMIN_SETTINGS_USERS_EDIT_PROMOTE_DEMOTE_NOT_FOUND: + 'Brukeren ble ikke funnet.', + ADMIN_SETTINGS_USERS_EDIT_PROMOTE_SUCCESS: (name) => + `${name} er nå en administrator.`, ADMIN_SETTINGS_USERS_EDIT_RENAMED_USER: 'Brukeren er omdøpt!', - ADMIN_SETTINGS_USERS_EDIT_SAME_NAME: 'Brukernavnet er det samme som det nye brukernavnet.', + ADMIN_SETTINGS_USERS_EDIT_SAME_NAME: + 'Brukernavnet er det samme som det nye brukernavnet.', ADMIN_SETTINGS_USERS_EDIT: 'Rediger', ADMIN_SETTINGS_USERS_HEADER: 'Brukere', ADMIN_SETTINGS_VERSION_INFO: 'Versjonsinfo', ADMIN_USER_EDIT_ACCOUNT_UNCONFIRMED: 'Denne kontoen er ikke bekreftet.', - ADMIN_USER_EDIT_ADMIN_ISADMIN: name => `${name} er en administrator.`, - ADMIN_USER_EDIT_ADMIN_NOTADMIN: name => `${name} er ikke en administrator.`, + ADMIN_USER_EDIT_ADMIN_ISADMIN: (name) => `${name} er en administrator.`, + ADMIN_USER_EDIT_ADMIN_NOTADMIN: (name) => `${name} er ikke en administrator.`, ADMIN_USER_EDIT_ADMIN: 'Administrator', ADMIN_USER_EDIT_CHANGE_NAME: 'Endre navn', ADMIN_USER_EDIT_CHANGE_USERNAME: 'Endre brukernavn', ADMIN_USER_EDIT_CONFIRMATION_LINK: 'Bekreftelseslenke', ADMIN_USER_EDIT_DELETE_ADMIN: 'Brukeren er administrator', ADMIN_USER_EDIT_DELETE_HEADER: 'Irreversibel sletting', - ADMIN_USER_EDIT_DELETE_USER: name => `Fjern bruker ${name}`, + ADMIN_USER_EDIT_DELETE_USER: (name) => `Fjern bruker ${name}`, ADMIN_USER_EDIT_DEMOTE_SELF: 'Du kan ikke nedgradere deg selv', - ADMIN_USER_EDIT_DEMOTE: name => `Nedgrader ${name}`, - ADMIN_USER_EDIT_EDITING_USER: name => `Redigerer bruker "${name}"`, + ADMIN_USER_EDIT_DEMOTE: (name) => `Nedgrader ${name}`, + ADMIN_USER_EDIT_EDITING_USER: (name) => `Redigerer bruker "${name}"`, ADMIN_USER_EDIT_GENERATE_NEW_LINK: 'Generer ny lenke', - ADMIN_USER_EDIT_IMPERSONATE_BUTTON: name => `Logg inn som ${name}`, + ADMIN_USER_EDIT_IMPERSONATE_BUTTON: (name) => `Logg inn som ${name}`, ADMIN_USER_EDIT_IMPERSONATE_HEADER: 'Logg inn som', - ADMIN_USER_EDIT_LINK_EXPIRY_FUTURE: fromNow => `Følgende lenke utløper ${fromNow}`, // fromNow is localized by moment - ADMIN_USER_EDIT_LINK_EXPIRY_PAST: fromNow => `Følgende lenke utløp ${fromNow}`, - ADMIN_USER_EDIT_PROMOTE: name => `Promoter ${name}`, - ADMIN_USER_EDIT_RESET_PASSWORD_HASLINK_EXPIRY_FUTURE: fromNow => `Den utløper ${fromNow}`, - ADMIN_USER_EDIT_RESET_PASSWORD_HASLINK_EXPIRY_PAST: fromNow => `Den utløp ${fromNow}`, - ADMIN_USER_EDIT_RESET_PASSWORD_HASLINK: 'Det finnes en gjennopprettingslenke for denne brukeren.', + ADMIN_USER_EDIT_LINK_EXPIRY_FUTURE: (fromNow) => + `Følgende lenke utløper ${fromNow}`, // fromNow is localized by moment + ADMIN_USER_EDIT_LINK_EXPIRY_PAST: (fromNow) => + `Følgende lenke utløp ${fromNow}`, + ADMIN_USER_EDIT_PROMOTE: (name) => `Promoter ${name}`, + ADMIN_USER_EDIT_RESET_PASSWORD_HASLINK_EXPIRY_FUTURE: (fromNow) => + `Den utløper ${fromNow}`, + ADMIN_USER_EDIT_RESET_PASSWORD_HASLINK_EXPIRY_PAST: (fromNow) => + `Den utløp ${fromNow}`, + ADMIN_USER_EDIT_RESET_PASSWORD_HASLINK: + 'Det finnes en gjennopprettingslenke for denne brukeren.', ADMIN_USER_EDIT_RESET_PASSWORD_HEADER: 'Nullstill passord', ADMIN_USER_EDIT_RESET_PASSWORD_LINK_CANCEL: 'Slett gjennopprettingslenke', ADMIN_USER_EDIT_RESET_PASSWORD_LINK_CREATE: 'Opprett gjennopprettingslenke', ADMIN_USER_EDIT_RESET_PASSWORD_LINK_REFRESH: 'Oppdater gjennopprettingslenke', ADMIN_USER_EDIT_USERNAME: 'Brukernavn', BACK_BUTTON: 'Tilbake', - CONFIRM_ACCOUNT_EXPIRED: 'Din gjenopprettingslenke er utløpt. Vennligst be om en ny.', + CONFIRM_ACCOUNT_EXPIRED: + 'Din gjenopprettingslenke er utløpt. Vennligst be om en ny.', CONFIRM_ACCOUNT_HEADER_INVALID: `${_CC.config.siteTitle} | Ugyldig bekreftelseslenke`, CONFIRM_ACCOUNT_HEADER_VALID: `${_CC.config.siteTitle} | Bekreft konto`, - CONFIRM_ACCOUNT_INVALID: 'Denne bekreftelseslenken er ugyldig. Kanskje er den slettet, eller det mangler tegn på slutten av den?', + CONFIRM_ACCOUNT_INVALID: + 'Denne bekreftelseslenken er ugyldig. Kanskje er den slettet, eller det mangler tegn på slutten av den?', CONFIRM_ACCOUNT_SET_PW_BUTTON: `Bli medlem av ${_CC.config.siteTitle}`, CONFIRM_ACCOUNT_SET_PW_PLACEHOLDER: 'pa$$ord!', - CONFIRM_ACCOUNT_SET_PW_TEXT: name => `Hei, ${name}! Vennligst sett ditt passord her.`, + CONFIRM_ACCOUNT_SET_PW_TEXT: (name) => + `Hei, ${name}! Vennligst sett ditt passord her.`, CONFIRM_ACCOUNT_SUCCESS: `Velkommen til ${_CC.config.siteTitle}!`, LOGIN_BUTTON: 'Logg inn', LOGIN_PASSWORD_PLACEHOLDER: 'pa$$ord!', @@ -77,11 +96,11 @@ export const strings = { NAVBAR_LOGOUT: 'Logg ut', NAVBAR_PROFILE: 'Profil', NAVBAR_WISHLIST: 'Min ønskeliste', - NOTE_BACK: name => `Tilbake til ${name}s ønskeliste`, + NOTE_BACK: (name) => `Tilbake til ${name}s ønskeliste`, NOTE_GET_PRODUCT_DATA: 'Hent produktdata', NOTE_GUARD: 'Ugyldig bruker', NOTE_IMAGE_URL: 'Bildelenke', - NOTE_MISSING_PROP: prop => `Mangler egenskap ${prop}`, // not really possible to localize this unfortunately + NOTE_MISSING_PROP: (prop) => `Mangler egenskap ${prop}`, // not really possible to localize this unfortunately NOTE_NAME: 'Navn', NOTE_NOTE: 'Notat', NOTE_PRICE: 'Pris', @@ -101,16 +120,19 @@ export const strings = { PROFILE_PASSWORD_REQUIRED_NEW: 'Nytt passord er påkrevd', PROFILE_PASSWORD_REQUIRED_OLD: 'Gammelt passord er påkrevd', PROFILE_PASSWORD_SUCCESS: 'Endringer ble lagret!', - PROFILE_PASSWORD_TITLE: name => `Profilinnstillinger - Passord - ${name}`, + PROFILE_PASSWORD_TITLE: (name) => `Profilinnstillinger - Passord - ${name}`, PROFILE_SAVE_PFP_DISABLED: 'Profilbilder er deaktivert.', PROFILE_SAVE_PFP_SUCCESS: 'Profilbilde ble lagret!', PROFILE_SECURITY_CHANGE_PASSWORD: 'Endre passord', PROFILE_SECURITY: 'Sikkerhet', - PROFILE_TITLE: name => `Profilinnstillinger - ${name}`, + PROFILE_TITLE: (name) => `Profilinnstillinger - ${name}`, RESET_PASSWORD_BUTTON: 'Tilbakestill passord', - RESET_PASSWORD_GREETING_EXPIRED: 'Din gjenopprettingslenke er utløpt. Vennligst be om en ny.', - RESET_PASSWORD_GREETING_INVALID: 'Denne gjenopprettingslenken er ugyldig. Kanskje er den slettet, eller det mangler tegn på slutten av den?', - RESET_PASSWORD_GREETING_VALID: name => `Hei, ${name}! Vennligst sett ditt passord her.`, + RESET_PASSWORD_GREETING_EXPIRED: + 'Din gjenopprettingslenke er utløpt. Vennligst be om en ny.', + RESET_PASSWORD_GREETING_INVALID: + 'Denne gjenopprettingslenken er ugyldig. Kanskje er den slettet, eller det mangler tegn på slutten av den?', + RESET_PASSWORD_GREETING_VALID: (name) => + `Hei, ${name}! Vennligst sett ditt passord her.`, RESET_PASSWORD_HEADER_INVALID: `${_CC.config.siteTitle} | Ugyldig gjenopprettingslenke`, RESET_PASSWORD_HEADER_VALID: `${_CC.config.siteTitle} | Nullstill passord`, RESET_PASSWORD_PASSWORD_PLACEHOLDER: 'pa$$ord!', @@ -124,7 +146,8 @@ export const strings = { SETUP_USERNAME_PLACEHOLDER: 'Ola', SETUP_USERNAME: 'Brukernavn', SUPPORTED_SITES_HEADER: 'Støttede nettsteder', - SUPPORTED_SITES_TEXT: 'Mangler en nettsted, eller har problemer? Skriv en feilrapport her! :)', + SUPPORTED_SITES_TEXT: + 'Mangler en nettsted, eller har problemer? Skriv en feilrapport her! :)', UPDATE_NOTICE: (current, latest) => ` Christmas Community er utdatert. Det kan være nye funksjoner og feilrettinger. Vurder å oppdatere! :) @@ -137,8 +160,8 @@ export const strings = { Siste: ${latest} Denne meldingen er kun synlig for administratorer`, WISHLIST_ADD: 'Legg til element i ønskelisten', - WISHLIST_ADDED_BY_USER: addedBy => `Lagt til av: ${addedBy}`, - WISHLIST_ADDED_BY_GUEST: "Gjestebruker", + WISHLIST_ADDED_BY_USER: (addedBy) => `Lagt til av: ${addedBy}`, + WISHLIST_ADDED_BY_GUEST: 'Gjestebruker', WISHLIST_ADDED_BY: 'Lagt til av', WISHLIST_ADDED_ITEM_TO_OWN_WISHLIST: 'Elementet ble lagt til i ønskelisten.', WISHLIST_CONFLICT: 'Elementer blir lagt til for fort. Vennligst prøv igjen.', @@ -164,9 +187,9 @@ export const strings = { WISHLIST_PLEDGE_ITEM: 'Reserver element', WISHLIST_PLEDGE_SUCCESS: 'Elementet ble reservert!', WISHLIST_PLEDGE: 'Reserver', - WISHLIST_PLEDGED: pledgedBy => `Reservert av ${pledgedBy}`, + WISHLIST_PLEDGED: (pledgedBy) => `Reservert av ${pledgedBy}`, WISHLIST_PLEDGED_GUEST: 'Reservert av gjestebruker', - WISHLIST_PLEDGED_ITEM_FOR_USER: user => `Reserverte elementet for ${user}.`, + WISHLIST_PLEDGED_ITEM_FOR_USER: (user) => `Reserverte elementet for ${user}.`, WISHLIST_PRICE: 'Pris', WISHLIST_REFRESH_GUARD: 'Ugyldig bruker', WISHLIST_REFRESH_NO_URL: 'Elementet har ingen lenke.', @@ -174,14 +197,14 @@ export const strings = { WISHLIST_REMOVE_GUARD: 'Feil bruker', WISHLIST_REMOVE_SUCCESS: 'Fjernet fra ønskeliste', WISHLIST_SUGGEST: 'Foreslå element', - WISHLIST_TITLE: name => `${_CC.config.siteTitle} - Ønskeliste - ${name}`, + WISHLIST_TITLE: (name) => `${_CC.config.siteTitle} - Ønskeliste - ${name}`, WISHLIST_UNPLEDGE_GUARD: 'Du har ikke reservert dette elementet', // should never happen unless someone makes their own http requests WISHLIST_UNPLEDGE_SUCCESS: 'Reservasjonen for elementet ble trukket!', WISHLIST_UNPLEDGE: 'Trekk reservasjon', WISHLIST_URL_LABEL: `Elementlenke eller navn (Støttede nettsteder)`, WISHLIST_URL_PLACEHOLDER: 'https://www.amazon.com/dp/B00ZV9RDKK', WISHLIST_URL_REQUIRED: 'Elementlenke eller navn er påkrevd', - WISHLISTS_COUNTS_SELF: name => `${name}: ???/???`, + WISHLISTS_COUNTS_SELF: (name) => `${name}: ???/???`, WISHLISTS_COUNTS: (name, pledged, total) => `${name}: ${pledged}/${total}`, - WISHLISTS_TITLE: `${_CC.config.siteTitle} - Ønskeliste` + WISHLISTS_TITLE: `${_CC.config.siteTitle} - Ønskeliste`, } as const diff --git a/src/languages/nl-nl.ts b/src/languages/nl-nl.ts index 262331c3..60c4ce09 100644 --- a/src/languages/nl-nl.ts +++ b/src/languages/nl-nl.ts @@ -1,12 +1,14 @@ export const momentLocale = 'nl' export const strings = { - _NOT_LOCALIZED: key => `${key} hasn't been translated to Dutch yet.`, + _NOT_LOCALIZED: (key) => `${key} hasn't been translated to Dutch yet.`, ADMIN_CLEAR_WISHLISTS_BUTTON: 'Leeg all verlanglijstjes', - ADMIN_CLEAR_WISHLISTS_DESCRIPTION: 'Dit leegt direct en permament alle verlanglijstjes! Overweeg om een backup te maken van de database voordat je dit doet', + ADMIN_CLEAR_WISHLISTS_DESCRIPTION: + 'Dit leegt direct en permament alle verlanglijstjes! Overweeg om een backup te maken van de database voordat je dit doet', ADMIN_CLEAR_WISHLISTS_HEADER: 'Verlanglijst verwijderen', ADMIN_SETTINGS_CLEARDB_BUTTON: 'Leeg verlanglijstjes', - ADMIN_SETTINGS_CLEARDB_DESCRIPTION: 'Waarschuwing: Deze opties vernietigen data! Overweeg om een backup te maken van de database voordat je ze gebruikt.', + ADMIN_SETTINGS_CLEARDB_DESCRIPTION: + 'Waarschuwing: Deze opties vernietigen data! Overweeg om een backup te maken van de database voordat je ze gebruikt.', ADMIN_SETTINGS_CLEARDB_HEADER: 'Data vernietiging', ADMIN_SETTINGS_CLEARDB_SUCCESS: 'Alle verlanglijstjes zijn geleegd.', ADMIN_SETTINGS_HEADER: 'Administrator instellingen', @@ -14,57 +16,76 @@ export const strings = { ADMIN_SETTINGS_USERS_ADD_HEADER: 'Voeg gebruiker toe', ADMIN_SETTINGS_USERS_ADD_PLACEHOLDER: 'henk', ADMIN_SETTINGS_USERS_ADD_USERNAME: 'Gebruikersnaam', - ADMIN_SETTINGS_USERS_ADD_ERROR_USERNAME_EMPTY: 'Gebruikersnaam mag niet leeg zijn.', - ADMIN_SETTINGS_USERS_EDIT_DELETE_FAIL_ADMIN: 'Verwijderen mislukt: gebruiker is een administrator.', - ADMIN_SETTINGS_USERS_EDIT_DELETE_SUCCESS: name => `Gebruiker ${name} is verwijderd.`, + ADMIN_SETTINGS_USERS_ADD_ERROR_USERNAME_EMPTY: + 'Gebruikersnaam mag niet leeg zijn.', + ADMIN_SETTINGS_USERS_EDIT_DELETE_FAIL_ADMIN: + 'Verwijderen mislukt: gebruiker is een administrator.', + ADMIN_SETTINGS_USERS_EDIT_DELETE_SUCCESS: (name) => + `Gebruiker ${name} is verwijderd.`, ADMIN_SETTINGS_USERS_EDIT_DEMOTE_NOT_ADMIN: 'gebruiker is geen administrator', ADMIN_SETTINGS_USERS_EDIT_DEMOTE_SELF: 'Je kunt jezelf niet demoveren.', - ADMIN_SETTINGS_USERS_EDIT_DEMOTE_SUCCESS: name => `${name} is geen administrator meer.`, - ADMIN_SETTINGS_USERS_EDIT_IMPERSONATE_SUCCESS: name => `Je heet nu ${name}.`, - ADMIN_SETTINGS_USERS_EDIT_NO_USERNAME_PROVIDED: 'Geen gebruikersnaam opgegeven', - ADMIN_SETTINGS_USERS_EDIT_PROMOTE_ALREADY_ADMIN: 'gebruiker is al een administrator', - ADMIN_SETTINGS_USERS_EDIT_PROMOTE_DEMOTE_NOT_FOUND: 'Gebruiker niet gevonden.', - ADMIN_SETTINGS_USERS_EDIT_PROMOTE_SUCCESS: name => `${name} is nu een administrator.`, + ADMIN_SETTINGS_USERS_EDIT_DEMOTE_SUCCESS: (name) => + `${name} is geen administrator meer.`, + ADMIN_SETTINGS_USERS_EDIT_IMPERSONATE_SUCCESS: (name) => + `Je heet nu ${name}.`, + ADMIN_SETTINGS_USERS_EDIT_NO_USERNAME_PROVIDED: + 'Geen gebruikersnaam opgegeven', + ADMIN_SETTINGS_USERS_EDIT_PROMOTE_ALREADY_ADMIN: + 'gebruiker is al een administrator', + ADMIN_SETTINGS_USERS_EDIT_PROMOTE_DEMOTE_NOT_FOUND: + 'Gebruiker niet gevonden.', + ADMIN_SETTINGS_USERS_EDIT_PROMOTE_SUCCESS: (name) => + `${name} is nu een administrator.`, ADMIN_SETTINGS_USERS_EDIT_RENAMED_USER: 'Gebruiker hernoemd!', - ADMIN_SETTINGS_USERS_EDIT_SAME_NAME: 'Nieuwe gebruikersnaam is hetzelfde als de vorige.', + ADMIN_SETTINGS_USERS_EDIT_SAME_NAME: + 'Nieuwe gebruikersnaam is hetzelfde als de vorige.', ADMIN_SETTINGS_USERS_EDIT: 'Aanpassen', ADMIN_SETTINGS_USERS_HEADER: 'Gebruikers', ADMIN_SETTINGS_VERSION_INFO: 'Versie informatie', ADMIN_USER_EDIT_ACCOUNT_UNCONFIRMED: 'Dit account is nog niet bevestigd.', - ADMIN_USER_EDIT_ADMIN_ISADMIN: name => `${name} is een administrator.`, - ADMIN_USER_EDIT_ADMIN_NOTADMIN: name => `${name} is geen administrator.`, + ADMIN_USER_EDIT_ADMIN_ISADMIN: (name) => `${name} is een administrator.`, + ADMIN_USER_EDIT_ADMIN_NOTADMIN: (name) => `${name} is geen administrator.`, ADMIN_USER_EDIT_ADMIN: 'Administrator', ADMIN_USER_EDIT_CHANGE_NAME: 'Verander naam', ADMIN_USER_EDIT_CHANGE_USERNAME: 'Verander gebruikersnaam', ADMIN_USER_EDIT_CONFIRMATION_LINK: 'Bevestigingslink', ADMIN_USER_EDIT_DELETE_ADMIN: 'Gebruiker is een administrator', ADMIN_USER_EDIT_DELETE_HEADER: 'Onomkeerbare verwijdering', - ADMIN_USER_EDIT_DELETE_USER: name => `Verwijder gebruiker "${name}"`, + ADMIN_USER_EDIT_DELETE_USER: (name) => `Verwijder gebruiker "${name}"`, ADMIN_USER_EDIT_DEMOTE_SELF: 'Je kunt jezelf niet demoveren', - ADMIN_USER_EDIT_DEMOTE: name => `Demoveer ${name}`, - ADMIN_USER_EDIT_EDITING_USER: name => `Gebruiker "${name}" aan het aanpassen`, + ADMIN_USER_EDIT_DEMOTE: (name) => `Demoveer ${name}`, + ADMIN_USER_EDIT_EDITING_USER: (name) => + `Gebruiker "${name}" aan het aanpassen`, ADMIN_USER_EDIT_GENERATE_NEW_LINK: 'Genereer nieuwe link', - ADMIN_USER_EDIT_IMPERSONATE_BUTTON: name => `Log in als ${name}`, + ADMIN_USER_EDIT_IMPERSONATE_BUTTON: (name) => `Log in als ${name}`, ADMIN_USER_EDIT_IMPERSONATE_HEADER: 'Imiteer', - ADMIN_USER_EDIT_LINK_EXPIRY_FUTURE: fromNow => `De onderstaande link vervalt over ${fromNow}`, // fromNow is localized by moment - ADMIN_USER_EDIT_LINK_EXPIRY_PAST: fromNow => `De onderstaande link verviel ${fromNow} geleden`, - ADMIN_USER_EDIT_PROMOTE: name => `Promoveer ${name}`, - ADMIN_USER_EDIT_RESET_PASSWORD_HASLINK_EXPIRY_FUTURE: fromNow => `Het vervalt over ${fromNow}`, - ADMIN_USER_EDIT_RESET_PASSWORD_HASLINK_EXPIRY_PAST: fromNow => `Het verviel ${fromNow} geleden`, - ADMIN_USER_EDIT_RESET_PASSWORD_HASLINK: 'Er is een reset wachtwoord link voor deze gebruiker', + ADMIN_USER_EDIT_LINK_EXPIRY_FUTURE: (fromNow) => + `De onderstaande link vervalt over ${fromNow}`, // fromNow is localized by moment + ADMIN_USER_EDIT_LINK_EXPIRY_PAST: (fromNow) => + `De onderstaande link verviel ${fromNow} geleden`, + ADMIN_USER_EDIT_PROMOTE: (name) => `Promoveer ${name}`, + ADMIN_USER_EDIT_RESET_PASSWORD_HASLINK_EXPIRY_FUTURE: (fromNow) => + `Het vervalt over ${fromNow}`, + ADMIN_USER_EDIT_RESET_PASSWORD_HASLINK_EXPIRY_PAST: (fromNow) => + `Het verviel ${fromNow} geleden`, + ADMIN_USER_EDIT_RESET_PASSWORD_HASLINK: + 'Er is een reset wachtwoord link voor deze gebruiker', ADMIN_USER_EDIT_RESET_PASSWORD_HEADER: 'Reset wachtwoord', ADMIN_USER_EDIT_RESET_PASSWORD_LINK_CANCEL: 'Annuleer wachtwoord reset link', ADMIN_USER_EDIT_RESET_PASSWORD_LINK_CREATE: 'Maak wachtwoord reset link', ADMIN_USER_EDIT_RESET_PASSWORD_LINK_REFRESH: 'Ververs wachtwoord reset link', ADMIN_USER_EDIT_USERNAME: 'Gebruikersnaam', BACK_BUTTON: 'Terug', - CONFIRM_ACCOUNT_EXPIRED: 'Je bevestigingslink is vervallen. Vraag alsjeblieft om een nieuwe.', + CONFIRM_ACCOUNT_EXPIRED: + 'Je bevestigingslink is vervallen. Vraag alsjeblieft om een nieuwe.', CONFIRM_ACCOUNT_HEADER_INVALID: `${_CC.config.siteTitle} | Bevestingslink ongeldig`, CONFIRM_ACCOUNT_HEADER_VALID: `${_CC.config.siteTitle} | Bevestig account`, - CONFIRM_ACCOUNT_INVALID: 'Deze bevestingslink is ongeldig. Misschien is het account verwijderd of zijn er wat karakters aan het einde weggevallen?', + CONFIRM_ACCOUNT_INVALID: + 'Deze bevestingslink is ongeldig. Misschien is het account verwijderd of zijn er wat karakters aan het einde weggevallen?', CONFIRM_ACCOUNT_SET_PW_BUTTON: `Maakaccount ${_CC.config.siteTitle}`, CONFIRM_ACCOUNT_SET_PW_PLACEHOLDER: 'W@chtw00rd!', - CONFIRM_ACCOUNT_SET_PW_TEXT: name => `Hallo ${name}! Reset je wachtwoord hier, alsjeblieft.`, + CONFIRM_ACCOUNT_SET_PW_TEXT: (name) => + `Hallo ${name}! Reset je wachtwoord hier, alsjeblieft.`, CONFIRM_ACCOUNT_SUCCESS: `Welkom op ${_CC.config.siteTitle}!`, LOGIN_BUTTON: 'Log in', LOGIN_PASSWORD_PLACEHOLDER: 'W@chtw00rd!', @@ -77,11 +98,11 @@ export const strings = { NAVBAR_LOGOUT: 'Log uit', NAVBAR_PROFILE: 'Profiel', NAVBAR_WISHLIST: 'Mijn verlanglijstje', - NOTE_BACK: name => `Terug naar ${name}'s verlanglijst`, + NOTE_BACK: (name) => `Terug naar ${name}'s verlanglijst`, NOTE_GET_PRODUCT_DATA: 'Haal product data op', NOTE_GUARD: 'Ongeldige gebruiker', NOTE_IMAGE_URL: 'Foto URL', - NOTE_MISSING_PROP: prop => `Missing property ${prop}`, // not really possible to localize this unfortunately + NOTE_MISSING_PROP: (prop) => `Missing property ${prop}`, // not really possible to localize this unfortunately NOTE_NAME: 'Naam', NOTE_NOTE: 'Opmerking', NOTE_PRICE: 'Prijs', @@ -101,16 +122,20 @@ export const strings = { PROFILE_PASSWORD_REQUIRED_NEW: 'Nieuw wachtwoord is verplicht', PROFILE_PASSWORD_REQUIRED_OLD: 'Oud wachtwoord is verplicht', PROFILE_PASSWORD_SUCCESS: 'Aanpassingen opgeslagen!', - PROFILE_PASSWORD_TITLE: name => `Profielinstellingen - Wachtwoord - ${name}`, - PROFILE_SAVE_PFP_DISABLED: 'Profielfoto\'s zijn uitgeschakeld.', + PROFILE_PASSWORD_TITLE: (name) => + `Profielinstellingen - Wachtwoord - ${name}`, + PROFILE_SAVE_PFP_DISABLED: "Profielfoto's zijn uitgeschakeld.", PROFILE_SAVE_PFP_SUCCESS: 'Profielfoto opgeslagen!', PROFILE_SECURITY_CHANGE_PASSWORD: 'Verander wachtwoord', PROFILE_SECURITY: 'Beveiliging', - PROFILE_TITLE: name => `Profielinstellingen - ${name}`, + PROFILE_TITLE: (name) => `Profielinstellingen - ${name}`, RESET_PASSWORD_BUTTON: 'Reset wachtwoord', - RESET_PASSWORD_GREETING_EXPIRED: 'Je reset link is vervallen. Vraag alsjeblieft om een nieuwe.', - RESET_PASSWORD_GREETING_INVALID: 'Deze reset link is ongeldig. Misschien is het account verwijderd of zijn er wat karakters aan het einde weggevallen?', - RESET_PASSWORD_GREETING_VALID: name => `Hallo ${name}! Stel hier je wachtwoord in, alsjeblieft.`, + RESET_PASSWORD_GREETING_EXPIRED: + 'Je reset link is vervallen. Vraag alsjeblieft om een nieuwe.', + RESET_PASSWORD_GREETING_INVALID: + 'Deze reset link is ongeldig. Misschien is het account verwijderd of zijn er wat karakters aan het einde weggevallen?', + RESET_PASSWORD_GREETING_VALID: (name) => + `Hallo ${name}! Stel hier je wachtwoord in, alsjeblieft.`, RESET_PASSWORD_HEADER_INVALID: `${_CC.config.siteTitle} | Reset link ongeldig`, RESET_PASSWORD_HEADER_VALID: `${_CC.config.siteTitle} | Reset wachtwoord`, RESET_PASSWORD_PASSWORD_PLACEHOLDER: 'W@chtw00rd!', @@ -124,7 +149,8 @@ export const strings = { SETUP_USERNAME_PLACEHOLDER: 'henk', SETUP_USERNAME: 'Gebruikersnaam', SUPPORTED_SITES_HEADER: 'Ondersteunde sites', - SUPPORTED_SITES_TEXT: 'Ontbreekt er een website of is er een kapot? Open een issue hier! :)', + SUPPORTED_SITES_TEXT: + 'Ontbreekt er een website of is er een kapot? Open een issue hier! :)', UPDATE_NOTICE: (current, latest) => ` Christmas Community is niet meer up to date. Misschien zijn er nieuwe functies of bugfixes. Overweeg om te updaten :) @@ -137,11 +163,12 @@ export const strings = { Nieuwste: ${latest} Dit bericht is alleen zichtbaar voor administrators`, WISHLIST_ADD: 'Voeg item toe aan verlanglijst', - WISHLIST_ADDED_BY_USER: addedBy => `Toegevoegd door: ${addedBy}`, - WISHLIST_ADDED_BY_GUEST: "Gastgebruiker", + WISHLIST_ADDED_BY_USER: (addedBy) => `Toegevoegd door: ${addedBy}`, + WISHLIST_ADDED_BY_GUEST: 'Gastgebruiker', WISHLIST_ADDED_BY: 'Toegevoegd door', WISHLIST_ADDED_ITEM_TO_OWN_WISHLIST: 'Item toegevoegd aan verlanglijst.', - WISHLIST_CONFLICT: 'Items worden te snel toegevoegd. Probeer het nog een keer.', + WISHLIST_CONFLICT: + 'Items worden te snel toegevoegd. Probeer het nog een keer.', WISHLIST_DELETE: 'Verwijder', WISHLIST_EDIT_ITEM: 'Pas item aan', WISHLIST_FETCH_FAIL: 'Verlanglijst niet gevonden -- bestaat de gebruiker?', @@ -164,9 +191,9 @@ export const strings = { WISHLIST_PLEDGE_ITEM: 'Beloof item', WISHLIST_PLEDGE_SUCCESS: 'Item is door je beloofd!', WISHLIST_PLEDGE: 'Beloof', - WISHLIST_PLEDGED: pledgedBy => `Beloofd door ${pledgedBy}`, + WISHLIST_PLEDGED: (pledgedBy) => `Beloofd door ${pledgedBy}`, WISHLIST_PLEDGED_GUEST: 'Beloofd door een gast', - WISHLIST_PLEDGED_ITEM_FOR_USER: user => `Item beloofd voor ${user}.`, + WISHLIST_PLEDGED_ITEM_FOR_USER: (user) => `Item beloofd voor ${user}.`, WISHLIST_PRICE: 'Prijs', WISHLIST_REFRESH_GUARD: 'Ongeldige gebruiker', WISHLIST_REFRESH_NO_URL: 'Item heeft geen URL.', @@ -174,14 +201,15 @@ export const strings = { WISHLIST_REMOVE_GUARD: 'Verkeerde gebruiker', WISHLIST_REMOVE_SUCCESS: 'Verwijderd van verlanglijst', WISHLIST_SUGGEST: 'Stel item voor', - WISHLIST_TITLE: name => `${_CC.config.siteTitle} - Verlanglijst - ${name}`, + WISHLIST_TITLE: (name) => `${_CC.config.siteTitle} - Verlanglijst - ${name}`, WISHLIST_UNPLEDGE_GUARD: 'Dit heb jij niet beloofd', // should never happen unless someone makes their own http requests WISHLIST_UNPLEDGE_SUCCESS: 'Belofte voor item verwijderd!', WISHLIST_UNPLEDGE: 'Verwijder belofte', WISHLIST_URL_LABEL: `Item URL of naam (Ondersteunde websites)`, - WISHLIST_URL_PLACEHOLDER: 'https://www.bol.com/nl/nl/p/mens-erger-je-niet-dobbelautomaat-bordspel/1004004000017412/', + WISHLIST_URL_PLACEHOLDER: + 'https://www.bol.com/nl/nl/p/mens-erger-je-niet-dobbelautomaat-bordspel/1004004000017412/', WISHLIST_URL_REQUIRED: 'Item URL of naam is verplicht', - WISHLISTS_COUNTS_SELF: name => `${name}: ???/???`, + WISHLISTS_COUNTS_SELF: (name) => `${name}: ???/???`, WISHLISTS_COUNTS: (name, pledged, total) => `${name}: ${pledged}/${total}`, - WISHLISTS_TITLE: `${_CC.config.siteTitle} - Verlanglijstjes` + WISHLISTS_TITLE: `${_CC.config.siteTitle} - Verlanglijstjes`, } as const diff --git a/src/languages/pl-pl.ts b/src/languages/pl-pl.ts index 1e6cfcbe..e6d3b83f 100644 --- a/src/languages/pl-pl.ts +++ b/src/languages/pl-pl.ts @@ -1,153 +1,178 @@ export const momentLocale = 'pl' as const -export const notTranslated = englishString => `${englishString} (jeszcze nie przetłumaczone na język Polski)` +export const notTranslated = (englishString) => + `${englishString} (jeszcze nie przetłumaczone na język Polski)` export const strings = { - ADMIN_CLEAR_WISHLISTS_BUTTON: 'Usuń wszystkie listy życzeń', - ADMIN_CLEAR_WISHLISTS_DESCRIPTION: 'To natychmiast i nieodwracalnie usunie wszystkie listy życzeń! Rozważ wykonanie kopii zapasowej bazy danych przed użyciem tej funkcji.', - ADMIN_CLEAR_WISHLISTS_HEADER: 'Usuwanie List Życzeń', - ADMIN_SETTINGS_CLEARDB_BUTTON: 'Usuń Listy Życzeń', - ADMIN_SETTINGS_CLEARDB_DESCRIPTION: 'Uwaga: Te opcje niszczą dane! Wykonaj kopię zapasową bazy danych przed użyciem tych opcji.', - ADMIN_SETTINGS_CLEARDB_HEADER: 'Niszczenie Danych!', - ADMIN_SETTINGS_CLEARDB_SUCCESS: 'Usunięte wszystkie listy życzeń!', - ADMIN_SETTINGS_HEADER: 'Ustawnienia administratora', - ADMIN_SETTINGS_USERS_ADD_BUTTON: 'Dodaj', - ADMIN_SETTINGS_USERS_ADD_HEADER: 'Dodaj użytkownika', - ADMIN_SETTINGS_USERS_ADD_PLACEHOLDER: 'Jan', - ADMIN_SETTINGS_USERS_ADD_USERNAME: 'Nazwa użytkownika', - ADMIN_SETTINGS_USERS_ADD_ERROR_USERNAME_EMPTY: 'Nazwa użytkownika nie może być pusta!', - ADMIN_SETTINGS_USERS_EDIT_DELETE_FAIL_ADMIN: 'Nie udało się usunąć: użytkownik jest administratorem', - ADMIN_SETTINGS_USERS_EDIT_DELETE_SUCCESS: name => `Pomyślnie usunięto użytkownika: ${name}`, - ADMIN_SETTINGS_USERS_EDIT_DEMOTE_NOT_ADMIN: 'Użytkownik nie jest administratorem', - ADMIN_SETTINGS_USERS_EDIT_DEMOTE_SELF: 'Nie możesz siebie zdegradować', - ADMIN_SETTINGS_USERS_EDIT_DEMOTE_SUCCESS: name => `${name} nie jest dłużej administratorem`, - ADMIN_SETTINGS_USERS_EDIT_IMPERSONATE_SUCCESS: name => `Jesteś teraz ${name}.`, - ADMIN_SETTINGS_USERS_EDIT_NO_USERNAME_PROVIDED: 'Nazwa użytkownika nie może być pusta', - ADMIN_SETTINGS_USERS_EDIT_PROMOTE_ALREADY_ADMIN: 'Użytkownik już jest administratorem', - ADMIN_SETTINGS_USERS_EDIT_PROMOTE_DEMOTE_NOT_FOUND: 'Użytkownik nie został znaleziony', - ADMIN_SETTINGS_USERS_EDIT_PROMOTE_SUCCESS: name => `${name} jest teraz administratorem`, - ADMIN_SETTINGS_USERS_EDIT_RENAMED_USER: 'Zmieniono nazwę użytkownika!', - ADMIN_SETTINGS_USERS_EDIT_SAME_NAME: 'Taka nazwa użytkownika już istnieje.', - ADMIN_SETTINGS_USERS_EDIT: 'Edycja', - ADMIN_SETTINGS_USERS_HEADER: 'Użytkownicy', - ADMIN_SETTINGS_VERSION_INFO: 'Informacje o wersji', - ADMIN_USER_EDIT_ACCOUNT_UNCONFIRMED: "To konto nie zostało potwierdzone", - ADMIN_USER_EDIT_ADMIN_ISADMIN: name => `${name} jest administratorem`, - ADMIN_USER_EDIT_ADMIN_NOTADMIN: name => `${name} nie jest administratorem.`, - ADMIN_USER_EDIT_ADMIN: 'Administrator', - ADMIN_USER_EDIT_CHANGE_NAME: 'Zmień Imię', - ADMIN_USER_EDIT_CHANGE_USERNAME: 'Zmień nazwę użytkownika', - ADMIN_USER_EDIT_CONFIRMATION_LINK: 'Link potwierdzający', - ADMIN_USER_EDIT_DELETE_ADMIN: 'Użytkownik jest administratorem', - ADMIN_USER_EDIT_DELETE_HEADER: 'Nieodwracalne usunięcie', - ADMIN_USER_EDIT_DELETE_USER: name => `Usuń użytkownika ${name}`, - ADMIN_USER_EDIT_DEMOTE_SELF: 'Nie możesz zdegradować samego siebie', - ADMIN_USER_EDIT_DEMOTE: name => `Zdegraduj ${name}`, - ADMIN_USER_EDIT_EDITING_USER: name => `Edycja użytkownika "${name}"`, ADMIN_USER_EDIT_GENERATE_NEW_LINK: 'Wygeneruj nowy link', - ADMIN_USER_EDIT_IMPERSONATE_BUTTON: name => `Zaloguj jako ${name}`, - ADMIN_USER_EDIT_IMPERSONATE_HEADER: 'Uosobienie', - ADMIN_USER_EDIT_LINK_EXPIRY_FUTURE: fromNow => `Ten link wygaśnie ${fromNow}`, // fromNow is localized by moment - ADMIN_USER_EDIT_LINK_EXPIRY_PAST: fromNow => `Ten link wygasł ${fromNow}`, - ADMIN_USER_EDIT_PROMOTE: name => `Awansuj ${name}`, - ADMIN_USER_EDIT_RESET_PASSWORD_HASLINK_EXPIRY_FUTURE: fromNow => `Wygasa ${fromNow}`, - ADMIN_USER_EDIT_RESET_PASSWORD_HASLINK_EXPIRY_PAST: fromNow => `Wygasł ${fromNow}`, - ADMIN_USER_EDIT_RESET_PASSWORD_HASLINK: 'Link do resetu hasła już istnieje.', - ADMIN_USER_EDIT_RESET_PASSWORD_HEADER: 'Resetuj Hasło', - ADMIN_USER_EDIT_RESET_PASSWORD_LINK_CANCEL: 'Anuluj link do resetu hasła', - ADMIN_USER_EDIT_RESET_PASSWORD_LINK_CREATE: 'Stwórz link do resetu hasła', - ADMIN_USER_EDIT_RESET_PASSWORD_LINK_REFRESH: 'Odśwież link do resetu hasła', - ADMIN_USER_EDIT_USERNAME: 'Nazwa użytkownika', - BACK_BUTTON: 'Wstecz', - CONFIRM_ACCOUNT_EXPIRED: 'Twój link potwierdzający wygasł. Poproś o nowy link.', - CONFIRM_ACCOUNT_HEADER_INVALID: `${_CC.config.siteTitle} | Nieprawidłowy link potwierdzający`, - CONFIRM_ACCOUNT_HEADER_VALID: `${_CC.config.siteTitle} | Potwierdz konto`, - CONFIRM_ACCOUNT_INVALID: "Ten link potwierdzający jest nie prawidłowy, możlwe że konto zostało usunięte lub cześć znaków w pasku adresu zostały obcięte", - CONFIRM_ACCOUNT_SET_PW_BUTTON: `Dołącz do ${_CC.config.siteTitle}`, - CONFIRM_ACCOUNT_SET_PW_PLACEHOLDER: 'pa$$word!', - CONFIRM_ACCOUNT_SET_PW_TEXT: name => `Witaj ${name}! Proszę ustaw swoje hasło.`, - CONFIRM_ACCOUNT_SUCCESS: `Witaj na ${_CC.config.siteTitle}!`, - LOGIN_BUTTON: 'Zaloguj się', - LOGIN_GOOGLE_BUTTON: 'Zaloguj się z Google', - LOGIN_PASSWORD_PLACEHOLDER: 'pa$$word!', - LOGIN_PASSWORD: 'Hasło', - LOGIN_USERNAME_PLACEHOLDER: 'Jan', - LOGIN_USERNAME: 'Nazwa użytkownika', - LOGIN_INCORRECT_USERNAME: 'Nieprawidłowa nazwa użytkownika', - LOGIN_INCORRECT_PASSWORD: 'Błędne hasło', - LOGIN_SSO_UNKNOWN_USER: 'Nieznana nazwa użytkownika', - LOGIN_SSO_LINK_SUCCESS: 'Pomyślnie połączono kkonto', - LOGIN_SSO_LINK_FAILURE: 'Nie udało się połączycz konta', - LOGIN_SSO_UNLINK_SUCCESS: 'Pomyslnie rozłączono konto', - LOGIN_SSO_UNLINK_FAILURE: 'Nie udało się rozłączyć konta', - LOGIN_SSO_LINK_FAILURE_ACCOUNT_EXISTS: 'Zewnętrzne konto już jest połączone z innym kontem na tej stronie!', - LOGOUT_BUTTON: 'Wyloguj', - NAVBAR_ADMIN: 'Ustawienia administratora', - NAVBAR_LOGIN: 'Zaloguj', - NAVBAR_LOGOUT: 'Wyloguj', - NAVBAR_PROFILE: 'Profil', - NAVBAR_WISHLIST: 'Moja Lista Życzeń', - NOTE_BACK: name => `Powrót do listy życzeń: ${name}`, - NOTE_GET_PRODUCT_DATA: 'Dane produktu', - NOTE_GUARD: 'Nieprawidłowy użytkownik', - NOTE_IMAGE_URL: 'URL zdjęcia', - NOTE_MISSING_PROP: prop => `Brakująca właściwość ${prop}`, // not really possible to localize this unfortunately - NOTE_NAME: 'Nazwa', - NOTE_NOTE: 'Notatka', - NOTE_PRICE: 'Cena', - NOTE_REFRESH_DATA: 'Odśwież dane', - NOTE_REMOVE_GUARD: 'Niepoprawny użytkownik', - NOTE_REMOVE_MISSING: 'Brak notatki', - NOTE_REMOVE_SUCCESS: 'Pomyślnie usunięto notatko', - NOTE_SAVE_BUTTON: 'Zapisz przedmiot', - NOTE_SUCCESS: 'Pomyślnie zapisano', - NOTE_URL: 'URL', - PROFILE_COAT_SIZE: 'Rozmiar garnituru/płaszcza', - PROFILE_DRESS_SIZE: 'Rozmiar sukienki', - PROFILE_HAT_SIZE: 'Rozmiar czapki', - PROFILE_HEADER: 'Profil', - PROFILE_PANTS_SIZE: 'Rozmiar spodni', - PROFILE_PASSWORD_BUTTON: 'Zapisz', - PROFILE_PASSWORD_NEW: 'Nowe hasło', - PROFILE_PASSWORD_OLD_MISMATCH: 'Incorrect old password', - PROFILE_PASSWORD_OLD: 'Stare hasło', - PROFILE_PASSWORD_PLACEHOLDER: 'pa$$word!', - PROFILE_PASSWORD_REQUIRED_NEW: 'New Password is required', - PROFILE_PASSWORD_REQUIRED_OLD: 'Old Password is required', - PROFILE_PASSWORD_SUCCESS: 'Changed saved successfully!', - PROFILE_PASSWORD_TITLE: name => `Ustawienia profilu - Hasło - ${name}`, - PROFILE_PHONE_MODEL: 'Model telefonu', - PROFILE_RING_SIZE: 'Rozmiar Pierścionka', - PROFILE_SAVE_PFP_DISABLED: 'Zdjęcia profilowe są wyłączone', - PROFILE_SAVE_PFP_SUCCESS: 'Saved profile picture!', - PROFILE_SECURITY_CHANGE_PASSWORD: 'Zmień hasło', - PROFILE_SECURITY: 'Bezpieczeństwo', - PROFILE_SECURITY_LINK_GOOGLE: 'Link Google Account', - PROFILE_SECURITY_UNLINK_GOOGLE: 'Unlink Google Account', - PROFILE_SHARED_INFORMATION: 'Udostępnione Informacje', - PROFILE_SHIRT_SIZE: 'Rozmiar T-Shirt', - PROFILE_SHOE_SIZE: 'Rozmiar Buta', - PROFILE_SWEATER_SIZE: 'Rozmiar Bluzy/Swetra', - PROFILE_TITLE: name => `Ustawienia użytkownika - ${name}`, - PROFILE_UPDATE_INFO_SUCCESS: 'Zaktualizowano udostępnione informacje', - RESET_PASSWORD_BUTTON: 'Zresetuj hasło', - RESET_PASSWORD_GREETING_EXPIRED: 'Your reset link has expired. Please ask for a new one.', - RESET_PASSWORD_GREETING_INVALID: "This reset link isn't valid, perhaps the link was canceled or some characters at the end got cut off?", - RESET_PASSWORD_GREETING_VALID: name => `Hello ${name}! Please set your password here.`, - RESET_PASSWORD_HEADER_INVALID: `${_CC.config.siteTitle} | Link do resetu hasła nieprawidłowy`, - RESET_PASSWORD_HEADER_VALID: `${_CC.config.siteTitle} | Resetuj Hasło`, - RESET_PASSWORD_PASSWORD_PLACEHOLDER: 'pa$$word!', - RESET_PASSWORD_PASSWORD: 'Hasło', - RESET_PASSWORD_SUCCESS: 'Hasło zresetowano pomyślne!', - SETUP_ADMIN_USER: 'Administrator', - SETUP_BUTTON: 'Set up!', - SETUP_HEADER: 'Instalacja', - SETUP_PASSWORD_PLACEHOLDER: 'pa$$word!', - SETUP_PASSWORD: 'Hasło', - SETUP_USERNAME_PLACEHOLDER: 'Jan', - SETUP_USERNAME: 'Nazwa użytkownika', - SUPPORTED_SITES_HEADER: 'Wspierane Strony', - SUPPORTED_SITES_TEXT: 'Czy ta strona istnieje lub jest popsuta? Otwórz zgłoszenietutaj! :)', - UPDATE_NOTICE: (current, latest) => ` + ADMIN_CLEAR_WISHLISTS_BUTTON: 'Usuń wszystkie listy życzeń', + ADMIN_CLEAR_WISHLISTS_DESCRIPTION: + 'To natychmiast i nieodwracalnie usunie wszystkie listy życzeń! Rozważ wykonanie kopii zapasowej bazy danych przed użyciem tej funkcji.', + ADMIN_CLEAR_WISHLISTS_HEADER: 'Usuwanie List Życzeń', + ADMIN_SETTINGS_CLEARDB_BUTTON: 'Usuń Listy Życzeń', + ADMIN_SETTINGS_CLEARDB_DESCRIPTION: + 'Uwaga: Te opcje niszczą dane! Wykonaj kopię zapasową bazy danych przed użyciem tych opcji.', + ADMIN_SETTINGS_CLEARDB_HEADER: 'Niszczenie Danych!', + ADMIN_SETTINGS_CLEARDB_SUCCESS: 'Usunięte wszystkie listy życzeń!', + ADMIN_SETTINGS_HEADER: 'Ustawnienia administratora', + ADMIN_SETTINGS_USERS_ADD_BUTTON: 'Dodaj', + ADMIN_SETTINGS_USERS_ADD_HEADER: 'Dodaj użytkownika', + ADMIN_SETTINGS_USERS_ADD_PLACEHOLDER: 'Jan', + ADMIN_SETTINGS_USERS_ADD_USERNAME: 'Nazwa użytkownika', + ADMIN_SETTINGS_USERS_ADD_ERROR_USERNAME_EMPTY: + 'Nazwa użytkownika nie może być pusta!', + ADMIN_SETTINGS_USERS_EDIT_DELETE_FAIL_ADMIN: + 'Nie udało się usunąć: użytkownik jest administratorem', + ADMIN_SETTINGS_USERS_EDIT_DELETE_SUCCESS: (name) => + `Pomyślnie usunięto użytkownika: ${name}`, + ADMIN_SETTINGS_USERS_EDIT_DEMOTE_NOT_ADMIN: + 'Użytkownik nie jest administratorem', + ADMIN_SETTINGS_USERS_EDIT_DEMOTE_SELF: 'Nie możesz siebie zdegradować', + ADMIN_SETTINGS_USERS_EDIT_DEMOTE_SUCCESS: (name) => + `${name} nie jest dłużej administratorem`, + ADMIN_SETTINGS_USERS_EDIT_IMPERSONATE_SUCCESS: (name) => + `Jesteś teraz ${name}.`, + ADMIN_SETTINGS_USERS_EDIT_NO_USERNAME_PROVIDED: + 'Nazwa użytkownika nie może być pusta', + ADMIN_SETTINGS_USERS_EDIT_PROMOTE_ALREADY_ADMIN: + 'Użytkownik już jest administratorem', + ADMIN_SETTINGS_USERS_EDIT_PROMOTE_DEMOTE_NOT_FOUND: + 'Użytkownik nie został znaleziony', + ADMIN_SETTINGS_USERS_EDIT_PROMOTE_SUCCESS: (name) => + `${name} jest teraz administratorem`, + ADMIN_SETTINGS_USERS_EDIT_RENAMED_USER: 'Zmieniono nazwę użytkownika!', + ADMIN_SETTINGS_USERS_EDIT_SAME_NAME: 'Taka nazwa użytkownika już istnieje.', + ADMIN_SETTINGS_USERS_EDIT: 'Edycja', + ADMIN_SETTINGS_USERS_HEADER: 'Użytkownicy', + ADMIN_SETTINGS_VERSION_INFO: 'Informacje o wersji', + ADMIN_USER_EDIT_ACCOUNT_UNCONFIRMED: 'To konto nie zostało potwierdzone', + ADMIN_USER_EDIT_ADMIN_ISADMIN: (name) => `${name} jest administratorem`, + ADMIN_USER_EDIT_ADMIN_NOTADMIN: (name) => `${name} nie jest administratorem.`, + ADMIN_USER_EDIT_ADMIN: 'Administrator', + ADMIN_USER_EDIT_CHANGE_NAME: 'Zmień Imię', + ADMIN_USER_EDIT_CHANGE_USERNAME: 'Zmień nazwę użytkownika', + ADMIN_USER_EDIT_CONFIRMATION_LINK: 'Link potwierdzający', + ADMIN_USER_EDIT_DELETE_ADMIN: 'Użytkownik jest administratorem', + ADMIN_USER_EDIT_DELETE_HEADER: 'Nieodwracalne usunięcie', + ADMIN_USER_EDIT_DELETE_USER: (name) => `Usuń użytkownika ${name}`, + ADMIN_USER_EDIT_DEMOTE_SELF: 'Nie możesz zdegradować samego siebie', + ADMIN_USER_EDIT_DEMOTE: (name) => `Zdegraduj ${name}`, + ADMIN_USER_EDIT_EDITING_USER: (name) => `Edycja użytkownika "${name}"`, + ADMIN_USER_EDIT_GENERATE_NEW_LINK: 'Wygeneruj nowy link', + ADMIN_USER_EDIT_IMPERSONATE_BUTTON: (name) => `Zaloguj jako ${name}`, + ADMIN_USER_EDIT_IMPERSONATE_HEADER: 'Uosobienie', + ADMIN_USER_EDIT_LINK_EXPIRY_FUTURE: (fromNow) => + `Ten link wygaśnie ${fromNow}`, // fromNow is localized by moment + ADMIN_USER_EDIT_LINK_EXPIRY_PAST: (fromNow) => `Ten link wygasł ${fromNow}`, + ADMIN_USER_EDIT_PROMOTE: (name) => `Awansuj ${name}`, + ADMIN_USER_EDIT_RESET_PASSWORD_HASLINK_EXPIRY_FUTURE: (fromNow) => + `Wygasa ${fromNow}`, + ADMIN_USER_EDIT_RESET_PASSWORD_HASLINK_EXPIRY_PAST: (fromNow) => + `Wygasł ${fromNow}`, + ADMIN_USER_EDIT_RESET_PASSWORD_HASLINK: 'Link do resetu hasła już istnieje.', + ADMIN_USER_EDIT_RESET_PASSWORD_HEADER: 'Resetuj Hasło', + ADMIN_USER_EDIT_RESET_PASSWORD_LINK_CANCEL: 'Anuluj link do resetu hasła', + ADMIN_USER_EDIT_RESET_PASSWORD_LINK_CREATE: 'Stwórz link do resetu hasła', + ADMIN_USER_EDIT_RESET_PASSWORD_LINK_REFRESH: 'Odśwież link do resetu hasła', + ADMIN_USER_EDIT_USERNAME: 'Nazwa użytkownika', + BACK_BUTTON: 'Wstecz', + CONFIRM_ACCOUNT_EXPIRED: + 'Twój link potwierdzający wygasł. Poproś o nowy link.', + CONFIRM_ACCOUNT_HEADER_INVALID: `${_CC.config.siteTitle} | Nieprawidłowy link potwierdzający`, + CONFIRM_ACCOUNT_HEADER_VALID: `${_CC.config.siteTitle} | Potwierdz konto`, + CONFIRM_ACCOUNT_INVALID: + 'Ten link potwierdzający jest nie prawidłowy, możlwe że konto zostało usunięte lub cześć znaków w pasku adresu zostały obcięte', + CONFIRM_ACCOUNT_SET_PW_BUTTON: `Dołącz do ${_CC.config.siteTitle}`, + CONFIRM_ACCOUNT_SET_PW_PLACEHOLDER: 'pa$$word!', + CONFIRM_ACCOUNT_SET_PW_TEXT: (name) => + `Witaj ${name}! Proszę ustaw swoje hasło.`, + CONFIRM_ACCOUNT_SUCCESS: `Witaj na ${_CC.config.siteTitle}!`, + LOGIN_BUTTON: 'Zaloguj się', + LOGIN_GOOGLE_BUTTON: 'Zaloguj się z Google', + LOGIN_PASSWORD_PLACEHOLDER: 'pa$$word!', + LOGIN_PASSWORD: 'Hasło', + LOGIN_USERNAME_PLACEHOLDER: 'Jan', + LOGIN_USERNAME: 'Nazwa użytkownika', + LOGIN_INCORRECT_USERNAME: 'Nieprawidłowa nazwa użytkownika', + LOGIN_INCORRECT_PASSWORD: 'Błędne hasło', + LOGIN_SSO_UNKNOWN_USER: 'Nieznana nazwa użytkownika', + LOGIN_SSO_LINK_SUCCESS: 'Pomyślnie połączono kkonto', + LOGIN_SSO_LINK_FAILURE: 'Nie udało się połączycz konta', + LOGIN_SSO_UNLINK_SUCCESS: 'Pomyslnie rozłączono konto', + LOGIN_SSO_UNLINK_FAILURE: 'Nie udało się rozłączyć konta', + LOGIN_SSO_LINK_FAILURE_ACCOUNT_EXISTS: + 'Zewnętrzne konto już jest połączone z innym kontem na tej stronie!', + LOGOUT_BUTTON: 'Wyloguj', + NAVBAR_ADMIN: 'Ustawienia administratora', + NAVBAR_LOGIN: 'Zaloguj', + NAVBAR_LOGOUT: 'Wyloguj', + NAVBAR_PROFILE: 'Profil', + NAVBAR_WISHLIST: 'Moja Lista Życzeń', + NOTE_BACK: (name) => `Powrót do listy życzeń: ${name}`, + NOTE_GET_PRODUCT_DATA: 'Dane produktu', + NOTE_GUARD: 'Nieprawidłowy użytkownik', + NOTE_IMAGE_URL: 'URL zdjęcia', + NOTE_MISSING_PROP: (prop) => `Brakująca właściwość ${prop}`, // not really possible to localize this unfortunately + NOTE_NAME: 'Nazwa', + NOTE_NOTE: 'Notatka', + NOTE_PRICE: 'Cena', + NOTE_REFRESH_DATA: 'Odśwież dane', + NOTE_REMOVE_GUARD: 'Niepoprawny użytkownik', + NOTE_REMOVE_MISSING: 'Brak notatki', + NOTE_REMOVE_SUCCESS: 'Pomyślnie usunięto notatko', + NOTE_SAVE_BUTTON: 'Zapisz przedmiot', + NOTE_SUCCESS: 'Pomyślnie zapisano', + NOTE_URL: 'URL', + PROFILE_COAT_SIZE: 'Rozmiar garnituru/płaszcza', + PROFILE_DRESS_SIZE: 'Rozmiar sukienki', + PROFILE_HAT_SIZE: 'Rozmiar czapki', + PROFILE_HEADER: 'Profil', + PROFILE_PANTS_SIZE: 'Rozmiar spodni', + PROFILE_PASSWORD_BUTTON: 'Zapisz', + PROFILE_PASSWORD_NEW: 'Nowe hasło', + PROFILE_PASSWORD_OLD_MISMATCH: 'Incorrect old password', + PROFILE_PASSWORD_OLD: 'Stare hasło', + PROFILE_PASSWORD_PLACEHOLDER: 'pa$$word!', + PROFILE_PASSWORD_REQUIRED_NEW: 'New Password is required', + PROFILE_PASSWORD_REQUIRED_OLD: 'Old Password is required', + PROFILE_PASSWORD_SUCCESS: 'Changed saved successfully!', + PROFILE_PASSWORD_TITLE: (name) => `Ustawienia profilu - Hasło - ${name}`, + PROFILE_PHONE_MODEL: 'Model telefonu', + PROFILE_RING_SIZE: 'Rozmiar Pierścionka', + PROFILE_SAVE_PFP_DISABLED: 'Zdjęcia profilowe są wyłączone', + PROFILE_SAVE_PFP_SUCCESS: 'Saved profile picture!', + PROFILE_SECURITY_CHANGE_PASSWORD: 'Zmień hasło', + PROFILE_SECURITY: 'Bezpieczeństwo', + PROFILE_SECURITY_LINK_GOOGLE: 'Link Google Account', + PROFILE_SECURITY_UNLINK_GOOGLE: 'Unlink Google Account', + PROFILE_SHARED_INFORMATION: 'Udostępnione Informacje', + PROFILE_SHIRT_SIZE: 'Rozmiar T-Shirt', + PROFILE_SHOE_SIZE: 'Rozmiar Buta', + PROFILE_SWEATER_SIZE: 'Rozmiar Bluzy/Swetra', + PROFILE_TITLE: (name) => `Ustawienia użytkownika - ${name}`, + PROFILE_UPDATE_INFO_SUCCESS: 'Zaktualizowano udostępnione informacje', + RESET_PASSWORD_BUTTON: 'Zresetuj hasło', + RESET_PASSWORD_GREETING_EXPIRED: + 'Your reset link has expired. Please ask for a new one.', + RESET_PASSWORD_GREETING_INVALID: + "This reset link isn't valid, perhaps the link was canceled or some characters at the end got cut off?", + RESET_PASSWORD_GREETING_VALID: (name) => + `Hello ${name}! Please set your password here.`, + RESET_PASSWORD_HEADER_INVALID: `${_CC.config.siteTitle} | Link do resetu hasła nieprawidłowy`, + RESET_PASSWORD_HEADER_VALID: `${_CC.config.siteTitle} | Resetuj Hasło`, + RESET_PASSWORD_PASSWORD_PLACEHOLDER: 'pa$$word!', + RESET_PASSWORD_PASSWORD: 'Hasło', + RESET_PASSWORD_SUCCESS: 'Hasło zresetowano pomyślne!', + SETUP_ADMIN_USER: 'Administrator', + SETUP_BUTTON: 'Set up!', + SETUP_HEADER: 'Instalacja', + SETUP_PASSWORD_PLACEHOLDER: 'pa$$word!', + SETUP_PASSWORD: 'Hasło', + SETUP_USERNAME_PLACEHOLDER: 'Jan', + SETUP_USERNAME: 'Nazwa użytkownika', + SUPPORTED_SITES_HEADER: 'Wspierane Strony', + SUPPORTED_SITES_TEXT: + 'Czy ta strona istnieje lub jest popsuta? Otwórz zgłoszenietutaj! :)', + UPDATE_NOTICE: (current, latest) => ` Christmas Community jest nieaktualne. Poprawki i nowe funkcjonalności mogą na ciebie czekać. Rozważ aktualizację! :) @@ -158,55 +183,58 @@ export const strings = {
Najnowsza wersja: ${latest} Ta wiadomość jest widoczna tylko dla administratorów`, - WISHLIST_ADD: 'Dodaj prezent do listy życzeń', - WISHLIST_ADD_NEW: 'Dodaj prezent', - WISHLIST_ADDED_BY_USER: addedBy => `Dodane przez: ${addedBy}`, - WISHLIST_ADDED_BY_GUEST: "Użytkownik Gość", - WISHLIST_ADDED_BY: 'Dodane przez', - WISHLIST_ADDED_ITEM_TO_OWN_WISHLIST: 'Dodano przedmiot do lisy życzeń', - WISHLIST_CONFLICT: 'Przedmioty są dodawane za szybko. Spróbuj ponownie później.', - WISHLIST_DELETE: 'Usuń', - WISHLIST_EDIT_ITEM: 'Edytuj przedmiot', - WISHLIST_FETCH_FAIL: 'Nie udało się pobrać listy życzeń -- czy taki użytkownik istnieje?', - WISHLIST_IMAGE: 'Zdjęcie', - WISHLIST_ITEM_MISSING: 'Nie udało się znaleźć przedmiotu', - WISHLIST_MOVE_DOWN: 'Przesuń w dół', - WISHLIST_MOVE_BOTTOM: 'Przesuń na koniec', - WISHLIST_MOVE_GUARD: 'Niepoprawny użytkownik', - WISHLIST_MOVE_INVALID: 'Nieważny kierunek!', - WISHLIST_MOVE_ITEM_DOWN: 'Przesuń Przedmiot w dół', - WISHLIST_MOVE_ITEM_BOTTOM: 'Przesuń Przedmot na koniec', - WISHLIST_MOVE_ITEM_TOP: 'Przesuń Przedmiot na początek', - WISHLIST_MOVE_ITEM_UP: 'Przesuń Przedmiot w górę', - WISHLIST_MOVE_SUCCESS: 'Pomyślnie przesunięto przedmiot!', - WISHLIST_MOVE_TOP: 'Przesuń na początek', - WISHLIST_MOVE_UNKNOWN_DIRECTION: 'Nieznany kierunek', - WISHLIST_MOVE_UP: 'Przesuń do góry', - WISHLIST_NAME: 'Nazwa', - WISHLIST_NOTE: 'Notatka', - WISHLIST_OPTIONAL: 'Opcjonalnie', - WISHLIST_PLEDGE_DUPLICATE: 'Ten prezent już został zarezerwowany', - WISHLIST_PLEDGE_ITEM: 'Zadeklaruj prezent', - WISHLIST_PLEDGE_SUCCESS: 'Pomyślnie zadeklarowano prezent!', - WISHLIST_PLEDGE: 'Zadeklaruj', - WISHLIST_PLEDGED: pledgedBy => `Zadeklarowany przez ${pledgedBy}`, - WISHLIST_PLEDGED_GUEST: 'Zadeklarowany przez gościa', - WISHLIST_PLEDGED_ITEM_FOR_USER: user => `Zadeklarowano prezent dla ${user}.`, - WISHLIST_PRICE: 'Cena', - WISHLIST_REFRESH_GUARD: 'Nieprawidłowy użytkownik', - WISHLIST_REFRESH_NO_URL: 'Przedmiot nie ma URL', - WISHLIST_REFRESH_SUCCESS: 'Pomyślnie odświeżono dane!', - WISHLIST_REMOVE_GUARD: 'Niepoprawny użytkownik', - WISHLIST_REMOVE_SUCCESS: 'Pomyślnie usunięto z listy', - WISHLIST_SUGGEST: 'Zasugeruj prezent', - WISHLIST_TITLE: name => `${_CC.config.siteTitle} - Lista Życzeń - ${name}`, - WISHLIST_UNPLEDGE_GUARD: 'To nie ty zadeklarowałeś ten prezent', // should never happen unless someone makes their own http requests - WISHLIST_UNPLEDGE_SUCCESS: 'Pomyślnie wycofano deklaracje', - WISHLIST_UNPLEDGE: 'Wycofanie Deklaracji', - WISHLIST_URL_LABEL: `URL lub Nazwa Prezentu (Wspierane Strony)`, - WISHLIST_URL_PLACEHOLDER: 'https://www.amazon.com/dp/B00ZV9RDKK', - WISHLIST_URL_REQUIRED: 'URL lub Nazwa są wymagane', - WISHLISTS_COUNTS_SELF: name => `${name}: ???/???`, - WISHLISTS_COUNTS: (name, pledged, total) => `${name}: ${pledged}/${total}`, - WISHLISTS_TITLE: `${_CC.config.siteTitle} - Listy Życzeń` + WISHLIST_ADD: 'Dodaj prezent do listy życzeń', + WISHLIST_ADD_NEW: 'Dodaj prezent', + WISHLIST_ADDED_BY_USER: (addedBy) => `Dodane przez: ${addedBy}`, + WISHLIST_ADDED_BY_GUEST: 'Użytkownik Gość', + WISHLIST_ADDED_BY: 'Dodane przez', + WISHLIST_ADDED_ITEM_TO_OWN_WISHLIST: 'Dodano przedmiot do lisy życzeń', + WISHLIST_CONFLICT: + 'Przedmioty są dodawane za szybko. Spróbuj ponownie później.', + WISHLIST_DELETE: 'Usuń', + WISHLIST_EDIT_ITEM: 'Edytuj przedmiot', + WISHLIST_FETCH_FAIL: + 'Nie udało się pobrać listy życzeń -- czy taki użytkownik istnieje?', + WISHLIST_IMAGE: 'Zdjęcie', + WISHLIST_ITEM_MISSING: 'Nie udało się znaleźć przedmiotu', + WISHLIST_MOVE_DOWN: 'Przesuń w dół', + WISHLIST_MOVE_BOTTOM: 'Przesuń na koniec', + WISHLIST_MOVE_GUARD: 'Niepoprawny użytkownik', + WISHLIST_MOVE_INVALID: 'Nieważny kierunek!', + WISHLIST_MOVE_ITEM_DOWN: 'Przesuń Przedmiot w dół', + WISHLIST_MOVE_ITEM_BOTTOM: 'Przesuń Przedmot na koniec', + WISHLIST_MOVE_ITEM_TOP: 'Przesuń Przedmiot na początek', + WISHLIST_MOVE_ITEM_UP: 'Przesuń Przedmiot w górę', + WISHLIST_MOVE_SUCCESS: 'Pomyślnie przesunięto przedmiot!', + WISHLIST_MOVE_TOP: 'Przesuń na początek', + WISHLIST_MOVE_UNKNOWN_DIRECTION: 'Nieznany kierunek', + WISHLIST_MOVE_UP: 'Przesuń do góry', + WISHLIST_NAME: 'Nazwa', + WISHLIST_NOTE: 'Notatka', + WISHLIST_OPTIONAL: 'Opcjonalnie', + WISHLIST_PLEDGE_DUPLICATE: 'Ten prezent już został zarezerwowany', + WISHLIST_PLEDGE_ITEM: 'Zadeklaruj prezent', + WISHLIST_PLEDGE_SUCCESS: 'Pomyślnie zadeklarowano prezent!', + WISHLIST_PLEDGE: 'Zadeklaruj', + WISHLIST_PLEDGED: (pledgedBy) => `Zadeklarowany przez ${pledgedBy}`, + WISHLIST_PLEDGED_GUEST: 'Zadeklarowany przez gościa', + WISHLIST_PLEDGED_ITEM_FOR_USER: (user) => + `Zadeklarowano prezent dla ${user}.`, + WISHLIST_PRICE: 'Cena', + WISHLIST_REFRESH_GUARD: 'Nieprawidłowy użytkownik', + WISHLIST_REFRESH_NO_URL: 'Przedmiot nie ma URL', + WISHLIST_REFRESH_SUCCESS: 'Pomyślnie odświeżono dane!', + WISHLIST_REMOVE_GUARD: 'Niepoprawny użytkownik', + WISHLIST_REMOVE_SUCCESS: 'Pomyślnie usunięto z listy', + WISHLIST_SUGGEST: 'Zasugeruj prezent', + WISHLIST_TITLE: (name) => `${_CC.config.siteTitle} - Lista Życzeń - ${name}`, + WISHLIST_UNPLEDGE_GUARD: 'To nie ty zadeklarowałeś ten prezent', // should never happen unless someone makes their own http requests + WISHLIST_UNPLEDGE_SUCCESS: 'Pomyślnie wycofano deklaracje', + WISHLIST_UNPLEDGE: 'Wycofanie Deklaracji', + WISHLIST_URL_LABEL: `URL lub Nazwa Prezentu (Wspierane Strony)`, + WISHLIST_URL_PLACEHOLDER: 'https://www.amazon.com/dp/B00ZV9RDKK', + WISHLIST_URL_REQUIRED: 'URL lub Nazwa są wymagane', + WISHLISTS_COUNTS_SELF: (name) => `${name}: ???/???`, + WISHLISTS_COUNTS: (name, pledged, total) => `${name}: ${pledged}/${total}`, + WISHLISTS_TITLE: `${_CC.config.siteTitle} - Listy Życzeń`, } as const diff --git a/src/languages/pt-pt.ts b/src/languages/pt-pt.ts index 1f6ecc73..3f8a15cd 100644 --- a/src/languages/pt-pt.ts +++ b/src/languages/pt-pt.ts @@ -1,212 +1,243 @@ -export const momentLocale = 'pt' as const - -export const notTranslated = englishString => `${englishString} (não foi possivel traduzir para Português)` - -export const strings = { - ADMIN_CLEAR_WISHLISTS_BUTTON: 'Eliminar todas as listas', - ADMIN_CLEAR_WISHLISTS_DESCRIPTION: 'Esta operação vai eliminar de forma IRREVERSIVEL todas as listas! Por favor considere fazer um backup da base de dados antes de prosseguir.', - ADMIN_CLEAR_WISHLISTS_HEADER: 'Eliminar listas', - ADMIN_SETTINGS_CLEARDB_BUTTON: 'Eliminar Listas', - ADMIN_SETTINGS_CLEARDB_DESCRIPTION: 'ATENÇÃO: Estas opções eliminam dados! Provavelmente deve efectuar um backup da base de dados antes de usar estas opções.', - ADMIN_SETTINGS_CLEARDB_HEADER: 'Destruir dados', - ADMIN_SETTINGS_CLEARDB_SUCCESS: 'Eliminar todas as listas.', - ADMIN_SETTINGS_HEADER: 'Opções de Admin', - ADMIN_SETTINGS_USERS_ADD_BUTTON: 'Adicionar Utilizador', - ADMIN_SETTINGS_USERS_ADD_HEADER: 'Adicionar Utilizador', - ADMIN_SETTINGS_USERS_ADD_PLACEHOLDER: 'João', - ADMIN_SETTINGS_USERS_ADD_USERNAME: 'Nome de utilizador', - ADMIN_SETTINGS_USERS_ADD_ERROR_USERNAME_EMPTY: 'Nome de utilizador não pode ficar em branco.', - ADMIN_SETTINGS_USERS_EDIT_DELETE_FAIL_ADMIN: 'Erro ao remover: utilizador é admin.', - ADMIN_SETTINGS_USERS_EDIT_DELETE_SUCCESS: name => `Removido utilizador ${name}`, - ADMIN_SETTINGS_USERS_EDIT_DEMOTE_NOT_ADMIN: 'utilizador não é administrador', - ADMIN_SETTINGS_USERS_EDIT_DEMOTE_SELF: 'Não é possivel retirar permissões à própria conta.', - ADMIN_SETTINGS_USERS_EDIT_DEMOTE_SUCCESS: name => `${name} não é mais administrador.`, - ADMIN_SETTINGS_USERS_EDIT_IMPERSONATE_SUCCESS: name => `Agora a sua conta é ${name}.`, - ADMIN_SETTINGS_USERS_EDIT_NO_USERNAME_PROVIDED: 'Não foi indicado username', - ADMIN_SETTINGS_USERS_EDIT_PROMOTE_ALREADY_ADMIN: 'utilizador já é administrador', - ADMIN_SETTINGS_USERS_EDIT_PROMOTE_DEMOTE_NOT_FOUND: 'utilizador não encontrado.', - ADMIN_SETTINGS_USERS_EDIT_PROMOTE_SUCCESS: name => `${name} é administrador.`, - ADMIN_SETTINGS_USERS_EDIT_RENAMED_USER: 'Utilizador renomeado!', - ADMIN_SETTINGS_USERS_EDIT_SAME_NAME: 'Nome de utilizador é igual ao novo nome de utilizador.', - ADMIN_SETTINGS_USERS_EDIT: 'Editar', - ADMIN_SETTINGS_USERS_HEADER: 'Utilizadores', - ADMIN_SETTINGS_VERSION_INFO: 'Info da Versão', - ADMIN_USER_EDIT_ACCOUNT_UNCONFIRMED: "Esta conta ainda não foi confirmada.", - ADMIN_USER_EDIT_ADMIN_ISADMIN: name => `${name} é um administrador.`, - ADMIN_USER_EDIT_ADMIN_NOTADMIN: name => `${name} não é um administrador.`, - ADMIN_USER_EDIT_ADMIN: 'Administrador', - ADMIN_USER_EDIT_CHANGE_NAME: 'Alterar o nome', - ADMIN_USER_EDIT_CHANGE_USERNAME: 'Alterar o nome de Utilizador', - ADMIN_USER_EDIT_CONFIRMATION_LINK: 'Link de confirmação', - ADMIN_USER_EDIT_DELETE_ADMIN: 'Utilizador é administrador', - ADMIN_USER_EDIT_DELETE_HEADER: 'Eliminação Irreversivel', - ADMIN_USER_EDIT_DELETE_USER: name => `Remover utilizador ${name}`, - ADMIN_USER_EDIT_DEMOTE_SELF: 'Não é possivel retirar permissões à própria conta', - ADMIN_USER_EDIT_DEMOTE: name => `Retirar permissões a ${name}`, - ADMIN_USER_EDIT_EDITING_USER: name => `Editar utilizador "${name}"`, - ADMIN_USER_EDIT_GENERATE_NEW_LINK: 'Gerar novo Link', - ADMIN_USER_EDIT_IMPERSONATE_BUTTON: name => `Log in como ${name}`, - ADMIN_USER_EDIT_IMPERSONATE_HEADER: 'Simular utilizador', - ADMIN_USER_EDIT_LINK_EXPIRY_FUTURE: fromNow => `O seguinte link expira ${fromNow}`, // fromNow is localized by moment - ADMIN_USER_EDIT_LINK_EXPIRY_PAST: fromNow => `O seguinte link expirou ${fromNow}`, - ADMIN_USER_EDIT_PROMOTE: name => `Dar permissões ${name}`, - ADMIN_USER_EDIT_RESET_PASSWORD_HASLINK_EXPIRY_FUTURE: fromNow => `Expira em ${fromNow}`, - ADMIN_USER_EDIT_RESET_PASSWORD_HASLINK_EXPIRY_PAST: fromNow => `Expirou ${fromNow}`, - ADMIN_USER_EDIT_RESET_PASSWORD_HASLINK: 'Existe um link para efectuar um reset da password para este utilizador.', - ADMIN_USER_EDIT_RESET_PASSWORD_HEADER: 'Reset da Password', - ADMIN_USER_EDIT_RESET_PASSWORD_LINK_CANCEL: 'Link para Cancelar Reset da Password', - ADMIN_USER_EDIT_RESET_PASSWORD_LINK_CREATE: 'Criar Link para Efectuar Reset da Password', - ADMIN_USER_EDIT_RESET_PASSWORD_LINK_REFRESH: 'Actualizar Link para Reset da Password', - ADMIN_USER_EDIT_USERNAME: 'Utilizador', - BACK_BUTTON: 'Retroceder', - CONFIRM_ACCOUNT_EXPIRED: 'O seu link de confirmação expirou. Por favor peça um novo link.', - CONFIRM_ACCOUNT_HEADER_INVALID: `${_CC.config.siteTitle} | Link de confirmação Inválido.`, - CONFIRM_ACCOUNT_HEADER_VALID: `${_CC.config.siteTitle} | Confirmar Conta`, - CONFIRM_ACCOUNT_INVALID: "Este link de confirmação não é válido, talvez a conta tenha sido eliminada, ou alguns caracteres do link estão em falta?", - CONFIRM_ACCOUNT_SET_PW_BUTTON: `Aderir ${_CC.config.siteTitle}`, - CONFIRM_ACCOUNT_SET_PW_PLACEHOLDER: 'pa$$word!', - CONFIRM_ACCOUNT_SET_PW_TEXT: name => `Olá ${name}! Por favor introduza a sua password aqui.`, - CONFIRM_ACCOUNT_SUCCESS: `Bem-vindo(a) a ${_CC.config.siteTitle}!`, - LOGIN_BUTTON: 'Entrar', - LOGIN_GOOGLE_BUTTON: 'Entrar com conta Google', - LOGIN_PASSWORD_PLACEHOLDER: 'pa$$word!', - LOGIN_PASSWORD: 'Password', - LOGIN_USERNAME_PLACEHOLDER: 'João', - LOGIN_USERNAME: 'Utilizador', - LOGIN_INCORRECT_USERNAME: 'Utilizador incorrecto', - LOGIN_INCORRECT_PASSWORD: 'Password incorrecta', - LOGIN_SSO_UNKNOWN_USER: 'Utilizador desconhecido', - LOGIN_SSO_LINK_SUCCESS: 'Conta ligada com sucesso', - LOGIN_SSO_LINK_FAILURE: 'Não foi possivel ligar à conta', - LOGIN_SSO_UNLINK_SUCCESS: 'Conta desligada com sucesso', - LOGIN_SSO_UNLINK_FAILURE: 'Falhou desligamento da conta', - LOGIN_SSO_LINK_FAILURE_ACCOUNT_EXISTS: 'Esta conta externa já está ligada a outra conta neste site!', - LOGOUT_BUTTON: 'Sair', - NAVBAR_ADMIN: 'Opções de Administrador', - NAVBAR_LOGIN: 'Entrar', - NAVBAR_LOGOUT: 'Sair', - NAVBAR_PROFILE: 'Perfil', - NAVBAR_WISHLIST: 'A minha lista', - NOTE_BACK: name => `Retroceder para lista de ${name}`, - NOTE_GET_PRODUCT_DATA: 'Obter dados do produto', - NOTE_GUARD: 'Utilizador inválido', - NOTE_IMAGE_URL: 'URL da imagem', - NOTE_MISSING_PROP: prop => `Propriedade em falta ${prop}`, // not really possible to localize this unfortunately - NOTE_NAME: 'Nome', - NOTE_NOTE: 'Nota', - NOTE_PRICE: 'Preço', - NOTE_REFRESH_DATA: 'Actualizar Dados', - NOTE_REMOVE_GUARD: 'Utilizador inválido', - NOTE_REMOVE_MISSING: 'Sem notas', - NOTE_REMOVE_SUCCESS: 'Nota removida com sucesso', - NOTE_SAVE_BUTTON: 'Guardar item', - NOTE_SUCCESS: 'Gravado com sucesso!', - NOTE_URL: 'URL', - PROFILE_COAT_SIZE: 'Tamanho de Fato/Blazer/Casaco', - PROFILE_DRESS_SIZE: 'Tamanho de Vestido', - PROFILE_HAT_SIZE: 'Tamanho de chapeu', - PROFILE_HEADER: 'Perfil', - PROFILE_PANTS_SIZE: 'Tamanho de calças', - PROFILE_PASSWORD_BUTTON: 'Guardar', - PROFILE_PASSWORD_NEW: 'Nova Password', - PROFILE_PASSWORD_OLD_MISMATCH: 'Password anterior errada', - PROFILE_PASSWORD_OLD: 'Password anterior', - PROFILE_PASSWORD_PLACEHOLDER: 'pa$$word!', - PROFILE_PASSWORD_REQUIRED_NEW: 'Password Nova é necessária', - PROFILE_PASSWORD_REQUIRED_OLD: 'Password Anterior é necessária', - PROFILE_PASSWORD_SUCCESS: 'Alterações gravadas com sucesso successfully!', - PROFILE_PASSWORD_TITLE: name => `Opções de perfil - Password - ${name}`, - PROFILE_PHONE_MODEL: 'Modelo de telefone/telemóvel', - PROFILE_RING_SIZE: 'Tamanho de anel', - PROFILE_SAVE_PFP_DISABLED: 'Imagens de perfil estão desactivadas.', - PROFILE_SAVE_PFP_SUCCESS: 'Imagem de perfil guardada!', - PROFILE_SECURITY_CHANGE_PASSWORD: 'Alterar Password', - PROFILE_SECURITY: 'Segurança', - PROFILE_SECURITY_LINK_GOOGLE: 'Ligar a conta Google', - PROFILE_SECURITY_UNLINK_GOOGLE: 'Desligar de conta Google', - PROFILE_SHARED_INFORMATION: 'Informação Partilhada', - PROFILE_SHIRT_SIZE: 'Tamanho de T-Shirt', - PROFILE_SHOE_SIZE: 'Tamanho de Sapatos', - PROFILE_SWEATER_SIZE: 'Tamanho de Blusa/Camisola', - PROFILE_TITLE: name => `Opções de Perfil - ${name}`, - PROFILE_UPDATE_INFO_SUCCESS: 'Dados partilhados actualizados!', - RESET_PASSWORD_BUTTON: 'Reset de Password', - RESET_PASSWORD_GREETING_EXPIRED: 'O seu link para reset expirou. Por favor peça um link novo.', - RESET_PASSWORD_GREETING_INVALID: "Este link de confirmação não é válido, talvez a conta tenha sido eliminada, ou alguns caracteres do link estão em falta?", - RESET_PASSWORD_GREETING_VALID: name => `Olá ${name}! Por favor introduza a sua password aqui.`, - RESET_PASSWORD_HEADER_INVALID: `${_CC.config.siteTitle} | Link de Reset Inválido`, - RESET_PASSWORD_HEADER_VALID: `${_CC.config.siteTitle} | Reset de Password`, - RESET_PASSWORD_PASSWORD_PLACEHOLDER: 'pa$$word!', - RESET_PASSWORD_PASSWORD: 'Password', - RESET_PASSWORD_SUCCESS: 'Reset de Password efectuado com sucesso!', - SETUP_ADMIN_USER: 'Administrador', - SETUP_BUTTON: 'Configurar!', - SETUP_HEADER: 'Configurar', - SETUP_PASSWORD_PLACEHOLDER: 'pa$$word!', - SETUP_PASSWORD: 'Password', - SETUP_USERNAME_PLACEHOLDER: 'João', - SETUP_USERNAME: 'Utilizador', - SUPPORTED_SITES_HEADER: 'Sites suportados', - SUPPORTED_SITES_TEXT: 'Algum site em falta ou com erros? Utilize o seguinte link para reportar here! :)', - UPDATE_NOTICE: (current, latest) => ` - - Christmas Community está desactualizado. Poderão existir novas funções ou correcções de erros. Por favor actualize! :) - -
- (pode desactivar este aviso com UPDATE_CHECK=false) -

- Current: ${current} -
- Latest: ${latest} - Esta mensagem é apenas visivel para admins`, - WISHLIST_ADD: 'Adicionar item á lista', - WISHLIST_ADDED_BY_USER: addedBy => `Adicionado por: ${addedBy}`, - WISHLIST_ADDED_BY_GUEST: "Utilizador Convidado", - WISHLIST_ADDED_BY: 'Adicionado por', - WISHLIST_ADDED_ITEM_TO_OWN_WISHLIST: 'Adicionado item à lista.', - WISHLIST_CONFLICT: 'Items estão a ser adicionados demasiado rápido. Por favor tente novamente.', - WISHLIST_DELETE: 'Apagar', - WISHLIST_EDIT_ITEM: 'Editar Item', - WISHLIST_FETCH_FAIL: 'Erro na pesquisa da lista -- este utilizador existe?', - WISHLIST_IMAGE: 'Imagem', - WISHLIST_ITEM_MISSING: 'Erro a encontrar item', - WISHLIST_MOVE_DOWN: 'Mover para baixo', - WISHLIST_MOVE_BOTTOM: 'Mover para o fim', - WISHLIST_MOVE_GUARD: 'Utilizador incorrecto', - WISHLIST_MOVE_INVALID: 'Movimento inválido', - WISHLIST_MOVE_ITEM_DOWN: 'Mover Item para Baixo', - WISHLIST_MOVE_ITEM_BOTTOM: 'Mover Item para o Fim', - WISHLIST_MOVE_ITEM_TOP: 'Mover Item para o Topo', - WISHLIST_MOVE_ITEM_UP: 'Mover Item para cima', - WISHLIST_MOVE_SUCCESS: 'Item movido com Sucesso!', - WISHLIST_MOVE_TOP: 'Mover para o Topo', - WISHLIST_MOVE_UNKNOWN_DIRECTION: 'Direcção desconhecida', - WISHLIST_MOVE_UP: 'Mover para cima', - WISHLIST_NAME: 'Nome', - WISHLIST_NOTE: 'Nota', - WISHLIST_OPTIONAL: 'Opcional', - WISHLIST_PLEDGE_DUPLICATE: 'Item ja reservado por alguém', - WISHLIST_PLEDGE_ITEM: 'Reservar item', - WISHLIST_PLEDGE_SUCCESS: 'Item reservado com sucesso!', - WISHLIST_PLEDGE: 'Reservar', - WISHLIST_PLEDGED: pledgedBy => `Reservado por ${pledgedBy}`, - WISHLIST_PLEDGED_GUEST: 'Reservado por convidado', - WISHLIST_PLEDGED_ITEM_FOR_USER: user => `Item reservado para ${user}.`, - WISHLIST_PRICE: 'Preço', - WISHLIST_REFRESH_GUARD: 'Utilizador Inválido', - WISHLIST_REFRESH_NO_URL: 'Item não tem URL.', - WISHLIST_REFRESH_SUCCESS: 'Dados actualizados com sucesso!', - WISHLIST_REMOVE_GUARD: 'Utilizador incorrecto', - WISHLIST_REMOVE_SUCCESS: 'Removido da lista com sucesso', - WISHLIST_SUGGEST: 'Item sugerido', - WISHLIST_TITLE: name => `${_CC.config.siteTitle} - Lista - ${name}`, - WISHLIST_UNPLEDGE_GUARD: 'Não reservou este item', // should never happen unless someone makes their own http requests - WISHLIST_UNPLEDGE_SUCCESS: 'Reserva removida com sucesso!', - WISHLIST_UNPLEDGE: 'Remover reserva', - WISHLIST_URL_LABEL: `URL ou Nome do Item (Supported Sites)`, - WISHLIST_URL_PLACEHOLDER: 'https://www.amazon.com/dp/B00ZV9RDKK', - WISHLIST_URL_REQUIRED: 'URL ou Nome do item necessário!', - WISHLISTS_COUNTS_SELF: name => `${name}: ???/???`, - WISHLISTS_COUNTS: (name, pledged, total) => `${name}: ${pledged}/${total}`, - WISHLISTS_TITLE: `${_CC.config.siteTitle} - Listas` -} as const \ No newline at end of file +export const momentLocale = 'pt' as const + +export const notTranslated = (englishString) => + `${englishString} (não foi possivel traduzir para Português)` + +export const strings = { + ADMIN_CLEAR_WISHLISTS_BUTTON: 'Eliminar todas as listas', + ADMIN_CLEAR_WISHLISTS_DESCRIPTION: + 'Esta operação vai eliminar de forma IRREVERSIVEL todas as listas! Por favor considere fazer um backup da base de dados antes de prosseguir.', + ADMIN_CLEAR_WISHLISTS_HEADER: 'Eliminar listas', + ADMIN_SETTINGS_CLEARDB_BUTTON: 'Eliminar Listas', + ADMIN_SETTINGS_CLEARDB_DESCRIPTION: + 'ATENÇÃO: Estas opções eliminam dados! Provavelmente deve efectuar um backup da base de dados antes de usar estas opções.', + ADMIN_SETTINGS_CLEARDB_HEADER: 'Destruir dados', + ADMIN_SETTINGS_CLEARDB_SUCCESS: 'Eliminar todas as listas.', + ADMIN_SETTINGS_HEADER: 'Opções de Admin', + ADMIN_SETTINGS_USERS_ADD_BUTTON: 'Adicionar Utilizador', + ADMIN_SETTINGS_USERS_ADD_HEADER: 'Adicionar Utilizador', + ADMIN_SETTINGS_USERS_ADD_PLACEHOLDER: 'João', + ADMIN_SETTINGS_USERS_ADD_USERNAME: 'Nome de utilizador', + ADMIN_SETTINGS_USERS_ADD_ERROR_USERNAME_EMPTY: + 'Nome de utilizador não pode ficar em branco.', + ADMIN_SETTINGS_USERS_EDIT_DELETE_FAIL_ADMIN: + 'Erro ao remover: utilizador é admin.', + ADMIN_SETTINGS_USERS_EDIT_DELETE_SUCCESS: (name) => + `Removido utilizador ${name}`, + ADMIN_SETTINGS_USERS_EDIT_DEMOTE_NOT_ADMIN: 'utilizador não é administrador', + ADMIN_SETTINGS_USERS_EDIT_DEMOTE_SELF: + 'Não é possivel retirar permissões à própria conta.', + ADMIN_SETTINGS_USERS_EDIT_DEMOTE_SUCCESS: (name) => + `${name} não é mais administrador.`, + ADMIN_SETTINGS_USERS_EDIT_IMPERSONATE_SUCCESS: (name) => + `Agora a sua conta é ${name}.`, + ADMIN_SETTINGS_USERS_EDIT_NO_USERNAME_PROVIDED: 'Não foi indicado username', + ADMIN_SETTINGS_USERS_EDIT_PROMOTE_ALREADY_ADMIN: + 'utilizador já é administrador', + ADMIN_SETTINGS_USERS_EDIT_PROMOTE_DEMOTE_NOT_FOUND: + 'utilizador não encontrado.', + ADMIN_SETTINGS_USERS_EDIT_PROMOTE_SUCCESS: (name) => + `${name} é administrador.`, + ADMIN_SETTINGS_USERS_EDIT_RENAMED_USER: 'Utilizador renomeado!', + ADMIN_SETTINGS_USERS_EDIT_SAME_NAME: + 'Nome de utilizador é igual ao novo nome de utilizador.', + ADMIN_SETTINGS_USERS_EDIT: 'Editar', + ADMIN_SETTINGS_USERS_HEADER: 'Utilizadores', + ADMIN_SETTINGS_VERSION_INFO: 'Info da Versão', + ADMIN_USER_EDIT_ACCOUNT_UNCONFIRMED: 'Esta conta ainda não foi confirmada.', + ADMIN_USER_EDIT_ADMIN_ISADMIN: (name) => `${name} é um administrador.`, + ADMIN_USER_EDIT_ADMIN_NOTADMIN: (name) => `${name} não é um administrador.`, + ADMIN_USER_EDIT_ADMIN: 'Administrador', + ADMIN_USER_EDIT_CHANGE_NAME: 'Alterar o nome', + ADMIN_USER_EDIT_CHANGE_USERNAME: 'Alterar o nome de Utilizador', + ADMIN_USER_EDIT_CONFIRMATION_LINK: 'Link de confirmação', + ADMIN_USER_EDIT_DELETE_ADMIN: 'Utilizador é administrador', + ADMIN_USER_EDIT_DELETE_HEADER: 'Eliminação Irreversivel', + ADMIN_USER_EDIT_DELETE_USER: (name) => `Remover utilizador ${name}`, + ADMIN_USER_EDIT_DEMOTE_SELF: + 'Não é possivel retirar permissões à própria conta', + ADMIN_USER_EDIT_DEMOTE: (name) => `Retirar permissões a ${name}`, + ADMIN_USER_EDIT_EDITING_USER: (name) => `Editar utilizador "${name}"`, + ADMIN_USER_EDIT_GENERATE_NEW_LINK: 'Gerar novo Link', + ADMIN_USER_EDIT_IMPERSONATE_BUTTON: (name) => `Log in como ${name}`, + ADMIN_USER_EDIT_IMPERSONATE_HEADER: 'Simular utilizador', + ADMIN_USER_EDIT_LINK_EXPIRY_FUTURE: (fromNow) => + `O seguinte link expira ${fromNow}`, // fromNow is localized by moment + ADMIN_USER_EDIT_LINK_EXPIRY_PAST: (fromNow) => + `O seguinte link expirou ${fromNow}`, + ADMIN_USER_EDIT_PROMOTE: (name) => `Dar permissões ${name}`, + ADMIN_USER_EDIT_RESET_PASSWORD_HASLINK_EXPIRY_FUTURE: (fromNow) => + `Expira em ${fromNow}`, + ADMIN_USER_EDIT_RESET_PASSWORD_HASLINK_EXPIRY_PAST: (fromNow) => + `Expirou ${fromNow}`, + ADMIN_USER_EDIT_RESET_PASSWORD_HASLINK: + 'Existe um link para efectuar um reset da password para este utilizador.', + ADMIN_USER_EDIT_RESET_PASSWORD_HEADER: 'Reset da Password', + ADMIN_USER_EDIT_RESET_PASSWORD_LINK_CANCEL: + 'Link para Cancelar Reset da Password', + ADMIN_USER_EDIT_RESET_PASSWORD_LINK_CREATE: + 'Criar Link para Efectuar Reset da Password', + ADMIN_USER_EDIT_RESET_PASSWORD_LINK_REFRESH: + 'Actualizar Link para Reset da Password', + ADMIN_USER_EDIT_USERNAME: 'Utilizador', + BACK_BUTTON: 'Retroceder', + CONFIRM_ACCOUNT_EXPIRED: + 'O seu link de confirmação expirou. Por favor peça um novo link.', + CONFIRM_ACCOUNT_HEADER_INVALID: `${_CC.config.siteTitle} | Link de confirmação Inválido.`, + CONFIRM_ACCOUNT_HEADER_VALID: `${_CC.config.siteTitle} | Confirmar Conta`, + CONFIRM_ACCOUNT_INVALID: + 'Este link de confirmação não é válido, talvez a conta tenha sido eliminada, ou alguns caracteres do link estão em falta?', + CONFIRM_ACCOUNT_SET_PW_BUTTON: `Aderir ${_CC.config.siteTitle}`, + CONFIRM_ACCOUNT_SET_PW_PLACEHOLDER: 'pa$$word!', + CONFIRM_ACCOUNT_SET_PW_TEXT: (name) => + `Olá ${name}! Por favor introduza a sua password aqui.`, + CONFIRM_ACCOUNT_SUCCESS: `Bem-vindo(a) a ${_CC.config.siteTitle}!`, + LOGIN_BUTTON: 'Entrar', + LOGIN_GOOGLE_BUTTON: 'Entrar com conta Google', + LOGIN_PASSWORD_PLACEHOLDER: 'pa$$word!', + LOGIN_PASSWORD: 'Password', + LOGIN_USERNAME_PLACEHOLDER: 'João', + LOGIN_USERNAME: 'Utilizador', + LOGIN_INCORRECT_USERNAME: 'Utilizador incorrecto', + LOGIN_INCORRECT_PASSWORD: 'Password incorrecta', + LOGIN_SSO_UNKNOWN_USER: 'Utilizador desconhecido', + LOGIN_SSO_LINK_SUCCESS: 'Conta ligada com sucesso', + LOGIN_SSO_LINK_FAILURE: 'Não foi possivel ligar à conta', + LOGIN_SSO_UNLINK_SUCCESS: 'Conta desligada com sucesso', + LOGIN_SSO_UNLINK_FAILURE: 'Falhou desligamento da conta', + LOGIN_SSO_LINK_FAILURE_ACCOUNT_EXISTS: + 'Esta conta externa já está ligada a outra conta neste site!', + LOGOUT_BUTTON: 'Sair', + NAVBAR_ADMIN: 'Opções de Administrador', + NAVBAR_LOGIN: 'Entrar', + NAVBAR_LOGOUT: 'Sair', + NAVBAR_PROFILE: 'Perfil', + NAVBAR_WISHLIST: 'A minha lista', + NOTE_BACK: (name) => `Retroceder para lista de ${name}`, + NOTE_GET_PRODUCT_DATA: 'Obter dados do produto', + NOTE_GUARD: 'Utilizador inválido', + NOTE_IMAGE_URL: 'URL da imagem', + NOTE_MISSING_PROP: (prop) => `Propriedade em falta ${prop}`, // not really possible to localize this unfortunately + NOTE_NAME: 'Nome', + NOTE_NOTE: 'Nota', + NOTE_PRICE: 'Preço', + NOTE_REFRESH_DATA: 'Actualizar Dados', + NOTE_REMOVE_GUARD: 'Utilizador inválido', + NOTE_REMOVE_MISSING: 'Sem notas', + NOTE_REMOVE_SUCCESS: 'Nota removida com sucesso', + NOTE_SAVE_BUTTON: 'Guardar item', + NOTE_SUCCESS: 'Gravado com sucesso!', + NOTE_URL: 'URL', + PROFILE_COAT_SIZE: 'Tamanho de Fato/Blazer/Casaco', + PROFILE_DRESS_SIZE: 'Tamanho de Vestido', + PROFILE_HAT_SIZE: 'Tamanho de chapeu', + PROFILE_HEADER: 'Perfil', + PROFILE_PANTS_SIZE: 'Tamanho de calças', + PROFILE_PASSWORD_BUTTON: 'Guardar', + PROFILE_PASSWORD_NEW: 'Nova Password', + PROFILE_PASSWORD_OLD_MISMATCH: 'Password anterior errada', + PROFILE_PASSWORD_OLD: 'Password anterior', + PROFILE_PASSWORD_PLACEHOLDER: 'pa$$word!', + PROFILE_PASSWORD_REQUIRED_NEW: 'Password Nova é necessária', + PROFILE_PASSWORD_REQUIRED_OLD: 'Password Anterior é necessária', + PROFILE_PASSWORD_SUCCESS: 'Alterações gravadas com sucesso successfully!', + PROFILE_PASSWORD_TITLE: (name) => `Opções de perfil - Password - ${name}`, + PROFILE_PHONE_MODEL: 'Modelo de telefone/telemóvel', + PROFILE_RING_SIZE: 'Tamanho de anel', + PROFILE_SAVE_PFP_DISABLED: 'Imagens de perfil estão desactivadas.', + PROFILE_SAVE_PFP_SUCCESS: 'Imagem de perfil guardada!', + PROFILE_SECURITY_CHANGE_PASSWORD: 'Alterar Password', + PROFILE_SECURITY: 'Segurança', + PROFILE_SECURITY_LINK_GOOGLE: 'Ligar a conta Google', + PROFILE_SECURITY_UNLINK_GOOGLE: 'Desligar de conta Google', + PROFILE_SHARED_INFORMATION: 'Informação Partilhada', + PROFILE_SHIRT_SIZE: 'Tamanho de T-Shirt', + PROFILE_SHOE_SIZE: 'Tamanho de Sapatos', + PROFILE_SWEATER_SIZE: 'Tamanho de Blusa/Camisola', + PROFILE_TITLE: (name) => `Opções de Perfil - ${name}`, + PROFILE_UPDATE_INFO_SUCCESS: 'Dados partilhados actualizados!', + RESET_PASSWORD_BUTTON: 'Reset de Password', + RESET_PASSWORD_GREETING_EXPIRED: + 'O seu link para reset expirou. Por favor peça um link novo.', + RESET_PASSWORD_GREETING_INVALID: + 'Este link de confirmação não é válido, talvez a conta tenha sido eliminada, ou alguns caracteres do link estão em falta?', + RESET_PASSWORD_GREETING_VALID: (name) => + `Olá ${name}! Por favor introduza a sua password aqui.`, + RESET_PASSWORD_HEADER_INVALID: `${_CC.config.siteTitle} | Link de Reset Inválido`, + RESET_PASSWORD_HEADER_VALID: `${_CC.config.siteTitle} | Reset de Password`, + RESET_PASSWORD_PASSWORD_PLACEHOLDER: 'pa$$word!', + RESET_PASSWORD_PASSWORD: 'Password', + RESET_PASSWORD_SUCCESS: 'Reset de Password efectuado com sucesso!', + SETUP_ADMIN_USER: 'Administrador', + SETUP_BUTTON: 'Configurar!', + SETUP_HEADER: 'Configurar', + SETUP_PASSWORD_PLACEHOLDER: 'pa$$word!', + SETUP_PASSWORD: 'Password', + SETUP_USERNAME_PLACEHOLDER: 'João', + SETUP_USERNAME: 'Utilizador', + SUPPORTED_SITES_HEADER: 'Sites suportados', + SUPPORTED_SITES_TEXT: + 'Algum site em falta ou com erros? Utilize o seguinte link para reportar here! :)', + UPDATE_NOTICE: (current, latest) => ` + + Christmas Community está desactualizado. Poderão existir novas funções ou correcções de erros. Por favor actualize! :) + +
+ (pode desactivar este aviso com UPDATE_CHECK=false) +

+ Current: ${current} +
+ Latest: ${latest} + Esta mensagem é apenas visivel para admins`, + WISHLIST_ADD: 'Adicionar item á lista', + WISHLIST_ADDED_BY_USER: (addedBy) => `Adicionado por: ${addedBy}`, + WISHLIST_ADDED_BY_GUEST: 'Utilizador Convidado', + WISHLIST_ADDED_BY: 'Adicionado por', + WISHLIST_ADDED_ITEM_TO_OWN_WISHLIST: 'Adicionado item à lista.', + WISHLIST_CONFLICT: + 'Items estão a ser adicionados demasiado rápido. Por favor tente novamente.', + WISHLIST_DELETE: 'Apagar', + WISHLIST_EDIT_ITEM: 'Editar Item', + WISHLIST_FETCH_FAIL: 'Erro na pesquisa da lista -- este utilizador existe?', + WISHLIST_IMAGE: 'Imagem', + WISHLIST_ITEM_MISSING: 'Erro a encontrar item', + WISHLIST_MOVE_DOWN: 'Mover para baixo', + WISHLIST_MOVE_BOTTOM: 'Mover para o fim', + WISHLIST_MOVE_GUARD: 'Utilizador incorrecto', + WISHLIST_MOVE_INVALID: 'Movimento inválido', + WISHLIST_MOVE_ITEM_DOWN: 'Mover Item para Baixo', + WISHLIST_MOVE_ITEM_BOTTOM: 'Mover Item para o Fim', + WISHLIST_MOVE_ITEM_TOP: 'Mover Item para o Topo', + WISHLIST_MOVE_ITEM_UP: 'Mover Item para cima', + WISHLIST_MOVE_SUCCESS: 'Item movido com Sucesso!', + WISHLIST_MOVE_TOP: 'Mover para o Topo', + WISHLIST_MOVE_UNKNOWN_DIRECTION: 'Direcção desconhecida', + WISHLIST_MOVE_UP: 'Mover para cima', + WISHLIST_NAME: 'Nome', + WISHLIST_NOTE: 'Nota', + WISHLIST_OPTIONAL: 'Opcional', + WISHLIST_PLEDGE_DUPLICATE: 'Item ja reservado por alguém', + WISHLIST_PLEDGE_ITEM: 'Reservar item', + WISHLIST_PLEDGE_SUCCESS: 'Item reservado com sucesso!', + WISHLIST_PLEDGE: 'Reservar', + WISHLIST_PLEDGED: (pledgedBy) => `Reservado por ${pledgedBy}`, + WISHLIST_PLEDGED_GUEST: 'Reservado por convidado', + WISHLIST_PLEDGED_ITEM_FOR_USER: (user) => `Item reservado para ${user}.`, + WISHLIST_PRICE: 'Preço', + WISHLIST_REFRESH_GUARD: 'Utilizador Inválido', + WISHLIST_REFRESH_NO_URL: 'Item não tem URL.', + WISHLIST_REFRESH_SUCCESS: 'Dados actualizados com sucesso!', + WISHLIST_REMOVE_GUARD: 'Utilizador incorrecto', + WISHLIST_REMOVE_SUCCESS: 'Removido da lista com sucesso', + WISHLIST_SUGGEST: 'Item sugerido', + WISHLIST_TITLE: (name) => `${_CC.config.siteTitle} - Lista - ${name}`, + WISHLIST_UNPLEDGE_GUARD: 'Não reservou este item', // should never happen unless someone makes their own http requests + WISHLIST_UNPLEDGE_SUCCESS: 'Reserva removida com sucesso!', + WISHLIST_UNPLEDGE: 'Remover reserva', + WISHLIST_URL_LABEL: `URL ou Nome do Item (Supported Sites)`, + WISHLIST_URL_PLACEHOLDER: 'https://www.amazon.com/dp/B00ZV9RDKK', + WISHLIST_URL_REQUIRED: 'URL ou Nome do item necessário!', + WISHLISTS_COUNTS_SELF: (name) => `${name}: ???/???`, + WISHLISTS_COUNTS: (name, pledged, total) => `${name}: ${pledged}/${total}`, + WISHLISTS_TITLE: `${_CC.config.siteTitle} - Listas`, +} as const diff --git a/src/languages/ro-ro.ts b/src/languages/ro-ro.ts index a5de7b61..2b7c9edf 100644 --- a/src/languages/ro-ro.ts +++ b/src/languages/ro-ro.ts @@ -1,12 +1,14 @@ export const momentLocale = 'ro-RO' export const strings = { - _NOT_LOCALIZED: key => `${key} încă nu a fost tradus în Română.`, + _NOT_LOCALIZED: (key) => `${key} încă nu a fost tradus în Română.`, ADMIN_CLEAR_WISHLISTS_BUTTON: 'Ștergeți toate listele cu dorințe', - ADMIN_CLEAR_WISHLISTS_DESCRIPTION: 'Această acțiune va șterge toate listele cu dorințe definitiv! Se recomandă exportarea unei copii de rezervă înainte de a utiliza această opțiune.', + ADMIN_CLEAR_WISHLISTS_DESCRIPTION: + 'Această acțiune va șterge toate listele cu dorințe definitiv! Se recomandă exportarea unei copii de rezervă înainte de a utiliza această opțiune.', ADMIN_CLEAR_WISHLISTS_HEADER: 'Ștergeți toate listele cu dorințe', ADMIN_SETTINGS_CLEARDB_BUTTON: 'Clear Wishlists', - ADMIN_SETTINGS_CLEARDB_DESCRIPTION: 'Atenție: aceste opțiuni vor șterge date! Se recomandă exportarea unei copii de rezervă a bazei de date înainte de a utiliza aceaste opțiuni.', + ADMIN_SETTINGS_CLEARDB_DESCRIPTION: + 'Atenție: aceste opțiuni vor șterge date! Se recomandă exportarea unei copii de rezervă a bazei de date înainte de a utiliza aceaste opțiuni.', ADMIN_SETTINGS_CLEARDB_HEADER: 'Ștergere date', ADMIN_SETTINGS_CLEARDB_SUCCESS: 'Toate listele cu dorințe au fost șterse.', ADMIN_SETTINGS_HEADER: 'Setări de administrator', @@ -14,57 +16,81 @@ export const strings = { ADMIN_SETTINGS_USERS_ADD_HEADER: 'Adăugați un utilizator', ADMIN_SETTINGS_USERS_ADD_PLACEHOLDER: 'ion', ADMIN_SETTINGS_USERS_ADD_USERNAME: 'Nume de utilizator', - ADMIN_SETTINGS_USERS_ADD_ERROR_USERNAME_EMPTY: 'Numele de utilizator trebuie completat.', - ADMIN_SETTINGS_USERS_EDIT_DELETE_FAIL_ADMIN: 'Nu s-a putut șterge: utilizatorul este administrator.', - ADMIN_SETTINGS_USERS_EDIT_DELETE_SUCCESS: name => `Utilizatorul ${name} șters cu succes!`, - ADMIN_SETTINGS_USERS_EDIT_DEMOTE_NOT_ADMIN: 'utilizatorul nu este administrator', - ADMIN_SETTINGS_USERS_EDIT_DEMOTE_SELF: 'Nu puteți modifica tipul de acces pe care îl aveți.', - ADMIN_SETTINGS_USERS_EDIT_DEMOTE_SUCCESS: name => `${name} nu mai este administrator.`, - ADMIN_SETTINGS_USERS_EDIT_IMPERSONATE_SUCCESS: name => `Sunteți acum ${name}.`, - ADMIN_SETTINGS_USERS_EDIT_NO_USERNAME_PROVIDED: 'Nu a fost completat numele de utilizator.', - ADMIN_SETTINGS_USERS_EDIT_PROMOTE_ALREADY_ADMIN: 'utilizatorul este deja administrator', - ADMIN_SETTINGS_USERS_EDIT_PROMOTE_DEMOTE_NOT_FOUND: 'Utilizatorul nu a putut fi găsit.', - ADMIN_SETTINGS_USERS_EDIT_PROMOTE_SUCCESS: name => `${name} este acum un administrator.`, + ADMIN_SETTINGS_USERS_ADD_ERROR_USERNAME_EMPTY: + 'Numele de utilizator trebuie completat.', + ADMIN_SETTINGS_USERS_EDIT_DELETE_FAIL_ADMIN: + 'Nu s-a putut șterge: utilizatorul este administrator.', + ADMIN_SETTINGS_USERS_EDIT_DELETE_SUCCESS: (name) => + `Utilizatorul ${name} șters cu succes!`, + ADMIN_SETTINGS_USERS_EDIT_DEMOTE_NOT_ADMIN: + 'utilizatorul nu este administrator', + ADMIN_SETTINGS_USERS_EDIT_DEMOTE_SELF: + 'Nu puteți modifica tipul de acces pe care îl aveți.', + ADMIN_SETTINGS_USERS_EDIT_DEMOTE_SUCCESS: (name) => + `${name} nu mai este administrator.`, + ADMIN_SETTINGS_USERS_EDIT_IMPERSONATE_SUCCESS: (name) => + `Sunteți acum ${name}.`, + ADMIN_SETTINGS_USERS_EDIT_NO_USERNAME_PROVIDED: + 'Nu a fost completat numele de utilizator.', + ADMIN_SETTINGS_USERS_EDIT_PROMOTE_ALREADY_ADMIN: + 'utilizatorul este deja administrator', + ADMIN_SETTINGS_USERS_EDIT_PROMOTE_DEMOTE_NOT_FOUND: + 'Utilizatorul nu a putut fi găsit.', + ADMIN_SETTINGS_USERS_EDIT_PROMOTE_SUCCESS: (name) => + `${name} este acum un administrator.`, ADMIN_SETTINGS_USERS_EDIT_RENAMED_USER: 'Utilizator redenumit!', - ADMIN_SETTINGS_USERS_EDIT_SAME_NAME: 'Numele de utilizator este același ca cel nou.', + ADMIN_SETTINGS_USERS_EDIT_SAME_NAME: + 'Numele de utilizator este același ca cel nou.', ADMIN_SETTINGS_USERS_EDIT: 'Modificați', ADMIN_SETTINGS_USERS_HEADER: 'Utilizatori', ADMIN_SETTINGS_VERSION_INFO: 'Versiune', ADMIN_USER_EDIT_ACCOUNT_UNCONFIRMED: 'Acest cont încă nu a fost confirmat.', - ADMIN_USER_EDIT_ADMIN_ISADMIN: name => `${name} este administrator.`, - ADMIN_USER_EDIT_ADMIN_NOTADMIN: name => `${name} nu este administrator.`, + ADMIN_USER_EDIT_ADMIN_ISADMIN: (name) => `${name} este administrator.`, + ADMIN_USER_EDIT_ADMIN_NOTADMIN: (name) => `${name} nu este administrator.`, ADMIN_USER_EDIT_ADMIN: 'Administrator', ADMIN_USER_EDIT_CHANGE_NAME: 'Schimbați nume', ADMIN_USER_EDIT_CHANGE_USERNAME: 'Schimbați nume de utilizator', ADMIN_USER_EDIT_CONFIRMATION_LINK: 'Link de confirmare', ADMIN_USER_EDIT_DELETE_ADMIN: 'Utilizatorul este un administrator', ADMIN_USER_EDIT_DELETE_HEADER: 'Ștergere ireversibilă', - ADMIN_USER_EDIT_DELETE_USER: name => `Ștergeți utilizatorul ${name}`, - ADMIN_USER_EDIT_DEMOTE_SELF: 'Nu puteți modifica tipul de acces pe care îl aveți', - ADMIN_USER_EDIT_DEMOTE: name => `Retrogradați pe ${name}`, - ADMIN_USER_EDIT_EDITING_USER: name => `Editarea utilizatorului "${name}"`, + ADMIN_USER_EDIT_DELETE_USER: (name) => `Ștergeți utilizatorul ${name}`, + ADMIN_USER_EDIT_DEMOTE_SELF: + 'Nu puteți modifica tipul de acces pe care îl aveți', + ADMIN_USER_EDIT_DEMOTE: (name) => `Retrogradați pe ${name}`, + ADMIN_USER_EDIT_EDITING_USER: (name) => `Editarea utilizatorului "${name}"`, ADMIN_USER_EDIT_GENERATE_NEW_LINK: 'Generați un nou Link', - ADMIN_USER_EDIT_IMPERSONATE_BUTTON: name => `Conectați-vă ca ${name}`, + ADMIN_USER_EDIT_IMPERSONATE_BUTTON: (name) => `Conectați-vă ca ${name}`, ADMIN_USER_EDIT_IMPERSONATE_HEADER: 'Mod utilizator', - ADMIN_USER_EDIT_LINK_EXPIRY_FUTURE: fromNow => `Link-ul următor expiră în ${fromNow}`, // fromNow is localized by moment - ADMIN_USER_EDIT_LINK_EXPIRY_PAST: fromNow => `Link-ul următor a expirat acum ${fromNow}`, - ADMIN_USER_EDIT_PROMOTE: name => `Promovați ${name}`, - ADMIN_USER_EDIT_RESET_PASSWORD_HASLINK_EXPIRY_FUTURE: fromNow => `Expiră în ${fromNow}`, - ADMIN_USER_EDIT_RESET_PASSWORD_HASLINK_EXPIRY_PAST: fromNow => `A expirat acum ${fromNow}`, - ADMIN_USER_EDIT_RESET_PASSWORD_HASLINK: 'Există un link pentru resetarea parolei acestui utilizator.', + ADMIN_USER_EDIT_LINK_EXPIRY_FUTURE: (fromNow) => + `Link-ul următor expiră în ${fromNow}`, // fromNow is localized by moment + ADMIN_USER_EDIT_LINK_EXPIRY_PAST: (fromNow) => + `Link-ul următor a expirat acum ${fromNow}`, + ADMIN_USER_EDIT_PROMOTE: (name) => `Promovați ${name}`, + ADMIN_USER_EDIT_RESET_PASSWORD_HASLINK_EXPIRY_FUTURE: (fromNow) => + `Expiră în ${fromNow}`, + ADMIN_USER_EDIT_RESET_PASSWORD_HASLINK_EXPIRY_PAST: (fromNow) => + `A expirat acum ${fromNow}`, + ADMIN_USER_EDIT_RESET_PASSWORD_HASLINK: + 'Există un link pentru resetarea parolei acestui utilizator.', ADMIN_USER_EDIT_RESET_PASSWORD_HEADER: 'Resetați parola', - ADMIN_USER_EDIT_RESET_PASSWORD_LINK_CANCEL: 'Anulați link-ul pentru resetarea parolei', - ADMIN_USER_EDIT_RESET_PASSWORD_LINK_CREATE: 'Creați un link pentru resetarea parolei', - ADMIN_USER_EDIT_RESET_PASSWORD_LINK_REFRESH: 'Regenerați link-ul de resetare a parolei', + ADMIN_USER_EDIT_RESET_PASSWORD_LINK_CANCEL: + 'Anulați link-ul pentru resetarea parolei', + ADMIN_USER_EDIT_RESET_PASSWORD_LINK_CREATE: + 'Creați un link pentru resetarea parolei', + ADMIN_USER_EDIT_RESET_PASSWORD_LINK_REFRESH: + 'Regenerați link-ul de resetare a parolei', ADMIN_USER_EDIT_USERNAME: 'Nume de utilizator', BACK_BUTTON: 'Înapoi', - CONFIRM_ACCOUNT_EXPIRED: 'Link-ul dvs. de confirmare a expirat. Vă rugăm solicitați unul nou.', + CONFIRM_ACCOUNT_EXPIRED: + 'Link-ul dvs. de confirmare a expirat. Vă rugăm solicitați unul nou.', CONFIRM_ACCOUNT_HEADER_INVALID: `${_CC.config.siteTitle} | Link de Confirmare invalid`, CONFIRM_ACCOUNT_HEADER_VALID: `${_CC.config.siteTitle} | Confirmați cont`, - CONFIRM_ACCOUNT_INVALID: 'Acest link de confirmare nu este valabil, este posibil, contul să fi fost șters sau ca o parte din caractere să nu se fi copiat?', + CONFIRM_ACCOUNT_INVALID: + 'Acest link de confirmare nu este valabil, este posibil, contul să fi fost șters sau ca o parte din caractere să nu se fi copiat?', CONFIRM_ACCOUNT_SET_PW_BUTTON: `Alăturați-vă ${_CC.config.siteTitle}`, CONFIRM_ACCOUNT_SET_PW_PLACEHOLDER: 'parolă!', - CONFIRM_ACCOUNT_SET_PW_TEXT: name => `Bună ziua, ${name}! Vă rugăm, setați-vă parola aici.`, + CONFIRM_ACCOUNT_SET_PW_TEXT: (name) => + `Bună ziua, ${name}! Vă rugăm, setați-vă parola aici.`, CONFIRM_ACCOUNT_SUCCESS: `Bun venit la ${_CC.config.siteTitle}!`, LOGIN_BUTTON: 'Conectați-vă', LOGIN_PASSWORD_PLACEHOLDER: 'parolă!', @@ -77,11 +103,11 @@ export const strings = { NAVBAR_LOGOUT: 'Deconectați-vă', NAVBAR_PROFILE: 'Profil', NAVBAR_WISHLIST: 'List mea de dorințe', - NOTE_BACK: name => `Înapoi la lista de dorințe a lui ${name}`, + NOTE_BACK: (name) => `Înapoi la lista de dorințe a lui ${name}`, NOTE_GET_PRODUCT_DATA: 'Obțineți date despre produs', NOTE_GUARD: 'Utilizator invalid', NOTE_IMAGE_URL: 'URL Imagine', - NOTE_MISSING_PROP: prop => `Proprietatea ${prop} lipsește`, // not really possible to localize this unfortunately + NOTE_MISSING_PROP: (prop) => `Proprietatea ${prop} lipsește`, // not really possible to localize this unfortunately NOTE_NAME: 'Nume', NOTE_NOTE: 'Notă', NOTE_PRICE: 'Preț', @@ -101,16 +127,19 @@ export const strings = { PROFILE_PASSWORD_REQUIRED_NEW: 'Parola nouă trebuie completată', PROFILE_PASSWORD_REQUIRED_OLD: 'Parola veche trebuie completată', PROFILE_PASSWORD_SUCCESS: 'Modificările au fost salvate cu succes!', - PROFILE_PASSWORD_TITLE: name => `Setări Profil - Parolă - ${name}`, + PROFILE_PASSWORD_TITLE: (name) => `Setări Profil - Parolă - ${name}`, PROFILE_SAVE_PFP_DISABLED: 'Imaginile de profil au fost dezactivate.', PROFILE_SAVE_PFP_SUCCESS: 'Imagine de profil salvată!', PROFILE_SECURITY_CHANGE_PASSWORD: 'Schimbare parolă', PROFILE_SECURITY: 'Securitate', - PROFILE_TITLE: name => `Setări Profil - ${name}`, + PROFILE_TITLE: (name) => `Setări Profil - ${name}`, RESET_PASSWORD_BUTTON: 'Resetați parola', - RESET_PASSWORD_GREETING_EXPIRED: 'Acest link de resetare a expirat. Vă rugăm solicitați unul nou.', - RESET_PASSWORD_GREETING_INVALID: 'Acest link de resetare nu este valabil, este posibil ca link-ul să fi fost anulat sau ca o parte din caractere să nu se fi copiat?', - RESET_PASSWORD_GREETING_VALID: name => `Bună ziua, ${name}! Vă rugăm setați-vă parola.`, + RESET_PASSWORD_GREETING_EXPIRED: + 'Acest link de resetare a expirat. Vă rugăm solicitați unul nou.', + RESET_PASSWORD_GREETING_INVALID: + 'Acest link de resetare nu este valabil, este posibil ca link-ul să fi fost anulat sau ca o parte din caractere să nu se fi copiat?', + RESET_PASSWORD_GREETING_VALID: (name) => + `Bună ziua, ${name}! Vă rugăm setați-vă parola.`, RESET_PASSWORD_HEADER_INVALID: `${_CC.config.siteTitle} | Link de resetare invalid`, RESET_PASSWORD_HEADER_VALID: `${_CC.config.siteTitle} | Resetați parola`, RESET_PASSWORD_PASSWORD_PLACEHOLDER: 'parolă!', @@ -124,7 +153,8 @@ export const strings = { SETUP_USERNAME_PLACEHOLDER: 'ion', SETUP_USERNAME: 'Nume de utilizator', SUPPORTED_SITES_HEADER: 'Site-uri suportate', - SUPPORTED_SITES_TEXT: 'Este vreun site care lipsește sau nu funcționează corect? Sesizați problema aici! :)', + SUPPORTED_SITES_TEXT: + 'Este vreun site care lipsește sau nu funcționează corect? Sesizați problema aici! :)', UPDATE_NOTICE: (current, latest) => ` Folosiți o versiune învechită a Christmas Community. Este posibil să se fi adăugat noi funcții și rezolvat erori. Este recomandată actualizarea! :) @@ -137,10 +167,11 @@ export const strings = { Ultima versiune: ${latest} Acest mesaj poate fi văzut numai de administratori`, WISHLIST_ADD: 'Adăugați articol la lista de dorințe', - WISHLIST_ADDED_BY_USER: addedBy => `Adăugat de: ${addedBy}`, - WISHLIST_ADDED_BY_GUEST: "Utilizator Invitat", + WISHLIST_ADDED_BY_USER: (addedBy) => `Adăugat de: ${addedBy}`, + WISHLIST_ADDED_BY_GUEST: 'Utilizator Invitat', WISHLIST_ADDED_BY: 'Adăugat de', - WISHLIST_CONFLICT: 'Prea multe articole sunt adăugate în același timp. Vă rugăm încercați mai târziu.', + WISHLIST_CONFLICT: + 'Prea multe articole sunt adăugate în același timp. Vă rugăm încercați mai târziu.', WISHLIST_DELETE: 'Ștergeți', WISHLIST_EDIT_ITEM: 'Modificați Articol', WISHLIST_IMAGE: 'Imagine', @@ -160,7 +191,7 @@ export const strings = { WISHLIST_PLEDGE_ITEM: 'Rezervați cadoul', WISHLIST_PLEDGE_SUCCESS: 'Ați rezervat cadoul!', WISHLIST_PLEDGE: 'Rezervați cad', - WISHLIST_PLEDGED: pledgedBy => `Rezervat de către ${pledgedBy}`, + WISHLIST_PLEDGED: (pledgedBy) => `Rezervat de către ${pledgedBy}`, WISHLIST_PLEDGED_GUEST: 'Rezervat de către un vizitator', WISHLIST_PRICE: 'Preț', WISHLIST_REFRESH_GUARD: 'Utilizator Invalid', @@ -170,7 +201,8 @@ export const strings = { WISHLIST_REMOVE_MISSING: 'Aricolul nu a putut fi găsit', WISHLIST_REMOVE_SUCCESS: 'Șters cu succes din lista cu dorințe', WISHLIST_SUGGEST: 'Sugerați articol', - WISHLIST_TITLE: name => `${_CC.config.siteTitle} - Lista cu Dorințe - ${name}`, + WISHLIST_TITLE: (name) => + `${_CC.config.siteTitle} - Lista cu Dorințe - ${name}`, WISHLIST_UNPLEDGE_GUARD: 'Nu ați rezervat acest produs', // should never happen unless someone makes their own http requests WISHLIST_UNPLEDGE_MISSING: 'Nu s-a putut găsi produsul', WISHLIST_UNPLEDGE_SUCCESS: 'Ați anulat cu succes rezervarea cadoului!', @@ -178,7 +210,7 @@ export const strings = { WISHLIST_URL_LABEL: `URL-ul sau numele articolului (Site-uri Suportate)`, WISHLIST_URL_PLACEHOLDER: 'https://www.amazon.com/dp/B00ZV9RDKK', WISHLIST_URL_REQUIRED: 'URL-ul sau numele articolului trebuie completat', - WISHLISTS_COUNTS_SELF: name => `${name}: ???/???`, + WISHLISTS_COUNTS_SELF: (name) => `${name}: ???/???`, WISHLISTS_COUNTS: (name, pledged, total) => `${name}: ${pledged}/${total}`, - WISHLISTS_TITLE: `${_CC.config.siteTitle} - Liste cu Dorințe` + WISHLISTS_TITLE: `${_CC.config.siteTitle} - Liste cu Dorințe`, } as const diff --git a/src/languages/ru-ru.ts b/src/languages/ru-ru.ts index e668dfdb..fc440045 100644 --- a/src/languages/ru-ru.ts +++ b/src/languages/ru-ru.ts @@ -1,13 +1,16 @@ export const momentLocale = 'ru' as const -export const notTranslated = englishString => `${englishString} (ещё не переведено на русский язык)` +export const notTranslated = (englishString) => + `${englishString} (ещё не переведено на русский язык)` export const strings = { ADMIN_CLEAR_WISHLISTS_BUTTON: 'Очистить все списки желаний', - ADMIN_CLEAR_WISHLISTS_DESCRIPTION: 'Это мгновенно и безвозвратно удалит все списки желаний! Рекомендуется сделать резервную копию базы данных перед использованием этой функции.', + ADMIN_CLEAR_WISHLISTS_DESCRIPTION: + 'Это мгновенно и безвозвратно удалит все списки желаний! Рекомендуется сделать резервную копию базы данных перед использованием этой функции.', ADMIN_CLEAR_WISHLISTS_HEADER: 'Удаление списков желаний', ADMIN_SETTINGS_CLEARDB_BUTTON: 'Очистить списки желаний', - ADMIN_SETTINGS_CLEARDB_DESCRIPTION: 'Внимание: Эти опции уничтожают данные! Возможно, вам стоит сделать резервную копию базы данных перед использованием этих опций.', + ADMIN_SETTINGS_CLEARDB_DESCRIPTION: + 'Внимание: Эти опции уничтожают данные! Возможно, вам стоит сделать резервную копию базы данных перед использованием этих опций.', ADMIN_SETTINGS_CLEARDB_HEADER: 'Уничтожение данных', ADMIN_SETTINGS_CLEARDB_SUCCESS: 'Все списки желаний очищены.', ADMIN_SETTINGS_HEADER: 'Настройки администратора', @@ -15,57 +18,78 @@ export const strings = { ADMIN_SETTINGS_USERS_ADD_HEADER: 'Добавить пользователя', ADMIN_SETTINGS_USERS_ADD_PLACEHOLDER: 'иван', ADMIN_SETTINGS_USERS_ADD_USERNAME: 'Имя пользователя', - ADMIN_SETTINGS_USERS_ADD_ERROR_USERNAME_EMPTY: 'Имя пользователя не может быть пустым.', - ADMIN_SETTINGS_USERS_EDIT_DELETE_FAIL_ADMIN: 'Не удалось удалить: пользователь является администратором.', - ADMIN_SETTINGS_USERS_EDIT_DELETE_SUCCESS: name => `Пользователь ${name} успешно удалён`, - ADMIN_SETTINGS_USERS_EDIT_DEMOTE_NOT_ADMIN: 'Пользователь не является администратором', + ADMIN_SETTINGS_USERS_ADD_ERROR_USERNAME_EMPTY: + 'Имя пользователя не может быть пустым.', + ADMIN_SETTINGS_USERS_EDIT_DELETE_FAIL_ADMIN: + 'Не удалось удалить: пользователь является администратором.', + ADMIN_SETTINGS_USERS_EDIT_DELETE_SUCCESS: (name) => + `Пользователь ${name} успешно удалён`, + ADMIN_SETTINGS_USERS_EDIT_DEMOTE_NOT_ADMIN: + 'Пользователь не является администратором', ADMIN_SETTINGS_USERS_EDIT_DEMOTE_SELF: 'Вы не можете понизить свои права.', - ADMIN_SETTINGS_USERS_EDIT_DEMOTE_SUCCESS: name => `${name} больше не администратор.`, - ADMIN_SETTINGS_USERS_EDIT_IMPERSONATE_SUCCESS: name => `Вы теперь ${name}.`, + ADMIN_SETTINGS_USERS_EDIT_DEMOTE_SUCCESS: (name) => + `${name} больше не администратор.`, + ADMIN_SETTINGS_USERS_EDIT_IMPERSONATE_SUCCESS: (name) => `Вы теперь ${name}.`, ADMIN_SETTINGS_USERS_EDIT_NO_USERNAME_PROVIDED: 'Имя пользователя не указано', - ADMIN_SETTINGS_USERS_EDIT_PROMOTE_ALREADY_ADMIN: 'Пользователь уже является администратором', + ADMIN_SETTINGS_USERS_EDIT_PROMOTE_ALREADY_ADMIN: + 'Пользователь уже является администратором', ADMIN_SETTINGS_USERS_EDIT_PROMOTE_DEMOTE_NOT_FOUND: 'Пользователь не найден.', - ADMIN_SETTINGS_USERS_EDIT_PROMOTE_SUCCESS: name => `${name} теперь администратор.`, + ADMIN_SETTINGS_USERS_EDIT_PROMOTE_SUCCESS: (name) => + `${name} теперь администратор.`, ADMIN_SETTINGS_USERS_EDIT_RENAMED_USER: 'Пользователь переименован!', - ADMIN_SETTINGS_USERS_EDIT_SAME_NAME: 'Имя пользователя совпадает с новым именем пользователя.', + ADMIN_SETTINGS_USERS_EDIT_SAME_NAME: + 'Имя пользователя совпадает с новым именем пользователя.', ADMIN_SETTINGS_USERS_EDIT: 'Редактировать', ADMIN_SETTINGS_USERS_HEADER: 'Пользователи', ADMIN_SETTINGS_VERSION_INFO: 'Информация о версии', - ADMIN_USER_EDIT_ACCOUNT_UNCONFIRMED: "Этот аккаунт не подтверждён.", - ADMIN_USER_EDIT_ADMIN_ISADMIN: name => `${name} является администратором.`, - ADMIN_USER_EDIT_ADMIN_NOTADMIN: name => `${name} не является администратором.`, + ADMIN_USER_EDIT_ACCOUNT_UNCONFIRMED: 'Этот аккаунт не подтверждён.', + ADMIN_USER_EDIT_ADMIN_ISADMIN: (name) => `${name} является администратором.`, + ADMIN_USER_EDIT_ADMIN_NOTADMIN: (name) => + `${name} не является администратором.`, ADMIN_USER_EDIT_ADMIN: 'Администратор', ADMIN_USER_EDIT_CHANGE_NAME: 'Изменить имя', ADMIN_USER_EDIT_CHANGE_USERNAME: 'Изменить имя пользователя', ADMIN_USER_EDIT_CONFIRMATION_LINK: 'Ссылка для подтверждения', ADMIN_USER_EDIT_DELETE_ADMIN: 'Пользователь является администратором', ADMIN_USER_EDIT_DELETE_HEADER: 'Безвозвратное удаление', - ADMIN_USER_EDIT_DELETE_USER: name => `Удалить пользователя ${name}`, + ADMIN_USER_EDIT_DELETE_USER: (name) => `Удалить пользователя ${name}`, ADMIN_USER_EDIT_DEMOTE_SELF: 'Вы не можете понизить свои права', - ADMIN_USER_EDIT_DEMOTE: name => `Понизить ${name}`, - ADMIN_USER_EDIT_EDITING_USER: name => `Редактирование пользователя "${name}"`, + ADMIN_USER_EDIT_DEMOTE: (name) => `Понизить ${name}`, + ADMIN_USER_EDIT_EDITING_USER: (name) => + `Редактирование пользователя "${name}"`, ADMIN_USER_EDIT_GENERATE_NEW_LINK: 'Сгенерировать новую ссылку', - ADMIN_USER_EDIT_IMPERSONATE_BUTTON: name => `Войти как ${name}`, + ADMIN_USER_EDIT_IMPERSONATE_BUTTON: (name) => `Войти как ${name}`, ADMIN_USER_EDIT_IMPERSONATE_HEADER: 'Войти как пользователь', - ADMIN_USER_EDIT_LINK_EXPIRY_FUTURE: fromNow => `Следующая ссылка истекает ${fromNow}`, - ADMIN_USER_EDIT_LINK_EXPIRY_PAST: fromNow => `Следующая ссылка истекла ${fromNow}`, - ADMIN_USER_EDIT_PROMOTE: name => `Повысить ${name}`, - ADMIN_USER_EDIT_RESET_PASSWORD_HASLINK_EXPIRY_FUTURE: fromNow => `Она истекает ${fromNow}`, - ADMIN_USER_EDIT_RESET_PASSWORD_HASLINK_EXPIRY_PAST: fromNow => `Она истекла ${fromNow}`, - ADMIN_USER_EDIT_RESET_PASSWORD_HASLINK: 'Для этого пользователя есть ссылка для сброса пароля.', + ADMIN_USER_EDIT_LINK_EXPIRY_FUTURE: (fromNow) => + `Следующая ссылка истекает ${fromNow}`, + ADMIN_USER_EDIT_LINK_EXPIRY_PAST: (fromNow) => + `Следующая ссылка истекла ${fromNow}`, + ADMIN_USER_EDIT_PROMOTE: (name) => `Повысить ${name}`, + ADMIN_USER_EDIT_RESET_PASSWORD_HASLINK_EXPIRY_FUTURE: (fromNow) => + `Она истекает ${fromNow}`, + ADMIN_USER_EDIT_RESET_PASSWORD_HASLINK_EXPIRY_PAST: (fromNow) => + `Она истекла ${fromNow}`, + ADMIN_USER_EDIT_RESET_PASSWORD_HASLINK: + 'Для этого пользователя есть ссылка для сброса пароля.', ADMIN_USER_EDIT_RESET_PASSWORD_HEADER: 'Сброс пароля', - ADMIN_USER_EDIT_RESET_PASSWORD_LINK_CANCEL: 'Отменить ссылку для сброса пароля', - ADMIN_USER_EDIT_RESET_PASSWORD_LINK_CREATE: 'Создать ссылку для сброса пароля', - ADMIN_USER_EDIT_RESET_PASSWORD_LINK_REFRESH: 'Обновить ссылку для сброса пароля', + ADMIN_USER_EDIT_RESET_PASSWORD_LINK_CANCEL: + 'Отменить ссылку для сброса пароля', + ADMIN_USER_EDIT_RESET_PASSWORD_LINK_CREATE: + 'Создать ссылку для сброса пароля', + ADMIN_USER_EDIT_RESET_PASSWORD_LINK_REFRESH: + 'Обновить ссылку для сброса пароля', ADMIN_USER_EDIT_USERNAME: 'Имя пользователя', BACK_BUTTON: 'Назад', - CONFIRM_ACCOUNT_EXPIRED: 'Ваша ссылка для подтверждения истекла. Пожалуйста, запросите новую.', + CONFIRM_ACCOUNT_EXPIRED: + 'Ваша ссылка для подтверждения истекла. Пожалуйста, запросите новую.', CONFIRM_ACCOUNT_HEADER_INVALID: `${_CC.config.siteTitle} | Ссылка для подтверждения недействительна`, CONFIRM_ACCOUNT_HEADER_VALID: `${_CC.config.siteTitle} | Подтверждение аккаунта`, - CONFIRM_ACCOUNT_INVALID: "Эта ссылка для подтверждения недействительна. Возможно, аккаунт был удалён, или символы в конце ссылки оказались обрезаны?", + CONFIRM_ACCOUNT_INVALID: + 'Эта ссылка для подтверждения недействительна. Возможно, аккаунт был удалён, или символы в конце ссылки оказались обрезаны?', CONFIRM_ACCOUNT_SET_PW_BUTTON: `Присоединиться к ${_CC.config.siteTitle}`, CONFIRM_ACCOUNT_SET_PW_PLACEHOLDER: 'п@р0ль!', - CONFIRM_ACCOUNT_SET_PW_TEXT: name => `Здравствуйте, ${name}! Пожалуйста, установите пароль.`, + CONFIRM_ACCOUNT_SET_PW_TEXT: (name) => + `Здравствуйте, ${name}! Пожалуйста, установите пароль.`, CONFIRM_ACCOUNT_SUCCESS: `Добро пожаловать в ${_CC.config.siteTitle}!`, LOGIN_BUTTON: 'Войти', LOGIN_OIDC_BUTTON: `Войти через ${_CC.config.oidcProviderName}`, @@ -80,18 +104,19 @@ export const strings = { LOGIN_SSO_LINK_FAILURE: 'Не удалось привязать аккаунт', LOGIN_SSO_UNLINK_SUCCESS: 'Аккаунт успешно отвязан', LOGIN_SSO_UNLINK_FAILURE: 'Не удалось отвязать аккаунт', - LOGIN_SSO_LINK_FAILURE_ACCOUNT_EXISTS: 'Этот внешний аккаунт уже привязан к другому аккаунту на этом сайте!', + LOGIN_SSO_LINK_FAILURE_ACCOUNT_EXISTS: + 'Этот внешний аккаунт уже привязан к другому аккаунту на этом сайте!', LOGOUT_BUTTON: 'Выйти', NAVBAR_ADMIN: 'Настройки администратора', NAVBAR_LOGIN: 'Войти', NAVBAR_LOGOUT: 'Выйти', NAVBAR_PROFILE: 'Профиль', NAVBAR_WISHLIST: 'Мой список желаний', - NOTE_BACK: name => `Назад к списку желаний ${name}`, + NOTE_BACK: (name) => `Назад к списку желаний ${name}`, NOTE_GET_PRODUCT_DATA: 'Получить данные о предмете', NOTE_GUARD: 'Неверный пользователь', NOTE_IMAGE_URL: 'URL изображения', - NOTE_MISSING_PROP: prop => `Отсутствует свойство ${prop}`, + NOTE_MISSING_PROP: (prop) => `Отсутствует свойство ${prop}`, NOTE_NAME: 'Название', NOTE_NOTE: 'Примечание', NOTE_PRICE: 'Цена', @@ -115,7 +140,7 @@ export const strings = { PROFILE_PASSWORD_REQUIRED_NEW: 'Требуется новый пароль', PROFILE_PASSWORD_REQUIRED_OLD: 'Требуется старый пароль', PROFILE_PASSWORD_SUCCESS: 'Изменения успешно сохранены!', - PROFILE_PASSWORD_TITLE: name => `Настройки профиля - Пароль - ${name}`, + PROFILE_PASSWORD_TITLE: (name) => `Настройки профиля - Пароль - ${name}`, PROFILE_PHONE_MODEL: 'Модель телефона', PROFILE_RING_SIZE: 'Размер кольца', PROFILE_SAVE_PFP_DISABLED: 'Изображения профиля отключены.', @@ -128,12 +153,15 @@ export const strings = { PROFILE_SHIRT_SIZE: 'Размер рубашки', PROFILE_SHOE_SIZE: 'Размер обуви', PROFILE_SWEATER_SIZE: 'Размер блузки/свитера', - PROFILE_TITLE: name => `Настройки профиля - ${name}`, + PROFILE_TITLE: (name) => `Настройки профиля - ${name}`, PROFILE_UPDATE_INFO_SUCCESS: 'Общедоступная информация обновлена!', RESET_PASSWORD_BUTTON: 'Сбросить пароль', - RESET_PASSWORD_GREETING_EXPIRED: 'Ссылка для сброса пароля истекла. Пожалуйста, запросите новую.', - RESET_PASSWORD_GREETING_INVALID: "Эта ссылка для сброса пароля недействительна. Возможно, ссылка была отменена, или символы в конце ссылки оказались обрезаны?", - RESET_PASSWORD_GREETING_VALID: name => `Здравствуйте, ${name}! Пожалуйста, установите пароль.`, + RESET_PASSWORD_GREETING_EXPIRED: + 'Ссылка для сброса пароля истекла. Пожалуйста, запросите новую.', + RESET_PASSWORD_GREETING_INVALID: + 'Эта ссылка для сброса пароля недействительна. Возможно, ссылка была отменена, или символы в конце ссылки оказались обрезаны?', + RESET_PASSWORD_GREETING_VALID: (name) => + `Здравствуйте, ${name}! Пожалуйста, установите пароль.`, RESET_PASSWORD_HEADER_INVALID: `${_CC.config.siteTitle} | Ссылка для сброса пароля недействительна`, RESET_PASSWORD_HEADER_VALID: `${_CC.config.siteTitle} | Сброс пароля`, RESET_PASSWORD_PASSWORD_PLACEHOLDER: 'п@р0ль!', @@ -147,7 +175,8 @@ export const strings = { SETUP_USERNAME_PLACEHOLDER: 'иван', SETUP_USERNAME: 'Имя пользователя', SUPPORTED_SITES_HEADER: 'Поддерживаемые сайты', - SUPPORTED_SITES_TEXT: 'Отсутствует или не работает сайт? Откройте запрос здесь! :)', + SUPPORTED_SITES_TEXT: + 'Отсутствует или не работает сайт? Откройте запрос здесь! :)', UPDATE_NOTICE: (current, latest) => ` Christmas Community устарело. Возможно, появились новые функции или исправления ошибок. Рассмотрите возможность обновления! :) @@ -161,14 +190,15 @@ export const strings = { Это сообщение видно только администраторам`, WISHLIST_ADD: 'Добавить предмет в список желаний', WISHLIST_ADD_NEW: 'Добавить предмет', - WISHLIST_ADDED_BY_USER: addedBy => `Добавлено: ${addedBy}`, - WISHLIST_ADDED_BY_GUEST: "Гостевой Пользователь", + WISHLIST_ADDED_BY_USER: (addedBy) => `Добавлено: ${addedBy}`, + WISHLIST_ADDED_BY_GUEST: 'Гостевой Пользователь', WISHLIST_ADDED_BY: 'Добавлено', WISHLIST_ADDED_ITEM_TO_OWN_WISHLIST: 'Предмет добавлен в список желаний.', WISHLIST_CONFLICT: 'Предметы добавляются слишком быстро. Попробуйте снова.', WISHLIST_DELETE: 'Удалить', WISHLIST_EDIT_ITEM: 'Редактировать предмет', - WISHLIST_FETCH_FAIL: 'Не удалось загрузить список желаний - существует ли данный пользователь?', + WISHLIST_FETCH_FAIL: + 'Не удалось загрузить список желаний - существует ли данный пользователь?', WISHLIST_IMAGE: 'Изображение', WISHLIST_ITEM_MISSING: 'Не удалось найти предмет', WISHLIST_MOVE_DOWN: 'Переместить ниже', @@ -190,9 +220,10 @@ export const strings = { WISHLIST_PLEDGE_ITEM: 'Зарезервировать предмет', WISHLIST_PLEDGE_SUCCESS: 'Предмет успешно зарезервирован!', WISHLIST_PLEDGE: 'Зарезервировать', - WISHLIST_PLEDGED: pledgedBy => `Зарезервирован ${pledgedBy}`, + WISHLIST_PLEDGED: (pledgedBy) => `Зарезервирован ${pledgedBy}`, WISHLIST_PLEDGED_GUEST: 'Зарезервирован незарегистрированным пользователем', - WISHLIST_PLEDGED_ITEM_FOR_USER: user => `Зарезервирован предмет для ${user}.`, + WISHLIST_PLEDGED_ITEM_FOR_USER: (user) => + `Зарезервирован предмет для ${user}.`, WISHLIST_PRICE: 'Цена', WISHLIST_REFRESH_GUARD: 'Неверный пользователь', WISHLIST_REFRESH_NO_URL: 'У предмета нет URL.', @@ -200,14 +231,15 @@ export const strings = { WISHLIST_REMOVE_GUARD: 'Неверный пользователь', WISHLIST_REMOVE_SUCCESS: 'Успешно удалено из списка желаний', WISHLIST_SUGGEST: 'Предложить предмет', - WISHLIST_TITLE: name => `${_CC.config.siteTitle} - Список желаний - ${name}`, + WISHLIST_TITLE: (name) => + `${_CC.config.siteTitle} - Список желаний - ${name}`, WISHLIST_UNPLEDGE_GUARD: 'Вы не зарезервировали этот предмет', WISHLIST_UNPLEDGE_SUCCESS: 'Резервация предмета успешно отменена!', WISHLIST_UNPLEDGE: 'Отменить резервацию', WISHLIST_URL_LABEL: `URL или название предмета (Поддерживаемые сайты)`, WISHLIST_URL_PLACEHOLDER: 'https://www.amazon.com/dp/B00ZV9RDKK', WISHLIST_URL_REQUIRED: 'Требуется URL или название предмета', - WISHLISTS_COUNTS_SELF: name => `${name}: ???/???`, + WISHLISTS_COUNTS_SELF: (name) => `${name}: ???/???`, WISHLISTS_COUNTS: (name, pledged, total) => `${name}: ${pledged}/${total}`, - WISHLISTS_TITLE: `${_CC.config.siteTitle} - Списки желаний` -} as const \ No newline at end of file + WISHLISTS_TITLE: `${_CC.config.siteTitle} - Списки желаний`, +} as const diff --git a/src/logger.ts b/src/logger.ts index 38750c1c..cbd6014f 100644 --- a/src/logger.ts +++ b/src/logger.ts @@ -3,15 +3,19 @@ const colors = { log: 'blue', success: 'green', error: 'red', - warn: 'yellow' + warn: 'yellow', } as const -const Logger: { [p in keyof typeof colors]: (type, msg) => void } = Object.fromEntries( - Object.entries(colors).map(([method, color]) => { - return [method, function (type, msg) { - console.log(chalk.keyword(color)(`[ ${type.toUpperCase()} ] ${msg}`)) - }] - }) -) as any +const Logger: { [p in keyof typeof colors]: (type, msg) => void } = + Object.fromEntries( + Object.entries(colors).map(([method, color]) => { + return [ + method, + function (type, msg) { + console.log(chalk.keyword(color)(`[ ${type.toUpperCase()} ] ${msg}`)) + }, + ] + }), + ) as any export default Logger diff --git a/src/manager.js b/src/manager.js index 6644443f..839d98ce 100644 --- a/src/manager.js +++ b/src/manager.js @@ -3,21 +3,21 @@ import { spawn } from 'child_process' const PACKAGENAME = 'get-product-name' -async function isOutdated () { +async function isOutdated() { const command = `npm outdated ${PACKAGENAME} --json || true` const npm = await exec(command) const data = JSON.parse(npm.stdout) return data[PACKAGENAME]?.current !== data[PACKAGENAME]?.wanted } -async function updateGPD () { +async function updateGPD() { // https://blog.cloud66.com/using-node-with-docker/ const command = `mv ./node_modules ./node_modules.tmp && mv ./node_modules.tmp ./node_modules && npm update ${PACKAGENAME}` await exec(command) } let cc = null -function spawnCC () { +function spawnCC() { cc = spawn('node', ['built/index.js'], { env: process.env }) cc.on('exit', spawnCC) cc.stdout.pipe(process.stdout) @@ -25,17 +25,26 @@ function spawnCC () { } if (process.env.UPDATE_GPD !== 'false') { - async function update () { + async function update() { if (await isOutdated()) { try { await updateGPD() - } catch {} + } catch { + // Failing to update is fine, probably means NPM down or something + } if (cc) cc.kill('sigint') - cc.once('exit', () => { console.log(`Updated ${PACKAGENAME}`) }) + cc.once('exit', () => { + console.log(`Updated ${PACKAGENAME}`) + }) } } void update() - setInterval(() => { void update() }, 1000 * 60 * 60) // 1 hour + setInterval( + () => { + void update() + }, + 1000 * 60 * 60, + ) // 1 hour } spawnCC() diff --git a/src/middlewares/publicRoute.js b/src/middlewares/publicRoute.js index 2276265b..0afd168c 100644 --- a/src/middlewares/publicRoute.js +++ b/src/middlewares/publicRoute.js @@ -1,10 +1,11 @@ import verifyAuth from './verifyAuth.js' -const publicMiddleware = () => global._CC.config.wishlist.public - ? (req, res, next) => { - if (!req.user) req.user = { _id: '_CCUNKNOWN' } - next() - } - : verifyAuth() +const publicMiddleware = () => + global._CC.config.wishlist.public + ? (req, _res, next) => { + if (!req.user) req.user = { _id: '_CCUNKNOWN' } + next() + } + : verifyAuth() export default publicMiddleware diff --git a/src/middlewares/verifyAuth.js b/src/middlewares/verifyAuth.js index 32ad5256..1ea66f24 100644 --- a/src/middlewares/verifyAuth.js +++ b/src/middlewares/verifyAuth.js @@ -11,11 +11,17 @@ export default function (options) { return res.send('auth fail') } if (authed) return next() - if (_CC.config.guestPassword && (req.query.pw === _CC.config.guestPassword || req.cookies[COOKIE_NAME] === _CC.config.guestPassword)) { + if ( + _CC.config.guestPassword && + (req.query.pw === _CC.config.guestPassword || + req.cookies[COOKIE_NAME] === _CC.config.guestPassword) + ) { req.user = { - _id: '_CCUNKNOWN' + _id: '_CCUNKNOWN', } - res.cookie(COOKIE_NAME, _CC.config.guestPassword, { maxAge: ROUGHLY_ONE_YEAR_IN_MILLISECONDS }) + res.cookie(COOKIE_NAME, _CC.config.guestPassword, { + maxAge: ROUGHLY_ONE_YEAR_IN_MILLISECONDS, + }) return next() } res.redirect(options.failureRedirect || _CC.config.defaultFailureRedirect) diff --git a/src/routes/adminSettings/index.js b/src/routes/adminSettings/index.js index 4f492c07..6ec88624 100644 --- a/src/routes/adminSettings/index.js +++ b/src/routes/adminSettings/index.js @@ -17,10 +17,15 @@ export default function ({ db, ensurePfp }) { router.get('/', verifyAuth(), (req, res) => { if (!req.user.admin) return res.redirect('/') db.allDocs({ include_docs: true }) - .then(docs => { - res.render('adminSettings', { title: _CC.lang('ADMIN_SETTINGS_HEADER'), users: docs.rows }) + .then((docs) => { + res.render('adminSettings', { + title: _CC.lang('ADMIN_SETTINGS_HEADER'), + users: docs.rows, + }) + }) + .catch((err) => { + throw err }) - .catch(err => { throw err }) }) router.post('/add', verifyAuth(), async (req, res) => { @@ -33,10 +38,10 @@ export default function ({ db, ensurePfp }) { .then((docs) => { res.render('adminSettings', { add_user_error: _CC.lang( - 'ADMIN_SETTINGS_USERS_ADD_ERROR_USERNAME_EMPTY' + 'ADMIN_SETTINGS_USERS_ADD_ERROR_USERNAME_EMPTY', ), title: _CC.lang('ADMIN_SETTINGS_HEADER'), - users: docs.rows + users: docs.rows, }) }) .catch((err) => { @@ -50,7 +55,7 @@ export default function ({ db, ensurePfp }) { wishlist: [], signupToken: nanoid(SECRET_TOKEN_LENGTH), - expiry: new Date().getTime() + SECRET_TOKEN_LIFETIME + expiry: new Date().getTime() + SECRET_TOKEN_LIFETIME, }) await ensurePfp(username) @@ -64,14 +69,18 @@ export default function ({ db, ensurePfp }) { res.render('admin-user-edit', { user: doc }) }) - router.post('/edit/refresh-signup-token/:userToEdit', verifyAuth(), async (req, res) => { - if (!req.user.admin) return res.redirect('/') - const doc = await db.get(req.params.userToEdit) - doc.signupToken = nanoid(SECRET_TOKEN_LENGTH) - doc.expiry = new Date().getTime() + SECRET_TOKEN_LIFETIME - await db.put(doc) - return res.redirect(`/admin-settings/edit/${req.params.userToEdit}`) - }) + router.post( + '/edit/refresh-signup-token/:userToEdit', + verifyAuth(), + async (req, res) => { + if (!req.user.admin) return res.redirect('/') + const doc = await db.get(req.params.userToEdit) + doc.signupToken = nanoid(SECRET_TOKEN_LENGTH) + doc.expiry = new Date().getTime() + SECRET_TOKEN_LIFETIME + await db.put(doc) + return res.redirect(`/admin-settings/edit/${req.params.userToEdit}`) + }, + ) router.post('/edit/resetpw/:userToEdit', verifyAuth(), async (req, res) => { if (!req.user.admin) return res.redirect('/') @@ -82,19 +91,27 @@ export default function ({ db, ensurePfp }) { return res.redirect(`/admin-settings/edit/${req.params.userToEdit}`) }) - router.post('/edit/cancelresetpw/:userToEdit', verifyAuth(), async (req, res) => { - if (!req.user.admin) return res.redirect('/') - const doc = await db.get(req.params.userToEdit) - delete doc.pwToken - delete doc.pwExpiry - await db.put(doc) - return res.redirect(`/admin-settings/edit/${req.params.userToEdit}`) - }) + router.post( + '/edit/cancelresetpw/:userToEdit', + verifyAuth(), + async (req, res) => { + if (!req.user.admin) return res.redirect('/') + const doc = await db.get(req.params.userToEdit) + delete doc.pwToken + delete doc.pwExpiry + await db.put(doc) + return res.redirect(`/admin-settings/edit/${req.params.userToEdit}`) + }, + ) router.post('/edit/rename/:userToRename', verifyAuth(), async (req, res) => { - if (!req.user.admin && req.user._id !== req.params.userToRename) return res.redirect('/') + if (!req.user.admin && req.user._id !== req.params.userToRename) + return res.redirect('/') if (!req.body.newUsername) { - req.flash('error', _CC.lang('ADMIN_SETTINGS_USERS_EDIT_NO_USERNAME_PROVIDED')) + req.flash( + 'error', + _CC.lang('ADMIN_SETTINGS_USERS_EDIT_NO_USERNAME_PROVIDED'), + ) return res.redirect(`/admin-settings/edit/${req.params.userToRename}`) } if (req.body.newUsername === req.params.userToRename) { @@ -139,36 +156,59 @@ export default function ({ db, ensurePfp }) { } }) - router.post('/edit/impersonate/:userToEdit', verifyAuth(), async (req, res) => { - if (!req.user.admin) return res.redirect('/') - req.login({ _id: req.params.userToEdit }, err => { - if (err) { - req.flash('error', err.message) - return res.redirect(`/admin-settings/edit/${req.params.userToEdit}`) - } - req.flash('success', _CC.lang('ADMIN_SETTINGS_USERS_EDIT_IMPERSONATE_SUCCESS', req.params.userToEdit)) - res.redirect('/') - }) - }) + router.post( + '/edit/impersonate/:userToEdit', + verifyAuth(), + async (req, res) => { + if (!req.user.admin) return res.redirect('/') + req.login({ _id: req.params.userToEdit }, (err) => { + if (err) { + req.flash('error', err.message) + return res.redirect(`/admin-settings/edit/${req.params.userToEdit}`) + } + req.flash( + 'success', + _CC.lang( + 'ADMIN_SETTINGS_USERS_EDIT_IMPERSONATE_SUCCESS', + req.params.userToEdit, + ), + ) + res.redirect('/') + }) + }, + ) - router.post('/edit/promote/:userToPromote', verifyAuth(), async (req, res) => { - if (!req.user.admin) return res.redirect('/') - const user = await db.get(req.params.userToPromote) - if (!user) { - req.flash('error', _CC.lang('ADMIN_SETTINGS_USERS_EDIT_PROMOTE_DEMOTE_NOT_FOUND')) - return res.redirect(`/admin-settings/edit/${req.params.userToPromote}`) - } - if (user.admin) { - req.flash('error', _CC.lang('ADMIN_SETTINGS_USERS_EDIT_PROMOTE_ALREADY_ADMIN')) - return res.redirect(`/admin-settings/edit/${req.params.userToPromote}`) - } + router.post( + '/edit/promote/:userToPromote', + verifyAuth(), + async (req, res) => { + if (!req.user.admin) return res.redirect('/') + const user = await db.get(req.params.userToPromote) + if (!user) { + req.flash( + 'error', + _CC.lang('ADMIN_SETTINGS_USERS_EDIT_PROMOTE_DEMOTE_NOT_FOUND'), + ) + return res.redirect(`/admin-settings/edit/${req.params.userToPromote}`) + } + if (user.admin) { + req.flash( + 'error', + _CC.lang('ADMIN_SETTINGS_USERS_EDIT_PROMOTE_ALREADY_ADMIN'), + ) + return res.redirect(`/admin-settings/edit/${req.params.userToPromote}`) + } - user.admin = true - await db.put(user) + user.admin = true + await db.put(user) - req.flash('success', _CC.lang('ADMIN_SETTINGS_USERS_EDIT_PROMOTE_SUCCESS', user._id)) - return res.redirect(`/admin-settings/edit/${req.params.userToPromote}`) - }) + req.flash( + 'success', + _CC.lang('ADMIN_SETTINGS_USERS_EDIT_PROMOTE_SUCCESS', user._id), + ) + return res.redirect(`/admin-settings/edit/${req.params.userToPromote}`) + }, + ) router.post('/edit/demote/:userToDemote', verifyAuth(), async (req, res) => { if (!req.user.admin) return res.redirect('/') @@ -180,7 +220,10 @@ export default function ({ db, ensurePfp }) { const user = await db.get(req.params.userToDemote) if (!user) { - req.flash('error', _CC.lang('ADMIN_SETTINGS_USERS_EDIT_PROMOTE_DEMOTE_NOT_FOUND')) + req.flash( + 'error', + _CC.lang('ADMIN_SETTINGS_USERS_EDIT_PROMOTE_DEMOTE_NOT_FOUND'), + ) return res.redirect(`/admin-settings/edit/${req.params.userToDemote}`) } if (!user.admin) { @@ -191,7 +234,10 @@ export default function ({ db, ensurePfp }) { user.admin = false await db.put(user) - req.flash('success', _CC.lang('ADMIN_SETTINGS_USERS_EDIT_DEMOTE_SUCCESS', user._id)) + req.flash( + 'success', + _CC.lang('ADMIN_SETTINGS_USERS_EDIT_DEMOTE_SUCCESS', user._id), + ) return res.redirect(`/admin-settings/edit/${req.params.userToDemote}`) }) @@ -201,7 +247,10 @@ export default function ({ db, ensurePfp }) { const userToRemove = await db.get(req.params.userToRemove) if (userToRemove.admin) { - req.flash('error', _CC.lang('ADMIN_SETTINGS_USERS_EDIT_DELETE_FAIL_ADMIN')) + req.flash( + 'error', + _CC.lang('ADMIN_SETTINGS_USERS_EDIT_DELETE_FAIL_ADMIN'), + ) return res.redirect('/admin-settings') } await db.remove(userToRemove) @@ -218,7 +267,13 @@ export default function ({ db, ensurePfp }) { } } - req.flash('success', _CC.lang('ADMIN_SETTINGS_USERS_EDIT_DELETE_SUCCESS', req.params.userToRemove)) + req.flash( + 'success', + _CC.lang( + 'ADMIN_SETTINGS_USERS_EDIT_DELETE_SUCCESS', + req.params.userToRemove, + ), + ) } catch (error) { req.flash('error', `${error}`) } diff --git a/src/routes/api/index.js b/src/routes/api/index.js index 8849e98c..86c4c599 100644 --- a/src/routes/api/index.js +++ b/src/routes/api/index.js @@ -3,18 +3,18 @@ import Wishlist from './wishlist/index.js' import verifyAuth from '../../middlewares/verifyAuth.js' import express from 'express' -export default function ({ db, config }) { +export default function () { const router = express.Router() router.use(verifyAuth()) - router.get('/', (req, res) => { + router.get('/', (_req, res) => { res.send({ - api: true + api: true, }) }) - router.use('/wishlist', Wishlist({ db })) + router.use('/wishlist', Wishlist()) return router } diff --git a/src/routes/api/wishlist/index.js b/src/routes/api/wishlist/index.js index 6699db4e..9c200460 100644 --- a/src/routes/api/wishlist/index.js +++ b/src/routes/api/wishlist/index.js @@ -1,11 +1,11 @@ import express from 'express' -export default function ({ db }) { +export default function () { const router = express.Router() - router.get('/', (req, res) => { + router.get('/', (_req, res) => { res.send({ - route: 'wishlist' + route: 'wishlist', }) }) diff --git a/src/routes/confirm-account/index.js b/src/routes/confirm-account/index.js index 7fe3acdc..1f590d06 100644 --- a/src/routes/confirm-account/index.js +++ b/src/routes/confirm-account/index.js @@ -5,19 +5,20 @@ export default function (db) { const router = express.Router() router.get('/:code', async (req, res) => { - const row = (await db.allDocs({ include_docs: true })) - .rows - .find(({ doc }) => doc.signupToken === req.params.code) + const row = (await db.allDocs({ include_docs: true })).rows.find( + ({ doc }) => doc.signupToken === req.params.code, + ) res.render('confirm-account', { doc: row ? row.doc : undefined }) }) router.post('/:code', async (req, res) => { - const { doc } = (await db.allDocs({ include_docs: true })) - .rows - .find(({ doc }) => doc.signupToken === req.params.code) + const { doc } = (await db.allDocs({ include_docs: true })).rows.find( + ({ doc }) => doc.signupToken === req.params.code, + ) - if (doc.expiry < new Date().getTime()) return res.redirect(`/confirm-account/${req.params.code}`) + if (doc.expiry < new Date().getTime()) + return res.redirect(`/confirm-account/${req.params.code}`) bcrypt.hash(req.body.password, null, null, async (err, passwordHash) => { if (err) throw err @@ -28,7 +29,7 @@ export default function (db) { await db.put(doc) - req.login({ _id: doc._id }, err => { + req.login({ _id: doc._id }, (err) => { if (err) { console.log(err) req.flash('error', err.message) diff --git a/src/routes/index.js b/src/routes/index.js index c6a4aa82..efe7e9d8 100644 --- a/src/routes/index.js +++ b/src/routes/index.js @@ -17,7 +17,7 @@ import ManifestJson from './manifest.json/index.js' import OIDC from './oidc/index.js' export default ({ db, config }) => { - async function ensurePfp (username) { + async function ensurePfp(username) { if (!config.pfp) return const user = await db.get(username) if (user.pfp) return @@ -25,7 +25,9 @@ export default ({ db, config }) => { const { rows } = await db.allDocs({ include_docs: true }) const unfilteredPool = await fs.readdir('src/static/img/default-pfps') - const filteredPool = unfilteredPool.filter(file => !rows.find(row => row.doc.pfp?.default === file)) + const filteredPool = unfilteredPool.filter( + (file) => !rows.find((row) => row.doc.pfp?.default === file), + ) const pool = filteredPool.length ? filteredPool : unfilteredPool user.pfp = { default: _CC._.sample(pool) } @@ -43,8 +45,9 @@ export default ({ db, config }) => { router.use('/', express.static(path.resolve('./src/static'))) - router.get('/', - async (req, res, next) => { + router.get( + '/', + async (_req, res, next) => { const dbInfo = await db.info() if (dbInfo.doc_count === 0) { res.redirect('/setup') @@ -53,12 +56,12 @@ export default ({ db, config }) => { } }, publicRoute(), - (req, res) => { + (_req, res) => { res.redirect('/wishlist') - } + }, ) - router.use('/api', Api({ db })) + router.use('/api', Api()) router.use('/setup', Setup({ db, ensurePfp })) diff --git a/src/routes/login/index.js b/src/routes/login/index.js index a425457c..24f24e77 100644 --- a/src/routes/login/index.js +++ b/src/routes/login/index.js @@ -4,26 +4,24 @@ import express from 'express' export default function ({ config }) { const router = express.Router() - router.get('/', - (req, res) => { - if (req.isAuthenticated()) { - res.redirect('/') - } else { - res.render('login', { oidcEnabled: config.oidcEnabled }) - } + router.get('/', (req, res) => { + if (req.isAuthenticated()) { + res.redirect('/') + } else { + res.render('login', { oidcEnabled: config.oidcEnabled }) } - ) + }) router.post( '/', - (req, res, next) => { + (_req, _res, next) => { next() }, passport.authenticate('local', { successRedirect: '/', failureRedirect: '/login', - failureFlash: 'Invalid username or password' - }) + failureFlash: 'Invalid username or password', + }), ) return router } diff --git a/src/routes/logout/index.js b/src/routes/logout/index.js index 1e78e2a2..b29dc54b 100644 --- a/src/routes/logout/index.js +++ b/src/routes/logout/index.js @@ -4,7 +4,7 @@ import express from 'express' export default function () { const router = express.Router() - router.get('/', verifyAuth(), (req, res) => res.render('logout')) + router.get('/', verifyAuth(), (_req, res) => res.render('logout')) router.post('/', (req, res) => { req.logout() res.redirect('/') diff --git a/src/routes/manifest.json/index.js b/src/routes/manifest.json/index.js index 99834897..b925e4fb 100644 --- a/src/routes/manifest.json/index.js +++ b/src/routes/manifest.json/index.js @@ -3,7 +3,7 @@ import express from 'express' export default function ({ config }) { const router = express.Router() - router.get('/', (req, res) => { + router.get('/', (_req, res) => { res.send({ name: config.siteTitle, short_name: config.shortTitle, @@ -15,9 +15,9 @@ export default function ({ config }) { icons: [ { sizes: '1280x1280', - src: `${_CC.config.base}img/logo.png` - } - ] + src: `${_CC.config.base}img/logo.png`, + }, + ], }) }) diff --git a/src/routes/oidc/index.js b/src/routes/oidc/index.js index 1497cbf9..097db840 100644 --- a/src/routes/oidc/index.js +++ b/src/routes/oidc/index.js @@ -4,30 +4,40 @@ import express from 'express' export default function ({ db }) { const router = express.Router() - router.get('/', passport.authenticate('oidc-login', { - scope: ['openid', 'profile'] - })) + router.get( + '/', + passport.authenticate('oidc-login', { + scope: ['openid', 'profile'], + }), + ) // Callback route once OIDC has authenticated the user - router.get('/redirect', + router.get( + '/redirect', passport.authenticate('oidc-login', { successRedirect: '/', failureRedirect: '/login', failureMessage: 'Unable to sign-in using OIDC', - failureFlash: true - }) - + failureFlash: true, + }), ) - router.get('/link', passport.authenticate('oidc-link', { - scope: ['profile'] - })) + router.get( + '/link', + passport.authenticate('oidc-link', { + scope: ['profile'], + }), + ) - router.get('/link/redirect', - passport.authenticate('oidc-link', { failureRedirect: '/profile', failureFlash: true }), - (req, res) => { + router.get( + '/link/redirect', + passport.authenticate('oidc-link', { + failureRedirect: '/profile', + failureFlash: true, + }), + (_req, res) => { res.redirect('/profile') - } + }, ) router.get('/unlink', async (req, res) => { @@ -36,7 +46,7 @@ export default function ({ db }) { delete doc.oauthConnections.oidc await db.put(doc) req.flash('success', _CC.lang('LOGIN_SSO_UNLINK_SUCCESS')) - } catch (err) { + } catch (_err) { req.flash('error', _CC.lang('LOGIN_SSO_UNLINK_FAILURE')) } res.redirect('/profile') diff --git a/src/routes/profile/index.js b/src/routes/profile/index.js index a7e17eb3..3d55ed22 100644 --- a/src/routes/profile/index.js +++ b/src/routes/profile/index.js @@ -5,7 +5,7 @@ import express from 'express' import path from 'path' import fs from 'fs' -export default function ({ db, config, ensurePfp }) { +export default function ({ db, ensurePfp }) { const router = express.Router() router.get('/', verifyAuth(), async (req, res) => { @@ -14,9 +14,15 @@ export default function ({ db, config, ensurePfp }) { }) const INFO_KEYS = [ - 'shoeSize', 'ringSize', 'dressSize', - 'sweaterSize', 'shirtSize', 'pantsSize', - 'coatSize', 'hatSize', 'phoneModel' + 'shoeSize', + 'ringSize', + 'dressSize', + 'sweaterSize', + 'shirtSize', + 'pantsSize', + 'coatSize', + 'hatSize', + 'phoneModel', ] router.post('/info', verifyAuth(), async (req, res) => { if (!req.user.info) { @@ -34,7 +40,9 @@ export default function ({ db, config, ensurePfp }) { router.get('/password', verifyAuth(), async (req, res) => { await ensurePfp(req.user._id) - res.render('profile-password', { title: _CC.lang('PROFILE_PASSWORD_TITLE', req.user._id) }) + res.render('profile-password', { + title: _CC.lang('PROFILE_PASSWORD_TITLE', req.user._id), + }) }) router.post('/password', verifyAuth(), (req, res) => { @@ -52,16 +60,20 @@ export default function ({ db, config, ensurePfp }) { bcrypt.hash(req.body.newPassword, null, null, (err, hash) => { if (err) throw err db.get(req.user._id) - .then(doc => { + .then((doc) => { doc.password = hash db.put(doc) .then(() => { req.flash('success', _CC.lang('PROFILE_PASSWORD_SUCCESS')) res.redirect('/profile/password') }) - .catch(err => { throw err }) + .catch((err) => { + throw err + }) + }) + .catch((err) => { + throw err }) - .catch(err => { throw err }) }) } else { req.flash('error', _CC.lang('PROFILE_PASSWORD_OLD_MISMATCH')) @@ -83,7 +95,12 @@ export default function ({ db, config, ensurePfp }) { const oldPfp = req.user.pfp // Validate file type - if (!allowedExtensions.test(path.extname(profilePicture.name).toLowerCase()) || !allowedExtensions.test(profilePicture.mimetype)) { + if ( + !allowedExtensions.test( + path.extname(profilePicture.name).toLowerCase(), + ) || + !allowedExtensions.test(profilePicture.mimetype) + ) { req.flash('error', _CC.lang('PROFILE_PFP_UPLOAD_FILE_TYPE')) return res.redirect('/profile') } @@ -113,7 +130,9 @@ export default function ({ db, config, ensurePfp }) { try { // Delete old profile picture if it exists await fs.promises.unlink(path.join(_CC.uploadDir, oldPfp.file)) - } catch {} + } catch { + // Probably didn't exist + } } res.redirect('/profile') diff --git a/src/routes/resetpw/index.js b/src/routes/resetpw/index.js index b636132a..8554bb80 100644 --- a/src/routes/resetpw/index.js +++ b/src/routes/resetpw/index.js @@ -5,19 +5,20 @@ export default function (db) { const router = express.Router() router.get('/:code', async (req, res) => { - const row = (await db.allDocs({ include_docs: true })) - .rows - .find(({ doc }) => doc.pwToken === req.params.code) + const row = (await db.allDocs({ include_docs: true })).rows.find( + ({ doc }) => doc.pwToken === req.params.code, + ) res.render('resetpw', { doc: row ? row.doc : undefined }) }) router.post('/:code', async (req, res) => { - const { doc } = (await db.allDocs({ include_docs: true })) - .rows - .find(({ doc }) => doc.pwToken === req.params.code) + const { doc } = (await db.allDocs({ include_docs: true })).rows.find( + ({ doc }) => doc.pwToken === req.params.code, + ) - if (doc.expiry < new Date().getTime()) return res.redirect(`/resetpw/${req.params.code}`) + if (doc.expiry < new Date().getTime()) + return res.redirect(`/resetpw/${req.params.code}`) bcrypt.hash(req.body.password, null, null, async (err, passwordHash) => { if (err) throw err @@ -28,7 +29,7 @@ export default function (db) { await db.put(doc) - req.login({ _id: doc._id }, err => { + req.login({ _id: doc._id }, (err) => { if (err) { console.log(err) req.flash('error', err.message) diff --git a/src/routes/setup/index.js b/src/routes/setup/index.js index ad03e3a0..ed66ae31 100644 --- a/src/routes/setup/index.js +++ b/src/routes/setup/index.js @@ -4,41 +4,42 @@ import express from 'express' export default function ({ db, ensurePfp }) { const router = express.Router() - router.get('/', - async (req, res) => { - const dbInfo = await db.info() - if (dbInfo.doc_count === 0) { - res.render('setup', { title: _CC.lang('SETUP_HEADER') }) - } else { - res.redirect('/') - } + router.get('/', async (_req, res) => { + const dbInfo = await db.info() + if (dbInfo.doc_count === 0) { + res.render('setup', { title: _CC.lang('SETUP_HEADER') }) + } else { + res.redirect('/') } - ) + }) - router.post('/', - async (req, res) => { - const dbInfo = await db.info() - if (dbInfo.doc_count === 0) { - const username = req.body.adminUsername.trim() - await new Promise((resolve, reject) => { - bcrypt.hash(req.body.adminPassword, null, null, (err, adminPasswordHash) => { + router.post('/', async (req, res) => { + const dbInfo = await db.info() + if (dbInfo.doc_count === 0) { + const username = req.body.adminUsername.trim() + await new Promise((resolve, _reject) => { + bcrypt.hash( + req.body.adminPassword, + null, + null, + (err, adminPasswordHash) => { if (err) throw err db.put({ _id: username, password: adminPasswordHash, admin: true, wishlist: [], - oauthConnections: {} + oauthConnections: {}, }) resolve() - }) - }) - await ensurePfp(username) - } - - res.redirect('/') + }, + ) + }) + await ensurePfp(username) } - ) + + res.redirect('/') + }) return router } diff --git a/src/routes/supported-sites/index.js b/src/routes/supported-sites/index.js index 174ba58b..83968860 100644 --- a/src/routes/supported-sites/index.js +++ b/src/routes/supported-sites/index.js @@ -3,7 +3,7 @@ import express from 'express' export default function () { const router = express.Router() - router.get('/', async (req, res) => { + router.get('/', async (_req, res) => { res.render('supported-sites', { title: _CC.lang('SUPPORTED_SITES_HEADER') }) }) diff --git a/src/routes/wishlist/index.js b/src/routes/wishlist/index.js index 04253c74..6c2b4659 100644 --- a/src/routes/wishlist/index.js +++ b/src/routes/wishlist/index.js @@ -9,10 +9,10 @@ import verifyAuth from '../../middlewares/verifyAuth.js' const window = new JSDOM('').window const DOMPurify = createDOMPurify(window) -const totals = wishlist => { +const totals = (wishlist) => { let unpledged = 0 let pledged = 0 - wishlist.forEach(wishItem => { + wishlist.forEach((wishItem) => { if (wishItem.pledgedBy) pledged += 1 else unpledged += 1 }) @@ -24,17 +24,21 @@ export default function (db) { const wishlistManager = _CC.wishlistManager - router.get('/', publicRoute(), async (req, res) => { + router.get('/', publicRoute(), async (_req, res) => { const docs = await db.allDocs({ include_docs: true }) if (global._CC.config.wishlist.singleList) { for (const row of docs.rows) { if (row.doc.admin) return res.redirect(`/wishlist/${row.doc._id}`) } } - res.render('wishlists', { title: _CC.lang('WISHLISTS_TITLE'), users: docs.rows, totals }) + res.render('wishlists', { + title: _CC.lang('WISHLISTS_TITLE'), + users: docs.rows, + totals, + }) }) - async function redirectIfSingleUserMode (req, res, next) { + async function redirectIfSingleUserMode(req, res, next) { const dbUser = await db.get(req.params.user) if (_CC.config.wishlist.singleList) { if (!dbUser.admin) { @@ -47,31 +51,36 @@ export default function (db) { next() } - router.get('/:user', publicRoute(), redirectIfSingleUserMode, async (req, res) => { - try { - const wishlist = await wishlistManager.get(req.params.user) - await wishlist.fetch() - const items = await wishlist.itemsVisibleToUser(req.user._id) - - const compiledNotes = {} - if (_CC.config.wishlist.note.markdown) { - for (const item of items) { - compiledNotes[item.id] = DOMPurify.sanitize(marked(item.note)) + router.get( + '/:user', + publicRoute(), + redirectIfSingleUserMode, + async (req, res) => { + try { + const wishlist = await wishlistManager.get(req.params.user) + await wishlist.fetch() + const items = await wishlist.itemsVisibleToUser(req.user._id) + + const compiledNotes = {} + if (_CC.config.wishlist.note.markdown) { + for (const item of items) { + compiledNotes[item.id] = DOMPurify.sanitize(marked(item.note)) + } } - } - res.render('wishlist', { - title: _CC.lang('WISHLIST_TITLE', wishlist.username), - name: wishlist.username, - items, - compiledNotes, - sharedInfo: wishlist.doc?.info ?? {} - }) - } catch (error) { - req.flash('error', error) - return res.redirect('/wishlist') - } - }) + res.render('wishlist', { + title: _CC.lang('WISHLIST_TITLE', wishlist.username), + name: wishlist.username, + items, + compiledNotes, + sharedInfo: wishlist.doc?.info ?? {}, + }) + } catch (error) { + req.flash('error', error) + return res.redirect('/wishlist') + } + }, + ) router.post('/:user', verifyAuth(), async (req, res) => { try { @@ -81,17 +90,18 @@ export default function (db) { itemUrlOrName: req.body.itemUrlOrName, suggest: req.body.suggest, note: req.body.note, - addedBy: req.user._id + addedBy: req.user._id, }) for (const error of nonFatalErrors) { req.flash('error', error) } - req.flash('success', + req.flash( + 'success', req.user._id === req.params.user ? _CC.lang('WISHLIST_ADDED_ITEM_TO_OWN_WISHLIST') - : _CC.lang('WISHLIST_PLEDGED_ITEM_FOR_USER', req.params.user) + : _CC.lang('WISHLIST_PLEDGED_ITEM_FOR_USER', req.params.user), ) } catch (error) { req.flash('error', `${error}`) @@ -158,33 +168,37 @@ export default function (db) { res.redirect(`/wishlist/${req.params.user}`) }) - router.post('/:user/move/:direction/:itemId', verifyAuth(), async (req, res) => { - try { - if (req.user._id !== req.params.user) { - throw new Error(_CC.lang('WISHLIST_MOVE_GUARD')) - } + router.post( + '/:user/move/:direction/:itemId', + verifyAuth(), + async (req, res) => { + try { + if (req.user._id !== req.params.user) { + throw new Error(_CC.lang('WISHLIST_MOVE_GUARD')) + } - const wishlist = await wishlistManager.get(req.params.user) + const wishlist = await wishlistManager.get(req.params.user) + + if (req.params.direction === 'top') { + await wishlist.moveTop(req.params.itemId) + } else if (req.params.direction === 'bottom') { + await wishlist.moveBottom(req.params.itemId) + } else if (req.params.direction === 'up') { + await wishlist.move(req.params.itemId, -1) + } else if (req.params.direction === 'down') { + await wishlist.move(req.params.itemId, 1) + } else { + throw new Error(_CC.lang('WISHLIST_MOVE_UNKNOWN_DIRECTION')) + } - if (req.params.direction === 'top') { - await wishlist.moveTop(req.params.itemId) - } else if (req.params.direction === 'bottom') { - await wishlist.moveBottom(req.params.itemId) - } else if (req.params.direction === 'up') { - await wishlist.move(req.params.itemId, -1) - } else if (req.params.direction === 'down') { - await wishlist.move(req.params.itemId, 1) - } else { - throw new Error(_CC.lang('WISHLIST_MOVE_UNKNOWN_DIRECTION')) + req.flash('success', _CC.lang('WISHLIST_MOVE_SUCCESS')) + } catch (error) { + req.flash('error', `${error}`) } - req.flash('success', _CC.lang('WISHLIST_MOVE_SUCCESS')) - } catch (error) { - req.flash('error', `${error}`) - } - - res.redirect(`/wishlist/${req.params.user}`) - }) + res.redirect(`/wishlist/${req.params.user}`) + }, + ) router.get('/:user/note/:id', verifyAuth(), async (req, res) => { try { diff --git a/src/static/css/main.css b/src/static/css/main.css index 0b4dfdd9..2897dd41 100644 --- a/src/static/css/main.css +++ b/src/static/css/main.css @@ -24,18 +24,61 @@ ul.noStyle li { list-style-type: none; } -/* This is mostly stolen from Buefy */ @media screen and (max-width: 768px) { - .table.has-mobile-cards thead { display: none } - .table.has-mobile-cards tfoot th { border: 0; display: inherit } - .table.has-mobile-cards tr { box-shadow: 0 2px 3px hsla(0,0%,4%,.1),0 0 0 1px hsla(0,0%,4%,.1); max-width: 100%; position: relative; display: block } - .table.has-mobile-cards tr td { border: 0; display: inherit } - .table.has-mobile-cards tr td:last-child { border-bottom: 0 } - .table.has-mobile-cards tr:not(:last-child) { margin-bottom: 1rem } - .table.has-mobile-cards tr:not([class*=is-]) { background: inherit } - .table.has-mobile-cards tr:not([class*=is-]):hover { background-color: inherit } - .table.has-mobile-cards tr.detail { margin-top: -1rem } - .table.has-mobile-cards tr:not(.detail):not(.is-empty):not(.table-footer) td { display: -ms-flexbox; display: flex; width: auto; -ms-flex-pack: end; justify-content: flex-end; text-align: right; border-bottom: 1px solid #f5f5f5 } - .table.has-mobile-cards tr:not(.detail):not(.is-empty):not(.table-footer) td:before { content: attr(data-label); font-weight: 600; margin-right: auto; padding-right: .5em; text-align: left; word-break: keep-all; } +/* This is mostly stolen from Buefy */ +@media screen and (max-width: 768px) { + .table.has-mobile-cards thead { + display: none; + } + .table.has-mobile-cards tfoot th { + border: 0; + display: inherit; + } + .table.has-mobile-cards tr { + box-shadow: + 0 2px 3px hsla(0, 0%, 4%, 0.1), + 0 0 0 1px hsla(0, 0%, 4%, 0.1); + max-width: 100%; + position: relative; + display: block; + } + .table.has-mobile-cards tr td { + border: 0; + display: inherit; + } + .table.has-mobile-cards tr td:last-child { + border-bottom: 0; + } + .table.has-mobile-cards tr:not(:last-child) { + margin-bottom: 1rem; + } + .table.has-mobile-cards tr:not([class*='is-']) { + background: inherit; + } + .table.has-mobile-cards tr:not([class*='is-']):hover { + background-color: inherit; + } + .table.has-mobile-cards tr.detail { + margin-top: -1rem; + } + .table.has-mobile-cards tr:not(.detail):not(.is-empty):not(.table-footer) td { + display: -ms-flexbox; + display: flex; + width: auto; + -ms-flex-pack: end; + justify-content: flex-end; + text-align: right; + border-bottom: 1px solid #f5f5f5; + } + .table.has-mobile-cards + tr:not(.detail):not(.is-empty):not(.table-footer) + td:before { + content: attr(data-label); + font-weight: 600; + margin-right: auto; + padding-right: 0.5em; + text-align: left; + word-break: keep-all; + } } .ugc { @@ -44,24 +87,28 @@ ul.noStyle li { } img.emoji { - margin: 0px !important; - vertical-align: middle; - width: 2em !important; - height: 2em !important; + margin: 0px !important; + vertical-align: middle; + width: 2em !important; + height: 2em !important; } img.logo-image { - margin-right: .5em; + margin-right: 0.5em; } .print { - display: none; + display: none; } @media print { - .notprint { display: none; } - .print { display: block; } + .notprint { + display: none; + } + .print { + display: block; + } } .print-gift:last-child { - margin-bottom: 0; -} \ No newline at end of file + margin-bottom: 0; +} diff --git a/src/static/js/profile.js b/src/static/js/profile.js index e3a0e5b6..d7cb4456 100644 --- a/src/static/js/profile.js +++ b/src/static/js/profile.js @@ -1,5 +1,4 @@ document.querySelector('.upload-pfp-no-js').remove() - ;(() => { const uploadPfp = document.querySelector('.upload-pfp-yes-js') uploadPfp.classList.remove('is-hidden') diff --git a/src/static/js/wishlist.js b/src/static/js/wishlist.js index 07ae70d0..1f04a4c5 100644 --- a/src/static/js/wishlist.js +++ b/src/static/js/wishlist.js @@ -1,9 +1,9 @@ /* eslint-env browser */ -async function animateCSS (node, animationName) { - return await new Promise(resolve => { +async function animateCSS(node, animationName) { + return await new Promise((resolve) => { node.classList.add('animated', animationName) - function handleAnimationEnd () { + function handleAnimationEnd() { node.classList.remove('animated', animationName) node.removeEventListener('animationend', handleAnimationEnd) @@ -16,15 +16,19 @@ async function animateCSS (node, animationName) { // These move function are stolen from // https://stackoverflow.com/a/34914096 -function moveUp (element) { - if (element.previousElementSibling) { element.parentNode.insertBefore(element, element.previousElementSibling) } +function moveUp(element) { + if (element.previousElementSibling) { + element.parentNode.insertBefore(element, element.previousElementSibling) + } } -function moveDown (element) { - if (element.nextElementSibling) { element.parentNode.insertBefore(element.nextElementSibling, element) } +function moveDown(element) { + if (element.nextElementSibling) { + element.parentNode.insertBefore(element.nextElementSibling, element) + } } -function listen (element, upOrDown) { - element.addEventListener('submit', async event => { +function listen(element, upOrDown) { + element.addEventListener('submit', async (event) => { try { event.preventDefault() @@ -32,14 +36,17 @@ function listen (element, upOrDown) { const otherTr = upOrDown === 'up' ? tr.previousSibling : tr.nextSibling const numItems = tr.parentElement.rows.length - const res = fetch(`/api/wishlist/${document.querySelector('[type="data/user_id"]').textContent}/${tr.id}/move/${upOrDown}`, { - method: 'post', - credentials: 'include' - }) + const res = fetch( + `/api/wishlist/${document.querySelector('[type="data/user_id"]').textContent}/${tr.id}/move/${upOrDown}`, + { + method: 'post', + credentials: 'include', + }, + ) await Promise.all([ animateCSS(tr, 'zoomOut'), - animateCSS(otherTr, 'zoomOut') + animateCSS(otherTr, 'zoomOut'), ]) tr.style.visibility = 'hidden' @@ -62,12 +69,15 @@ function listen (element, upOrDown) { rankEl2.textContent = rankNum2 - 1 } - for (const tr of document.querySelector('tbody.wishlist-items').children) { + for (const tr of document.querySelector('tbody.wishlist-items') + .children) { const rank = Number(tr.querySelector('.rank').textContent) tr.querySelector('.upForm > div > div > button').disabled = rank === 1 tr.querySelector('.topForm > div > div > button').disabled = rank === 1 - tr.querySelector('.downForm > div > div > button').disabled = rank === numItems - tr.querySelector('.bottomForm > div > div > button').disabled = rank === numItems + tr.querySelector('.downForm > div > div > button').disabled = + rank === numItems + tr.querySelector('.bottomForm > div > div > button').disabled = + rank === numItems } tr.style.visibility = 'visible' @@ -75,7 +85,7 @@ function listen (element, upOrDown) { await Promise.all([ animateCSS(tr, 'zoomIn'), - animateCSS(otherTr, 'zoomIn') + animateCSS(otherTr, 'zoomIn'), ]) return false @@ -88,11 +98,15 @@ function listen (element, upOrDown) { } setTimeout(() => { - document.querySelectorAll('.upForm').forEach(element => { listen(element, 'up') }) - document.querySelectorAll('.downForm').forEach(element => { listen(element, 'down') }) + document.querySelectorAll('.upForm').forEach((element) => { + listen(element, 'up') + }) + document.querySelectorAll('.downForm').forEach((element) => { + listen(element, 'down') + }) }, 0) -function priceToFloat (input) { +function priceToFloat(input) { let cleanedInput = input.replace(/[^\d.,-]/g, '') // Handle European decimal format where comma is used as decimal separator @@ -116,7 +130,7 @@ document.addEventListener('DOMContentLoaded', () => { const priceArrow = document.getElementById('price-arrow') const sortByPrice = document.getElementById('sort-price') - function updateArrow (column, order) { + function updateArrow(column, order) { if (column === 'price') { priceArrow.className = order === 'rank' ? '' : 'fas fa-arrow-down' } @@ -145,7 +159,7 @@ document.addEventListener('DOMContentLoaded', () => { }) tbody.innerHTML = '' - sortedRows.forEach(row => tbody.appendChild(row)) + sortedRows.forEach((row) => tbody.appendChild(row)) updateArrow('price', sortBy) }) }) diff --git a/src/structures/Wishlist.js b/src/structures/Wishlist.js index 260d3079..3866fa3c 100644 --- a/src/structures/Wishlist.js +++ b/src/structures/Wishlist.js @@ -2,17 +2,17 @@ import getProductData from 'get-product-name' import u64 from 'u64' export class Wishlist { - static async new (username) { + static async new(username) { const instance = new this({ username }) await instance.fetch() return instance } - constructor (opts) { + constructor(opts) { this.username = opts.username } - async fetch () { + async fetch() { try { this.doc = await _CC.usersDb.get(this.username) } catch { @@ -21,7 +21,7 @@ export class Wishlist { this.items = this.doc.wishlist } - async save () { + async save() { try { const { rev } = await _CC.usersDb.put(this.doc) this.doc._rev = rev @@ -31,29 +31,28 @@ export class Wishlist { } } - async get (id) { - const item = this.items.find(item => item.id === id) + async get(id) { + const item = this.items.find((item) => item.id === id) if (!item) throw new Error(_CC.lang('WISHLIST_ITEM_MISSING')) return item } - async itemsVisibleToUser (username) { + async itemsVisibleToUser(username) { const addedBySelfAtTop = async (items) => { return [ - ...items.filter(item => item.addedBy === this.username), - ...items.filter(item => item.addedBy !== this.username) + ...items.filter((item) => item.addedBy === this.username), + ...items.filter((item) => item.addedBy !== this.username), ] } if (this.username === username) { - return this.items - .filter(item => item.addedBy === username) + return this.items.filter((item) => item.addedBy === username) } return await addedBySelfAtTop(this.items) } - async add ({ itemUrlOrName, suggest, note, addedBy }) { + async add({ itemUrlOrName, suggest, note, addedBy }) { if (!itemUrlOrName) { throw new Error(_CC.lang('WISHLIST_URL_REQUIRED')) } @@ -72,11 +71,11 @@ export class Wishlist { } item.id = u64.encode(new Date().getTime().toString()) - item.name = (productData ? productData.name : '') + item.name = productData ? productData.name : '' item.price = productData?.price item.image = productData?.image item.addedBy = addedBy - item.pledgedBy = (addedBy === this.username || suggest ? undefined : addedBy) + item.pledgedBy = addedBy === this.username || suggest ? undefined : addedBy item.note = note if (url) item.url = url @@ -88,39 +87,47 @@ export class Wishlist { return { nonFatalErrors } } - async remove (id) { - const index = this.items.findIndex(item => item.id === id) + async remove(id) { + const index = this.items.findIndex((item) => item.id === id) if (index === -1) throw new Error(_CC.lang('WISHLIST_ITEM_MISSING')) this.items.splice(index, 1) await this.save() } - async pledge (id, user) { + async pledge(id, user) { const item = await this.get(id) item.pledgedBy = user await this.save() } - async unpledge (id) { + async unpledge(id) { const item = await this.get(id) item.pledgedBy = undefined await this.save() } - async move (id, places) { + async move(id, places) { if (places === 0) throw new Error('places should never be 0') - const index = this.items.findIndex(item => item.id === id) + const index = this.items.findIndex((item) => item.id === id) if (index === -1) throw new Error(_CC.lang('WISHLIST_ITEM_MISSING')) - while (this.items[index + places] && this.items[index + places].addedBy !== this.username) { + while ( + this.items[index + places] && + this.items[index + places].addedBy !== this.username + ) { if (places < 0) { places-- } else { places++ } } - if (index < 0 || index >= this.items.length || index + places < 0 || index + places >= this.items.length) { + if ( + index < 0 || + index >= this.items.length || + index + places < 0 || + index + places >= this.items.length + ) { throw new Error(_CC.lang('WISHLIST_MOVE_INVALID')) } @@ -129,8 +136,8 @@ export class Wishlist { await this.save() } - async moveTop (id) { - const index = this.items.findIndex(item => item.id === id) + async moveTop(id) { + const index = this.items.findIndex((item) => item.id === id) if (index === -1) throw new Error(_CC.lang('WISHLIST_ITEM_MISSING')) const item = this.items.splice(index, 1)[0] @@ -138,8 +145,8 @@ export class Wishlist { await this.save() } - async moveBottom (id) { - const index = this.items.findIndex(item => item.id === id) + async moveBottom(id) { + const index = this.items.findIndex((item) => item.id === id) if (index === -1) throw new Error(_CC.lang('WISHLIST_ITEM_MISSING')) const item = this.items.splice(index, 1)[0] @@ -147,12 +154,10 @@ export class Wishlist { await this.save() } - async setItemData (id, data) { + async setItemData(id, data) { const item = await this.get(id) - for (const key of [ - 'name', 'note', 'url', 'price', 'image' - ]) { + for (const key of ['name', 'note', 'url', 'price', 'image']) { if (!Object.prototype.hasOwnProperty.call(data, key)) { throw new Error(_CC.lang('NOTE_MISSING_PROP', key)) } @@ -162,7 +167,7 @@ export class Wishlist { await this.save() } - async refreshItemData (id) { + async refreshItemData(id) { const item = await this.get(id) if (!item.url) { @@ -180,9 +185,11 @@ export class Wishlist { } } -function parseURL (string) { +function parseURL(string) { try { const url = new URL(string) if (url) return url - } catch {} + } catch { + // Not a valid URL + } } diff --git a/src/structures/WishlistManager.js b/src/structures/WishlistManager.js index 3c69b131..e523fccc 100644 --- a/src/structures/WishlistManager.js +++ b/src/structures/WishlistManager.js @@ -1,11 +1,11 @@ import { Wishlist } from './Wishlist.js' export class WishlistManager { - constructor () { + constructor() { this.wishlistsCache = new Map() } - async get (username) { + async get(username) { const cached = this.wishlistsCache.get(username) if (cached) return cached @@ -14,7 +14,7 @@ export class WishlistManager { return wishlist } - async clearCache () { + async clearCache() { this.wishlistsCache = new Map() } } diff --git a/tsconfig.json b/tsconfig.json index 13d30d57..be189148 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -8,4 +8,4 @@ "skipLibCheck": true }, "include": ["./src/**/*"] -} \ No newline at end of file +}